]> git.sur5r.net Git - c128-kasse/blobdiff - src/kasse.c
log deposits and new credits to printer
[c128-kasse] / src / kasse.c
index c82faa9e598c8690f7bd4aba8c7fd7dd8e7e5cb3..19b9b18e93c81d22ce8b9feba8c1ecf1789f6c38 100644 (file)
@@ -59,7 +59,7 @@ static void log_file(const char *s) {
           lines, we don't need more than 100 * 64 bytes. */
        char *buffer = malloc(sizeof(char) * 64 * 100);
        char filename[8];
-       char read = 0;
+       int read = 0;
        unsigned int c;
        if (buffer == NULL) {
                cprintf("No memory available\n");
@@ -82,7 +82,10 @@ static void log_file(const char *s) {
                c128_perror(c, "cbm_open(log)");
                sane_exit();
        }
-       /* TODO: read  < 0? */
+       if (read < 0) {
+               cprintf("Could not read existing logfile (read returned %d)\n", read);
+               sane_exit();
+       }
        strcpy(buffer+read, s);
        c = cbm_write((BYTE)8, buffer, read+strlen(s));
        if (c != (read+strlen(s))) {
@@ -103,26 +106,34 @@ static char retry_or_quit() {
 }
 
 /* Prints a line and logs it to file */
-static void print_log(char *name, int item_price, int einheiten, char *nickname) {
-       BYTE c;
+static void print_log(char *name, int item_price, int einheiten, char *nickname, char *rest) {
        char *time = get_time();
        char price[10];
        /* Format: 
-          Transaction-ID (Anzahl verkaufter Einträge, inklusive des zu druckenden!)
-          Uhrzeit
-          Eintragname (= Getränk)
-          Preis (in Cents)
-          Anzahl
-          Nickname (falls es vom Guthaben abgezogen wird)
+          Transaction-ID (Anzahl verkaufter Einträge, inklusive des zu druckenden!) -- 6-stellig
+          Uhrzeit -- 8-stellig
+          Eintragname (= Getränk) -- 9-stellig
+          Preis (in Cents) -- 7-stellig
+          Anzahl -- 2-stellig
+          Nickname (falls es vom Guthaben abgezogen wird) -- 10-stellig
+          restguthaben (9-stellig)
+
+          + 7 leerzeichen
+          --> 48 zeichen
           */
        if (format_euro(price, 10, item_price) == NULL) {
                cprintf("Preis %d konnte nicht umgerechnet werden\r\n", item_price);
                exit(1);
        }
-               
-       sprintf(print_buffer, "%c[%lu] %s - %s - %s - %d - an %s\r",  17,
-                       items_sold, time, name, price, 
+
+       sprintf(print_buffer, "%c[%lu] %s - %-9s - %s - r %s - %d - an %s\r",  17,
+                       items_sold, time, name, price, rest,
                        einheiten, (*nickname != '\0' ? nickname : "Unbekannt"));
+       print_the_buffer();
+}
+
+void print_the_buffer() {
+       BYTE c;
 RETRY:
        c = cbm_open((BYTE)4, (BYTE)4, (BYTE)0, NULL);
        if (c != 0) {
@@ -155,8 +166,12 @@ BYTE buy(char *name, unsigned int price) {
        int einheiten;
        char *input;
        char nickname[11];
+       char rest[9];
        struct credits_t *credit;
 
+       memset(rest, ' ', sizeof(rest));
+       rest[8] = '\0';
+
        cprintf("Wieviel Einheiten \"%s\"? [1] \r\n", name);
        while (1) {
                c = getchar();
@@ -199,10 +214,16 @@ BYTE buy(char *name, unsigned int price) {
                        }
                        /* substract money */
                        credit->credit -= (price * einheiten);
-                       cprintf("\r\nVerbleibendes Guthaben fuer %s: %d Cents. Druecke RETURN...\r\n",
-                               nickname, credit->credit);
+
+                       if (format_euro(rest, 10, credit->credit) == NULL) {
+                               cprintf("Preis %d konnte nicht umgerechnet werden\r\n", credit->credit);
+                               exit(1);
+                       }
+
+                       cprintf("\r\nVerbleibendes Guthaben fuer %s: %s. Druecke RETURN...\r\n",
+                               nickname, rest);
                        toggle_videomode();
-                       cprintf("\r\nDein verbleibendes Guthaben betraegt %d Cents.\r\n", credit->credit);
+                       cprintf("\r\nDein verbleibendes Guthaben betraegt %s.\r\n", rest);
                        toggle_videomode();
                        get_input();
                        matches++;
@@ -219,7 +240,7 @@ BYTE buy(char *name, unsigned int price) {
        money += price * einheiten;
        items_sold += einheiten;
        if (printing == 1)
-               print_log(name, price, einheiten, nickname);
+               print_log(name, price, einheiten, nickname, rest);
 
        return einheiten;
 }
@@ -341,4 +362,6 @@ int main() {
                        break;
        }
        cprintf("BYEBYE\r\n");
+
+       return 0;
 }