X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=kasse.c;h=2979fd6940b6063c03036ef4e13efb11a9968028;hb=adce5afb5bf582726091bb9689d94fb19ea85220;hp=5326b912bf5ac64ddb93ba6c5ea7a2f789908f4d;hpb=da3efe196ad2f0e8c451a3540eeaf2df41732c9b;p=c128-kasse diff --git a/kasse.c b/kasse.c index 5326b91..2979fd6 100644 --- a/kasse.c +++ b/kasse.c @@ -19,11 +19,22 @@ void print_screen() { BYTE i = 0; char *time = get_time(); clrscr(); - printf("C128-Kassenprogramm\n\nUhrzeit: %s (wird nicht aktualisiert\nEingenommen: %ld Cents, Verkauft: %ld Flaschen, Drucken: %s\n\n", time, money, items_sold, (printing == 1 ? "ein" : "aus")); + cprintf("C128-Kassenprogramm\r\n\r\nUhrzeit: %s (wird nicht aktualisiert)\r\nEingenommen: %ld Cents, Verkauft: %ld Flaschen, Drucken: %s\r\n\r\n", time, money, items_sold, (printing == 1 ? "ein" : "aus")); free(time); - for (; i < num_items; ++i) - printf("Eintrag %x: %s (%d Cents, %d mal verkauft)\n", i, status[i].item_name, status[i].price, status[i].times_sold); - printf("\nBefehle: s) Daten sichern d) Drucken umschalten\ng) Guthabenverwaltung z) Zeit setzen\n"); + for (; i < status.num_items; ++i) + cprintf("Eintrag %x: %s (%d Cents, %d mal verkauft)\r\n", + i, status.status[i].item_name, status.status[i].price, status.status[i].times_sold); + cprintf("\r\nBefehle: s) Daten sichern d) Drucken umschalten\r\ng) Guthabenverwaltung z) Zeit setzen\r\nn) Neues Getraenk\r\n"); +} + +void log_file(char * s) { + FILE *f; + if (s == NULL) + return; + if ((f = fopen("log", "a")) == NULL) + c128_perror(23, "kann logfile nicht oeffnen"); + fputs(s, f); + fclose(f); } /* Druckt eine entsprechende Zeile aus */ @@ -37,20 +48,21 @@ void print_log(BYTE n, int einheiten, char *nickname) { Anzahl Nickname (falls es vom Guthaben abgezogen wird) */ - sprintf(print_buffer, "[%d] UHRZEIT - %s - %d - %d - an %s\r\n", items_sold, status[n].item_name, status[n].price, einheiten, (nickname != NULL ? nickname : "Unbekannt")); +// sprintf(print_buffer, "[%d] UHRZEIT - %s - %d - %d - an %s\r\n", items_sold, status[n].item_name, status[n].price, einheiten, (nickname != NULL ? nickname : "Unbekannt")); c = cbm_open((BYTE)4, (BYTE)4, (BYTE)0, NULL); if (c != 0) { c128_perror(c, "cbm_open(printer)"); - save_state(); + save_items(); exit(1); } c = cbm_write((BYTE)4, print_buffer, strlen(print_buffer)); if (c != strlen(print_buffer)) { c128_perror(c, "write(printer)"); - save_state(); + save_items(); exit(1); } cbm_close((BYTE)4); + log_file(print_buffer); } /* Dialog, der einen durch's Abrechnen der Einträge führt */ @@ -61,10 +73,10 @@ void buy(BYTE n) { BYTE c, nickname_len, single_match; int einheiten; char *nickname; - if (status[n].item_name == NULL) - printf("FEHLER: Diese Einheit existiert nicht.\n"); + if (status.status[n].item_name == NULL) + cprintf("FEHLER: Diese Einheit existiert nicht.\r\n"); else { - printf("Wieviel Einheiten \"%s\"?\n", status[n].item_name); + cprintf("Wieviel Einheiten \"%s\"?\r\n", status.status[n].item_name); while (1) { c = getchar(); if (c == 13) @@ -75,7 +87,7 @@ void buy(BYTE n) { entered[i++] = c; } einheiten = atoi(entered) * negative; - printf("\nAuf ein Guthaben kaufen? Wenn ja, Nickname eingeben:\n"); + cprintf("\r\nAuf ein Guthaben kaufen? Wenn ja, Nickname eingeben:\r\n"); nickname = get_input(); if (nickname[0] == '\0') { free(nickname); @@ -84,30 +96,33 @@ void buy(BYTE n) { 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 < num_credit_items; ++c) - if (strncmp(nickname, credits[c].nickname, nickname_len) == 0) { + for (c = 0; c < credits.num_items; ++c) + if (strncmp(nickname, credits.credits[c].nickname, nickname_len) == 0) { if (++matches == 2) break; else single_match = c; } if (matches == 1) { - if (credits[single_match].credit < (status[n].price * einheiten)) { - printf("Sorry, %s hat nicht genug Geld :-(\n", nickname); + if (credits.credits[single_match].credit < (status.status[n].price * einheiten)) { + cprintf("Sorry, %s hat nicht genug Geld :-(\r\n", nickname); free(nickname); return; } else { /* Geld abziehen */ - credits[single_match].credit -= (status[n].price * einheiten); - printf("\nVerbleibendes Guthaben fuer %s: %d Cents. Druecke ANYKEY...\n", nickname, credits[single_match].credit); + credits.credits[single_match].credit -= (status.status[n].price * einheiten); + cprintf("\r\nVerbleibendes Guthaben fuer %s: %d Cents. Druecke ANYKEY...\r\n", + nickname, credits.credits[single_match].credit); getchar(); } + } else if (matches == 0) { + // TODO } else { free(nickname); nickname = NULL; } } - status[n].times_sold += einheiten; - money += status[n].price * einheiten; + status.status[n].times_sold += einheiten; + money += status.status[n].price * einheiten; items_sold += einheiten; if (printing == 1) print_log(n, einheiten, nickname); @@ -120,7 +135,7 @@ void set_time_interactive() { BYTE part[3] = {'0', '0', '\0'}; BYTE tp1, tp2, tp3; char *time_input, *time; - printf("Gib die aktuelle Uhrzeit ein (Format HHMMSS):\n"); + cprintf("Gib die aktuelle Uhrzeit ein (Format HHMMSS):\r\n"); time_input = get_input(); part[0] = time_input[0]; part[1] = time_input[1]; @@ -134,23 +149,22 @@ void set_time_interactive() { set_time(tp1, tp2, tp3); time = get_time(); - printf("Zeit gesetzt: %s\n", time); + cprintf("Zeit gesetzt: %s\r\n", time); free(time); } int main() { BYTE c; + toggle_videomode(); /* Zeit erstmalig setzen */ set_time_interactive(); POKE(216, 255); /* Konfigurationsdatei laden */ load_config(); - /* Einträge (=Getränke) laden */ + /* Einträge (=Getränke) und Zustand laden */ load_items(); - /* Zustand laden */ - load_state(); /* Guthaben laden */ -// load_credits(); + load_credits(); while (1) { /* Bildschirm anzeigen */ print_screen(); @@ -161,14 +175,14 @@ int main() { buy(c - 48); else if (c == 's') { /* Zustandsdatei schreiben */ - save_state(); -// save_credits(); - printf("Statefile/Creditfile gesichert, druecke ANYKEY...\n"); + save_items(); + save_credits(); + cprintf("Statefile/Creditfile gesichert, druecke ANYKEY...\r\n"); getchar(); } else if (c == 'd') { /* Drucken an- oder ausschalten */ printing = (printing == 1 ? 0 : 1); - printf("Drucken ist nun %s, druecke ANYKEY...\n", (printing == 1 ? "eingeschaltet" : "ausgeschaltet")); + cprintf("Drucken ist nun %s, druecke ANYKEY...\r\n", (printing == 1 ? "eingeschaltet" : "ausgeschaltet")); getchar(); } else if (c == 'g') { /* Guthabenverwalter aufrufen */ @@ -176,8 +190,13 @@ int main() { } else if (c == 'z') { /* Zeit setzen */ set_time_interactive(); + } else if (c == 'n') { + strcpy(status.status[status.num_items].item_name, "mate"); + status.status[status.num_items].price = 23; + status.status[status.num_items].times_sold = 5; + status.num_items++; } else if (c == 'q') break; } - printf("BYEBYE\n"); + cprintf("BYEBYE\r\n"); }