Information hiding.
[open-adventure.git] / advent.h
index e23f88e76eea00cfc88c27e143c32ead280c7dec..3e5dc9a39e918f9dd653dd5aab4104157ec9b774 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -2,13 +2,29 @@
 #include <stdbool.h>
 
 #define LINESIZE       100
 #include <stdbool.h>
 
 #define LINESIZE       100
+#define NDWARVES       6
+#define PIRATE         NDWARVES        /* must be NDWARVES-1 when zero-origin */
 
 typedef struct lcg_state
 {
   unsigned long a, c, m, x;
 } lcg_state;
 
 
 typedef struct lcg_state
 {
   unsigned long a, c, m, x;
 } lcg_state;
 
-extern long ABB[], ATLOC[], BLKLIN, DFLAG, DLOC[], FIXED[], HOLDNG,
+typedef long token_t;  /* word token - someday this will be a character array */
+typedef long vocab_t;  /* index into a vocabulary array */
+
+struct game_t {
+    long oldloc;
+    long oldlc2;
+    long zzword;
+    long dseen[NDWARVES+1];
+    long dloc[NDWARVES+1];
+    long odloc[NDWARVES+1];
+};
+
+extern struct game_t game;
+
+extern long ABB[], ATLOC[], BLKLIN, DFLAG, FIXED[], HOLDNG,
                LINK[], LNLENG, LNPOSN,
                PARMS[], PLACE[];
 extern char rawbuf[LINESIZE], INLINE[LINESIZE+1], MAP1[], MAP2[];
                LINK[], LNLENG, LNPOSN,
                PARMS[], PLACE[];
 extern char rawbuf[LINESIZE], INLINE[LINESIZE+1], MAP1[], MAP2[];
@@ -20,23 +36,23 @@ extern lcg_state lcgstate;
 #define READ_MODE "rb"
 #define WRITE_MODE "wb"
 
 #define READ_MODE "rb"
 #define WRITE_MODE "wb"
 
-extern void SPEAK(long);
-extern void PSPEAK(long,long);
-extern void RSPEAK(long);
+extern void SPEAK(vocab_t);
+extern void PSPEAK(vocab_t,int);
+extern void RSPEAK(vocab_t);
 extern void SETPRM(long,long,long);
 
 extern void SETPRM(long,long,long);
 
-extern bool fGETIN(FILE *,long*,long*,long*,long*);
+extern bool fGETIN(FILE *,token_t*,token_t*,token_t*,token_t*);
 #define GETIN(input,WORD1,WORD1X,WORD2,WORD2X) fGETIN(input,&WORD1,&WORD1X,&WORD2,&WORD2X)
 
 #define GETIN(input,WORD1,WORD1X,WORD2,WORD2X) fGETIN(input,&WORD1,&WORD1X,&WORD2,&WORD2X)
 
-extern long YES(FILE *,long,long,long);
-extern long GETTXT(long,long,long);
-extern long MAKEWD(long);
+extern long YES(FILE *,vocab_t,vocab_t,vocab_t);
+extern long GETTXT(bool,bool,bool);
+extern token_t MAKEWD(long);
 
 
-extern void fPUTTXT(long,long*,long);
+extern void fPUTTXT(token_t,long*,long);
 #define PUTTXT(WORD,STATE,CASE) fPUTTXT(WORD,&STATE,CASE)
 
 extern void SHFTXT(long,long);
 #define PUTTXT(WORD,STATE,CASE) fPUTTXT(WORD,&STATE,CASE)
 
 extern void SHFTXT(long,long);
-extern void TYPE0();
+extern void TYPE0(void);
 
 extern void fSAVWDS(long*,long*,long*,long*,long*,long*,long*);
 #define SAVWDS(W1,W2,W3,W4,W5,W6,W7) fSAVWDS(&W1,&W2,&W3,&W4,&W5,&W6,&W7)
 
 extern void fSAVWDS(long*,long*,long*,long*,long*,long*,long*);
 #define SAVWDS(W1,W2,W3,W4,W5,W6,W7) fSAVWDS(&W1,&W2,&W3,&W4,&W5,&W6,&W7)
@@ -58,14 +74,13 @@ extern bool TSTBIT(long,int);
 extern long RNDVOC(long,long);
 extern void BUG(long);
 extern void MAPLIN(FILE *);
 extern long RNDVOC(long,long);
 extern void BUG(long);
 extern void MAPLIN(FILE *);
-extern void TYPE();
-extern void MPINIT();
+extern void TYPE(void);
+extern void MPINIT(void);
 
 extern void fSAVEIO(long,long,long*);
 #define SAVEIO(OP,IN,ARR) fSAVEIO(OP,IN,ARR)
 extern void DATIME(long*, long*);
 
 
 extern void fSAVEIO(long,long,long*);
 #define SAVEIO(OP,IN,ARR) fSAVEIO(OP,IN,ARR)
 extern void DATIME(long*, long*);
 
-extern long IABS(long);
 extern long MOD(long,long);
 
 extern void set_seed(long);
 extern long MOD(long,long);
 
 extern void set_seed(long);
@@ -78,15 +93,15 @@ extern long ABBNUM, AMBER, ATTACK, AXE, BACK, BATTER, BEAR,
    BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST, CHLOC, CHLOC2,
    CLAM, CLOCK1, CLOCK2, CLOSED, CLOSNG, CLSHNT,
    COINS, CONDS, DALTLC, DETAIL,
    BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST, CHLOC, CHLOC2,
    CLAM, CLOCK1, CLOCK2, CLOSED, CLOSNG, CLSHNT,
    COINS, CONDS, DALTLC, DETAIL,
-   DKILL, DOOR, DPRSSN, DRAGON, DSEEN[], DTOTAL, DWARF, EGGS,
+   DKILL, DOOR, DPRSSN, DRAGON, DTOTAL, DWARF, EGGS,
    EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOBAR, FOOD,
    GRATE, HINT, HINTED[], HINTLC[],
    I, INVENT, IGO, IWEST, J, JADE, K, K2, KEYS, KK,
    KNFLOC, KNIFE, KQ, L, LAMP, LIMIT, LL,
    EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOBAR, FOOD,
    GRATE, HINT, HINTED[], HINTLC[],
    I, INVENT, IGO, IWEST, J, JADE, K, K2, KEYS, KK,
    KNFLOC, KNIFE, KQ, L, LAMP, LIMIT, LL,
-  LMWARN, LOC, LOCK, LOOK,
+   LMWARN, LOC, LOCK, LOOK,
    MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR,
    NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ,
    MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR,
    NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ,
-   ODLOC[], OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER,
+   OGRE, OIL, OLDOBJ, OYSTER,
    PANIC, PEARL, PILLOW, PLANT, PLANT2, PROP[], PYRAM,
    RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAVED, SAY,
    SCORE, SECT, SETUP, SIGN, SNAKE, SPK, STEPS, STICK,
    PANIC, PEARL, PILLOW, PLANT, PLANT2, PROP[], PYRAM,
    RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAVED, SAY,
    SCORE, SECT, SETUP, SIGN, SNAKE, SPK, STEPS, STICK,
@@ -94,5 +109,5 @@ extern long ABBNUM, AMBER, ATTACK, AXE, BACK, BATTER, BEAR,
    TRNDEX, TRNLUZ, TROLL, TROLL2,
    TURNS, URN, V1, V2, VASE, VEND, VERB,
    VOLCAN, VRSION, WATER, WD1, WD1X, WD2, WD2X,
    TRNDEX, TRNLUZ, TROLL, TROLL2,
    TURNS, URN, V1, V2, VASE, VEND, VERB,
    VOLCAN, VRSION, WATER, WD1, WD1X, WD2, WD2X,
-   WZDARK, ZZWORD;
+   WZDARK;