Merge branch 'master' into actions-arithmetic

This commit is contained in:
Peje Nilsson 2017-06-16 10:10:38 +02:00
commit d4fc7a88b4
9 changed files with 1549 additions and 15 deletions

View file

@ -22,7 +22,7 @@
VERS=1.0
CC?=gcc
CCFLAGS+=-std=c99 -D _DEFAULT_SOURCE -Wall -Wpedantic -g
CCFLAGS+=-std=c99 -D _DEFAULT_SOURCE -Wall -Wpedantic -Wextra -g
LIBS=
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)

View file

@ -614,7 +614,7 @@ static int fly(token_t verb, token_t obj)
return GO_TERMINATE;
}
static int inven(token_t obj)
static int inven(void)
/* Inventory. If object, treat same as find. Else report on current burden. */
{
int spk=NO_CARRY;
@ -1087,7 +1087,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj)
case 16: /* TOSS */ return GO_UNKNOWN;
case 17: /* QUIT */ return quit(input);
case 18: /* FIND */ return GO_UNKNOWN;
case 19: /* INVEN */ return inven(obj);
case 19: /* INVEN */ return inven();
case 20: /* FEED */ return GO_UNKNOWN;
case 21: /* FILL */ return fill(verb, obj);
case 22: /* BLAST */ return blast();

View file

@ -12,7 +12,8 @@
#define MAXPARMS 25
#define INVLIMIT 7
#define INTRANSITIVE -1 /* illegal object number */
#define SPECIALBASE 300 /* base umber of special rooms */
#define SPECIALBASE 300 /* base number of special rooms */
#define WARNTIME 30 /* late game starts at game.limit-this */
typedef long token_t; /* word token - someday this will be char[TOKLEN+1] */
typedef long vocab_t; /* index into a vocabulary array */

10
main.c
View file

@ -248,8 +248,8 @@ static void checkhints(FILE *cmdin)
SETPRM(1,HINTS[hint][2],HINTS[hint][2]);
RSPEAK(HINT_COST);
game.hinted[hint]=YES(cmdin,WANT_HINT,HINTS[hint][4],OK_MAN);
if (game.hinted[hint] && game.limit > 30)
game.limit=game.limit+30*HINTS[hint][2];
if (game.hinted[hint] && game.limit > WARNTIME)
game.limit += WARNTIME*HINTS[hint][2];
}
}
}
@ -831,7 +831,7 @@ static void lampcheck(void)
* Second is for other cases of lamp dying. 12400 is when it
* goes out. Even then, he can explore outside for a while
* if desired. */
if (game.limit<=30 && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP))
if (game.limit <= WARNTIME && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP))
{
RSPEAK(REPLACE_BATTERIES);
game.prop[BATTER]=1;
@ -844,7 +844,7 @@ static void lampcheck(void)
game.prop[LAMP]=0;
if (HERE(LAMP))
RSPEAK(LAMP_OUT);
} else if (game.limit <= 30) {
} else if (game.limit <= WARNTIME) {
if (!game.lmwarn && HERE(LAMP)) {
game.lmwarn=true;
int spk=GET_BATTERIES;
@ -1058,7 +1058,7 @@ static bool do_command(FILE *cmdin)
if (i == -1) {
/* Gee, I don't understand. */
if (fallback_handler(rawbuf))
return true;
continue;
SETPRM(1,WD1,WD1X);
RSPEAK(DONT_KNOW);
goto L2600;

6
misc.c
View file

@ -67,7 +67,7 @@ void newspeak(char* msg)
// Handle format specifiers (including the custom %C, %L, %S) by adjusting the parameter accordingly, and replacing the specifier with %s.
int pi = 0; // parameter index
for (int i = 0; i < strlen(msg); ++i)
for (int i = 0; i < (int)strlen(msg); ++i)
{
if (msg[i] == '%')
{
@ -105,7 +105,7 @@ void newspeak(char* msg)
{
copy[i + 1] = 's';
packed_to_token(PARMS[pi], parameters[pi]);
for (int j = 0; j < strlen(parameters[pi]); ++j)
for (int j = 0; j < (int)strlen(parameters[pi]); ++j)
{
parameters[pi][j] = tolower(parameters[pi][j]);
}
@ -116,7 +116,7 @@ void newspeak(char* msg)
{
copy[i + 1] = 's';
packed_to_token(PARMS[pi], parameters[pi]);
for (int j = 0; j < strlen(parameters[pi]); ++j)
for (int j = 0; j < (int)strlen(parameters[pi]); ++j)
{
parameters[pi][j] = tolower(parameters[pi][j]);
}

View file

@ -11,7 +11,7 @@ The principal maintainers of this code are Eric S. Raymond and Jason
Ninneman. Eric received Don Woods's encouragement to update and ship
the game; Jason signed on early in the process to help. The assistance
of Peje Nilsson in restructuring some particularly grotty gotos is
gratefully acknowledged.
gratefully acknowledged. Petr Voropaev contributed fuzz testing.
== Nomenclature ==
@ -113,6 +113,7 @@ ways:
We don't need whatever minor performance gains this might collect,
and the choice to refrain will make forward translation into future
languages easier.
* There are a few gotos left that resist restructuring; all of these
are in the principal command interpreter function implementing its
state machine.
@ -124,10 +125,13 @@ ways:
compromise forward-portability to other languages.
* The code still has an unfortunately high density of magic numbers - in
particular, numeric object and room IDs. There are plans to fix this.
particular, numeric object IDs. There are plans to fix this.
* Much of the code still uses FORTRAN-style uppercase names.
* The code still assumes one-origin array indexing. Thus, arrays are
a cell larger than they strictly need to be and cell 0 is unused.
* The code is still mostly typeless, slinging around machine longs
like a FORTRAN or BCPL program. Some (incomplete) effort has been made
to introduce semantic types.

View file

@ -110,7 +110,7 @@ void score(enum termination mode)
SETPRM(1,score,mxscor);
SETPRM(3,game.turns,game.turns);
RSPEAK(TOTAL_SCORE);
for (long i=1; i<=CLSSES; i++) {
for (long i=1; i<=(long)CLSSES; i++) {
if(CVAL[i] >= score) {
newspeak(class_messages[i]);
i=CVAL[i]+1-score;

1304
tests/seedcrash.chk Normal file

File diff suppressed because it is too large Load diff

225
tests/seedcrash.log Normal file
View file

@ -0,0 +1,225 @@
## This crashed advent before the control path after seed was fixed.
n
seed 1635997320
in
take lamp
xyzzy
take rod
e
take cage
w
on
w
w
drop rod
take bird
take rod
w
free bird
wave rod
drop rod
take bird
take jade
e
e
e
off
xyzzy
drop jade
xyzzy
on
w
w
w
take rod
d
w
wave rod
drop rod
e
n
free bird
take bird
s
take jewelry
n
sw
w
feed dragon
kill dragon
yes
drink blood
take rug
e
e
n
take silver
n
off
plugh
drop jewelry
drop rug
drop silver
out
s
w
n
take appendage
free bird
drop cage
listen
s
s
n
in
take water
plugh
on
plover
ne
take pyramid
s
plover
s
d
take axe
u
s
up
w
w
w
w
throw axe
take axe
w
s
sw
se
s
kill machine
s
s
kill ogre
n
take ruby
s
w
n
n
n
nw
d
e
e
e
take diamonds
e
e
drop bottle
s
take gold
n
n
n
n
off
plugh
drop gold
drop diamonds
drop pyramid
drop ruby
plugh
on
s
s
u
take water
throw axe
take axe
n
n
d
bedquilt
slab
s
d
water plant
u
w
u
reservoir
F'UNJ
n
n
nw
u
u
u
u
ne
take ebony
sw
d
d
d
d
d
take water
s
s
s
s
d
s
d
water plant
u
e
d
get oil
u
w
d
climb
w
n
oil door
drop bottle
drop appendage
n
take trident
w
d
se
n
w
inven
drop trident
drop ebony
drop axe
drop lantern
e
take emerald
w
take lamp
take axe
take ebony
take trident
nw
s
take vase
se
e
take pillow
w
ne
e
n
n
seed 1635997320
n