* See LICENSE for license information
*
*/
-#define _IS_KASSE
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <cbm.h>
+#include <c128.h>
+#include <6502.h>
#include "general.h"
#include "config.h"
#include "c128time.h"
#include "print.h"
#include "version.h"
+#include "vdc_patch_charset.h"
+#include "globals.h"
// drucker 4 oder 5
// graphic 4,0,10
textcolor(TC_YELLOW);
cprintf("%2d", i);
textcolor(TC_LIGHT_GRAY);
- cprintf(": %-" xstr(MAX_ITEM_NAME_LENGTH) "s \xDD%s, %3dx ",
+ cprintf(": %-" xstr(MAX_ITEM_NAME_LENGTH) "s \xDD%s, %3dx ",
status.status[i].item_name, profit, status.status[i].times_sold);
}
char *time = get_time();
char profit[10];
clrscr();
- if (format_euro(profit, 10, money) == NULL) {
+ if (format_euro(profit, sizeof(profit), money) == NULL) {
cprintf("Einnahme %ld konnte nicht umgerechnet werden\r\n", money);
exit(1);
}
textcolor(TC_CYAN);
- cprintf("C128-Kassenprogramm (phil_fry, sECuRE, sur5r) " GV "\r\n");
+ cprintf("C128-Kassenprogramm (phil_fry, sECuRE, sur5r, mxf) " GV "\r\n");
textcolor(TC_LIGHT_GRAY);
cprintf("\r\nUhrzeit: %s (wird nicht aktualisiert)\r\n"
"Eingenommen: %s, Verkauft: %ld Dinge, Drucken: %s\r\n",
+ 7 leerzeichen
--> 48 zeichen
*/
- if (format_euro(price, 10, item_price) == NULL) {
+ if (format_euro(price, sizeof(price), item_price) == NULL) {
cprintf("Preis %d konnte nicht umgerechnet werden\r\n", item_price);
exit(1);
}
/* dialog which is called for each bought item */
static signed int buy(char *name, unsigned int price) {
- int negative = 1;
- char entered[5] = {'1', 0, 0, 0, 0};
- BYTE i = 0, matches = 0;
- BYTE c, x, y, nickname_len;
+ BYTE matches = 0;
+ BYTE c, nickname_len;
int einheiten;
char nickname[NICKNAME_MAX_LEN + 1];
- char rest[11];
+ char rest[10];
struct credits_t *credit;
memset(nickname, '\0', sizeof(nickname));
- memset(rest, ' ', sizeof(rest));
- rest[8] = '\0';
+ memset(rest, '\0', sizeof(rest));
clrscr();
cprintf("Wieviel Einheiten \"%s\"? [1] \r\n", name);
- x = wherex();
- y = wherey();
- while (1) {
- /* Buffer-Ende erreicht? */
- if (i == 4)
- break;
-
- c = cgetc();
- /* Enter */
- if (c == PETSCII_CR)
- break;
- /* Backspace */
- if (c == PETSCII_DEL) {
- if (i == 0)
- continue;
- entered[--i] = '\0';
- cputcxy(x + i, y, ' ');
- gotoxy(x + i, y);
- continue;
- }
- if (c == 27) {
- cprintf("Kauf abgebrochen, druecke RETURN...\r\n");
- get_input();
- return 1;
- }
- if (c == '-' && i == 0) {
- negative = -1;
- cputc(c);
- } else if (c >= PETSCII_0 && c <= PETSCII_9) {
- entered[i++] = c;
- cputc(c);
- }
- /* Ungültige Eingabe (keine Ziffer), einfach ignorieren */
- }
- einheiten = atoi(entered) * negative;
+ einheiten = cget_number(1);
if (einheiten > 100 || einheiten < -100 || einheiten == 0) {
- cprintf("\r\nEinheit nicht in [-100, 100] oder 0, Abbruch, druecke "
+ cprintf("\r\nEinheit nicht in [-100, 100] oder 0, Abbruch, dr" uUML "cke "
"RETURN...\r\n");
cgetc();
return 1;
}
}
- if (*nickname != '\0' && *nickname != 32) {
+ if (*nickname != '\0' && *nickname != PETSCII_SP) {
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 */
credit = find_credit(nickname);
if (credit != NULL) {
while ((signed int)credit->credit < ((signed int)price * einheiten)) {
- if (format_euro(rest, 10, credit->credit) == NULL) {
+ if (format_euro(rest, sizeof(rest), credit->credit) == NULL) {
cprintf("Preis %d konnte nicht umgerechnet werden\r\n",
credit->credit);
exit(1);
/* substract money */
credit->credit -= (price * einheiten);
- if (format_euro(rest, 10, credit->credit) == NULL) {
+ if (format_euro(rest, sizeof(rest), credit->credit) == NULL) {
cprintf("Preis %d konnte nicht umgerechnet werden\r\n", credit->credit);
exit(1);
}
textcolor(TC_LIGHT_GREEN);
- cprintf("\r\nVerbleibendes Guthaben fuer %s: %s. Druecke RETURN...\r\n",
+ cprintf("\r\nVerbleibendes Guthaben f" uUML "r %s: %s. Dr" uUML
+ "cke RETURN...\r\n",
nickname, rest);
textcolor(TC_LIGHT_GRAY);
- get_input();
+ cget_return();
matches++;
} else {
textcolor(TC_LIGHT_RED);
cprintf("\r\nNickname nicht gefunden in der Guthabenverwaltung! Abbruch, "
- "druecke RETURN...\r\n");
+ "dr" uUML "cke RETURN...\r\n");
textcolor(TC_LIGHT_GRAY);
- get_input();
+ cget_return();
return 0;
}
} else {
void buy_stock(BYTE n) {
if (n >= status.num_items || status.status[n].item_name == NULL) {
cprintf("FEHLER: Diese Einheit existiert nicht.\r\n");
- get_input();
+ cget_return();
return;
}
}
void buy_custom(void) {
- BYTE c = 0, i = 0;
- int negative = 1;
- char entered[5] = {'1', 0, 0, 0, 0};
- char *input, name[20];
+ char name[MAX_ITEM_NAME_LENGTH + 1];
int price;
clrscr();
- memset(name, '\0', 20);
cprintf("\r\nWas soll gekauft werden?\r\n");
- input = get_input();
- strncpy(name, input, 20);
- if (*name == '\0')
+ if (cgetn_input(name, sizeof(name)) == 0)
return;
cprintf("\r\nWie teuer ist \"%s\" (in cents)?\r\n", name);
- while (1) {
- c = cgetc();
- if (c == 13)
- break;
- cputc(c);
- if (c == 27) {
- cprintf("Kauf abgebrochen, druecke RETURN...\r\n");
- get_input();
- return;
- } else if (c == '-' && i == 0)
- negative = -1;
- else if (c > 47 && c < 58)
- entered[i++] = c;
- }
- price = atoi(entered) * negative;
- cprintf("\r\n");
+ price = cget_number(0);
+
+ if (price == 0) {
+ cprintf("Kauf abgebrochen, dr" uUML "cke RETURN...\r\n");
+ cget_return();
+ return;
+ }
buy(name, price);
}
char *c;
char *time;
- if (VIDEOMODE == 40)
- videomode(80);
+ init_globals();
+
+ videomode(VIDEOMODE_80x25);
/* clock CPU at double the speed (a whopping 2 Mhz!) */
fast();
+ /* Manipulate the VDC with IRQs turned off.
+ * KERNALs default IRQ handler will also try to read the VDC status
+ * register, which could interfere with our code trying to read it.
+ */
+ SEI();
+ vdc_patch_charset();
+ CLI();
+
clrscr();
/* Allocate logging buffer memory */
print_screen();
c = get_input();
/* ...display dialogs eventually */
- if (*c > 47 && *c < 58) {
+ if (*c >= PETSCII_0 && *c <= PETSCII_9) {
/* if the input starts with a digit, we will interpret it as a number
* for the item to be sold */
buy_stock(atoi(c));
} else if (*c == 'f') {
buy_custom();
} else if (*c == 's') {
+ cprintf("\r\nsaving items.. ");
save_items();
+ cprintf("ok\r\nsaving credits.. ");
save_credits();
+ cprintf("ok\r\nflushing log.. ");
log_flush();
- cprintf("\r\nStatefile/Creditfile/Log gesichert, druecke RETURN...\r\n");
- get_input();
+ cprintf("ok\r\nStatefile/Creditfile/Log gesichert, dr" uUML
+ "cke RETURN...\r\n");
+ cget_return();
} else if (*c == 'g') {
credit_manager();
} else if (*c == 'z') {