Re-enables pasting multiline sequences to the > prompt (for making checkfiles).
-l:: Log commands to specified file.
-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.
extern const char ascii_to_advent[];
extern const char advent_to_ascii[];
extern FILE *logfp;
extern const char ascii_to_advent[];
extern const char advent_to_ascii[];
extern FILE *logfp;
+extern bool oldstyle, editline, prompt;
extern lcg_state lcgstate;
/* b is not needed for POSIX but harmless */
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.
/* 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_TERMINATE 2
#define GO_MOVE 8
#define GO_CLEAROBJ 2012
#define GO_CHECKHINT 2600
#define GO_CHECKFOO 2607
#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_DIRECTION 2620
#define GO_LOOKUP 2630
#define GO_WORD2 2800
+#define GO_SPECIALS 1900
-#define GO_DWARFWAKE 19000
+#define GO_DWARFWAKE 19000
/* hack to ignore GCC Unused Result */
#define IGNORE(r) do{if (r){}}while(0)
/* 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.)
*
* 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>
*/
#include <stdlib.h>
#include <stdio.h>
FILE *logfp;
bool oldstyle = false;
FILE *logfp;
bool oldstyle = false;
+bool editline = true;
+bool prompt = true;
lcg_state lcgstate;
extern void initialise();
lcg_state lcgstate;
extern void initialise();
- while ((ch = getopt(argc, argv, "l:o")) != EOF) {
+ while ((ch = getopt(argc, argv, "l:os")) != EOF) {
logfp = fopen(optarg, "w");
if (logfp == NULL)
fprintf(stderr,
logfp = fopen(optarg, "w");
if (logfp == NULL)
fprintf(stderr,
break;
case 'o':
oldstyle = true;
break;
case 'o':
oldstyle = true;
+ editline = prompt = false;
+ break;
+ case 's':
+ editline = false;
* and is not changed thereafter unless the routines on this page choose
* to do so. */
* and is not changed thereafter unless the routines on this page choose
* to do so. */
- if (!oldstyle && !isatty(1))
fputs("> ", stdout);
do {
fputs("> ", stdout);
do {
IGNORE(fgets(rawbuf,sizeof(rawbuf)-1,fp));
eof = (feof(fp));
} else {
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);
eof = (cp == NULL);
if (!eof) {
strncpy(rawbuf, cp, sizeof(rawbuf)-1);