Re-enables pasting multiline sequences to the > prompt (for making checkfiles).
-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 ==
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 */
/* 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
#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)
* 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 <stdlib.h>
#include <stdio.h>
FILE *logfp;
bool oldstyle = false;
+bool editline = true;
+bool prompt = true;
lcg_state lcgstate;
extern void initialise();
/* 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,
break;
case 'o':
oldstyle = true;
+ editline = prompt = false;
+ break;
+ case 's':
+ editline = false;
break;
}
}
* 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);