char * format_euro(char * s, int maxlen, int cent);
void c128_perror(BYTE, char*);
extern BYTE _oserror;
+#define POKE(addr,val) (*(unsigned char*) (addr) = (val))
+#define POKEW(addr,val) (*(unsigned*) (addr) = (val))
+#define PEEK(addr) (*(unsigned char*) (addr))
+#define PEEKW(addr) (*(unsigned*) (addr))
#endif /*GENERAL_H_*/
#include "config.h"
#include "kasse.h"
#include "credit_manager.h"
+#include "time.h"
// drucker 4 oder 5
// graphic 4,0,10
/* Hauptbildschirm ausgeben */
void print_screen() {
BYTE i = 0;
+ char *time = get_time();
clrscr();
- printf("C128-Kassenprogramm\n\n");
- printf("Eingenommen: %ld Cents, Verkauft: %ld Flaschen, Drucken: %s\n\n", money, items_sold, (printing == 1 ? "ein" : "aus"));
+ printf("C128-Kassenprogramm\n\nUhrzeit: %s (wird nicht aktualisiert\nEingenommen: %ld Cents, Verkauft: %ld Flaschen, Drucken: %s\n\n", time, money, items_sold, (printing == 1 ? "ein" : "aus"));
+ free(time);
for (; i < num_items; ++i)
printf("Eintrag %x: %s (%d Cents, %d mal verkauft)\n", i, status[i].item_name, status[i].price, status[i].times_sold);
- printf("\nBefehle: s) Daten sichern d) Drucken umschalten g) Guthabenverwaltung\n");
+ printf("\nBefehle: s) Daten sichern d) Drucken umschalten\ng) Guthabenverwaltung z) Zeit setzen\n");
}
/* Druckt eine entsprechende Zeile aus */
}
}
+void set_time_interactive() {
+ BYTE part[3] = {'0', '0', '\0'};
+ BYTE tp1, tp2, tp3;
+ char *time_input, *time;
+ printf("Gib die aktuelle Uhrzeit ein (Format HHMMSS):\n");
+ time_input = get_input();
+ part[0] = time_input[0];
+ part[1] = time_input[1];
+ tp1 = atoi(part);
+ part[0] = time_input[2];
+ part[1] = time_input[3];
+ tp2 = atoi(part);
+ part[0] = time_input[4];
+ part[1] = time_input[5];
+ tp3 = atoi(part);
+ set_time(tp1, tp2, tp3);
+
+ time = get_time();
+ printf("Zeit gesetzt: %s\n", time);
+ free(time);
+}
+
int main() {
- static BYTE c;
+ BYTE c;
+ /* Zeit erstmalig setzen */
+ set_time_interactive();
+ POKE(216, 255);
/* Konfigurationsdatei laden */
load_config();
/* Einträge (=Getränke) laden */
/* Zustand laden */
load_state();
/* Guthaben laden */
- load_credits();
+// load_credits();
while (1) {
/* Bildschirm anzeigen */
print_screen();
else if (c == 's') {
/* Zustandsdatei schreiben */
save_state();
- save_credits();
+// save_credits();
printf("Statefile/Creditfile gesichert, druecke ANYKEY...\n");
getchar();
} else if (c == 'd') {
} else if (c == 'g') {
/* Guthabenverwalter aufrufen */
credit_manager();
+ } else if (c == 'z') {
+ /* Zeit setzen */
+ set_time_interactive();
} else if (c == 'q')
break;
}
--- /dev/null
+#include <peekpoke.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "general.h"
+
+char *get_time() {
+ long int h = PEEK(0x00A0) * 65536,
+ m = PEEK(0x00A1) * 256,
+ s = PEEK(0x00A2);
+ char *buffer = malloc(9 * sizeof(char));
+ BYTE hrs, min;
+ if (buffer == NULL) {
+ perror("malloc()");
+ exit(1);
+ }
+ h = (h + m + s) / 60;
+ hrs = (h / 3600);
+ h -= (hrs * 3600);
+ min = (h / 60);
+ h -= (min * 60);
+ sprintf(buffer, "%02d:%02d:%02d", hrs, min, (int)h);
+ return buffer;
+}
+
+void set_time(BYTE hrs, min, sec) {
+ long int added = ((long int)sec + ((long int)min * (long int)60) + ((long int)hrs * (long int)3600)) * (long int)60;
+ POKE(0x00A0, (BYTE)(added / 65536));
+ POKE(0x00A1, (BYTE)(added / 256));
+ POKE(0x00A2, (BYTE)added);
+}