diff options
author | Paul Janzen <pjanzen@cvs.openbsd.org> | 1998-08-31 02:29:48 +0000 |
---|---|---|
committer | Paul Janzen <pjanzen@cvs.openbsd.org> | 1998-08-31 02:29:48 +0000 |
commit | bb35f439bf983e0e710d358d8f8950ffd5f3e236 (patch) | |
tree | e5b6152e91d69af959bdbfb8af0cf85d0f31f0b4 | |
parent | b20ad5f395775dde4d91a3b8af14eee89f3e7dbb (diff) |
merge in NetBSD, including recent PR's of jsm28@cam.ac.uk
-rw-r--r-- | games/adventure/adventure.6 | 10 | ||||
-rw-r--r-- | games/adventure/crc.c | 135 | ||||
-rw-r--r-- | games/adventure/done.c | 160 | ||||
-rw-r--r-- | games/adventure/hdr.h | 127 | ||||
-rw-r--r-- | games/adventure/init.c | 279 | ||||
-rw-r--r-- | games/adventure/io.c | 690 | ||||
-rw-r--r-- | games/adventure/main.c | 894 | ||||
-rw-r--r-- | games/adventure/save.c | 198 | ||||
-rw-r--r-- | games/adventure/setup.c | 46 | ||||
-rw-r--r-- | games/adventure/subr.c | 1423 | ||||
-rw-r--r-- | games/adventure/vocab.c | 246 | ||||
-rw-r--r-- | games/adventure/wizard.c | 113 |
12 files changed, 2397 insertions, 1924 deletions
diff --git a/games/adventure/adventure.6 b/games/adventure/adventure.6 index 90743efa8b5..2ec29e7a00f 100644 --- a/games/adventure/adventure.6 +++ b/games/adventure/adventure.6 @@ -1,4 +1,4 @@ -.\" $NetBSD: adventure.6,v 1.2 1995/03/21 12:04:57 cgd Exp $ +.\" $OpenBSD: adventure.6,v 1.2 1998/08/31 02:29:35 pjanzen Exp $ .\" .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. @@ -45,7 +45,7 @@ .Nm adventure .Nd an exploration game .Sh SYNOPSIS -.Nm adventure +.Nm .Op saved-file .Sh DESCRIPTION The object of the game is to locate and explore Colossal Cave, find the @@ -57,3 +57,9 @@ To terminate a game, enter .Dq quit ; to save a game for later resumption, enter .Dq suspend . +.Sh AUTHORS +The game +.Nm +was originally written in Fortran by Will Crowther +and Don Woods. It was later translated to C and enhanced by Jim +Gillogly (jim@rand.org). diff --git a/games/adventure/crc.c b/games/adventure/crc.c index 34020907e69..a2e3dbff040 100644 --- a/games/adventure/crc.c +++ b/games/adventure/crc.c @@ -1,3 +1,4 @@ +/* $OpenBSD: crc.c,v 1.3 1998/08/31 02:29:36 pjanzen Exp $ */ /* $NetBSD: crc.c,v 1.2 1995/03/21 12:04:59 cgd Exp $ */ /*- @@ -41,65 +42,65 @@ static char sccsid[] = "@(#)crc.c 8.1 (Berkeley) 5/31/93"; static char ORIGINAL_sccsid[] = "@(#)crc.c 5.2 (Berkeley) 4/4/91"; #else -static char rcsid[] = "$NetBSD: crc.c,v 1.2 1995/03/21 12:04:59 cgd Exp $"; +static char rcsid[] = "$OpenBSD: crc.c,v 1.3 1998/08/31 02:29:36 pjanzen Exp $"; #endif #endif /* not lint */ -typedef unsigned long u_long; +#include "extern.h" -u_long crctab[] = { +unsigned long crctab[] = { 0x7fffffff, - 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, - 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, - 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, - 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, - 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, - 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, - 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, - 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, - 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, - 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, - 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, - 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, - 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, - 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, - 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, - 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, - 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, - 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, - 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, - 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, - 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, - 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, - 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, - 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, - 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, - 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, - 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, - 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, - 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, - 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, - 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, - 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, - 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, - 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, + 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, + 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, + 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, + 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, + 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, + 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, + 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, + 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, + 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, + 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, + 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, + 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, + 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, + 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, + 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, + 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, + 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, + 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, + 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, + 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, + 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, + 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, + 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, + 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, + 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, + 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, + 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, + 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, + 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, + 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, + 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, + 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, + 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, + 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, + 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, + 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; /* @@ -110,31 +111,31 @@ u_long crctab[] = { * it. */ -u_long crcval; -int step; +unsigned long crcval; +unsigned int step; +void crc_start() { crcval = step = 0; } -u_long crc(ptr, nr) /* Process nr bytes at a time; ptr points to them */ -char *ptr; -int nr; +unsigned long +crc(ptr, nr) /* Process nr bytes at a time; ptr points to them */ + const char *ptr; + int nr; { - register int i; - register char *p; + int i; + const char *p; while (nr > 0) - for (p = ptr; nr--; ++p) - { - if (!(i = crcval >> 24 ^ *p)) - { + for (p = ptr; nr--; ++p) { + if (!(i = crcval >> 24 ^ *p)) { i = step++; - if (step >= sizeof(crctab)/sizeof(crctab[0])) + if (step >= sizeof(crctab) / sizeof(crctab[0])) step = 0; } crcval = (crcval << 8) ^ crctab[i]; } - return crcval & 0xffffffff; /* Mask to 32 bits. */ + return crcval & 0xffffffff; /* Mask to 32 bits. */ } diff --git a/games/adventure/done.c b/games/adventure/done.c index fad18181b5b..118d793f366 100644 --- a/games/adventure/done.c +++ b/games/adventure/done.c @@ -1,3 +1,4 @@ +/* $OpenBSD: done.c,v 1.3 1998/08/31 02:29:37 pjanzen Exp $ */ /* $NetBSD: done.c,v 1.2 1995/03/21 12:05:01 cgd Exp $ */ /*- @@ -42,71 +43,97 @@ #if 0 static char sccsid[] = "@(#)done.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: done.c,v 1.2 1995/03/21 12:05:01 cgd Exp $"; +static char rcsid[] = "$OpenBSD: done.c,v 1.3 1998/08/31 02:29:37 pjanzen Exp $"; #endif #endif /* not lint */ -/* Re-coding of advent in C: termination routines */ +/* Re-coding of advent in C: termination routines */ +#include <stdio.h> #include "hdr.h" +#include "extern.h" -score() /* sort of like 20000 */ -{ register int scor,i; - mxscor=scor=0; - for (i=50; i<=maxtrs; i++) - { if (ptext[i].txtlen==0) continue; - k=12; - if (i==chest) k=14; - if (i>chest) k=16; - if (prop[i]>=0) scor += 2; - if (place[i]==3&&prop[i]==0) scor += k-2; +int +score() /* sort of like 20000 */ +{ + int scor, i; + + mxscor = scor = 0; + for (i = 50; i <= maxtrs; i++) { + if (ptext[i].txtlen == 0) + continue; + k = 12; + if (i == chest) + k = 14; + if (i > chest) + k = 16; + if (prop[i] >= 0) + scor += 2; + if (place[i] == 3 && prop[i] == 0) + scor += k - 2; mxscor += k; } - scor += (maxdie-numdie)*10; - mxscor += maxdie*10; - if (!(scorng||gaveup)) scor += 4; + scor += (maxdie - numdie) * 10; + mxscor += maxdie * 10; + if (!(scorng || gaveup)) + scor += 4; mxscor += 4; - if (dflag!=0) scor += 25; + if (dflag != 0) + scor += 25; mxscor += 25; - if (closng) scor += 25; + if (closng) + scor += 25; mxscor += 25; - if (closed) - { if (bonus==0) scor += 10; - if (bonus==135) scor += 25; - if (bonus==134) scor += 30; - if (bonus==133) scor += 45; + if (closed) { + if (bonus == 0) + scor += 10; + if (bonus == 135) + scor += 25; + if (bonus == 134) + scor += 30; + if (bonus == 133) + scor += 45; } mxscor += 45; - if (place[magzin]==108) scor++; + if (place[magzin] == 108) + scor++; mxscor++; scor += 2; mxscor += 2; - for (i=1; i<=hntmax; i++) - if (hinted[i]) scor -= hints[i][2]; - return(scor); + for (i = 1; i <= hntmax; i++) + if (hinted[i]) + scor -= hints[i][2]; + return (scor); } -done(entry) /* entry=1 means goto 13000 */ /* game is over */ -int entry; /* entry=2 means goto 20000 */ /* 3=19000 */ -{ register int i,sc; - if (entry==1) mspeak(1); - if (entry==3) rspeak(136); - printf("\n\n\nYou scored %d out of a ",(sc=score())); - printf("possible %d using %d turns.\n",mxscor,turns); - for (i=1; i<=clsses; i++) - if (cval[i]>=sc) - { speak(&ctext[i]); - if (i==clsses-1) - { printf("To achieve the next higher rating"); +void +done(entry) /* entry=1 means goto 13000 */ /* game is over */ + int entry; /* entry=2 means goto 20000 */ /* 3=19000 */ +{ + int i, sc; + + if (entry == 1) + mspeak(1); + if (entry == 3) + rspeak(136); + printf("\n\n\nYou scored %d out of a ", (sc = score())); + printf("possible %d using %d turns.\n", mxscor, turns); + for (i = 1; i <= clsses; i++) + if (cval[i] >= sc) { + speak(&ctext[i]); + if (i == clsses - 1) { + printf("To achieve the next higher rating"); printf(" would be a neat trick!\n\n"); printf("Congratulations!!\n"); exit(0); } - k=cval[i]+1-sc; + k = cval[i] + 1 - sc; printf("To achieve the next higher rating, you need"); - printf(" %d more point",k); - if (k==1) printf(".\n"); - else printf("s.\n"); + printf(" %d more point", k); + if (k == 1) + printf(".\n"); + else + printf("s.\n"); exit(0); } printf("You just went off my scale!!!\n"); @@ -114,31 +141,38 @@ int entry; /* entry=2 means goto 20000 */ /* 3=19000 */ } -die(entry) /* label 90 */ -int entry; -{ register int i; - if (entry != 99) - { rspeak(23); - oldlc2=loc; +int +die(entry) /* label 90 */ + int entry; +{ + int i; + + if (entry != 99) { + rspeak(23); + oldlc2 = loc; } - if (closng) /* 99 */ - { rspeak(131); + if (closng) { /* 99 */ + rspeak(131); numdie++; done(2); } - yea=yes(81+numdie*2,82+numdie*2,54); + yea = yes(81 + numdie * 2, 82 + numdie * 2, 54); numdie++; - if (numdie==maxdie || !yea) done(2); - place[water]=0; - place[oil]=0; - if (toting(lamp)) prop[lamp]=0; - for (i=100; i>=1; i--) - { if (!toting(i)) continue; - k=oldlc2; - if (i==lamp) k=1; - drop(i,k); + if (numdie == maxdie || !yea) + done(2); + place[water] = 0; + place[oil] = 0; + if (toting(lamp)) + prop[lamp] = 0; + for (i = 100; i >= 1; i--) { + if (!toting(i)) + continue; + k = oldlc2; + if (i == lamp) + k = 1; + drop(i, k); } - loc=3; - oldloc=loc; - return(2000); + loc = 3; + oldloc = loc; + return (2000); } diff --git a/games/adventure/hdr.h b/games/adventure/hdr.h index bfea417e047..638d3ce28dc 100644 --- a/games/adventure/hdr.h +++ b/games/adventure/hdr.h @@ -1,3 +1,4 @@ +/* $OpenBSD: hdr.h,v 1.6 1998/08/31 02:29:38 pjanzen Exp $ */ /* $NetBSD: hdr.h,v 1.2 1995/03/21 12:05:02 cgd Exp $ */ /*- @@ -54,116 +55,112 @@ */ /* hdr.h: included by c advent files */ + #include <sys/types.h> -#include <stdio.h> +#include <signal.h> -int datfd; /* message file descriptor */ -int delhit; -int yea; -extern char data_file[]; /* Virtual data file */ +int datfd; /* message file descriptor */ +volatile sig_atomic_t delhit; +int yea; +extern char data_file[]; /* Virtual data file */ #define TAB 011 #define LF 012 #define FLUSHLINE do { int c; while ((c = getchar()) != EOF && c != '\n'); } while (0) #define FLUSHLF while (next()!=LF) -int loc,newloc,oldloc,oldlc2,wzdark,gaveup,kq,k,k2; -char *wd1,*wd2; /* the complete words */ -int verb,obj,spk; +int loc, newloc, oldloc, oldlc2, wzdark, gaveup, kq, k, k2; +char *wd1,*wd2; /* the complete words */ +int verb, obj, spk; extern int blklin; -int saved,savet,mxscor,latncy; +time_t savet; +int mxscor, latncy; -#define SHORT 50 /* How short is a demo game? */ +#define SHORT 50 /* How short is a demo game? */ -#define MAXSTR 20 /* max length of user's words */ +#define MAXSTR 20 /* max length of user's words */ -#define HTSIZE 512 /* max number of vocab words */ -struct hashtab /* hash table for vocabulary */ -{ int val; /* word type &index (ktab) */ - char *atab; /* pointer to actual string */ +#define HTSIZE 512 /* max number of vocab words */ +struct hashtab { /* hash table for vocabulary */ + int val; /* word type &index (ktab) */ + char *atab; /* pointer to actual string */ } voc[HTSIZE]; -#define SEED 1815622 /* "Encryption" seed */ +#define SEED 1815622 /* "Encryption" seed */ -struct text +struct text { #ifdef OLDSTUFF -{ int seekadr; /* DATFILE must be < 2**16 */ + int seekadr; /* DATFILE must be < 2**16 */ #endif OLDSTUFF -{ char *seekadr; /* Msg start in virtual disk */ - int txtlen; /* length of msg starting here */ + char *seekadr; /* Msg start in virtual disk */ + int txtlen; /* length of msg starting here */ }; #define RTXSIZ 205 -struct text rtext[RTXSIZ]; /* random text messages */ +struct text rtext[RTXSIZ]; /* random text messages */ #define MAGSIZ 35 -struct text mtext[MAGSIZ]; /* magic messages */ +struct text mtext[MAGSIZ]; /* magic messages */ int clsses; #define CLSMAX 12 -struct text ctext[CLSMAX]; /* classes of adventurer */ +struct text ctext[CLSMAX]; /* classes of adventurer */ int cval[CLSMAX]; -struct text ptext[101]; /* object descriptions */ +struct text ptext[101]; /* object descriptions */ -#define LOCSIZ 141 /* number of locations */ -struct text ltext[LOCSIZ]; /* long loc description */ -struct text stext[LOCSIZ]; /* short loc descriptions */ +#define LOCSIZ 141 /* number of locations */ +struct text ltext[LOCSIZ]; /* long loc description */ +struct text stext[LOCSIZ]; /* short loc descriptions */ -struct travlist /* direcs & conditions of travel*/ -{ struct travlist *next; /* ptr to next list entry */ - int conditions; /* m in writeup (newloc / 1000) */ - int tloc; /* n in writeup (newloc % 1000) */ - int tverb; /* the verb that takes you there*/ -} *travel[LOCSIZ],*tkk; /* travel is closer to keys(...)*/ +struct travlist /* direcs & conditions of travel*/ +{ struct travlist *next; /* ptr to next list entry */ + int conditions; /* m in writeup (newloc / 1000) */ + int tloc; /* n in writeup (newloc % 1000) */ + int tverb; /* the verb that takes you there*/ +} *travel[LOCSIZ],*tkk; /* travel is closer to keys(...)*/ int atloc[LOCSIZ]; -int plac[101]; /* initial object placement */ -int fixd[101],fixed[101]; /* location fixed? */ +int plac[101]; /* initial object placement */ +int fixd[101], fixed[101]; /* location fixed? */ -int actspk[35]; /* rtext msg for verb <n> */ +int actspk[35]; /* rtext msg for verb <n> */ -int cond[LOCSIZ]; /* various condition bits */ +int cond[LOCSIZ]; /* various condition bits */ -extern int setbit[16]; /* bit defn masks 1,2,4,... */ +extern int setbit[16]; /* bit defn masks 1,2,4,... */ -int hntmax; -int hints[20][5]; /* info on hints */ -int hinted[20],hintlc[20]; +int hntmax; +int hints[20][5]; /* info on hints */ +int hinted[20], hintlc[20]; -int place[101], prop[101],linkx[201]; -int abb[LOCSIZ]; +int place[101], prop[101], linkx[201]; +int abb[LOCSIZ]; -int maxtrs,tally,tally2; /* treasure values */ +int maxtrs, tally, tally2; /* treasure values */ #define FALSE 0 #define TRUE 1 -int keys,lamp,grate,cage,rod,rod2,steps,/* mnemonics */ - bird,door,pillow,snake,fissur,tablet,clam,oyster,magzin, - dwarf,knife,food,bottle,water,oil,plant,plant2,axe,mirror,dragon, - chasm,troll,troll2,bear,messag,vend,batter, - nugget,coins,chest,eggs,tridnt,vase,emrald,pyram,pearl,rug,chain, - spices, - back,look,cave,null,entrnc,dprssn, - enter, stream, pour, - say,lock,throw,find,invent; - -int chloc,chloc2,dseen[7],dloc[7], /* dwarf stuff */ - odloc[7],dflag,daltlc; +int keys, lamp, grate, cage, rod, rod2, steps, /* mnemonics */ + bird, door, pillow, snake, fissur, tablet, clam, oyster, + magzin, dwarf, knife, food, bottle, water, oil, plant, plant2, + axe, mirror, dragon, chasm, troll, troll2, bear, messag, + vend, batter, nugget, coins, chest, eggs, tridnt, vase, + emrald, pyram, pearl, rug, chain, spices, back, look, cave, + null, entrnc, dprssn, enter, stream, pour, say, lock, throw, + find, invent; -int tk[21],stick,dtotal,attack; -int turns,lmwarn,iwest,knfloc,detail, /* various flags & counters */ - abbnum,maxdie,numdie,holdng,dkill,foobar,bonus,clock1,clock2, - saved,closng,panic,closed,scorng; +int chloc, chloc2, dseen[7], dloc[7], /* dwarf stuff */ + odloc[7], dflag, daltlc; -int demo,newloc,limit; +int tk[21], stick, dtotal, attack; +int turns, lmwarn, iwest, knfloc, detail, /* various flags & counters */ + abbnum, maxdie, numdie, holdng, dkill, foobar, bonus, clock1, + clock2, saved, closng, panic, closed, scorng; -char *decr(); -unsigned long crc(); +int demo, newloc, limit; /* We need to get a little tricky to avoid strings */ #define DECR(a,b,c,d,e) decr('a'+'+','b'+'-','c'+'#','d'+'&','e'+'%') - -gid_t egid; diff --git a/games/adventure/init.c b/games/adventure/init.c index 16bbe034d27..8127e7182dc 100644 --- a/games/adventure/init.c +++ b/games/adventure/init.c @@ -1,3 +1,4 @@ +/* $OpenBSD: init.c,v 1.6 1998/08/31 02:29:39 pjanzen Exp $ */ /* $NetBSD: init.c,v 1.4 1996/05/21 21:53:05 mrg Exp $ */ /*- @@ -42,182 +43,196 @@ #if 0 static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 6/2/93"; #else -static char rcsid[] = "$NetBSD: init.c,v 1.4 1996/05/21 21:53:05 mrg Exp $"; +static char rcsid[] = "$OpenBSD: init.c,v 1.6 1998/08/31 02:29:39 pjanzen Exp $"; #endif #endif /* not lint */ -/* Re-coding of advent in C: data initialization */ +/* Re-coding of advent in C: data initialization */ #include <sys/types.h> #include <signal.h> #include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <unistd.h> + #include "hdr.h" +#include "extern.h" -int blklin = TRUE; +int blklin = TRUE; -int setbit[16] = {1,2,4,010,020,040,0100,0200,0400,01000,02000,04000, - 010000,020000,040000,0100000}; +int setbit[16] = {1, 2, 4, 010, 020, 040, 0100, 0200, 0400, 01000, 02000, + 04000, 010000, 020000, 040000, 0100000}; -init(command) /* everything for 1st time run */ -char *command; /* command we were called with */ +void +init() /* everything for 1st time run */ { - rdata(); /* read data from orig. file */ + rdata(); /* read data from orig. file */ linkdata(); poof(); } -char *decr(a,b,c,d,e) -char a,b,c,d,e; +char * +decr(a, b, c, d, e) + char a, b, c, d, e; { static char buf[6]; - buf[0] = a-'+'; - buf[1] = b-'-'; - buf[2] = c-'#'; - buf[3] = d-'&'; - buf[4] = e-'%'; + buf[0] = a - '+'; + buf[1] = b - '-'; + buf[2] = c - '#'; + buf[3] = d - '&'; + buf[4] = e - '%'; buf[5] = 0; return buf; } -linkdata() /* secondary data manipulation */ -{ register int i,j; - - /* array linkages */ - for (i=1; i<=LOCSIZ; i++) - if (ltext[i].seekadr!=0 && travel[i] != 0) - if ((travel[i]->tverb)==1) cond[i]=2; - for (j=100; j>0; j--) - if (fixd[j]>0) - { drop(j+100,fixd[j]); - drop(j,plac[j]); +void +linkdata() /* secondary data manipulation */ +{ + int i, j; + + /* array linkages */ + for (i = 1; i <= LOCSIZ; i++) + if (ltext[i].seekadr != 0 && travel[i] != 0) + if ((travel[i]->tverb) == 1) + cond[i] = 2; + for (j = 100; j > 0; j--) + if (fixd[j] > 0) { + drop(j + 100, fixd[j]); + drop(j, plac[j]); } - for (j=100; j>0; j--) - { fixed[j]=fixd[j]; - if (plac[j]!=0 && fixd[j]<=0) drop(j,plac[j]); + for (j = 100; j > 0; j--) { + fixed[j] = fixd[j]; + if (plac[j] != 0 && fixd[j] <= 0) + drop(j, plac[j]); } - maxtrs=79; - tally=0; - tally2=0; + maxtrs = 79; + tally = 0; + tally2 = 0; - for (i=50; i<=maxtrs; i++) - { if (ptext[i].seekadr!=0) prop[i] = -1; + for (i = 50; i <= maxtrs; i++) { + if (ptext[i].seekadr != 0) + prop[i] = -1; tally -= prop[i]; } /* define mnemonics */ - keys = vocab(DECR(k,e,y,s,\0), 1); - lamp = vocab(DECR(l,a,m,p,\0), 1); - grate = vocab(DECR(g,r,a,t,e), 1); - cage = vocab(DECR(c,a,g,e,\0),1); - rod = vocab(DECR(r,o,d,\0,\0),1); - rod2=rod+1; - steps=vocab(DECR(s,t,e,p,s),1); - bird = vocab(DECR(b,i,r,d,\0),1); - door = vocab(DECR(d,o,o,r,\0),1); - pillow= vocab(DECR(p,i,l,l,o), 1); - snake = vocab(DECR(s,n,a,k,e), 1); - fissur= vocab(DECR(f,i,s,s,u), 1); - tablet= vocab(DECR(t,a,b,l,e), 1); - clam = vocab(DECR(c,l,a,m,\0),1); - oyster= vocab(DECR(o,y,s,t,e), 1); - magzin= vocab(DECR(m,a,g,a,z), 1); - dwarf = vocab(DECR(d,w,a,r,f), 1); - knife = vocab(DECR(k,n,i,f,e), 1); - food = vocab(DECR(f,o,o,d,\0),1); - bottle= vocab(DECR(b,o,t,t,l), 1); - water = vocab(DECR(w,a,t,e,r), 1); - oil = vocab(DECR(o,i,l,\0,\0),1); - plant = vocab(DECR(p,l,a,n,t), 1); - plant2=plant+1; - axe = vocab(DECR(a,x,e,\0,\0),1); - mirror= vocab(DECR(m,i,r,r,o), 1); - dragon= vocab(DECR(d,r,a,g,o), 1); - chasm = vocab(DECR(c,h,a,s,m), 1); - troll = vocab(DECR(t,r,o,l,l), 1); - troll2=troll+1; - bear = vocab(DECR(b,e,a,r,\0),1); - messag= vocab(DECR(m,e,s,s,a), 1); - vend = vocab(DECR(v,e,n,d,i), 1); - batter= vocab(DECR(b,a,t,t,e), 1); - - nugget= vocab(DECR(g,o,l,d,\0),1); - coins = vocab(DECR(c,o,i,n,s), 1); - chest = vocab(DECR(c,h,e,s,t), 1); - eggs = vocab(DECR(e,g,g,s,\0),1); - tridnt= vocab(DECR(t,r,i,d,e), 1); - vase = vocab(DECR(v,a,s,e,\0),1); - emrald= vocab(DECR(e,m,e,r,a), 1); - pyram = vocab(DECR(p,y,r,a,m), 1); - pearl = vocab(DECR(p,e,a,r,l), 1); - rug = vocab(DECR(r,u,g,\0,\0),1); - chain = vocab(DECR(c,h,a,i,n), 1); - - back = vocab(DECR(b,a,c,k,\0),0); - look = vocab(DECR(l,o,o,k,\0),0); - cave = vocab(DECR(c,a,v,e,\0),0); - null = vocab(DECR(n,u,l,l,\0),0); - entrnc= vocab(DECR(e,n,t,r,a), 0); - dprssn= vocab(DECR(d,e,p,r,e), 0); - enter = vocab(DECR(e,n,t,e,r), 0); - - pour = vocab(DECR(p,o,u,r,\0), 2); - say = vocab(DECR(s,a,y,\0,\0),2); - lock = vocab(DECR(l,o,c,k,\0),2); - throw = vocab(DECR(t,h,r,o,w), 2); - find = vocab(DECR(f,i,n,d,\0),2); - invent= vocab(DECR(i,n,v,e,n), 2); + keys = vocab(DECR(k,e,y,s,\0), 1, 0); + lamp = vocab(DECR(l,a,m,p,\0), 1, 0); + grate = vocab(DECR(g,r,a,t,e), 1, 0); + cage = vocab(DECR(c,a,g,e,\0),1, 0); + rod = vocab(DECR(r,o,d,\0,\0),1, 0); + rod2 = rod + 1; + steps = vocab(DECR(s,t,e,p,s),1, 0); + bird = vocab(DECR(b,i,r,d,\0),1, 0); + door = vocab(DECR(d,o,o,r,\0),1, 0); + pillow= vocab(DECR(p,i,l,l,o), 1, 0); + snake = vocab(DECR(s,n,a,k,e), 1, 0); + fissur= vocab(DECR(f,i,s,s,u), 1, 0); + tablet= vocab(DECR(t,a,b,l,e), 1, 0); + clam = vocab(DECR(c,l,a,m,\0),1, 0); + oyster= vocab(DECR(o,y,s,t,e), 1, 0); + magzin= vocab(DECR(m,a,g,a,z), 1, 0); + dwarf = vocab(DECR(d,w,a,r,f), 1, 0); + knife = vocab(DECR(k,n,i,f,e), 1, 0); + food = vocab(DECR(f,o,o,d,\0),1, 0); + bottle= vocab(DECR(b,o,t,t,l), 1, 0); + water = vocab(DECR(w,a,t,e,r), 1, 0); + oil = vocab(DECR(o,i,l,\0,\0),1, 0); + plant = vocab(DECR(p,l,a,n,t), 1, 0); + plant2= plant + 1; + axe = vocab(DECR(a,x,e,\0,\0),1, 0); + mirror= vocab(DECR(m,i,r,r,o), 1, 0); + dragon= vocab(DECR(d,r,a,g,o), 1, 0); + chasm = vocab(DECR(c,h,a,s,m), 1, 0); + troll = vocab(DECR(t,r,o,l,l), 1, 0); + troll2= troll + 1; + bear = vocab(DECR(b,e,a,r,\0),1, 0); + messag= vocab(DECR(m,e,s,s,a), 1, 0); + vend = vocab(DECR(v,e,n,d,i), 1, 0); + batter= vocab(DECR(b,a,t,t,e), 1, 0); + + nugget= vocab(DECR(g,o,l,d,\0),1, 0); + coins = vocab(DECR(c,o,i,n,s), 1, 0); + chest = vocab(DECR(c,h,e,s,t), 1, 0); + eggs = vocab(DECR(e,g,g,s,\0),1, 0); + tridnt= vocab(DECR(t,r,i,d,e), 1, 0); + vase = vocab(DECR(v,a,s,e,\0),1, 0); + emrald= vocab(DECR(e,m,e,r,a), 1, 0); + pyram = vocab(DECR(p,y,r,a,m), 1, 0); + pearl = vocab(DECR(p,e,a,r,l), 1, 0); + rug = vocab(DECR(r,u,g,\0,\0),1, 0); + chain = vocab(DECR(c,h,a,i,n), 1, 0); + + back = vocab(DECR(b,a,c,k,\0),0, 0); + look = vocab(DECR(l,o,o,k,\0),0, 0); + cave = vocab(DECR(c,a,v,e,\0),0, 0); + null = vocab(DECR(n,u,l,l,\0),0, 0); + entrnc= vocab(DECR(e,n,t,r,a), 0, 0); + dprssn= vocab(DECR(d,e,p,r,e), 0, 0); + enter = vocab(DECR(e,n,t,e,r), 0, 0); + + pour = vocab(DECR(p,o,u,r,\0), 2, 0); + say = vocab(DECR(s,a,y,\0,\0),2, 0); + lock = vocab(DECR(l,o,c,k,\0),2, 0); + throw = vocab(DECR(t,h,r,o,w), 2, 0); + find = vocab(DECR(f,i,n,d,\0),2, 0); + invent= vocab(DECR(i,n,v,e,n), 2, 0); /* initialize dwarves */ - chloc=114; - chloc2=140; - for (i=1; i<=6; i++) - dseen[i]=FALSE; - dflag=0; - dloc[1]=19; - dloc[2]=27; - dloc[3]=33; - dloc[4]=44; - dloc[5]=64; - dloc[6]=chloc; - daltlc=18; + chloc = 114; + chloc2 = 140; + for (i = 1; i <= 6; i++) + dseen[i] = FALSE; + dflag = 0; + dloc[1] = 19; + dloc[2] = 27; + dloc[3] = 33; + dloc[4] = 44; + dloc[5] = 64; + dloc[6] = chloc; + daltlc = 18; /* random flags & ctrs */ - turns=0; - lmwarn=FALSE; - iwest=0; - knfloc=0; - detail=0; - abbnum=5; - for (i=0; i<=4; i++) - if (rtext[2*i+81].seekadr!=0) maxdie=i+1; - numdie=holdng=dkill=foobar=bonus=0; - clock1=30; - clock2=50; - saved=0; - closng=panic=closed=scorng=FALSE; + turns = 0; + lmwarn = FALSE; + iwest = 0; + knfloc = 0; + detail = 0; + abbnum = 5; + for (i = 0; i <= 4; i++) + if (rtext[2 * i + 81].seekadr != 0) + maxdie = i + 1; + numdie = holdng = dkill = foobar = bonus = 0; + clock1 = 30; + clock2 = 50; + saved = 0; + closng = panic = closed = scorng = FALSE; } - -trapdel() /* come here if he hits a del */ -{ delhit++; /* main checks, treats as QUIT */ - signal(SIGINT,trapdel); /* catch subsequent DELs */ +void +trapdel(n) /* come here if he hits a del */ + int n; +{ + delhit = 1; /* main checks, treats as QUIT */ + signal(SIGINT, trapdel);/* catch subsequent DELs */ } +void startup() { - time_t time(); - - demo=Start(0); - srand((int)(time((time_t *)NULL))); /* random seed */ + demo = Start(); + srandom((unsigned int)(time((time_t *)NULL))); /* random seed */ /* srand(371); */ /* non-random seed */ - hinted[3]=yes(65,1,0); - newloc=1; + hinted[3] = yes(65, 1, 0); + newloc = 1; delhit = 0; - limit=330; - if (hinted[3]) limit=1000; /* better batteries if instrucs */ + limit = 330; + if (hinted[3]) + limit = 1000; /* better batteries if instrucs */ } diff --git a/games/adventure/io.c b/games/adventure/io.c index 485dc1edd25..2ff929b41ae 100644 --- a/games/adventure/io.c +++ b/games/adventure/io.c @@ -1,3 +1,4 @@ +/* $OpenBSD: io.c,v 1.5 1998/08/31 02:29:41 pjanzen Exp $ */ /* $NetBSD: io.c,v 1.3 1995/04/24 12:21:37 cgd Exp $ */ /*- @@ -42,55 +43,58 @@ #if 0 static char sccsid[] = "@(#)io.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: io.c,v 1.3 1995/04/24 12:21:37 cgd Exp $"; +static char rcsid[] = "$OpenBSD: io.c,v 1.5 1998/08/31 02:29:41 pjanzen Exp $"; #endif #endif /* not lint */ /* Re-coding of advent in C: file i/o and user i/o */ -#include "hdr.h" #include <stdio.h> #include <string.h> #include <stdlib.h> +#include "hdr.h" +#include "extern.h" -getin(wrd1,wrd2) /* get command from user */ -char **wrd1,**wrd2; /* no prompt, usually */ -{ register char *s; - static char wd1buf[MAXSTR],wd2buf[MAXSTR]; - int first, numch; - - *wrd1=wd1buf; /* return ptr to internal string*/ - *wrd2=wd2buf; - wd2buf[0]=0; /* in case it isn't set here */ - for (s=wd1buf, first=1, numch=0;;) - { if ((*s=getchar())>='A' && *s <='Z') *s = *s - ('A' -'a'); - /* convert to upper case */ - switch(*s) /* start reading from user */ - { case '\n': - *s=0; +void +getin(wrd1, wrd2) /* get command from user */ + char **wrd1, **wrd2; /* no prompt, usually */ +{ + char *s; + static char wd1buf[MAXSTR], wd2buf[MAXSTR]; + int first, numch; + + *wrd1 = wd1buf; /* return ptr to internal string*/ + *wrd2 = wd2buf; + wd2buf[0] = 0; /* in case it isn't set here */ + for (s = wd1buf, first = 1, numch = 0;;) { + if ((*s = getchar()) >= 'A' && *s <= 'Z') + *s = *s - ('A' - 'a'); + /* convert to upper case */ + switch (*s) { /* start reading from user */ + case '\n': + *s = 0; return; - case ' ': - if (s==wd1buf||s==wd2buf) /* initial blank */ + case ' ': + if (s == wd1buf || s == wd2buf) /* initial blank */ continue; - *s=0; - if (first) /* finished 1st wd; start 2nd */ - { first=numch=0; - s=wd2buf; + *s = 0; + if (first) { /* finished 1st wd; start 2nd */ + first = numch = 0; + s = wd2buf; break; - } - else /* finished 2nd word */ - { FLUSHLINE; - *s=0; + } else { /* finished 2nd word */ + FLUSHLINE; + *s = 0; return; } - case EOF: + case EOF: printf("user closed input stream, quitting...\n"); exit(0); - default: - if (++numch>=MAXSTR) /* string too long */ - { printf("Give me a break!!\n"); - wd1buf[0]=wd2buf[0]=0; + default: + if (++numch >= MAXSTR) { /* string too long */ + printf("Give me a break!!\n"); + wd1buf[0] = wd2buf[0] = 0; FLUSHLINE; return; } @@ -100,438 +104,520 @@ char **wrd1,**wrd2; /* no prompt, usually */ } -confirm(mesg) /* confirm irreversible action */ -char *mesg; -{ register int result; - register int c; - printf("%s",mesg); /* tell him what he did */ - if ((c = getchar())=='y') /* was his first letter a 'y'? */ - result=1; - else if (c == EOF) { +#if 0 /* Not used */ +int +confirm(mesg) /* confirm irreversible action */ + char *mesg; +{ + int result; + int ch; + + printf("%s", mesg); /* tell him what he did */ + if ((ch = getchar()) == 'y') /* was his first letter a 'y'? */ + result = 1; + else if (ch == EOF) { printf("user closed input stream, quitting...\n"); exit(0); - } else result=0; + } else + result = 0; FLUSHLINE; - return(result); + return (result); } +#endif -yes(x,y,z) /* confirm with rspeak */ -int x,y,z; -{ register int result; - register int ch; - for (;;) - { rspeak(x); /* tell him what we want*/ - if ((ch=getchar())=='y') - result=TRUE; - else if (ch=='n') result=FALSE; +int +yes(x, y, z) /* confirm with rspeak */ + int x, y, z; +{ + int result; + int ch; + + for (;;) { + rspeak(x); /* tell him what we want*/ + if ((ch = getchar())=='y') + result = TRUE; + else if (ch=='n') + result = FALSE; else if (ch == EOF) { printf("user closed input stream, quitting...\n"); exit(0); } FLUSHLINE; - if (ch=='y'|| ch=='n') break; + if (ch == 'y' || ch == 'n') + break; printf("Please answer the question.\n"); } - if (result==TRUE) rspeak(y); - if (result==FALSE) rspeak(z); - return(result); + if (result == TRUE) + rspeak(y); + if (result == FALSE) + rspeak(z); + return (result); } -yesm(x,y,z) /* confirm with mspeak */ -int x,y,z; -{ register int result; - register char ch; - for (;;) - { mspeak(x); /* tell him what we want*/ - if ((ch=getchar())=='y') - result=TRUE; - else if (ch=='n') result=FALSE; +int +yesm(x, y, z) /* confirm with mspeak */ + int x, y, z; +{ + int result; + char ch; + + for (;;) { + mspeak(x); /* tell him what we want */ + if ((ch = getchar()) == 'y') + result = TRUE; + else if (ch=='n') + result = FALSE; else if (ch == EOF) { printf("user closed input stream, quitting...\n"); exit(0); } FLUSHLINE; - if (ch=='y'|| ch=='n') break; + if (ch == 'y' || ch == 'n') + break; printf("Please answer the question.\n"); } - if (result==TRUE) mspeak(y); - if (result==FALSE) mspeak(z); - return(result); + if (result == TRUE) + mspeak(y); + if (result == FALSE) + mspeak(z); + return (result); } /* FILE *inbuf,*outbuf; */ -char *inptr; /* Pointer into virtual disk */ +char *inptr; /* Pointer into virtual disk */ -int outsw = 0; /* putting stuff to data file? */ +int outsw = 0; /* putting stuff to data file? */ -char iotape[] = "Ax3F'\003tt$8h\315qer*h\017nGKrX\207:!l"; -char *tape = iotape; /* pointer to encryption tape */ +const char iotape[] = "Ax3F'\003tt$8h\315qer*h\017nGKrX\207:!l"; +const char *tape = iotape; /* pointer to encryption tape */ -next() /* next virtual char, bump adr */ +int +next() /* next virtual char, bump adr */ { int ch; ch=(*inptr ^ random()) & 0xFF; /* Decrypt input data */ - if (outsw) /* putting data in tmp file */ - { if (*tape==0) tape=iotape; /* rewind encryption tape */ - *inptr = ch ^ *tape++; /* re-encrypt and replace value */ + if (outsw) { /* putting data in tmp file */ + if (*tape == 0) + tape = iotape; /* rewind encryption tape */ + *inptr = ch ^ *tape++; /* re-encrypt and replace value */ } inptr++; - return(ch); + return (ch); } -char breakch; /* tell which char ended rnum */ +char breakch; /* tell which char ended rnum */ -rdata() /* "read" data from virtual file*/ -{ register int sect; - register char ch; +void +rdata() /* "read" data from virtual file */ +{ + int sect; + char ch; - inptr = data_file; /* Pointer to virtual data file */ - srandom(SEED); /* which is lightly encrypted. */ + inptr = data_file; /* Pointer to virtual data file */ + srandom(SEED); /* which is lightly encrypted. */ - clsses=1; - for (;;) /* read data sections */ - { sect=next()-'0'; /* 1st digit of section number */ + clsses = 1; + for (;;) { /* read data sections */ + sect = next() - '0'; /* 1st digit of section number */ #ifdef VERBOSE - printf("Section %c",sect+'0'); + printf("Section %c", sect + '0'); #endif - if ((ch=next())!=LF) /* is there a second digit? */ - { + if ((ch = next()) != LF) { /* is there a second digit? */ FLUSHLF; #ifdef VERBOSE putchar(ch); #endif - sect=10*sect+ch-'0'; + sect = 10 * sect + ch - '0'; } #ifdef VERBOSE putchar('\n'); #endif - switch(sect) - { case 0: /* finished reading database */ + switch (sect) { + case 0: /* finished reading database */ return; - case 1: /* long form descriptions */ + case 1: /* long form descriptions */ rdesc(1); break; - case 2: /* short form descriptions */ + case 2: /* short form descriptions */ rdesc(2); break; - case 3: /* travel table */ - rtrav(); break; - case 4: /* vocabulary */ + case 3: /* travel table */ + rtrav(); + break; + case 4: /* vocabulary */ rvoc(); break; - case 5: /* object descriptions */ + case 5: /* object descriptions */ rdesc(5); break; - case 6: /* arbitrary messages */ + case 6: /* arbitrary messages */ rdesc(6); break; - case 7: /* object locations */ - rlocs(); break; - case 8: /* action defaults */ - rdflt(); break; - case 9: /* liquid assets */ - rliq(); break; - case 10: /* class messages */ + case 7: /* object locations */ + rlocs(); + break; + case 8: /* action defaults */ + rdflt(); + break; + case 9: /* liquid assets */ + rliq(); + break; + case 10: /* class messages */ rdesc(10); break; - case 11: /* hints */ - rhints(); break; - case 12: /* magic messages */ + case 11: /* hints */ + rhints(); + break; + case 12: /* magic messages */ rdesc(12); break; - default: - printf("Invalid data section number: %d\n",sect); - for (;;) putchar(next()); + default: + printf("Invalid data section number: %d\n", sect); + for (;;) + putchar(next()); } - if (breakch!=LF) /* routines return after "-1" */ + if (breakch != LF) /* routines return after "-1" */ FLUSHLF; } } -char nbf[12]; +char nbf[12]; + +int +rnum() /* read initial location num */ +{ + char *s; -rnum() /* read initial location num */ -{ register char *s; - tape = iotape; /* restart encryption tape */ - for (s=nbf,*s=0;; s++) - if ((*s=next())==TAB || *s=='\n' || *s==LF) + tape = iotape; /* restart encryption tape */ + for (s = nbf, *s = 0;; s++) + if ((*s = next()) == TAB || *s == '\n' || *s == LF) break; - breakch= *s; /* save char for rtrav() */ - *s=0; /* got the number as ascii */ - if (nbf[0]=='-') return(-1); /* end of data */ - return(atoi(nbf)); /* convert it to integer */ + breakch = *s; /* save char for rtrav() */ + *s = 0; /* got the number as ascii */ + if (nbf[0] == '-') + return (-1); /* end of data */ + return (atoi(nbf)); /* convert it to integer */ } -char *seekhere; - -rdesc(sect) /* read description-format msgs */ -int sect; -{ register char *s,*t; - register int locc; - char *seekstart, *maystart, *adrstart; - char *entry; - - seekhere = inptr; /* Where are we in virtual file?*/ - outsw=1; /* these msgs go into tmp file */ - for (oldloc= -1, seekstart=seekhere;;) - { maystart=inptr; /* maybe starting new entry */ - if ((locc=rnum())!=oldloc && oldloc>=0 /* finished msg */ - && ! (sect==5 && (locc==0 || locc>=100)))/* unless sect 5*/ - { switch(sect) /* now put it into right table */ - { case 1: /* long descriptions */ - ltext[oldloc].seekadr=seekhere; - ltext[oldloc].txtlen=maystart-seekstart; +char *seekhere; + +void +rdesc(sect) /* read description-format msgs */ + int sect; +{ + int locc; + char *seekstart, *maystart; + + seekhere = inptr; /* Where are we in virtual file?*/ + outsw = 1; /* these msgs go into tmp file */ + for (oldloc = -1, seekstart = seekhere;;) { + maystart = inptr; /* maybe starting new entry */ + if ((locc = rnum()) != oldloc && oldloc >= 0 /* finished msg */ + && !(sect == 5 && (locc == 0 || locc >= 100)))/* unless sect 5*/ + { + switch (sect) { /* now put it into right table */ + case 1: /* long descriptions */ + ltext[oldloc].seekadr = seekhere; + ltext[oldloc].txtlen = maystart - seekstart; break; - case 2: /* short descriptions */ - stext[oldloc].seekadr=seekhere; - stext[oldloc].txtlen=maystart-seekstart; + case 2: /* short descriptions */ + stext[oldloc].seekadr = seekhere; + stext[oldloc].txtlen = maystart - seekstart; break; - case 5: /* object descriptions */ - ptext[oldloc].seekadr=seekhere; - ptext[oldloc].txtlen=maystart-seekstart; + case 5: /* object descriptions */ + ptext[oldloc].seekadr = seekhere; + ptext[oldloc].txtlen = maystart - seekstart; break; - case 6: /* random messages */ - if (oldloc>RTXSIZ) - { printf("Too many random msgs\n"); - exit(0); + case 6: /* random messages */ + if (oldloc > RTXSIZ) { + printf("Too many random msgs\n"); + exit(1); } - rtext[oldloc].seekadr=seekhere; - rtext[oldloc].txtlen=maystart-seekstart; + rtext[oldloc].seekadr = seekhere; + rtext[oldloc].txtlen = maystart - seekstart; break; - case 10: /* class messages */ - ctext[clsses].seekadr=seekhere; - ctext[clsses].txtlen=maystart-seekstart; - cval[clsses++]=oldloc; + case 10:/* class messages */ + ctext[clsses].seekadr = seekhere; + ctext[clsses].txtlen = maystart - seekstart; + cval[clsses++] = oldloc; break; - case 12: /* magic messages */ - if (oldloc>MAGSIZ) - { printf("Too many magic msgs\n"); - exit(0); + case 12:/* magic messages */ + if (oldloc > MAGSIZ) { + printf("Too many magic msgs\n"); + exit(1); } - mtext[oldloc].seekadr=seekhere; - mtext[oldloc].txtlen=maystart-seekstart; + mtext[oldloc].seekadr = seekhere; + mtext[oldloc].txtlen = maystart - seekstart; break; - default: + default: printf("rdesc called with bad section\n"); - exit(0); + exit(1); } - seekhere += maystart-seekstart; + seekhere += maystart - seekstart; } - if (locc<0) - { outsw=0; /* turn off output */ + if (locc < 0) { + outsw = 0; /* turn off output */ seekhere += 3; /* -1<delimiter> */ return; } - if (sect!=5 || (locc>0 && locc<100)) - { if (oldloc!=locc)/* starting a new message */ - seekstart=maystart; - oldloc=locc; + if (sect != 5 || (locc > 0 && locc < 100)) { + if (oldloc != locc)/* starting a new message */ + seekstart = maystart; + oldloc = locc; } FLUSHLF; /* scan the line */ } } -rtrav() /* read travel table */ -{ register int locc; - register struct travlist *t; - register char *s; - char buf[12]; - int len,m,n,entries; - for (oldloc= -1;;) /* get another line */ - { if ((locc=rnum())!=oldloc && oldloc>=0) /* end of entry */ - { - t->next = 0; /* terminate the old entry */ - /* printf("%d:%d entries\n",oldloc,entries); */ +void +rtrav() /* read travel table */ +{ + int locc; + struct travlist *t; + char *s; + char buf[12]; + int len, m, n, entries; + + for (oldloc = -1;;) { /* get another line */ + if ((locc = rnum()) != oldloc && oldloc >= 0) { /* end of entry */ + t->next = NULL; /* terminate the old entry */ + /* printf("%d:%d entries\n", oldloc, entries); */ /* twrite(oldloc); */ } - if (locc== -1) return; - if (locc!=oldloc) /* getting a new entry */ - { t=travel[locc]=(struct travlist *) malloc(sizeof (struct travlist)); - /* printf("New travel list for %d\n",locc); */ - entries=0; - oldloc=locc; - } - for (s=buf;; *s++) /* get the newloc number /ASCII */ - if ((*s=next())==TAB || *s==LF) break; - *s=0; - len=length(buf)-1; /* quad long number handling */ - /* printf("Newloc: %s (%d chars)\n",buf,len); */ - if (len<4) /* no "m" conditions */ - { m=0; - n=atoi(buf); /* newloc mod 1000 = newloc */ + if (locc == -1) + return; + if (locc != oldloc) { /* getting a new entry */ + t = travel[locc] = (struct travlist *) malloc(sizeof (struct travlist)); + /* printf("New travel list for %d\n", locc); */ + entries = 0; + oldloc = locc; } - else /* a long integer */ - { n=atoi(buf+len-3); - buf[len-3]=0; /* terminate newloc/1000 */ - m=atoi(buf); + for (s = buf; ; *s++) /* get the newloc number /ASCII */ + if ((*s = next()) == TAB || *s == LF) + break; + *s = 0; + len = length(buf) - 1; /* quad long number handling */ + /* printf("Newloc: %s (%d chars)\n", buf, len); */ + if (len < 4) { /* no "m" conditions */ + m = 0; + n = atoi(buf); /* newloc mod 1000 = newloc */ + } else { /* a long integer */ + n = atoi(buf + len - 3); + buf[len - 3] = 0; /* terminate newloc/1000*/ + m = atoi(buf); } - while (breakch!=LF) /* only do one line at a time */ - { if (entries++) t=t->next=(struct travlist *) malloc(sizeof (struct travlist)); - t->tverb=rnum();/* get verb from the file */ - t->tloc=n; /* table entry mod 1000 */ - t->conditions=m;/* table entry / 1000 */ - /* printf("entry %d for %d\n",entries,locc); */ + while (breakch != LF) { /* only do one line at a time */ + if (entries++) + t = t->next = (struct travlist *) malloc(sizeof (struct travlist)); + t->tverb = rnum();/* get verb from the file */ + t->tloc = n; /* table entry mod 1000 */ + t->conditions = m;/* table entry / 1000 */ + /* printf("entry %d for %d\n", entries, locc); */ } } } #ifdef DEBUG -twrite(loq) /* travel options from this loc */ -int loq; -{ register struct travlist *t; +void +twrite(loq) /* travel options from this loc */ + int loq; +{ + struct travlist *t; + printf("If"); speak(<ext[loq]); printf("then\n"); - for (t=travel[loq]; t!=0; t=t->next) - { printf("verb %d takes you to ",t->tverb); - if (t->tloc<=300) + for (t = travel[loq]; t != 0; t = t->next) { + printf("verb %d takes you to ", t->tverb); + if (t->tloc <= 300) speak(<ext[t->tloc]); - else if (t->tloc<=500) - printf("special code %d\n",t->tloc-300); + else if (t->tloc <= 500) + printf("special code %d\n", t->tloc - 300); else - rspeak(t->tloc-500); - printf("under conditions %d\n",t->conditions); + rspeak(t->tloc - 500); + printf("under conditions %d\n", t->conditions); } } - #endif DEBUG +void rvoc() -{ register char *s; /* read the vocabulary */ - register int index; - char buf[6]; - for (;;) - { index=rnum(); - if (index<0) break; - for (s=buf,*s=0;; s++) /* get the word */ - if ((*s=next())==TAB || *s=='\n' || *s==LF - || *s==' ') break; - /* terminate word with newline, LF, tab, blank */ - if (*s!='\n' && *s!=LF) FLUSHLF; /* can be comments */ - *s=0; - /* printf("\"%s\"=%d\n",buf,index);*/ - vocab(buf,-2,index); +{ + char *s; /* read the vocabulary */ + int index; + char buf[6]; + + for (;;) { + index = rnum(); + if (index < 0) + break; + for (s = buf, *s = 0;; s++) /* get the word */ + if ((*s = next()) == TAB || *s == '\n' || *s == LF + || *s == ' ') + break; + /* terminate word with newline, LF, tab, blank */ + if (*s != '\n' && *s != LF) + FLUSHLF; /* can be comments */ + *s = 0; + /* printf("\"%s\"=%d\n", buf, index);*/ + vocab(buf, -2, index); } /* prht(); */ } -rlocs() /* initial object locations */ -{ for (;;) - { if ((obj=rnum())<0) break; - plac[obj]=rnum(); /* initial loc for this obj */ - if (breakch==TAB) /* there's another entry */ - fixd[obj]=rnum(); - else fixd[obj]=0; +void +rlocs() /* initial object locations */ +{ + for (;;) { + if ((obj = rnum()) < 0) + break; + plac[obj] = rnum(); /* initial loc for this obj */ + if (breakch == TAB) /* there's another entry */ + fixd[obj] = rnum(); + else + fixd[obj] = 0; } } -rdflt() /* default verb messages */ -{ for (;;) - { if ((verb=rnum())<0) break; - actspk[verb]=rnum(); +void +rdflt() /* default verb messages */ +{ + for (;;) { + if ((verb = rnum()) < 0) + break; + actspk[verb] = rnum(); } } -rliq() /* liquid assets &c: cond bits */ -{ register int bitnum; - for (;;) /* read new bit list */ - { if ((bitnum=rnum())<0) break; - for (;;) /* read locs for bits */ - { cond[rnum()] |= setbit[bitnum]; - if (breakch==LF) break; +void +rliq() /* liquid assets &c: cond bits */ +{ + int bitnum; + + for (;;) { /* read new bit list */ + if ((bitnum = rnum()) < 0) + break; + for (;;) { /* read locs for bits */ + cond[rnum()] |= setbit[bitnum]; + if (breakch == LF) + break; } } } +void rhints() -{ register int hintnum,i; - hntmax=0; - for (;;) - { if ((hintnum=rnum())<0) break; - for (i=1; i<5; i++) - hints[hintnum][i]=rnum(); - if (hintnum>hntmax) hntmax=hintnum; +{ + int hintnum, i; + + hntmax = 0; + for (;;) { + if ((hintnum = rnum()) < 0) + break; + for (i = 1; i < 5; i++) + hints[hintnum][i] = rnum(); + if (hintnum > hntmax) + hntmax = hintnum; } } +void rspeak(msg) -int msg; -{ if (msg!=0) speak(&rtext[msg]); + int msg; +{ + if (msg != 0) + speak(&rtext[msg]); } +void mspeak(msg) -int msg; -{ if (msg!=0) speak(&mtext[msg]); + int msg; +{ + if (msg != 0) + speak(&mtext[msg]); } -speak(msg) /* read, decrypt, and print a message (not ptext) */ -struct text *msg;/* msg is a pointer to seek address and length of mess */ +void +speak(msg) /* read, decrypt, and print a message (not ptext) */ + const struct text *msg; /* msg is a pointer to seek address and length + * of mess */ { - register char *s, nonfirst; + char *s, nonfirst; s = msg->seekadr; - nonfirst=0; - while (s - msg->seekadr < msg->txtlen) /* read a line at a time */ - { tape=iotape; /* restart decryption tape */ - while ((*s++ ^ *tape++) != TAB); /* read past loc num */ + nonfirst = 0; + while (s - msg->seekadr < msg->txtlen) { /* read a line at a time */ + tape = iotape; /* restart decryption tape */ + while ((*s++ ^ *tape++) != TAB); /* read past loc num */ /* assume tape is longer than location number */ - /* plus the lookahead put together */ + /* plus the lookahead put together */ if ((*s ^ *tape) == '>' && - (*(s+1) ^ *(tape+1)) == '$' && - (*(s+2) ^ *(tape+2)) == '<') break; - if (blklin && !nonfirst++) putchar('\n'); - do - { if (*tape == 0) tape = iotape;/* rewind decryp tape */ + (*(s + 1) ^ *(tape + 1)) == '$' && + (*(s + 2) ^ *(tape + 2)) == '<') + break; + if (blklin && !nonfirst++) + putchar('\n'); + do { + if (*tape == 0) + tape = iotape;/* rewind decryp tape */ putchar(*s ^ *tape); - } while ((*s++ ^ *tape++) != LF); /* better end with LF */ + } while ((*s++ ^ *tape++) != LF); /* better end with LF */ } } -pspeak(m,skip) /* read, decrypt an print a ptext message */ -int m; /* msg is the number of all the p msgs for this place */ -int skip; /* assumes object 1 doesn't have prop 1, obj 2 no prop 2 &c*/ +void +pspeak(m, skip) /* read, decrypt an print a ptext message */ + int m; /* msg is the number of all the p msgs for this place */ + int skip; /* assumes object 1 doesn't have prop 1, obj 2 no prop 2 &c*/ { - register char *s,nonfirst; - char *numst, save; + char *s, nonfirst; + char *numst, save; struct text *msg; - char *tbuf; + char *tbuf; msg = &ptext[m]; - if ((tbuf=(char *) malloc(msg->txtlen + 1)) == 0) bug(108); - memcpy(tbuf, msg->seekadr, msg->txtlen + 1); /* Room to null */ + if ((tbuf = (char *) malloc(msg->txtlen + 1)) == 0) + bug(108); + memcpy(tbuf, msg->seekadr, msg->txtlen + 1); /* Room to null */ s = tbuf; - nonfirst=0; - while (s - tbuf < msg->txtlen) /* read line at a time */ - { tape=iotape; /* restart decryption tape */ - for (numst=s; (*s^= *tape++)!=TAB; s++); /* get number */ + nonfirst = 0; + while (s - tbuf < msg->txtlen) { /* read line at a time */ + tape = iotape; /* restart decryption tape */ + for (numst = s; (*s ^= *tape++) != TAB; s++) + ; /* get number */ - save = *s; /* Temporarily trash the string (cringe) */ - *s++ = 0; /* decrypting number within the string */ + save = *s; /* Temporarily trash the string (cringe) */ + *s++ = 0; /* decrypting number within the string */ - if (atoi(numst) != 100 * skip && skip >= 0) - { while ((*s++^*tape++)!=LF) /* flush the line */ - if (*tape==0) tape=iotape; + if (atoi(numst) != 100 * skip && skip >= 0) { + while ((*s++ ^ * tape++) != LF) /* flush the line */ + if (*tape == 0) + tape = iotape; continue; } - if ((*s^*tape)=='>' && (*(s+1)^*(tape+1))=='$' && - (*(s+2)^*(tape+2))=='<') break; - if (blklin && ! nonfirst++) putchar('\n'); - do - { if (*tape==0) tape=iotape; - putchar(*s^*tape); - } while ((*s++^*tape++)!=LF); /* better end with LF */ - if (skip<0) break; + if ((*s^ * tape) == '>' && (*(s + 1) ^ * (tape + 1)) == '$' && + (*(s + 2) ^ * (tape + 2)) == '<') + break; + if (blklin && !nonfirst++) + putchar('\n'); + do { + if (*tape == 0) + tape = iotape; + putchar(*s^ * tape); + } while ((*s++ ^ * tape++) != LF); /* better end with LF */ + if (skip < 0) + break; } free(tbuf); } diff --git a/games/adventure/main.c b/games/adventure/main.c index 7fd7d1e3aee..4dd134981fa 100644 --- a/games/adventure/main.c +++ b/games/adventure/main.c @@ -1,3 +1,4 @@ +/* $OpenBSD: main.c,v 1.8 1998/08/31 02:29:42 pjanzen Exp $ */ /* $NetBSD: main.c,v 1.5 1996/05/21 21:53:09 mrg Exp $ */ /*- @@ -48,7 +49,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 6/2/93"; #else -static char rcsid[] = "$NetBSD: main.c,v 1.5 1996/05/21 21:53:09 mrg Exp $"; +static char rcsid[] = "$OpenBSD: main.c,v 1.8 1998/08/31 02:29:42 pjanzen Exp $"; #endif #endif /* not lint */ @@ -57,533 +58,634 @@ static char rcsid[] = "$NetBSD: main.c,v 1.5 1996/05/21 21:53:09 mrg Exp $"; #include <sys/file.h> #include <signal.h> #include <stdio.h> +#include <unistd.h> #include "hdr.h" +#include "extern.h" -main(argc,argv) -int argc; -char **argv; +int +main(argc, argv) + int argc; + char **argv; { - register int i; - int rval,ll; + int i; + int rval, ll; struct text *kk; - extern trapdel(); /* revoke privs */ setegid(getgid()); setgid(getgid()); init(); /* Initialize everything */ - signal(SIGINT,trapdel); + signal(SIGINT, trapdel); - if (argc > 1) /* Restore file specified */ - { /* Restart is label 8305 (Fortran) */ - i = restore(argv[1]); /* See what we've got */ - switch(i) - { - case 0: /* The restore worked fine */ - yea=Start(0); - k=null; + if (argc > 1) { /* Restore file specified */ + /* Restart is label 8305 (Fortran) */ + i = restore(argv[1]); /* See what we've got */ + switch (i) { + case 0: /* The restore worked fine */ + yea = Start(); + k = null; unlink(argv[1]);/* Don't re-use the save */ goto l8; /* Get where we're going */ - case 1: /* Couldn't open it */ - exit(0); /* So give up */ - case 2: /* Oops -- file was altered */ - rspeak(202); /* You dissolve */ - exit(0); /* File could be non-adventure */ + case 1: /* Couldn't open it */ + exit(1); /* So give up */ + case 2: /* Oops -- file was altered */ + rspeak(202); /* You dissolve */ + exit(2); /* File could be non-adventure */ } /* So don't unlink it. */ } startup(); /* prepare for a user */ - for (;;) /* main command loop (label 2) */ - { if (newloc<9 && newloc!=0 && closng) - { rspeak(130); /* if closing leave only by */ - newloc=loc; /* main office */ - if (!panic) clock2=15; - panic=TRUE; + for (;;) { /* main command loop (label 2) */ + if (newloc < 9 && newloc != 0 && closng) { + rspeak(130); /* if closing leave only by */ + newloc = loc; /* main office */ + if (!panic) + clock2 = 15; + panic = TRUE; } - rval=fdwarf(); /* dwarf stuff */ - if (rval==99) die(99); + rval = fdwarf(); /* dwarf stuff */ + if (rval == 99) + die(99); - l2000: if (loc==0) die(99); /* label 2000 */ +l2000: if (loc == 0) + die(99); /* label 2000 */ kk = &stext[loc]; - if ((abb[loc]%abbnum)==0 || kk->seekadr==0) + if ((abb[loc] % abbnum) ==0 || kk->seekadr == 0) kk = <ext[loc]; - if (!forced(loc) && dark(0)) - { if (wzdark && pct(35)) - { die(90); + if (!forced(loc) && dark()) { + if (wzdark && pct(35)) { + die(90); goto l2000; } kk = &rtext[16]; } - l2001: if (toting(bear)) rspeak(141); /* 2001 */ +l2001: if (toting(bear)) + rspeak(141); /* 2001 */ speak(kk); - k=1; + k = 1; if (forced(loc)) goto l8; - if (loc==33 && pct(25)&&!closng) rspeak(8); - if (!dark(0)) - { abb[loc]++; - for (i=atloc[loc]; i!=0; i=linkx[i]) /*2004 */ - { obj=i; - if (obj>100) obj -= 100; - if (obj==steps && toting(nugget)) continue; - if (prop[obj]<0) - { if (closed) continue; - prop[obj]=0; - if (obj==rug||obj==chain) - prop[obj]=1; + if (loc == 33 && pct(25) && !closng) + rspeak(8); + if (!dark()) { + abb[loc]++; + for (i = atloc[loc]; i != 0; i = linkx[i]) { /*2004*/ + obj = i; + if (obj > 100) + obj -= 100; + if (obj == steps && toting(nugget)) + continue; + if (prop[obj] < 0) { + if (closed) + continue; + prop[obj] = 0; + if (obj == rug || obj == chain) + prop[obj] = 1; tally--; - if (tally==tally2 && tally != 0) - if (limit>35) limit=35; + if (tally == tally2 && tally != 0) + if (limit > 35) + limit = 35; } - ll = prop[obj]; /* 2006 */ - if (obj==steps && loc==fixed[steps]) + ll = prop[obj]; /* 2006 */ + if (obj == steps && loc == fixed[steps]) ll = 1; pspeak(obj, ll); - } /* 2008 */ + } /* 2008 */ goto l2012; - l2009: k=54; /* 2009 */ - l2010: spk=k; - l2011: rspeak(spk); +l2009: k = 54; /* 2009 */ +l2010: spk = k; +l2011: rspeak(spk); } - l2012: verb=0; /* 2012 */ - obj=0; - l2600: checkhints(); /* to 2600-2602 */ - if (closed) - { if (prop[oyster]<0 && toting(oyster)) - pspeak(oyster,1); - for (i=1; i<100; i++) - if (toting(i)&&prop[i]<0) /*2604 */ - prop[i] = -1-prop[i]; +l2012: verb = 0; /* 2012 */ + obj = 0; +l2600: checkhints(); /* to 2600-2602 */ + if (closed) { + if (prop[oyster] < 0 && toting(oyster)) + pspeak(oyster, 1); + for (i = 1; i < 100; i++) + if (toting(i) && prop[i] < 0) /* 2604 */ + prop[i] = -1 - prop[i]; } - wzdark=dark(0); /* 2605 */ - if (knfloc>0 && knfloc!=loc) knfloc=1; - getin(&wd1,&wd2); - if (delhit) /* user typed a DEL */ - { delhit=0; /* reset counter */ - copystr("quit",wd1); /* pretend he's quitting*/ - *wd2=0; + wzdark = dark(); /* 2605 */ + if (knfloc > 0 && knfloc != loc) + knfloc = 1; + getin(&wd1, &wd2); + if (delhit) { /* user typed a DEL */ + delhit = 0; /* reset counter */ + copystr("quit", wd1); /* pretend he's quitting */ + *wd2 = 0; } - l2608: if ((foobar = -foobar)>0) foobar=0; /* 2608 */ - /* should check here for "magic mode" */ +l2608: if ((foobar = -foobar) > 0) + foobar = 0; /* 2608 */ + /* should check here for "magic mode" */ turns++; - if (demo && turns>=SHORT) done(1); /* to 13000 */ + if (demo && turns >= SHORT) + done(1); /* to 13000 */ - if (verb==say && *wd2!=0) verb=0; - if (verb==say) + if (verb == say && *wd2 != 0) + verb = 0; + if (verb == say) goto l4090; - if (tally==0 && loc>=15 && loc!=33) clock1--; - if (clock1==0) - { closing(); /* to 10000 */ + if (tally == 0 && loc >= 15 && loc != 33) + clock1--; + if (clock1 == 0) { + closing(); /* to 10000 */ goto l19999; } - if (clock1<0) clock2--; - if (clock2==0) - { caveclose(); /* to 11000 */ + if (clock1 < 0) + clock2--; + if (clock2 == 0) { + caveclose(); /* to 11000 */ continue; /* back to 2 */ } - if (prop[lamp]==1) limit--; - if (limit<=30 && here(batter) && prop[batter]==0 - && here(lamp)) - { rspeak(188); /* 12000 */ - prop[batter]=1; - if (toting(batter)) drop(batter,loc); - limit=limit+2500; - lmwarn=FALSE; + if (prop[lamp] == 1) + limit--; + if (limit <= 30 && here(batter) && prop[batter] == 0 + && here(lamp)) { + rspeak(188); /* 12000 */ + prop[batter] = 1; + if (toting(batter)) + drop(batter, loc); + limit += 2500; + lmwarn = FALSE; goto l19999; } - if (limit==0) - { limit = -1; /* 12400 */ - prop[lamp]=0; + if (limit == 0) { + limit = -1; /* 12400 */ + prop[lamp] = 0; rspeak(184); goto l19999; } - if (limit<0&&loc<=8) - { rspeak(185); /* 12600 */ - gaveup=TRUE; + if (limit < 0 && loc <= 8) { + rspeak(185); /* 12600 */ + gaveup = TRUE; done(2); /* to 20000 */ } - if (limit<=30) - { if (lmwarn|| !here(lamp)) goto l19999; /*12200*/ - lmwarn=TRUE; - spk=187; - if (place[batter]==0) spk=183; - if (prop[batter]==1) spk=189; + if (limit <= 30) { + if (lmwarn || !here(lamp)) + goto l19999; /*12200*/ + lmwarn = TRUE; + spk = 187; + if (place[batter] == 0) + spk = 183; + if (prop[batter] == 1) + spk = 189; rspeak(spk); } - l19999: k=43; - if (liqloc(loc)==water) k=70; - if (weq(wd1,"enter") && - (weq(wd2,"strea")||weq(wd2,"water"))) +l19999: k = 43; + if (liqloc(loc) == water) + k = 70; + if (weq(wd1, "enter") && + (weq(wd2, "strea") || weq(wd2, "water"))) goto l2010; - if (weq(wd1,"enter") && *wd2!=0) goto l2800; - if ((!weq(wd1,"water")&&!weq(wd1,"oil")) - || (!weq(wd2,"plant")&&!weq(wd2,"door"))) + if (weq(wd1, "enter") && *wd2 != 0) + goto l2800; + if ((!weq(wd1, "water") && !weq(wd1, "oil")) + || (!weq(wd2, "plant") && !weq(wd2, "door"))) goto l2610; - if (at(vocab(wd2,1))) copystr("pour",wd2); + if (at(vocab(wd2, 1, 0))) + copystr("pour", wd2); - l2610: if (weq(wd1,"west")) - if (++iwest==10) rspeak(17); - l2630: i=vocab(wd1,-1); - if (i== -1) - { spk=60; /* 3000 */ - if (pct(20)) spk=61; - if (pct(20)) spk=13; +l2610: if (weq(wd1, "west")) + if (++iwest == 10) + rspeak(17); +l2630: i = vocab(wd1, -1, 0); + if (i== -1) { + spk = 60; /* 3000 */ + if (pct(20)) + spk = 61; + if (pct(20)) + spk = 13; rspeak(spk); goto l2600; } - k=i%1000; - kq=i/1000+1; - switch(kq) - { case 1: goto l8; - case 2: goto l5000; - case 3: goto l4000; - case 4: goto l2010; - default: + k = i % 1000; + kq = i / 1000 + 1; + switch (kq) { + case 1: goto l8; + case 2: goto l5000; + case 3: goto l4000; + case 4: goto l2010; + default: printf("Error 22\n"); - exit(0); + exit(22); } - l8: - switch(march()) - { case 2: continue; /* i.e. goto l2 */ - case 99: - switch(die(99)) - { case 2000: goto l2000; - default: bug(111); +l8: + switch (march()) { + case 2: continue; /* i.e. goto l2 */ + case 99: + switch (die(99)) { + case 2000: goto l2000; + default: bug(111); } - default: bug(110); + default: bug(110); } - l2800: copystr(wd2,wd1); - *wd2=0; +l2800: copystr(wd2, wd1); + *wd2 = 0; goto l2610; - l4000: verb=k; - spk=actspk[verb]; - if (*wd2!=0 && verb!=say) goto l2800; - if (verb==say) obj= *wd2; - if (obj!=0) goto l4090; - l4080: - switch(verb) - { case 1: /* take = 8010 */ - if (atloc[loc]==0||linkx[atloc[loc]]!=0) goto l8000; - for (i=1; i<=5; i++) - if (dloc[i]==loc&&dflag>=2) goto l8000; - obj=atloc[loc]; +l4000: verb = k; + spk = actspk[verb]; + if (*wd2 != 0 && verb != say) + goto l2800; + if (verb == say) + obj= *wd2; + if (obj != 0) + goto l4090; +l4080: + switch (verb) { + case 1: /* take = 8010 */ + if (atloc[loc] == 0 || linkx[atloc[loc]] != 0) + goto l8000; + for (i = 1; i <= 5; i++) + if (dloc[i] == loc && dflag >= 2) + goto l8000; + obj = atloc[loc]; goto l9010; - case 2: case 3: case 9: /* 8000 : drop,say,wave */ - case 10: case 16: case 17: /* calm,rub,toss */ - case 19: case 21: case 28: /* find,feed,break */ - case 29: /* wake */ - l8000: printf("%s what?\n",wd1); - obj=0; + case 2: case 3: case 9: /* 8000 : drop, say, wave */ + case 10: case 16: case 17: /* calm, rub, toss */ + case 19: case 21: case 28: /* find, feed, break */ + case 29: /* wake */ +l8000: printf("%s what?\n", wd1); + obj = 0; goto l2600; - case 4: case 6: /* 8040 open,lock */ - spk=28; - if (here(clam)) obj=clam; - if (here(oyster)) obj=oyster; - if (at(door)) obj=door; - if (at(grate)) obj=grate; - if (obj!=0 && here(chain)) goto l8000; - if (here(chain)) obj=chain; - if (obj==0) goto l2011; + case 4: case 6: /* 8040 open, lock */ + spk = 28; + if (here(clam)) + obj = clam; + if (here(oyster)) + obj = oyster; + if (at(door)) + obj = door; + if (at(grate)) + obj = grate; + if (obj != 0 && here(chain)) + goto l8000; + if (here(chain)) + obj = chain; + if (obj == 0) + goto l2011; goto l9040; - case 5: goto l2009; /* nothing */ - case 7: goto l9070; /* on */ - case 8: goto l9080; /* off */ - case 11: goto l8000; /* walk */ - case 12: goto l9120; /* kill */ - case 13: goto l9130; /* pour */ - case 14: /* eat: 8140 */ - if (!here(food)) goto l8000; - l8142: dstroy(food); - spk=72; + case 5: goto l2009; /* nothing */ + case 7: goto l9070; /* on */ + case 8: goto l9080; /* off */ + case 11: goto l8000; /* walk */ + case 12: goto l9120; /* kill */ + case 13: goto l9130; /* pour */ + case 14: /* eat: 8140 */ + if (!here(food)) + goto l8000; +l8142: dstroy(food); + spk = 72; goto l2011; - case 15: goto l9150; /* drink */ - case 18: /* quit: 8180 */ - gaveup=yes(22,54,54); - if (gaveup) done(2); /* 8185 */ + case 15: goto l9150; /* drink */ + case 18: /* quit: 8180 */ + gaveup = yes(22, 54, 54); + if (gaveup) + done(2); /* 8185 */ goto l2012; - case 20: /* invent=8200 */ - spk=98; - for (i=1; i<=100; i++) - { if (i!=bear && toting(i)) - { if (spk==98) rspeak(99); - blklin=FALSE; - pspeak(i,-1); - blklin=TRUE; - spk=0; + case 20: /* invent = 8200 */ + spk = 98; + for (i = 1; i <= 100; i++) { + if (i != bear && toting(i)) { + if (spk == 98) + rspeak(99); + blklin = FALSE; + pspeak(i, -1); + blklin = TRUE; + spk = 0; } } - if (toting(bear)) spk=141; + if (toting(bear)) + spk = 141; goto l2011; - case 22: goto l9220; /* fill */ - case 23: goto l9230; /* blast */ - case 24: /* score: 8240 */ - scorng=TRUE; + case 22: goto l9220; /* fill */ + case 23: goto l9230; /* blast */ + case 24: /* score: 8240 */ + scorng = TRUE; printf("If you were to quit now, you would score"); - printf(" %d out of a possible ",score()); - printf("%d.",mxscor); - scorng=FALSE; - gaveup=yes(143,54,54); - if (gaveup) done(2); + printf(" %d out of a possible ", score()); + printf("%d.", mxscor); + scorng = FALSE; + gaveup = yes(143, 54, 54); + if (gaveup) + done(2); goto l2012; - case 25: /* foo: 8250 */ - k=vocab(wd1,3); - spk=42; - if (foobar==1-k) goto l8252; - if (foobar!=0) spk=151; + case 25: /* foo: 8250 */ + k = vocab(wd1, 3, 0); + spk = 42; + if (foobar == 1 - k) + goto l8252; + if (foobar != 0) + spk = 151; goto l2011; - l8252: foobar=k; - if (k!=4) goto l2009; - foobar=0; - if (place[eggs]==plac[eggs] - ||(toting(eggs)&&loc==plac[eggs])) goto l2011; - if (place[eggs]==0&&place[troll]==0&&prop[troll]==0) - prop[troll]=1; - k=2; - if (here(eggs)) k=1; - if (loc==plac[eggs]) k=0; - move(eggs,plac[eggs]); - pspeak(eggs,k); +l8252: foobar = k; + if (k != 4) + goto l2009; + foobar = 0; + if (place[eggs] == plac[eggs] + || (toting(eggs) && loc == plac[eggs])) goto l2011; + if (place[eggs] == 0 && place[troll] == 0 && prop[troll] == 0) + prop[troll] = 1; + k = 2; + if (here(eggs)) + k = 1; + if (loc == plac[eggs]) + k = 0; + move(eggs, plac[eggs]); + pspeak(eggs, k); goto l2012; - case 26: /* brief=8260 */ - spk=156; - abbnum=10000; - detail=3; + case 26: /* brief = 8260 */ + spk = 156; + abbnum = 10000; + detail = 3; goto l2011; - case 27: /* read=8270 */ - if (here(magzin)) obj=magzin; - if (here(tablet)) obj=obj*100+tablet; - if (here(messag)) obj=obj*100+messag; - if (closed&&toting(oyster)) obj=oyster; - if (obj>100||obj==0||dark(0)) goto l8000; + case 27: /* read = 8270 */ + if (here(magzin)) + obj = magzin; + if (here(tablet)) + obj = obj * 100 + tablet; + if (here(messag)) + obj = obj * 100 + messag; + if (closed && toting(oyster)) + obj = oyster; + if (obj > 100 || obj == 0 || dark()) + goto l8000; goto l9270; - case 30: /* suspend=8300 */ - spk=201; - if (demo) goto l2011; + case 30: /* suspend = 8300 */ + spk = 201; + if (demo) + goto l2011; printf("I can suspend your adventure for you so"); printf(" you can resume later, but\n"); printf("you will have to wait at least"); - printf(" %d minutes before continuing.",latncy); - if (!yes(200,54,54)) goto l2012; - datime(&saved,&savet); - ciao(argv[0]); /* Do we quit? */ + printf(" %d minutes before continuing.", latncy); + if (!yes(200, 54, 54)) + goto l2012; + time(&savet); + ciao(); /* Do we quit? */ continue; /* Maybe not */ - case 31: /* hours=8310 */ + case 31: /* hours = 8310 */ printf("Colossal cave is closed 9am-5pm Mon "); printf("through Fri except holidays.\n"); goto l2012; - default: bug(23); + default: + bug(23); } - l4090: - switch(verb) - { case 1: /* take = 9010 */ - l9010: switch(trtake()) - { case 2011: goto l2011; - case 9220: goto l9220; - case 2009: goto l2009; - case 2012: goto l2012; - default: bug(102); +l4090: + switch (verb) { + case 1: /* take = 9010 */ +l9010: switch (trtake()) { + case 2011: goto l2011; + case 9220: goto l9220; + case 2009: goto l2009; + case 2012: goto l2012; + default: bug(102); } - l9020: case 2: /* drop = 9020 */ - switch(trdrop()) - { case 2011: goto l2011; - case 19000: done(3); - case 2012: goto l2012; - default: bug(105); +l9020: case 2: /* drop = 9020 */ + switch (trdrop()) { + case 2011: goto l2011; + case 19000: done(3); + case 2012: goto l2012; + default: bug(105); } - l9030: case 3: - switch(trsay()) - { case 2012: goto l2012; - case 2630: goto l2630; - default: bug(107); +l9030: case 3: + switch (trsay()) { + case 2012: goto l2012; + case 2630: goto l2630; + default: bug(107); } - l9040: case 4: case 6: /* open, close */ - switch(tropen()) - { case 2011: goto l2011; - case 2010: goto l2010; - default: bug(106); +l9040: case 4: case 6: /* open, close */ + switch (tropen()) { + case 2011: goto l2011; + case 2010: goto l2010; + default: bug(106); } - case 5: goto l2009; /* nothing */ - case 7: /* on 9070 */ - l9070: if (!here(lamp)) goto l2011; - spk=184; - if (limit<0) goto l2011; - prop[lamp]=1; + case 5: goto l2009; /* nothing */ + case 7: /* on 9070 */ +l9070: if (!here(lamp)) + goto l2011; + spk = 184; + if (limit < 0) + goto l2011; + prop[lamp] = 1; rspeak(39); - if (wzdark) goto l2000; + if (wzdark) + goto l2000; goto l2012; - case 8: /* off */ - l9080: if (!here(lamp)) goto l2011; - prop[lamp]=0; + case 8: /* off */ +l9080: if (!here(lamp)) + goto l2011; + prop[lamp] = 0; rspeak(40); - if (dark(0)) rspeak(16); + if (dark()) + rspeak(16); goto l2012; - case 9: /* wave */ - if ((!toting(obj))&&(obj!=rod||!toting(rod2))) - spk=29; - if (obj!=rod||!at(fissur)||!toting(obj)||closng) + case 9: /* wave */ + if ((!toting(obj)) && (obj != rod || !toting(rod2))) + spk = 29; + if (obj != rod || !at(fissur)||!toting(obj) || closng) goto l2011; - prop[fissur]=1-prop[fissur]; - pspeak(fissur,2-prop[fissur]); + prop[fissur] = 1-prop[fissur]; + pspeak(fissur, 2-prop[fissur]); goto l2012; - case 10: case 11: case 18: /* calm, walk, quit */ - case 24: case 25: case 26: /* score, foo, brief */ - case 30: case 31: /* suspend, hours */ - goto l2011; - l9120: case 12: /* kill */ - switch(trkill()) - { case 8000: goto l8000; - case 8: goto l8; - case 2011: goto l2011; - case 2608: goto l2608; - case 19000: done(3); - default: bug(112); + case 10: case 11: case 18: /* calm, walk, quit */ + case 24: case 25: case 26: /* score, foo, brief */ + case 30: case 31: /* suspend, hours */ + goto l2011; +l9120: case 12: /* kill */ + switch (trkill()) { + case 8000: goto l8000; + case 8: goto l8; + case 2011: goto l2011; + case 2608: goto l2608; + case 19000: done(3); + default: bug(112); } - l9130: case 13: /* pour */ - if (obj==bottle||obj==0) obj=liq(0); - if (obj==0) goto l8000; - if (!toting(obj)) goto l2011; - spk=78; - if (obj!=oil&&obj!=water) goto l2011; - prop[bottle]=1; - place[obj]=0; - spk=77; - if (!(at(plant)||at(door))) goto l2011; - if (at(door)) - { prop[door]=0; /* 9132 */ - if (obj==oil) prop[door]=1; - spk=113+prop[door]; +l9130: case 13: /* pour */ + if (obj == bottle || obj == 0) + obj = liq(); + if (obj == 0) + goto l8000; + if (!toting(obj)) + goto l2011; + spk = 78; + if (obj != oil && obj != water) + goto l2011; + prop[bottle] = 1; + place[obj] = 0; + spk = 77; + if (!(at(plant) || at(door))) + goto l2011; + if (at(door)) { + prop[door] = 0; /* 9132 */ + if (obj == oil) + prop[door] = 1; + spk = 113 + prop[door]; goto l2011; } - spk=112; - if (obj!=water) goto l2011; - pspeak(plant,prop[plant]+1); - prop[plant]=(prop[plant]+2)% 6; - prop[plant2]=prop[plant]/2; - k=null; + spk = 112; + if (obj != water) + goto l2011; + pspeak(plant, prop[plant] + 1); + prop[plant] = (prop[plant] + 2) % 6; + prop[plant2] = prop[plant] / 2; + k = null; goto l8; - case 14: /* 9140 - eat */ - if (obj==food) goto l8142; - if (obj==bird||obj==snake||obj==clam||obj==oyster - ||obj==dwarf||obj==dragon||obj==troll - ||obj==bear) spk=71; + case 14: /* 9140 - eat */ + if (obj == food) + goto l8142; + if (obj == bird || obj == snake || obj == clam || obj == oyster + || obj == dwarf || obj == dragon || obj == troll + || obj == bear) spk = 71; goto l2011; - l9150: case 15: /* 9150 - drink */ - if (obj==0&&liqloc(loc)!=water&&(liq(0)!=water - ||!here(bottle))) goto l8000; - if (obj!=0&&obj!=water) spk=110; - if (spk==110||liq(0)!=water||!here(bottle)) +l9150: case 15: /* 9150 - drink */ + if (obj == 0 && liqloc(loc) != water && (liq() != water + || !here(bottle))) + goto l8000; + if (obj != 0 && obj != water) + spk = 110; + if (spk == 110 || liq() != water || !here(bottle)) goto l2011; - prop[bottle]=1; - place[water]=0; - spk=74; + prop[bottle] = 1; + place[water] = 0; + spk = 74; goto l2011; - case 16: /* 9160: rub */ - if (obj!=lamp) spk=76; + case 16: /* 9160: rub */ + if (obj != lamp) + spk = 76; goto l2011; - case 17: /* 9170: throw */ - switch(trtoss()) - { case 2011: goto l2011; - case 9020: goto l9020; - case 9120: goto l9120; - case 8: goto l8; - case 9210: goto l9210; - default: bug(113); + case 17: /* 9170: throw */ + switch (trtoss()) { + case 2011: goto l2011; + case 9020: goto l9020; + case 9120: goto l9120; + case 8: goto l8; + case 9210: goto l9210; + default: bug(113); } - case 19: case 20: /* 9190: find, invent */ - if (at(obj)||(liq(0)==obj&&at(bottle)) - ||k==liqloc(loc)) spk=94; - for (i=1; i<=5; i++) - if (dloc[i]==loc&&dflag>=2&&obj==dwarf) - spk=94; - if (closed) spk=138; - if (toting(obj)) spk=24; + case 19: case 20: /* 9190: find, invent */ + if (at(obj) || (liq() == obj && at(bottle)) + || k == liqloc(loc)) + spk = 94; + for (i = 1; i <= 5; i++) + if (dloc[i] == loc && dflag >= 2 && obj == dwarf) + spk = 94; + if (closed) + spk = 138; + if (toting(obj)) + spk = 24; goto l2011; - l9210: case 21: /* feed */ - switch(trfeed()) - { case 2011: goto l2011; - default: bug(114); +l9210: case 21: /* feed */ + switch (trfeed()) { + case 2011: goto l2011; + default: bug(114); } - l9220: case 22: /* fill */ - switch(trfill()) - { case 2011: goto l2011; - case 8000: goto l8000; - case 9020: goto l9020; - default: bug(115); +l9220: case 22: /* fill */ + switch (trfill()) { + case 2011: goto l2011; + case 8000: goto l8000; + case 9020: goto l9020; + default: bug(115); } - l9230: case 23: /* blast */ - if (prop[rod2]<0||!closed) goto l2011; - bonus=133; - if (loc==115) bonus=134; - if (here(rod2)) bonus=135; +l9230: case 23: /* blast */ + if (prop[rod2] < 0 || !closed) + goto l2011; + bonus = 133; + if (loc == 115) + bonus = 134; + if (here(rod2)) + bonus = 135; rspeak(bonus); done(2); - l9270: case 27: /* read */ - if (dark(0)) goto l5190; - if (obj==magzin) spk=190; - if (obj==tablet) spk=196; - if (obj==messag) spk=191; - if (obj==oyster&&hinted[2]&&toting(oyster)) spk=194; - if (obj!=oyster||hinted[2]||!toting(oyster) - ||!closed) goto l2011; - hinted[2]=yes(192,193,54); +l9270: case 27: /* read */ + if (dark()) + goto l5190; + if (obj == magzin) + spk = 190; + if (obj == tablet) + spk = 196; + if (obj == messag) + spk = 191; + if (obj == oyster && hinted[2] && toting(oyster)) + spk = 194; + if (obj != oyster || hinted[2] || !toting(oyster) + || !closed) goto l2011; + hinted[2] = yes(192, 193, 54); goto l2012; - l9280: case 28: /* break */ - if (obj==mirror) spk=148; - if (obj==vase&&prop[vase]==0) - { spk=198; - if (toting(vase)) drop(vase,loc); - prop[vase]=2; - fixed[vase]= -1; +l9280: case 28: /* break */ + if (obj == mirror) + spk = 148; + if (obj == vase && prop[vase] == 0) { + spk = 198; + if (toting(vase)) + drop(vase, loc); + prop[vase] = 2; + fixed[vase] = -1; goto l2011; } - if (obj!=mirror||!closed) goto l2011; + if (obj != mirror||!closed) + goto l2011; rspeak(197); done(3); - - l9290: case 29: /* wake */ - if (obj!=dwarf||!closed) goto l2011; +l9290: case 29: /* wake */ + if (obj != dwarf||!closed) + goto l2011; rspeak(199); done(3); - default: bug(24); + default: bug(24); } - l5000: - obj=k; - if (fixed[k]!=loc && !here(k)) goto l5100; - l5010: if (*wd2!=0) goto l2800; - if (verb!=0) goto l4090; - printf("What do you want to do with the %s?\n",wd1); +l5000: + obj = k; + if (fixed[k] != loc && !here(k)) + goto l5100; +l5010: if (*wd2 != 0) + goto l2800; + if (verb != 0) + goto l4090; + printf("What do you want to do with the %s?\n", wd1); goto l2600; - l5100: if (k!=grate) goto l5110; - if (loc==1||loc==4||loc==7) k=dprssn; - if (loc>9&&loc<15) k=entrnc; - if (k!=grate) goto l8; - l5110: if (k!=dwarf) goto l5120; - for (i=1; i<=5; i++) - if (dloc[i]==loc&&dflag>=2) goto l5010; - l5120: if ((liq(0)==k&&here(bottle))||k==liqloc(loc)) goto l5010; - if (obj!=plant||!at(plant2)||prop[plant2]==0) goto l5130; - obj=plant2; +l5100: if (k != grate) + goto l5110; + if (loc == 1 || loc == 4 || loc == 7) + k = dprssn; + if (loc > 9 && loc < 15) + k = entrnc; + if (k != grate) + goto l8; +l5110: if (k != dwarf) + goto l5120; + for (i = 1; i <= 5; i++) + if (dloc[i] == loc && dflag >= 2) + goto l5010; +l5120: if ((liq() == k && here(bottle)) || k == liqloc(loc)) + goto l5010; + if (obj != plant || !at(plant2) || prop[plant2] == 0) + goto l5130; + obj = plant2; goto l5010; - l5130: if (obj!=knife||knfloc!=loc) goto l5140; +l5130: if (obj != knife || knfloc != loc) + goto l5140; knfloc = -1; - spk=116; + spk = 116; goto l2011; - l5140: if (obj!=rod||!here(rod2)) goto l5190; - obj=rod2; +l5140: if (obj != rod || !here(rod2)) + goto l5190; + obj = rod2; goto l5010; - l5190: if ((verb==find||verb==invent)&&*wd2==0) goto l5010; - printf("I see no %s here\n",wd1); +l5190: if ((verb == find || verb == invent) && *wd2 == 0) + goto l5010; + printf("I see no %s here\n", wd1); goto l2012; } } diff --git a/games/adventure/save.c b/games/adventure/save.c index f4bbb5c2660..e62e4dc27b8 100644 --- a/games/adventure/save.c +++ b/games/adventure/save.c @@ -1,3 +1,4 @@ +/* $OpenBSD: save.c,v 1.5 1998/08/31 02:29:43 pjanzen Exp $ */ /* $NetBSD: save.c,v 1.2 1995/03/21 12:05:08 cgd Exp $ */ /*- @@ -42,14 +43,14 @@ #if 0 static char sccsid[] = "@(#)save.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: save.c,v 1.2 1995/03/21 12:05:08 cgd Exp $"; +static char rcsid[] = "$OpenBSD: save.c,v 1.5 1998/08/31 02:29:43 pjanzen Exp $"; #endif #endif /* not lint */ -#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include "hdr.h" +#include "extern.h" struct savestruct { @@ -59,141 +60,132 @@ struct savestruct struct savestruct save_array[] = { - &abbnum, sizeof(abbnum), - &attack, sizeof(attack), - &blklin, sizeof(blklin), - &bonus, sizeof(bonus), - &chloc, sizeof(chloc), - &chloc2, sizeof(chloc2), - &clock1, sizeof(clock1), - &clock2, sizeof(clock2), - &closed, sizeof(closed), - &closng, sizeof(closng), - &daltlc, sizeof(daltlc), - &demo, sizeof(demo), - &detail, sizeof(detail), - &dflag, sizeof(dflag), - &dkill, sizeof(dkill), - &dtotal, sizeof(dtotal), - &foobar, sizeof(foobar), - &gaveup, sizeof(gaveup), - &holdng, sizeof(holdng), - &iwest, sizeof(iwest), - &k, sizeof(k), - &k2, sizeof(k2), - &knfloc, sizeof(knfloc), - &kq, sizeof(kq), - &latncy, sizeof(latncy), - &limit, sizeof(limit), - &lmwarn, sizeof(lmwarn), - &loc, sizeof(loc), - &maxdie, sizeof(maxdie), - &mxscor, sizeof(mxscor), - &newloc, sizeof(newloc), - &numdie, sizeof(numdie), - &obj, sizeof(obj), - &oldlc2, sizeof(oldlc2), - &oldloc, sizeof(oldloc), - &panic, sizeof(panic), - &saved, sizeof(saved), - &savet, sizeof(savet), - &scorng, sizeof(scorng), - &spk, sizeof(spk), - &stick, sizeof(stick), - &tally, sizeof(tally), - &tally2, sizeof(tally2), - &tkk, sizeof(tkk), - &turns, sizeof(turns), - &verb, sizeof(verb), - &wd1, sizeof(wd1), - &wd2, sizeof(wd2), - &wzdark, sizeof(wzdark), - &yea, sizeof(yea), - atloc, sizeof(atloc), - dloc, sizeof(dloc), - dseen, sizeof(dseen), - fixed, sizeof(fixed), - hinted, sizeof(hinted), - linkx, sizeof(linkx), - odloc, sizeof(odloc), - place, sizeof(place), - prop, sizeof(prop), - tk, sizeof(tk), + {&abbnum, sizeof(abbnum)}, + {&attack, sizeof(attack)}, + {&blklin, sizeof(blklin)}, + {&bonus, sizeof(bonus)}, + {&chloc, sizeof(chloc)}, + {&chloc2, sizeof(chloc2)}, + {&clock1, sizeof(clock1)}, + {&clock2, sizeof(clock2)}, + {&closed, sizeof(closed)}, + {&closng, sizeof(closng)}, + {&daltlc, sizeof(daltlc)}, + {&demo, sizeof(demo)}, + {&detail, sizeof(detail)}, + {&dflag, sizeof(dflag)}, + {&dkill, sizeof(dkill)}, + {&dtotal, sizeof(dtotal)}, + {&foobar, sizeof(foobar)}, + {&gaveup, sizeof(gaveup)}, + {&holdng, sizeof(holdng)}, + {&iwest, sizeof(iwest)}, + {&k, sizeof(k)}, + {&k2, sizeof(k2)}, + {&knfloc, sizeof(knfloc)}, + {&kq, sizeof(kq)}, + {&latncy, sizeof(latncy)}, + {&limit, sizeof(limit)}, + {&lmwarn, sizeof(lmwarn)}, + {&loc, sizeof(loc)}, + {&maxdie, sizeof(maxdie)}, + {&mxscor, sizeof(mxscor)}, + {&newloc, sizeof(newloc)}, + {&numdie, sizeof(numdie)}, + {&obj, sizeof(obj)}, + {&oldlc2, sizeof(oldlc2)}, + {&oldloc, sizeof(oldloc)}, + {&panic, sizeof(panic)}, + {&savet, sizeof(savet)}, + {&scorng, sizeof(scorng)}, + {&spk, sizeof(spk)}, + {&stick, sizeof(stick)}, + {&tally, sizeof(tally)}, + {&tally2, sizeof(tally2)}, + {&tkk, sizeof(tkk)}, + {&turns, sizeof(turns)}, + {&verb, sizeof(verb)}, + {&wd1, sizeof(wd1)}, + {&wd2, sizeof(wd2)}, + {&wzdark, sizeof(wzdark)}, + {&yea, sizeof(yea)}, + {atloc, sizeof(atloc)}, + {dloc, sizeof(dloc)}, + {dseen, sizeof(dseen)}, + {fixed, sizeof(fixed)}, + {hinted, sizeof(hinted)}, + {linkx, sizeof(linkx)}, + {odloc, sizeof(odloc)}, + {place, sizeof(place)}, + {prop, sizeof(prop)}, + {tk, sizeof(tk)}, - NULL, 0 + {NULL, 0} }; -save(outfile) /* Two passes on data: first to get checksum, second */ -char *outfile; /* to output the data using checksum to start random #s */ +int +save(outfile) /* Two passes on data: first to get checksum, second */ + const char *outfile; /* to output the data using checksum to start random #s */ { - FILE *out; + FILE *out; struct savestruct *p; - char *s; - long sum; - int i; + char *s; + long sum; + int i; crc_start(); for (p = save_array; p->address != NULL; p++) sum = crc(p->address, p->width); srandom((int) sum); - setegid(egid); - if ((out = fopen(outfile, "wb")) == NULL) - { - fprintf(stderr, - "Hmm. The name \"%s\" appears to be magically blocked.\n", - outfile); - setegid(getgid()); - return 1; + if ((out = fopen(outfile, "wb")) == NULL) { + fprintf(stderr, + "Hmm. The name \"%s\" appears to be magically blocked.\n", + outfile); + return 1; } - setegid(getgid()); - fwrite(&sum, sizeof(sum), 1, out); /* Here's the random() key */ - for (p = save_array; p->address != NULL; p++) - { + fwrite(&sum, sizeof(sum), 1, out); /* Here's the random() key */ + for (p = save_array; p->address != NULL; p++) { for (s = p->address, i = 0; i < p->width; i++, s++) - *s = (*s ^ random()) & 0xFF; /* Lightly encrypt */ + *s = (*s ^ random()) & 0xFF; /* Lightly encrypt */ fwrite(p->address, p->width, 1, out); } fclose(out); return 0; } +int restore(infile) -char *infile; + const char *infile; { - FILE *in; + FILE *in; struct savestruct *p; - char *s; - long sum, cksum; - int i; + char *s; + long sum, cksum; + int i; - setegid(egid); - if ((in = fopen(infile, "rb")) == NULL) - { - fprintf(stderr, - "Hmm. The file \"%s\" appears to be magically blocked.\n", - infile); - setegid(getgid()); - return 1; + if ((in = fopen(infile, "rb")) == NULL) { + fprintf(stderr, + "Hmm. The file \"%s\" appears to be magically blocked.\n", + infile); + return 1; } - setegid(getgid()); fread(&sum, sizeof(sum), 1, in); /* Get the seed */ - srandom((int) sum); - for (p = save_array; p->address != NULL; p++) - { + srandom((unsigned int) sum); + for (p = save_array; p->address != NULL; p++) { fread(p->address, p->width, 1, in); for (s = p->address, i = 0; i < p->width; i++, s++) - *s = (*s ^ random()) & 0xFF; /* Lightly decrypt */ + *s = (*s ^ random()) & 0xFF; /* Lightly decrypt */ } fclose(in); - crc_start(); /* See if she cheated */ + crc_start(); /* See if she cheated */ for (p = save_array; p->address != NULL; p++) cksum = crc(p->address, p->width); - if (sum != cksum) /* Tsk tsk */ - return 2; /* Altered the file */ + if (sum != cksum) /* Tsk tsk */ + return 2; /* Altered the file */ /* We successfully restored, so this really was a save file */ /* Get rid of the file, but don't bother checking that we did */ return 0; diff --git a/games/adventure/setup.c b/games/adventure/setup.c index a5a520c07b7..dcf2ad68307 100644 --- a/games/adventure/setup.c +++ b/games/adventure/setup.c @@ -1,3 +1,4 @@ +/* $OpenBSD: setup.c,v 1.4 1998/08/31 02:29:44 pjanzen Exp $ */ /* $NetBSD: setup.c,v 1.2 1995/03/21 12:05:10 cgd Exp $ */ /*- @@ -46,7 +47,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)setup.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: setup.c,v 1.2 1995/03/21 12:05:10 cgd Exp $"; +static char rcsid[] = "$OpenBSD: setup.c,v 1.4 1998/08/31 02:29:44 pjanzen Exp $"; #endif #endif /* not lint */ @@ -63,29 +64,31 @@ static char rcsid[] = "$NetBSD: setup.c,v 1.2 1995/03/21 12:05:10 cgd Exp $"; #define SIG1 " * Jim Gillogly" #define SIG2 " * Sterday, 6 Thrimidge S.R. 1993, 15:24" +#include <err.h> #include <stdio.h> +#include <stdlib.h> #include "hdr.h" /* SEED lives in there; keep them coordinated. */ -#define USAGE "Usage: setup file > data.c (file is typically glorkz)\n" +#define USAGE "Usage: setup file > data.c (file is typically glorkz)" #define YES 1 #define NO 0 -void fatal(); - #define LINE 10 /* How many values do we get on a line? */ +int main(argc, argv) -int argc; -char *argv[]; + int argc; + char *argv[]; { - FILE *infile; - int c, count, linestart; + FILE *infile; + int c, count, linestart; - if (argc != 2) fatal(USAGE); + if (argc != 2) + errx(1, USAGE); if ((infile = fopen(argv[1], "r")) == NULL) - fatal("Can't read file %s.\n", argv[1]); + err(1, "Can't read file %s.", argv[1]); puts("/*\n * data.c: created by setup from the ascii data file."); puts(SIG1); puts(SIG2); @@ -95,39 +98,28 @@ char *argv[]; count = 0; linestart = YES; - while ((c = getc(infile)) != EOF) - { + while ((c = getc(infile)) != EOF) { if (count++ % LINE == 0) printf("\n\t"); - if (linestart && c == ' ') /* Convert first spaces to tab */ - { + if (linestart && c == ' ') { /* Convert first spaces to tab */ printf("0x%02x,", ('\t' ^ random()) & 0xFF); while ((c = getc(infile)) == ' ' && c != EOF); /* Drop the non-whitespace character through */ linestart = NO; } - switch(c) - { - case '\t': + switch (c) { + case '\t': linestart = NO; /* Don't need to convert spaces */ break; - case '\n': + case '\n': linestart = YES; /* Ready to convert spaces again */ break; } if (count++ % LINE == 0) printf("\n\t"); - printf("0x%02x,", (c ^ random()) & 0xFF); + printf("0x%02lx,", (c ^ random()) & 0xFF); } puts("\n\t0\n};"); fclose(infile); exit(0); } - - -void fatal(format, arg) -char *format; -{ - fprintf(stderr, format, arg); - exit(1); -} diff --git a/games/adventure/subr.c b/games/adventure/subr.c index 4101c3223b6..eb88d83c20e 100644 --- a/games/adventure/subr.c +++ b/games/adventure/subr.c @@ -1,3 +1,4 @@ +/* $OpenBSD: subr.c,v 1.3 1998/08/31 02:29:45 pjanzen Exp $ */ /* $NetBSD: subr.c,v 1.2 1995/03/21 12:05:11 cgd Exp $ */ /*- @@ -42,793 +43,1019 @@ #if 0 static char sccsid[] = "@(#)subr.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: subr.c,v 1.2 1995/03/21 12:05:11 cgd Exp $"; +static char rcsid[] = "$OpenBSD: subr.c,v 1.3 1998/08/31 02:29:45 pjanzen Exp $"; #endif #endif /* not lint */ /* Re-coding of advent in C: subroutines from main */ -# include "hdr.h" +#include <stdio.h> +#include "hdr.h" +#include "extern.h" /* Statement functions */ +int toting(objj) -int objj; -{ if (place[objj] == -1) return(TRUE); - else return(FALSE); + int objj; +{ + if (place[objj] == -1) + return (TRUE); + return (FALSE); } +int here(objj) -int objj; -{ if (place[objj]==loc || toting(objj)) return(TRUE); - else return(FALSE); + int objj; +{ + if (place[objj] == loc || toting(objj)) + return (TRUE); + return (FALSE); } +int at(objj) -int objj; -{ if (place[objj]==loc || fixed[objj]==loc) return(TRUE); - else return (FALSE); + int objj; +{ + if (place[objj] == loc || fixed[objj] == loc) + return (TRUE); + else + return (FALSE); } +int liq2(pbotl) -int pbotl; -{ return((1-pbotl)*water+(pbotl/2)*(water+oil)); + int pbotl; +{ + return ((1 - pbotl) * water + (pbotl / 2) * (water + oil)); } -liq(foo) -{ register int i; - i=prop[bottle]; - if (i>-1-i) return(liq2(i)); - else return(liq2(-1-i)); +int +liq() +{ + int i; + + i = prop[bottle]; + if (i > -1 - i) + return (liq2(i)); + return (liq2(-1 - i)); } -liqloc(locc) /* may want to clean this one up a bit */ -int locc; -{ register int i,j,l; - i=cond[locc]/2; - j=((i*2)%8)-5; - l=cond[locc]/4; - l=l%2; - return(liq2(j*l+1)); +int +liqloc(locc) /* may want to clean this one up a bit */ + int locc; +{ + int i, j, l; + + i = cond[locc] / 2; + j = ((i * 2) % 8) - 5; + l = cond[locc] / 4; + l = l % 2; + return (liq2(j * l + 1)); } -bitset(l,n) -int l,n; -{ if (cond[l] & setbit[n]) return(TRUE); - return(FALSE); +int +bitset(l, n) + int l, n; +{ + if (cond[l] & setbit[n]) + return (TRUE); + return (FALSE); } +int forced(locc) -int locc; -{ if (cond[locc]==2) return(TRUE); - return(FALSE); + int locc; +{ + if (cond[locc] == 2) + return (TRUE); + return (FALSE); } -dark(foo) -{ if ((cond[loc]%2)==0 && (prop[lamp]==0 || !here(lamp))) - return(TRUE); - return(FALSE); +int +dark() +{ + if ((cond[loc] % 2) == 0 && (prop[lamp] == 0 || !here(lamp))) + return (TRUE); + return (FALSE); } +int pct(n) -int n; -{ if (ran(100)<n) return(TRUE); - return(FALSE); + int n; +{ + if (ran(100) < n) + return (TRUE); + return (FALSE); } -fdwarf() /* 71 */ -{ register int i,j; - register struct travlist *kk; +int +fdwarf() /* 71 */ +{ + int i, j; + struct travlist *kk; - if (newloc!=loc&&!forced(loc)&&!bitset(loc,3)) - { for (i=1; i<=5; i++) - { if (odloc[i]!=newloc||!dseen[i]) continue; - newloc=loc; + if (newloc != loc && !forced(loc) && !bitset(loc, 3)) { + for (i = 1; i <= 5; i++) { + if (odloc[i] != newloc || !dseen[i]) + continue; + newloc = loc; rspeak(2); break; } } - loc=newloc; /* 74 */ - if (loc==0||forced(loc)||bitset(newloc,3)) return(2000); - if (dflag==0) - { if (loc>=15) dflag=1; - return(2000); - } - if (dflag==1) /* 6000 */ - { if (loc<15||pct(95)) return(2000); - dflag=2; - for (i=1; i<=2; i++) - { j=1+ran(5); - if (pct(50)&&saved== -1) dloc[j]=0; /* 6001 */ + loc = newloc; /* 74 */ + if (loc == 0 || forced(loc) || bitset(newloc, 3)) + return (2000); + if (dflag == 0) { + if (loc >= 15) + dflag = 1; + return (2000); + } + if (dflag == 1) { /* 6000 */ + if (loc < 15 || pct(95)) + return (2000); + dflag = 2; + for (i = 1; i <= 2; i++) { + j = 1 + ran(5); + if (pct(50) && saved == -1) + dloc[j] = 0; /* 6001 */ } - for (i=1; i<=5; i++) - { if (dloc[i]==loc) dloc[i]=daltlc; - odloc[i]=dloc[i]; /* 6002 */ + for (i = 1; i <= 5; i++) { + if (dloc[i] == loc) + dloc[i] = daltlc; + odloc[i] = dloc[i]; /* 6002 */ } rspeak(3); - drop(axe,loc); - return(2000); - } - dtotal=attack=stick=0; /* 6010 */ - for (i=1; i<=6; i++) /* loop to 6030 */ - { if (dloc[i]==0) continue; - j=1; - for (kk=travel[dloc[i]]; kk!=0; kk=kk->next) - { newloc=kk->tloc; - if (newloc>300||newloc<15||newloc==odloc[i] - ||(j>1&&newloc==tk[j-1])||j>=20 - ||newloc==dloc[i]||forced(newloc) - ||(i==6&&bitset(newloc,3)) - ||kk->conditions==100) continue; - tk[j++]=newloc; + drop(axe, loc); + return (2000); + } + dtotal = attack = stick = 0; /* 6010 */ + for (i = 1; i <= 6; i++) { /* loop to 6030 */ + if (dloc[i] == 0) + continue; + j = 1; + for (kk = travel[dloc[i]]; kk != 0; kk = kk->next) { + newloc = kk->tloc; + if (newloc > 300 || newloc < 15 || newloc == odloc[i] + || (j > 1 && newloc == tk[j-1]) || j >= 20 + || newloc == dloc[i] || forced(newloc) + || (i == 6 && bitset(newloc, 3)) + || kk->conditions == 100) + continue; + tk[j++] = newloc; } - tk[j]=odloc[i]; /* 6016 */ - if (j>=2) j--; - j=1+ran(j); - odloc[i]=dloc[i]; - dloc[i]=tk[j]; - dseen[i]=(dseen[i]&&loc>=15)||(dloc[i]==loc||odloc[i]==loc); - if (!dseen[i]) continue; /* i.e. goto 6030 */ - dloc[i]=loc; - if (i==6) /* pirate's spotted him */ - { if (loc==chloc||prop[chest]>=0) continue; - k=0; - for (j=50; j<=maxtrs; j++) /* loop to 6020 */ - { if (j==pyram&&(loc==plac[pyram] - || loc==plac[emrald])) goto l6020; - if (toting(j)) goto l6022; - l6020: if (here(j)) k=1; + tk[j] = odloc[i]; /* 6016 */ + if (j >= 2) + j--; + j = 1 + ran(j); + odloc[i] = dloc[i]; + dloc[i] = tk[j]; + dseen[i] = (dseen[i] && loc >= 15) || (dloc[i] == loc || odloc[i] == loc); + if (!dseen[i]) + continue; /* i.e. goto 6030 */ + dloc[i] = loc; + if (i == 6) { /* pirate's spotted him */ + if (loc == chloc || prop[chest] >= 0) + continue; + k = 0; + for (j = 50; j <= maxtrs; j++) { /* loop to 6020 */ + if (j == pyram && (loc == plac[pyram] + || loc == plac[emrald])) + goto l6020; + if (toting(j)) + goto l6022; +l6020: if (here(j)) + k = 1; } /* 6020 */ - if (tally==tally2+1 && k==0 && place[chest]==0 - &&here(lamp) && prop[lamp]==1) goto l6025; - if (odloc[6]!=dloc[6]&&pct(20)) + if (tally == tally2 + 1 && k == 0 && place[chest] == 0 + && here(lamp) && prop[lamp] == 1) + goto l6025; + if (odloc[6] != dloc[6] && pct(20)) rspeak(127); - continue; /* to 6030 */ - l6022: rspeak(128); - if (place[messag]==0) move(chest,chloc); - move(messag,chloc2); - for (j=50; j<=maxtrs; j++) /* loop to 6023 */ - { if (j==pyram && (loc==plac[pyram] - || loc==plac[emrald])) continue; - if (at(j)&&fixed[j]==0) carry(j,loc); - if (toting(j)) drop(j,chloc); + continue; /* to 6030 */ +l6022: rspeak(128); + if (place[messag] == 0) + move(chest, chloc); + move(messag, chloc2); + for (j = 50; j <= maxtrs; j++) { /* loop to 6023 */ + if (j == pyram && (loc == plac[pyram] + || loc == plac[emrald])) + continue; + if (at(j) && fixed[j] == 0) + carry(j, loc); + if (toting(j)) + drop(j, chloc); } - l6024: dloc[6]=odloc[6]=chloc; - dseen[6]=FALSE; +l6024: dloc[6] = odloc[6] = chloc; + dseen[6] = FALSE; continue; - l6025: rspeak(186); - move(chest,chloc); - move(messag,chloc2); +l6025: rspeak(186); + move(chest, chloc); + move(messag, chloc2); goto l6024; } dtotal++; /* 6027 */ - if (odloc[i]!=dloc[i]) continue; + if (odloc[i] != dloc[i]) + continue; attack++; - if (knfloc>=0) knfloc=loc; - if (ran(1000)<95*(dflag-2)) stick++; + if (knfloc >= 0) + knfloc = loc; + if (ran(1000) < 95 * (dflag - 2)) + stick++; } /* 6030 */ - if (dtotal==0) return(2000); - if (dtotal!=1) - { printf("There are %d threatening little dwarves ",dtotal); + if (dtotal == 0) + return (2000); + if (dtotal != 1) { + printf("There are %d threatening little dwarves ", dtotal); printf("in the room with you.\n"); } - else rspeak(4); - if (attack==0) return(2000); - if (dflag==2) dflag=3; - if (saved!= -1) dflag=20; - if (attack!=1) - { printf("%d of them throw knives at you!\n",attack); - k=6; - l82: if (stick<=1) /* 82 */ - { rspeak(k+stick); - if (stick==0) return(2000); - } - else - printf("%d of them get you!\n",stick); /* 83 */ - oldlc2=loc; - return(99); + else + rspeak(4); + if (attack == 0) + return (2000); + if (dflag == 2) + dflag = 3; + if (saved != -1) + dflag = 20; + if (attack != 1) { + printf("%d of them throw knives at you!\n", attack); + k = 6; +l82: if (stick <= 1) { /* 82 */ + rspeak(k + stick); + if (stick == 0) + return (2000); + } else + printf("%d of them get you!\n", stick); /* 83 */ + oldlc2 = loc; + return (99); } rspeak(5); - k=52; + k = 52; goto l82; } -march() /* label 8 */ -{ register int ll1,ll2; +int +march() /* label 8 */ +{ + int ll1, ll2; - if ((tkk=travel[newloc=loc])==0) bug(26); - if (k==null) return(2); - if (k==cave) /* 40 */ - { if (loc<8) rspeak(57); - if (loc>=8) rspeak(58); - return(2); + if ((tkk = travel[newloc = loc]) == 0) + bug(26); + if (k == null) + return (2); + if (k == cave) { /* 40 */ + if (loc < 8) + rspeak(57); + if (loc >= 8) + rspeak(58); + return (2); } - if (k==look) /* 30 */ - { if (detail++<3) rspeak(15); - wzdark=FALSE; - abb[loc]=0; - return(2); + if (k == look) { /* 30 */ + if (detail++ < 3) + rspeak(15); + wzdark = FALSE; + abb[loc] = 0; + return (2); } - if (k==back) /* 20 */ - { switch(mback()) - { case 2: return(2); - case 9: goto l9; - default: bug(100); + if (k == back) { /* 20 */ + switch(mback()) { + case 2: return (2); + case 9: goto l9; + default: bug(100); } } - oldlc2=oldloc; - oldloc=loc; + oldlc2 = oldloc; + oldloc = loc; l9: - for (; tkk!=0; tkk=tkk->next) - if (tkk->tverb==1 || tkk->tverb==k) break; - if (tkk==0) - { badmove(); - return(2); - } -l11: ll1=tkk->conditions; /* 11 */ - ll2=tkk->tloc; - newloc=ll1; /* newloc=conditions */ - k=newloc%100; /* k used for prob */ - if (newloc<=300) - { if (newloc<=100) /* 13 */ - { if (newloc!=0&&!pct(newloc)) goto l12; /* 14 */ - l16: newloc=ll2; /* newloc=location */ - if (newloc<=300) return(2); - if (newloc<=500) - switch(specials())/* to 30000 */ - { case 2: return(2); - case 12: goto l12; - case 99: return(99); - default: bug(101); + for (; tkk != 0; tkk = tkk->next) + if (tkk->tverb == 1 || tkk->tverb == k) + break; + if (tkk == 0) { + badmove(); + return (2); + } +l11: ll1 = tkk->conditions; /* 11 */ + ll2 = tkk->tloc; + newloc = ll1; /* newloc = conditions */ + k = newloc % 100; /* k used for prob */ + if (newloc <= 300) { + if (newloc <= 100) { /* 13 */ + if (newloc != 0 && !pct(newloc)) + goto l12; /* 14 */ +l16: newloc = ll2; /* newloc = location */ + if (newloc <= 300) + return (2); + if (newloc <= 500) + switch (specials()) { /* to 30000 */ + case 2: return (2); + case 12: goto l12; + case 99: return (99); + default: bug(101); } - rspeak(newloc-500); - newloc=loc; - return(2); + rspeak(newloc - 500); + newloc = loc; + return (2); } - if (toting(k)||(newloc>200&&at(k))) goto l16; + if (toting(k) || (newloc > 200 && at(k))) + goto l16; goto l12; } - if (prop[k]!=(newloc/100)-3) goto l16; /* newloc still conditions*/ -l12: /* alternative to probability move */ - for (; tkk!=0; tkk=tkk->next) - if (tkk->tloc!=ll2 || tkk->conditions!=ll1) break; - if (tkk==0) bug(25); + if (prop[k] != (newloc / 100) - 3) + goto l16; /* newloc still conditions */ +l12: /* alternative to probability move */ + for (; tkk != 0; tkk = tkk->next) + if (tkk->tloc != ll2 || tkk->conditions != ll1) + break; + if (tkk == 0) + bug(25); goto l11; } +int +mback() /* 20 */ +{ + struct travlist *tk2,*j; + int ll; -mback() /* 20 */ -{ register struct travlist *tk2,*j; - register int ll; - if (forced(k=oldloc)) k=oldlc2; /* k=location */ - oldlc2=oldloc; - oldloc=loc; - tk2=0; - if (k==loc) - { rspeak(91); - return(2); - } - for (; tkk!=0; tkk=tkk->next) /* 21 */ - { ll=tkk->tloc; - if (ll==k) - { k=tkk->tverb; /* k back to verb */ - tkk=travel[loc]; - return(9); + if (forced(k = oldloc)) + k = oldlc2; /* k = location */ + oldlc2 = oldloc; + oldloc = loc; + tk2 = 0; + if (k == loc) { + rspeak(91); + return (2); + } + for (; tkk != 0; tkk = tkk->next) { /* 21 */ + ll = tkk->tloc; + if (ll == k) { + k = tkk->tverb; /* k back to verb */ + tkk = travel[loc]; + return (9); } - if (ll<=300) - { j=travel[loc]; - if (forced(ll) && k==j->tloc) tk2=tkk; + if (ll <= 300) { + j = travel[loc]; + if (forced(ll) && k == j->tloc) + tk2 = tkk; } } - tkk=tk2; /* 23 */ - if (tkk!=0) - { k=tkk->tverb; - tkk=travel[loc]; - return(9); + tkk = tk2; /* 23 */ + if (tkk != 0) { + k = tkk->tverb; + tkk = travel[loc]; + return (9); } rspeak(140); - return(2); + return (2); } -specials() /* 30000 */ -{ switch(newloc -= 300) - { case 1: /* 30100 */ - newloc = 99+100-loc; - if (holdng==0||(holdng==1&&toting(emrald))) return(2); - newloc=loc; +int +specials() /* 30000 */ +{ + switch(newloc -= 300) { + case 1: /* 30100 */ + newloc = 99 + 100 - loc; + if (holdng == 0 || (holdng == 1 && toting(emrald))) + return (2); + newloc = loc; rspeak(117); - return(2); - case 2: /* 30200 */ - drop(emrald,loc); - return(12); - case 3: /* to 30300 */ - return(trbridge()); - default: bug(29); + return (2); + case 2: /* 30200 */ + drop(emrald, loc); + return (12); + case 3: /* to 30300 */ + return (trbridge()); + default: + bug(29); } } -trbridge() /* 30300 */ -{ if (prop[troll]==1) - { pspeak(troll,1); - prop[troll]=0; - move(troll2,0); - move(troll2+100,0); - move(troll,plac[troll]); - move(troll+100,fixd[troll]); +int +trbridge() /* 30300 */ +{ + if (prop[troll] == 1) { + pspeak(troll, 1); + prop[troll] = 0; + move(troll2, 0); + move(troll2 + 100, 0); + move(troll, plac[troll]); + move(troll + 100, fixd[troll]); juggle(chasm); - newloc=loc; - return(2); + newloc = loc; + return (2); } - newloc=plac[troll]+fixd[troll]-loc; /* 30310 */ - if (prop[troll]==0) prop[troll]=1; - if (!toting(bear)) return(2); + newloc = plac[troll] + fixd[troll] - loc; /* 30310 */ + if (prop[troll] == 0) + prop[troll] = 1; + if (!toting(bear)) + return (2); rspeak(162); - prop[chasm]=1; - prop[troll]=2; - drop(bear,newloc); + prop[chasm] = 1; + prop[troll] = 2; + drop(bear, newloc); fixed[bear] = -1; - prop[bear]=3; - if (prop[spices]<0) tally2++; - oldlc2=newloc; - return(99); + prop[bear] = 3; + if (prop[spices] < 0) + tally2++; + oldlc2 = newloc; + return (99); } +int badmove() /* 20 */ -{ spk=12; - if (k>=43 && k<=50) spk=9; - if (k==29||k==30) spk=9; - if (k==7||k==36||k==37) spk=10; - if (k==11||k==19) spk=11; - if (verb==find||verb==invent) spk=59; - if (k==62||k==65) spk=42; - if (k==17) spk=80; +{ + spk = 12; + if (k >= 43 && k <= 50) + spk = 9; + if (k == 29 || k == 30) + spk = 9; + if (k == 7 || k == 36 || k == 37) + spk = 10; + if (k == 11 || k == 19) + spk = 11; + if (verb == find || verb == invent) + spk = 59; + if (k == 62 || k == 65) + spk = 42; + if (k == 17) + spk = 80; rspeak(spk); - return(2); + return (2); } +int bug(n) -int n; -{ printf("Please tell jim@rand.org that fatal bug %d happened.\n",n); - exit(0); + int n; +{ +/* printf("Please tell jim@rand.org that fatal bug %d happened.\n",n); */ + fprintf(stderr, + "Please use sendbug to report that bug %d happened in adventure.\n", n); + exit(n); } +void checkhints() /* 2600 &c */ -{ register int hint; - for (hint=4; hint<=hntmax; hint++) - { if (hinted[hint]) continue; - if (!bitset(loc,hint)) hintlc[hint]= -1; +{ + int hint; + + for (hint = 4; hint <= hntmax; hint++) { + if (hinted[hint]) + continue; + if (!bitset(loc, hint)) + hintlc[hint] = -1; hintlc[hint]++; - if (hintlc[hint]<hints[hint][1]) continue; - switch(hint) - { case 4: /* 40400 */ - if (prop[grate]==0&&!here(keys)) goto l40010; + if (hintlc[hint] < hints[hint][1]) + continue; + switch (hint) { + case 4: /* 40400 */ + if (prop[grate] == 0 && !here(keys)) + goto l40010; goto l40020; - case 5: /* 40500 */ - if (here(bird)&&toting(rod)&&obj==bird) goto l40010; + case 5: /* 40500 */ + if (here(bird) && toting(rod) && obj == bird) + goto l40010; continue; /* i.e. goto l40030 */ - case 6: /* 40600 */ - if (here(snake)&&!here(bird)) goto l40010; + case 6: /* 40600 */ + if (here(snake) && !here(bird)) + goto l40010; goto l40020; - case 7: /* 40700 */ - if (atloc[loc]==0&&atloc[oldloc]==0 - && atloc[oldlc2]==0&&holdng>1) goto l40010; + case 7: /* 40700 */ + if (atloc[loc] == 0 && atloc[oldloc] == 0 + && atloc[oldlc2] == 0 && holdng > 1) + goto l40010; goto l40020; - case 8: /* 40800 */ - if (prop[emrald]!= -1&&prop[pyram]== -1) goto l40010; + case 8: /* 40800 */ + if (prop[emrald] != -1 && prop[pyram] == -1) + goto l40010; goto l40020; - case 9: - goto l40010; /* 40900 */ - default: bug(27); + case 9: + goto l40010; /* 40900 */ + default: + bug(27); } - l40010: hintlc[hint]=0; - if (!yes(hints[hint][3],0,54)) continue; +l40010: hintlc[hint] = 0; + if (!yes(hints[hint][3], 0, 54)) + continue; printf("I am prepared to give you a hint, but it will "); - printf("cost you %d points.\n",hints[hint][2]); - hinted[hint]=yes(175,hints[hint][4],54); - l40020: hintlc[hint]=0; + printf("cost you %d points.\n", hints[hint][2]); + hinted[hint] = yes(175, hints[hint][4], 54); +l40020: hintlc[hint] = 0; } } -trsay() /* 9030 */ -{ register int i; - if (*wd2!=0) copystr(wd2,wd1); - i=vocab(wd1,-1); - if (i==62||i==65||i==71||i==2025) - { *wd2=0; - obj=0; - return(2630); +int +trsay() /* 9030 */ +{ + int i; + + if (*wd2 != 0) + copystr(wd2, wd1); + i = vocab(wd1, -1, 0); + if (i == 62 || i == 65 || i == 71 || i == 2025) { + *wd2 = 0; + obj = 0; + return (2630); } - printf("\nOkay, \"%s\".\n",wd2); - return(2012); + printf("\nOkay, \"%s\".\n", wd2); + return (2012); } -trtake() /* 9010 */ -{ register int i; - if (toting(obj)) return(2011); /* 9010 */ - spk=25; - if (obj==plant&&prop[plant]<=0) spk=115; - if (obj==bear&&prop[bear]==1) spk=169; - if (obj==chain&&prop[bear]!=0) spk=170; - if (fixed[obj]!=0) return(2011); - if (obj==water||obj==oil) - { if (here(bottle)&&liq(0)==obj) - { obj=bottle; +int +trtake() /* 9010 */ +{ + if (toting(obj)) + return (2011); /* 9010 */ + spk = 25; + if (obj == plant && prop[plant] <= 0) + spk = 115; + if (obj == bear && prop[bear] == 1) + spk = 169; + if (obj == chain && prop[bear] != 0) + spk = 170; + if (fixed[obj] != 0) + return (2011); + if (obj == water || obj == oil) { + if (here(bottle) && liq() == obj) { + obj = bottle; goto l9017; } - obj=bottle; - if (toting(bottle)&&prop[bottle]==1) - return(9220); - if (prop[bottle]!=1) spk=105; - if (!toting(bottle)) spk=104; - return(2011); - } -l9017: if (holdng>=7) - { rspeak(92); - return(2012); - } - if (obj==bird) - { if (prop[bird]!=0) goto l9014; - if (toting(rod)) - { rspeak(26); - return(2012); + obj = bottle; + if (toting(bottle) && prop[bottle] == 1) + return (9220); + if (prop[bottle] != 1) + spk = 105; + if (!toting(bottle)) + spk = 104; + return (2011); + } +l9017: if (holdng >= 7) { + rspeak(92); + return (2012); + } + if (obj == bird) { + if (prop[bird] != 0) + goto l9014; + if (toting(rod)) { + rspeak(26); + return (2012); } - if (!toting(cage)) /* 9013 */ - { rspeak(27); - return(2012); + if (!toting(cage)) { /* 9013 */ + rspeak(27); + return (2012); } - prop[bird]=1; /* 9015 */ - } -l9014: if ((obj==bird||obj==cage)&&prop[bird]!=0) - carry(bird+cage-obj,loc); - carry(obj,loc); - k=liq(0); - if (obj==bottle && k!=0) place[k] = -1; - return(2009); + prop[bird] = 1; /* 9015 */ + } +l9014: if ((obj == bird || obj == cage) && prop[bird] != 0) + carry(bird + cage - obj, loc); + carry(obj, loc); + k = liq(); + if (obj == bottle && k != 0) + place[k] = -1; + return (2009); } -dropper() /* 9021 */ -{ k=liq(0); - if (k==obj) obj=bottle; - if (obj==bottle&&k!=0) place[k]=0; - if (obj==cage&&prop[bird]!=0) drop(bird,loc); - if (obj==bird) prop[bird]=0; - drop(obj,loc); - return(2012); +int +dropper() /* 9021 */ +{ + k = liq(); + if (k == obj) + obj = bottle; + if (obj == bottle && k != 0) + place[k] = 0; + if (obj == cage && prop[bird] != 0) + drop(bird, loc); + if (obj == bird) + prop[bird] = 0; + drop(obj, loc); + return (2012); } -trdrop() /* 9020 */ +int +trdrop() /* 9020 */ { - if (toting(rod2)&&obj==rod&&!toting(rod)) obj=rod2; - if (!toting(obj)) return(2011); - if (obj==bird&&here(snake)) - { rspeak(30); - if (closed) return(19000); + if (toting(rod2) && obj == rod && !toting(rod)) + obj = rod2; + if (!toting(obj)) + return (2011); + if (obj == bird && here(snake)) { + rspeak(30); + if (closed) + return (19000); dstroy(snake); - prop[snake]=1; - return(dropper()); + prop[snake] = 1; + return (dropper()); } - if (obj==coins&&here(vend)) /* 9024 */ - { dstroy(coins); - drop(batter,loc); - pspeak(batter,0); - return(2012); + if (obj == coins && here(vend)) { /* 9024 */ + dstroy(coins); + drop(batter, loc); + pspeak(batter, 0); + return (2012); } - if (obj==bird&&at(dragon)&&prop[dragon]==0) /* 9025 */ - { rspeak(154); + if (obj == bird && at(dragon) && prop[dragon] == 0) { /* 9025 */ + rspeak(154); dstroy(bird); - prop[bird]=0; - if (place[snake]==plac[snake]) tally2--; - return(2012); - } - if (obj==bear&&at(troll)) /* 9026 */ - { rspeak(163); - move(troll,0); - move(troll+100,0); - move(troll2,plac[troll]); - move(troll2+100,fixd[troll]); + prop[bird] = 0; + if (place[snake] == plac[snake]) + tally2--; + return (2012); + } + if (obj == bear && at(troll)) { /* 9026 */ + rspeak(163); + move(troll, 0); + move(troll + 100, 0); + move(troll2, plac[troll]); + move(troll2 + 100, fixd[troll]); juggle(chasm); - prop[troll]=2; - return(dropper()); - } - if (obj!=vase||loc==plac[pillow]) /* 9027 */ - { rspeak(54); - return(dropper()); - } - prop[vase]=2; /* 9028 */ - if (at(pillow)) prop[vase]=0; - pspeak(vase,prop[vase]+1); - if (prop[vase]!=0) fixed[vase] = -1; - return(dropper()); + prop[troll] = 2; + return (dropper()); + } + if (obj != vase || loc == plac[pillow]) { /* 9027 */ + rspeak(54); + return (dropper()); + } + prop[vase] = 2; /* 9028 */ + if (at(pillow)) + prop[vase] = 0; + pspeak(vase, prop[vase] + 1); + if (prop[vase] != 0) + fixed[vase] = -1; + return (dropper()); } +int tropen() /* 9040 */ -{ if (obj==clam||obj==oyster) - { k=0; /* 9046 */ - if (obj==oyster) k=1; - spk=124+k; - if (toting(obj)) spk=120+k; - if (!toting(tridnt)) spk=122+k; - if (verb==lock) spk=61; - if (spk!=124) return(2011); +{ + if (obj == clam || obj == oyster) { + k = 0; /* 9046 */ + if (obj == oyster) + k = 1; + spk = 124 + k; + if (toting(obj)) + spk = 120 + k; + if (!toting(tridnt)) + spk = 122 + k; + if (verb == lock) + spk = 61; + if (spk != 124) + return (2011); dstroy(clam); - drop(oyster,loc); - drop(pearl,105); - return(2011); - } - if (obj==door) spk=111; - if (obj==door&&prop[door]==1) spk=54; - if (obj==cage) spk=32; - if (obj==keys) spk=55; - if (obj==grate||obj==chain) spk=31; - if (spk!=31||!here(keys)) return(2011); - if (obj==chain) - { if (verb==lock) - { spk=172; /* 9049: lock */ - if (prop[chain]!=0) spk=34; - if (loc!=plac[chain]) spk=173; - if (spk!=172) return(2011); - prop[chain]=2; - if (toting(chain)) drop(chain,loc); - fixed[chain]= -1; - return(2011); + drop(oyster, loc); + drop(pearl, 105); + return (2011); + } + if (obj == door) + spk = 111; + if (obj == door && prop[door] == 1) + spk = 54; + if (obj == cage) + spk = 32; + if (obj == keys) + spk = 55; + if (obj == grate || obj == chain) + spk = 31; + if (spk != 31||!here(keys)) + return (2011); + if (obj == chain) { + if (verb == lock) { + spk = 172; /* 9049: lock */ + if (prop[chain] != 0) + spk = 34; + if (loc != plac[chain]) + spk = 173; + if (spk != 172) + return (2011); + prop[chain] = 2; + if (toting(chain)) + drop(chain, loc); + fixed[chain] = -1; + return (2011); } - spk=171; - if (prop[bear]==0) spk=41; - if (prop[chain]==0) spk=37; - if (spk!=171) return(2011); - prop[chain]=0; - fixed[chain]=0; - if (prop[bear]!=3) prop[bear]=2; - fixed[bear]=2-prop[bear]; - return(2011); - } - if (closng) - { k=130; - if (!panic) clock2=15; - panic=TRUE; - return(2010); - } - k=34+prop[grate]; /* 9043 */ - prop[grate]=1; - if (verb==lock) prop[grate]=0; - k=k+2*prop[grate]; - return(2010); + spk = 171; + if (prop[bear] == 0) + spk = 41; + if (prop[chain] == 0) + spk = 37; + if (spk != 171) + return (2011); + prop[chain] = 0; + fixed[chain] = 0; + if (prop[bear] != 3) + prop[bear] = 2; + fixed[bear] = 2 - prop[bear]; + return (2011); + } + if (closng) { + k = 130; + if (!panic) + clock2 = 15; + panic = TRUE; + return (2010); + } + k = 34 + prop[grate]; /* 9043 */ + prop[grate] = 1; + if (verb == lock) + prop[grate] = 0; + k = k + 2 * prop[grate]; + return (2010); } +int trkill() /* 9120 */ -{ register int i; - for (i=1; i<=5; i++) - if (dloc[i]==loc&&dflag>=2) break; - if (i==6) i=0; - if (obj==0) /* 9122 */ - { if (i!=0) obj=dwarf; - if (here(snake)) obj=obj*100+snake; - if (at(dragon)&&prop[dragon]==0) obj=obj*100+dragon; - if (at(troll)) obj=obj*100+troll; - if (here(bear)&&prop[bear]==0) obj=obj*100+bear; - if (obj>100) return(8000); - if (obj==0) - { if (here(bird)&&verb!=throw) obj=bird; - if (here(clam)||here(oyster)) obj=100*obj+clam; - if (obj>100) return(8000); +{ + int i; + + for (i = 1; i <= 5; i++) + if (dloc[i] == loc && dflag >= 2) + break; + if (i == 6) + i = 0; + if (obj == 0) { /* 9122 */ + if (i != 0) + obj = dwarf; + if (here(snake)) + obj = obj * 100 + snake; + if (at(dragon) && prop[dragon] == 0) + obj = obj * 100 + dragon; + if (at(troll)) + obj = obj * 100 + troll; + if (here(bear) && prop[bear] == 0) + obj = obj * 100 + bear; + if (obj > 100) + return (8000); + if (obj == 0) { + if (here(bird) && verb != throw) + obj = bird; + if (here(clam) || here(oyster)) + obj = 100 * obj + clam; + if (obj > 100) + return (8000); } } - if (obj==bird) /* 9124 */ - { spk=137; - if (closed) return(2011); + if (obj == bird) { /* 9124 */ + spk = 137; + if (closed) + return (2011); dstroy(bird); - prop[bird]=0; - if (place[snake]==plac[snake]) tally2++; - spk=45; - } - if (obj==0) spk=44; /* 9125 */ - if (obj==clam||obj==oyster) spk=150; - if (obj==snake) spk=46; - if (obj==dwarf) spk=49; - if (obj==dwarf&&closed) return(19000); - if (obj==dragon) spk=147; - if (obj==troll) spk=157; - if (obj==bear) spk=165+(prop[bear]+1)/2; - if (obj!=dragon||prop[dragon]!=0) return(2011); + prop[bird] = 0; + if (place[snake] == plac[snake]) + tally2++; + spk = 45; + } + if (obj == 0) + spk = 44; /* 9125 */ + if (obj == clam || obj == oyster) + spk = 150; + if (obj == snake) + spk = 46; + if (obj == dwarf) + spk = 49; + if (obj == dwarf && closed) + return (19000); + if (obj == dragon) + spk = 147; + if (obj == troll) + spk = 157; + if (obj == bear) + spk = 165 + (prop[bear] + 1) / 2; + if (obj != dragon || prop[dragon] != 0) + return (2011); rspeak(49); - verb=0; - obj=0; - getin(&wd1,&wd2); - if (!weq(wd1,"y")&&!weq(wd1,"yes")) return(2608); - pspeak(dragon,1); - prop[dragon]=2; - prop[rug]=0; - k=(plac[dragon]+fixd[dragon])/2; - move(dragon+100,-1); - move(rug+100,0); - move(dragon,k); - move(rug,k); - for (obj=1; obj<=100; obj++) - if (place[obj]==plac[dragon]||place[obj]==fixd[dragon]) - move(obj,k); - loc=k; - k=null; - return(8); + verb = 0; + obj = 0; + getin(&wd1, &wd2); + if (!weq(wd1, "y") && !weq(wd1, "yes")) + return (2608); + pspeak(dragon, 1); + prop[dragon] = 2; + prop[rug] = 0; + k = (plac[dragon] + fixd[dragon]) / 2; + move(dragon + 100, -1); + move(rug + 100, 0); + move(dragon, k); + move(rug, k); + for (obj = 1; obj <= 100; obj++) + if (place[obj] == plac[dragon] || place[obj] == fixd[dragon]) + move(obj, k); + loc = k; + k = null; + return (8); } +int trtoss() /* 9170: throw */ -{ register int i; - if (toting(rod2)&&obj==rod&&!toting(rod)) obj=rod2; - if (!toting(obj)) return(2011); - if (obj>=50&&obj<=maxtrs&&at(troll)) - { spk=159; /* 9178 */ - drop(obj,0); - move(troll,0); - move(troll+100,0); - drop(troll2,plac[troll]); - drop(troll2+100,fixd[troll]); +{ + int i; + + if (toting(rod2) && obj == rod && !toting(rod)) + obj = rod2; + if (!toting(obj)) + return (2011); + if (obj >= 50 && obj <= maxtrs && at(troll)) { + spk = 159; /* 9178 */ + drop(obj, 0); + move(troll, 0); + move(troll + 100, 0); + drop(troll2, plac[troll]); + drop(troll2 + 100, fixd[troll]); juggle(chasm); - return(2011); - } - if (obj==food&&here(bear)) - { obj=bear; /* 9177 */ - return(9210); - } - if (obj!=axe) return(9020); - for (i=1; i<=5; i++) - { if (dloc[i]==loc) - { spk=48; /* 9172 */ - if (ran(3)==0||saved!= -1) - l9175: { rspeak(spk); - drop(axe,loc); - k=null; - return(8); + return (2011); + } + if (obj == food && here(bear)) { + obj = bear; /* 9177 */ + return (9210); + } + if (obj != axe) + return (9020); + for (i = 1; i <= 5; i++) { + if (dloc[i] == loc) { + spk = 48; /* 9172 */ + if (ran(3) == 0 || saved != -1) { +l9175: + rspeak(spk); + drop(axe, loc); + k = null; + return (8); } - dseen[i]=FALSE; - dloc[i]=0; - spk=47; + dseen[i] = FALSE; + dloc[i] = 0; + spk = 47; dkill++; - if (dkill==1) spk=149; + if (dkill == 1) + spk = 149; goto l9175; } } - spk=152; - if (at(dragon)&&prop[dragon]==0) + spk = 152; + if (at(dragon) && prop[dragon] == 0) goto l9175; - spk=158; - if (at(troll)) goto l9175; - if (here(bear)&&prop[bear]==0) - { spk=164; - drop(axe,loc); - fixed[axe]= -1; - prop[axe]=1; + spk = 158; + if (at(troll)) + goto l9175; + if (here(bear) && prop[bear] == 0) { + spk = 164; + drop(axe, loc); + fixed[axe] = -1; + prop[axe] = 1; juggle(bear); - return(2011); + return (2011); } - obj=0; - return(9120); + obj = 0; + return (9120); } +int trfeed() /* 9210 */ -{ if (obj==bird) - { spk=100; - return(2011); - } - if (obj==snake||obj==dragon||obj==troll) - { spk=102; - if (obj==dragon&&prop[dragon]!=0) spk=110; - if (obj==troll) spk=182; - if (obj!=snake||closed||!here(bird)) return(2011); - spk=101; +{ + if (obj == bird) { + spk = 100; + return (2011); + } + if (obj == snake || obj == dragon || obj == troll) { + spk = 102; + if (obj == dragon && prop[dragon] != 0) + spk = 110; + if (obj == troll) + spk = 182; + if (obj != snake || closed || !here(bird)) + return (2011); + spk = 101; dstroy(bird); - prop[bird]=0; + prop[bird] = 0; tally2++; - return(2011); + return (2011); } - if (obj==dwarf) - { if (!here(food)) return(2011); - spk=103; + if (obj == dwarf) { + if (!here(food)) + return (2011); + spk = 103; dflag++; - return(2011); + return (2011); } - if (obj==bear) - { if (prop[bear]==0) spk=102; - if (prop[bear]==3) spk=110; - if (!here(food)) return(2011); + if (obj == bear) { + if (prop[bear] == 0) + spk = 102; + if (prop[bear] == 3) + spk = 110; + if (!here(food)) + return (2011); dstroy(food); - prop[bear]=1; - fixed[axe]=0; - prop[axe]=0; - spk=168; - return(2011); - } - spk=14; - return(2011); + prop[bear] = 1; + fixed[axe] = 0; + prop[axe] = 0; + spk = 168; + return (2011); + } + spk = 14; + return (2011); } +int trfill() /* 9220 */ -{ if (obj==vase) - { spk=29; - if (liqloc(loc)==0) spk=144; - if (liqloc(loc)==0||!toting(vase)) return(2011); +{ + if (obj == vase) { + spk = 29; + if (liqloc(loc) == 0) + spk = 144; + if (liqloc(loc) == 0 || !toting(vase)) + return (2011); rspeak(145); - prop[vase]=2; - fixed[vase]= -1; - return(9020); /* advent/10 goes to 9024 */ - } - if (obj!=0&&obj!=bottle) return(2011); - if (obj==0&&!here(bottle)) return(8000); - spk=107; - if (liqloc(loc)==0) spk=106; - if (liq(0)!=0) spk=105; - if (spk!=107) return(2011); - prop[bottle]=((cond[loc]%4)/2)*2; - k=liq(0); - if (toting(bottle)) place[k]= -1; - if (k==oil) spk=108; - return(2011); + prop[vase] = 2; + fixed[vase] = -1; + return (9020); /* advent/10 goes to 9024 */ + } + if (obj != 0 && obj != bottle) + return (2011); + if (obj == 0 && !here(bottle)) + return (8000); + spk = 107; + if (liqloc(loc) == 0) + spk = 106; + if (liq() != 0) + spk = 105; + if (spk != 107) + return (2011); + prop[bottle] = ((cond[loc] % 4) / 2) * 2; + k = liq(); + if (toting(bottle)) + place[k] = -1; + if (k == oil) + spk = 108; + return (2011); } +int closing() /* 10000 */ -{ register int i; +{ + int i; - prop[grate]=prop[fissur]=0; - for (i=1; i<=6; i++) - { dseen[i]=FALSE; - dloc[i]=0; + prop[grate] = prop[fissur] = 0; + for (i = 1; i <= 6; i++) { + dseen[i] = FALSE; + dloc[i] = 0; } - move(troll,0); - move(troll+100,0); - move(troll2,plac[troll]); - move(troll2+100,fixd[troll]); + move(troll, 0); + move(troll + 100, 0); + move(troll2, plac[troll]); + move(troll2 + 100, fixd[troll]); juggle(chasm); - if(prop[bear]!=3) dstroy(bear); - prop[chain]=0; - fixed[chain]=0; - prop[axe]=0; - fixed[axe]=0; + if (prop[bear] != 3) + dstroy(bear); + prop[chain] = 0; + fixed[chain] = 0; + prop[axe] = 0; + fixed[axe] = 0; rspeak(129); clock1 = -1; - closng=TRUE; - return(19999); + closng = TRUE; + return (19999); } +int caveclose() /* 11000 */ -{ register int i; - prop[bottle]=put(bottle,115,1); - prop[plant]=put(plant,115,0); - prop[oyster]=put(oyster,115,0); - prop[lamp]=put(lamp,115,0); - prop[rod]=put(rod,115,0); - prop[dwarf]=put(dwarf,115,0); - loc=115; - oldloc=115; - newloc=115; - - put(grate,116,0); - prop[snake]=put(snake,116,1); - prop[bird]=put(bird,116,1); - prop[cage]=put(cage,116,0); - prop[rod2]=put(rod2,116,0); - prop[pillow]=put(pillow,116,0); - - prop[mirror]=put(mirror,115,0); - fixed[mirror]=116; - - for (i=1; i<=100; i++) - if (toting(i)) dstroy(i); +{ + int i; + + prop[bottle] = put(bottle, 115, 1); + prop[plant] = put(plant, 115, 0); + prop[oyster] = put(oyster, 115, 0); + prop[lamp] = put(lamp, 115, 0); + prop[rod] = put(rod, 115, 0); + prop[dwarf] = put(dwarf, 115, 0); + loc = 115; + oldloc = 115; + newloc = 115; + + put(grate, 116, 0); + prop[snake] = put(snake, 116, 1); + prop[bird] = put(bird, 116, 1); + prop[cage] = put(cage, 116, 0); + prop[rod2] = put(rod2, 116, 0); + prop[pillow] = put(pillow, 116, 0); + + prop[mirror] = put(mirror, 115, 0); + fixed[mirror] = 116; + + for (i = 1; i <= 100; i++) + if (toting(i)) + dstroy(i); rspeak(132); - closed=TRUE; - return(2); + closed = TRUE; + return (2); } diff --git a/games/adventure/vocab.c b/games/adventure/vocab.c index 404c258af69..6514104d2b3 100644 --- a/games/adventure/vocab.c +++ b/games/adventure/vocab.c @@ -1,3 +1,4 @@ +/* $OpenBSD: vocab.c,v 1.5 1998/08/31 02:29:46 pjanzen Exp $ */ /* $NetBSD: vocab.c,v 1.2 1995/03/21 12:05:13 cgd Exp $ */ /*- @@ -42,188 +43,191 @@ #if 0 static char sccsid[] = "@(#)vocab.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: vocab.c,v 1.2 1995/03/21 12:05:13 cgd Exp $"; +static char rcsid[] = "$OpenBSD: vocab.c,v 1.5 1998/08/31 02:29:46 pjanzen Exp $"; #endif #endif /* not lint */ /* Re-coding of advent in C: data structure routines */ +#include <stdio.h> #include <stdlib.h> #include "hdr.h" +#include "extern.h" +void dstroy(object) -int object; -{ move(object,0); + int object; +{ + move(object, 0); } +void juggle(object) -int object; -{ register int i,j; - - i=place[object]; - j=fixed[object]; - move(object,i); - move(object+100,j); + int object; +{ + int i, j; + + i = place[object]; + j = fixed[object]; + move(object, i); + move(object + 100, j); } -move(object,where) -int object,where; -{ register int from; +void +move(object, where) + int object, where; +{ + int from; - if (object<=100) - from=place[object]; + if (object <= 100) + from = place[object]; else - from=fixed[object-100]; - if (from>0 && from<=300) carry(object,from); - drop(object,where); + from = fixed[object - 100]; + if (from > 0 && from <= 300) + carry(object, from); + drop(object, where); } -put(object,where,pval) -int object,where,pval; -{ move(object,where); - return(-1-pval); +int +put(object, where, pval) + int object, where, pval; +{ + move(object, where); + return (-1 - pval); } -carry(object,where) -int object,where; -{ register int temp; - if (object<=100) - { if (place[object]== -1) return; +void +carry(object, where) + int object, where; +{ + int temp; + + if (object <= 100) { + if (place[object] == -1) + return; place[object] = -1; holdng++; } - if (atloc[where]==object) - { atloc[where]=linkx[object]; + if (atloc[where] == object) { + atloc[where] = linkx[object]; return; } - for (temp=atloc[where]; linkx[temp]!=object; temp=linkx[temp]); - linkx[temp]=linkx[object]; + for (temp = atloc[where]; linkx[temp] != object; temp = linkx[temp]) + ; + linkx[temp] = linkx[object]; } -drop(object,where) -int object,where; -{ if (object>100) fixed[object-100]=where; - else - { if (place[object]== -1) holdng--; - place[object]=where; +void +drop(object, where) + int object, where; +{ + if (object > 100) + fixed[object - 100] = where; + else { + if (place[object] == -1) + holdng--; + place[object] = where; } - if (where<=0) return; - linkx[object]=atloc[where]; - atloc[where]=object; + if (where <= 0) + return; + linkx[object] = atloc[where]; + atloc[where] = object; } -vocab(word,type,value) /* look up or store a word */ -char *word; -int type; /* -2 for store, -1 for user word, >=0 for canned lookup*/ -int value; /* used for storing only */ -{ register int adr; - register char *s,*t; - int hash, i; +int +vocab(word, type, value) /* look up or store a word */ + char *word; + int type; /* -2 for store, -1 for user word, >=0 for canned lookup*/ + int value; /* used for storing only */ +{ + int adr; + const char *s; + char *t; + int hash, i; struct hashtab *h; - for (hash=0,s=word,i=0; i<5 &&*s; i++) /* some kind of hash */ + for (hash = 0, s = word, i = 0; i < 5 && *s; i++) /* some kind of hash */ hash += *s++; /* add all chars in the word */ - hash = (hash*3719)&077777; /* pulled that one out of a hat */ + hash = (hash * 3719) & 077777; /* pulled that one out of a hat */ hash %= HTSIZE; /* put it into range of table */ - for(adr=hash;; adr++) /* look for entry in table */ - { if (adr==HTSIZE) adr=0; /* wrap around */ + for (adr = hash; ; adr++) { /* look for entry in table */ + if (adr == HTSIZE) + adr = 0; /* wrap around */ h = &voc[adr]; /* point at the entry */ - switch(type) - { case -2: /* fill in entry */ + switch (type) { + case -2: /* fill in entry */ if (h->val) /* already got an entry? */ goto exitloop2; - h->val=value; - h->atab=malloc(length(word)); - for (s=word,t=h->atab; *s;) + h->val = value; + h->atab = malloc(length(word)); + for (s = word, t = h->atab; *s;) *t++ = *s++ ^ '='; - *t=0^'='; - /* encrypt slightly to thwart core reader */ - /* printf("Stored \"%s\" (%d ch) as entry %d\n", */ + *t = 0 ^ '='; + /* encrypt slightly to thwart core reader */ + /* printf("Stored \"%s\" (%d ch) as entry %d\n", */ /* word, length(word), adr); */ - return(0); /* entry unused */ - case -1: /* looking up user word */ - if (h->val==0) return(-1); /* not found */ - for (s=word, t=h->atab;*t ^ '=';) + return (0); /* entry unused */ + case -1: /* looking up user word */ + if (h->val == 0) + return (-1); /* not found */ + for (s = word, t = h->atab; *t ^ '=';) if ((*s++ ^ '=') != *t++) goto exitloop2; - if ((*s ^ '=') != *t && s-word<5) goto exitloop2; + if ((*s ^ '=') != *t && s - word < 5) + goto exitloop2; /* the word matched o.k. */ - return(h->val); - default: /* looking up known word */ - if (h->val==0) - { printf("Unable to find %s in vocab\n",word); - exit(0); + return (h->val); + default: /* looking up known word */ + if (h->val == 0) { + printf("Unable to find %s in vocab\n", word); + exit(1); } - for (s=word, t=h->atab;*t ^ '=';) - if ((*s++ ^ '=') != *t++) goto exitloop2; + for (s = word, t = h->atab; *t ^ '=';) + if ((*s++ ^ '=') != *t++) + goto exitloop2; /* the word matched o.k. */ - if (h->val/1000 != type) continue; - return(h->val%1000); + if (h->val / 1000 != type) + continue; + return (h->val%1000); } - exitloop2: /* hashed entry does not match */ - if (adr+1==hash || (adr==HTSIZE && hash==0)) - { printf("Hash table overflow\n"); - exit(0); +exitloop2: /* hashed entry does not match */ + if (adr + 1 == hash || (adr == HTSIZE && hash == 0)) { + printf("Hash table overflow\n"); + exit(1); } } } - -copystr(w1,w2) /* copy one string to another */ -char *w1,*w2; -{ register char *s,*t; - for (s=w1,t=w2; *s;) - *t++ = *s++; - *t=0; -} - -weq(w1,w2) /* compare words */ -char *w1,*w2; /* w1 is user, w2 is system */ -{ register char *s,*t; - register int i; - s=w1; - t=w2; - for (i=0; i<5; i++) /* compare at most 5 chars */ - { if (*t==0 && *s==0) - return(TRUE); - if (*s++ != *t++) return(FALSE); - } - return(TRUE); -} - - -length(str) /* includes 0 at end */ -char *str; -{ register char *s; - register int n; - for (n=0,s=str; *s++;) n++; - return(n+1); -} - +void prht() /* print hash table */ -{ register int i,j,l; - char *c; +{ + int i, j, l; + char *c; struct hashtab *h; - for (i=0; i<HTSIZE/10+1; i++) - { printf("%4d",i*10); - for (j=0; j<10; j++) - { if (i*10+j>=HTSIZE) break; - h= &voc[i*10+j]; + + for (i = 0; i < HTSIZE / 10 + 1; i++) { + printf("%4d", i * 10); + for (j = 0; j < 10; j++) { + if (i * 10 + j >= HTSIZE) + break; + h = &voc[i * 10 + j]; putchar(' '); - if (h->val==0) - { printf("-----"); + if (h->val == 0) { + printf("-----"); continue; } - for (l=0, c=h->atab; l<5; l++) - if ((*c ^ '=')) putchar(*c++ ^ '='); - else putchar(' '); + for (l = 0, c = h->atab; l < 5; l++) + if ((*c ^ '=')) + putchar(*c++ ^ '='); + else + putchar(' '); } putchar('\n'); } diff --git a/games/adventure/wizard.c b/games/adventure/wizard.c index bffb10fc0ca..67ee0514753 100644 --- a/games/adventure/wizard.c +++ b/games/adventure/wizard.c @@ -1,3 +1,4 @@ +/* $OpenBSD: wizard.c,v 1.7 1998/08/31 02:29:47 pjanzen Exp $ */ /* $NetBSD: wizard.c,v 1.3 1995/04/24 12:21:41 cgd Exp $ */ /*- @@ -42,98 +43,114 @@ #if 0 static char sccsid[] = "@(#)wizard.c 8.1 (Berkeley) 6/2/93"; #else -static char rcsid[] = "$NetBSD: wizard.c,v 1.3 1995/04/24 12:21:41 cgd Exp $"; +static char rcsid[] = "$OpenBSD: wizard.c,v 1.7 1998/08/31 02:29:47 pjanzen Exp $"; #endif #endif /* not lint */ /* Re-coding of advent in C: privileged operations */ -# include "hdr.h" +#include <stdio.h> #include <string.h> +#include <stdlib.h> #include <time.h> +#include "hdr.h" +#include "extern.h" -datime(d,t) -int *d,*t; -{ struct tm *tptr; - time_t tvec; +#if 0 +void +datime(d, t) + int *d, *t; +{ + time_t tvec; + struct tm *tptr; time(&tvec); - tptr=localtime(&tvec); - *d=tptr->tm_yday+365*(tptr->tm_year-77); /* day since 1977 (mod leap) */ - *t=tptr->tm_hour*60+tptr->tm_min; /* and minutes since midnite */ -} /* pretty painless */ - + tptr = localtime(&tvec); + /* day since 1977 (mod leap) */ + *d = tptr->tm_yday + 365 * (tptr->tm_year - 77); + /* bug: this will overflow in the year 2066 AD */ + /* it will be attributed to Wm the C's millenial celebration */ + /* and minutes since midnite */ + *t = tptr->tm_hour * 60 + tptr->tm_min; +} /* pretty painless */ +#endif -char magic[6]; +char magic[6]; +void poof() { strcpy(magic, DECR(d,w,a,r,f)); latncy = 45; } -Start(n) -{ int d,t,delay; +int +Start() +{ + time_t t, delay; - datime(&d,&t); - delay=(d-saved)*1440+(t-savet); /* good for about a month */ + time(&t); + delay = (t - savet) / 60; /* Minutes */ + saved = -1; if (delay >= latncy) - { saved = -1; - return(FALSE); - } + return (FALSE); printf("This adventure was suspended a mere %d minute%s ago.", - delay, delay == 1? "" : "s"); - if (delay <= latncy/3) - { mspeak(2); + delay, delay == 1 ? "" : "s"); + if (delay <= latncy / 3) { + mspeak(2); exit(0); } mspeak(8); - if (!wizard()) - { mspeak(9); + if (!wizard()) { + mspeak(9); exit(0); } - saved = -1; - return(FALSE); + return (FALSE); } +int wizard() /* not as complex as advent/10 (for now) */ -{ register int wiz; - char *word,*x; - if (!yesm(16,0,7)) return(FALSE); +{ + char *word, *x; + + if (!yesm(16, 0, 7)) + return (FALSE); mspeak(17); - getin(&word,&x); - if (!weq(word,magic)) - { mspeak(20); - return(FALSE); + getin(&word, &x); + if (!weq(word, magic)) { + mspeak(20); + return (FALSE); } mspeak(19); - return(TRUE); + return (TRUE); } -ciao(cmdfile) -char *cmdfile; -{ register char *c; - register int outfd, size; - char fname[80], buf[512]; - extern unsigned filesize; +void +ciao() +{ + char *c; + char fname[80]; printf("What would you like to call the saved version?\n"); - for (c=fname;; c++) - if ((*c=getchar())=='\n' || *c == EOF) break; - *c=0; - if (save(fname) != 0) return; /* Save failed */ + for (c = fname;; c++) + if ((*c = getchar()) == '\n' || *c == EOF) + break; + *c = 0; + if (save(fname) != 0) + return; /* Save failed */ printf("To resume, say \"adventure %s\".\n", fname); printf("\"With these rooms I might now have been familiarly acquainted.\"\n"); exit(0); } +int ran(range) -int range; + int range; { - long rand(), i; + long i; - i = rand() % range; - return(i); + i = random() % range; + return (i); } |