Information hiding.
[open-adventure.git] / advent.h
index 421c4817f84773105f2ec43fcf8eaad9f0dead9a..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,73 +36,53 @@ extern lcg_state lcgstate;
 #define READ_MODE "rb"
 #define WRITE_MODE "wb"
 
 #define READ_MODE "rb"
 #define WRITE_MODE "wb"
 
-extern void fSPEAK(long);
-#define SPEAK(N) fSPEAK(N)
-extern void fPSPEAK(long,long);
-#define PSPEAK(MSG,SKIP) fPSPEAK(MSG,SKIP)
-extern void fRSPEAK(long);
-#define RSPEAK(I) fRSPEAK(I)
-extern void fSETPRM(long,long,long);
-#define SETPRM(FIRST,P1,P2) fSETPRM(FIRST,P1,P2)
-extern bool fGETIN(FILE *,long*,long*,long*,long*);
+extern void SPEAK(vocab_t);
+extern void PSPEAK(vocab_t,int);
+extern void RSPEAK(vocab_t);
+extern void SETPRM(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 fYES(FILE *,long,long,long);
-#define YES(input,X,Y,Z) fYES(input,X,Y,Z)
-extern long fGETNUM(FILE *);
-#define GETNUM(K) fGETNUM(K)
-extern long fGETTXT(long,long,long);
-#define GETTXT(SKIP,ONEWRD,UPPER) fGETTXT(SKIP,ONEWRD,UPPER)
-extern long fMAKEWD(long);
-#define MAKEWD(LETTRS) fMAKEWD(LETTRS)
-extern void fPUTTXT(long,long*,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(token_t,long*,long);
 #define PUTTXT(WORD,STATE,CASE) fPUTTXT(WORD,&STATE,CASE)
 #define PUTTXT(WORD,STATE,CASE) fPUTTXT(WORD,&STATE,CASE)
-extern void fSHFTXT(long,long);
-#define SHFTXT(FROM,DELTA) fSHFTXT(FROM,DELTA)
-extern void fTYPE0();
-#define TYPE0() fTYPE0()
+
+extern void SHFTXT(long,long);
+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 fSAVARR(long*,long);
 #define SAVARR(ARR,N) fSAVARR(ARR,N)
 extern void fSAVWRD(long,long*);
 #define SAVWRD(OP,WORD) fSAVWRD(OP,&WORD)
 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 fSAVARR(long*,long);
 #define SAVARR(ARR,N) fSAVARR(ARR,N)
 extern void fSAVWRD(long,long*);
 #define SAVWRD(OP,WORD) fSAVWRD(OP,&WORD)
-extern long fVOCAB(long,long);
-#define VOCAB(ID,INIT) fVOCAB(ID,INIT)
-extern void fDSTROY(long);
-#define DSTROY(OBJECT) fDSTROY(OBJECT)
-extern void fJUGGLE(long);
-#define JUGGLE(OBJECT) fJUGGLE(OBJECT)
-extern void fMOVE(long,long);
-#define MOVE(OBJECT,WHERE) fMOVE(OBJECT,WHERE)
-extern long fPUT(long,long,long);
-#define PUT(OBJECT,WHERE,PVAL) fPUT(OBJECT,WHERE,PVAL)
-extern void fCARRY(long,long);
-#define CARRY(OBJECT,WHERE) fCARRY(OBJECT,WHERE)
-extern void fDROP(long,long);
-#define DROP(OBJECT,WHERE) fDROP(OBJECT,WHERE)
-extern long fATDWRF(long);
-#define ATDWRF(WHERE) fATDWRF(WHERE)
-extern long fSETBIT(long);
-#define SETBIT(BIT) fSETBIT(BIT)
-extern long fTSTBIT(long,long);
-#define TSTBIT(MASK,BIT) fTSTBIT(MASK,BIT)
-extern long fRNDVOC(long,long);
-#define RNDVOC(CHAR,FORCE) fRNDVOC(CHAR,FORCE)
-extern void fBUG(long);
-#define BUG(NUM) fBUG(NUM)
-extern void fMAPLIN(FILE *);
-#define MAPLIN(FIL) fMAPLIN(FIL)
-extern void fTYPE();
-#define TYPE() fTYPE()
-extern void fMPINIT();
-#define MPINIT() fMPINIT()
+
+extern long VOCAB(long,long);
+extern void DSTROY(long);
+extern void JUGGLE(long);
+extern void MOVE(long,long);
+extern long PUT(long,long,long);
+extern void CARRY(long,long);
+extern void DROP(long,long);
+extern long ATDWRF(long);
+extern long SETBIT(long);
+extern bool TSTBIT(long,int);
+extern long RNDVOC(long,long);
+extern void BUG(long);
+extern void MAPLIN(FILE *);
+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 fIABS(long);
-#define IABS(N) fIABS(N)
-extern long fMOD(long,long);
-#define MOD(N,M) fMOD(N,M)
+
+extern long MOD(long,long);
+
 extern void set_seed(long);
 extern unsigned long get_next_lcg_value(void);
 extern long randrange(long);
 extern void set_seed(long);
 extern unsigned long get_next_lcg_value(void);
 extern long randrange(long);
@@ -97,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,
@@ -113,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;