-line *fendcore; /* First address in line pointer space */
-char file[FNSIZE]; /* Working file name */
-char genbuf[LBSIZE]; /* Working buffer when manipulating linebuf */
-bool hush; /* Command line option - was given, hush up! */
-char *globp; /* (Untyped) input string to command mode */
-bool holdcm; /* Don't cursor address */
-bool inappend; /* in ex command append mode */
-bool inglobal; /* Inside g//... or v//... */
-char *initev; /* Initial : escape for visual */
-bool inopen; /* Inside open or visual */
-char *input; /* Current position in cmd line input buffer */
-bool intty; /* Input is a tty */
-short io; /* General i/o unit (auto-closed on error!) */
-short lastc; /* Last character ret'd from cmd input */
-bool laste; /* Last command was an "e" (or "rec") */
-char lastmac; /* Last macro called for ** */
-char lasttag[TAGSIZE]; /* Last argument to a tag command */
-char *linebp; /* Used in substituting in \n */
-char linebuf[LBSIZE]; /* The primary line buffer */
-bool listf; /* Command should run in list mode */
-char *loc1; /* Where re began to match (in linebuf) */
-char *loc2; /* First char after re match (") */
-line names['z'-'a'+2]; /* Mark registers a-z,' */
-int notecnt; /* Count for notify (to visual from cmd) */
-bool numberf; /* Command should run in number mode */
-char obuf[BUFSIZ]; /* Buffer for tty output */
-short oprompt; /* Saved during source */
-short ospeed; /* Output speed (from gtty) */
-int otchng; /* Backup tchng to find changes in macros */
-short peekc; /* Peek ahead character (cmd mode input) */
-char *pkill[2]; /* Trim for put with ragged (LISP) delete */
-bool pfast; /* Have stty -nl'ed to go faster */
-int pid; /* Process id of child */
-int ppid; /* Process id of parent (e.g. main ex proc) */
-jmp_buf resetlab; /* For error throws to top level (cmd mode) */
-int rpid; /* Pid returned from wait() */
-bool ruptible; /* Interruptible is normal state */
-bool seenprompt; /* 1 if have gotten user input */
-bool shudclob; /* Have a prompt to clobber (e.g. on ^D) */
-int status; /* Status returned from wait() */
-int tchng; /* If nonzero, then [Modified] */
-short tfile; /* Temporary file unit */
-bool vcatch; /* Want to catch an error (open/visual) */
-jmp_buf vreslab; /* For error throws to a visual catch */
-bool writing; /* 1 if in middle of a file write */
-int xchng; /* Suppresses multiple "No writes" in !cmd */
+extern line *fendcore; /* First address in line pointer space */
+extern char file[FNSIZE]; /* Working file name */
+extern char genbuf[LBSIZE]; /* Working buffer when manipulating linebuf */
+extern bool hush; /* Command line option - was given, hush up! */
+extern char *globp; /* (Untyped) input string to command mode */
+extern bool holdcm; /* Don't cursor address */
+extern bool inappend; /* in ex command append mode */
+extern bool inglobal; /* Inside g//... or v//... */
+extern char *initev; /* Initial : escape for visual */
+extern bool inopen; /* Inside open or visual */
+extern char *input; /* Current position in cmd line input buffer */
+extern bool intty; /* Input is a tty */
+extern short io; /* General i/o unit (auto-closed on error!) */
+extern short lastc; /* Last character ret'd from cmd input */
+extern bool laste; /* Last command was an "e" (or "rec") */
+extern char lastmac; /* Last macro called for ** */
+extern char lasttag[TAGSIZE]; /* Last argument to a tag command */
+extern char *linebp; /* Used in substituting in \n */
+extern char linebuf[LBSIZE]; /* The primary line buffer */
+extern bool listf; /* Command should run in list mode */
+extern char *loc1; /* Where re began to match (in linebuf) */
+extern char *loc2; /* First char after re match (") */
+extern line names['z'-'a'+2]; /* Mark registers a-z,' */
+extern int notecnt; /* Count for notify (to visual from cmd) */
+extern bool numberf; /* Command should run in number mode */
+extern char obuf[BUFSIZ]; /* Buffer for tty output */
+extern short oprompt; /* Saved during source */
+extern short ospeed; /* Output speed (from gtty) */
+extern int otchng; /* Backup tchng to find changes in macros */
+extern short peekc; /* Peek ahead character (cmd mode input) */
+extern char *pkill[2]; /* Trim for put with ragged (LISP) delete */
+extern bool pfast; /* Have stty -nl'ed to go faster */
+extern int pid; /* Process id of child */
+extern int ppid; /* Process id of parent (e.g. main ex proc) */
+extern jmp_buf resetlab; /* For error throws to top level (cmd mode) */
+extern int rpid; /* Pid returned from wait() */
+extern bool ruptible; /* Interruptible is normal state */
+extern bool seenprompt; /* 1 if have gotten user input */
+extern bool shudclob; /* Have a prompt to clobber (e.g. on ^D) */
+extern int status; /* Status returned from wait() */
+extern int tchng; /* If nonzero, then [Modified] */
+extern short tfile; /* Temporary file unit */
+extern bool vcatch; /* Want to catch an error (open/visual) */
+extern jmp_buf vreslab; /* For error throws to a visual catch */
+extern bool writing; /* 1 if in middle of a file write */
+extern int xchng; /* Suppresses multiple "No writes" in !cmd */