#include <stdio.h>
#include <stdbool.h>
#include <getopt.h>
-#include <string.h>
#include "main.h"
#include "misc.h"
KTAB[331], *LINES, LINK[201], LNLENG, LNPOSN,
PARMS[26], PLACE[101], PTEXT[101], RTEXT[278],
SETUP = 0, TABSIZ = 330;
-signed char INLINE[LINESIZE+1], MAP1[129], MAP2[129];
-signed char raw_input[LINESIZE+1];
+signed char rawbuf[LINESIZE], INLINE[LINESIZE+1], MAP1[129], MAP2[129];
long ABBNUM, ACTSPK[36], AMBER, ATTACK, AXE, BACK, BATTER, BEAR, BIRD, BLOOD, BONUS,
BOTTLE, CAGE, CAVE, CAVITY, CHAIN, CHASM, CHEST, CHLOC, CHLOC2,
int main(int argc, char *argv[]) {
int ch;
- time_t starttime = time(NULL);
/* Adventure (rev 2: 20 treasures) */
lcgstate.a = 1093;
lcgstate.c = 221587;
lcgstate.m = 1048576;
- set_seed((long)starttime);
+ long seedval = (long)time(NULL);
+ set_seed(seedval);
/* Read the database if we have not yet done so */
if(NOVICE)LIMIT=1000;
if (logfp)
- fprintf(logfp, "seed %ld\n", starttime);
+ fprintf(logfp, "seed %ld\n", seedval);
+
for (;;) {
if (!do_command(stdin))
break;
score(1);
}
+static bool fallback_handler(signed char *buf)
+/* fallback handler for commands not handled by FORTRANish parser */
+{
+ long sv;
+ if (sscanf(buf, "seed %ld", &sv) == 1) {
+ set_seed(sv);
+ printf("Seed set to %ld\n", sv);
+ return true;
+ }
+ return false;
+}
+
static bool do_command(FILE *cmdin) {
/* Can't leave cave once it's closing (except by main office). */
-L2: if(!OUTSID(NEWLOC) || NEWLOC == 0 || !CLOSNG) goto L71;
+ if(!OUTSID(NEWLOC) || NEWLOC == 0 || !CLOSNG) goto L71;
RSPEAK(130);
NEWLOC=LOC;
if(!PANIC)CLOCK2=15;
/* Gee, I don't understand. */
L3000: SETPRM(1,WD1,WD1X);
- /* This is a kludge. The command parser we inherited from the base 2.5
- * barfs on numeric tokens. It will fall through to here when it sees
- * seed NNNN. Instead of barfing, go straight to the action processor
- * where it will examine the raw input. This will fo away when we get
- * rid of the obfuscated FORTRANoid input processing.
- */
- if (strncmp(raw_input, "seed", 4) == 0) {
- I=4090; K=34;
- goto Laction;
- } else {
- RSPEAK(254);
- goto L2600;
- }
+ if (fallback_handler(rawbuf))
+ return true;
+ RSPEAK(254);
+ goto L2600;
/* Verb and object analysis moved to separate module. */