diff --git a/editors/uemacs/Makefile b/editors/uemacs/Makefile new file mode 100644 index 000000000000..a2386c179c22 --- /dev/null +++ b/editors/uemacs/Makefile @@ -0,0 +1,27 @@ +# New ports collection makefile for: MicroEmacs +# Version required: 3.12 +# Date created: 16 Jan 1995 +# Whom: thomas@ghpc8.ihf.rwth-aachen.de +# + +DISTNAME= uemacs +MASTER_SITES= ftp://midas.mgmt.purdue.edu/pub/ue312/ +PATCH_STRIP= -p1 +DISTFILES= ue312dev.zip +EXEC_DEPENDS= unzip:${PORTSDIR}/archivers/unzip + +# one weakness of the ports scheme: it doesn't allow arguments +# to ${EXTRACT_CMD} after the filename, which is required for unzip. + +NO_WRKSUBDIR= yes + +pre-extract: exec_depends + @echo "===> Extracting for ${DISTNAME}" + @rm -rf ${WRKDIR} + @mkdir -p ${WRKDIR} + @unzip -Laq ${DISTDIR}/${DISTFILES} -d ${WRKDIR} + +extract: fetch pre-extract ${EXTRACT_COOKIE} + @${TOUCH} ${TOUCH_FLAGS} ${EXTRACT_COOKIE} + +.include diff --git a/editors/uemacs/distinfo b/editors/uemacs/distinfo new file mode 100644 index 000000000000..b72847db3916 --- /dev/null +++ b/editors/uemacs/distinfo @@ -0,0 +1 @@ +MD5 (ue312dev.zip) = 508885458b0e6fbe7f663e127420c100 diff --git a/editors/uemacs/files/patch-aa b/editors/uemacs/files/patch-aa new file mode 100644 index 000000000000..334a459a0f4f --- /dev/null +++ b/editors/uemacs/files/patch-aa @@ -0,0 +1,585 @@ +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 /usr/local/bin/uemacs ++ mkdir -p /usr/local/lib/uemacs ++ install -c -m 644 -o bin -g bin cmd/* /usr/local/lib/uemacs ++ mv /usr/local/lib/uemacs/emacs.rc /usr/local/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 ++ #endif ++ + #if BSD || WMCS || SUN || XENIX || HPUX8 || HPUX9 || AVIION || USG || AUX + #include ++ #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 /* Timer definitions */ ++ #include /* BSD version number */ + #endif /* BSD */ + #if BSD || SUN || HPUX8 || HPUX9 || AVIION + #include /* Signal definitions */ +*************** +*** 104,115 **** +--- 106,125 ---- + #include /* Terminal I/O definitions */ + #endif /* USG || AUX || SMOS || HPUX8 || HPUX9 || SUN || XENIX */ + #if AVIION ++ #define HAVE_TERMIOS 1 + #include /* Terminal I/O definitions */ + #endif /* AVIION */ + #if CURSES + #include /* Curses screen output */ + #undef WINDOW /* Oh no! */ + #endif /* CURSES */ ++ #if (defined(BSD) && (BSD >= 199103)) ++ #define HAVE_TERMIOS 1 ++ #include ++ #else ++ #define HAVE_SGTTY 1 ++ #include ++ #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 -> not bound */ +! { "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); diff --git a/editors/uemacs/files/patch-ab b/editors/uemacs/files/patch-ab new file mode 100644 index 000000000000..c16d70dd5bd9 --- /dev/null +++ b/editors/uemacs/files/patch-ab @@ -0,0 +1,1239 @@ +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 ++ */ ++ ++ #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 "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 /* --------- Huge include file here !!! ---------*/ ++ #if WINNTCON ++ #include ++ #include ++ #include ++ #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 ++ #include ++ #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 ++ #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 ++ #endif ++ ++ #if MSDOS & MWC ++ #include ++ #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 ++ #include ++ #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 ++ #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 ++ #else ++ #define VARG 0 ++ #define SARG 1 ++ #include ++ #endif ++ #endif ++ ++ #if ZTC ++ #include ++ #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. ++ */ ++ ++ #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 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 */ ++ } 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 ++ ++ ++ /* 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 .*/ ++ #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 | ++ | | ++ ------------------------------------------ ++ */ +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,97 ---- ++ # 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 ++ ++ OFILES = $(F1) $(F2) $(F3) $(F4) $(F5) $(F6) $(F7) $(F8) ++ ++ emacs: $(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 diff --git a/editors/uemacs/pkg-comment b/editors/uemacs/pkg-comment new file mode 100644 index 000000000000..1bba004318fc --- /dev/null +++ b/editors/uemacs/pkg-comment @@ -0,0 +1 @@ +MicroEMACS version 3.12 -- a full screen editor diff --git a/editors/uemacs/pkg-descr b/editors/uemacs/pkg-descr new file mode 100644 index 000000000000..bf7b78bebfab --- /dev/null +++ b/editors/uemacs/pkg-descr @@ -0,0 +1,29 @@ + MicroEMACS is a tool for creating and changing documents, +programs, and other text files. It is both relatively easy for the +novice to use, but also very powerful in the hands of an expert. +MicroEMACS can be extensively customized for the needs of the individual +user. + + MicroEMACS allows several files to be edited at the same time. +The screen can be split into different windows and screens, and text may +be moved freely from one window on any screen to the next. Depending on +the type of file being edited, MicroEMACS can change how it behaves to +make editing simple. Editing standard text files, program files and +word processing documents are all possible at the same time. + + There are extensive capabilities to make word processing and +editing easier. These include commands for string searching and +replacing, paragraph reformatting and deleting, automatic word wrapping, +word move and deletes, easy case controlling, and automatic word counts. + + For complex and repetitive editing tasks editing macroes can be +written. These macroes allow the user a great degree of flexibility in +determining how MicroEMACS behaves. Also, any and all the commands can +be used by any keystroke by changing, or rebinding, what commands +various keys invoke. + + Special features are also available to perform a diverse set of +operations such as file encryption, automatic backup file generation, +entabbing and detabbing lines, executing operating system commands and +filtering of text through other programs (like SORT to allow sorting +text). diff --git a/editors/uemacs/pkg-plist b/editors/uemacs/pkg-plist new file mode 100644 index 000000000000..a15cba5cb4ee --- /dev/null +++ b/editors/uemacs/pkg-plist @@ -0,0 +1,6 @@ +@cd /usr/local +@owner bin +@mode 755 +bin/uemacs +@mode 644 +lib/uemacs