X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=main.c;h=a6fea59070fffdc6d5e3cc6ec759862f3b61ae46;hb=refs%2Fmerge-requests%2F93%2Fhead;hp=ac6382564be274e82127faece25e63047e718eb3;hpb=adbbd1df2589038da674edbcaf40c0dc585d4079;p=open-adventure.git diff --git a/main.c b/main.c index ac63825..a6fea59 100644 --- a/main.c +++ b/main.c @@ -43,7 +43,7 @@ long AMBER, AXE, BACK, BATTER, BEAR, BIRD, BLOOD, URN, VASE, VEND, VOLCAN, WATER; long WD1, WD1X, WD2, WD2X; -FILE *logfp; +FILE *logfp = NULL, *rfp = NULL; bool oldstyle = false; bool editline = true; bool prompt = true; @@ -53,9 +53,10 @@ extern int action(FILE *, long, long, long); void sig_handler(int signo) { - if (signo == SIGINT) + if (signo == SIGINT){ if (logfp != NULL) fflush(logfp); + } exit(0); } @@ -79,7 +80,7 @@ int main(int argc, char *argv[]) /* Options. */ - while ((ch = getopt(argc, argv, "l:os")) != EOF) { + while ((ch = getopt(argc, argv, "l:or:s")) != EOF) { switch (ch) { case 'l': logfp = fopen(optarg, "w"); @@ -93,6 +94,14 @@ int main(int argc, char *argv[]) oldstyle = true; editline = prompt = false; break; + case 'r': + rfp = fopen(optarg, "r"); + if (rfp == NULL) + fprintf(stderr, + "advent: can't open save file %s for read\n", + optarg); + signal(SIGINT, sig_handler); + break; case 's': editline = false; break; @@ -125,11 +134,15 @@ int main(int argc, char *argv[]) /* Start-up, dwarf stuff */ game.zzword=RNDVOC(3,0); - game.novice=YES(stdin, WELCOME_YOU,CAVE_NEARBY,ARB_0); game.newloc = LOC_START; game.loc = LOC_START; game.limit=330; - if (game.novice)game.limit=1000; + if (!rfp){ + game.novice=YES(stdin, WELCOME_YOU,CAVE_NEARBY,NO_MESSAGE); + if (game.novice)game.limit=1000; + } else { + restore(rfp); + } if (logfp) fprintf(logfp, "seed %ld\n", seedval); @@ -243,7 +256,7 @@ static void checkhints(FILE *cmdin) /* Fall through to hint display */ game.hintlc[hint]=0; - if (!YES(cmdin,HINTS[hint][3],ARB_0,OK_MAN)) + if (!YES(cmdin,HINTS[hint][3],NO_MESSAGE,OK_MAN)) return; SETPRM(1,HINTS[hint][2],HINTS[hint][2]); RSPEAK(HINT_COST); @@ -475,14 +488,13 @@ static void croak(FILE *cmdin) * death and exit. */ RSPEAK(DEATH_CLOSING); score(endgame); - } else { - /* FIXME: Arithmetic on message numbers */ - if (!YES(cmdin,WATCH_IT+game.numdie*2,WHICH_WAY+game.numdie*2,OK_MAN)) - score(endgame); - if (game.numdie == MAXDIE) + + } + /* FIXME: Arithmetic on message numbers */ + else if (game.numdie == MAXDIE || !YES(cmdin,WATCH_IT+game.numdie*2,WHICH_WAY+game.numdie*2,OK_MAN)) score(endgame); - game.place[WATER] = NOWHERE; - game.place[OIL] = NOWHERE; + else { + game.place[WATER] = game.place[OIL] = NOWHERE; if (TOTING(LAMP)) game.prop[LAMP]=0; for (int j=1; j<=NOBJECTS; j++) {