-/* dialog which is called for each bought item */
-static signed int buy(char *name, unsigned int price) {
- int negative = 1;
- char entered[5] = {'1', 0, 0, 0, 0};
- BYTE i = 0, matches = 0;
- BYTE c, nickname_len;
- int einheiten;
- char *input;
- char nickname[11];
- char rest[9];
- struct credits_t *credit;
-
- memset(rest, ' ', sizeof(rest));
- rest[8] = '\0';
-
- cprintf("Wieviel Einheiten \"%s\"? [1] \r\n", name);
- while (1) {
- c = getchar();
- if (c == 13)
- break;
- else if (c == 27) {
- cprintf("Kauf abgebrochen, druecke RETURN...\r\n");
- get_input();
- return 1;
- } else if (c == '-' && i == 0)
- negative = -1;
- else if (c > 47 && c < 58)
- entered[i++] = c;
- }
- einheiten = atoi(entered) * negative;
-
- toggle_videomode();
- cprintf("%dx %s fuer ", einheiten, name);
- toggle_videomode();
-
- cprintf("\r\nAuf ein Guthaben kaufen? Wenn ja, Nickname eingeben:\r\n");
- input = get_input();
- strncpy(nickname, input, 11);
- if (*nickname != '\0') {
- toggle_videomode();
- cprintf("%s\r\n", nickname);
- toggle_videomode();
- }
-
- if (nickname != NULL && *nickname != '\0' && *nickname != 32) {
- nickname_len = strlen(nickname);
- /* 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) {
- if ((signed int)credit->credit < ((signed int)price * einheiten)) {
- cprintf("Sorry, %s hat nicht genug Geld :-(\r\n", nickname);
- get_input();
- return 0;
- }
- /* substract money */
- credit->credit -= (price * einheiten);
-
- if (format_euro(rest, 10, credit->credit) == NULL) {
- cprintf("Preis %d konnte nicht umgerechnet werden\r\n", credit->credit);
- exit(1);
- }
-
- cprintf("\r\nVerbleibendes Guthaben fuer %s: %s. Druecke RETURN...\r\n",
- nickname, rest);
- toggle_videomode();
- cprintf("\r\nDein verbleibendes Guthaben betraegt %s.\r\n", rest);
- toggle_videomode();
- get_input();
- matches++;
- } else {
- cprintf("\r\nNickname nicht gefunden in der Guthabenverwaltung! Abbruch, druecke RETURN...\r\n");
- get_input();
- return 0;
- }
- } else {
- /* Ensure that nickname is NULL if it's empty because it's used in print_log */
- *nickname = '\0';
- }
-
- money += price * einheiten;
- items_sold += einheiten;
- if (printing == 1)
- print_log(name, price, einheiten, nickname, rest);
-
- return einheiten;
-}