build carthw.cfg in
[picodrive.git] / pico / cart.c
index d86af41..db742a8 100644 (file)
@@ -709,21 +709,45 @@ static int is_expr(const char *expr, char **pr)
   return 1;\r
 }\r
 \r
+#include "carthw_cfg.c"\r
+\r
 static void parse_carthw(const char *carthw_cfg, int *fill_sram)\r
 {\r
   int line = 0, any_checks_passed = 0, skip_sect = 0;\r
+  const char *s, *builtin = builtin_carthw_cfg;\r
   int tmp, rom_crc = 0;\r
   char buff[256], *p, *r;\r
   FILE *f;\r
 \r
   f = fopen(carthw_cfg, "r");\r
-  if (f == NULL) {\r
+  if (f == NULL)\r
+    f = fopen("pico/carthw.cfg", "r");\r
+  if (f == NULL)\r
     elprintf(EL_STATUS, "couldn't open carthw.cfg!");\r
-    return;\r
-  }\r
 \r
-  while ((p = fgets(buff, sizeof(buff), f)))\r
+  for (;;)\r
   {\r
+    if (f != NULL) {\r
+      p = fgets(buff, sizeof(buff), f);\r
+      if (p == NULL)\r
+        break;\r
+    }\r
+    else {\r
+      if (*builtin == 0)\r
+        break;\r
+      for (s = builtin; *s != 0 && *s != '\n'; s++)\r
+        ;\r
+      while (*s == '\n')\r
+        s++;\r
+      tmp = s - builtin;\r
+      if (tmp > sizeof(buff) - 1)\r
+        tmp = sizeof(buff) - 1;\r
+      memcpy(buff, builtin, tmp);\r
+      buff[tmp] = 0;\r
+      p = buff;\r
+      builtin = s;\r
+    }\r
+\r
     line++;\r
     p = sskip(p);\r
     if (*p == 0 || *p == '#')\r
@@ -934,7 +958,9 @@ no_checks:
     skip_sect = 1;\r
     continue;\r
   }\r
-  fclose(f);\r
+\r
+  if (f != NULL)\r
+    fclose(f);\r
 }\r
 \r
 /*\r
@@ -999,3 +1025,4 @@ static void PicoCartDetect(const char *carthw_cfg)
     *(int *) (Pico.rom + 0x1f0) = 0x20204520;\r
 }\r
 \r
+// vim:shiftwidth=2:expandtab\r