+/* dialog which is called for each bought item */
+static signed int buy(char *name, unsigned int price) {
+ BYTE matches = 0;
+ BYTE c, nickname_len;
+ int einheiten;
+ char nickname[NICKNAME_MAX_LEN + 1];
+ char rest[EUR_FORMAT_MINLEN];
+ struct credits_t *credit;
+
+ clrscr();
+ cprintf("Wieviel Einheiten \"%s\"? [1] \r\n", name);
+
+ einheiten = cget_number(1);
+
+ if (einheiten > 100 || einheiten < -100 || einheiten == 0) {
+ cprintf("\r\nEinheit nicht in [-100, 100] oder 0, Abbruch, dr" uUML "cke "
+ "RETURN...\r\n");
+ cget_return();
+ return 1;
+ }
+
+ cprintf("\r\nAuf ein Guthaben kaufen? Wenn ja, Nickname eingeben:\r\n");
+ nickname_len = cget_nickname(nickname, sizeof(nickname));
+
+ if (nickname_len && *nickname != '\0' && *nickname != PETSCII_SP) {
+ /* go through credits and remove the amount of money or set nickname
+ * to NULL if no such credit could be found */
+ credit = find_credit(nickname);
+ if (credit != NULL) {
+ while ((signed int)credit->credit < ((signed int)price * einheiten)) {
+ if (format_euro(rest, sizeof(rest), credit->credit) == NULL) {
+ cprintf("Preis %d konnte nicht umgerechnet werden\r\n",
+ credit->credit);
+ exit(1);
+ }
+ cprintf(
+ "\r\n%s hat nicht genug Geld (%s). e) einzahlen a) abbruch \r\n",
+ nickname, rest);
+ c = cgetc();
+ if (c == 'e') {
+ deposit_credit(nickname);
+ } else {
+ return 0;
+ }
+ }
+ /* substract money */
+ credit->credit -= (price * einheiten);
+
+ if (format_euro(rest, sizeof(rest), credit->credit) == NULL) {
+ cprintf("Preis %d konnte nicht umgerechnet werden\r\n", credit->credit);
+ exit(1);
+ }
+
+ textcolor(TC_LIGHT_GREEN);
+ cprintf("\r\nVerbleibendes Guthaben f" uUML "r %s: %s. Dr" uUML
+ "cke RETURN...\r\n",
+ nickname, rest);
+ textcolor(TC_LIGHT_GRAY);
+ cget_return();
+ matches++;
+ } else {
+ textcolor(TC_LIGHT_RED);
+ cprintf("\r\nNickname nicht gefunden in der Guthabenverwaltung! Abbruch, "
+ "dr" uUML "cke RETURN...\r\n");
+ textcolor(TC_LIGHT_GRAY);
+ cget_return();
+ return 0;
+ }
+ }
+
+ money += price * einheiten;
+ items_sold += einheiten;
+ if (printing == 1)
+ print_log(name, price, einheiten, nickname, rest);
+
+ return einheiten;