From 79ef3e38c286e1d3a11655174ae30caf7e771ca1 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 25 May 2017 18:21:38 -0400 Subject: [PATCH] Implement fallback handler that looks at the raw command buffer. With database cinpilation not broken this time... --- main.c | 11 ++++++++++- main.h | 2 +- misc.c | 8 +++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/main.c b/main.c index ba7df1a..430f763 100644 --- a/main.c +++ b/main.c @@ -16,7 +16,7 @@ long ABB[186], ATAB[331], ATLOC[186], BLKLIN = true, DFLAG, 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 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, @@ -139,6 +139,13 @@ L1: SETUP= -1; score(1); } +static bool fallback_handler(signed char *buf) +/* fallback handler for commands not handled by FORTRANish parser */ +{ + printf("Fallback handler sees: %s\n", buf); + return false; +} + static bool do_command(FILE *cmdin) { /* Can't leave cave once it's closing (except by main office). */ @@ -451,6 +458,8 @@ L2800: WD1=WD2; /* Gee, I don't understand. */ L3000: SETPRM(1,WD1,WD1X); + if (fallback_handler(rawbuf)) + return true; RSPEAK(254); goto L2600; diff --git a/main.h b/main.h index a71b9e3..184acee 100644 --- a/main.h +++ b/main.h @@ -10,7 +10,7 @@ typedef struct lcg_state extern long ABB[], ATAB[], ATLOC[], BLKLIN, DFLAG, DLOC[], FIXED[], HOLDNG, KTAB[], *LINES, LINK[], LNLENG, LNPOSN, PARMS[], PLACE[], PTEXT[], RTEXT[], TABSIZ; -extern signed char INLINE[LINESIZE+1], MAP1[], MAP2[]; +extern signed char rawbuf[LINESIZE], INLINE[LINESIZE+1], MAP1[], MAP2[]; extern FILE *logfp; extern bool oldstyle; extern lcg_state lcgstate; diff --git a/misc.c b/misc.c index 4d0a89d..8ea3db4 100644 --- a/misc.c +++ b/misc.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "main.h" #include "share.h" /* for SETUP */ #include "misc.h" @@ -887,7 +888,7 @@ long I, VAL; if (!oldstyle && SETUP && OPENED == stdin) fputs("> ", stdout); do { - IGNORE(fgets(INLINE+1,sizeof(INLINE)-1,OPENED)); + IGNORE(fgets(rawbuf,sizeof(INLINE)-1,OPENED)); } while (!feof(OPENED) && INLINE[1] == '#'); if (feof(OPENED)) { @@ -895,9 +896,10 @@ long I, VAL; fclose(logfp); } else { if (logfp && OPENED == stdin) - IGNORE(fputs(INLINE+1, logfp)); + IGNORE(fputs(rawbuf, logfp)); else if (!isatty(0)) - IGNORE(fputs(INLINE+1, stdout)); + IGNORE(fputs(rawbuf, stdout)); + strcpy(INLINE+1, rawbuf); LNLENG=0; for (I=1; I<=sizeof(INLINE) && INLINE[I]!=0; I++) { VAL=INLINE[I]+1; -- 2.31.1