summaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
authorkei <kei@pkgsrc.org>2000-11-21 05:21:08 +0000
committerkei <kei@pkgsrc.org>2000-11-21 05:21:08 +0000
commit4dab7cd0577cc80792cba346365766ac50e7d281 (patch)
treeb0f070ceaacc542fc04a930e30bf2c48bc77ba8a /editors
parentdba2e544a7858938cc37cdd6e48dd41b92330ee4 (diff)
downloadpkgsrc-4dab7cd0577cc80792cba346365766ac50e7d281.tar.gz
Import of "Mule" package:
Multilingual GNU editing macros (editor) It was based on Mule ports of FreeBSD and Emacs ports of NetBSD originally, lots of changes are adapted as a result of discussion on tech-pkg-ja@jp.NetBSD.ORG mailing list.
Diffstat (limited to 'editors')
-rw-r--r--editors/mule/Makefile54
-rw-r--r--editors/mule/files/info.patch290
-rw-r--r--editors/mule/files/md53
-rw-r--r--editors/mule/files/patch-sum25
-rw-r--r--editors/mule/patches/patch-aa80
-rw-r--r--editors/mule/patches/patch-ab1115
-rw-r--r--editors/mule/patches/patch-ac22
-rw-r--r--editors/mule/patches/patch-ad12
-rw-r--r--editors/mule/patches/patch-ae173
-rw-r--r--editors/mule/patches/patch-af15
-rw-r--r--editors/mule/patches/patch-ag13
-rw-r--r--editors/mule/patches/patch-ah30
-rw-r--r--editors/mule/patches/patch-ai13
-rw-r--r--editors/mule/patches/patch-aj15
-rw-r--r--editors/mule/patches/patch-ak13
-rw-r--r--editors/mule/patches/patch-al16
-rw-r--r--editors/mule/patches/patch-am13
-rw-r--r--editors/mule/patches/patch-an38
-rw-r--r--editors/mule/patches/patch-ao46
-rw-r--r--editors/mule/patches/patch-ar18
-rw-r--r--editors/mule/patches/patch-as86
-rw-r--r--editors/mule/patches/patch-au24
-rw-r--r--editors/mule/patches/patch-av19
-rw-r--r--editors/mule/patches/patch-aw19
-rw-r--r--editors/mule/patches/patch-az20
-rw-r--r--editors/mule/patches/patch-ba18
-rw-r--r--editors/mule/patches/patch-bb4272
-rw-r--r--editors/mule/pkg/COMMENT1
-rw-r--r--editors/mule/pkg/DESCR15
-rw-r--r--editors/mule/pkg/PLIST1037
30 files changed, 7515 insertions, 0 deletions
diff --git a/editors/mule/Makefile b/editors/mule/Makefile
new file mode 100644
index 00000000000..3c3e3eefc10
--- /dev/null
+++ b/editors/mule/Makefile
@@ -0,0 +1,54 @@
+# $NetBSD: Makefile,v 1.1.1.1 2000/11/21 05:21:08 kei Exp $
+
+DISTNAME= mule-2.3
+CATEGORIES= editors
+MASTER_SITES= ftp://ftp.m17n.org/pub/mule/
+
+MAINTAINER= kei@netbsd.org
+HOMEPAGE= http://www.m17n.org/mule/MulePage.en.html
+
+.include "../../mk/bsd.prefs.mk"
+
+.if !defined(USE_WNN4) || ${USE_WNN4} == YES
+DEPENDS+= ja-FreeWnn-lib-1.10:../../japanese/freewnn-lib
+.endif
+.if !defined(USE_CANNA) || ${USE_CANNA} == YES
+DEPENDS+= Canna-lib-3.5b2:../../japanese/canna-lib
+.endif
+
+WRKSRC= ${WRKDIR}/mule
+GNU_CONFIGURE= yes
+USE_GMAKE= yes
+USE_GTEXINFO= yes
+
+CONFIGURE_ARGS+= ${MACHINE_ARCH}--netbsd --with-x --with-x-toolkit=lucid
+CONFIGURE_ARGS+= --terminal-face --mcpath
+.if ${MACHINE_ARCH} != "alpha" && ${MACHINE_ARCH} != "sparc64"
+CONFIGURE_ARGS+= --valbits=26
+.endif
+
+# Find X11 libraries with xpkgwedge
+.if defined(USE_LOCALBASE_FOR_X11)
+CONFIGURE_ARGS+= --x-libraries=${X11BASE}/lib --x-includes=${X11BASE}/inc
+lude
+.endif
+
+.if !defined(USE_WNN4) || ${USE_WNN4} == YES
+CONFIGURE_ARGS+= --with-wnn4 --wnn-includes=${LOCALBASE}/include/wnn --wnn-libraries=${LOCALBASE}/lib
+.endif
+
+.if !defined(USE_CANNA) || ${USE_CANNA} == YES
+CONFIGURE_ARGS+= --with-canna --canna-includes=${LOCALBASE}/include/canna --canna-libraries=${LOCALBASE}/lib
+.endif
+
+INFO_FILES= antenews-jp canna-jp cl dired-x egg-jp emacs forms gnus mule \
+ mule-jp sc vip
+
+MAN1= coco.1 ctags.1 etags.1 m2ps.1 mule.1
+
+post-patch:
+ @${ECHO_MSG} "===> Applying jumbo patches in info directory"
+ @${PATCH} ${PATCH_ARGS} < ${FILESDIR}/info.patch
+ @${RM} -f ${WRKSRC}/info/*.orig
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/editors/mule/files/info.patch b/editors/mule/files/info.patch
new file mode 100644
index 00000000000..78e16e1a7a5
--- /dev/null
+++ b/editors/mule/files/info.patch
@@ -0,0 +1,290 @@
+$NetBSD: info.patch,v 1.1.1.1 2000/11/21 05:21:08 kei Exp $
+
+--- info/CCL.orig Thu Nov 16 23:13:27 2000
++++ info/CCL Thu Nov 16 23:16:47 2000
+@@ -3,7 +3,10 @@
+ from file `CCL.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* CCL: (CCL). Code Conversion Language.
++END-INFO-DIR-ENTRY
+
+ 
+ File: CCL, Node: Top, Up: (mule)
+--- info/ISO2022.orig Thu Nov 16 23:14:20 2000
++++ info/ISO2022 Thu Nov 16 23:16:52 2000
+@@ -3,7 +3,10 @@
+ from file `ISO2022.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* ISO2022: (ISO2022). ISO2022 encoding system.
++END-INFO-DIR-ENTRY
+
+ 
+ File: ISO2022, Node: Top, Up: (mule)
+--- info/R2L.orig Thu Nov 16 23:16:04 2000
++++ info/R2L Thu Nov 16 23:16:32 2000
+@@ -3,7 +3,10 @@
+ from file `R2L.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* R2L: (R2L). Right-to-left writing on Mule.
++END-INFO-DIR-ENTRY
+
+ 
+ File: R2L, Node: Top, Up: (mule)
+--- info/XFONT.orig Thu Nov 16 23:35:33 2000
++++ info/XFONT Thu Nov 16 23:37:17 2000
+@@ -2,7 +2,9 @@
+ produced by texinfo-format-buffer
+ from file: XFONT.texi
+
+-
++START-INFO-DIR-ENTRY
++* XFONT: (XFONT). X's FONT usage.
++END-INFO-DIR-ENTRY
+
+ 
+ File: XFONT Node: Top, Up: (mule)
+--- info/antenews-jp.orig Thu Nov 16 23:57:34 2000
++++ info/antenews-jp Thu Nov 16 23:59:26 2000
+@@ -3,6 +3,10 @@
+ from file `antenews-jp.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Antenews-jp: (antenews-jp). Antenews of Emacs 19. (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ File: antenews-jp, Node: Top, Next: Basic Changes, Up: (dir)
+--- info/canna-jp.orig Thu Nov 16 23:17:23 2000
++++ info/canna-jp Thu Nov 16 23:27:01 2000
+@@ -2,7 +2,11 @@
+ produced by texinfo-format-buffer
+ from file: canna-jp.texinfo
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Canna-jp: (canna-jp). Japanese Inputting method Canna.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ File: canna-jp Node: Top, Prev: (dir), Up: (dir), Next: 概説
+--- info/egg-jp-1.orig Thu Nov 16 23:24:54 2000
++++ info/egg-jp-1 Thu Nov 16 23:26:29 2000
+@@ -2,8 +2,11 @@
+ produced by texinfo-format-buffer
+ from file: egg-jp.texi
+
+-
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Egg-jp: (egg-jp). Built-in Chinese/Japanese Inputting Method for Mule.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ File: egg-jp Node: Top, Up: (dir), Next: Overview
+--- info/egg-jp-2.orig Thu Nov 16 23:25:00 2000
++++ info/egg-jp-2 Thu Nov 16 23:26:40 2000
+@@ -2,8 +2,11 @@
+ produced by texinfo-format-buffer
+ from file: egg-jp.texi
+
+-
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Egg-jp: (egg-jp). Built-in Chinese/Japanese Inputting Method for Mule.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ File: egg-jp Node: Editing, Prev: Registration, Up: Dictionary Management, Next: Customization
+--- info/egg-jp.orig Thu Nov 16 23:24:46 2000
++++ info/egg-jp Thu Nov 16 23:26:20 2000
+@@ -2,8 +2,11 @@
+ produced by texinfo-format-buffer
+ from file: egg-jp.texi
+
+-
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Egg-jp: (egg-jp). Built-in Chinese/Japanese Inputting Method for Mule.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ Indirect:
+--- info/egg.orig Thu Nov 16 23:22:57 2000
++++ info/egg Thu Nov 16 23:28:48 2000
+@@ -3,7 +3,10 @@
+ from file `egg.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* egg: (egg). Built-in Chinese/Japanese Inputting method for Mule.
++END-INFO-DIR-ENTRY
+
+ 
+ File: egg, Node: Top, Up: (mule)
+--- info/kbd-trans.orig Thu Nov 16 23:37:34 2000
++++ info/kbd-trans Thu Nov 16 23:38:39 2000
+@@ -3,7 +3,10 @@
+ from file `kbd-trans.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* kbd-trans: (kbd-trans). keyboard translation on Mule.
++END-INFO-DIR-ENTRY
+
+ 
+ File: kbd-trans, Node: Top, Up: (mule)
+--- info/languages.orig Thu Nov 16 23:39:23 2000
++++ info/languages Thu Nov 16 23:41:03 2000
+@@ -3,7 +3,10 @@
+ from file `languages.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* languages: (languages). various Asian and European languages in Mule.
++END-INFO-DIR-ENTRY
+
+ 
+ File: languages, Node: Top, Up: (mule)
+--- info/m2ps.orig Thu Nov 16 23:41:11 2000
++++ info/m2ps Thu Nov 16 23:41:46 2000
+@@ -3,7 +3,10 @@
+ from file `m2ps.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* m2ps: (m2ps). Converter from Mule code to PostScript.
++END-INFO-DIR-ENTRY
+
+ 
+ File: m2ps, Node: Top, Up: (mule)
+--- info/mule-jp-1.orig Thu Nov 16 23:53:22 2000
++++ info/mule-jp-1 Thu Nov 16 23:54:40 2000
+@@ -3,7 +3,11 @@
+ from file `mule-jp.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Mule-jp: (mule-jp). MULtilingual Enhancement to GNU Emacs.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ File: mule-jp, Node: Top, Next: Overview, Up: (dir)
+--- info/mule-jp-2.orig Thu Nov 16 23:53:22 2000
++++ info/mule-jp-2 Thu Nov 16 23:54:42 2000
+@@ -3,7 +3,11 @@
+ from file `mule-jp.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Mule-jp: (mule-jp). MULtilingual Enhancement to GNU Emacs.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ File: mule-jp, Node: Set Coding System, Next: Key Input, Prev: Buffers, Up: Multilingual Char
+--- info/mule-jp-3.orig Thu Nov 16 23:53:22 2000
++++ info/mule-jp-3 Thu Nov 16 23:54:45 2000
+@@ -3,7 +3,11 @@
+ from file `mule-jp.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Mule-jp: (mule-jp). MULtilingual Enhancement to GNU Emacs.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ File: mule-jp, Node: Justifying, Next: Enhancement, Prev: Filling, Up: Filling&Justifying
+--- info/mule-jp.orig Thu Nov 16 23:53:22 2000
++++ info/mule-jp Thu Nov 16 23:54:36 2000
+@@ -3,7 +3,11 @@
+ from file `mule-jp.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Mule-jp: (mule-jp). MULtilingual Enhancement to GNU Emacs.
++ (written in Japanese)
++END-INFO-DIR-ENTRY
+
+ 
+ Indirect:
+--- info/mule.orig Thu Nov 16 23:46:33 2000
++++ info/mule Thu Nov 16 23:51:31 2000
+@@ -3,6 +3,10 @@
+ from file `mule.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Mule: (mule). MULtilingual Enhancement to GNU Emacs.
++END-INFO-DIR-ENTRY
+
+ This file documents the internal structure of Mule (MULtilingual
+ Enhancement to GNU Emacs).
+--- info/quail.orig Thu Nov 16 23:53:27 2000
++++ info/quail Thu Nov 16 23:55:28 2000
+@@ -3,7 +3,10 @@
+ from file `quail.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* quail: (quail). Imputting methods of multilingual text on Mule.
++END-INFO-DIR-ENTRY
+
+ 
+ File: quail, Node: Top, Up: (mule)
+--- info/terminology.orig Thu Nov 16 23:59:54 2000
++++ info/terminology Fri Nov 17 00:01:42 2000
+@@ -3,7 +3,10 @@
+ from file `terminology.texi'
+ using `texinfmt.el' version 2.32 of 19 November 1993.
+
+-
++INFO-DIR-SECTION Editors
++START-INFO-DIR-ENTRY
++* Terminology: (terminology). Terminology used by Mule.
++END-INFO-DIR-ENTRY
+
+ 
+ File: terminology, Node: Top, Up: (mule)
diff --git a/editors/mule/files/md5 b/editors/mule/files/md5
new file mode 100644
index 00000000000..38207d9fd65
--- /dev/null
+++ b/editors/mule/files/md5
@@ -0,0 +1,3 @@
+$NetBSD: md5,v 1.1.1.1 2000/11/21 05:21:08 kei Exp $
+
+MD5 (mule-2.3.tar.gz) = e97cfbf19ee43442b416004eb92aac41
diff --git a/editors/mule/files/patch-sum b/editors/mule/files/patch-sum
new file mode 100644
index 00000000000..aae42cd2769
--- /dev/null
+++ b/editors/mule/files/patch-sum
@@ -0,0 +1,25 @@
+$NetBSD: patch-sum,v 1.1.1.1 2000/11/21 05:21:08 kei Exp $
+
+MD5 (patch-aa) = 7ea2769158c781897538a3e288731072
+MD5 (patch-ab) = 30328117a0190ca42366961fd38c9c6d
+MD5 (patch-ac) = fbac22f39733903512b4b2f21afb1c0d
+MD5 (patch-ad) = 96c1b4b98261aef633167d0a3ddb36eb
+MD5 (patch-ae) = 31b33f72bd08ea4e11fb267780d4bf35
+MD5 (patch-af) = 5800488847aaa2409d81c95528dedbd8
+MD5 (patch-ag) = 2f3962394e54f421af307499abd742ca
+MD5 (patch-ah) = 7eb2b3e41a38c57715b3e94312c84897
+MD5 (patch-ai) = b9f7cc3a79664484d42cc44fa2888a58
+MD5 (patch-aj) = c65db746a995aca506d4a0546026a6e4
+MD5 (patch-ak) = 90f849803e2d80f6388f63d70eadc061
+MD5 (patch-al) = e136d81f01e077527f8ec3ce0d275d09
+MD5 (patch-am) = efdbf4778e0f66ed4ce4d0398bf396d2
+MD5 (patch-an) = 94b8993036eda249a30592b88e0c1134
+MD5 (patch-ao) = 7c144963be534027bdfe462a3c118d27
+MD5 (patch-ar) = 2cbf759a9c82c9e1abb6a11ed0b315df
+MD5 (patch-as) = 7f08ad6a16ecfc9a4aa8e328c9049425
+MD5 (patch-au) = 899153af2caa93b4fa6dbe6a446b24ea
+MD5 (patch-av) = 78da6b62d9c1c00b56715d7f8a3ccf04
+MD5 (patch-aw) = 1c619081c2ee3c55585c1ffc7acdc034
+MD5 (patch-az) = 850d146d480411d2d2a66301fbe2fa51
+MD5 (patch-ba) = 222cfdb4a3f3b48e6efc9acee272f466
+MD5 (patch-bb) = e8f991ef2941f2ac1dfda3378e4e0ea5
diff --git a/editors/mule/patches/patch-aa b/editors/mule/patches/patch-aa
new file mode 100644
index 00000000000..57d1b1480c7
--- /dev/null
+++ b/editors/mule/patches/patch-aa
@@ -0,0 +1,80 @@
+$NetBSD: patch-aa,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/s/netbsd.h.orig Thu Oct 12 19:53:15 1995
++++ src/s/netbsd.h Sun Sep 19 12:36:05 1999
+@@ -3,6 +3,10 @@
+ /* Get most of the stuff from bsd4.3 */
+ #include "bsd4-3.h"
+
++#if defined (__alpha__) && !defined (__ELF__)
++#define NO_SHARED_LIBS
++#endif
++
+ /* For mem-limits.h. */
+ #define BSD4_2
+
+@@ -30,8 +34,8 @@
+ #define NO_TERMIO
+
+ #define LIBS_DEBUG
+-/* -lutil is not needed for NetBSD >0.9. */
+-#define LIBS_SYSTEM -lutil -lcrypt
++#define LIBS_SYSTEM -lcrypt
++
+ #define LIBS_TERMCAP -ltermcap
+
+ #define NEED_ERRNO
+@@ -40,7 +44,9 @@
+ /* Netbsd has POSIX-style pgrp behavior. */
+ #undef BSD_PGRPS
+
+-#ifndef NO_SHARED_LIBS
++#define GETPGRP_NO_ARG
++
++#if !defined (NO_SHARED_LIBS) && ! defined (__ELF__)
+ /* These definitions should work for either dynamic or static linking,
+ whichever is the default for `cc -nostdlib'. */
+ #define HAVE_TEXT_START /* No need to define `start_of_text'. */
+@@ -54,14 +60,34 @@
+ #define N_BSSADDR(x) (N_ALIGN(x, N_DATADDR(x)+x.a_data))
+ #define N_TRELOFF(x) N_RELOFF(x)
+ #endif
+-#endif /* not NO_SHARED_LIBS */
+-
+-/* Reread the time zone on startup. */
+-#define LOCALTIME_CACHE
++#endif /* not NO_SHARED_LIBS and not ELF */
+
+ #define HAVE_WAIT_HEADER
++#define WAIT_USE_INT
+
+-/* 94.7.29 by T.Sakakibara <tomo@axis.co.jp> */
+-#ifdef emacs
+-#include <sys/types.h>
+-#endif
++#define NO_MATHERR
++
++#define AMPERSAND_FULL_NAME
++
++#ifdef __ELF__
++/* Here is how to find X Windows. LD_SWITCH_X_SITE_AUX gives an -R option
++ says where to find X windows at run time. We convert it to a -rpath option
++ which is what OSF1 uses. */
++#define LD_SWITCH_SYSTEM `echo LD_SWITCH_X_SITE_AUX | sed -e 's/-R/-Wl,-rpath,/'`
++
++#define HAVE_TEXT_START /* No need to define `start_of_text'. */
++#define UNEXEC unexelf.o
++#define ORDINARY_LINK
++
++#if defined(__i386__)
++#define DATA_SEG_BITS 0x08000000
++#endif /* __i386__ */
++
++#endif /* __ELF__ */
++
++/* On post 1.3 releases of NetBSD, gcc -nostdlib also clears
++ the library search parth, i.e. it won't search /usr/lib
++ for libc and friends. Using -nostartfiles instead avoids
++ this problem, and will also work on earlier NetBSD releases */
++
++#define LINKER $(CC) -nostartfiles
diff --git a/editors/mule/patches/patch-ab b/editors/mule/patches/patch-ab
new file mode 100644
index 00000000000..ec4ee710b21
--- /dev/null
+++ b/editors/mule/patches/patch-ab
@@ -0,0 +1,1115 @@
+$NetBSD: patch-ab,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/unexelf.c.orig Fri Oct 21 13:21:00 1994
++++ src/unexelf.c Sat May 13 14:04:55 2000
+@@ -1,19 +1,22 @@
+ /* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992
+ Free Software Foundation, Inc.
+
+- This program is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 2, or (at your option)
+- any later version.
+-
+- This program is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software
+- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++This file is part of GNU Emacs.
++
++GNU Emacs is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Emacs is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Emacs; see the file COPYING. If not, write to
++the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+@@ -30,14 +33,14 @@
+ * Modified heavily since then.
+ *
+ * Synopsis:
+- * unexec (new_name, a_name, data_start, bss_start, entry_address)
+- * char *new_name, *a_name;
++ * unexec (new_name, old_name, data_start, bss_start, entry_address)
++ * char *new_name, *old_name;
+ * unsigned data_start, bss_start, entry_address;
+ *
+ * Takes a snapshot of the program and makes an a.out format file in the
+ * file named by the string argument new_name.
+- * If a_name is non-NULL, the symbol table will be taken from the given file.
+- * On some machines, an existing a_name file is required.
++ * If old_name is non-NULL, the symbol table will be taken from the given file.
++ * On some machines, an existing old_name file is required.
+ *
+ * The boundaries within the a.out file may be adjusted with the data_start
+ * and bss_start arguments. Either or both may be given as 0 for defaults.
+@@ -98,64 +101,64 @@
+ Link Info Adralgn Entsize
+
+ [1] 1 2 0x80480d4 0xd4 0x13 .interp
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [2] 5 2 0x80480e8 0xe8 0x388 .hash
+- 3 0 0x4 0x4
++ 3 0 0x4 0x4
+
+ [3] 11 2 0x8048470 0x470 0x7f0 .dynsym
+- 4 1 0x4 0x10
++ 4 1 0x4 0x10
+
+ [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [5] 9 2 0x8049010 0x1010 0x338 .rel.plt
+- 3 7 0x4 0x8
++ 3 7 0x4 0x8
+
+ [6] 1 6 0x8049348 0x1348 0x3 .init
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [7] 1 6 0x804934c 0x134c 0x680 .plt
+- 0 0 0x4 0x4
++ 0 0 0x4 0x4
+
+ [8] 1 6 0x80499cc 0x19cc 0x3c56f .text
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [10] 1 2 0x8085f40 0x3df40 0x69c .rodata
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [12] 1 3 0x8088330 0x3f330 0x20afc .data
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got
+- 0 0 0x4 0x4
++ 0 0 0x4 0x4
+
+ [15] 6 3 0x80a9874 0x60874 0x80 .dynamic
+- 4 0 0x4 0x8
++ 4 0 0x4 0x8
+
+ [16] 8 3 0x80a98f4 0x608f4 0x449c .bss
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [17] 2 0 0 0x608f4 0x9b90 .symtab
+- 18 371 0x4 0x10
++ 18 371 0x4 0x10
+
+ [18] 3 0 0 0x6a484 0x8526 .strtab
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [19] 3 0 0 0x729aa 0x93 .shstrtab
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [20] 1 0 0 0x72a3d 0x68b7 .comment
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ raid:/nfs/raid/src/dist-18.56/src> dump -h xemacs
+
+@@ -166,67 +169,67 @@
+ Link Info Adralgn Entsize
+
+ [1] 1 2 0x80480d4 0xd4 0x13 .interp
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [2] 5 2 0x80480e8 0xe8 0x388 .hash
+- 3 0 0x4 0x4
++ 3 0 0x4 0x4
+
+ [3] 11 2 0x8048470 0x470 0x7f0 .dynsym
+- 4 1 0x4 0x10
++ 4 1 0x4 0x10
+
+ [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [5] 9 2 0x8049010 0x1010 0x338 .rel.plt
+- 3 7 0x4 0x8
++ 3 7 0x4 0x8
+
+ [6] 1 6 0x8049348 0x1348 0x3 .init
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [7] 1 6 0x804934c 0x134c 0x680 .plt
+- 0 0 0x4 0x4
++ 0 0 0x4 0x4
+
+ [8] 1 6 0x80499cc 0x19cc 0x3c56f .text
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [10] 1 2 0x8085f40 0x3df40 0x69c .rodata
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [12] 1 3 0x8088330 0x3f330 0x20afc .data
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got
+- 0 0 0x4 0x4
++ 0 0 0x4 0x4
+
+ [15] 6 3 0x80a9874 0x60874 0x80 .dynamic
+- 4 0 0x4 0x8
++ 4 0 0x4 0x8
+
+ [16] 8 3 0x80c6800 0x7d800 0 .bss
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [17] 2 0 0 0x7d800 0x9b90 .symtab
+- 18 371 0x4 0x10
++ 18 371 0x4 0x10
+
+ [18] 3 0 0 0x87390 0x8526 .strtab
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [19] 3 0 0 0x8f8b6 0x93 .shstrtab
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [20] 1 0 0 0x8f949 0x68b7 .comment
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [21] 1 3 0x80a98f4 0x608f4 0x1cf0c .data
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ * This is an example of how the file header is changed. "Shoff" is
+ * the section header offset within the file. Since that table is
+@@ -276,20 +279,20 @@
+ Type Offset Vaddr Paddr
+ Filesz Memsz Flags Align
+
+-6 0x34 0x8048034 0
+-0xa0 0xa0 5 0
++6 0x34 0x8048034 0
++0xa0 0xa0 5 0
+
+-3 0xd4 0 0
+-0x13 0 4 0
++3 0xd4 0 0
++0x13 0 4 0
+
+-1 0x34 0x8048034 0
+-0x3f2f9 0x3f2f9 5 0x1000
++1 0x34 0x8048034 0
++0x3f2f9 0x3f2f9 5 0x1000
+
+-1 0x3f330 0x8088330 0
+-0x215c4 0x25a60 7 0x1000
++1 0x3f330 0x8088330 0
++0x215c4 0x25a60 7 0x1000
+
+-2 0x60874 0x80a9874 0
+-0x80 0 7 0
++2 0x60874 0x80a9874 0
++0x80 0 7 0
+
+ raid:/nfs/raid/src/dist-18.56/src> dump -o xemacs
+
+@@ -298,42 +301,42 @@
+ Type Offset Vaddr Paddr
+ Filesz Memsz Flags Align
+
+-6 0x34 0x8048034 0
+-0xa0 0xa0 5 0
++6 0x34 0x8048034 0
++0xa0 0xa0 5 0
+
+-3 0xd4 0 0
+-0x13 0 4 0
++3 0xd4 0 0
++0x13 0 4 0
+
+-1 0x34 0x8048034 0
+-0x3f2f9 0x3f2f9 5 0x1000
++1 0x34 0x8048034 0
++0x3f2f9 0x3f2f9 5 0x1000
+
+-1 0x3f330 0x8088330 0
+-0x3e4d0 0x3e4d0 7 0x1000
++1 0x3f330 0x8088330 0
++0x3e4d0 0x3e4d0 7 0x1000
+
+-2 0x60874 0x80a9874 0
+-0x80 0 7 0
++2 0x60874 0x80a9874 0
++0x80 0 7 0
+
+
+ */
+
+-/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc.
+- *
++/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc.
++ *
+ * The above mechanism does not work if the unexeced ELF file is being
+- * re-layout by other applications (such as `strip'). All the applications
++ * re-layout by other applications (such as `strip'). All the applications
+ * that re-layout the internal of ELF will layout all sections in ascending
+- * order of their file offsets. After the re-layout, the data2 section will
+- * still be the LAST section in the section header vector, but its file offset
++ * order of their file offsets. After the re-layout, the data2 section will
++ * still be the LAST section in the section header vector, but its file offset
+ * is now being pushed far away down, and causes part of it not to be mapped
+- * in (ie. not covered by the load segment entry in PHDR vector), therefore
++ * in (ie. not covered by the load segment entry in PHDR vector), therefore
+ * causes the new binary to fail.
+ *
+ * The solution is to modify the unexec algorithm to insert the new data2
+ * section header right before the new bss section header, so their file
+- * offsets will be in the ascending order. Since some of the section's (all
+- * sections AFTER the bss section) indexes are now changed, we also need to
+- * modify some fields to make them point to the right sections. This is done
++ * offsets will be in the ascending order. Since some of the section's (all
++ * sections AFTER the bss section) indexes are now changed, we also need to
++ * modify some fields to make them point to the right sections. This is done
+ * by macro PATCH_INDEX. All the fields that need to be patched are:
+- *
++ *
+ * 1. ELF header e_shstrndx field.
+ * 2. section header sh_link and sh_info field.
+ * 3. symbol table entry st_shndx field.
+@@ -345,67 +348,67 @@
+ Link Info Adralgn Entsize
+
+ [1] 1 2 0x80480d4 0xd4 0x13 .interp
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [2] 5 2 0x80480e8 0xe8 0x388 .hash
+- 3 0 0x4 0x4
++ 3 0 0x4 0x4
+
+ [3] 11 2 0x8048470 0x470 0x7f0 .dynsym
+- 4 1 0x4 0x10
++ 4 1 0x4 0x10
+
+ [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [5] 9 2 0x8049010 0x1010 0x338 .rel.plt
+- 3 7 0x4 0x8
++ 3 7 0x4 0x8
+
+ [6] 1 6 0x8049348 0x1348 0x3 .init
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [7] 1 6 0x804934c 0x134c 0x680 .plt
+- 0 0 0x4 0x4
++ 0 0 0x4 0x4
+
+ [8] 1 6 0x80499cc 0x19cc 0x3c56f .text
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [10] 1 2 0x8085f40 0x3df40 0x69c .rodata
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [12] 1 3 0x8088330 0x3f330 0x20afc .data
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got
+- 0 0 0x4 0x4
++ 0 0 0x4 0x4
+
+ [15] 6 3 0x80a9874 0x60874 0x80 .dynamic
+- 4 0 0x4 0x8
++ 4 0 0x4 0x8
+
+ [16] 1 3 0x80a98f4 0x608f4 0x1cf0c .data
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [17] 8 3 0x80c6800 0x7d800 0 .bss
+- 0 0 0x4 0
++ 0 0 0x4 0
+
+ [18] 2 0 0 0x7d800 0x9b90 .symtab
+- 19 371 0x4 0x10
++ 19 371 0x4 0x10
+
+ [19] 3 0 0 0x87390 0x8526 .strtab
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [20] 3 0 0 0x8f8b6 0x93 .shstrtab
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ [21] 1 0 0 0x8f949 0x68b7 .comment
+- 0 0 0x1 0
++ 0 0 0x1 0
+
+ */
+
+@@ -417,15 +420,130 @@
+ #include <errno.h>
+ #include <unistd.h>
+ #include <fcntl.h>
++#if !defined (__NetBSD__) && !defined (__OpenBSD__)
+ #include <elf.h>
++#endif
+ #include <sys/mman.h>
++#if defined (__sony_news) && defined (_SYSTYPE_SYSV)
++#include <sys/elf_mips.h>
++#include <sym.h>
++#endif /* __sony_news && _SYSTYPE_SYSV */
++
++#if defined (__alpha__) && !defined (__NetBSD__) && !defined (__OpenBSD__)
++/* Declare COFF debugging symbol table. This used to be in
++ /usr/include/sym.h, but this file is no longer included in Red Hat
++ 5.0 and presumably in any other glibc 2.x based distribution. */
++typedef struct {
++ short magic;
++ short vstamp;
++ int ilineMax;
++ int idnMax;
++ int ipdMax;
++ int isymMax;
++ int ioptMax;
++ int iauxMax;
++ int issMax;
++ int issExtMax;
++ int ifdMax;
++ int crfd;
++ int iextMax;
++ long cbLine;
++ long cbLineOffset;
++ long cbDnOffset;
++ long cbPdOffset;
++ long cbSymOffset;
++ long cbOptOffset;
++ long cbAuxOffset;
++ long cbSsOffset;
++ long cbSsExtOffset;
++ long cbFdOffset;
++ long cbRfdOffset;
++ long cbExtOffset;
++} HDRR, *pHDRR;
++#define cbHDRR sizeof(HDRR)
++#define hdrNil ((pHDRR)0)
++#endif
++
++#ifdef __NetBSD__
++/*
++ * NetBSD does not have normal-looking user-land ELF support.
++ */
++# ifdef __alpha__
++# define ELFSIZE 64
++# else
++# define ELFSIZE 32
++# endif
++# include <sys/exec_elf.h>
++
++#ifndef PT_LOAD
++# define PT_LOAD Elf_pt_load
++# define SHT_SYMTAB Elf_sht_symtab
++# define SHT_DYNSYM Elf_sht_dynsym
++# define SHT_NULL Elf_sht_null
++# define SHT_NOBITS Elf_sht_nobits
++# define SHT_REL Elf_sht_rel
++# define SHT_RELA Elf_sht_rela
++
++# define SHN_UNDEF Elf_eshn_undefined
++# define SHN_ABS Elf_eshn_absolute
++# define SHN_COMMON Elf_eshn_common
++#endif
++
++/*
++ * The magic of picking the right size types is handled by the ELFSIZE
++ * definition above.
++ */
++# ifdef __STDC__
++# define ElfW(type) Elf_##type
++# else
++# define ElfW(type) Elf_/**/type
++# endif
++
++# ifdef __alpha__
++# include <sys/exec_ecoff.h>
++# define HDRR struct ecoff_symhdr
++# define pHDRR HDRR *
++# endif /* __alpha__*/
++
++# ifdef __mips__
++# define SHT_MIPS_DEBUG DT_MIPS_FLAGS
++# define HDRR struct Elf_Shdr
++# endif /* __mips__ */
++
++#endif /* __NetBSD__ */
++
++
++#ifdef __OpenBSD__
++# include <sys/exec_elf.h>
++#endif
++
++#if __GNU_LIBRARY__ - 0 >= 6
++# include <link.h> /* get ElfW etc */
++#endif
++
++#ifndef ElfW
++# ifdef __STDC__
++# define ElfW(type) Elf32_##type
++# else
++# define ElfW(type) Elf32_/**/type
++# endif
++#endif
+
+ #ifndef emacs
+ #define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
+ #else
++#include <config.h>
+ extern void fatal (char *, ...);
+ #endif
+
++#if defined ( __sony_news) && defined (_SYSTYPE_SYSV)
++# define HAVE_MIPS_SBSS
++#endif
++
++#if (defined (__mips__) || defined (__powerpc__)) && (defined(__NetBSD__) || defined(__OpenBSD__))
++# define HAVE_MIPS_SBSS
++#endif
++
+ #ifndef ELF_BSS_SECTION_NAME
+ #define ELF_BSS_SECTION_NAME ".bss"
+ #endif
+@@ -433,15 +551,38 @@
+ /* Get the address of a particular section or program header entry,
+ * accounting for the size of the entries.
+ */
++/*
++ On PPC Reference Platform running Solaris 2.5.1
++ the plt section is also of type NOBI like the bss section.
++ (not really stored) and therefore sections after the bss
++ section start at the plt offset. The plt section is always
++ the one just before the bss section.
++ Thus, we modify the test from
++ if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset)
++ to
++ if (NEW_SECTION_H (nn).sh_offset >=
++ OLD_SECTION_H (old_bss_index-1).sh_offset)
++ This is just a hack. We should put the new data section
++ before the .plt section.
++ And we should not have this routine at all but use
++ the libelf library to read the old file and create the new
++ file.
++ The changed code is minimal and depends on prep set in m/prep.h
++ Erik Deumens
++ Quantum Theory Project
++ University of Florida
++ deumens@qtp.ufl.edu
++ Apr 23, 1996
++ */
+
+ #define OLD_SECTION_H(n) \
+- (*(Elf32_Shdr *) ((byte *) old_section_h + old_file_h->e_shentsize * (n)))
++ (*(ElfW(Shdr) *) ((byte *) old_section_h + old_file_h->e_shentsize * (n)))
+ #define NEW_SECTION_H(n) \
+- (*(Elf32_Shdr *) ((byte *) new_section_h + new_file_h->e_shentsize * (n)))
++ (*(ElfW(Shdr) *) ((byte *) new_section_h + new_file_h->e_shentsize * (n)))
+ #define OLD_PROGRAM_H(n) \
+- (*(Elf32_Phdr *) ((byte *) old_program_h + old_file_h->e_phentsize * (n)))
++ (*(ElfW(Phdr) *) ((byte *) old_program_h + old_file_h->e_phentsize * (n)))
+ #define NEW_PROGRAM_H(n) \
+- (*(Elf32_Phdr *) ((byte *) new_program_h + new_file_h->e_phentsize * (n)))
++ (*(ElfW(Phdr) *) ((byte *) new_program_h + new_file_h->e_phentsize * (n)))
+
+ #define PATCH_INDEX(n) \
+ do { \
+@@ -451,9 +592,9 @@
+
+ /* Round X up to a multiple of Y. */
+
+-int
++ElfW(Addr)
+ round_up (x, y)
+- int x, y;
++ ElfW(Addr) x, y;
+ {
+ int rem = x % y;
+ if (rem == 0)
+@@ -461,6 +602,47 @@
+ return x - rem + y;
+ }
+
++#if defined(__alpha__) || (defined ( __sony_news) && defined (_SYSTYPE_SYSV))
++/* We are using ECOFF symbols embedded in ELF. */
++
++void
++relocate_ecoff_symhdr(symhdr, diff)
++ HDRR *symhdr;
++ ElfW(Word) diff;
++{
++ symhdr->cbLineOffset += diff;
++ symhdr->cbDnOffset += diff;
++ symhdr->cbPdOffset += diff;
++ symhdr->cbSymOffset += diff;
++ symhdr->cbOptOffset += diff;
++ symhdr->cbAuxOffset += diff;
++ symhdr->cbSsOffset += diff;
++ symhdr->cbSsExtOffset += diff;
++ symhdr->cbFdOffset += diff;
++ symhdr->cbRfdOffset += diff;
++ symhdr->cbExtOffset += diff;
++}
++#endif /* __alpha__ or __sony_news and systype_sysv */
++
++#ifdef notyet
++void
++relocate_elf_proghdr(p, diff)
++ HDRR *symhdr;
++ ElfW(Word) diff;
++{
++ phdr->sh_name += diff;
++ phdr->sh_type += diff;
++ phdr->sh_flags += diff;
++ phdr->sh_addr += diff;
++ phdr->sh_offset += diff;
++ phdr->sh_size += diff;
++ phdr->sh_link += diff;
++ phdr->sh_info += diff;
++ phdr->sh_addralign += diff;
++ phdr->sh_entsize += diff;
++};
++#endif /* notyet */
++
+ /* ****************************************************************
+ * unexec
+ *
+@@ -483,19 +665,23 @@
+ /* Pointers to the file, program and section headers for the old and new
+ * files.
+ */
+- Elf32_Ehdr *old_file_h, *new_file_h;
+- Elf32_Phdr *old_program_h, *new_program_h;
+- Elf32_Shdr *old_section_h, *new_section_h;
++ ElfW(Ehdr) *old_file_h, *new_file_h;
++ ElfW(Phdr) *old_program_h, *new_program_h;
++ ElfW(Shdr) *old_section_h, *new_section_h;
+
+ /* Point to the section name table in the old file */
+ char *old_section_names;
+
+- Elf32_Addr old_bss_addr, new_bss_addr;
+- Elf32_Word old_bss_size, new_data2_size;
+- Elf32_Off new_data2_offset;
+- Elf32_Addr new_data2_addr;
++ ElfW(Addr) old_bss_addr, new_bss_addr;
++ ElfW(Word) old_bss_size, new_data2_size;
++ ElfW(Off) new_data2_offset;
++ ElfW(Addr) new_data2_addr;
+
+ int n, nn, old_bss_index, old_data_index, new_data2_index;
++#ifdef HAVE_MIPS_SBSS
++ int old_sbss_index, old_mdebug_index;
++ int bss_phdr_index;
++#endif /* HAVE_MIPS_SBSS */
+ struct stat stat_buf;
+
+ /* Open the old file & map it into the address space. */
+@@ -508,7 +694,8 @@
+ if (fstat (old_file, &stat_buf) == -1)
+ fatal ("Can't fstat (%s): errno %d\n", old_name, errno);
+
+- old_base = mmap (0, stat_buf.st_size, PROT_READ, MAP_SHARED, old_file, 0);
++ old_base = mmap ((caddr_t) 0, stat_buf.st_size, PROT_READ, MAP_SHARED,
++ old_file, 0);
+
+ if (old_base == (caddr_t) -1)
+ fatal ("Can't mmap (%s): errno %d\n", old_name, errno);
+@@ -520,9 +707,9 @@
+
+ /* Get pointers to headers & section names */
+
+- old_file_h = (Elf32_Ehdr *) old_base;
+- old_program_h = (Elf32_Phdr *) ((byte *) old_base + old_file_h->e_phoff);
+- old_section_h = (Elf32_Shdr *) ((byte *) old_base + old_file_h->e_shoff);
++ old_file_h = (ElfW(Ehdr) *) old_base;
++ old_program_h = (ElfW(Phdr) *) ((byte *) old_base + old_file_h->e_phoff);
++ old_section_h = (ElfW(Shdr) *) ((byte *) old_base + old_file_h->e_shoff);
+ old_section_names = (char *) old_base
+ + OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset;
+
+@@ -544,16 +731,61 @@
+ if (old_bss_index == old_file_h->e_shnum)
+ fatal ("Can't find .bss in %s.\n", old_name, 0);
+
++#ifdef HAVE_MIPS_SBSS
++ for (old_sbss_index = 1; old_sbss_index < (int) old_file_h->e_shnum;
++ old_sbss_index++)
++ {
++#ifdef DEBUG
++ fprintf (stderr, "Looking for .sbss - found %s\n",
++ old_section_names + OLD_SECTION_H (old_sbss_index).sh_name);
++#endif
++ if (!strcmp (old_section_names + OLD_SECTION_H (old_sbss_index).sh_name,
++ ".sbss"))
++ break;
++ }
++ if (old_sbss_index == old_file_h->e_shnum)
++ {
++ old_bss_addr = OLD_SECTION_H(old_bss_index).sh_addr;
++ old_bss_size = OLD_SECTION_H(old_bss_index).sh_size;
++ new_data2_offset = OLD_SECTION_H(old_bss_index).sh_offset;
++ new_data2_index = old_bss_index;
++ }
++ else
++ {
++ old_bss_addr = OLD_SECTION_H(old_sbss_index).sh_addr;
++ old_bss_size = OLD_SECTION_H(old_bss_index).sh_size
++ + OLD_SECTION_H(old_sbss_index).sh_size;
++ new_data2_offset = OLD_SECTION_H(old_sbss_index).sh_offset;
++ new_data2_index = old_sbss_index;
++ }
++
++ for (old_mdebug_index = 1; old_mdebug_index < (int) old_file_h->e_shnum;
++ old_mdebug_index++)
++ {
++#ifdef DEBUG
++ fprintf (stderr, "Looking for .mdebug - found %s\n",
++ old_section_names + OLD_SECTION_H (old_mdebug_index).sh_name);
++#endif
++ if (!strcmp (old_section_names + OLD_SECTION_H (old_mdebug_index).sh_name,
++ ".mdebug"))
++ break;
++ }
++ if (old_mdebug_index == old_file_h->e_shnum)
++ old_mdebug_index = 0;
++#else /* not HAVE_MIPS_SBSS */
+ old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr;
+ old_bss_size = OLD_SECTION_H (old_bss_index).sh_size;
+-#if defined(emacs) || !defined(DEBUG)
+- new_bss_addr = (Elf32_Addr) sbrk (0);
++#endif /* not HAVE_MIPS_SBSS */
++#if defined (emacs) || !defined (DEBUG)
++ new_bss_addr = (ElfW(Addr)) sbrk (0);
+ #else
+ new_bss_addr = old_bss_addr + old_bss_size + 0x1234;
+ #endif
+ new_data2_addr = old_bss_addr;
+ new_data2_size = new_bss_addr - old_bss_addr;
++#ifndef HAVE_MIPS_SBSS
+ new_data2_offset = OLD_SECTION_H (old_bss_index).sh_offset;
++#endif /* not HAVE_MIPS_SBSS */
+
+ #ifdef DEBUG
+ fprintf (stderr, "old_bss_index %d\n", old_bss_index);
+@@ -582,15 +814,20 @@
+ if (ftruncate (new_file, new_file_size))
+ fatal ("Can't ftruncate (%s): errno %d\n", new_name, errno);
+
+- new_base = mmap (0, new_file_size, PROT_READ | PROT_WRITE, MAP_SHARED,
+- new_file, 0);
++#ifdef UNEXEC_USE_MAP_PRIVATE
++ new_base = mmap ((caddr_t) 0, new_file_size, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE, new_file, 0);
++#else
++ new_base = mmap ((caddr_t) 0, new_file_size, PROT_READ | PROT_WRITE,
++ MAP_SHARED, new_file, 0);
++#endif
+
+ if (new_base == (caddr_t) -1)
+ fatal ("Can't mmap (%s): errno %d\n", new_name, errno);
+
+- new_file_h = (Elf32_Ehdr *) new_base;
+- new_program_h = (Elf32_Phdr *) ((byte *) new_base + old_file_h->e_phoff);
+- new_section_h = (Elf32_Shdr *)
++ new_file_h = (ElfW(Ehdr) *) new_base;
++ new_program_h = (ElfW(Phdr) *) ((byte *) new_base + old_file_h->e_phoff);
++ new_section_h = (ElfW(Shdr) *)
+ ((byte *) new_base + old_file_h->e_shoff + new_data2_size);
+
+ /* Make our new file, program and section headers as copies of the
+@@ -633,8 +870,14 @@
+ if ((OLD_SECTION_H (old_bss_index)).sh_addralign > alignment)
+ alignment = OLD_SECTION_H (old_bss_index).sh_addralign;
+
++#ifdef HAVE_MIPS_SBSS
++ if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz
++ > round_up (old_bss_addr, alignment))
++ fatal ("Program segment above .bss in %s\n", old_name, 0);
++#else /* not HAVE_MIPS_SBSS */
+ if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz > old_bss_addr)
+ fatal ("Program segment above .bss in %s\n", old_name, 0);
++#endif /* not HAVE_MIPS_SBSS */
+
+ if (NEW_PROGRAM_H (n).p_type == PT_LOAD
+ && (round_up ((NEW_PROGRAM_H (n)).p_vaddr
+@@ -646,9 +889,16 @@
+ if (n < 0)
+ fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0);
+
+- NEW_PROGRAM_H (n).p_filesz += new_data2_size;
++#ifdef HAVE_MIPS_SBSS
++ bss_phdr_index = n;
++#endif
++
++ /* Make sure that the size includes any padding before the old .bss
++ section. */
++ NEW_PROGRAM_H (n).p_filesz = new_bss_addr - NEW_PROGRAM_H (n).p_vaddr;
+ NEW_PROGRAM_H (n).p_memsz = NEW_PROGRAM_H (n).p_filesz;
+
++
+ #if 0 /* Maybe allow section after data2 - does this ever happen? */
+ for (n = new_file_h->e_phnum - 1; n >= 0; n--)
+ {
+@@ -675,18 +925,27 @@
+ if (old_data_index == old_file_h->e_shnum)
+ fatal ("Can't find .data in %s.\n", old_name, 0);
+
+- /* Walk through all section headers, insert the new data2 section right
++ /* Walk through all section headers, insert the new data2 section right
+ before the new bss section. */
+ for (n = 1, nn = 1; n < (int) old_file_h->e_shnum; n++, nn++)
+ {
+ caddr_t src;
+- /* If it is bss section, insert the new data2 section before it. */
+- if (n == old_bss_index)
++ int temp_index;
++#ifdef HAVE_MIPS_SBSS
++ /* If it is (s)bss section, insert the new data2 section before it. */
++ /* new_data2_index is the index of either old_sbss or old_bss, that was
++ chosen as a section for new_data2. */
++ temp_index = new_data2_index;
++#else /* not HAVE_MIPS_SBSS */
++ /* If it is bss section, insert the new data2 section before it. */
++ temp_index = old_bss_index;
++#endif /* not HAVE_MIPS_SBSS */
++ if (n == temp_index)
+ {
+ /* Steal the data section header for this data2 section. */
+ memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (old_data_index),
+ new_file_h->e_shentsize);
+-
++
+ NEW_SECTION_H (nn).sh_addr = new_data2_addr;
+ NEW_SECTION_H (nn).sh_offset = new_data2_offset;
+ NEW_SECTION_H (nn).sh_size = new_data2_size;
+@@ -696,37 +955,87 @@
+ NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (n).sh_addralign;
+
+ /* Now copy over what we have in the memory now. */
+- memcpy (NEW_SECTION_H (nn).sh_offset + new_base,
+- (caddr_t) OLD_SECTION_H (n).sh_addr,
++ memcpy (NEW_SECTION_H (nn).sh_offset + new_base,
++ (caddr_t) OLD_SECTION_H (n).sh_addr,
+ new_data2_size);
+ nn++;
+ }
+-
+- memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n),
++
++ memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n),
+ old_file_h->e_shentsize);
+
+- /* The new bss section's size is zero, and its file offset and virtual
+- address should be off by NEW_DATA2_SIZE. */
+- if (n == old_bss_index)
++ if (n == old_bss_index
++#ifdef HAVE_MIPS_SBSS
++ /* The new bss and sbss section's size is zero, and its file offset
++ and virtual address should be off by NEW_DATA2_SIZE. */
++ || n == old_sbss_index
++#endif /* HAVE_MIPS_SBSS */
++ )
+ {
+ /* NN should be `old_bss_index + 1' at this point. */
+ NEW_SECTION_H (nn).sh_offset += new_data2_size;
+ NEW_SECTION_H (nn).sh_addr += new_data2_size;
+ /* Let the new bss section address alignment be the same as the
+- section address alignment followed the old bss section, so
++ section address alignment followed the old bss section, so
+ this section will be placed in exactly the same place. */
+ NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (nn).sh_addralign;
+ NEW_SECTION_H (nn).sh_size = 0;
++
++#ifdef HAVE_MIPS_SBSS
++ /* On ELF mips, the new data section replaces both .sbss and .bss
++ (we have, after all, written to them.). Adding new_data2_size
++ to the sh_addr and sh_offset of sbss puts sbss at the end of
++ the new data section. setting the size to zero makes it empty.
++ But then, adding the new_data2_size to the bss address puts
++ its start beyond the end of the original bss. If the sbss size
++ was bigger than a page, the bss ends up not covered by the
++ program header. This breaks strip. Since both sbss and bss
++ are zero-sized, just use the same address and file offset for
++ both, guaranteeing other tools will assign them to the same
++ program section (asssuming no sections are loaded at higher
++ offsets.) */
++ if (n == old_bss_index) {
++ int new_sbss_bss_padding = NEW_SECTION_H(nn).sh_addr -
++ NEW_SECTION_H(nn - 1).sh_addr;
++ printf("sbss to bss offset =0x%x\n", new_sbss_bss_padding);
++ NEW_SECTION_H(nn).sh_addr =NEW_SECTION_H(nn - 1).sh_addr;
++ NEW_SECTION_H(nn).sh_offset =NEW_SECTION_H(nn - 1).sh_offset;
++ }
++#endif /* HAVE_MIPS_SBSS */
+ }
+- /* Any section that was original placed AFTER the bss section should now
+- be off by NEW_DATA2_SIZE. */
+- else if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset)
+- NEW_SECTION_H (nn).sh_offset += new_data2_size;
+-
++ else
++ {
++ /* Any section that was original placed AFTER the bss
++ section should now be off by NEW_DATA2_SIZE. */
++#ifdef SOLARIS_POWERPC
++ /* On PPC Reference Platform running Solaris 2.5.1
++ the plt section is also of type NOBI like the bss section.
++ (not really stored) and therefore sections after the bss
++ section start at the plt offset. The plt section is always
++ the one just before the bss section.
++ It would be better to put the new data section before
++ the .plt section, or use libelf instead.
++ Erik Deumens, deumens@qtp.ufl.edu. */
++ if (NEW_SECTION_H (nn).sh_offset
++ >= OLD_SECTION_H (old_bss_index-1).sh_offset)
++ NEW_SECTION_H (nn).sh_offset += new_data2_size;
++#else
++ if (round_up (NEW_SECTION_H (nn).sh_offset,
++ OLD_SECTION_H (old_bss_index).sh_addralign)
++ >= new_data2_offset)
++ NEW_SECTION_H (nn).sh_offset += new_data2_size;
++#endif
++ /* Any section that was originally placed after the section
++ header table should now be off by the size of one section
++ header table entry. */
++ if (NEW_SECTION_H (nn).sh_offset > new_file_h->e_shoff)
++ NEW_SECTION_H (nn).sh_offset += new_file_h->e_shentsize;
++ }
++
+ /* If any section hdr refers to the section after the new .data
+- section, make it refer to next one because we have inserted
++ section, make it refer to next one because we have inserted
+ a new section in between. */
+-
++
+ PATCH_INDEX (NEW_SECTION_H (nn).sh_link);
+ /* For symbol tables, info is a symbol table index,
+ so don't change it. */
+@@ -738,7 +1047,7 @@
+ if (NEW_SECTION_H (nn).sh_type == SHT_NULL
+ || NEW_SECTION_H (nn).sh_type == SHT_NOBITS)
+ continue;
+-
++
+ /* Write out the sections. .data and .data1 (and data2, called
+ ".data" in the strings table) get copied from the current process
+ instead of the old file. */
+@@ -747,22 +1056,54 @@
+ || !strcmp ((old_section_names + NEW_SECTION_H(n).sh_name),
+ ".sdata")
+ #endif
++#ifdef HAVE_MIPS_SBSS
++ || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
++ ".sdata")
++ || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
++ ".lit4")
++ || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
++ ".lit8")
++#endif /* HAVE_MIPS_SBSS */
+ || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
+ ".data1"))
+ src = (caddr_t) OLD_SECTION_H (n).sh_addr;
+ else
+ src = old_base + OLD_SECTION_H (n).sh_offset;
+-
++
+ memcpy (NEW_SECTION_H (nn).sh_offset + new_base, src,
+ NEW_SECTION_H (nn).sh_size);
+
++#ifdef __alpha__
++ /* Update Alpha COFF symbol table: */
++ if (strcmp (old_section_names + OLD_SECTION_H (n).sh_name, ".mdebug")
++ == 0)
++ {
++ pHDRR symhdr = (pHDRR) (NEW_SECTION_H (nn).sh_offset + new_base);
++ relocate_ecoff_symhdr(symhdr, new_data2_size);
++ }
++#endif /* __alpha__ */
++
++#if defined (__sony_news) && defined (_SYSTYPE_SYSV)
++ if (NEW_SECTION_H (nn).sh_type == SHT_MIPS_DEBUG && old_mdebug_index)
++ {
++ int diff = NEW_SECTION_H(nn).sh_offset
++ - OLD_SECTION_H(old_mdebug_index).sh_offset;
++ HDRR *phdr = (HDRR *)(NEW_SECTION_H (nn).sh_offset + new_base);
++
++ if (diff)
++ {
++ relocate_ecoff_symhdr(phdr, diff);
++ }
++ }
++#endif /* __sony_news and systype_sysv */
++
+ /* If it is the symbol table, its st_shndx field needs to be patched. */
+ if (NEW_SECTION_H (nn).sh_type == SHT_SYMTAB
+ || NEW_SECTION_H (nn).sh_type == SHT_DYNSYM)
+ {
+- Elf32_Shdr *spt = &NEW_SECTION_H (nn);
++ ElfW(Shdr) *spt = &NEW_SECTION_H (nn);
+ unsigned int num = spt->sh_size / spt->sh_entsize;
+- Elf32_Sym * sym = (Elf32_Sym *) (NEW_SECTION_H (nn).sh_offset +
++ ElfW(Sym) * sym = (ElfW(Sym) *) (NEW_SECTION_H (nn).sh_offset +
+ new_base);
+ for (; num--; sym++)
+ {
+@@ -770,7 +1111,7 @@
+ || (sym->st_shndx == SHN_ABS)
+ || (sym->st_shndx == SHN_COMMON))
+ continue;
+-
++
+ PATCH_INDEX (sym->st_shndx);
+ }
+ }
+@@ -780,21 +1121,71 @@
+ for (n = new_file_h->e_shnum - 1; n; n--)
+ {
+ byte *symnames;
+- Elf32_Sym *symp, *symendp;
++ ElfW(Sym) *symp, *symendp;
+
+ if (NEW_SECTION_H (n).sh_type != SHT_DYNSYM
+ && NEW_SECTION_H (n).sh_type != SHT_SYMTAB)
+ continue;
+
+- symnames = NEW_SECTION_H (NEW_SECTION_H (n).sh_link).sh_offset + new_base;
+- symp = (Elf32_Sym *) (NEW_SECTION_H (n).sh_offset + new_base);
+- symendp = (Elf32_Sym *) ((byte *)symp + NEW_SECTION_H (n).sh_size);
++ symnames = ((byte *) new_base
++ + NEW_SECTION_H (NEW_SECTION_H (n).sh_link).sh_offset);
++ symp = (ElfW(Sym) *) (NEW_SECTION_H (n).sh_offset + new_base);
++ symendp = (ElfW(Sym) *) ((byte *)symp + NEW_SECTION_H (n).sh_size);
+
+ for (; symp < symendp; symp ++)
+ if (strcmp ((char *) (symnames + symp->st_name), "_end") == 0
+- || strcmp ((char *) (symnames + symp->st_name), "_edata") == 0)
++ || strcmp ((char *) (symnames + symp->st_name), "end") == 0
++ || strcmp ((char *) (symnames + symp->st_name), "_edata") == 0
++ || strcmp ((char *) (symnames + symp->st_name), "edata") == 0)
+ memcpy (&symp->st_value, &new_bss_addr, sizeof (new_bss_addr));
+ }
++
++ /* This loop seeks out relocation sections for the data section, so
++ that it can undo relocations performed by the runtime linker. */
++ for (n = new_file_h->e_shnum - 1; n; n--)
++ {
++ ElfW(Shdr) section = NEW_SECTION_H (n);
++ switch (section.sh_type) {
++ default:
++ break;
++ case SHT_REL:
++ case SHT_RELA:
++ /* This code handles two different size structs, but there should
++ be no harm in that provided that r_offset is always the first
++ member. */
++ nn = section.sh_info;
++ if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data")
++ || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
++ ".data1"))
++ {
++ ElfW(Addr) offset = NEW_SECTION_H (nn).sh_addr -
++ NEW_SECTION_H (nn).sh_offset;
++ caddr_t reloc = old_base + section.sh_offset, end;
++ for (end = reloc + section.sh_size; reloc < end;
++ reloc += section.sh_entsize)
++ {
++ ElfW(Addr) addr = ((ElfW(Rel) *) reloc)->r_offset - offset;
++#ifdef __alpha__
++ /* The Alpha ELF binutils currently have a bug that
++ sometimes results in relocs that contain all
++ zeroes. Work around this for now... */
++ if (((ElfW(Rel) *) reloc)->r_offset == 0)
++ continue;
++#endif
++ memcpy (new_base + addr, old_base + addr, sizeof(ElfW(Addr)));
++ }
++ }
++ break;
++ }
++ }
++
++#ifdef UNEXEC_USE_MAP_PRIVATE
++ if (lseek (new_file, 0, SEEK_SET) == -1)
++ fatal ("Can't rewind (%s): errno %d\n", new_name, errno);
++
++ if (write (new_file, new_base, new_file_size) != new_file_size)
++ fatal ("Can't write (%s): errno %d\n", new_name, errno);
++#endif
+
+ /* Close the files and make the new file executable. */
+
diff --git a/editors/mule/patches/patch-ac b/editors/mule/patches/patch-ac
new file mode 100644
index 00000000000..002845572a8
--- /dev/null
+++ b/editors/mule/patches/patch-ac
@@ -0,0 +1,22 @@
+$NetBSD: patch-ac,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- lib-src/Makefile.in.in.orig Mon Dec 19 13:13:45 1994
++++ lib-src/Makefile.in.in Sun Sep 27 19:22:21 1998
+@@ -206,7 +206,7 @@
+ if [ `(cd ${archlibdir} && /bin/pwd)` \
+ != `(cd ${srcdir} && /bin/pwd)` ]; then \
+ for file in ${SCRIPTS}; do \
+- (cd ..; $(INSTALL_PROGRAM) ${srcdir}/$$file ${archlibdir}/$$file); \
++ (cd ..; $(INSTALL) ${srcdir}/$$file ${archlibdir}/$$file); \
+ done ; \
+ fi
+
+@@ -219,7 +219,7 @@
+ (cd ..; $(INSTALL_PROGRAM) lib-src/$${file} ${bindir}/$${file}) ; \
+ done
+ for file in ${INSTALLABLE_SCRIPTS} ; do \
+- (cd ..; $(INSTALL_PROGRAM) ${srcdir}/$${file} ${bindir}/$${file}) ; \
++ (cd ..; $(INSTALL) ${srcdir}/$${file} ${bindir}/$${file}) ; \
+ done
+
+ uninstall:
diff --git a/editors/mule/patches/patch-ad b/editors/mule/patches/patch-ad
new file mode 100644
index 00000000000..376ecbb7c3d
--- /dev/null
+++ b/editors/mule/patches/patch-ad
@@ -0,0 +1,12 @@
+$NetBSD: patch-ad,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- configure.orig Mon Sep 20 13:03:01 1999
++++ configure Mon Sep 20 13:35:04 1999
+@@ -587,6 +587,7 @@
+ machine=hp9000s300 ;;
+ mips-*-netbsd*) machine=pmax ;;
+ ns32k-*-netbsd*) machine=ns32000 ;;
++ powerpc-*-netbsd*) machine=powerpc ;;
+ sparc-*-netbsd*) machine=sparc ;;
+ esac
+ ;;
diff --git a/editors/mule/patches/patch-ae b/editors/mule/patches/patch-ae
new file mode 100644
index 00000000000..cb5215fd4da
--- /dev/null
+++ b/editors/mule/patches/patch-ae
@@ -0,0 +1,173 @@
+$NetBSD: patch-ae,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+NetBSD patch-bd,v 1.2 1999/06/04 04:15:44 mycroft Exp
+original patch from editors/emacs pkg.
+
+--- /dev/null Mon Sep 20 13:51:57 1999
++++ src/m/powerpc.h Mon Sep 20 23:21:37 1999
+@@ -0,0 +1,165 @@
++/* machine description file For the PowerPC chip.
++ Copyright (C) 1994, 1997 Free Software Foundation, Inc.
++
++This file is part of GNU Emacs.
++
++GNU Emacs is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 1, or (at your option)
++any later version.
++
++GNU Emacs is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Emacs; see the file COPYING. If not, write to
++the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA. */
++
++/* The following three symbols give information on
++ the size of various data types. */
++
++#define SHORTBITS 16 /* Number of bits in a short */
++
++#define INTBITS 32 /* Number of bits in an int */
++
++#define LONGBITS 32 /* Number of bits in a long */
++
++/* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word
++ is the most significant byte. */
++
++#define WORDS_BIG_ENDIAN
++
++/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
++ * group of arguments and treat it as an array of the arguments. */
++
++#define NO_ARG_ARRAY
++
++/* Define WORD_MACHINE if addresses and such have
++ * to be corrected before they can be used as byte counts. */
++
++/* #define WORD_MACHINE */
++
++/* Now define a symbol for the cpu type, if your compiler
++ does not define it automatically:
++ Ones defined so far include vax, m68000, ns16000, pyramid,
++ orion, tahoe, APOLLO and many others */
++
++/* __powerpc__ defined automatically */
++
++
++/* Use type EMACS_INT rather than a union, to represent Lisp_Object */
++/* This is desirable for most machines. */
++
++#define NO_UNION_TYPE
++
++/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
++ the 24-bit bit field into an int. In other words, if bit fields
++ are always unsigned.
++
++ If you use NO_UNION_TYPE, this flag does not matter. */
++
++#define EXPLICIT_SIGN_EXTEND
++
++/* Data type of load average, as read out of kmem. */
++
++#define LOAD_AVE_TYPE long
++
++/* Convert that into an integer that is 100 for a load average of 1.0 */
++
++#define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE)
++
++/* Define CANNOT_DUMP on machines where unexec does not work.
++ Then the function dump-emacs will not be defined
++ and temacs will do (load "loadup") automatically unless told otherwise. */
++
++/* #define CANNOT_DUMP */
++
++/* Define VIRT_ADDR_VARIES if the virtual addresses of
++ pure and impure space as loaded can vary, and even their
++ relative order cannot be relied on.
++
++ Otherwise Emacs assumes that text space precedes data space,
++ numerically. */
++
++/* #define VIRT_ADDR_VARIES */
++
++/* Define C_ALLOCA if this machine does not support a true alloca
++ and the one written in C should be used instead.
++ Define HAVE_ALLOCA to say that the system provides a properly
++ working alloca function and it should be used.
++ Define neither one if an assembler-language alloca
++ in the file alloca.s should be used. */
++
++#define HAVE_ALLOCA
++
++/* GNU malloc and the relocating allocator do not work together
++ with X. [Who wrote that?] */
++
++/* May 1995: reportedly [Rainer Schoepf <schoepf@uni-mainz.de>] both the
++ system and the gnu malloc system work with "alpha-dec-osf3.0" and
++ "alpha-dec-osf3.2". */
++
++/* May 1995: it seems to me [Morten Welinder <terra@diku.dk>] that both
++ mallocs work with "alpha-dec-osf2.0", but I daren't break anything
++ right now. Feel free to play if you want. */
++
++/* #define SYSTEM_MALLOC */
++
++/* Define NO_REMAP if memory segmentation makes it not work well
++ to change the boundary between the text section and data section
++ when Emacs is dumped. If you define this, the preloaded Lisp
++ code will not be sharable; but that's better than failing completely. */
++
++#define NO_REMAP
++
++/* Some really obscure 4.2-based systems (like Sequent DYNIX)
++ * do not support asynchronous I/O (using SIGIO) on sockets,
++ * even though it works fine on tty's. If you have one of
++ * these systems, define the following, and then use it in
++ * config.h (or elsewhere) to decide when (not) to use SIGIO.
++ *
++ * You'd think this would go in an operating-system description file,
++ * but since it only occurs on some, but not all, BSD systems, the
++ * reasonable place to select for it is in the machine description
++ * file.
++ */
++
++/* #define NO_SOCK_SIGIO */
++
++
++#ifdef __ELF__
++/* With ELF, make sure that all common symbols get allocated to in the
++ data section. Otherwise, the dump of temacs may miss variables in
++ the shared library that have been initialized. For example, with
++ GNU libc, __malloc_initialized would normally be resolved to the
++ shared library's .bss section, which is fatal. */
++# ifdef __GNUC__
++# define C_SWITCH_MACHINE -fno-common
++# else
++# error What gives? Fix me if DEC Unix supports ELF now.
++# endif
++#endif
++
++#if defined(__NetBSD__) || defined(__OpenBSD__)
++#define ORDINARY_LINK
++#endif
++
++#ifdef __ELF__
++#undef UNEXEC
++#define UNEXEC unexelf.o
++#endif
++
++/* On the Alpha it's best to avoid including TERMIO since struct
++ termio and struct termios are mutually incompatible. */
++#define NO_TERMIO
++
++#if defined (LINUX) || defined (__NetBSD__) || defined (__OpenBSD__)
++# define TEXT_END ({ extern int _etext; &_etext; })
++#endif
++
++#if (defined (__NetBSD__) || defined (__OpenBSD__)) && defined (__ELF__)
++#define HAVE_TEXT_START
++#endif
diff --git a/editors/mule/patches/patch-af b/editors/mule/patches/patch-af
new file mode 100644
index 00000000000..a4cc8b29f35
--- /dev/null
+++ b/editors/mule/patches/patch-af
@@ -0,0 +1,15 @@
+$NetBSD: patch-af,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/lisp.h.orig Mon Sep 20 13:42:34 1999
++++ src/lisp.h Mon Sep 20 13:43:50 1999
+@@ -30,6 +30,10 @@
+ /* 93.1.15 modified for Mule Ver.0.9.7.1 by Y.Akiba <akiba@cbs.canon.co.jp>
+ Patch for NeXT is updated. */
+
++#if defined(__NetBSD__)
++#include <machine/limits.h> /* for DBLL_DIG */
++#endif
++
+ /* Define the fundamental Lisp data structures */
+
+ /* Define an integer type with the same size as Lisp_Object.
diff --git a/editors/mule/patches/patch-ag b/editors/mule/patches/patch-ag
new file mode 100644
index 00000000000..7dc741a734f
--- /dev/null
+++ b/editors/mule/patches/patch-ag
@@ -0,0 +1,13 @@
+$NetBSD: patch-ag,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/coding.c.orig Mon Sep 20 23:39:02 1999
++++ src/coding.c Mon Sep 20 23:39:41 1999
+@@ -154,7 +154,7 @@
+ /* 92.4.3, 92.12.18 by K.Handa */
+ Lisp_Object Qcoding_system, Qcoding_system_p, Qnon_nil_coding_system_p;
+ Lisp_Object Qeol_type;
+-Lisp_Object Qpriority;
++extern Lisp_Object Qpriority;
+ /* end of patch */
+ #endif /* emacs */
+
diff --git a/editors/mule/patches/patch-ah b/editors/mule/patches/patch-ah
new file mode 100644
index 00000000000..407b467b33d
--- /dev/null
+++ b/editors/mule/patches/patch-ah
@@ -0,0 +1,30 @@
+$NetBSD: patch-ah,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/fileio.c.orig Mon Sep 20 23:29:04 1999
++++ src/fileio.c Mon Sep 20 23:30:03 1999
+@@ -2604,8 +2604,6 @@
+ return value;
+ }
+
+-#ifdef unix
+-
+ DEFUN ("unix-sync", Funix_sync, Sunix_sync, 0, 0, "",
+ "Tell Unix to finish all pending disk updates.")
+ ()
+@@ -2614,8 +2612,6 @@
+ return Qnil;
+ }
+
+-#endif /* unix */
+-
+ DEFUN ("file-newer-than-file-p", Ffile_newer_than_file_p, Sfile_newer_than_file_p, 2, 2, 0,
+ "Return t if file FILE1 is newer than file FILE2.\n\
+ If FILE1 does not exist, the answer is nil;\n\
+@@ -4507,7 +4503,5 @@
+ defsubr (&Sread_file_name_internal);
+ defsubr (&Sread_file_name);
+
+-#ifdef unix
+ defsubr (&Sunix_sync);
+-#endif
+ }
diff --git a/editors/mule/patches/patch-ai b/editors/mule/patches/patch-ai
new file mode 100644
index 00000000000..d327e9285d3
--- /dev/null
+++ b/editors/mule/patches/patch-ai
@@ -0,0 +1,13 @@
+$NetBSD: patch-ai,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/floatfns.c.orig Mon Sep 20 23:43:32 1999
++++ src/floatfns.c Mon Sep 20 23:43:41 1999
+@@ -49,7 +49,7 @@
+ #include "lisp.h"
+ #include "syssignal.h"
+
+-Lisp_Object Qarith_error;
++extern Lisp_Object Qarith_error;
+
+ #ifdef LISP_FLOAT_TYPE
+
diff --git a/editors/mule/patches/patch-aj b/editors/mule/patches/patch-aj
new file mode 100644
index 00000000000..470f93a4dbe
--- /dev/null
+++ b/editors/mule/patches/patch-aj
@@ -0,0 +1,15 @@
+$NetBSD: patch-aj,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/getloadavg.c.orig Mon Sep 20 23:29:10 1999
++++ src/getloadavg.c Mon Sep 20 23:30:54 1999
+@@ -64,10 +64,7 @@
+ /* Both the Emacs and non-Emacs sections want this. Some
+ configuration files' definitions for the LOAD_AVE_CVT macro (like
+ sparc.h's) use macros like FSCALE, defined here. */
+-#ifdef unix
+ #include <sys/param.h>
+-#endif
+-
+
+ #ifdef HAVE_CONFIG_H
+ #if defined (emacs) || defined (CONFIG_BROKETS)
diff --git a/editors/mule/patches/patch-ak b/editors/mule/patches/patch-ak
new file mode 100644
index 00000000000..ec169fd83ea
--- /dev/null
+++ b/editors/mule/patches/patch-ak
@@ -0,0 +1,13 @@
+$NetBSD: patch-ak,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/keyboard.c.orig Mon Sep 20 23:36:21 1999
++++ src/keyboard.c Mon Sep 20 23:37:10 1999
+@@ -301,7 +301,7 @@
+
+ /* The timestamp of the last input event we received from the X server.
+ X Windows wants this for selection ownership. */
+-unsigned long last_event_timestamp;
++extern unsigned long last_event_timestamp;
+
+ Lisp_Object Qself_insert_command;
+ Lisp_Object Qforward_char;
diff --git a/editors/mule/patches/patch-al b/editors/mule/patches/patch-al
new file mode 100644
index 00000000000..5df6659b576
--- /dev/null
+++ b/editors/mule/patches/patch-al
@@ -0,0 +1,16 @@
+$NetBSD: patch-al,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+--- src/lread.c.orig Mon Sep 20 23:44:46 1999
++++ src/lread.c Mon Sep 20 23:45:25 1999
+@@ -86,9 +86,9 @@
+
+ Lisp_Object Qread_char, Qget_file_char, Qstandard_input, Qcurrent_load_list;
+ Lisp_Object Qvariable_documentation, Vvalues, Vstandard_input, Vafter_load_alist;
+-Lisp_Object Qascii_character, Qload;
++Lisp_Object Qascii_character;
+
+-extern Lisp_Object Qevent_symbol_element_mask;
++extern Lisp_Object Qload, Qevent_symbol_element_mask;
+
+ /* non-zero if inside `load' */
+ int load_in_progress;
diff --git a/editors/mule/patches/patch-am b/editors/mule/patches/patch-am
new file mode 100644
index 00000000000..249b95150cc
--- /dev/null
+++ b/editors/mule/patches/patch-am
@@ -0,0 +1,13 @@
+$NetBSD: patch-am,v 1.1.1.1 2000/11/21 05:21:09 kei Exp $
+
+--- src/xfns.c.orig Tue Sep 21 00:13:59 1999
++++ src/xfns.c Tue Sep 21 00:14:42 1999
+@@ -226,7 +226,7 @@
+ Lisp_Object Qbox;
+ Lisp_Object Qcursor_color;
+ Lisp_Object Qcursor_type;
+-Lisp_Object Qfont;
++extern Lisp_Object Qfont;
+ Lisp_Object Qforeground_color;
+ Lisp_Object Qgeometry;
+ /* Lisp_Object Qicon; */
diff --git a/editors/mule/patches/patch-an b/editors/mule/patches/patch-an
new file mode 100644
index 00000000000..d0a2ee24fa1
--- /dev/null
+++ b/editors/mule/patches/patch-an
@@ -0,0 +1,38 @@
+$NetBSD: patch-an,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** Makefile.in.orig Tue Dec 20 11:01:54 1994
+--- Makefile.in Fri Nov 17 15:29:34 2000
+***************
+*** 186,192 ****
+ # Subdirectories to make recursively. `lisp' is not included
+ # because the compiled lisp files are part of the distribution
+ # and you cannot remake them without installing Emacs first.
+! SUBDIR = lib-src src
+
+ # The makefiles of the directories in $SUBDIR.
+ SUBDIR_MAKEFILES = lib-src/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
+--- 186,192 ----
+ # Subdirectories to make recursively. `lisp' is not included
+ # because the compiled lisp files are part of the distribution
+ # and you cannot remake them without installing Emacs first.
+! SUBDIR = lib-src src man
+
+ # The makefiles of the directories in $SUBDIR.
+ SUBDIR_MAKEFILES = lib-src/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
+***************
+*** 341,347 ****
+ if [ ! -f ${infodir}/dir ] && [ -f dir ]; then \
+ (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
+ fi ; \
+! for f in cl* dired-x* emacs* forms* gnus* info* sc* vip* \
+ antenews* canna* egg* languages* m2ps* mule* kbd-trans* \
+ quail* terminology* CCL* ISO2022* R2L* XFONT*; do \
+ (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f); \
+--- 341,347 ----
+ if [ ! -f ${infodir}/dir ] && [ -f dir ]; then \
+ (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
+ fi ; \
+! for f in cl* dired-x* emacs* forms* gnus* sc* vip* \
+ antenews* canna* egg* languages* m2ps* mule* kbd-trans* \
+ quail* terminology* CCL* ISO2022* R2L* XFONT*; do \
+ (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f); \
diff --git a/editors/mule/patches/patch-ao b/editors/mule/patches/patch-ao
new file mode 100644
index 00000000000..98c613162f2
--- /dev/null
+++ b/editors/mule/patches/patch-ao
@@ -0,0 +1,46 @@
+$NetBSD: patch-ao,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/Makefile.orig Sun Jul 3 06:35:17 1994
+--- man/Makefile Fri Nov 17 20:49:09 2000
+***************
+*** 4,10 ****
+ MAKEINFO = makeinfo
+ TEXINDEX_OBJS = texindex.o getopt.o
+ INFO_TARGETS = ../info/emacs ../info/cl ../info/forms ../info/vip \
+! ../info/gnus ../info/sc ../info/info ../info/dired-x
+ DVI_TARGETS = emacs.dvi cl.dvi forms.dvi vip.dvi gnus.dvi sc.dvi dired-x.dvi
+ INFOSOURCES = info.texi info-stnd.texi
+
+--- 4,10 ----
+ MAKEINFO = makeinfo
+ TEXINDEX_OBJS = texindex.o getopt.o
+ INFO_TARGETS = ../info/emacs ../info/cl ../info/forms ../info/vip \
+! ../info/gnus ../info/sc ../info/dired-x
+ DVI_TARGETS = emacs.dvi cl.dvi forms.dvi vip.dvi gnus.dvi sc.dvi dired-x.dvi
+ INFOSOURCES = info.texi info-stnd.texi
+
+***************
+*** 54,59 ****
+--- 54,60 ----
+ gnu1.texi \
+ glossary.texi
+
++ all: info
+ info: $(INFO_TARGETS)
+
+ dvi: $(DVI_TARGETS)
+***************
+*** 66,77 ****
+
+ getopt.o: getopt.c
+ $(CC) -Demacs -I../src -I../lib-src -c getopt.c
+-
+- ../info/info: ${INFOSOURCES}
+- $(MAKEINFO) --no-split info.texi
+-
+- info.dvi: texindex ${INFOSOURCES}
+- $(TEXI2DVI) info.texi
+
+ ../info/emacs: ${EMACSSOURCES}
+ $(MAKEINFO) emacs.texi
+--- 67,72 ----
diff --git a/editors/mule/patches/patch-ar b/editors/mule/patches/patch-ar
new file mode 100644
index 00000000000..6715838ad8a
--- /dev/null
+++ b/editors/mule/patches/patch-ar
@@ -0,0 +1,18 @@
+$NetBSD: patch-ar,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/cl.texi.orig Fri Nov 17 13:56:11 2000
+--- man/cl.texi Fri Nov 17 14:09:59 2000
+***************
+*** 2,7 ****
+--- 2,12 ----
+ @setfilename ../info/cl
+ @settitle Common Lisp Extensions
+
++ @dircategory Editors
++ @direntry
++ * CL: (cl). Partial Common Lisp support for Emacs Lisp.
++ @end direntry
++
+ @iftex
+ @finalout
+ @end iftex
diff --git a/editors/mule/patches/patch-as b/editors/mule/patches/patch-as
new file mode 100644
index 00000000000..27a8e0e95e2
--- /dev/null
+++ b/editors/mule/patches/patch-as
@@ -0,0 +1,86 @@
+$NetBSD: patch-as,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/dired-x.texi.orig Sun Aug 14 01:58:50 1994
+--- man/dired-x.texi Fri Nov 17 21:38:37 2000
+***************
+*** 18,23 ****
+--- 18,29 ----
+ @setfilename ../info/dired-x
+ @c dired-x.el REVISION NUMBER
+ @settitle Dired Extra Version 2 User's Manual
++
++ @dircategory Editors
++ @direntry
++ * Dired-X: (dired-x). Dired Extra Features.
++ @end direntry
++
+ @iftex
+ @finalout
+ @end iftex
+***************
+*** 196,227 ****
+ @enumerate
+ @item
+ Omitting of uninteresting files from dired listing.
+! @itemize
+ @xref{Omitting Files in Dired}
+ @end itemize
+ @item
+ Local variables for dired directories.
+! @itemize
+ @xref{Local Variables}
+ @end itemize
+ @item
+ Guessing shell commands in dired buffers.
+! @itemize
+ @xref{Shell Command Guessing}
+ @end itemize
+ @item
+ Running dired command in non-dired buffers.
+! @itemize
+ @xref{Virtual Dired}
+ @end itemize
+ @item
+ Finding a file mentioned in a buffer
+! @itemize
+ @xref{Find File At Point}
+ @end itemize
+ @item
+ Commands using file marking.
+! @itemize
+ @xref{Advanced Mark Commands}
+ @end itemize
+ @end enumerate
+--- 202,233 ----
+ @enumerate
+ @item
+ Omitting of uninteresting files from dired listing.
+! @itemize @bullet
+ @xref{Omitting Files in Dired}
+ @end itemize
+ @item
+ Local variables for dired directories.
+! @itemize @bullet
+ @xref{Local Variables}
+ @end itemize
+ @item
+ Guessing shell commands in dired buffers.
+! @itemize @bullet
+ @xref{Shell Command Guessing}
+ @end itemize
+ @item
+ Running dired command in non-dired buffers.
+! @itemize @bullet
+ @xref{Virtual Dired}
+ @end itemize
+ @item
+ Finding a file mentioned in a buffer
+! @itemize @bullet
+ @xref{Find File At Point}
+ @end itemize
+ @item
+ Commands using file marking.
+! @itemize @bullet
+ @xref{Advanced Mark Commands}
+ @end itemize
+ @end enumerate
diff --git a/editors/mule/patches/patch-au b/editors/mule/patches/patch-au
new file mode 100644
index 00000000000..026c11a4c0f
--- /dev/null
+++ b/editors/mule/patches/patch-au
@@ -0,0 +1,24 @@
+$NetBSD: patch-au,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/emacs.texi.orig Fri Nov 4 20:08:52 1994
+--- man/emacs.texi Fri Nov 17 20:35:02 2000
+***************
+*** 1,10 ****
+--- 1,17 ----
+ \input texinfo
+
++ @setfilename ../info/emacs
++
+ @ifinfo
+ @c The edition number appears in several places in this file
+ This corresponds to the tenth edition of the @cite{GNU Emacs Manual},
+ for Emacs version 19.28.
+ @c Please REMEMBER to update edition number in *three* places in this file.
++
++ @dircategory Editors
++ @direntry
++ * Emacs: (emacs). The extensible self-documenting text editor.
++ @end direntry
+
+ Published by the Free Software Foundation
+ 675 Massachusetts Avenue
diff --git a/editors/mule/patches/patch-av b/editors/mule/patches/patch-av
new file mode 100644
index 00000000000..88908272402
--- /dev/null
+++ b/editors/mule/patches/patch-av
@@ -0,0 +1,19 @@
+$NetBSD: patch-av,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/forms.texi.orig Fri Nov 17 13:56:59 2000
+--- man/forms.texi Fri Nov 17 14:15:09 2000
+***************
+*** 16,21 ****
+--- 16,27 ----
+ @c @smallbook
+ @comment %**end of header (This is for running Texinfo on a region.)
+
++ @dircategory Editors
++ @direntry
++ * Forms: (forms). Emacs package for editing data bases
++ by filling in forms.
++ @end direntry
++
+ @ifinfo
+ This file documents Forms mode, a form-editing major mode for GNU Emacs.
+
diff --git a/editors/mule/patches/patch-aw b/editors/mule/patches/patch-aw
new file mode 100644
index 00000000000..bf40370b7ef
--- /dev/null
+++ b/editors/mule/patches/patch-aw
@@ -0,0 +1,19 @@
+$NetBSD: patch-aw,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/gnus.texi.orig Fri Nov 17 13:57:09 2000
+--- man/gnus.texi Fri Nov 17 15:09:32 2000
+***************
+*** 3,8 ****
+--- 3,14 ----
+ @comment %**start of header (This is for running Texinfo on a region.)
+ @setfilename ../info/gnus
+ @settitle GNUS 3.15 Manual
++
++ @dircategory Editors
++ @direntry
++ * GNUS: (gnus). The newsreader GNUS.
++ @end direntry
++
+ @iftex
+ @finalout
+ @end iftex
diff --git a/editors/mule/patches/patch-az b/editors/mule/patches/patch-az
new file mode 100644
index 00000000000..ef4e1022e21
--- /dev/null
+++ b/editors/mule/patches/patch-az
@@ -0,0 +1,20 @@
+$NetBSD: patch-az,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/sc.texi.orig Fri Nov 17 13:58:18 2000
+--- man/sc.texi Fri Nov 17 14:57:08 2000
+***************
+*** 6,11 ****
+--- 6,18 ----
+ @iftex
+ @finalout
+ @end iftex
++
++ @dircategory Editors
++ @direntry
++ * SC: (sc). Supercite lets you cite parts of messages you're
++ replying to, in flexible ways.
++ @end direntry
++
+ @c @setchapternewpage odd % For book style double sided manual.
+ @comment %**end of header (This is for running Texinfo on a region.)
+ @c @smallbook
diff --git a/editors/mule/patches/patch-ba b/editors/mule/patches/patch-ba
new file mode 100644
index 00000000000..a4ae126716e
--- /dev/null
+++ b/editors/mule/patches/patch-ba
@@ -0,0 +1,18 @@
+$NetBSD: patch-ba,v 1.1.1.1 2000/11/21 05:21:10 kei Exp $
+
+*** man/vip.texi.orig Fri Nov 17 13:58:36 2000
+--- man/vip.texi Fri Nov 17 14:58:20 2000
+***************
+*** 25,30 ****
+--- 25,35 ----
+ @setfilename ../info/vip
+ @settitle VIP
+
++ @dircategory Editors
++ @direntry
++ * VIP: (vip). An VI-emulation for Emacs.
++ @end direntry
++
+ @iftex
+ @finalout
+ @end iftex
diff --git a/editors/mule/patches/patch-bb b/editors/mule/patches/patch-bb
new file mode 100644
index 00000000000..2fd6dbec669
--- /dev/null
+++ b/editors/mule/patches/patch-bb
@@ -0,0 +1,4272 @@
+$NetBSD: patch-bb,v 1.1.1.1 2000/11/21 05:21:14 kei Exp $
+
+*** man/texinfo.tex.orig Fri Nov 17 16:10:16 2000
+--- man/texinfo.tex Fri Nov 17 20:00:13 2000
+***************
+*** 1,6 ****
+! %% TeX macros to handle texinfo files
+
+! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 1994 Free Software Foundation, Inc.
+
+ %This texinfo.tex file is free software; you can redistribute it and/or
+ %modify it under the terms of the GNU General Public License as
+--- 1,8 ----
+! %% TeX macros to handle Texinfo files.
+! %% Id: texinfo.tex,v 1.1.1.2 1997/09/24 19:26:42 gwr Exp
+
+! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
+! % 94, 95, 96, 97 Free Software Foundation, Inc.
+
+ %This texinfo.tex file is free software; you can redistribute it and/or
+ %modify it under the terms of the GNU General Public License as
+***************
+*** 14,51 ****
+
+ %You should have received a copy of the GNU General Public License
+ %along with this texinfo.tex file; see the file COPYING. If not, write
+! %to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
+! %USA.
+
+
+ %In other words, you are welcome to use, share and improve this program.
+ %You are forbidden to forbid anyone else to use, share and improve
+ %what you give them. Help stamp out software-hoarding!
+
+ % This automatically updates the version number based on RCS.
+ \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
+! \deftexinfoversion Revision: 2.133
+ \message{Loading texinfo package [Version \texinfoversion]:}
+
+! % Print the version number if in a .fmt file.
+! \everyjob{\message{[Texinfo version \texinfoversion]}\message{}}
+
+ % Save some parts of plain tex whose names we will redefine.
+
+- \let\ptextilde=\~
+- \let\ptexlbrace=\{
+- \let\ptexrbrace=\}
+- \let\ptexdots=\dots
+- \let\ptexdot=\.
+- \let\ptexstar=\*
+- \let\ptexend=\end
+- \let\ptexbullet=\bullet
+ \let\ptexb=\b
+ \let\ptexc=\c
+ \let\ptexi=\i
+ \let\ptext=\t
+- \let\ptexl=\l
+- \let\ptexL=\L
+
+ % Be sure we're in horizontal mode when doing a tie, since we make space
+ % equivalent to this in @example-like environments. Otherwise, a space
+--- 16,65 ----
+
+ %You should have received a copy of the GNU General Public License
+ %along with this texinfo.tex file; see the file COPYING. If not, write
+! %to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+! %Boston, MA 02111-1307, USA.
+
+
+ %In other words, you are welcome to use, share and improve this program.
+ %You are forbidden to forbid anyone else to use, share and improve
+ %what you give them. Help stamp out software-hoarding!
+
++
++ % Send bug reports to bug-texinfo@prep.ai.mit.edu.
++ % Please include a *precise* test case in each bug report.
++
++
++ % Make it possible to create a .fmt file just by loading this file:
++ % if the underlying format is not loaded, start by loading it now.
++ % Added by gildea November 1993.
++ \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
++
+ % This automatically updates the version number based on RCS.
+ \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
+! \deftexinfoversion Revision: 1.1.1.2
+ \message{Loading texinfo package [Version \texinfoversion]:}
+
+! % If in a .fmt file, print the version number
+! % and turn on active characters that we couldn't do earlier because
+! % they might have appeared in the input file name.
+! \everyjob{\message{[Texinfo version \texinfoversion]}\message{}
+! \catcode`+=\active \catcode`\_=\active}
+
+ % Save some parts of plain tex whose names we will redefine.
+
+ \let\ptexb=\b
++ \let\ptexbullet=\bullet
+ \let\ptexc=\c
++ \let\ptexcomma=\,
++ \let\ptexdot=\.
++ \let\ptexdots=\dots
++ \let\ptexend=\end
++ \let\ptexequiv = \equiv
+ \let\ptexi=\i
++ \let\ptexlbrace=\{
++ \let\ptexrbrace=\}
++ \let\ptexstar=\*
+ \let\ptext=\t
+
+ % Be sure we're in horizontal mode when doing a tie, since we make space
+ % equivalent to this in @example-like environments. Otherwise, a space
+***************
+*** 53,61 ****
+ % since \penalty is valid in vertical mode, we'd end up putting the
+ % penalty on the vertical list instead of in the new paragraph.
+ {\catcode`@ = 11
+! \gdef\tie{\leavevmode\penalty\@M\ }
+ }
+! \let\~ = \tie % And make it available as @~.
+
+ \message{Basics,}
+ \chardef\other=12
+--- 67,78 ----
+ % since \penalty is valid in vertical mode, we'd end up putting the
+ % penalty on the vertical list instead of in the new paragraph.
+ {\catcode`@ = 11
+! % Avoid using \@M directly, because that causes trouble
+! % if the definition is written into an index file.
+! \global\let\tiepenalty = \@M
+! \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+ }
+!
+
+ \message{Basics,}
+ \chardef\other=12
+***************
+*** 86,95 ****
+ \hyphenation{eshell}
+
+ % Margin to add to right of even pages, to left of odd pages.
+! \newdimen \bindingoffset \bindingoffset=0pt
+! \newdimen \normaloffset \normaloffset=\hoffset
+ \newdimen\pagewidth \newdimen\pageheight
+- \pagewidth=\hsize \pageheight=\vsize
+
+ % Sometimes it is convenient to have everything in the transcript file
+ % and nothing on the terminal. We don't just call \tracingall here,
+--- 103,111 ----
+ \hyphenation{eshell}
+
+ % Margin to add to right of even pages, to left of odd pages.
+! \newdimen \bindingoffset
+! \newdimen \normaloffset
+ \newdimen\pagewidth \newdimen\pageheight
+
+ % Sometimes it is convenient to have everything in the transcript file
+ % and nothing on the terminal. We don't just call \tracingall here,
+***************
+*** 102,182 ****
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
+ }%
+
+! %---------------------Begin change-----------------------
+ %
+! %%%% For @cropmarks command.
+! % Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
+ %
+ \newdimen\cornerlong \newdimen\cornerthick
+! \newdimen \topandbottommargin
+! \newdimen \outerhsize \newdimen \outervsize
+! \cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
+ \outerhsize=7in
+ %\outervsize=9.5in
+ % Alternative @smallbook page size is 9.25in
+ \outervsize=9.25in
+ \topandbottommargin=.75in
+! %
+! %---------------------End change-----------------------
+
+ % \onepageout takes a vbox as an argument. Note that \pagecontents
+! % does insertions itself, but you have to call it yourself.
+! \chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}}
+! \def\onepageout#1{\hoffset=\normaloffset
+! \ifodd\pageno \advance\hoffset by \bindingoffset
+! \else \advance\hoffset by -\bindingoffset\fi
+! {\escapechar=`\\\relax % makes sure backslash is used in output files.
+! \shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%
+! {\let\hsize=\pagewidth \makefootline}}}%
+! \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+!
+! %%%% For @cropmarks command %%%%
+!
+! % Here is a modification of the main output routine for Near East Publications
+! % This provides right-angle cropmarks at all four corners.
+! % The contents of the page are centerlined into the cropmarks,
+! % and any desired binding offset is added as an \hskip on either
+! % site of the centerlined box. (P. A. MacKay, 12 November, 1986)
+! %
+! \def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
+! {\escapechar=`\\\relax % makes sure backslash is used in output files.
+! \shipout
+! \vbox to \outervsize{\hsize=\outerhsize
+! \vbox{\line{\ewtop\hfill\ewtop}}
+! \nointerlineskip
+! \line{\vbox{\moveleft\cornerthick\nstop}
+! \hfill
+! \vbox{\moveright\cornerthick\nstop}}
+! \vskip \topandbottommargin
+! \centerline{\ifodd\pageno\hskip\bindingoffset\fi
+! \vbox{
+! {\let\hsize=\pagewidth \makeheadline}
+! \pagebody{#1}
+! {\let\hsize=\pagewidth \makefootline}}
+! \ifodd\pageno\else\hskip\bindingoffset\fi}
+! \vskip \topandbottommargin plus1fill minus1fill
+! \boxmaxdepth\cornerthick
+! \line{\vbox{\moveleft\cornerthick\nsbot}
+! \hfill
+! \vbox{\moveright\cornerthick\nsbot}}
+! \nointerlineskip
+! \vbox{\line{\ewbot\hfill\ewbot}}
+! }}
+ \advancepageno
+! \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+! %
+! % Do @cropmarks to get crop marks
+! \def\cropmarks{\let\onepageout=\croppageout }
+
+ \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+ {\catcode`\@ =11
+ \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+ \dimen@=\dp#1 \unvbox#1
+ \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+ }
+
+- %
+ % Here are the rules for the cropmarks. Note that they are
+ % offset so that the space between them is truly \outerhsize or \outervsize
+ % (P. A. MacKay, 12 November, 1986)
+--- 118,225 ----
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
+ }%
+
+! % For @cropmarks command.
+! % Do @cropmarks to get crop marks.
+! %
+! \newif\ifcropmarks
+! \let\cropmarks = \cropmarkstrue
+ %
+! % Dimensions to add cropmarks at corners.
+! % Added by P. A. MacKay, 12 Nov. 1986
+ %
+ \newdimen\cornerlong \newdimen\cornerthick
+! \newdimen\topandbottommargin
+! \newdimen\outerhsize \newdimen\outervsize
+! \cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
+ \outerhsize=7in
+ %\outervsize=9.5in
+ % Alternative @smallbook page size is 9.25in
+ \outervsize=9.25in
+ \topandbottommargin=.75in
+!
+! % Main output routine.
+! \chardef\PAGE = 255
+! \output = {\onepageout{\pagecontents\PAGE}}
+!
+! \newbox\headlinebox
+! \newbox\footlinebox
+
+ % \onepageout takes a vbox as an argument. Note that \pagecontents
+! % does insertions, but you have to call it yourself.
+! \def\onepageout#1{%
+! \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+! %
+! \ifodd\pageno \advance\hoffset by \bindingoffset
+! \else \advance\hoffset by -\bindingoffset\fi
+! %
+! % Do this outside of the \shipout so @code etc. will be expanded in
+! % the headline as they should be, not taken literally (outputting ''code).
+! \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+! \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+! %
+! {%
+! % Have to do this stuff outside the \shipout because we want it to
+! % take effect in \write's, yet the group defined by the \vbox ends
+! % before the \shipout runs.
+! %
+! \escapechar = `\\ % use backslash in output files.
+! \indexdummies % don't expand commands in the output.
+! \normalturnoffactive % \ in index entries must not stay \, e.g., if
+! % the page break happens to be in the middle of an example.
+! \shipout\vbox{%
+! \ifcropmarks \vbox to \outervsize\bgroup
+! \hsize = \outerhsize
+! \line{\ewtop\hfil\ewtop}%
+! \nointerlineskip
+! \line{%
+! \vbox{\moveleft\cornerthick\nstop}%
+! \hfill
+! \vbox{\moveright\cornerthick\nstop}%
+! }%
+! \vskip\topandbottommargin
+! \line\bgroup
+! \hfil % center the page within the outer (page) hsize.
+! \ifodd\pageno\hskip\bindingoffset\fi
+! \vbox\bgroup
+! \fi
+! %
+! \unvbox\headlinebox
+! \pagebody{#1}%
+! \unvbox\footlinebox
+! %
+! \ifcropmarks
+! \egroup % end of \vbox\bgroup
+! \hfil\egroup % end of (centering) \line\bgroup
+! \vskip\topandbottommargin plus1fill minus1fill
+! \boxmaxdepth = \cornerthick
+! \line{%
+! \vbox{\moveleft\cornerthick\nsbot}%
+! \hfill
+! \vbox{\moveright\cornerthick\nsbot}%
+! }%
+! \nointerlineskip
+! \line{\ewbot\hfil\ewbot}%
+! \egroup % \vbox from first cropmarks clause
+! \fi
+! }% end of \shipout\vbox
+! }% end of group with \turnoffactive
+ \advancepageno
+! \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+! }
+!
+! \newinsert\margin \dimen\margin=\maxdimen
+
+ \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+ {\catcode`\@ =11
+ \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
++ % marginal hacks, juha@viisa.uucp (Juha Takala)
++ \ifvoid\margin\else % marginal info is present
++ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+ \dimen@=\dp#1 \unvbox#1
+ \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+ }
+
+ % Here are the rules for the cropmarks. Note that they are
+ % offset so that the space between them is truly \outerhsize or \outervsize
+ % (P. A. MacKay, 12 November, 1986)
+***************
+*** 344,354 ****
+ %\def\'{{'}}
+
+ % Used to generate quoted braces.
+-
+ \def\mylbrace {{\tt \char '173}}
+ \def\myrbrace {{\tt \char '175}}
+ \let\{=\mylbrace
+ \let\}=\myrbrace
+
+ % @: forces normal size whitespace following.
+ \def\:{\spacefactor=1000 }
+--- 387,429 ----
+ %\def\'{{'}}
+
+ % Used to generate quoted braces.
+ \def\mylbrace {{\tt \char '173}}
+ \def\myrbrace {{\tt \char '175}}
+ \let\{=\mylbrace
+ \let\}=\myrbrace
++ \begingroup
++ % Definitions to produce actual \{ & \} command in an index.
++ \catcode`\{ = 12 \catcode`\} = 12
++ \catcode`\[ = 1 \catcode`\] = 2
++ \catcode`\@ = 0 \catcode`\\ = 12
++ @gdef@lbracecmd[\{]%
++ @gdef@rbracecmd[\}]%
++ @endgroup
++
++ % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
++ % Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
++ \let\, = \c
++ \let\dotaccent = \.
++ \def\ringaccent#1{{\accent23 #1}}
++ \let\tieaccent = \t
++ \let\ubaraccent = \b
++ \let\udotaccent = \d
++
++ % Other special characters: @questiondown @exclamdown
++ % Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
++ \def\questiondown{?`}
++ \def\exclamdown{!`}
++
++ % Dotless i and dotless j, used for accents.
++ \def\imacro{i}
++ \def\jmacro{j}
++ \def\dotless#1{%
++ \def\temp{#1}%
++ \ifx\temp\imacro \ptexi
++ \else\ifx\temp\jmacro \j
++ \else \errmessage{@dotless can be used only with i or j}%
++ \fi\fi
++ }
+
+ % @: forces normal size whitespace following.
+ \def\:{\spacefactor=1000 }
+***************
+*** 359,364 ****
+--- 434,448 ----
+ % @. is an end-of-sentence period.
+ \def\.{.\spacefactor=3000 }
+
++ % @enddots{} is an end-of-sentence ellipsis.
++ \gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
++
++ % @! is an end-of-sentence bang.
++ \gdef\!{!\spacefactor=3000 }
++
++ % @? is an end-of-sentence query.
++ \gdef\?{?\spacefactor=3000 }
++
+ % @w prevents a word break. Without the \leavevmode, @w at the
+ % beginning of a paragraph, when TeX is still in vertical mode, would
+ % produce a whole line of output instead of starting the paragraph.
+***************
+*** 506,522 ****
+ \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+ %\hbox{{\rm#1}}\hfil\break}}
+
+ % @include file insert text of that file as input.
+!
+! \def\include{\parsearg\includezzz}
+! %Use \input\thisfile to avoid blank after \input, which may be an active
+! %char (in which case the blank would become the \input argument).
+! %The grouping keeps the value of \thisfile correct even when @include
+! %is nested.
+! \def\includezzz #1{\begingroup
+! \def\thisfile{#1}\input\thisfile
+ \endgroup}
+
+ \def\thisfile{}
+--- 590,623 ----
+ \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
++ % @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
++
++ \def\inmargin#1{%
++ \strut\vadjust{\nobreak\kern-\strutdepth
++ \vtop to \strutdepth{\baselineskip\strutdepth\vss
++ \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
++ \newskip\inmarginspacing \inmarginspacing=1cm
++ \def\strutdepth{\dp\strutbox}
++
+ %\hbox{{\rm#1}}\hfil\break}}
+
+ % @include file insert text of that file as input.
+! % Allow normal characters that we make active in the argument (a file name).
+! \def\include{\begingroup
+! \catcode`\\=12
+! \catcode`~=12
+! \catcode`^=12
+! \catcode`_=12
+! \catcode`|=12
+! \catcode`<=12
+! \catcode`>=12
+! \catcode`+=12
+! \parsearg\includezzz}
+! % Restore active chars for included file.
+! \def\includezzz#1{\endgroup\begingroup
+! % Read the included file in a group so nested @include's work.
+! \def\thisfile{#1}%
+! \input\thisfile
+ \endgroup}
+
+ \def\thisfile{}
+***************
+*** 531,537 ****
+ % @sp n outputs n lines of vertical space
+
+ \def\sp{\parsearg\spxxx}
+! \def\spxxx #1{\par \vskip #1\baselineskip}
+
+ % @comment ...line which is ignored...
+ % @c is the same as @comment
+--- 632,638 ----
+ % @sp n outputs n lines of vertical space
+
+ \def\sp{\parsearg\spxxx}
+! \def\spxxx #1{\vskip #1\baselineskip}
+
+ % @comment ...line which is ignored...
+ % @c is the same as @comment
+***************
+*** 544,549 ****
+--- 645,653 ----
+
+ \let\c=\comment
+
++ % @paragraphindent is defined for the Info formatting commands only.
++ \let\paragraphindent=\comment
++
+ % Prevent errors for section commands.
+ % Used in @ignore and in failing conditionals.
+ \def\ignoresections{%
+***************
+*** 578,583 ****
+--- 682,688 ----
+ % incorrectly.
+ %
+ \def\ignoremorecommands{%
++ \let\defcodeindex = \relax
+ \let\defcv = \relax
+ \let\deffn = \relax
+ \let\deffnx = \relax
+***************
+*** 601,606 ****
+--- 706,720 ----
+ \let\printindex = \relax
+ \let\pxref = \relax
+ \let\settitle = \relax
++ \let\setchapternewpage = \relax
++ \let\setchapterstyle = \relax
++ \let\everyheading = \relax
++ \let\evenheading = \relax
++ \let\oddheading = \relax
++ \let\everyfooting = \relax
++ \let\evenfooting = \relax
++ \let\oddfooting = \relax
++ \let\headings = \relax
+ \let\include = \relax
+ \let\lowersections = \relax
+ \let\down = \relax
+***************
+*** 609,627 ****
+ \let\set = \relax
+ \let\clear = \relax
+ \let\item = \relax
+- \let\message = \relax
+ }
+
+ % Ignore @ignore ... @end ignore.
+ %
+ \def\ignore{\doignore{ignore}}
+
+! % Also ignore @ifinfo, @menu, and @direntry text.
+ %
+ \def\ifinfo{\doignore{ifinfo}}
+ \def\menu{\doignore{menu}}
+ \def\direntry{\doignore{direntry}}
+
+ % Ignore text until a line `@end #1'.
+ %
+ \def\doignore#1{\begingroup
+--- 723,752 ----
+ \let\set = \relax
+ \let\clear = \relax
+ \let\item = \relax
+ }
+
+ % Ignore @ignore ... @end ignore.
+ %
+ \def\ignore{\doignore{ignore}}
+
+! % Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text.
+ %
+ \def\ifinfo{\doignore{ifinfo}}
++ \def\ifhtml{\doignore{ifhtml}}
++ \def\html{\doignore{html}}
+ \def\menu{\doignore{menu}}
+ \def\direntry{\doignore{direntry}}
+
++ % Also ignore @macro ... @end macro. The user must run texi2dvi,
++ % which runs makeinfo to do macro expansion. Ignore @unmacro, too.
++ \def\macro{\doignore{macro}}
++ \let\unmacro = \comment
++
++
++ % @dircategory CATEGORY -- specify a category of the dir file
++ % which this file should belong to. Ignore this in TeX.
++ \let\dircategory = \comment
++
+ % Ignore text until a line `@end #1'.
+ %
+ \def\doignore#1{\begingroup
+***************
+*** 653,663 ****
+ \immediate\write16{If you are running another version of TeX, relax.}
+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+ \immediate\write16{ Then upgrade your TeX installation if you can.}
+ \immediate\write16{If you are stuck with version 3.0, run the}
+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
+ \immediate\write16{ to use a workaround.}
+ \immediate\write16{}
+! \warnedobstrue
+ \fi
+ }
+
+--- 778,789 ----
+ \immediate\write16{If you are running another version of TeX, relax.}
+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+ \immediate\write16{ Then upgrade your TeX installation if you can.}
++ \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
+ \immediate\write16{If you are stuck with version 3.0, run the}
+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
+ \immediate\write16{ to use a workaround.}
+ \immediate\write16{}
+! \global\warnedobstrue
+ \fi
+ }
+
+***************
+*** 733,749 ****
+ % Since we want to separate VAR from REST-OF-LINE (which might be
+ % empty), we can't just use \parsearg; we have to insert a space of our
+ % own to delimit the rest of the line, and then take it out again if we
+! % didn't need it.
+ %
+! \def\set{\parsearg\setxxx}
+ \def\setxxx#1{\setyyy#1 \endsetyyy}
+ \def\setyyy#1 #2\endsetyyy{%
+ \def\temp{#2}%
+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+ \fi
+ }
+! \def\setzzz#1#2 \endsetzzz{\expandafter\xdef\csname SET#1\endcsname{#2}}
+
+ % @clear VAR clears (i.e., unsets) the variable VAR.
+ %
+--- 859,882 ----
+ % Since we want to separate VAR from REST-OF-LINE (which might be
+ % empty), we can't just use \parsearg; we have to insert a space of our
+ % own to delimit the rest of the line, and then take it out again if we
+! % didn't need it. Make sure the catcode of space is correct to avoid
+! % losing inside @example, for instance.
+ %
+! \def\set{\begingroup\catcode` =10
+! \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
+! \parsearg\setxxx}
+ \def\setxxx#1{\setyyy#1 \endsetyyy}
+ \def\setyyy#1 #2\endsetyyy{%
+ \def\temp{#2}%
+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+ \fi
++ \endgroup
+ }
+! % Can't use \xdef to pre-expand #2 and save some time, since \temp or
+! % \next or other control sequences that we've defined might get us into
+! % an infinite loop. Consider `@set foo @cite{bar}'.
+! \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+
+ % @clear VAR clears (i.e., unsets) the variable VAR.
+ %
+***************
+*** 752,761 ****
+
+ % @value{foo} gets the text saved in variable foo.
+ %
+! \def\value#1{\expandafter
+! \ifx\csname SET#1\endcsname\relax
+! {\{No value for ``#1''\}}
+! \else \csname SET#1\endcsname \fi}
+
+ % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+ % with @set.
+--- 885,900 ----
+
+ % @value{foo} gets the text saved in variable foo.
+ %
+! \def\value{\begingroup
+! \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
+! \valuexxx}
+! \def\valuexxx#1{%
+! \expandafter\ifx\csname SET#1\endcsname\relax
+! {\{No value for ``#1''\}}%
+! \else
+! \csname SET#1\endcsname
+! \fi
+! \endgroup}
+
+ % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+ % with @set.
+***************
+*** 855,860 ****
+--- 994,1000 ----
+ \expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
+ \global\let\lastnode=\relax}
+
++ % @refill is a no-op.
+ \let\refill=\relax
+
+ % @setfilename is done at the beginning of every texinfo file.
+***************
+*** 869,879 ****
+ \comment % Ignore the actual filename.
+ }
+
+ \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+! \def\inforef #1{\inforefzzz #1,,,,**}
+! \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+! node \samp{\ignorespaces#1{}}}
+
+ \message{fonts,}
+
+--- 1009,1032 ----
+ \comment % Ignore the actual filename.
+ }
+
++ % @bye.
+ \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+! % \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
+! % \def\macroxxx#1#2 \end macro{%
+! % \expandafter\gdef\macrotemp#1{#2}%
+! % \endgroup}
+!
+! %\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
+! %\def\linemacroxxx#1#2 \end linemacro{%
+! %\let\parsearg=\relax
+! %\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
+! %\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
+! %\expandafter\gdef\macrotempx#1{#2}%
+! %\endgroup}
+!
+! %\def\butfirst#1{}
+!
+
+ \message{fonts,}
+
+***************
+*** 885,982 ****
+ \def\sf{\fam=\sffam \tensf}
+ \let\li = \sf % Sometimes we call it \li, not \sf.
+
+ %% Try out Computer Modern fonts at \magstephalf
+ \let\mainmagstep=\magstephalf
+
+ \ifx\bigger\relax
+ \let\mainmagstep=\magstep1
+! \font\textrm=cmr12
+! \font\texttt=cmtt12
+ \else
+! \font\textrm=cmr10 scaled \mainmagstep
+! \font\texttt=cmtt10 scaled \mainmagstep
+ \fi
+ % Instead of cmb10, you many want to use cmbx10.
+ % cmbx10 is a prettier font on its own, but cmb10
+ % looks better when embedded in a line with cmr10.
+! \font\textbf=cmb10 scaled \mainmagstep
+! \font\textit=cmti10 scaled \mainmagstep
+! \font\textsl=cmsl10 scaled \mainmagstep
+! \font\textsf=cmss10 scaled \mainmagstep
+! \font\textsc=cmcsc10 scaled \mainmagstep
+ \font\texti=cmmi10 scaled \mainmagstep
+ \font\textsy=cmsy10 scaled \mainmagstep
+
+ % A few fonts for @defun, etc.
+! \font\defbf=cmbx10 scaled \magstep1 %was 1314
+! \font\deftt=cmtt10 scaled \magstep1
+ \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+
+! % Fonts for indices and small examples.
+ % We actually use the slanted font rather than the italic,
+ % because texinfo normally uses the slanted fonts for that.
+ % Do not make many font distinctions in general in the index, since they
+ % aren't very useful.
+! \font\ninett=cmtt9
+! \font\indrm=cmr9
+! \font\indit=cmsl9
+ \let\indsl=\indit
+ \let\indtt=\ninett
+ \let\indsf=\indrm
+ \let\indbf=\indrm
+! \let\indsc=\indrm
+ \font\indi=cmmi9
+ \font\indsy=cmsy9
+
+! % Fonts for headings
+! \font\chaprm=cmbx12 scaled \magstep2
+! \font\chapit=cmti12 scaled \magstep2
+! \font\chapsl=cmsl12 scaled \magstep2
+! \font\chaptt=cmtt12 scaled \magstep2
+! \font\chapsf=cmss12 scaled \magstep2
+ \let\chapbf=\chaprm
+! \font\chapsc=cmcsc10 scaled\magstep3
+ \font\chapi=cmmi12 scaled \magstep2
+ \font\chapsy=cmsy10 scaled \magstep3
+
+! \font\secrm=cmbx12 scaled \magstep1
+! \font\secit=cmti12 scaled \magstep1
+! \font\secsl=cmsl12 scaled \magstep1
+! \font\sectt=cmtt12 scaled \magstep1
+! \font\secsf=cmss12 scaled \magstep1
+! \font\secbf=cmbx12 scaled \magstep1
+! \font\secsc=cmcsc10 scaled\magstep2
+ \font\seci=cmmi12 scaled \magstep1
+ \font\secsy=cmsy10 scaled \magstep2
+
+! % \font\ssecrm=cmbx10 scaled \magstep1 % This size an font looked bad.
+! % \font\ssecit=cmti10 scaled \magstep1 % The letters were too crowded.
+! % \font\ssecsl=cmsl10 scaled \magstep1
+! % \font\ssectt=cmtt10 scaled \magstep1
+! % \font\ssecsf=cmss10 scaled \magstep1
+!
+! %\font\ssecrm=cmb10 scaled 1315 % Note the use of cmb rather than cmbx.
+! %\font\ssecit=cmti10 scaled 1315 % Also, the size is a little larger than
+! %\font\ssecsl=cmsl10 scaled 1315 % being scaled magstep1.
+! %\font\ssectt=cmtt10 scaled 1315
+! %\font\ssecsf=cmss10 scaled 1315
+
+ %\let\ssecbf=\ssecrm
+
+! \font\ssecrm=cmbx12 scaled \magstephalf
+! \font\ssecit=cmti12 scaled \magstephalf
+! \font\ssecsl=cmsl12 scaled \magstephalf
+! \font\ssectt=cmtt12 scaled \magstephalf
+! \font\ssecsf=cmss12 scaled \magstephalf
+! \font\ssecbf=cmbx12 scaled \magstephalf
+! \font\ssecsc=cmcsc10 scaled \magstep1
+ \font\sseci=cmmi12 scaled \magstephalf
+ \font\ssecsy=cmsy10 scaled \magstep1
+ % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+ % but that is not a standard magnification.
+
+ % Fonts for title page:
+! \font\titlerm = cmbx12 scaled \magstep3
+ \let\authorrm = \secrm
+
+ % In order for the font changes to affect most math symbols and letters,
+--- 1038,1173 ----
+ \def\sf{\fam=\sffam \tensf}
+ \let\li = \sf % Sometimes we call it \li, not \sf.
+
++ % We don't need math for this one.
++ \def\ttsl{\tenttsl}
++
+ %% Try out Computer Modern fonts at \magstephalf
+ \let\mainmagstep=\magstephalf
+
++ % Set the font macro #1 to the font named #2, adding on the
++ % specified font prefix (normally `cm').
++ % #3 is the font's design size, #4 is a scale factor
++ \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
++
++ % Use cm as the default font prefix.
++ % To specify the font prefix, you must define \fontprefix
++ % before you read in texinfo.tex.
++ \ifx\fontprefix\undefined
++ \def\fontprefix{cm}
++ \fi
++ % Support font families that don't use the same naming scheme as CM.
++ \def\rmshape{r}
++ \def\rmbshape{bx} %where the normal face is bold
++ \def\bfshape{b}
++ \def\bxshape{bx}
++ \def\ttshape{tt}
++ \def\ttbshape{tt}
++ \def\ttslshape{sltt}
++ \def\itshape{ti}
++ \def\itbshape{bxti}
++ \def\slshape{sl}
++ \def\slbshape{bxsl}
++ \def\sfshape{ss}
++ \def\sfbshape{ss}
++ \def\scshape{csc}
++ \def\scbshape{csc}
++
+ \ifx\bigger\relax
+ \let\mainmagstep=\magstep1
+! \setfont\textrm\rmshape{12}{1000}
+! \setfont\texttt\ttshape{12}{1000}
+ \else
+! \setfont\textrm\rmshape{10}{\mainmagstep}
+! \setfont\texttt\ttshape{10}{\mainmagstep}
+ \fi
+ % Instead of cmb10, you many want to use cmbx10.
+ % cmbx10 is a prettier font on its own, but cmb10
+ % looks better when embedded in a line with cmr10.
+! \setfont\textbf\bfshape{10}{\mainmagstep}
+! \setfont\textit\itshape{10}{\mainmagstep}
+! \setfont\textsl\slshape{10}{\mainmagstep}
+! \setfont\textsf\sfshape{10}{\mainmagstep}
+! \setfont\textsc\scshape{10}{\mainmagstep}
+! \setfont\textttsl\ttslshape{10}{\mainmagstep}
+ \font\texti=cmmi10 scaled \mainmagstep
+ \font\textsy=cmsy10 scaled \mainmagstep
+
+ % A few fonts for @defun, etc.
+! \setfont\defbf\bxshape{10}{\magstep1} %was 1314
+! \setfont\deftt\ttshape{10}{\magstep1}
+ \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+
+! % Fonts for indices and small examples (9pt).
+ % We actually use the slanted font rather than the italic,
+ % because texinfo normally uses the slanted fonts for that.
+ % Do not make many font distinctions in general in the index, since they
+ % aren't very useful.
+! \setfont\ninett\ttshape{9}{1000}
+! \setfont\indrm\rmshape{9}{1000}
+! \setfont\indit\slshape{9}{1000}
+ \let\indsl=\indit
+ \let\indtt=\ninett
++ \let\indttsl=\ninett
+ \let\indsf=\indrm
+ \let\indbf=\indrm
+! \setfont\indsc\scshape{10}{900}
+ \font\indi=cmmi9
+ \font\indsy=cmsy9
+
+! % Chapter (and unnumbered) fonts (17.28pt).
+! \setfont\chaprm\rmbshape{12}{\magstep2}
+! \setfont\chapit\itbshape{10}{\magstep3}
+! \setfont\chapsl\slbshape{10}{\magstep3}
+! \setfont\chaptt\ttbshape{12}{\magstep2}
+! \setfont\chapttsl\ttslshape{10}{\magstep3}
+! \setfont\chapsf\sfbshape{12}{\magstep2}
+ \let\chapbf=\chaprm
+! \setfont\chapsc\scbshape{10}{\magstep3}
+ \font\chapi=cmmi12 scaled \magstep2
+ \font\chapsy=cmsy10 scaled \magstep3
+
+! % Section fonts (14.4pt).
+! \setfont\secrm\rmbshape{12}{\magstep1}
+! \setfont\secit\itbshape{10}{\magstep2}
+! \setfont\secsl\slbshape{10}{\magstep2}
+! \setfont\sectt\ttbshape{12}{\magstep1}
+! \setfont\secttsl\ttslshape{10}{\magstep2}
+! \setfont\secsf\sfbshape{12}{\magstep1}
+! \let\secbf\secrm
+! \setfont\secsc\scbshape{10}{\magstep2}
+ \font\seci=cmmi12 scaled \magstep1
+ \font\secsy=cmsy10 scaled \magstep2
+
+! % \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
+! % \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
+! % \setfont\ssecsl\slshape{10}{\magstep1}
+! % \setfont\ssectt\ttshape{10}{\magstep1}
+! % \setfont\ssecsf\sfshape{10}{\magstep1}
+!
+! %\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
+! %\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
+! %\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
+! %\setfont\ssectt\ttshape{10}{1315}
+! %\setfont\ssecsf\sfshape{10}{1315}
+
+ %\let\ssecbf=\ssecrm
+
+! % Subsection fonts (13.15pt).
+! \setfont\ssecrm\rmbshape{12}{\magstephalf}
+! \setfont\ssecit\itbshape{10}{1315}
+! \setfont\ssecsl\slbshape{10}{1315}
+! \setfont\ssectt\ttbshape{12}{\magstephalf}
+! \setfont\ssecttsl\ttslshape{10}{\magstep1}
+! \setfont\ssecsf\sfbshape{12}{\magstephalf}
+! \let\ssecbf\ssecrm
+! \setfont\ssecsc\scbshape{10}{\magstep1}
+ \font\sseci=cmmi12 scaled \magstephalf
+ \font\ssecsy=cmsy10 scaled \magstep1
+ % The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+ % but that is not a standard magnification.
+
+ % Fonts for title page:
+! \setfont\titlerm\rmbshape{12}{\magstep3}
+ \let\authorrm = \secrm
+
+ % In order for the font changes to affect most math symbols and letters,
+***************
+*** 995,1028 ****
+ % The font-changing commands redefine the meanings of \tenSTYLE, instead
+ % of just \STYLE. We do this so that font changes will continue to work
+ % in math mode, where it is the current \fam that is relevant in most
+! % cases, not the current. Plain TeX does, for example,
+! % \def\bf{\fam=\bffam \tenbf} By redefining \tenbf, we obviate the need
+! % to redefine \bf itself.
+ \def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+! \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+ \resetmathfonts}
+ \def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+! \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+! \resetmathfonts}
+ \def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+! \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+! \resetmathfonts}
+ \def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+! \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+! \resetmathfonts}
+ \def\indexfonts{%
+ \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
+ \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
+! \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy
+! \resetmathfonts}
+
+ % Set up the default fonts, so we can use them for creating boxes.
+ %
+--- 1186,1220 ----
+ % The font-changing commands redefine the meanings of \tenSTYLE, instead
+ % of just \STYLE. We do this so that font changes will continue to work
+ % in math mode, where it is the current \fam that is relevant in most
+! % cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
+! % \tenbf}, for example. By redefining \tenbf, we obviate the need to
+! % redefine \bf itself.
+ \def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+! \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
+ \resetmathfonts}
+ \def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+! \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+! \resetmathfonts \setleading{19pt}}
+ \def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+! \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+! \resetmathfonts \setleading{16pt}}
+ \def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+! \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+! \resetmathfonts \setleading{15pt}}
+! \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
+ \def\indexfonts{%
+ \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
+ \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
+! \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
+! \resetmathfonts \setleading{12pt}}
+
+ % Set up the default fonts, so we can use them for creating boxes.
+ %
+***************
+*** 1032,1040 ****
+ \newcount\fontdepth \fontdepth=0
+
+ % Fonts for short table of contents.
+! \font\shortcontrm=cmr12
+! \font\shortcontbf=cmbx12
+! \font\shortcontsl=cmsl12
+
+ %% Add scribe-like font environments, plus @l for inline lisp (usually sans
+ %% serif) and @ii for TeX italic
+--- 1224,1232 ----
+ \newcount\fontdepth \fontdepth=0
+
+ % Fonts for short table of contents.
+! \setfont\shortcontrm\rmshape{12}{1000}
+! \setfont\shortcontbf\bxshape{12}{1000}
+! \setfont\shortcontsl\slshape{12}{1000}
+
+ %% Add scribe-like font environments, plus @l for inline lisp (usually sans
+ %% serif) and @ii for TeX italic
+***************
+*** 1061,1073 ****
+ \def\restorehyphenation{\hyphenchar\font = `- }
+
+ \def\t#1{%
+! {\tt \nohyphenation \rawbackslash \frenchspacing #1}%
+ \null
+ }
+! \let\ttfont = \t
+! %\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}
+ \def\samp #1{`\tclose{#1}'\null}
+! \def\key #1{{\tt \nohyphenation \uppercase{#1}}\null}
+ \def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+ \let\file=\samp
+--- 1253,1273 ----
+ \def\restorehyphenation{\hyphenchar\font = `- }
+
+ \def\t#1{%
+! {\tt \rawbackslash \frenchspacing #1}%
+ \null
+ }
+! \let\ttfont=\t
+ \def\samp #1{`\tclose{#1}'\null}
+! \setfont\smallrm\rmshape{8}{1000}
+! \font\smallsy=cmsy9
+! \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
+! \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
+! \vbox{\hrule\kern-0.4pt
+! \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
+! \kern-0.4pt\hrule}%
+! \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
+! % The old definition, with no lozenge:
+! %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+ \def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+ \let\file=\samp
+***************
+*** 1096,1135 ****
+ }
+
+ % We *must* turn on hyphenation at `-' and `_' in \code.
+! % Otherwise, it is too hard to avoid overful hboxes
+ % in the Emacs manual, the Library manual, etc.
+
+ % Unfortunately, TeX uses one parameter (\hyphenchar) to control
+ % both hyphenation at - and hyphenation within words.
+ % We must therefore turn them both off (\tclose does that)
+! % and arrange explicitly to hyphenate an a dash.
+ % -- rms.
+ {
+ \catcode`\-=\active
+ \catcode`\_=\active
+ \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
+ % The following is used by \doprintindex to insure that long function names
+ % wrap around. It is necessary for - and _ to be active before the index is
+ % read from the file, as \entry parses the arguments long before \code is
+ % ever called. -- mycroft
+! \global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder}
+ }
+ \def\realdash{-}
+- \def\realunder{_}
+ \def\codedash{-\discretionary{}{}{}}
+! \def\codeunder{\normalunderscore\discretionary{}{}{}}
+ \def\codex #1{\tclose{#1}\endgroup}
+
+ %\let\exp=\tclose %Was temporary
+
+ % @kbd is like @code, except that if the argument is just one @key command,
+ % then @kbd has no effect.
+!
+ \def\xkey{\key}
+ \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+! \else\tclose{\look}\fi
+! \else\tclose{\look}\fi}
+
+ % Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+ % argument is to make the input look right: @dmn{pt} instead of
+--- 1296,1354 ----
+ }
+
+ % We *must* turn on hyphenation at `-' and `_' in \code.
+! % Otherwise, it is too hard to avoid overfull hboxes
+ % in the Emacs manual, the Library manual, etc.
+
+ % Unfortunately, TeX uses one parameter (\hyphenchar) to control
+ % both hyphenation at - and hyphenation within words.
+ % We must therefore turn them both off (\tclose does that)
+! % and arrange explicitly to hyphenate at a dash.
+ % -- rms.
+ {
+ \catcode`\-=\active
+ \catcode`\_=\active
++ \catcode`\|=\active
+ \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
+ % The following is used by \doprintindex to insure that long function names
+ % wrap around. It is necessary for - and _ to be active before the index is
+ % read from the file, as \entry parses the arguments long before \code is
+ % ever called. -- mycroft
+! % _ is always active; and it shouldn't be \let = to an _ that is a
+! % subscript character anyway. Then, @cindex @samp{_} (for example)
+! % fails. --karl
+! \global\def\indexbreaks{%
+! \catcode`\-=\active \let-\realdash
+ }
++ }
++
+ \def\realdash{-}
+ \def\codedash{-\discretionary{}{}{}}
+! \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
+ \def\codex #1{\tclose{#1}\endgroup}
+
+ %\let\exp=\tclose %Was temporary
+
+ % @kbd is like @code, except that if the argument is just one @key command,
+ % then @kbd has no effect.
+! %
+ \def\xkey{\key}
+ \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+! \else{\tclose{\ttsl\look}}\fi
+! \else{\tclose{\ttsl\look}}\fi}
+!
+! % @url, @email. Quotes do not seem necessary.
+! \let\url=\code % perhaps include a hypertex \special eventually
+! % rms does not like the angle brackets --karl, 17may97.
+! %\def\email#1{$\langle${\tt #1}$\rangle$}
+! \let\email=\code
+!
+! % Check if we are currently using a typewriter font. Since all the
+! % Computer Modern typewriter fonts have zero interword stretch (and
+! % shrink), and it is reasonable to expect all typewriter fonts to have
+! % this property, we can check that font parameter.
+! %
+! \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+ % Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+ % argument is to make the input look right: @dmn{pt} instead of
+***************
+*** 1139,1150 ****
+
+ \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+! \def\l#1{{\li #1}\null} %
+
+! \def\r#1{{\rm #1}} % roman font
+ % Use of \lowercase was suggested.
+! \def\sc#1{{\smallcaps#1}} % smallcaps font
+! \def\ii#1{{\it #1}} % italic font
+
+ \message{page headings,}
+
+--- 1358,1376 ----
+
+ \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+! % @l was never documented to mean ``switch to the Lisp font'',
+! % and it is not used as such in any manual I can find. We need it for
+! % Polish suppressed-l. --karl, 22sep96.
+! %\def\l#1{{\li #1}\null}
+
+! \def\r#1{{\rm #1}} % roman font
+ % Use of \lowercase was suggested.
+! \def\sc#1{{\smallcaps#1}} % smallcaps font
+! \def\ii#1{{\it #1}} % italic font
+!
+! % @pounds{} is a sterling sign.
+! \def\pounds{{\it\$}}
+!
+
+ \message{page headings,}
+
+***************
+*** 1159,1165 ****
+
+ \def\shorttitlepage{\parsearg\shorttitlepagezzz}
+ \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+! \endgroup\page\hbox{}\page}
+
+ \def\titlepage{\begingroup \parindent=0pt \textfonts
+ \let\subtitlerm=\tenrm
+--- 1385,1391 ----
+
+ \def\shorttitlepage{\parsearg\shorttitlepagezzz}
+ \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+! \endgroup\page\hbox{}\page}
+
+ \def\titlepage{\begingroup \parindent=0pt \textfonts
+ \let\subtitlerm=\tenrm
+***************
+*** 1176,1184 ****
+ % Now you can print the title using @title.
+ \def\title{\parsearg\titlezzz}%
+ \def\titlezzz##1{\leftline{\titlefont{##1}}
+! % print a rule at the page bottom also.
+! \finishedtitlepagefalse
+! \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+--- 1402,1410 ----
+ % Now you can print the title using @title.
+ \def\title{\parsearg\titlezzz}%
+ \def\titlezzz##1{\leftline{\titlefont{##1}}
+! % print a rule at the page bottom also.
+! \finishedtitlepagefalse
+! \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+***************
+*** 1196,1202 ****
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+! \finishtitlepage
+ \fi
+ \oldpage
+ \let\page = \oldpage
+--- 1422,1428 ----
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+! \finishtitlepage
+ \fi
+ \oldpage
+ \let\page = \oldpage
+***************
+*** 1284,1297 ****
+ %
+ }% unbind the catcode of @.
+
+! % @headings double turns headings on for double-sided printing.
+! % @headings single turns headings on for single-sided printing.
+! % @headings off turns them off.
+! % @headings on same as @headings double, retained for compatibility.
+! % @headings after turns on double-sided headings after this page.
+! % @headings doubleafter turns on double-sided headings after this page.
+ % @headings singleafter turns on single-sided headings after this page.
+! % By default, they are off.
+
+ \def\headings #1 {\csname HEADINGS#1\endcsname}
+
+--- 1510,1524 ----
+ %
+ }% unbind the catcode of @.
+
+! % @headings double turns headings on for double-sided printing.
+! % @headings single turns headings on for single-sided printing.
+! % @headings off turns them off.
+! % @headings on same as @headings double, retained for compatibility.
+! % @headings after turns on double-sided headings after this page.
+! % @headings doubleafter turns on double-sided headings after this page.
+ % @headings singleafter turns on single-sided headings after this page.
+! % By default, they are off at the start of a document,
+! % and turned `on' after @end titlepage.
+
+ \def\headings #1 {\csname HEADINGS#1\endcsname}
+
+***************
+*** 1305,1326 ****
+ % title on inside top of left hand pages, and page numbers on outside top
+ % edge of all pages.
+ \def\HEADINGSdouble{
+- %\pagealignmacro
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\folio\hfil\thistitle}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
+ }
+ % For single-sided printing, chapter title goes across top left of page,
+ % page number on top right.
+ \def\HEADINGSsingle{
+- %\pagealignmacro
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\thischapter\hfil\folio}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
+ }
+ \def\HEADINGSon{\HEADINGSdouble}
+
+--- 1532,1555 ----
+ % title on inside top of left hand pages, and page numbers on outside top
+ % edge of all pages.
+ \def\HEADINGSdouble{
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\folio\hfil\thistitle}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
++ \global\let\contentsalignmacro = \chapoddpage
+ }
++ \let\contentsalignmacro = \chappager
++
+ % For single-sided printing, chapter title goes across top left of page,
+ % page number on top right.
+ \def\HEADINGSsingle{
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\thischapter\hfil\folio}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
++ \global\let\contentsalignmacro = \chappager
+ }
+ \def\HEADINGSon{\HEADINGSdouble}
+
+***************
+*** 1331,1336 ****
+--- 1560,1566 ----
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\folio\hfil\thistitle}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
++ \global\let\contentsalignmacro = \chapoddpage
+ }
+
+ \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+***************
+*** 1339,1344 ****
+--- 1569,1575 ----
+ \global\oddfootline={\hfil}
+ \global\evenheadline={\line{\thischapter\hfil\folio}}
+ \global\oddheadline={\line{\thischapter\hfil\folio}}
++ \global\let\contentsalignmacro = \chappager
+ }
+
+ % Subroutines used in generating headings
+***************
+*** 1362,1367 ****
+--- 1593,1599 ----
+ \def\settitle{\parsearg\settitlezzz}
+ \def\settitlezzz #1{\gdef\thistitle{#1}}
+
++
+ \message{tables,}
+
+ % @tabs -- simple alignment
+***************
+*** 1394,1400 ****
+
+ \newif\ifitemxneedsnegativevskip
+
+! \def\itemxpar{\par\ifitemxneedsnegativevskip\vskip-\parskip\nobreak\fi}
+
+ \def\internalBitem{\smallbreak \parsearg\itemzzz}
+ \def\internalBitemx{\itemxpar \parsearg\itemzzz}
+--- 1626,1632 ----
+
+ \newif\ifitemxneedsnegativevskip
+
+! \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+ \def\internalBitem{\smallbreak \parsearg\itemzzz}
+ \def\internalBitemx{\itemxpar \parsearg\itemzzz}
+***************
+*** 1501,1507 ****
+ \def\tablez #1#2#3#4#5#6{%
+ \aboveenvbreak %
+ \begingroup %
+! \def\Edescription{\Etable}% Neccessary kludge.
+ \let\itemindex=#1%
+ \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+ \ifnum 0#4>0 \tableindent=#4\mil \fi %
+--- 1733,1739 ----
+ \def\tablez #1#2#3#4#5#6{%
+ \aboveenvbreak %
+ \begingroup %
+! \def\Edescription{\Etable}% Necessary kludge.
+ \let\itemindex=#1%
+ \ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+ \ifnum 0#4>0 \tableindent=#4\mil \fi %
+***************
+*** 1658,1674 ****
+ \def\itemizeitem{%
+ \advance\itemno by 1
+ {\let\par=\endgraf \smallbreak}%
+! \ifhmode \errmessage{\in hmode at itemizeitem}\fi
+ {\parskip=0in \hskip 0pt
+ \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+ \vadjust{\penalty 1200}}%
+ \flushcr}
+
+ % @multitable macros
+! % Amy Hendrickson, 8/18/94
+ %
+! % @multitable ... @endmultitable will make as many columns as desired.
+! % Contents of each column will wrap at width given in preamble. Width
+ % can be specified either with sample text given in a template line,
+ % or in percent of \hsize, the current width of text on page.
+
+--- 1890,1906 ----
+ \def\itemizeitem{%
+ \advance\itemno by 1
+ {\let\par=\endgraf \smallbreak}%
+! \ifhmode \errmessage{In hmode at itemizeitem}\fi
+ {\parskip=0in \hskip 0pt
+ \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+ \vadjust{\penalty 1200}}%
+ \flushcr}
+
+ % @multitable macros
+! % Amy Hendrickson, 8/18/94, 3/6/96
+ %
+! % @multitable ... @end multitable will make as many columns as desired.
+! % Contents of each column will wrap at width given in preamble. Width
+ % can be specified either with sample text given in a template line,
+ % or in percent of \hsize, the current width of text on page.
+
+***************
+*** 1676,1796 ****
+
+ % To make preamble:
+ %
+! % Either define widths of columns in terms of percent of \hsize:
+! % @multitable @percentofhsize .2 .3 .5
+ % @item ...
+ %
+! % Numbers following @percentofhsize are the percent of the total
+ % current hsize to be used for each column. You may use as many
+ % columns as desired.
+
+ % Or use a template:
+ % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ % @item ...
+ % using the widest term desired in each column.
+
+!
+! % Each new table line starts with @item, each subsequent new column
+ % starts with @tab. Empty columns may be produced by supplying @tab's
+ % with nothing between them for as many times as empty columns are needed,
+ % ie, @tab@tab@tab will produce two empty columns.
+
+! % @item, @tab, @multicolumn or @endmulticolumn do not need to be on their
+ % own lines, but it will not hurt if they are.
+
+ % Sample multitable:
+
+ % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ % @item first col stuff @tab second col stuff @tab third col
+! % @item
+! % first col stuff
+! % @tab
+! % second col stuff
+! % @tab
+! % third col
+! % @item first col stuff @tab second col stuff
+ % @tab Many paragraphs of text may be used in any column.
+! %
+ % They will wrap at the width determined by the template.
+ % @item@tab@tab This will be in third column.
+! % @endmultitable
+
+ % Default dimensions may be reset by user.
+! % @intableparskip will set vertical space between paragraphs in table.
+! % @intableparindent will set paragraph indent in table.
+! % @spacebetweencols will set horizontal space to be left between columns.
+! % @spacebetweenlines will set vertical space to be left between lines.
+
+ %%%%
+! % Dimensions
+
+! \newdimen\intableparskip
+! \newdimen\intableparindent
+! \newdimen\spacebetweencols
+! \newdimen\spacebetweenlines
+! \intableparskip=0pt
+! \intableparindent=6pt
+! \spacebetweencols=12pt
+! \spacebetweenlines=12pt
+
+ %%%%
+ % Macros used to set up halign preamble:
+ \let\endsetuptable\relax
+ \def\xendsetuptable{\endsetuptable}
+! \let\percentofhsize\relax
+! \def\xpercentofhsize{\percentofhsize}
+ \newif\ifsetpercent
+
+ \newcount\colcount
+ \def\setuptable#1{\def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable\let\go\relax%
+ \else
+! \ifx\firstarg\xpercentofhsize\global\setpercenttrue%
+ \else
+ \ifsetpercent
+! \if#1.\else%
+! \global\advance\colcount by1 %
+! \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
+! \fi
+ \else
+ \global\advance\colcount by1
+! \setbox0=\hbox{#1}%
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi%
+ \fi%
+! \let\go\setuptable%
+ \fi\go}
+ %%%%
+ % multitable syntax
+! \def\tab{&}
+
+ %%%%
+! % @multitable ... @endmultitable definitions:
+
+! \def\multitable#1\item{\bgroup
+ \let\item\cr
+ \tolerance=9500
+ \hbadness=9500
+! \parskip=\intableparskip
+! \parindent=\intableparindent
+ \overfullrule=0pt
+ \global\colcount=0\relax%
+ \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
+ % To parse everything between @multitable and @item :
+! \def\one{#1}\expandafter\setuptable\one\endsetuptable
+ % Need to reset this to 0 after \setuptable.
+! \global\colcount=0\relax%
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+! % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup&\global\advance\colcount by 1\relax%
+! \vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
+ % In order to keep entries from bumping into each other
+! % we will add a \leftskip of \spacebetweencols to all columns after
+ % the first one.
+! % If a template has been used, we will add \spacebetweencols
+ % to the width of each template entry.
+ % If user has set preamble in terms of percent of \hsize
+ % we will use that dimension as the width of the column, and
+--- 1908,2053 ----
+
+ % To make preamble:
+ %
+! % Either define widths of columns in terms of percent of \hsize:
+! % @multitable @columnfractions .25 .3 .45
+ % @item ...
+ %
+! % Numbers following @columnfractions are the percent of the total
+ % current hsize to be used for each column. You may use as many
+ % columns as desired.
+
++
+ % Or use a template:
+ % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ % @item ...
+ % using the widest term desired in each column.
++ %
++ % For those who want to use more than one line's worth of words in
++ % the preamble, break the line within one argument and it
++ % will parse correctly, i.e.,
++ %
++ % @multitable {Column 1 template} {Column 2 template} {Column 3
++ % template}
++ % Not:
++ % @multitable {Column 1 template} {Column 2 template}
++ % {Column 3 template}
+
+! % Each new table line starts with @item, each subsequent new column
+ % starts with @tab. Empty columns may be produced by supplying @tab's
+ % with nothing between them for as many times as empty columns are needed,
+ % ie, @tab@tab@tab will produce two empty columns.
+
+! % @item, @tab, @multitable or @end multitable do not need to be on their
+ % own lines, but it will not hurt if they are.
+
+ % Sample multitable:
+
+ % @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ % @item first col stuff @tab second col stuff @tab third col
+! % @item
+! % first col stuff
+! % @tab
+! % second col stuff
+! % @tab
+! % third col
+! % @item first col stuff @tab second col stuff
+ % @tab Many paragraphs of text may be used in any column.
+! %
+ % They will wrap at the width determined by the template.
+ % @item@tab@tab This will be in third column.
+! % @end multitable
+
+ % Default dimensions may be reset by user.
+! % @multitableparskip is vertical space between paragraphs in table.
+! % @multitableparindent is paragraph indent in table.
+! % @multitablecolmargin is horizontal space to be left between columns.
+! % @multitablelinespace is space to leave between table items, baseline
+! % to baseline.
+! % 0pt means it depends on current normal line spacing.
+
+ %%%%
+! % Dimensions
+
+! \newskip\multitableparskip
+! \newskip\multitableparindent
+! \newdimen\multitablecolspace
+! \newskip\multitablelinespace
+! \multitableparskip=0pt
+! \multitableparindent=6pt
+! \multitablecolspace=12pt
+! \multitablelinespace=0pt
+
+ %%%%
+ % Macros used to set up halign preamble:
+ \let\endsetuptable\relax
+ \def\xendsetuptable{\endsetuptable}
+! \let\columnfractions\relax
+! \def\xcolumnfractions{\columnfractions}
+ \newif\ifsetpercent
+
++ %% 2/1/96, to allow fractions to be given with more than one digit.
++ \def\pickupwholefraction#1 {\global\advance\colcount by1 %
++ \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
++ \setuptable}
++
+ \newcount\colcount
+ \def\setuptable#1{\def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable\let\go\relax%
+ \else
+! \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
+ \else
+ \ifsetpercent
+! \let\go\pickupwholefraction % In this case arg of setuptable
+! % is the decimal point before the
+! % number given in percent of hsize.
+! % We don't need this so we don't use it.
+ \else
+ \global\advance\colcount by1
+! \setbox0=\hbox{#1 }% Add a normal word space as a separator;
+! % typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi%
+ \fi%
+! \ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
+ \fi\go}
++
+ %%%%
+ % multitable syntax
+! \def\tab{&\hskip1sp\relax} % 2/2/96
+! % tiny skip here makes sure this column space is
+! % maintained, even if it is never used.
+!
+
+ %%%%
+! % @multitable ... @end multitable definitions:
+!
+! \def\multitable{\parsearg\dotable}
+
+! \def\dotable#1{\bgroup
+ \let\item\cr
+ \tolerance=9500
+ \hbadness=9500
+! \setmultitablespacing
+! \parskip=\multitableparskip
+! \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0\relax%
+ \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
+ % To parse everything between @multitable and @item :
+! \setuptable#1 \endsetuptable
+ % Need to reset this to 0 after \setuptable.
+! \global\colcount=0\relax%
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+! % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup&\global\advance\colcount by 1\relax%
+! \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
+ % In order to keep entries from bumping into each other
+! % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+! % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ % If user has set preamble in terms of percent of \hsize
+ % we will use that dimension as the width of the column, and
+***************
+*** 1802,1821 ****
+ \ifsetpercent
+ \else
+ % If user has <not> set preamble in terms of percent of \hsize
+! % we will advance \hsize by \spacebetweencols
+! \advance\hsize by \spacebetweencols
+ \fi
+! % In either case we will make \leftskip=\spacebetweencols:
+! \leftskip=\spacebetweencols
+ \fi
+! \noindent##}\cr%
+ % \everycr will reset column counter, \colcount, at the end of
+! % each line. Every column entry will cause \colcount to advance by one.
+ % The table preamble
+ % looks at the current \colcount to find the correct column width.
+! \global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines
+! \filbreak%% keeps underfull box messages off when table breaks over pages.
+! \global\colcount=0\relax}}}
+
+ \message{indexing,}
+ % Index generation facilities
+--- 2059,2116 ----
+ \ifsetpercent
+ \else
+ % If user has <not> set preamble in terms of percent of \hsize
+! % we will advance \hsize by \multitablecolspace
+! \advance\hsize by \multitablecolspace
+ \fi
+! % In either case we will make \leftskip=\multitablecolspace:
+! \leftskip=\multitablecolspace
+ \fi
+! % Ignoring space at the beginning and end avoids an occasional spurious
+! % blank line, when TeX decides to break the line at the space before the
+! % box from the multistrut, so the strut ends up on a line by itself.
+! % For example:
+! % @multitable @columnfractions .11 .89
+! % @item @code{#}
+! % @tab Legal holiday which is valid in major parts of the whole country.
+! % Is automatically provided with highlighting sequences respectively marking
+! % characters.
+! \noindent\ignorespaces##\unskip\multistrut}\cr
+ % \everycr will reset column counter, \colcount, at the end of
+! % each line. Every column entry will cause \colcount to advance by one.
+ % The table preamble
+ % looks at the current \colcount to find the correct column width.
+! \global\everycr{\noalign{%
+! % \filbreak%% keeps underfull box messages off when table breaks over pages.
+! % Maybe so, but it also creates really weird page breaks when the table
+! % breaks over pages Wouldn't \vfil be better? Wait until the problem
+! % manifests itself, so it can be fixed for real --karl.
+! \global\colcount=0\relax}}
+! }
+!
+! \def\setmultitablespacing{% test to see if user has set \multitablelinespace.
+! % If so, do nothing. If not, give it an appropriate dimension based on
+! % current baselineskip.
+! \ifdim\multitablelinespace=0pt
+! %% strut to put in table in case some entry doesn't have descenders,
+! %% to keep lines equally spaced
+! \let\multistrut = \strut
+! %% Test to see if parskip is larger than space between lines of
+! %% table. If not, do nothing.
+! %% If so, set to same dimension as multitablelinespace.
+! \else
+! \gdef\multistrut{\vrule height\multitablelinespace depth\dp0
+! width0pt\relax} \fi
+! \ifdim\multitableparskip>\multitablelinespace
+! \global\multitableparskip=\multitablelinespace
+! \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+! %% than skip between lines in the table.
+! \fi%
+! \ifdim\multitableparskip=0pt
+! \global\multitableparskip=\multitablelinespace
+! \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+! %% than skip between lines in the table.
+! \fi}
+!
+
+ \message{indexing,}
+ % Index generation facilities
+***************
+*** 1829,1842 ****
+ % It automatically defines \fooindex such that
+ % \fooindex ...rest of line... puts an entry in the index foo.
+ % It also defines \fooindfile to be the number of the output channel for
+! % the file that accumulates this index. The file's extension is foo.
+ % The name of an index should be no more than 2 characters long
+ % for the sake of vms.
+
+ \def\newindex #1{
+ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\doindex {#1}}
+ }
+
+--- 2124,2137 ----
+ % It automatically defines \fooindex such that
+ % \fooindex ...rest of line... puts an entry in the index foo.
+ % It also defines \fooindfile to be the number of the output channel for
+! % the file that accumulates this index. The file's extension is foo.
+ % The name of an index should be no more than 2 characters long
+ % for the sake of vms.
+
+ \def\newindex #1{
+ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\doindex {#1}}
+ }
+
+***************
+*** 1848,1855 ****
+
+ \def\newcodeindex #1{
+ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\docodeindex {#1}}
+ }
+
+--- 2143,2150 ----
+
+ \def\newcodeindex #1{
+ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
+! \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\docodeindex {#1}}
+ }
+
+***************
+*** 1860,1866 ****
+ \def\synindex #1 #2 {%
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\doindex {#2}}%
+ }
+
+--- 2155,2161 ----
+ \def\synindex #1 #2 {%
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\doindex {#2}}%
+ }
+
+***************
+*** 1869,1875 ****
+ \def\syncodeindex #1 #2 {%
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\docodeindex {#2}}%
+ }
+
+--- 2164,2170 ----
+ \def\syncodeindex #1 #2 {%
+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+! \expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+ \noexpand\docodeindex {#2}}%
+ }
+
+***************
+*** 1917,1943 ****
+ \def\L{\realbackslash L}%
+ \def\ss{\realbackslash ss}%
+ % Take care of texinfo commands likely to appear in an index entry.
+ \def\_{{\realbackslash _}}%
+ \def\w{\realbackslash w }%
+ \def\bf{\realbackslash bf }%
+! \def\rm{\realbackslash rm }%
+ \def\sl{\realbackslash sl }%
+ \def\sf{\realbackslash sf}%
+ \def\tt{\realbackslash tt}%
+ \def\gtr{\realbackslash gtr}%
+ \def\less{\realbackslash less}%
+ \def\hat{\realbackslash hat}%
+! \def\char{\realbackslash char}%
+ \def\TeX{\realbackslash TeX}%
+ \def\dots{\realbackslash dots }%
+ \def\copyright{\realbackslash copyright }%
+ \def\tclose##1{\realbackslash tclose {##1}}%
+ \def\code##1{\realbackslash code {##1}}%
+ \def\samp##1{\realbackslash samp {##1}}%
+! \def\t##1{\realbackslash r {##1}}%
+ \def\r##1{\realbackslash r {##1}}%
+ \def\i##1{\realbackslash i {##1}}%
+ \def\b##1{\realbackslash b {##1}}%
+ \def\cite##1{\realbackslash cite {##1}}%
+ \def\key##1{\realbackslash key {##1}}%
+ \def\file##1{\realbackslash file {##1}}%
+--- 2212,2246 ----
+ \def\L{\realbackslash L}%
+ \def\ss{\realbackslash ss}%
+ % Take care of texinfo commands likely to appear in an index entry.
++ % (Must be a way to avoid doing expansion at all, and thus not have to
++ % laboriously list every single command here.)
++ \def\@{@}% will be @@ when we switch to @ as escape char.
++ %\let\{ = \lbracecmd
++ %\let\} = \rbracecmd
+ \def\_{{\realbackslash _}}%
+ \def\w{\realbackslash w }%
+ \def\bf{\realbackslash bf }%
+! %\def\rm{\realbackslash rm }%
+ \def\sl{\realbackslash sl }%
+ \def\sf{\realbackslash sf}%
+ \def\tt{\realbackslash tt}%
+ \def\gtr{\realbackslash gtr}%
+ \def\less{\realbackslash less}%
+ \def\hat{\realbackslash hat}%
+! %\def\char{\realbackslash char}%
+ \def\TeX{\realbackslash TeX}%
+ \def\dots{\realbackslash dots }%
+ \def\copyright{\realbackslash copyright }%
+ \def\tclose##1{\realbackslash tclose {##1}}%
+ \def\code##1{\realbackslash code {##1}}%
++ \def\dotless##1{\realbackslash dotless {##1}}%
+ \def\samp##1{\realbackslash samp {##1}}%
+! \def\,##1{\realbackslash ,{##1}}%
+! \def\t##1{\realbackslash t {##1}}%
+ \def\r##1{\realbackslash r {##1}}%
+ \def\i##1{\realbackslash i {##1}}%
+ \def\b##1{\realbackslash b {##1}}%
++ \def\sc##1{\realbackslash sc {##1}}%
+ \def\cite##1{\realbackslash cite {##1}}%
+ \def\key##1{\realbackslash key {##1}}%
+ \def\file##1{\realbackslash file {##1}}%
+***************
+*** 1945,1952 ****
+--- 2248,2262 ----
+ \def\kbd##1{\realbackslash kbd {##1}}%
+ \def\dfn##1{\realbackslash dfn {##1}}%
+ \def\emph##1{\realbackslash emph {##1}}%
++ \unsepspaces
+ }
+
++ % If an index command is used in an @example environment, any spaces
++ % therein should become regular spaces in the raw index file, not the
++ % expansion of \tie (\\leavevmode \penalty \@M \ ).
++ {\obeyspaces
++ \gdef\unsepspaces{\obeyspaces\let =\space}}
++
+ % \indexnofonts no-ops all font-change commands.
+ % This is used when outputting the strings to sort the index by.
+ \def\indexdummyfont#1{#1}
+***************
+*** 1955,1960 ****
+--- 2265,2271 ----
+
+ \def\indexnofonts{%
+ % Just ignore accents.
++ \let\,=\indexdummyfont
+ \let\"=\indexdummyfont
+ \let\`=\indexdummyfont
+ \let\'=\indexdummyfont
+***************
+*** 1967,1972 ****
+--- 2278,2284 ----
+ \let\u=\indexdummyfont
+ \let\v=\indexdummyfont
+ \let\H=\indexdummyfont
++ \let\dotless=\indexdummyfont
+ % Take care of the plain tex special European modified letters.
+ \def\oe{oe}%
+ \def\ae{ae}%
+***************
+*** 2000,2005 ****
+--- 2312,2318 ----
+ \let\var=\indexdummyfont
+ \let\TeX=\indexdummytex
+ \let\dots=\indexdummydots
++ \def\@{@}%
+ }
+
+ % To define \realbackslash, we must make \ not be an escape.
+***************
+*** 2011,2036 ****
+
+ \let\indexbackslash=0 %overridden during \printindex.
+
+ \def\doind #1#2{%
+! {\count10=\lastpenalty %
+! {\indexdummies % Must do this here, since \bf, etc expand at this stage
+! \escapechar=`\\%
+! {\let\folio=0% Expand all macros now EXCEPT \folio
+! \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+! % so it will be output as is; and it will print as backslash in the indx.
+! %
+! % Now process the index-string once, with all font commands turned off,
+! % to get the string to sort the index by.
+! {\indexnofonts
+! \xdef\temp1{#2}%
+! }%
+! % Now produce the complete index entry. We process the index-string again,
+! % this time with font commands expanded, to get what to print in the index.
+! \edef\temp{%
+! \write \csname#1indfile\endcsname{%
+! \realbackslash entry {\temp1}{\folio}{#2}}}%
+! \temp }%
+! }\penalty\count10}}
+
+ \def\dosubind #1#2#3{%
+ {\count10=\lastpenalty %
+--- 2324,2364 ----
+
+ \let\indexbackslash=0 %overridden during \printindex.
+
++ \let\SETmarginindex=\relax %initialize!
++ % workhorse for all \fooindexes
++ % #1 is name of index, #2 is stuff to put there
+ \def\doind #1#2{%
+! % Put the index entry in the margin if desired.
+! \ifx\SETmarginindex\relax\else
+! \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
+! \fi
+! {%
+! \count255=\lastpenalty
+! {%
+! \indexdummies % Must do this here, since \bf, etc expand at this stage
+! \escapechar=`\\
+! {%
+! \let\folio=0% We will expand all macros now EXCEPT \folio.
+! \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+! % so it will be output as is; and it will print as backslash.
+! %
+! % First process the index-string with all font commands turned off
+! % to get the string to sort by.
+! {\indexnofonts \xdef\indexsorttmp{#2}}%
+! %
+! % Now produce the complete index entry, with both the sort key and the
+! % original text, including any font commands.
+! \toks0 = {#2}%
+! \edef\temp{%
+! \write\csname#1indfile\endcsname{%
+! \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
+! }%
+! \temp
+! }%
+! }%
+! \penalty\count255
+! }%
+! }
+
+ \def\dosubind #1#2#3{%
+ {\count10=\lastpenalty %
+***************
+*** 2084,2117 ****
+
+ % Define the macros used in formatting output of the sorted index material.
+
+! % This is what you call to cause a particular index to get printed.
+! % Write
+! % @unnumbered Function Index
+! % @printindex fn
+!
+ \def\printindex{\parsearg\doprintindex}
+!
+! \def\doprintindex#1{%
+! \tex
+! \dobreak \chapheadingskip {10000}
+! \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
+! \catcode`\$=\other
+! \catcode`\~=\other
+! \indexbreaks
+ %
+! % The following don't help, since the chars were translated
+! % when the raw index was written, and their fonts were discarded
+! % due to \indexnofonts.
+! %\catcode`\"=\active
+! %\catcode`\^=\active
+! %\catcode`\_=\active
+! %\catcode`\|=\active
+! %\catcode`\<=\active
+! %\catcode`\>=\active
+! % %
+! \def\indexbackslash{\rawbackslashxx}
+! \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt
+! \begindoublecolumns
+ %
+ % See if the index file exists and is nonempty.
+ \openin 1 \jobname.#1s
+--- 2412,2427 ----
+
+ % Define the macros used in formatting output of the sorted index material.
+
+! % @printindex causes a particular index (the ??s file) to get printed.
+! % It does not print any chapter heading (usually an @unnumbered).
+! %
+ \def\printindex{\parsearg\doprintindex}
+! \def\doprintindex#1{\begingroup
+! \dobreak \chapheadingskip{10000}%
+ %
+! \indexfonts \rm
+! \tolerance = 9500
+! \indexbreaks
+ %
+ % See if the index file exists and is nonempty.
+ \openin 1 \jobname.#1s
+***************
+*** 2121,2127 ****
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ (Index is nonexistent)
+! \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+--- 2431,2437 ----
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ (Index is nonexistent)
+! \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+***************
+*** 2130,2142 ****
+ \ifeof 1
+ (Index is empty)
+ \else
+ \input \jobname.#1s
+ \fi
+ \fi
+ \closein 1
+! \enddoublecolumns
+! \Etex
+! }
+
+ % These macros are used by the sorted index file itself.
+ % Change them to control the appearance of the index.
+--- 2440,2459 ----
+ \ifeof 1
+ (Index is empty)
+ \else
++ % Index files are almost Texinfo source, but we use \ as the escape
++ % character. It would be better to use @, but that's too big a change
++ % to make right now.
++ \def\indexbackslash{\rawbackslashxx}%
++ \catcode`\\ = 0
++ \catcode`\@ = 11
++ \escapechar = `\\
++ \begindoublecolumns
+ \input \jobname.#1s
++ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+! \endgroup}
+
+ % These macros are used by the sorted index file itself.
+ % Change them to control the appearance of the index.
+***************
+*** 2190,2196 ****
+ %
+ % Insert the text of the index entry. TeX will do line-breaking on it.
+ #1%
+! % The following is kluged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \def\tempa{{\rm }}%
+--- 2507,2513 ----
+ %
+ % Insert the text of the index entry. TeX will do line-breaking on it.
+ #1%
+! % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \def\tempa{{\rm }}%
+***************
+*** 2227,2260 ****
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
+ }}
+
+! %% Define two-column mode, which is used in indexes.
+! %% Adapted from the TeXbook, page 416.
+! \catcode `\@=11
+
+ \newbox\partialpage
+-
+ \newdimen\doublecolumnhsize
+
+! \def\begindoublecolumns{\begingroup
+ % Grab any single-column material above us.
+! \output = {\global\setbox\partialpage
+! =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}%
+ \eject
+ %
+! % Now switch to the double-column output routine.
+! \output={\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+! % execution time, so we may as well do it once.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+! % below is chosen so that the gutter has the same value (well, +- <
+! % 1pt) as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+--- 2544,2592 ----
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
+ }}
+
+! % Define two-column mode, which we use to typeset indexes.
+! % Adapted from the TeXbook, page 416, which is to say,
+! % the manmac.tex format used to print the TeXbook itself.
+! \catcode`\@=11
+
+ \newbox\partialpage
+ \newdimen\doublecolumnhsize
+
+! \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+! \output = {\global\setbox\partialpage = \vbox{%
+! %
+! % Here is a possibility not foreseen in manmac: if we accumulate a
+! % whole lot of material, we might end up calling this \output
+! % routine twice in a row (see the doublecol-lose test, which is
+! % essentially a couple of indexes with @setchapternewpage off). In
+! % that case, we must prevent the second \partialpage from
+! % simply overwriting the first, causing us to lose the page.
+! % This will preserve it until a real output routine can ship it
+! % out. Generally, \partialpage will be empty when this runs and
+! % this will be a no-op.
+! \unvbox\partialpage
+! %
+! % Unvbox the main output page.
+! \unvbox255
+! \kern-\topskip \kern\baselineskip
+! }}%
+ \eject
+ %
+! % Use the double-column output routine for subsequent pages.
+! \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+! % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+! % below is chosen so that the gutter has the same value (well, +-<1pt)
+! % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+***************
+*** 2268,2374 ****
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+- \doublecolumnpagegoal
+ }
+-
+- \def\enddoublecolumns{\eject \endgroup \pagegoal=\vsize \unvbox\partialpage}
+-
+- \def\doublecolumnsplit{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+- \global\dimen@=\pageheight \global\advance\dimen@ by-\ht\partialpage
+- \global\setbox1=\vsplit255 to\dimen@ \global\setbox0=\vbox{\unvbox1}
+- \global\setbox3=\vsplit255 to\dimen@ \global\setbox2=\vbox{\unvbox3}
+- \ifdim\ht0>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi
+- \ifdim\ht2>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi
+- }
+- \def\doublecolumnpagegoal{%
+- \dimen@=\vsize \advance\dimen@ by-2\ht\partialpage \global\pagegoal=\dimen@
+- }
+- \def\pagesofar{\unvbox\partialpage %
+- \hsize=\doublecolumnhsize % have to restore this since output routine
+- \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+ \def\doublecolumnout{%
+! \setbox5=\copy255
+! {\vbadness=10000 \doublecolumnsplit}
+! \ifvbox255
+! \setbox0=\vtop to\dimen@{\unvbox0}
+! \setbox2=\vtop to\dimen@{\unvbox2}
+! \onepageout\pagesofar \unvbox255 \penalty\outputpenalty
+! \else
+! \setbox0=\vbox{\unvbox5}
+! \ifvbox0
+! \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+! \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth
+! {\vbadness=10000
+! \loop \global\setbox5=\copy0
+! \setbox1=\vsplit5 to\dimen@
+! \setbox3=\vsplit5 to\dimen@
+! \ifvbox5 \global\advance\dimen@ by1pt \repeat
+! \setbox0=\vbox to\dimen@{\unvbox1}
+! \setbox2=\vbox to\dimen@{\unvbox3}
+! \global\setbox\partialpage=\vbox{\pagesofar}
+! \doublecolumnpagegoal
+! }
+! \fi
+! \fi
+ }
+
+- \catcode `\@=\other
+ \message{sectioning,}
+ % Define chapters, sections, etc.
+
+! \newcount \chapno
+! \newcount \secno \secno=0
+! \newcount \subsecno \subsecno=0
+! \newcount \subsubsecno \subsubsecno=0
+
+ % This counter is funny since it counts through charcodes of letters A, B, ...
+! \newcount \appendixno \appendixno = `\@
+ \def\appendixletter{\char\the\appendixno}
+
+! \newwrite \contentsfile
+ % This is called from \setfilename.
+! \def\opencontents{\openout \contentsfile = \jobname.toc}
+
+ % Each @chapter defines this as the name of the chapter.
+ % page headings and footings can use it. @section does likewise
+
+ \def\thischapter{} \def\thissection{}
+! \def\seccheck#1{\if \pageno<0 %
+! \errmessage{@#1 not allowed after generating table of contents}\fi
+! %
+! }
+
+ \def\chapternofonts{%
+! \let\rawbackslash=\relax%
+! \let\frenchspacing=\relax%
+! \def\result{\realbackslash result}
+! \def\equiv{\realbackslash equiv}
+! \def\expansion{\realbackslash expansion}
+! \def\print{\realbackslash print}
+! \def\TeX{\realbackslash TeX}
+! \def\dots{\realbackslash dots}
+! \def\copyright{\realbackslash copyright}
+! \def\tt{\realbackslash tt}
+! \def\bf{\realbackslash bf }
+! \def\w{\realbackslash w}
+! \def\less{\realbackslash less}
+! \def\gtr{\realbackslash gtr}
+! \def\hat{\realbackslash hat}
+! \def\char{\realbackslash char}
+! \def\tclose##1{\realbackslash tclose {##1}}
+! \def\code##1{\realbackslash code {##1}}
+! \def\samp##1{\realbackslash samp {##1}}
+! \def\r##1{\realbackslash r {##1}}
+! \def\b##1{\realbackslash b {##1}}
+! \def\key##1{\realbackslash key {##1}}
+! \def\file##1{\realbackslash file {##1}}
+! \def\kbd##1{\realbackslash kbd {##1}}
+! % These are redefined because @smartitalic wouldn't work inside xdef.
+! \def\i##1{\realbackslash i {##1}}
+! \def\cite##1{\realbackslash cite {##1}}
+! \def\var##1{\realbackslash var {##1}}
+! \def\emph##1{\realbackslash emph {##1}}
+! \def\dfn##1{\realbackslash dfn {##1}}
+ }
+
+ \newcount\absseclevel % used to calculate proper heading level
+--- 2600,2709 ----
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+ }
+ \def\doublecolumnout{%
+! \splittopskip=\topskip \splitmaxdepth=\maxdepth
+! % Get the available space for the double columns -- the normal
+! % (undoubled) page height minus any material left over from the
+! % previous page.
+! \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
+! % box0 will be the left-hand column, box2 the right.
+! \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+! \onepageout\pagesofar
+! \unvbox255
+! \penalty\outputpenalty
+! }
+! \def\pagesofar{%
+! % Re-output the contents of the output page -- any previous material,
+! % followed by the two boxes we just split.
+! \unvbox\partialpage
+! \hsize = \doublecolumnhsize
+! \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
+ }
++ \def\enddoublecolumns{%
++ \output = {\balancecolumns}\eject % split what we have
++ \endgroup % started in \begindoublecolumns
++ %
++ % Back to normal single-column typesetting, but take account of the
++ % fact that we just accumulated some stuff on the output page.
++ \pagegoal = \vsize
++ }
++ \def\balancecolumns{%
++ % Called at the end of the double column material.
++ \setbox0 = \vbox{\unvbox255}%
++ \dimen@ = \ht0
++ \advance\dimen@ by \topskip
++ \advance\dimen@ by-\baselineskip
++ \divide\dimen@ by 2
++ \splittopskip = \topskip
++ % Loop until we get a decent breakpoint.
++ {\vbadness=10000 \loop
++ \global\setbox3=\copy0
++ \global\setbox1=\vsplit3 to\dimen@
++ \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt
++ \repeat}%
++ \setbox0=\vbox to\dimen@{\unvbox1}%
++ \setbox2=\vbox to\dimen@{\unvbox3}%
++ \pagesofar
++ }
++ \catcode`\@ = \other
++
+
+ \message{sectioning,}
+ % Define chapters, sections, etc.
+
+! \newcount\chapno
+! \newcount\secno \secno=0
+! \newcount\subsecno \subsecno=0
+! \newcount\subsubsecno \subsubsecno=0
+
+ % This counter is funny since it counts through charcodes of letters A, B, ...
+! \newcount\appendixno \appendixno = `\@
+ \def\appendixletter{\char\the\appendixno}
+
+! \newwrite\contentsfile
+ % This is called from \setfilename.
+! \def\opencontents{\openout\contentsfile = \jobname.toc }
+
+ % Each @chapter defines this as the name of the chapter.
+ % page headings and footings can use it. @section does likewise
+
+ \def\thischapter{} \def\thissection{}
+! \def\seccheck#1{\ifnum \pageno<0
+! \errmessage{@#1 not allowed after generating table of contents}%
+! \fi}
+
+ \def\chapternofonts{%
+! \let\rawbackslash=\relax
+! \let\frenchspacing=\relax
+! \def\result{\realbackslash result}%
+! \def\equiv{\realbackslash equiv}%
+! \def\expansion{\realbackslash expansion}%
+! \def\print{\realbackslash print}%
+! \def\TeX{\realbackslash TeX}%
+! \def\dots{\realbackslash dots}%
+! \def\copyright{\realbackslash copyright}%
+! \def\tt{\realbackslash tt}%
+! \def\bf{\realbackslash bf}%
+! \def\w{\realbackslash w}%
+! \def\less{\realbackslash less}%
+! \def\gtr{\realbackslash gtr}%
+! \def\hat{\realbackslash hat}%
+! \def\char{\realbackslash char}%
+! \def\tclose##1{\realbackslash tclose{##1}}%
+! \def\code##1{\realbackslash code{##1}}%
+! \def\samp##1{\realbackslash samp{##1}}%
+! \def\r##1{\realbackslash r{##1}}%
+! \def\b##1{\realbackslash b{##1}}%
+! \def\key##1{\realbackslash key{##1}}%
+! \def\file##1{\realbackslash file{##1}}%
+! \def\kbd##1{\realbackslash kbd{##1}}%
+! % These are redefined because @smartitalic wouldn't work inside xdef.
+! \def\i##1{\realbackslash i{##1}}%
+! \def\cite##1{\realbackslash cite{##1}}%
+! \def\var##1{\realbackslash var{##1}}%
+! \def\emph##1{\realbackslash emph{##1}}%
+! \def\dfn##1{\realbackslash dfn{##1}}%
+ }
+
+ \newcount\absseclevel % used to calculate proper heading level
+***************
+*** 2447,2453 ****
+ \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
+ \def\chapterzzz #1{\seccheck{chapter}%
+ \secno=0 \subsecno=0 \subsubsecno=0
+! \global\advance \chapno by 1 \message{Chapter \the\chapno}%
+ \chapmacro {#1}{\the\chapno}%
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+--- 2782,2788 ----
+ \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
+ \def\chapterzzz #1{\seccheck{chapter}%
+ \secno=0 \subsecno=0 \subsubsecno=0
+! \global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
+ \chapmacro {#1}{\the\chapno}%
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+***************
+*** 2455,2461 ****
+ % because we don't want its macros evaluated now.
+ \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \donoderef %
+--- 2790,2797 ----
+ % because we don't want its macros evaluated now.
+ \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \donoderef %
+***************
+*** 2474,2481 ****
+ \gdef\thischaptername{#1}%
+ \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash chapentry
+! {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \appendixnoderef %
+--- 2810,2818 ----
+ \gdef\thischaptername{#1}%
+ \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash chapentry{\the\toks0}%
+! {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \appendixnoderef %
+***************
+*** 2484,2489 ****
+--- 2821,2830 ----
+ \global\let\subsubsection = \appendixsubsubsec
+ }}
+
++ % @centerchap is like @unnumbered, but the heading is centered.
++ \outer\def\centerchap{\parsearg\centerchapyyy}
++ \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
++
+ \outer\def\top{\parsearg\unnumberedyyy}
+ \outer\def\unnumbered{\parsearg\unnumberedyyy}
+ \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+***************
+*** 2505,2511 ****
+ \unnumbchapmacro {#1}%
+ \gdef\thischapter{#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+--- 2846,2853 ----
+ \unnumbchapmacro {#1}%
+ \gdef\thischapter{#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+***************
+*** 2520,2542 ****
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+ {\chapternofonts%
+ \edef\temp{{\realbackslash secentry %
+! {#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \donoderef %
+ \penalty 10000 %
+ }}
+
+! \outer\def\appenixsection{\parsearg\appendixsecyyy}
+ \outer\def\appendixsec{\parsearg\appendixsecyyy}
+ \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+ \def\appendixsectionzzz #1{\seccheck{appendixsection}%
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+ {\chapternofonts%
+ \edef\temp{{\realbackslash secentry %
+! {#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \appendixnoderef %
+--- 2862,2886 ----
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+ {\chapternofonts%
++ \toks0 = {#1}%
+ \edef\temp{{\realbackslash secentry %
+! {\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \donoderef %
+ \penalty 10000 %
+ }}
+
+! \outer\def\appendixsection{\parsearg\appendixsecyyy}
+ \outer\def\appendixsec{\parsearg\appendixsecyyy}
+ \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+ \def\appendixsectionzzz #1{\seccheck{appendixsection}%
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+ {\chapternofonts%
++ \toks0 = {#1}%
+ \edef\temp{{\realbackslash secentry %
+! {\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \appendixnoderef %
+***************
+*** 2548,2554 ****
+ \def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
+ \plainsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+--- 2892,2899 ----
+ \def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
+ \plainsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+***************
+*** 2561,2568 ****
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+ {\chapternofonts%
+ \edef\temp{{\realbackslash subsecentry %
+! {#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \donoderef %
+--- 2906,2914 ----
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+ {\chapternofonts%
++ \toks0 = {#1}%
+ \edef\temp{{\realbackslash subsecentry %
+! {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \donoderef %
+***************
+*** 2575,2582 ****
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+ {\chapternofonts%
+ \edef\temp{{\realbackslash subsecentry %
+! {#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \appendixnoderef %
+--- 2921,2929 ----
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+ {\chapternofonts%
++ \toks0 = {#1}%
+ \edef\temp{{\realbackslash subsecentry %
+! {\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \appendixnoderef %
+***************
+*** 2586,2594 ****
+ \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
+ \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+ \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
+! \plainsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+--- 2933,2942 ----
+ \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
+ \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+ \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
+! \plainsubsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+***************
+*** 2602,2609 ****
+ \subsubsecheading {#1}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash subsubsecentry %
+! {#1}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
+ {\noexpand\folio}}}%
+ \escapechar=`\\%
+--- 2950,2957 ----
+ \subsubsecheading {#1}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash subsubsecentry{\the\toks0}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
+ {\noexpand\folio}}}%
+ \escapechar=`\\%
+***************
+*** 2619,2625 ****
+ \subsubsecheading {#1}
+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash subsubsecentry{#1}%
+ {\appendixletter}
+ {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+--- 2967,2974 ----
+ \subsubsecheading {#1}
+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
+ {\appendixletter}
+ {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
+ \escapechar=`\\%
+***************
+*** 2631,2639 ****
+ \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
+ \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+ \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
+! \plainsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+--- 2980,2989 ----
+ \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
+ \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+ \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
+! \plainsubsubsecheading {#1}\gdef\thissection{#1}%
+ {\chapternofonts%
+! \toks0 = {#1}%
+! \edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
+ \escapechar=`\\%
+ \write \contentsfile \temp %
+ \unnumbnoderef %
+***************
+*** 2669,2678 ****
+
+ % NOTE on use of \vbox for chapter headings, section headings, and
+ % such:
+! % 1) We use \vbox rather than the earlier \line to permit
+! % overlong headings to fold.
+! % 2) \hyphenpenalty is set to 10000 because hyphenation in a
+! % heading is obnoxious; this forbids it.
+ % 3) Likewise, headings look best if no \parindent is used, and
+ % if justification is not attempted. Hence \raggedright.
+
+--- 3019,3028 ----
+
+ % NOTE on use of \vbox for chapter headings, section headings, and
+ % such:
+! % 1) We use \vbox rather than the earlier \line to permit
+! % overlong headings to fold.
+! % 2) \hyphenpenalty is set to 10000 because hyphenation in a
+! % heading is obnoxious; this forbids it.
+ % 3) Likewise, headings look best if no \parindent is used, and
+ % if justification is not attempted. Hence \raggedright.
+
+***************
+*** 2690,2700 ****
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+! \def\heading{\parsearg\secheadingi}
+!
+! \def\subheading{\parsearg\subsecheadingi}
+!
+! \def\subsubheading{\parsearg\subsubsecheadingi}
+
+ % These macros generate a chapter, section, etc. heading only
+ % (including whitespace, linebreaking, etc. around it),
+--- 3040,3049 ----
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+! % @heading, @subheading, @subsubheading.
+! \def\heading{\parsearg\plainsecheading}
+! \def\subheading{\parsearg\plainsubsecheading}
+! \def\subsubheading{\parsearg\plainsubsubsecheading}
+
+ % These macros generate a chapter, section, etc. heading only
+ % (including whitespace, linebreaking, etc. around it),
+***************
+*** 2708,2714 ****
+ %%% Define plain chapter starts, and page on/off switching for it
+ % Parameter controlling skip before chapter headings (if needed)
+
+! \newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt
+
+ \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+ \def\chappager{\par\vfill\supereject}
+--- 3057,3063 ----
+ %%% Define plain chapter starts, and page on/off switching for it
+ % Parameter controlling skip before chapter headings (if needed)
+
+! \newskip\chapheadingskip
+
+ \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+ \def\chappager{\par\vfill\supereject}
+***************
+*** 2717,2731 ****
+--- 3066,3083 ----
+ \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+ \def\CHAPPAGoff{
++ \global\let\contentsalignmacro = \chappager
+ \global\let\pchapsepmacro=\chapbreak
+ \global\let\pagealignmacro=\chappager}
+
+ \def\CHAPPAGon{
++ \global\let\contentsalignmacro = \chappager
+ \global\let\pchapsepmacro=\chappager
+ \global\let\pagealignmacro=\chappager
+ \global\def\HEADINGSon{\HEADINGSsingle}}
+
+ \def\CHAPPAGodd{
++ \global\let\contentsalignmacro = \chapoddpage
+ \global\let\pchapsepmacro=\chapoddpage
+ \global\let\pagealignmacro=\chapoddpage
+ \global\def\HEADINGSon{\HEADINGSdouble}}
+***************
+*** 2734,2758 ****
+
+ \def\CHAPFplain{
+ \global\let\chapmacro=\chfplain
+! \global\let\unnumbchapmacro=\unnchfplain}
+
+! \def\chfplain #1#2{%
+ \pchapsepmacro
+ {%
+! \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+! \parindent=0pt\raggedright
+! \rm #2\enspace #1}%
+ }%
+! \bigskip
+! \penalty5000
+ }
+
+! \def\unnchfplain #1{%
+! \pchapsepmacro %
+! {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+! \parindent=0pt\raggedright
+! \rm #1\hfill}}\bigskip \par\penalty 10000 %
+! }
+ \CHAPFplain % The default
+
+ \def\unnchfopen #1{%
+--- 3086,3124 ----
+
+ \def\CHAPFplain{
+ \global\let\chapmacro=\chfplain
+! \global\let\unnumbchapmacro=\unnchfplain
+! \global\let\centerchapmacro=\centerchfplain}
+
+! % Plain chapter opening.
+! % #1 is the text, #2 the chapter number or empty if unnumbered.
+! \def\chfplain#1#2{%
+ \pchapsepmacro
+ {%
+! \chapfonts \rm
+! \def\chapnum{#2}%
+! \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
+! \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+! \hangindent = \wd0 \centerparametersmaybe
+! \unhbox0 #1\par}%
+ }%
+! \nobreak\bigskip % no page break after a chapter title
+! \nobreak
+ }
+
+! % Plain opening for unnumbered.
+! \def\unnchfplain#1{\chfplain{#1}{}}
+!
+! % @centerchap -- centered and unnumbered.
+! \let\centerparametersmaybe = \relax
+! \def\centerchfplain#1{{%
+! \def\centerparametersmaybe{%
+! \advance\rightskip by 3\rightskip
+! \leftskip = \rightskip
+! \parfillskip = 0pt
+! }%
+! \chfplain{#1}{}%
+! }}
+!
+ \CHAPFplain % The default
+
+ \def\unnchfopen #1{%
+***************
+*** 2766,2839 ****
+ \par\penalty 5000 %
+ }
+
+ \def\CHAPFopen{
+ \global\let\chapmacro=\chfopen
+! \global\let\unnumbchapmacro=\unnchfopen}
+
+- % Parameter controlling skip before section headings.
+-
+- \newskip \subsecheadingskip \subsecheadingskip = 17pt plus 8pt minus 4pt
+- \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+
+! \newskip \secheadingskip \secheadingskip = 21pt plus 8pt minus 4pt
+ \def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+
+! % @paragraphindent is defined for the Info formatting commands only.
+! \let\paragraphindent=\comment
+
+! % Section fonts are the base font at magstep2, which produces
+! % a size a bit more than 14 points in the default situation.
+
+- \def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}}
+- \def\plainsecheading #1{\secheadingi {#1}}
+- \def\secheadingi #1{{\advance \secheadingskip by \parskip %
+- \secheadingbreak}%
+- {\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+- \parindent=0pt\raggedright
+- \rm #1\hfill}}%
+- \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
+-
+-
+- % Subsection fonts are the base font at magstep1,
+- % which produces a size of 12 points.
+-
+- \def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}}
+- \def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip %
+- \subsecheadingbreak}%
+- {\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+- \parindent=0pt\raggedright
+- \rm #1\hfill}}%
+- \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
+-
+- \def\subsubsecfonts{\subsecfonts} % Maybe this should change:
+- % Perhaps make sssec fonts scaled
+- % magstep half
+- \def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}}
+- \def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip %
+- \subsecheadingbreak}%
+- {\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+- \parindent=0pt\raggedright
+- \rm #1\hfill}}%
+- \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
+
+
+- \message{toc printing,}
+
+ % Finish up the main text and prepare to read what we've written
+ % to \contentsfile.
+
+ \newskip\contentsrightmargin \contentsrightmargin=1in
+ \def\startcontents#1{%
+! \pagealignmacro
+ \immediate\closeout \contentsfile
+ \ifnum \pageno>0
+! \pageno = -1 % Request roman numbered pages.
+ \fi
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \unnumbchapmacro{#1}\def\thischapter{}%
+! \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ }
+--- 3132,3214 ----
+ \par\penalty 5000 %
+ }
+
++ \def\centerchfopen #1{%
++ \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
++ \parindent=0pt
++ \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
++ }
++
+ \def\CHAPFopen{
+ \global\let\chapmacro=\chfopen
+! \global\let\unnumbchapmacro=\unnchfopen
+! \global\let\centerchapmacro=\centerchfopen}
+
+
+! % Section titles.
+! \newskip\secheadingskip
+ \def\secheadingbreak{\dobreak \secheadingskip {-1000}}
++ \def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
++ \def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+
+! % Subsection titles.
+! \newskip \subsecheadingskip
+! \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+! \def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
+! \def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+
+! % Subsubsection titles.
+! \let\subsubsecheadingskip = \subsecheadingskip
+! \let\subsubsecheadingbreak = \subsecheadingbreak
+! \def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
+! \def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+
+
++ % Print any size section title.
++ %
++ % #1 is the section type (sec/subsec/subsubsec), #2 is the section
++ % number (maybe empty), #3 the text.
++ \def\sectionheading#1#2#3{%
++ {%
++ \expandafter\advance\csname #1headingskip\endcsname by \parskip
++ \csname #1headingbreak\endcsname
++ }%
++ {%
++ % Switch to the right set of fonts.
++ \csname #1fonts\endcsname \rm
++ %
++ % Only insert the separating space if we have a section number.
++ \def\secnum{#2}%
++ \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
++ %
++ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
++ \hangindent = \wd0 % zero if no section number
++ \unhbox0 #3}%
++ }%
++ \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
++ }
+
+
++ \message{toc printing,}
+ % Finish up the main text and prepare to read what we've written
+ % to \contentsfile.
+
+ \newskip\contentsrightmargin \contentsrightmargin=1in
+ \def\startcontents#1{%
+! % If @setchapternewpage on, and @headings double, the contents should
+! % start on an odd page, unlike chapters. Thus, we maintain
+! % \contentsalignmacro in parallel with \pagealignmacro.
+! % From: Torbjorn Granlund <tege@matematik.su.se>
+! \contentsalignmacro
+ \immediate\closeout \contentsfile
+ \ifnum \pageno>0
+! \pageno = -1 % Request roman numbered pages.
+ \fi
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \unnumbchapmacro{#1}\def\thischapter{}%
+! \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
++ \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ }
+***************
+*** 2857,2862 ****
+--- 3232,3238 ----
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+ \rm
++ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\secentry ##1##2##3##4{}
+ \def\unnumbsecentry ##1##2{}
+***************
+*** 2900,2906 ****
+ % This space should be plenty, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % (This space doesn't include the extra space that gets added after
+! % the label; that gets put in in \shortchapentry above.)
+ \advance\dimen0 by 1.1em
+ \hbox to \dimen0{#1\hfil}%
+ }
+--- 3276,3282 ----
+ % This space should be plenty, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % (This space doesn't include the extra space that gets added after
+! % the label; that gets put in by \shortchapentry above.)
+ \advance\dimen0 by 1.1em
+ \hbox to \dimen0{#1\hfil}%
+ }
+***************
+*** 2921,2942 ****
+ \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+ \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+
+-
+ % This parameter controls the indentation of the various levels.
+ \newdimen\tocindent \tocindent = 3pc
+
+ % Now for the actual typesetting. In all these, #1 is the text and #2 is the
+ % page number.
+ %
+! % If the toc has to be broken over pages, we would want to be at chapters
+ % if at all possible; hence the \penalty.
+ \def\dochapentry#1#2{%
+! \penalty-300 \vskip\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno{#2}}%
+ \endgroup
+! \nobreak\vskip .25\baselineskip
+ }
+
+ \def\dosecentry#1#2{\begingroup
+--- 3297,3317 ----
+ \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+ \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
+
+ % This parameter controls the indentation of the various levels.
+ \newdimen\tocindent \tocindent = 3pc
+
+ % Now for the actual typesetting. In all these, #1 is the text and #2 is the
+ % page number.
+ %
+! % If the toc has to be broken over pages, we want it to be at chapters
+ % if at all possible; hence the \penalty.
+ \def\dochapentry#1#2{%
+! \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno{#2}}%
+ \endgroup
+! \nobreak\vskip .25\baselineskip plus.1\baselineskip
+ }
+
+ \def\dosecentry#1#2{\begingroup
+***************
+*** 2959,2967 ****
+ % can't do that in the \entry macro, since index entries might consist
+ % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
+ %
+ \def\tocentry#1#2{\begingroup
+! \hyphenpenalty = 10000
+! \entry{#1}{#2}%
+ \endgroup}
+
+ % Space between chapter (or whatever) number and the title.
+--- 3334,3343 ----
+ % can't do that in the \entry macro, since index entries might consist
+ % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
+ %
++ % \turnoffactive is for the sake of @" used for umlauts.
+ \def\tocentry#1#2{\begingroup
+! \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
+! \entry{\turnoffactive #1}{\turnoffactive #2}%
+ \endgroup}
+
+ % Space between chapter (or whatever) number and the title.
+***************
+*** 2985,2992 ****
+ \newbox\pushcharbox \newbox\bullbox
+ \newbox\equivbox \newbox\errorbox
+
+- \let\ptexequiv = \equiv
+-
+ %{\tentt
+ %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
+ %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
+--- 3361,3366 ----
+***************
+*** 2997,3008 ****
+ % depth .1ex\hfil}
+ %}
+
+ \def\point{$\star$}
+-
+ \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+ \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+ \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+-
+ \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+ % Adapted from the TeXbook's \boxit.
+--- 3371,3381 ----
+ % depth .1ex\hfil}
+ %}
+
++ % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+ \def\point{$\star$}
+ \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+ \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+ \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+ \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+ % Adapted from the TeXbook's \boxit.
+***************
+*** 3034,3040 ****
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+ \catcode `\%=14
+! \catcode 43=12
+ \catcode`\"=12
+ \catcode`\==12
+ \catcode`\|=12
+--- 3407,3413 ----
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+ \catcode `\%=14
+! \catcode 43=12 % plus
+ \catcode`\"=12
+ \catcode`\==12
+ \catcode`\|=12
+***************
+*** 3042,3057 ****
+ \catcode`\>=12
+ \escapechar=`\\
+ %
+! \let\~=\ptextilde
+ \let\{=\ptexlbrace
+ \let\}=\ptexrbrace
+ \let\.=\ptexdot
+ \let\*=\ptexstar
+ \let\dots=\ptexdots
+ \def\@{@}%
+ \let\bullet=\ptexbullet
+! \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
+! \let\L=\ptexL
+ %
+ \let\Etex=\endgroup}
+
+--- 3415,3431 ----
+ \catcode`\>=12
+ \escapechar=`\\
+ %
+! \let\,=\ptexcomma
+ \let\{=\ptexlbrace
+ \let\}=\ptexrbrace
+ \let\.=\ptexdot
+ \let\*=\ptexstar
+ \let\dots=\ptexdots
++ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
++ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+ \let\bullet=\ptexbullet
+! \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
+ %
+ \let\Etex=\endgroup}
+
+***************
+*** 3110,3159 ****
+ \def\cbl{{\circle\char'012\hskip -6pt}}
+ \def\cbr{{\hskip 6pt\circle\char'011}}
+ \def\carttop{\hbox to \cartouter{\hskip\lskip
+! \ctl\leaders\hrule height\circthick\hfil\ctr
+! \hskip\rskip}}
+ \def\cartbot{\hbox to \cartouter{\hskip\lskip
+! \cbl\leaders\hrule height\circthick\hfil\cbr
+! \hskip\rskip}}
+ %
+ \newskip\lskip\newskip\rskip
+
+ \long\def\cartouche{%
+ \begingroup
+! \lskip=\leftskip \rskip=\rightskip
+! \leftskip=0pt\rightskip=0pt %we want these *outside*.
+! \cartinner=\hsize \advance\cartinner by-\lskip
+! \advance\cartinner by-\rskip
+! \cartouter=\hsize
+! \advance\cartouter by 18pt % allow for 3pt kerns on either
+! % side, and for 6pt waste from
+! % each corner char
+! \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+! % Flag to tell @lisp, etc., not to narrow margin.
+! \let\nonarrowing=\comment
+! \vbox\bgroup
+! \baselineskip=0pt\parskip=0pt\lineskip=0pt
+! \carttop
+! \hbox\bgroup
+! \hskip\lskip
+! \vrule\kern3pt
+! \vbox\bgroup
+! \hsize=\cartinner
+! \kern3pt
+! \begingroup
+! \baselineskip=\normbskip
+! \lineskip=\normlskip
+! \parskip=\normpskip
+! \vskip -\parskip
+ \def\Ecartouche{%
+! \endgroup
+! \kern3pt
+! \egroup
+! \kern3pt\vrule
+! \hskip\rskip
+! \egroup
+! \cartbot
+! \egroup
+ \endgroup
+ }}
+
+--- 3484,3533 ----
+ \def\cbl{{\circle\char'012\hskip -6pt}}
+ \def\cbr{{\hskip 6pt\circle\char'011}}
+ \def\carttop{\hbox to \cartouter{\hskip\lskip
+! \ctl\leaders\hrule height\circthick\hfil\ctr
+! \hskip\rskip}}
+ \def\cartbot{\hbox to \cartouter{\hskip\lskip
+! \cbl\leaders\hrule height\circthick\hfil\cbr
+! \hskip\rskip}}
+ %
+ \newskip\lskip\newskip\rskip
+
+ \long\def\cartouche{%
+ \begingroup
+! \lskip=\leftskip \rskip=\rightskip
+! \leftskip=0pt\rightskip=0pt %we want these *outside*.
+! \cartinner=\hsize \advance\cartinner by-\lskip
+! \advance\cartinner by-\rskip
+! \cartouter=\hsize
+! \advance\cartouter by 18pt % allow for 3pt kerns on either
+! % side, and for 6pt waste from
+! % each corner char
+! \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+! % Flag to tell @lisp, etc., not to narrow margin.
+! \let\nonarrowing=\comment
+! \vbox\bgroup
+! \baselineskip=0pt\parskip=0pt\lineskip=0pt
+! \carttop
+! \hbox\bgroup
+! \hskip\lskip
+! \vrule\kern3pt
+! \vbox\bgroup
+! \hsize=\cartinner
+! \kern3pt
+! \begingroup
+! \baselineskip=\normbskip
+! \lineskip=\normlskip
+! \parskip=\normpskip
+! \vskip -\parskip
+ \def\Ecartouche{%
+! \endgroup
+! \kern3pt
+! \egroup
+! \kern3pt\vrule
+! \hskip\rskip
+! \egroup
+! \cartbot
+! \egroup
+ \endgroup
+ }}
+
+***************
+*** 3216,3223 ****
+ \let\Esmalllisp = \nonfillfinish
+ \let\Esmallexample = \nonfillfinish
+ %
+! % Smaller interline space and fonts for small examples.
+! \setleading{10pt}%
+ \indexfonts \tt
+ \rawbackslash % make \ output the \ character from the current font (tt)
+ \gobble
+--- 3590,3596 ----
+ \let\Esmalllisp = \nonfillfinish
+ \let\Esmallexample = \nonfillfinish
+ %
+! % Smaller fonts for small examples.
+ \indexfonts \tt
+ \rawbackslash % make \ output the \ character from the current font (tt)
+ \gobble
+***************
+*** 3306,3324 ****
+
+ \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+
+ % Definitions of (, ) and & used in args for functions.
+ % This is the definition of ( outside of all parentheses.
+! \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
+! \global\advance\parencount by 1 }
+ %
+ % This is the definition of ( when already inside a level of parens.
+ \gdef\opnested{\char`\(\global\advance\parencount by 1 }
+ %
+ \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+! % also in that case restore the outer-level definition of (.
+! \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+! \global\advance \parencount by -1 }
+ % If we encounter &foo, then turn on ()-hacking afterwards
+ \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+ %
+--- 3679,3701 ----
+
+ \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
++ % This is used to turn on special parens
++ % but make & act ordinary (given that it's active).
++ \gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
+
+ % Definitions of (, ) and & used in args for functions.
+ % This is the definition of ( outside of all parentheses.
+! \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
+! \global\advance\parencount by 1
+! }
+ %
+ % This is the definition of ( when already inside a level of parens.
+ \gdef\opnested{\char`\(\global\advance\parencount by 1 }
+ %
+ \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+! % also in that case restore the outer-level definition of (.
+! \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+! \global\advance \parencount by -1 }
+ % If we encounter &foo, then turn on ()-hacking afterwards
+ \gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+ %
+***************
+*** 3326,3333 ****
+ } % End of definition inside \activeparens
+ %% These parens (in \boldbrax) actually are a little bolder than the
+ %% contained text. This is especially needed for [ and ]
+! \def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
+! \def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
+
+ % First, defname, which formats the header line itself.
+ % #1 should be the function name.
+--- 3703,3713 ----
+ } % End of definition inside \activeparens
+ %% These parens (in \boldbrax) actually are a little bolder than the
+ %% contained text. This is especially needed for [ and ]
+! \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
+! \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
+! \def\ampnr{\&}
+! \def\lbrb{{\bf\char`\[}}
+! \def\rbrb{{\bf\char`\]}}
+
+ % First, defname, which formats the header line itself.
+ % #1 should be the function name.
+***************
+*** 3420,3426 ****
+
+ % This is used for \def{tp,vr}parsebody. It could probably be used for
+ % some of the others, too, with some judicious conditionals.
+! %
+ \def\parsebodycommon#1#2#3{%
+ \begingroup\inENV %
+ \medbreak %
+--- 3800,3806 ----
+
+ % This is used for \def{tp,vr}parsebody. It could probably be used for
+ % some of the others, too, with some judicious conditionals.
+! %
+ \def\parsebodycommon#1#2#3{%
+ \begingroup\inENV %
+ \medbreak %
+***************
+*** 3454,3470 ****
+ }
+
+ % Fine, but then we have to eventually remove the \empty *and* the
+! % braces (if any). That's what this does, putting the result in \tptemp.
+! %
+! \def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}%
+
+ % After \spacesplit has done its work, this is called -- #1 is the final
+ % thing to call, #2 the type name (which starts with \empty), and #3
+ % (which might be empty) the arguments.
+! %
+ \def\parsetpheaderline#1#2#3{%
+! \removeemptybraces#2\relax
+! #1{\tptemp}{#3}%
+ }%
+
+ \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
+--- 3834,3849 ----
+ }
+
+ % Fine, but then we have to eventually remove the \empty *and* the
+! % braces (if any). That's what this does.
+! %
+! \def\removeemptybraces\empty#1\relax{#1}
+
+ % After \spacesplit has done its work, this is called -- #1 is the final
+ % thing to call, #2 the type name (which starts with \empty), and #3
+ % (which might be empty) the arguments.
+! %
+ \def\parsetpheaderline#1#2#3{%
+! #1{\removeemptybraces#2\relax}{#3}%
+ }%
+
+ \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
+***************
+*** 3505,3511 ****
+ \hyphenchar\tensl=0
+ #1%
+ \hyphenchar\tensl=45
+! \ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
+ \interlinepenalty=10000
+ \advance\rightskip by 0pt plus 1fil
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+--- 3884,3890 ----
+ \hyphenchar\tensl=0
+ #1%
+ \hyphenchar\tensl=45
+! \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
+ \interlinepenalty=10000
+ \advance\rightskip by 0pt plus 1fil
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+***************
+*** 3514,3520 ****
+ \def\deftypefunargs #1{%
+ % Expand, preventing hyphenation at `-' chars.
+ % Note that groups don't affect changes in \hyphenchar.
+! \functionparens
+ \tclose{#1}% avoid \code because of side effects on active chars
+ \interlinepenalty=10000
+ \advance\rightskip by 0pt plus 1fil
+--- 3893,3900 ----
+ \def\deftypefunargs #1{%
+ % Expand, preventing hyphenation at `-' chars.
+ % Note that groups don't affect changes in \hyphenchar.
+! % Use \boldbraxnoamp, not \functionparens, so that & is not special.
+! \boldbraxnoamp
+ \tclose{#1}% avoid \code because of side effects on active chars
+ \interlinepenalty=10000
+ \advance\rightskip by 0pt plus 1fil
+***************
+*** 3551,3557 ****
+ % #1 is the data type, #2 the name, #3 the args.
+ \def\deftypefunheaderx #1#2 #3\relax{%
+ \doind {fn}{\code{#2}}% Make entry in function index
+! \begingroup\defname {\code{#1} #2}{Function}%
+ \deftypefunargs {#3}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+--- 3931,3937 ----
+ % #1 is the data type, #2 the name, #3 the args.
+ \def\deftypefunheaderx #1#2 #3\relax{%
+ \doind {fn}{\code{#2}}% Make entry in function index
+! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
+ \deftypefunargs {#3}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+***************
+*** 3560,3565 ****
+--- 3940,3949 ----
+
+ \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+
++ % \defheaderxcond#1\relax$$$
++ % puts #1 in @code, followed by a space, but does nothing if #1 is null.
++ \def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
++
+ % #1 is the classification. #2 is the data type. #3 is the name and args.
+ \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+ % #1 is the classification, #2 the data type, #3 the name, #4 the args.
+***************
+*** 3568,3574 ****
+ \begingroup
+ \normalparens % notably, turn off `&' magic, which prevents
+ % at least some C++ text from working
+! \defname {\code{#2} #3}{#1}%
+ \deftypefunargs {#4}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+--- 3952,3958 ----
+ \begingroup
+ \normalparens % notably, turn off `&' magic, which prevents
+ % at least some C++ text from working
+! \defname {\defheaderxcond#2\relax$$$#3}{#1}%
+ \deftypefunargs {#4}\endgroup %
+ \catcode 61=\other % Turn off change made in \defparsebody
+ }
+***************
+*** 3601,3606 ****
+--- 3985,3991 ----
+ \def\defmacx #1 {\errmessage{@defmacx in invalid context}}
+ \def\defspecx #1 {\errmessage{@defspecx in invalid context}}
+ \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
++ \def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
+ \def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
+
+ % @defmethod, and so on
+***************
+*** 3616,3621 ****
+--- 4001,4016 ----
+ \defunargs {#3}\endgroup %
+ }
+
++ % @deftypemethod foo-class return-type foo-method args
++ %
++ \def\deftypemethod{%
++ \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
++ %
++ % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
++ \def\deftypemethodheader#1#2#3#4{%
++ \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
++ }
++
+ % @defmethod == @defop Method
+
+ \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+***************
+*** 3693,3712 ****
+
+ \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+
+! % #1 is the data type. #2 is the name.
+ \def\deftypevarheader #1#2{%
+! \doind {vr}{\code{#2}}% Make entry in variables index
+! \begingroup\defname {\code{#1} #2}{Variable}%
+ \interlinepenalty=10000
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000
+ \endgroup}
+
+ % @deftypevr {Global Flag} int enable
+
+ \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+
+! \def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}%
+! \begingroup\defname {\code{#2} #3}{#1}
+ \interlinepenalty=10000
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000
+ \endgroup}
+--- 4088,4109 ----
+
+ \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+
+! % #1 is the data type. #2 is the name, perhaps followed by text that
+! % is actually part of the data type, which should not be put into the index.
+ \def\deftypevarheader #1#2{%
+! \dovarind#2 \relax% Make entry in variables index
+! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
+ \interlinepenalty=10000
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000
+ \endgroup}
++ \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
+
+ % @deftypevr {Global Flag} int enable
+
+ \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+
+! \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
+! \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
+ \interlinepenalty=10000
+ \endgraf\penalty 10000\vskip -\parskip\penalty 10000
+ \endgroup}
+***************
+*** 3737,3742 ****
+--- 4134,4140 ----
+
+ \def\deftpx #1 {\errmessage{@deftpx in invalid context}}
+
++
+ \message{cross reference,}
+ % Define cross-reference macros
+ \newwrite \auxfile
+***************
+*** 3744,3749 ****
+--- 4142,4152 ----
+ \newif\ifhavexrefs % True if xref values are known.
+ \newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
++ % @inforef is simple.
++ \def\inforef #1{\inforefzzz #1,,,,**}
++ \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
++ node \samp{\ignorespaces#1{}}}
++
+ % \setref{foo} defines a cross-reference point named foo.
+
+ \def\setref#1{%
+***************
+*** 3777,3783 ****
+ \setbox0=\hbox{\printednodename}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+! \ifx\SETxref-automatic-section-title\relax %
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1>0pt%
+--- 4180,4189 ----
+ \setbox0=\hbox{\printednodename}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+! \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+! % Use the node name inside the square brackets.
+! \def\printednodename{\ignorespaces #1}%
+! \else
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1>0pt%
+***************
+*** 3786,3801 ****
+ \else
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+! \def\printednodename{\refx{#1-title}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printednodename{\ignorespaces #1}%
+ \fi%
+ \fi
+- \def\printednodename{#1-title}%
+- \else
+- % Use the node name inside the square brackets.
+- \def\printednodename{\ignorespaces #1}%
+ \fi
+ \fi
+ %
+--- 4192,4203 ----
+ \else
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+! \def\printednodename{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printednodename{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+***************
+*** 3823,3829 ****
+
+ % Use \turnoffactive so that punctuation chars such as underscore
+ % work in node names.
+! \def\dosetq #1#2{{\let\folio=0 \turnoffactive%
+ \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
+ \next}}
+
+--- 4225,4231 ----
+
+ % Use \turnoffactive so that punctuation chars such as underscore
+ % work in node names.
+! \def\dosetq #1#2{{\let\folio=0 \turnoffactive
+ \edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
+ \next}}
+
+***************
+*** 3892,3974 ****
+ #2% Output the suffix in any case.
+ }
+
+- % Read the last existing aux file, if any. No error if none exists.
+-
+ % This is the macro invoked by entries in the aux file.
+! \def\xrdef #1#2{
+! {\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
+
+! \def\readauxfile{%
+! \begingroup
+! \catcode `\^^@=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\^^C=\other
+! \catcode `\^^D=\other
+! \catcode `\^^E=\other
+! \catcode `\^^F=\other
+! \catcode `\^^G=\other
+! \catcode `\^^H=\other
+! \catcode `\ =\other
+! \catcode `\^^L=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode `\=\other
+! \catcode 26=\other
+! \catcode `\^^[=\other
+! \catcode `\^^\=\other
+! \catcode `\^^]=\other
+! \catcode `\^^^=\other
+! \catcode `\^^_=\other
+! \catcode `\@=\other
+! \catcode `\^=\other
+! \catcode `\~=\other
+! \catcode `\[=\other
+! \catcode `\]=\other
+! \catcode`\"=\other
+! \catcode`\_=\other
+! \catcode`\|=\other
+! \catcode`\<=\other
+! \catcode`\>=\other
+! \catcode `\$=\other
+! \catcode `\#=\other
+! \catcode `\&=\other
+! % `\+ does not work, so use 43.
+! \catcode 43=\other
+! % Make the characters 128-255 be printing characters
+! {%
+! \count 1=128
+! \def\loop{%
+! \catcode\count 1=\other
+! \advance\count 1 by 1
+! \ifnum \count 1<256 \loop \fi
+ }%
+! }%
+! % the aux file uses ' as the escape.
+! % Turn off \ as an escape so we do not lose on
+! % entries which were dumped with control sequences in their names.
+! % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+! % Reference to such entries still does not work the way one would wish,
+! % but at least they do not bomb out when the aux file is read in.
+! \catcode `\{=1 \catcode `\}=2
+! \catcode `\%=\other
+! \catcode `\'=0
+! \catcode `\\=\other
+! \openin 1 \jobname.aux
+! \ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue
+! \global\warnedobstrue
+! \fi
+! % Open the new aux file. Tex will close it automatically at exit.
+! \openout \auxfile=\jobname.aux
+ \endgroup}
+
+
+--- 4294,4394 ----
+ #2% Output the suffix in any case.
+ }
+
+ % This is the macro invoked by entries in the aux file.
+! \def\xrdef #1#2{{%
+! \catcode`\'=\other
+! \expandafter\gdef\csname X#1\endcsname{#2}%
+! }}
+
+! % Read the last existing aux file, if any. No error if none exists.
+! \def\readauxfile{\begingroup
+! \catcode`\^^@=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\^^C=\other
+! \catcode`\^^D=\other
+! \catcode`\^^E=\other
+! \catcode`\^^F=\other
+! \catcode`\^^G=\other
+! \catcode`\^^H=\other
+! \catcode`\ =\other
+! \catcode`\^^L=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode`\=\other
+! \catcode26=\other
+! \catcode`\^^[=\other
+! \catcode`\^^\=\other
+! \catcode`\^^]=\other
+! \catcode`\^^^=\other
+! \catcode`\^^_=\other
+! \catcode`\@=\other
+! \catcode`\^=\other
+! % It was suggested to define this as 7, which would allow ^^e4 etc.
+! % in xref tags, i.e., node names. But since ^^e4 notation isn't
+! % supported in the main text, it doesn't seem desirable. Furthermore,
+! % that is not enough: for node names that actually contain a ^
+! % character, we would end up writing a line like this: 'xrdef {'hat
+! % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+! % argument, and \hat is not an expandable control sequence. It could
+! % all be worked out, but why? Either we support ^^ or we don't.
+! %
+! % The other change necessary for this was to define \auxhat:
+! % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+! % and then to call \auxhat in \setq.
+! %
+! \catcode`\~=\other
+! \catcode`\[=\other
+! \catcode`\]=\other
+! \catcode`\"=\other
+! \catcode`\_=\other
+! \catcode`\|=\other
+! \catcode`\<=\other
+! \catcode`\>=\other
+! \catcode`\$=\other
+! \catcode`\#=\other
+! \catcode`\&=\other
+! % `\+ does not work, so use 43.
+! \catcode43=\other
+! % Make the characters 128-255 be printing characters
+! {%
+! \count 1=128
+! \def\loop{%
+! \catcode\count 1=\other
+! \advance\count 1 by 1
+! \ifnum \count 1<256 \loop \fi
+! }%
+ }%
+! % The aux file uses ' as the escape (for now).
+! % Turn off \ as an escape so we do not lose on
+! % entries which were dumped with control sequences in their names.
+! % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+! % Reference to such entries still does not work the way one would wish,
+! % but at least they do not bomb out when the aux file is read in.
+! \catcode`\{=1
+! \catcode`\}=2
+! \catcode`\%=\other
+! \catcode`\'=0
+! \catcode`\\=\other
+! %
+! \openin 1 \jobname.aux
+! \ifeof 1 \else
+! \closein 1
+! \input \jobname.aux
+! \global\havexrefstrue
+! \global\warnedobstrue
+! \fi
+! % Open the new aux file. TeX will close it automatically at exit.
+! \openout\auxfile=\jobname.aux
+ \endgroup}
+
+
+***************
+*** 3979,3985 ****
+ % The trailing space in the following definition for supereject is
+ % vital for proper filling; pages come out unaligned when you do a
+ % pagealignmacro call if that space before the closing brace is
+! % removed.
+ \def\supereject{\par\penalty -20000\footnoteno =0 }
+
+ % @footnotestyle is meaningful for info output only..
+--- 4399,4406 ----
+ % The trailing space in the following definition for supereject is
+ % vital for proper filling; pages come out unaligned when you do a
+ % pagealignmacro call if that space before the closing brace is
+! % removed. (Generally, numeric constants should always be followed by a
+! % space to prevent strange expansion errors.)
+ \def\supereject{\par\penalty -20000\footnoteno =0 }
+
+ % @footnotestyle is meaningful for info output only..
+***************
+*** 4008,4014 ****
+ % Don't bother with the trickery in plain.tex to not require the
+ % footnote text as a parameter. Our footnotes don't need to be so general.
+ %
+! \long\gdef\footnotezzz#1{\insert\footins{%
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+--- 4429,4439 ----
+ % Don't bother with the trickery in plain.tex to not require the
+ % footnote text as a parameter. Our footnotes don't need to be so general.
+ %
+! % Oh yes, they do; otherwise, @ifset and anything else that uses
+! % \parseargline fail inside footnotes because the tokens are fixed when
+! % the footnote is read. --karl, 16nov96.
+! %
+! \long\gdef\footnotezzz{\insert\footins\bgroup
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+***************
+*** 4030,4037 ****
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+! #1\strut}%
+ }
+
+ }%end \catcode `\@=11
+
+--- 4455,4467 ----
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+! \futurelet\next\fo@t
+ }
++ \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
++ \else\let\next\f@t\fi \next}
++ \def\f@@t{\bgroup\aftergroup\@foot\let\next}
++ \def\f@t#1{#1\@foot}
++ \def\@foot{\strut\egroup}
+
+ }%end \catcode `\@=11
+
+***************
+*** 4104,4116 ****
+
+ % Set some numeric style parameters, for 8.5 x 11 format.
+
+! %\hsize = 6.5in
+ \newdimen\defaultparindent \defaultparindent = 15pt
+ \parindent = \defaultparindent
+! \parskip 18pt plus 1pt
+! \setleading{15pt}
+ \advance\topskip by 1.2cm
+
+ % Prevent underfull vbox error messages.
+ \vbadness=10000
+
+--- 4534,4551 ----
+
+ % Set some numeric style parameters, for 8.5 x 11 format.
+
+! \hsize = 6in
+! \hoffset = .25in
+ \newdimen\defaultparindent \defaultparindent = 15pt
+ \parindent = \defaultparindent
+! \parskip 3pt plus 2pt minus 1pt
+! \setleading{13.2pt}
+ \advance\topskip by 1.2cm
+
++ \chapheadingskip = 15pt plus 4pt minus 2pt
++ \secheadingskip = 12pt plus 3pt minus 2pt
++ \subsecheadingskip = 9pt plus 2pt minus 2pt
++
+ % Prevent underfull vbox error messages.
+ \vbadness=10000
+
+***************
+*** 4133,4162 ****
+
+ % Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
+ \def\smallbook{
+!
+! % These values for secheadingskip and subsecheadingskip are
+! % experiments. RJC 7 Aug 1992
+! \global\secheadingskip = 17pt plus 6pt minus 3pt
+! \global\subsecheadingskip = 14pt plus 6pt minus 3pt
+!
+! \global\lispnarrowing = 0.3in
+! \setleading{12pt}
+! \advance\topskip by -1cm
+! \global\parskip 3pt plus 1pt
+! \global\hsize = 5in
+! \global\vsize=7.5in
+! \global\tolerance=700
+! \global\hfuzz=1pt
+! \global\contentsrightmargin=0pt
+! \global\deftypemargin=0pt
+! \global\defbodyindent=.5cm
+!
+! \global\pagewidth=\hsize
+! \global\pageheight=\vsize
+!
+! \global\let\smalllisp=\smalllispx
+! \global\let\smallexample=\smalllispx
+! \global\def\Esmallexample{\Esmalllisp}
+ }
+
+ % Use @afourpaper to print on European A4 paper.
+--- 4568,4595 ----
+
+ % Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
+ \def\smallbook{
+! \global\chapheadingskip = 15pt plus 4pt minus 2pt
+! \global\secheadingskip = 12pt plus 3pt minus 2pt
+! \global\subsecheadingskip = 9pt plus 2pt minus 2pt
+! %
+! \global\lispnarrowing = 0.3in
+! \setleading{12pt}
+! \advance\topskip by -1cm
+! \global\parskip 2pt plus 1pt
+! \global\hsize = 5in
+! \global\vsize=7.5in
+! \global\tolerance=700
+! \global\hfuzz=1pt
+! \global\contentsrightmargin=0pt
+! \global\deftypemargin=0pt
+! \global\defbodyindent=.5cm
+! %
+! \global\pagewidth=\hsize
+! \global\pageheight=\vsize
+! %
+! \global\let\smalllisp=\smalllispx
+! \global\let\smallexample=\smalllispx
+! \global\def\Esmallexample{\Esmalllisp}
+ }
+
+ % Use @afourpaper to print on European A4 paper.
+***************
+*** 4179,4190 ****
+ \global\pageheight=\vsize
+ }
+
+ % Allow control of the text dimensions. Parameters in order: textheight;
+! % textwidth; \voffset; \hoffset (!); binding offset. All require a dimension;
+ % header is additional; added length extends the bottom of the page.
+
+! \def\changepagesizes#1#2#3#4#5
+! {\global\vsize= #1
+ \advance\vsize by \topskip
+ \global\voffset= #3
+ \global\hsize= #2
+--- 4612,4630 ----
+ \global\pageheight=\vsize
+ }
+
++ \bindingoffset=0pt
++ \normaloffset=\hoffset
++ \pagewidth=\hsize
++ \pageheight=\vsize
++
+ % Allow control of the text dimensions. Parameters in order: textheight;
+! % textwidth; voffset; hoffset; binding offset; topskip.
+! % All require a dimension;
+ % header is additional; added length extends the bottom of the page.
+
+! \def\changepagesizes#1#2#3#4#5#6{
+! \global\vsize= #1
+! \global\topskip= #6
+ \advance\vsize by \topskip
+ \global\voffset= #3
+ \global\hsize= #2
+***************
+*** 4197,4205 ****
+ \global\normaloffset= #4
+ \global\bindingoffset= #5}
+
+! % This layout is compatible with Latex on A4 paper.
+!
+! \def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}}
+
+ % Define macros to output various characters with catcode for normal text.
+ \catcode`\"=\other
+--- 4637,4656 ----
+ \global\normaloffset= #4
+ \global\bindingoffset= #5}
+
+! % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
+! % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
+! \def\afourlatex
+! {\global\tolerance=700
+! \global\hfuzz=1pt
+! \setleading{12pt}
+! \global\parskip 15pt plus 1pt
+! \advance\baselineskip by 1.6pt
+! \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
+! }
+!
+! % Use @afourwide to print on European A4 paper in wide format.
+! \def\afourwide{\afourpaper
+! \changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
+
+ % Define macros to output various characters with catcode for normal text.
+ \catcode`\"=\other
+***************
+*** 4247,4260 ****
+ \catcode`\_=\active
+ \def_{\ifusingtt\normalunderscore\_}
+ % Subroutine for the previous macro.
+! \def\_{\lvvmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+!
+! % \lvvmode is equivalent in function to \leavevmode.
+! % Using \leavevmode runs into trouble when written out to
+! % an index file due to the expansion of \leavevmode into ``\unhbox
+! % \voidb@x'' ---which looks to TeX like ``\unhbox \voidb\x'' due to our
+! % magic tricks with @.
+! \def\lvvmode{\vbox to 0pt{}}
+
+ \catcode`\|=\active
+ \def|{{\tt \char '174}}
+--- 4698,4704 ----
+ \catcode`\_=\active
+ \def_{\ifusingtt\normalunderscore\_}
+ % Subroutine for the previous macro.
+! \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
+
+ \catcode`\|=\active
+ \def|{{\tt \char '174}}
+***************
+*** 4273,4278 ****
+--- 4717,4731 ----
+ {\catcode`\==\active
+ \global\def={{\tt \char 61}}}
+
++ \catcode`+=\active
++ \catcode`\_=\active
++
++ % If a .fmt file is being used, characters that might appear in a file
++ % name cannot be active until we have parsed the command line.
++ % So turn them off again, and have \everyjob (or @setfilename) turn them on.
++ % \otherifyactive is called near the end of this file.
++ \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
++
+ \catcode`\@=0
+
+ % \rawbackslashxx output one backslash character in current font
+***************
+*** 4315,4320 ****
+--- 4768,4777 ----
+ @let>=@normalgreater
+ @let+=@normalplus}
+
++ % Make _ and + \other characters, temporarily.
++ % This is canceled by @fixbackslash.
++ @otherifyactive
++
+ % If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+ % That is what \eatinput is for; after that, the `\' should revert to printing
+ % a backslash.
+***************
+*** 4325,4332 ****
+ % On the other hand, perhaps the file did not have a `\input texinfo'. Then
+ % the first `\{ in the file would cause an error. This macro tries to fix
+ % that, assuming it is called before the first `\' could plausibly occur.
+ %
+! @gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi}
+
+ %% These look ok in all fonts, so just make them not special. The @rm below
+ %% makes sure that the current font starts out as the newly loaded cmr10
+--- 4782,4792 ----
+ % On the other hand, perhaps the file did not have a `\input texinfo'. Then
+ % the first `\{ in the file would cause an error. This macro tries to fix
+ % that, assuming it is called before the first `\' could plausibly occur.
++ % Also back turn on active characters that might appear in the input
++ % file name, in case not using a pre-dumped format.
+ %
+! @gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
+! @catcode`+=@active @catcode`@_=@active}
+
+ %% These look ok in all fonts, so just make them not special. The @rm below
+ %% makes sure that the current font starts out as the newly loaded cmr10
diff --git a/editors/mule/pkg/COMMENT b/editors/mule/pkg/COMMENT
new file mode 100644
index 00000000000..354886a9e24
--- /dev/null
+++ b/editors/mule/pkg/COMMENT
@@ -0,0 +1 @@
+Multilingual GNU editing macros (editor)
diff --git a/editors/mule/pkg/DESCR b/editors/mule/pkg/DESCR
new file mode 100644
index 00000000000..fed780d51f5
--- /dev/null
+++ b/editors/mule/pkg/DESCR
@@ -0,0 +1,15 @@
+From FAQ-Mule:
+
+ Mule is a multi-lingual enhancement of GNU Emacs. Mule Ver.1 was
+ based on GNU Emacs Ver.18 and Mule Ver.2 is based on GNU Emacs
+ Ver.19. Mule Ver.1 will not be supported anymore.
+
+ Mule has the following features:
+ * It can handle not only ASCII characters (7 bit) and ISO Latin-1
+ characters (8 bit), but also 16 bit characters like Japanese,
+ Chinese, and Korean. Furthermore Mule can have a mixture of
+ languages in a single buffer.
+ * You can set different coding systems for file input/output,
+ keyboard input, and inter-process communication.
+ * When not in the multi-lingual mode, it behaves almost exactly like GNU
+ Emacs.
diff --git a/editors/mule/pkg/PLIST b/editors/mule/pkg/PLIST
new file mode 100644
index 00000000000..d2a7ca93ecf
--- /dev/null
+++ b/editors/mule/pkg/PLIST
@@ -0,0 +1,1037 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2000/11/21 05:21:15 kei Exp $
+bin/any2ps
+bin/b2m
+bin/coco
+bin/ctags
+bin/emacsclient
+bin/etags
+bin/m2ps
+bin/mule-19.28
+@exec ln %D/%F %B/mule
+@unexec rm %B/mule
+bin/rcs-checkin
+@comment @unexec install-info --delete %D/info/CCL %D/info/dir
+@comment @unexec install-info --delete %D/info/ISO2022 %D/info/dir
+@comment @unexec install-info --delete %D/info/R2L %D/info/dir
+@comment @unexec install-info --delete %D/info/XFONT %D/info/dir
+@unexec install-info --delete %D/info/antenews-jp %D/info/dir
+@unexec install-info --delete %D/info/canna-jp %D/info/dir
+@unexec install-info --delete %D/info/cl %D/info/dir
+@unexec install-info --delete %D/info/dired-x %D/info/dir
+@comment @unexec install-info --delete %D/info/egg %D/info/dir
+@unexec install-info --delete %D/info/egg-jp %D/info/dir
+@unexec install-info --delete %D/info/emacs %D/info/dir
+@unexec install-info --delete %D/info/forms %D/info/dir
+@unexec install-info --delete %D/info/gnus %D/info/dir
+@comment @unexec install-info --delete %D/info/kbd-trans %D/info/dir
+@comment @unexec install-info --delete %D/info/languages %D/info/dir
+@comment @unexec install-info --delete %D/info/m2ps %D/info/dir
+@unexec install-info --delete %D/info/mule %D/info/dir
+@unexec install-info --delete %D/info/mule-jp %D/info/dir
+@comment @unexec install-info --delete %D/info/quail %D/info/dir
+@unexec install-info --delete %D/info/sc %D/info/dir
+@comment @unexec install-info --delete %D/info/terminology %D/info/dir
+@unexec install-info --delete %D/info/vip %D/info/dir
+info/CCL
+info/ISO2022
+info/R2L
+info/XFONT
+info/antenews-jp
+info/canna-jp
+info/cl
+info/cl-1
+info/cl-2
+info/cl-3
+info/cl-4
+info/cl-5
+info/cl-6
+info/dired-x
+info/egg
+info/egg-jp
+info/egg-jp-1
+info/egg-jp-2
+info/emacs
+info/emacs-1
+info/emacs-10
+info/emacs-11
+info/emacs-12
+info/emacs-13
+info/emacs-14
+info/emacs-15
+info/emacs-16
+info/emacs-17
+info/emacs-18
+info/emacs-19
+info/emacs-2
+info/emacs-20
+info/emacs-21
+info/emacs-22
+info/emacs-23
+info/emacs-24
+info/emacs-3
+info/emacs-4
+info/emacs-5
+info/emacs-6
+info/emacs-7
+info/emacs-8
+info/emacs-9
+info/forms
+info/gnus
+info/gnus-1
+info/gnus-2
+info/gnus-3
+info/kbd-trans
+info/languages
+info/m2ps
+info/mule
+info/mule-jp
+info/mule-jp-1
+info/mule-jp-2
+info/mule-jp-3
+info/quail
+info/sc
+info/sc-1
+info/sc-2
+info/sc-3
+info/terminology
+info/vip
+info/vip-1
+info/vip-2
+@comment @exec install-info %D/info/CCL %D/info/dir
+@comment @exec install-info %D/info/ISO2022 %D/info/dir
+@comment @exec install-info %D/info/R2L %D/info/dir
+@comment @exec install-info %D/info/XFONT %D/info/dir
+@exec install-info %D/info/antenews-jp %D/info/dir
+@exec install-info %D/info/canna-jp %D/info/dir
+@exec install-info %D/info/cl %D/info/dir
+@exec install-info %D/info/dired-x %D/info/dir
+@comment @exec install-info %D/info/egg %D/info/dir
+@exec install-info %D/info/egg-jp %D/info/dir
+@exec install-info %D/info/emacs %D/info/dir
+@exec install-info %D/info/forms %D/info/dir
+@exec install-info %D/info/gnus %D/info/dir
+@comment @exec install-info %D/info/kbd-trans %D/info/dir
+@comment @exec install-info %D/info/languages %D/info/dir
+@comment @exec install-info %D/info/m2ps %D/info/dir
+@exec install-info %D/info/mule %D/info/dir
+@exec install-info %D/info/mule-jp %D/info/dir
+@comment @exec install-info %D/info/quail %D/info/dir
+@exec install-info %D/info/sc %D/info/dir
+@comment @exec install-info %D/info/terminology %D/info/dir
+@exec install-info %D/info/vip %D/info/dir
+man/man1/coco.1
+man/man1/ctags.1
+man/man1/etags.1
+man/man1/m2ps.1
+man/man1/mule.1
+lib/mule/19.28/etc/3B-MAXMEM
+lib/mule/19.28/etc/AIX.DUMP
+lib/mule/19.28/etc/APPLE
+lib/mule/19.28/etc/BABYL
+lib/mule/19.28/etc/CHARSETS
+lib/mule/19.28/etc/CODINGS
+lib/mule/19.28/etc/COOKIES
+lib/mule/19.28/etc/COPYING
+lib/mule/19.28/etc/ChangeLog
+lib/mule/19.28/etc/DEBUG
+lib/mule/19.28/etc/DISTRIB
+lib/mule/19.28/etc/DOC
+lib/mule/19.28/etc/DOC-19.28.1
+lib/mule/19.28/etc/FAQ
+lib/mule/19.28/etc/FAQ-Mule
+lib/mule/19.28/etc/FAQ-Mule.cn
+lib/mule/19.28/etc/FAQ-Mule.jp
+lib/mule/19.28/etc/FAQ-Mule.kr
+lib/mule/19.28/etc/FAQ-Mule.th
+lib/mule/19.28/etc/FAQ-NEW
+lib/mule/19.28/etc/FTP
+lib/mule/19.28/etc/GNU
+lib/mule/19.28/etc/INTERVIEW
+lib/mule/19.28/etc/JOKES
+lib/mule/19.28/etc/LEDIT
+lib/mule/19.28/etc/LNEWS
+lib/mule/19.28/etc/LPF
+lib/mule/19.28/etc/MACHINES
+lib/mule/19.28/etc/MAILINGLISTS
+lib/mule/19.28/etc/MH-E-NEWS
+lib/mule/19.28/etc/MORE.STUFF
+lib/mule/19.28/etc/MOTIVATION
+lib/mule/19.28/etc/MSDOS
+lib/mule/19.28/etc/Makefile
+lib/mule/19.28/etc/Makefile.in
+lib/mule/19.28/etc/NEWS
+lib/mule/19.28/etc/ONEWS
+lib/mule/19.28/etc/OONEWS
+lib/mule/19.28/etc/OOONEWS
+lib/mule/19.28/etc/OOOONEWS
+lib/mule/19.28/etc/ORDERS
+lib/mule/19.28/etc/ORDERS.EUROPE
+lib/mule/19.28/etc/ORDERS.JAPAN
+lib/mule/19.28/etc/OTHER.EMACSES
+lib/mule/19.28/etc/README
+lib/mule/19.28/etc/SERVICE
+lib/mule/19.28/etc/SUN-SUPPORT
+lib/mule/19.28/etc/TERMS
+lib/mule/19.28/etc/TUTORIAL
+lib/mule/19.28/etc/TUTORIAL.jp
+lib/mule/19.28/etc/TUTORIAL.kr
+lib/mule/19.28/etc/TUTORIAL.th
+lib/mule/19.28/etc/VERSIONS
+lib/mule/19.28/etc/Xkeymap.txt
+lib/mule/19.28/etc/celibacy.1
+lib/mule/19.28/etc/charset
+lib/mule/19.28/etc/coco.1
+lib/mule/19.28/etc/condom.1
+lib/mule/19.28/etc/copying.paper
+lib/mule/19.28/etc/ctags.1
+lib/mule/19.28/etc/demo.ps
+lib/mule/19.28/etc/echo.msg
+lib/mule/19.28/etc/emacs.1
+lib/mule/19.28/etc/emacs.bash
+lib/mule/19.28/etc/emacs.csh
+lib/mule/19.28/etc/emacs.icon
+lib/mule/19.28/etc/emacs.xbm
+lib/mule/19.28/etc/emacstool.1
+lib/mule/19.28/etc/etags.1
+lib/mule/19.28/etc/etags.notes
+lib/mule/19.28/etc/etags.vms
+lib/mule/19.28/etc/ledit.l
+lib/mule/19.28/etc/m2ps.1
+lib/mule/19.28/etc/m2ps.ps
+lib/mule/19.28/etc/ms-kermit
+lib/mule/19.28/etc/ms-kermit-7bit
+lib/mule/19.28/etc/mule-refcard.tex
+lib/mule/19.28/etc/mule.1
+lib/mule/19.28/etc/mule.xbm
+lib/mule/19.28/etc/news.texi
+lib/mule/19.28/etc/refcard.ps
+lib/mule/19.28/etc/refcard.tex
+lib/mule/19.28/etc/sex.6
+lib/mule/19.28/etc/spook.lines
+lib/mule/19.28/etc/termcap.dat
+lib/mule/19.28/etc/termcap.ucb
+lib/mule/19.28/etc/tom.xbm
+lib/mule/19.28/etc/ulimit.hack
+lib/mule/19.28/etc/vipcard.tex
+lib/mule/19.28/etc/yow.lines
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/cvtmail
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/digest-doc
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/emacsserver
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/fakemail
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/hexl
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/make-docfile
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/make-path
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/movemail
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/profile
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/rcs2log
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/sorted-doc
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/test-distrib
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/timer
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/vcdiff
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/wakeup
+lib/mule/19.28/${MACHINE_ARCH}--netbsd/yow
+lib/mule/19.28/lisp/COPYING
+lib/mule/19.28/lisp/ChangeLog
+lib/mule/19.28/lisp/ChangeLog.1
+lib/mule/19.28/lisp/ChangeLog.2
+lib/mule/19.28/lisp/ChangeLog.3
+lib/mule/19.28/lisp/Makefile
+lib/mule/19.28/lisp/README
+lib/mule/19.28/lisp/abbrev.el
+lib/mule/19.28/lisp/abbrev.elc
+lib/mule/19.28/lisp/abbrevlist.el
+lib/mule/19.28/lisp/abbrevlist.elc
+lib/mule/19.28/lisp/ada.el
+lib/mule/19.28/lisp/ada.elc
+lib/mule/19.28/lisp/add-log.el
+lib/mule/19.28/lisp/add-log.elc
+lib/mule/19.28/lisp/advice.el
+lib/mule/19.28/lisp/advice.elc
+lib/mule/19.28/lisp/allout.el
+lib/mule/19.28/lisp/allout.elc
+lib/mule/19.28/lisp/ange-ftp.el
+lib/mule/19.28/lisp/ange-ftp.elc
+lib/mule/19.28/lisp/appt.el
+lib/mule/19.28/lisp/appt.elc
+lib/mule/19.28/lisp/apropos.el
+lib/mule/19.28/lisp/apropos.elc
+lib/mule/19.28/lisp/arabic.el
+lib/mule/19.28/lisp/arabic.elc
+lib/mule/19.28/lisp/array.el
+lib/mule/19.28/lisp/array.elc
+lib/mule/19.28/lisp/asm-mode.el
+lib/mule/19.28/lisp/asm-mode.elc
+lib/mule/19.28/lisp/assoc.el
+lib/mule/19.28/lisp/assoc.elc
+lib/mule/19.28/lisp/autoinsert.el
+lib/mule/19.28/lisp/autoinsert.elc
+lib/mule/19.28/lisp/autoload.el
+lib/mule/19.28/lisp/autoload.elc
+lib/mule/19.28/lisp/avoid.el
+lib/mule/19.28/lisp/avoid.elc
+lib/mule/19.28/lisp/awk-mode.el
+lib/mule/19.28/lisp/awk-mode.elc
+lib/mule/19.28/lisp/backquote.el
+lib/mule/19.28/lisp/backquote.elc
+lib/mule/19.28/lisp/bib-mode.el
+lib/mule/19.28/lisp/bib-mode.elc
+lib/mule/19.28/lisp/bibtex.el
+lib/mule/19.28/lisp/bibtex.elc
+lib/mule/19.28/lisp/blackbox.el
+lib/mule/19.28/lisp/blackbox.elc
+lib/mule/19.28/lisp/blessmail.el
+lib/mule/19.28/lisp/bookmark.el
+lib/mule/19.28/lisp/bookmark.elc
+lib/mule/19.28/lisp/buff-menu.el
+lib/mule/19.28/lisp/buff-menu.elc
+lib/mule/19.28/lisp/busyu.el
+lib/mule/19.28/lisp/byte-opt.el
+lib/mule/19.28/lisp/byte-opt.elc
+lib/mule/19.28/lisp/byte-run.el
+lib/mule/19.28/lisp/byte-run.elc
+lib/mule/19.28/lisp/bytecomp.el
+lib/mule/19.28/lisp/bytecomp.elc
+lib/mule/19.28/lisp/c-mode.el
+lib/mule/19.28/lisp/c-mode.elc
+lib/mule/19.28/lisp/cal-dst.el
+lib/mule/19.28/lisp/cal-dst.elc
+lib/mule/19.28/lisp/cal-french.el
+lib/mule/19.28/lisp/cal-french.elc
+lib/mule/19.28/lisp/cal-mayan.el
+lib/mule/19.28/lisp/cal-mayan.elc
+lib/mule/19.28/lisp/cal-menu.el
+lib/mule/19.28/lisp/cal-menu.elc
+lib/mule/19.28/lisp/calendar.el
+lib/mule/19.28/lisp/calendar.elc
+lib/mule/19.28/lisp/can-n-egg.el
+lib/mule/19.28/lisp/canna.el
+lib/mule/19.28/lisp/canna.elc
+lib/mule/19.28/lisp/case-table.el
+lib/mule/19.28/lisp/case-table.elc
+lib/mule/19.28/lisp/cc-mode.el
+lib/mule/19.28/lisp/cc-mode.elc
+lib/mule/19.28/lisp/ccl.el
+lib/mule/19.28/lisp/ccl.elc
+lib/mule/19.28/lisp/cdl.el
+lib/mule/19.28/lisp/cdl.elc
+lib/mule/19.28/lisp/chinese.el
+lib/mule/19.28/lisp/chinese.elc
+lib/mule/19.28/lisp/chistory.el
+lib/mule/19.28/lisp/chistory.elc
+lib/mule/19.28/lisp/cl-compat.el
+lib/mule/19.28/lisp/cl-compat.elc
+lib/mule/19.28/lisp/cl-extra.el
+lib/mule/19.28/lisp/cl-extra.elc
+lib/mule/19.28/lisp/cl-indent.el
+lib/mule/19.28/lisp/cl-indent.elc
+lib/mule/19.28/lisp/cl-macs.el
+lib/mule/19.28/lisp/cl-macs.elc
+lib/mule/19.28/lisp/cl-seq.el
+lib/mule/19.28/lisp/cl-seq.elc
+lib/mule/19.28/lisp/cl-specs.el
+lib/mule/19.28/lisp/cl-specs.elc
+lib/mule/19.28/lisp/cl.el
+lib/mule/19.28/lisp/cl.elc
+lib/mule/19.28/lisp/cmacexp.el
+lib/mule/19.28/lisp/cmacexp.elc
+lib/mule/19.28/lisp/cmuscheme.el
+lib/mule/19.28/lisp/cmuscheme.elc
+lib/mule/19.28/lisp/comint.el
+lib/mule/19.28/lisp/comint.elc
+lib/mule/19.28/lisp/compare-w.el
+lib/mule/19.28/lisp/compare-w.elc
+lib/mule/19.28/lisp/compile.el
+lib/mule/19.28/lisp/compile.elc
+lib/mule/19.28/lisp/complete.el
+lib/mule/19.28/lisp/complete.elc
+lib/mule/19.28/lisp/completion.el
+lib/mule/19.28/lisp/completion.elc
+lib/mule/19.28/lisp/cookie1.el
+lib/mule/19.28/lisp/cookie1.elc
+lib/mule/19.28/lisp/cplus-md.el
+lib/mule/19.28/lisp/cplus-md.elc
+lib/mule/19.28/lisp/cust-print.el
+lib/mule/19.28/lisp/cust-print.elc
+lib/mule/19.28/lisp/cyrillic.el
+lib/mule/19.28/lisp/cyrillic.elc
+lib/mule/19.28/lisp/dabbrev.el
+lib/mule/19.28/lisp/dabbrev.elc
+lib/mule/19.28/lisp/debug.el
+lib/mule/19.28/lisp/debug.elc
+lib/mule/19.28/lisp/delsel.el
+lib/mule/19.28/lisp/delsel.elc
+lib/mule/19.28/lisp/derived.el
+lib/mule/19.28/lisp/derived.elc
+lib/mule/19.28/lisp/desktop.el
+lib/mule/19.28/lisp/desktop.elc
+lib/mule/19.28/lisp/diary-ins.el
+lib/mule/19.28/lisp/diary-ins.elc
+lib/mule/19.28/lisp/diary-lib.el
+lib/mule/19.28/lisp/diary-lib.elc
+lib/mule/19.28/lisp/diff.el
+lib/mule/19.28/lisp/diff.elc
+lib/mule/19.28/lisp/dired-aux.el
+lib/mule/19.28/lisp/dired-aux.elc
+lib/mule/19.28/lisp/dired-x.el
+lib/mule/19.28/lisp/dired-x.elc
+lib/mule/19.28/lisp/dired.el
+lib/mule/19.28/lisp/dired.elc
+lib/mule/19.28/lisp/dired.todo
+lib/mule/19.28/lisp/disass.el
+lib/mule/19.28/lisp/disass.elc
+lib/mule/19.28/lisp/disp-table.el
+lib/mule/19.28/lisp/disp-table.elc
+lib/mule/19.28/lisp/dissociate.el
+lib/mule/19.28/lisp/dissociate.elc
+lib/mule/19.28/lisp/doctor.el
+lib/mule/19.28/lisp/doctor.elc
+lib/mule/19.28/lisp/dos-fns.el
+lib/mule/19.28/lisp/dos-fns.elc
+lib/mule/19.28/lisp/double.el
+lib/mule/19.28/lisp/double.elc
+lib/mule/19.28/lisp/dunnet.el
+lib/mule/19.28/lisp/dunnet.elc
+lib/mule/19.28/lisp/easymenu.el
+lib/mule/19.28/lisp/easymenu.elc
+lib/mule/19.28/lisp/ebuff-menu.el
+lib/mule/19.28/lisp/ebuff-menu.elc
+lib/mule/19.28/lisp/echistory.el
+lib/mule/19.28/lisp/echistory.elc
+lib/mule/19.28/lisp/edebug.el
+lib/mule/19.28/lisp/edebug.elc
+lib/mule/19.28/lisp/ediff.el
+lib/mule/19.28/lisp/ediff.elc
+lib/mule/19.28/lisp/edmacro.el
+lib/mule/19.28/lisp/edmacro.elc
+lib/mule/19.28/lisp/edt.el
+lib/mule/19.28/lisp/edt.elc
+lib/mule/19.28/lisp/egg-jsymbol.el
+lib/mule/19.28/lisp/egg-keymap.el
+lib/mule/19.28/lisp/egg.el
+lib/mule/19.28/lisp/egg.elc
+lib/mule/19.28/lisp/eggrc-sj3
+lib/mule/19.28/lisp/eggrc-wnn
+lib/mule/19.28/lisp/eggrc-wnn.orig
+lib/mule/19.28/lisp/ehelp.el
+lib/mule/19.28/lisp/ehelp.elc
+lib/mule/19.28/lisp/electric.el
+lib/mule/19.28/lisp/electric.elc
+lib/mule/19.28/lisp/emacsbug.el
+lib/mule/19.28/lisp/emacsbug.elc
+lib/mule/19.28/lisp/emerge.el
+lib/mule/19.28/lisp/emerge.elc
+lib/mule/19.28/lisp/env.el
+lib/mule/19.28/lisp/env.elc
+lib/mule/19.28/lisp/etags.el
+lib/mule/19.28/lisp/etags.elc
+lib/mule/19.28/lisp/ethio.el
+lib/mule/19.28/lisp/ethio.elc
+lib/mule/19.28/lisp/european.el
+lib/mule/19.28/lisp/european.elc
+lib/mule/19.28/lisp/eval-reg.el
+lib/mule/19.28/lisp/eval-reg.elc
+lib/mule/19.28/lisp/faces.el
+lib/mule/19.28/lisp/faces.elc
+lib/mule/19.28/lisp/files.el
+lib/mule/19.28/lisp/files.elc
+lib/mule/19.28/lisp/fill.el
+lib/mule/19.28/lisp/fill.elc
+lib/mule/19.28/lisp/find-dired.el
+lib/mule/19.28/lisp/find-dired.elc
+lib/mule/19.28/lisp/find-gc.el
+lib/mule/19.28/lisp/find-gc.elc
+lib/mule/19.28/lisp/finder-inf.el
+lib/mule/19.28/lisp/finder-inf.elc
+lib/mule/19.28/lisp/finder.el
+lib/mule/19.28/lisp/finder.elc
+lib/mule/19.28/lisp/float-sup.el
+lib/mule/19.28/lisp/float-sup.elc
+lib/mule/19.28/lisp/float.el
+lib/mule/19.28/lisp/float.elc
+lib/mule/19.28/lisp/flow-ctrl.el
+lib/mule/19.28/lisp/flow-ctrl.elc
+lib/mule/19.28/lisp/foldout.el
+lib/mule/19.28/lisp/foldout.elc
+lib/mule/19.28/lisp/font-lock.el
+lib/mule/19.28/lisp/font-lock.elc
+lib/mule/19.28/lisp/forms-d2.dat
+lib/mule/19.28/lisp/forms-d2.el
+lib/mule/19.28/lisp/forms-pass.el
+lib/mule/19.28/lisp/forms.el
+lib/mule/19.28/lisp/forms.elc
+lib/mule/19.28/lisp/fortran.el
+lib/mule/19.28/lisp/fortran.elc
+lib/mule/19.28/lisp/frame.el
+lib/mule/19.28/lisp/frame.elc
+lib/mule/19.28/lisp/gnus-uu.el
+lib/mule/19.28/lisp/gnus-uu.elc
+lib/mule/19.28/lisp/gnus.el
+lib/mule/19.28/lisp/gnus.elc
+lib/mule/19.28/lisp/gnusmail.el
+lib/mule/19.28/lisp/gnusmail.elc
+lib/mule/19.28/lisp/gnusmisc.el
+lib/mule/19.28/lisp/gnusmisc.elc
+lib/mule/19.28/lisp/gnuspost.el
+lib/mule/19.28/lisp/gnuspost.elc
+lib/mule/19.28/lisp/gnusutil.el
+lib/mule/19.28/lisp/gnusutil.elc
+lib/mule/19.28/lisp/gomoku.el
+lib/mule/19.28/lisp/gomoku.elc
+lib/mule/19.28/lisp/gud.el
+lib/mule/19.28/lisp/gud.elc
+lib/mule/19.28/lisp/hanoi.el
+lib/mule/19.28/lisp/hanoi.elc
+lib/mule/19.28/lisp/help-macro.el
+lib/mule/19.28/lisp/help-macro.elc
+lib/mule/19.28/lisp/help.el
+lib/mule/19.28/lisp/help.elc
+lib/mule/19.28/lisp/helper.el
+lib/mule/19.28/lisp/helper.elc
+lib/mule/19.28/lisp/hexl.el
+lib/mule/19.28/lisp/hexl.elc
+lib/mule/19.28/lisp/hideif.el
+lib/mule/19.28/lisp/hideif.elc
+lib/mule/19.28/lisp/hilit19.el
+lib/mule/19.28/lisp/hilit19.elc
+lib/mule/19.28/lisp/hippie-exp.el
+lib/mule/19.28/lisp/hippie-exp.elc
+lib/mule/19.28/lisp/holidays.el
+lib/mule/19.28/lisp/holidays.elc
+lib/mule/19.28/lisp/icomplete.el
+lib/mule/19.28/lisp/icomplete.elc
+lib/mule/19.28/lisp/icon.el
+lib/mule/19.28/lisp/icon.elc
+lib/mule/19.28/lisp/ielm.el
+lib/mule/19.28/lisp/ielm.elc
+lib/mule/19.28/lisp/imenu.el
+lib/mule/19.28/lisp/imenu.elc
+lib/mule/19.28/lisp/indent.el
+lib/mule/19.28/lisp/indent.elc
+lib/mule/19.28/lisp/inf-lisp.el
+lib/mule/19.28/lisp/inf-lisp.elc
+lib/mule/19.28/lisp/info.el
+lib/mule/19.28/lisp/info.el.orig
+lib/mule/19.28/lisp/info.elc
+lib/mule/19.28/lisp/informat.el
+lib/mule/19.28/lisp/informat.elc
+lib/mule/19.28/lisp/isearch-ext.el
+lib/mule/19.28/lisp/isearch-ext.elc
+lib/mule/19.28/lisp/isearch.el
+lib/mule/19.28/lisp/isearch.elc
+lib/mule/19.28/lisp/iso-acc.el
+lib/mule/19.28/lisp/iso-acc.elc
+lib/mule/19.28/lisp/iso-ascii.el
+lib/mule/19.28/lisp/iso-ascii.elc
+lib/mule/19.28/lisp/iso-cvt.el
+lib/mule/19.28/lisp/iso-cvt.elc
+lib/mule/19.28/lisp/iso-insert.el
+lib/mule/19.28/lisp/iso-insert.elc
+lib/mule/19.28/lisp/iso-swed.el
+lib/mule/19.28/lisp/iso-swed.elc
+lib/mule/19.28/lisp/iso-syntax.el
+lib/mule/19.28/lisp/iso-syntax.elc
+lib/mule/19.28/lisp/iso-transl.el
+lib/mule/19.28/lisp/iso-transl.elc
+lib/mule/19.28/lisp/ispell.el
+lib/mule/19.28/lisp/ispell.elc
+lib/mule/19.28/lisp/ispell4.el
+lib/mule/19.28/lisp/ispell4.elc
+lib/mule/19.28/lisp/its/han-kata.el
+lib/mule/19.28/lisp/its/hangul.el
+lib/mule/19.28/lisp/its/hankaku.el
+lib/mule/19.28/lisp/its/hira.el
+lib/mule/19.28/lisp/its/kanainput.el
+lib/mule/19.28/lisp/its/kata.el
+lib/mule/19.28/lisp/its/pinyin.el
+lib/mule/19.28/lisp/its/zenkaku.el
+lib/mule/19.28/lisp/its/zhuyin.el
+lib/mule/19.28/lisp/japanese.el
+lib/mule/19.28/lisp/japanese.elc
+lib/mule/19.28/lisp/jisx0201.el
+lib/mule/19.28/lisp/jka-compr.el
+lib/mule/19.28/lisp/jka-compr.elc
+lib/mule/19.28/lisp/kbd-isearch.el
+lib/mule/19.28/lisp/kermit.el
+lib/mule/19.28/lisp/kermit.elc
+lib/mule/19.28/lisp/keyboard.el
+lib/mule/19.28/lisp/keyboard.elc
+lib/mule/19.28/lisp/kinsoku.el
+lib/mule/19.28/lisp/kinsoku.elc
+lib/mule/19.28/lisp/korean.el
+lib/mule/19.28/lisp/korean.elc
+lib/mule/19.28/lisp/ledit.el
+lib/mule/19.28/lisp/ledit.elc
+lib/mule/19.28/lisp/levents.el
+lib/mule/19.28/lisp/levents.elc
+lib/mule/19.28/lisp/life.el
+lib/mule/19.28/lisp/life.elc
+lib/mule/19.28/lisp/lisp-mnt.el
+lib/mule/19.28/lisp/lisp-mnt.elc
+lib/mule/19.28/lisp/lisp-mode.el
+lib/mule/19.28/lisp/lisp-mode.elc
+lib/mule/19.28/lisp/lisp.el
+lib/mule/19.28/lisp/lisp.elc
+lib/mule/19.28/lisp/lmenu.el
+lib/mule/19.28/lisp/lmenu.elc
+lib/mule/19.28/lisp/loaddefs.el
+lib/mule/19.28/lisp/loaddefs.elc
+lib/mule/19.28/lisp/loadhist.el
+lib/mule/19.28/lisp/loadhist.elc
+lib/mule/19.28/lisp/loadup.el
+lib/mule/19.28/lisp/lpr.el
+lib/mule/19.28/lisp/lpr.elc
+lib/mule/19.28/lisp/ls-lisp.el
+lib/mule/19.28/lisp/ls-lisp.elc
+lib/mule/19.28/lisp/lselect.el
+lib/mule/19.28/lisp/lselect.elc
+lib/mule/19.28/lisp/lucid.el
+lib/mule/19.28/lisp/lucid.elc
+lib/mule/19.28/lisp/lunar.el
+lib/mule/19.28/lisp/lunar.elc
+lib/mule/19.28/lisp/m2ps-util.el
+lib/mule/19.28/lisp/m2ps-util.elc
+lib/mule/19.28/lisp/macros.el
+lib/mule/19.28/lisp/macros.elc
+lib/mule/19.28/lisp/mail-extr.el
+lib/mule/19.28/lisp/mail-extr.elc
+lib/mule/19.28/lisp/mail-hist.el
+lib/mule/19.28/lisp/mail-hist.elc
+lib/mule/19.28/lisp/mail-utils.el
+lib/mule/19.28/lisp/mail-utils.elc
+lib/mule/19.28/lisp/mailabbrev.el
+lib/mule/19.28/lisp/mailabbrev.elc
+lib/mule/19.28/lisp/mailalias.el
+lib/mule/19.28/lisp/mailalias.elc
+lib/mule/19.28/lisp/mailpost.el
+lib/mule/19.28/lisp/mailpost.elc
+lib/mule/19.28/lisp/makefile.el
+lib/mule/19.28/lisp/makefile.elc
+lib/mule/19.28/lisp/makeinfo.el
+lib/mule/19.28/lisp/makeinfo.elc
+lib/mule/19.28/lisp/makesum.el
+lib/mule/19.28/lisp/makesum.elc
+lib/mule/19.28/lisp/man.el
+lib/mule/19.28/lisp/man.elc
+lib/mule/19.28/lisp/map-ynp.el
+lib/mule/19.28/lisp/map-ynp.elc
+lib/mule/19.28/lisp/medit.el
+lib/mule/19.28/lisp/medit.elc
+lib/mule/19.28/lisp/meese.el
+lib/mule/19.28/lisp/meese.elc
+lib/mule/19.28/lisp/menu-bar.el
+lib/mule/19.28/lisp/menu-bar.elc
+lib/mule/19.28/lisp/metamail.el
+lib/mule/19.28/lisp/metamail.elc
+lib/mule/19.28/lisp/mh-comp.el
+lib/mule/19.28/lisp/mh-comp.elc
+lib/mule/19.28/lisp/mh-e.el
+lib/mule/19.28/lisp/mh-e.elc
+lib/mule/19.28/lisp/mh-funcs.el
+lib/mule/19.28/lisp/mh-funcs.elc
+lib/mule/19.28/lisp/mh-mime.el
+lib/mule/19.28/lisp/mh-mime.elc
+lib/mule/19.28/lisp/mh-pick.el
+lib/mule/19.28/lisp/mh-pick.elc
+lib/mule/19.28/lisp/mh-seq.el
+lib/mule/19.28/lisp/mh-seq.elc
+lib/mule/19.28/lisp/mh-utils.el
+lib/mule/19.28/lisp/mh-utils.elc
+lib/mule/19.28/lisp/mhspool.el
+lib/mule/19.28/lisp/mhspool.elc
+lib/mule/19.28/lisp/mim-mode.el
+lib/mule/19.28/lisp/mim-mode.elc
+lib/mule/19.28/lisp/mim-syntax.el
+lib/mule/19.28/lisp/mim-syntax.elc
+lib/mule/19.28/lisp/misc.el
+lib/mule/19.28/lisp/misc.elc
+lib/mule/19.28/lisp/mlconvert.el
+lib/mule/19.28/lisp/mlconvert.elc
+lib/mule/19.28/lisp/mldrag.el
+lib/mule/19.28/lisp/mldrag.elc
+lib/mule/19.28/lisp/mlsupport.el
+lib/mule/19.28/lisp/mlsupport.elc
+lib/mule/19.28/lisp/modula2.el
+lib/mule/19.28/lisp/modula2.elc
+lib/mule/19.28/lisp/mouse-sel.el
+lib/mule/19.28/lisp/mouse-sel.elc
+lib/mule/19.28/lisp/mouse.el
+lib/mule/19.28/lisp/mouse.elc
+lib/mule/19.28/lisp/mpuz.el
+lib/mule/19.28/lisp/mpuz.elc
+lib/mule/19.28/lisp/mule-conf.el
+lib/mule/19.28/lisp/mule-diag.el
+lib/mule/19.28/lisp/mule-diag.elc
+lib/mule/19.28/lisp/mule-init.el
+lib/mule/19.28/lisp/mule-init.el.old
+lib/mule/19.28/lisp/mule-init.elc
+lib/mule/19.28/lisp/mule-inst.el
+lib/mule/19.28/lisp/mule-util.el
+lib/mule/19.28/lisp/mule-util.elc
+lib/mule/19.28/lisp/mule.el
+lib/mule/19.28/lisp/mule.elc
+lib/mule/19.28/lisp/netunam.el
+lib/mule/19.28/lisp/netunam.elc
+lib/mule/19.28/lisp/nnspool.el
+lib/mule/19.28/lisp/nnspool.elc
+lib/mule/19.28/lisp/nntp.el
+lib/mule/19.28/lisp/nntp.elc
+lib/mule/19.28/lisp/novice.el
+lib/mule/19.28/lisp/novice.elc
+lib/mule/19.28/lisp/nroff-mode.el
+lib/mule/19.28/lisp/nroff-mode.elc
+lib/mule/19.28/lisp/options.el
+lib/mule/19.28/lisp/options.elc
+lib/mule/19.28/lisp/outline.el
+lib/mule/19.28/lisp/outline.elc
+lib/mule/19.28/lisp/page-ext.el
+lib/mule/19.28/lisp/page-ext.elc
+lib/mule/19.28/lisp/page.el
+lib/mule/19.28/lisp/page.elc
+lib/mule/19.28/lisp/paragraphs.el
+lib/mule/19.28/lisp/paragraphs.elc
+lib/mule/19.28/lisp/paren.el
+lib/mule/19.28/lisp/paren.elc
+lib/mule/19.28/lisp/pascal.el
+lib/mule/19.28/lisp/pascal.elc
+lib/mule/19.28/lisp/paths.el
+lib/mule/19.28/lisp/perl-mode.el
+lib/mule/19.28/lisp/perl-mode.elc
+lib/mule/19.28/lisp/picture.el
+lib/mule/19.28/lisp/picture.elc
+lib/mule/19.28/lisp/pp.el
+lib/mule/19.28/lisp/pp.elc
+lib/mule/19.28/lisp/profile.el
+lib/mule/19.28/lisp/profile.elc
+lib/mule/19.28/lisp/prolog.el
+lib/mule/19.28/lisp/prolog.elc
+lib/mule/19.28/lisp/quail-egg.el
+lib/mule/19.28/lisp/quail.el
+lib/mule/19.28/lisp/quail.elc
+lib/mule/19.28/lisp/quail/4c-CNS.el
+lib/mule/19.28/lisp/quail/ccdospy.el
+lib/mule/19.28/lisp/quail/ccdospy.elc
+lib/mule/19.28/lisp/quail/ctlau.el
+lib/mule/19.28/lisp/quail/ctlau.elc
+lib/mule/19.28/lisp/quail/ctlaub.el
+lib/mule/19.28/lisp/quail/ctlaub.elc
+lib/mule/19.28/lisp/quail/cyrillic.el
+lib/mule/19.28/lisp/quail/cyrillic.elc
+lib/mule/19.28/lisp/quail/ethio.el
+lib/mule/19.28/lisp/quail/ethio.elc
+lib/mule/19.28/lisp/quail/etzy.el
+lib/mule/19.28/lisp/quail/etzy.elc
+lib/mule/19.28/lisp/quail/greek.el
+lib/mule/19.28/lisp/quail/greek.elc
+lib/mule/19.28/lisp/quail/hangul.el
+lib/mule/19.28/lisp/quail/hangul.elc
+lib/mule/19.28/lisp/quail/hangul3.el
+lib/mule/19.28/lisp/quail/hangul3.elc
+lib/mule/19.28/lisp/quail/hanja-jis.el
+lib/mule/19.28/lisp/quail/hanja-jis.elc
+lib/mule/19.28/lisp/quail/hanja-ksc.el
+lib/mule/19.28/lisp/quail/hanja-ksc.elc
+lib/mule/19.28/lisp/quail/hebrew.el
+lib/mule/19.28/lisp/quail/hebrew.elc
+lib/mule/19.28/lisp/quail/hsymbol.el
+lib/mule/19.28/lisp/quail/hsymbol.elc
+lib/mule/19.28/lisp/quail/ipa.el
+lib/mule/19.28/lisp/quail/ipa.elc
+lib/mule/19.28/lisp/quail/latin.el
+lib/mule/19.28/lisp/quail/latin.elc
+lib/mule/19.28/lisp/quail/punct-b5.el
+lib/mule/19.28/lisp/quail/punct-b5.elc
+lib/mule/19.28/lisp/quail/punct.el
+lib/mule/19.28/lisp/quail/punct.elc
+lib/mule/19.28/lisp/quail/py-CNS.el
+lib/mule/19.28/lisp/quail/py-CNS.elc
+lib/mule/19.28/lisp/quail/py-b5.el
+lib/mule/19.28/lisp/quail/py-b5.elc
+lib/mule/19.28/lisp/quail/py.el
+lib/mule/19.28/lisp/quail/py.elc
+lib/mule/19.28/lisp/quail/qj-b5.el
+lib/mule/19.28/lisp/quail/qj-b5.elc
+lib/mule/19.28/lisp/quail/qj.el
+lib/mule/19.28/lisp/quail/qj.elc
+lib/mule/19.28/lisp/quail/sisheng.el
+lib/mule/19.28/lisp/quail/sisheng.elc
+lib/mule/19.28/lisp/quail/sw.el
+lib/mule/19.28/lisp/quail/sw.elc
+lib/mule/19.28/lisp/quail/tcode.el
+lib/mule/19.28/lisp/quail/tcode.elc
+lib/mule/19.28/lisp/quail/thai.el
+lib/mule/19.28/lisp/quail/thai.elc
+lib/mule/19.28/lisp/quail/tit.el
+lib/mule/19.28/lisp/quail/tit.elc
+lib/mule/19.28/lisp/quail/tonepy.el
+lib/mule/19.28/lisp/quail/tonepy.elc
+lib/mule/19.28/lisp/quail/viet.el
+lib/mule/19.28/lisp/quail/viet.elc
+lib/mule/19.28/lisp/quail/zozy.el
+lib/mule/19.28/lisp/quail/zozy.elc
+lib/mule/19.28/lisp/rcompile.el
+lib/mule/19.28/lisp/rcompile.elc
+lib/mule/19.28/lisp/rect.el
+lib/mule/19.28/lisp/rect.elc
+lib/mule/19.28/lisp/refbib.el
+lib/mule/19.28/lisp/refbib.elc
+lib/mule/19.28/lisp/refer.el
+lib/mule/19.28/lisp/refer.elc
+lib/mule/19.28/lisp/regi.el
+lib/mule/19.28/lisp/regi.elc
+lib/mule/19.28/lisp/register.el
+lib/mule/19.28/lisp/register.elc
+lib/mule/19.28/lisp/replace.el
+lib/mule/19.28/lisp/replace.elc
+lib/mule/19.28/lisp/reporter.el
+lib/mule/19.28/lisp/reporter.elc
+lib/mule/19.28/lisp/reposition.el
+lib/mule/19.28/lisp/reposition.elc
+lib/mule/19.28/lisp/resume.el
+lib/mule/19.28/lisp/resume.elc
+lib/mule/19.28/lisp/rfc822.el
+lib/mule/19.28/lisp/rfc822.elc
+lib/mule/19.28/lisp/ring.el
+lib/mule/19.28/lisp/ring.elc
+lib/mule/19.28/lisp/rlogin.el
+lib/mule/19.28/lisp/rlogin.elc
+lib/mule/19.28/lisp/rmail.el
+lib/mule/19.28/lisp/rmail.elc
+lib/mule/19.28/lisp/rmailedit.el
+lib/mule/19.28/lisp/rmailedit.elc
+lib/mule/19.28/lisp/rmailkwd.el
+lib/mule/19.28/lisp/rmailkwd.elc
+lib/mule/19.28/lisp/rmailmsc.el
+lib/mule/19.28/lisp/rmailmsc.elc
+lib/mule/19.28/lisp/rmailout.el
+lib/mule/19.28/lisp/rmailout.elc
+lib/mule/19.28/lisp/rmailsort.el
+lib/mule/19.28/lisp/rmailsort.elc
+lib/mule/19.28/lisp/rmailsum.el
+lib/mule/19.28/lisp/rmailsum.elc
+lib/mule/19.28/lisp/rnews.el
+lib/mule/19.28/lisp/rnews.elc
+lib/mule/19.28/lisp/rnewspost.el
+lib/mule/19.28/lisp/rnewspost.elc
+lib/mule/19.28/lisp/rot13.el
+lib/mule/19.28/lisp/rot13.elc
+lib/mule/19.28/lisp/rsz-mini.el
+lib/mule/19.28/lisp/rsz-mini.elc
+lib/mule/19.28/lisp/s-region.el
+lib/mule/19.28/lisp/s-region.elc
+lib/mule/19.28/lisp/saveplace.el
+lib/mule/19.28/lisp/saveplace.elc
+lib/mule/19.28/lisp/sc.el
+lib/mule/19.28/lisp/scheme.el
+lib/mule/19.28/lisp/scheme.elc
+lib/mule/19.28/lisp/scribe.el
+lib/mule/19.28/lisp/scribe.elc
+lib/mule/19.28/lisp/scroll-bar.el
+lib/mule/19.28/lisp/scroll-bar.elc
+lib/mule/19.28/lisp/select.el
+lib/mule/19.28/lisp/select.elc
+lib/mule/19.28/lisp/sendmail.el
+lib/mule/19.28/lisp/sendmail.elc
+lib/mule/19.28/lisp/server.el
+lib/mule/19.28/lisp/server.elc
+lib/mule/19.28/lisp/sgml-mode.el
+lib/mule/19.28/lisp/sgml-mode.elc
+lib/mule/19.28/lisp/sh-script.el
+lib/mule/19.28/lisp/sh-script.elc
+lib/mule/19.28/lisp/shadowfile.el
+lib/mule/19.28/lisp/shadowfile.elc
+lib/mule/19.28/lisp/shell.el
+lib/mule/19.28/lisp/shell.elc
+lib/mule/19.28/lisp/simple.el
+lib/mule/19.28/lisp/simple.elc
+lib/mule/19.28/lisp/simula.el
+lib/mule/19.28/lisp/simula.elc
+lib/mule/19.28/lisp/sj3-client.el
+lib/mule/19.28/lisp/sj3-client.elc
+lib/mule/19.28/lisp/sj3-egg.el
+lib/mule/19.28/lisp/sj3-egg.elc
+lib/mule/19.28/lisp/skeleton.el
+lib/mule/19.28/lisp/skeleton.elc
+lib/mule/19.28/lisp/solar.el
+lib/mule/19.28/lisp/solar.elc
+lib/mule/19.28/lisp/sort.el
+lib/mule/19.28/lisp/sort.elc
+lib/mule/19.28/lisp/soundex.el
+lib/mule/19.28/lisp/soundex.elc
+lib/mule/19.28/lisp/spell.el
+lib/mule/19.28/lisp/spell.elc
+lib/mule/19.28/lisp/spook.el
+lib/mule/19.28/lisp/spook.elc
+lib/mule/19.28/lisp/startup.el
+lib/mule/19.28/lisp/startup.el.orig
+lib/mule/19.28/lisp/startup.elc
+lib/mule/19.28/lisp/studly.el
+lib/mule/19.28/lisp/studly.elc
+lib/mule/19.28/lisp/subr.el
+lib/mule/19.28/lisp/subr.elc
+lib/mule/19.28/lisp/sun-curs.el
+lib/mule/19.28/lisp/sun-fns.el
+lib/mule/19.28/lisp/supercite.el
+lib/mule/19.28/lisp/supercite.elc
+lib/mule/19.28/lisp/swedish.el
+lib/mule/19.28/lisp/swedish.elc
+lib/mule/19.28/lisp/tabify.el
+lib/mule/19.28/lisp/tabify.elc
+lib/mule/19.28/lisp/tar-mode.el
+lib/mule/19.28/lisp/tar-mode.elc
+lib/mule/19.28/lisp/tcl-mode.el
+lib/mule/19.28/lisp/tcl-mode.elc
+lib/mule/19.28/lisp/tcp.el
+lib/mule/19.28/lisp/tcp.elc
+lib/mule/19.28/lisp/telnet.el
+lib/mule/19.28/lisp/telnet.elc
+lib/mule/19.28/lisp/tempo.el
+lib/mule/19.28/lisp/tempo.elc
+lib/mule/19.28/lisp/term-nasty.el
+lib/mule/19.28/lisp/term/AT386.el
+lib/mule/19.28/lisp/term/README
+lib/mule/19.28/lisp/term/apollo.el
+lib/mule/19.28/lisp/term/apollo.elc
+lib/mule/19.28/lisp/term/bg-mouse.el
+lib/mule/19.28/lisp/term/bg-mouse.elc
+lib/mule/19.28/lisp/term/bobcat.el
+lib/mule/19.28/lisp/term/f-term.el
+lib/mule/19.28/lisp/term/ibmpc.el
+lib/mule/19.28/lisp/term/internal.el
+lib/mule/19.28/lisp/term/keyswap.el
+lib/mule/19.28/lisp/term/lk201.el
+lib/mule/19.28/lisp/term/news.el
+lib/mule/19.28/lisp/term/news.elc
+lib/mule/19.28/lisp/term/sun-curs.el
+lib/mule/19.28/lisp/term/sun-fns.el
+lib/mule/19.28/lisp/term/sun-mouse.el
+lib/mule/19.28/lisp/term/sun-mouse.elc
+lib/mule/19.28/lisp/term/sun.el
+lib/mule/19.28/lisp/term/sun.elc
+lib/mule/19.28/lisp/term/sup-mouse.el
+lib/mule/19.28/lisp/term/sup-mouse.elc
+lib/mule/19.28/lisp/term/tvi970.el
+lib/mule/19.28/lisp/term/tvi970.elc
+lib/mule/19.28/lisp/term/vt100-led.el
+lib/mule/19.28/lisp/term/vt100-led.elc
+lib/mule/19.28/lisp/term/vt100.el
+lib/mule/19.28/lisp/term/vt100.elc
+lib/mule/19.28/lisp/term/vt102.el
+lib/mule/19.28/lisp/term/vt125.el
+lib/mule/19.28/lisp/term/vt200.el
+lib/mule/19.28/lisp/term/vt200.elc
+lib/mule/19.28/lisp/term/vt201.el
+lib/mule/19.28/lisp/term/vt220.el
+lib/mule/19.28/lisp/term/vt240.el
+lib/mule/19.28/lisp/term/vt300.el
+lib/mule/19.28/lisp/term/vt320.el
+lib/mule/19.28/lisp/term/vt400.el
+lib/mule/19.28/lisp/term/vt420.el
+lib/mule/19.28/lisp/term/wyse50.el
+lib/mule/19.28/lisp/term/wyse50.elc
+lib/mule/19.28/lisp/term/x-win.el
+lib/mule/19.28/lisp/term/x-win.elc
+lib/mule/19.28/lisp/terminal.el
+lib/mule/19.28/lisp/terminal.elc
+lib/mule/19.28/lisp/tex-mode.el
+lib/mule/19.28/lisp/tex-mode.elc
+lib/mule/19.28/lisp/texinfmt.el
+lib/mule/19.28/lisp/texinfmt.elc
+lib/mule/19.28/lisp/texinfo.el
+lib/mule/19.28/lisp/texinfo.elc
+lib/mule/19.28/lisp/texnfo-upd.el
+lib/mule/19.28/lisp/texnfo-upd.elc
+lib/mule/19.28/lisp/text-mode.el
+lib/mule/19.28/lisp/text-mode.elc
+lib/mule/19.28/lisp/thai.el
+lib/mule/19.28/lisp/thai.elc
+lib/mule/19.28/lisp/thingatpt.el
+lib/mule/19.28/lisp/thingatpt.elc
+lib/mule/19.28/lisp/time-stamp.el
+lib/mule/19.28/lisp/time-stamp.elc
+lib/mule/19.28/lisp/time.el
+lib/mule/19.28/lisp/time.elc
+lib/mule/19.28/lisp/timer.el
+lib/mule/19.28/lisp/timer.elc
+lib/mule/19.28/lisp/timezone.el
+lib/mule/19.28/lisp/timezone.elc
+lib/mule/19.28/lisp/tpu-doc.el
+lib/mule/19.28/lisp/tpu-edt.el
+lib/mule/19.28/lisp/tpu-edt.elc
+lib/mule/19.28/lisp/tpu-extras.el
+lib/mule/19.28/lisp/tpu-extras.elc
+lib/mule/19.28/lisp/tpu-mapper.el
+lib/mule/19.28/lisp/tpu-mapper.elc
+lib/mule/19.28/lisp/tq.el
+lib/mule/19.28/lisp/tq.elc
+lib/mule/19.28/lisp/trace.el
+lib/mule/19.28/lisp/trace.elc
+lib/mule/19.28/lisp/trex.el
+lib/mule/19.28/lisp/trex.elc
+lib/mule/19.28/lisp/two-column.el
+lib/mule/19.28/lisp/two-column.elc
+lib/mule/19.28/lisp/uncompress.el
+lib/mule/19.28/lisp/uncompress.elc
+lib/mule/19.28/lisp/underline.el
+lib/mule/19.28/lisp/underline.elc
+lib/mule/19.28/lisp/undigest.el
+lib/mule/19.28/lisp/undigest.elc
+lib/mule/19.28/lisp/unrmail.el
+lib/mule/19.28/lisp/unrmail.elc
+lib/mule/19.28/lisp/unused.el
+lib/mule/19.28/lisp/unused.elc
+lib/mule/19.28/lisp/upd-copyr.el
+lib/mule/19.28/lisp/upd-copyr.elc
+lib/mule/19.28/lisp/userlock.el
+lib/mule/19.28/lisp/userlock.elc
+lib/mule/19.28/lisp/vc-hooks.el
+lib/mule/19.28/lisp/vc-hooks.elc
+lib/mule/19.28/lisp/vc.el
+lib/mule/19.28/lisp/vc.elc
+lib/mule/19.28/lisp/version.el
+lib/mule/19.28/lisp/vi.el
+lib/mule/19.28/lisp/vi.elc
+lib/mule/19.28/lisp/viet.el
+lib/mule/19.28/lisp/viet.elc
+lib/mule/19.28/lisp/view.el
+lib/mule/19.28/lisp/view.elc
+lib/mule/19.28/lisp/vip.el
+lib/mule/19.28/lisp/vip.elc
+lib/mule/19.28/lisp/visual.el
+lib/mule/19.28/lisp/visual.elc
+lib/mule/19.28/lisp/vms-patch.el
+lib/mule/19.28/lisp/vms-patch.elc
+lib/mule/19.28/lisp/vms-pmail.el
+lib/mule/19.28/lisp/vms-pmail.elc
+lib/mule/19.28/lisp/vmsproc.el
+lib/mule/19.28/lisp/vmsproc.elc
+lib/mule/19.28/lisp/vmsx.el
+lib/mule/19.28/lisp/vmsx.elc
+lib/mule/19.28/lisp/vt-control.el
+lib/mule/19.28/lisp/vt100-led.el
+lib/mule/19.28/lisp/vt100-led.elc
+lib/mule/19.28/lisp/window.el
+lib/mule/19.28/lisp/window.elc
+lib/mule/19.28/lisp/wnn-client.el
+lib/mule/19.28/lisp/wnn-egg.el
+lib/mule/19.28/lisp/wnn-egg.elc
+lib/mule/19.28/lisp/ws-mode.el
+lib/mule/19.28/lisp/ws-mode.elc
+lib/mule/19.28/lisp/x-menu.el
+lib/mule/19.28/lisp/x-menu.elc
+lib/mule/19.28/lisp/xscheme.el
+lib/mule/19.28/lisp/xscheme.elc
+lib/mule/19.28/lisp/yow.el
+lib/mule/19.28/lisp/yow.elc
+@comment f=%D/lib/mule/lock ; [ ! -d $f ] && mkdir $f && chmod 1777 $f
+@exec f=%D/lib/mule/lock ; [ ! -d $f ] && mkdir $f
+@unexec f=%D/lib/mule/lock ; [ -d $f ] && rm -rf $f
+@exec f=%D/lib/mule/site-lisp ; [ ! -d $f ] && mkdir $f
+@unexec f=%D/lib/mule/site-lisp ; [ -d $f ] && rmdir $f
+@dirrm lib/mule/19.28/lisp/its
+@dirrm lib/mule/19.28/lisp/quail
+@dirrm lib/mule/19.28/lisp/term
+@dirrm lib/mule/19.28/lisp
+@dirrm lib/mule/19.28/etc
+@dirrm lib/mule/19.28/${MACHINE_ARCH}--netbsd
+@dirrm lib/mule/19.28
+@dirrm lib/mule