summaryrefslogtreecommitdiff
path: root/editors/mg2a
diff options
context:
space:
mode:
Diffstat (limited to 'editors/mg2a')
-rw-r--r--editors/mg2a/Makefile21
-rw-r--r--editors/mg2a/files/md53
-rw-r--r--editors/mg2a/files/patch-sum15
-rw-r--r--editors/mg2a/patches/patch-aa25
-rw-r--r--editors/mg2a/patches/patch-ab39
-rw-r--r--editors/mg2a/patches/patch-ac50
-rw-r--r--editors/mg2a/patches/patch-ad28
-rw-r--r--editors/mg2a/patches/patch-ae14
-rw-r--r--editors/mg2a/patches/patch-af102
-rw-r--r--editors/mg2a/patches/patch-ag32
-rw-r--r--editors/mg2a/patches/patch-ah60
-rw-r--r--editors/mg2a/patches/patch-ai12
-rw-r--r--editors/mg2a/patches/patch-aj56
-rw-r--r--editors/mg2a/patches/patch-ak1067
-rw-r--r--editors/mg2a/patches/patch-al42
-rw-r--r--editors/mg2a/patches/patch-am158
-rw-r--r--editors/mg2a/pkg/COMMENT1
-rw-r--r--editors/mg2a/pkg/DESCR22
-rw-r--r--editors/mg2a/pkg/PLIST4
-rw-r--r--editors/mg2a/scripts/post-extract5
20 files changed, 1756 insertions, 0 deletions
diff --git a/editors/mg2a/Makefile b/editors/mg2a/Makefile
new file mode 100644
index 00000000000..48d908f260b
--- /dev/null
+++ b/editors/mg2a/Makefile
@@ -0,0 +1,21 @@
+# $NetBSD: Makefile,v 1.1.1.1 2000/04/01 00:21:25 dmcmahill Exp $
+# Top level for mg2a package make... nothing unusual
+# in this package - john refling
+#
+
+DISTNAME= mg2a
+PKGNAME= mg2a-1.10
+CATEGORIES= editors
+MASTER_SITES= ftp://ftp.wustl.edu/languages/c/unix-c/editors/
+EXTRACT_SUFX= .tar.Z
+
+MAINTAINER= refling@comet.lbl.gov
+
+USE_CONFIGURE= NO
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/mg ${PREFIX}/bin/mg
+ ${INSTALL_MAN} ${WRKSRC}/mg.1 ${PREFIX}/man/man1
+ ${INSTALL_DATA} ${WRKSRC}/mg.rc ${PREFIX}/bin/mg.rc
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/editors/mg2a/files/md5 b/editors/mg2a/files/md5
new file mode 100644
index 00000000000..883f7e94cc0
--- /dev/null
+++ b/editors/mg2a/files/md5
@@ -0,0 +1,3 @@
+$NetBSD: md5,v 1.1.1.1 2000/04/01 00:21:26 dmcmahill Exp $
+
+MD5 (mg2a.tar.Z) = e2ec80b75e004596390642645d3d2906
diff --git a/editors/mg2a/files/patch-sum b/editors/mg2a/files/patch-sum
new file mode 100644
index 00000000000..8aa13c57812
--- /dev/null
+++ b/editors/mg2a/files/patch-sum
@@ -0,0 +1,15 @@
+$NetBSD: patch-sum,v 1.1.1.1 2000/04/01 00:21:26 dmcmahill Exp $
+
+MD5 (patch-aa) = 2541320144d55ce5eed7efbf8896538f
+MD5 (patch-ab) = c43942f4e96803b675bc665a8bf28600
+MD5 (patch-ac) = ecd6121e1bd40e630ab18bd40033b903
+MD5 (patch-ad) = 9c34c36e763eb4692490d732ad3d43e2
+MD5 (patch-ae) = 93dca2ad564196d175148b8195c64027
+MD5 (patch-af) = 0b4e5ba1ff6308993929d8e8db120a7c
+MD5 (patch-ag) = f1aea692c077a41211604174f816da35
+MD5 (patch-ah) = f397a38be402339aef525d15a486fbe8
+MD5 (patch-ai) = 421222da260bcef76048698779e5c1c9
+MD5 (patch-aj) = 9bd09f14735dd013db6207c4e18832dc
+MD5 (patch-ak) = 7fda46e3314817aa30ca56ade0322210
+MD5 (patch-al) = e8b855cdc23bc2de2982b97996a1c25e
+MD5 (patch-am) = 1bb778cacc8b00ad2521678ed214de54
diff --git a/editors/mg2a/patches/patch-aa b/editors/mg2a/patches/patch-aa
new file mode 100644
index 00000000000..3cf8c2dc473
--- /dev/null
+++ b/editors/mg2a/patches/patch-aa
@@ -0,0 +1,25 @@
+$NetBSD: patch-aa,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./sys/bsd/spawn.c.orig Sun Jul 3 10:51:00 1988
++++ ./sys/bsd/spawn.c Thu Mar 30 08:35:32 2000
+@@ -38,7 +38,9 @@
+ */
+ /*ARGSUSED*/
+ spawncli(f, n) {
+- register int pid, wpid, (*oqsig)(), (*oisig)(), omask;
++/* register int pid, wpid, (*oqsig)(), (*oisig)(), omask; refling was here */
++ register int pid, wpid, omask;
++ register void (*oqsig)(), (*oisig)();
+ union wait status;
+
+ if (shellp == NULL) {
+@@ -83,7 +85,8 @@
+ execl(shellp, "sh", "-i", NULL);
+ _exit(0); /* Should do better! */
+ }
+- while ((wpid=wait(&status))>=0 && wpid!=pid)
++/* while ((wpid=wait(&status))>=0 && wpid!=pid) refling was here */
++ while ((wpid=wait((int *)&status))>=0 && wpid!=pid)
+ ;
+ (void) signal(SIGQUIT, oqsig);
+ (void) signal(SIGINT, oisig);
diff --git a/editors/mg2a/patches/patch-ab b/editors/mg2a/patches/patch-ab
new file mode 100644
index 00000000000..72341904a6b
--- /dev/null
+++ b/editors/mg2a/patches/patch-ab
@@ -0,0 +1,39 @@
+$NetBSD: patch-ab,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./sys/bsd/ttyio.c.orig Sun Jul 3 10:51:02 1988
++++ ./sys/bsd/ttyio.c Thu Mar 30 08:35:33 2000
+@@ -35,13 +35,17 @@
+ ttopen() {
+ register char *tv_stype;
+ char *getenv(), *tgetstr(), tcbuf[1024], err_str[72];
+- char *sprintf();
++/* int sprintf(); refling was here */
+
+ /* do this the REAL way */
+ if ((tv_stype = getenv("TERM")) == NULL)
+ {
+- puts("Environment variable TERM not defined!");
+- exit(1);
++// refling --- took out the exit, added default
++ puts("Environment variable TERM not defined, trying vt102");
++// exit(1);
++ sleep(1);
++ putenv("TERM=vt102");
++ tv_stype = getenv("TERM");
+ }
+
+ if((tgetent(tcbuf, tv_stype)) != 1)
+@@ -229,9 +233,11 @@
+ panic(s) char *s; {
+ (void) fputs("panic: ", stderr);
+ (void) fputs(s, stderr);
+- (void) fputc('\n', stderr);
++// (void) fputc('\n', stderr); refling
++ (void) fputc(13, stderr); // refling
+ (void) fflush(stderr);
+- abort(); /* To leave a core image. */
++// abort(); /* To leave a core image. */ refling
++ exit(1); // refling
+ }
+ #ifndef NO_DPROMPT
+ #include <sys/time.h>
diff --git a/editors/mg2a/patches/patch-ac b/editors/mg2a/patches/patch-ac
new file mode 100644
index 00000000000..f80aff356ff
--- /dev/null
+++ b/editors/mg2a/patches/patch-ac
@@ -0,0 +1,50 @@
+$NetBSD: patch-ac,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./sys/bsd/fileio.c.orig Sun Jul 3 10:50:24 1988
++++ ./sys/bsd/fileio.c Thu Mar 30 08:35:33 2000
+@@ -2,6 +2,7 @@
+ * bsd (4.2, others?), Sun (3.2, ?) and Ultrix-32 (?) file I/O.
+ */
+ #include "def.h"
++#include <unistd.h> /* refling added this per compiler */
+
+ static FILE *ffp;
+ extern char *getenv(), *strncpy();
+@@ -276,7 +277,7 @@
+ if ((file = getenv("HOME")) == NULL) goto notfound;
+ if (strlen(file)+7 >= NFILEN - 1) goto notfound;
+ (VOID) strcpy(home, file);
+- (VOID) strcat(home, "/.mg");
++ (VOID) strcat(home, "/.mgrc");
+ if (suffix != NULL) {
+ (VOID) strcat(home, "-");
+ (VOID) strcat(home, suffix);
+@@ -295,6 +296,18 @@
+ if (access(file, F_OK ) == 0) return file;
+ #endif
+
++
++/* refling - try to open a file name given by MGRC env var */
++ if ((file = getenv("MGRC")) == NULL) return NULL;
++ if (strlen(file)+7 >= NFILEN - 1) goto notfound;
++ (VOID) strcpy(home, file);
++ if (suffix != NULL) {
++ (VOID) strcat(home, "-");
++ (VOID) strcat(home, suffix);
++ }
++ if (access(home, F_OK ) == 0) return home;
++
++
+ return NULL;
+ }
+ #endif
+@@ -318,7 +331,8 @@
+ execve("cp", eargv, (char **)NULL);
+ _exit(1); /* shouldn't happen */
+ }
+- while(wait(&status) != pid) {}
++/* while(wait(&status) != pid) {} refling, was this */
++ while(wait((int *)&status) != pid) {}
+ return status.w_status == 0;
+ }
+
diff --git a/editors/mg2a/patches/patch-ad b/editors/mg2a/patches/patch-ad
new file mode 100644
index 00000000000..8c93fecd616
--- /dev/null
+++ b/editors/mg2a/patches/patch-ad
@@ -0,0 +1,28 @@
+$NetBSD: patch-ad,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./sys/bsd/fullpath.c.orig Thu Mar 30 08:35:33 2000
++++ ./sys/bsd/fullpath.c Thu Mar 30 08:35:33 2000
+@@ -0,0 +1,23 @@
++/* test program by John P. Refling *
++#include <stdlib.h>
++#include <sys/param.h>
++#define begin {
++#define end }
++int main(argc, argv)
++int argc;
++char **argv;
++{char resolved_path[MAXPATHLEN];
++char trial_path[MAXPATHLEN];
++char path[MAXPATHLEN];
++char *envpath;
++if (realpath(argv[0], resolved_path) != NULL ) begin
++ printf("%s\n", resolved_path);
++end
++else if ( (envpath = getenv("PATH")) != NULL ) begin
++ printf("%s\n", envpath);
++ while (strchr(envpath, ':') != NULL) begin
++ printf("%d\n", envpath-strchr(envpath,':'));
++ envpath = strchr(envpath,':');
++ end
++end
++else printf("bad\n");}
diff --git a/editors/mg2a/patches/patch-ae b/editors/mg2a/patches/patch-ae
new file mode 100644
index 00000000000..ce4f4494cc1
--- /dev/null
+++ b/editors/mg2a/patches/patch-ae
@@ -0,0 +1,14 @@
+$NetBSD: patch-ae,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./sys/default/tty.c.orig Sun Jul 3 10:50:35 1988
++++ ./sys/default/tty.c Thu Mar 30 08:35:34 2000
+@@ -144,7 +144,8 @@
+ #endif
+
+ if(CM == NULL || UP == NULL)
+- panic("This terminal is to stupid to run MicroGnuEmacs\n");
++/* panic("This terminal is to stupid to run MicroGnuEmacs\n"); refling */
++ panic("This terminal setting is not supported by MicroGnuEmacs.\n"); // refling
+ ttresize(); /* set nrow & ncol */
+
+ /* watch out for empty capabilities (sure to be wrong) */
diff --git a/editors/mg2a/patches/patch-af b/editors/mg2a/patches/patch-af
new file mode 100644
index 00000000000..e70076c6993
--- /dev/null
+++ b/editors/mg2a/patches/patch-af
@@ -0,0 +1,102 @@
+$NetBSD: patch-af,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./Makefile.orig Thu Mar 30 08:35:28 2000
++++ ./Makefile Thu Mar 30 08:35:34 2000
+@@ -17,7 +17,7 @@
+ # REGEX -- create regular expression functions
+ #
+ #CDEFS = -DDO_METAKEY
+-CDEFS = -DDO_METAKEY -DPREFIXREGION
++CDEFS = -DDO_METAKEY -DPREFIXREGION -DSTARTUPFILE=\"mg.rc\" -DNO_BACKUP -DSYMBLINK
+ CFLAGS = -g $(CDEFS)
+
+ # Objects which only depend on the "standard" includes
+@@ -42,8 +42,14 @@
+ OINCS = ttydef.h sysdef.h chrdef.h
+ INCS = def.h
+
++# refling - added these and the @ for peace and quiet. All $(RM) and
++# $(LN) below are mine! Also added the all target for NetBSD pkgs.
++
++RM = @rm -f
++LN = @ln
++
+ mg: $(OBJ)
+- cc $(CFLAGS) -o mg $(OBJ) $(LIBS)
++ gcc $(CFLAGS) -o mg $(OBJ) $(LIBS)
+
+ # strip mg once you're satisfied it'll run -- makes it much smaller
+ strip:
+@@ -75,44 +81,52 @@
+ $(OOBJS): $(INCS) $(OINCS)
+
+ sysdef.h: sys/$(SYS)/sysdef.h # Update links, if needed.
+- rm -f sysdef.h
+- ln sys/$(SYS)/sysdef.h .
++ $(RM) sysdef.h
++ $(LN) sys/$(SYS)/sysdef.h .
+
+ ttydef.h: sys/default/ttydef.h
+- rm -f ttydef.h
+- ln sys/default/ttydef.h .
++ $(RM) ttydef.h
++ $(LN) sys/default/ttydef.h .
+
+ chrdef.h: sys/default/chrdef.h
+- rm -f chrdef.h
+- ln sys/default/chrdef.h .
++ $(RM) chrdef.h
++ $(LN) sys/default/chrdef.h .
+
+ fileio.c: sys/$(SYS)/fileio.c
+- rm -f fileio.c
+- ln sys/$(SYS)/fileio.c .
++ $(RM) fileio.c
++ $(LN) sys/$(SYS)/fileio.c .
+
+ spawn.c: sys/$(SYS)/spawn.c
+- rm -f spawn.c
+- ln sys/$(SYS)/spawn.c .
++ $(RM) spawn.c
++ $(LN) sys/$(SYS)/spawn.c .
+
+ tty.c: sys/default/tty.c
+- rm -f tty.c
+- ln sys/default/tty.c .
++ $(RM) tty.c
++ $(LN) sys/default/tty.c .
+
+ ttyio.c: sys/$(SYS)/ttyio.c
+- rm -f ttyio.c
+- ln sys/$(SYS)/ttyio.c .
++ $(RM) ttyio.c
++ $(LN) sys/$(SYS)/ttyio.c .
+
+ ttykbd.c: sys/default/ttykbd.c
+- rm -f ttykbd.c
+- ln sys/default/ttykbd.c .
++ $(RM) ttykbd.c
++ $(LN) sys/default/ttykbd.c .
+
+ cinfo.c: sys/default/cinfo.c
+- rm -f cinfo.c
+- ln sys/default/cinfo.c .
++ $(RM) cinfo.c
++ $(LN) sys/default/cinfo.c .
+
+ port: $(SRCS) $(INCS)
+- rm -f port
++ $(RM) port
+ tar cfb port 1 $?
+
+-clean:; rm -f $(OBJ) $(OSRCS) $(OINCS)
++clean:; $(RM) $(OBJ) $(OSRCS) $(OINCS) mg
++
++all: $(OBJ)
++ cc $(CFLAGS) -o mg $(OBJ) $(LIBS)
++ strip mg
+
++install:
++ $(INSTALL_PROGRAM) mg $(PREFIX)/bin
++ $(INSTALL_DATA) mg.rc $(PREFIX)/bin
++ $(INSTALL_DATA) mg.1 $(PREFIX)/man/man1
diff --git a/editors/mg2a/patches/patch-ag b/editors/mg2a/patches/patch-ag
new file mode 100644
index 00000000000..7e25e47b467
--- /dev/null
+++ b/editors/mg2a/patches/patch-ag
@@ -0,0 +1,32 @@
+$NetBSD: patch-ag,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./dir.c.orig Sun Jul 3 10:50:52 1988
++++ ./dir.c Thu Mar 30 08:35:34 2000
+@@ -11,6 +11,7 @@
+ #ifndef getwd /* may be a #define */
+ char *getwd();
+ #endif
++char *getcwd(); /* refling added this */
+ char *wdir;
+ static char cwd[NFILEN];
+
+@@ -19,7 +20,8 @@
+ */
+ dirinit()
+ {
+- if (!(wdir = getwd(cwd)))
++/* if (!(wdir = getwd(cwd))) refling was here */
++ if (!(wdir = getcwd(cwd, NFILEN)))
+ panic("Can't get current directory!");
+ }
+
+@@ -40,7 +42,8 @@
+ ewprintf("Can't change dir to %s", bufc);
+ return(FALSE);
+ } else {
+- if (!(wdir = getwd(cwd)))
++/* if (!(wdir = getwd(cwd))) refling was here */
++ if (!(wdir = getcwd(cwd, NFILEN)))
+ panic("Can't get current directory!");
+ ewprintf("Current directory is now %s", wdir);
+ return(TRUE);
diff --git a/editors/mg2a/patches/patch-ah b/editors/mg2a/patches/patch-ah
new file mode 100644
index 00000000000..0660732352d
--- /dev/null
+++ b/editors/mg2a/patches/patch-ah
@@ -0,0 +1,60 @@
+$NetBSD: patch-ah,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./main.c.orig Sun Jul 3 10:49:25 1988
++++ ./main.c Thu Mar 30 08:35:35 2000
+@@ -20,6 +20,35 @@
+
+ static VOID edinit();
+
++// refling all the next few lines....
++#include <stdio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <stdlib.h>
++
++char *getrc(char *progname, char *tmpr)
++{
++char *p, *e;
++int gotit = 0;
++char tmp[1000];
++struct stat statb;
++if (NULL == strrchr(progname, '/')) {
++ p = (char *)strcat(getenv("PATH"), ":");
++ while (NULL != (e = (char *)strchr(p, ':')))
++ {*e = 0;
++ if (!stat(strcat(strcpy(tmp, p), "/mg.rc"), &statb)) return(strcpy(tmpr, tmp));
++ p = ++e;}}
++else {
++ strcpy(tmp, progname);
++ *(char *)strrchr(tmp, '/') = 0;
++ strcat(tmp, "/mg.rc");
++ if (!stat(tmp, &statb)) return(strcpy(tmpr, tmp));}
++return(NULL);
++}
++
++// refling end.........
++
++
+ VOID
+ main(argc, argv)
+ int argc;
+@@ -27,6 +56,8 @@
+ {
+ #ifndef NO_STARTUP
+ char *startupfile();
++ char *getrc(); // refling
++ char tmppp[200]; // refling
+ #endif
+ char *cp;
+ VOID vtinit(), makename(), eerase();
+@@ -47,7 +78,9 @@
+ */
+ update();
+ #ifndef NO_STARTUP /* User startup file. */
+- if ((cp = startupfile((char *)NULL)) != NULL)
++// if ((cp = startupfile((char *)NULL)) != NULL)
++// (VOID) load(cp);
++ if ((cp = getrc(argv[0], tmppp)) != NULL) // refling
+ (VOID) load(cp);
+ #endif
+ while (--argc > 0) {
diff --git a/editors/mg2a/patches/patch-ai b/editors/mg2a/patches/patch-ai
new file mode 100644
index 00000000000..63fd59b9430
--- /dev/null
+++ b/editors/mg2a/patches/patch-ai
@@ -0,0 +1,12 @@
+$NetBSD: patch-ai,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./REPACK.orig Thu Mar 30 08:35:35 2000
++++ ./REPACK Thu Mar 30 08:35:35 2000
+@@ -0,0 +1,7 @@
++# John Refling
++rm -f ../mg2a_src
++cp sys/bsd/Makefile .
++make clean
++rm -f Makefile core mg.core
++tar -zcvf ../mg2a_src-netbsd-1.0.tgz .
++echo result is in ../mg2a_src-netbsd-1.0.tgz
diff --git a/editors/mg2a/patches/patch-aj b/editors/mg2a/patches/patch-aj
new file mode 100644
index 00000000000..1fdd01824ad
--- /dev/null
+++ b/editors/mg2a/patches/patch-aj
@@ -0,0 +1,56 @@
+$NetBSD: patch-aj,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./mg.rc.orig Thu Mar 30 08:35:35 2000
++++ ./mg.rc Thu Mar 30 08:35:35 2000
+@@ -0,0 +1,51 @@
++; Small key definition file for VT100 terminals using the termcap
++; driver. This only works if XKEYS is defined during compilation.
++;
++(global-set-key "\e[A" 'previous-line) ; VT100 small keypad up arrow
++(global-set-key "\e[B" 'next-line) ; VT100 small keypad down arrow
++(global-set-key "\e[C" 'forward-char) ; VT100 small keypad right arrow
++(global-set-key "\e[D" 'backward-char) ; VT100 small keypad left arrow
++(global-set-key "\^H" 'delete-backward-char)
++;
++(global-set-key "\eOA" 'previous-line) ; MS TELNET small keypad up arrow
++(global-set-key "\eOB" 'next-line) ; MS TELNET small keypad down arrow
++(global-set-key "\eOC" 'forward-char) ; MS TELNET small keypad right arrow
++(global-set-key "\eOD" 'backward-char) ; MS TELNET small keypad left arrow
++;
++; The following pairs are for the PC running EM4010 and the VT220 respectively
++; They affect only the far right application keypad:
++;
++(global-set-key "\e\eA" 'previous-line) ; PC keypad up arrow
++(global-set-key "\eOx" 'previous-line) ; VT keypad 8
++(global-set-key "\e\eB" 'next-line) ; PC keypad down arrow
++(global-set-key "\eOr" 'next-line) ; VT keypad 2
++(global-set-key "\e\eC" 'forward-char) ; PC keypad right arrow
++(global-set-key "\eOv" 'forward-char) ; VT keypad 6
++(global-set-key "\e\eD" 'backward-char) ; PC keypad left arrow
++(global-set-key "\eOt" 'backward-char) ; VT keypad 4
++(global-set-key "\e\017n" 'delete-char) ; PC keypad del
++(global-set-key "\e\On" 'delete-char) ; VT keypad .
++(global-set-key "\e\017s" 'scroll-up) ; PC keypad PgUp
++(global-set-key "\eOs" 'scroll-up) ; VT keypad 9
++(global-set-key "\e\017y" 'scroll-down) ; PC keypad PgUp
++(global-set-key "\e\Oy" 'scroll-down) ; VT keypad 3
++(global-set-key "\e\017w" 'beginning-of-line) ; PC keypad Home
++(global-set-key "\eOw" 'beginning-of-line) ; VT keypad 7
++(global-set-key "\e\017q" 'end-of-line) ; PC keypad End
++(global-set-key "\e\Oq" 'end-of-line) ; VT keypad 1
++(global-set-key "\e\017M" 'fill-paragraph) ; PC keypad +
++(global-set-key "\eOM" 'fill-paragraph) ; VT keypad Enter
++(global-set-key "\eOn" 'fill-paragraph) ; cute keypad enter
++(global-set-key "\e\017u" 'query-replace) ; PC keypad 5
++(global-set-key "\e\Ou" 'query-replace) ; VT keypad 5
++
++(global-set-key "\eOP" 'start-kbd-macro) ; PC F1 key
++(global-set-key "\eOQ" 'end-kbd-macro) ; PC F2 key
++(global-set-key "\eOS" 'call-last-kbd-macro) ; PC F4 key
++;
++; For the SUN type 2 keyboard under NetBSD:
++;
++(global-set-key "\e[215z" 'previous-line) ; keypad up arrow
++(global-set-key "\e[221z" 'next-line) ; keypad down arrow
++(global-set-key "\e[219z" 'forward-char) ; keypad right arrow
++(global-set-key "\e[217z" 'backward-char) ; keypad left arrow
diff --git a/editors/mg2a/patches/patch-ak b/editors/mg2a/patches/patch-ak
new file mode 100644
index 00000000000..bc1f5d4bc9e
--- /dev/null
+++ b/editors/mg2a/patches/patch-ak
@@ -0,0 +1,1067 @@
+$NetBSD: patch-ak,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./mg.1.orig Thu Mar 30 08:35:36 2000
++++ ./mg.1 Thu Mar 30 08:35:36 2000
+@@ -0,0 +1,1062 @@
++.Dd January 28, 2000
++.Dt MG 1
++.Os
++.Sh NAME
++.Nm mg
++.Nd an emacs clone (formerly named MicroGnuEmacs)
++.Sh SYNOPSIS
++.Nm
++.Op Ar file ...
++.Sh DESCRIPTION
++MG is a small, fast, and portable Emacs-style text editor intended to
++be used by people who can't run a real Emacs for one reason or another.
++.Pp
++We've made MG compatible with GNU Emacs because that is the big,
++full-featured editor that many use regularly and are most
++familiar with.
++.Pp
++MG runs on many different kinds of hardware under many different
++operating systems. A small and fast version compiled for MSDOS
++is available at ftp://ftp.cdrom.com/pub/simtelnet/msdos/editor/mg2a_exe.zip.
++.Sh Notation and Conventions
++To type a control character, use the control key on your
++keyboard like a shift key: hold down the control key while typing the
++character. We will indicate control characters as:
++C-x ie, type the character x while holding down the control key.
++.Pp
++Some keyboards also have a meta key that works like the control
++key. You can also use the escape key as a meta
++prefix; first type the escape, and then the character. Meta
++characters will be indicated as M-x.
++.Pp
++Besides the meta prefix, two other characters are used as prefixes:
++C-x and C-h. A few keys have special notation: SPC is
++the space character, DEL is the delete or rubout character, RET
++is carriage return, and ESC is the escape character. NUL is
++the null character (ASCII 0), which is usually equivalent to either
++C-SPC or C-@.
++.Pp
++Uppercase and lowercase characters are generally equivalent in command
++keystrokes.
++.Pp
++When you run MG from a shell, command line arguments are interpreted as the
++names of files you want to visit, or edit. Each file is
++read into a buffer in memory. No changes are actually made to
++the file until you ask it to be written out to disk.
++.Pp
++Within MG, the large top part of the screen serves as a window into
++the buffer being edited. Below this is the mode line, which
++displays the name of the buffer. Finally, at the very bottom of the screen,
++there is a one-line minibuffer which is used for displaying
++messages and answering questions.
++.Pp
++MG keeps track of two pointers into each window, the point and the
++mark. The cursor appears at the point in the current
++window, and we often speak of moving the cursor rather than of moving the
++point. The text between the point and the mark is referred to as the
++region.
++.Pp
++Some commands deal with words and paragraphs.
++Generally, whitespace and punctuation separate words. Lines that are
++empty or that contain only spaces or tabs separate paragraphs without
++being part of a paragraph. A non-empty line that starts with a space
++or tab also begins a new paragraph.
++.Pp
++A number of commands are defined as toggles. If no prefix argument
++is supplied, these commands toggle an action. The action is turned on if a
++negative or zero argument is supplied, and turned on if a positive argument
++is supplied.
++.Sh Frequently used commands
++.Pp
++C-p move the cursor to the previous line
++.Pp
++C-n move the cursor to the next line
++.Pp
++C-b move the cursor backwards
++.Pp
++C-f move the cursor forwards
++.Pp
++C-v scroll forwards one screenful
++.Pp
++M-v scroll backwards one screenful
++.Pp
++M-< go to the beginning of the buffer
++.Pp
++M-> go to the end of the buffer
++.Pp
++C-a go to the beginning of the line
++.Pp
++C-e go to the end of the line
++.Pp
++DEL delete the previous character
++.Pp
++C-k kill (delete) to the end of line
++.Pp
++C-y reinsert killed text.
++.Pp
++C-x C-c exit MG
++.Pp
++C-x C-s save the current buffer
++.Sh Command Arguments
++MG prompts for command arguments in the minibuffer. Within the minibuffer,
++the following characters can be used for editing:
++.Pp
++DEL or C-h erase the last character.
++.Pp
++C-x or C-u erase the entire input line.
++.Pp
++C-w erase to the beginning of the previous word.
++.Pp
++C-q or \\ quote the next character typed.
++.Pp
++RET signifies that you have completed typing in the argument.
++.Pp
++C-g abort the command in progress.
++.Sh Prefix Arguments
++All commands accept an optional numeric prefix argument. This is
++often interpreted as a repetition count. For example, the function
++next-line, if given a prefix argument, will move the cursor
++forward that many lines; without an argument, it will move the cursor
++forward one line. A few commands behave differently if given a prefix
++argument than they do without one, and others ignore the prefix
++argument entirely.
++.Bl -tag -width indent
++.It digit-argument, M-# & negative-argument, M--
++One way to specify a command argument is to use the escape key
++as a meta prefix, and then type one or more digits. A dash may be
++used for a negative argument (# = 0,1,2,3,4,5,6,7,8,9).
++.It universal-argument, C-u
++Another way to specify a command prefix is to type C-u.
++Typing one C-u is equivalent to a prefix argument of 4, typing
++two gives a value of 16, and so on. In addition, you can type digits
++following C-u to form a numeric prefix argument.
++.Sh Aborting
++.It keyboard-quit, C-g
++Typing C-g cancels any command. It is particularly useful
++for cancelling a command when MG is prompting for input in the minibuffer.
++.Sh Extended commands
++.It execute-extended-command, M-x
++Commands that are not bound to keys can be executed through
++execute-extended-command. If a prefix argument is supplied, it
++is passed to the command being executed.
++.Sh Moving the cursor
++.It backward-char, C-b
++Moves the cursor backward (left) one character. If the cursor
++is at the left margin, it will be moved to the end of the previous line.
++.It backward-paragraph, M-[
++Moves the cursor backwards to the beginning of the current
++paragraph, or to the beginning of the previous paragraph if the cursor
++is already at the beginning of a paragraph.
++.It backward-word, M-b
++Moves the cursor backwards to the beginning of the current word,
++or to the beginning of the previous word if the cursor is already at
++the beginning of a word.
++.It beginning-of-buffer, M-<
++Moves the cursor backwards to the beginning of the buffer.
++.It beginning-of-line, C-a
++Moves the cursor backwards to the beginning of the current
++line. This command has no effect if the cursor is already at the beginning
++of the line.
++.It end-of-buffer, M->
++Moves the cursor forwards to the end of the buffer.
++.It end-of-line, C-e
++Moves the cursor forwards to the end of the current line. This
++command has no effect if the cursor is already at the end of the line.
++.It exchange-point-and-mark, C-x C-x
++Set the mark at the current cursor position, and move the cursor
++to the old location of the mark.
++.It forward-char, C-f
++Moves the cursor forwards one character. If the cursor is at the
++end of a line, it will be moved to the first character on the next line.
++.It forward-paragraph, M-]
++Moves the cursor forwards to the next paragraph delimiter.
++.It forward-word, M-f
++Moves the cursor forwards to the end of the current word, or to
++the end of the next word if the cursor is already at the end of a word.
++.It goto-line
++Moves the cursor to the beginning of line the line number in
++the buffer.
++.It next-line, C-n
++Moves the cursor down one line. The cursor remains in the same
++column unless it would be past the end of the line, in which case it is
++moved to the end of the line. At the end of the buffer, C-n will
++create new lines.
++.It previous-line, C-p
++Moves the cursor up one line. The cursor remains in the same
++column unless it would be past the end of the line, in which case it is
++moved to the end of the line.
++.It recenter, C-l
++Redraws the entire screen, scrolling the current window if necessary
++so that the cursor is near the center. With a positive prefix argument
++n, the window is scrolled so that the cursor is n lines
++from the top. A negative prefix argument puts the cursor that many lines
++from the bottom of the window.
++.It redraw-display
++Redraws the entire screen, but never scrolls.
++.It scroll-down, M-v
++Scrolls the display down (moving backward through the
++buffer). Without
++an argument, it scrolls slightly less than one windowful. A prefix argument
++scrolls that many lines.
++.It scroll-one-line-down & scroll-one-line-up
++These functions are similar to scroll-down and scroll-up, but when
++invoked without an argument, cause the display
++to scroll by one line only. These functions are enabled by defining the
++compile-time option GOSMACS.
++.It scroll-other-window, M-C-v
++Scrolls the other window forward as for scroll-up.
++.It scroll-up, C-v
++Scrolls the display up (moving forward through the buffer). Without an
++an argument, it scrolls slightly less than one windowful. A prefix argument
++scrolls that many lines.
++.It set-mark-command
++Set the mark at the current cursor position.
++.It what-cursor-position, C-x =
++Prints some information in the minibuffer about where the cursor is.
++.Sh Text Insertion Commands
++The usual way to insert text into a buffer is simply to type the
++characters. The default binding for all of the printing characters
++self-insert-command causes them to be inserted literally at
++the cursor position.
++.It insert
++Insert typed string into the current buffer at the cursor position.
++.It newline, RET
++Insert a line break into the current buffer at the cursor position,
++moving the cursor forward to the beginning of the new line.
++.It newline-and-indent, C-j
++Insert a line break into the current buffer at the cursor position,
++then add extra whitespace so that the cursor is aligned in the same
++column as the first non-whitespace character in the previous line.
++.It open-line, C-o
++Inserts a line break into the current buffer at the current position,
++but does not move the cursor forward.
++.It quoted-insert, C-q
++This command acts as a prefix to
++cancel the normal interpretation of the next keystroke. If C-q
++is followed by one to three octal digits, it is interpreted as the
++code of the character to insert. Otherwise a single key is read and
++the character typed is inserted into the buffer instead of interpreted
++as a command. This is used for inserting literal control characters
++into a buffer.
++.It self-insert-command
++This is the default binding for keys representing printable
++characters. The character is inserted into the buffer at the cursor
++position, and the cursor moved forward.
++.Sh Killing, Deleting, and Moving Text
++When text is deleted, it is erased completely. Killing text, on the
++other hand, moves it into a temporary storage area called the kill
++buffer. The saved text in the kill buffer is erased when another
++block of text is killed. Until then, however, you can retrieve text
++from the kill buffer. This can be used to move or copy blocks of
++text, as well as to restore accidentally killed text.
++.It backward-kill-word, M-DEL
++Kill the text backwards from the cursor position to the beginning
++of the current word. Typing M-DEL several times in succession
++prepends each killed word to the kill buffer.
++.It copy-region-as-kill, M-w
++Copies the text in the region into the kill buffer, without removing
++it from the current buffer.
++.It delete-backward-char, DEL
++Deletes the character to the left of the cursor.
++.It delete-blank-lines, C-x C-o
++Deletes all blank lines after the current line, and if the current
++line is blank, deletes it and all blank lines preceeding it as well.
++.It delete-char, C-d
++Deletes the character underneath the cursor.
++.It delete-horizontal-space, M-backslash
++Deletes all spaces and tabs on either side of the cursor.
++.It just-one-space, M-SPC
++This is like delete-horizontal-space, except it leaves a single
++space at the cursor position.
++.It kill-line, C-k
++If no prefix argument is specified, this function kills text up
++to the next newline; or if the cursor is at the end of a line, the newline
++is killed. A prefix argument specifies how many lines to kill. Typing
++C-k several times in succession appends each line to the kill buffer.
++.It kill-paragraph
++This command kills the entire paragraph containing the cursor.
++If the cursor is positioned between paragraphs, the next paragraph is killed.
++.It kill-region, C-w
++The region (all text between point and mark) is killed.
++.It kill-word, M-d
++Text is killed forward from the cursor position to the next
++end of word. If the cursor is at the end of the word, then the next
++word is killed. Typing M-d several times appends the killed
++text to the kill buffer.
++.It yank, C-y
++Text is copied from the kill buffer into the current buffer at
++the cursor position. The cursor is moved to the end of the inserted
++text.
++.Sh Searching and Replacing
++The ordinary search command in MG differs from that in many other editors
++in that it is incremental: it begins searching as soon as you begin
++typing the search string, instead of waiting for you to type the entire
++string. All of the search commands described in this section are
++case-insensitive.
++.It isearch-backward, C-r & isearch-forward, C-s
++These commands perform an incremental search backward and
++forward, respectively, for a typed pattern. MG will move the cursor
++to the place in the buffer that matches as much of the pattern as you
++have typed so far, as each character is entered.
++.Pp
++Within the incremental search, the following characters are interpreted
++specially:
++.Pp
++\ DEL Erase the last character in the search string.
++.Pp
++\ ESC Stop searching; exit from incremental search
++mode, leaving the cursor where the search brought it.
++.Pp
++\ C-g If a match has been found, exits from
++incremental search but leaves the cursor in its original position. If
++the search has failed, this will just erase the characters which have
++not been found from the end of the search pattern. In this case, you
++must type C-g again to abort the search.
++.Pp
++\ C-s Search forward for the next occurrence of the
++same pattern.
++.Pp
++\ C-r Search backward for the previous occurrence of
++the same pattern.
++.Pp
++\ C-q Quotes the next character typed, forcing it
++to be interpreted as a literal character in the search pattern.
++.Pp
++In addition, normal commands such as C-a that do not have special
++meanings within incremental search cause the search to be terminated, and
++then are executed in the ordinary way.
++.It search-again & search-backward, M-r & search-forward, M-s
++These commands perform ordinary, non-incremental searches.
++Search-again uses the same pattern and direction as the previous
++search.
++.Sh Replacing
++.It query-replace, M-%
++The primary replace command in MG is an interactive query replace.
++MG searches forward for occurrences of pattern, and asks you what
++to do about each one. The choices are:
++.Pp
++SPC Replace this match with replacement,
++and go on to the next.
++.Pp
++DEL Skip to the next match without replacing this one.
++.Pp
++\ . Replace this match, and then quit.
++.Pp
++! Replace all remaining occurrences without asking again.
++.Pp
++ESC Quit.
++.Pp
++By default, query-replace adjusts the case of lower-case letters
++in the replacement string to match that of the
++particular occurrence of the pattern; for example, replacing Foo
++with bar results in Bar. Upper case letters in the replacement
++string are always left uppercase. In addition, supplying a prefix argument
++will also tell query-replace to leave the case of the replacement
++string as-is.
++.Pp
++Note that query-replace always performs a case-insensitive search.
++.Sh Regular Expressions
++Regular expressions provide a means for specifying complex search
++patterns, instead of just a literal string. The commands in this
++section are available only if MG is compiled with the REGEX option
++defined.
++.Pp
++Regular expression syntax uses the following rules. Most characters
++in a regular expression are considered to be ordinary characters,
++and will match themselves and nothing else. The exceptions are the
++special characters listed below.
++.Pp
++\ . Matches any single character except a newline.
++.Pp
++* A suffix operator that matches zero or more
++repetitions of the (smallest) preceding regular expression.
++.Pp
+++ A suffix operator that matches one or more
++repetitions of the (smallest) preceding regular expression.
++.Pp
++? A suffix operator that matches either zero or one
++occurence of the (smallest) preceding regular expression.
++.Pp
++[...] Matches any one character listed in the
++character set between the square brackets. See examples below.
++.Pp
++^ Matches at the beginning of a line.
++.Pp
++dollar Matches at the end of a line.
++.Pp
++\\ Except for the situations listed
++below, acts as a prefix operator which causes the character following
++to be treated as an ordinary character.
++.Pp
++\\bar An infix binary or operator.
++It applies to the two largest surrounding expressions.
++.Pp
++\\(...\\) A grouping construct,
++usually used to specify a larger expression for postfix operators such
++as * or to limit the scope of operands to \|.
++.Pp
++\\# Matches the same text
++matched by the #_th \\(...\\) construct. These are
++numbered from 1 to 9 in the order that the open-parentheses appear.
++.It count-matches & count-non-matches
++These commands count the number of lines which do or do not
++(respectively) match the specified pattern.
++.It delete-matching-lines & delete-non-matching-lines
++These commands delete all lines which do or do not (respectively)
++match the specified pattern.
++.It query-replace-regexp
++This is the regular expression version of query-replace.
++The replacement string may be a constant, or it can refer to
++all or part of the string matched by the pattern. \& in
++the replacement string expands into the entire text being replaced,
++while n (where n is a number) replaces the
++n_th parenthesized expression in pattern.
++.It re-search-again & re-search-backward & re-search-forward
++These are the regular expression equivalents of the ordinary
++non-incremental search commands.
++.It set-case-fold-search
++This command toggles an internal variable that controls whether
++the regular expression search and replace commands pay attention to
++case. By default, regular expression searches are case-insensitive.
++Ordinary searches are always case-insensitive and are not affected by
++the setting of this variable.
++.Pp
++See the latex version for the documentation for better description.
++.Sh Windows
++MG initially has only one text window displayed. However, you can have
++as many windows as will fit on the screen. Each window has its own mode
++line and must display at least two lines of text. (Note that MG's
++windows are distinct from the windows handled by screen managers
++such as the X Window System.)
++.Pp
++Multiple windows may be used to display different buffers. You can also
++have the same buffer displayed in more than one window, which is useful
++if you want to see one part of a file at the same time as you are editing
++another part.
++.Pp
++Although many windows can be displayed at once, only one window is active
++at any given time. This is the window where the cursor appears.
++.Pp
++Some commands refer to the other window. This is the window directly
++below the current window, or the top window if you are in the bottom window.
++.It delete-other-windows, C-x 1
++Makes the current window the only window.
++.It delete-window, C-x 0
++Deletes the current window, making the other window the
++current window. This command doesn't do anything useful if there is only
++one window being displayed.
++.It enlarge-window C-^
++Makes the current window larger. Without a prefix argument, the
++window grows one line; otherwise, the prefix argument specifies how many
++lines to grow.
++.It other-window, C-x o
++Makes the other window the current window.
++.It previous-window
++This is like other-window, except that it cycles through
++the windows in reverse order. This command is available only if MG was
++compiled with the GOSMACS option defined.
++.It shrink-window
++Makes the current window smaller. Without a prefix argument, the
++window loses one line; otherwise, the prefix argument specifies how many
++lines go away.
++.It split-window-vertically, C-x 2
++Split the current window into two windows, both using the same
++buffer.
++.Sh Files and Buffers
++Most buffers are used to contain a file being edited. It is
++also possible to have buffers that are not associated with any file;
++MG uses these for purposes such as displaying help text, for example.
++However, since most commands for dealing with files also deal with
++buffers, we have grouped all of these commands together into one chapter.
++.It insert-buffer
++Inserts the contents of the named buffer into the current buffer
++at the cursor location. The cursor moves to the end of the inserted
++text.
++.It kill-buffer C-x k
++The named buffer and its contents are deleted. If the buffer has
++been marked as modified, MG will ask you if you really want to delete it.
++Note that, contrary to its name, this command does not save the
++buffer contents in the kill buffer.
++If a buffer is being displayed in a window when it is deleted, MG will
++find some other buffer to display in the same window.
++.It list-buffers, C-x C-b
++This command writes information about the buffers currently in
++use to a buffer named Buffer List. This buffer is then displayed
++in the other window; if there is only one window, this command will
++split the screen into two windows.
++.It not-modified, M-~
++This command makes MG think that the current buffer has not been
++modified, even if it really has been changed. This affects the behavior
++of the kill-buffer and the buffer-saving commands described below.
++.Pp
++MG indicates modified buffers with two stars at the left end of the mode
++line.
++.It switch-to-buffer, C-x b
++The current window is mapped onto the named buffer. If there
++isn't already a buffer with that name around, MG will create one.
++.It switch-to-buffer-other-window, C-x 4 b
++This command works like switch-to-buffer, except that the
++other window is used. If there is only one window, this command
++splits the screen into two windows and maps the named buffer onto one
++of them.
++.Sh Reading and Writing Files
++.It find-file C-x f & find-file-other-window C-x 4 C-f
++These commands are analagous to switch-to-buffer and
++switch-to-buffer-other-window, respectively. The difference is that
++these commands look for a buffer associated with the named file. If no
++matching buffer is found, MG will create a new buffer with a name
++derived from the filename, and attempt to read the file into the buffer.
++If the named file cannot be opened, the buffer remains empty.
++.It insert-file C-x i
++This command reads in the contents of the named file into the
++current buffer at the cursor position. The cursor remains in the same
++place.
++.It save-buffer, C-x C-s
++If the current buffer has been modified, it is saved. Buffers
++that are not associated with files cannot be written out with this
++command.
++.It save-buffers-kill-emacs, C-x C-c
++This command is used to leave MG and return control to the shell
++or other program that was used to start MG. If there are modified buffers,
++MG will ask you if you want to save them before exiting.
++.It save-some-buffers, C-x s
++MG will ask you if you want to save modified buffers that are
++associated with files.
++.It write-file C-x C-w
++The current buffer is written out using the file name supplied.
++This is useful for saving buffers that are not associated with files, or
++for writing out a file with a different name than what was used to read
++it in.
++.Sh Backup Files
++MG provides a way to save a copy of the original version of files which
++have been modified and then written out again. The backup copy reflects
++the state of the file as it existed the first time it was read into MG.
++The name used for the backup file varies, depending on the operating
++system.
++.Pp
++This feature is disabled if MG is compiled with NO_BACKUP defined.
++.It make-backup-files
++This command is a toggle which
++controls the state of an internal variable that determines whether MG
++creates backup files.
++.Sh Changing the Directory
++The commands in this section are disabled by defining NO_DIR.
++.It cd
++This command changes MG's notion of the current directory
++or pathname. This is used to supply defaults for functions that read
++or write files.
++.It pwd
++Display what MG thinks is the current directory.
++.Sh Modes
++Modes are used to locally alter the bindings of keys on a
++buffer-by-buffer basis. MG is normally in fundamental mode, and these
++are the bindings that are listed with the command descriptions in
++this manual. Modes define additional keymaps that are searched for
++bindings before the fundamental mode bindings are examined; see the
++section on key binding below for more details on how this works.
++.It set-default-mode
++Normally, when MG visits a file, it puts the associated buffer
++into fundamental mode. Using the set-default-mode command, you
++can specify that MG should default to use some other mode on all subsequent
++buffers that are created. This command is a toggle. With no prefix
++argument, if the named mode is not already on the list of
++default modes, then it will be added to the list; otherwise, it is removed
++from the list.
++.It no-tab-mode
++This command is a toggle to control whether notab mode is in effect.
++In notab mode, tabs are expanded into spaces instead of inserted
++literally into the buffer. Literal tab characters are displayed as
++^I (much like other control characters). These commands are
++available if MG is compiled with the symbol NOTAB defined. (This mode
++is mainly for use on systems such as PRIMOS that do not treat tab as a
++series of spaces.)
++.It space-to-tabstop
++Insert enough spaces to move the cursor to the next tab stop. In
++notab mode, this function is bound to C-i.
++.It overwrite-mode
++This command is a toggle which controls whether overwrite mode is
++in effect.
++Normally, when characters are inserted into the buffer, they are spliced
++into the existing text. In overwrite mode, inserting a character causes
++the character already at the cursor position to be replaced. This is
++useful for editing pictures, tables, and the like.
++.It auto-fill-mode
++This command is a toggle which controls whether fill mode is
++in effect.
++Fill mode causes newlines to be added automatically at word
++breaks when text is added at the end of a line, extending past the
++right margin. Auto fill is useful for editing text and documentation
++files.
++.It insert-with-wrap
++This command works like self-insert, except that it checks
++to see if the cursor has passed the right margin. If so, it fills
++the line by inserting a line break between words. This command is bound to
++SPC in fill mode.
++.It fill-paragraph, M-q
++Fill the paragraph containing the cursor.
++.It set-fill-column, C-x f
++Without a prefix argument, this command sets the right margin
++at the current cursor column. If a prefix argument is supplied, it is used
++instead as the line width.
++.It auto-indent-mode
++This command is a toggle which controls whether auto-indent mode
++is in effect.
++Indent mode binds RET to newline-and-indent, so
++that each new line is indented to the same level as the preceeding
++line. This mode is useful for editing code.
++.It blink-matching-paren
++This command is a toggle which controls whether blink mode is
++in effect.
++Blink mode makes it easier to match parentheses, brackets, and other
++paired delimiters. When the closing delimiter is typed, the cursor
++moves momentarily to the matching opening delimiter (if it is on the
++screen), or displays the line containing the matching delimiter on the
++echo line. This is useful for editing Lisp or C code, or for
++preparing input files for text processors such as LaTeX that use
++paired delimiters.
++.It blink-matching-paren-hack
++This function behaves like self-insert, except that it
++finds the matching delimiter as described above. In blink mode, this
++function is bound to ), which flashes the matching (. This
++function also knows about the pairs {}, [], and <>.
++All other characters match with themselves.
++.Sh Dired Mode
++Dired is an abbreviation for directory editor, and it provides a way
++to browse through the contents of a directory from with MG. Dired puts
++a directory listing into a buffer; you can use normal editing commands to
++move around the buffer, and a special group of commands to manipulate
++the files. For example, there are commands to delete and rename files,
++and to read a file into an MG buffer.
++.Pp
++Since dired mode rebinds many keys, a table may be helpful:
++.Pp
++ C-d dired-flag-file-deleted
++.Pp
++ SPC next-line
++.Pp
++ c dired-copy-file
++.Pp
++ d dired-flag-file-deleted
++.Pp
++ e dired-find-file
++.Pp
++ f dired-find-file
++.Pp
++ n next-line
++.Pp
++ o dired-find-file-other-window
++.Pp
++ p previous-line
++.Pp
++ r dired-renamefile
++.Pp
++ u dired-unflag
++.Pp
++ x dired-do-deletions
++.Pp
++ DEL dired-backup-unflag
++.Pp
++The commands in this section are disabled by defining NO_DIRED.
++.It dired C-x d
++Creates a dired buffer for the given directory name, and displays
++it in the current window. The files
++in the directory are listed, usually along with information about the
++file such as its size and timestamp. The exact format of the information
++is system-specific.
++.It dired-backup-unflag
++This function removes the deletion flag from the file listed on
++the previous line of the dired buffer.
++.It dired-copy-file
++Copy the file listed on the current line of the dired buffer.
++.It dired-do-deletions
++Deletes the files that have been flagged for deletion.
++.It dired-find-file & dired-find-file-other-window
++These function works like find-file and find-file-other-window,
++except that the filename is taken
++from the current line in the dired buffer.
++.It dired-flag-file-deleted
++Flag the file listed on the current line for deletion. This is
++indicated in the buffer by putting a D at the left margin. No
++files are not actually deleted until the function dired-do-deletions
++is executed.
++.It dired-other-window
++This function works just like dired, except that it puts the
++dired buffer in the other window.
++.It dired-rename-file
++Renames the file listed on the current line of the dired buffer.
++Note that the dired buffer is not updated to reflect the change.
++.It dired-unflag
++Remove the deletion flag for the file on the current line.
++.Sh Help
++Most of the commands in this section write useful information to the
++*help* buffer, which is then displayed in the other window.
++.Pp
++These commands can be disabled at compile-time by defining NO_HELP.
++.It apropos, C-h a
++This command lists all functions whose names contain a string
++matching topic in the help buffer.
++.It describe-bindings, C-h b
++Information about the key bindings in effect in the current buffer
++is listed in the help buffer.
++.It describe-key-briefly, C-h c
++Information about the binding of ke is printed in the
++minibuffer.
++.It help-help, C-h C-h
++This command lists all of the help options available and
++prompts for which one to run. Currently, these include only a
++to run apropos, b to run describe-bindings, and c
++to run describe-key-briefly.
++.Sh Keyboard Macros
++A keyboard macro is a saved set of commands from the keyboard that can be
++reexecuted later on. There can only be one keyboard macro defined at
++any one time.
++.Pp
++The commands in this section are available unless they have been disabled
++by defining NO_MACRO.
++.It call-last-kbd-macro, C-x e
++Execute the saved keyboard macro. A prefix argument can be used
++to specify a repetition count.
++.It end-kbd-macro, C-x ) & start-kbd-macro, C-x (
++These functions are used to define a keyboard macro. All keys
++entered after start-kbd-macro is executed, up to a end-kbd-macro,
++are remembered as they are executed. You can then reexecute the same
++sequence of operations using call-last-kbd-macro.
++.Sh Changing Case
++MG provides a number of functions for changing the case of text.
++.It
++capitalize-word, M-c
++.It
++downcase-region, C-x C-l
++.It
++downcase-word, M-l
++.It
++upcase-region, C-x C-u
++.It
++upcase-word, M-u
++.Sh Odds and Ends
++This section describes miscellaneous commands that don't fit into any
++particular category.
++.It emacs-version
++Prints information about the version of MG you are running in
++the minibuffer.
++.It meta-key-mode
++If the particular version of MG you are running supports a meta key,
++this function can be used to determine whether MG actually pays attention
++to it or not. If no prefix argument is supplied, the internal variable
++that controls the use of the meta key is toggled; a positive value enables
++the meta key, while a negative value disables it.
++.It prefix-region & set-prefix-string
++Prefix-region is used to prefix each line of the region
++with a string. This is useful for indenting quoted text, making block
++comments, and the like. The function set-prefix-string can be
++used to set the string used as the prefix.
++.It suspend-emacs, C-z
++This command temporarily suspends
++MG so that you can run other programs, and later resume editing. The
++exact behavior depends on which operating system you are running MG
++under. Typically, MG will either spawn a new shell as a subprocess, or
++return you to the parent process.
++.It transpose-chars, C-t
++This command transposes the previous two characters.
++.Sh Customization
++MG provides a limited support for customization. However, unlike real
++Emacs, there is no extension language for interpretively defining new
++functions.
++.Sh Key Bindings
++MG allows keys to be rebound locally or globally. To understand the
++difference between the two, some discussion on how modes are implemented
++is necessary.
++.Pp
++An internal data structure called a keymap is used to look up the
++function that is bound to a particular key. The keymap for
++fundamental mode contains all of the default bindings which are listed
++with the command descriptions in this manual. Modes define additional
++keymaps that are searched for a binding before the fundamental mode
++keymap is examined. Keymaps have the same name as the mode they are
++associated with.
++.Pp
++MG does not provide commands for defining new modes, but you can alter
++the keymaps for existing modes.
++.It define-key
++This command can be used to modify the keymap for the named mode.
++.It global-set-key & global-unset-key
++These commands modify the keymap for fundamental mode. Bindings
++established by global-set-key will be inherited by all other modes,
++as long as they do not establish local rebindings of the same key.
++.It local-set-key & local-unset-key
++These commands modify the keymap currently in effect.
++.Sh Startup Files
++Although MG does not include a general-purpose extension language, it
++does provide a way to read and evaluate commands using a somewhat
++different syntax than that used for executing extended commands. This
++is typically used in a startup file to modify key bindings.
++.Pp
++A startup file consists of one or more expressions. Each expression must
++appear on a separate line in the file; there may not be more than one
++expression per line, nor may expressions span across line breaks.
++Whitespace (spaces and tabs) separate the tokens in an expression. For
++historical reasons, parentheses are also considered to be whitespace in
++this context. A semicolon acts as a comment character, causing the rest
++of the line to be discarded.
++.Pp
++An expression consists of a function name, an optional prefix argument
++(given as an integer constant), and arguments to be passed to the
++function. If an argument includes literal whitespace or nonprintable
++characters (for example, as in a keystroke argument to one of the key
++binding functions described in the previous section), it must be
++supplied as a string constant enclosed in double quotes.
++.Pp
++The following commands which deal with evaluation of expressions are
++disabled by defining the compile-time option NO_STARTUP. See the
++implementation notes for your particular version of MG for information
++on how it handles startup files.
++.It eval-current-buffer
++Evaluate the expressions in the current buffer.
++.It eval-expression
++Evaluate the expression supplied.
++.It load
++Read in the specified file and evaluate its contents.
++.El
++.Sh Fundamental Mode Key Bindings
++.Pp
++NUL set-mark-command
++.Pp
++C-a beginning-of-line
++.Pp
++C-b backward-char
++.Pp
++C-d delete-char
++.Pp
++C-e end-of-line
++.Pp
++C-f forward-char
++.Pp
++C-g keyboard-quit
++.Pp
++C-h help
++.Pp
++TAB self-insert-command
++.Pp
++C-j newline-and-indent
++.Pp
++C-k kill-line
++.Pp
++C-l recenter
++.Pp
++RET newline
++.Pp
++C-n next-line
++.Pp
++C-o open-line
++.Pp
++C-p previous-line
++.Pp
++C-q quoted-insert
++.Pp
++C-r isearch-backward
++.Pp
++C-s isearch-forward
++.Pp
++C-t transpose-chars
++.Pp
++C-u universal-argument
++.Pp
++C-v scroll-up
++.Pp
++C-w kill-region
++.Pp
++C-x c-x prefix
++.Pp
++C-y yank
++.Pp
++C-z suspend-emacs
++.Pp
++ESC meta prefix
++.Pp
++SPC .. ~ self-insert-command
++.Pp
++DEL delete-backward-char
++.Pp
++C-h C-g keyboard-quit
++.Pp
++C-h C-h help-help
++.Pp
++C-h a apropos
++.Pp
++C-h b describe-bindings
++.Pp
++C-h c describe-key-briefly
++.Pp
++C-x C-b list-buffers
++.Pp
++C-x C-c save-buffers-kill-emacs
++.Pp
++C-x C-f find-file
++.Pp
++C-x C-g keyboard-quit
++.Pp
++C-x C-l downcase-region
++.Pp
++C-x C-o delete-blank-lines
++.Pp
++C-x C-s save-buffer
++.Pp
++C-x C-u upcase-region
++.Pp
++C-x C-w write-file
++.Pp
++C-x C-x exchange-point-and-mark
++.Pp
++C-x ( start-kbd-macro
++.Pp
++C-x ) end-kbd-macro
++.Pp
++C-x 0 delete-window
++.Pp
++C-x 1 delete-other-windows
++.Pp
++C-x 2 split-window-vertically
++.Pp
++C-x 4 c-x 4 prefix
++.Pp
++C-x = what-cursor-position
++.Pp
++C-x ^ enlarge-window
++.Pp
++C-x b switch-to-buffer
++.Pp
++C-x d dired
++.Pp
++C-x e call-last-kbd-macro
++.Pp
++C-x f set-fill-column
++.Pp
++C-x i insert-file
++.Pp
++C-x k kill-buffer
++.Pp
++C-x o other-window
++.Pp
++C-x s save-some-buffers
++.Pp
++C-x 4 C-f find-file-other-window
++.Pp
++C-x 4 C-g keyboard-quit
++.Pp
++C-x 4 b switch-to-buffer-other-window
++.Pp
++C-x 4 f find-file-other-window
++.Pp
++M-C-g keyboard-quit
++.Pp
++M-C-v scroll-other-window
++.Pp
++M-SPC just-one-space
++.Pp
++M-% query-replace
++.Pp
++M-- negative-argument
++.Pp
++M-0 digit-argument
++.Pp
++M-1 digit-argument
++.Pp
++M-2 digit-argument
++.Pp
++M-3 digit-argument
++.Pp
++M-4 digit-argument
++.Pp
++M-5 digit-argument
++.Pp
++M-6 digit-argument
++.Pp
++M-7 digit-argument
++.Pp
++M-8 digit-argument
++.Pp
++M-9 digit-argument
++.Pp
++M-< beginning-of-buffer
++.Pp
++M-> end-of-buffer
++.Pp
++M-[ backward-paragraph
++.Pp
++M-\ delete-horizontal-space
++.Pp
++M-] forward-paragraph
++.Pp
++M-b backward-word
++.Pp
++M-c capitalize-word
++.Pp
++M-d kill-word
++.Pp
++M-f forward-word
++.Pp
++M-l downcase-word
++.Pp
++M-q fill-paragraph
++.Pp
++M-r search-backward
++.Pp
++M-s search-forward
++.Pp
++M-u upcase-word
++.Pp
++M-v scroll-down
++.Pp
++M-w copy-region-as-kill
++.Pp
++M-x execute-extended-command
++.Pp
++M-~ not-modified
++.Pp
++M-DEL backward-kill-word
++.Pp
++.Sh Bugs and Limitations
++Some listed in the LaTeX documentation. A few path-length issues,
++like not being able to handle files with too great a path length.
++An irritating behavior that arrow keys leave their control characters
++(sans the leading escape) when pressed during incremental-search.
++.Sh History
++The original authors of mg2a were
++Bob Larson, Mic Kaczmarczik, Mike Meyer, Sandra Loosemore,
++Michael Portuesi, Stephen Walton, Marion Hakanson, Dave Brower,
++Jeff Siegal, and John P. Nelson.
++It was posted to the comp.sources.misc mailing list of Usenet
++sometime around 1988. Original sources
++available at ftp://ftp.cdrom.com/pub/c-unix/editors/mg2a.tar.Z
++or in ftp://www.leo.org/pub/comp/usenet/comp.sources.misc/mg2a.
++.Pp
++Modified for NetBSD by John P. Refling as follows:
++.Pp
++December 1999 (version 1.00)
++.Pp
++Port to NetBSD (not much to do there) and a change to the
++mg.rc startup file name and search paths (searches the directory
++where the executable is first).
++Also hastily turned the LaTeX documentation written by Sandra J
++Loosemore in 1987 into this manpage.
++.Pp
++January 2000 (version 1.10):
++.Pp
++Journaling:
++if a subdirectory named .journal exists in the directory of the
++edited file fn, the edited file is copied into the .journal
++subdirectory as fn-@# before the new version is written out.
++The # is the system time in seconds since January 1, 1970.
++This feature creates a transparent backup chain of all files
++edited within a selected directory. If the edited file did not exist
++at the start of the editing session, a zero length fn-@# file is created.
++.Pp
++If the environment variable MG_DOT_ORIG is set, then the edited
++file fn is copied to a fn.orig file, only if a fn.orig file does not already exist.
++Helpful for creating diffs. If the edit file itself does not exist
++prior to the editing session, a fn.orig file is touched.
++.Pp
++All these actions are indicated in the information bar when the
++file is being saved: `Wrote (o+j) filename....' o indicates that a
++fn.orig was created, and j indicates that a time stamped copy was
++made in the .journal directory.
diff --git a/editors/mg2a/patches/patch-al b/editors/mg2a/patches/patch-al
new file mode 100644
index 00000000000..4dec1ff9add
--- /dev/null
+++ b/editors/mg2a/patches/patch-al
@@ -0,0 +1,42 @@
+$NetBSD: patch-al,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./README.NetBSD.orig Thu Mar 30 08:35:36 2000
++++ ./README.NetBSD Thu Mar 30 08:35:36 2000
+@@ -0,0 +1,37 @@
++Modified by John P. Refling, Dec 1999. This is version 1.00 of the
++mods. Basically consists of the port to NetBSD and a change to the
++mg.rc startup file name and search paths.
++
++Version 1.10 (Jan 2000) added journaling and the inital mirroring
++of files:
++
++Journaling
++~~~~~~~~~~
++
++if a subdirectory named .journal exists in the directory of a
++previously existing edited file, the edited file is copied into the
++.journal subdirectory before the new version is written out. The
++filename of the file in the journal subdirectory is appended with a
++-@# where # is the system time in seconds since January 1, 1970.
++
++This feature creates an automatic invisible backup chain of all files
++edited within a selected directory.
++
++state of selected files, before any editing.
++
++selective initial mirroring
++~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++if a subdirectory named .original exists in the directory of a
++previously existing edited file, and a copy of the editied file
++does not exist there, then the edited file is copied into the .original
++subdirectory before the new version is written out.
++This feature provides automatic invisible backups of the original
++state of selected files, before any editing. Useful for keeping
++track of the original contents of distributed configuration files.
++Files in the .original subdirectory with non-zero size indicate that
++the corresponding file has been modified.
++
++If the environment variable MG_DOT_ORIG is set, then the edited
++file is copied to a .orig file, if the .orig file does not exist.
++Helpful for creating diffs.
diff --git a/editors/mg2a/patches/patch-am b/editors/mg2a/patches/patch-am
new file mode 100644
index 00000000000..0464ff7dfd3
--- /dev/null
+++ b/editors/mg2a/patches/patch-am
@@ -0,0 +1,158 @@
+$NetBSD: patch-am,v 1.1.1.1 2000/04/01 00:21:27 dmcmahill Exp $
+
+--- ./file.c.orig Sun Jul 3 10:48:57 1988
++++ ./file.c Thu Mar 30 08:37:30 2000
+@@ -447,14 +447,151 @@
+ writeout(bp, fn) register BUFFER *bp; char *fn; {
+ register int s;
+
++// ------------------> refling, for mirroring the original once
++// ------------------> if .original subdir exists in the same dir as
++// ------------------> the file to save, and there is an EMPTY file
++// ------------------> name with the same name as we wish to save
++
++#include <stdio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++
++// main(int argc, char **argv) {
++ char *last_slash, *file_name_no_dir, dir_name[1000], cmd[1000], *end_of_dirname;
++// in[1000];
++ struct stat stat_struct;
++ const char nil[] = "nil";
++ int originaled, journaled, diffoed;
++
++ // fn is the incoming string to use, never altered. This is for the
++ // command line transfer. Not needed in final program.
++// if (1 == argc) strcpy(fn, "");
++// else strcpy(fn, argv[1]);
++
++ // extract the dirname part of the argument:
++
++ // handle case where string is null, just in case
++ if (0 == strlen(fn)) {
++ strcpy(dir_name, ".");
++ file_name_no_dir = (char *)nil; // default: filename in cwd
++ }
++
++ // this case is when there is no slash, so is filename
++ else if (NULL == (last_slash = (char *)strrchr(fn, '/'))) {
++ strcpy(dir_name, ".");
++ file_name_no_dir = fn;
++ }
++
++ // this case is /filename
++ else if (last_slash == fn) {
++ strcpy(dir_name, "/");
++ file_name_no_dir = last_slash + 1;
++ }
++
++ // this case is normal case
++ else {
++ *last_slash = 0;
++ strcpy(dir_name, fn);
++ *last_slash = '/';
++ file_name_no_dir = last_slash + 1;
++ }
++
++ // at this point, we have dirname in dir_name. Store its end, so we
++ // can recover just the dirname later, after concatinating other stuff,
++ // and a pointer to the stuff following the dirname
++ end_of_dirname = dir_name + strlen(dir_name);
++
++ // get rid of unwanted filenames for this particular application
++ if (0 == strlen(file_name_no_dir)) file_name_no_dir = (char *)nil;
++ if (!strcmp(file_name_no_dir, ".")) file_name_no_dir = (char *)nil;
++ // printf("dir=%s file=%s\n", dir_name, file_name_no_dir);
++
++
++// ///////////////////////////////////////////////////////////////////////////
++// // start .original: concat the .original directory and filename to dir_name
++// if (dir_name[strlen(dir_name) - 1] != '/') strcat(dir_name, "/");
++// strcat(dir_name, ".original/");
++//
++ originaled = 0;
++// // test if .original flag dir exists and the .original/filename does not exist
++// if (0 == stat(dir_name, &stat_struct) && S_ISDIR(stat_struct.st_mode) &&
++// 0 != stat(dir_name, &stat_struct)) { // .original/filename does not exist
++// // test if the initially edited file exists
++// if (0 == stat(fn, &stat_struct) && S_ISREG(stat_struct.st_mode)) {
++// strcat(dir_name, file_name_no_dir);
++// sprintf(cmd, "/bin/cp %s %s", fn, dir_name);
++// if (0 != system(cmd)) printf(".original/fn backup failed: '%s'\n", cmd);
++// else originaled = 1;
++// }
++// else if ( 0 != stat(fn, &stat_struct)) {
++// sprintf(cmd, "/usr/bin/touch %s", fn);
++// if (0 != system(cmd)) printf(".original/fn touch failed: '%s'\n", cmd);
++// else originaled = 1;
++// printf(".original/fn touch: '%s'\n", cmd);
++// }
++// }
++//
++// // restore dir_name to be used in next phase
++// *end_of_dirname = 0;
++
++ ///////////////////////////////////////////////////////////////////////////
++ // start MG_DOT_ORIG test
++ diffoed = 0;
++ if (dir_name[strlen(dir_name) - 1] != '/') strcat(dir_name, "/");
++ strcat(dir_name, file_name_no_dir);
++ strcat(dir_name, ".orig");
++ // if MG_DOT_ORIG set and there is no .orig for the edited file
++ if (NULL != getenv("MG_DOT_ORIG") && 0 != stat(dir_name, &stat_struct)) {
++ // if edited file already exists and is a file, copy it to .orig
++ if (0 == stat(fn, &stat_struct) && S_ISREG(stat_struct.st_mode)) {
++ sprintf(cmd, "/bin/cp %s %s", fn, dir_name);
++ if (0 != system(cmd)) printf(".orig backup failed: '%s'\n", cmd);
++ else diffoed = 1;
++ }
++ // if edited file does not exist yet, touch the .orig since it was empty
++ else if (0 != stat(fn, &stat_struct)) {
++ sprintf(cmd, "/usr/bin/touch %s", dir_name);
++ if (0 != system(cmd)) printf(".orig touch failed: '%s'\n", cmd);
++ else diffoed = 1;
++ }
++ }
++
++ // restore dir_name to be used in next phase
++ *end_of_dirname = 0;
++
++ ///////////////////////////////////////////////////////////////////////////
++ // start journal: concat the .journal directory and filename to dir_name
++ if (dir_name[strlen(dir_name) - 1] != '/') strcat(dir_name, "/");
++ strcat(dir_name, ".journal/");
++
++ journaled = 0;
++ // test if .journal flag directory exists
++ if (0 == stat(dir_name, &stat_struct) && S_ISDIR(stat_struct.st_mode)) {
++ // test if the initially edited file exists
++ if (0 == stat(fn, &stat_struct) && S_ISREG(stat_struct.st_mode)) {
++ sprintf(cmd, "/bin/cp %s %s%s-@%ld", fn, dir_name, file_name_no_dir, time(NULL));
++ if (0 != system(cmd)) printf("journal failed: '%s'\n", cmd);
++ else journaled = 1;
++ }
++ else if (0 != stat(fn, &stat_struct)) {
++ sprintf(cmd, "/usr/bin/touch %s%s-@%ld", dir_name, file_name_no_dir, time(NULL));
++ if (0 != system(cmd)) printf(".journal/fn touch failed: '%s'\n", cmd);
++ else journaled = 1;
++ }
++ }
+ if ((s=ffwopen(fn)) != FIOSUC) /* Open writes message. */
+ return (FALSE);
+ s = ffputbuf(bp);
+ if (s == FIOSUC) { /* No write error. */
+ s = ffclose();
+- if (s==FIOSUC)
+- ewprintf("Wrote %s", fn);
++ if (s==FIOSUC && !diffoed && !journaled) ewprintf("Wrote %s", fn);
++ if (s==FIOSUC && !diffoed && journaled) ewprintf("Wrote(j) %s", fn);
++ if (s==FIOSUC && diffoed && !journaled) ewprintf("Wrote(o) %s", fn);
++ if (s==FIOSUC && diffoed && journaled) ewprintf("Wrote(o+j) %s", fn);
+ } else /* Ignore close error */
++
++// ------------------> refling, for originaling and journaling, end
++
+ (VOID) ffclose(); /* if a write error. */
+ return s == FIOSUC;
+ }
diff --git a/editors/mg2a/pkg/COMMENT b/editors/mg2a/pkg/COMMENT
new file mode 100644
index 00000000000..98c402bedc1
--- /dev/null
+++ b/editors/mg2a/pkg/COMMENT
@@ -0,0 +1 @@
+Small, fast, public domain EMACS style editor
diff --git a/editors/mg2a/pkg/DESCR b/editors/mg2a/pkg/DESCR
new file mode 100644
index 00000000000..e014e6ef7bf
--- /dev/null
+++ b/editors/mg2a/pkg/DESCR
@@ -0,0 +1,22 @@
+Mg (mg) is a Public Domain EMACS style editor. It is "broadly"
+compatible with GNU Emacs. Mg was formerly named MicroGnuEmacs,
+but is not associated with the GNU project.
+
+This program is intended to be a small, fast, and portable editor for
+people who can't (or don't want to) run real Emacs.
+
+The NetBSD version has a few minor cosmetic changes, better locating
+of the startup file (mg.rc), journaling and original mirroring of
+files.
+
+A similarly small and fast MSDOS version is available at
+ftp://ftp.cdrom.com/pub/simtelnet/msdos/editor/mg2a_exe.zip, without
+my enhancements. Hopefully , I'll have time to make a port of this
+enhanced version to MSDOS under djgpp (LFN support), and post it as:
+ftp://ftp.cdrom.com/pub/simtelnet/gnu/djgpp/v2apps/mg2a110b.zip.
+
+The responsibility for the use of this material resides entirely with
+you. We make no warranty of any kind concerning this material, nor do
+we make any claim as to the suitability of mg2a for any application.
+
+NetBSD package by: John Refling <refling@comet.lbl.gov>
diff --git a/editors/mg2a/pkg/PLIST b/editors/mg2a/pkg/PLIST
new file mode 100644
index 00000000000..f78f1305394
--- /dev/null
+++ b/editors/mg2a/pkg/PLIST
@@ -0,0 +1,4 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2000/04/01 00:21:25 dmcmahill Exp $
+bin/mg
+bin/mg.rc
+man/man1/mg.1
diff --git a/editors/mg2a/scripts/post-extract b/editors/mg2a/scripts/post-extract
new file mode 100644
index 00000000000..5480a0511e3
--- /dev/null
+++ b/editors/mg2a/scripts/post-extract
@@ -0,0 +1,5 @@
+#!/bin/sh
+# Just links the unix makefile - john refling
+# $NetBSD: post-extract,v 1.1.1.1 2000/04/01 00:21:26 dmcmahill Exp $
+cd ${WRKSRC}
+cp sys/bsd/Makefile .