diff options
-rw-r--r-- | editors/uemacs/Makefile | 14 | ||||
-rw-r--r-- | editors/uemacs/distinfo | 2 | ||||
-rw-r--r-- | editors/uemacs/files/patch-aa | 600 | ||||
-rw-r--r-- | editors/uemacs/files/patch-ab | 2487 | ||||
-rw-r--r-- | editors/uemacs/files/patch-ac | 25 | ||||
-rw-r--r-- | editors/uemacs/files/patch-ad | 20 | ||||
-rw-r--r-- | editors/uemacs/files/patch-ae | 12 | ||||
-rw-r--r-- | editors/uemacs/files/patch-af | 13 | ||||
-rw-r--r-- | editors/uemacs/pkg-plist | 40 |
9 files changed, 1364 insertions, 1849 deletions
diff --git a/editors/uemacs/Makefile b/editors/uemacs/Makefile index b69cbc00e66..f82c42288a6 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 b72847db391..feba1067679 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 0aae012dcca..011756c6577 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 922b1623801..839fa34c9da 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 00000000000..c18abe1863f --- /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 00000000000..ac37d423030 --- /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 00000000000..0d567efcbbc --- /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 00000000000..714cfa903fd --- /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 4ab6cff7298..655d0208f5f 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 |