]> git.sur5r.net Git - c128-kasse/blob - src/itemz.c
implement itemz.c which manages ITEMS (works)/CREDITS (TODO) files
[c128-kasse] / src / itemz.c
1 /*
2  * RGB2R-C128-Kassenprogramm
3  * (c) 2007 phil_fry, sECuRE, sur5r
4  *
5  * itemz.c: Verwaltet die ITEMS- und CREDITS-datei
6  *
7  */
8 #include <c128.h>
9 #include <conio.h>
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <string.h>
13
14 #include "general.h"
15 #include "config.h"
16
17 enum itemz_mode { MODE_ITEMS, MODE_CREDITS };
18
19 static enum itemz_mode mode = MODE_ITEMS;
20
21 static void print_screen() {
22         BYTE i;
23         char buffer[10];
24
25         clrscr();
26         cprintf("itemz (phil_fry, sECuRE, sur5r)\r\n\r\n");
27         if (mode == MODE_ITEMS) {
28                 cprintf("Datei: ITEMS\r\n\r\n");
29                 for (i = 0; i < status.num_items; i++) {
30                         if (format_euro(buffer, 10, status.status[i].price) != buffer) {
31                                 cprintf("Error: Could not format price %d\r\n", status.status[i].price);
32                                 exit(1);
33                         }
34                         cprintf("Eintrag %x: %s (%s, %d mal verkauft)\r\n",
35                                 i, status.status[i].item_name, buffer, status.status[i].times_sold);
36                 }
37                 cprintf("\r\nn) Neuer Eintrag d) Eintrag loeschen s) Datei speichern\r\n");
38         } else {
39                 cprintf("Datei: CREDITS\r\n\r\n");
40                 /* TODO: display credits */
41         }
42 }
43
44 static void new_item() {
45         char *input, *name;
46         int price;
47
48         cprintf("\rName des Eintrags:\r\n");
49         if ((input = get_input()) == NULL || *input == '\0')
50                 return;
51         name = strdup(input);
52         cprintf("\r\nPreis in Cents:\r\n");
53         if ((input = get_input()) == NULL || *input == '\0' || (price = atoi(input)) == 0)
54                 return;
55         cprintf("\r\nWie oft schon verkauft? [0] \r\n");
56         if ((input = get_input()) == NULL || *input == '\0')
57                 return;
58         strcpy(status.status[status.num_items].item_name, name);
59         status.status[status.num_items].price = price;
60         status.status[status.num_items].times_sold = atoi(input);
61         status.num_items++;
62 }
63
64 static void _delete_item(BYTE num) {
65         memset(status.status[num].item_name, '\0', 10);
66         status.status[num].price = 0;
67         status.status[num].times_sold = 0;
68 }
69
70 static void delete_item() {
71         char *input;
72         BYTE num, last;
73
74         cprintf("\r Welcher Eintrag soll geloescht werden?\r\n");
75         if ((input = get_input()) == NULL || *input == '\0')
76                 return;
77         num = atoi(input);
78         if (status.num_items > 1) {
79                 /* Swap last item with this one and delete the last one to avoid holes */
80                 last = (status.num_items - 1);
81                 strcpy(status.status[num].item_name, status.status[last].item_name);
82                 status.status[num].price = status.status[last].price;
83                 status.status[num].times_sold = status.status[last].times_sold;
84                 _delete_item(last);
85         } else {
86                 /* Just delete it */
87                 _delete_item(num);
88         }
89         status.num_items--;
90 }
91
92 int main() {
93         char *c;
94         toggle_videomode();
95         credits.num_items = 0;
96         status.num_items = 0;
97         cprintf("itemz loading...\n");
98         load_config();
99         cprintf("itemz: loading ITEMS...\n");
100         load_items();
101         cprintf("itemz: loading CREDITS...\n");
102         load_credits();
103         while (1) {
104                 print_screen();
105                 c = get_input();
106                 if (mode == MODE_ITEMS) {
107                         if (*c == 'n')
108                                 new_item();
109                         else if (*c == 'd')
110                                 delete_item();
111                         else if (*c == 's')
112                                 save_items();
113                         else {
114                                 cprintf("Unbekannter Befehl, druecke RETURN...\r\n");
115                                 c = get_input();
116                         }
117                 } else {
118                         /* TODO: code */
119                 }
120         }
121         return 0;
122 }