]> git.sur5r.net Git - c128-kasse/blobdiff - config.c
fix printing, nice formatting used
[c128-kasse] / config.c
index 9fc1feed019fa1a03e6ff1d609a87f949a581997..5a70352e2925b5903c39bc278b36013cee786878 100644 (file)
--- a/config.c
+++ b/config.c
@@ -1,93 +1,63 @@
+#define _IS_CONFIG_C
+
 #include <stdlib.h>
-#include <stdio.h>
+#include <conio.h>
 #include <string.h>
+#include <stdio.h>
+#include <stdbool.h>
 #include "general.h"
 #include "config.h"
 
 unsigned long int money = 0;
-unsigned long int num_items = 0;
-BYTE num_credit_items = 0;
 unsigned long int items_sold = 0;
 BYTE printer_port = 4;
-struct status_t status[MAX_ITEMS+1];
-struct credits_t credits[MAX_CREDIT_ITEMS+1];
+static bool files_existing = false;
+struct status_array_t status;
+struct credits_array_t credits;
 
-void load_config();
+/* 
+ * Checks if items/credits-files are existing to avoid having to recover
+ * the error state of the drive (we'd have to if we would just access the
+ * files directly)
+ *
+ */
+bool lookup_needed_files() {
+       BYTE lfn = 8;
+       BYTE files_existing = 0;
+       struct cbm_dirent *dirent;
 
-void load_items(){
-    FILE* f;
-    char line[80];
-    char * sep;
-    BYTE lfn = 219;
-//  cbm_open(lfn, (BYTE)8, (BYTE)0, "items,r");
-    f = fopen("items","r");
-    for (num_items=0; num_items < MAX_ITEMS && !feof(f); num_items++) {
-        fgets(line, 79, f);
-        sep = strchr(line, '=');
-        strncpy(status[num_items].item_name, line, sep-line);
-        status[num_items].price = atoi(sep+1);
-        status[num_items].times_sold = 0; 
-    }
-    fclose(f);
+       if (cbm_opendir(lfn, (BYTE)8) != 0) {
+               cprintf("could not open directory\r\n");
+               return false;
+       }
+       while (cbm_readdir(lfn, dirent) == 0)
+               if (    strcasecmp(dirent->name, "items") == 0 ||
+                       strcasecmp(dirent->name, "credits") == 0)
+                       files_existing++;
+       cbm_closedir(lfn);
+       return (files_existing >= 2);
 }
 
-/**
- * must be called after load_items()
- */
-void load_state(){
-    FILE * f;
-    char line[80];
-    char * sep;
-    char i, j;
-    f = fopen("state", "r");
-    if (f==NULL){
-       cprintf("cannot open state\r\n");
-       return;
-    }
-    while (!feof(f)) {
-       fgets(line, 79, f);
-       sep = strchr(line, '=');
-       if (sep==NULL)
-               continue;
-       *(line + (sep-line)) = 0;
-        for (i=0; i< MAX_ITEMS; i++) {
-               if (strcmp(line, status[i].item_name)==0) {
-                       status[i].times_sold = atoi(sep+1);
-                       break;
-               }
-        }
-    }
-    fclose(f);
+void load_items() {
+       if (files_existing)
+               cbm_load("items", (BYTE)8, &status);
 }
 
-void save_state(){
-       FILE * f;
-       int i;
-       
-       f = fopen("state", "w");
-    if (f==NULL){
-       c128_perror(23, "cannot open state file");
-       return;
-    }
-    for (i=0;i<num_items;i++)
-       fprintf(f, "%s=%d\n",status[i].item_name, status[i].times_sold);
-    fclose(f);
+void load_credits() {
+       if (files_existing)
+               cbm_load("credits", (BYTE)8, &credits);
 }
-/*
-void dump_state(){
-       FILE * f;
-       char buf[128];
-       int i, len;
-       memset(buf, 0, 128);
-       f = fopen("state", "r");
-       len = fread(buf, 1, 128, f);
-       printf("read %d bytes from state\n", len);
-       fclose(f);
-       for (i=0;i<len;i++)
-               printf("%x ", buf[i]);
-       printf("\n");
-       
+
+void save_items() {
+       cbm_save("items", (BYTE)8, &status, sizeof(struct status_array_t));
+       files_existing = true;
+}
+
+void save_credits() {
+       cbm_save("credits", (BYTE)8, &credits, sizeof(struct credits_array_t));
+       files_existing = true;
 }
-*/
+
 void load_config() {
+       files_existing = lookup_needed_files();
 }