Coverage - Test going back when you can't.
[open-adventure.git] / advent.h
index 754ea1646d419a34172849732052ddfafb9fbf7b..d161d04de8ef7e44bf4226e131d95aa1f6af3d09 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -20,6 +20,7 @@
 #define FLASHTIME      50      /*turns from first warning till blinding flash */
 #define PANICTIME      15              /* time left after closing */
 #define BATTERYLIFE    2500            /* turn limit increment from batteries */
+#define WORD_NOT_FOUND  -1              /* "Word not found" flag value for the vocab hash functions. */
 
 typedef long token_t;  /* word token - someday this will be char[TOKLEN+1] */
 typedef long vocab_t;  /* index into a vocabulary array */
@@ -62,7 +63,7 @@ struct game_t {
     long trnluz;       /* # points lost so far due to number of turns used */
     long turns;                /* how many commands he's given (ignores yes/no) */
     bool wzdark;       /* whether the loc he's leaving was dark */
-    long zzword;
+    char zzword[6];
     bool blooded;      /* has player drunk of dragon's blood? */
     long abbrev[NLOCATIONS + 1];
     long atloc[NLOCATIONS + 1];
@@ -86,14 +87,16 @@ extern const char advent_to_ascii[];
 extern FILE *logfp;
 extern bool oldstyle, editline, prompt;
 
-enum speaktype {touch, look, hear, study};
+enum speaktype {touch, look, hear, study, change};
 
 /* b is not needed for POSIX but harmless */
 #define READ_MODE "rb"
 #define WRITE_MODE "wb"
+extern char* xstrdup(const char* s);
 extern void* xmalloc(size_t size);
 extern void packed_to_token(long, char token[]);
-extern void token_to_packed(char token[], long*);
+extern long token_to_packed(const char token[6]);
+extern void tokenize(char*, long tokens[4]);
 extern void vspeak(const char*, va_list);
 extern bool wordeq(token_t, token_t);
 extern bool wordempty(token_t);
@@ -103,11 +106,18 @@ extern void pspeak(vocab_t, enum speaktype, int, ...);
 extern void rspeak(vocab_t, ...);
 extern bool GETIN(FILE *, token_t*, token_t*, token_t*, token_t*);
 extern void echo_input(FILE*, char*, char*);
+extern int word_count(char*);
 extern char* get_input(void);
+extern bool silent_yes(void);
 extern bool yes(const char*, const char*, const char*);
 extern long GETTXT(bool, bool, bool);
 extern token_t MAKEWD(long);
 extern long vocab(long, long);
+extern int get_motion_vocab_id(const char*);
+extern int get_object_vocab_id(const char*);
+extern int get_action_vocab_id(const char*);
+extern int get_special_vocab_id(const char*);
+extern long get_vocab_id(const char*);
 extern void juggle(long);
 extern void move(long, long);
 extern long put(long, long, long);
@@ -117,6 +127,7 @@ extern long atdwrf(long);
 extern long setbit(long);
 extern bool tstbit(long, int);
 extern long rndvoc(long, long);
+extern void make_zzword(char*);
 extern bool MAPLIN(FILE *);
 extern void datime(long*, long*);
 
@@ -127,7 +138,7 @@ extern unsigned long get_next_lcg_value(void);
 extern long randrange(long);
 extern long score(enum termination);
 extern void terminate(enum termination) __attribute__((noreturn));
-extern int savefile(FILE *);
+extern int savefile(FILE *, long);
 extern int suspend(void);
 extern int resume(void);
 extern int restore(FILE *);
@@ -160,27 +171,11 @@ extern int restore(FILE *);
 #define PCT(N)         (randrange(100) < (N))
 #define GSTONE(OBJ)    ((OBJ) == EMERALD || (OBJ) == RUBY || (OBJ) == AMBER || (OBJ) == SAPPH)
 #define FOREST(LOC)    CNDBIT(LOC, COND_FOREST)
-#define VOCWRD(LETTRS,SECT)    (vocab(MAKEWD(LETTRS),SECT))
 #define SPECIAL(LOC)   ((LOC) > SPECIALBASE)
 #define OUTSID(LOC)    (CNDBIT(LOC, COND_ABOVE) || FOREST(LOC))
 
 #define INDEEP(LOC)    ((LOC) >= LOC_MISTHALL && !OUTSID(LOC))
 
-/* vocabulary items */
-extern long NUL;
-extern long BACK;
-extern long LOOK;
-extern long CAVE;
-extern long FIND;
-extern long INVENT;
-extern long SAY;
-extern long ENTER;
-extern long STREAM;
-extern long DPRSSN;
-extern long ENTRNC;
-extern long LOCK;
-extern long THROW;
-
 enum speechpart {unknown, intransitive, transitive};
 
 struct command_t {
@@ -192,7 +187,7 @@ struct command_t {
 };
 
 void initialise(void);
-int action(FILE *input, struct command_t *command);
+int action(struct command_t *command);
 
 /* Phase codes for action returns.
  * These were at one time FORTRAN line numbers.