2 * RGB2R-C128-Kassenprogramm
3 * (c) 2007 phil_fry, sECuRE, sur5r
4 * See LICENSE for license information
6 * itemz.c: Verwaltet die ITEMS- und CREDITS-datei
18 enum itemz_mode { MODE_ITEMS, MODE_CREDITS };
20 static enum itemz_mode mode = MODE_ITEMS;
21 static BYTE current_credits_page = 0;
23 static void print_screen() {
28 cprintf("itemz (phil_fry, sECuRE, sur5r)\r\n\r\n");
29 if (mode == MODE_ITEMS) {
30 cprintf("Datei: ITEMS\r\n\r\n");
31 for (i = 0; i < status.num_items; i++) {
32 if (format_euro(buffer, 10, status.status[i].price) != buffer) {
33 cprintf("Error: Could not format price %d\r\n", status.status[i].price);
36 cprintf("Eintrag %x: %s (%s, %d mal verkauft)\r\n",
37 i, status.status[i].item_name, buffer, status.status[i].times_sold);
39 cprintf("\r\nn) Neu d) Loeschen s) Speichern m) Modus\r\n");
41 /* 16 entries per page */
42 pages = (credits.num_items / 16);
43 if (current_credits_page > pages)
44 current_credits_page = pages;
45 cprintf("Datei: CREDITS (Seite %d von %d)\r\n\r\n", current_credits_page, pages);
46 for (i = (current_credits_page * 16); i < credits.num_items && i < ((current_credits_page+1) * 16); i++) {
47 if (format_euro(buffer, 10, credits.credits[i].credit) != buffer) {
48 cprintf("Error: Could not format credit %d\r\n", credits.credits[i].credit);
52 cprintf("%d: %s: %s\r\n", i, credits.credits[i].nickname, buffer);
54 cprintf("\r\nn) Neu d) Loeschen b) Seite hoch f) Seite runter\r\ne) Aendern s) Speichern m) Modus\r\n");
58 static void new_item() {
62 if (status.num_items == 16) {
63 cprintf("\rEs ist bereits die maximale Anzahl an Eintraegen erreicht, druecke RETURN...\r\n");
68 cprintf("\rName des Eintrags:\r\n");
69 if ((input = get_input()) == NULL || *input == '\0')
72 cprintf("\r\nPreis in Cents:\r\n");
73 if ((input = get_input()) == NULL || *input == '\0' || (price = atoi(input)) == 0)
75 cprintf("\r\nWie oft schon verkauft? [0] \r\n");
76 if ((input = get_input()) == NULL || *input == '\0')
78 strcpy(status.status[status.num_items].item_name, name);
79 status.status[status.num_items].price = price;
80 status.status[status.num_items].times_sold = atoi(input);
85 static void _delete_item(BYTE num) {
86 memset(status.status[num].item_name, '\0', 10);
87 status.status[num].price = 0;
88 status.status[num].times_sold = 0;
91 static void delete_item() {
95 cprintf("\r Welcher Eintrag soll geloescht werden?\r\n");
96 if ((input = get_input()) == NULL || *input == '\0')
99 if (status.num_items > 1) {
100 /* Swap last item with this one and delete the last one to avoid holes */
101 last = (status.num_items - 1);
102 strcpy(status.status[num].item_name, status.status[last].item_name);
103 status.status[num].price = status.status[last].price;
104 status.status[num].times_sold = status.status[last].times_sold;
113 static void new_credit() {
117 if (credits.num_items == 75) {
118 cprintf("\rEs ist bereits die maximale Anzahl an Eintraegen erreicht, druecke RETURN...\r\n");
123 cprintf("\rNickname:\r\n");
124 if ((input = get_input()) == NULL || *input == '\0')
126 name = strdup(input);
127 cprintf("\r\nGuthaben in Cents:\r\n");
128 if ((input = get_input()) == NULL || *input == '\0' || (credit = atoi(input)) == 0)
130 strcpy(credits.credits[credits.num_items].nickname, name);
131 credits.credits[credits.num_items].credit = credit;
136 static void _delete_credit(BYTE num) {
137 memset(credits.credits[num].nickname, '\0', 11);
138 credits.credits[num].credit = 0;
141 static void delete_credit() {
145 cprintf("\r Welcher Eintrag soll geloescht werden?\r\n");
146 if ((input = get_input()) == NULL || *input == '\0')
149 if (credits.num_items > 1) {
150 /* Swap last item with this one and delete the last one to avoid holes */
151 last = (credits.num_items - 1);
152 strcpy(credits.credits[num].nickname, credits.credits[last].nickname);
153 credits.credits[num].credit = credits.credits[last].credit;
154 _delete_credit(last);
165 credits.num_items = 0;
166 status.num_items = 0;
167 cprintf("itemz loading...\n");
169 cprintf("itemz: loading ITEMS...\n");
171 cprintf("itemz: loading CREDITS...\n");
176 if (mode == MODE_ITEMS) {
186 cprintf("Unbekannter Befehl, druecke RETURN...\r\n");
198 else if (*c == 'f') {
199 if (current_credits_page < (credits.num_items / 16))
200 current_credits_page++;
201 } else if (*c == 'b') {
202 if (current_credits_page > 0)
203 current_credits_page--;
206 cprintf("Unbekannter Befehl, druecke RETURN...\r\n");