2 * RGB2R-C128-Kassenprogramm
3 * (c) 2007 phil_fry, sECuRE, sur5r
5 * itemz.c: Verwaltet die ITEMS- und CREDITS-datei
17 enum itemz_mode { MODE_ITEMS, MODE_CREDITS };
19 static enum itemz_mode mode = MODE_ITEMS;
20 static BYTE current_credits_page = 0;
22 static void print_screen() {
27 cprintf("itemz (phil_fry, sECuRE, sur5r)\r\n\r\n");
28 if (mode == MODE_ITEMS) {
29 cprintf("Datei: ITEMS\r\n\r\n");
30 for (i = 0; i < status.num_items; i++) {
31 if (format_euro(buffer, 10, status.status[i].price) != buffer) {
32 cprintf("Error: Could not format price %d\r\n", status.status[i].price);
35 cprintf("Eintrag %x: %s (%s, %d mal verkauft)\r\n",
36 i, status.status[i].item_name, buffer, status.status[i].times_sold);
38 cprintf("\r\nn) Neu d) Loeschen s) Speichern m) Modus\r\n");
40 /* 16 entries per page */
41 pages = (credits.num_items / 16);
42 if (current_credits_page > pages)
43 current_credits_page = pages;
44 cprintf("Datei: CREDITS (Seite %d von %d)\r\n\r\n", current_credits_page, pages);
45 for (i = (current_credits_page * 16); i < credits.num_items && i < ((current_credits_page+1) * 16); i++) {
46 if (format_euro(buffer, 10, credits.credits[i].credit) != buffer) {
47 cprintf("Error: Could not format credit %d\r\n", credits.credits[i].credit);
51 cprintf("%d: %s: %s\r\n", i, credits.credits[i].nickname, buffer);
53 cprintf("\r\nn) Neu d) Loeschen b) Seite hoch f) Seite runter\r\ne) Aendern s) Speichern m) Modus\r\n");
57 static void new_item() {
61 if (status.num_items == 16) {
62 cprintf("\rEs ist bereits die maximale Anzahl an Eintraegen erreicht, druecke RETURN...\r\n");
67 cprintf("\rName des Eintrags:\r\n");
68 if ((input = get_input()) == NULL || *input == '\0')
71 cprintf("\r\nPreis in Cents:\r\n");
72 if ((input = get_input()) == NULL || *input == '\0' || (price = atoi(input)) == 0)
74 cprintf("\r\nWie oft schon verkauft? [0] \r\n");
75 if ((input = get_input()) == NULL || *input == '\0')
77 strcpy(status.status[status.num_items].item_name, name);
78 status.status[status.num_items].price = price;
79 status.status[status.num_items].times_sold = atoi(input);
84 static void _delete_item(BYTE num) {
85 memset(status.status[num].item_name, '\0', 10);
86 status.status[num].price = 0;
87 status.status[num].times_sold = 0;
90 static void delete_item() {
94 cprintf("\r Welcher Eintrag soll geloescht werden?\r\n");
95 if ((input = get_input()) == NULL || *input == '\0')
98 if (status.num_items > 1) {
99 /* Swap last item with this one and delete the last one to avoid holes */
100 last = (status.num_items - 1);
101 strcpy(status.status[num].item_name, status.status[last].item_name);
102 status.status[num].price = status.status[last].price;
103 status.status[num].times_sold = status.status[last].times_sold;
112 static void new_credit() {
116 if (credits.num_items == 75) {
117 cprintf("\rEs ist bereits die maximale Anzahl an Eintraegen erreicht, druecke RETURN...\r\n");
122 cprintf("\rNickname:\r\n");
123 if ((input = get_input()) == NULL || *input == '\0')
125 name = strdup(input);
126 cprintf("\r\nGuthaben in Cents:\r\n");
127 if ((input = get_input()) == NULL || *input == '\0' || (credit = atoi(input)) == 0)
129 strcpy(credits.credits[credits.num_items].nickname, name);
130 credits.credits[credits.num_items].credit = credit;
135 static void _delete_credit(BYTE num) {
136 memset(credits.credits[num].nickname, '\0', 11);
137 credits.credits[num].credit = 0;
140 static void delete_credit() {
144 cprintf("\r Welcher Eintrag soll geloescht werden?\r\n");
145 if ((input = get_input()) == NULL || *input == '\0')
148 if (credits.num_items > 1) {
149 /* Swap last item with this one and delete the last one to avoid holes */
150 last = (credits.num_items - 1);
151 strcpy(credits.credits[num].nickname, credits.credits[last].nickname);
152 credits.credits[num].credit = credits.credits[last].credit;
153 _delete_credit(last);
164 credits.num_items = 0;
165 status.num_items = 0;
166 cprintf("itemz loading...\n");
168 cprintf("itemz: loading ITEMS...\n");
170 cprintf("itemz: loading CREDITS...\n");
175 if (mode == MODE_ITEMS) {
185 cprintf("Unbekannter Befehl, druecke RETURN...\r\n");
197 else if (*c == 'f') {
198 if (current_credits_page < (credits.num_items / 16))
199 current_credits_page++;
200 } else if (*c == 'b') {
201 if (current_credits_page > 0)
202 current_credits_page--;
205 cprintf("Unbekannter Befehl, druecke RETURN...\r\n");