X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcredit_manager.c;h=853034608be6068aa30c8758adde589ea40ece86;hb=2581643c3b0f4a5ff94726e4c8edc038ba26db5a;hp=6dbae85d23fa48fa5f49a32a7a551e1b8b704dc2;hpb=b1f598f80d8ca8a53678080e08bf487f97127c12;p=c128-kasse diff --git a/src/credit_manager.c b/src/credit_manager.c index 6dbae85..8530346 100644 --- a/src/credit_manager.c +++ b/src/credit_manager.c @@ -24,7 +24,7 @@ static BYTE current_credits_page = 0; static void credit_print_screen(void) { BYTE i, pages; - char buffer[10]; + char buffer[EUR_FORMAT_MINLEN + 1]; clrscr(); cprintf("credit_manager (phil_fry, sECuRE, sur5r) v:" GV "\r\n\r\n"); @@ -38,7 +38,7 @@ static void credit_print_screen(void) { i < ((current_credits_page + 1) * CREDITS_PER_PAGE); i++) { if (filter == NULL || - strncmp(credits.credits[i].nickname, filter, filter_len) == 0) { + strncasecmp(credits.credits[i].nickname, filter, filter_len) == 0) { if (format_euro(buffer, sizeof(buffer), credits.credits[i].credit) != buffer) { cprintf("Error: Could not format credit %d\r\n", @@ -50,15 +50,25 @@ static void credit_print_screen(void) { } } cprintf("\r\nn) Neu d) L" oUML "schen p) Einzahlen b) Seite hoch " - "f) Seite runter\r\ng) Filtern e) " AUML "ndern s) Speichern " - "z) Zur" uUML "ck\r\n"); + "f) Seite runter\r\ng) Filtern s) Speichern z) Zur" uUML "ck\r\n"); +} + +static int8_t find_credit_idx(char *name) { + int8_t i; + for (i = 0; i < credits.num_items; ++i) { + if (strncasecmp(name, credits.credits[i].nickname, NICKNAME_MAX_LEN + 1) == + 0) { + return i; + } + } + return -1; } 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]; + if ((i = find_credit_idx(name)) >= 0) { + return &credits.credits[i]; + } return NULL; } @@ -71,7 +81,7 @@ void deposit_credit(char *nickname) { return; // cannot find named credit cprintf("\r\nEinzahlung in Cent:\r\n"); - if (cget_number(0) == 0) + if ((deposit = cget_number(0)) == 0) return; credit->credit += deposit; @@ -98,6 +108,12 @@ static void new_credit(void) { if (cgetn_input(name, sizeof(name)) == 0) return; + if (find_credit_idx(name) >= 0) { + cprintf("\rNickname existiert bereits, dr" uUML "cke RETURN...\r\n"); + cget_return(); + return; + } + cprintf("\r\nGuthaben in Cents:\r\n"); if ((credit = cget_number(0)) == 0) return; @@ -110,33 +126,22 @@ static void new_credit(void) { print_the_buffer(); credits.num_items++; - free(name); -} - -static void _delete_credit(BYTE num) { - memset(credits.credits[num].nickname, '\0', NICKNAME_MAX_LEN + 1); - credits.credits[num].credit = 0; } -static void delete_credit(void) { - char *input; - BYTE num, last; - - cprintf("\r Welcher Eintrag soll gel" oUML "scht werden?\r\n"); - if ((input = get_input()) == NULL || *input == '\0') +static void delete_credit(char *nickname) { + int8_t i; + if ((i = find_credit_idx(nickname)) < 0) { + cprintf("\r Nick existiert nicht\r\n"); return; - num = atoi(input); - if (credits.num_items > 1) { - /* Swap last item with this one and delete the last one to avoid holes */ - last = (credits.num_items - 1); - strcpy(credits.credits[num].nickname, credits.credits[last].nickname); - credits.credits[num].credit = credits.credits[last].credit; - _delete_credit(last); - } else { - /* Just delete it */ - _delete_credit(num); } - credits.num_items--; + --credits.num_items; + if (i != credits.num_items) { + credits.credits[i] = credits.credits[credits.num_items]; + } + memset(credits.credits[credits.num_items].nickname, '\0', + NICKNAME_MAX_LEN + 1); + credits.credits[credits.num_items].credit = 0; + return; } void credit_manager() { @@ -150,7 +155,10 @@ void credit_manager() { new_credit(); break; case 'd': - delete_credit(); + cputs("\rName?\r\n"); + if (cget_nickname(nickname, sizeof(nickname))) { + delete_credit(nickname); + } break; case 's': save_credits(); @@ -165,8 +173,9 @@ void credit_manager() { break; case 'p': cputs("\rName?\r\n"); - if (cgetn_input(nickname, sizeof(nickname))) + if (cget_nickname(nickname, sizeof(nickname))) { deposit_credit(nickname); + } break; case 'g': cprintf("Filter eingeben:\r\n");