]> git.sur5r.net Git - c128-kasse/blobdiff - src/credit_manager.c
Update copyright notice, convert files to utf8, add git version to itemz
[c128-kasse] / src / credit_manager.c
index 6fa39d5b5bb4b534217c36f683dafdd855430a8b..b26b6d1cd33b6a45950189b0443703da2fd9c30f 100644 (file)
@@ -1,6 +1,6 @@
 /* 
  * RGB2R-C128-Kassenprogramm
- * (c) 2007 phil_fry, sECuRE, sur5r
+ * © 2007-2009 phil_fry, sECuRE, sur5r
  * See LICENSE for license information
  *
  */
@@ -11,6 +11,9 @@
 
 #include "config.h"
 #include "general.h"
+#include "kasse.h"
+#include "c128time.h"
+#include "print.h"
 
 static char *filter = NULL;
 static BYTE filter_len;
@@ -23,22 +26,67 @@ static void credit_print_screen() {
 
        clrscr();
        cprintf("itemz (phil_fry, sECuRE, sur5r)\r\n\r\n");
-       /* 16 entries per page */
-       pages = (credits.num_items / 16);
+       pages = (credits.num_items / CREDITS_PER_PAGE);
        if (current_credits_page > pages)
                current_credits_page = pages;
        cprintf("Datei: CREDITS (Seite %d von %d)\r\n\r\n", current_credits_page, pages);
-       for (i = (current_credits_page * 16); i < credits.num_items && i < ((current_credits_page+1) * 16); i++) {
-               if (format_euro(buffer, 10, credits.credits[i].credit) != buffer) {
-                       cprintf("Error: Could not format credit %d\r\n", credits.credits[i].credit);
-                       exit(1);
+       for (i = (current_credits_page * CREDITS_PER_PAGE); i < credits.num_items && i < ((current_credits_page+1) * CREDITS_PER_PAGE); i++) {
+               if (filter == NULL || strncmp(credits.credits[i].nickname, filter, filter_len) == 0) {
+                       if (format_euro(buffer, 10, credits.credits[i].credit) != buffer) {
+                               cprintf("Error: Could not format credit %d\r\n", credits.credits[i].credit);
+                               exit(1);
+                       }
+       
+                       cprintf("%d: %s: %s\r\n", i, credits.credits[i].nickname, buffer);
                }
-
-               cprintf("%d: %s: %s\r\n", i, credits.credits[i].nickname, buffer);
        }
-       cprintf("\r\nn) Neu d) Loeschen b) Seite hoch f) Seite runter\r\ne) Aendern s) Speichern z) Zurueck\r\n");
+       cprintf("\r\nn) Neu d) Loeschen p) Einzahlen b) Seite hoch f) Seite runter\r\ng) Filtern e) Aendern s) Speichern z) Zurueck\r\n");
+}
+
+struct credits_t *find_credit(char *name){
+       int i;
+       for (i = 0; i < credits.num_items; i++)
+               if (strncmp(name, credits.credits[i].nickname, NICKNAME_MAX_LEN + 1) == 0)
+                       return &credits.credits[i];
+       return NULL;
 }
 
+/*
+ * when depositing money with this and returning to the main menu, the program
+ * will crash with a message like the following:
+ * 
+ */
+static void deposit_credit() {
+       char *time = get_time();
+       char *input;
+       struct credits_t *credit;
+       unsigned int deposit;
+
+       cprintf("\r\nName:\r\n");
+       if ((input = get_input()) == NULL || *input == '\0')
+               return; // no name given
+               
+       if ((credit = find_credit(input)) == NULL)
+               return; // cannot find named credit
+       
+       cprintf("\r\nEinzahlung in Cent:\r\n");
+       if ((input = get_input()) == NULL || *input == '\0' || (deposit = atoi(input)) == 0)
+               return;
+
+       credit->credit += deposit;
+       
+       toggle_videomode();
+       cprintf("%d Cent eingezahlt fuer %s.\r\nRestguthaben: %d\r\n", deposit, credit->nickname);
+       sprintf(print_buffer, "%c%s - %d Cent eingezahlt fuer %s. Restguthaben: %d Cent\r", 17, time, deposit, credit->nickname, credit->credit);
+       cprintf("%s", print_buffer);
+       toggle_videomode();
+       print_the_buffer();
+       cprintf("\r\nEinzahlung durchgefuehrt, druecke RETURN...\r\n");
+       input = get_input();
+       toggle_videomode();
+       clrscr();
+       toggle_videomode();
+}
 
 static void new_credit() {
        char *input, *name;
@@ -50,6 +98,7 @@ static void new_credit() {
                return;
        }
 
+       clrscr();
        cprintf("\rNickname:\r\n");
        if ((input = get_input()) == NULL || *input == '\0')
                return;
@@ -59,6 +108,10 @@ static void new_credit() {
                return;
        strcpy(credits.credits[credits.num_items].nickname, name);
        credits.credits[credits.num_items].credit = credit;
+
+       sprintf(print_buffer, "%cGuthaben mit %d Cent fuer %s angelegt\r", 17, credit, name);
+       print_the_buffer();
+
        credits.num_items++;
        free(name);
 }
@@ -102,14 +155,23 @@ void credit_manager(){
                        case 's':
                                save_credits(); break;
                        case 'f':
-                               if (current_credits_page < (credits.num_items / 16))
+                               if (current_credits_page < (credits.num_items / CREDITS_PER_PAGE))
                                                current_credits_page++;
                                break;
                        case 'b':
                                if (current_credits_page > 0)
                                        current_credits_page--;
                                break;
+                       case 'p':
+                               deposit_credit(); break;
+                       case 'g':
+                               cprintf("Filter eingeben:\r\n");
+                               filter = get_input();
+                               if (filter == NULL || *filter == 32 || (filter_len = strlen(filter)) == 0)
+                                       filter = NULL;
+                               break;
                        case 'z':
+                               save_credits();
                                return; 
                        default:
                                cprintf("Unbekannter Befehl, druecke RETURN...\r\n");