From 66c22301edf3126e7525e1c52efdde8fb69e0257 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Mon, 12 Jun 2017 16:51:35 -0400 Subject: [PATCH] Add -s option. Re-enables pasting multiline sequences to the > prompt (for making checkfiles). --- advent.adoc | 4 +++- advent.h | 7 +++++-- main.c | 21 ++++++++++++++------- misc.c | 6 +++--- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/advent.adoc b/advent.adoc index 44aa07c..c1075e6 100644 --- a/advent.adoc +++ b/advent.adoc @@ -37,7 +37,9 @@ There have been no gameplay changes. -l:: Log commands to specified file. --o:: Old-style. Restores original interface, no prompt or command history. +-s:: Suppress Emacs-like line editing and command history. + +-o:: Old-style. Restores original interface, no prompt or line editing. == BUGS == diff --git a/advent.h b/advent.h index 6e3c56b..e75a1cd 100644 --- a/advent.h +++ b/advent.h @@ -80,7 +80,7 @@ extern char rawbuf[LINESIZE], INLINE[LINESIZE+1]; extern const char ascii_to_advent[]; extern const char advent_to_ascii[]; extern FILE *logfp; -extern bool oldstyle; +extern bool oldstyle, editline, prompt; extern lcg_state lcgstate; /* b is not needed for POSIX but harmless */ @@ -174,6 +174,7 @@ enum speechpart {unknown, intransitive, transitive}; /* Phase codes for action returns. * These were at one time FORTRAN line numbers. + * The values don't matter, but perturb their order at your peril. */ #define GO_TERMINATE 2 #define GO_MOVE 8 @@ -181,12 +182,14 @@ enum speechpart {unknown, intransitive, transitive}; #define GO_CLEAROBJ 2012 #define GO_CHECKHINT 2600 #define GO_CHECKFOO 2607 +#define GO_CLOSEJUMP 2610 #define GO_DIRECTION 2620 #define GO_LOOKUP 2630 #define GO_WORD2 2800 +#define GO_SPECIALS 1900 #define GO_UNKNOWN 8000 -#define GO_DWARFWAKE 19000 #define GO_ACTION 40000 +#define GO_DWARFWAKE 19000 /* hack to ignore GCC Unused Result */ #define IGNORE(r) do{if (r){}}while(0) diff --git a/main.c b/main.c index 920bea0..a74aa6b 100644 --- a/main.c +++ b/main.c @@ -5,12 +5,13 @@ * is a result of running the original Fortran IV source through a * home-brew Fortran-to-C converter.) * - * Now that the code has been restructured into idiomatic C, the following - * is more appropriate: + * Now that the code has been restructured into something much closer + * to idiomatic C, the following is more appropriate: * - * ESR apologizes for the remaing gotos (now confined to two functions in this - * file - they used to be *everywhere*), and the offensive globals. Applying - * the Structured Program Theorem can be hard. + * ESR apologizes for the remaing gotos (now confined to two functions + * in this file - there used to be hundreds of them, *everywhere*), + * and the offensive globals. Applying the Structured Program Theorem + * can be hard. */ #include #include @@ -43,6 +44,8 @@ long WD1, WD1X, WD2, WD2X; FILE *logfp; bool oldstyle = false; +bool editline = true; +bool prompt = true; lcg_state lcgstate; extern void initialise(); @@ -77,9 +80,9 @@ int main(int argc, char *argv[]) /* Options. */ - while ((ch = getopt(argc, argv, "l:o")) != EOF) { + while ((ch = getopt(argc, argv, "l:os")) != EOF) { switch (ch) { -case 'l': + case 'l': logfp = fopen(optarg, "w"); if (logfp == NULL) fprintf(stderr, @@ -89,6 +92,10 @@ case 'l': break; case 'o': oldstyle = true; + editline = prompt = false; + break; + case 's': + editline = false; break; } } diff --git a/misc.c b/misc.c index dde0063..e6f17ab 100644 --- a/misc.c +++ b/misc.c @@ -630,14 +630,14 @@ bool MAPLIN(FILE *fp) * and is not changed thereafter unless the routines on this page choose * to do so. */ - if (!oldstyle && !isatty(1)) + if (prompt) fputs("> ", stdout); do { - if (oldstyle) { + if (!editline) { IGNORE(fgets(rawbuf,sizeof(rawbuf)-1,fp)); eof = (feof(fp)); } else { - char *cp = linenoise("> "); + char *cp = linenoise(prompt ? "> ": ""); eof = (cp == NULL); if (!eof) { strncpy(rawbuf, cp, sizeof(rawbuf)-1); -- 2.31.1