From: Eric S. Raymond Date: Wed, 5 Jul 2017 20:55:16 +0000 (-0400) Subject: Further infiltrare semantic types. X-Git-Tag: takebird X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=73608b6307938818e32c57ae2eb536e19b10480e;p=open-adventure.git Further infiltrare semantic types. --- diff --git a/advent.h b/advent.h index 470e79f..34f4415 100644 --- a/advent.h +++ b/advent.h @@ -116,6 +116,8 @@ enum phase_codes { typedef long token_t; // word token - someday this will be char[TOKLEN+1] typedef long vocab_t; // index into a vocabulary array */ +typedef long obj_t; // index into the object array */ +typedef long loc_t; // index into the locations array */ struct game_t { unsigned long lcg_a, lcg_c, lcg_m, lcg_x; @@ -167,11 +169,11 @@ struct game_t { long abbrev[NLOCATIONS + 1]; long atloc[NLOCATIONS + 1]; long dseen[NDWARVES + 1]; // true if dwarf has seen him - long dloc[NDWARVES + 1]; // location of dwarves, initially hard-wired in - long odloc[NDWARVES + 1]; // prior loc of each dwarf, initially garbage - long fixed[NOBJECTS + 1]; + loc_t dloc[NDWARVES + 1]; // location of dwarves, initially hard-wired in + loc_t odloc[NDWARVES + 1]; // prior loc of each dwarf, initially garbage + loc_t fixed[NOBJECTS + 1]; long link[NOBJECTS * 2 + 1]; - long place[NOBJECTS + 1]; + loc_t place[NOBJECTS + 1]; long hinted[NHINTS]; // hintlc[i] is how long he's been at LOC with cond bit i long hintlc[NHINTS]; // hinted[i] is true iff hint i has been used. long prop[NOBJECTS + 1]; @@ -222,12 +224,12 @@ 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); -extern void carry(long, long); -extern void drop(long, long); -extern long atdwrf(long); +extern void juggle(obj_t); +extern void move(obj_t, loc_t); +extern long put(obj_t, long, long); +extern void carry(obj_t, loc_t); +extern void drop(obj_t, loc_t); +extern long atdwrf(loc_t); extern long setbit(long); extern bool tstbit(long, int); extern void make_zzword(char*); @@ -242,7 +244,7 @@ extern int resume(void); extern int restore(FILE *); extern long initialise(void); extern int action(struct command_t *command); -extern void state_change(long obj, long state); +extern void state_change(obj_t, long); void bug(enum bugtype, const char *) __attribute__((__noreturn__)); diff --git a/misc.c b/misc.c index c219cfb..be25990 100644 --- a/misc.c +++ b/misc.c @@ -535,11 +535,11 @@ long get_vocab_id(const char* word) return (WORD_NOT_FOUND); } -void juggle(long object) +void juggle(obj_t object) /* Juggle an object by picking it up and putting it down again, the purpose * being to get the object to the front of the chain of things at its loc. */ { - long i, j; + loc_t i, j; i = game.place[object]; j = game.fixed[object]; @@ -547,7 +547,7 @@ void juggle(long object) move(object + NOBJECTS, j); } -void move(long object, long where) +void move(obj_t object, loc_t where) /* Place any object anywhere by picking it up and dropping it. May * already be toting, in which case the carry is a no-op. Mustn't * pick up objects which are not at any loc, since carry wants to @@ -564,15 +564,15 @@ void move(long object, long where) drop(object, where); } -long put(long object, long where, long pval) -/* PUT is the same as MOVE, except it returns a value used to set up the +long put(obj_t object, loc_t where, long pval) +/* put() is the same as move(), except it returns a value used to set up the * negated game.prop values for the repository objects. */ { move(object, where); - return (-1) - pval;; + return STASHED(pval); } -void carry(long object, long where) +void carry(obj_t object, loc_t where) /* Start toting an object, removing it from the list of things at its former * location. Incr holdng unless it was already being toted. If object>NOBJECTS * (moving "fixed" second loc), don't change game.place or game.holdng. */ @@ -596,7 +596,7 @@ void carry(long object, long where) game.link[temp] = game.link[object]; } -void drop(long object, long where) +void drop(obj_t object, loc_t where) /* Place an object at a given loc, prefixing it onto the game.atloc list. Decr * game.holdng if the object was being toted. */ { @@ -613,7 +613,7 @@ void drop(long object, long where) game.atloc[where] = object; } -long atdwrf(long where) +long atdwrf(loc_t where) /* Return the index of first dwarf at the given location, zero if no dwarf is * there (or if dwarves not active yet), -1 if all dwarves are dead. Ignore * the pirate (6th dwarf). */ @@ -690,9 +690,11 @@ void bug(enum bugtype num, const char *error_string) /* end */ -void state_change(long obj, long state) +void state_change(obj_t obj, long state) /* Object must have a change-message list for this to be useful; only some do */ { game.prop[obj] = state; pspeak(obj, change, state, true); -} \ No newline at end of file +} + +/* end */