-/* dialog which is called for each bought item */
-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 *input;
- char nickname[11];
- struct credits_t *credit;
-
- if (n >= status.num_items || status.status[n].item_name == NULL) {
- cprintf("FEHLER: Diese Einheit existiert nicht.\r\n");
- get_input();
- 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");
- 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)status.status[n].price * einheiten)) {
- cprintf("Sorry, %s hat nicht genug Geld :-(\r\n", nickname);
- get_input();
- return;
- }
- /* substract money */
- credit->credit -= (status.status[n].price * einheiten);
- cprintf("\r\nVerbleibendes Guthaben fuer %s: %d Cents. Druecke RETURN...\r\n",
- nickname, credit->credit);
- toggle_videomode();
- cprintf("\r\nDein verbleibendes Guthaben betraegt %d Cents.\r\n", credit->credit);
- toggle_videomode();
- get_input();
- matches++;
- } else {
- 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 = '\0';
- }
-
- status.status[n].times_sold += einheiten;
- money += status.status[n].price * einheiten;
- items_sold += einheiten;
- if (printing == 1)
- print_log(n, einheiten, nickname);
+void buy_custom(void) {
+ char name[MAX_ITEM_NAME_LENGTH + 1];
+ int price;
+
+ clrscr();
+ cprintf("\r\nWas soll gekauft werden?\r\n");
+ if (cgetn_input(name, sizeof(name)) == 0)
+ return;
+
+ cprintf("\r\nWie teuer ist \"%s\" (in cents)?\r\n", name);
+
+ price = cget_number(0);
+
+ if (price == 0) {
+ cprintf("Kauf abgebrochen, dr" uUML "cke RETURN...\r\n");
+ cget_return();
+ return;
+ }
+
+ buy(name, price);