+
+/**
+ * \brief Donate money to the club
+ */
+int Dispense_Donate(int Socket, int Ammount, const char *Reason)
+{
+ char *buf;
+ int responseCode;
+
+ if( Ammount < 0 ) {
+ printf("Sorry, you can only give, you can't take.\n");
+ return -1;
+ }
+
+ // Fast return on zero
+ if( Ammount == 0 ) {
+ printf("Are you actually going to give any?\n");
+ return 0;
+ }
+
+ sendf(Socket, "DONATE %i %s\n", Ammount, Reason);
+ buf = ReadLine(Socket);
+
+ responseCode = atoi(buf);
+ free(buf);
+
+ switch(responseCode)
+ {
+ case 200: return 0; // OK
+
+ case 402:
+ fprintf(stderr, "Insufficient balance\n");
+ return 1;
+
+ default:
+ fprintf(stderr, "Unknown response code %i\n", responseCode);
+ return -1;
+ }
+
+ return -1;
+}
+
+/**
+ * \brief Enumerate users
+ */
+int Dispense_EnumUsers(int Socket)
+{
+ char *buf;
+ int responseCode;
+ int nUsers;
+ regmatch_t matches[4];
+
+ if( giMinimumBalance != INT_MIN ) {
+ if( giMaximumBalance != INT_MAX ) {
+ sendf(Socket, "ENUM_USERS min_balance:%i max_balance:%i\n", giMinimumBalance, giMaximumBalance);
+ }
+ else {
+ sendf(Socket, "ENUM_USERS min_balance:%i\n", giMinimumBalance);
+ }
+ }
+ else {
+ if( giMaximumBalance != INT_MAX ) {
+ sendf(Socket, "ENUM_USERS max_balance:%i\n", giMaximumBalance);
+ }
+ else {
+ sendf(Socket, "ENUM_USERS\n");
+ }
+ }
+ buf = ReadLine(Socket);
+ responseCode = atoi(buf);
+
+ switch(responseCode)
+ {
+ case 201: break; // Ok, length follows
+
+ default:
+ fprintf(stderr, "Unknown response code %i\n%s\n", responseCode, buf);
+ free(buf);
+ return -1;
+ }
+
+ // Get count (not actually used)
+ RunRegex(&gArrayRegex, buf, 4, matches, "Malformed server response");
+ nUsers = atoi( buf + matches[3].rm_so );
+ printf("%i users returned\n", nUsers);
+
+ // Free string
+ free(buf);
+
+ // Read returned users
+ do {
+ buf = ReadLine(Socket);
+ responseCode = atoi(buf);
+
+ if( responseCode != 202 ) break;
+
+ _PrintUserLine(buf);
+ free(buf);
+ } while(responseCode == 202);
+
+ // Check final response
+ if( responseCode != 200 ) {
+ fprintf(stderr, "Unknown response code %i\n%s\n", responseCode, buf);
+ free(buf);
+ return -1;
+ }
+
+ free(buf);
+
+ return 0;
+}
+