X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=main.c;h=7a065b2fd91ca3dc4f955be85b93f893f99ca558;hp=881578def7c757011166db7608f75a7735a41e50;hb=28583348450b28bd4811d37fa5fe50bcbcfcfb12;hpb=7763e1aa223938cf51a1dcd1f49f220a3f9dcbea diff --git a/main.c b/main.c index 881578d..7a065b2 100644 --- a/main.c +++ b/main.c @@ -7,38 +7,40 @@ #include #include #include +#include +#include #include "main.h" - +#include "database.h" #include "misc.h" -long ABB[186], ATAB[331], ATLOC[186], BLKLIN = true, DFLAG, +long ABB[186], ATLOC[186], BLKLIN = true, DFLAG, DLOC[7], FIXED[101], HOLDNG, - KTAB[331], *LINES, LINK[201], LNLENG, LNPOSN, - PARMS[26], PLACE[101], PTEXT[101], RTEXT[278], - SETUP = 0, TABSIZ = 330; + LINK[201], LNLENG, LNPOSN, + PARMS[26], PLACE[101], + SETUP = 0; signed char rawbuf[LINESIZE], INLINE[LINESIZE+1], MAP1[129], MAP2[129]; -long ABBNUM, ACTSPK[36], AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD, BONUS, +long ABBNUM, AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD, BONUS, BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST, CHLOC, CHLOC2, - CLAM, CLOCK1, CLOCK2, CLOSED, CLOSNG, CLSHNT, CLSMAX = 12, CLSSES, - COINS, COND[186], CONDS, CTEXT[13], CVAL[13], DALTLC, DETAIL, + CLAM, CLOCK1, CLOCK2, CLOSED, CLOSNG, CLSHNT, + COINS, CONDS, DALTLC, DETAIL, DKILL, DOOR, DPRSSN, DRAGON, DSEEN[7], DTOTAL, DWARF, EGGS, - EMRALD, ENTER, ENTRNC, FIND, FISSUR, FIXD[101], FOOBAR, FOOD, - GRATE, HINT, HINTED[21], HINTLC[21], HINTS[21][5], HNTMAX, - HNTSIZ = 20, I, INVENT, IGO, IWEST, J, JADE, K, K2, KEY[186], KEYS, KK, - KNFLOC, KNIFE, KQ, L, LAMP, LIMIT, LINSIZ = 12500, LINUSE, LL, - LMWARN, LOC, LOCK, LOCSIZ = 185, LOCSND[186], LOOK, LTEXT[186], - MAGZIN, MAXDIE, MAXTRS, MESH = 123456789, + EMRALD, ENTER, ENTRNC, FIND, FISSUR, FOOBAR, FOOD, + GRATE, HINT, HINTED[21], HINTLC[21], + I, INVENT, IGO, IWEST, J, JADE, K, K2, KEYS, KK, + KNFLOC, KNIFE, KQ, L, LAMP, LIMIT, LL, + LMWARN, LOC, LOCK, LOOK, + MAGZIN, MAXDIE, MAXTRS, MESSAG, MIRROR, MXSCOR, - NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ, OBJSND[101], - OBJTXT[101], ODLOC[7], OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER, - PANIC, PEARL, PILLOW, PLAC[101], PLANT, PLANT2, PROP[101], PYRAM, - RESER, ROD, ROD2, RTXSIZ = 277, RUBY, RUG, SAPPH, SAVED, SAY, - SCORE, SECT, SIGN, SNAKE, SPK, STEPS, STEXT[186], STICK, - STREAM, TABNDX, TALLY, THRESH, THROW, TK[21], TRAVEL[886], TRIDNT, - TRNDEX, TRNLUZ, TRNSIZ = 5, TRNVAL[6], TRNVLS, TROLL, TROLL2, TRVS, - TRVSIZ = 885, TTEXT[6], TURNS, URN, V1, V2, VASE, VEND, VERB, - VOLCAN, VRBSIZ = 35, VRSION = 25, WATER, WD1, WD1X, WD2, WD2X, + NEWLOC, NOVICE, NUGGET, NUL, NUMDIE, OBJ, + ODLOC[7], OGRE, OIL, OLDLC2, OLDLOC, OLDOBJ, OYSTER, + PANIC, PEARL, PILLOW, PLANT, PLANT2, PROP[101], PYRAM, + RESER, ROD, ROD2, RUBY, RUG, SAPPH, SAVED, SAY, + SCORE, SECT, SIGN, SNAKE, SPK, STEPS, STICK, + STREAM, TALLY, THRESH, THROW, TK[21], TRIDNT, + TRNDEX, TRNLUZ, TROLL, TROLL2, + TURNS, URN, V1, V2, VASE, VEND, VERB, + VOLCAN, VRSION = 25, WATER, WD1, WD1X, WD2, WD2X, WZDARK = false, ZZWORD; FILE *logfp; bool oldstyle = false; @@ -48,6 +50,14 @@ extern void initialise(); extern void score(long); extern int action(FILE *, long); +void sig_handler(int signo) +{ + if (signo == SIGINT) + if (logfp != NULL) + fflush(logfp); + exit(0); +} + /* * MAIN PROGRAM */ @@ -75,6 +85,7 @@ int main(int argc, char *argv[]) { fprintf(stderr, "advent: can't open logfile %s for write\n", optarg); + signal(SIGINT, sig_handler); break; case 'o': oldstyle = true; @@ -104,12 +115,6 @@ int main(int argc, char *argv[]) { /* Read the database if we have not yet done so */ - LINES = (long *)calloc(LINSIZ+1,sizeof(long)); - if(!LINES){ - printf("Not enough memory!\n"); - exit(1); - } - MAP2[1] = 0; if(!SETUP)initialise(); if(SETUP > 0) goto L1; @@ -126,7 +131,7 @@ int main(int argc, char *argv[]) { L1: SETUP= -1; I=0; - ZZWORD=RNDVOC(3,0)+MESH*2; + ZZWORD=RNDVOC(3,0); NOVICE=YES(stdin, 65,1,0); NEWLOC=1; LOC=1; @@ -150,6 +155,8 @@ static bool fallback_handler(signed char *buf) if (sscanf(buf, "seed %ld", &sv) == 1) { set_seed(sv); printf("Seed set to %ld\n", sv); + // here we reconfigure any global game state that uses random numbers + ZZWORD=RNDVOC(3,0); return true; } return false; @@ -914,4 +921,5 @@ L12400: LIMIT= -1; L18999: RSPEAK(SPK); L19000: RSPEAK(136); score(0); + return true; }