Further infiltrare semantic types.

This commit is contained in:
Eric S. Raymond 2017-07-05 16:55:16 -04:00
parent d3578c9da9
commit 73608b6307
2 changed files with 26 additions and 22 deletions

View file

@ -116,6 +116,8 @@ enum phase_codes {
typedef long token_t; // word token - someday this will be char[TOKLEN+1] typedef long token_t; // word token - someday this will be char[TOKLEN+1]
typedef long vocab_t; // index into a vocabulary array */ 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 { struct game_t {
unsigned long lcg_a, lcg_c, lcg_m, lcg_x; unsigned long lcg_a, lcg_c, lcg_m, lcg_x;
@ -167,11 +169,11 @@ struct game_t {
long abbrev[NLOCATIONS + 1]; long abbrev[NLOCATIONS + 1];
long atloc[NLOCATIONS + 1]; long atloc[NLOCATIONS + 1];
long dseen[NDWARVES + 1]; // true if dwarf has seen him long dseen[NDWARVES + 1]; // true if dwarf has seen him
long dloc[NDWARVES + 1]; // location of dwarves, initially hard-wired in loc_t dloc[NDWARVES + 1]; // location of dwarves, initially hard-wired in
long odloc[NDWARVES + 1]; // prior loc of each dwarf, initially garbage loc_t odloc[NDWARVES + 1]; // prior loc of each dwarf, initially garbage
long fixed[NOBJECTS + 1]; loc_t fixed[NOBJECTS + 1];
long link[NOBJECTS * 2 + 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 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 hintlc[NHINTS]; // hinted[i] is true iff hint i has been used.
long prop[NOBJECTS + 1]; 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_action_vocab_id(const char*);
extern int get_special_vocab_id(const char*); extern int get_special_vocab_id(const char*);
extern long get_vocab_id(const char*); extern long get_vocab_id(const char*);
extern void juggle(long); extern void juggle(obj_t);
extern void move(long, long); extern void move(obj_t, loc_t);
extern long put(long, long, long); extern long put(obj_t, long, long);
extern void carry(long, long); extern void carry(obj_t, loc_t);
extern void drop(long, long); extern void drop(obj_t, loc_t);
extern long atdwrf(long); extern long atdwrf(loc_t);
extern long setbit(long); extern long setbit(long);
extern bool tstbit(long, int); extern bool tstbit(long, int);
extern void make_zzword(char*); extern void make_zzword(char*);
@ -242,7 +244,7 @@ extern int resume(void);
extern int restore(FILE *); extern int restore(FILE *);
extern long initialise(void); extern long initialise(void);
extern int action(struct command_t *command); 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__)); void bug(enum bugtype, const char *) __attribute__((__noreturn__));

24
misc.c
View file

@ -535,11 +535,11 @@ long get_vocab_id(const char* word)
return (WORD_NOT_FOUND); 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 /* 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. */ * 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]; i = game.place[object];
j = game.fixed[object]; j = game.fixed[object];
@ -547,7 +547,7 @@ void juggle(long object)
move(object + NOBJECTS, j); 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 /* 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 * 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 * 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); drop(object, where);
} }
long put(long object, long where, long pval) 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 /* put() is the same as move(), except it returns a value used to set up the
* negated game.prop values for the repository objects. */ * negated game.prop values for the repository objects. */
{ {
move(object, where); 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 /* 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 * location. Incr holdng unless it was already being toted. If object>NOBJECTS
* (moving "fixed" second loc), don't change game.place or game.holdng. */ * (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]; 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 /* Place an object at a given loc, prefixing it onto the game.atloc list. Decr
* game.holdng if the object was being toted. */ * game.holdng if the object was being toted. */
{ {
@ -613,7 +613,7 @@ void drop(long object, long where)
game.atloc[where] = object; 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 /* 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 * there (or if dwarves not active yet), -1 if all dwarves are dead. Ignore
* the pirate (6th dwarf). */ * the pirate (6th dwarf). */
@ -690,9 +690,11 @@ void bug(enum bugtype num, const char *error_string)
/* end */ /* 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 */ /* Object must have a change-message list for this to be useful; only some do */
{ {
game.prop[obj] = state; game.prop[obj] = state;
pspeak(obj, change, state, true); pspeak(obj, change, state, true);
} }
/* end */