X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcredit_manager.c;h=6654324e1bdd644a51d95b2bc598abd717ffe99f;hb=d3e5511f405f8641d4804f0d1be4e3ed111e1eb9;hp=347326a28fd2331e68cebe9da407e87919cffd4a;hpb=b6fc2f7cbcd8bd7cb5aa9e83a358a91cc0396158;p=c128-kasse diff --git a/src/credit_manager.c b/src/credit_manager.c index 347326a..6654324 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"); @@ -39,7 +39,8 @@ static void credit_print_screen(void) { i++) { if (filter == NULL || strncmp(credits.credits[i].nickname, filter, filter_len) == 0) { - if (format_euro(buffer, 10, credits.credits[i].credit) != buffer) { + if (format_euro(buffer, sizeof(buffer), credits.credits[i].credit) != + buffer) { cprintf("Error: Could not format credit %d\r\n", credits.credits[i].credit); exit(1); @@ -61,58 +62,44 @@ struct credits_t *find_credit(char *name) { return NULL; } -/* - * Deposits credit for a user. Called in the credit manager (with input == - * NULL) or interactively when the user does not have enough money for his - * intended purchase (with input == nickname). - * - */ -void deposit_credit(char *input) { +void deposit_credit(char *nickname) { char *time = get_time(); struct credits_t *credit; unsigned int deposit; - if (input == NULL) { - cprintf("\r\nName:\r\n"); - if ((input = get_input()) == NULL || *input == '\0') - return; // no name given - } - - if ((credit = find_credit(input)) == NULL) + if ((credit = find_credit(nickname)) == NULL) return; // cannot find named credit cprintf("\r\nEinzahlung in Cent:\r\n"); - if ((input = get_input()) == NULL || *input == '\0' || - (deposit = atoi(input)) == 0) + if (cget_number(0) == 0) return; credit->credit += deposit; print_the_buffer(); cprintf("\r\nEinzahlung durchgef" uUML "hrt, dr" uUML "cke RETURN...\r\n"); - input = get_input(); + cget_return(); } static void new_credit(void) { - char *input, *name; + char name[NICKNAME_MAX_LEN + 1]; char *time; int credit; - if (credits.num_items == 75) { + if (credits.num_items == MAX_CREDIT_ITEMS) { cprintf("\rEs ist bereits die maximale Anzahl an Eintr" aUML "gen erreicht, dr" uUML "cke RETURN...\r\n"); - input = get_input(); + cget_return(); return; } clrscr(); cprintf("\rNickname (max. 10 Zeichen):\r\n"); - if ((input = get_input()) == NULL || *input == '\0') + if (cgetn_input(name, sizeof(name)) == 0) return; - name = strdup(input); + cprintf("\r\nGuthaben in Cents:\r\n"); - if ((input = get_input()) == NULL || *input == '\0' || - (credit = atoi(input)) == 0) + if ((credit = cget_number(0)) == 0) return; strncpy(credits.credits[credits.num_items].nickname, name, NICKNAME_MAX_LEN); credits.credits[credits.num_items].credit = credit; @@ -123,11 +110,10 @@ 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', 11); + memset(credits.credits[num].nickname, '\0', NICKNAME_MAX_LEN + 1); credits.credits[num].credit = 0; } @@ -142,7 +128,8 @@ static void delete_credit(void) { 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); + strncpy(credits.credits[num].nickname, credits.credits[last].nickname, + NICKNAME_MAX_LEN); credits.credits[num].credit = credits.credits[last].credit; _delete_credit(last); } else { @@ -153,6 +140,7 @@ static void delete_credit(void) { } void credit_manager() { + char nickname[NICKNAME_MAX_LEN + 1]; char *c; while (1) { credit_print_screen(); @@ -176,12 +164,15 @@ void credit_manager() { current_credits_page--; break; case 'p': - deposit_credit(NULL); + cputs("\rName?\r\n"); + if (cgetn_input(nickname, sizeof(nickname))) + deposit_credit(nickname); break; case 'g': cprintf("Filter eingeben:\r\n"); filter = get_input(); - if (filter == NULL || *filter == 32 || (filter_len = strlen(filter)) == 0) + if (filter == NULL || *filter == PETSCII_SP || + (filter_len = strlen(filter)) == 0) filter = NULL; break; case 'z': @@ -189,7 +180,7 @@ void credit_manager() { return; default: cprintf("Unbekannter Befehl, dr" uUML "cke RETURN...\r\n"); - get_input(); + cget_return(); } } }