Replace magic linenumbers with a clearer enum.
This commit is contained in:
parent
b22d6a65b9
commit
9bac28878d
3 changed files with 152 additions and 152 deletions
44
actions.c
44
actions.c
|
@ -977,27 +977,20 @@ static int wave(token_t obj)
|
||||||
* "goto".
|
* "goto".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int action(FILE *input, long STARTAT, long verb, long obj)
|
int action(FILE *input, enum speechpart part, long verb, long obj)
|
||||||
/* Analyse a verb. Remember what it was, go back for object if second word
|
/* Analyse a verb. Remember what it was, go back for object if second word
|
||||||
* unless verb is "say", which snarfs arbitrary second word.
|
* unless verb is "say", which snarfs arbitrary second word.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int kk;
|
int kk;
|
||||||
switch(STARTAT) {
|
switch(part)
|
||||||
case 4000: goto L4000;
|
{
|
||||||
case 4090: goto L4090;
|
case intransitive:
|
||||||
case 5000: goto L5000;
|
|
||||||
}
|
|
||||||
BUG(99);
|
|
||||||
|
|
||||||
L4000:
|
|
||||||
SPK=ACTSPK[verb];
|
SPK=ACTSPK[verb];
|
||||||
if (WD2 > 0 && verb != SAY) return(2800);
|
if (WD2 > 0 && verb != SAY) return(2800);
|
||||||
if (verb == SAY)obj=WD2;
|
if (verb == SAY)obj=WD2;
|
||||||
if (obj > 0) goto L4090;
|
if (obj == 0) {
|
||||||
|
|
||||||
/* Analyse an intransitive verb (ie, no object given yet). */
|
/* Analyse an intransitive verb (ie, no object given yet). */
|
||||||
|
|
||||||
switch (verb-1) {
|
switch (verb-1) {
|
||||||
case 0: /* CARRY */ return carry(INTRANSITIVE);
|
case 0: /* CARRY */ return carry(INTRANSITIVE);
|
||||||
case 1: /* DROP */ return(8000);
|
case 1: /* DROP */ return(8000);
|
||||||
|
@ -1035,10 +1028,12 @@ L4000:
|
||||||
case 33: /* ZZZZ */ return reservoir();
|
case 33: /* ZZZZ */ return reservoir();
|
||||||
}
|
}
|
||||||
BUG(23);
|
BUG(23);
|
||||||
|
}
|
||||||
|
/* FALLTHRU */
|
||||||
|
case transitive:
|
||||||
|
L4090:
|
||||||
/* Analyse a transitive verb. */
|
/* Analyse a transitive verb. */
|
||||||
|
switch (verb-1) {
|
||||||
L4090: switch (verb-1) {
|
|
||||||
case 0: /* CARRY */ return carry(obj);
|
case 0: /* CARRY */ return carry(obj);
|
||||||
case 1: /* DROP */ return discard(obj, false);
|
case 1: /* DROP */ return discard(obj, false);
|
||||||
case 2: /* SAY */ return say();
|
case 2: /* SAY */ return say();
|
||||||
|
@ -1075,14 +1070,14 @@ L4090: switch (verb-1) {
|
||||||
case 33: /* ZZZZ */ return reservoir();
|
case 33: /* ZZZZ */ return reservoir();
|
||||||
}
|
}
|
||||||
BUG(24);
|
BUG(24);
|
||||||
|
case unknown:
|
||||||
/* Analyse an object word. See if the thing is here, whether we've got a verb
|
/* Analyse an object word. See if the thing is here, whether
|
||||||
* yet, and so on. Object must be here unless verb is "find" or "invent(ory)"
|
* we've got a verb yet, and so on. Object must be here
|
||||||
* (and no new verb yet to be analysed). Water and oil are also funny, since
|
* unless verb is "find" or "invent(ory)" (and no new verb
|
||||||
* they are never actually dropped at any location, but might be here inside
|
* yet to be analysed). Water and oil are also funny, since
|
||||||
* the bottle or urn or as a feature of the location. */
|
* they are never actually dropped at any location, but might
|
||||||
|
* be here inside the bottle or urn or as a feature of the
|
||||||
L5000:
|
* location. */
|
||||||
if (!HERE(obj))
|
if (!HERE(obj))
|
||||||
goto L5100;
|
goto L5100;
|
||||||
L5010:
|
L5010:
|
||||||
|
@ -1131,4 +1126,7 @@ L5100:
|
||||||
SETPRM(1,WD1,WD1X);
|
SETPRM(1,WD1,WD1X);
|
||||||
RSPEAK(256);
|
RSPEAK(256);
|
||||||
return(2012);
|
return(2012);
|
||||||
|
default:
|
||||||
|
BUG(99);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
1
advent.h
1
advent.h
|
@ -182,3 +182,4 @@ extern long AMBER, ATTACK, AXE, BACK, BATTER, BEAR,
|
||||||
/* everything else */
|
/* everything else */
|
||||||
extern long K, SPK, WD1, WD1X, WD2, WD2X;
|
extern long K, SPK, WD1, WD1X, WD2, WD2X;
|
||||||
|
|
||||||
|
enum speechpart {unknown, intransitive, transitive};
|
||||||
|
|
9
main.c
9
main.c
|
@ -659,6 +659,7 @@ static bool do_command(FILE *cmdin)
|
||||||
long KQ, VERB, KK, V1, V2;
|
long KQ, VERB, KK, V1, V2;
|
||||||
long obj, i;
|
long obj, i;
|
||||||
static long IGO = 0;
|
static long IGO = 0;
|
||||||
|
enum speechpart part;
|
||||||
|
|
||||||
/* Can't leave cave once it's closing (except by main office). */
|
/* Can't leave cave once it's closing (except by main office). */
|
||||||
if (OUTSID(game.newloc) && game.newloc != 0 && game.closng) {
|
if (OUTSID(game.newloc) && game.newloc != 0 && game.closng) {
|
||||||
|
@ -868,11 +869,11 @@ L3000: SETPRM(1,WD1,WD1X);
|
||||||
|
|
||||||
/* Verb and object analysis moved to separate module. */
|
/* Verb and object analysis moved to separate module. */
|
||||||
|
|
||||||
L4000: i=4000; VERB=K; goto Laction;
|
L4000: part=intransitive; VERB=K; goto Laction;
|
||||||
L4090: i=4090; goto Laction;
|
L4090: part=transitive; goto Laction;
|
||||||
L5000: i=5000; obj = K;
|
L5000: part=unknown; obj = K;
|
||||||
Laction:
|
Laction:
|
||||||
switch (action(cmdin, i, VERB, obj)) {
|
switch (action(cmdin, part, VERB, obj)) {
|
||||||
case 2: return true;
|
case 2: return true;
|
||||||
case 8: goto L8;
|
case 8: goto L8;
|
||||||
case 2000: goto L2000;
|
case 2000: goto L2000;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue