-/* Dialog, der einen durch's Abrechnen der Einträge führt */
-void buy(BYTE n) {
- int negative = 1;
- char entered[5] = {'1', 0, 0, 0, 0};
- BYTE i = 0, matches = 0;
- BYTE c, nickname_len;
- int einheiten;
- char *nickname;
-
- if (status.status[n].item_name == NULL) {
- cprintf("FEHLER: Diese Einheit existiert nicht.\r\n");
- return;
- }
- cprintf("Wieviel Einheiten \"%s\"? [1] \r\n", status.status[n].item_name);
- while (1) {
- c = getchar();
- if (c == 13)
- break;
- else if (c == 27) {
- cprintf("Kauf abgebrochen, druecke RETURN...\r\n");
- get_input();
- return;
- } 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, status.status[n].item_name);
- toggle_videomode();
-
- cprintf("\r\nAuf ein Guthaben kaufen? Wenn ja, Nickname eingeben:\r\n");
- nickname = get_input();
- 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 */
- for (c = 0; c < credits.num_items; ++c)
- if (strncmp(nickname, credits.credits[c].nickname, nickname_len) == 0) {
- if ((signed int)credits.credits[c].credit < ((signed int)status.status[n].price * einheiten)) {
- cprintf("Sorry, %s hat nicht genug Geld :-(\r\n", nickname);
- return;
- }
- /* Geld abziehen */
- credits.credits[c].credit -= (status.status[n].price * einheiten);
- cprintf("\r\nVerbleibendes Guthaben fuer %s: %d Cents. Druecke RETURN...\r\n",
- nickname, credits.credits[c].credit);
- toggle_videomode();
- cprintf("\r\nDein verbleibendes Guthaben betraegt %d Cents.\r\n", credits.credits[c].credit);
- toggle_videomode();
- get_input();
- matches++;
- break;
- }
- if (matches == 0) {
- cprintf("\r\nNickname nicht gefunden in der Guthabenverwaltung! Abbruch, druecke RETURN...\r\n");
- get_input();
- return;
- }
- } else {
- /* Ensure that nickname is NULL if it's empty because it's used in print_log */
- nickname = NULL;
- }
-
- status.status[n].times_sold += einheiten;
- money += status.status[n].price * einheiten;
- items_sold += einheiten;
- if (printing == 1)
- print_log(n, einheiten, nickname);