aboutsummaryrefslogtreecommitdiff
path: root/editors/uemacs
diff options
context:
space:
mode:
authorThomas Gellekum <tg@FreeBSD.org>1998-03-25 14:15:10 +0000
committerThomas Gellekum <tg@FreeBSD.org>1998-03-25 14:15:10 +0000
commit3f7830ce4f7cda5c809a7843647d87bb86e3ef2a (patch)
treefd1c0d29495ab6aa79ecd142c324e9d46d6f062d /editors/uemacs
parentf2782965a483dee2fdf21f61f2c2a600c86172ca (diff)
downloadports-3f7830ce4f7cda5c809a7843647d87bb86e3ef2a.tar.gz
ports-3f7830ce4f7cda5c809a7843647d87bb86e3ef2a.zip
Upgrade to 4.0. Split patches into one patch for each patched file.
Notes
Notes: svn path=/head/; revision=10314
Diffstat (limited to 'editors/uemacs')
-rw-r--r--editors/uemacs/Makefile14
-rw-r--r--editors/uemacs/distinfo2
-rw-r--r--editors/uemacs/files/patch-aa600
-rw-r--r--editors/uemacs/files/patch-ab2487
-rw-r--r--editors/uemacs/files/patch-ac25
-rw-r--r--editors/uemacs/files/patch-ad20
-rw-r--r--editors/uemacs/files/patch-ae12
-rw-r--r--editors/uemacs/files/patch-af13
-rw-r--r--editors/uemacs/pkg-plist40
9 files changed, 1364 insertions, 1849 deletions
diff --git a/editors/uemacs/Makefile b/editors/uemacs/Makefile
index b69cbc00e66a..f82c42288a60 100644
--- a/editors/uemacs/Makefile
+++ b/editors/uemacs/Makefile
@@ -1,24 +1,24 @@
# New ports collection makefile for: MicroEmacs
-# Version required: 3.12
+# Version required: 4.0
# Date created: 16 Jan 1995
# Whom: Thomas Gellekum <tg@FreeBSD.org>
#
-# $Id: Makefile,v 1.9 1996/11/11 05:07:20 obrien Exp $
+# $Id: Makefile,v 1.10 1997/08/29 11:33:09 tg Exp $
#
DISTNAME= uemacs
-PKGNAME= uemacs-3.12
+PKGNAME= uemacs-4.0
CATEGORIES= editors
-MASTER_SITES= ftp://midas.mgmt.purdue.edu/dist/uemacs312/ \
- ftp://ftp.th-darmstadt.de/pub/editors/MicroEMACS/uemacs312/
-DISTFILES= ue312dev.zip
+MASTER_SITES= ftp://aquest.com/pub/uemacs400/disk2/ \
+ ftp://informatik.hu-berlin.de/pub/pc/msdos/editors/ \
+ ftp://ftp.biomath.jussieu.fr/pub/editors/memacs400/disk2/
+DISTFILES= ue400dev.zip
MAINTAINER= ports@freebsd.org
BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
NO_WRKSUBDIR= yes
-PATCH_STRIP= -p1
EXTRACT_CMD= unzip
EXTRACT_BEFORE_ARGS= -Laq
EXTRACT_AFTER_ARGS= -d ${WRKDIR}
diff --git a/editors/uemacs/distinfo b/editors/uemacs/distinfo
index b72847db3916..feba10676791 100644
--- a/editors/uemacs/distinfo
+++ b/editors/uemacs/distinfo
@@ -1 +1 @@
-MD5 (ue312dev.zip) = 508885458b0e6fbe7f663e127420c100
+MD5 (ue400dev.zip) = a7903b48bd27e67f6e82aee328804ab1
diff --git a/editors/uemacs/files/patch-aa b/editors/uemacs/files/patch-aa
index 0aae012dccaa..011756c6577a 100644
--- a/editors/uemacs/files/patch-aa
+++ b/editors/uemacs/files/patch-aa
@@ -1,585 +1,15 @@
-diff -crN --exclude=*freebsd* ue312.orig/Makefile ue312/Makefile
-*** ue312.orig/Makefile Thu Jan 1 01:00:00 1970
---- ue312/Makefile Sat Jan 14 12:14:26 1995
-***************
-*** 0 ****
---- 1,12 ----
-+ #
-+ # simple makefile for uemacs
-+ #
-+
-+ all:
-+ (cd freebsd; make emacs)
-+
-+ install: all
-+ install -c -s freebsd/emacs ${PREFIX}/bin/uemacs
-+ mkdir -p ${PREFIX}/lib/uemacs
-+ install -c -m 644 -o bin -g bin cmd/* ${PREFIX}/lib/uemacs
-+ mv ${PREFIX}/lib/uemacs/emacs.rc ${PREFIX}/lib/uemacs/.emacsrc
-diff -crN --exclude=*freebsd* ue312.orig/h/epath.h ue312/h/epath.h
-*** ue312.orig/h/epath.h Tue Mar 16 15:13:46 1993
---- ue312/h/epath.h Sat Jan 14 11:26:35 1995
-***************
-*** 68,74 ****
- {
- ".emacsrc",
- "emacs.hlp",
-! "/usr/local/",
- "/usr/lib/",
- ""
- };
---- 68,74 ----
- {
- ".emacsrc",
- "emacs.hlp",
-! "/usr/local/lib/uemacs/",
- "/usr/lib/",
- ""
- };
-diff -crN --exclude=*freebsd* ue312.orig/src/bind.c ue312/src/bind.c
-*** ue312.orig/src/bind.c Thu Apr 22 21:20:54 1993
---- ue312/src/bind.c Sat Jan 14 12:03:55 1995
-***************
-*** 619,624 ****
---- 619,625 ----
- register char *sp; /* pointer into path spec */
- register int i; /* index */
- static char fspec[NFILEN]; /* full path spec to search */
-+ char patha[NFILEN] = "";
- char *getenv();
-
- /* if we have an absolute path.. check only there! */
-***************
-*** 675,683 ****
- #if OS2
- path = getenv("DPATH");
- #else
-! path = getenv("PATH");
- #endif
- #endif
- if (path != NULL)
- while (*path) {
-
---- 676,686 ----
- #if OS2
- path = getenv("DPATH");
- #else
-! strcat(patha, getenv("PATH"));
-! strcat(patha, ":/usr/local/lib/uemacs");
- #endif
- #endif
-+ path = &patha[0];
- if (path != NULL)
- while (*path) {
-
-diff -crN --exclude=*freebsd* ue312.orig/src/line.c ue312/src/line.c
-*** ue312.orig/src/line.c Mon Dec 21 14:08:18 1992
---- ue312/src/line.c Fri Jan 13 19:05:04 1995
-***************
-*** 668,674 ****
- register int size; /* length of line to return */
- register char *sp; /* string pointer into line */
- register char *dp; /* string pointer into returned line */
-! char rline[NSTRING]; /* line to return */
-
- /* find the contents of the current line and its length */
- lp = curwp->w_dotp;
---- 668,674 ----
- register int size; /* length of line to return */
- register char *sp; /* string pointer into line */
- register char *dp; /* string pointer into returned line */
-! static char rline[NSTRING]; /* line to return */
-
- /* find the contents of the current line and its length */
- lp = curwp->w_dotp;
-diff -crN --exclude=*freebsd* ue312.orig/src/lock.c ue312/src/lock.c
-*** ue312.orig/src/lock.c Wed Apr 21 10:22:40 1993
---- ue312/src/lock.c Fri Jan 13 19:09:11 1995
-***************
-*** 10,19 ****
---- 10,26 ----
-
- #if FILOCK
-
-+ #if BSD
-+ #undef BSD
-+ #include <sys/param.h>
-+ #endif
-+
- #if BSD || WMCS || SUN || XENIX || HPUX8 || HPUX9 || AVIION || USG || AUX
- #include <sys/errno.h>
-+ #if !(defined(BSD) && (BSD >= 199103))
- extern int sys_nerr; /* number of system error messages defined */
- extern char *sys_errlist[]; /* list of message texts */
-+ #endif
- #endif
-
- #if MSC
-diff -crN --exclude=*freebsd* ue312.orig/src/unix.c ue312/src/unix.c
-*** ue312.orig/src/unix.c Wed Apr 21 11:09:20 1993
---- ue312/src/unix.c Sat Jan 14 11:02:21 1995
-***************
-*** 95,101 ****
---- 95,103 ----
-
- /** Additional include files **/
- #if BSD
-+ #undef BSD /* well, ... */
- #include <sys/time.h> /* Timer definitions */
-+ #include <sys/param.h> /* BSD version number */
- #endif /* BSD */
- #if BSD || SUN || HPUX8 || HPUX9 || AVIION
- #include <signal.h> /* Signal definitions */
-***************
-*** 104,115 ****
---- 106,125 ----
- #include <termio.h> /* Terminal I/O definitions */
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
- #if AVIION
-+ #define HAVE_TERMIOS 1
- #include <termios.h> /* Terminal I/O definitions */
- #endif /* AVIION */
- #if CURSES
- #include <curses.h> /* Curses screen output */
- #undef WINDOW /* Oh no! */
- #endif /* CURSES */
-+ #if (defined(BSD) && (BSD >= 199103))
-+ #define HAVE_TERMIOS 1
-+ #include <termios.h>
-+ #else
-+ #define HAVE_SGTTY 1
-+ #include <sgtty.h>
-+ #endif
-
- /** Completion include files **/
- /** Directory accessing: Try and figure this out... if you can! **/
-***************
-*** 164,185 ****
- #endif /* TERMCAP */
-
- /** Local variables **/
-! #if BSD
- static struct sgttyb cursgtty; /* Current modes */
- static struct sgttyb oldsgtty; /* Original modes */
- static struct tchars oldtchars; /* Current tchars */
- static struct ltchars oldlchars; /* Current ltchars */
- static char blank[6] = /* Blank out character set */
- { -1, -1, -1, -1, -1, -1 };
-! #endif /* BSD */
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- static struct termio curterm; /* Current modes */
- static struct termio oldterm; /* Original modes */
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if AVIION
- static struct termios curterm; /* Current modes */
- static struct termios oldterm; /* Original modes */
-! #endif /* AVIION */
- #if TERMCAP
- static char tcapbuf[NCAPBUF]; /* Termcap character storage */
- #define CAP_CL 0 /* Clear to end of page */
---- 174,195 ----
- #endif /* TERMCAP */
-
- /** Local variables **/
-! #if HAVE_SGTTY
- static struct sgttyb cursgtty; /* Current modes */
- static struct sgttyb oldsgtty; /* Original modes */
- static struct tchars oldtchars; /* Current tchars */
- static struct ltchars oldlchars; /* Current ltchars */
- static char blank[6] = /* Blank out character set */
- { -1, -1, -1, -1, -1, -1 };
-! #endif /* HAVE_SGTTY */
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- static struct termio curterm; /* Current modes */
- static struct termio oldterm; /* Original modes */
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if HAVE_TERMIOS
- static struct termios curterm; /* Current modes */
- static struct termios oldterm; /* Original modes */
-! #endif /* HAVE_TERMIOS */
- #if TERMCAP
- static char tcapbuf[NCAPBUF]; /* Termcap character storage */
- #define CAP_CL 0 /* Clear to end of page */
-***************
-*** 250,255 ****
---- 260,270 ----
- static int cfcolor = -1; /* Current forground color */
- static int cbcolor = -1; /* Current background color */
- #endif /* COLOR */
-+
-+ /*
-+ * I added the K[1-5] capabilities at the end. Hopefully someone finds this
-+ * useful. -- tg
-+ */
- static struct keybind keybind[] = { /* Keybinding list */
- { "bt", SHFT|CTRL|'i' }, /* Back-tab key */
- { "k1", SPEC|'1' }, /* F1 key */
-***************
-*** 290,296 ****
- { "kP", SPEC|'Z' }, /* Previous page key */
- { "kR", CTRL|'Z' }, /* Scroll backward key */
- { "kr", SPEC|'F' }, /* Right arrow key */
-! { "ku", SPEC|'P' } /* Up arrow key */
- };
- #endif /* TERMCAP */
- static int inbuf[NINCHAR]; /* Input buffer */
---- 305,316 ----
- { "kP", SPEC|'Z' }, /* Previous page key */
- { "kR", CTRL|'Z' }, /* Scroll backward key */
- { "kr", SPEC|'F' }, /* Right arrow key */
-! { "ku", SPEC|'P' }, /* Up arrow key */
-! { "K1", SPEC|'<' }, /* Keypad 7 -> Home */
-! { "K2", SPEC|'V' }, /* Keypad 9 -> Page Up */
-! { "K3", ' ' }, /* Keypad 5 */
-! { "K4", SPEC|'>' }, /* Keypad 1 -> End */
-! { "K5", CTRL|'V' } /* Keypad 3 -> Page Down */
- };
- #endif /* TERMCAP */
- static int inbuf[NINCHAR]; /* Input buffer */
-***************
-*** 363,369 ****
- int ttopen()
- {
- strcpy(os, "UNIX");
-! #if BSD
- /* Get tty modes */
- if (ioctl(0, TIOCGETP, &oldsgtty) ||
- ioctl(0, TIOCGETC, &oldtchars) ||
---- 383,389 ----
- int ttopen()
- {
- strcpy(os, "UNIX");
-! #if HAVE_SGTTY
- /* Get tty modes */
- if (ioctl(0, TIOCGETP, &oldsgtty) ||
- ioctl(0, TIOCGETC, &oldtchars) ||
-***************
-*** 375,388 ****
-
- /* Set new modes */
- cursgtty.sg_flags |= CBREAK;
-! cursgtty.sg_flags &= ~(ECHO|CRMOD);
-
- /* Set tty modes */
- if (ioctl(0, TIOCSETP, &cursgtty) ||
- ioctl(0, TIOCSETC, blank) ||
- ioctl(0, TIOCSLTC, blank))
- return(-1);
-! #endif /* BSD */
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
-
- #if SMOS
---- 395,408 ----
-
- /* Set new modes */
- cursgtty.sg_flags |= CBREAK;
-! cursgtty.sg_flags &= ~(ECHO|CRMOD|IXON|IXANY|IXOFF);
-
- /* Set tty modes */
- if (ioctl(0, TIOCSETP, &cursgtty) ||
- ioctl(0, TIOCSETC, blank) ||
- ioctl(0, TIOCSLTC, blank))
- return(-1);
-! #endif /* HAVE_SGTTY */
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
-
- #if SMOS
-***************
-*** 437,443 ****
- return(-1);
- }
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if AVIION
- /* Get modes */
- if (tcgetattr(0, &oldterm)) {
- perror("Cannot tcgetattr");
---- 457,463 ----
- return(-1);
- }
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if HAVE_TERMIOS
- /* Get modes */
- if (tcgetattr(0, &oldterm)) {
- perror("Cannot tcgetattr");
-***************
-*** 448,455 ****
- curterm = oldterm;
-
- /* Set new modes */
-! curterm.c_iflag &= ~(INLCR|ICRNL|IGNCR);
-! curterm.c_lflag &= ~(ICANON|ISIG|ECHO);
- curterm.c_cc[VMIN] = 1;
- curterm.c_cc[VTIME] = 0;
-
---- 468,476 ----
- curterm = oldterm;
-
- /* Set new modes */
-! /* disable XON/XOFF. We want to use ^S/^Q */
-! curterm.c_iflag &= ~(INLCR|ICRNL|IGNCR|IXON|IXANY|IXOFF);
-! curterm.c_lflag &= ~(ICANON|ISIG|ECHO|IEXTEN);
- curterm.c_cc[VMIN] = 1;
- curterm.c_cc[VTIME] = 0;
-
-***************
-*** 463,469 ****
- perror("Cannot tcsetattr");
- return(-1);
- }
-! #endif /* AVIION */
-
- /* Success */
- return(0);
---- 484,490 ----
- perror("Cannot tcsetattr");
- return(-1);
- }
-! #endif /* HAVE_TERMIOS */
-
- /* Success */
- return(0);
-***************
-*** 476,487 ****
- if (reset != (char*)NULL)
- write(1, reset, strlen(reset));
-
-! #if BSD
- if (ioctl(0, TIOCSETP, &oldsgtty) ||
- ioctl(0, TIOCSETC, &oldtchars) ||
- ioctl(0, TIOCSLTC, &oldlchars))
- return(-1);
-! #endif /* BSD */
-
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- #if SMOS
---- 497,508 ----
- if (reset != (char*)NULL)
- write(1, reset, strlen(reset));
-
-! #if HAVE_SGTTY
- if (ioctl(0, TIOCSETP, &oldsgtty) ||
- ioctl(0, TIOCSETC, &oldtchars) ||
- ioctl(0, TIOCSLTC, &oldlchars))
- return(-1);
-! #endif /* HAVE_SGTTY */
-
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- #if SMOS
-***************
-*** 492,502 ****
- return(-1);
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-
-! #if AVIION
- /* Set tty mode */
- if (tcsetattr(0, TCSANOW, &oldterm))
- return(-1);
-! #endif /* AVIION */
-
- /* Success */
- return(0);
---- 513,523 ----
- return(-1);
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-
-! #if HAVE_TERMIOS
- /* Set tty mode */
- if (tcsetattr(0, TCSANOW, &oldterm))
- return(-1);
-! #endif /* HAVE_TERMIOS */
-
- /* Success */
- return(0);
-***************
-*** 628,634 ****
- /** Grab input characters, with wait **/
- unsigned char grabwait()
- {
-! #if BSD
- unsigned char ch;
-
- /* Perform read */
---- 649,655 ----
- /** Grab input characters, with wait **/
- unsigned char grabwait()
- {
-! #if HAVE_SGTTY
- unsigned char ch;
-
- /* Perform read */
-***************
-*** 637,644 ****
- exit(1);
- }
- return(ch);
-! #endif /* BSD */
-! #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || AVIION
- unsigned char ch;
-
- /* Change mode, if necessary */
---- 658,665 ----
- exit(1);
- }
- return(ch);
-! #endif /* HAVE_SGTTY */
-! #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || HAVE_TERMIOS
- unsigned char ch;
-
- /* Change mode, if necessary */
-***************
-*** 648,656 ****
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- ioctl(0, TCSETA, &curterm);
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if AVIION
- tcsetattr(0, TCSANOW, &curterm);
-! #endif /* AVIION */
- }
-
- /* Perform read */
---- 669,677 ----
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- ioctl(0, TCSETA, &curterm);
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if HAVE_TERMIOS
- tcsetattr(0, TCSANOW, &curterm);
-! #endif /* HAVE_TERMIOS */
- }
-
- /* Perform read */
-***************
-*** 661,673 ****
-
- /* Return new character */
- return(ch);
-! #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || AVIION */
- }
-
- /** Grab input characters, short wait **/
- unsigned char grabnowait()
- {
-! #if BSD
- static struct timeval timout = { 0, 500000L };
- int count, r;
-
---- 682,694 ----
-
- /* Return new character */
- return(ch);
-! #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || HAVE_TERMIOS */
- }
-
- /** Grab input characters, short wait **/
- unsigned char grabnowait()
- {
-! #if HAVE_SGTTY
- static struct timeval timout = { 0, 500000L };
- int count, r;
-
-***************
-*** 683,690 ****
-
- /* Perform read */
- return(grabwait());
-! #endif /* BSD */
-! #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || AVIION
- int count;
- unsigned char ch;
-
---- 704,711 ----
-
- /* Perform read */
- return(grabwait());
-! #endif /* HAVE_SGTTY */
-! #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || HAVE_TERMIOS
- int count;
- unsigned char ch;
-
-***************
-*** 695,703 ****
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- ioctl(0, TCSETA, &curterm);
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if AVIION
- tcsetattr(0, TCSANOW, &curterm);
-! #endif /* AVIION */
- }
-
- /* Perform read */
---- 716,724 ----
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- ioctl(0, TCSETA, &curterm);
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if HAVE_TERMIOS
- tcsetattr(0, TCSANOW, &curterm);
-! #endif /* HAVE_TERMIOS */
- }
-
- /* Perform read */
-***************
-*** 711,717 ****
-
- /* Return new character */
- return(ch);
-! #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || AVIION */
- }
-
- /** Queue input character **/
---- 732,738 ----
-
- /* Return new character */
- return(ch);
-! #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX || HAVE_TERMIOS */
- }
-
- /** Queue input character **/
-***************
-*** 879,885 ****
- cp = getenv("TERM");
- if (!cp) {
- puts(TEXT182);
-! /* "Environment variable \"TERM\" not define!" */
- exit(1);
- }
-
---- 900,906 ----
- cp = getenv("TERM");
- if (!cp) {
- puts(TEXT182);
-! /* "Environment variable \"TERM\" not defined!" */
- exit(1);
- }
-
-***************
-*** 957,971 ****
- }
-
- /* Set speed for padding sequences */
-! #if BSD
- ospeed = cursgtty.sg_ospeed;
-! #endif /* BSD */
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- ospeed = curterm.c_cflag & CBAUD;
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if AVIION
- ospeed = cfgetospeed(&curterm);
-! #endif /* AVIION */
-
- /* Send out initialization sequences */
- putpad(capbind[CAP_IS].store);
---- 978,992 ----
- }
-
- /* Set speed for padding sequences */
-! #if HAVE_SGTTY
- ospeed = cursgtty.sg_ospeed;
-! #endif /* HAVE_SGTTY */
- #if USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX
- ospeed = curterm.c_cflag & CBAUD;
- #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */
-! #if HAVE_TERMIOS
- ospeed = cfgetospeed(&curterm);
-! #endif /* HAVE_TERMIOS */
-
- /* Send out initialization sequences */
- putpad(capbind[CAP_IS].store);
+--- Makefile.orig Wed Mar 25 14:28:24 1998
++++ Makefile Wed Mar 25 14:41:41 1998
+@@ -0,0 +1,12 @@
++#
++# simple makefile for uemacs
++#
++
++all:
++ (cd freebsd; make emacs)
++
++install: all
++ ${BSD_INSTALL_PROGRAM} freebsd/emacs ${PREFIX}/bin/uemacs
++ mkdir -p ${PREFIX}/share/uemacs
++ ${BSD_INSTALL_DATA} cmd/* ${PREFIX}/share/uemacs
++ mv ${PREFIX}/share/uemacs/emacs.rc ${PREFIX}/share/uemacs/.emacsrc
diff --git a/editors/uemacs/files/patch-ab b/editors/uemacs/files/patch-ab
index 922b1623801f..839fa34c9da6 100644
--- a/editors/uemacs/files/patch-ab
+++ b/editors/uemacs/files/patch-ab
@@ -1,1244 +1,1257 @@
-diff -crN ue312.orig/freebsd/estruct.h ue312/freebsd/estruct.h
-*** ue312.orig/freebsd/estruct.h Thu Jan 1 01:00:00 1970
---- ue312/freebsd/estruct.h Fri Jan 13 20:18:20 1995
-***************
-*** 0 ****
---- 1,1130 ----
-+ /* ESTRUCT: Structure and preprocesser defined for
-+ MicroEMACS 3.12
-+
-+ (C)Copyright 1993 by Daniel Lawrence
-+ written by Daniel Lawrence
-+ based on code by Dave G. Conroy,
-+ Steve Wilhite and George Jones
+--- freebsd/estruct.h.orig Wed Mar 25 14:21:05 1998
++++ freebsd/estruct.h Wed Mar 25 14:25:34 1998
+@@ -0,0 +1,1254 @@
++/* ESTRUCT: Structure and preprocesser defined for
++ MicroEMACS 4.00
++
++ (C)Copyright 1995 by Daniel Lawrence
++ written by Daniel Lawrence
++ based on code by Dave G. Conroy,
++ Steve Wilhite and George Jones
++*/
++
++#ifdef LATTICE
++#undef LATTICE /* don't use their definitions...use ours */
++#endif
++#ifdef MSDOS
++#undef MSDOS
++#endif
++#ifdef WINNT
++#undef WINNT
++#endif
++#ifdef AMIGA
++#undef AMIGA
++#endif
++#ifdef EGA
++#undef EGA
++#endif
++#ifdef CTRLZ
++#undef CTRLZ
++#endif
++
++/* Program Identification.....
++
++ PROGNAME should always be MicroEMACS for a distribution
++ unmodified version. People using MicroEMACS as a shell
++ for other products should change this to reflect their
++ product. Macros can query this via the $progname variable
++*/
++
++#define PROGNAME "MicroEMACS"
++#define VERSION "4.00"
++
++/* Machine/OS definitions */
++/* [Set one of these!!] */
++
++#define AMIGA 0 /* AmigaDOS */
++#define AOSVS 0 /* Data General AOS/VS */
++#define AUX 0 /* Apple UNIX for Macintosh */
++#define AIX 0 /* IBM UNIX for various machines*/
++#define AVIION 0 /* Data General AViiON */
++#define BSD 0 /* UNIX BSD 4.2 and ULTRIX */
++#define FINDER 0 /* Macintosh OS */
++#define FREEBSD 1 /* FREEBSD 386 version 2 or + */
++#define HPUX8 0 /* HPUX HP 9000 ver 8 or less */
++#define HPUX9 0 /* HPUX HP 9000 ver 9 */
++#define MPE 0 /* HP MPE/XL */
++#define MSDOS 0 /* MS-DOS */
++#define WINNT 0 /* MS-Win NT */
++#define OS2 0 /* Microsoft or IBM OS/2 */
++#define SMOS 0 /* Supermax UNIX System V */
++#define SUN 0 /* SUN v4.0 */
++#define TOS 0 /* ST520, TOS */
++#define USG 0 /* UNIX system V */
++#define VMS 0 /* VAX/VMS */
++#define WMCS 0 /* Wicat's MCS */
++#define XENIX 0 /* IBM-PC SCO XENIX */
++
++/* Compiler definitions */
++/* [Set one of these!!] */
++#define ALCYON 0 /* ALCYON Atari ST compiler */
++#define AZTEC 0 /* Aztec C 4.00e ONLY for the amiga now... */
++#define DGC 0 /* Data General AOS/VS C... */
++#define GCC 0 /* the GNU C compiler */
++#define IC 0 /* Rational Systems Instant C */
++#define LATTICE 0 /* Lattice 2.14 through 3.0 compilers */
++#define MSC 0 /* MicroSoft C compile version 3 thru 7 */
++#define MWC 0 /* Mark Williams C */
++#define TURBO 0 /* Turbo C and Borland C++ under MSDOS */
++#define UNIX 1 /* a standard UNIX compiler (cc) */
++#define ZTC 0 /* Zortech C/C++ 1.02 thru 2.10 under MSDOS */
++
++/* Machine stack growth direction. */
++/* [Set this to 1 if your machine stack grows UP!!!] */
++/* data general mv/eclipse series stack grows up. */
++/* dec vax series stack grows down... got it??? */
++
++#define STACK_GROWS_UP 0
++
++/* Debugging options */
++#define RAMSIZE 0 /* dynamic RAM memory usage tracking */
++#define RAMSHOW 0 /* auto dynamic RAM reporting */
++#define RAMTRCK 0 /* send debug info to MALLOC.DAT */
++#define DEBUG_SEARCH 0 /* pop some search info on patterns */
++
++/* Special keyboard/network definitions */
++
++#define ATKBD 0 /* AT-style keyboard with F11, F12 & grey keys */
++#define WANGPC 0 /* WangPC - mostly escape sequences */
++#define VT100 1 /* Handle VT100 style keypad - NOT VMS. */
++#define KEYPAD 0 /* VMS - turn on and off application */
++ /* keypad automatically */
++#define XONDATA 0 /* VMS - set to force /NOTTSYNC/NOHOSTSY */
++#define RMSIO 0 /* VMS - skip the rotten C runtime and */
++ /* use RMS directly */
++#define OPTMEM 0 /* VMS 5.0 and up - use a less standard */
++ /* but more efficient memory allocator */
++
++/* Terminal Output definitions */
++/* [Set one of these!!] */
++
++#define ANSI 0 /* ANSI escape sequences */
++#define DASHER 0 /* DG Dasher 2xx/4xx crts */
++#define DG10 0 /* Data General system/10 */
++#define FMR 0 /* Fujitsu FMR series driver */
++#define HP110 0 /* HP110 screen driver */
++#define HP150 0 /* HP150 screen driver */
++#define I55 0 /* IBM PS55 DOS J4.0/V */
++#define IBMPC 0 /* IBM-PC CGA/MONO/EGA/VGA drvr */
++#define MAC 0 /* Macintosh */
++#define NEC 0 /* NEC-9801VM driver */
++#define OS2NPM 0 /* OS/2 non-Presentation Mgr. */
++#define SMG 0 /* SMG library on VMS */
++#define ST52 0 /* Atari 520/1040ST screen */
++#define TERMCAP 1 /* Use TERMCAP */
++#define TIPC 0 /* TI Profesional PC driver */
++#define VT52 0 /* VT52 terminal (Zenith). */
++#define NTCON 0 /* Windows NT console */
++#define XVT 0 /* XVT windowing system */
++#define Z309 0 /* Zenith 100 PC family driver */
++
++/* Windowing system style (pick one) */
++
++#define WINDOW_TEXT 1 /* [default] Text mode */
++#define WINDOW_MSWIN 0 /* MicroSoft Windows */
++#define WINDOW_MSWIN32 0 /* MicroSoft Windows 32 bit API */
++#define WINDOW_X 0 /* X/Unix */
++
++/* Language text options (pick one) */
++
++#define ENGLISH 1 /* [default] */
++#define FRENCH 0
++#define SPANISH 0
++#define GERMAN 0
++#define DUTCH 0
++#define PLATIN 0 /* Pig Latin */
++#define JAPAN 0
++#define LATIN 0 /* real Latin */
++
++/* Configuration options */
++
++#define TYPEAH 1 /* type ahead causes update to be skipped */
++#define LOGFLG 0 /* send all executed commands to EMACS.LOG */
++#define VISMAC 0 /* update display during keyboard macros */
++#define CTRLZ 0 /* add a ^Z at end of files under MSDOS only */
++#define CLEAN 0 /* de-alloc memory on exit */
++#define CALLED 0 /* is emacs a called subroutine? or stand alone */
++
++#define REVSTA 1 /* Status line appears in reverse video */
++#define COLOR 1 /* color commands and windows */
++
++#define FILOCK 0 /* file locking under unix BSD 4.2 */
++#define ISRCH 1 /* Incremental searches like ITS EMACS */
++#define FLABEL 0 /* function key label code [HP150] */
++#define CRYPT 1 /* file encryption enabled? */
++#define MAGIC 1 /* include regular expression matching? */
++#define MOUSE 1 /* Include routines for mouse actions */
++#define NOISY 1 /* Use a fancy BELL if it exists */
++#define CTAGS 1 /* include vi-like tagging? */
++#define SPEECH 0 /* spoken EMACS, for the sight impared [not ready] */
++#define VARARG 1 /* use varargs.h for mlwrite() */
++
++#if XVT
++#undef COLOR
++#define COLOR 1 /* overide this to be TRUE for XVT always */
++#endif
++
++/* Character set options */
++/* [Set one of these!!] */
++#define ASCII 1 /* always using ASCII char sequences for now */
++#define EBCDIC 0 /* later IBM mainfraim versions will use EBCDIC */
++
++/* handle constant and voids properly */
++
++#if VMS
++#define CONST readonly
++#define VOID void
++#define NOSHARE noshare
++#else
++#if AOSVS
++#define CONST $shared $align(1) /* fake a const */
++#define VOID
++#define NOSHARE $low32k $align(1) /* attempt to optimize read/write vars. */
++#else
++
++#if __STDC__ || MSC || TURBO || GCC || (AMIGA && LATTICE)
++#define CONST const
++#define VOID void
++#define NOSHARE
++#else
++#define CONST
++#if IC
++#define VOID void
++#else
++#define VOID
++#endif
++#define NOSHARE
++#endif
++
++#endif
++#endif
++
++/* System dependant library redefinitions, structures and includes */
++
++/* multibyte character support? */
++
++#if NEC || FMR || I55
++#define DBCS 1 /* double byte character sets enabled */
++#define INSDEL 1 /* use insert/delete line display optimizations */
++
++/* define DBCS prefix bytes */
++#define is2char(ch) (((ch&0xff) >= 0x81 && (ch&0xff) <= 0x9f) || ((ch&0xff) >=0xe0 && (ch&0xff) <= 0xfc))
++
++#else
++#define DBCS 0
++#define INSDEL 0
++#endif
++
++/* Can we catch the SIGWINCH (the window size change signal)? */
++
++#if AIX || HPUX9 || FREEBSD
++#define HANDLE_WINCH 1
++#else
++#define HANDLE_WINCH 0
++#endif
++
++/* Prototypes in use? */
++
++#if MSC || TURBO || IC || VMS || GCC || ZTC
++#define PROTO 1
++#else
++#define PROTO 0
++#endif
++
++/* the following define allows me to initialize unions...
++ otherwise we make them structures (like the keybinding table) */
++
++#if __STDC__ || MSC || TURBO || IC || ZTC
++#define ETYPE union
++#else
++#define ETYPE struct
++#endif
++
++/* Instant C can't do stat()s. Arrrg. No file locking for you */
++#if IC && MSDOS
++#undef FILOCK
++#define FILOCK 0
++#endif
++
++/* Mark Williams/Atari has no standard or varargs or directory functions */
++#if TOS & MWC
++#undef VARARG
++#define VARARG 0
++#undef FILOCK
++#define FILOCK 0
++#endif
++
++/* MS-Windows */
++
++#if WINNT || WINDOW_MSWIN || WINDOW_MSWIN32
++#if WINDOW_MSWIN32
++#undef WINDOW_MSWIN
++#define WINDOW_MSWIN 1
++#endif
++#if WINDOW_MSWIN && WINNT
++#undef WINDOW_MSWIN32
++#define WINDOW_MSWIN32 1
++#endif
++#undef VOID /* windows.h will wind up defining this */
++#include <windows.h> /* --------- Huge include file here !!! ---------*/
++#if NTCON
++#include <wincon.h>
++#include <stdio.h>
++#include <dos.h>
++#endif
++
++#undef NEAR
++#define NEAR
++#define DNEAR
++#if MSC || IC
++#undef CDECL
++#define CDECL __cdecl
++#define DUMMYSZ 1 /* dummy size for unsized extern arrays to avoid
++ silly DGROUP fixup */
++#else
++#if TURBO
++#define DUMMYSZ /* nothing */
++#else
++#define CDECL _cdecl /* ZTC */
++#define DUMMYSZ /* nothing */
++#endif
++#endif
++
++#if WINNT
++#define EXPORT /* Windows NT doesn't like this */
++#endif
++
++#if WINDOW_MSWIN
++#undef TYPEAH
++#define TYPEAH 0 /* typeahead is handled at the term driver level */
++#undef CALLED
++#define CALLED 1 /* under MS Windows, "main" resides in the sys driver */
++#if MSC
++#define EXPORT __export
++#else
++#define EXPORT _export /* Fine for TURBO and ZTC */
++#endif
++#endif
++#else
++
++/* neither Windows NT nor MS-Windows */
++
++#define DUMMYSZ /* nothing */
++
++#if MSDOS & (TURBO | MSC | TIPC)
++#define NEAR
++#define DNEAR
++#define PASCAL pascal
++#define CDECL cdecl
++#else
++#if MSDOS & ZTC
++#define NEAR
++#define DNEAR
++#define PASCAL _pascal
++#define CDECL _cdecl
++#else
++#define NEAR
++#define DNEAR
++#define PASCAL
++#define CDECL
++#endif
++#endif
++
++#endif
++
++#if TURBO
++#include <dos.h>
++#include <mem.h>
++#undef peek
++#undef poke
++#define peek(a,b,c,d) movedata(a,b,FP_SEG(c),FP_OFF(c),d)
++#define poke(a,b,c,d) movedata(FP_SEG(c),FP_OFF(c),a,b,d)
++#endif
++
++#if IC
++#include <dos.h>
++#undef peek
++#undef poke
++#define peek(a,b,c,d) movedata(a,b,FP_SEG(c),FP_OFF(c),d)
++#define poke(a,b,c,d) movedata(FP_SEG(c),FP_OFF(c),a,b,d)
++#endif
++
++#if LATTICE & MSDOS
++/* you may have to remove this one definition with LATTICE version
++ 3.2 and above */
++#define unsigned
++#endif
++
++#if IC
++#define inp inportb
++#define outp outportb
++#define intdos(a, b) int86(33, a, b)
++#endif
++
++#if AZTEC
++#undef putc
++#undef getc
++#if MSDOS
++#define getc a1getc
++#define int86 sysint
++#define intdos(a, b) sysint(33, a, b)
++#define inp inportb
++#define outp outportb
++#else
++#define getc agetc
++#endif
++#define putc aputc
++
++struct XREG {
++ unsigned ax,bx,cx,dx,si,di,ds,es;
++};
++
++struct HREG {
++ char al,ah,bl,bh,cl,ch,dl,dh,d1,d2,e1,e2;
++};
++
++union REGS {
++ struct XREG x;
++ struct HREG h;
++};
++
++struct SREGS {
++ unsigned cs, ss, ds, es;
++};
++#endif
++
++#if MSDOS & MWC
++#include <dos.h>
++#define int86(a, b, c) intcall(b, c, a)
++#define intdos(a, b) intcall(a, b, DOSINT)
++#define inp(a) in(a)
++#define outp(a, b) out(a, b)
++#define movmem(a, b, c) memcpy(b, a, c)
++
++struct XREG {
++ unsigned int ax,bx,cx,dx,si,di,ds,es,flags;
++};
++
++struct HREG {
++ char al,ah,bl,bh,cl,ch,dl,dh;
++ unsigned int ds,es,flags;
++};
++
++union REGS {
++ struct XREG x;
++ struct HREG h;
++};
++#endif
++
++#if MSDOS & MSC
++#include <dos.h>
++#include <memory.h>
++#define peek(a,b,c,d) movedata(a,b,FP_SEG(c),FP_OFF(c),d)
++#define poke(a,b,c,d) movedata(FP_SEG(c),FP_OFF(c),a,b,d)
++#define movmem(a, b, c) memcpy(b, a, c)
++#define _strrev(a) strrev(a)
++#endif
++
++#if MSDOS & LATTICE
++#undef CPM
++#undef LATTICE
++#include <dos.h>
++#undef CPM
++#endif
++
++/* System V doesn't name this the same as others */
++#if USG | AIX | AUX | SUN | (OS2 & MSC)
++#define movmem(a, b, c) memcpy(b, a, c)
++#endif
++
++/* this keeps VMS happy */
++#if VMS
++#define getname xgetname
++#define unlink(a) delete(a)
++#endif
++
++/* some options for AOS/VS */
++#if AOSVS
++#define ORMDNI 1
++#endif
++
++/* define some ability flags */
++
++#if (IBMPC | Z309 | FMR | TIPC) & !(WINDOW_MSWIN | WINDOW_MSWIN32)
++#define MEMMAP 1
++#else
++#define MEMMAP 0
++#endif
++
++#if MSDOS | WINNT | OS2 | USG | AIX | AUX | SMOS | HPUX8 | HPUX9 | BSD | FREEBSD | (TOS & MWC) | WMCS | SUN | MPE
++#define ENVFUNC 1
++#else
++#define ENVFUNC 0
++#endif
++
++#if AUX
++#define RETCHAR '\n'
++#else
++#define RETCHAR '\r'
++#endif
++
++#if MPE
++#define DIRSEPSTR "."
++#define DIRSEPCHAR '.'
++#else
++#if TOS || MSDOS || WINNT || OS2
++#define DIRSEPSTR "\\"
++#define DIRSEPCHAR '\\'
++#define DRIVESEPCHAR ':'
++#else
++#define DIRSEPSTR "/"
++#define DIRSEPCHAR '/'
++#define DRIVESEPCHAR '\0'
++#endif
++#endif
++
++#if VARARG
++#if (GCC == 0) && (USG || AIX || AUX || BSD || FREEBSD || SUN || XENIX || HPUX8 || HPUX9 || AVIION || MPE)
++#define VARG 1
++#define SARG 0
++#include <varargs.h>
++#else
++#define VARG 0
++#define SARG 1
++#include <stdarg.h>
++#endif
++#endif
++
++#if ZTC
++#include <dos.h>
++#define movmem(a, b, c) memcpy(b, a, c)
++#endif
++
++/* Emacs global flag bit definitions (for gflags) */
++
++#define GFREAD 1 /* read first file in at startup */
++#define GFSDRAW 2 /* suppress a screen redraw */
++#define GFEXIT 4 /* exit from emacs pending */
++
++/* internal constants */
++
++#define NBINDS 300 /* max # of bound keys */
++#if AOSVS | VMS | WINNT | SUN | BSD | FREEBSD | USG | ZENIX | HPUX8 | HPUX9 | OS2
++#define NFILEN 256
++#else
++#define NFILEN 80 /* # of bytes, file name */
++#endif
++#define NBUFN 128 /* # of bytes, buffer name */
++#define NLINE 256 /* # of bytes, input line */
++#define NSTRING 128 /* # of bytes, string buffers */
++#define NKBDM 4096 /* # of strokes, keyboard macro */
++#define NPAT 128 /* # of bytes, pattern */
++#define HUGE 1000 /* Huge number */
++#define NLOCKS 256 /* max # of file locks active */
++#define NCOLORS 16 /* number of supported colors */
++#define KBLOCK 250 /* sizeof kill buffer chunks */
++#define NRING 16 /* # of buffers in kill ring */
++#define NBLOCK 16 /* line block chunk size */
++#define NVSIZE 16 /* max #chars in a var name */
++#define NMARKS 16 /* number of marks */
++#define MAXSYM 32 /* max # chars in symbol to expand */
++#define MINFLEN 3 /* min # chars to match &func */
++
++#define CTRL 0x0100 /* Control flag, or'ed in */
++#define META 0x0200 /* Meta flag, or'ed in */
++#define CTLX 0x0400 /* ^X flag, or'ed in */
++#define SPEC 0x0800 /* special key (function keys) */
++#define MOUS 0x1000 /* alternative input device (mouse) */
++#define SHFT 0x2000 /* shifted (for function keys) */
++#define ALTD 0x4000 /* ALT key... */
++#define MENU MOUS+SPEC /* menu selection (WINDOW_MSWIN) */
++
++#define BINDNUL 0 /* not bound to anything */
++#define BINDFNC 1 /* key bound to a function */
++#define BINDBUF 2 /* key bound to a buffer */
++
++#ifdef FALSE
++#undef FALSE
++#endif
++#ifdef TRUE
++#undef TRUE
++#endif
++
++#define FALSE 0 /* False, no, bad, etc. */
++#define TRUE 1 /* True, yes, good, etc. */
++#define ABORT 2 /* Death, ^G, abort, etc. */
++#define FAILD 3 /* not-quite fatal false return */
++
++#define STOP 0 /* keyboard macro not in use */
++#define PLAY 1 /* playing */
++#define RECORD 2 /* recording */
++
++/* Completion types */
++
++#define CMP_BUFFER 0
++#define CMP_COMMAND 1
++#define CMP_FILENAME 2
++
++/* Directive definitions */
++
++#define DIF 0
++#define DELSE 1
++#define DENDIF 2
++#define DGOTO 3
++#define DRETURN 4
++#define DENDM 5
++#define DWHILE 6
++#define DENDWHILE 7
++#define DBREAK 8
++#define DFORCE 9
++
++#define NUMDIRS 10
++
++/*
++ * PTBEG, PTEND, FORWARD, and REVERSE are all toggle-able values for
++ * routines that need directions.
+ */
-+
-+ #ifdef LATTICE
-+ #undef LATTICE /* don't use their definitions...use ours */
-+ #endif
-+ #ifdef MSDOS
-+ #undef MSDOS
-+ #endif
-+ #ifdef WINNT
-+ #undef WINNT
-+ #endif
-+ #ifdef AMIGA
-+ #undef AMIGA
-+ #endif
-+ #ifdef EGA
-+ #undef EGA
-+ #endif
-+ #ifdef CTRLZ
-+ #undef CTRLZ
-+ #endif
-+
-+ /* Program Identification.....
-+
-+ PROGNAME should always be MicroEMACS for a distribution
-+ unmodified version. People using MicroEMACS as a shell
-+ for other products should change this to reflect their
-+ product. Macros can query this via the $progname variable
++#define PTBEG 0 /* Leave the point at the beginning on search */
++#define PTEND 1 /* Leave the point at the end on search */
++#define FORWARD 0 /* do things in a forward direction */
++#define REVERSE 1 /* do things in a backwards direction */
++
++#define FIOSUC 0 /* File I/O, success. */
++#define FIOFNF 1 /* File I/O, file not found. */
++#define FIOEOF 2 /* File I/O, end of file. */
++#define FIOERR 3 /* File I/O, error. */
++#define FIOMEM 4 /* File I/O, out of memory */
++#define FIOFUN 5 /* File I/O, eod of file/bad line*/
++#define FIODEL 6 /* Can't delete/rename file */
++
++#if WINDOW_MSWIN
++/* values for the fbusy flag */
++#define FREADING 1 /* file read in progress */
++#define FWRITING 2 /* file write in progress */
++/* if no file activity, the value FALSE is used */
++#endif
++
++#define CFCPCN 0x0001 /* Last command was C-P, C-N */
++#define CFKILL 0x0002 /* Last command was a kill */
++#define CFSRCH 0x0004 /* last command was a search */
++#define CFYANK 0x0008 /* last command was a yank */
++
++#define SRNORM 0 /* end past, begin front */
++#define SRBEGIN 1 /* always at front */
++#define SREND 2 /* always one past end */
++
++#define BELL 0x07 /* a bell character */
++#define TAB 0x09 /* a tab character */
++
++#if USG | AIX | AUX | SMOS | HPUX8 | HPUX9 | BSD | FREEBSD | SUN | XENIX | AVIION
++#define PATHCHR ':'
++#else
++#if WMCS || MPE
++#define PATHCHR ','
++#else
++#define PATHCHR ';'
++#endif
++#endif
++
++#define INTWIDTH sizeof(int) * 3
++#define LONGWIDTH sizeof(long) * 3
++
++/* Macro argument token types */
++
++#define TKNUL 0 /* end-of-string */
++#define TKARG 1 /* interactive argument */
++#define TKBUF 2 /* buffer argument */
++#define TKVAR 3 /* user variables */
++#define TKENV 4 /* environment variables */
++#define TKFUN 5 /* function.... */
++#define TKDIR 6 /* directive */
++#define TKLBL 7 /* line label */
++#define TKLIT 8 /* numeric literal */
++#define TKSTR 9 /* quoted string literal */
++#define TKCMD 10 /* command name */
++
++/* Internal defined functions */
++
++#define nextab(a) (a - (a % tabsize)) + tabsize
++
++/* DIFCASE represents the integer difference between upper
++ and lower case letters. It is an xor-able value, which is
++ fortunate, since the relative positions of upper to lower
++ case letters is the opposite of ascii in ebcdic.
++*/
++
++#if ASCII
++#define DIFCASE 0x20
++#else
++#define DIFCASE 0x40
++#endif
++
++/* Dynamic RAM tracking and reporting redefinitions */
++
++#if RAMSIZE
++#define malloc allocate
++#define free release
++#else
++#if VMS & OPTMEM
++#define malloc VAXC$MALLOC_OPT
++#define free VAXC$FREE_OPT
++#define calloc VAXC$CALLOC_OPT
++#define realloc VAXC$REALLOC_OPT
++#define cfree VAXC$CFREE_OPT
++#endif
++#endif
++
++/* under MS Windows, we use dialog boxes to prompt the user for filenames */
++#if WINDOW_MSWIN
++#define FILENAMEREPLY(p,b,nb) filenamedlg(p,b,nb,TRUE)
++#else
++#define FILENAMEREPLY(p,b,nb) mlreply(p,b,nb)
++#endif
++
++/* formal parameters to procedures are stored as a linked list
++ of argument names using the following simple structure:
++*/
++
++typedef struct PARG {
++ struct PARG *next; /* ptr to next linked argument */
++ char name[NVSIZE+1]; /* name of the argument */
++} PARG;
++
++/* UNDO definitions and types */
++
++typedef int OPTYPE; /* type of operation being recorded/played back */
++
++#define OP_CMND 1 /* beginning of command */
++#define OP_DELC 2 /* delete a single character */
++#define OP_INSC 3 /* insert a single character */
++#define OP_DSTR 4 /* delete a string of characters */
++#define OP_ISTR 5 /* insert a string of characters */
++#define OP_REPC 6 /* replace a character */
++#define OP_CPOS 7 /* set the cursor position */
++
++/* object to be undone! */
++
++typedef union OBJECT {
++ char obj_char; /* a character */
++ char obj_string[1]; /* many characters */
++ char *obj_sptr; /* a ptr to a character */
++} OBJECT;
++
++typedef struct UNDO_OBJ {
++ struct UNDO_OBJ *next; /* ptr to next undo object */
++ OPTYPE type; /* type of operation */
++ long line_num; /* line offset from buffer beginning */
++ int offset; /* offset into that line */
++ long count; /* repetitions? */
++ OBJECT undo_obj; /* object to be undone */
++} UNDO_OBJ;
++
++/*
++ * There is a window structure allocated for every active display window. The
++ * windows are kept in a big list, in top to bottom screen order, with the
++ * listhead at "wheadp". Each window contains its own values of dot and mark.
++ * The flag field contains some bits that are set by commands to guide
++ * redisplay. Although this is a bit of a compromise in terms of decoupling,
++ * the full blown redisplay is just too expensive to run for every input
++ * character.
+ */
-+
-+ #define PROGNAME "MicroEMACS"
-+ #define VERSION "3.12"
-+
-+ /* Machine/OS definitions */
-+ /* [Set one of these!!] */
-+
-+ #define AMIGA 0 /* AmigaDOS */
-+ #define AOSVS 0 /* Data General AOS/VS */
-+ #define AUX 0 /* Apple UNIX for Macintosh */
-+ #define AVIION 0 /* Data General AViiON */
-+ #define BSD 1 /* UNIX BSD 4.2 and ULTRIX */
-+ #define FINDER 0 /* Macintosh OS */
-+ #define HPUX8 0 /* HPUX HP 9000 ver 8 or less */
-+ #define HPUX9 0 /* HPUX HP 9000 ver 9 */
-+ #define MPE 0 /* HP MPE/XL */
-+ #define MSDOS 0 /* MS-DOS */
-+ #define WINNT 0 /* MS-Win NT */
-+ #define OS2 0 /* Microsoft or IBM OS/2 */
-+ #define SMOS 0 /* Supermax UNIX System V */
-+ #define SUN 0 /* SUN v4.0 */
-+ #define TOS 0 /* ST520, TOS */
-+ #define USG 0 /* UNIX system V */
-+ #define V7 0 /* V7 UNIX or Coherent or BSD4.2*/
-+ #define VMS 0 /* VAX/VMS */
-+ #define WMCS 0 /* Wicat's MCS */
-+ #define XENIX 0 /* IBM-PC SCO XENIX */
-+
-+ /* Compiler definitions */
-+ /* [Set one of these!!] */
-+ #define ALCYON 0 /* ALCYON Atari ST compiler */
-+ #define AZTEC 0 /* Aztec C 3.20e */
-+ #define DGC 0 /* Data General AOS/VS C... */
-+ #define DTL 0 /* DataLight C v3.12 */
-+ #define GCC 0 /* the GNU C compiler */
-+ #define IC 0 /* Rational Systems Instant C */
-+ #define LATTICE 0 /* Lattice 2.14 through 3.0 compilers */
-+ #define MSC 0 /* MicroSoft C compile version 3 thru 7 */
-+ #define MWC 0 /* Mark Williams C */
-+ #define TURBO 0 /* Turbo C and Borland C++ under MSDOS */
-+ #define UNIX 1 /* a standard UNIX compiler (cc) */
-+ #define ZTC 0 /* Zortech C/C++ 1.02 thru 2.10 under MSDOS */
-+
-+ /* Machine stack growth direction. */
-+ /* [Set this to 1 if your machine stack grows UP!!!] */
-+ /* data general mv/eclipse series stack grows up. */
-+ /* dec vax series stack grows down... got it??? */
-+
-+ #define STACK_GROWS_UP 0
-+
-+ /* Rational Systems, Inc DOS/16M dos extender allows MicroEMACS
-+ to run in Protected Mode under MSDOS. It has a few special
-+ requirements. */
-+
-+ #define DOS16M 0
-+
-+ /* Debugging options */
-+ #define RAMSIZE 0 /* dynamic RAM memory usage tracking */
-+ #define RAMSHOW 0 /* auto dynamic RAM reporting */
-+ #define RAMTRCK 0 /* send debug info to MALLOC.DAT */
-+
-+ /* Special keyboard/network definitions */
-+
-+ #define ATKBD 0 /* AT-style keyboard with F11, F12 & grey keys */
-+ #define WANGPC 0 /* WangPC - mostly escape sequences */
-+ #define VT100 1 /* Handle VT100 style keypad - NOT VMS. */
-+ #define KEYPAD 0 /* VMS - turn on and off application */
-+ /* keypad automatically */
-+ #define XONDATA 0 /* VMS - set to force /NOTTSYNC/NOHOSTSY */
-+ #define RMSIO 0 /* VMS - skip the rotten C runtime and */
-+ /* use RMS directly */
-+ #define OPTMEM 0 /* VMS 5.0 and up - use a less standard */
-+ /* but more efficient memory allocator */
-+
-+ /* Terminal Output definitions */
-+ /* [Set one of these!!] */
-+
-+ #define ANSI 0 /* ANSI escape sequences */
-+ #define DASHER 0 /* DG Dasher 2xx/4xx crts */
-+ #define DG10 0 /* Data General system/10 */
-+ #define FMR 0 /* Fujitsu FMR series driver */
-+ #define HP110 0 /* HP110 screen driver */
-+ #define HP150 0 /* HP150 screen driver */
-+ #define I55 0 /* IBM PS55 DOS J4.0/V */
-+ #define IBMPC 0 /* IBM-PC CGA/MONO/EGA/VGA drvr */
-+ #define MAC 0 /* Macintosh */
-+ #define NEC 0 /* NEC-9801VM driver */
-+ #define OS2NPM 0 /* OS/2 non-Presentation Mgr. */
-+ #define SMG 0 /* SMG library on VMS */
-+ #define ST52 0 /* Atari 520/1040ST screen */
-+ #define TERMCAP 1 /* Use TERMCAP */
-+ #define TIPC 0 /* TI Profesional PC driver */
-+ #define VT52 0 /* VT52 terminal (Zenith). */
-+ #define Z309 0 /* Zenith 100 PC family driver */
-+ #define WINNTCON 0 /* Windows NT console */
-+
-+ /* Windowing system style (pick one) */
-+
-+ #define WINDOW_TEXT 1 /* [default] Text mode */
-+ #define WINDOW_XVT 0 /* using XVT/any platform */
-+ #define WINDOW_MSWIN 0 /* MicroSoft Windows */
-+ #define WINDOW_MSWIN32 0 /* MicroSoft Windows 32 bit API */
-+ #define WINDOW_X 0 /* X/Unix */
-+
-+ /* Language text options (pick one) */
-+
-+ #define ENGLISH 1 /* [default] */
-+ #define FRENCH 0
-+ #define SPANISH 0
-+ #define GERMAN 0
-+ #define DUTCH 0
-+ #define PLATIN 0 /* Pig Latin */
-+ #define JAPAN 0
-+ #define LATIN 0 /* real Latin */
-+
-+ /* Configuration options */
-+
-+ #define TYPEAH 1 /* type ahead causes update to be skipped */
-+ #define DEBUGM 1 /* $debug triggers macro debugging */
-+ #define LOGFLG 0 /* send all executed commands to EMACS.LOG */
-+ #define VISMAC 0 /* update display during keyboard macros */
-+ #define CTRLZ 0 /* add a ^Z at end of files under MSDOS only */
-+ #define CLEAN 0 /* de-alloc memory on exit */
-+ #define CALLED 0 /* is emacs a called subroutine? or stand alone */
-+
-+ #define REVSTA 1 /* Status line appears in reverse video */
-+ #define COLOR 1 /* color commands and windows */
-+
-+ #define FILOCK 1 /* file locking under unix BSD 4.2 */
-+ #define ISRCH 1 /* Incremental searches like ITS EMACS */
-+ #define FLABEL 0 /* function key label code [HP150] */
-+ #define CRYPT 1 /* file encryption enabled? */
-+ #define MAGIC 1 /* include regular expression matching? */
-+ #define MOUSE 1 /* Include routines for mouse actions */
-+ #define NOISY 1 /* Use a fancy BELL if it exists */
-+ #define CTAGS 1 /* include vi-like tagging? */
-+ #define SPEECH 0 /* spoken EMACS, for the sight impared [not ready] */
-+ #define VARARG 1 /* use varargs.h for mlwrite() */
-+
-+ /* Character set options */
-+ /* [Set one of these!!] */
-+ #define ASCII 1 /* always using ASCII char sequences for now */
-+ #define EBCDIC 0 /* later IBM mainfraim versions will use EBCDIC */
-+
-+ /* handle constant and voids properly */
-+
-+ #if VMS
-+ #define CONST readonly
-+ #define VOID void
-+ #define NOSHARE noshare
-+ #else
-+ #if AOSVS
-+ #define CONST $shared $align(1) /* fake a const */
-+ #define VOID
-+ #define NOSHARE $low32k $align(1) /* attempt to optimize read/write vars. */
-+ #else
-+ #if __STDC__ || MSC || TURBO || DTL || GCC
-+ #define CONST const
-+ #define VOID void
-+ #define NOSHARE
-+ #else
-+ #define CONST
-+ #define VOID
-+ #define NOSHARE
-+ #endif
-+ #endif
-+ #endif
-+
-+ /* System dependant library redefinitions, structures and includes */
-+
-+ /* multibyte character support? */
-+
-+ #if NEC || FMR || I55
-+ #define DBCS 1 /* double byte character sets enabled */
-+ #define INSDEL 1 /* use insert/delete line display optimizations */
-+
-+ /* define DBCS prefix bytes */
-+ #define is2char(ch) (((ch&0xff) >= 0x81 && (ch&0xff) <= 0x9f) || ((ch&0xff) >=0xe0 && (ch&0xff) <= 0xfc))
-+
-+ #else
-+ #define DBCS 0
-+ #define INSDEL 0
-+ #endif
-+
-+ /* Prototypes in use? */
-+
-+ #if MSC || TURBO || IC || DTL || VMS || GCC || ZTC
-+ #define PROTO 1
-+ #else
-+ #define PROTO 0
-+ #endif
-+
-+ /* the following define allows me to initialize unions...
-+ otherwise we make them structures (like the keybinding table) */
-+
-+ #if __STDC__ || MSC || TURBO || IC || DTL || ZTC
-+ #define ETYPE union
-+ #else
-+ #define ETYPE struct
-+ #endif
-+
-+ /* Instant C can't do stat()s. Arrrg. No file locking for you */
-+ #if IC && MSDOS
-+ #undef FILOCK
-+ #define FILOCK 0
-+ #endif
-+
-+ /* Mark Williams/Atari has no standard or varargs or directory functions */
-+ #if TOS & MWC
-+ #undef VARARG
-+ #define VARARG 0
-+ #undef FILOCK
-+ #define FILOCK 0
-+ #endif
-+
-+ /* MS-Windows */
-+
-+ #if WINNT || WINDOW_MSWIN || WINDOW_MSWIN32
-+ #if WINDOW_MSWIN32
-+ #undef WINDOW_MSWIN
-+ #define WINDOW_MSWIN 1
-+ #endif
-+ #if WINDOW_MSWIN && WINNT
-+ #undef WINDOW_MSWIN32
-+ #define WINDOW_MSWIN32 1
-+ #endif
-+ #undef VOID /* windows.h will wind up defining this */
-+ #include <windows.h> /* --------- Huge include file here !!! ---------*/
-+ #if WINNTCON
-+ #include <wincon.h>
-+ #include <stdio.h>
-+ #include <dos.h>
-+ #endif
-+
-+ #undef NEAR
-+ #define NEAR
-+ #define DNEAR
-+ #if MSC || IC
-+ #undef CDECL
-+ #define CDECL __cdecl
-+ #define DUMMYSZ 1 /* dummy size for unsized extern arrays to avoid
-+ silly DGROUP fixup */
-+ #else
-+ #if TURBO
-+ #define DUMMYSZ /* nothing */
-+ #else
-+ #define CDECL _cdecl /* ZTC */
-+ #define DUMMYSZ /* nothing */
-+ #endif
-+ #endif
-+
-+ #if WINNT
-+ #define EXPORT /* Windows NT doesn't like this */
-+ #endif
-+
-+ #if WINDOW_MSWIN
-+ #undef TYPEAH
-+ #define TYPEAH 0 /* typeahead is handled at the term driver level */
-+ #undef CALLED
-+ #define CALLED 1 /* under MS Windows, "main" resides in the sys driver */
-+ #if MSC
-+ #define EXPORT __export
-+ #else
-+ #define EXPORT _export /* Fine for TURBO and ZTC */
-+ #endif
-+ #endif
-+ #else
-+
-+ /* neither Windows NT nor MS-Windows */
-+
-+ #define DUMMYSZ /* nothing */
-+
-+ #if MSDOS & (TURBO | MSC | TIPC)
-+ #define NEAR
-+ #define DNEAR
-+ #define PASCAL pascal
-+ #define CDECL cdecl
-+ #else
-+ #if MSDOS & ZTC
-+ #define NEAR
-+ #define DNEAR
-+ #define PASCAL _pascal
-+ #define CDECL _cdecl
-+ #else
-+ #define NEAR
-+ #define DNEAR
-+ #define PASCAL
-+ #define CDECL
-+ #endif
-+ #endif
-+
-+ #endif
-+
-+ #if TURBO
-+ #include <dos.h>
-+ #include <mem.h>
-+ #undef peek
-+ #undef poke
-+ #define peek(a,b,c,d) movedata(a,b,FP_SEG(c),FP_OFF(c),d)
-+ #define poke(a,b,c,d) movedata(FP_SEG(c),FP_OFF(c),a,b,d)
-+ #endif
-+
-+ #if IC
-+ #include <dos.h>
-+ #undef peek
-+ #undef poke
-+ #define peek(a,b,c,d) movedata(a,b,FP_SEG(c),FP_OFF(c),d)
-+ #define poke(a,b,c,d) movedata(FP_SEG(c),FP_OFF(c),a,b,d)
-+ #endif
-+
-+ #if LATTICE & MSDOS
-+ /* you may have to remove this one definition with LATTICE version
-+ 3.2 and above */
-+ #define unsigned
-+ #endif
-+
-+ #if IC
-+ #define inp inportb
-+ #define outp outportb
-+ #define intdos(a, b) int86(33, a, b)
-+ #endif
-+
-+ #if AZTEC
-+ #undef putc
-+ #undef getc
-+ #if MSDOS
-+ #define getc a1getc
-+ #define int86 sysint
-+ #define intdos(a, b) sysint(33, a, b)
-+ #define inp inportb
-+ #define outp outportb
-+ #else
-+ #define getc agetc
-+ #endif
-+ #define putc aputc
-+
-+ struct XREG {
-+ unsigned ax,bx,cx,dx,si,di,ds,es;
-+ };
-+
-+ struct HREG {
-+ char al,ah,bl,bh,cl,ch,dl,dh,d1,d2,e1,e2;
-+ };
-+
-+ union REGS {
-+ struct XREG x;
-+ struct HREG h;
-+ };
-+
-+ struct SREGS {
-+ unsigned cs, ss, ds, es;
-+ };
-+ #endif
-+
-+ #if MSDOS & DTL
-+ #include <dos.h>
-+ #endif
-+
-+ #if MSDOS & MWC
-+ #include <dos.h>
-+ #define int86(a, b, c) intcall(b, c, a)
-+ #define intdos(a, b) intcall(a, b, DOSINT)
-+ #define inp(a) in(a)
-+ #define outp(a, b) out(a, b)
-+ #define movmem(a, b, c) memcpy(b, a, c)
-+
-+ struct XREG {
-+ unsigned int ax,bx,cx,dx,si,di,ds,es,flags;
-+ };
-+
-+ struct HREG {
-+ char al,ah,bl,bh,cl,ch,dl,dh;
-+ unsigned int ds,es,flags;
-+ };
-+
-+ union REGS {
-+ struct XREG x;
-+ struct HREG h;
-+ };
-+ #endif
-+
-+ #if MSDOS & MSC
-+ #include <dos.h>
-+ #include <memory.h>
-+ #define peek(a,b,c,d) movedata(a,b,FP_SEG(c),FP_OFF(c),d)
-+ #define poke(a,b,c,d) movedata(FP_SEG(c),FP_OFF(c),a,b,d)
-+ #define movmem(a, b, c) memcpy(b, a, c)
-+ #endif
-+
-+ #if MSDOS & LATTICE
-+ #undef CPM
-+ #undef LATTICE
-+ #include <dos.h>
-+ #undef CPM
-+ #endif
-+
-+ /* System V doesn't name this the same as others */
-+ #if USG | AUX | SUN | (OS2 & MSC)
-+ #define movmem(a, b, c) memcpy(b, a, c)
-+ #endif
-+
-+ /* this keeps VMS happy */
-+ #if VMS
-+ #define getname xgetname
-+ #define unlink(a) delete(a)
-+ #endif
-+
-+ /* some options for AOS/VS */
-+ #if AOSVS
-+ #define ORMDNI 1
-+ #endif
-+
-+ /* define some ability flags */
-+
-+ #if (IBMPC | Z309 | FMR | TIPC) & !(WINDOW_MSWIN | WINDOW_MSWIN32)
-+ #define MEMMAP 1
-+ #else
-+ #define MEMMAP 0
-+ #endif
-+
-+ #if MSDOS | WINNT | OS2 | V7 | USG | AUX | SMOS | HPUX8 | HPUX9 | BSD | (TOS & MWC) | WMCS | SUN | MPE
-+ #define ENVFUNC 1
-+ #else
-+ #define ENVFUNC 0
-+ #endif
-+
-+ #if AUX
-+ #define RETCHAR '\n'
-+ #else
-+ #define RETCHAR '\r'
-+ #endif
-+
-+ #if MPE
-+ #define DIRSEPSTR "."
-+ #define DIRSEPCHAR '.'
-+ #else
-+ #if TOS || MSDOS || WINNT || OS2
-+ #define DIRSEPSTR "\\"
-+ #define DIRSEPCHAR '\\'
-+ #else
-+ #define DIRSEPSTR "/"
-+ #define DIRSEPCHAR '/'
-+ #endif
-+ #endif
-+
-+ #define DRIVESEPCHAR ':'
-+
-+ #if VARARG
-+ #if (GCC == 0) && (USG || AUX || BSD || SUN || XENIX || HPUX8 || HPUX9 || AVIION || MPE)
-+ #define VARG 1
-+ #define SARG 0
-+ #include <varargs.h>
-+ #else
-+ #define VARG 0
-+ #define SARG 1
-+ #include <stdarg.h>
-+ #endif
-+ #endif
-+
-+ #if ZTC
-+ #include <dos.h>
-+ #define movmem(a, b, c) memcpy(b, a, c)
-+ #endif
-+
-+ /* Emacs global flag bit definitions (for gflags) */
-+
-+ #define GFREAD 1 /* read first file in at startup */
-+ #define GFSDRAW 2 /* suppress a screen redraw */
-+
-+ /* internal constants */
-+
-+ #define NBINDS 300 /* max # of bound keys */
-+ #if AOSVS | VMS | WINNT | SUN | BSD | V7 | ZENIX | OS2
-+ #define NFILEN 256
-+ #else
-+ #define NFILEN 80 /* # of bytes, file name */
-+ #endif
-+ #define NBUFN 32 /* # of bytes, buffer name */
-+ #define NLINE 256 /* # of bytes, input line */
-+ #define NSTRING 128 /* # of bytes, string buffers */
-+ #define NKBDM 256 /* # of strokes, keyboard macro */
-+ #define NPAT 128 /* # of bytes, pattern */
-+ #define HUGE 1000 /* Huge number */
-+ #define NLOCKS 256 /* max # of file locks active */
-+ #define NCOLORS 16 /* number of supported colors */
-+ #define KBLOCK 250 /* sizeof kill buffer chunks */
-+ #define NRING 16 /* # of buffers in kill ring */
-+ #define NBLOCK 16 /* line block chunk size */
-+ #define NVSIZE 10 /* max #chars in a var name */
-+ #define NMARKS 16 /* number of marks */
-+
-+ #define CTRL 0x0100 /* Control flag, or'ed in */
-+ #define META 0x0200 /* Meta flag, or'ed in */
-+ #define CTLX 0x0400 /* ^X flag, or'ed in */
-+ #define SPEC 0x0800 /* special key (function keys) */
-+ #define MOUS 0x1000 /* alternative input device (mouse) */
-+ #define SHFT 0x2000 /* shifted (for function keys) */
-+ #define ALTD 0x4000 /* ALT key... */
-+ #define MENU MOUS+SPEC /* menu selection (WINDOW_MSWIN) */
-+
-+ #define BINDNUL 0 /* not bound to anything */
-+ #define BINDFNC 1 /* key bound to a function */
-+ #define BINDBUF 2 /* key bound to a buffer */
-+
-+ #ifdef FALSE
-+ #undef FALSE
-+ #endif
-+ #ifdef TRUE
-+ #undef TRUE
-+ #endif
-+
-+ #define FALSE 0 /* False, no, bad, etc. */
-+ #define TRUE 1 /* True, yes, good, etc. */
-+ #define ABORT 2 /* Death, ^G, abort, etc. */
-+ #define FAILED 3 /* not-quite fatal false return */
-+
-+ #define STOP 0 /* keyboard macro not in use */
-+ #define PLAY 1 /* playing */
-+ #define RECORD 2 /* recording */
-+
-+ /* Completion types */
-+
-+ #define CMP_BUFFER 0
-+ #define CMP_COMMAND 1
-+ #define CMP_FILENAME 2
-+
-+ /* Directive definitions */
-+
-+ #define DIF 0
-+ #define DELSE 1
-+ #define DENDIF 2
-+ #define DGOTO 3
-+ #define DRETURN 4
-+ #define DENDM 5
-+ #define DWHILE 6
-+ #define DENDWHILE 7
-+ #define DBREAK 8
-+ #define DFORCE 9
-+
-+ #define NUMDIRS 10
-+
-+ /*
-+ * PTBEG, PTEND, FORWARD, and REVERSE are all toggle-able values for
-+ * routines that need directions.
-+ */
-+ #define PTBEG 0 /* Leave the point at the beginning on search */
-+ #define PTEND 1 /* Leave the point at the end on search */
-+ #define FORWARD 0 /* do things in a forward direction */
-+ #define REVERSE 1 /* do things in a backwards direction */
-+
-+ #define FIOSUC 0 /* File I/O, success. */
-+ #define FIOFNF 1 /* File I/O, file not found. */
-+ #define FIOEOF 2 /* File I/O, end of file. */
-+ #define FIOERR 3 /* File I/O, error. */
-+ #define FIOMEM 4 /* File I/O, out of memory */
-+ #define FIOFUN 5 /* File I/O, eod of file/bad line*/
-+ #define FIODEL 6 /* Can't delete/rename file */
-+
-+ #if WINDOW_MSWIN
-+ /* values for the fbusy flag */
-+ #define FREADING 1 /* file read in progress */
-+ #define FWRITING 2 /* file write in progress */
-+ /* if no file activity, the value FALSE is used */
-+ #endif
-+
-+ #define CFCPCN 0x0001 /* Last command was C-P, C-N */
-+ #define CFKILL 0x0002 /* Last command was a kill */
-+ #define CFSRCH 0x0004 /* last command was a search */
-+ #define CFYANK 0x0008 /* last command was a yank */
-+
-+ #define SRNORM 0 /* end past, begin front */
-+ #define SRBEGIN 1 /* always at front */
-+ #define SREND 2 /* always one past end */
-+
-+ #define BELL 0x07 /* a bell character */
-+ #define TAB 0x09 /* a tab character */
-+
-+ #if V7 | USG | AUX | SMOS | HPUX8 | HPUX9 | BSD | SUN | XENIX | AVIION
-+ #define PATHCHR ':'
-+ #else
-+ #if WMCS || MPE
-+ #define PATHCHR ','
-+ #else
-+ #define PATHCHR ';'
-+ #endif
-+ #endif
-+
-+ #define INTWIDTH sizeof(int) * 3
-+ #define LONGWIDTH sizeof(long) * 3
-+
-+ /* Macro argument token types */
-+
-+ #define TKNUL 0 /* end-of-string */
-+ #define TKARG 1 /* interactive argument */
-+ #define TKBUF 2 /* buffer argument */
-+ #define TKVAR 3 /* user variables */
-+ #define TKENV 4 /* environment variables */
-+ #define TKFUN 5 /* function.... */
-+ #define TKDIR 6 /* directive */
-+ #define TKLBL 7 /* line label */
-+ #define TKLIT 8 /* numeric literal */
-+ #define TKSTR 9 /* quoted string literal */
-+ #define TKCMD 10 /* command name */
-+
-+ /* Internal defined functions */
-+
-+ #define nextab(a) (a - (a % tabsize)) + tabsize
-+
-+ /* DIFCASE represents the integer difference between upper
-+ and lower case letters. It is an xor-able value, which is
-+ fortunate, since the relative positions of upper to lower
-+ case letters is the opposite of ascii in ebcdic.
++typedef struct EWINDOW {
++ struct EWINDOW *w_wndp; /* Next window */
++ struct BUFFER *w_bufp; /* Buffer displayed in window */
++ struct LINE *w_linep; /* Top line in the window */
++ struct LINE *w_dotp; /* Line containing "." */
++ short w_doto; /* Byte offset for "." */
++ struct LINE *w_markp[NMARKS]; /* Line containing "mark" */
++ short w_marko[NMARKS]; /* Byte offset for "mark" */
++ char w_toprow; /* Origin 0 top row of window */
++ char w_ntrows; /* # of rows of text in window */
++ char w_force; /* If NZ, forcing row. */
++ char w_flag; /* Flags. */
++#if COLOR
++ char w_fcolor; /* current forground color */
++ char w_bcolor; /* current background color */
++#endif
++ int w_fcol; /* first column displayed */
++} EWINDOW;
++
++#define WFFORCE 0x01 /* Window needs forced reframe */
++#define WFMOVE 0x02 /* Movement from line to line */
++#define WFEDIT 0x04 /* Editing within a line */
++#define WFHARD 0x08 /* Better to a full display */
++#define WFMODE 0x10 /* Update mode line. */
++#define WFCOLR 0x20 /* Needs a color change */
++
++/* This structure holds the information about each line appearing on the
++ * video display. The redisplay module uses an array of virtual display
++ * lines. On systems that do not have direct access to display memory,
++ * there is also an array of physical display lines used to minimize
++ * video updating. In most cases, these two arrays are unique. If
++ * WINDOW_MSWIN is 1, there is a pair of such arrays in each SCREEN
++ * structure.
+ */
-+
-+ #if ASCII
-+ #define DIFCASE 0x20
-+ #else
-+ #define DIFCASE 0x40
-+ #endif
-+
-+ /* Dynamic RAM tracking and reporting redefinitions */
-+
-+ #if RAMSIZE
-+ #define malloc allocate
-+ #define free release
-+ #else
-+ #if VMS & OPTMEM
-+ #define malloc VAXC$MALLOC_OPT
-+ #define free VAXC$FREE_OPT
-+ #define calloc VAXC$CALLOC_OPT
-+ #define realloc VAXC$REALLOC_OPT
-+ #define cfree VAXC$CFREE_OPT
-+ #endif
-+ #endif
-+
-+ /* under MS Windows, we use dialog boxes to prompt the user for filenames */
-+ #if WINDOW_MSWIN
-+ #define FILENAMEREPLY(p,b,nb) filenamedlg(p,b,nb,TRUE)
-+ #else
-+ #define FILENAMEREPLY(p,b,nb) mlreply(p,b,nb)
-+ #endif
-+
-+ /*
-+ * There is a window structure allocated for every active display window. The
-+ * windows are kept in a big list, in top to bottom screen order, with the
-+ * listhead at "wheadp". Each window contains its own values of dot and mark.
-+ * The flag field contains some bits that are set by commands to guide
-+ * redisplay. Although this is a bit of a compromise in terms of decoupling,
-+ * the full blown redisplay is just too expensive to run for every input
-+ * character.
-+ */
-+ typedef struct WINDOW {
-+ struct WINDOW *w_wndp; /* Next window */
-+ struct BUFFER *w_bufp; /* Buffer displayed in window */
-+ struct LINE *w_linep; /* Top line in the window */
-+ struct LINE *w_dotp; /* Line containing "." */
-+ short w_doto; /* Byte offset for "." */
-+ struct LINE *w_markp[NMARKS]; /* Line containing "mark" */
-+ short w_marko[NMARKS]; /* Byte offset for "mark" */
-+ char w_toprow; /* Origin 0 top row of window */
-+ char w_ntrows; /* # of rows of text in window */
-+ char w_force; /* If NZ, forcing row. */
-+ char w_flag; /* Flags. */
-+ #if COLOR
-+ char w_fcolor; /* current forground color */
-+ char w_bcolor; /* current background color */
-+ #endif
-+ int w_fcol; /* first column displayed */
-+ } WINDOW;
-+
-+ #define WFFORCE 0x01 /* Window needs forced reframe */
-+ #define WFMOVE 0x02 /* Movement from line to line */
-+ #define WFEDIT 0x04 /* Editing within a line */
-+ #define WFHARD 0x08 /* Better to a full display */
-+ #define WFMODE 0x10 /* Update mode line. */
-+ #define WFCOLR 0x20 /* Needs a color change */
-+
-+ /* This structure holds the information about each line appearing on the
-+ * video display. The redisplay module uses an array of virtual display
-+ * lines. On systems that do not have direct access to display memory,
-+ * there is also an array of physical display lines used to minimize
-+ * video updating. In most cases, these two arrays are unique. If
-+ * WINDOW_MSWIN is 1, there is a pair of such arrays in each SCREEN
-+ * structure.
-+ */
-+
-+ typedef struct VIDEO {
-+ int v_flag; /* Flags */
-+ #if COLOR
-+ int v_fcolor; /* current forground color */
-+ int v_bcolor; /* current background color */
-+ int v_rfcolor; /* requested forground color */
-+ int v_rbcolor; /* requested background color */
-+ #endif
-+ int v_left; /* left edge of reverse video */
-+ int v_right; /* right right of reverse video */
-+ #if INSDEL && MEMMAP == 0
-+ int v_rline; /* requested screen line # */
-+ #endif
-+ char v_text[1]; /* Screen data. */
-+ } VIDEO;
-+
-+ #define VFNEW 0x0001 /* contents not meaningful yet */
-+ #define VFCHG 0x0002 /* Changed flag */
-+ #define VFEXT 0x0004 /* extended (beyond column 80) */
-+ #define VFCOL 0x0008 /* color change requested */
-+
-+ /*
-+ * This structure holds the information about each separate "screen"
-+ * within the current editing session. On a character based system, these
-+ * screens overlay each other, and can individually be brought to front.
-+ * On a windowing system like MicroSoft Windows 3.0, OS/2, the Macintosh,
-+ * Intuition, Sunview or X-windows, each screen is represented in an OS
-+ * window. The terminolgy is wrong in emacs.....
-+ *
-+ * EMACS The outside World
-+ * screen window
-+ * window pane
-+ */
-+
-+ typedef struct SCREEN {
-+ struct SCREEN *s_next_screen; /* link to next screen in list */
-+ WINDOW *s_first_window; /* head of linked list of windows */
-+ WINDOW *s_cur_window; /* current window in this screen */
-+ char *s_screen_name; /* name of the current window */
-+ short s_roworg; /* row origin of stored screen */
-+ short s_colorg; /* column origin of stored screen */
-+ short s_nrow; /* row width of stored screen */
-+ short s_ncol; /* column origin of stored screen */
-+ #if WINDOW_MSWIN
-+ VIDEO **s_virtual; /* virtual screen contents */
-+ VIDEO **s_physical; /* physical screen contents */
-+ HWND s_drvhandle; /* handle for the "term" driver */
-+ #endif
-+ } SCREEN;
-+
-+ /*
-+ * Text is kept in buffers. A buffer header, described below, exists for every
-+ * buffer in the system. The buffers are kept in a big list, so that commands
-+ * that search for a buffer by name can find the buffer header. There is a
-+ * safe store for the dot and mark in the header, but this is only valid if
-+ * the buffer is not being displayed (that is, if "b_nwnd" is 0). The text for
-+ * the buffer is kept in a circularly linked list of lines, with a pointer to
-+ * the header line in "b_linep". Buffers may be "Inactive" which means the
-+ * files associated with them have not been read in yet. These get read in
-+ * at "use buffer" time.
-+ */
-+ typedef struct BUFFER {
-+ struct BUFFER *b_bufp; /* Link to next BUFFER */
-+ struct LINE *b_dotp; /* Link to "." LINE structure */
-+ short b_doto; /* Offset of "." in above LINE */
-+ struct LINE *b_markp[NMARKS]; /* The same as the above two, */
-+ short b_marko[NMARKS]; /* but for the "mark" */
-+ int b_fcol; /* first col to display */
-+ struct LINE *b_linep; /* Link to the header LINE */
-+ struct LINE *b_topline; /* Link to narrowed top text */
-+ struct LINE *b_botline; /* Link to narrowed bottom text */
-+ char b_active; /* window activated flag */
-+ char b_nwnd; /* Count of windows on buffer */
-+ char b_exec; /* how many active executions */
-+ char b_flag; /* Flags */
-+ int b_mode; /* editor mode of this buffer */
-+ char b_fname[NFILEN]; /* File name */
-+ char b_bname[NBUFN]; /* Buffer name */
-+ #if CRYPT
-+ char b_key[NPAT]; /* current encrypted key */
-+ #endif
-+ } BUFFER;
-+
-+ #define BFINVS 0x01 /* Internal invisable buffer */
-+ #define BFCHG 0x02 /* Changed since last write */
-+ #define BFTRUNC 0x04 /* buffer was truncated when read */
-+ #define BFNAROW 0x08 /* buffer has been narrowed */
-+
-+ /* mode flags */
-+ #define NUMMODES 10 /* # of defined modes */
-+
-+ #define MDWRAP 0x0001 /* word wrap */
-+ #define MDCMOD 0x0002 /* C indentation and fence match*/
-+ #define MDSPELL 0x0004 /* spell error parsing */
-+ #define MDEXACT 0x0008 /* Exact matching for searches */
-+ #define MDVIEW 0x0010 /* read-only buffer */
-+ #define MDOVER 0x0020 /* overwrite mode */
-+ #define MDMAGIC 0x0040 /* regular expresions in search */
-+ #define MDCRYPT 0x0080 /* encrytion mode active */
-+ #define MDASAVE 0x0100 /* auto-save mode */
-+ #define MDREPL 0x0200 /* replace mode */
-+
-+ /*
-+ * The starting position of a region, and the size of the region in
-+ * characters, is kept in a region structure. Used by the region commands.
-+ */
-+ typedef struct {
-+ struct LINE *r_linep; /* Origin LINE address. */
-+ short r_offset; /* Origin LINE offset. */
-+ long r_size; /* Length in characters. */
-+ } REGION;
-+
-+ /*
-+ * All text is kept in circularly linked lists of "LINE" structures. These
-+ * begin at the header line (which is the blank line beyond the end of the
-+ * buffer). This line is pointed to by the "BUFFER". Each line contains a the
-+ * number of bytes in the line (the "used" size), the size of the text array,
-+ * and the text. The end of line is not stored as a byte; it's implied.
-+ */
-+ typedef struct LINE {
-+ struct LINE *l_fp; /* Link to the next line */
-+ struct LINE *l_bp; /* Link to the previous line */
-+ short l_size; /* Allocated size */
-+ short l_used; /* Used size */
-+ char l_text[1]; /* A bunch of characters. */
-+ } LINE;
-+
-+ #define lforw(lp) ((lp)->l_fp)
-+ #define lback(lp) ((lp)->l_bp)
-+ #define lgetc(lp, n) ((lp)->l_text[(n)])
-+ #define lputc(lp, n, c) ((lp)->l_text[(n)]=(c))
-+ #define lused(lp) ((lp)->l_used)
-+ #define lsize(lp) ((lp)->l_size)
-+ #define ltext(lp) ((lp)->l_text)
-+
-+ /*
-+ * The editor communicates with the display using a high level interface. A
-+ * "TERM" structure holds useful variables, and indirect pointers to routines
-+ * that do useful operations. The low level get and put routines are here too.
-+ * This lets a terminal, in addition to having non standard commands, have
-+ * funny get and put character code too. The calls might get changed to
-+ * "termp->t_field" style in the future, to make it possible to run more than
-+ * one terminal type.
-+ */
-+ #if PROTO
-+ typedef struct {
-+ short t_mrow; /* max number of rows allowable */
-+ short t_nrow; /* current number of rows used */
-+ short t_mcol; /* max Number of columns. */
-+ short t_ncol; /* current Number of columns. */
-+ short t_roworg; /* origin row (normally zero) */
-+ short t_colorg; /* origin column (normally zero)*/
-+ short t_margin; /* min margin for extended lines*/
-+ short t_scrsiz; /* size of scroll region " */
-+ int t_pause; /* # times thru update to pause */
-+ int (PASCAL NEAR *t_open)(void); /* Open terminal at the start.*/
-+ int (PASCAL NEAR *t_close)(void); /* Close terminal at end. */
-+ int (PASCAL NEAR *t_kopen)(void); /* Open keyboard */
-+ int (PASCAL NEAR *t_kclose)(void); /* Close keyboard */
-+ int (PASCAL NEAR *t_getchar)(void); /* Get character from keyboard. */
-+ int (PASCAL NEAR *t_putchar)(int); /* Put character to display.*/
-+ int (PASCAL NEAR *t_flush)(void); /* Flush output buffers. */
-+ int (PASCAL NEAR *t_move)(int, int);/* Move the cursor, origin 0.*/
-+ int (PASCAL NEAR *t_eeol)(void); /* Erase to end of line. */
-+ int (PASCAL NEAR *t_eeop)(void); /* Erase to end of page. */
-+ int (PASCAL NEAR *t_clrdesk)(void); /* Clear the page totally */
-+ int (PASCAL NEAR *t_beep)(void); /* Beep. */
-+ int (PASCAL NEAR *t_rev)(int); /* set reverse video state */
-+ int (PASCAL NEAR *t_rez)(char *); /* change screen resolution */
-+ #if COLOR
-+ int (PASCAL NEAR *t_setfor)(int); /* set forground color */
-+ int (PASCAL NEAR *t_setback)(int); /* set background color */
-+ #endif
-+ #if INSDEL
-+ int (PASCAL NEAR *t_insline)(int); /* insert a screen line */
-+ int (PASCAL NEAR *t_delline)(int); /* delete a screen line */
-+ #endif
-+ #if WINDOW_MSWIN
-+ int (PASCAL NEAR *t_sleep)(int); /* go to sleep for a while */
-+ int (PASCAL NEAR *t_newscr)(SCREEN *); /* create new screen display */
-+ int (PASCAL NEAR *t_delscr)(SCREEN *); /* destroy screen display */
-+ int (PASCAL NEAR *t_selscr)(SCREEN *); /* select screen display */
-+ int (PASCAL NEAR *t_sizscr)(SCREEN *); /* resize screen display */
-+ int (PASCAL NEAR *t_topscr)(SCREEN *); /* bring screen to top */
-+ #endif
-+ } TERM;
-+ #else /* TERM structure, no prototyping.*/
-+
-+ typedef struct {
-+ short t_mrow; /* max number of rows allowable */
-+ short t_nrow; /* current number of rows used */
-+ short t_mcol; /* max Number of columns. */
-+ short t_ncol; /* current Number of columns. */
-+ short t_roworg; /* origin row (normally zero) */
-+ short t_colorg; /* origin column (normally zero)*/
-+ short t_margin; /* min margin for extended lines*/
-+ short t_scrsiz; /* size of scroll region " */
-+ int t_pause; /* # times thru update to pause */
-+ int (PASCAL NEAR *t_open)(); /* Open terminal at the start. */
-+ int (PASCAL NEAR *t_close)(); /* Close terminal at end. */
-+ int (PASCAL NEAR *t_kopen)(); /* Open keyboard */
-+ int (PASCAL NEAR *t_kclose)(); /* close keyboard */
-+ int (PASCAL NEAR *t_getchar)(); /* Get character from keyboard. */
-+ int (PASCAL NEAR *t_putchar)(); /* Put character to display. */
-+ int (PASCAL NEAR *t_flush)(); /* Flush output buffers. */
-+ int (PASCAL NEAR *t_move)(); /* Move the cursor, origin 0. */
-+ int (PASCAL NEAR *t_eeol)(); /* Erase to end of line. */
-+ int (PASCAL NEAR *t_eeop)(); /* Erase to end of page. */
-+ int (PASCAL NEAR *t_clrdesk)(); /* Clear the page totally */
-+ int (PASCAL NEAR *t_beep)(); /* Beep. */
-+ int (PASCAL NEAR *t_rev)(); /* set reverse video state */
-+ int (PASCAL NEAR *t_rez)(); /* change screen resolution */
-+ #if COLOR
-+ int (PASCAL NEAR *t_setfor)(); /* set forground color */
-+ int (PASCAL NEAR *t_setback)(); /* set background color */
-+ #endif
-+ #if INSDEL
-+ int (PASCAL NEAR *t_insline)(); /* insert a screen line */
-+ int (PASCAL NEAR *t_delline)(); /* delete a screen line */
-+ #endif
-+ #if WINDOW_MSWIN
-+ int (PASCAL NEAR *t_sleep)(); /* go to sleep for a while */
-+ int (PASCAL NEAR *t_newscr)(); /* create new screen display */
-+ int (PASCAL NEAR *t_delscr)(); /* destroy screen display */
-+ int (PASCAL NEAR *t_selscr)(); /* select screen display */
-+ int (PASCAL NEAR *t_sizscr)(); /* resize screen display */
-+ int (PASCAL NEAR *t_topscr)(); /* bring screen to top */
-+ #endif
-+ } TERM;
-+ #endif
-+
-+
-+ /* TEMPORARY macros for terminal I/O (to be placed in a machine
-+ dependant place later) */
-+
-+ #define TTopen (*term.t_open)
-+ #define TTclose (*term.t_close)
-+ #define TTkopen (*term.t_kopen)
-+ #define TTkclose (*term.t_kclose)
-+ #define TTgetc (*term.t_getchar)
-+ #define TTputc (*term.t_putchar)
-+ #define TTflush (*term.t_flush)
-+ #define TTmove (*term.t_move)
-+ #define TTeeol (*term.t_eeol)
-+ #define TTeeop (*term.t_eeop)
-+ #define TTclrdesk (*term.t_clrdesk)
-+ #define TTbeep (*term.t_beep)
-+ #define TTrev (*term.t_rev)
-+ #define TTrez (*term.t_rez)
-+ #if COLOR
-+ #define TTforg (*term.t_setfor)
-+ #define TTbacg (*term.t_setback)
-+ #endif
-+
-+ /* Structure for the table of current key bindings */
-+
-+ ETYPE EPOINTER {
-+ int (PASCAL NEAR *fp)(); /* C routine to invoke */
-+ BUFFER *buf; /* buffer to execute */
-+ };
-+
-+ typedef struct {
-+ short k_code; /* Key code */
-+ short k_type; /* binding type (C function or EMACS buffer) */
-+ ETYPE EPOINTER k_ptr; /* ptr to thing to execute */
-+ } KEYTAB;
-+
-+ /* structure for the name binding table */
-+
-+ typedef struct {
-+ char *n_name; /* name of function key */
-+ int (PASCAL NEAR *n_func)(); /* function name is bound to */
-+ } NBIND;
-+
-+ /* The editor holds deleted text chunks in the KILL buffer. The
-+ kill buffer is logically a stream of ascii characters, however
-+ due to its unpredicatable size, it gets implemented as a linked
-+ list of chunks. (The d_ prefix is for "deleted" text, as k_
-+ was taken up by the keycode structure)
++
++typedef struct VIDEO {
++ int v_flag; /* Flags */
++#if COLOR
++ int v_fcolor; /* current forground color */
++ int v_bcolor; /* current background color */
++ int v_rfcolor; /* requested forground color */
++ int v_rbcolor; /* requested background color */
++#endif
++ int v_left; /* left edge of reverse video */
++ int v_right; /* right right of reverse video */
++#if INSDEL && MEMMAP == 0
++ int v_rline; /* requested screen line # */
++#endif
++ char v_text[1]; /* Screen data. */
++} VIDEO;
++
++#define VFNEW 0x0001 /* contents not meaningful yet */
++#define VFCHG 0x0002 /* Changed flag */
++#define VFEXT 0x0004 /* extended (beyond column 80) */
++#define VFCOL 0x0008 /* color change requested */
++
++/*
++ * This structure holds the information about each separate "screen"
++ * within the current editing session. On a character based system, these
++ * screens overlay each other, and can individually be brought to front.
++ * On a windowing system like MicroSoft Windows 3.0, OS/2, the Macintosh,
++ * Intuition, Sunview or X-windows, each screen is represented in an OS
++ * window. The terminolgy is wrong in emacs.....
++ *
++ * EMACS The outside World
++ * screen window
++ * window pane
+ */
-+
-+ typedef struct KILL {
-+ struct KILL *d_next; /* link to next chunk, NULL if last */
-+ char d_chunk[KBLOCK]; /* deleted text */
-+ } KILL;
-+
-+ /* When emacs's command interpetor needs to get a variable's name,
-+ rather than it's value, it is passed back as a VDESC variable
-+ description structure. The v_num field is a index into the
-+ appropriate variable table.
++
++typedef struct SCREEN {
++ struct SCREEN *s_next_screen; /* link to next screen in list */
++ EWINDOW *s_first_window; /* head of linked list of windows */
++ EWINDOW *s_cur_window; /* current window in this screen */
++ char *s_screen_name; /* name of the current window */
++ short s_roworg; /* row origin of stored screen */
++ short s_colorg; /* column origin of stored screen */
++ short s_nrow; /* row width of stored screen */
++ short s_ncol; /* column origin of stored screen */
++#if WINDOW_MSWIN
++ VIDEO **s_virtual; /* virtual screen contents */
++ VIDEO **s_physical; /* physical screen contents */
++ HWND s_drvhandle; /* handle for the "term" driver */
++#endif
++} SCREEN;
++
++/*
++ * Text is kept in buffers. A buffer header, described below, exists for every
++ * buffer in the system. The buffers are kept in a big list, so that commands
++ * that search for a buffer by name can find the buffer header. There is a
++ * safe store for the dot and mark in the header, but this is only valid if
++ * the buffer is not being displayed (that is, if "b_nwnd" is 0). The text for
++ * the buffer is kept in a circularly linked list of lines, with a pointer to
++ * the header line in "b_linep". Buffers may be "Inactive" which means the
++ * files associated with them have not been read in yet. These get read in
++ * at "use buffer" time.
++ * Some buffers are really procedures and have a little extra information
++ * stored with them.
+ */
-+
-+ typedef struct VDESC {
-+ int v_type; /* type of variable */
-+ int v_num; /* ordinal pointer to variable in list */
-+ } VDESC;
-+
-+ /* The !WHILE directive in the execution language needs to
-+ stack references to pending whiles. These are stored linked
-+ to each currently open procedure via a linked list of
-+ the following structure
++typedef struct BUFFER {
++ struct BUFFER *b_bufp; /* Link to next BUFFER */
++ struct LINE *b_dotp; /* Link to "." LINE structure */
++ short b_doto; /* Offset of "." in above LINE */
++ struct LINE *b_markp[NMARKS]; /* The same as the above two, */
++ short b_marko[NMARKS]; /* but for the "mark" */
++ int b_fcol; /* first col to display */
++ struct LINE *b_linep; /* Link to the header LINE */
++ struct LINE *b_topline; /* Link to narrowed top text */
++ struct LINE *b_botline; /* Link to narrowed bottom text */
++ char b_active; /* window activated flag */
++ char b_nwnd; /* Count of windows on buffer */
++ char b_exec; /* how many active executions */
++ char b_flag; /* Flags */
++ int b_mode; /* editor mode of this buffer */
++ char b_fname[NFILEN]; /* File name */
++ char b_bname[NBUFN]; /* Buffer name */
++#if CRYPT
++ char b_key[NPAT]; /* current encrypted key */
++#endif
++ int b_numargs; /* number of arguments to procedure */
++ PARG *b_args; /* ptr to the first argument */
++ UNDO_OBJ *undo_head; /* head of undo stack for buffer */
++ long undo_count; /* # of undo operations stacked */
++ long last_access; /* time of last access */
++} BUFFER;
++
++#define BFINVS 0x01 /* Internal invisable buffer */
++#define BFCHG 0x02 /* Changed since last write */
++#define BFTRUNC 0x04 /* buffer was truncated when read */
++#define BFNAROW 0x08 /* buffer has been narrowed */
++
++#define NOTPROC -1 /* buffer is not a procedure */
++
++/* mode flags */
++#define NUMMODES 11 /* # of defined modes */
++
++#define MDWRAP 0x0001 /* word wrap */
++#define MDCMOD 0x0002 /* C indentation and fence match*/
++#define MDSPELL 0x0004 /* spell error parsing */
++#define MDEXACT 0x0008 /* Exact matching for searches */
++#define MDVIEW 0x0010 /* read-only buffer */
++#define MDOVER 0x0020 /* overwrite mode */
++#define MDMAGIC 0x0040 /* regular expresions in search */
++#define MDCRYPT 0x0080 /* encrytion mode active */
++#define MDASAVE 0x0100 /* auto-save mode */
++#define MDREPL 0x0200 /* replace mode */
++#define MDABBR 0x0400 /* abbreviation expansion mode */
++
++/*
++ * The starting position of a region, and the size of the region in
++ * characters, is kept in a region structure. Used by the region commands.
+ */
-+
-+ typedef struct WHBLOCK {
-+ LINE *w_begin; /* ptr to !while statement */
-+ LINE *w_end; /* ptr to the !endwhile statement*/
-+ int w_type; /* block type */
-+ struct WHBLOCK *w_next; /* next while */
-+ } WHBLOCK;
-+
-+ #define BTWHILE 1
-+ #define BTBREAK 2
-+
-+
-+ /* HICHAR - 1 is the largest character we will deal with.
-+ * BMAPSIZE represents the number of bytes in the bitmap.
-+ */
-+ #define HICHAR 256
-+ #define BMAPSIZE HICHAR >> 3
-+
-+ #if MAGIC
-+ /*
-+ * Defines for the metacharacters in the regular expression
-+ * search routines. MCNIL and GROUP are used in both search
-+ * and replace metachar-arrays.
-+ */
-+ #define MCNIL 0 /* Like the '\0' for strings.*/
-+ #define LITSTRING 1 /* Literal string.*/
-+ #define LITCHAR 2 /* Literal character.*/
-+ #define ANY 3 /* Any character but the <NL>.*/
-+ #define CCL 4
-+ #define NCCL 5
-+ #define BOL 6
-+ #define EOL 7
-+ #define GRPBEG 8 /* Signal start of group.*/
-+ #define GRPEND 9 /* Signal end of group.*/
-+ #define GROUP 10 /* String of group match.*/
-+ #define DITTO 11 /* Replacement with match string.*/
-+
-+ #define CLOSURE 0x0100 /* An or-able value for a closure modifier.*/
-+ #define CLOSURE_1 0x0200 /* An or-able value for a closure modifier.*/
-+ #define ZEROONE 0x0400 /* An or-able value for a closure modifier.*/
-+
-+ #define ALLCLOS (CLOSURE | CLOSURE_1 | ZEROONE)
-+ #define MASKCLO (~ALLCLOS)
-+
-+ #define MC_ANY '.' /* 'Any' character (except newline).*/
-+ #define MC_CCL '[' /* Character class.*/
-+ #define MC_NCCL '^' /* Negate character class.*/
-+ #define MC_RCCL '-' /* Range in character class.*/
-+ #define MC_ECCL ']' /* End of character class.*/
-+ #define MC_BOL '^' /* Beginning of line.*/
-+ #define MC_EOL '$' /* End of line.*/
-+ #define MC_CLOSURE '*' /* Closure - zero to many characters match.*/
-+ #define MC_CLOSURE_1 '+' /* Closure - one to many characters match.*/
-+ #define MC_ZEROONE '?' /* Closure - zero to one characters match.*/
-+ #define MC_DITTO '&' /* Use matched string in replacement.*/
-+ #define MC_GRPBEG '(' /* Start of group (begun with a backslash).*/
-+ #define MC_GRPEND ')' /* End of group (begun with a backslash).*/
-+ #define MC_ESC '\\' /* Escape - suppress meta-meaning.*/
-+
-+ #define MAXGROUPS 10 /* 1 + maximum # of r. e. groups. */
-+ #define BIT(n) (1 << (n)) /* An integer with one bit set.*/
-+
-+ /* Typedefs that define the bitmap type for searching (EBITMAP),
-+ * the meta-character structure for MAGIC mode searching (MC),
-+ * and the meta-character structure for MAGIC mode replacment (RMC).
-+ */
-+ typedef char *EBITMAP;
-+
-+ typedef struct {
-+ short int mc_type;
-+ union {
-+ int lchar;
-+ int group_no;
-+ EBITMAP cclmap;
-+ } u;
-+ } MC;
-+
-+ typedef struct {
-+ short int mc_type;
-+ union {
-+ int group_no;
-+ char *rstr;
-+ } u;
-+ } RMC;
-+ #endif
-+
-+ /*
-+ This is the message which should be added to any "About MicroEMACS"
-+ boxes on any of the machines with window managers.
-+
-+
-+ ------------------------------------------
-+ | |
-+ | MicroEMACS v3.xx |
-+ | for the ............ |
-+ | |
-+ | Text Editor and Corrector |
-+ | |
-+ | written by Daniel M. Lawrence |
-+ | [based on code by Dave Conroy] |
-+ | |
-+ | Send inquiries and donations to: |
-+ | 617 New York St |
-+ | Lafayette, IN 47901 |
-+ | |
-+ ------------------------------------------
++typedef struct {
++ struct LINE *r_linep; /* Origin LINE address. */
++ short r_offset; /* Origin LINE offset. */
++ long r_size; /* Length in characters. */
++} REGION;
++
++/*
++ * All text is kept in circularly linked lists of "LINE" structures. These
++ * begin at the header line (which is the blank line beyond the end of the
++ * buffer). This line is pointed to by the "BUFFER". Each line contains a the
++ * number of bytes in the line (the "used" size), the size of the text array,
++ * and the text. The end of line is not stored as a byte; it's implied.
+ */
-diff -crN ue312.orig/freebsd/makefile ue312/freebsd/makefile
-*** ue312.orig/freebsd/makefile Thu Jan 1 01:00:00 1970
---- ue312/freebsd/makefile Sat Jan 14 12:14:10 1995
-***************
-*** 0 ****
---- 1,102 ----
-+ # Unix makefile for
-+ # MicroEMACS 3.12
-+ # (C)Copyright 1993 by Daniel Lawrence
-+ # all rights reserved
-+
-+ # modify the following lines with the proper relative directories
-+
-+ # object file directory
-+ OBJD = .
-+ # source file directory
-+ SRCD = ../src
-+ # header file directory
-+ HDIR = ../h
-+
-+ # options and arguments to the C compiler
-+
-+ #CFLAGS= -I. -I$(HDIR)
-+ CFLAGS += -I. -I$(HDIR)
-+
-+ # list of header files
-+
-+ HFILES = estruct.h $(HDIR)/edef.h $(HDIR)/efunc.h $(HDIR)/epath.h $(HDIR)/ebind.h $(HDIR)/eproto.h
-+
-+ #list of object files
-+
-+ F1 = $(OBJD)/basic.o $(OBJD)/bind.o $(OBJD)/buffer.o
-+ F2 = $(OBJD)/char.o $(OBJD)/crypt.o $(OBJD)/display.o $(OBJD)/dolock.o
-+ F3 = $(OBJD)/eval.o $(OBJD)/exec.o $(OBJD)/file.o
-+ F4 = $(OBJD)/fileio.o $(OBJD)/unix.o $(OBJD)/input.o
-+ F5 = $(OBJD)/isearch.o $(OBJD)/line.o $(OBJD)/lock.o
-+ F6 = $(OBJD)/main.o $(OBJD)/mouse.o $(OBJD)/screen.o
-+ F7 = $(OBJD)/random.o $(OBJD)/region.o $(OBJD)/search.o $(OBJD)/replace.o
-+ F8 = $(OBJD)/tags.o $(OBJD)/window.o $(OBJD)/word.o
-+
-+ # product list
-+
-+ all: emacs
-+
-+ message:
-+ @echo ""
-+ @echo "Expect some warnings. None of them seem to be fatal. --tg"
-+ @echo ""
-+
-+ OFILES = $(F1) $(F2) $(F3) $(F4) $(F5) $(F6) $(F7) $(F8)
-+
-+ emacs: message $(OFILES)
-+ $(CC) -s $(CFLAGS) $(OFILES) -ltermcap -lc -o emacs
-+
-+ $(OBJD)/basic.o: $(SRCD)/basic.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/basic.o $(SRCD)/basic.c
-+ $(OBJD)/bind.o: $(SRCD)/bind.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/bind.o $(SRCD)/bind.c
-+ $(OBJD)/buffer.o: $(SRCD)/buffer.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/buffer.o $(SRCD)/buffer.c
-+ $(OBJD)/char.o: $(SRCD)/char.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/char.o $(SRCD)/char.c
-+ $(OBJD)/crypt.o: $(SRCD)/crypt.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/crypt.o $(SRCD)/crypt.c
-+ $(OBJD)/cmdfix.o: $(SRCD)/cmdfix.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/cmdfix.o $(SRCD)/cmdfix.c
-+ $(OBJD)/display.o: $(SRCD)/display.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/display.o $(SRCD)/display.c
-+ $(OBJD)/dolock.o: $(SRCD)/dolock.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/dolock.o $(SRCD)/dolock.c
-+ $(OBJD)/eval.o: $(SRCD)/eval.c $(HFILES) $(HDIR)/evar.h
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/eval.o $(SRCD)/eval.c
-+ $(OBJD)/exec.o: $(SRCD)/exec.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/exec.o $(SRCD)/exec.c
-+ $(OBJD)/file.o: $(SRCD)/file.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/file.o $(SRCD)/file.c
-+ $(OBJD)/fileio.o: $(SRCD)/fileio.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/fileio.o $(SRCD)/fileio.c
-+ $(OBJD)/input.o: $(SRCD)/input.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/input.o $(SRCD)/input.c
-+ $(OBJD)/isearch.o: $(SRCD)/isearch.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/isearch.o $(SRCD)/isearch.c
-+ $(OBJD)/line.o: $(SRCD)/line.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/line.o $(SRCD)/line.c
-+ $(OBJD)/lock.o: $(SRCD)/lock.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/lock.o $(SRCD)/lock.c
-+ $(OBJD)/main.o: $(SRCD)/main.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/main.o $(SRCD)/main.c
-+ $(OBJD)/mouse.o: $(SRCD)/mouse.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/mouse.o $(SRCD)/mouse.c
-+ $(OBJD)/unix.o: $(SRCD)/unix.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/unix.o $(SRCD)/unix.c
-+ $(OBJD)/random.o: $(SRCD)/random.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/random.o $(SRCD)/random.c
-+ $(OBJD)/region.o: $(SRCD)/region.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/region.o $(SRCD)/region.c
-+ $(OBJD)/screen.o: $(SRCD)/screen.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/screen.o $(SRCD)/screen.c
-+ $(OBJD)/search.o: $(SRCD)/search.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/search.o $(SRCD)/search.c
-+ $(OBJD)/replace.o: $(SRCD)/replace.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/replace.o $(SRCD)/replace.c
-+ $(OBJD)/tags.o: $(SRCD)/tags.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/tags.o $(SRCD)/tags.c
-+ $(OBJD)/window.o: $(SRCD)/window.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/window.o $(SRCD)/window.c
-+ $(OBJD)/word.o: $(SRCD)/word.c $(HFILES)
-+ $(CC) $(CFLAGS) -c -o $(OBJD)/word.o $(SRCD)/word.c
++typedef struct LINE {
++ struct LINE *l_fp; /* Link to the next line */
++ struct LINE *l_bp; /* Link to the previous line */
++ short l_size; /* Allocated size */
++ short l_used; /* Used size */
++ char l_text[1]; /* A bunch of characters. */
++} LINE;
++
++#define lforw(lp) ((lp)->l_fp)
++#define lback(lp) ((lp)->l_bp)
++#if UNIX && (SUN || HPUX8 || HPUX9 || BSD || FREEBSD)
++#define lgetc(lp, n) ((unsigned char)(lp)->l_text[(n)])
++#else
++#define lgetc(lp, n) ((lp)->l_text[(n)])
++#endif
++#define lputc(lp, n, c) ((lp)->l_text[(n)]=(c))
++#define lused(lp) ((lp)->l_used)
++#define lsize(lp) ((lp)->l_size)
++#define ltext(lp) ((lp)->l_text)
++
++/* This structure is used to hold a user variables name and its
++ current value. These are used for both the global and the
++ local symbol tables.
++*/
++
++typedef struct UVAR {
++ char u_name[NVSIZE + 1]; /* name of user variable */
++ char *u_value; /* value (string) */
++} UVAR;
++
++#define VT_NONE 0 /* don't declare it if not found */
++#define VT_LOCAL 1 /* local to the current procedure */
++#define VT_GLOBAL 2 /* global to all procedures */
++
++/* A UTABLE is a user variable table.... containing some header
++ information and an array of user variable names and definitions.
++ They are held together in a linked list, the last member of
++ the list being the global user variable table.
++*/
++
++typedef struct UTABLE {
++ struct UTABLE *next; /* ptr to next user variable table */
++ int size; /* max number of variables in table */
++ BUFFER *bufp; /* ptr to buffer holding procedure
++ assosiated with this symbol table. */
++ UVAR uv[1]; /* list of variable names/definitions
++ in this variable table */
++} UTABLE;
++
++/*
++ * The editor communicates with the display using a high level interface. A
++ * "TERM" structure holds useful variables, and indirect pointers to routines
++ * that do useful operations. The low level get and put routines are here too.
++ * This lets a terminal, in addition to having non standard commands, have
++ * funny get and put character code too. The calls might get changed to
++ * "termp->t_field" style in the future, to make it possible to run more than
++ * one terminal type.
++ */
++#if PROTO
++typedef struct {
++ short t_mrow; /* max number of rows allowable */
++ short t_nrow; /* current number of rows used */
++ short t_mcol; /* max Number of columns. */
++ short t_ncol; /* current Number of columns. */
++ short t_roworg; /* origin row (normally zero) */
++ short t_colorg; /* origin column (normally zero)*/
++ short t_margin; /* min margin for extended lines*/
++ short t_scrsiz; /* size of scroll region " */
++ int t_pause; /* # times thru update to pause */
++ int (PASCAL NEAR *t_open)(void); /* Open terminal at the start.*/
++ int (PASCAL NEAR *t_close)(void); /* Close terminal at end. */
++ int (PASCAL NEAR *t_kopen)(void); /* Open keyboard */
++ int (PASCAL NEAR *t_kclose)(void); /* Close keyboard */
++ int (PASCAL NEAR *t_getchar)(void); /* Get character from keyboard. */
++ int (PASCAL NEAR *t_putchar)(int); /* Put character to display.*/
++ int (PASCAL NEAR *t_flush)(void); /* Flush output buffers. */
++ int (PASCAL NEAR *t_move)(int, int);/* Move the cursor, origin 0.*/
++ int (PASCAL NEAR *t_eeol)(void); /* Erase to end of line. */
++ int (PASCAL NEAR *t_eeop)(void); /* Erase to end of page. */
++ int (PASCAL NEAR *t_clrdesk)(void); /* Clear the page totally */
++ int (PASCAL NEAR *t_beep)(void); /* Beep. */
++ int (PASCAL NEAR *t_rev)(int); /* set reverse video state */
++ int (PASCAL NEAR *t_rez)(char *); /* change screen resolution */
++#if COLOR
++ int (PASCAL NEAR *t_setfor)(int); /* set forground color */
++ int (PASCAL NEAR *t_setback)(int); /* set background color */
++#endif
++#if INSDEL
++ int (PASCAL NEAR *t_insline)(int); /* insert a screen line */
++ int (PASCAL NEAR *t_delline)(int); /* delete a screen line */
++#endif
++#if WINDOW_MSWIN
++ int (PASCAL NEAR *t_sleep)(int); /* go to sleep for a while */
++ int (PASCAL NEAR *t_newscr)(SCREEN *); /* create new screen display */
++ int (PASCAL NEAR *t_delscr)(SCREEN *); /* destroy screen display */
++ int (PASCAL NEAR *t_selscr)(SCREEN *); /* select screen display */
++ int (PASCAL NEAR *t_sizscr)(SCREEN *); /* resize screen display */
++ int (PASCAL NEAR *t_topscr)(SCREEN *); /* bring screen to top */
++#endif
++} TERM;
++#else /* TERM structure, no prototyping.*/
++
++typedef struct {
++ short t_mrow; /* max number of rows allowable */
++ short t_nrow; /* current number of rows used */
++ short t_mcol; /* max Number of columns. */
++ short t_ncol; /* current Number of columns. */
++ short t_roworg; /* origin row (normally zero) */
++ short t_colorg; /* origin column (normally zero)*/
++ short t_margin; /* min margin for extended lines*/
++ short t_scrsiz; /* size of scroll region " */
++ int t_pause; /* # times thru update to pause */
++ int (PASCAL NEAR *t_open)(); /* Open terminal at the start. */
++ int (PASCAL NEAR *t_close)(); /* Close terminal at end. */
++ int (PASCAL NEAR *t_kopen)(); /* Open keyboard */
++ int (PASCAL NEAR *t_kclose)(); /* close keyboard */
++ int (PASCAL NEAR *t_getchar)(); /* Get character from keyboard. */
++ int (PASCAL NEAR *t_putchar)(); /* Put character to display. */
++ int (PASCAL NEAR *t_flush)(); /* Flush output buffers. */
++ int (PASCAL NEAR *t_move)(); /* Move the cursor, origin 0. */
++ int (PASCAL NEAR *t_eeol)(); /* Erase to end of line. */
++ int (PASCAL NEAR *t_eeop)(); /* Erase to end of page. */
++ int (PASCAL NEAR *t_clrdesk)(); /* Clear the page totally */
++ int (PASCAL NEAR *t_beep)(); /* Beep. */
++ int (PASCAL NEAR *t_rev)(); /* set reverse video state */
++ int (PASCAL NEAR *t_rez)(); /* change screen resolution */
++#if COLOR
++ int (PASCAL NEAR *t_setfor)(); /* set forground color */
++ int (PASCAL NEAR *t_setback)(); /* set background color */
++#endif
++#if INSDEL
++ int (PASCAL NEAR *t_insline)(); /* insert a screen line */
++ int (PASCAL NEAR *t_delline)(); /* delete a screen line */
++#endif
++#if WINDOW_MSWIN
++ int (PASCAL NEAR *t_sleep)(); /* go to sleep for a while */
++ int (PASCAL NEAR *t_newscr)(); /* create new screen display */
++ int (PASCAL NEAR *t_delscr)(); /* destroy screen display */
++ int (PASCAL NEAR *t_selscr)(); /* select screen display */
++ int (PASCAL NEAR *t_sizscr)(); /* resize screen display */
++ int (PASCAL NEAR *t_topscr)(); /* bring screen to top */
++#endif
++} TERM;
++#endif
++
++
++/* TEMPORARY macros for terminal I/O (to be placed in a machine
++ dependant place later) */
++
++#define TTopen (*term.t_open)
++#define TTclose (*term.t_close)
++#define TTkopen (*term.t_kopen)
++#define TTkclose (*term.t_kclose)
++#define TTgetc (*term.t_getchar)
++#define TTputc (*term.t_putchar)
++#define TTflush (*term.t_flush)
++#define TTmove (*term.t_move)
++#define TTeeol (*term.t_eeol)
++#define TTeeop (*term.t_eeop)
++#define TTclrdesk (*term.t_clrdesk)
++#define TTbeep (*term.t_beep)
++#define TTrev (*term.t_rev)
++#define TTrez (*term.t_rez)
++#if COLOR
++#define TTforg (*term.t_setfor)
++#define TTbacg (*term.t_setback)
++#endif
++
++/* Structure for the table of current key bindings */
++
++ETYPE EPOINTER {
++ int (PASCAL NEAR *fp)(); /* C routine to invoke */
++ BUFFER *buf; /* buffer to execute */
++};
++
++typedef struct {
++ short k_code; /* Key code */
++ short k_type; /* binding type (C function or EMACS buffer) */
++ ETYPE EPOINTER k_ptr; /* ptr to thing to execute */
++} KEYTAB;
++
++/* structure for the name binding table */
++
++typedef struct {
++ char *n_name; /* name of function key */
++ int (PASCAL NEAR *n_func)(); /* function name is bound to */
++} NBIND;
++
++/* The editor holds deleted text chunks in the KILL buffer. The
++ kill buffer is logically a stream of ascii characters, however
++ due to its unpredicatable size, it gets implemented as a linked
++ list of chunks. (The d_ prefix is for "deleted" text, as k_
++ was taken up by the keycode structure)
++*/
++
++typedef struct KILL {
++ struct KILL *d_next; /* link to next chunk, NULL if last */
++ char d_chunk[KBLOCK]; /* deleted text */
++} KILL;
++
++/* When emacs's command interpetor needs to get a variable's name,
++ rather than it's value, it is passed back as a VDESC variable
++ description structure. The v_num field is a index into the
++ appropriate variable table.
++*/
++
++typedef struct VDESC {
++ int v_type; /* type of variable */
++ int v_num; /* ordinal pointer to variable in list */
++ UTABLE *v_ut; /* ptr to appropriate user table if user var */
++} VDESC;
++
++/* The !WHILE directive in the execution language needs to
++ stack references to pending whiles. These are stored linked
++ to each currently open procedure via a linked list of
++ the following structure
++*/
++
++typedef struct WHBLOCK {
++ LINE *w_begin; /* ptr to !while statement */
++ LINE *w_end; /* ptr to the !endwhile statement*/
++ int w_type; /* block type */
++ struct WHBLOCK *w_next; /* next while */
++} WHBLOCK;
++
++#define BTWHILE 1
++#define BTBREAK 2
++
++/* Abbreviations are short symbols that expand to longer strings
++ when typed into a buffer with no intervening whitespace or commands.
++ This structure grows dynamically as needed.
++*/
++
++typedef struct ABBREV {
++ struct ABBREV *ab_next; /* pointer to the next abbreviation */
++ char ab_sym[MAXSYM + 1]; /* name to expand */
++ char ab_exp[1]; /* string to expand to */
++} ABBREV;
++
++/* Search definitions... */
++
++/* HICHAR - 1 is the largest character we will deal with.
++ * BMAPSIZE represents the number of bytes in the bitmap.
++ */
++#define HICHAR 256
++#define BMAPSIZE HICHAR >> 3
++
++/*
++ * Jump table structures.
++ */
++typedef struct {
++ int jump;
++ int patlen;
++ int delta[HICHAR];
++ char patrn[NPAT];
++} DELTA;
++
++#if MAGIC
++/*
++ * Defines for the metacharacters in the regular expression
++ * search routines. MCNIL and GROUP are used in both search
++ * and replace metachar-arrays.
++ */
++#define MCNIL 0 /* Like the '\0' for strings.*/
++#define JMPTABLE 1
++#define LITSTRING 2 /* Literal string.*/
++#define LITCHAR 3 /* Literal character.*/
++#define ANY 4 /* Any character but the <NL>.*/
++#define CCL 5
++#define NCCL 6
++#define BOL 7
++#define EOL 8
++#define BOWRD 9
++#define EOWRD 10
++#define GRPBEG 11 /* Signal start of group.*/
++#define GRPEND 12 /* Signal end of group.*/
++#define GROUP 13 /* String of group match.*/
++#define DITTO 14 /* Replacement with match string.*/
++
++#define CLOSURE 0x0100 /* An or-able value for a closure modifier.*/
++#define CLOSURE_1 0x0200 /* An or-able value for a closure modifier.*/
++#define ZEROONE 0x0400 /* An or-able value for a closure modifier.*/
++
++#define ALLCLOS (CLOSURE | CLOSURE_1 | ZEROONE)
++#define MASKCLO (~ALLCLOS)
++
++#define MC_ANY '.' /* 'Any' character (except newline).*/
++#define MC_CCL '[' /* Character class.*/
++#define MC_NCCL '^' /* Negate character class.*/
++#define MC_RCCL '-' /* Range in character class.*/
++#define MC_ECCL ']' /* End of character class.*/
++#define MC_BOL '^' /* Beginning of line.*/
++#define MC_EOL '$' /* End of line.*/
++#define MC_CLOSURE '*' /* Closure - zero to many characters match.*/
++#define MC_CLOSURE_1 '+' /* Closure - one to many characters match.*/
++#define MC_ZEROONE '?' /* Closure - zero to one characters match.*/
++#define MC_DITTO '&' /* Use matched string in replacement.*/
++#define MC_GRPBEG '(' /* Start of group (begun with a backslash).*/
++#define MC_GRPEND ')' /* End of group (begun with a backslash).*/
++#define MC_BOWRD '<' /* Beginning of word (begun with a backslash).*/
++#define MC_EOWRD '>' /* End of word (begun with a backslash).*/
++#define MC_ESC '\\' /* Escape - suppress meta-meaning.*/
++
++#define MAXGROUPS 10 /* 1 + maximum # of r. e. groups. */
++#define BIT(n) (1 << (n)) /* An integer with one bit set.*/
++
++/* Typedefs that define the bitmap type for searching (EBITMAP),
++ * the meta-character structure for MAGIC mode searching (MC),
++ * and the meta-character structure for MAGIC mode replacment (RMC).
++ */
++typedef char *EBITMAP;
++
++typedef struct {
++ short int mc_type;
++ union {
++ int lchar;
++ int group_no;
++ char *lstring;
++ DELTA *jmptable;
++ EBITMAP cclmap;
++ } u;
++} MC;
++
++typedef struct {
++ short int mc_type;
++ union {
++ int group_no;
++ char *rstr;
++ } u;
++} RMC;
++#endif
++
++/*
++ This is the message which should be added to any "About MicroEMACS"
++ boxes on any of the machines with window managers.
++
++
++ ------------------------------------------
++ | |
++ | MicroEMACS v4.xx |
++ | for the ............ |
++ | |
++ | Text Editor and Corrector |
++ | |
++ | written by Daniel M. Lawrence |
++ | [based on code by Dave Conroy] |
++ | |
++ | Send inquiries and donations to: |
++ | 617 New York St |
++ | Lafayette, IN 47901 |
++ | |
++ ------------------------------------------
++*/
diff --git a/editors/uemacs/files/patch-ac b/editors/uemacs/files/patch-ac
new file mode 100644
index 000000000000..c18abe1863f3
--- /dev/null
+++ b/editors/uemacs/files/patch-ac
@@ -0,0 +1,25 @@
+--- src/bind.c.orig Sun Nov 19 03:09:20 1995
++++ src/bind.c Wed Mar 25 15:00:37 1998
+@@ -634,7 +634,8 @@
+ register char *sp; /* pointer into path spec */
+ register int i; /* index */
+ static char fspec[NFILEN]; /* full path spec to search */
+-
++ char patha[NFILEN];
++
+ /* if we have an absolute path.. check only there! */
+ sp = fname;
+ while (*sp) {
+@@ -689,9 +690,11 @@
+ #if OS2
+ path = getenv("DPATH");
+ #else
+- path = getenv("PATH");
++ strncpy(patha, getenv("PATH"), NFILEN - 25);
++ strcat(patha, ":/usr/local/share/uemacs");
+ #endif
+ #endif
++ path = patha;
+ if (path != NULL)
+ while (*path) {
+
diff --git a/editors/uemacs/files/patch-ad b/editors/uemacs/files/patch-ad
new file mode 100644
index 000000000000..ac37d4230303
--- /dev/null
+++ b/editors/uemacs/files/patch-ad
@@ -0,0 +1,20 @@
+--- src/lock.c.orig Sun Nov 19 03:09:22 1995
++++ src/lock.c Wed Mar 25 13:56:13 1998
+@@ -10,10 +10,17 @@
+
+ #if FILOCK
+
++#if BSD
++#undef BSD
++#include <sys/param.h>
++#endif
++
+ #if BSD || FREEBSD || WMCS || SUN || XENIX || HPUX8 || HPUX9 || AVIION || USG || AIX || AUX
+ #include <sys/errno.h>
++#if !(defined(BSD) && (BSD >= 199103))
+ extern int sys_nerr; /* number of system error messages defined */
+ extern char *sys_errlist[]; /* list of message texts */
++#endif
+ #endif
+
+ #if MSC
diff --git a/editors/uemacs/files/patch-ae b/editors/uemacs/files/patch-ae
new file mode 100644
index 000000000000..0d567efcbbcc
--- /dev/null
+++ b/editors/uemacs/files/patch-ae
@@ -0,0 +1,12 @@
+--- h/epath.h.orig Sun Nov 19 03:09:52 1995
++++ h/epath.h Wed Mar 25 13:57:22 1998
+@@ -68,7 +68,8 @@
+ {
+ ".emacsrc",
+ "emacs.hlp",
+- "/usr/local/",
++ "/usr/local/share/uemacs/",
++ "/usr/local/lib/uemacs/",
+ "/usr/lib/",
+ ""
+ };
diff --git a/editors/uemacs/files/patch-af b/editors/uemacs/files/patch-af
new file mode 100644
index 000000000000..714cfa903fd4
--- /dev/null
+++ b/editors/uemacs/files/patch-af
@@ -0,0 +1,13 @@
+--- freebsd/makefile.orig Sat Nov 18 13:19:02 1995
++++ freebsd/makefile Wed Mar 25 15:07:14 1998
+@@ -14,8 +14,8 @@
+
+ # options and arguments to the C compiler
+
+-#CFLAGS += -I. -I$(HDIR)
+-CFLAGS = -O -I. -I$(HDIR)
++CFLAGS += -I. -I$(HDIR)
++#CFLAGS = -O -I. -I$(HDIR)
+
+ # list of header files
+
diff --git a/editors/uemacs/pkg-plist b/editors/uemacs/pkg-plist
index 4ab6cff7298c..655d0208f5f6 100644
--- a/editors/uemacs/pkg-plist
+++ b/editors/uemacs/pkg-plist
@@ -1,20 +1,22 @@
bin/uemacs
-lib/uemacs/.emacsrc
-lib/uemacs/bpage.cmd
-lib/uemacs/cpage.cmd
-lib/uemacs/cua.cmd
-lib/uemacs/dev.cmd
-lib/uemacs/ehelp.cmd
-lib/uemacs/ehelp1.txt
-lib/uemacs/ehelp2.txt
-lib/uemacs/epage.cmd
-lib/uemacs/error.cmd
-lib/uemacs/filter.cmd
-lib/uemacs/lpage.cmd
-lib/uemacs/mdi.cmd
-lib/uemacs/mewin.cmd
-lib/uemacs/newpage.cmd
-lib/uemacs/opage.cmd
-lib/uemacs/ppage.cmd
-lib/uemacs/shell.cmd
-lib/uemacs/wpage.cmd
+share/uemacs/.emacsrc
+share/uemacs/bpage.cmd
+share/uemacs/chklist.ms
+share/uemacs/cpage.cmd
+share/uemacs/cua.cmd
+share/uemacs/dev.cmd
+share/uemacs/ehelp.cmd
+share/uemacs/ehelp1.txt
+share/uemacs/ehelp2.txt
+share/uemacs/epage.cmd
+share/uemacs/error.cmd
+share/uemacs/filter.cmd
+share/uemacs/lpage.cmd
+share/uemacs/mdi.cmd
+share/uemacs/mewin.cmd
+share/uemacs/newpage.cmd
+share/uemacs/opage.cmd
+share/uemacs/ppage.cmd
+share/uemacs/shell.cmd
+share/uemacs/wpage.cmd
+@dirrm share/uemacs