+ //
+ // `dispense give`
+ // - "Here, have some money."
+ else if( strcmp(arg, "give") == 0 )
+ {
+ if( i + 3 >= argc ) {
+ fprintf(stderr, "`dispense give` takes three arguments\n");
+ ShowUsage();
+ return -1;
+ }
+ // TODO: `dispense give`
+
+ // argv[i+1]: Destination
+ // argv[i+2]: Ammount
+ // argv[i+3]: Reason
+
+ // Connect to server
+ sock = OpenConnection(gsDispenseServer, giDispensePort);
+ if( sock < 0 ) return -1;
+
+ // Authenticate
+ if( Authenticate(sock) )
+ return -1;
+
+ Dispense_Give(sock, argv[i+1], atoi(argv[i+2]), argv[i+3]);
+ return 0;
+ }
+ //
+ // `dispense user`
+ // - User administration (Wheel Only)
+ else if( strcmp(arg, "user") == 0 )
+ {
+ // Check argument count
+ if( i + 1 >= argc ) {
+ fprintf(stderr, "Error: `dispense user` requires arguments\n");
+ ShowUsage();
+ exit(1);
+ }
+
+ // Connect to server
+ sock = OpenConnection(gsDispenseServer, giDispensePort);
+ if( sock < 0 ) return -1;
+
+ // Attempt authentication
+ if( Authenticate(sock) )
+ return -1;
+
+ // Add new user?
+ if( strcmp(argv[i+1], "add") == 0 )
+ {
+ if( i + 2 >= argc ) {
+ fprintf(stderr, "Error: `dispense user add` requires an argument\n");
+ ShowUsage();
+ exit(1);
+ }
+
+ Dispense_AddUser(sock, argv[i+2]);
+ }
+ // Update a user
+ else if( strcmp(argv[i+1], "type") == 0 )
+ {
+ if( i + 3 >= argc ) {
+ fprintf(stderr, "Error: `dispense user type` requires two arguments\n");
+ ShowUsage();
+ exit(1);
+ }
+
+ Dispense_SetUserType(sock, argv[i+2], argv[i+3]);
+ }
+ else
+ {
+ fprintf(stderr, "Error: Unknown sub-command for `dispense user`\n");
+ ShowUsage();
+ exit(1);
+ }
+ return 0;
+ }