Bite the bullet - size siymbols have to be shared.
authorEric S. Raymond <esr@thyrsus.com>
Wed, 7 Jun 2017 09:45:51 +0000 (05:45 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Wed, 7 Jun 2017 09:45:51 +0000 (05:45 -0400)
Otherwise we end up duplicating magic sizes and tey can drift apart.

Makefile
advent.h
compile.c
init.c
sizes.h [new file with mode: 0644]

index dce6fc066ba6e5e8127c02cd08359d6f59334228..24759f71607de153be7f19ecb394f71349b759de 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@ ifeq ($(UNAME_S),Linux)
 endif
 
 OBJS=main.o init.o actions1.o actions2.o score.o misc.o
-SOURCES=$(OBJS:.o=.c) compile.c advent.h funcs.h adventure.text Makefile control
+SOURCES=$(OBJS:.o=.c) compile.c advent.h funcs.h sizes.h adventure.text Makefile control
 
 .c.o:
        $(CC) $(CCFLAGS) $(DBX) -c $<
@@ -19,19 +19,19 @@ SOURCES=$(OBJS:.o=.c) compile.c advent.h funcs.h adventure.text Makefile control
 advent:        $(OBJS) database.o
        $(CC) $(CCFLAGS) $(DBX) -o advent $(OBJS) database.o $(LDFLAGS) $(LIBS)
 
-main.o:                advent.h funcs.h database.h
+main.o:                advent.h funcs.h database.h sizes.h
 
-init.o:                advent.h funcs.h database.h
+init.o:                advent.h funcs.h database.h sizes.h
 
-actions1.o:    advent.h funcs.h database.h
+actions1.o:    advent.h funcs.h database.h sizes.h
 
-actions2.o:    advent.h funcs.h database.h
+actions2.o:    advent.h funcs.h database.h sizes.h
 
-score.o:       advent.h database.h
+score.o:       advent.h database.h sizes.h
 
-misc.o:                advent.h database.h
+misc.o:                advent.h database.h sizes.h
 
-database.o:    database.h
+database.o:    database.h sizes.h
 
 compile: compile.c
        $(CC) $(CCFLAGS) -o $@ $<
index 0f06ccc3d8cf5d836b00ab5b2c05d2cb9495581b..23f34067b48bc1cb4ffa17822902bc7bcdccda53 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -1,6 +1,8 @@
 #include <stdio.h>
 #include <stdbool.h>
 
+#include "sizes.h"
+
 #define LINESIZE       100
 #define NDWARVES       6
 #define PIRATE         NDWARVES        /* must be NDWARVES-1 when zero-origin */
@@ -51,7 +53,7 @@ struct game_t {
     long turns;
     long wzdark;
     long zzword;
-    long abbrev[185+1];                /* FIXME: LOCSIZE in the compiler */
+    long abbrev[LOCSIZ+1];
     long dseen[NDWARVES+1];
     long dloc[NDWARVES+1];
     long odloc[NDWARVES+1];
index c04806519eea0e714322fff2c8838fa812161c2c..f0306562bf9eb77c24b599be8a9ef6bc2aeae245 100644 (file)
--- a/compile.c
+++ b/compile.c
@@ -1,7 +1,13 @@
+/*
+ * The dungeon compiler. Turns adventure.text into a set of C initializers
+ * defining (mostly) invariant state.  A couple of slots are messed with
+ * at runtime.
+ */
+#include "sizes.h"
+
 #define LINESIZE 100
 #define RTXSIZ 277
 #define CLSMAX 12
-#define LOCSIZ 185
 #define LINSIZ 12600
 #define TRNSIZ 5
 #define TABSIZ 330
@@ -548,10 +554,9 @@ void write_hints(FILE* c_file, FILE* header_file, long matrix[][HINTLEN], long d
 void write_files(FILE* c_file, FILE* header_file)
 {
   // preprocessor defines for the header
-  fprintf(header_file, "#define NOBJECTS %d\n", NOBJECTS);
+  fprintf(header_file, "#include \"sizes.h\"\n");
   fprintf(header_file, "#define RTXSIZ 277\n");
   fprintf(header_file, "#define CLSMAX 12\n");
-  fprintf(header_file, "#define LOCSIZ 185\n");
   fprintf(header_file, "#define LINSIZ %d\n", LINSIZ);
   fprintf(header_file, "#define TRNSIZ 5\n");
   fprintf(header_file, "#define TABSIZ 330\n");
diff --git a/init.c b/init.c
index 5425b7a0a15a4d615f1a08be86fec4b498e9b74d..879ea0847797f701bc8359f506b8df88015a0e36 100644 (file)
--- a/init.c
+++ b/init.c
@@ -33,6 +33,7 @@
 /* Note: 
  *  - the object count limit has been abstracted as NOBJECTS
  *  - the random message limit has been abstracted as RTXSIZE
+ *  - maximum locations limit has been abstracted as LOCSIZ
  */
 
 /*  Description of the database format
diff --git a/sizes.h b/sizes.h
new file mode 100644 (file)
index 0000000..e59fa86
--- /dev/null
+++ b/sizes.h
@@ -0,0 +1,4 @@
+/* maximum size limits shared by dungeon compiler and runtime */
+
+#define LOCSIZ         185
+#define NOBJECTS       100