X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=advent.h;h=d34310663c8f148a4efb7882862249c91b04e789;hp=51e7317dc9fdab1a535a8997b4b92b20585d581a;hb=60ab7a63dc7c2b52bf21887f365a58588a08f708;hpb=9bac28878d14fc8eebc1cc654586f689dfa3a06d diff --git a/advent.h b/advent.h index 51e7317..d343106 100644 --- a/advent.h +++ b/advent.h @@ -1,7 +1,7 @@ #include #include -#include "sizes.h" +#include "common.h" #define LINESIZE 100 #define NDWARVES 6 @@ -80,14 +80,16 @@ extern char rawbuf[LINESIZE], INLINE[LINESIZE+1]; extern const char ascii_to_advent[]; extern const char advent_to_ascii[]; extern FILE *logfp; -extern bool oldstyle; +extern bool oldstyle, editline, prompt; extern lcg_state lcgstate; /* b is not needed for POSIX but harmless */ #define READ_MODE "rb" #define WRITE_MODE "wb" - -extern void SPEAK(vocab_t); +extern void* xmalloc(size_t); +extern char* xstrdup(const char*); +extern void packed_to_token(long, char token[6]); +extern void newspeak(char*); extern void PSPEAK(vocab_t,int); extern void RSPEAK(vocab_t); extern void SETPRM(long,long,long); @@ -98,14 +100,6 @@ extern token_t MAKEWD(long); extern void PUTTXT(token_t,long*,long); 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 long VOCAB(long,long); extern void DSTROY(long); extern void JUGGLE(long); @@ -118,39 +112,36 @@ extern long SETBIT(long); extern bool TSTBIT(long,int); extern long RNDVOC(long,long); extern void BUG(long) __attribute__((noreturn)); -extern void MAPLIN(FILE *); +extern bool MAPLIN(FILE *); extern void TYPE(void); - -extern void fSAVEIO(long,long,long*); -#define SAVEIO(OP,IN,ARR) fSAVEIO(OP,IN,ARR) extern void DATIME(long*, long*); -extern long MOD(long,long); - extern void set_seed(long); extern unsigned long get_next_lcg_value(void); extern long randrange(long); extern void score(long); +extern int saveresume(FILE *, bool); -/* Statement functions - * +/* + * MOD(N,M) = Arithmetic modulus * AT(OBJ) = true if on either side of two-placed object * CNDBIT(L,N) = true if COND(L) has bit n set (bit 0 is units bit) - * DARK(DUMMY) = true if location "LOC" is dark + * DARK(LOC) = true if location "LOC" is dark * FORCED(LOC) = true if LOC moves without asking for input (COND=2) - * FOREST(LOC) = true if LOC is part of the forest - * GSTONE(OBJ) = true if OBJ is a gemstone + * FOREST(LOC) = true if LOC is part of the forest + * GSTONE(OBJ) = true if OBJ is a gemstone * HERE(OBJ) = true if the OBJ is at "LOC" (or is being carried) - * LIQ(DUMMY) = object number of liquid in bottle + * LIQUID() = object number of liquid in bottle * LIQLOC(LOC) = object number of liquid (if any) at LOC - * PCT(N) = true N% of the time (N integer from 0 to 100) + * PCT(N) = true N% of the time (N integer from 0 to 100) * TOTING(OBJ) = true if the OBJ is being carried */ +#define MOD(N,M) ((N) % (M)) #define TOTING(OBJ) (game.place[OBJ] == -1) #define AT(OBJ) (game.place[OBJ] == game.loc || game.fixed[OBJ] == game.loc) #define HERE(OBJ) (AT(OBJ) || TOTING(OBJ)) #define LIQ2(PBOTL) ((1-(PBOTL))*WATER+((PBOTL)/2)*(WATER+OIL)) -#define LIQ(DUMMY) (LIQ2(game.prop[BOTTLE]<0 ? -1-game.prop[BOTTLE] : game.prop[BOTTLE])) +#define LIQUID() (LIQ2(game.prop[BOTTLE]<0 ? -1-game.prop[BOTTLE] : game.prop[BOTTLE])) #define LIQLOC(LOC) (LIQ2((MOD(COND[LOC]/2*2,8)-5)*MOD(COND[LOC]/4,2)+1)) #define CNDBIT(L,N) (TSTBIT(COND[L],N)) #define FORCED(LOC) (COND[LOC] == 2) @@ -179,7 +170,30 @@ extern long AMBER, ATTACK, AXE, BACK, BATTER, BEAR, RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAY, SIGN, SNAKE, STEPS, STICK, STREAM, THROW, TRIDNT, TROLL, TROLL2, URN, VASE, VEND, VOLCAN, WATER; -/* everything else */ -extern long K, SPK, WD1, WD1X, WD2, WD2X; enum speechpart {unknown, intransitive, transitive}; + +/* Phase codes for action returns. + * These were at one time FORTRAN line numbers. + * The values don't matter, but perturb their order at your peril. + */ +#define GO_TERMINATE 2 +#define GO_MOVE 8 +#define GO_TOP 2000 +#define GO_CLEAROBJ 2012 +#define GO_CHECKHINT 2600 +#define GO_CHECKFOO 2607 +#define GO_CLOSEJUMP 2610 +#define GO_DIRECTION 2620 +#define GO_LOOKUP 2630 +#define GO_WORD2 2800 +#define GO_SPECIALS 1900 +#define GO_UNKNOWN 8000 +#define GO_ACTION 40000 +#define GO_DWARFWAKE 19000 + +/* hack to ignore GCC Unused Result */ +#define IGNORE(r) do{if (r){}}while(0) + +/* end */ +