[gcl] Update to 20130511 snapshot for bug fixes. Add -largefile patch.
Jerry James
jjames at fedoraproject.org
Mon May 13 22:58:02 UTC 2013
commit e1ab74dc77e316fa23804f2fd691d522f0e838c1
Author: Jerry James <jamesjer at betterlinux.com>
Date: Mon May 13 16:57:31 2013 -0600
Update to 20130511 snapshot for bug fixes.
Add -largefile patch.
gcl-2.6.8-alloca.patch | 59 +-
gcl-2.6.8-asm-signal-h.patch | 8 +-
gcl-2.6.8-extension.patch | 65 +-
gcl-2.6.8-infrastructure.patch |14135 ++++++----------------------------------
gcl-2.6.8-largefile.patch | 926 +++
gcl-2.6.8-texinfo.patch | 373 +-
gcl-2.6.8-unrandomize.patch | 14 +-
gcl.spec | 16 +-
8 files changed, 2853 insertions(+), 12743 deletions(-)
---
diff --git a/gcl-2.6.8-alloca.patch b/gcl-2.6.8-alloca.patch
index d75e3f4..b09f84c 100644
--- a/gcl-2.6.8-alloca.patch
+++ b/gcl-2.6.8-alloca.patch
@@ -35,9 +35,9 @@
# dlopen etc
# idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
---- ./configure.orig 2012-07-26 09:41:54.001037163 -0600
-+++ ./configure 2012-07-26 09:47:26.043518943 -0600
-@@ -609,6 +609,7 @@ O3FLAGS
+--- ./configure.orig 2013-05-10 09:55:18.206122299 -0600
++++ ./configure 2013-05-10 10:01:04.970561031 -0600
+@@ -629,6 +629,7 @@ O3FLAGS
NIFLAGS
FINAL_CFLAGS
BROKEN_O4_OPT
@@ -45,7 +45,7 @@
NOTIFY
TCL_LIBS
TCL_DL_LIBS
-@@ -2045,6 +2046,60 @@ rm -f conftest.val
+@@ -2068,6 +2069,60 @@ rm -f conftest.val
as_fn_set_status $ac_retval
} # ac_fn_c_compute_int
@@ -106,7 +106,7 @@
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-@@ -7966,81 +8021,205 @@ NOTIFY=$enable_notify
+@@ -7988,81 +8043,202 @@ NOTIFY=$enable_notify
# alloca
@@ -306,23 +306,20 @@
+/* end confdefs.h. */
+$ac_includes_default
+int
-+find_stack_direction ()
++find_stack_direction (int *addr, int depth)
+{
-+ static char *addr = 0;
-+ auto char dummy;
-+ if (addr == 0)
-+ {
-+ addr = &dummy;
-+ return find_stack_direction ();
-+ }
-+ else
-+ return (&dummy > addr) ? 1 : -1;
++ int dir, dummy = 0;
++ if (! addr)
++ addr = &dummy;
++ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
++ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
++ return dir + dummy;
+}
+
+int
-+main ()
++main (int argc, char **argv)
+{
-+ return find_stack_direction () < 0;
++ return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
@@ -347,12 +344,10 @@
# dlopen etc
--- ./h/gclincl.h.in.orig 2012-01-16 13:08:04.000000000 -0700
-+++ ./h/gclincl.h.in 2012-07-26 09:46:52.541571229 -0600
-@@ -54,11 +54,10 @@ SGC is enabled. */
- #undef HAVE_ALLOCA
- #endif
++++ ./h/gclincl.h.in 2013-05-10 10:06:39.000000000 -0600
+@@ -56,9 +56,9 @@ SGC is enabled. */
+
--
/* define if need alloca.h */
-#undef NEED_ALLOCA_H
+#undef HAVE_ALLOCA_H
@@ -362,7 +357,7 @@
#include <alloca.h>
#endif
-@@ -261,6 +260,21 @@ SGC is enabled. */
+@@ -261,6 +261,21 @@ SGC is enabled. */
#undef HAVE_OUTPUT_BFD
#undef HAVE_BUILTIN_CLEAR_CACHE
@@ -384,7 +379,17 @@
/* Define to 1 if you have the <asm/sigcontext.h> header file. */
#undef HAVE_ASM_SIGCONTEXT_H
-@@ -366,8 +380,19 @@ SGC is enabled. */
+@@ -312,9 +327,6 @@ SGC is enabled. */
+ /* Define to 1 if you have the <readline/readline.h> header file. */
+ #undef HAVE_READLINE_READLINE_H
+
+-/* Define to 1 if you have the <rpc/rpc.h> header file. */
+-#undef HAVE_RPC_RPC_H
+-
+ /* Define to 1 if you have the <stdint.h> header file. */
+ #undef HAVE_STDINT_H
+
+@@ -366,8 +378,19 @@ SGC is enabled. */
/* The size of `long', as computed by sizeof. */
#undef SIZEOF_LONG
@@ -406,11 +411,9 @@
+#undef size_t
--- ./acconfig.h.orig 2012-01-16 13:07:59.000000000 -0700
+++ ./acconfig.h 2012-07-26 09:46:52.541571229 -0600
-@@ -53,11 +53,10 @@ SGC is enabled. */
- #undef HAVE_ALLOCA
- #endif
+@@ -55,9 +55,9 @@ SGC is enabled. */
+
--
/* define if need alloca.h */
-#undef NEED_ALLOCA_H
+#undef HAVE_ALLOCA_H
diff --git a/gcl-2.6.8-asm-signal-h.patch b/gcl-2.6.8-asm-signal-h.patch
index 83f3161..39bf418 100644
--- a/gcl-2.6.8-asm-signal-h.patch
+++ b/gcl-2.6.8-asm-signal-h.patch
@@ -17,9 +17,9 @@
#include <asm/signal.h>
#endif
]],
---- ./configure.orig 2012-07-26 09:52:50.676012289 -0600
-+++ ./configure 2012-07-26 09:56:29.994669997 -0600
-@@ -8314,7 +8314,8 @@ done
+--- ./configure.orig 2013-05-10 10:19:55.934751565 -0600
++++ ./configure 2013-05-10 10:23:17.965432496 -0600
+@@ -8335,7 +8335,8 @@ done
for ac_header in asm/signal.h
do :
@@ -29,7 +29,7 @@
if test "x$ac_cv_header_asm_signal_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_ASM_SIGNAL_H 1
-@@ -8367,6 +8368,7 @@ $as_echo_n "checking for sigcontext... "
+@@ -8388,6 +8389,7 @@ $as_echo_n "checking for sigcontext... "
#include <asm/sigcontext.h>
#endif
#ifdef HAVE_ASM_SIGNAL_H
diff --git a/gcl-2.6.8-extension.patch b/gcl-2.6.8-extension.patch
index c0b9864..d32971e 100644
--- a/gcl-2.6.8-extension.patch
+++ b/gcl-2.6.8-extension.patch
@@ -24,9 +24,9 @@
#include <math.h>
]],[[
float f;
---- ./configure.orig 2012-07-26 09:47:26.043518943 -0600
-+++ ./configure 2012-07-26 09:50:32.725227589 -0600
-@@ -654,9 +654,9 @@ GMPDIR
+--- ./configure.orig 2013-05-10 10:01:04.970561031 -0600
++++ ./configure 2013-05-10 10:16:24.215085642 -0600
+@@ -674,9 +674,9 @@ GMPDIR
GMP
MAKEINFO
HAVE_MALLOC_ZONE_MEMALIGN
@@ -37,7 +37,7 @@
CPP
OBJEXT
EXEEXT
-@@ -1585,48 +1585,6 @@ fi
+@@ -1603,48 +1603,6 @@ fi
} # ac_fn_c_try_cpp
@@ -86,7 +86,7 @@
# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-@@ -1714,6 +1672,48 @@ fi
+@@ -1732,6 +1690,48 @@ fi
} # ac_fn_c_check_header_mongrel
@@ -135,7 +135,7 @@
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
-@@ -3909,6 +3909,1005 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS con
+@@ -3931,6 +3931,1004 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS con
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
@@ -294,7 +294,7 @@
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
++ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
@@ -360,7 +360,7 @@
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
@@ -567,8 +567,8 @@
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
-+# define __EXTENSIONS__ 1
-+ $ac_includes_default
++# define __EXTENSIONS__ 1
++ $ac_includes_default
+int
+main ()
+{
@@ -620,7 +620,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
@@ -660,7 +660,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
@@ -713,7 +713,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
@@ -754,7 +754,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
@@ -812,7 +812,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
@@ -856,7 +856,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
@@ -1052,8 +1052,7 @@
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
++struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -1141,7 +1140,7 @@
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-@@ -4069,8 +5068,7 @@ if test "$GCC" = "yes" ; then
+@@ -4091,8 +5089,7 @@ if test "$GCC" = "yes" ; then
$as_echo_n "checking for CFLAG $TMPF... " >&6; }
CFLAGS_ORI=$CFLAGS
CFLAGS="$CFLAGS $TMPF"
@@ -1151,7 +1150,7 @@
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
-@@ -4356,267 +5354,7 @@ fi
+@@ -4378,267 +5375,7 @@ fi
case $use in
*macosx)
@@ -1172,7 +1171,7 @@
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
@@ -1238,7 +1237,7 @@
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
@@ -1420,7 +1419,7 @@
if test "x$ac_cv_header_malloc_malloc_h" = xyes; then :
else
-@@ -6944,7 +7682,6 @@ else
+@@ -6966,7 +7703,6 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1428,7 +1427,7 @@
#include <math.h>
int
-@@ -7018,7 +7755,6 @@ else
+@@ -7040,7 +7776,6 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1436,8 +1435,8 @@
#include <math.h>
int
---- ./h/gclincl.h.in.orig 2012-07-26 09:46:52.541571229 -0600
-+++ ./h/gclincl.h.in 2012-07-26 09:50:25.736238496 -0600
+--- ./h/gclincl.h.in.orig 2013-05-10 10:06:39.000000000 -0600
++++ ./h/gclincl.h.in 2013-05-10 10:16:24.000000000 -0600
@@ -1,4 +1,7 @@
/* h/gclincl.h.in. Generated from configure.in by autoheader. */
+/* Whether compiling on a glibc-based system */
@@ -1446,7 +1445,7 @@
/* define where the heap could begin. Normally should
be the smallest value returned by sbrk(). Underestimating
by 10-20 megabytes is not a problem. */
-@@ -158,7 +161,6 @@ SGC is enabled. */
+@@ -159,7 +162,6 @@ SGC is enabled. */
#ifdef IN_NUM_CO
#ifdef HAVE_ISNORMAL
@@ -1454,7 +1453,7 @@
#include <math.h>
#define ISNORMAL(a) isnormal(a)
#else
-@@ -179,7 +181,6 @@ SGC is enabled. */
+@@ -180,7 +182,6 @@ SGC is enabled. */
#ifdef NEED_ISFINITE
#ifdef HAVE_ISFINITE
@@ -1462,7 +1461,7 @@
#include <math.h>
#define ISFINITE(a) isfinite(a)
#else
-@@ -394,5 +395,37 @@ SGC is enabled. */
+@@ -392,5 +393,37 @@ SGC is enabled. */
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -1500,8 +1499,8 @@
+
/* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t
---- ./acconfig.h.orig 2012-07-26 09:46:52.541571229 -0600
-+++ ./acconfig.h 2012-07-26 09:50:25.737238495 -0600
+--- ./acconfig.h.orig 2013-05-10 10:06:32.124044034 -0600
++++ ./acconfig.h 2013-05-10 10:16:16.267098177 -0600
@@ -1,3 +1,6 @@
+/* Whether compiling on a glibc-based system */
+#undef _GNU_SOURCE
@@ -1509,7 +1508,7 @@
/* define where the heap could begin. Normally should
be the smallest value returned by sbrk(). Underestimating
by 10-20 megabytes is not a problem. */
-@@ -157,7 +160,6 @@ SGC is enabled. */
+@@ -158,7 +161,6 @@ SGC is enabled. */
#ifdef IN_NUM_CO
#ifdef HAVE_ISNORMAL
@@ -1517,7 +1516,7 @@
#include <math.h>
#define ISNORMAL(a) isnormal(a)
#else
-@@ -178,7 +180,6 @@ SGC is enabled. */
+@@ -179,7 +181,6 @@ SGC is enabled. */
#ifdef NEED_ISFINITE
#ifdef HAVE_ISFINITE
diff --git a/gcl-2.6.8-infrastructure.patch b/gcl-2.6.8-infrastructure.patch
index d00bea1..b99743b 100644
--- a/gcl-2.6.8-infrastructure.patch
+++ b/gcl-2.6.8-infrastructure.patch
@@ -1,5 +1,1288 @@
+--- ./config.guess.orig 2010-08-26 13:04:34.000000000 -0600
++++ ./config.guess 2013-05-10 08:47:10.074104210 -0600
+@@ -1,14 +1,12 @@
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-# Free Software Foundation, Inc.
++# Copyright 1992-2013 Free Software Foundation, Inc.
+
+-timestamp='2009-12-30'
++timestamp='2013-04-24'
+
+ # This file 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 of the License, or
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful, but
+@@ -17,26 +15,22 @@
+ # 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., 51 Franklin Street - Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
+-
+-
+-# Originally written by Per Bothner. Please send patches (context
+-# diff format) to <config-patches at gnu.org> and include a ChangeLog
+-# entry.
++# the same distribution terms that you use for the rest of that
++# program. This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+ #
+-# This script attempts to guess a canonical system name similar to
+-# config.sub. If it succeeds, it prints the system name on stdout, and
+-# exits with 0. Otherwise, it exits with 1.
++# Originally written by Per Bothner.
+ #
+ # You can get the latest version of this script from:
+ # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++#
++# Please send patches with a ChangeLog entry to config-patches at gnu.org.
++
+
+ me=`echo "$0" | sed -e 's,.*/,,'`
+
+@@ -56,9 +50,7 @@
+ GNU config.guess ($timestamp)
+
+ Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+-Software Foundation, Inc.
++Copyright 1992-2013 Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -145,7 +137,7 @@
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+@@ -181,7 +173,7 @@
+ fi
+ ;;
+ *)
+- os=netbsd
++ os=netbsd
+ ;;
+ esac
+ # The OS release
+@@ -202,6 +194,10 @@
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
++ *:Bitrig:*:*)
++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
++ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+@@ -224,7 +220,7 @@
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+@@ -270,7 +266,10 @@
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+- exit ;;
++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
++ exitcode=$?
++ trap '' 0
++ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+@@ -296,12 +295,12 @@
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+- echo powerpc-ibm-os400
++ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+- arm:riscos:*:*|arm:RISCOS:*:*)
++ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+@@ -395,23 +394,23 @@
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+- echo m68k-atari-mint${UNAME_RELEASE}
++ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+- exit ;;
++ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+- echo m68k-atari-mint${UNAME_RELEASE}
++ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+- echo m68k-milan-mint${UNAME_RELEASE}
+- exit ;;
++ echo m68k-milan-mint${UNAME_RELEASE}
++ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+- echo m68k-hades-mint${UNAME_RELEASE}
+- exit ;;
++ echo m68k-hades-mint${UNAME_RELEASE}
++ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+- echo m68k-unknown-mint${UNAME_RELEASE}
+- exit ;;
++ echo m68k-unknown-mint${UNAME_RELEASE}
++ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+@@ -481,8 +480,8 @@
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+- # DG/UX returns AViiON for all architectures
+- UNAME_PROCESSOR=`/usr/bin/uname -p`
++ # DG/UX returns AViiON for all architectures
++ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+@@ -495,7 +494,7 @@
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+- exit ;;
++ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+@@ -552,7 +551,7 @@
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+- *:AIX:*:[456])
++ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+@@ -595,52 +594,52 @@
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+- case "${sc_cpu_version}" in
+- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+- 532) # CPU_PA_RISC2_0
+- case "${sc_kernel_bits}" in
+- 32) HP_ARCH="hppa2.0n" ;;
+- 64) HP_ARCH="hppa2.0w" ;;
++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
++ case "${sc_cpu_version}" in
++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
++ 532) # CPU_PA_RISC2_0
++ case "${sc_kernel_bits}" in
++ 32) HP_ARCH="hppa2.0n" ;;
++ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+- esac ;;
+- esac
++ esac ;;
++ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+- sed 's/^ //' << EOF >$dummy.c
++ sed 's/^ //' << EOF >$dummy.c
+
+- #define _HPUX_SOURCE
+- #include <stdlib.h>
+- #include <unistd.h>
++ #define _HPUX_SOURCE
++ #include <stdlib.h>
++ #include <unistd.h>
+
+- int main ()
+- {
+- #if defined(_SC_KERNEL_BITS)
+- long bits = sysconf(_SC_KERNEL_BITS);
+- #endif
+- long cpu = sysconf (_SC_CPU_VERSION);
++ int main ()
++ {
++ #if defined(_SC_KERNEL_BITS)
++ long bits = sysconf(_SC_KERNEL_BITS);
++ #endif
++ long cpu = sysconf (_SC_CPU_VERSION);
+
+- switch (cpu)
+- {
+- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+- case CPU_PA_RISC2_0:
+- #if defined(_SC_KERNEL_BITS)
+- switch (bits)
+- {
+- case 64: puts ("hppa2.0w"); break;
+- case 32: puts ("hppa2.0n"); break;
+- default: puts ("hppa2.0"); break;
+- } break;
+- #else /* !defined(_SC_KERNEL_BITS) */
+- puts ("hppa2.0"); break;
+- #endif
+- default: puts ("hppa1.0"); break;
+- }
+- exit (0);
+- }
++ switch (cpu)
++ {
++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
++ case CPU_PA_RISC2_0:
++ #if defined(_SC_KERNEL_BITS)
++ switch (bits)
++ {
++ case 64: puts ("hppa2.0w"); break;
++ case 32: puts ("hppa2.0n"); break;
++ default: puts ("hppa2.0"); break;
++ } break;
++ #else /* !defined(_SC_KERNEL_BITS) */
++ puts ("hppa2.0"); break;
++ #endif
++ default: puts ("hppa1.0"); break;
++ }
++ exit (0);
++ }
+ EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+@@ -731,22 +730,22 @@
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+- exit ;;
++ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+- exit ;;
++ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+- exit ;;
++ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+- exit ;;
++ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+- exit ;;
++ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+@@ -770,14 +769,14 @@
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+- exit ;;
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+@@ -789,30 +788,35 @@
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+- case ${UNAME_MACHINE} in
+- pc98)
+- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ UNAME_PROCESSOR=`/usr/bin/uname -p`
++ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
++ *:MINGW64*:*)
++ echo ${UNAME_MACHINE}-pc-mingw64
++ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
++ i*:MSYS*:*)
++ echo ${UNAME_MACHINE}-pc-msys
++ exit ;;
+ i*:windows32*:*)
+- # uname -m includes "-pc" on this system.
+- echo ${UNAME_MACHINE}-mingw32
++ # uname -m includes "-pc" on this system.
++ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+- case ${UNAME_MACHINE} in
++ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+@@ -858,6 +862,13 @@
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
++ aarch64:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ aarch64_be:Linux:*:*)
++ UNAME_MACHINE=aarch64_be
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+@@ -867,11 +878,14 @@
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+- esac
++ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
++ arc:Linux:*:* | arceb:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+@@ -879,20 +893,29 @@
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ARM_PCS_VFP
++ then
++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++ else
++ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
++ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+- echo cris-axis-linux-gnu
++ echo ${UNAME_MACHINE}-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+- echo crisv32-axis-linux-gnu
++ echo ${UNAME_MACHINE}-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+- echo frv-unknown-linux-gnu
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ hexagon:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+@@ -901,6 +924,11 @@
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
++ #else
++ #include <features.h>
++ #ifdef __UCLIBC__
++ LIBC=uclibc
++ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+@@ -933,8 +961,11 @@
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
++ or1k:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
+ or32:Linux:*:*)
+- echo or32-unknown-linux-gnu
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+@@ -960,7 +991,7 @@
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+@@ -968,14 +999,19 @@
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
++ tile*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+- echo x86_64-unknown-linux-gnu
++ LIBC=gnu
++ test -r /lib/libc.so && od -An -S13 /lib/libc.so | grep -q __uClibc_main && LIBC=uclibc
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+- echo ${UNAME_MACHINE}-unknown-linux-gnu
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+@@ -984,11 +1020,11 @@
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+- # Unixware is an offshoot of SVR4, but it has its own version
+- # number series starting with 2...
+- # I am not positive that other SVR4 systems won't match this,
++ # Unixware is an offshoot of SVR4, but it has its own version
++ # number series starting with 2...
++ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+- # Use sysv4.2uw... so that sysv4* matches it.
++ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+@@ -1020,7 +1056,7 @@
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+- # UnixWare 7.x, OpenUNIX and OpenServer 6.
++ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+@@ -1048,13 +1084,13 @@
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+- # uname -m prints for DJGPP always 'pc', but it prints nothing about
+- # the processor, so we play safe by assuming i586.
++ # uname -m prints for DJGPP always 'pc', but it prints nothing about
++ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+- exit ;;
++ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+@@ -1089,8 +1125,8 @@
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+- && { echo i486-ncr-sysv4; exit; } ;;
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+@@ -1133,10 +1169,10 @@
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+- # says <Richard.M.Bartel at ccMail.Census.GOV>
+- echo i586-unisys-sysv4
+- exit ;;
++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
++ # says <Richard.M.Bartel at ccMail.Census.GOV>
++ echo i586-unisys-sysv4
++ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes at openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+@@ -1162,11 +1198,11 @@
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+- echo mips-nec-sysv${UNAME_RELEASE}
++ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+- echo mips-unknown-sysv${UNAME_RELEASE}
++ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+- exit ;;
++ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+@@ -1179,6 +1215,9 @@
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
++ x86_64:Haiku:*:*)
++ echo x86_64-unknown-haiku
++ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+@@ -1231,7 +1270,10 @@
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+- NSE-?:NONSTOP_KERNEL:*:*)
++ NEO-?:NONSTOP_KERNEL:*:*)
++ echo neo-tandem-nsk${UNAME_RELEASE}
++ exit ;;
++ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+@@ -1276,13 +1318,13 @@
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+- echo mips-sei-seiux${UNAME_RELEASE}
++ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+- UNAME_MACHINE=`(uname -p) 2>/dev/null`
++ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+@@ -1300,11 +1342,11 @@
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
++ x86_64:VMkernel:*:*)
++ echo ${UNAME_MACHINE}-unknown-esx
++ exit ;;
+ esac
+
+-#echo '(No uname command or uname output not recognized.)' 1>&2
+-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+-
+ eval $set_cc_for_build
+ cat >$dummy.c <<EOF
+ #ifdef _SEQUENT_
+@@ -1322,11 +1364,11 @@
+ #include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+ #ifdef NEWSOS4
+- "4"
++ "4"
+ #else
+- ""
++ ""
+ #endif
+- ); exit (0);
++ ); exit (0);
+ #endif
+ #endif
+
+--- ./config.sub.orig 2010-08-26 13:04:34.000000000 -0600
++++ ./config.sub 2013-05-10 08:48:44.904007408 -0600
+@@ -1,38 +1,31 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-# Free Software Foundation, Inc.
++# Copyright 1992-2013 Free Software Foundation, Inc.
+
+-timestamp='2010-01-22'
++timestamp='2013-04-24'
+
+-# This file is (in principle) common to ALL GNU software.
+-# The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine. It does not imply ALL GNU software can.
+-#
+-# This file 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 of the License, or
++# This file 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 3 of the License, 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.
++# 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., 51 Franklin Street - Fifth Floor, Boston, MA
+-# 02110-1301, USA.
++# along with this program; if not, see <http://www.gnu.org/licenses/>.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
++# the same distribution terms that you use for the rest of that
++# program. This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+
+
+-# Please send patches to <config-patches at gnu.org>. Submit a context
+-# diff and a properly formatted GNU ChangeLog entry.
++# Please send patches with a ChangeLog entry to config-patches at gnu.org.
+ #
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+@@ -75,9 +68,7 @@
+ version="\
+ GNU config.sub ($timestamp)
+
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+-Software Foundation, Inc.
++Copyright 1992-2013 Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -124,13 +115,18 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
++ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
++ android-linux)
++ os=-linux-android
++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
++ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+@@ -153,12 +149,12 @@
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+- -apple | -axis | -knuth | -cray | -microblaze)
++ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+- -bluegene*)
+- os=-cnk
++ -bluegene*)
++ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+@@ -174,10 +170,10 @@
+ os=-chorusos
+ basic_machine=$1
+ ;;
+- -chorusrdb)
+- os=-chorusrdb
++ -chorusrdb)
++ os=-chorusrdb
+ basic_machine=$1
+- ;;
++ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+@@ -222,6 +218,12 @@
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
++ -lynx*178)
++ os=-lynxos178
++ ;;
++ -lynx*5)
++ os=-lynxos5
++ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+@@ -246,20 +248,27 @@
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
++ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
++ | arc | arceb \
++ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
++ | avr | avr32 \
++ | be32 | be64 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
++ | epiphany \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
++ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
++ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+- | maxq | mb | microblaze | mcore | mep | metag \
++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+@@ -277,34 +286,45 @@
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
++ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+- | nios | nios2 \
++ | nds32 | nds32le | nds32be \
++ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+- | or32 \
++ | open8 \
++ | or1k | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
++ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+- | rx \
++ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+- | spu | strongarm \
+- | tahoe | thumb | tic4x | tic80 | tron \
++ | spu \
++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+- | v850 | v850e \
++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
++ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+- m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+- # Motorola 68HC11/12.
++ c54x)
++ basic_machine=tic54x-unknown
++ ;;
++ c55x)
++ basic_machine=tic55x-unknown
++ ;;
++ c6x)
++ basic_machine=tic6x-unknown
++ ;;
++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+@@ -314,6 +334,21 @@
+ basic_machine=mt-unknown
+ ;;
+
++ strongarm | thumb | xscale)
++ basic_machine=arm-unknown
++ ;;
++ xgate)
++ basic_machine=$basic_machine-unknown
++ os=-none
++ ;;
++ xscaleeb)
++ basic_machine=armeb-unknown
++ ;;
++
++ xscaleel)
++ basic_machine=armel-unknown
++ ;;
++
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+@@ -328,25 +363,30 @@
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
++ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
++ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
++ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
++ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
++ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
++ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+@@ -364,30 +404,34 @@
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
++ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+- | nios-* | nios2-* \
++ | nds32-* | nds32le-* | nds32be-* \
++ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
++ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+- | romp-* | rs6000-* | rx-* \
++ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+- | tahoe-* | thumb-* \
++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
++ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+- | tile-* | tilegx-* \
++ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+- | v850-* | v850e-* | vax-* \
++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
++ | vax-* \
+ | we32k-* \
+- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
++ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+@@ -412,7 +456,7 @@
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+- abacus)
++ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+@@ -482,11 +526,20 @@
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
++ c54x-*)
++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ c55x-*)
++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ c6x-*)
++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+- cegcc)
++ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+@@ -518,7 +571,7 @@
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+- cr16)
++ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+@@ -676,7 +729,6 @@
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+@@ -734,9 +786,13 @@
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+- microblaze)
++ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
++ mingw64)
++ basic_machine=x86_64-pc
++ os=-mingw64
++ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+@@ -773,10 +829,18 @@
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
++ msys)
++ basic_machine=i386-pc
++ os=-msys
++ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
++ nacl)
++ basic_machine=le32-unknown
++ os=-nacl
++ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+@@ -841,6 +905,12 @@
+ np1)
+ basic_machine=np1-gould
+ ;;
++ neo-tandem)
++ basic_machine=neo-tandem
++ ;;
++ nse-tandem)
++ basic_machine=nse-tandem
++ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+@@ -923,9 +993,10 @@
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+- ppc) basic_machine=powerpc-unknown
++ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ppc-* | ppcbe-*)
++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+@@ -950,7 +1021,11 @@
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+- rdos)
++ rdos | rdos64)
++ basic_machine=x86_64-pc
++ os=-rdos
++ ;;
++ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+@@ -1019,6 +1094,9 @@
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
++ strongarm-* | thumb-*)
++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+@@ -1075,25 +1153,8 @@
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+- tic54x | c54x*)
+- basic_machine=tic54x-unknown
+- os=-coff
+- ;;
+- tic55x | c55x*)
+- basic_machine=tic55x-unknown
+- os=-coff
+- ;;
+- tic6x | c6x*)
+- basic_machine=tic6x-unknown
+- os=-coff
+- ;;
+- # This must be matched before tile*.
+- tilegx*)
+- basic_machine=tilegx-unknown
+- os=-linux-gnu
+- ;;
+ tile*)
+- basic_machine=tile-unknown
++ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+@@ -1163,6 +1224,9 @@
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
++ xscale-* | xscalee[bl]-*)
++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
++ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+@@ -1260,11 +1324,11 @@
+ if [ x"$os" != x"" ]
+ then
+ case $os in
+- # First match some system type aliases
+- # that might get confused with valid system types.
++ # First match some system type aliases
++ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+- -auroraux)
+- os=-auroraux
++ -auroraux)
++ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+@@ -1288,20 +1352,21 @@
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+- | -sym* | -kopensolaris* \
++ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+- | -openbsd* | -solidbsd* \
++ | -bitrig* | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+@@ -1348,7 +1413,7 @@
+ -opened*)
+ os=-openedition
+ ;;
+- -os400*)
++ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+@@ -1397,7 +1462,7 @@
+ -sinix*)
+ os=-sysv4
+ ;;
+- -tpf*)
++ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+@@ -1433,17 +1498,14 @@
+ -aros*)
+ os=-aros
+ ;;
+- -kaos*)
+- os=-kaos
+- ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+- -nacl*)
+- ;;
++ -nacl*)
++ ;;
+ -none)
+ ;;
+ *)
+@@ -1466,10 +1528,10 @@
+ # system, and we'll never get to this point.
+
+ case $basic_machine in
+- score-*)
++ score-*)
+ os=-elf
+ ;;
+- spu-*)
++ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+@@ -1481,8 +1543,20 @@
+ arm*-semi)
+ os=-aout
+ ;;
+- c4x-* | tic4x-*)
+- os=-coff
++ c4x-* | tic4x-*)
++ os=-coff
++ ;;
++ hexagon-*)
++ os=-elf
++ ;;
++ tic54x-*)
++ os=-coff
++ ;;
++ tic55x-*)
++ os=-coff
++ ;;
++ tic6x-*)
++ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+@@ -1502,14 +1576,11 @@
+ ;;
+ m68000-sun)
+ os=-sunos3
+- # This also exists in the configure program, but was not the
+- # default.
+- # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+- mep-*)
++ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+@@ -1518,6 +1589,9 @@
+ mips*-*)
+ os=-elf
+ ;;
++ or1k-*)
++ os=-elf
++ ;;
+ or32-*)
+ os=-coff
+ ;;
+@@ -1536,7 +1610,7 @@
+ *-ibm)
+ os=-aix
+ ;;
+- *-knuth)
++ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
--- ./configure.in.orig 2012-05-05 13:52:46.000000000 -0600
-+++ ./configure.in 2012-07-26 10:03:54.941975570 -0600
++++ ./configure.in 2013-05-10 08:26:52.478541230 -0600
@@ -1,4 +1,4 @@
-AC_INIT()
+AC_INIT
@@ -750,8 +2033,183 @@
cat makedefc
--- ./configure.orig 2012-05-05 13:52:44.000000000 -0600
-+++ ./configure 2012-07-26 10:04:09.613952671 -0600
-@@ -651,10 +651,10 @@ X_LIBS
++++ ./configure 2013-05-10 08:32:03.550337007 -0600
+@@ -1,11 +1,9 @@
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+-# Generated by GNU Autoconf 2.68.
++# Generated by GNU Autoconf 2.69.
+ #
+ #
+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+-# Foundation, Inc.
++# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+ #
+ #
+ # This configure script is free software; the Free Software Foundation
+@@ -134,6 +132,31 @@
+ # CDPATH.
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
++# Use a proper internal environment variable to ensure we don't fall
++ # into an infinite loop, continuously re-executing ourselves.
++ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
++ _as_can_reexec=no; export _as_can_reexec;
++ # We cannot yet assume a decent shell, so we have to provide a
++# neutralization value for shells without unset; and this also
++# works around shells that cannot unset nonexistent variables.
++# Preserve -v and -x to the replacement shell.
++BASH_ENV=/dev/null
++ENV=/dev/null
++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++case $- in # ((((
++ *v*x* | *x*v* ) as_opts=-vx ;;
++ *v* ) as_opts=-v ;;
++ *x* ) as_opts=-x ;;
++ * ) as_opts= ;;
++esac
++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
++# Admittedly, this is quite paranoid, since all the known shells bail
++# out after a failed `exec'.
++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
++as_fn_exit 255
++ fi
++ # We don't want this to propagate to other subprocesses.
++ { _as_can_reexec=; unset _as_can_reexec;}
+ if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+@@ -167,7 +190,8 @@
+ else
+ exitcode=1; echo positional parameters were not saved.
+ fi
+-test x\$exitcode = x0 || exit 1"
++test x\$exitcode = x0 || exit 1
++test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+@@ -212,21 +236,25 @@
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+- # We cannot yet assume a decent shell, so we have to provide a
+- # neutralization value for shells without unset; and this also
+- # works around shells that cannot unset nonexistent variables.
+- # Preserve -v and -x to the replacement shell.
+- BASH_ENV=/dev/null
+- ENV=/dev/null
+- (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+- export CONFIG_SHELL
+- case $- in # ((((
+- *v*x* | *x*v* ) as_opts=-vx ;;
+- *v* ) as_opts=-v ;;
+- *x* ) as_opts=-x ;;
+- * ) as_opts= ;;
+- esac
+- exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
++ export CONFIG_SHELL
++ # We cannot yet assume a decent shell, so we have to provide a
++# neutralization value for shells without unset; and this also
++# works around shells that cannot unset nonexistent variables.
++# Preserve -v and -x to the replacement shell.
++BASH_ENV=/dev/null
++ENV=/dev/null
++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++case $- in # ((((
++ *v*x* | *x*v* ) as_opts=-vx ;;
++ *v* ) as_opts=-v ;;
++ *x* ) as_opts=-x ;;
++ * ) as_opts= ;;
++esac
++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
++# Admittedly, this is quite paranoid, since all the known shells bail
++# out after a failed `exec'.
++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
++exit 255
+ fi
+
+ if test x$as_have_required = xno; then :
+@@ -328,6 +356,14 @@
+
+
+ } # as_fn_mkdir_p
++
++# as_fn_executable_p FILE
++# -----------------------
++# Test if FILE is an executable regular file.
++as_fn_executable_p ()
++{
++ test -f "$1" && test -x "$1"
++} # as_fn_executable_p
+ # as_fn_append VAR VALUE
+ # ----------------------
+ # Append the text in VALUE to the end of the definition contained in VAR. Take
+@@ -449,6 +485,10 @@
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
++ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
++ # already done that, so ensure we don't try to do so again and fall
++ # in an infinite loop. This has already happened in practice.
++ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+@@ -483,16 +523,16 @@
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+- # In both cases, we have to default to `cp -p'.
++ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+- as_ln_s='cp -p'
++ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+- as_ln_s='cp -p'
++ as_ln_s='cp -pR'
+ fi
+ else
+- as_ln_s='cp -p'
++ as_ln_s='cp -pR'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+ rmdir conf$$.dir 2>/dev/null
+@@ -504,28 +544,8 @@
+ as_mkdir_p=false
+ fi
+
+-if test -x / >/dev/null 2>&1; then
+- as_test_x='test -x'
+-else
+- if ls -dL / >/dev/null 2>&1; then
+- as_ls_L_option=L
+- else
+- as_ls_L_option=
+- fi
+- as_test_x='
+- eval sh -c '\''
+- if test -d "$1"; then
+- test -d "$1/.";
+- else
+- case $1 in #(
+- -*)set "./$1";;
+- esac;
+- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+- ???[sx]*):;;*)false;;esac;fi
+- '\'' sh
+- '
+-fi
+-as_executable_p=$as_test_x
++as_test_x='test -x'
++as_executable_p=as_fn_executable_p
+
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+@@ -651,10 +671,10 @@
XMKMF
GMPDIR
GMP
@@ -763,7 +2221,151 @@
AWK
CPP
OBJEXT
-@@ -4023,7 +4023,14 @@ See \`config.log' for more details" "$LI
+@@ -1211,8 +1231,6 @@
+ if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+- $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+- If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+@@ -1496,9 +1514,9 @@
+ if $ac_init_version; then
+ cat <<\_ACEOF
+ configure
+-generated by GNU Autoconf 2.68
++generated by GNU Autoconf 2.69
+
+-Copyright (C) 2010 Free Software Foundation, Inc.
++Copyright (C) 2012 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+@@ -1885,7 +1903,8 @@
+ main ()
+ {
+ static int test_array [1 - 2 * !(($2) >= 0)];
+-test_array [0] = 0
++test_array [0] = 0;
++return test_array [0];
+
+ ;
+ return 0;
+@@ -1901,7 +1920,8 @@
+ main ()
+ {
+ static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+-test_array [0] = 0
++test_array [0] = 0;
++return test_array [0];
+
+ ;
+ return 0;
+@@ -1927,7 +1947,8 @@
+ main ()
+ {
+ static int test_array [1 - 2 * !(($2) < 0)];
+-test_array [0] = 0
++test_array [0] = 0;
++return test_array [0];
+
+ ;
+ return 0;
+@@ -1943,7 +1964,8 @@
+ main ()
+ {
+ static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+-test_array [0] = 0
++test_array [0] = 0;
++return test_array [0];
+
+ ;
+ return 0;
+@@ -1977,7 +1999,8 @@
+ main ()
+ {
+ static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+-test_array [0] = 0
++test_array [0] = 0;
++return test_array [0];
+
+ ;
+ return 0;
+@@ -2050,7 +2073,7 @@
+ running configure, to aid debugging if configure makes a mistake.
+
+ It was created by $as_me, which was
+-generated by GNU Autoconf 2.68. Invocation command line was
++generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+@@ -3086,7 +3109,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -3126,7 +3149,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -3179,7 +3202,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -3220,7 +3243,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+@@ -3278,7 +3301,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -3322,7 +3345,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -3768,8 +3791,7 @@
+ /* end confdefs.h. */
+ #include <stdarg.h>
+ #include <stdio.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
++struct stat;
+ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+ struct buf { int x; };
+ FILE * (*rcsopen) (struct buf *, struct stat *, int);
+@@ -4023,7 +4045,14 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -779,7 +2381,16 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
TCFLAGS="$TCFLAGS $TMPF";{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -4269,51 +4276,6 @@ fi
+@@ -4091,7 +4120,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -4269,51 +4298,6 @@
$as_echo_n "checking system version (for dynamic loading)... " >&6; }
if machine=`uname -m` ; then true; else machine=unknown ; fi
@@ -831,7 +2442,34 @@
if test -f /usr/lib/NextStep/software_version; then
system=NEXTSTEP-`${AWK} '/3/,/3/' /usr/lib/NextStep/software_version`
else
-@@ -4711,22 +4673,29 @@ fi
+@@ -4356,7 +4340,7 @@
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
++ as_fn_executable_p "$ac_path_GREP" || continue
+ # Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+ case `"$ac_path_GREP" --version 2>&1` in
+@@ -4422,7 +4406,7 @@
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++ as_fn_executable_p "$ac_path_EGREP" || continue
+ # Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+ case `"$ac_path_EGREP" --version 2>&1` in
+@@ -4663,7 +4647,7 @@
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+- $as_test_x conftest$ac_exeext
++ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+ else
+@@ -4711,22 +4695,29 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sysconf" >&5
$as_echo "$ac_cv_lib_c_sysconf" >&6; }
if test "x$ac_cv_lib_c_sysconf" = xyes; then :
@@ -867,7 +2505,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
hz=`cat conftest1`
-@@ -4750,6 +4719,117 @@ fi
+@@ -4750,6 +4741,117 @@
@@ -890,7 +2528,7 @@
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
@@ -956,7 +2594,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MAKEINFO="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
@@ -985,7 +2623,7 @@
#MY_SUBDIRS=
-@@ -4803,25 +4883,36 @@ fi
+@@ -4803,25 +4905,36 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5
$as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; }
if test "x$ac_cv_lib_gmp___gmpz_init" = xyes; then :
@@ -1028,7 +2666,7 @@
MPFILES=
PATCHED_SYMBOLS=
# if test "$use" = "m68k-linux" ; then
-@@ -4834,7 +4925,8 @@ if ac_fn_c_try_run "$LINENO"; then :
+@@ -4834,7 +4947,8 @@
MP_INCLUDE=`cpp foo.c | grep /gmp.h | head -n 1 | $AWK '{print $3}' | tr -d '"'`
rm -f foo.c
else
@@ -1038,7 +2676,7 @@
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -4894,8 +4986,8 @@ $as_echo_n "checking use_gmp=yes, doing
+@@ -4894,8 +5008,8 @@
fi
@@ -1049,7 +2687,7 @@
cat>foo.c <<EOFF
#include <math.h>
#include <stdio.h>
-@@ -4906,45 +4998,53 @@ if nm foo.o |grep " U " | grep "_cos" >/
+@@ -4906,45 +5020,53 @@
LEADING_UNDERSCORE=1
$as_echo "#define LEADING_UNDERSCORE 1" >>confdefs.h
@@ -1118,7 +2756,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
mpsize=`cat conftest1`
-@@ -4956,8 +5056,7 @@ rm -f core *.core core.conftest.* gmon.o
+@@ -4956,8 +5078,7 @@
fi
if test "$mpsize" = "0" ; then
@@ -1128,7 +2766,7 @@
fi
cat >>confdefs.h <<_ACEOF
#define MP_LIMB_BYTES $mpsize
-@@ -4966,23 +5065,31 @@ _ACEOF
+@@ -4966,23 +5087,31 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $mpsize" >&5
$as_echo "$mpsize" >&6; }
@@ -1165,7 +2803,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
$as_echo "#define __SHORT_LIMB 1" >>confdefs.h
-@@ -4996,23 +5103,31 @@ rm -f core *.core core.conftest.* gmon.o
+@@ -4996,23 +5125,31 @@
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
@@ -1202,7 +2840,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
$as_echo "#define __LONG_LONG_LIMB 1" >>confdefs.h
-@@ -5351,8 +5466,7 @@ else
+@@ -5351,8 +5488,7 @@
fi
if test "$have_dl" = "0" ; then
@@ -1212,7 +2850,7 @@
fi
TLIBS="$TLIBS -ldl -rdynamic"
-@@ -5410,9 +5524,17 @@ $as_echo_n "checking if need to define C
+@@ -5410,9 +5546,17 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1232,7 +2870,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-@@ -5423,10 +5545,18 @@ else
+@@ -5423,10 +5567,18 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1253,7 +2891,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5459,18 +5589,26 @@ fi
+@@ -5459,18 +5611,26 @@
# BFD boolean syntax
#
@@ -1284,7 +2922,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5499,9 +5637,17 @@ $as_echo "no" >&6; }
+@@ -5499,9 +5659,17 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1304,7 +2942,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5832,14 +5978,14 @@ case $use in
+@@ -5832,14 +6000,14 @@
*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking __builtin___clear_cache" >&5
$as_echo_n "checking __builtin___clear_cache... " >&6; }
@@ -1321,7 +2959,7 @@
;
return 0;
-@@ -5902,26 +6048,34 @@ $as_echo_n "checking sizeof struct contb
+@@ -5902,26 +6070,34 @@
# work around MSYS pwd result incompatibility
if test "$use" = "mingw" ; then
if test "$cross_compiling" = yes; then :
@@ -1361,7 +2999,7 @@
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -5929,26 +6083,34 @@ fi
+@@ -5929,26 +6105,34 @@
else
if test "$cross_compiling" = yes; then :
@@ -1401,7 +3039,7 @@
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -5975,7 +6137,11 @@ $as_echo "WARNING: ASSUMING LITTLE ENDIA
+@@ -5975,7 +6159,11 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1414,7 +3052,7 @@
/* Are we little or big endian? Adapted from Harbison&Steele. */
union
{
-@@ -5984,6 +6150,9 @@ int main () {
+@@ -5984,6 +6172,9 @@
} u;
u.d = 1.0;
return u.l[sizeof(double)/sizeof(int)-1] ? 0 : 1;
@@ -1424,7 +3062,7 @@
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
-@@ -6014,15 +6183,23 @@ $as_echo "no: WARNING you must be able t
+@@ -6014,15 +6205,23 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1452,7 +3090,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
HAVE_SBRK=1
-@@ -6049,14 +6226,22 @@ $as_echo_n "checking for ADDR_NO_RANDOMI
+@@ -6049,14 +6248,22 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1479,7 +3117,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
ADDR_NO_RANDOMIZE=`cat conftest1`
-@@ -6086,7 +6271,8 @@ $as_echo_n "checking for personality(ADD
+@@ -6086,7 +6293,8 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1489,7 +3127,7 @@
int main(int argc,char *argv[],char *envp[]) {
#include "h/unrandomize.h"
return 0;}
-@@ -6118,8 +6304,9 @@ $as_echo_n "checking that sbrk is (now)
+@@ -6118,8 +6326,9 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1501,7 +3139,7 @@
int main(int argc,char * argv[],char * envp[]) {
FILE *f;
#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -6139,17 +6326,16 @@ rm -f core *.core core.conftest.* gmon.o
+@@ -6139,17 +6348,16 @@
fi
if test "$SBRK" = "0" ; then
@@ -1523,7 +3161,7 @@
int main(int argc,char * argv[],char * envp[]) {
FILE *f;
#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -6169,9 +6355,7 @@ rm -f core *.core core.conftest.* gmon.o
+@@ -6169,9 +6377,7 @@
fi
if test "$SBRK1" = "0" ; then
@@ -1534,7 +3172,7 @@
fi
if test "$SBRK" = "$SBRK1" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -6195,14 +6379,23 @@ if test "$cross_compiling" = yes; then :
+@@ -6195,14 +6401,23 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1561,7 +3199,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
PAGEWIDTH=`cat conftest1`
-@@ -6224,17 +6417,18 @@ _ACEOF
+@@ -6224,17 +6439,18 @@
old_LDFLAGS="$LDFLAGS"
LDFLAGS="$TLDFLAGS"
@@ -1584,7 +3222,7 @@
int
main(int argc,char * argv[],char *envp[])
{
-@@ -6279,21 +6473,28 @@ $as_echo "got $dbegin" >&6; }
+@@ -6279,21 +6495,28 @@
LDFLAGS="$old_LDFLAGS"
@@ -1616,7 +3254,7 @@
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
-@@ -6315,8 +6516,8 @@ $as_echo "got $cstack_address" >&6; }
+@@ -6315,8 +6538,8 @@
@@ -1627,7 +3265,7 @@
if test "$cross_compiling" = yes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
-@@ -6324,13 +6525,19 @@ $as_echo "no" >&6; }
+@@ -6324,13 +6547,19 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1649,7 +3287,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
-@@ -6836,8 +7043,6 @@ fi
+@@ -6836,8 +7065,6 @@
# To get around this problem, check for both libraries together
# if -lsocket doesn't work by itself.
#--------------------------------------------------------------------
@@ -1658,7 +3296,7 @@
tcl_checkBoth=0
ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
if test "x$ac_cv_func_connect" = xyes; then :
-@@ -7049,8 +7254,8 @@ fi
+@@ -7049,8 +7276,8 @@
@@ -1669,7 +3307,7 @@
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-@@ -7074,7 +7279,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_
+@@ -7074,7 +7301,7 @@
int
main ()
{
@@ -1678,7 +3316,7 @@
gethostbyname("jil");
socket(AF_INET, SOCK_STREAM, 0);
-@@ -7095,10 +7300,11 @@ rm -f core conftest.err conftest.$ac_obj
+@@ -7095,10 +7322,11 @@
conftest$ac_exeext conftest.$ac_ext
@@ -1692,7 +3330,7 @@
#include <stdio.h>
#include <fcntl.h>
-@@ -7174,7 +7380,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&
+@@ -7174,7 +7402,7 @@
$EGREP "LITTLE_ENDIAN" >/dev/null 2>&1; then :
gcl_ok=yes
else
@@ -1701,7 +3339,7 @@
fi
rm -f conftest*
-@@ -7218,17 +7424,17 @@ $as_echo "O_NONBLOCK" >&6; }
+@@ -7218,17 +7446,17 @@
esac
@@ -1723,7 +3361,7 @@
;
return 0;
}
-@@ -7245,17 +7451,17 @@ $as_echo "no" >&6; }
+@@ -7245,17 +7473,17 @@
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
@@ -1745,7 +3383,7 @@
;
return 0;
}
-@@ -7273,17 +7479,17 @@ fi
+@@ -7273,17 +7501,17 @@
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
@@ -1767,7 +3405,7 @@
;
return 0;
}
-@@ -7328,11 +7534,12 @@ fi
+@@ -7328,11 +7556,12 @@
done
@@ -1784,7 +3422,7 @@
int
main ()
-@@ -7360,11 +7567,12 @@ $as_echo "sigcontext NOT in signal.h" >&
+@@ -7360,11 +7589,12 @@
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test "$sigcontext_works" = 0 ; then
@@ -1800,7 +3438,16 @@
#ifdef HAVE_ASM_SIGCONTEXT_H
#include <asm/sigcontext.h>
#endif
-@@ -7543,26 +7751,41 @@ $as_echo "$INFO_DIR" >&6; }
+@@ -7435,7 +7665,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_EMACS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -7543,26 +7773,41 @@
if test "$enable_tcltk" = "yes" ; then
@@ -1860,7 +3507,16 @@
# Extract the first word of "tclsh", so it can be a program name with args.
set dummy tclsh; ac_word=$2
-@@ -7602,7 +7825,26 @@ $as_echo "no" >&6; }
+@@ -7580,7 +7825,7 @@
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_TCLSH="tclsh"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+@@ -7602,7 +7847,26 @@
fi
@@ -1888,7 +3544,7 @@
if test "${TCLSH}" = "" ; then true ; else
TCL_CONFIG_PREFIX=`${TCLSH} < conftest.tcl`
-@@ -7677,42 +7919,6 @@ fi
+@@ -7677,42 +7941,6 @@
fi
@@ -1931,7 +3587,7 @@
if test "$have_ieee" = "0" ; then
TCL_LIBS=`echo ${TCL_LIBS} | sed -e "s:-lieee::g" `
fi
-@@ -7758,14 +7964,23 @@ NOTIFY=$enable_notify
+@@ -7758,14 +7986,23 @@
# the time handling for unixtime, add timezone
@@ -1958,7 +3614,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
-@@ -7787,8 +8002,16 @@ else
+@@ -7787,8 +8024,16 @@
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -1977,7 +3633,7 @@
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
-@@ -7820,8 +8043,6 @@ $as_echo "no" >&6; } ; fi
+@@ -7820,8 +8065,6 @@
@@ -1986,7 +3642,7 @@
# dlopen etc
# idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
# then dlload("foo.o") a lisp file can refer to things in libX.so
-@@ -7845,8 +8066,8 @@ $as_echo "no" >&6; } ; fi
+@@ -7845,8 +8088,8 @@
# redhat/cygnus released for some reason a buggy version of gcc,
# which no one else released. Catch that here.
@@ -1997,7 +3653,7 @@
if 2>&1 $CC -v | fgrep "gcc version 2.96" > /dev/null
then
BROKEN_O4_OPT=1
-@@ -7886,7 +8107,7 @@ if test -f h/$use.defs ; then
+@@ -7886,7 +8129,7 @@
ac_config_files="$ac_config_files makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp"
@@ -2006,16 +3662,107 @@
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs, see configure's option --config-cache.
+@@ -8293,16 +8536,16 @@
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+- # In both cases, we have to default to `cp -p'.
++ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+- as_ln_s='cp -p'
++ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+- as_ln_s='cp -p'
++ as_ln_s='cp -pR'
+ fi
+ else
+- as_ln_s='cp -p'
++ as_ln_s='cp -pR'
+ fi
+ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+ rmdir conf$$.dir 2>/dev/null
+@@ -8362,28 +8605,16 @@
+ as_mkdir_p=false
+ fi
+
+-if test -x / >/dev/null 2>&1; then
+- as_test_x='test -x'
+-else
+- if ls -dL / >/dev/null 2>&1; then
+- as_ls_L_option=L
+- else
+- as_ls_L_option=
+- fi
+- as_test_x='
+- eval sh -c '\''
+- if test -d "$1"; then
+- test -d "$1/.";
+- else
+- case $1 in #(
+- -*)set "./$1";;
+- esac;
+- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+- ???[sx]*):;;*)false;;esac;fi
+- '\'' sh
+- '
+-fi
+-as_executable_p=$as_test_x
++
++# as_fn_executable_p FILE
++# -----------------------
++# Test if FILE is an executable regular file.
++as_fn_executable_p ()
++{
++ test -f "$1" && test -x "$1"
++} # as_fn_executable_p
++as_test_x='test -x'
++as_executable_p=as_fn_executable_p
+
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+@@ -8405,7 +8636,7 @@
+ # values after options handling.
+ ac_log="
+ This file was extended by $as_me, which was
+-generated by GNU Autoconf 2.68. Invocation command line was
++generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+@@ -8467,10 +8698,10 @@
+ ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ ac_cs_version="\\
+ config.status
+-configured by $0, generated by GNU Autoconf 2.68,
++configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+-Copyright (C) 2010 Free Software Foundation, Inc.
++Copyright (C) 2012 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+
+@@ -8558,7 +8789,7 @@
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ if \$ac_cs_recheck; then
+- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
--- ./install.sh.orig 1999-12-06 15:43:54.000000000 -0700
-+++ ./install.sh 2012-07-26 09:59:36.960378201 -0600
-@@ -1,19 +1,38 @@
++++ ./install.sh 2012-09-26 08:03:18.000000000 -0600
+@@ -1,250 +1,527 @@
-#! /bin/sh
-#
+#!/bin/sh
# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
+
-+scriptversion=2011-01-19.21; # UTC
++scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
@@ -2059,8 +3806,9 @@
+# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
- # `make' implicit rules from creating a file called install from it
-@@ -21,230 +40,488 @@
+-# `make' implicit rules from creating a file called install from it
++# 'make' implicit rules from creating a file called install from it
+ # when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.
@@ -2242,7 +3990,7 @@
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
-+ # Protect names problematic for `test' and other utilities.
++ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
@@ -2282,7 +4030,7 @@
+ fi
+ shift # arg
+ dst_arg=$arg
-+ # Protect names problematic for `test' and other utilities.
++ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
@@ -2308,7 +4056,7 @@
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
-+ # It's OK to call `install-sh -d' without argument.
++ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
@@ -2371,7 +4119,7 @@
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+for src
+do
-+ # Protect names problematic for `test' and other utilities.
++ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
@@ -2511,7 +4259,7 @@
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-+ # other-writeable bit of parent directory when it shouldn't.
++ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
@@ -2718,12263 +4466,8 @@
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
---- ./info/texinfo.tex.orig 2002-10-26 09:14:15.000000000 -0600
-+++ ./info/texinfo.tex 2012-07-26 09:59:36.968378189 -0600
-@@ -1,17 +1,18 @@
- % texinfo.tex -- TeX macros to handle Texinfo files.
--%
-+%
- % Load plain if necessary, i.e., if running under initex.
- \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
- %
--\def\texinfoversion{1999-09-25.10}
-+\def\texinfoversion{2012-01-03.09}
- %
--% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
--% Free Software Foundation, Inc.
-+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-+% 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
- %
--% This texinfo.tex file is free software; you can redistribute it and/or
-+% 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
--% published by the Free Software Foundation; either version 2, or (at
--% your option) any later version.
-+% published by the Free Software Foundation, either version 3 of the
-+% License, or (at your option) any later version.
- %
- % This texinfo.tex file is distributed in the hope that it will be
- % useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-@@ -19,25 +20,19 @@
- % General Public License for more details.
- %
- % 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.
-+% along with this program. If not, see <http://www.gnu.org/licenses/>.
- %
--% 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!
-+% As a special exception, when this file is read by TeX when processing
-+% a Texinfo source document, you may use the result without
-+% restriction. (This has been our intent since Texinfo was invented.)
- %
- % Please try the latest version of texinfo.tex before submitting bug
- % reports; you can get the latest version from:
--% ftp://ftp.gnu.org/gnu/texinfo.tex
--% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
--% ftp://texinfo.org/tex/texinfo.tex
--% ftp://us.ctan.org/macros/texinfo/texinfo.tex
--% (and all CTAN mirrors, finger ctan at us.ctan.org for a list).
--% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
--% The texinfo.tex in any given Texinfo distribution could well be out
-+% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
-+% ftp://tug.org/tex/texinfo.tex
-+% (and all CTAN mirrors, see http://www.ctan.org).
-+% The texinfo.tex in any given distribution could well be out
- % of date, so if that's what you're using, please check.
--% Texinfo has a small home page at http://texinfo.org/.
- %
- % Send bug reports to bug-texinfo at gnu.org. Please include including a
- % complete document in each bug report with which we can reproduce the
-@@ -50,13 +45,17 @@
- % texindex foo.??
- % tex foo.texi
- % tex foo.texi
--% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
--% The extra runs of TeX get the cross-reference information correct.
-+% dvips foo.dvi -o # or whatever; this makes foo.ps.
-+% The extra TeX runs get the cross-reference information correct.
- % Sometimes one run after texindex suffices, and sometimes you need more
- % than two; texi2dvi does it as many times as necessary.
- %
--% It is possible to adapt texinfo.tex for other languages. You can get
--% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
-+% It is possible to adapt texinfo.tex for other languages, to some
-+% extent. You can get the existing language-specific files from the
-+% full Texinfo distribution.
-+%
-+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-+
-
- \message{Loading texinfo [version \texinfoversion]:}
-
-@@ -66,7 +65,13 @@
- \everyjob{\message{[Texinfo version \texinfoversion]}%
- \catcode`+=\active \catcode`\_=\active}
-
--% Save some parts of plain tex whose names we will redefine.
-+\chardef\other=12
-+
-+% We never want plain's \outer definition of \+ in Texinfo.
-+% For @tex, we can use \tabalign.
-+\let\+ = \relax
-+
-+% Save some plain tex macros whose names we will redefine.
- \let\ptexb=\b
- \let\ptexbullet=\bullet
- \let\ptexc=\c
-@@ -76,30 +81,46 @@
- \let\ptexend=\end
- \let\ptexequiv=\equiv
- \let\ptexexclam=\!
-+\let\ptexfootnote=\footnote
-+\let\ptexgtr=>
-+\let\ptexhat=^
- \let\ptexi=\i
-+\let\ptexindent=\indent
-+\let\ptexinsert=\insert
- \let\ptexlbrace=\{
-+\let\ptexless=<
-+\let\ptexnewwrite\newwrite
-+\let\ptexnoindent=\noindent
-+\let\ptexplus=+
-+\let\ptexraggedright=\raggedright
- \let\ptexrbrace=\}
-+\let\ptexslash=\/
- \let\ptexstar=\*
- \let\ptext=\t
--
--% We never want plain's outer \+ definition in Texinfo.
--% For @tex, we can use \tabalign.
--\let\+ = \relax
--
--\message{Basics,}
--\chardef\other=12
-+\let\ptextop=\top
-+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
-
- % If this character appears in an error message or help string, it
- % starts a new line in the output.
- \newlinechar = `^^J
-
-+% Use TeX 3.0's \inputlineno to get the line number, for better error
-+% messages, but if we're using an old version of TeX, don't do anything.
-+%
-+\ifx\inputlineno\thisisundefined
-+ \let\linenumber = \empty % Pre-3.0.
-+\else
-+ \def\linenumber{l.\the\inputlineno:\space}
-+\fi
-+
- % Set up fixed words for English if not already set.
- \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
- \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
-+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
- \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
- \ifx\putwordin\undefined \gdef\putwordin{in}\fi
--\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
--\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
- \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
- \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
- \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
-@@ -131,46 +152,101 @@
- \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
- \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
- \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
--\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
- \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
--\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
-+
-+% Since the category of space is not known, we have to be careful.
-+\chardef\spacecat = 10
-+\def\spaceisspace{\catcode`\ =\spacecat}
-+
-+% sometimes characters are active, so we need control sequences.
-+\chardef\ampChar = `\&
-+\chardef\colonChar = `\:
-+\chardef\commaChar = `\,
-+\chardef\dashChar = `\-
-+\chardef\dotChar = `\.
-+\chardef\exclamChar= `\!
-+\chardef\hashChar = `\#
-+\chardef\lquoteChar= `\`
-+\chardef\questChar = `\?
-+\chardef\rquoteChar= `\'
-+\chardef\semiChar = `\;
-+\chardef\slashChar = `\/
-+\chardef\underChar = `\_
-
- % Ignore a token.
- %
- \def\gobble#1{}
-
--\hyphenation{ap-pen-dix}
--\hyphenation{mini-buf-fer mini-buf-fers}
--\hyphenation{eshell}
--\hyphenation{white-space}
-+% The following is used inside several \edef's.
-+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
-+
-+% Hyphenation fixes.
-+\hyphenation{
-+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
-+ ap-pen-dix bit-map bit-maps
-+ data-base data-bases eshell fall-ing half-way long-est man-u-script
-+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
-+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
-+ spell-ing spell-ings
-+ stand-alone strong-est time-stamp time-stamps which-ever white-space
-+ wide-spread wrap-around
-+}
-
- % Margin to add to right of even pages, to left of odd pages.
--\newdimen \bindingoffset
--\newdimen \normaloffset
-+\newdimen\bindingoffset
-+\newdimen\normaloffset
- \newdimen\pagewidth \newdimen\pageheight
-
-+% For a final copy, take out the rectangles
-+% that mark overfull boxes (in case you have decided
-+% that the text looks ok even though it passes the margin).
-+%
-+\def\finalout{\overfullrule=0pt }
-+
- % Sometimes it is convenient to have everything in the transcript file
- % and nothing on the terminal. We don't just call \tracingall here,
--% since that produces some useless output on the terminal.
-+% since that produces some useless output on the terminal. We also make
-+% some effort to order the tracing commands to reduce output in the log
-+% file; cf. trace.sty in LaTeX.
- %
- \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
--\ifx\eTeXversion\undefined
--\def\loggingall{\tracingcommands2 \tracingstats2
-- \tracingpages1 \tracingoutput1 \tracinglostchars1
-- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-- \showboxbreadth\maxdimen\showboxdepth\maxdimen
--}%
--\else
--\def\loggingall{\tracingcommands3 \tracingstats2
-- \tracingpages1 \tracingoutput1 \tracinglostchars1
-- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-- \tracingscantokens1 \tracingassigns1 \tracingifs1
-- \tracinggroups1 \tracingnesting2
-- \showboxbreadth\maxdimen\showboxdepth\maxdimen
-+\def\loggingall{%
-+ \tracingstats2
-+ \tracingpages1
-+ \tracinglostchars2 % 2 gives us more in etex
-+ \tracingparagraphs1
-+ \tracingoutput1
-+ \tracingmacros2
-+ \tracingrestores1
-+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
-+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
-+ \tracingscantokens1
-+ \tracingifs1
-+ \tracinggroups1
-+ \tracingnesting2
-+ \tracingassigns1
-+ \fi
-+ \tracingcommands3 % 3 gives us more in etex
-+ \errorcontextlines16
- }%
--\fi
-
--% For @cropmarks command.
-+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
-+% aren't perfect, it's not the end of the world, being an error message,
-+% after all.
-+%
-+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
-+\def\doerrormsg#1{\errmessage{#1}}
-+
-+% add check for \lastpenalty to plain's definitions. If the last thing
-+% we did was a \nobreak, we don't want to insert more space.
-+%
-+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
-+ \removelastskip\penalty-50\smallskip\fi\fi}
-+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
-+ \removelastskip\penalty-100\medskip\fi\fi}
-+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
-+ \removelastskip\penalty-200\bigskip\fi\fi}
-+
- % Do @cropmarks to get crop marks.
- %
- \newif\ifcropmarks
-@@ -184,6 +260,50 @@
- \newdimen\cornerthick \cornerthick=.3pt
- \newdimen\topandbottommargin \topandbottommargin=.75in
-
-+% Output a mark which sets \thischapter, \thissection and \thiscolor.
-+% We dump everything together because we only have one kind of mark.
-+% This works because we only use \botmark / \topmark, not \firstmark.
-+%
-+% A mark contains a subexpression of the \ifcase ... \fi construct.
-+% \get*marks macros below extract the needed part using \ifcase.
-+%
-+% Another complication is to let the user choose whether \thischapter
-+% (\thissection) refers to the chapter (section) in effect at the top
-+% of a page, or that at the bottom of a page. The solution is
-+% described on page 260 of The TeXbook. It involves outputting two
-+% marks for the sectioning macros, one before the section break, and
-+% one after. I won't pretend I can describe this better than DEK...
-+\def\domark{%
-+ \toks0=\expandafter{\lastchapterdefs}%
-+ \toks2=\expandafter{\lastsectiondefs}%
-+ \toks4=\expandafter{\prevchapterdefs}%
-+ \toks6=\expandafter{\prevsectiondefs}%
-+ \toks8=\expandafter{\lastcolordefs}%
-+ \mark{%
-+ \the\toks0 \the\toks2
-+ \noexpand\or \the\toks4 \the\toks6
-+ \noexpand\else \the\toks8
-+ }%
-+}
-+% \topmark doesn't work for the very first chapter (after the title
-+% page or the contents), so we use \firstmark there -- this gets us
-+% the mark with the chapter defs, unless the user sneaks in, e.g.,
-+% @setcolor (or @url, or @link, etc.) between @contents and the very
-+% first @chapter.
-+\def\gettopheadingmarks{%
-+ \ifcase0\topmark\fi
-+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
-+}
-+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
-+\def\getcolormarks{\ifcase2\topmark\fi}
-+
-+% Avoid "undefined control sequence" errors.
-+\def\lastchapterdefs{}
-+\def\lastsectiondefs{}
-+\def\prevchapterdefs{}
-+\def\prevsectiondefs{}
-+\def\lastcolordefs{}
-+
- % Main output routine.
- \chardef\PAGE = 255
- \output = {\onepageout{\pagecontents\PAGE}}
-@@ -201,7 +321,9 @@
- %
- % Do this outside of the \shipout so @code etc. will be expanded in
- % the headline as they should be, not taken literally (outputting ''code).
-+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
- \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
-+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
- \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
- %
- {%
-@@ -209,11 +331,18 @@
- % 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.
-+ % the page break happens to be in the middle of an example.
-+ % We don't want .vr (or whatever) entries like this:
-+ % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
-+ % "\acronym" won't work when it's read back in;
-+ % it needs to be
-+ % {\code {{\tt \backslashcurfont }acronym}
- \shipout\vbox{%
-+ % Do this early so pdf references go to the beginning of the page.
-+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
-+ %
- \ifcropmarks \vbox to \outervsize\bgroup
- \hsize = \outerhsize
- \vskip-\topandbottommargin
-@@ -237,14 +366,12 @@
- \pagebody{#1}%
- \ifdim\ht\footlinebox > 0pt
- % Only leave this space if the footline is nonempty.
-- % (We lessened \vsize for it in \oddfootingxxx.)
-+ % (We lessened \vsize for it in \oddfootingyyy.)
- % The \baselineskip=24pt in plain's \makefootline has no effect.
-- \vskip 2\baselineskip
-+ \vskip 24pt
- \unvbox\footlinebox
- \fi
- %
-- \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
-- %
- \ifcropmarks
- \egroup % end of \vbox\bgroup
- \hfil\egroup % end of (centering) \line\bgroup
-@@ -262,7 +389,7 @@
- \egroup % \vbox from first cropmarks clause
- \fi
- }% end of \shipout\vbox
-- }% end of group with \turnoffactive
-+ }% end of group with \indexdummies
- \advancepageno
- \ifnum\outputpenalty>-20000 \else\dosupereject\fi
- }
-@@ -275,7 +402,7 @@
- % marginal hacks, juha at 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
-+\dimen@=\dp#1\relax \unvbox#1\relax
- \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
- \ifr at ggedbottom \kern-\dimen@ \vfil \fi}
- }
-@@ -295,195 +422,161 @@
- % the input line (except we remove a trailing comment). #1 should be a
- % macro which expects an ordinary undelimited TeX argument.
- %
--\def\parsearg#1{%
-- \let\next = #1%
-+\def\parsearg{\parseargusing{}}
-+\def\parseargusing#1#2{%
-+ \def\argtorun{#2}%
- \begingroup
- \obeylines
-- \futurelet\temp\parseargx
--}
--
--% If the next token is an obeyed space (from an @example environment or
--% the like), remove it and recurse. Otherwise, we're done.
--\def\parseargx{%
-- % \obeyedspace is defined far below, after the definition of \sepspaces.
-- \ifx\obeyedspace\temp
-- \expandafter\parseargdiscardspace
-- \else
-- \expandafter\parseargline
-- \fi
-+ \spaceisspace
-+ #1%
-+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
- }
-
--% Remove a single space (as the delimiter token to the macro call).
--{\obeyspaces %
-- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
--
- {\obeylines %
- \gdef\parseargline#1^^M{%
- \endgroup % End of the group started in \parsearg.
-- %
-- % First remove any @c comment, then any @comment.
-- % Result of each macro is put in \toks0.
-- \argremovec #1\c\relax %
-- \expandafter\argremovecomment \the\toks0 \comment\relax %
-- %
-- % Call the caller's macro, saved as \next in \parsearg.
-- \expandafter\next\expandafter{\the\toks0}%
-+ \argremovecomment #1\comment\ArgTerm%
- }%
- }
-
--% Since all \c{,omment} does is throw away the argument, we can let TeX
--% do that for us. The \relax here is matched by the \relax in the call
--% in \parseargline; it could be more or less anything, its purpose is
--% just to delimit the argument to the \c.
--\def\argremovec#1\c#2\relax{\toks0 = {#1}}
--\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-+% First remove any @comment, then any @c comment.
-+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
-+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
-
--% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
--% @end itemize @c foo
--% will have two active spaces as part of the argument with the
--% `itemize'. Here we remove all active spaces from #1, and assign the
--% result to \toks0.
-+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
- %
--% This loses if there are any *other* active characters besides spaces
--% in the argument -- _ ^ +, for example -- since they get expanded.
--% Fortunately, Texinfo does not define any such commands. (If it ever
--% does, the catcode of the characters in questionwill have to be changed
--% here.) But this means we cannot call \removeactivespaces as part of
--% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
--% that \parsearg gets might well have any character at all in it.
-+% \argremovec might leave us with trailing space, e.g.,
-+% @end itemize @c foo
-+% This space token undergoes the same procedure and is eventually removed
-+% by \finishparsearg.
- %
--\def\removeactivespaces#1{%
-- \begingroup
-- \ignoreactivespaces
-- \edef\temp{#1}%
-- \global\toks0 = \expandafter{\temp}%
-- \endgroup
-+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
-+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
-+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
-+ \def\temp{#3}%
-+ \ifx\temp\empty
-+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
-+ \let\temp\finishparsearg
-+ \else
-+ \let\temp\argcheckspaces
-+ \fi
-+ % Put the space token in:
-+ \temp#1 #3\ArgTerm
- }
-
--% Change the active space to expand to nothing.
-+% If a _delimited_ argument is enclosed in braces, they get stripped; so
-+% to get _exactly_ the rest of the line, we had to prevent such situation.
-+% We prepended an \empty token at the very beginning and we expand it now,
-+% just before passing the control to \argtorun.
-+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
-+% either the null string, or it ends with \^^M---thus there is no danger
-+% that a pair of braces would be stripped.
- %
--\begingroup
-+% But first, we have to remove the trailing space token.
-+%
-+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
-+
-+% \parseargdef\foo{...}
-+% is roughly equivalent to
-+% \def\foo{\parsearg\Xfoo}
-+% \def\Xfoo#1{...}
-+%
-+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-+% favourite TeX trick. --kasal, 16nov03
-+
-+\def\parseargdef#1{%
-+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
-+}
-+\def\doparseargdef#1#2{%
-+ \def#2{\parsearg#1}%
-+ \def#1##1%
-+}
-+
-+% Several utility definitions with active space:
-+{
- \obeyspaces
-- \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
--\endgroup
-+ \gdef\obeyedspace{ }
-+
-+ % Make each space character in the input produce a normal interword
-+ % space in the output. Don't allow a line break at this space, as this
-+ % is used only in environments like @example, where each line of input
-+ % should produce a line of output anyway.
-+ %
-+ \gdef\sepspaces{\obeyspaces\let =\tie}
-+
-+ % 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 \ ).
-+ \gdef\unsepspaces{\let =\space}
-+}
-
-
- \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
--%% These are used to keep @begin/@end levels from running away
--%% Call \inENV within environments (after a \begingroup)
--\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
--\def\ENVcheck{%
--\ifENV\errmessage{Still within an environment; press RETURN to continue}
--\endgroup\fi} % This is not perfect, but it should reduce lossage
-+% Define the framework for environments in texinfo.tex. It's used like this:
-+%
-+% \envdef\foo{...}
-+% \def\Efoo{...}
-+%
-+% It's the responsibility of \envdef to insert \begingroup before the
-+% actual body; @end closes the group after calling \Efoo. \envdef also
-+% defines \thisenv, so the current environment is known; @end checks
-+% whether the environment name matches. The \checkenv macro can also be
-+% used to check whether the current environment is the one expected.
-+%
-+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
-+% are not treated as environments; they don't open a group. (The
-+% implementation of @end takes care not to call \endgroup in this
-+% special case.)
-
--% @begin foo is the same as @foo, for now.
--\newhelp\EMsimple{Press RETURN to continue.}
-
--\outer\def\begin{\parsearg\beginxxx}
-+% At run-time, environments start with this:
-+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
-+% initialize
-+\let\thisenv\empty
-
--\def\beginxxx #1{%
--\expandafter\ifx\csname #1\endcsname\relax
--{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
--\csname #1\endcsname\fi}
-+% ... but they get defined via ``\envdef\foo{...}'':
-+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
-+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
-
--% @end foo executes the definition of \Efoo.
--%
--\def\end{\parsearg\endxxx}
--\def\endxxx #1{%
-- \removeactivespaces{#1}%
-- \edef\endthing{\the\toks0}%
-- %
-- \expandafter\ifx\csname E\endthing\endcsname\relax
-- \expandafter\ifx\csname \endthing\endcsname\relax
-- % There's no \foo, i.e., no ``environment'' foo.
-- \errhelp = \EMsimple
-- \errmessage{Undefined command `@end \endthing'}%
-- \else
-- \unmatchedenderror\endthing
-- \fi
-+% Check whether we're in the right environment:
-+\def\checkenv#1{%
-+ \def\temp{#1}%
-+ \ifx\thisenv\temp
- \else
-- % Everything's ok; the right environment has been started.
-- \csname E\endthing\endcsname
-+ \badenverr
- \fi
- }
-
--% There is an environment #1, but it hasn't been started. Give an error.
--%
--\def\unmatchedenderror#1{%
-+% Environment mismatch, #1 expected:
-+\def\badenverr{%
- \errhelp = \EMsimple
-- \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-+ \errmessage{This command can appear only \inenvironment\temp,
-+ not \inenvironment\thisenv}%
- }
--
--% Define the control sequence \E#1 to give an unmatched @end error.
--%
--\def\defineunmatchedend#1{%
-- \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-+\def\inenvironment#1{%
-+ \ifx#1\empty
-+ outside of any environment%
-+ \else
-+ in environment \expandafter\string#1%
-+ \fi
- }
-
--
--% Single-spacing is done by various environments (specifically, in
--% \nonfillstart and \quotations).
--\newskip\singlespaceskip \singlespaceskip = 12.5pt
--\def\singlespace{%
-- % Why was this kern here? It messes up equalizing space above and below
-- % environments. --karl, 6may93
-- %{\advance \baselineskip by -\singlespaceskip
-- %\kern \baselineskip}%
-- \setleading \singlespaceskip
-+% @end foo executes the definition of \Efoo.
-+% But first, it executes a specialized version of \checkenv
-+%
-+\parseargdef\end{%
-+ \if 1\csname iscond.#1\endcsname
-+ \else
-+ % The general wording of \badenverr may not be ideal.
-+ \expandafter\checkenv\csname#1\endcsname
-+ \csname E#1\endcsname
-+ \endgroup
-+ \fi
- }
-
--%% Simple single-character @ commands
--
--% @@ prints an @
--% Kludge this until the fonts are right (grr).
--\def\@{{\tt\char64}}
--
--% This is turned off because it was never documented
--% and you can use @w{...} around a quote to suppress ligatures.
--%% Define @` and @' to be the same as ` and '
--%% but suppressing ligatures.
--%\def\`{{`}}
--%\def\'{{'}}
--
--% Used to generate quoted braces.
--\def\mylbrace {{\tt\char123}}
--\def\myrbrace {{\tt\char125}}
--\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 at lbracecmd[\{]%
-- @gdef at rbracecmd[\}]%
-- at 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
-+\newhelp\EMsimple{Press RETURN to continue.}
-
--% 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
--}
-
- % 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
-@@ -503,14 +596,32 @@
- % @* forces a line break.
- \def\*{\hfil\break\hbox{}\ignorespaces}
-
-+% @/ allows a line break.
-+\let\/=\allowbreak
-+
- % @. is an end-of-sentence period.
--\def\.{.\spacefactor=3000 }
-+\def\.{.\spacefactor=\endofsentencespacefactor\space}
-
- % @! is an end-of-sentence bang.
--\def\!{!\spacefactor=3000 }
-+\def\!{!\spacefactor=\endofsentencespacefactor\space}
-
- % @? is an end-of-sentence query.
--\def\?{?\spacefactor=3000 }
-+\def\?{?\spacefactor=\endofsentencespacefactor\space}
-+
-+% @frenchspacing on|off says whether to put extra space after punctuation.
-+%
-+\def\onword{on}
-+\def\offword{off}
-+%
-+\parseargdef\frenchspacing{%
-+ \def\temp{#1}%
-+ \ifx\temp\onword \plainfrenchspacing
-+ \else\ifx\temp\offword \plainnonfrenchspacing
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
-+ \fi\fi
-+}
-
- % @w prevents a word break. Without the \leavevmode, @w at the
- % beginning of a paragraph, when TeX is still in vertical mode, would
-@@ -525,47 +636,24 @@
- % therefore, no glue is inserted, and the space between the headline and
- % the text is small, which looks bad.
- %
--\def\group{\begingroup
-- \ifnum\catcode13=\active \else
-+% Another complication is that the group might be very large. This can
-+% cause the glue on the previous page to be unduly stretched, because it
-+% does not have much material. In this case, it's better to add an
-+% explicit \vfill so that the extra space is at the bottom. The
-+% threshold for doing this is if the group is more than \vfilllimit
-+% percent of a page (\vfilllimit can be changed inside of @tex).
-+%
-+\newbox\groupbox
-+\def\vfilllimit{0.7}
-+%
-+\envdef\group{%
-+ \ifnum\catcode`\^^M=\active \else
- \errhelp = \groupinvalidhelp
- \errmessage{@group invalid in context where filling is enabled}%
- \fi
-+ \startsavinginserts
- %
-- % The \vtop we start below produces a box with normal height and large
-- % depth; thus, TeX puts \baselineskip glue before it, and (when the
-- % next line of text is done) \lineskip glue after it. (See p.82 of
-- % the TeXbook.) Thus, space below is not quite equal to space
-- % above. But it's pretty close.
-- \def\Egroup{%
-- \egroup % End the \vtop.
-- \endgroup % End the \group.
-- }%
-- %
-- \vtop\bgroup
-- % We have to put a strut on the last line in case the @group is in
-- % the midst of an example, rather than completely enclosing it.
-- % Otherwise, the interline space between the last line of the group
-- % and the first line afterwards is too small. But we can't put the
-- % strut in \Egroup, since there it would be on a line by itself.
-- % Hence this just inserts a strut at the beginning of each line.
-- \everypar = {\strut}%
-- %
-- % Since we have a strut on every line, we don't need any of TeX's
-- % normal interline spacing.
-- \offinterlineskip
-- %
-- % OK, but now we have to do something about blank
-- % lines in the input in @example-like environments, which normally
-- % just turn into \lisppar, which will insert no space now that we've
-- % turned off the interline space. Simplest is to make them be an
-- % empty paragraph.
-- \ifx\par\lisppar
-- \edef\par{\leavevmode \par}%
-- %
-- % Reset ^^M's definition to new definition of \par.
-- \obeylines
-- \fi
-- %
-+ \setbox\groupbox = \vtop\bgroup
- % Do @comment since we are called inside an environment such as
- % @example, where each end-of-line in the input causes an
- % end-of-line in the output. We don't want the end-of-line after
-@@ -575,6 +663,32 @@
- \comment
- }
- %
-+% The \vtop produces a box with normal height and large depth; thus, TeX puts
-+% \baselineskip glue before it, and (when the next line of text is done)
-+% \lineskip glue after it. Thus, space below is not quite equal to space
-+% above. But it's pretty close.
-+\def\Egroup{%
-+ % To get correct interline space between the last line of the group
-+ % and the first line afterwards, we have to propagate \prevdepth.
-+ \endgraf % Not \par, as it may have been set to \lisppar.
-+ \global\dimen1 = \prevdepth
-+ \egroup % End the \vtop.
-+ % \dimen0 is the vertical size of the group's box.
-+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
-+ % \dimen2 is how much space is left on the page (more or less).
-+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
-+ % if the group doesn't fit on the current page, and it's a big big
-+ % group, force a page break.
-+ \ifdim \dimen0 > \dimen2
-+ \ifdim \pagetotal < \vfilllimit\pageheight
-+ \page
-+ \fi
-+ \fi
-+ \box\groupbox
-+ \prevdepth = \dimen1
-+ \checkinserts
-+}
-+%
- % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
- % message, so this ends up printing `@group can only ...'.
- %
-@@ -587,18 +701,7 @@ where each line of input produces a line
-
- \newdimen\mil \mil=0.001in
-
--\def\need{\parsearg\needx}
--
--% Old definition--didn't work.
--%\def\needx #1{\par %
--%% This method tries to make TeX break the page naturally
--%% if the depth of the box does not fit.
--%{\baselineskip=0pt%
--%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
--%\prevdepth=-1000pt
--%}}
--
--\def\needx#1{%
-+\parseargdef\need{%
- % Ensure vertical mode, so we don't make a big box in the middle of a
- % paragraph.
- \par
-@@ -637,37 +740,11 @@ where each line of input produces a line
- \fi
- }
-
--% @br forces paragraph break
-+% @br forces paragraph break (and is undocumented).
-
- \let\br = \par
-
--% @dots{} output an ellipsis using the current font.
--% We do .5em per period so that it has the same spacing in a typewriter
--% font as three actual period characters.
--%
--\def\dots{%
-- \leavevmode
-- \hbox to 1.5em{%
-- \hskip 0pt plus 0.25fil minus 0.25fil
-- .\hss.\hss.%
-- \hskip 0pt plus 0.5fil minus 0.5fil
-- }%
--}
--
--% @enddots{} is an end-of-sentence ellipsis.
--%
--\def\enddots{%
-- \leavevmode
-- \hbox to 2em{%
-- \hskip 0pt plus 0.25fil minus 0.25fil
-- .\hss.\hss.\hss.%
-- \hskip 0pt plus 0.5fil minus 0.5fil
-- }%
-- \spacefactor=3000
--}
--
--
--% @page forces the start of a new page
-+% @page forces the start of a new page.
- %
- \def\page{\par\vfill\supereject}
-
-@@ -679,57 +756,165 @@ where each line of input produces a line
- \newskip\exdentamount
-
- % This defn is used inside fill environments such as @defun.
--\def\exdent{\parsearg\exdentyyy}
--\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
-
- % This defn is used inside nofill environments such as @example.
--\def\nofillexdent{\parsearg\nofillexdentyyy}
--\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
--\leftline{\hskip\leftskip{\rm#1}}}}
--
--% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
-+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
-+ \leftline{\hskip\leftskip{\rm#1}}}}
-
--\def\inmargin#1{%
--\strut\vadjust{\nobreak\kern-\strutdepth
-- \vtop to \strutdepth{\baselineskip\strutdepth\vss
-- \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
-+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
-+% paragraph. For more general purposes, use the \margin insertion
-+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
-+%
- \newskip\inmarginspacing \inmarginspacing=1cm
- \def\strutdepth{\dp\strutbox}
-+%
-+\def\doinmargin#1#2{\strut\vadjust{%
-+ \nobreak
-+ \kern-\strutdepth
-+ \vtop to \strutdepth{%
-+ \baselineskip=\strutdepth
-+ \vss
-+ % if you have multiple lines of stuff to put here, you'll need to
-+ % make the vbox yourself of the appropriate size.
-+ \ifx#1l%
-+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
-+ \else
-+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
-+ \fi
-+ \null
-+ }%
-+}}
-+\def\inleftmargin{\doinmargin l}
-+\def\inrightmargin{\doinmargin r}
-+%
-+% @inmargin{TEXT [, RIGHT-TEXT]}
-+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
-+% else use TEXT for both).
-+%
-+\def\inmargin#1{\parseinmargin #1,,\finish}
-+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
-+ \setbox0 = \hbox{\ignorespaces #2}%
-+ \ifdim\wd0 > 0pt
-+ \def\lefttext{#1}% have both texts
-+ \def\righttext{#2}%
-+ \else
-+ \def\lefttext{#1}% have only one text
-+ \def\righttext{#1}%
-+ \fi
-+ %
-+ \ifodd\pageno
-+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
-+ \else
-+ \def\temp{\inleftmargin\lefttext}%
-+ \fi
-+ \temp
-+}
-
--%\hbox{{\rm#1}}\hfil\break}}
-+% @| inserts a changebar to the left of the current line. It should
-+% surround any changed text. This approach does *not* work if the
-+% change spans more than two lines of output. To handle that, we would
-+% have adopt a much more difficult approach (putting marks into the main
-+% vertical list for the beginning and end of each change). This command
-+% is not documented, not supported, and doesn't work.
-+%
-+\def\|{%
-+ % \vadjust can only be used in horizontal mode.
-+ \leavevmode
-+ %
-+ % Append this vertical mode material after the current line in the output.
-+ \vadjust{%
-+ % We want to insert a rule with the height and depth of the current
-+ % leading; that is exactly what \strutbox is supposed to record.
-+ \vskip-\baselineskip
-+ %
-+ % \vadjust-items are inserted at the left edge of the type. So
-+ % the \llap here moves out into the left-hand margin.
-+ \llap{%
-+ %
-+ % For a thicker or thinner bar, change the `1pt'.
-+ \vrule height\baselineskip width1pt
-+ %
-+ % This is the space between the bar and the text.
-+ \hskip 12pt
-+ }%
-+ }%
-+}
-
--% @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.
-+% @include FILE -- \input text of FILE.
-+%
-+\def\include{\parseargusing\filenamecatcodes\includezzz}
-+\def\includezzz#1{%
-+ \pushthisfilestack
- \def\thisfile{#1}%
-- \input\thisfile
--\endgroup}
-+ {%
-+ \makevalueexpandable % we want to expand any @value in FILE.
-+ \turnoffactive % and allow special characters in the expansion
-+ \indexnofonts % Allow `@@' and other weird things in file names.
-+ \wlog{texinfo.tex: doing @include of #1^^J}%
-+ \edef\temp{\noexpand\input #1 }%
-+ %
-+ % This trickery is to read FILE outside of a group, in case it makes
-+ % definitions, etc.
-+ \expandafter
-+ }\temp
-+ \popthisfilestack
-+}
-+\def\filenamecatcodes{%
-+ \catcode`\\=\other
-+ \catcode`~=\other
-+ \catcode`^=\other
-+ \catcode`_=\other
-+ \catcode`|=\other
-+ \catcode`<=\other
-+ \catcode`>=\other
-+ \catcode`+=\other
-+ \catcode`-=\other
-+ \catcode`\`=\other
-+ \catcode`\'=\other
-+}
-
--\def\thisfile{}
-+\def\pushthisfilestack{%
-+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
-+}
-+\def\pushthisfilestackX{%
-+ \expandafter\pushthisfilestackY\thisfile\StackTerm
-+}
-+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
-+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
-+}
-
--% @center line outputs that line, centered
-+\def\popthisfilestack{\errthisfilestackempty}
-+\def\errthisfilestackempty{\errmessage{Internal error:
-+ the stack of filenames is empty.}}
-
--\def\center{\parsearg\centerzzz}
--\def\centerzzz #1{{\advance\hsize by -\leftskip
--\advance\hsize by -\rightskip
--\centerline{#1}}}
-+\def\thisfile{}
-+
-+% @center line
-+% outputs that line, centered.
-+%
-+\parseargdef\center{%
-+ \ifhmode
-+ \let\next\centerH
-+ \else
-+ \let\next\centerV
-+ \fi
-+ \next{\hfil \ignorespaces#1\unskip \hfil}%
-+}
-+\def\centerH#1{%
-+ {%
-+ \hfil\break
-+ \advance\hsize by -\leftskip
-+ \advance\hsize by -\rightskip
-+ \line{#1}%
-+ \break
-+ }%
-+}
-+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
-
- % @sp n outputs n lines of vertical space
-
--\def\sp{\parsearg\spxxx}
--\def\spxxx #1{\vskip #1\baselineskip}
-+\parseargdef\sp{\vskip #1\baselineskip}
-
- % @comment ...line which is ignored...
- % @c is the same as @comment
-@@ -744,13 +929,13 @@ where each line of input produces a line
-
- % @paragraphindent NCHARS
- % We'll use ems for NCHARS, close enough.
--% We cannot implement @paragraphindent asis, though.
--%
-+% NCHARS can also be the word `asis' or `none'.
-+% We cannot feasibly implement @paragraphindent asis, though.
-+%
- \def\asisword{asis} % no translation, these are keywords
- \def\noneword{none}
- %
--\def\paragraphindent{\parsearg\doparagraphindent}
--\def\doparagraphindent#1{%
-+\parseargdef\paragraphindent{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
-@@ -767,8 +952,7 @@ where each line of input produces a line
- % We'll use ems for NCHARS like @paragraphindent.
- % It seems @exampleindent asis isn't necessary, but
- % I preserve it to make it similar to @paragraphindent.
--\def\exampleindent{\parsearg\doexampleindent}
--\def\doexampleindent#1{%
-+\parseargdef\exampleindent{%
- \def\temp{#1}%
- \ifx\temp\asisword
- \else
-@@ -780,26 +964,58 @@ where each line of input produces a line
- \fi
- }
-
--% @asis just yields its argument. Used with @table, for example.
-+% @firstparagraphindent WORD
-+% If WORD is `none', then suppress indentation of the first paragraph
-+% after a section heading. If WORD is `insert', then do indent at such
-+% paragraphs.
- %
--\def\asis#1{#1}
-+% The paragraph indentation is suppressed or not by calling
-+% \suppressfirstparagraphindent, which the sectioning commands do.
-+% We switch the definition of this back and forth according to WORD.
-+% By default, we suppress indentation.
-+%
-+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
-+\def\insertword{insert}
-+%
-+\parseargdef\firstparagraphindent{%
-+ \def\temp{#1}%
-+ \ifx\temp\noneword
-+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
-+ \else\ifx\temp\insertword
-+ \let\suppressfirstparagraphindent = \relax
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
-+ \fi\fi
-+}
-
--% @math means output in math mode.
--% We don't use $'s directly in the definition of \math because control
--% sequences like \math are expanded when the toc file is written. Then,
--% we read the toc file back, the $'s will be normal characters (as they
--% should be, according to the definition of Texinfo). So we must use a
--% control sequence to switch into and out of math mode.
-+% Here is how we actually suppress indentation. Redefine \everypar to
-+% \kern backwards by \parindent, and then reset itself to empty.
- %
--% This isn't quite enough for @math to work properly in indices, but it
--% seems unlikely it will ever be needed there.
-+% We also make \indent itself not actually do anything until the next
-+% paragraph.
- %
--\let\implicitmath = $
--\def\math#1{\implicitmath #1\implicitmath}
-+\gdef\dosuppressfirstparagraphindent{%
-+ \gdef\indent{%
-+ \restorefirstparagraphindent
-+ \indent
-+ }%
-+ \gdef\noindent{%
-+ \restorefirstparagraphindent
-+ \noindent
-+ }%
-+ \global\everypar = {%
-+ \kern -\parindent
-+ \restorefirstparagraphindent
-+ }%
-+}
-+
-+\gdef\restorefirstparagraphindent{%
-+ \global \let \indent = \ptexindent
-+ \global \let \noindent = \ptexnoindent
-+ \global \everypar = {}%
-+}
-
--% @bullet and @minus need the same treatment as @math, just above.
--\def\bullet{\implicitmath\ptexbullet\implicitmath}
--\def\minus{\implicitmath-\implicitmath}
-
- % @refill is a no-op.
- \let\refill=\relax
-@@ -815,20 +1031,20 @@ where each line of input produces a line
- % So open here the files we need to have open while reading the input.
- % This makes it possible to make a .fmt file for texinfo.
- \def\setfilename{%
-+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
- \iflinks
-- \readauxfile
-+ \tryauxfile
-+ % Open the new aux file. TeX will close it automatically at exit.
-+ \immediate\openout\auxfile=\jobname.aux
- \fi % \openindices needs to do some work in any case.
- \openindices
-- \fixbackslash % Turn off hack to swallow `\input texinfo'.
-- \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-+ \let\setfilename=\comment % Ignore extra @setfilename cmds.
- %
- % If texinfo.cnf is present on the system, read it.
- % Useful for site-wide @afourpaper, etc.
-- % Just to be on the safe side, close the input stream before the \input.
- \openin 1 texinfo.cnf
-- \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-- \closein1
-- \temp
-+ \ifeof 1 \else \input texinfo.cnf \fi
-+ \closein 1
- %
- \comment % Ignore the actual filename.
- }
-@@ -864,111 +1080,280 @@ where each line of input produces a line
- \newif\ifpdf
- \newif\ifpdfmakepagedest
-
--\ifx\pdfoutput\undefined
-- \pdffalse
-- \let\pdfmkdest = \gobble
-- \let\pdfurl = \gobble
-- \let\endlink = \relax
-- \let\linkcolor = \relax
-- \let\pdfmakeoutlines = \relax
-+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
-+% can be set). So we test for \relax and 0 as well as being undefined.
-+\ifx\pdfoutput\thisisundefined
- \else
-- \pdftrue
-- \pdfoutput = 1
-- \input pdfcolor
-+ \ifx\pdfoutput\relax
-+ \else
-+ \ifcase\pdfoutput
-+ \else
-+ \pdftrue
-+ \fi
-+ \fi
-+\fi
-+
-+% PDF uses PostScript string constants for the names of xref targets,
-+% for display in the outlines, and in other places. Thus, we have to
-+% double any backslashes. Otherwise, a name like "\node" will be
-+% interpreted as a newline (\n), followed by o, d, e. Not good.
-+%
-+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
-+% related messages. The final outcome is that it is up to the TeX user
-+% to double the backslashes and otherwise make the string valid, so
-+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
-+% do this reliably, so we use it.
-+
-+% #1 is a control sequence in which to do the replacements,
-+% which we \xdef.
-+\def\txiescapepdf#1{%
-+ \ifx\pdfescapestring\relax
-+ % No primitive available; should we give a warning or log?
-+ % Many times it won't matter.
-+ \else
-+ % The expandable \pdfescapestring primitive escapes parentheses,
-+ % backslashes, and other special chars.
-+ \xdef#1{\pdfescapestring{#1}}%
-+ \fi
-+}
-+
-+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
-+with PDF output, and none of those formats could be found. (.eps cannot
-+be supported due to the design of the PDF format; use regular TeX (DVI
-+output) for that.)}
-+
-+\ifpdf
-+ %
-+ % Color manipulation macros based on pdfcolor.tex,
-+ % except using rgb instead of cmyk; the latter is said to render as a
-+ % very dark gray on-screen and a very dark halftone in print, instead
-+ % of actual black.
-+ \def\rgbDarkRed{0.50 0.09 0.12}
-+ \def\rgbBlack{0 0 0}
-+ %
-+ % k sets the color for filling (usual text, etc.);
-+ % K sets the color for stroking (thin rules, e.g., normal _'s).
-+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
-+ %
-+ % Set color, and create a mark which defines \thiscolor accordingly,
-+ % so that \makeheadline knows which color to restore.
-+ \def\setcolor#1{%
-+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
-+ \domark
-+ \pdfsetcolor{#1}%
-+ }
-+ %
-+ \def\maincolor{\rgbBlack}
-+ \pdfsetcolor{\maincolor}
-+ \edef\thiscolor{\maincolor}
-+ \def\lastcolordefs{}
-+ %
-+ \def\makefootline{%
-+ \baselineskip24pt
-+ \line{\pdfsetcolor{\maincolor}\the\footline}%
-+ }
-+ %
-+ \def\makeheadline{%
-+ \vbox to 0pt{%
-+ \vskip-22.5pt
-+ \line{%
-+ \vbox to8.5pt{}%
-+ % Extract \thiscolor definition from the marks.
-+ \getcolormarks
-+ % Typeset the headline with \maincolor, then restore the color.
-+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
-+ }%
-+ \vss
-+ }%
-+ \nointerlineskip
-+ }
-+ %
-+ %
-+ \pdfcatalog{/PageMode /UseOutlines}
-+ %
-+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
- \def\dopdfimage#1#2#3{%
-- \def\imagewidth{#2}%
-- \def\imageheight{#3}%
-+ \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
-+ \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
-+ %
-+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
-+ % others). Let's try in that order, PDF first since if
-+ % someone has a scalable image, presumably better to use that than a
-+ % bitmap.
-+ \let\pdfimgext=\empty
-+ \begingroup
-+ \openin 1 #1.pdf \ifeof 1
-+ \openin 1 #1.PDF \ifeof 1
-+ \openin 1 #1.png \ifeof 1
-+ \openin 1 #1.jpg \ifeof 1
-+ \openin 1 #1.jpeg \ifeof 1
-+ \openin 1 #1.JPG \ifeof 1
-+ \errhelp = \nopdfimagehelp
-+ \errmessage{Could not find image file #1 for pdf}%
-+ \else \gdef\pdfimgext{JPG}%
-+ \fi
-+ \else \gdef\pdfimgext{jpeg}%
-+ \fi
-+ \else \gdef\pdfimgext{jpg}%
-+ \fi
-+ \else \gdef\pdfimgext{png}%
-+ \fi
-+ \else \gdef\pdfimgext{PDF}%
-+ \fi
-+ \else \gdef\pdfimgext{pdf}%
-+ \fi
-+ \closein 1
-+ \endgroup
-+ %
-+ % without \immediate, ancient pdftex seg faults when the same image is
-+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
- \ifnum\pdftexversion < 14
-- \pdfimage
-+ \immediate\pdfimage
- \else
-- \pdfximage
-+ \immediate\pdfximage
- \fi
-- \ifx\empty\imagewidth\else width \imagewidth \fi
-- \ifx\empty\imageheight\else height \imageheight \fi
-- {#1.pdf}%
-+ \ifdim \wd0 >0pt width \imagewidth \fi
-+ \ifdim \wd2 >0pt height \imageheight \fi
-+ \ifnum\pdftexversion<13
-+ #1.\pdfimgext
-+ \else
-+ {#1.\pdfimgext}%
-+ \fi
- \ifnum\pdftexversion < 14 \else
- \pdfrefximage \pdflastximage
- \fi}
-- \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
-- \def\pdfmkpgn#1{#1@}
-- \let\linkcolor = \Cyan
-- \def\endlink{\Black\pdfendlink}
-+ %
-+ \def\pdfmkdest#1{{%
-+ % We have to set dummies so commands such as @code, and characters
-+ % such as \, aren't expanded when present in a section title.
-+ \indexnofonts
-+ \turnoffactive
-+ \makevalueexpandable
-+ \def\pdfdestname{#1}%
-+ \txiescapepdf\pdfdestname
-+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
-+ }}
-+ %
-+ % used to mark target names; must be expandable.
-+ \def\pdfmkpgn#1{#1}
-+ %
-+ % by default, use a color that is dark enough to print on paper as
-+ % nearly black, but still distinguishable for online viewing.
-+ \def\urlcolor{\rgbDarkRed}
-+ \def\linkcolor{\rgbDarkRed}
-+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
-+ %
- % Adding outlines to PDF; macros for calculating structure of outlines
- % come from Petr Olsak
- \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
- \else \csname#1\endcsname \fi}
- \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
-- \advance\tempnum by1
-+ \advance\tempnum by 1
- \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-- \def\pdfmakeoutlines{{%
-- \openin 1 \jobname.toc
-- \ifeof 1\else\bgroup
-- \closein 1
-- \indexnofonts
-- \def\tt{}
-- % thanh's hack / proper braces in bookmarks
-- \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
-- \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
-- %
-- \def\chapentry ##1##2##3{}
-- \def\unnumbchapentry ##1##2{}
-- \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
-- \def\unnumbsecentry ##1##2{}
-- \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
-- \def\unnumbsubsecentry ##1##2{}
-- \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
-- \def\unnumbsubsubsecentry ##1##2{}
-- \input \jobname.toc
-- \def\chapentry ##1##2##3{%
-- \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
-- \def\unnumbchapentry ##1##2{%
-- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-- \def\secentry ##1##2##3##4{%
-- \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
-- \def\unnumbsecentry ##1##2{%
-- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-- \def\subsecentry ##1##2##3##4##5{%
-- \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
-- \def\unnumbsubsecentry ##1##2{%
-- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-- \def\subsubsecentry ##1##2##3##4##5##6{%
-- \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
-- \def\unnumbsubsubsecentry ##1##2{%
-- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-- \input \jobname.toc
-- \egroup\fi
-- }}
-- \def\makelinks #1,{%
-- \def\params{#1}\def\E{END}%
-- \ifx\params\E
-- \let\nextmakelinks=\relax
-+ %
-+ % #1 is the section text, which is what will be displayed in the
-+ % outline by the pdf viewer. #2 is the pdf expression for the number
-+ % of subentries (or empty, for subsubsections). #3 is the node text,
-+ % which might be empty if this toc entry had no corresponding node.
-+ % #4 is the page number
-+ %
-+ \def\dopdfoutline#1#2#3#4{%
-+ % Generate a link to the node text if that exists; else, use the
-+ % page number. We could generate a destination for the section
-+ % text in the case where a section has no node, but it doesn't
-+ % seem worth the trouble, since most documents are normally structured.
-+ \edef\pdfoutlinedest{#3}%
-+ \ifx\pdfoutlinedest\empty
-+ \def\pdfoutlinedest{#4}%
- \else
-- \let\nextmakelinks=\makelinks
-- \ifnum\lnkcount>0,\fi
-- \picknum{#1}%
-- \startlink attr{/Border [0 0 0]}
-- goto name{\pdfmkpgn{\the\pgn}}%
-- \linkcolor #1%
-- \advance\lnkcount by 1%
-- \endlink
-+ \txiescapepdf\pdfoutlinedest
- \fi
-- \nextmakelinks
-+ %
-+ % Also escape PDF chars in the display string.
-+ \edef\pdfoutlinetext{#1}%
-+ \txiescapepdf\pdfoutlinetext
-+ %
-+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
- }
-- \def\picknum#1{\expandafter\pn#1}
-- \def\pn#1{%
-- \def\p{#1}%
-- \ifx\p\lbrace
-- \let\nextpn=\ppn
-- \else
-- \let\nextpn=\ppnn
-- \def\first{#1}
-- \fi
-- \nextpn
-+ %
-+ \def\pdfmakeoutlines{%
-+ \begingroup
-+ % Read toc silently, to get counts of subentries for \pdfoutline.
-+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
-+ \def\numchapentry##1##2##3##4{%
-+ \def\thischapnum{##2}%
-+ \def\thissecnum{0}%
-+ \def\thissubsecnum{0}%
-+ }%
-+ \def\numsecentry##1##2##3##4{%
-+ \advancenumber{chap\thischapnum}%
-+ \def\thissecnum{##2}%
-+ \def\thissubsecnum{0}%
-+ }%
-+ \def\numsubsecentry##1##2##3##4{%
-+ \advancenumber{sec\thissecnum}%
-+ \def\thissubsecnum{##2}%
-+ }%
-+ \def\numsubsubsecentry##1##2##3##4{%
-+ \advancenumber{subsec\thissubsecnum}%
-+ }%
-+ \def\thischapnum{0}%
-+ \def\thissecnum{0}%
-+ \def\thissubsecnum{0}%
-+ %
-+ % use \def rather than \let here because we redefine \chapentry et
-+ % al. a second time, below.
-+ \def\appentry{\numchapentry}%
-+ \def\appsecentry{\numsecentry}%
-+ \def\appsubsecentry{\numsubsecentry}%
-+ \def\appsubsubsecentry{\numsubsubsecentry}%
-+ \def\unnchapentry{\numchapentry}%
-+ \def\unnsecentry{\numsecentry}%
-+ \def\unnsubsecentry{\numsubsecentry}%
-+ \def\unnsubsubsecentry{\numsubsubsecentry}%
-+ \readdatafile{toc}%
-+ %
-+ % Read toc second time, this time actually producing the outlines.
-+ % The `-' means take the \expnumber as the absolute number of
-+ % subentries, which we calculated on our first read of the .toc above.
-+ %
-+ % We use the node names as the destinations.
-+ \def\numchapentry##1##2##3##4{%
-+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
-+ \def\numsecentry##1##2##3##4{%
-+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
-+ \def\numsubsecentry##1##2##3##4{%
-+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
-+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
-+ \dopdfoutline{##1}{}{##3}{##4}}%
-+ %
-+ % PDF outlines are displayed using system fonts, instead of
-+ % document fonts. Therefore we cannot use special characters,
-+ % since the encoding is unknown. For example, the eogonek from
-+ % Latin 2 (0xea) gets translated to a | character. Info from
-+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
-+ %
-+ % TODO this right, we have to translate 8-bit characters to
-+ % their "best" equivalent, based on the @documentencoding. Too
-+ % much work for too little return. Just use the ASCII equivalents
-+ % we use for the index sort strings.
-+ %
-+ \indexnofonts
-+ \setupdatafile
-+ % We can have normal brace characters in the PDF outlines, unlike
-+ % Texinfo index files. So set that up.
-+ \def\{{\lbracecharliteral}%
-+ \def\}{\rbracecharliteral}%
-+ \catcode`\\=\active \otherbackslash
-+ \input \tocreadfilename
-+ \endgroup
- }
-- \def\ppn#1{\pgn=#1\gobble}
-- \def\ppnn{\pgn=\first}
-- \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
-- \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-+ {\catcode`[=1 \catcode`]=2
-+ \catcode`{=\other \catcode`}=\other
-+ \gdef\lbracecharliteral[{]%
-+ \gdef\rbracecharliteral[}]%
-+ ]
-+ %
- \def\skipspaces#1{\def\PP{#1}\def\D{|}%
- \ifx\PP\D\let\nextsp\relax
- \else\let\nextsp\skipspaces
-@@ -983,24 +1368,36 @@ where each line of input produces a line
- \else
- \let \startlink \pdfstartlink
- \fi
-+ % make a live url in pdf output.
- \def\pdfurl#1{%
- \begingroup
-- \normalturnoffactive\def\@{@}%
-- \leavevmode\Red
-+ % it seems we really need yet another set of dummies; have not
-+ % tried to figure out what each command should do in the context
-+ % of @url. for now, just make @/ a no-op, that's the only one
-+ % people have actually reported a problem with.
-+ %
-+ \normalturnoffactive
-+ \def\@{@}%
-+ \let\/=\empty
-+ \makevalueexpandable
-+ % do we want to go so far as to use \indexnofonts instead of just
-+ % special-casing \var here?
-+ \def\var##1{##1}%
-+ %
-+ \leavevmode\setcolor{\urlcolor}%
- \startlink attr{/Border [0 0 0]}%
- user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
-- % #1
- \endgroup}
- \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
- \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
- \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
- \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
- \def\maketoks{%
-- \expandafter\poptoks\the\toksA|ENDTOKS|
-+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
- \ifx\first0\adn0
- \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
- \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-- \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
-+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
- \else
- \ifnum0=\countA\else\makelink\fi
- \ifx\first.\let\next=\done\else
-@@ -1013,38 +1410,358 @@ where each line of input produces a line
- \def\makelink{\addtokens{\toksB}%
- {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
- \def\pdflink#1{%
-- \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
-- \linkcolor #1\endlink}
-- \def\mkpgn#1{#1@}
-+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
-+ \setcolor{\linkcolor}#1\endlink}
- \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
--\fi % \ifx\pdfoutput
-+\else
-+ % non-pdf mode
-+ \let\pdfmkdest = \gobble
-+ \let\pdfurl = \gobble
-+ \let\endlink = \relax
-+ \let\setcolor = \gobble
-+ \let\pdfsetcolor = \gobble
-+ \let\pdfmakeoutlines = \relax
-+\fi % \ifx\pdfoutput
-
-
- \message{fonts,}
--% Font-change commands.
-+
-+% Change the current font style to #1, remembering it in \curfontstyle.
-+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
-+% italics, not bold italics.
-+%
-+\def\setfontstyle#1{%
-+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
-+ \csname ten#1\endcsname % change the current font
-+}
-+
-+% Select #1 fonts with the current style.
-+%
-+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-+
-+\def\rm{\fam=0 \setfontstyle{rm}}
-+\def\it{\fam=\itfam \setfontstyle{it}}
-+\def\sl{\fam=\slfam \setfontstyle{sl}}
-+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
-+\def\tt{\fam=\ttfam \setfontstyle{tt}}
-+
-+% Unfortunately, we have to override this for titles and the like, since
-+% in those cases "rm" is bold. Sigh.
-+\def\rmisbold{\rm\def\curfontstyle{bf}}
-
- % Texinfo sort of supports the sans serif font style, which plain TeX does not.
--% So we set up a \sf analogous to plain's \rm, etc.
-+% So we set up a \sf.
- \newfam\sffam
--\def\sf{\fam=\sffam \tensf}
-+\def\sf{\fam=\sffam \setfontstyle{sf}}
- \let\li = \sf % Sometimes we call it \li, not \sf.
-
--% We don't need math for this one.
--\def\ttsl{\tenttsl}
-+% We don't need math for this font style.
-+\def\ttsl{\setfontstyle{ttsl}}
-+
-+
-+% Default leading.
-+\newdimen\textleading \textleading = 13.2pt
-+
-+% Set the baselineskip to #1, and the lineskip and strut size
-+% correspondingly. There is no deep meaning behind these magic numbers
-+% used as factors; they just match (closely enough) what Knuth defined.
-+%
-+\def\lineskipfactor{.08333}
-+\def\strutheightpercent{.70833}
-+\def\strutdepthpercent {.29167}
-+%
-+% can get a sort of poor man's double spacing by redefining this.
-+\def\baselinefactor{1}
-+%
-+\def\setleading#1{%
-+ \dimen0 = #1\relax
-+ \normalbaselineskip = \baselinefactor\dimen0
-+ \normallineskip = \lineskipfactor\normalbaselineskip
-+ \normalbaselines
-+ \setbox\strutbox =\hbox{%
-+ \vrule width0pt height\strutheightpercent\baselineskip
-+ depth \strutdepthpercent \baselineskip
-+ }%
-+}
-+
-+% PDF CMaps. See also LaTeX's t1.cmap.
-+%
-+% do nothing with this by default.
-+\expandafter\let\csname cmapOT1\endcsname\gobble
-+\expandafter\let\csname cmapOT1IT\endcsname\gobble
-+\expandafter\let\csname cmapOT1TT\endcsname\gobble
-+
-+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
-+% (\pdffontattr was introduced many years ago, but people still run
-+% older pdftex's; it's easy to conditionalize, so we do.)
-+\ifpdf \ifx\pdffontattr\thisisundefined \else
-+ \begingroup
-+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-+%%DocumentNeededResources: ProcSet (CIDInit)
-+%%IncludeResource: ProcSet (CIDInit)
-+%%BeginResource: CMap (TeX-OT1-0)
-+%%Title: (TeX-OT1-0 TeX OT1 0)
-+%%Version: 1.000
-+%%EndComments
-+/CIDInit /ProcSet findresource begin
-+12 dict begin
-+begincmap
-+/CIDSystemInfo
-+<< /Registry (TeX)
-+/Ordering (OT1)
-+/Supplement 0
-+>> def
-+/CMapName /TeX-OT1-0 def
-+/CMapType 2 def
-+1 begincodespacerange
-+<00> <7F>
-+endcodespacerange
-+8 beginbfrange
-+<00> <01> <0393>
-+<09> <0A> <03A8>
-+<23> <26> <0023>
-+<28> <3B> <0028>
-+<3F> <5B> <003F>
-+<5D> <5E> <005D>
-+<61> <7A> <0061>
-+<7B> <7C> <2013>
-+endbfrange
-+40 beginbfchar
-+<02> <0398>
-+<03> <039B>
-+<04> <039E>
-+<05> <03A0>
-+<06> <03A3>
-+<07> <03D2>
-+<08> <03A6>
-+<0B> <00660066>
-+<0C> <00660069>
-+<0D> <0066006C>
-+<0E> <006600660069>
-+<0F> <00660066006C>
-+<10> <0131>
-+<11> <0237>
-+<12> <0060>
-+<13> <00B4>
-+<14> <02C7>
-+<15> <02D8>
-+<16> <00AF>
-+<17> <02DA>
-+<18> <00B8>
-+<19> <00DF>
-+<1A> <00E6>
-+<1B> <0153>
-+<1C> <00F8>
-+<1D> <00C6>
-+<1E> <0152>
-+<1F> <00D8>
-+<21> <0021>
-+<22> <201D>
-+<27> <2019>
-+<3C> <00A1>
-+<3D> <003D>
-+<3E> <00BF>
-+<5C> <201C>
-+<5F> <02D9>
-+<60> <2018>
-+<7D> <02DD>
-+<7E> <007E>
-+<7F> <00A8>
-+endbfchar
-+endcmap
-+CMapName currentdict /CMap defineresource pop
-+end
-+end
-+%%EndResource
-+%%EOF
-+ }\endgroup
-+ \expandafter\edef\csname cmapOT1\endcsname#1{%
-+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-+ }%
-+%
-+% \cmapOT1IT
-+ \begingroup
-+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-+%%DocumentNeededResources: ProcSet (CIDInit)
-+%%IncludeResource: ProcSet (CIDInit)
-+%%BeginResource: CMap (TeX-OT1IT-0)
-+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
-+%%Version: 1.000
-+%%EndComments
-+/CIDInit /ProcSet findresource begin
-+12 dict begin
-+begincmap
-+/CIDSystemInfo
-+<< /Registry (TeX)
-+/Ordering (OT1IT)
-+/Supplement 0
-+>> def
-+/CMapName /TeX-OT1IT-0 def
-+/CMapType 2 def
-+1 begincodespacerange
-+<00> <7F>
-+endcodespacerange
-+8 beginbfrange
-+<00> <01> <0393>
-+<09> <0A> <03A8>
-+<25> <26> <0025>
-+<28> <3B> <0028>
-+<3F> <5B> <003F>
-+<5D> <5E> <005D>
-+<61> <7A> <0061>
-+<7B> <7C> <2013>
-+endbfrange
-+42 beginbfchar
-+<02> <0398>
-+<03> <039B>
-+<04> <039E>
-+<05> <03A0>
-+<06> <03A3>
-+<07> <03D2>
-+<08> <03A6>
-+<0B> <00660066>
-+<0C> <00660069>
-+<0D> <0066006C>
-+<0E> <006600660069>
-+<0F> <00660066006C>
-+<10> <0131>
-+<11> <0237>
-+<12> <0060>
-+<13> <00B4>
-+<14> <02C7>
-+<15> <02D8>
-+<16> <00AF>
-+<17> <02DA>
-+<18> <00B8>
-+<19> <00DF>
-+<1A> <00E6>
-+<1B> <0153>
-+<1C> <00F8>
-+<1D> <00C6>
-+<1E> <0152>
-+<1F> <00D8>
-+<21> <0021>
-+<22> <201D>
-+<23> <0023>
-+<24> <00A3>
-+<27> <2019>
-+<3C> <00A1>
-+<3D> <003D>
-+<3E> <00BF>
-+<5C> <201C>
-+<5F> <02D9>
-+<60> <2018>
-+<7D> <02DD>
-+<7E> <007E>
-+<7F> <00A8>
-+endbfchar
-+endcmap
-+CMapName currentdict /CMap defineresource pop
-+end
-+end
-+%%EndResource
-+%%EOF
-+ }\endgroup
-+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
-+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-+ }%
-+%
-+% \cmapOT1TT
-+ \begingroup
-+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-+%%DocumentNeededResources: ProcSet (CIDInit)
-+%%IncludeResource: ProcSet (CIDInit)
-+%%BeginResource: CMap (TeX-OT1TT-0)
-+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
-+%%Version: 1.000
-+%%EndComments
-+/CIDInit /ProcSet findresource begin
-+12 dict begin
-+begincmap
-+/CIDSystemInfo
-+<< /Registry (TeX)
-+/Ordering (OT1TT)
-+/Supplement 0
-+>> def
-+/CMapName /TeX-OT1TT-0 def
-+/CMapType 2 def
-+1 begincodespacerange
-+<00> <7F>
-+endcodespacerange
-+5 beginbfrange
-+<00> <01> <0393>
-+<09> <0A> <03A8>
-+<21> <26> <0021>
-+<28> <5F> <0028>
-+<61> <7E> <0061>
-+endbfrange
-+32 beginbfchar
-+<02> <0398>
-+<03> <039B>
-+<04> <039E>
-+<05> <03A0>
-+<06> <03A3>
-+<07> <03D2>
-+<08> <03A6>
-+<0B> <2191>
-+<0C> <2193>
-+<0D> <0027>
-+<0E> <00A1>
-+<0F> <00BF>
-+<10> <0131>
-+<11> <0237>
-+<12> <0060>
-+<13> <00B4>
-+<14> <02C7>
-+<15> <02D8>
-+<16> <00AF>
-+<17> <02DA>
-+<18> <00B8>
-+<19> <00DF>
-+<1A> <00E6>
-+<1B> <0153>
-+<1C> <00F8>
-+<1D> <00C6>
-+<1E> <0152>
-+<1F> <00D8>
-+<20> <2423>
-+<27> <2019>
-+<60> <2018>
-+<7F> <00A8>
-+endbfchar
-+endcmap
-+CMapName currentdict /CMap defineresource pop
-+end
-+end
-+%%EndResource
-+%%EOF
-+ }\endgroup
-+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
-+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-+ }%
-+\fi\fi
-
--% Use Computer Modern fonts at \magstephalf (11pt).
--\newcount\mainmagstep
--\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}
-+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
-+% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
-+% empty to omit).
-+\def\setfont#1#2#3#4#5{%
-+ \font#1=\fontprefix#2#3 scaled #4
-+ \csname cmap#5\endcsname#1%
-+}
-+% This is what gets called when #5 of \setfont is empty.
-+\let\cmap\gobble
-+% emacs-page end of cmaps
-
- % 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
-+\ifx\fontprefix\thisisundefined
- \def\fontprefix{cm}
- \fi
- % Support font families that don't use the same naming scheme as CM.
-@@ -1064,196 +1781,621 @@ where each line of input produces a line
- \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}
-+% Definitions for a main text size of 11pt. This is the default in
-+% Texinfo.
-+%
-+\def\definetextfontsizexi{%
-+% Text fonts (11.2pt, magstep1).
-+\def\textnominalsize{11pt}
-+\edef\mainmagstep{\magstephalf}
-+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
- \font\texti=cmmi10 scaled \mainmagstep
- \font\textsy=cmsy10 scaled \mainmagstep
-+\def\textecsize{1095}
-
--% 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}
-+% A few fonts for @defun names and args.
-+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
-+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
-+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-
- % Fonts for indices, footnotes, small examples (9pt).
--\setfont\smallrm\rmshape{9}{1000}
--\setfont\smalltt\ttshape{9}{1000}
--\setfont\smallbf\bfshape{10}{900}
--\setfont\smallit\itshape{9}{1000}
--\setfont\smallsl\slshape{9}{1000}
--\setfont\smallsf\sfshape{9}{1000}
--\setfont\smallsc\scshape{10}{900}
--\setfont\smallttsl\ttslshape{10}{900}
-+\def\smallnominalsize{9pt}
-+\setfont\smallrm\rmshape{9}{1000}{OT1}
-+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-+\setfont\smallbf\bfshape{10}{900}{OT1}
-+\setfont\smallit\itshape{9}{1000}{OT1IT}
-+\setfont\smallsl\slshape{9}{1000}{OT1}
-+\setfont\smallsf\sfshape{9}{1000}{OT1}
-+\setfont\smallsc\scshape{10}{900}{OT1}
-+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
- \font\smalli=cmmi9
- \font\smallsy=cmsy9
-+\def\smallecsize{0900}
-
--% Fonts for title page:
--\setfont\titlerm\rmbshape{12}{\magstep3}
--\setfont\titleit\itbshape{10}{\magstep4}
--\setfont\titlesl\slbshape{10}{\magstep4}
--\setfont\titlett\ttbshape{12}{\magstep3}
--\setfont\titlettsl\ttslshape{10}{\magstep4}
--\setfont\titlesf\sfbshape{17}{\magstep1}
-+% Fonts for small examples (8pt).
-+\def\smallernominalsize{8pt}
-+\setfont\smallerrm\rmshape{8}{1000}{OT1}
-+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-+\setfont\smallerbf\bfshape{10}{800}{OT1}
-+\setfont\smallerit\itshape{8}{1000}{OT1IT}
-+\setfont\smallersl\slshape{8}{1000}{OT1}
-+\setfont\smallersf\sfshape{8}{1000}{OT1}
-+\setfont\smallersc\scshape{10}{800}{OT1}
-+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-+\font\smalleri=cmmi8
-+\font\smallersy=cmsy8
-+\def\smallerecsize{0800}
-+
-+% Fonts for title page (20.4pt):
-+\def\titlenominalsize{20pt}
-+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
- \let\titlebf=\titlerm
--\setfont\titlesc\scbshape{10}{\magstep4}
-+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
- \font\titlei=cmmi12 scaled \magstep3
- \font\titlesy=cmsy10 scaled \magstep4
--\def\authorrm{\secrm}
-+\def\titleecsize{2074}
-
- % 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{17}{1000}
-+\def\chapnominalsize{17pt}
-+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
-+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
-+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
-+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
-+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
-+\setfont\chapsf\sfbshape{17}{1000}{OT1}
- \let\chapbf=\chaprm
--\setfont\chapsc\scbshape{10}{\magstep3}
-+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
- \font\chapi=cmmi12 scaled \magstep2
- \font\chapsy=cmsy10 scaled \magstep3
-+\def\chapecsize{1728}
-
- % 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}
-+\def\secnominalsize{14pt}
-+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
-+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
-+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
-+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
-+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
-+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
- \let\secbf\secrm
--\setfont\secsc\scbshape{10}{\magstep2}
-+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
- \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
-+\def\sececsize{1440}
-
- % 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}{1315}
--\setfont\ssecsf\sfbshape{12}{\magstephalf}
-+\def\ssecnominalsize{13pt}
-+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
-+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
-+\setfont\ssecsl\slbshape{10}{1315}{OT1}
-+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
-+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
-+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
- \let\ssecbf\ssecrm
--\setfont\ssecsc\scbshape{10}{\magstep1}
-+\setfont\ssecsc\scbshape{10}{1315}{OT1}
- \font\sseci=cmmi12 scaled \magstephalf
- \font\ssecsy=cmsy10 scaled 1315
--% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
--% but that is not a standard magnification.
-+\def\ssececsize{1200}
-+
-+% Reduced fonts for @acro in text (10pt).
-+\def\reducednominalsize{10pt}
-+\setfont\reducedrm\rmshape{10}{1000}{OT1}
-+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
-+\setfont\reducedbf\bfshape{10}{1000}{OT1}
-+\setfont\reducedit\itshape{10}{1000}{OT1IT}
-+\setfont\reducedsl\slshape{10}{1000}{OT1}
-+\setfont\reducedsf\sfshape{10}{1000}{OT1}
-+\setfont\reducedsc\scshape{10}{1000}{OT1}
-+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
-+\font\reducedi=cmmi10
-+\font\reducedsy=cmsy10
-+\def\reducedecsize{1000}
-+
-+\textleading = 13.2pt % line spacing for 11pt CM
-+\textfonts % reset the current fonts
-+\rm
-+} % end of 11pt text font size definitions
-+
-+
-+% Definitions to make the main text be 10pt Computer Modern, with
-+% section, chapter, etc., sizes following suit. This is for the GNU
-+% Press printing of the Emacs 22 manual. Maybe other manuals in the
-+% future. Used with @smallbook, which sets the leading to 12pt.
-+%
-+\def\definetextfontsizex{%
-+% Text fonts (10pt).
-+\def\textnominalsize{10pt}
-+\edef\mainmagstep{1000}
-+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
-+\font\texti=cmmi10 scaled \mainmagstep
-+\font\textsy=cmsy10 scaled \mainmagstep
-+\def\textecsize{1000}
-+
-+% A few fonts for @defun names and args.
-+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
-+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
-+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-+
-+% Fonts for indices, footnotes, small examples (9pt).
-+\def\smallnominalsize{9pt}
-+\setfont\smallrm\rmshape{9}{1000}{OT1}
-+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-+\setfont\smallbf\bfshape{10}{900}{OT1}
-+\setfont\smallit\itshape{9}{1000}{OT1IT}
-+\setfont\smallsl\slshape{9}{1000}{OT1}
-+\setfont\smallsf\sfshape{9}{1000}{OT1}
-+\setfont\smallsc\scshape{10}{900}{OT1}
-+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
-+\font\smalli=cmmi9
-+\font\smallsy=cmsy9
-+\def\smallecsize{0900}
-+
-+% Fonts for small examples (8pt).
-+\def\smallernominalsize{8pt}
-+\setfont\smallerrm\rmshape{8}{1000}{OT1}
-+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-+\setfont\smallerbf\bfshape{10}{800}{OT1}
-+\setfont\smallerit\itshape{8}{1000}{OT1IT}
-+\setfont\smallersl\slshape{8}{1000}{OT1}
-+\setfont\smallersf\sfshape{8}{1000}{OT1}
-+\setfont\smallersc\scshape{10}{800}{OT1}
-+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-+\font\smalleri=cmmi8
-+\font\smallersy=cmsy8
-+\def\smallerecsize{0800}
-+
-+% Fonts for title page (20.4pt):
-+\def\titlenominalsize{20pt}
-+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
-+\let\titlebf=\titlerm
-+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
-+\font\titlei=cmmi12 scaled \magstep3
-+\font\titlesy=cmsy10 scaled \magstep4
-+\def\titleecsize{2074}
-+
-+% Chapter fonts (14.4pt).
-+\def\chapnominalsize{14pt}
-+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
-+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
-+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
-+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
-+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
-+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
-+\let\chapbf\chaprm
-+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
-+\font\chapi=cmmi12 scaled \magstep1
-+\font\chapsy=cmsy10 scaled \magstep2
-+\def\chapecsize{1440}
-+
-+% Section fonts (12pt).
-+\def\secnominalsize{12pt}
-+\setfont\secrm\rmbshape{12}{1000}{OT1}
-+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
-+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
-+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
-+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
-+\setfont\secsf\sfbshape{12}{1000}{OT1}
-+\let\secbf\secrm
-+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
-+\font\seci=cmmi12
-+\font\secsy=cmsy10 scaled \magstep1
-+\def\sececsize{1200}
-+
-+% Subsection fonts (10pt).
-+\def\ssecnominalsize{10pt}
-+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
-+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
-+\setfont\ssecsl\slbshape{10}{1000}{OT1}
-+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
-+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
-+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
-+\let\ssecbf\ssecrm
-+\setfont\ssecsc\scbshape{10}{1000}{OT1}
-+\font\sseci=cmmi10
-+\font\ssecsy=cmsy10
-+\def\ssececsize{1000}
-+
-+% Reduced fonts for @acro in text (9pt).
-+\def\reducednominalsize{9pt}
-+\setfont\reducedrm\rmshape{9}{1000}{OT1}
-+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
-+\setfont\reducedbf\bfshape{10}{900}{OT1}
-+\setfont\reducedit\itshape{9}{1000}{OT1IT}
-+\setfont\reducedsl\slshape{9}{1000}{OT1}
-+\setfont\reducedsf\sfshape{9}{1000}{OT1}
-+\setfont\reducedsc\scshape{10}{900}{OT1}
-+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
-+\font\reducedi=cmmi9
-+\font\reducedsy=cmsy9
-+\def\reducedecsize{0900}
-+
-+\divide\parskip by 2 % reduce space between paragraphs
-+\textleading = 12pt % line spacing for 10pt CM
-+\textfonts % reset the current fonts
-+\rm
-+} % end of 10pt text font size definitions
-+
-+
-+% We provide the user-level command
-+% @fonttextsize 10
-+% (or 11) to redefine the text font size. pt is assumed.
-+%
-+\def\xiword{11}
-+\def\xword{10}
-+\def\xwordpt{10pt}
-+%
-+\parseargdef\fonttextsize{%
-+ \def\textsizearg{#1}%
-+ %\wlog{doing @fonttextsize \textsizearg}%
-+ %
-+ % Set \globaldefs so that documents can use this inside @tex, since
-+ % makeinfo 4.8 does not support it, but we need it nonetheless.
-+ %
-+ \begingroup \globaldefs=1
-+ \ifx\textsizearg\xword \definetextfontsizex
-+ \else \ifx\textsizearg\xiword \definetextfontsizexi
-+ \else
-+ \errhelp=\EMsimple
-+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
-+ \fi\fi
-+ \endgroup
-+}
-+
-
- % In order for the font changes to affect most math symbols and letters,
- % we have to define the \textfont of the standard families. Since
--% texinfo doesn't allow for producing subscripts and superscripts, we
--% don't bother to reset \scriptfont and \scriptscriptfont (which would
--% also require loading a lot more fonts).
-+% texinfo doesn't allow for producing subscripts and superscripts except
-+% in the main text, we don't bother to reset \scriptfont and
-+% \scriptscriptfont (which would also require loading a lot more fonts).
- %
- \def\resetmathfonts{%
-- \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
-- \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
-- \textfont\ttfam = \tentt \textfont\sffam = \tensf
-+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
-+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
-+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
- }
-
--
- % 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.
-+% of just \STYLE. We do this because \STYLE needs to also set the
-+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
-+% \tenSTYLE to set the current font.
-+%
-+% Each font-changing command also sets the names \lsize (one size lower)
-+% and \lllsize (three sizes lower). These relative commands are used in
-+% the LaTeX logo and acronyms.
-+%
-+% This all needs generalizing, badly.
-+%
- \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}
-+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
-+ \let\tenttsl=\textttsl
-+ \def\curfontsize{text}%
-+ \def\lsize{reduced}\def\lllsize{smaller}%
-+ \resetmathfonts \setleading{\textleading}}
- \def\titlefonts{%
- \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
- \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
- \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
- \let\tenttsl=\titlettsl
-- \resetmathfonts \setleading{25pt}}
--\def\titlefont#1{{\titlefonts\rm #1}}
-+ \def\curfontsize{title}%
-+ \def\lsize{chap}\def\lllsize{subsec}%
-+ \resetmathfonts \setleading{27pt}}
-+\def\titlefont#1{{\titlefonts\rmisbold #1}}
- \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
-+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-+ \let\tenttsl=\chapttsl
-+ \def\curfontsize{chap}%
-+ \def\lsize{sec}\def\lllsize{text}%
- \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
-+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-+ \let\tenttsl=\secttsl
-+ \def\curfontsize{sec}%
-+ \def\lsize{subsec}\def\lllsize{reduced}%
- \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
-+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-+ \let\tenttsl=\ssecttsl
-+ \def\curfontsize{ssec}%
-+ \def\lsize{text}\def\lllsize{small}%
- \resetmathfonts \setleading{15pt}}
--\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-+\let\subsubsecfonts = \subsecfonts
-+\def\reducedfonts{%
-+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
-+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
-+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
-+ \let\tenttsl=\reducedttsl
-+ \def\curfontsize{reduced}%
-+ \def\lsize{small}\def\lllsize{smaller}%
-+ \resetmathfonts \setleading{10.5pt}}
- \def\smallfonts{%
- \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
- \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
- \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
- \let\tenttsl=\smallttsl
-- \resetmathfonts \setleading{11pt}}
-+ \def\curfontsize{small}%
-+ \def\lsize{smaller}\def\lllsize{smaller}%
-+ \resetmathfonts \setleading{10.5pt}}
-+\def\smallerfonts{%
-+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
-+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
-+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
-+ \let\tenttsl=\smallerttsl
-+ \def\curfontsize{smaller}%
-+ \def\lsize{smaller}\def\lllsize{smaller}%
-+ \resetmathfonts \setleading{9.5pt}}
-
--% Set up the default fonts, so we can use them for creating boxes.
--%
--\textfonts
-+% Fonts for short table of contents.
-+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
-+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
-+\setfont\shortcontsl\slshape{12}{1000}{OT1}
-+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
-
--% Define these so they can be easily changed for other fonts.
-+% Define these just so they can be easily changed for other fonts.
- \def\angleleft{$\langle$}
- \def\angleright{$\rangle$}
-
-+% Set the fonts to use with the @small... environments.
-+\let\smallexamplefonts = \smallfonts
-+
-+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
-+% can fit this many characters:
-+% 8.5x11=86 smallbook=72 a4=90 a5=69
-+% If we use \scriptfonts (8pt), then we can fit this many characters:
-+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
-+% For me, subjectively, the few extra characters that fit aren't worth
-+% the additional smallness of 8pt. So I'm making the default 9pt.
-+%
-+% By the way, for comparison, here's what fits with @example (10pt):
-+% 8.5x11=71 smallbook=60 a4=75 a5=58
-+% --karl, 24jan03.
-+
-+% Set up the default fonts, so we can use them for creating boxes.
-+%
-+\definetextfontsizexi
-+
-+
-+\message{markup,}
-+
-+% 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 }
-+
-+% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will
-+% define and register \INITMACRO to be called on markup style changes.
-+% \INITMACRO can check \currentmarkupstyle for the innermost
-+% style and the set of \ifmarkupSTYLE switches for all styles
-+% currently in effect.
-+\newif\ifmarkupvar
-+\newif\ifmarkupsamp
-+\newif\ifmarkupkey
-+%\newif\ifmarkupfile % @file == @samp.
-+%\newif\ifmarkupoption % @option == @samp.
-+\newif\ifmarkupcode
-+\newif\ifmarkupkbd
-+%\newif\ifmarkupenv % @env == @code.
-+%\newif\ifmarkupcommand % @command == @code.
-+\newif\ifmarkuptex % @tex (and part of @math, for now).
-+\newif\ifmarkupexample
-+\newif\ifmarkupverb
-+\newif\ifmarkupverbatim
-+
-+\let\currentmarkupstyle\empty
-+
-+\def\setupmarkupstyle#1{%
-+ \csname markup#1true\endcsname
-+ \def\currentmarkupstyle{#1}%
-+ \markupstylesetup
-+}
-+
-+\let\markupstylesetup\empty
-+
-+\def\defmarkupstylesetup#1{%
-+ \expandafter\def\expandafter\markupstylesetup
-+ \expandafter{\markupstylesetup #1}%
-+ \def#1%
-+}
-+
-+% Markup style setup for left and right quotes.
-+\defmarkupstylesetup\markupsetuplq{%
-+ \expandafter\let\expandafter \temp
-+ \csname markupsetuplq\currentmarkupstyle\endcsname
-+ \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
-+}
-+
-+\defmarkupstylesetup\markupsetuprq{%
-+ \expandafter\let\expandafter \temp
-+ \csname markupsetuprq\currentmarkupstyle\endcsname
-+ \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
-+}
-+
-+{
-+\catcode`\'=\active
-+\catcode`\`=\active
-+
-+\gdef\markupsetuplqdefault{\let`\lq}
-+\gdef\markupsetuprqdefault{\let'\rq}
-+
-+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
-+\gdef\markupsetcodequoteright{\let'\codequoteright}
-+
-+\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft}
-+}
-+
-+\let\markupsetuplqcode \markupsetcodequoteleft
-+\let\markupsetuprqcode \markupsetcodequoteright
-+%
-+\let\markupsetuplqexample \markupsetcodequoteleft
-+\let\markupsetuprqexample \markupsetcodequoteright
-+%
-+\let\markupsetuplqsamp \markupsetcodequoteleft
-+\let\markupsetuprqsamp \markupsetcodequoteright
-+%
-+\let\markupsetuplqverb \markupsetcodequoteleft
-+\let\markupsetuprqverb \markupsetcodequoteright
-+%
-+\let\markupsetuplqverbatim \markupsetcodequoteleft
-+\let\markupsetuprqverbatim \markupsetcodequoteright
-+
-+\let\markupsetuplqkbd \markupsetnoligaturesquoteleft
-+
-+% Allow an option to not use regular directed right quote/apostrophe
-+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
-+% The undirected quote is ugly, so don't make it the default, but it
-+% works for pasting with more pdf viewers (at least evince), the
-+% lilypond developers report. xpdf does work with the regular 0x27.
-+%
-+\def\codequoteright{%
-+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
-+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
-+ '%
-+ \else \char'15 \fi
-+ \else \char'15 \fi
-+}
-+%
-+% and a similar option for the left quote char vs. a grave accent.
-+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
-+% the code environments to do likewise.
-+%
-+\def\codequoteleft{%
-+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
-+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
-+ % [Knuth] pp. 380,381,391
-+ % \relax disables Spanish ligatures ?` and !` of \tt font.
-+ \relax`%
-+ \else \char'22 \fi
-+ \else \char'22 \fi
-+}
-+
-+% Commands to set the quote options.
-+%
-+\parseargdef\codequoteundirected{%
-+ \def\temp{#1}%
-+ \ifx\temp\onword
-+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
-+ = t%
-+ \else\ifx\temp\offword
-+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
-+ = \relax
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
-+ \fi\fi
-+}
-+%
-+\parseargdef\codequotebacktick{%
-+ \def\temp{#1}%
-+ \ifx\temp\onword
-+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
-+ = t%
-+ \else\ifx\temp\offword
-+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
-+ = \relax
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
-+ \fi\fi
-+}
-+
-+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
-+\def\noligaturesquoteleft{\relax\lq}
-+
- % Count depth in font-changes, for error checks
- \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}
-+% Font commands.
-
--%% Add scribe-like font environments, plus @l for inline lisp (usually sans
--%% serif) and @ii for TeX italic
-+% #1 is the font command (\sl or \it), #2 is the text to slant.
-+% If we are in a monospaced environment, however, 1) always use \ttsl,
-+% and 2) do not add an italic correction.
-+\def\dosmartslant#1#2{%
-+ \ifusingtt
-+ {{\ttsl #2}\let\next=\relax}%
-+ {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
-+ \next
-+}
-+\def\smartslanted{\dosmartslant\sl}
-+\def\smartitalic{\dosmartslant\it}
-
--% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
--% unless the following character is such as not to need one.
--\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
--\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
--\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
-+% Output an italic correction unless \next (presumed to be the following
-+% character) is such as not to need one.
-+\def\smartitaliccorrection{%
-+ \ifx\next,%
-+ \else\ifx\next-%
-+ \else\ifx\next.%
-+ \else\ptexslash
-+ \fi\fi\fi
-+ \aftersmartic
-+}
-+
-+% like \smartslanted except unconditionally uses \ttsl, and no ic.
-+% @var is set to this for defun arguments.
-+\def\ttslanted#1{{\ttsl #1}}
-+
-+% @cite is like \smartslanted except unconditionally use \sl. We never want
-+% ttsl for book titles, do we?
-+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
-+
-+\def\aftersmartic{}
-+\def\var#1{%
-+ \let\saveaftersmartic = \aftersmartic
-+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
-+ \smartslanted{#1}%
-+}
-
- \let\i=\smartitalic
--\let\var=\smartslanted
-+\let\slanted=\smartslanted
- \let\dfn=\smartslanted
- \let\emph=\smartitalic
--\let\cite=\smartslanted
-
-+% Explicit font changes: @r, @sc, undocumented @ii.
-+\def\r#1{{\rm #1}} % roman font
-+\def\sc#1{{\smallcaps#1}} % smallcaps font
-+\def\ii#1{{\it #1}} % italic font
-+
-+% @b, explicit bold. Also @strong.
- \def\b#1{{\bf #1}}
- \let\strong=\b
-
-+% @sansserif, explicit sans.
-+\def\sansserif#1{{\sf #1}}
-+
- % We can't just use \exhyphenpenalty, because that only has effect at
- % the end of a paragraph. Restore normal hyphenation at the end of the
- % group within which \nohyphenation is presumably called.
-@@ -1261,22 +2403,53 @@ where each line of input produces a line
- \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
- \def\restorehyphenation{\hyphenchar\font = `- }
-
-+% Set sfcode to normal for the chars that usually have another value.
-+% Can't use plain's \frenchspacing because it uses the `\x notation, and
-+% sometimes \x has an active definition that messes things up.
-+%
-+\catcode`@=11
-+ \def\plainfrenchspacing{%
-+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
-+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
-+ \def\endofsentencespacefactor{1000}% for @. and friends
-+ }
-+ \def\plainnonfrenchspacing{%
-+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
-+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
-+ \def\endofsentencespacefactor{3000}% for @. and friends
-+ }
-+\catcode`@=\other
-+\def\endofsentencespacefactor{3000}% default
-+
-+% @t, explicit typewriter.
- \def\t#1{%
-- {\tt \rawbackslash \frenchspacing #1}%
-+ {\tt \rawbackslash \plainfrenchspacing #1}%
- \null
- }
--\let\ttfont=\t
--\def\samp#1{`\tclose{#1}'\null}
--\setfont\keyrm\rmshape{8}{1000}
--\font\keysy=cmsy9
--\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-- \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-- \vbox{\hrule\kern-0.4pt
-- \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-- \kern-0.4pt\hrule}%
-- \kern-.06em\raise0.4pt\hbox{\angleright}}}}
--% The old definition, with no lozenge:
--%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-+
-+% @samp.
-+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
-+
-+% definition of @key that produces a lozenge. Doesn't adjust to text size.
-+%\setfont\keyrm\rmshape{8}{1000}{OT1}
-+%\font\keysy=cmsy9
-+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-+% \vbox{\hrule\kern-0.4pt
-+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-+% \kern-0.4pt\hrule}%
-+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-+
-+% definition of @key with no lozenge. If the current font is already
-+% monospace, don't change it; that way, we respect @kbdinputstyle. But
-+% if it isn't monospace, then use \tt.
-+%
-+\def\key#1{{\setupmarkupstyle{key}%
-+ \nohyphenation
-+ \ifmonospace\else\tt\fi
-+ #1}\null}
-+
-+% ctrl is no longer a Texinfo command.
- \def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
- % @file, @option are the same as @samp.
-@@ -1300,13 +2473,13 @@ where each line of input produces a line
- \nohyphenation
- %
- \rawbackslash
-- \frenchspacing
-+ \plainfrenchspacing
- #1%
- }%
-- \null
-+ \null % reset spacefactor to 1000
- }
-
--% We *must* turn on hyphenation at `-' and `_' in \code.
-+% 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.
-
-@@ -1316,71 +2489,71 @@ where each line of input produces a line
- % and arrange explicitly to hyphenate at a dash.
- % -- rms.
- {
-- \catcode`\-=\active
-- \catcode`\_=\active
-+ \catcode`\-=\active \catcode`\_=\active
-+ \catcode`\'=\active \catcode`\`=\active
-+ \global\let'=\rq \global\let`=\lq % default definitions
- %
- \global\def\code{\begingroup
-- \catcode`\-=\active \let-\codedash
-- \catcode`\_=\active \let_\codeunder
-+ \setupmarkupstyle{code}%
-+ % The following should really be moved into \setupmarkupstyle handlers.
-+ \catcode\dashChar=\active \catcode\underChar=\active
-+ \ifallowcodebreaks
-+ \let-\codedash
-+ \let_\codeunder
-+ \else
-+ \let-\realdash
-+ \let_\realunder
-+ \fi
- \codex
- }
-- %
-- % If we end up with any active - characters when handling the index,
-- % just treat them as a normal -.
-- \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.
--
--% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
--% `example' (@kbd uses ttsl only inside of @example and friends),
--% or `code' (@kbd uses normal tty font always).
--\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
--\def\kbdinputstylexxx#1{%
-- \def\arg{#1}%
-- \ifx\arg\worddistinct
-- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
-- \else\ifx\arg\wordexample
-- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
-- \else\ifx\arg\wordcode
-- \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-- \fi\fi\fi
-+\def\realdash{-}
-+\def\codedash{-\discretionary{}{}{}}
-+\def\codeunder{%
-+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
-+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
-+ % will therefore expand the active definition of _, which is us
-+ % (inside @code that is), therefore an endless loop.
-+ \ifusingtt{\ifmmode
-+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
-+ \else\normalunderscore \fi
-+ \discretionary{}{}{}}%
-+ {\_}%
- }
--\def\worddistinct{distinct}
--\def\wordexample{example}
--\def\wordcode{code}
-
--% Default is kbdinputdistinct. (Too much of a hassle to call the macro,
--% the catcodes are wrong for parsearg to work.)
--\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
-+% An additional complication: the above will allow breaks after, e.g.,
-+% each of the four underscores in __typeof__. This is undesirable in
-+% some manuals, especially if they don't have long identifiers in
-+% general. @allowcodebreaks provides a way to control this.
-+%
-+\newif\ifallowcodebreaks \allowcodebreakstrue
-
--\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{\kbdfont\look}}\fi
--\else{\tclose{\kbdfont\look}}\fi}
-+\def\keywordtrue{true}
-+\def\keywordfalse{false}
-
--% For @url, @env, @command quotes seem unnecessary, so use \code.
--\let\url=\code
--\let\env=\code
--\let\command=\code
-+\parseargdef\allowcodebreaks{%
-+ \def\txiarg{#1}%
-+ \ifx\txiarg\keywordtrue
-+ \allowcodebreakstrue
-+ \else\ifx\txiarg\keywordfalse
-+ \allowcodebreaksfalse
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
-+ \fi\fi
-+}
-
- % @uref (abbreviation for `urlref') takes an optional (comma-separated)
- % second argument specifying the text to display and an optional third
- % arg as text to display instead of (rather than in addition to) the url
--% itself. First (mandatory) arg is the url. Perhaps eventually put in
--% a hypertex \special here.
--%
--\def\uref#1{\douref #1,,,\finish}
--\def\douref#1,#2,#3,#4\finish{\begingroup
-+% itself. First (mandatory) arg is the url.
-+% (This \urefnobreak definition isn't used now, leaving it for a while
-+% for comparison.)
-+\def\urefnobreak#1{\dourefnobreak #1,,,\finish}
-+\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup
- \unsepspaces
- \pdfurl{#1}%
- \setbox0 = \hbox{\ignorespaces #3}%
-@@ -1401,9 +2574,110 @@ where each line of input produces a line
- \endlink
- \endgroup}
-
-+% This \urefbreak definition is the active one.
-+\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
-+\let\uref=\urefbreak
-+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
-+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
-+ \unsepspaces
-+ \pdfurl{#1}%
-+ \setbox0 = \hbox{\ignorespaces #3}%
-+ \ifdim\wd0 > 0pt
-+ \unhbox0 % third arg given, show only that
-+ \else
-+ \setbox0 = \hbox{\ignorespaces #2}%
-+ \ifdim\wd0 > 0pt
-+ \ifpdf
-+ \unhbox0 % PDF: 2nd arg given, show only it
-+ \else
-+ \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
-+ \fi
-+ \else
-+ \urefcode{#1}% only url given, so show it
-+ \fi
-+ \fi
-+ \endlink
-+\endgroup}
-+
-+% Allow line breaks around only a few characters (only).
-+\def\urefcatcodes{%
-+ \catcode\ampChar=\active \catcode\dotChar=\active
-+ \catcode\hashChar=\active \catcode\questChar=\active
-+ \catcode\slashChar=\active
-+}
-+{
-+ \urefcatcodes
-+ %
-+ \global\def\urefcode{\begingroup
-+ \setupmarkupstyle{code}%
-+ \urefcatcodes
-+ \let&\urefcodeamp
-+ \let.\urefcodedot
-+ \let#\urefcodehash
-+ \let?\urefcodequest
-+ \let/\urefcodeslash
-+ \codex
-+ }
-+ %
-+ % By default, they are just regular characters.
-+ \global\def&{\normalamp}
-+ \global\def.{\normaldot}
-+ \global\def#{\normalhash}
-+ \global\def?{\normalquest}
-+ \global\def/{\normalslash}
-+}
-+
-+% we put a little stretch before and after the breakable chars, to help
-+% line breaking of long url's. The unequal skips make look better in
-+% cmtt at least, especially for dots.
-+\def\urefprestretch{\urefprebreak \hskip0pt plus.13em }
-+\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em }
-+%
-+\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
-+\def\urefcodedot{\urefprestretch .\urefpoststretch}
-+\def\urefcodehash{\urefprestretch \#\urefpoststretch}
-+\def\urefcodequest{\urefprestretch ?\urefpoststretch}
-+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
-+{
-+ \catcode`\/=\active
-+ \global\def\urefcodeslashfinish{%
-+ \urefprestretch \slashChar
-+ % Allow line break only after the final / in a sequence of
-+ % slashes, to avoid line break between the slashes in http://.
-+ \ifx\next/\else \urefpoststretch \fi
-+ }
-+}
-+
-+% One more complication: by default we'll break after the special
-+% characters, but some people like to break before the special chars, so
-+% allow that. Also allow no breaking at all, for manual control.
-+%
-+\parseargdef\urefbreakstyle{%
-+ \def\txiarg{#1}%
-+ \ifx\txiarg\wordnone
-+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
-+ \else\ifx\txiarg\wordbefore
-+ \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
-+ \else\ifx\txiarg\wordafter
-+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
-+ \fi\fi\fi
-+}
-+\def\wordafter{after}
-+\def\wordbefore{before}
-+\def\wordnone{none}
-+
-+\urefbreakstyle after
-+
-+% @url synonym for @uref, since that's how everyone uses it.
-+%
-+\let\url=\uref
-+
- % rms does not like angle brackets --karl, 17may97.
- % So now @email is just like @uref, unless we are pdf.
--%
-+%
- %\def\email#1{\angleleft{\tt #1}\angleright}
- \ifpdf
- \def\email#1{\doemail#1,,\finish}
-@@ -1418,36 +2692,478 @@ where each line of input produces a line
- \let\email=\uref
- \fi
-
--% 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 }
-+% @kbd is like @code, except that if the argument is just one @key command,
-+% then @kbd has no effect.
-+\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}
-+
-+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-+% `example' (@kbd uses ttsl only inside of @example and friends),
-+% or `code' (@kbd uses normal tty font always).
-+\parseargdef\kbdinputstyle{%
-+ \def\txiarg{#1}%
-+ \ifx\txiarg\worddistinct
-+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
-+ \else\ifx\txiarg\wordexample
-+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
-+ \else\ifx\txiarg\wordcode
-+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
-+ \fi\fi\fi
-+}
-+\def\worddistinct{distinct}
-+\def\wordexample{example}
-+\def\wordcode{code}
-+
-+% Default is `distinct'.
-+\kbdinputstyle distinct
-+
-+\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{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
-+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}
-+
-+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
-+\let\indicateurl=\code
-+\let\env=\code
-+\let\command=\code
-+
-+% @clicksequence{File @click{} Open ...}
-+\def\clicksequence#1{\begingroup #1\endgroup}
-+
-+% @clickstyle @arrow (by default)
-+\parseargdef\clickstyle{\def\click{#1}}
-+\def\click{\arrow}
-
- % 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 @dmn{}pt.
- %
- \def\dmn#1{\thinspace #1}
-
--\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}
-
--% Explicit font changes: @r, @sc, undocumented @ii.
--\def\r#1{{\rm #1}} % roman font
--\def\sc#1{{\smallcaps#1}} % smallcaps font
--\def\ii#1{{\it #1}} % italic font
-+% @acronym for "FBI", "NATO", and the like.
-+% We print this one point size smaller, since it's intended for
-+% all-uppercase.
-+%
-+\def\acronym#1{\doacronym #1,,\finish}
-+\def\doacronym#1,#2,#3\finish{%
-+ {\selectfonts\lsize #1}%
-+ \def\temp{#2}%
-+ \ifx\temp\empty \else
-+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
-+ \fi
-+ \null % reset \spacefactor=1000
-+}
-
--% @acronym downcases the argument and prints in smallcaps.
--\def\acronym#1{{\smallcaps \lowercase{#1}}}
-+% @abbr for "Comput. J." and the like.
-+% No font change, but don't do end-of-sentence spacing.
-+%
-+\def\abbr#1{\doabbr #1,,\finish}
-+\def\doabbr#1,#2,#3\finish{%
-+ {\plainfrenchspacing #1}%
-+ \def\temp{#2}%
-+ \ifx\temp\empty \else
-+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
-+ \fi
-+ \null % reset \spacefactor=1000
-+}
-
--% @pounds{} is a sterling sign.
-+% @asis just yields its argument. Used with @table, for example.
-+%
-+\def\asis#1{#1}
-+
-+% @math outputs its argument in math mode.
-+%
-+% One complication: _ usually means subscripts, but it could also mean
-+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
-+% _ active, and distinguish by seeing if the current family is \slfam,
-+% which is what @var uses.
-+{
-+ \catcode`\_ = \active
-+ \gdef\mathunderscore{%
-+ \catcode`\_=\active
-+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-+ }
-+}
-+% Another complication: we want \\ (and @\) to output a math (or tt) \.
-+% FYI, plain.tex uses \\ as a temporary control sequence (for no
-+% particular reason), but this is not advertised and we don't care.
-+%
-+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
-+%
-+\def\math{%
-+ \tex
-+ \mathunderscore
-+ \let\\ = \mathbackslash
-+ \mathactive
-+ % make the texinfo accent commands work in math mode
-+ \let\"=\ddot
-+ \let\'=\acute
-+ \let\==\bar
-+ \let\^=\hat
-+ \let\`=\grave
-+ \let\u=\breve
-+ \let\v=\check
-+ \let\~=\tilde
-+ \let\dotaccent=\dot
-+ $\finishmath
-+}
-+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
-+
-+% Some active characters (such as <) are spaced differently in math.
-+% We have to reset their definitions in case the @math was an argument
-+% to a command which sets the catcodes (such as @item or @section).
-+%
-+{
-+ \catcode`^ = \active
-+ \catcode`< = \active
-+ \catcode`> = \active
-+ \catcode`+ = \active
-+ \catcode`' = \active
-+ \gdef\mathactive{%
-+ \let^ = \ptexhat
-+ \let< = \ptexless
-+ \let> = \ptexgtr
-+ \let+ = \ptexplus
-+ \let' = \ptexquoteright
-+ }
-+}
-+
-+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
-+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
-+% except specified as a normal braced arg, so no newlines to worry about.
-+%
-+\def\outfmtnametex{tex}
-+%
-+\def\inlinefmt#1{\doinlinefmt #1,\finish}
-+\def\doinlinefmt#1,#2,\finish{%
-+ \def\inlinefmtname{#1}%
-+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
-+}
-+% For raw, must switch into @tex before parsing the argument, to avoid
-+% setting catcodes prematurely. Doing it this way means that, for
-+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
-+% ignored. But this isn't important because if people want a literal
-+% *right* brace they would have to use a command anyway, so they may as
-+% well use a command to get a left brace too. We could re-use the
-+% delimiter character idea from \verb, but it seems like overkill.
-+%
-+\def\inlineraw{\tex \doinlineraw}
-+\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
-+\def\doinlinerawtwo#1,#2,\finish{%
-+ \def\inlinerawname{#1}%
-+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
-+ \endgroup % close group opened by \tex.
-+}
-+
-+
-+\message{glyphs,}
-+% and logos.
-+
-+% @@ prints an @, as does @atchar{}.
-+\def\@{\char64 }
-+\let\atchar=\@
-+
-+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
-+% Unless we're in typewriter, use \ecfont because the CM text fonts do
-+% not have braces, and we don't want to switch into math.
-+\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
-+\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
-+\let\{=\mylbrace \let\lbracechar=\{
-+\let\}=\myrbrace \let\rbracechar=\}
-+\begingroup
-+ % Definitions to produce \{ and \} commands for indices,
-+ % and @{ and @} for the aux/toc files.
-+ \catcode`\{ = \other \catcode`\} = \other
-+ \catcode`\[ = 1 \catcode`\] = 2
-+ \catcode`\! = 0 \catcode`\\ = \other
-+ !gdef!lbracecmd[\{]%
-+ !gdef!rbracecmd[\}]%
-+ !gdef!lbraceatcmd[@{]%
-+ !gdef!rbraceatcmd[@}]%
-+!endgroup
-+
-+% @comma{} to avoid , parsing problems.
-+\let\comma = ,
-+
-+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
-+\let\, = \ptexc
-+\let\dotaccent = \ptexdot
-+\def\ringaccent#1{{\accent23 #1}}
-+\let\tieaccent = \ptext
-+\let\ubaraccent = \ptexb
-+\let\udotaccent = \d
-+
-+% Other special characters: @questiondown @exclamdown @ordf @ordm
-+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
-+\def\questiondown{?`}
-+\def\exclamdown{!`}
-+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
-+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
-+
-+% Dotless i and dotless j, used for accents.
-+\def\imacro{i}
-+\def\jmacro{j}
-+\def\dotless#1{%
-+ \def\temp{#1}%
-+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
-+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
-+ \else \errmessage{@dotless can be used only with i or j}%
-+ \fi\fi
-+}
-+
-+% The \TeX{} logo, as in plain, but resetting the spacing so that a
-+% period following counts as ending a sentence. (Idea found in latex.)
-+%
-+\edef\TeX{\TeX \spacefactor=1000 }
-+
-+% @LaTeX{} logo. Not quite the same results as the definition in
-+% latex.ltx, since we use a different font for the raised A; it's most
-+% convenient for us to use an explicitly smaller font, rather than using
-+% the \scriptstyle font (since we don't reset \scriptstyle and
-+% \scriptscriptstyle).
-+%
-+\def\LaTeX{%
-+ L\kern-.36em
-+ {\setbox0=\hbox{T}%
-+ \vbox to \ht0{\hbox{%
-+ \ifx\textnominalsize\xwordpt
-+ % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
-+ % Revert to plain's \scriptsize, which is 7pt.
-+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
-+ \else
-+ % For 11pt, we can use our lllsize.
-+ \selectfonts\lllsize A%
-+ \fi
-+ }%
-+ \vss
-+ }}%
-+ \kern-.15em
-+ \TeX
-+}
-+
-+% Some math mode symbols.
-+\def\bullet{$\ptexbullet$}
-+\def\geq{\ifmmode \ge\else $\ge$\fi}
-+\def\leq{\ifmmode \le\else $\le$\fi}
-+\def\minus{\ifmmode -\else $-$\fi}
-+
-+% @dots{} outputs an ellipsis using the current font.
-+% We do .5em per period so that it has the same spacing in the cm
-+% typewriter fonts as three actual period characters; on the other hand,
-+% in other typewriter fonts three periods are wider than 1.5em. So do
-+% whichever is larger.
-+%
-+\def\dots{%
-+ \leavevmode
-+ \setbox0=\hbox{...}% get width of three periods
-+ \ifdim\wd0 > 1.5em
-+ \dimen0 = \wd0
-+ \else
-+ \dimen0 = 1.5em
-+ \fi
-+ \hbox to \dimen0{%
-+ \hskip 0pt plus.25fil
-+ .\hskip 0pt plus1fil
-+ .\hskip 0pt plus1fil
-+ .\hskip 0pt plus.5fil
-+ }%
-+}
-+
-+% @enddots{} is an end-of-sentence ellipsis.
-+%
-+\def\enddots{%
-+ \dots
-+ \spacefactor=\endofsentencespacefactor
-+}
-+
-+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-+%
-+% Since these characters are used in examples, they should be an even number of
-+% \tt widths. Each \tt character is 1en, so two makes it 1em.
-+%
-+\def\point{$\star$}
-+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
-+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
-+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-+
-+% The @error{} command.
-+% Adapted from the TeXbook's \boxit.
-+%
-+\newbox\errorbox
-+%
-+{\tentt \global\dimen0 = 3em}% Width of the box.
-+\dimen2 = .55pt % Thickness of rules
-+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
-+%
-+\setbox\errorbox=\hbox to \dimen0{\hfil
-+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-+ \advance\hsize by -2\dimen2 % Rules.
-+ \vbox{%
-+ \hrule height\dimen2
-+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
-+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-+ \kern3pt\vrule width\dimen2}% Space to right.
-+ \hrule height\dimen2}
-+ \hfil}
-+%
-+\def\error{\leavevmode\lower.7ex\copy\errorbox}
-+
-+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
-+%
- \def\pounds{{\it\$}}
-
-+% @euro{} comes from a separate font, depending on the current style.
-+% We use the free feym* fonts from the eurosym package by Henrik
-+% Theiling, which support regular, slanted, bold and bold slanted (and
-+% "outlined" (blackboard board, sort of) versions, which we don't need).
-+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
-+%
-+% Although only regular is the truly official Euro symbol, we ignore
-+% that. The Euro is designed to be slightly taller than the regular
-+% font height.
-+%
-+% feymr - regular
-+% feymo - slanted
-+% feybr - bold
-+% feybo - bold slanted
-+%
-+% There is no good (free) typewriter version, to my knowledge.
-+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
-+% Hmm.
-+%
-+% Also doesn't work in math. Do we need to do math with euro symbols?
-+% Hope not.
-+%
-+%
-+\def\euro{{\eurofont e}}
-+\def\eurofont{%
-+ % We set the font at each command, rather than predefining it in
-+ % \textfonts and the other font-switching commands, so that
-+ % installations which never need the symbol don't have to have the
-+ % font installed.
-+ %
-+ % There is only one designed size (nominal 10pt), so we always scale
-+ % that to the current nominal size.
-+ %
-+ % By the way, simply using "at 1em" works for cmr10 and the like, but
-+ % does not work for cmbx10 and other extended/shrunken fonts.
-+ %
-+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
-+ %
-+ \ifx\curfontstyle\bfstylename
-+ % bold:
-+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
-+ \else
-+ % regular:
-+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
-+ \fi
-+ \thiseurofont
-+}
-+
-+% Glyphs from the EC fonts. We don't use \let for the aliases, because
-+% sometimes we redefine the original macro, and the alias should reflect
-+% the redefinition.
-+%
-+% Use LaTeX names for the Icelandic letters.
-+\def\DH{{\ecfont \char"D0}} % Eth
-+\def\dh{{\ecfont \char"F0}} % eth
-+\def\TH{{\ecfont \char"DE}} % Thorn
-+\def\th{{\ecfont \char"FE}} % thorn
-+%
-+\def\guillemetleft{{\ecfont \char"13}}
-+\def\guillemotleft{\guillemetleft}
-+\def\guillemetright{{\ecfont \char"14}}
-+\def\guillemotright{\guillemetright}
-+\def\guilsinglleft{{\ecfont \char"0E}}
-+\def\guilsinglright{{\ecfont \char"0F}}
-+\def\quotedblbase{{\ecfont \char"12}}
-+\def\quotesinglbase{{\ecfont \char"0D}}
-+%
-+% This positioning is not perfect (see the ogonek LaTeX package), but
-+% we have the precomposed glyphs for the most common cases. We put the
-+% tests to use those glyphs in the single \ogonek macro so we have fewer
-+% dummy definitions to worry about for index entries, etc.
-+%
-+% ogonek is also used with other letters in Lithuanian (IOU), but using
-+% the precomposed glyphs for those is not so easy since they aren't in
-+% the same EC font.
-+\def\ogonek#1{{%
-+ \def\temp{#1}%
-+ \ifx\temp\macrocharA\Aogonek
-+ \else\ifx\temp\macrochara\aogonek
-+ \else\ifx\temp\macrocharE\Eogonek
-+ \else\ifx\temp\macrochare\eogonek
-+ \else
-+ \ecfont \setbox0=\hbox{#1}%
-+ \ifdim\ht0=1ex\accent"0C #1%
-+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
-+ \fi
-+ \fi\fi\fi\fi
-+ }%
-+}
-+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
-+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
-+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
-+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
-+%
-+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
-+\def\ecfont{%
-+ % We can't distinguish serif/sans and italic/slanted, but this
-+ % is used for crude hacks anyway (like adding French and German
-+ % quotes to documents typeset with CM, where we lose kerning), so
-+ % hopefully nobody will notice/care.
-+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
-+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
-+ \ifx\curfontstyle\bfstylename
-+ % bold:
-+ \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
-+ \else
-+ % regular:
-+ \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
-+ \fi
-+ \thisecfont
-+}
-+
-+% @registeredsymbol - R in a circle. The font for the R should really
-+% be smaller yet, but lllsize is the best we can do for now.
-+% Adapted from the plain.tex definition of \copyright.
-+%
-+\def\registeredsymbol{%
-+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
-+ \hfil\crcr\Orb}}%
-+ }$%
-+}
-+
-+% @textdegree - the normal degrees sign.
-+%
-+\def\textdegree{$^\circ$}
-+
-+% Laurent Siebenmann reports \Orb undefined with:
-+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
-+% so we'll define it if necessary.
-+%
-+\ifx\Orb\thisisundefined
-+\def\Orb{\mathhexbox20D}
-+\fi
-+
-+% Quotes.
-+\chardef\quotedblleft="5C
-+\chardef\quotedblright=`\"
-+\chardef\quoteleft=`\`
-+\chardef\quoteright=`\'
-+
-
- \message{page headings,}
-
-@@ -1466,87 +3182,102 @@ where each line of input produces a line
- \newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
--\def\shorttitlepage{\parsearg\shorttitlepagezzz}
--\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-- \endgroup\page\hbox{}\page}
-+\parseargdef\shorttitlepage{%
-+ \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-+ \endgroup\page\hbox{}\page}
-
--\def\titlepage{\begingroup \parindent=0pt \textfonts
-- \let\subtitlerm=\tenrm
-- \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
-- %
-- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
-- %
-- % Leave some space at the very top of the page.
-- \vglue\titlepagetopglue
-- %
-- % Now you can print the title using @title.
-- \def\title{\parsearg\titlezzz}%
-- \def\titlezzz##1{\leftline{\titlefonts\rm ##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
-- %
-- % Now you can put text using @subtitle.
-- \def\subtitle{\parsearg\subtitlezzz}%
-- \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
-- %
-- % @author should come last, but may come many times.
-- \def\author{\parsearg\authorzzz}%
-- \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
-- {\authorfont \leftline{##1}}}%
-- %
-- % Most title ``pages'' are actually two pages long, with space
-- % at the top of the second. We don't want the ragged left on the second.
-- \let\oldpage = \page
-- \def\page{%
-+\envdef\titlepage{%
-+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
-+ \begingroup
-+ \parindent=0pt \textfonts
-+ % Leave some space at the very top of the page.
-+ \vglue\titlepagetopglue
-+ % No rule at page bottom unless we print one at the top with @title.
-+ \finishedtitlepagetrue
-+ %
-+ % Most title ``pages'' are actually two pages long, with space
-+ % at the top of the second. We don't want the ragged left on the second.
-+ \let\oldpage = \page
-+ \def\page{%
- \iffinishedtitlepage\else
-- \finishtitlepage
-+ \finishtitlepage
- \fi
-- \oldpage
- \let\page = \oldpage
-- \hbox{}}%
--% \def\page{\oldpage \hbox{}}
-+ \page
-+ \null
-+ }%
- }
-
- \def\Etitlepage{%
-- \iffinishedtitlepage\else
-- \finishtitlepage
-- \fi
-- % It is important to do the page break before ending the group,
-- % because the headline and footline are only empty inside the group.
-- % If we use the new definition of \page, we always get a blank page
-- % after the title page, which we certainly don't want.
-- \oldpage
-- \endgroup
-- %
-- % If they want short, they certainly want long too.
-- \ifsetshortcontentsaftertitlepage
-- \shortcontents
-- \contents
-- \global\let\shortcontents = \relax
-- \global\let\contents = \relax
-- \fi
-- %
-- \ifsetcontentsaftertitlepage
-- \contents
-- \global\let\contents = \relax
-- \global\let\shortcontents = \relax
-- \fi
-- %
-- \ifpdf \pdfmakepagedesttrue \fi
-- %
-- \HEADINGSon
-+ \iffinishedtitlepage\else
-+ \finishtitlepage
-+ \fi
-+ % It is important to do the page break before ending the group,
-+ % because the headline and footline are only empty inside the group.
-+ % If we use the new definition of \page, we always get a blank page
-+ % after the title page, which we certainly don't want.
-+ \oldpage
-+ \endgroup
-+ %
-+ % Need this before the \...aftertitlepage checks so that if they are
-+ % in effect the toc pages will come out with page numbers.
-+ \HEADINGSon
-+ %
-+ % If they want short, they certainly want long too.
-+ \ifsetshortcontentsaftertitlepage
-+ \shortcontents
-+ \contents
-+ \global\let\shortcontents = \relax
-+ \global\let\contents = \relax
-+ \fi
-+ %
-+ \ifsetcontentsaftertitlepage
-+ \contents
-+ \global\let\contents = \relax
-+ \global\let\shortcontents = \relax
-+ \fi
- }
-
- \def\finishtitlepage{%
-- \vskip4pt \hrule height 2pt width \hsize
-- \vskip\titlepagebottomglue
-- \finishedtitlepagetrue
-+ \vskip4pt \hrule height 2pt width \hsize
-+ \vskip\titlepagebottomglue
-+ \finishedtitlepagetrue
- }
-
--%%% Set up page headings and footings.
-+% Macros to be used within @titlepage:
-+
-+\let\subtitlerm=\tenrm
-+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
-+
-+\parseargdef\title{%
-+ \checkenv\titlepage
-+ \leftline{\titlefonts\rmisbold #1}
-+ % print a rule at the page bottom also.
-+ \finishedtitlepagefalse
-+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
-+}
-+
-+\parseargdef\subtitle{%
-+ \checkenv\titlepage
-+ {\subtitlefont \rightline{#1}}%
-+}
-+
-+% @author should come last, but may come many times.
-+% It can also be used inside @quotation.
-+%
-+\parseargdef\author{%
-+ \def\temp{\quotation}%
-+ \ifx\thisenv\temp
-+ \def\quotationauthor{#1}% printed in \Equotation.
-+ \else
-+ \checkenv\titlepage
-+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
-+ {\secfonts\rmisbold \leftline{#1}}%
-+ \fi
-+}
-+
-+
-+% Set up page headings and footings.
-
- \let\thispage=\folio
-
-@@ -1555,7 +3286,7 @@ where each line of input produces a line
- \newtoks\evenfootline % footline on even pages
- \newtoks\oddfootline % footline on odd pages
-
--% Now make Tex use those variables
-+% Now make TeX use those variables
- \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
- \else \the\evenheadline \fi}}
- \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-@@ -1569,43 +3300,64 @@ where each line of input produces a line
- % @evenfooting @thisfile||
- % @oddfooting ||@thisfile
-
--\def\evenheading{\parsearg\evenheadingxxx}
--\def\oddheading{\parsearg\oddheadingxxx}
--\def\everyheading{\parsearg\everyheadingxxx}
-
--\def\evenfooting{\parsearg\evenfootingxxx}
--\def\oddfooting{\parsearg\oddfootingxxx}
--\def\everyfooting{\parsearg\everyfootingxxx}
--
--{\catcode`\@=0 %
--
--\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
--\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-+\def\evenheading{\parsearg\evenheadingxxx}
-+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
-+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
- \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
--\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
--\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-+\def\oddheading{\parsearg\oddheadingxxx}
-+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
-+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
- \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
--\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
--\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
--\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-+\def\evenfooting{\parsearg\evenfootingxxx}
-+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
-+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
- \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
--\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
--\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-+\def\oddfooting{\parsearg\oddfootingxxx}
-+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
-+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
- \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
- %
- % Leave some space for the footline. Hopefully ok to assume
- % @evenfooting will not be used by itself.
-- \global\advance\pageheight by -\baselineskip
-- \global\advance\vsize by -\baselineskip
-+ \global\advance\pageheight by -12pt
-+ \global\advance\vsize by -12pt
- }
-
--\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-+
-+% @evenheadingmarks top \thischapter <- chapter at the top of a page
-+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
- %
--}% unbind the catcode of @.
-+% The same set of arguments for:
-+%
-+% @oddheadingmarks
-+% @evenfootingmarks
-+% @oddfootingmarks
-+% @everyheadingmarks
-+% @everyfootingmarks
-+
-+\def\evenheadingmarks{\headingmarks{even}{heading}}
-+\def\oddheadingmarks{\headingmarks{odd}{heading}}
-+\def\evenfootingmarks{\headingmarks{even}{footing}}
-+\def\oddfootingmarks{\headingmarks{odd}{footing}}
-+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
-+ \headingmarks{odd}{heading}{#1} }
-+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
-+ \headingmarks{odd}{footing}{#1} }
-+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
-+\def\headingmarks#1#2#3 {%
-+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
-+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
-+}
-+
-+\everyheadingmarks bottom
-+\everyfootingmarks bottom
-
- % @headings double turns headings on for double-sided printing.
- % @headings single turns headings on for single-sided printing.
-@@ -1619,16 +3371,20 @@ where each line of input produces a line
-
- \def\headings #1 {\csname HEADINGS#1\endcsname}
-
--\def\HEADINGSoff{
--\global\evenheadline={\hfil} \global\evenfootline={\hfil}
--\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
--\HEADINGSoff
-+\def\headingsoff{% non-global headings elimination
-+ \evenheadline={\hfil}\evenfootline={\hfil}%
-+ \oddheadline={\hfil}\oddfootline={\hfil}%
-+}
-+
-+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
-+\HEADINGSoff % it's the default
-+
- % When we turn headings on, set the page number to 1.
- % For double-sided printing, put current file name in lower left corner,
- % chapter name on inside top of right hand pages, document
- % title on inside top of left hand pages, and page numbers on outside top
- % edge of all pages.
--\def\HEADINGSdouble{
-+\def\HEADINGSdouble{%
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
-@@ -1640,7 +3396,7 @@ where each line of input produces a line
-
- % For single-sided printing, chapter title goes across top left of page,
- % page number on top right.
--\def\HEADINGSsingle{
-+\def\HEADINGSsingle{%
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
-@@ -1670,7 +3426,10 @@ where each line of input produces a line
- }
-
- % Subroutines used in generating headings
--% Produces Day Month Year style of output.
-+% This produces Day Month Year style of output.
-+% Only define if not already defined, in case a txi-??.tex file has set
-+% up a different format (e.g., txi-cs.tex does this).
-+\ifx\today\thisisundefined
- \def\today{%
- \number\day\space
- \ifcase\month
-@@ -1679,16 +3438,16 @@ where each line of input produces a line
- \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
- \fi
- \space\number\year}
-+\fi
-
- % @settitle line... specifies the title of the document, for headings.
- % It generates no output of its own.
- \def\thistitle{\putwordNoTitle}
--\def\settitle{\parsearg\settitlezzz}
--\def\settitlezzz #1{\gdef\thistitle{#1}}
-+\def\settitle{\parsearg{\gdef\thistitle}}
-
-
- \message{tables,}
--% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-+% Tables -- @table, @ftable, @vtable, @item(x).
-
- % default indentation of table text
- \newdimen\tableindent \tableindent=.8in
-@@ -1700,7 +3459,7 @@ where each line of input produces a line
- % used internally for \itemindent minus \itemmargin
- \newdimen\itemmax
-
--% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
- % these defs.
- % They also define \itemindex
- % to index the item name in whatever manner is desired (perhaps none).
-@@ -1712,22 +3471,10 @@ where each line of input produces a line
- \def\internalBitem{\smallbreak \parsearg\itemzzz}
- \def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
--\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
--\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
--
--\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
--\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
--
--\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
-- \itemzzz {#1}}
--
--\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
-- \itemzzz {#1}}
--
- \def\itemzzz #1{\begingroup %
- \advance\hsize by -\rightskip
- \advance\hsize by -\tableindent
-- \setbox0=\hbox{\itemfont{#1}}%
-+ \setbox0=\hbox{\itemindicate{#1}}%
- \itemindex{#1}%
- \nobreak % This prevents a break before @itemx.
- %
-@@ -1743,7 +3490,7 @@ where each line of input produces a line
- \begingroup
- \advance\leftskip by-\tableindent
- \advance\hsize by\tableindent
-- \advance\rightskip by0pt plus1fil
-+ \advance\rightskip by0pt plus1fil\relax
- \leavevmode\unhbox0\par
- \endgroup
- %
-@@ -1751,10 +3498,14 @@ where each line of input produces a line
- % \parskip glue -- logically it's part of the @item we just started.
- \nobreak \vskip-\parskip
- %
-- % Stop a page break at the \parskip glue coming up. Unfortunately
-- % we can't prevent a possible page break at the following
-- % \baselineskip glue.
-- \nobreak
-+ % Stop a page break at the \parskip glue coming up. However, if
-+ % what follows is an environment such as @example, there will be no
-+ % \parskip glue; then the negative vskip we just inserted would
-+ % cause the example and the item to crash together. So we use this
-+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
-+ % \parskip glue after all. Section titles are handled this way also.
-+ %
-+ \penalty 10001
- \endgroup
- \itemxneedsnegativevskipfalse
- \else
-@@ -1773,97 +3524,116 @@ where each line of input produces a line
- \fi
- }
-
--\def\item{\errmessage{@item while not in a table}}
--\def\itemx{\errmessage{@itemx while not in a table}}
--\def\kitem{\errmessage{@kitem while not in a table}}
--\def\kitemx{\errmessage{@kitemx while not in a table}}
--\def\xitem{\errmessage{@xitem while not in a table}}
--\def\xitemx{\errmessage{@xitemx while not in a table}}
--
--% Contains a kludge to get @end[description] to work.
--\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-+\def\item{\errmessage{@item while not in a list environment}}
-+\def\itemx{\errmessage{@itemx while not in a list environment}}
-
- % @table, @ftable, @vtable.
--\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
--{\obeylines\obeyspaces%
--\gdef\tablex #1^^M{%
--\tabley\dontindex#1 \endtabley}}
--
--\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
--{\obeylines\obeyspaces%
--\gdef\ftablex #1^^M{%
--\tabley\fnitemindex#1 \endtabley
--\def\Eftable{\endgraf\afterenvbreak\endgroup}%
--\let\Etable=\relax}}
--
--\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
--{\obeylines\obeyspaces%
--\gdef\vtablex #1^^M{%
--\tabley\vritemindex#1 \endtabley
--\def\Evtable{\endgraf\afterenvbreak\endgroup}%
--\let\Etable=\relax}}
--
--\def\dontindex #1{}
--\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
--\def\vritemindex #1{\doind {vr}{\code{#1}}}%
--
--{\obeyspaces %
--\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
--\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
--
--\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 %
--\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
--\def\itemfont{#2}%
--\itemmax=\tableindent %
--\advance \itemmax by -\itemmargin %
--\advance \leftskip by \tableindent %
--\exdentamount=\tableindent
--\parindent = 0pt
--\parskip = \smallskipamount
--\ifdim \parskip=0pt \parskip=2pt \fi%
--\def\Etable{\endgraf\afterenvbreak\endgroup}%
--\let\item = \internalBitem %
--\let\itemx = \internalBitemx %
--\let\kitem = \internalBkitem %
--\let\kitemx = \internalBkitemx %
--\let\xitem = \internalBxitem %
--\let\xitemx = \internalBxitemx %
-+\envdef\table{%
-+ \let\itemindex\gobble
-+ \tablecheck{table}%
-+}
-+\envdef\ftable{%
-+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
-+ \tablecheck{ftable}%
-+}
-+\envdef\vtable{%
-+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
-+ \tablecheck{vtable}%
-+}
-+\def\tablecheck#1{%
-+ \ifnum \the\catcode`\^^M=\active
-+ \endgroup
-+ \errmessage{This command won't work in this context; perhaps the problem is
-+ that we are \inenvironment\thisenv}%
-+ \def\next{\doignore{#1}}%
-+ \else
-+ \let\next\tablex
-+ \fi
-+ \next
-+}
-+\def\tablex#1{%
-+ \def\itemindicate{#1}%
-+ \parsearg\tabley
- }
-+\def\tabley#1{%
-+ {%
-+ \makevalueexpandable
-+ \edef\temp{\noexpand\tablez #1\space\space\space}%
-+ \expandafter
-+ }\temp \endtablez
-+}
-+\def\tablez #1 #2 #3 #4\endtablez{%
-+ \aboveenvbreak
-+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
-+ \ifnum 0#2>0 \tableindent=#2\mil \fi
-+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
-+ \itemmax=\tableindent
-+ \advance \itemmax by -\itemmargin
-+ \advance \leftskip by \tableindent
-+ \exdentamount=\tableindent
-+ \parindent = 0pt
-+ \parskip = \smallskipamount
-+ \ifdim \parskip=0pt \parskip=2pt \fi
-+ \let\item = \internalBitem
-+ \let\itemx = \internalBitemx
-+}
-+\def\Etable{\endgraf\afterenvbreak}
-+\let\Eftable\Etable
-+\let\Evtable\Etable
-+\let\Eitemize\Etable
-+\let\Eenumerate\Etable
-
- % This is the counter used by @enumerate, which is really @itemize
-
- \newcount \itemno
-
--\def\itemize{\parsearg\itemizezzz}
-+\envdef\itemize{\parsearg\doitemize}
-
--\def\itemizezzz #1{%
-- \begingroup % ended by the @end itemize
-- \itemizey {#1}{\Eitemize}
-+\def\doitemize#1{%
-+ \aboveenvbreak
-+ \itemmax=\itemindent
-+ \advance\itemmax by -\itemmargin
-+ \advance\leftskip by \itemindent
-+ \exdentamount=\itemindent
-+ \parindent=0pt
-+ \parskip=\smallskipamount
-+ \ifdim\parskip=0pt \parskip=2pt \fi
-+ %
-+ % Try typesetting the item mark that if the document erroneously says
-+ % something like @itemize @samp (intending @table), there's an error
-+ % right away at the @itemize. It's not the best error message in the
-+ % world, but it's better than leaving it to the @item. This means if
-+ % the user wants an empty mark, they have to say @w{} not just @w.
-+ \def\itemcontents{#1}%
-+ \setbox0 = \hbox{\itemcontents}%
-+ %
-+ % @itemize with no arg is equivalent to @itemize @bullet.
-+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
-+ %
-+ \let\item=\itemizeitem
- }
-
--\def\itemizey #1#2{%
--\aboveenvbreak %
--\itemmax=\itemindent %
--\advance \itemmax by -\itemmargin %
--\advance \leftskip by \itemindent %
--\exdentamount=\itemindent
--\parindent = 0pt %
--\parskip = \smallskipamount %
--\ifdim \parskip=0pt \parskip=2pt \fi%
--\def#2{\endgraf\afterenvbreak\endgroup}%
--\def\itemcontents{#1}%
--\let\item=\itemizeitem}
--
--% Set sfcode to normal for the chars that usually have another value.
--% These are `.?!:;,'
--\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
-- \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
-+% Definition of @item while inside @itemize and @enumerate.
-+%
-+\def\itemizeitem{%
-+ \advance\itemno by 1 % for enumerations
-+ {\let\par=\endgraf \smallbreak}% reasonable place to break
-+ {%
-+ % If the document has an @itemize directly after a section title, a
-+ % \nobreak will be last on the list, and \sectionheading will have
-+ % done a \vskip-\parskip. In that case, we don't want to zero
-+ % parskip, or the item text will crash with the heading. On the
-+ % other hand, when there is normal text preceding the item (as there
-+ % usually is), we do want to zero parskip, or there would be too much
-+ % space. In that case, we won't have a \nobreak before. At least
-+ % that's the theory.
-+ \ifnum\lastpenalty<10000 \parskip=0in \fi
-+ \noindent
-+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
-+ %
-+ \vadjust{\penalty 1200}}% not good to break after first line of item.
-+ \flushcr
-+}
-
- % \splitoff TOKENS\endmark defines \first to be the first token in
- % TOKENS, and \rest to be the remainder.
-@@ -1874,11 +3644,8 @@ where each line of input produces a line
- % or number, to specify the first label in the enumerated list. No
- % argument is the same as `1'.
- %
--\def\enumerate{\parsearg\enumeratezzz}
--\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
-+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
- \def\enumeratey #1 #2\endenumeratey{%
-- \begingroup % ended by the @end enumerate
-- %
- % If we were given no argument, pretend we were given `1'.
- \def\thearg{#1}%
- \ifx\thearg\empty \def\thearg{1}\fi
-@@ -1949,13 +3716,13 @@ where each line of input produces a line
- }%
- }
-
--% Call itemizey, adding a period to the first argument and supplying the
-+% Call \doitemize, adding a period to the first argument and supplying the
- % common last two arguments. Also subtract one from the initial value in
- % \itemno, since @item increments \itemno.
- %
- \def\startenumeration#1{%
- \advance\itemno by -1
-- \itemizey{#1.}\Eenumerate\flushcr
-+ \doitemize{#1.}\flushcr
- }
-
- % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-@@ -1966,16 +3733,6 @@ where each line of input produces a line
- \def\Ealphaenumerate{\Eenumerate}
- \def\Ecapsenumerate{\Eenumerate}
-
--% Definition of @item while inside @itemize.
--
--\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
-@@ -2002,24 +3759,14 @@ where each line of input produces a line
- % @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 at 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.
-+% @item, @tab do not need to be on their own lines, but it will not hurt
-+% if they are.
-
- % Sample multitable:
-
-@@ -2063,13 +3810,12 @@ where each line of input produces a line
- \def\xcolumnfractions{\columnfractions}
- \newif\ifsetpercent
-
--% #1 is the part of the @columnfraction before the decimal point, which
--% is presumably either 0 or the empty string (but we don't check, we
--% just throw it away). #2 is the decimal part, which we use as the
--% percent of \hsize for this column.
--\def\pickupwholefraction#1.#2 {%
-+% #1 is the @columnfraction, usually a decimal number like .5, but might
-+% be just 1. We just use it, whatever it is.
-+%
-+\def\pickupwholefraction#1 {%
- \global\advance\colcount by 1
-- \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
-+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
- \setuptable
- }
-
-@@ -2086,8 +3832,8 @@ where each line of input produces a line
- \let\go\pickupwholefraction
- \else
- \global\advance\colcount by 1
-- \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
-- % typically that is always in the input, anyway.
-+ \setbox0=\hbox{#1\unskip\space}% 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
-@@ -2102,18 +3848,40 @@ where each line of input produces a line
- \go
- }
-
--% This used to have \hskip1sp. But then the space in a template line is
--% not enough. That is bad. So let's go back to just & until we
--% encounter the problem it was intended to solve again.
--% --karl, nathan at acm.org, 20apr99.
--\def\tab{&}
-+% multitable-only commands.
-+%
-+% @headitem starts a heading row, which we typeset in bold.
-+% Assignments have to be global since we are inside the implicit group
-+% of an alignment entry. \everycr resets \everytab so we don't have to
-+% undo it ourselves.
-+\def\headitemfont{\b}% for people to use in the template row; not changeable
-+\def\headitem{%
-+ \checkenv\multitable
-+ \crcr
-+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
-+ \the\everytab % for the first item
-+}%
-+%
-+% A \tab used to include \hskip1sp. But then the space in a template
-+% line is not enough. That is bad. So let's go back to just `&' until
-+% we again encounter the problem the 1sp was intended to solve.
-+% --karl, nathan at acm.org, 20apr99.
-+\def\tab{\checkenv\multitable &\the\everytab}%
-
- % @multitable ... @end multitable definitions:
- %
--\def\multitable{\parsearg\dotable}
--\def\dotable#1{\bgroup
-+\newtoks\everytab % insert after every tab.
-+%
-+\envdef\multitable{%
- \vskip\parskip
-- \let\item\crcr
-+ \startsavinginserts
-+ %
-+ % @item within a multitable starts a normal row.
-+ % We use \def instead of \let so that if one of the multitable entries
-+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
-+ % \endtemplate) expanding \doitemize.
-+ \def\item{\crcr}%
-+ %
- \tolerance=9500
- \hbadness=9500
- \setmultitablespacing
-@@ -2121,373 +3889,281 @@ where each line of input produces a line
- \parindent=\multitableparindent
- \overfullrule=0pt
- \global\colcount=0
-- \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
- %
-+ \everycr = {%
-+ \noalign{%
-+ \global\everytab={}%
-+ \global\colcount=0 % Reset the column counter.
-+ % Check for saved footnotes, etc.
-+ \checkinserts
-+ % Keeps underfull box messages off when table breaks over pages.
-+ %\filbreak
-+ % 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.
-+ }%
-+ }%
-+ %
-+ \parsearg\domultitable
-+}
-+\def\domultitable#1{%
- % To parse everything between @multitable and @item:
- \setuptable#1 \endsetuptable
- %
-- % \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.
-- \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}}%
-- %
- % 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 the user has set preamble in terms of percent of \hsize we will
-- % use that dimension as the width of the column, and the \leftskip
-- % will keep entries from bumping into each other. Table will start at
-- % left margin and final column will justify at right margin.
-- %
-- % Make sure we don't inherit \rightskip from the outer environment.
-- \rightskip=0pt
-- \ifnum\colcount=1
-- % The first column will be indented with the surrounding text.
-- \advance\hsize by\leftskip
-- \else
-- \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
-+ \halign\bgroup &%
-+ \global\advance\colcount by 1
-+ \multistrut
-+ \vtop{%
-+ % Use the current \colcount to find the correct column width:
-+ \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 the user has set preamble in terms of percent of \hsize we will
-+ % use that dimension as the width of the column, and the \leftskip
-+ % will keep entries from bumping into each other. Table will start at
-+ % left margin and final column will justify at right margin.
-+ %
-+ % Make sure we don't inherit \rightskip from the outer environment.
-+ \rightskip=0pt
-+ \ifnum\colcount=1
-+ % The first column will be indented with the surrounding text.
-+ \advance\hsize by\leftskip
-+ \else
-+ \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
-+}
-+\def\Emultitable{%
-+ \crcr
-+ \egroup % end the \halign
-+ \global\setpercentfalse
- }
-
--\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.
-+\def\setmultitablespacing{%
-+ \def\multistrut{\strut}% just use the standard line spacing
-+ %
-+ % Compute \multitablelinespace (if not defined by user) for use in
-+ % \multitableparskip calculation. We used define \multistrut based on
-+ % this, but (ironically) that caused the spacing to be off.
-+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
- \ifdim\multitablelinespace=0pt
- \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
- \global\advance\multitablelinespace by-\ht0
--%% strut to put in table in case some entry doesn't have descenders,
--%% to keep lines equally spaced
--\let\multistrut = \strut
--\else
--%% FIXME: what is \box0 supposed to be?
--\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
--width0pt\relax} \fi
--%% 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.
-+\fi
-+% 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.
- \ifdim\multitableparskip>\multitablelinespace
- \global\multitableparskip=\multitablelinespace
--\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-- %% than skip between lines in the table.
-+\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.
-+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
-+ % than skip between lines in the table.
- \fi}
-
-
- \message{conditionals,}
--% Prevent errors for section commands.
--% Used in @ignore and in failing conditionals.
--\def\ignoresections{%
-- \let\chapter=\relax
-- \let\unnumbered=\relax
-- \let\top=\relax
-- \let\unnumberedsec=\relax
-- \let\unnumberedsection=\relax
-- \let\unnumberedsubsec=\relax
-- \let\unnumberedsubsection=\relax
-- \let\unnumberedsubsubsec=\relax
-- \let\unnumberedsubsubsection=\relax
-- \let\section=\relax
-- \let\subsec=\relax
-- \let\subsubsec=\relax
-- \let\subsection=\relax
-- \let\subsubsection=\relax
-- \let\appendix=\relax
-- \let\appendixsec=\relax
-- \let\appendixsection=\relax
-- \let\appendixsubsec=\relax
-- \let\appendixsubsection=\relax
-- \let\appendixsubsubsec=\relax
-- \let\appendixsubsubsection=\relax
-- \let\contents=\relax
-- \let\smallbook=\relax
-- \let\titlepage=\relax
--}
-
--% Used in nested conditionals, where we have to parse the Texinfo source
--% and so want to turn off most commands, in case they are used
--% incorrectly.
-+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
-+% @ifnotxml always succeed. They currently do nothing; we don't
-+% attempt to check whether the conditionals are properly nested. But we
-+% have to remember that they are conditionals, so that @end doesn't
-+% attempt to close an environment group.
- %
--\def\ignoremorecommands{%
-- \let\defcodeindex = \relax
-- \let\defcv = \relax
-- \let\deffn = \relax
-- \let\deffnx = \relax
-- \let\defindex = \relax
-- \let\defivar = \relax
-- \let\defmac = \relax
-- \let\defmethod = \relax
-- \let\defop = \relax
-- \let\defopt = \relax
-- \let\defspec = \relax
-- \let\deftp = \relax
-- \let\deftypefn = \relax
-- \let\deftypefun = \relax
-- \let\deftypeivar = \relax
-- \let\deftypeop = \relax
-- \let\deftypevar = \relax
-- \let\deftypevr = \relax
-- \let\defun = \relax
-- \let\defvar = \relax
-- \let\defvr = \relax
-- \let\ref = \relax
-- \let\xref = \relax
-- \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
-- \let\raisesections = \relax
-- \let\up = \relax
-- \let\set = \relax
-- \let\clear = \relax
-- \let\item = \relax
-+\def\makecond#1{%
-+ \expandafter\let\csname #1\endcsname = \relax
-+ \expandafter\let\csname iscond.#1\endcsname = 1
- }
-+\makecond{iftex}
-+\makecond{ifnotdocbook}
-+\makecond{ifnothtml}
-+\makecond{ifnotinfo}
-+\makecond{ifnotplaintext}
-+\makecond{ifnotxml}
-
--% Ignore @ignore ... @end ignore.
--%
--\def\ignore{\doignore{ignore}}
--
--% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
- %
--\def\ifinfo{\doignore{ifinfo}}
-+\def\direntry{\doignore{direntry}}
-+\def\documentdescription{\doignore{documentdescription}}
-+\def\docbook{\doignore{docbook}}
-+\def\html{\doignore{html}}
-+\def\ifdocbook{\doignore{ifdocbook}}
- \def\ifhtml{\doignore{ifhtml}}
-+\def\ifinfo{\doignore{ifinfo}}
- \def\ifnottex{\doignore{ifnottex}}
--\def\html{\doignore{html}}
-+\def\ifplaintext{\doignore{ifplaintext}}
-+\def\ifxml{\doignore{ifxml}}
-+\def\ignore{\doignore{ignore}}
- \def\menu{\doignore{menu}}
--\def\direntry{\doignore{direntry}}
--
--% @dircategory CATEGORY -- specify a category of the dir file
--% which this file should belong to. Ignore this in TeX.
--\let\dircategory = \comment
-+\def\xml{\doignore{xml}}
-
--% Ignore text until a line `@end #1'.
-+% Ignore text until a line `@end #1', keeping track of nested conditionals.
- %
-+% A count to remember the depth of nesting.
-+\newcount\doignorecount
-+
- \def\doignore#1{\begingroup
-- % Don't complain about control sequences we have declared \outer.
-- \ignoresections
-- %
-- % Define a command to swallow text until we reach `@end #1'.
-- % This @ is a catcode 12 token (that is the normal catcode of @ in
-- % this texinfo.tex file). We change the catcode of @ below to match.
-- \long\def\doignoretext##1 at end #1{\enddoignore}%
-+ % Scan in ``verbatim'' mode:
-+ \obeylines
-+ \catcode`\@ = \other
-+ \catcode`\{ = \other
-+ \catcode`\} = \other
- %
- % Make sure that spaces turn into tokens that match what \doignoretext wants.
-- \catcode32 = 10
-- %
-- % Ignore braces, too, so mismatched braces don't cause trouble.
-- \catcode`\{ = 9
-- \catcode`\} = 9
-- %
-- % We must not have @c interpreted as a control sequence.
-- \catcode`\@ = 12
-+ \spaceisspace
- %
-- % Make the letter c a comment character so that the rest of the line
-- % will be ignored. This way, the document can have (for example)
-- % @c @end ifinfo
-- % and the @end ifinfo will be properly ignored.
-- % (We've just changed @ to catcode 12.)
-- \catcode`\c = 14
-+ % Count number of #1's that we've seen.
-+ \doignorecount = 0
- %
-- % And now expand that command.
-- \doignoretext
--}
--
--% What we do to finish off ignored text.
--%
--\def\enddoignore{\endgroup\ignorespaces}%
--
--\newif\ifwarnedobs\warnedobsfalse
--\def\obstexwarn{%
-- \ifwarnedobs\relax\else
-- % We need to warn folks that they may have trouble with TeX 3.0.
-- % This uses \immediate\write16 rather than \message to get newlines.
-- \immediate\write16{}
-- \immediate\write16{WARNING: for users of Unix TeX 3.0!}
-- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-- \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.org/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
-+ % Swallow text until we reach the matching `@end #1'.
-+ \dodoignore{#1}%
- }
-
--% **In TeX 3.0, setting text in \nullfont hangs tex. For a
--% workaround (which requires the file ``dummy.tfm'' to be installed),
--% uncomment the following line:
--%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
--
--% Ignore text, except that we keep track of conditional commands for
--% purposes of nesting, up to an `@end #1' command.
--%
--\def\nestedignore#1{%
-- \obstexwarn
-- % We must actually expand the ignored text to look for the @end
-- % command, so that nested ignore constructs work. Thus, we put the
-- % text into a \vbox and then do nothing with the result. To minimize
-- % the change of memory overflow, we follow the approach outlined on
-- % page 401 of the TeXbook: make the current font be a dummy font.
-+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
-+ \obeylines %
- %
-- \setbox0 = \vbox\bgroup
-- % Don't complain about control sequences we have declared \outer.
-- \ignoresections
-- %
-- % Define `@end #1' to end the box, which will in turn undefine the
-- % @end command again.
-- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-- %
-- % We are going to be parsing Texinfo commands. Most cause no
-- % trouble when they are used incorrectly, but some commands do
-- % complicated argument parsing or otherwise get confused, so we
-- % undefine them.
-- %
-- % We can't do anything about stray @-signs, unfortunately;
-- % they'll produce `undefined control sequence' errors.
-- \ignoremorecommands
-- %
-- % Set the current font to be \nullfont, a TeX primitive, and define
-- % all the font commands to also use \nullfont. We don't use
-- % dummy.tfm, as suggested in the TeXbook, because not all sites
-- % might have that installed. Therefore, math mode will still
-- % produce output, but that should be an extremely small amount of
-- % stuff compared to the main input.
-- %
-- \nullfont
-- \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
-- \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
-- \let\tensf=\nullfont
-- % Similarly for index fonts (mostly for their use in smallexample).
-- \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
-- \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
-- \let\smallsf=\nullfont
-- %
-- % Don't complain when characters are missing from the fonts.
-- \tracinglostchars = 0
-- %
-- % Don't bother to do space factor calculations.
-- \frenchspacing
-+ \gdef\dodoignore#1{%
-+ % #1 contains the command name as a string, e.g., `ifinfo'.
- %
-- % Don't report underfull hboxes.
-- \hbadness = 10000
-+ % Define a command to find the next `@end #1'.
-+ \long\def\doignoretext##1^^M at end #1{%
-+ \doignoretextyyy##1^^M@#1\_STOP_}%
- %
-- % Do minimal line-breaking.
-- \pretolerance = 10000
-+ % And this command to find another #1 command, at the beginning of a
-+ % line. (Otherwise, we would consider a line `@c @ifset', for
-+ % example, to count as an @ifset for nesting.)
-+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
- %
-- % Do not execute instructions in @tex
-- \def\tex{\doignore{tex}}%
-- % Do not execute macro definitions.
-- % `c' is a comment character, so the word `macro' will get cut off.
-- \def\macro{\doignore{ma}}%
-+ % And now expand that command.
-+ \doignoretext ^^M%
-+ }%
- }
-
-+\def\doignoreyyy#1{%
-+ \def\temp{#1}%
-+ \ifx\temp\empty % Nothing found.
-+ \let\next\doignoretextzzz
-+ \else % Found a nested condition, ...
-+ \advance\doignorecount by 1
-+ \let\next\doignoretextyyy % ..., look for another.
-+ % If we're here, #1 ends with ^^M\ifinfo (for example).
-+ \fi
-+ \next #1% the token \_STOP_ is present just after this macro.
-+}
-+
-+% We have to swallow the remaining "\_STOP_".
-+%
-+\def\doignoretextzzz#1{%
-+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
-+ \let\next\enddoignore
-+ \else % Still inside a nested condition.
-+ \advance\doignorecount by -1
-+ \let\next\doignoretext % Look for the next @end.
-+ \fi
-+ \next
-+}
-+
-+% Finish off ignored text.
-+{ \obeylines%
-+ % Ignore anything after the last `@end #1'; this matters in verbatim
-+ % environments, where otherwise the newline after an ignored conditional
-+ % would result in a blank line in the output.
-+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
-+}
-+
-+
- % @set VAR sets the variable VAR to an empty value.
- % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
- %
- % 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.
-+% didn't need it.
-+% We rely on the fact that \parsearg sets \catcode`\ =10.
- %
--\def\set{\begingroup\catcode` =10
-- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-- \parsearg\setxxx}
--\def\setxxx#1{\setyyy#1 \endsetyyy}
-+\parseargdef\set{\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
-+ {%
-+ \makevalueexpandable
-+ \def\temp{#2}%
-+ \edef\next{\gdef\makecsname{SET#1}}%
-+ \ifx\temp\empty
-+ \next{}%
-+ \else
-+ \setzzz#2\endsetzzz
-+ \fi
-+ }%
- }
--% 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}}
-+% Remove the trailing space \setxxx inserted.
-+\def\setzzz#1 \endsetzzz{\next{#1}}
-
- % @clear VAR clears (i.e., unsets) the variable VAR.
- %
--\def\clear{\parsearg\clearxxx}
--\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-+\parseargdef\clear{%
-+ {%
-+ \makevalueexpandable
-+ \global\expandafter\let\csname SET#1\endcsname=\relax
-+ }%
-+}
-
- % @value{foo} gets the text saved in variable foo.
-+\def\value{\begingroup\makevalueexpandable\valuexxx}
-+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
- {
-- \catcode`\_ = \active
-+ \catcode`\- = \active \catcode`\_ = \active
- %
-- % We might end up with active _ or - characters in the argument if
-- % we're called from @code, as @code{@value{foo-bar_}}. So \let any
-- % such active characters to their normal equivalents.
-- \gdef\value{\begingroup
-- \catcode`\-=12 \catcode`\_=12
-- \indexbreaks \let_\normalunderscore
-- \valuexxx}
-+ \gdef\makevalueexpandable{%
-+ \let\value = \expandablevalue
-+ % We don't want these characters active, ...
-+ \catcode`\-=\other \catcode`\_=\other
-+ % ..., but we might end up with active ones in the argument if
-+ % we're called from @code, as @code{@value{foo-bar_}}, though.
-+ % So \let them to their normal equivalents.
-+ \let-\realdash \let_\normalunderscore
-+ }
- }
--\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-
- % We have this subroutine so that we can handle at least some @value's
--% properly in indexes (we \let\value to this in \indexdummies). Ones
--% whose names contain - or _ still won't work, but we can't do anything
--% about that. The command has to be fully expandable, since the result
--% winds up in the index file. This means that if the variable's value
--% contains other Texinfo commands, it's almost certain it will fail
--% (although perhaps we could fix that with sufficient work to do a
--% one-level expansion on the result, instead of complete).
-+% properly in indexes (we call \makevalueexpandable in \indexdummies).
-+% The command has to be fully expandable (if the variable is set), since
-+% the result winds up in the index file. This means that if the
-+% variable's value contains other Texinfo commands, it's almost certain
-+% it will fail (although perhaps we could fix that with sufficient work
-+% to do a one-level expansion on the result, instead of complete).
- %
- \def\expandablevalue#1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- {[No value for ``#1'']}%
-+ \message{Variable `#1', used in @value, is not set.}%
- \else
- \csname SET#1\endcsname
- \fi
-@@ -2496,66 +4172,36 @@ width0pt\relax} \fi
- % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
- % with @set.
- %
--\def\ifset{\parsearg\ifsetxxx}
--\def\ifsetxxx #1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- \expandafter\ifsetfail
-- \else
-- \expandafter\ifsetsucceed
-- \fi
-+% To get special treatment of `@end ifset,' call \makeond and the redefine.
-+%
-+\makecond{ifset}
-+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
-+\def\doifset#1#2{%
-+ {%
-+ \makevalueexpandable
-+ \let\next=\empty
-+ \expandafter\ifx\csname SET#2\endcsname\relax
-+ #1% If not set, redefine \next.
-+ \fi
-+ \expandafter
-+ }\next
- }
--\def\ifsetsucceed{\conditionalsucceed{ifset}}
--\def\ifsetfail{\nestedignore{ifset}}
--\defineunmatchedend{ifset}
-+\def\ifsetfail{\doignore{ifset}}
-
- % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
- % defined with @set, or has been undefined with @clear.
- %
--\def\ifclear{\parsearg\ifclearxxx}
--\def\ifclearxxx #1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- \expandafter\ifclearsucceed
-- \else
-- \expandafter\ifclearfail
-- \fi
--}
--\def\ifclearsucceed{\conditionalsucceed{ifclear}}
--\def\ifclearfail{\nestedignore{ifclear}}
--\defineunmatchedend{ifclear}
--
--% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
--% following, through the first @end iftex (etc.). Make `@end iftex'
--% (etc.) valid only after an @iftex.
--%
--\def\iftex{\conditionalsucceed{iftex}}
--\def\ifnothtml{\conditionalsucceed{ifnothtml}}
--\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
--\defineunmatchedend{iftex}
--\defineunmatchedend{ifnothtml}
--\defineunmatchedend{ifnotinfo}
--
--% We can't just want to start a group at @iftex (for example) and end it
--% at @end iftex, since then @set commands inside the conditional have no
--% effect (they'd get reverted at the end of the group). So we must
--% define \Eiftex to redefine itself to be its previous value. (We can't
--% just define it to fail again with an ``unmatched end'' error, since
--% the @ifset might be nested.)
-+% The `\else' inside the `\doifset' parameter is a trick to reuse the
-+% above code: if the variable is not set, do nothing, if it is set,
-+% then redefine \next to \ifclearfail.
- %
--\def\conditionalsucceed#1{%
-- \edef\temp{%
-- % Remember the current value of \E#1.
-- \let\nece{prevE#1} = \nece{E#1}%
-- %
-- % At the `@end #1', redefine \E#1 to be its previous value.
-- \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-- }%
-- \temp
--}
-+\makecond{ifclear}
-+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
-+\def\ifclearfail{\doignore{ifclear}}
-
--% We need to expand lots of \csname's, but we don't want to expand the
--% control sequences after we've constructed them.
--%
--\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-+% @dircategory CATEGORY -- specify a category of the dir file
-+% which this file should belong to. Ignore this in TeX.
-+\let\dircategory=\comment
-
- % @defininfoenclose.
- \let\definfoenclose=\comment
-@@ -2565,9 +4211,8 @@ width0pt\relax} \fi
- % Index generation facilities
-
- % Define \newwrite to be identical to plain tex's \newwrite
--% except not \outer, so it can be used within \newindex.
--{\catcode`\@=11
--\gdef\newwrite{\alloc at 7\write\chardef\sixt@@n}}
-+% except not \outer, so it can be used within macros and \if's.
-+\edef\newwrite{\makecsname{ptexnewwrite}}
-
- % \newindex {foo} defines an index named foo.
- % It automatically defines \fooindex such that
-@@ -2587,42 +4232,48 @@ width0pt\relax} \fi
- }
-
- % @defindex foo == \newindex{foo}
--
-+%
- \def\defindex{\parsearg\newindex}
-
- % Define @defcodeindex, like @defindex except put all entries in @code.
--
-+%
-+\def\defcodeindex{\parsearg\newcodeindex}
-+%
- \def\newcodeindex#1{%
- \iflinks
- \expandafter\newwrite \csname#1indfile\endcsname
- \openout \csname#1indfile\endcsname \jobname.#1
- \fi
- \expandafter\xdef\csname#1index\endcsname{%
-- \noexpand\docodeindex{#1}}
-+ \noexpand\docodeindex{#1}}%
- }
-
--\def\defcodeindex{\parsearg\newcodeindex}
-
- % @synindex foo bar makes index foo feed into index bar.
- % Do this instead of @defindex foo if you don't want it as a separate index.
--% The \closeout helps reduce unnecessary open files; the limit on the
--% Acorn RISC OS is a mere 16 files.
--\def\synindex#1 #2 {%
-- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-- \expandafter\closeout\csname#1indfile\endcsname
-- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-- \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-- \noexpand\doindex{#2}}%
--}
--
-+%
- % @syncodeindex foo bar similar, but put all entries made for index foo
- % inside @code.
--\def\syncodeindex#1 #2 {%
-- \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-- \expandafter\closeout\csname#1indfile\endcsname
-- \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-- \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-- \noexpand\docodeindex{#2}}%
-+%
-+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
-+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
-+
-+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
-+% #3 the target index (bar).
-+\def\dosynindex#1#2#3{%
-+ % Only do \closeout if we haven't already done it, else we'll end up
-+ % closing the target index.
-+ \expandafter \ifx\csname donesynindex#2\endcsname \relax
-+ % The \closeout helps reduce unnecessary open files; the limit on the
-+ % Acorn RISC OS is a mere 16 files.
-+ \expandafter\closeout\csname#2indfile\endcsname
-+ \expandafter\let\csname donesynindex#2\endcsname = 1
-+ \fi
-+ % redefine \fooindfile:
-+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
-+ \expandafter\let\csname#2indfile\endcsname=\temp
-+ % redefine \fooindex:
-+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
- }
-
- % Define \doindex, the driver for all \fooindex macros.
-@@ -2642,265 +4293,486 @@ width0pt\relax} \fi
- \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
- \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
--\def\indexdummies{%
--\def\ { }%
--% Take care of the plain tex accent commands.
--\def\"{\realbackslash "}%
--\def\`{\realbackslash `}%
--\def\'{\realbackslash '}%
--\def\^{\realbackslash ^}%
--\def\~{\realbackslash ~}%
--\def\={\realbackslash =}%
--\def\b{\realbackslash b}%
--\def\c{\realbackslash c}%
--\def\d{\realbackslash d}%
--\def\u{\realbackslash u}%
--\def\v{\realbackslash v}%
--\def\H{\realbackslash H}%
--% Take care of the plain tex special European modified letters.
--\def\oe{\realbackslash oe}%
--\def\ae{\realbackslash ae}%
--\def\aa{\realbackslash aa}%
--\def\OE{\realbackslash OE}%
--\def\AE{\realbackslash AE}%
--\def\AA{\realbackslash AA}%
--\def\o{\realbackslash o}%
--\def\O{\realbackslash O}%
--\def\l{\realbackslash l}%
--\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.
--% Need these in case \tex is in effect and \{ is a \delimiter again.
--% But can't use \lbracecmd and \rbracecmd because texindex assumes
--% braces and backslashes are used only as delimiters.
--\let\{ = \mylbrace
--\let\} = \myrbrace
--\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\TeX{\realbackslash TeX}%
--\def\dots{\realbackslash dots }%
--\def\result{\realbackslash result}%
--\def\equiv{\realbackslash equiv}%
--\def\expansion{\realbackslash expansion}%
--\def\print{\realbackslash print}%
--\def\error{\realbackslash error}%
--\def\point{\realbackslash point}%
--\def\copyright{\realbackslash copyright}%
--\def\tclose##1{\realbackslash tclose {##1}}%
--\def\code##1{\realbackslash code {##1}}%
--\def\uref##1{\realbackslash uref {##1}}%
--\def\url##1{\realbackslash url {##1}}%
--\def\env##1{\realbackslash env {##1}}%
--\def\command##1{\realbackslash command {##1}}%
--\def\option##1{\realbackslash option {##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}}%
--\def\var##1{\realbackslash var {##1}}%
--\def\kbd##1{\realbackslash kbd {##1}}%
--\def\dfn##1{\realbackslash dfn {##1}}%
--\def\emph##1{\realbackslash emph {##1}}%
--\def\acronym##1{\realbackslash acronym {##1}}%
-+% Take care of Texinfo commands that can appear in an index entry.
-+% Since there are some commands we want to expand, and others we don't,
-+% we have to laboriously prevent expansion for those that we don't.
- %
--% Handle some cases of @value -- where the variable name does not
--% contain - or _, and the value does not contain any
--% (non-fully-expandable) commands.
--\let\value = \expandablevalue
-+\def\indexdummies{%
-+ \escapechar = `\\ % use backslash in output files.
-+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
-+ \def\ {\realbackslash\space }%
-+ %
-+ % Need these unexpandable (because we define \tt as a dummy)
-+ % definitions when @{ or @} appear in index entry text. Also, more
-+ % complicated, when \tex is in effect and \{ is a \delimiter again.
-+ % We can't use \lbracecmd and \rbracecmd because texindex assumes
-+ % braces and backslashes are used only as delimiters. Perhaps we
-+ % should define @lbrace and @rbrace commands a la @comma.
-+ \def\{{{\tt\char123}}%
-+ \def\}{{\tt\char125}}%
-+ %
-+ % I don't entirely understand this, but when an index entry is
-+ % generated from a macro call, the \endinput which \scanmacro inserts
-+ % causes processing to be prematurely terminated. This is,
-+ % apparently, because \indexsorttmp is fully expanded, and \endinput
-+ % is an expandable command. The redefinition below makes \endinput
-+ % disappear altogether for that purpose -- although logging shows that
-+ % processing continues to some further point. On the other hand, it
-+ % seems \endinput does not hurt in the printed index arg, since that
-+ % is still getting written without apparent harm.
-+ %
-+ % Sample source (mac-idx3.tex, reported by Graham Percival to
-+ % help-texinfo, 22may06):
-+ % @macro funindex {WORD}
-+ % @findex xyz
-+ % @end macro
-+ % ...
-+ % @funindex commtest
-+ %
-+ % The above is not enough to reproduce the bug, but it gives the flavor.
-+ %
-+ % Sample whatsit resulting:
-+ % . at write3{\entry{xyz}{@folio }{@code {xyz at endinput }}}
-+ %
-+ % So:
-+ \let\endinput = \empty
-+ %
-+ % Do the redefinitions.
-+ \commondummies
-+}
-+
-+% For the aux and toc files, @ is the escape character. So we want to
-+% redefine everything using @ as the escape character (instead of
-+% \realbackslash, still used for index files). When everything uses @,
-+% this will be simpler.
- %
--\unsepspaces
--% Turn off macro expansion
--\turnoffmacros
-+\def\atdummies{%
-+ \def\@{@@}%
-+ \def\ {@ }%
-+ \let\{ = \lbraceatcmd
-+ \let\} = \rbraceatcmd
-+ %
-+ % Do the redefinitions.
-+ \commondummies
-+ \otherbackslash
- }
-
--% 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}}
-+% Called from \indexdummies and \atdummies.
-+%
-+\def\commondummies{%
-+ %
-+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
-+ % preventing its expansion. This is used only for control words,
-+ % not control letters, because the \space would be incorrect for
-+ % control characters, but is needed to separate the control word
-+ % from whatever follows.
-+ %
-+ % For control letters, we have \definedummyletter, which omits the
-+ % space.
-+ %
-+ % These can be used both for control words that take an argument and
-+ % those that do not. If it is followed by {arg} in the input, then
-+ % that will dutifully get written to the index (or wherever).
-+ %
-+ \def\definedummyword ##1{\def##1{\string##1\space}}%
-+ \def\definedummyletter##1{\def##1{\string##1}}%
-+ \let\definedummyaccent\definedummyletter
-+ %
-+ \commondummiesnofonts
-+ %
-+ \definedummyletter\_%
-+ \definedummyletter\-%
-+ %
-+ % Non-English letters.
-+ \definedummyword\AA
-+ \definedummyword\AE
-+ \definedummyword\DH
-+ \definedummyword\L
-+ \definedummyword\O
-+ \definedummyword\OE
-+ \definedummyword\TH
-+ \definedummyword\aa
-+ \definedummyword\ae
-+ \definedummyword\dh
-+ \definedummyword\exclamdown
-+ \definedummyword\l
-+ \definedummyword\o
-+ \definedummyword\oe
-+ \definedummyword\ordf
-+ \definedummyword\ordm
-+ \definedummyword\questiondown
-+ \definedummyword\ss
-+ \definedummyword\th
-+ %
-+ % Although these internal commands shouldn't show up, sometimes they do.
-+ \definedummyword\bf
-+ \definedummyword\gtr
-+ \definedummyword\hat
-+ \definedummyword\less
-+ \definedummyword\sf
-+ \definedummyword\sl
-+ \definedummyword\tclose
-+ \definedummyword\tt
-+ %
-+ \definedummyword\LaTeX
-+ \definedummyword\TeX
-+ %
-+ % Assorted special characters.
-+ \definedummyword\arrow
-+ \definedummyword\bullet
-+ \definedummyword\comma
-+ \definedummyword\copyright
-+ \definedummyword\registeredsymbol
-+ \definedummyword\dots
-+ \definedummyword\enddots
-+ \definedummyword\entrybreak
-+ \definedummyword\equiv
-+ \definedummyword\error
-+ \definedummyword\euro
-+ \definedummyword\expansion
-+ \definedummyword\geq
-+ \definedummyword\guillemetleft
-+ \definedummyword\guillemetright
-+ \definedummyword\guilsinglleft
-+ \definedummyword\guilsinglright
-+ \definedummyword\leq
-+ \definedummyword\minus
-+ \definedummyword\ogonek
-+ \definedummyword\pounds
-+ \definedummyword\point
-+ \definedummyword\print
-+ \definedummyword\quotedblbase
-+ \definedummyword\quotedblleft
-+ \definedummyword\quotedblright
-+ \definedummyword\quoteleft
-+ \definedummyword\quoteright
-+ \definedummyword\quotesinglbase
-+ \definedummyword\result
-+ \definedummyword\textdegree
-+ %
-+ % We want to disable all macros so that they are not expanded by \write.
-+ \macrolist
-+ %
-+ \normalturnoffactive
-+ %
-+ % Handle some cases of @value -- where it does not contain any
-+ % (non-fully-expandable) commands.
-+ \makevalueexpandable
-+}
-
--% \indexnofonts no-ops all font-change commands.
--% This is used when outputting the strings to sort the index by.
--\def\indexdummyfont#1{#1}
--\def\indexdummytex{TeX}
--\def\indexdummydots{...}
-+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
-+%
-+\def\commondummiesnofonts{%
-+ % Control letters and accents.
-+ \definedummyletter\!%
-+ \definedummyaccent\"%
-+ \definedummyaccent\'%
-+ \definedummyletter\*%
-+ \definedummyaccent\,%
-+ \definedummyletter\.%
-+ \definedummyletter\/%
-+ \definedummyletter\:%
-+ \definedummyaccent\=%
-+ \definedummyletter\?%
-+ \definedummyaccent\^%
-+ \definedummyaccent\`%
-+ \definedummyaccent\~%
-+ \definedummyword\u
-+ \definedummyword\v
-+ \definedummyword\H
-+ \definedummyword\dotaccent
-+ \definedummyword\ogonek
-+ \definedummyword\ringaccent
-+ \definedummyword\tieaccent
-+ \definedummyword\ubaraccent
-+ \definedummyword\udotaccent
-+ \definedummyword\dotless
-+ %
-+ % Texinfo font commands.
-+ \definedummyword\b
-+ \definedummyword\i
-+ \definedummyword\r
-+ \definedummyword\sansserif
-+ \definedummyword\sc
-+ \definedummyword\slanted
-+ \definedummyword\t
-+ %
-+ % Commands that take arguments.
-+ \definedummyword\acronym
-+ \definedummyword\anchor
-+ \definedummyword\cite
-+ \definedummyword\code
-+ \definedummyword\command
-+ \definedummyword\dfn
-+ \definedummyword\dmn
-+ \definedummyword\email
-+ \definedummyword\emph
-+ \definedummyword\env
-+ \definedummyword\file
-+ \definedummyword\indicateurl
-+ \definedummyword\kbd
-+ \definedummyword\key
-+ \definedummyword\math
-+ \definedummyword\option
-+ \definedummyword\pxref
-+ \definedummyword\ref
-+ \definedummyword\samp
-+ \definedummyword\strong
-+ \definedummyword\tie
-+ \definedummyword\uref
-+ \definedummyword\url
-+ \definedummyword\var
-+ \definedummyword\verb
-+ \definedummyword\w
-+ \definedummyword\xref
-+}
-
-+% \indexnofonts is used when outputting the strings to sort the index
-+% by, and when constructing control sequence names. It eliminates all
-+% control sequences and just writes whatever the best ASCII sort string
-+% would be for a given command (usually its argument).
-+%
- \def\indexnofonts{%
--% Just ignore accents.
--\let\,=\indexdummyfont
--\let\"=\indexdummyfont
--\let\`=\indexdummyfont
--\let\'=\indexdummyfont
--\let\^=\indexdummyfont
--\let\~=\indexdummyfont
--\let\==\indexdummyfont
--\let\b=\indexdummyfont
--\let\c=\indexdummyfont
--\let\d=\indexdummyfont
--\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}%
--\def\aa{aa}%
--\def\OE{OE}%
--\def\AE{AE}%
--\def\AA{AA}%
--\def\o{o}%
--\def\O{O}%
--\def\l{l}%
--\def\L{L}%
--\def\ss{ss}%
--\let\w=\indexdummyfont
--\let\t=\indexdummyfont
--\let\r=\indexdummyfont
--\let\i=\indexdummyfont
--\let\b=\indexdummyfont
--\let\emph=\indexdummyfont
--\let\strong=\indexdummyfont
--\let\cite=\indexdummyfont
--\let\sc=\indexdummyfont
--%Don't no-op \tt, since it isn't a user-level command
--% and is used in the definitions of the active chars like <, >, |...
--%\let\tt=\indexdummyfont
--\let\tclose=\indexdummyfont
--\let\code=\indexdummyfont
--\let\url=\indexdummyfont
--\let\uref=\indexdummyfont
--\let\env=\indexdummyfont
--\let\acronym=\indexdummyfont
--\let\command=\indexdummyfont
--\let\option=\indexdummyfont
--\let\file=\indexdummyfont
--\let\samp=\indexdummyfont
--\let\kbd=\indexdummyfont
--\let\key=\indexdummyfont
--\let\var=\indexdummyfont
--\let\TeX=\indexdummytex
--\let\dots=\indexdummydots
--\def\@{@}%
-+ % Accent commands should become @asis.
-+ \def\definedummyaccent##1{\let##1\asis}%
-+ % We can just ignore other control letters.
-+ \def\definedummyletter##1{\let##1\empty}%
-+ % All control words become @asis by default; overrides below.
-+ \let\definedummyword\definedummyaccent
-+ %
-+ \commondummiesnofonts
-+ %
-+ % Don't no-op \tt, since it isn't a user-level command
-+ % and is used in the definitions of the active chars like <, >, |, etc.
-+ % Likewise with the other plain tex font commands.
-+ %\let\tt=\asis
-+ %
-+ \def\ { }%
-+ \def\@{@}%
-+ \def\_{\normalunderscore}%
-+ \def\-{}% @- shouldn't affect sorting
-+ %
-+ % Unfortunately, texindex is not prepared to handle braces in the
-+ % content at all. So for index sorting, we map @{ and @} to strings
-+ % starting with |, since that ASCII character is between ASCII { and }.
-+ \def\{{|a}%
-+ \def\}{|b}%
-+ %
-+ % Non-English letters.
-+ \def\AA{AA}%
-+ \def\AE{AE}%
-+ \def\DH{DZZ}%
-+ \def\L{L}%
-+ \def\OE{OE}%
-+ \def\O{O}%
-+ \def\TH{ZZZ}%
-+ \def\aa{aa}%
-+ \def\ae{ae}%
-+ \def\dh{dzz}%
-+ \def\exclamdown{!}%
-+ \def\l{l}%
-+ \def\oe{oe}%
-+ \def\ordf{a}%
-+ \def\ordm{o}%
-+ \def\o{o}%
-+ \def\questiondown{?}%
-+ \def\ss{ss}%
-+ \def\th{zzz}%
-+ %
-+ \def\LaTeX{LaTeX}%
-+ \def\TeX{TeX}%
-+ %
-+ % Assorted special characters.
-+ % (The following {} will end up in the sort string, but that's ok.)
-+ \def\arrow{->}%
-+ \def\bullet{bullet}%
-+ \def\comma{,}%
-+ \def\copyright{copyright}%
-+ \def\dots{...}%
-+ \def\enddots{...}%
-+ \def\equiv{==}%
-+ \def\error{error}%
-+ \def\euro{euro}%
-+ \def\expansion{==>}%
-+ \def\geq{>=}%
-+ \def\guillemetleft{<<}%
-+ \def\guillemetright{>>}%
-+ \def\guilsinglleft{<}%
-+ \def\guilsinglright{>}%
-+ \def\leq{<=}%
-+ \def\minus{-}%
-+ \def\point{.}%
-+ \def\pounds{pounds}%
-+ \def\print{-|}%
-+ \def\quotedblbase{"}%
-+ \def\quotedblleft{"}%
-+ \def\quotedblright{"}%
-+ \def\quoteleft{`}%
-+ \def\quoteright{'}%
-+ \def\quotesinglbase{,}%
-+ \def\registeredsymbol{R}%
-+ \def\result{=>}%
-+ \def\textdegree{o}%
-+ %
-+ \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
-+ \else \indexlquoteignore \fi
-+ %
-+ % We need to get rid of all macros, leaving only the arguments (if present).
-+ % Of course this is not nearly correct, but it is the best we can do for now.
-+ % makeinfo does not expand macros in the argument to @deffn, which ends up
-+ % writing an index entry, and texindex isn't prepared for an index sort entry
-+ % that starts with \.
-+ %
-+ % Since macro invocations are followed by braces, we can just redefine them
-+ % to take a single TeX argument. The case of a macro invocation that
-+ % goes to end-of-line is not handled.
-+ %
-+ \macrolist
- }
-
--% To define \realbackslash, we must make \ not be an escape.
--% We must first make another character (@) an escape
--% so we do not become unable to do a definition.
--
--{\catcode`\@=0 \catcode`\\=\other
-- @gdef at realbackslash{\}}
-+% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
-+% ignore left quotes in the sort term.
-+{\catcode`\`=\active
-+ \gdef\indexlquoteignore{\let`=\empty}}
-
- \let\indexbackslash=0 %overridden during \printindex.
- \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
--% For \ifx comparisons.
--\def\emptymacro{\empty}
--
- % Most index entries go through here, but \dosubind is the general case.
--%
--\def\doind#1#2{\dosubind{#1}{#2}\empty}
-+% #1 is the index name, #2 is the entry text.
-+\def\doind#1#2{\dosubind{#1}{#2}{}}
-
- % Workhorse for all \fooindexes.
- % #1 is name of index, #2 is stuff to put there, #3 is subentry --
--% \empty if called from \doind, as we usually are. The main exception
--% is with defuns, which call us directly.
-+% empty if called from \doind, as we usually are (the main exception
-+% is with most defuns, which call us directly).
- %
- \def\dosubind#1#2#3{%
-+ \iflinks
-+ {%
-+ % Store the main index entry text (including the third arg).
-+ \toks0 = {#2}%
-+ % If third arg is present, precede it with a space.
-+ \def\thirdarg{#3}%
-+ \ifx\thirdarg\empty \else
-+ \toks0 = \expandafter{\the\toks0 \space #3}%
-+ \fi
-+ %
-+ \edef\writeto{\csname#1indfile\endcsname}%
-+ %
-+ \safewhatsit\dosubindwrite
-+ }%
-+ \fi
-+}
-+
-+% Write the entry in \toks0 to the index file:
-+%
-+\def\dosubindwrite{%
- % Put the index entry in the margin if desired.
- \ifx\SETmarginindex\relax\else
-- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
- \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.
-- %
-- \def\thirdarg{#3}%
-- %
-- % If third arg is present, precede it with space in sort key.
-- \ifx\thirdarg\emptymacro
-- \let\subentry = \empty
-- \else
-- \def\subentry{ #3}%
-- \fi
-- %
-- % First process the index entry with all font commands turned
-- % off to get the string to sort by.
-- {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
-- %
-- % Now the real index entry with the fonts.
-- \toks0 = {#2}%
-- %
-- % If third (subentry) arg is present, add it to the index
-- % string. And include a space.
-- \ifx\thirdarg\emptymacro \else
-- \toks0 = \expandafter{\the\toks0 \space #3}%
-- \fi
-- %
-- % Set up the complete index entry, with both the sort key
-- % and the original text, including any font commands. We write
-- % three arguments to \entry to the .?? file, texindex reduces to
-- % two when writing the .??s sorted result.
-- \edef\temp{%
-- \write\csname#1indfile\endcsname{%
-- \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
-- }%
-- %
-- % If a skip is the last thing on the list now, preserve it
-- % by backing up by \lastskip, doing the \write, then inserting
-- % the skip again. Otherwise, the whatsit generated by the
-- % \write will make \lastskip zero. The result is that sequences
-- % like this:
-- % @end defun
-- % @tindex whatever
-- % @defun ...
-- % will have extra space inserted, because the \medbreak in the
-- % start of the @defun won't see the skip inserted by the @end of
-- % the previous defun.
-- %
-- % But don't do any of this if we're not in vertical mode. We
-- % don't want to do a \vskip and prematurely end a paragraph.
-- %
-- % Avoid page breaks due to these extra skips, too.
-- %
-- \iflinks
-- \ifvmode
-- \skip0 = \lastskip
-- \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
-- \fi
-- %
-- \temp % do the write
-- %
-- %
-- \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
-- \fi
-- }%
-- }%
-- \penalty\count255
-+ %
-+ % Remember, we are within a group.
-+ \indexdummies % Must do this here, since \bf, etc expand at this stage
-+ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
-+ % so it will be output as is; and it will print as backslash.
-+ %
-+ % Process the index entry with all font commands turned off, to
-+ % get the string to sort by.
-+ {\indexnofonts
-+ \edef\temp{\the\toks0}% need full expansion
-+ \xdef\indexsorttmp{\temp}%
- }%
-+ %
-+ % Set up the complete index entry, with both the sort key and
-+ % the original text, including any font commands. We write
-+ % three arguments to \entry to the .?? file (four in the
-+ % subentry case), texindex reduces to two when writing the .??s
-+ % sorted result.
-+ \edef\temp{%
-+ \write\writeto{%
-+ \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
-+ }%
-+ \temp
-+}
-+
-+% Take care of unwanted page breaks/skips around a whatsit:
-+%
-+% If a skip is the last thing on the list now, preserve it
-+% by backing up by \lastskip, doing the \write, then inserting
-+% the skip again. Otherwise, the whatsit generated by the
-+% \write or \pdfdest will make \lastskip zero. The result is that
-+% sequences like this:
-+% @end defun
-+% @tindex whatever
-+% @defun ...
-+% will have extra space inserted, because the \medbreak in the
-+% start of the @defun won't see the skip inserted by the @end of
-+% the previous defun.
-+%
-+% But don't do any of this if we're not in vertical mode. We
-+% don't want to do a \vskip and prematurely end a paragraph.
-+%
-+% Avoid page breaks due to these extra skips, too.
-+%
-+% But wait, there is a catch there:
-+% We'll have to check whether \lastskip is zero skip. \ifdim is not
-+% sufficient for this purpose, as it ignores stretch and shrink parts
-+% of the skip. The only way seems to be to check the textual
-+% representation of the skip.
-+%
-+% The following is almost like \def\zeroskipmacro{0.0pt} except that
-+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
-+%
-+\edef\zeroskipmacro{\expandafter\the\csname z at skip\endcsname}
-+%
-+\newskip\whatsitskip
-+\newcount\whatsitpenalty
-+%
-+% ..., ready, GO:
-+%
-+\def\safewhatsit#1{%
-+\ifhmode
-+ #1%
-+\else
-+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
-+ \whatsitskip = \lastskip
-+ \edef\lastskipmacro{\the\lastskip}%
-+ \whatsitpenalty = \lastpenalty
-+ %
-+ % If \lastskip is nonzero, that means the last item was a
-+ % skip. And since a skip is discardable, that means this
-+ % -\whatsitskip glue we're inserting is preceded by a
-+ % non-discardable item, therefore it is not a potential
-+ % breakpoint, therefore no \nobreak needed.
-+ \ifx\lastskipmacro\zeroskipmacro
-+ \else
-+ \vskip-\whatsitskip
-+ \fi
-+ %
-+ #1%
-+ %
-+ \ifx\lastskipmacro\zeroskipmacro
-+ % If \lastskip was zero, perhaps the last item was a penalty, and
-+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
-+ % to re-insert the same penalty (values >10000 are used for various
-+ % signals); since we just inserted a non-discardable item, any
-+ % following glue (such as a \parskip) would be a breakpoint. For example:
-+ %
-+ % @deffn deffn-whatever
-+ % @vindex index-whatever
-+ % Description.
-+ % would allow a break between the index-whatever whatsit
-+ % and the "Description." paragraph.
-+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
-+ \else
-+ % On the other hand, if we had a nonzero \lastskip,
-+ % this make-up glue would be preceded by a non-discardable item
-+ % (the whatsit from the \write), so we must insert a \nobreak.
-+ \nobreak\vskip\whatsitskip
-+ \fi
-+\fi
- }
-
- % The index entry written in the file actually looks like
-@@ -2938,13 +4810,13 @@ width0pt\relax} \fi
- % @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
-+\parseargdef\printindex{\begingroup
- \dobreak \chapheadingskip{10000}%
- %
- \smallfonts \rm
- \tolerance = 9500
-- \indexbreaks
-+ \plainfrenchspacing
-+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
- %
- % See if the index file exists and is nonempty.
- % Change catcode of @ here so that if the index file contains
-@@ -2971,7 +4843,7 @@ width0pt\relax} \fi
- % 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}%
-+ \def\indexbackslash{\backslashcurfont}%
- \catcode`\\ = 0
- \escapechar = `\\
- \begindoublecolumns
-@@ -2993,7 +4865,10 @@ width0pt\relax} \fi
- \removelastskip
- %
- % We like breaks before the index initials, so insert a bonus.
-- \penalty -300
-+ \nobreak
-+ \vskip 0pt plus 3\baselineskip
-+ \penalty 0
-+ \vskip 0pt plus -3\baselineskip
- %
- % Typeset the initial. Making this add up to a whole number of
- % baselineskips increases the chance of the dots lining up from column
-@@ -3003,93 +4878,123 @@ width0pt\relax} \fi
- % No shrink because it confuses \balancecolumns.
- \vskip 1.67\baselineskip plus .5\baselineskip
- \leftline{\secbf #1}%
-- \vskip .33\baselineskip plus .1\baselineskip
-- %
- % Do our best not to break after the initial.
- \nobreak
-+ \vskip .33\baselineskip plus .1\baselineskip
- }}
-
--% This typesets a paragraph consisting of #1, dot leaders, and then #2
--% flush to the right margin. It is used for index and table of contents
--% entries. The paragraph is indented by \leftskip.
-+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
-+% then page number (#2) flushed to the right margin. It is used for index
-+% and table of contents entries. The paragraph is indented by \leftskip.
- %
--\def\entry#1#2{\begingroup
-- %
-- % Start a new paragraph if necessary, so our assignments below can't
-- % affect previous text.
-- \par
-- %
-- % Do not fill out the last line with white space.
-- \parfillskip = 0in
-- %
-- % No extra space above this paragraph.
-- \parskip = 0in
-- %
-- % Do not prefer a separate line ending with a hyphen to fewer lines.
-- \finalhyphendemerits = 0
-- %
-- % \hangindent is only relevant when the entry text and page number
-- % don't both fit on one line. In that case, bob suggests starting the
-- % dots pretty far over on the line. Unfortunately, a large
-- % indentation looks wrong when the entry text itself is broken across
-- % lines. So we use a small indentation and put up with long leaders.
-- %
-- % \hangafter is reset to 1 (which is the value we want) at the start
-- % of each paragraph, so we need not do anything with that.
-- \hangindent = 2em
-- %
-- % When the entry text needs to be broken, just fill out the first line
-- % with blank space.
-- \rightskip = 0pt plus1fil
-- %
-- % A bit of stretch before each entry for the benefit of balancing columns.
-- \vskip 0pt plus1pt
-- %
-- % Start a ``paragraph'' for the index entry so the line breaking
-- % parameters we've set above will have an effect.
-- \noindent
-- %
-- % 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 }}%
-- \def\tempb{#2}%
-- \edef\tempc{\tempa}%
-- \edef\tempd{\tempb}%
-- \ifx\tempc\tempd\ \else%
-+% A straightforward implementation would start like this:
-+% \def\entry#1#2{...
-+% But this freezes the catcodes in the argument, and can cause problems to
-+% @code, which sets - active. This problem was fixed by a kludge---
-+% ``-'' was active throughout whole index, but this isn't really right.
-+% The right solution is to prevent \entry from swallowing the whole text.
-+% --kasal, 21nov03
-+\def\entry{%
-+ \begingroup
- %
-- % If we must, put the page number on a line of its own, and fill out
-- % this line with blank space. (The \hfil is overwhelmed with the
-- % fill leaders glue in \indexdotfill if the page number does fit.)
-- \hfil\penalty50
-- \null\nobreak\indexdotfill % Have leaders before the page number.
-+ % Start a new paragraph if necessary, so our assignments below can't
-+ % affect previous text.
-+ \par
- %
-- % The `\ ' here is removed by the implicit \unskip that TeX does as
-- % part of (the primitive) \par. Without it, a spurious underfull
-- % \hbox ensues.
-- \ifpdf
-- \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-+ % Do not fill out the last line with white space.
-+ \parfillskip = 0in
-+ %
-+ % No extra space above this paragraph.
-+ \parskip = 0in
-+ %
-+ % Do not prefer a separate line ending with a hyphen to fewer lines.
-+ \finalhyphendemerits = 0
-+ %
-+ % \hangindent is only relevant when the entry text and page number
-+ % don't both fit on one line. In that case, bob suggests starting the
-+ % dots pretty far over on the line. Unfortunately, a large
-+ % indentation looks wrong when the entry text itself is broken across
-+ % lines. So we use a small indentation and put up with long leaders.
-+ %
-+ % \hangafter is reset to 1 (which is the value we want) at the start
-+ % of each paragraph, so we need not do anything with that.
-+ \hangindent = 2em
-+ %
-+ % When the entry text needs to be broken, just fill out the first line
-+ % with blank space.
-+ \rightskip = 0pt plus1fil
-+ %
-+ % A bit of stretch before each entry for the benefit of balancing
-+ % columns.
-+ \vskip 0pt plus1pt
-+ %
-+ % When reading the text of entry, convert explicit line breaks
-+ % from @* into spaces. The user might give these in long section
-+ % titles, for instance.
-+ \def\*{\unskip\space\ignorespaces}%
-+ \def\entrybreak{\hfil\break}%
-+ %
-+ % Swallow the left brace of the text (first parameter):
-+ \afterassignment\doentry
-+ \let\temp =
-+}
-+\def\entrybreak{\unskip\space\ignorespaces}%
-+\def\doentry{%
-+ \bgroup % Instead of the swallowed brace.
-+ \noindent
-+ \aftergroup\finishentry
-+ % And now comes the text of the entry.
-+}
-+\def\finishentry#1{%
-+ % #1 is the page number.
-+ %
-+ % 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.
-+ \setbox\boxA = \hbox{#1}%
-+ \ifdim\wd\boxA = 0pt
-+ \ %
- \else
-- \ #2% The page number ends the paragraph.
-+ %
-+ % If we must, put the page number on a line of its own, and fill out
-+ % this line with blank space. (The \hfil is overwhelmed with the
-+ % fill leaders glue in \indexdotfill if the page number does fit.)
-+ \hfil\penalty50
-+ \null\nobreak\indexdotfill % Have leaders before the page number.
-+ %
-+ % The `\ ' here is removed by the implicit \unskip that TeX does as
-+ % part of (the primitive) \par. Without it, a spurious underfull
-+ % \hbox ensues.
-+ \ifpdf
-+ \pdfgettoks#1.%
-+ \ \the\toksA
-+ \else
-+ \ #1%
-+ \fi
- \fi
-- \fi%
-- \par
--\endgroup}
-+ \par
-+ \endgroup
-+}
-
--% Like \dotfill except takes at least 1 em.
-+% Like plain.tex's \dotfill, except uses up at least 1 em.
- \def\indexdotfill{\cleaders
-- \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
-
- \def\primary #1{\line{#1\hfil}}
-
- \newskip\secondaryindent \secondaryindent=0.5cm
--
--\def\secondary #1#2{
--{\parfillskip=0in \parskip=0in
--\hangindent =1in \hangafter=1
--\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
-+\def\secondary#1#2{{%
-+ \parfillskip=0in
-+ \parskip=0in
-+ \hangindent=1in
-+ \hangafter=1
-+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
-+ \ifpdf
-+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-+ \else
-+ #2
-+ \fi
-+ \par
- }}
-
- % Define two-column mode, which we use to typeset indexes.
-@@ -3149,7 +5054,6 @@ width0pt\relax} \fi
- %
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
-- \advance\vsize by -\ht\partialpage
- \vsize = 2\vsize
- }
-
-@@ -3163,6 +5067,7 @@ width0pt\relax} \fi
- % previous page.
- \dimen@ = \vsize
- \divide\dimen@ by 2
-+ \advance\dimen@ by -\ht\partialpage
- %
- % box0 will be the left-hand column, box2 the right.
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-@@ -3170,16 +5075,47 @@ width0pt\relax} \fi
- \unvbox255
- \penalty\outputpenalty
- }
-+%
-+% Re-output the contents of the output page -- any previous material,
-+% followed by the two boxes we just split, in box0 and box2.
- \def\pagesofar{%
-- % Re-output the contents of the output page -- any previous material,
-- % followed by the two boxes we just split, in box0 and box2.
- \unvbox\partialpage
- %
- \hsize = \doublecolumnhsize
- \wd0=\hsize \wd2=\hsize
- \hbox to\pagewidth{\box0\hfil\box2}%
- }
-+%
-+% All done with double columns.
- \def\enddoublecolumns{%
-+ % The following penalty ensures that the page builder is exercised
-+ % _before_ we change the output routine. This is necessary in the
-+ % following situation:
-+ %
-+ % The last section of the index consists only of a single entry.
-+ % Before this section, \pagetotal is less than \pagegoal, so no
-+ % break occurs before the last section starts. However, the last
-+ % section, consisting of \initial and the single \entry, does not
-+ % fit on the page and has to be broken off. Without the following
-+ % penalty the page builder will not be exercised until \eject
-+ % below, and by that time we'll already have changed the output
-+ % routine to the \balancecolumns version, so the next-to-last
-+ % double-column page will be processed with \balancecolumns, which
-+ % is wrong: The two columns will go to the main vertical list, with
-+ % the broken-off section in the recent contributions. As soon as
-+ % the output routine finishes, TeX starts reconsidering the page
-+ % break. The two columns and the broken-off section both fit on the
-+ % page, because the two columns now take up only half of the page
-+ % goal. When TeX sees \eject from below which follows the final
-+ % section, it invokes the new output routine that we've set after
-+ % \balancecolumns below; \onepageout will try to fit the two columns
-+ % and the final section into the vbox of \pageheight (see
-+ % \pagebody), causing an overfull box.
-+ %
-+ % Note that glue won't work here, because glue does not exercise the
-+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
-+ \penalty0
-+ %
- \output = {%
- % Split the last of the double-column material. Leave it on the
- % current page, no automatic page break.
-@@ -3203,8 +5139,9 @@ width0pt\relax} \fi
- % \endgroup where \vsize got restored).
- \pagegoal = \vsize
- }
-+%
-+% Called at the end of the double column material.
- \def\balancecolumns{%
-- % Called at the end of the double column material.
- \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
- \dimen@ = \ht0
- \advance\dimen@ by \topskip
-@@ -3234,6 +5171,27 @@ width0pt\relax} \fi
- \message{sectioning,}
- % Chapters, sections, etc.
-
-+% Let's start with @part.
-+\outer\parseargdef\part{\partzzz{#1}}
-+\def\partzzz#1{%
-+ \chapoddpage
-+ \null
-+ \vskip.3\vsize % move it down on the page a bit
-+ \begingroup
-+ \noindent \titlefonts\rmisbold #1\par % the text
-+ \let\lastnode=\empty % no node to associate with
-+ \writetocentry{part}{#1}{}% but put it in the toc
-+ \headingsoff % no headline or footline on the part page
-+ \chapoddpage
-+ \endgroup
-+}
-+
-+% \unnumberedno is an oxymoron. But we count the unnumbered
-+% sections so that we can refer to them unambiguously in the pdf
-+% outlines by their "section number". We avoid collisions with chapter
-+% numbers by starting them at 10000. (If a document ever has 10000
-+% chapters, we're in trouble anyway, I'm sure.)
-+\newcount\unnumberedno \unnumberedno = 10000
- \newcount\chapno
- \newcount\secno \secno=0
- \newcount\subsecno \subsecno=0
-@@ -3241,9 +5199,12 @@ width0pt\relax} \fi
-
- % This counter is funny since it counts through charcodes of letters A, B, ...
- \newcount\appendixno \appendixno = `\@
-+%
- % \def\appendixletter{\char\the\appendixno}
--% We do the following for the sake of pdftex, which needs the actual
-+% We do the following ugly conditional instead of the above simple
-+% construct for the sake of pdftex, which needs the actual
- % letter in the expansion, not just typeset.
-+%
- \def\appendixletter{%
- \ifnum\appendixno=`A A%
- \else\ifnum\appendixno=`B B%
-@@ -3279,13 +5240,18 @@ width0pt\relax} \fi
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
--% Each @chapter defines this as the name of the chapter.
--% page headings and footings can use it. @section does likewise.
-+% Each @chapter defines these (using marks) as the number+name, number
-+% and name of the chapter. Page headings and footings can use
-+% these. @section does likewise.
- \def\thischapter{}
-+\def\thischapternum{}
-+\def\thischaptername{}
- \def\thissection{}
-+\def\thissectionnum{}
-+\def\thissectionname{}
-
- \newcount\absseclevel % used to calculate proper heading level
--\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
-
- % @raisesections: treat @section as chapter, @subsection as section, etc.
- \def\raisesections{\global\advance\secbase by -1}
-@@ -3295,287 +5261,262 @@ width0pt\relax} \fi
- \def\lowersections{\global\advance\secbase by 1}
- \let\down=\lowersections % original BFox name
-
--% Choose a numbered-heading macro
--% #1 is heading level if unmodified by @raisesections or @lowersections
--% #2 is text for heading
--\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
--\ifcase\absseclevel
-- \chapterzzz{#2}
--\or
-- \seczzz{#2}
--\or
-- \numberedsubseczzz{#2}
--\or
-- \numberedsubsubseczzz{#2}
--\else
-- \ifnum \absseclevel<0
-- \chapterzzz{#2}
-+% we only have subsub.
-+\chardef\maxseclevel = 3
-+%
-+% A numbered section within an unnumbered changes to unnumbered too.
-+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
-+\chardef\unnlevel = \maxseclevel
-+%
-+% Trace whether the current chapter is an appendix or not:
-+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
-+\def\chapheadtype{N}
-+
-+% Choose a heading macro
-+% #1 is heading type
-+% #2 is heading level
-+% #3 is text for heading
-+\def\genhead#1#2#3{%
-+ % Compute the abs. sec. level:
-+ \absseclevel=#2
-+ \advance\absseclevel by \secbase
-+ % Make sure \absseclevel doesn't fall outside the range:
-+ \ifnum \absseclevel < 0
-+ \absseclevel = 0
- \else
-- \numberedsubsubseczzz{#2}
-+ \ifnum \absseclevel > 3
-+ \absseclevel = 3
-+ \fi
- \fi
--\fi
--}
--
--% like \numhead, but chooses appendix heading levels
--\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
--\ifcase\absseclevel
-- \appendixzzz{#2}
--\or
-- \appendixsectionzzz{#2}
--\or
-- \appendixsubseczzz{#2}
--\or
-- \appendixsubsubseczzz{#2}
--\else
-- \ifnum \absseclevel<0
-- \appendixzzz{#2}
-+ % The heading type:
-+ \def\headtype{#1}%
-+ \if \headtype U%
-+ \ifnum \absseclevel < \unnlevel
-+ \chardef\unnlevel = \absseclevel
-+ \fi
- \else
-- \appendixsubsubseczzz{#2}
-+ % Check for appendix sections:
-+ \ifnum \absseclevel = 0
-+ \edef\chapheadtype{\headtype}%
-+ \else
-+ \if \headtype A\if \chapheadtype N%
-+ \errmessage{@appendix... within a non-appendix chapter}%
-+ \fi\fi
-+ \fi
-+ % Check for numbered within unnumbered:
-+ \ifnum \absseclevel > \unnlevel
-+ \def\headtype{U}%
-+ \else
-+ \chardef\unnlevel = 3
-+ \fi
- \fi
--\fi
--}
--
--% like \numhead, but chooses numberless heading levels
--\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
--\ifcase\absseclevel
-- \unnumberedzzz{#2}
--\or
-- \unnumberedseczzz{#2}
--\or
-- \unnumberedsubseczzz{#2}
--\or
-- \unnumberedsubsubseczzz{#2}
--\else
-- \ifnum \absseclevel<0
-- \unnumberedzzz{#2}
-+ % Now print the heading:
-+ \if \headtype U%
-+ \ifcase\absseclevel
-+ \unnumberedzzz{#3}%
-+ \or \unnumberedseczzz{#3}%
-+ \or \unnumberedsubseczzz{#3}%
-+ \or \unnumberedsubsubseczzz{#3}%
-+ \fi
- \else
-- \unnumberedsubsubseczzz{#2}
-+ \if \headtype A%
-+ \ifcase\absseclevel
-+ \appendixzzz{#3}%
-+ \or \appendixsectionzzz{#3}%
-+ \or \appendixsubseczzz{#3}%
-+ \or \appendixsubsubseczzz{#3}%
-+ \fi
-+ \else
-+ \ifcase\absseclevel
-+ \chapterzzz{#3}%
-+ \or \seczzz{#3}%
-+ \or \numberedsubseczzz{#3}%
-+ \or \numberedsubsubseczzz{#3}%
-+ \fi
-+ \fi
- \fi
--\fi
-+ \suppressfirstparagraphindent
- }
-
--% @chapter, @appendix, @unnumbered.
--\def\thischaptername{No Chapter Title}
--\outer\def\chapter{\parsearg\chapteryyy}
--\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
--\def\chapterzzz #1{%
--\secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
--\chapmacro {#1}{\the\chapno}%
--\gdef\thissection{#1}%
--\gdef\thischaptername{#1}%
--% We don't substitute the actual chapter name into \thischapter
--% because we don't want its macros evaluated now.
--\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-- {\the\chapno}}}%
--\temp
--\donoderef
--\global\let\section = \numberedsec
--\global\let\subsection = \numberedsubsec
--\global\let\subsubsection = \numberedsubsubsec
-+% an interface:
-+\def\numhead{\genhead N}
-+\def\apphead{\genhead A}
-+\def\unnmhead{\genhead U}
-+
-+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
-+% all lower-level sectioning counters to zero.
-+%
-+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
-+% (e.g., figures), q.v. By default (before any chapter), that is empty.
-+\let\chaplevelprefix = \empty
-+%
-+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
-+\def\chapterzzz#1{%
-+ % section resetting is \global in case the chapter is in a group, such
-+ % as an @include file.
-+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-+ \global\advance\chapno by 1
-+ %
-+ % Used for \float.
-+ \gdef\chaplevelprefix{\the\chapno.}%
-+ \resetallfloatnos
-+ %
-+ % \putwordChapter can contain complex things in translations.
-+ \toks0=\expandafter{\putwordChapter}%
-+ \message{\the\toks0 \space \the\chapno}%
-+ %
-+ % Write the actual heading.
-+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
-+ %
-+ % So @section and the like are numbered underneath this chapter.
-+ \global\let\section = \numberedsec
-+ \global\let\subsection = \numberedsubsec
-+ \global\let\subsubsection = \numberedsubsubsec
- }
-
--\outer\def\appendix{\parsearg\appendixyyy}
--\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
--\def\appendixzzz #1{%
--\secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \appendixno by 1
--\message{\putwordAppendix\space \appendixletter}%
--\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
--\gdef\thissection{#1}%
--\gdef\thischaptername{#1}%
--\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-- {\putwordAppendix{} \appendixletter}}}%
--\temp
--\appendixnoderef
--\global\let\section = \appendixsec
--\global\let\subsection = \appendixsubsec
--\global\let\subsubsection = \appendixsubsubsec
-+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
-+%
-+\def\appendixzzz#1{%
-+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-+ \global\advance\appendixno by 1
-+ \gdef\chaplevelprefix{\appendixletter.}%
-+ \resetallfloatnos
-+ %
-+ % \putwordAppendix can contain complex things in translations.
-+ \toks0=\expandafter{\putwordAppendix}%
-+ \message{\the\toks0 \space \appendixletter}%
-+ %
-+ \chapmacro{#1}{Yappendix}{\appendixletter}%
-+ %
-+ \global\let\section = \appendixsec
-+ \global\let\subsection = \appendixsubsec
-+ \global\let\subsubsection = \appendixsubsubsec
-+}
-+
-+% normally unnmhead0 calls unnumberedzzz:
-+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
-+\def\unnumberedzzz#1{%
-+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-+ \global\advance\unnumberedno by 1
-+ %
-+ % Since an unnumbered has no number, no prefix for figures.
-+ \global\let\chaplevelprefix = \empty
-+ \resetallfloatnos
-+ %
-+ % This used to be simply \message{#1}, but TeX fully expands the
-+ % argument to \message. Therefore, if #1 contained @-commands, TeX
-+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
-+ % expanded @cite (which turns out to cause errors because \cite is meant
-+ % to be executed, not expanded).
-+ %
-+ % Anyway, we don't want the fully-expanded definition of @cite to appear
-+ % as a result of the \message, we just want `@cite' itself. We use
-+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
-+ % simply yielding the contents of <toks register>. (We also do this for
-+ % the toc entries.)
-+ \toks0 = {#1}%
-+ \message{(\the\toks0)}%
-+ %
-+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
-+ %
-+ \global\let\section = \unnumberedsec
-+ \global\let\subsection = \unnumberedsubsec
-+ \global\let\subsubsection = \unnumberedsubsubsec
- }
-
- % @centerchap is like @unnumbered, but the heading is centered.
--\outer\def\centerchap{\parsearg\centerchapyyy}
--\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-+\outer\parseargdef\centerchap{%
-+ % Well, we could do the following in a group, but that would break
-+ % an assumption that \chapmacro is called at the outermost level.
-+ % Thus we are safer this way: --kasal, 24feb04
-+ \let\centerparametersmaybe = \centerparameters
-+ \unnmhead0{#1}%
-+ \let\centerparametersmaybe = \relax
-+}
-
- % @top is like @unnumbered.
--\outer\def\top{\parsearg\unnumberedyyy}
--
--\outer\def\unnumbered{\parsearg\unnumberedyyy}
--\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
--\def\unnumberedzzz #1{%
--\secno=0 \subsecno=0 \subsubsecno=0
--%
--% This used to be simply \message{#1}, but TeX fully expands the
--% argument to \message. Therefore, if #1 contained @-commands, TeX
--% expanded them. For example, in `@unnumbered The @cite{Book}', TeX
--% expanded @cite (which turns out to cause errors because \cite is meant
--% to be executed, not expanded).
--%
--% Anyway, we don't want the fully-expanded definition of @cite to appear
--% as a result of the \message, we just want `@cite' itself. We use
--% \the<toks register> to achieve this: TeX expands \the<toks> only once,
--% simply yielding the contents of <toks register>. (We also do this for
--% the toc entries.)
--\toks0 = {#1}\message{(\the\toks0)}%
--%
--\unnumbchapmacro {#1}%
--\gdef\thischapter{#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
--\temp
--\unnumbnoderef
--\global\let\section = \unnumberedsec
--\global\let\subsection = \unnumberedsubsec
--\global\let\subsubsection = \unnumberedsubsubsec
--}
-+\let\top\unnumbered
-
- % Sections.
--\outer\def\numberedsec{\parsearg\secyyy}
--\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
--\def\seczzz #1{%
--\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
--\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-- {\the\chapno}{\the\secno}}}%
--\temp
--\donoderef
--\nobreak
-+%
-+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
-+\def\seczzz#1{%
-+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
-+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
- }
-
--\outer\def\appendixsection{\parsearg\appendixsecyyy}
--\outer\def\appendixsec{\parsearg\appendixsecyyy}
--\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
--\def\appendixsectionzzz #1{%
--\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
--\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-- {\appendixletter}{\the\secno}}}%
--\temp
--\appendixnoderef
--\nobreak
-+% normally calls appendixsectionzzz:
-+\outer\parseargdef\appendixsection{\apphead1{#1}}
-+\def\appendixsectionzzz#1{%
-+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
-+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
- }
-+\let\appendixsec\appendixsection
-
--\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
--\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
--\def\unnumberedseczzz #1{%
--\plainsecheading {#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
--\temp
--\unnumbnoderef
--\nobreak
-+% normally calls unnumberedseczzz:
-+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
-+\def\unnumberedseczzz#1{%
-+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
-+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
- }
-
- % Subsections.
--\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
--\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
--\def\numberedsubseczzz #1{%
--\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
--\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-- {\the\chapno}{\the\secno}{\the\subsecno}}}%
--\temp
--\donoderef
--\nobreak
-+%
-+% normally calls numberedsubseczzz:
-+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
-+\def\numberedsubseczzz#1{%
-+ \global\subsubsecno=0 \global\advance\subsecno by 1
-+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
- }
-
--\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
--\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
--\def\appendixsubseczzz #1{%
--\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
--\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-- {\appendixletter}{\the\secno}{\the\subsecno}}}%
--\temp
--\appendixnoderef
--\nobreak
-+% normally calls appendixsubseczzz:
-+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
-+\def\appendixsubseczzz#1{%
-+ \global\subsubsecno=0 \global\advance\subsecno by 1
-+ \sectionheading{#1}{subsec}{Yappendix}%
-+ {\appendixletter.\the\secno.\the\subsecno}%
- }
-
--\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
--\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
--\def\unnumberedsubseczzz #1{%
--\plainsubsecheading {#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
-- {\the\toks0}}}%
--\temp
--\unnumbnoderef
--\nobreak
-+% normally calls unnumberedsubseczzz:
-+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
-+\def\unnumberedsubseczzz#1{%
-+ \global\subsubsecno=0 \global\advance\subsecno by 1
-+ \sectionheading{#1}{subsec}{Ynothing}%
-+ {\the\unnumberedno.\the\secno.\the\subsecno}%
- }
-
- % Subsubsections.
--\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
--\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
--\def\numberedsubsubseczzz #1{%
--\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
--\subsubsecheading {#1}
-- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
--\temp
--\donoderef
--\nobreak
-+%
-+% normally numberedsubsubseczzz:
-+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
-+\def\numberedsubsubseczzz#1{%
-+ \global\advance\subsubsecno by 1
-+ \sectionheading{#1}{subsubsec}{Ynumbered}%
-+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
- }
-
--\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
--\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
--\def\appendixsubsubseczzz #1{%
--\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
--\subsubsecheading {#1}
-- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
--\temp
--\appendixnoderef
--\nobreak
-+% normally appendixsubsubseczzz:
-+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
-+\def\appendixsubsubseczzz#1{%
-+ \global\advance\subsubsecno by 1
-+ \sectionheading{#1}{subsubsec}{Yappendix}%
-+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
- }
-
--\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
--\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
--\def\unnumberedsubsubseczzz #1{%
--\plainsubsubsecheading {#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
-- {\the\toks0}}}%
--\temp
--\unnumbnoderef
--\nobreak
-+% normally unnumberedsubsubseczzz:
-+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
-+\def\unnumberedsubsubseczzz#1{%
-+ \global\advance\subsubsecno by 1
-+ \sectionheading{#1}{subsubsec}{Ynothing}%
-+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
- }
-
--% These are variants which are not "outer", so they can appear in @ifinfo.
--% Actually, they should now be obsolete; ordinary section commands should work.
--\def\infotop{\parsearg\unnumberedzzz}
--\def\infounnumbered{\parsearg\unnumberedzzz}
--\def\infounnumberedsec{\parsearg\unnumberedseczzz}
--\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
--\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
--
--\def\infoappendix{\parsearg\appendixzzz}
--\def\infoappendixsec{\parsearg\appendixseczzz}
--\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
--\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
--
--\def\infochapter{\parsearg\chapterzzz}
--\def\infosection{\parsearg\sectionzzz}
--\def\infosubsection{\parsearg\subsectionzzz}
--\def\infosubsubsection{\parsearg\subsubsectionzzz}
--
- % These macros control what the section commands do, according
- % to what kind of chapter we are in (ordinary, appendix, or unnumbered).
- % Define them by default for a numbered chapter.
--\global\let\section = \numberedsec
--\global\let\subsection = \numberedsubsec
--\global\let\subsubsection = \numberedsubsubsec
-+\let\section = \numberedsec
-+\let\subsection = \numberedsubsec
-+\let\subsubsection = \numberedsubsubsec
-
- % Define @majorheading, @heading and @subheading
-
-@@ -3587,42 +5528,54 @@ width0pt\relax} \fi
- % 3) Likewise, headings look best if no \parindent is used, and
- % if justification is not attempted. Hence \raggedright.
-
-+\def\majorheading{%
-+ {\advance\chapheadingskip by 10pt \chapbreak }%
-+ \parsearg\chapheadingzzz
-+}
-
--\def\majorheading{\parsearg\majorheadingzzz}
--\def\majorheadingzzz #1{%
--{\advance\chapheadingskip by 10pt \chapbreak }%
--{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-- \parindent=0pt\raggedright
-- \rm #1\hfill}}\bigskip \par\penalty 200}
--
--\def\chapheading{\parsearg\chapheadingzzz}
--\def\chapheadingzzz #1{\chapbreak %
--{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-- \parindent=0pt\raggedright
-- \rm #1\hfill}}\bigskip \par\penalty 200}
-+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
-+\def\chapheadingzzz#1{%
-+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-+ \parindent=0pt\ptexraggedright
-+ \rmisbold #1\hfill}}%
-+ \bigskip \par\penalty 200\relax
-+ \suppressfirstparagraphindent
-+}
-
- % @heading, @subheading, @subsubheading.
--\def\heading{\parsearg\plainsecheading}
--\def\subheading{\parsearg\plainsubsecheading}
--\def\subsubheading{\parsearg\plainsubsubsecheading}
-+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
-+ \suppressfirstparagraphindent}
-+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
-+ \suppressfirstparagraphindent}
-+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
-+ \suppressfirstparagraphindent}
-
- % These macros generate a chapter, section, etc. heading only
- % (including whitespace, linebreaking, etc. around it),
- % given all the information in convenient, parsed form.
-
--%%% Args are the skip and penalty (usually negative)
-+% Args are the skip and penalty (usually negative)
- \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
--\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
--
--%%% Define plain chapter starts, and page on/off switching for it
- % Parameter controlling skip before chapter headings (if needed)
--
- \newskip\chapheadingskip
-
-+% Define plain chapter starts, and page on/off switching for it.
- \def\chapbreak{\dobreak \chapheadingskip {-4000}}
- \def\chappager{\par\vfill\supereject}
--\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-+% Because \domark is called before \chapoddpage, the filler page will
-+% get the headings for the next chapter, which is wrong. But we don't
-+% care -- we just disable all headings on the filler page.
-+\def\chapoddpage{%
-+ \chappager
-+ \ifodd\pageno \else
-+ \begingroup
-+ \headingsoff
-+ \null
-+ \chappager
-+ \endgroup
-+ \fi
-+}
-
- \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-@@ -3637,7 +5590,7 @@ width0pt\relax} \fi
- \global\let\pagealignmacro=\chappager
- \global\def\HEADINGSon{\HEADINGSsingle}}
-
--\def\CHAPPAGodd{
-+\def\CHAPPAGodd{%
- \global\let\contentsalignmacro = \chapoddpage
- \global\let\pchapsepmacro=\chapoddpage
- \global\let\pagealignmacro=\chapoddpage
-@@ -3645,107 +5598,293 @@ width0pt\relax} \fi
-
- \CHAPPAGon
-
--\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{%
-+% Chapter opening.
-+%
-+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
-+% Yappendix, Yomitfromtoc), #3 the chapter number.
-+%
-+% To test against our argument.
-+\def\Ynothingkeyword{Ynothing}
-+\def\Yomitfromtockeyword{Yomitfromtoc}
-+\def\Yappendixkeyword{Yappendix}
-+%
-+\def\chapmacro#1#2#3{%
-+ % Insert the first mark before the heading break (see notes for \domark).
-+ \let\prevchapterdefs=\lastchapterdefs
-+ \let\prevsectiondefs=\lastsectiondefs
-+ \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
-+ \gdef\thissection{}}%
-+ %
-+ \def\temptype{#2}%
-+ \ifx\temptype\Ynothingkeyword
-+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-+ \gdef\thischapter{\thischaptername}}%
-+ \else\ifx\temptype\Yomitfromtockeyword
-+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-+ \gdef\thischapter{}}%
-+ \else\ifx\temptype\Yappendixkeyword
-+ \toks0={#1}%
-+ \xdef\lastchapterdefs{%
-+ \gdef\noexpand\thischaptername{\the\toks0}%
-+ \gdef\noexpand\thischapternum{\appendixletter}%
-+ % \noexpand\putwordAppendix avoids expanding indigestible
-+ % commands in some of the translations.
-+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
-+ \noexpand\thischapternum:
-+ \noexpand\thischaptername}%
-+ }%
-+ \else
-+ \toks0={#1}%
-+ \xdef\lastchapterdefs{%
-+ \gdef\noexpand\thischaptername{\the\toks0}%
-+ \gdef\noexpand\thischapternum{\the\chapno}%
-+ % \noexpand\putwordChapter avoids expanding indigestible
-+ % commands in some of the translations.
-+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
-+ \noexpand\thischapternum:
-+ \noexpand\thischaptername}%
-+ }%
-+ \fi\fi\fi
-+ %
-+ % Output the mark. Pass it through \safewhatsit, to take care of
-+ % the preceding space.
-+ \safewhatsit\domark
-+ %
-+ % Insert the chapter heading break.
- \pchapsepmacro
-+ %
-+ % Now the second mark, after the heading break. No break points
-+ % between here and the heading.
-+ \let\prevchapterdefs=\lastchapterdefs
-+ \let\prevsectiondefs=\lastsectiondefs
-+ \domark
-+ %
- {%
-- \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
-+ \chapfonts \rmisbold
-+ %
-+ % Have to define \lastsection before calling \donoderef, because the
-+ % xref code eventually uses it. On the other hand, it has to be called
-+ % after \pchapsepmacro, or the headline will change too soon.
-+ \gdef\lastsection{#1}%
-+ %
-+ % Only insert the separating space if we have a chapter/appendix
-+ % number, and don't print the unnumbered ``number''.
-+ \ifx\temptype\Ynothingkeyword
-+ \setbox0 = \hbox{}%
-+ \def\toctype{unnchap}%
-+ \else\ifx\temptype\Yomitfromtockeyword
-+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
-+ \def\toctype{omit}%
-+ \else\ifx\temptype\Yappendixkeyword
-+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
-+ \def\toctype{app}%
-+ \else
-+ \setbox0 = \hbox{#3\enspace}%
-+ \def\toctype{numchap}%
-+ \fi\fi\fi
-+ %
-+ % Write the toc entry for this chapter. Must come before the
-+ % \donoderef, because we include the current node name in the toc
-+ % entry, and \donoderef resets it to empty.
-+ \writetocentry{\toctype}{#1}{#3}%
-+ %
-+ % For pdftex, we have to write out the node definition (aka, make
-+ % the pdfdest) after any page break, but before the actual text has
-+ % been typeset. If the destination for the pdf outline is after the
-+ % text, then jumping from the outline may wind up with the text not
-+ % being visible, for instance under high magnification.
-+ \donoderef{#2}%
-+ %
-+ % Typeset the actual heading.
-+ \nobreak % Avoid page breaks at the interline glue.
-+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
-+ \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}{}%
--}}
-+\def\centerparameters{%
-+ \advance\rightskip by 3\rightskip
-+ \leftskip = \rightskip
-+ \parfillskip = 0pt
-+}
-
--\CHAPFplain % The default
-
-+% I don't think this chapter style is supported any more, so I'm not
-+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
-+%
-+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-+%
- \def\unnchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-- \parindent=0pt\raggedright
-- \rm #1\hfill}}\bigskip \par\nobreak
-+ \parindent=0pt\ptexraggedright
-+ \rmisbold #1\hfill}}\bigskip \par\nobreak
- }
--
- \def\chfopen #1#2{\chapoddpage {\chapfonts
- \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
- \par\penalty 5000 %
- }
--
- \def\centerchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
-- \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
-+ \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
- }
--
--\def\CHAPFopen{
--\global\let\chapmacro=\chfopen
--\global\let\unnumbchapmacro=\unnchfopen
--\global\let\centerchapmacro=\centerchfopen}
-+\def\CHAPFopen{%
-+ \global\let\chapmacro=\chfopen
-+ \global\let\centerchapmacro=\centerchfopen}
-
-
--% Section titles.
-+% Section titles. These macros combine the section number parts and
-+% call the generic \sectionheading to do the printing.
-+%
- \newskip\secheadingskip
--\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
--\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
--\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
-
- % 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}}
-+\newskip\subsecheadingskip
-+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
-
- % 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}}
-+\def\subsubsecheadingskip{\subsecheadingskip}
-+\def\subsubsecheadingbreak{\subsecheadingbreak}
-
-
--% Print any size section title.
-+% Print any size, any type, 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
-- }%
-+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
-+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
-+% section number.
-+%
-+\def\seckeyword{sec}
-+%
-+\def\sectionheading#1#2#3#4{%
- {%
-+ \checkenv{}% should not be in an environment.
-+ %
- % Switch to the right set of fonts.
-- \csname #1fonts\endcsname \rm
-+ \csname #2fonts\endcsname \rmisbold
- %
-- % Only insert the separating space if we have a section number.
-- \def\secnum{#2}%
-- \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
-+ \def\sectionlevel{#2}%
-+ \def\temptype{#3}%
- %
-- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-- \hangindent = \wd0 % zero if no section number
-- \unhbox0 #3}%
-+ % Insert first mark before the heading break (see notes for \domark).
-+ \let\prevsectiondefs=\lastsectiondefs
-+ \ifx\temptype\Ynothingkeyword
-+ \ifx\sectionlevel\seckeyword
-+ \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
-+ \gdef\thissection{\thissectionname}}%
-+ \fi
-+ \else\ifx\temptype\Yomitfromtockeyword
-+ % Don't redefine \thissection.
-+ \else\ifx\temptype\Yappendixkeyword
-+ \ifx\sectionlevel\seckeyword
-+ \toks0={#1}%
-+ \xdef\lastsectiondefs{%
-+ \gdef\noexpand\thissectionname{\the\toks0}%
-+ \gdef\noexpand\thissectionnum{#4}%
-+ % \noexpand\putwordSection avoids expanding indigestible
-+ % commands in some of the translations.
-+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
-+ \noexpand\thissectionnum:
-+ \noexpand\thissectionname}%
-+ }%
-+ \fi
-+ \else
-+ \ifx\sectionlevel\seckeyword
-+ \toks0={#1}%
-+ \xdef\lastsectiondefs{%
-+ \gdef\noexpand\thissectionname{\the\toks0}%
-+ \gdef\noexpand\thissectionnum{#4}%
-+ % \noexpand\putwordSection avoids expanding indigestible
-+ % commands in some of the translations.
-+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
-+ \noexpand\thissectionnum:
-+ \noexpand\thissectionname}%
-+ }%
-+ \fi
-+ \fi\fi\fi
-+ %
-+ % Go into vertical mode. Usually we'll already be there, but we
-+ % don't want the following whatsit to end up in a preceding paragraph
-+ % if the document didn't happen to have a blank line.
-+ \par
-+ %
-+ % Output the mark. Pass it through \safewhatsit, to take care of
-+ % the preceding space.
-+ \safewhatsit\domark
-+ %
-+ % Insert space above the heading.
-+ \csname #2headingbreak\endcsname
-+ %
-+ % Now the second mark, after the heading break. No break points
-+ % between here and the heading.
-+ \let\prevsectiondefs=\lastsectiondefs
-+ \domark
-+ %
-+ % Only insert the space after the number if we have a section number.
-+ \ifx\temptype\Ynothingkeyword
-+ \setbox0 = \hbox{}%
-+ \def\toctype{unn}%
-+ \gdef\lastsection{#1}%
-+ \else\ifx\temptype\Yomitfromtockeyword
-+ % for @headings -- no section number, don't include in toc,
-+ % and don't redefine \lastsection.
-+ \setbox0 = \hbox{}%
-+ \def\toctype{omit}%
-+ \let\sectionlevel=\empty
-+ \else\ifx\temptype\Yappendixkeyword
-+ \setbox0 = \hbox{#4\enspace}%
-+ \def\toctype{app}%
-+ \gdef\lastsection{#1}%
-+ \else
-+ \setbox0 = \hbox{#4\enspace}%
-+ \def\toctype{num}%
-+ \gdef\lastsection{#1}%
-+ \fi\fi\fi
-+ %
-+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
-+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
-+ %
-+ % Write the node reference (= pdf destination for pdftex).
-+ % Again, see comments in \chapmacro.
-+ \donoderef{#3}%
-+ %
-+ % Interline glue will be inserted when the vbox is completed.
-+ % That glue will be a valid breakpoint for the page, since it'll be
-+ % preceded by a whatsit (usually from the \donoderef, or from the
-+ % \writetocentry if there was no node). We don't want to allow that
-+ % break, since then the whatsits could end up on page n while the
-+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
-+ \nobreak
-+ %
-+ % Output the actual section heading.
-+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
-+ \hangindent=\wd0 % zero if no section number
-+ \unhbox0 #1}%
- }%
-- \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
-+ % Add extra space after the heading -- half of whatever came above it.
-+ % Don't allow stretch, though.
-+ \kern .5 \csname #2headingskip\endcsname
-+ %
-+ % Do not let the kern be a potential breakpoint, as it would be if it
-+ % was followed by glue.
-+ \nobreak
-+ %
-+ % We'll almost certainly start a paragraph next, so don't let that
-+ % glue accumulate. (Not a breakpoint because it's preceded by a
-+ % discardable item.)
-+ \vskip-\parskip
-+ %
-+ % This is purely so the last item on the list is a known \penalty >
-+ % 10000. This is so \startdefun can avoid allowing breakpoints after
-+ % section headings. Otherwise, it would insert a valid breakpoint between:
-+ % @section sec-whatever
-+ % @deffn def-whatever
-+ \penalty 10001
- }
-
-
-@@ -3754,161 +5893,238 @@ width0pt\relax} \fi
- \newwrite\tocfile
-
- % Write an entry to the toc file, opening it if necessary.
--% Called from @chapter, etc. We supply {\folio} at the end of the
--% argument, which will end up as the last argument to the \...entry macro.
-+% Called from @chapter, etc.
- %
--% We open the .toc file here instead of at @setfilename or any other
--% given time so that @contents can be put in the document anywhere.
-+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
-+% We append the current node name (if any) and page number as additional
-+% arguments for the \{chap,sec,...}entry macros which will eventually
-+% read this. The node name is used in the pdf outlines as the
-+% destination to jump to.
-+%
-+% We open the .toc file for writing here instead of at @setfilename (or
-+% any other fixed time) so that @contents can be anywhere in the document.
-+% But if #1 is `omit', then we don't do anything. This is used for the
-+% table of contents chapter openings themselves.
- %
- \newif\iftocfileopened
--\def\writetocentry#1{%
-- \iftocfileopened\else
-- \immediate\openout\tocfile = \jobname.toc
-- \global\tocfileopenedtrue
-+\def\omitkeyword{omit}%
-+%
-+\def\writetocentry#1#2#3{%
-+ \edef\writetoctype{#1}%
-+ \ifx\writetoctype\omitkeyword \else
-+ \iftocfileopened\else
-+ \immediate\openout\tocfile = \jobname.toc
-+ \global\tocfileopenedtrue
-+ \fi
-+ %
-+ \iflinks
-+ {\atdummies
-+ \edef\temp{%
-+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
-+ \temp
-+ }%
-+ \fi
- \fi
-- \iflinks \write\tocfile{#1{\folio}}\fi
-+ %
-+ % Tell \shipout to create a pdf destination on each page, if we're
-+ % writing pdf. These are used in the table of contents. We can't
-+ % just write one on every page because the title pages are numbered
-+ % 1 and 2 (the page numbers aren't printed), and so are the first
-+ % two pages of the document. Thus, we'd have two destinations named
-+ % `1', and two named `2'.
-+ \ifpdf \global\pdfmakepagedesttrue \fi
-+}
-+
-+
-+% These characters do not print properly in the Computer Modern roman
-+% fonts, so we must take special care. This is more or less redundant
-+% with the Texinfo input format setup at the end of this file.
-+%
-+\def\activecatcodes{%
-+ \catcode`\"=\active
-+ \catcode`\$=\active
-+ \catcode`\<=\active
-+ \catcode`\>=\active
-+ \catcode`\\=\active
-+ \catcode`\^=\active
-+ \catcode`\_=\active
-+ \catcode`\|=\active
-+ \catcode`\~=\active
-+}
-+
-+
-+% Read the toc file, which is essentially Texinfo input.
-+\def\readtocfile{%
-+ \setupdatafile
-+ \activecatcodes
-+ \input \tocreadfilename
- }
-
- \newskip\contentsrightmargin \contentsrightmargin=1in
- \newcount\savepageno
- \newcount\lastnegativepageno \lastnegativepageno = -1
-
--% Finish up the main text and prepare to read what we've written
--% to \tocfile.
-+% Prepare to read what we've written to \tocfile.
- %
- \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 at matematik.su.se>
-- \contentsalignmacro
-- \immediate\closeout\tocfile
-- %
-- % Don't need to put `Contents' or `Short Contents' in the headline.
-- % It is abundantly clear what they are.
-- \unnumbchapmacro{#1}\def\thischapter{}%
-- \savepageno = \pageno
-- \begingroup % Set up to handle contents files properly.
-- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
-- % We can't do this, because then an actual ^ in a section
-- % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
-- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha at piuha.ydi.vtt.fi
-- \raggedbottom % Worry more about breakpoints than the bottom.
-- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-- %
-- % Roman numerals for page numbers.
-- \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
-+ % 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 at matematik.su.se>
-+ \contentsalignmacro
-+ \immediate\closeout\tocfile
-+ %
-+ % Don't need to put `Contents' or `Short Contents' in the headline.
-+ % It is abundantly clear what they are.
-+ \chapmacro{#1}{Yomitfromtoc}{}%
-+ %
-+ \savepageno = \pageno
-+ \begingroup % Set up to handle contents files properly.
-+ \raggedbottom % Worry more about breakpoints than the bottom.
-+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-+ %
-+ % Roman numerals for page numbers.
-+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
- }
-
-+% redefined for the two-volume lispref. We always output on
-+% \jobname.toc even if this is redefined.
-+%
-+\def\tocreadfilename{\jobname.toc}
-
- % Normal (long) toc.
-+%
- \def\contents{%
-- \startcontents{\putwordTOC}%
-- \openin 1 \jobname.toc
-- \ifeof 1 \else
-- \closein 1
-- \input \jobname.toc
-- \fi
-- \vfill \eject
-- \contentsalignmacro % in case @setchapternewpage odd is in effect
-- \pdfmakeoutlines
-- \endgroup
-- \lastnegativepageno = \pageno
-- \pageno = \savepageno
-+ \startcontents{\putwordTOC}%
-+ \openin 1 \tocreadfilename\space
-+ \ifeof 1 \else
-+ \readtocfile
-+ \fi
-+ \vfill \eject
-+ \contentsalignmacro % in case @setchapternewpage odd is in effect
-+ \ifeof 1 \else
-+ \pdfmakeoutlines
-+ \fi
-+ \closein 1
-+ \endgroup
-+ \lastnegativepageno = \pageno
-+ \global\pageno = \savepageno
- }
-
- % And just the chapters.
- \def\summarycontents{%
-- \startcontents{\putwordShortTOC}%
-- %
-- \let\chapentry = \shortchapentry
-- \let\unnumbchapentry = \shortunnumberedentry
-- % We want a true roman here for the page numbers.
-- \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{}
-- \def\subsecentry ##1##2##3##4##5{}
-- \def\unnumbsubsecentry ##1##2{}
-- \def\subsubsecentry ##1##2##3##4##5##6{}
-- \def\unnumbsubsubsecentry ##1##2{}
-- \openin 1 \jobname.toc
-- \ifeof 1 \else
-- \closein 1
-- \input \jobname.toc
-- \fi
-- \vfill \eject
-- \contentsalignmacro % in case @setchapternewpage odd is in effect
-- \endgroup
-- \lastnegativepageno = \pageno
-- \pageno = \savepageno
-+ \startcontents{\putwordShortTOC}%
-+ %
-+ \let\partentry = \shortpartentry
-+ \let\numchapentry = \shortchapentry
-+ \let\appentry = \shortchapentry
-+ \let\unnchapentry = \shortunnchapentry
-+ % We want a true roman here for the page numbers.
-+ \secfonts
-+ \let\rm=\shortcontrm \let\bf=\shortcontbf
-+ \let\sl=\shortcontsl \let\tt=\shortconttt
-+ \rm
-+ \hyphenpenalty = 10000
-+ \advance\baselineskip by 1pt % Open it up a little.
-+ \def\numsecentry##1##2##3##4{}
-+ \let\appsecentry = \numsecentry
-+ \let\unnsecentry = \numsecentry
-+ \let\numsubsecentry = \numsecentry
-+ \let\appsubsecentry = \numsecentry
-+ \let\unnsubsecentry = \numsecentry
-+ \let\numsubsubsecentry = \numsecentry
-+ \let\appsubsubsecentry = \numsecentry
-+ \let\unnsubsubsecentry = \numsecentry
-+ \openin 1 \tocreadfilename\space
-+ \ifeof 1 \else
-+ \readtocfile
-+ \fi
-+ \closein 1
-+ \vfill \eject
-+ \contentsalignmacro % in case @setchapternewpage odd is in effect
-+ \endgroup
-+ \lastnegativepageno = \pageno
-+ \global\pageno = \savepageno
- }
- \let\shortcontents = \summarycontents
-
--\ifpdf
-- \pdfcatalog{/PageMode /UseOutlines}%
--\fi
-+% Typeset the label for a chapter or appendix for the short contents.
-+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
-+%
-+\def\shortchaplabel#1{%
-+ % This space should be enough, since a single number is .5em, and the
-+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
-+ % But use \hss just in case.
-+ % (This space doesn't include the extra space that gets added after
-+ % the label; that gets put in by \shortchapentry above.)
-+ %
-+ % We'd like to right-justify chapter numbers, but that looks strange
-+ % with appendix letters. And right-justifying numbers and
-+ % left-justifying letters looks strange when there is less than 10
-+ % chapters. Have to read the whole toc once to know how many chapters
-+ % there are before deciding ...
-+ \hbox to 1em{#1\hss}%
-+}
-
- % These macros generate individual entries in the table of contents.
- % The first argument is the chapter or section name.
- % The last argument is the page number.
- % The arguments in between are the chapter number, section number, ...
-
--% Chapter-level things, for both the long and short contents.
--\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-+% Parts, in the main contents. Replace the part number, which doesn't
-+% exist, with an empty box. Let's hope all the numbers have the same width.
-+% Also ignore the page number, which is conventionally not printed.
-+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
-+\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
-+%
-+% Parts, in the short toc.
-+\def\shortpartentry#1#2#3#4{%
-+ \penalty-300
-+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
-+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
-+}
-
--% See comments in \dochapentry re vbox and related settings
--\def\shortchapentry#1#2#3{%
-- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
-+% Chapters, in the main contents.
-+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-+%
-+% Chapters, in the short toc.
-+% See comments in \dochapentry re vbox and related settings.
-+\def\shortchapentry#1#2#3#4{%
-+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
- }
-
--% Typeset the label for a chapter or appendix for the short contents.
--% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
--% We could simplify the code here by writing out an \appendixentry
--% command in the toc file for appendices, instead of using \chapentry
--% for both, but it doesn't seem worth it.
-+% Appendices, in the main contents.
-+% Need the word Appendix, and a fixed-size box.
- %
--\newdimen\shortappendixwidth
-+\def\appendixbox#1{%
-+ % We use M since it's probably the widest letter.
-+ \setbox0 = \hbox{\putwordAppendix{} M}%
-+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
- %
--\def\shortchaplabel#1{%
-- % Compute width of word "Appendix", may change with language.
-- \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
-- \shortappendixwidth = \wd0
-- %
-- % We typeset #1 in a box of constant width, regardless of the text of
-- % #1, so the chapter titles will come out aligned.
-- \setbox0 = \hbox{#1}%
-- \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
-- %
-- % 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}%
--}
-+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
-
--\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
--\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
-+% Unnumbered chapters.
-+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
-+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
-
- % Sections.
--\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
--\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
-+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
-+\let\appsecentry=\numsecentry
-+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
-
- % Subsections.
--\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
--\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
-+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
-+\let\appsubsecentry=\numsubsecentry
-+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
-
- % And subsubsections.
--\def\subsubsecentry#1#2#3#4#5#6{%
-- \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
--\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
-+\let\appsubsubsecentry=\numsubsubsecentry
-+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
-
- % This parameter controls the indentation of the various levels.
--\newdimen\tocindent \tocindent = 3pc
-+% Same as \defaultparindent.
-+\newdimen\tocindent \tocindent = 15pt
-
- % Now for the actual typesetting. In all these, #1 is the text and #2 is the
- % page number.
-@@ -3939,17 +6155,8 @@ width0pt\relax} \fi
- \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
-
--% Final typesetting of a toc entry; we use the same \entry macro as for
--% the index entries, but we want to suppress hyphenation here. (We
--% 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
-- \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-- % Do not use \turnoffactive in these arguments. Since the toc is
-- % typeset in cmr, so characters such as _ would come out wrong; we
-- % have to do the usual translation tricks.
-- \entry{#1}{#2}%
--\endgroup}
-+% We use the same \entry macro as for the index entries.
-+\let\tocentry = \entry
-
- % Space between chapter (or whatever) number and the title.
- \def\labelspace{\hskip1em \relax}
-@@ -3959,74 +6166,36 @@ width0pt\relax} \fi
-
- \def\chapentryfonts{\secfonts \rm}
- \def\secentryfonts{\textfonts}
--\let\subsecentryfonts = \textfonts
--\let\subsubsecentryfonts = \textfonts
-+\def\subsecentryfonts{\textfonts}
-+\def\subsubsecentryfonts{\textfonts}
-
-
- \message{environments,}
- % @foo ... @end foo.
-
--% Since these characters are used in examples, it should be an even number of
--% \tt widths. Each \tt character is 1en, so two makes it 1em.
--% Furthermore, these definitions must come after we define our fonts.
--\newbox\dblarrowbox \newbox\longdblarrowbox
--\newbox\pushcharbox \newbox\bullbox
--\newbox\equivbox \newbox\errorbox
--
--%{\tentt
--%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
--%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
--%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
--%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
--% Adapted from the manmac format (p.420 of TeXbook)
--%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
--% 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.
--{\tentt \global\dimen0 = 3em}% Width of the box.
--\dimen2 = .55pt % Thickness of rules
--% The text. (`r' is open on the right, `e' somewhat less so on the left.)
--\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
--
--\global\setbox\errorbox=\hbox to \dimen0{\hfil
-- \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-- \advance\hsize by -2\dimen2 % Rules.
-- \vbox{
-- \hrule height\dimen2
-- \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
-- \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-- \kern3pt\vrule width\dimen2}% Space to right.
-- \hrule height\dimen2}
-- \hfil}
--
--% The @error{} command.
--\def\error{\leavevmode\lower.7ex\copy\errorbox}
--
--% @tex ... @end tex escapes into raw Tex temporarily.
-+% @tex ... @end tex escapes into raw TeX temporarily.
- % One exception: @ is still an escape character, so that @end tex works.
--% But \@ or @@ will get a plain tex @ character.
-+% But \@ or @@ will get a plain @ character.
-
--\def\tex{\begingroup
-+\envdef\tex{%
-+ \setupmarkupstyle{tex}%
- \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
- \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-- \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
- \catcode `\%=14
-- \catcode 43=12 % plus
-- \catcode`\"=12
-- \catcode`\==12
-- \catcode`\|=12
-- \catcode`\<=12
-- \catcode`\>=12
-+ \catcode `\+=\other
-+ \catcode `\"=\other
-+ \catcode `\|=\other
-+ \catcode `\<=\other
-+ \catcode `\>=\other
-+ \catcode`\`=\other
-+ \catcode`\'=\other
- \escapechar=`\\
- %
-+ % ' is active in math mode (mathcode"8000). So reset it, and all our
-+ % other math active characters (just in case), to plain's definitions.
-+ \mathactive
-+ %
- \let\b=\ptexb
- \let\bullet=\ptexbullet
- \let\c=\ptexc
-@@ -4036,20 +6205,26 @@ width0pt\relax} \fi
- \let\equiv=\ptexequiv
- \let\!=\ptexexclam
- \let\i=\ptexi
-+ \let\indent=\ptexindent
-+ \let\noindent=\ptexnoindent
- \let\{=\ptexlbrace
- \let\+=\tabalign
- \let\}=\ptexrbrace
-+ \let\/=\ptexslash
- \let\*=\ptexstar
- \let\t=\ptext
-+ \expandafter \let\csname top\endcsname=\ptextop % outer
-+ \let\frenchspacing=\plainfrenchspacing
- %
- \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
- \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
- \def\@{@}%
--\let\Etex=\endgroup}
-+}
-+% There is no need to define \Etex.
-
--% Define @lisp ... @endlisp.
--% @lisp does a \begingroup so it can rebind things,
--% including the definition of @endlisp (which normally is erroneous).
-+% Define @lisp ... @end lisp.
-+% @lisp environment forms a group so it can rebind things,
-+% including the definition of @end lisp (which normally is erroneous).
-
- % Amount to narrow the margins by for @lisp.
- \newskip\lispnarrowing \lispnarrowing=0.4in
-@@ -4059,34 +6234,34 @@ width0pt\relax} \fi
- % have any width.
- \def\lisppar{\null\endgraf}
-
--% Make each space character in the input produce a normal interword
--% space in the output. Don't allow a line break at this space, as this
--% is used only in environments like @example, where each line of input
--% should produce a line of output anyway.
--%
--{\obeyspaces %
--\gdef\sepspaces{\obeyspaces\let =\tie}}
--
--% Define \obeyedspace to be our active space, whatever it is. This is
--% for use in \parsearg.
--{\sepspaces%
--\global\let\obeyedspace= }
--
- % This space is always present above and below environments.
- \newskip\envskipamount \envskipamount = 0pt
-
- % Make spacing and below environment symmetrical. We use \parskip here
- % to help in doing that, since in @example-like environments \parskip
- % is reset to zero; thus the \afterenvbreak inserts no space -- but the
--% start of the next paragraph will insert \parskip
-+% start of the next paragraph will insert \parskip.
- %
--\def\aboveenvbreak{{\advance\envskipamount by \parskip
--\endgraf \ifdim\lastskip<\envskipamount
--\removelastskip \penalty-50 \vskip\envskipamount \fi}}
-+\def\aboveenvbreak{{%
-+ % =10000 instead of <10000 because of a special case in \itemzzz and
-+ % \sectionheading, q.v.
-+ \ifnum \lastpenalty=10000 \else
-+ \advance\envskipamount by \parskip
-+ \endgraf
-+ \ifdim\lastskip<\envskipamount
-+ \removelastskip
-+ % it's not a good place to break if the last penalty was \nobreak
-+ % or better ...
-+ \ifnum\lastpenalty<10000 \penalty-50 \fi
-+ \vskip\envskipamount
-+ \fi
-+ \fi
-+}}
-
- \let\afterenvbreak = \aboveenvbreak
-
--% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
-+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
-+% also clear it, so that its embedded environments do the narrowing again.
- \let\nonarrowing=\relax
-
- % @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-@@ -4110,738 +6285,821 @@ width0pt\relax} \fi
- %
- \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 18.4pt % allow for 3pt kerns on either
--% side, and for 6pt waste from
--% each corner char, and rule thickness
-- \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
-+\envdef\cartouche{%
-+ \ifhmode\par\fi % can't be in the midst of a paragraph.
-+ \startsavinginserts
-+ \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 18.4pt % allow for 3pt kerns on either
-+ % side, and for 6pt waste from
-+ % each corner char, and rule thickness
-+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-+ % Flag to tell @lisp, etc., not to narrow margin.
-+ \let\nonarrowing = t%
-+ %
-+ % If this cartouche directly follows a sectioning command, we need the
-+ % \parskip glue (backspaced over by default) or the cartouche can
-+ % collide with the section heading.
-+ \ifnum\lastpenalty>10000 \vskip\parskip \fi
-+ %
-+ \vbox\bgroup
-+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
-+ \carttop
-+ \hbox\bgroup
-+ \hskip\lskip
-+ \vrule\kern3pt
-+ \vbox\bgroup
-+ \kern3pt
-+ \hsize=\cartinner
-+ \baselineskip=\normbskip
-+ \lineskip=\normlskip
-+ \parskip=\normpskip
-+ \vskip -\parskip
-+ \comment % For explanation, see the end of def\group.
-+}
- \def\Ecartouche{%
-- \endgroup
-- \kern3pt
-- \egroup
-- \kern3pt\vrule
-- \hskip\rskip
-- \egroup
-- \cartbot
-- \egroup
--\endgroup
--}}
-+ \ifhmode\par\fi
-+ \kern3pt
-+ \egroup
-+ \kern3pt\vrule
-+ \hskip\rskip
-+ \egroup
-+ \cartbot
-+ \egroup
-+ \checkinserts
-+}
-
-
- % This macro is called at the beginning of all the @example variants,
- % inside a group.
-+\newdimen\nonfillparindent
- \def\nonfillstart{%
- \aboveenvbreak
-- \inENV % This group ends at the end of the body
- \hfuzz = 12pt % Don't be fussy
- \sepspaces % Make spaces be word-separators rather than space tokens.
-- \singlespace
- \let\par = \lisppar % don't ignore blank lines
- \obeylines % each line of input is a line of output
- \parskip = 0pt
-+ % Turn off paragraph indentation but redefine \indent to emulate
-+ % the normal \indent.
-+ \nonfillparindent=\parindent
- \parindent = 0pt
-+ \let\indent\nonfillindent
-+ %
- \emergencystretch = 0pt % don't try to avoid overfull boxes
-- % @cartouche defines \nonarrowing to inhibit narrowing
-- % at next level down.
- \ifx\nonarrowing\relax
- \advance \leftskip by \lispnarrowing
- \exdentamount=\lispnarrowing
-- \let\exdent=\nofillexdent
-- \let\nonarrowing=\relax
-+ \else
-+ \let\nonarrowing = \relax
- \fi
-+ \let\exdent=\nofillexdent
- }
-
--% Define the \E... control sequence only if we are inside the particular
--% environment, so the error checking in \end will work.
--%
--% To end an @example-like environment, we first end the paragraph (via
--% \afterenvbreak's vertical glue), and then the group. That way we keep
--% the zero \parskip that the environments set -- \parskip glue will be
--% inserted at the beginning of the next paragraph in the document, after
--% the environment.
--%
--\def\nonfillfinish{\afterenvbreak\endgroup}
-+\begingroup
-+\obeyspaces
-+% We want to swallow spaces (but not other tokens) after the fake
-+% @indent in our nonfill-environments, where spaces are normally
-+% active and set to @tie, resulting in them not being ignored after
-+% @indent.
-+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
-+\gdef\nonfillindentcheck{%
-+\ifx\temp %
-+\expandafter\nonfillindentgobble%
-+\else%
-+\leavevmode\nonfillindentbox%
-+\fi%
-+}%
-+\endgroup
-+\def\nonfillindentgobble#1{\nonfillindent}
-+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
-
--% @lisp: indented, narrowed, typewriter font.
--\def\lisp{\begingroup
-- \nonfillstart
-- \let\Elisp = \nonfillfinish
-- \tt
-- \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-- \gobble % eat return
-+% If you want all examples etc. small: @set dispenvsize small.
-+% If you want even small examples the full size: @set dispenvsize nosmall.
-+% This affects the following displayed environments:
-+% @example, @display, @format, @lisp
-+%
-+\def\smallword{small}
-+\def\nosmallword{nosmall}
-+\let\SETdispenvsize\relax
-+\def\setnormaldispenv{%
-+ \ifx\SETdispenvsize\smallword
-+ % end paragraph for sake of leading, in case document has no blank
-+ % line. This is redundant with what happens in \aboveenvbreak, but
-+ % we need to do it before changing the fonts, and it's inconvenient
-+ % to change the fonts afterward.
-+ \ifnum \lastpenalty=10000 \else \endgraf \fi
-+ \smallexamplefonts \rm
-+ \fi
-+}
-+\def\setsmalldispenv{%
-+ \ifx\SETdispenvsize\nosmallword
-+ \else
-+ \ifnum \lastpenalty=10000 \else \endgraf \fi
-+ \smallexamplefonts \rm
-+ \fi
- }
-
--% @example: Same as @lisp.
--\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-+% We often define two environments, @foo and @smallfoo.
-+% Let's do it in one command. #1 is the env name, #2 the definition.
-+\def\makedispenvdef#1#2{%
-+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
-+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
-+ \expandafter\let\csname E#1\endcsname \afterenvbreak
-+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
-+}
-
--% @small... is usually equivalent to the non-small (@smallbook
--% redefines). We must call \example (or whatever) last in the
--% definition, since it reads the return following the @example (or
--% whatever) command.
-+% Define two environment synonyms (#1 and #2) for an environment.
-+\def\maketwodispenvdef#1#2#3{%
-+ \makedispenvdef{#1}{#3}%
-+ \makedispenvdef{#2}{#3}%
-+}
- %
--% This actually allows (for example) @end display inside an
--% @smalldisplay. Too bad, but makeinfo will catch the error anyway.
-+% @lisp: indented, narrowed, typewriter font;
-+% @example: same as @lisp.
- %
--\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
--\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
--\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
--\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
--
--% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
-+% @smallexample and @smalllisp: use smaller fonts.
- % Originally contributed by Pavel at xerox.
--\def\smalllispx{\begingroup
-- \def\Esmalllisp{\nonfillfinish\endgroup}%
-- \def\Esmallexample{\nonfillfinish\endgroup}%
-- \smallfonts
-- \lisp
--}
--
--% @display: same as @lisp except keep current font.
- %
--\def\display{\begingroup
-+\maketwodispenvdef{lisp}{example}{%
- \nonfillstart
-- \let\Edisplay = \nonfillfinish
-- \gobble
-+ \tt\setupmarkupstyle{example}%
-+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-+ \gobble % eat return
- }
--
--% @smalldisplay (when @smallbook): @display plus smaller fonts.
-+% @display/@smalldisplay: same as @lisp except keep current font.
- %
--\def\smalldisplayx{\begingroup
-- \def\Esmalldisplay{\nonfillfinish\endgroup}%
-- \smallfonts \rm
-- \display
-+\makedispenvdef{display}{%
-+ \nonfillstart
-+ \gobble
- }
-
--% @format: same as @display except don't narrow margins.
-+% @format/@smallformat: same as @display except don't narrow margins.
- %
--\def\format{\begingroup
-- \let\nonarrowing = t
-+\makedispenvdef{format}{%
-+ \let\nonarrowing = t%
- \nonfillstart
-- \let\Eformat = \nonfillfinish
- \gobble
- }
-
--% @smallformat (when @smallbook): @format plus smaller fonts.
--%
--\def\smallformatx{\begingroup
-- \def\Esmallformat{\nonfillfinish\endgroup}%
-- \smallfonts \rm
-- \format
-+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
-+\envdef\flushleft{%
-+ \let\nonarrowing = t%
-+ \nonfillstart
-+ \gobble
- }
--
--% @flushleft (same as @format).
--%
--\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-+\let\Eflushleft = \afterenvbreak
-
- % @flushright.
- %
--\def\flushright{\begingroup
-- \let\nonarrowing = t
-+\envdef\flushright{%
-+ \let\nonarrowing = t%
- \nonfillstart
-- \let\Eflushright = \nonfillfinish
-- \advance\leftskip by 0pt plus 1fill
-+ \advance\leftskip by 0pt plus 1fill\relax
- \gobble
- }
-+\let\Eflushright = \afterenvbreak
-+
-+
-+% @raggedright does more-or-less normal line breaking but no right
-+% justification. From plain.tex.
-+\envdef\raggedright{%
-+ \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
-+}
-+\let\Eraggedright\par
-+
-+\envdef\raggedleft{%
-+ \parindent=0pt \leftskip0pt plus2em
-+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-+ \hbadness=10000 % Last line will usually be underfull, so turn off
-+ % badness reporting.
-+}
-+\let\Eraggedleft\par
-+
-+\envdef\raggedcenter{%
-+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
-+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-+ \hbadness=10000 % Last line will usually be underfull, so turn off
-+ % badness reporting.
-+}
-+\let\Eraggedcenter\par
-+
-
- % @quotation does normal linebreaking (hence we can't use \nonfillstart)
--% and narrows the margins.
-+% and narrows the margins. We keep \parskip nonzero in general, since
-+% we're doing normal filling. So, when using \aboveenvbreak and
-+% \afterenvbreak, temporarily make \parskip 0.
- %
--\def\quotation{%
-- \begingroup\inENV %This group ends at the end of the @quotation body
-+\makedispenvdef{quotation}{\quotationstart}
-+%
-+\def\quotationstart{%
- {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-- \singlespace
- \parindent=0pt
-- % We have retained a nonzero parskip for the environment, since we're
-- % doing normal filling. So to avoid extra space below the environment...
-- \def\Equotation{\parskip = 0pt \nonfillfinish}%
- %
- % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
- \ifx\nonarrowing\relax
- \advance\leftskip by \lispnarrowing
- \advance\rightskip by \lispnarrowing
- \exdentamount = \lispnarrowing
-+ \else
- \let\nonarrowing = \relax
- \fi
-+ \parsearg\quotationlabel
- }
-
-+% We have retained a nonzero parskip for the environment, since we're
-+% doing normal filling.
-+%
-+\def\Equotation{%
-+ \par
-+ \ifx\quotationauthor\thisisundefined\else
-+ % indent a bit.
-+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
-+ \fi
-+ {\parskip=0pt \afterenvbreak}%
-+}
-+\def\Esmallquotation{\Equotation}
-
--\message{defuns,}
--% @defun etc.
--
--% Allow user to change definition object font (\df) internally
--\def\setdeffont #1 {\csname DEF#1\endcsname}
--
--\newskip\defbodyindent \defbodyindent=.4in
--\newskip\defargsindent \defargsindent=50pt
--\newskip\deftypemargin \deftypemargin=12pt
--\newskip\deflastargmargin \deflastargmargin=18pt
--
--\newcount\parencount
--% define \functionparens, which makes ( and ) and & do special things.
--% \functionparens affects the group it is contained in.
--\def\activeparens{%
--\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
--\catcode`\[=\active \catcode`\]=\active}
--
--% Make control sequences which act like normal parenthesis chars.
--\let\lparen = ( \let\rparen = )
--
--{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
--
--% Be sure that we always have a definition for `(', etc. For example,
--% if the fn name has parens in it, \boldbrax will not be in effect yet,
--% so TeX would otherwise complain about undefined control sequence.
--\global\let(=\lparen \global\let)=\rparen
--\global\let[=\lbrack \global\let]=\rbrack
-+% If we're given an argument, typeset it in bold with a colon after.
-+\def\quotationlabel#1{%
-+ \def\temp{#1}%
-+ \ifx\temp\empty \else
-+ {\bf #1: }%
-+ \fi
-+}
-
--\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
-+% LaTeX-like @verbatim... at end verbatim and @verb{<char>...<char>}
-+% If we want to allow any <char> as delimiter,
-+% we need the curly braces so that makeinfo sees the @verb command, eg:
-+% `@verbx...x' would look like the '@verbx' command. --janneke at gnu.org
-+%
-+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
-+%
-+% [Knuth] p.344; only we need to do the other characters Texinfo sets
-+% active too. Otherwise, they get lost as the first character on a
-+% verbatim line.
-+\def\dospecials{%
-+ \do\ \do\\\do\{\do\}\do\$\do\&%
-+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
-+ \do\<\do\>\do\|\do\@\do+\do\"%
-+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
-+ % @set txicodequotebacktick will not have effect on @verb and
-+ % @verbatim, and ?` and !` ligatures won't get disabled.
-+ %\do\`\do\'%
- }
- %
--% This is the definition of ( when already inside a level of parens.
--\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-+% [Knuth] p. 380
-+\def\uncatcodespecials{%
-+ \def\do##1{\catcode`##1=\other}\dospecials}
- %
--\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\}\let(=\oprm \let)=\clrm\ }
-+% Setup for the @verb command.
- %
--\gdef\normalparens{\boldbrax\let&=\ampnr}
--} % 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 }
--\let\ampnr = \&
--\def\lbrb{{\bf\char`\[}}
--\def\rbrb{{\bf\char`\]}}
--
--% Active &'s sneak into the index arguments, so make sure it's defined.
--{
-- \catcode`& = 13
-- \global\let& = \ampnr
-+% Eight spaces for a tab
-+\begingroup
-+ \catcode`\^^I=\active
-+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
-+\endgroup
-+%
-+\def\setupverb{%
-+ \tt % easiest (and conventionally used) font for verbatim
-+ \def\par{\leavevmode\endgraf}%
-+ \setupmarkupstyle{verb}%
-+ \tabeightspaces
-+ % Respect line breaks,
-+ % print special symbols as themselves, and
-+ % make each space count
-+ % must do in this order:
-+ \obeylines \uncatcodespecials \sepspaces
- }
-
--% First, defname, which formats the header line itself.
--% #1 should be the function name.
--% #2 should be the type of definition, such as "Function".
-+% Setup for the @verbatim environment
-+%
-+% Real tab expansion.
-+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
-+%
-+% We typeset each line of the verbatim in an \hbox, so we can handle
-+% tabs. The \global is in case the verbatim line starts with an accent,
-+% or some other command that starts with a begin-group. Otherwise, the
-+% entire \verbbox would disappear at the corresponding end-group, before
-+% it is typeset. Meanwhile, we can't have nested verbatim commands
-+% (can we?), so the \global won't be overwriting itself.
-+\newbox\verbbox
-+\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
-+%
-+\begingroup
-+ \catcode`\^^I=\active
-+ \gdef\tabexpand{%
-+ \catcode`\^^I=\active
-+ \def^^I{\leavevmode\egroup
-+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
-+ \divide\dimen\verbbox by\tabw
-+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
-+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
-+ \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
-+ }%
-+ }
-+\endgroup
-
--\def\defname #1#2{%
--% Get the values of \leftskip and \rightskip as they were
--% outside the @def...
--\dimen2=\leftskip
--\advance\dimen2 by -\defbodyindent
--\noindent
--\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
--\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
--\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
--\parshape 2 0in \dimen0 \defargsindent \dimen1
--% Now output arg 2 ("Function" or some such)
--% ending at \deftypemargin from the right margin,
--% but stuck inside a box of width 0 so it does not interfere with linebreaking
--{% Adjust \hsize to exclude the ambient margins,
--% so that \rightline will obey them.
--\advance \hsize by -\dimen2
--\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
--% Make all lines underfull and no complaints:
--\tolerance=10000 \hbadness=10000
--\advance\leftskip by -\defbodyindent
--\exdentamount=\defbodyindent
--{\df #1}\enskip % Generate function name
-+% start the verbatim environment.
-+\def\setupverbatim{%
-+ \let\nonarrowing = t%
-+ \nonfillstart
-+ \tt % easiest (and conventionally used) font for verbatim
-+ % The \leavevmode here is for blank lines. Otherwise, we would
-+ % never \starttabox and the \egroup would end verbatim mode.
-+ \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
-+ \tabexpand
-+ \setupmarkupstyle{verbatim}%
-+ % Respect line breaks,
-+ % print special symbols as themselves, and
-+ % make each space count.
-+ % Must do in this order:
-+ \obeylines \uncatcodespecials \sepspaces
-+ \everypar{\starttabbox}%
- }
-
--% Actually process the body of a definition
--% #1 should be the terminating control sequence, such as \Edefun.
--% #2 should be the "another name" control sequence, such as \defunx.
--% #3 should be the control sequence that actually processes the header,
--% such as \defunheader.
-+% Do the @verb magic: verbatim text is quoted by unique
-+% delimiter characters. Before first delimiter expect a
-+% right brace, after last delimiter expect closing brace:
-+%
-+% \def\doverb'{'<char>#1<char>'}'{#1}
-+%
-+% [Knuth] p. 382; only eat outer {}
-+\begingroup
-+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
-+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
-+\endgroup
-+%
-+\def\verb{\begingroup\setupverb\doverb}
-+%
-+%
-+% Do the @verbatim magic: define the macro \doverbatim so that
-+% the (first) argument ends when '@end verbatim' is reached, ie:
-+%
-+% \def\doverbatim#1 at end verbatim{#1}
-+%
-+% For Texinfo it's a lot easier than for LaTeX,
-+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
-+% we need not redefine '\', '{' and '}'.
-+%
-+% Inspired by LaTeX's verbatim command set [latex.ltx]
-+%
-+\begingroup
-+ \catcode`\ =\active
-+ \obeylines %
-+ % ignore everything up to the first ^^M, that's the newline at the end
-+ % of the @verbatim input line itself. Otherwise we get an extra blank
-+ % line in the output.
-+ \xdef\doverbatim#1^^M#2 at end verbatim{#2\noexpand\end\gobble verbatim}%
-+ % We really want {...\end verbatim} in the body of the macro, but
-+ % without the active space; thus we have to use \xdef and \gobble.
-+\endgroup
-+%
-+\envdef\verbatim{%
-+ \setupverbatim\doverbatim
-+}
-+\let\Everbatim = \afterenvbreak
-
--\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup %
--\catcode 61=\active % 61 is `='
--\obeylines\activeparens\spacesplit#3}
-
--% #1 is the \E... control sequence to end the definition (which we define).
--% #2 is the \...x control sequence for consecutive fns (which we define).
--% #3 is the control sequence to call to resume processing.
--% #4, delimited by the space, is the class name.
-+% @verbatiminclude FILE - insert text of file in verbatim environment.
- %
--\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
--
--% Used for @deftypemethod and @deftypeivar.
--% #1 is the \E... control sequence to end the definition (which we define).
--% #2 is the \...x control sequence for consecutive fns (which we define).
--% #3 is the control sequence to call to resume processing.
--% #4, delimited by a space, is the class name.
--% #5 is the method's return type.
-+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
- %
--\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
-- \medbreak
-- \def#1{\endgraf\endgroup\medbreak}%
-- \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
-- \parindent=0in
-- \advance\leftskip by \defbodyindent
-- \exdentamount=\defbodyindent
-- \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
-+\def\doverbatiminclude#1{%
-+ {%
-+ \makevalueexpandable
-+ \setupverbatim
-+ \indexnofonts % Allow `@@' and other weird things in file names.
-+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
-+ \input #1
-+ \afterenvbreak
-+ }%
-+}
-
--% Used for @deftypeop. The change from \deftypemethparsebody is an
--% extra argument at the beginning which is the `category', instead of it
--% being the hardwired string `Method' or `Instance Variable'. We have
--% to account for this both in the \...x definition and in parsing the
--% input at hand. Thus also need a control sequence (passed as #5) for
--% the \E... definition to assign the category name to.
--%
--\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
-- \medbreak
-- \def#1{\endgraf\endgroup\medbreak}%
-- \def#2##1 ##2 ##3 {%
-- \def#4{##1}%
-- \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
-- \parindent=0in
-- \advance\leftskip by \defbodyindent
-- \exdentamount=\defbodyindent
-- \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
-+% @copying ... @end copying.
-+% Save the text away for @insertcopying later.
-+%
-+% We save the uninterpreted tokens, rather than creating a box.
-+% Saving the text in a box would be much easier, but then all the
-+% typesetting commands (@smallbook, font changes, etc.) have to be done
-+% beforehand -- and a) we want @copying to be done first in the source
-+% file; b) letting users define the frontmatter in as flexible order as
-+% possible is very desirable.
-+%
-+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
-+\def\docopying#1 at end copying{\endgroup\def\copyingtext{#1}}
-+%
-+\def\insertcopying{%
-+ \begingroup
-+ \parindent = 0pt % paragraph indentation looks wrong on title page
-+ \scanexp\copyingtext
-+ \endgroup
-+}
-
--\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2##1 ##2 {\def#4{##1}%
--\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
--% These parsing functions are similar to the preceding ones
--% except that they do not make parens into active characters.
--% These are used for "variables" since they have no arguments.
-+\message{defuns,}
-+% @defun etc.
-
--\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2{\begingroup\obeylines\spacesplit#3}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup %
--\catcode 61=\active %
--\obeylines\spacesplit#3}
-+\newskip\defbodyindent \defbodyindent=.4in
-+\newskip\defargsindent \defargsindent=50pt
-+\newskip\deflastargmargin \deflastargmargin=18pt
-+\newcount\defunpenalty
-
--% 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 %
-- % Define the end token that this defining construct specifies
-- % so that it will exit this group.
-- \def#1{\endgraf\endgroup\medbreak}%
-- \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
-+% Start the processing of @deffn:
-+\def\startdefun{%
-+ \ifnum\lastpenalty<10000
-+ \medbreak
-+ \defunpenalty=10003 % Will keep this @deffn together with the
-+ % following @def command, see below.
-+ \else
-+ % If there are two @def commands in a row, we'll have a \nobreak,
-+ % which is there to keep the function description together with its
-+ % header. But if there's nothing but headers, we need to allow a
-+ % break somewhere. Check specifically for penalty 10002, inserted
-+ % by \printdefunline, instead of 10000, since the sectioning
-+ % commands also insert a nobreak penalty, and we don't want to allow
-+ % a break between a section heading and a defun.
-+ %
-+ % As a further refinement, we avoid "club" headers by signalling
-+ % with penalty of 10003 after the very first @deffn in the
-+ % sequence (see above), and penalty of 10002 after any following
-+ % @def command.
-+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
-+ %
-+ % Similarly, after a section heading, do not allow a break.
-+ % But do insert the glue.
-+ \medskip % preceded by discardable penalty, so not a breakpoint
-+ \fi
-+ %
- \parindent=0in
- \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
-- \begingroup\obeylines
- }
-
--\def\defvrparsebody#1#2#3#4 {%
-- \parsebodycommon{#1}{#2}{#3}%
-- \spacesplit{#3{#4}}%
-+\def\dodefunx#1{%
-+ % First, check whether we are in the right environment:
-+ \checkenv#1%
-+ %
-+ % As above, allow line break if we have multiple x headers in a row.
-+ % It's not a great place, though.
-+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
-+ %
-+ % And now, it's time to reuse the body of the original defun:
-+ \expandafter\gobbledefun#1%
- }
-+\def\gobbledefun#1\startdefun{}
-
--% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
--% type is just `struct', because we lose the braces in `{struct
--% termios}' when \spacesplit reads its undelimited argument. Sigh.
--% \let\deftpparsebody=\defvrparsebody
--%
--% So, to get around this, we put \empty in with the type name. That
--% way, TeX won't find exactly `{...}' as an undelimited argument, and
--% won't strip off the braces.
-+% \printdefunline \deffnheader{text}
- %
--\def\deftpparsebody #1#2#3#4 {%
-- \parsebodycommon{#1}{#2}{#3}%
-- \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-+\def\printdefunline#1#2{%
-+ \begingroup
-+ % call \deffnheader:
-+ #1#2 \endheader
-+ % common ending:
-+ \interlinepenalty = 10000
-+ \advance\rightskip by 0pt plus 1fil\relax
-+ \endgraf
-+ \nobreak\vskip -\parskip
-+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
-+ % Some of the @defun-type tags do not enable magic parentheses,
-+ % rendering the following check redundant. But we don't optimize.
-+ \checkparencounts
-+ \endgroup
- }
-
--% Fine, but then we have to eventually remove the \empty *and* the
--% braces (if any). That's what this does.
-+\def\Edefun{\endgraf\medbreak}
-+
-+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-+% the only thing remaining is to define \deffnheader.
- %
--\def\removeemptybraces\empty#1\relax{#1}
-+\def\makedefun#1{%
-+ \expandafter\let\csname E#1\endcsname = \Edefun
-+ \edef\temp{\noexpand\domakedefun
-+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
-+ \temp
-+}
-
--% 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.
-+% \domakedefun \deffn \deffnx \deffnheader
- %
--\def\parsetpheaderline#1#2#3{%
-- #1{\removeemptybraces#2\relax}{#3}%
--}%
-+% Define \deffn and \deffnx, without parameters.
-+% \deffnheader has to be defined explicitly.
-+%
-+\def\domakedefun#1#2#3{%
-+ \envdef#1{%
-+ \startdefun
-+ \doingtypefnfalse % distinguish typed functions from all else
-+ \parseargusing\activeparens{\printdefunline#3}%
-+ }%
-+ \def#2{\dodefunx#1}%
-+ \def#3%
-+}
-
--\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2##1 ##2 {\def#4{##1}%
--\begingroup\obeylines\spacesplit{#3{##2}}}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup\obeylines\spacesplit{#3{#5}}}
-+\newif\ifdoingtypefn % doing typed function?
-+\newif\ifrettypeownline % typeset return type on its own line?
-
--% Split up #2 at the first space token.
--% call #1 with two arguments:
--% the first is all of #2 before the space token,
--% the second is all of #2 after that space token.
--% If #2 contains no space token, all of it is passed as the first arg
--% and the second is passed as empty.
-+% @deftypefnnewline on|off says whether the return type of typed functions
-+% are printed on their own line. This affects @deftypefn, @deftypefun,
-+% @deftypeop, and @deftypemethod.
-+%
-+\parseargdef\deftypefnnewline{%
-+ \def\temp{#1}%
-+ \ifx\temp\onword
-+ \expandafter\let\csname SETtxideftypefnnl\endcsname
-+ = \empty
-+ \else\ifx\temp\offword
-+ \expandafter\let\csname SETtxideftypefnnl\endcsname
-+ = \relax
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @txideftypefnnl value `\temp',
-+ must be on|off}%
-+ \fi\fi
-+}
-
--{\obeylines
--\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
--\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
--\ifx\relax #3%
--#1{#2}{}\else #1{#2}{#3#4}\fi}}
-+% Untyped functions:
-
--% So much for the things common to all kinds of definitions.
-+% @deffn category name args
-+\makedefun{deffn}{\deffngeneral{}}
-
--% Define @defun.
-+% @deffn category class name args
-+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
-
--% First, define the processing that is wanted for arguments of \defun
--% Use this to expand the args and terminate the paragraph they make up
-+% \defopon {category on}class name args
-+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
--\def\defunargs#1{\functionparens \sl
--% Expand, preventing hyphenation at `-' chars.
--% Note that groups don't affect changes in \hyphenchar.
--% Set the font temporarily and use \font in case \setfont made \tensl a macro.
--{\tensl\hyphenchar\font=0}%
--#1%
--{\tensl\hyphenchar\font=45}%
--\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
--\interlinepenalty=10000
--\advance\rightskip by 0pt plus 1fil
--\endgraf\nobreak\vskip -\parskip\nobreak
-+% \deffngeneral {subind}category name args
-+%
-+\def\deffngeneral#1#2 #3 #4\endheader{%
-+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
-+ \dosubind{fn}{\code{#3}}{#1}%
-+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
- }
-
--\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
--\endgraf\nobreak\vskip -\parskip\nobreak
--}
-+% Typed functions:
-
--% Do complete processing of one @defun or @defunx line already parsed.
-+% @deftypefn category type name args
-+\makedefun{deftypefn}{\deftypefngeneral{}}
-
--% @deffn Command forward-char nchars
-+% @deftypeop category class type name args
-+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
-
--\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-+% \deftypeopon {category on}class type name args
-+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
--\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
--\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
-+% \deftypefngeneral {subind}category type name args
-+%
-+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
-+ \dosubind{fn}{\code{#4}}{#1}%
-+ \doingtypefntrue
-+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
- }
-
--% @defun == @deffn Function
--
--\def\defun{\defparsebody\Edefun\defunx\defunheader}
-+% Typed variables:
-
--\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{\putwordDeffunc}%
--\defunargs {#2}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
--}
-+% @deftypevr category type var args
-+\makedefun{deftypevr}{\deftypecvgeneral{}}
-
--% @deftypefun int foobar (int @var{foo}, float @var{bar})
-+% @deftypecv category class type var args
-+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
-
--\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-+% \deftypecvof {category of}class type var args
-+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
-
--% #1 is the data type. #2 is the name and args.
--\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
--% #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}{\putwordDeftypefun}%
--\deftypefunargs {#3}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
-+% \deftypecvgeneral {subind}category type var args
-+%
-+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
-+ \dosubind{vr}{\code{#4}}{#1}%
-+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
- }
-
--% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
--
--\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-+% Untyped variables:
-
--% \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}
-+% @defvr category var args
-+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
-
--% #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.
--\def\deftypefnheaderx #1#2#3 #4\relax{%
--\doind {fn}{\code{#3}}% Make entry in function index
--\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
--}
-+% @defcv category class var args
-+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
-
--% @defmac == @deffn Macro
-+% \defcvof {category of}class var args
-+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
-
--\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-+% Types:
-
--\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{\putwordDefmac}%
--\defunargs {#2}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
-+% @deftp category name args
-+\makedefun{deftp}#1 #2 #3\endheader{%
-+ \doind{tp}{\code{#2}}%
-+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
- }
-
--% @defspec == @deffn Special Form
--
--\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
--
--\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{\putwordDefspec}%
--\defunargs {#2}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
--}
-+% Remaining @defun-like shortcuts:
-+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
-+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
-+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
-+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
-+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
-+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
-+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
-+\makedefun{defmethod}{\defopon\putwordMethodon}
-+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
-+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
-+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
-
--% @defop CATEGORY CLASS OPERATION ARG...
-+% \defname, which formats the name of the @def (not the args).
-+% #1 is the category, such as "Function".
-+% #2 is the return type, if any.
-+% #3 is the function name.
- %
--\def\defop #1 {\def\defoptype{#1}%
--\defopparsebody\Edefop\defopx\defopheader\defoptype}
-+% We are followed by (but not passed) the arguments, if any.
- %
--\def\defopheader#1#2#3{%
--\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
--\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
--\defunargs {#3}\endgroup %
-+\def\defname#1#2#3{%
-+ \par
-+ % Get the values of \leftskip and \rightskip as they were outside the @def...
-+ \advance\leftskip by -\defbodyindent
-+ %
-+ % Determine if we are typesetting the return type of a typed function
-+ % on a line by itself.
-+ \rettypeownlinefalse
-+ \ifdoingtypefn % doing a typed function specifically?
-+ % then check user option for putting return type on its own line:
-+ \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
-+ \rettypeownlinetrue
-+ \fi
-+ \fi
-+ %
-+ % How we'll format the category name. Putting it in brackets helps
-+ % distinguish it from the body text that may end up on the next line
-+ % just below it.
-+ \def\temp{#1}%
-+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
-+ %
-+ % Figure out line sizes for the paragraph shape. We'll always have at
-+ % least two.
-+ \tempnum = 2
-+ %
-+ % The first line needs space for \box0; but if \rightskip is nonzero,
-+ % we need only space for the part of \box0 which exceeds it:
-+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
-+ %
-+ % If doing a return type on its own line, we'll have another line.
-+ \ifrettypeownline
-+ \advance\tempnum by 1
-+ \def\maybeshapeline{0in \hsize}%
-+ \else
-+ \def\maybeshapeline{}%
-+ \fi
-+ %
-+ % The continuations:
-+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
-+ %
-+ % The final paragraph shape:
-+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
-+ %
-+ % Put the category name at the right margin.
-+ \noindent
-+ \hbox to 0pt{%
-+ \hfil\box0 \kern-\hsize
-+ % \hsize has to be shortened this way:
-+ \kern\leftskip
-+ % Intentionally do not respect \rightskip, since we need the space.
-+ }%
-+ %
-+ % Allow all lines to be underfull without complaint:
-+ \tolerance=10000 \hbadness=10000
-+ \exdentamount=\defbodyindent
-+ {%
-+ % defun fonts. We use typewriter by default (used to be bold) because:
-+ % . we're printing identifiers, they should be in tt in principle.
-+ % . in languages with many accents, such as Czech or French, it's
-+ % common to leave accents off identifiers. The result looks ok in
-+ % tt, but exceedingly strange in rm.
-+ % . we don't want -- and --- to be treated as ligatures.
-+ % . this still does not fix the ?` and !` ligatures, but so far no
-+ % one has made identifiers using them :).
-+ \df \tt
-+ \def\temp{#2}% text of the return type
-+ \ifx\temp\empty\else
-+ \tclose{\temp}% typeset the return type
-+ \ifrettypeownline
-+ % put return type on its own line; prohibit line break following:
-+ \hfil\vadjust{\nobreak}\break
-+ \else
-+ \space % type on same line, so just followed by a space
-+ \fi
-+ \fi % no return type
-+ #3% output function name
-+ }%
-+ {\rm\enskip}% hskip 0.5 em of \tenrm
-+ %
-+ \boldbrax
-+ % arguments will be output next, if any.
- }
-
--% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
--%
--\def\deftypeop #1 {\def\deftypeopcategory{#1}%
-- \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
-- \deftypeopcategory}
-+% Print arguments in slanted roman (not ttsl), inconsistently with using
-+% tt for the name. This is because literal text is sometimes needed in
-+% the argument list (groff manual), and ttsl and tt are not very
-+% distinguishable. Prevent hyphenation at `-' chars.
- %
--% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
--\def\deftypeopheader#1#2#3#4{%
-- \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-- \begingroup
-- \defname{\defheaderxcond#2\relax$$$#3}
-- {\deftypeopcategory\ \putwordon\ \code{#1}}%
-- \deftypefunargs{#4}%
-- \endgroup
-+\def\defunargs#1{%
-+ % use sl by default (not ttsl),
-+ % tt for the names.
-+ \df \sl \hyphenchar\font=0
-+ %
-+ % On the other hand, if an argument has two dashes (for instance), we
-+ % want a way to get ttsl. Let's try @var for that.
-+ \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
-+ #1%
-+ \sl\hyphenchar\font=45
- }
-
--% @deftypemethod CLASS TYPE METHOD ARG...
--%
--\def\deftypemethod{%
-- \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-+% We want ()&[] to print specially on the defun line.
- %
--% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
--\def\deftypemethodheader#1#2#3#4{%
-- \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-- \begingroup
-- \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
-- \deftypefunargs{#4}%
-- \endgroup
-+\def\activeparens{%
-+ \catcode`\(=\active \catcode`\)=\active
-+ \catcode`\[=\active \catcode`\]=\active
-+ \catcode`\&=\active
- }
-
--% @deftypeivar CLASS TYPE VARNAME
--%
--\def\deftypeivar{%
-- \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
--%
--% #1 is the class name, #2 the data type, #3 the variable name.
--\def\deftypeivarheader#1#2#3{%
-- \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
-- \begingroup
-- \defname{#3}{\putwordInstanceVariableof\ \code{#1}}%
-- \defvarargs{#3}%
-- \endgroup
--}
-+% Make control sequences which act like normal parenthesis chars.
-+\let\lparen = ( \let\rparen = )
-
--% @defmethod == @defop Method
--%
--\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
--%
--% #1 is the class name, #2 the method name, #3 the args.
--\def\defmethodheader#1#2#3{%
-- \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
-- \begingroup
-- \defname{#2}{\putwordMethodon\ \code{#1}}%
-- \defunargs{#3}%
-- \endgroup
-+% Be sure that we always have a definition for `(', etc. For example,
-+% if the fn name has parens in it, \boldbrax will not be in effect yet,
-+% so TeX would otherwise complain about undefined control sequence.
-+{
-+ \activeparens
-+ \global\let(=\lparen \global\let)=\rparen
-+ \global\let[=\lbrack \global\let]=\rbrack
-+ \global\let& = \&
-+
-+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-+ \gdef\magicamp{\let&=\amprm}
- }
-
--% @defcv {Class Option} foo-class foo-flag
-+\newcount\parencount
-
--\def\defcv #1 {\def\defcvtype{#1}%
--\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-+% If we encounter &foo, then turn on ()-hacking afterwards
-+\newif\ifampseen
-+\def\amprm#1 {\ampseentrue{\bf\ }}
-
--\def\defcvarheader #1#2#3{%
--\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
--\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
--\defvarargs {#3}\endgroup %
-+\def\parenfont{%
-+ \ifampseen
-+ % At the first level, print parens in roman,
-+ % otherwise use the default font.
-+ \ifnum \parencount=1 \rm \fi
-+ \else
-+ % The \sf parens (in \boldbrax) actually are a little bolder than
-+ % the contained text. This is especially needed for [ and ] .
-+ \sf
-+ \fi
- }
--
--% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
--%
--\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
--%
--\def\defivarheader#1#2#3{%
-- \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
-- \begingroup
-- \defname{#2}{\putwordInstanceVariableof\ #1}%
-- \defvarargs{#3}%
-- \endgroup
-+\def\infirstlevel#1{%
-+ \ifampseen
-+ \ifnum\parencount=1
-+ #1%
-+ \fi
-+ \fi
- }
-+\def\bfafterword#1 {#1 \bf}
-
--% @defvar
--% First, define the processing that is wanted for arguments of @defvar.
--% This is actually simple: just print them in roman.
--% This must expand the args and terminate the paragraph they make up
--\def\defvarargs #1{\normalparens #1%
--\interlinepenalty=10000
--\endgraf\nobreak\vskip -\parskip\nobreak}
--
--% @defvr Counter foo-count
--
--\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
--
--\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
--\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
--
--% @defvar == @defvr Variable
--
--\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
--
--\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{\putwordDefvar}%
--\defvarargs {#2}\endgroup %
-+\def\opnr{%
-+ \global\advance\parencount by 1
-+ {\parenfont(}%
-+ \infirstlevel \bfafterword
- }
--
--% @defopt == @defvr {User Option}
--
--\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
--
--\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{\putwordDefopt}%
--\defvarargs {#2}\endgroup %
-+\def\clnr{%
-+ {\parenfont)}%
-+ \infirstlevel \sl
-+ \global\advance\parencount by -1
- }
-
--% @deftypevar int foobar
--
--\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}{\putwordDeftypevar}%
--\interlinepenalty=10000
--\endgraf\nobreak\vskip -\parskip\nobreak
--\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\nobreak\vskip -\parskip\nobreak
--\endgroup}
--
--% Now define @deftp
--% Args are printed in bold, a slight difference from @defvar.
--
--\def\deftpargs #1{\bf \defvarargs{#1}}
--
--% @deftp Class window height width ...
--
--\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
--
--\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
--\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-+\newcount\brackcount
-+\def\lbrb{%
-+ \global\advance\brackcount by 1
-+ {\bf[}%
-+}
-+\def\rbrb{%
-+ {\bf]}%
-+ \global\advance\brackcount by -1
-+}
-
--% These definitions are used if you use @defunx (etc.)
--% anywhere other than immediately after a @defun or @defunx.
--%
--\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
--\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
--\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
--\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
--\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
--\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
--\def\defopx#1 {\errmessage{@defopx in invalid context}}
--\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
--\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
--\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
--\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
--\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
--\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
--\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
--\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
--\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
--\def\defunx#1 {\errmessage{@defunx in invalid context}}
--\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
--\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
-+\def\checkparencounts{%
-+ \ifnum\parencount=0 \else \badparencount \fi
-+ \ifnum\brackcount=0 \else \badbrackcount \fi
-+}
-+% these should not use \errmessage; the glibc manual, at least, actually
-+% has such constructs (when documenting function pointers).
-+\def\badparencount{%
-+ \message{Warning: unbalanced parentheses in @def...}%
-+ \global\parencount=0
-+}
-+\def\badbrackcount{%
-+ \message{Warning: unbalanced square brackets in @def...}%
-+ \global\brackcount=0
-+}
-
-
- \message{macros,}
-@@ -4849,43 +7107,74 @@ width0pt\relax} \fi
-
- % To do this right we need a feature of e-TeX, \scantokens,
- % which we arrange to emulate with a temporary file in ordinary TeX.
--\ifx\eTeXversion\undefined
-- \newwrite\macscribble
-- \def\scanmacro#1{%
-- \begingroup \newlinechar`\^^M
-- % Undo catcode changes of \startcontents and \doprintindex
-- \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
-- % Append \endinput to make sure that TeX does not see the ending newline.
-- \toks0={#1\endinput}%
-- \immediate\openout\macscribble=\jobname.tmp
-- \immediate\write\macscribble{\the\toks0}%
-- \immediate\closeout\macscribble
-- \let\xeatspaces\eatspaces
-- \input \jobname.tmp
-- \endgroup
--}
--\else
--\def\scanmacro#1{%
--\begingroup \newlinechar`\^^M
--% Undo catcode changes of \startcontents and \doprintindex
--\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
--\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
-+\ifx\eTeXversion\thisisundefined
-+ \newwrite\macscribble
-+ \def\scantokens#1{%
-+ \toks0={#1}%
-+ \immediate\openout\macscribble=\jobname.tmp
-+ \immediate\write\macscribble{\the\toks0}%
-+ \immediate\closeout\macscribble
-+ \input \jobname.tmp
-+ }
- \fi
-
-+\def\scanmacro#1{\begingroup
-+ \newlinechar`\^^M
-+ \let\xeatspaces\eatspaces
-+ %
-+ % Undo catcode changes of \startcontents and \doprintindex
-+ % When called from @insertcopying or (short)caption, we need active
-+ % backslash to get it printed correctly. Previously, we had
-+ % \catcode`\\=\other instead. We'll see whether a problem appears
-+ % with macro expansion. --kasal, 19aug04
-+ \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
-+ %
-+ % ... and for \example:
-+ \spaceisspace
-+ %
-+ % The \empty here causes a following catcode 5 newline to be eaten as
-+ % part of reading whitespace after a control sequence. It does not
-+ % eat a catcode 13 newline. There's no good way to handle the two
-+ % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
-+ % would then have different behavior). See the Macro Details node in
-+ % the manual for the workaround we recommend for macros and
-+ % line-oriented commands.
-+ %
-+ \scantokens{#1\empty}%
-+\endgroup}
-+
-+\def\scanexp#1{%
-+ \edef\temp{\noexpand\scanmacro{#1}}%
-+ \temp
-+}
-+
- \newcount\paramno % Count of parameters
- \newtoks\macname % Macro name
- \newif\ifrecursive % Is it recursive?
--\def\macrolist{} % List of all defined macros in the form
-- % \do\macro1\do\macro2...
-+
-+% List of all defined macros in the form
-+% \definedummyword\macro1\definedummyword\macro2...
-+% Currently is also contains all @aliases; the list can be split
-+% if there is a need.
-+\def\macrolist{}
-+
-+% Add the macro to \macrolist
-+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
-+\def\addtomacrolistxxx#1{%
-+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
-+ \xdef\macrolist{\the\toks0}%
-+}
-
- % Utility routines.
--% Thisdoes \let #1 = #2, except with \csnames.
-+% This does \let #1 = #2, with \csnames; that is,
-+% \let \csname#1\endcsname = \csname#2\endcsname
-+% (except of course we have to play expansion games).
-+%
- \def\cslet#1#2{%
--\expandafter\expandafter
--\expandafter\let
--\expandafter\expandafter
--\csname#1\endcsname
--\csname#2\endcsname}
-+ \expandafter\let
-+ \csname#1\expandafter\endcsname
-+ \csname#2\endcsname
-+}
-
- % Trim leading and trailing spaces off a string.
- % Concepts from aro-bend problem 15 (see CTAN).
-@@ -4898,7 +7187,7 @@ width0pt\relax} \fi
- }
-
- % Trim a single trailing ^^M off a string.
--{\catcode`\^^M=12\catcode`\Q=3%
-+{\catcode`\^^M=\other \catcode`\Q=3%
- \gdef\eatcr #1{\eatcra #1Q^^MQ}%
- \gdef\eatcra#1^^MQ{\eatcrb#1Q}%
- \gdef\eatcrb#1Q#2Q{#1}%
-@@ -4906,147 +7195,403 @@ width0pt\relax} \fi
-
- % Macro bodies are absorbed as an argument in a context where
- % all characters are catcode 10, 11 or 12, except \ which is active
--% (as in normal texinfo). It is necessary to change the definition of \.
--
-+% (as in normal texinfo). It is necessary to change the definition of \
-+% to recognize macro arguments; this is the job of \mbodybackslash.
-+%
-+% Non-ASCII encodings make 8-bit characters active, so un-activate
-+% them to avoid their expansion. Must do this non-globally, to
-+% confine the change to the current group.
-+%
- % It's necessary to have hard CRs when the macro is executed. This is
--% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
- % body, and then making it the \newlinechar in \scanmacro.
-+%
-+\def\scanctxt{% used as subroutine
-+ \catcode`\"=\other
-+ \catcode`\+=\other
-+ \catcode`\<=\other
-+ \catcode`\>=\other
-+ \catcode`\@=\other
-+ \catcode`\^=\other
-+ \catcode`\_=\other
-+ \catcode`\|=\other
-+ \catcode`\~=\other
-+ \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
-+}
-
--\def\macrobodyctxt{%
-- \catcode`\~=12
-- \catcode`\^=12
-- \catcode`\_=12
-- \catcode`\|=12
-- \catcode`\<=12
-- \catcode`\>=12
-- \catcode`\+=12
-- \catcode`\{=12
-- \catcode`\}=12
-- \catcode`\@=12
-- \catcode`\^^M=12
-- \usembodybackslash}
-+\def\scanargctxt{% used for copying and captions, not macros.
-+ \scanctxt
-+ \catcode`\\=\other
-+ \catcode`\^^M=\other
-+}
-+
-+\def\macrobodyctxt{% used for @macro definitions
-+ \scanctxt
-+ \catcode`\{=\other
-+ \catcode`\}=\other
-+ \catcode`\^^M=\other
-+ \usembodybackslash
-+}
-+
-+\def\macroargctxt{% used when scanning invocations
-+ \scanctxt
-+ \catcode`\\=0
-+}
-+% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes"
-+% for the single characters \ { }. Thus, we end up with the "commands"
-+% that would be written @\ @{ @} in a Texinfo document.
-+%
-+% We already have @{ and @}. For @\, we define it here, and only for
-+% this purpose, to produce a typewriter backslash (so, the @\ that we
-+% define for @math can't be used with @macro calls):
-+%
-+\def\\{\normalbackslash}%
-+%
-+% We would like to do this for \, too, since that is what makeinfo does.
-+% But it is not possible, because Texinfo already has a command @, for a
-+% cedilla accent. Documents must use @comma{} instead.
-+%
-+% \anythingelse will almost certainly be an error of some kind.
-
--\def\macroargctxt{%
-- \catcode`\~=12
-- \catcode`\^=12
-- \catcode`\_=12
-- \catcode`\|=12
-- \catcode`\<=12
-- \catcode`\>=12
-- \catcode`\+=12
-- \catcode`\@=12
-- \catcode`\\=12}
-
- % \mbodybackslash is the definition of \ in @macro bodies.
- % It maps \foo\ => \csname macarg.foo\endcsname => #N
- % where N is the macro parameter number.
- % We define \csname macarg.\endcsname to be \realbackslash, so
- % \\ in macro replacement text gets you a backslash.
--
-+%
- {\catcode`@=0 @catcode`@\=@active
- @gdef at usembodybackslash{@let\=@mbodybackslash}
- @gdef at mbodybackslash#1\{@csname macarg.#1 at endcsname}
- }
- \expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-+\def\margbackslash#1{\char`\#1 }
-+
- \def\macro{\recursivefalse\parsearg\macroxxx}
- \def\rmacro{\recursivetrue\parsearg\macroxxx}
-
- \def\macroxxx#1{%
-- \getargs{#1}% now \macname is the macname and \argl the arglist
-+ \getargs{#1}% now \macname is the macname and \argl the arglist
- \ifx\argl\empty % no arguments
-- \paramno=0%
-+ \paramno=0\relax
- \else
- \expandafter\parsemargdef \argl;%
-+ \if\paramno>256\relax
-+ \ifx\eTeXversion\thisisundefined
-+ \errhelp = \EMsimple
-+ \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
-+ \fi
-+ \fi
- \fi
- \if1\csname ismacro.\the\macname\endcsname
- \message{Warning: redefining \the\macname}%
- \else
- \expandafter\ifx\csname \the\macname\endcsname \relax
-- \else \errmessage{The name \the\macname\space is reserved}\fi
-+ \else \errmessage{Macro name \the\macname\space already defined}\fi
- \global\cslet{macsave.\the\macname}{\the\macname}%
- \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
-- % Add the macroname to \macrolist
-- \toks0 = \expandafter{\macrolist\do}%
-- \xdef\macrolist{\the\toks0
-- \expandafter\noexpand\csname\the\macname\endcsname}%
-+ \addtomacrolist{\the\macname}%
- \fi
- \begingroup \macrobodyctxt
- \ifrecursive \expandafter\parsermacbody
- \else \expandafter\parsemacbody
- \fi}
-
--\def\unmacro{\parsearg\unmacroxxx}
--\def\unmacroxxx#1{%
-+\parseargdef\unmacro{%
- \if1\csname ismacro.#1\endcsname
- \global\cslet{#1}{macsave.#1}%
- \global\expandafter\let \csname ismacro.#1\endcsname=0%
-- % Remove the macro name from \macrolist
-+ % Remove the macro name from \macrolist:
- \begingroup
-- \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
-- \def\do##1{%
-- \def\tempb{##1}%
-- \ifx\tempa\tempb
-- % remove this
-- \else
-- \toks0 = \expandafter{\newmacrolist\do}%
-- \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
-- \fi}%
-- \def\newmacrolist{}%
-- % Execute macro list to define \newmacrolist
-- \macrolist
-- \global\let\macrolist\newmacrolist
-+ \expandafter\let\csname#1\endcsname \relax
-+ \let\definedummyword\unmacrodo
-+ \xdef\macrolist{\macrolist}%
- \endgroup
- \else
- \errmessage{Macro #1 not defined}%
- \fi
- }
-
-+% Called by \do from \dounmacro on each macro. The idea is to omit any
-+% macro definitions that have been changed to \relax.
-+%
-+\def\unmacrodo#1{%
-+ \ifx #1\relax
-+ % remove this
-+ \else
-+ \noexpand\definedummyword \noexpand#1%
-+ \fi
-+}
-+
- % This makes use of the obscure feature that if the last token of a
- % <parameter list> is #, then the preceding argument is delimited by
- % an opening brace, and that opening brace is not consumed.
- \def\getargs#1{\getargsxxx#1{}}
- \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
--\def\getmacname #1 #2\relax{\macname={#1}}
-+\def\getmacname#1 #2\relax{\macname={#1}}
- \def\getmacargs#1{\def\argl{#1}}
-
-+% For macro processing make @ a letter so that we can make Texinfo private macro names.
-+\edef\texiatcatcode{\the\catcode`\@}
-+\catcode `@=11\relax
-+
- % Parse the optional {params} list. Set up \paramno and \paramlist
--% so \defmacro knows what to do. Define \macarg.blah for each blah
--% in the params list, to be ##N where N is the position in that list.
-+% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH
-+% in the params list to some hook where the argument si to be expanded. If
-+% there are less than 10 arguments that hook is to be replaced by ##N where N
-+% is the position in that list, that is to say the macro arguments are to be
-+% defined `a la TeX in the macro body.
-+%
- % That gets used by \mbodybackslash (above).
--
-+%
- % We need to get `macro parameter char #' into several definitions.
--% The technique used is stolen from LaTeX: let \hash be something
-+% The technique used is stolen from LaTeX: let \hash be something
- % unexpandable, insert that wherever you need a #, and then redefine
- % it to # just before using the token list produced.
- %
- % The same technique is used to protect \eatspaces till just before
- % the macro is used.
--
--\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
-- \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-+%
-+% If there are 10 or more arguments, a different technique is used, where the
-+% hook remains in the body, and when macro is to be expanded the body is
-+% processed again to replace the arguments.
-+%
-+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
-+% argument N value and then \edef the body (nothing else will expand because of
-+% the catcode regime underwhich the body was input).
-+%
-+% If you compile with TeX (not eTeX), and you have macros with 10 or more
-+% arguments, you need that no macro has more than 256 arguments, otherwise an
-+% error is produced.
-+\def\parsemargdef#1;{%
-+ \paramno=0\def\paramlist{}%
-+ \let\hash\relax
-+ \let\xeatspaces\relax
-+ \parsemargdefxxx#1,;,%
-+ % In case that there are 10 or more arguments we parse again the arguments
-+ % list to set new definitions for the \macarg.BLAH macros corresponding to
-+ % each BLAH argument. It was anyhow needed to parse already once this list
-+ % in order to count the arguments, and as macros with at most 9 arguments
-+ % are by far more frequent than macro with 10 or more arguments, defining
-+ % twice the \macarg.BLAH macros does not cost too much processing power.
-+ \ifnum\paramno<10\relax\else
-+ \paramno0\relax
-+ \parsemmanyargdef@@#1,;,% 10 or more arguments
-+ \fi
-+}
- \def\parsemargdefxxx#1,{%
- \if#1;\let\next=\relax
- \else \let\next=\parsemargdefxxx
-- \advance\paramno by 1%
-+ \advance\paramno by 1
- \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
- {\xeatspaces{\hash\the\paramno}}%
- \edef\paramlist{\paramlist\hash\the\paramno,}%
- \fi\next}
-
-+\def\parsemmanyargdef@@#1,{%
-+ \if#1;\let\next=\relax
-+ \else
-+ \let\next=\parsemmanyargdef@@
-+ \edef\tempb{\eatspaces{#1}}%
-+ \expandafter\def\expandafter\tempa
-+ \expandafter{\csname macarg.\tempb\endcsname}%
-+ % Note that we need some extra \noexpand\noexpand, this is because we
-+ % don't want \the to be expanded in the \parsermacbody as it uses an
-+ % \xdef .
-+ \expandafter\edef\tempa
-+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
-+ \advance\paramno by 1\relax
-+ \fi\next}
-+
- % These two commands read recursive and nonrecursive macro bodies.
- % (They're different since rec and nonrec macros end differently.)
-+%
-
-+\catcode `\@\texiatcatcode
- \long\def\parsemacbody#1 at end macro%
- {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
- \long\def\parsermacbody#1 at end rmacro%
- {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-+\catcode `\@=11\relax
-
--% This defines the macro itself. There are six cases: recursive and
--% nonrecursive macros of zero, one, and many arguments.
-+\let\endargs@\relax
-+\let\nil@\relax
-+\def\nilm@{\nil@}%
-+\long\def\nillm@{\nil@}%
-+
-+% This macro is expanded during the Texinfo macro expansion, not during its
-+% definition. It gets all the arguments values and assigns them to macros
-+% macarg.ARGNAME
-+%
-+% #1 is the macro name
-+% #2 is the list of argument names
-+% #3 is the list of argument values
-+\def\getargvals@#1#2#3{%
-+ \def\macargdeflist@{}%
-+ \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
-+ \def\paramlist{#2,\nil@}%
-+ \def\macroname{#1}%
-+ \begingroup
-+ \macroargctxt
-+ \def\argvaluelist{#3,\nil@}%
-+ \def\@tempa{#3}%
-+ \ifx\@tempa\empty
-+ \setemptyargvalues@
-+ \else
-+ \getargvals@@
-+ \fi
-+}
-+
-+%
-+\def\getargvals@@{%
-+ \ifx\paramlist\nilm@
-+ % Some sanity check needed here that \argvaluelist is also empty.
-+ \ifx\argvaluelist\nillm@
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Too many arguments in macro `\macroname'!}%
-+ \fi
-+ \let\next\macargexpandinbody@
-+ \else
-+ \ifx\argvaluelist\nillm@
-+ % No more arguments values passed to macro. Set remaining named-arg
-+ % macros to empty.
-+ \let\next\setemptyargvalues@
-+ \else
-+ % pop current arg name into \@tempb
-+ \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
-+ \expandafter\@tempa\expandafter{\paramlist}%
-+ % pop current argument value into \@tempc
-+ \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
-+ \expandafter\@tempa\expandafter{\argvaluelist}%
-+ % Here \@tempb is the current arg name and \@tempc is the current arg value.
-+ % First place the new argument macro definition into \@tempd
-+ \expandafter\macname\expandafter{\@tempc}%
-+ \expandafter\let\csname macarg.\@tempb\endcsname\relax
-+ \expandafter\def\expandafter\@tempe\expandafter{%
-+ \csname macarg.\@tempb\endcsname}%
-+ \edef\@tempd{\long\def\@tempe{\the\macname}}%
-+ \push@\@tempd\macargdeflist@
-+ \let\next\getargvals@@
-+ \fi
-+ \fi
-+ \next
-+}
-+
-+\def\push@#1#2{%
-+ \expandafter\expandafter\expandafter\def
-+ \expandafter\expandafter\expandafter#2%
-+ \expandafter\expandafter\expandafter{%
-+ \expandafter#1#2}%
-+}
-+
-+% Replace arguments by their values in the macro body, and place the result
-+% in macro \@tempa
-+\def\macvalstoargs@{%
-+ % To do this we use the property that token registers that are \the'ed
-+ % within an \edef expand only once. So we are going to place all argument
-+ % values into respective token registers.
-+ %
-+ % First we save the token context, and initialize argument numbering.
-+ \begingroup
-+ \paramno0\relax
-+ % Then, for each argument number #N, we place the corresponding argument
-+ % value into a new token list register \toks#N
-+ \expandafter\putargsintokens@\saveparamlist@,;,%
-+ % Then, we expand the body so that argument are replaced by their
-+ % values. The trick for values not to be expanded themselves is that they
-+ % are within tokens and that tokens expand only once in an \edef .
-+ \edef\@tempc{\csname mac.\macroname .body\endcsname}%
-+ % Now we restore the token stack pointer to free the token list registers
-+ % which we have used, but we make sure that expanded body is saved after
-+ % group.
-+ \expandafter
-+ \endgroup
-+ \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
-+ }
-+
-+\def\macargexpandinbody@{%
-+ %% Define the named-macro outside of this group and then close this group.
-+ \expandafter
-+ \endgroup
-+ \macargdeflist@
-+ % First the replace in body the macro arguments by their values, the result
-+ % is in \@tempa .
-+ \macvalstoargs@
-+ % Then we point at the \norecurse or \gobble (for recursive) macro value
-+ % with \@tempb .
-+ \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
-+ % Depending on whether it is recursive or not, we need some tailing
-+ % \egroup .
-+ \ifx\@tempb\gobble
-+ \let\@tempc\relax
-+ \else
-+ \let\@tempc\egroup
-+ \fi
-+ % And now we do the real job:
-+ \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
-+ \@tempd
-+}
-+
-+\def\putargsintokens@#1,{%
-+ \if#1;\let\next\relax
-+ \else
-+ \let\next\putargsintokens@
-+ % First we allocate the new token list register, and give it a temporary
-+ % alias \@tempb .
-+ \toksdef\@tempb\the\paramno
-+ % Then we place the argument value into that token list register.
-+ \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
-+ \expandafter\@tempb\expandafter{\@tempa}%
-+ \advance\paramno by 1\relax
-+ \fi
-+ \next
-+}
-+
-+% Save the token stack pointer into macro #1
-+\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
-+% Restore the token stack pointer from number in macro #1
-+\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
-+% newtoks that can be used non \outer .
-+\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
-+
-+% Tailing missing arguments are set to empty
-+\def\setemptyargvalues@{%
-+ \ifx\paramlist\nilm@
-+ \let\next\macargexpandinbody@
-+ \else
-+ \expandafter\setemptyargvaluesparser@\paramlist\endargs@
-+ \let\next\setemptyargvalues@
-+ \fi
-+ \next
-+}
-+
-+\def\setemptyargvaluesparser@#1,#2\endargs@{%
-+ \expandafter\def\expandafter\@tempa\expandafter{%
-+ \expandafter\def\csname macarg.#1\endcsname{}}%
-+ \push@\@tempa\macargdeflist@
-+ \def\paramlist{#2}%
-+}
-+
-+% #1 is the element target macro
-+% #2 is the list macro
-+% #3,#4\endargs@ is the list value
-+\def\pop@#1#2#3,#4\endargs@{%
-+ \def#1{#3}%
-+ \def#2{#4}%
-+}
-+\long\def\longpop@#1#2#3,#4\endargs@{%
-+ \long\def#1{#3}%
-+ \long\def#2{#4}%
-+}
-+
-+% This defines a Texinfo @macro. There are eight cases: recursive and
-+% nonrecursive macros of zero, one, up to nine, and many arguments.
- % Much magic with \expandafter here.
- % \xdef is used so that macro definitions will survive the file
- % they're defined in; @include reads the file inside a group.
-+%
- \def\defmacro{%
- \let\hash=##% convert placeholders to macro parameter chars
- \ifrecursive
-@@ -5061,17 +7606,25 @@ width0pt\relax} \fi
- \expandafter\noexpand\csname\the\macname xxx\endcsname}%
- \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
- \egroup\noexpand\scanmacro{\temp}}%
-- \else % many
-- \expandafter\xdef\csname\the\macname\endcsname{%
-- \bgroup\noexpand\macroargctxt
-- \noexpand\csname\the\macname xx\endcsname}%
-- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-- \expandafter\expandafter
-- \expandafter\xdef
-- \expandafter\expandafter
-- \csname\the\macname xxx\endcsname
-- \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-+ \else
-+ \ifnum\paramno<10\relax % at most 9
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \noexpand\csname\the\macname xx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-+ \expandafter\expandafter
-+ \expandafter\xdef
-+ \expandafter\expandafter
-+ \csname\the\macname xxx\endcsname
-+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-+ \else % 10 or more
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \noexpand\getargvals@{\the\macname}{\argl}%
-+ }%
-+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
-+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
-+ \fi
- \fi
- \else
- \ifcase\paramno
-@@ -5088,115 +7641,158 @@ width0pt\relax} \fi
- \egroup
- \noexpand\norecurse{\the\macname}%
- \noexpand\scanmacro{\temp}\egroup}%
-- \else % many
-- \expandafter\xdef\csname\the\macname\endcsname{%
-- \bgroup\noexpand\macroargctxt
-- \expandafter\noexpand\csname\the\macname xx\endcsname}%
-- \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-- \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-- \expandafter\expandafter
-- \expandafter\xdef
-- \expandafter\expandafter
-- \csname\the\macname xxx\endcsname
-- \paramlist{%
-- \egroup
-- \noexpand\norecurse{\the\macname}%
-- \noexpand\scanmacro{\temp}\egroup}%
-+ \else % at most 9
-+ \ifnum\paramno<10\relax
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-+ \expandafter\expandafter
-+ \expandafter\xdef
-+ \expandafter\expandafter
-+ \csname\the\macname xxx\endcsname
-+ \paramlist{%
-+ \egroup
-+ \noexpand\norecurse{\the\macname}%
-+ \noexpand\scanmacro{\temp}\egroup}%
-+ \else % 10 or more:
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \noexpand\getargvals@{\the\macname}{\argl}%
-+ }%
-+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
-+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
-+ \fi
- \fi
- \fi}
-
-+\catcode `\@\texiatcatcode\relax
-+
- \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
- % \braceorline decides whether the next nonwhitespace character is a
- % {. If so it reads up to the closing }, if not, it reads the whole
- % line. Whatever was read is then fed to the next control sequence
--% as an argument (by \parsebrace or \parsearg)
--\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-+% as an argument (by \parsebrace or \parsearg).
-+%
-+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
- \def\braceorlinexxx{%
- \ifx\nchar\bgroup\else
- \expandafter\parsearg
-- \fi \next}
--
--% We mant to disable all macros during \shipout so that they are not
--% expanded by \write.
--\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
-- \edef\next{\macrolist}\expandafter\endgroup\next}
-+ \fi \macnamexxx}
-
-
- % @alias.
- % We need some trickery to remove the optional spaces around the equal
--% sign. Just make them active and then expand them all to nothing.
--\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
-+% sign. Make them active and then expand them all to nothing.
-+%
-+\def\alias{\parseargusing\obeyspaces\aliasxxx}
- \def\aliasxxx #1{\aliasyyy#1\relax}
--\def\aliasyyy #1=#2\relax{\ignoreactivespaces
--\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
-- \expandafter\noexpand\csname#2\endcsname}%
--\expandafter\endgroup\next}
-+\def\aliasyyy #1=#2\relax{%
-+ {%
-+ \expandafter\let\obeyedspace=\empty
-+ \addtomacrolist{#1}%
-+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
-+ }%
-+ \next
-+}
-
-
- \message{cross references,}
--% @xref etc.
-
- \newwrite\auxfile
--
- \newif\ifhavexrefs % True if xref values are known.
- \newif\ifwarnedxrefs % True if we warned once that they aren't known.
-
- % @inforef is relatively simple.
- \def\inforef #1{\inforefzzz #1,,,,**}
--\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-+\def\inforefzzz #1,#2,#3,#4**{%
-+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
- node \samp{\ignorespaces#1{}}}
-
--% @node's job is to define \lastnode.
--\def\node{\ENVcheck\parsearg\nodezzz}
--\def\nodezzz#1{\nodexxx [#1,]}
--\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-+% @node's only job in TeX is to define \lastnode, which is used in
-+% cross-references. The @node line might or might not have commas, and
-+% might or might not have spaces before the first comma, like:
-+% @node foo , bar , ...
-+% We don't want such trailing spaces in the node name.
-+%
-+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
-+%
-+% also remove a trailing comma, in case of something like this:
-+% @node Help-Cross, , , Cross-refs
-+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
-+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
-+
- \let\nwnode=\node
--\let\lastnode=\relax
-+\let\lastnode=\empty
-
--% The sectioning commands (@chapter, etc.) call these.
--\def\donoderef{%
-- \ifx\lastnode\relax\else
-- \expandafter\expandafter\expandafter\setref{\lastnode}%
-- {Ysectionnumberandtype}%
-- \global\let\lastnode=\relax
-- \fi
--}
--\def\unnumbnoderef{%
-- \ifx\lastnode\relax\else
-- \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
-- \global\let\lastnode=\relax
-- \fi
--}
--\def\appendixnoderef{%
-- \ifx\lastnode\relax\else
-- \expandafter\expandafter\expandafter\setref{\lastnode}%
-- {Yappendixletterandtype}%
-- \global\let\lastnode=\relax
-+% Write a cross-reference definition for the current node. #1 is the
-+% type (Ynumbered, Yappendix, Ynothing).
-+%
-+\def\donoderef#1{%
-+ \ifx\lastnode\empty\else
-+ \setref{\lastnode}{#1}%
-+ \global\let\lastnode=\empty
- \fi
- }
-
--
- % @anchor{NAME} -- define xref target at arbitrary point.
- %
- \newcount\savesfregister
--\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
--\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
--\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-+%
-+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-
--% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
--% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have
--% to set \indexdummies so commands such as @code in a section title
--% aren't expanded. It would be nicer not to expand the titles in the
--% first place, but there's so many layers that that is hard to do.
-+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-+% anchor), which consists of three parts:
-+% 1) NAME-title - the current sectioning name taken from \lastsection,
-+% or the anchor name.
-+% 2) NAME-snt - section number and type, passed as the SNT arg, or
-+% empty for anchors.
-+% 3) NAME-pg - the page number.
- %
--\def\setref#1#2{{%
-- \indexdummies
-+% This is called from \donoderef, \anchor, and \dofloat. In the case of
-+% floats, there is an additional part, which is not written here:
-+% 4) NAME-lof - the text as it should appear in a @listoffloats.
-+%
-+\def\setref#1#2{%
- \pdfmkdest{#1}%
-- \dosetq{#1-title}{Ytitle}%
-- \dosetq{#1-pg}{Ypagenumber}%
-- \dosetq{#1-snt}{#2}%
--}}
-+ \iflinks
-+ {%
-+ \atdummies % preserve commands, but don't expand them
-+ \edef\writexrdef##1##2{%
-+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
-+ ##1}{##2}}% these are parameters of \writexrdef
-+ }%
-+ \toks0 = \expandafter{\lastsection}%
-+ \immediate \writexrdef{title}{\the\toks0 }%
-+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
-+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
-+ }%
-+ \fi
-+}
-+
-+% @xrefautosectiontitle on|off says whether @section(ing) names are used
-+% automatically in xrefs, if the third arg is not explicitly specified.
-+% This was provided as a "secret" @set xref-automatic-section-title
-+% variable, now it's official.
-+%
-+\parseargdef\xrefautomaticsectiontitle{%
-+ \def\temp{#1}%
-+ \ifx\temp\onword
-+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
-+ = \empty
-+ \else\ifx\temp\offword
-+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
-+ = \relax
-+ \else
-+ \errhelp = \EMsimple
-+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
-+ must be on|off}%
-+ \fi\fi
-+}
-+
-
- % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
- % the node name, #2 the name of the Info cross-reference, #3 the printed
-@@ -5209,140 +7805,167 @@ width0pt\relax} \fi
- \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
- \unsepspaces
- \def\printedmanual{\ignorespaces #5}%
-- \def\printednodename{\ignorespaces #3}%
-- \setbox1=\hbox{\printedmanual}%
-- \setbox0=\hbox{\printednodename}%
-+ \def\printedrefname{\ignorespaces #3}%
-+ \setbox1=\hbox{\printedmanual\unskip}%
-+ \setbox0=\hbox{\printedrefname\unskip}%
- \ifdim \wd0 = 0pt
- % No printed node name was explicitly given.
-- \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
-+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
- % Use the node name inside the square brackets.
-- \def\printednodename{\ignorespaces #1}%
-+ \def\printedrefname{\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
- % It is in another manual, so we don't have it.
-- \def\printednodename{\ignorespaces #1}%
-+ \def\printedrefname{\ignorespaces #1}%
- \else
- \ifhavexrefs
- % We know the real title if we have the xref values.
-- \def\printednodename{\refx{#1-title}{}}%
-+ \def\printedrefname{\refx{#1-title}{}}%
- \else
- % Otherwise just copy the Info node name.
-- \def\printednodename{\ignorespaces #1}%
-+ \def\printedrefname{\ignorespaces #1}%
- \fi%
- \fi
- \fi
- \fi
- %
-- % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-- % insert empty discretionaries after hyphens, which means that it will
-- % not find a line break at a hyphen in a node names. Since some manuals
-- % are best written with fairly long node names, containing hyphens, this
-- % is a loss. Therefore, we give the text of the node name again, so it
-- % is as if TeX is seeing it for the first time.
-+ % Make link in pdf output.
- \ifpdf
-- \leavevmode
-- \getfilename{#4}%
-- \ifnum\filenamelength>0
-- \startlink attr{/Border [0 0 0]}%
-- goto file{\the\filename.pdf} name{#1@}%
-- \else
-- \startlink attr{/Border [0 0 0]}%
-- goto name{#1@}%
-- \fi
-- \linkcolor
-+ {\indexnofonts
-+ \turnoffactive
-+ % This expands tokens, so do it after making catcode changes, so _
-+ % etc. don't get their TeX definitions.
-+ \getfilename{#4}%
-+ %
-+ \edef\pdfxrefdest{#1}%
-+ \txiescapepdf\pdfxrefdest
-+ %
-+ \leavevmode
-+ \startlink attr{/Border [0 0 0]}%
-+ \ifnum\filenamelength>0
-+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
-+ \else
-+ goto name{\pdfmkpgn{\pdfxrefdest}}%
-+ \fi
-+ }%
-+ \setcolor{\linkcolor}%
- \fi
- %
-- \ifdim \wd1 > 0pt
-- \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
-+ % Float references are printed completely differently: "Figure 1.2"
-+ % instead of "[somenode], p.3". We distinguish them by the
-+ % LABEL-title being set to a magic string.
-+ {%
-+ % Have to otherify everything special to allow the \csname to
-+ % include an _ in the xref name, etc.
-+ \indexnofonts
-+ \turnoffactive
-+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
-+ \csname XR#1-title\endcsname
-+ }%
-+ \iffloat\Xthisreftitle
-+ % If the user specified the print name (third arg) to the ref,
-+ % print it instead of our usual "Figure 1.2".
-+ \ifdim\wd0 = 0pt
-+ \refx{#1-snt}{}%
-+ \else
-+ \printedrefname
-+ \fi
-+ %
-+ % if the user also gave the printed manual name (fifth arg), append
-+ % "in MANUALNAME".
-+ \ifdim \wd1 > 0pt
-+ \space \putwordin{} \cite{\printedmanual}%
-+ \fi
- \else
-- % _ (for example) has to be the character _ for the purposes of the
-- % control sequence corresponding to the node, but it has to expand
-- % into the usual \leavevmode...\vrule stuff for purposes of
-- % printing. So we \turnoffactive for the \refx-snt, back on for the
-- % printing, back off for the \refx-pg.
-- {\normalturnoffactive
-- % Only output a following space if the -snt ref is nonempty; for
-- % @unnumbered and @anchor, it won't be.
-- \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-- \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-- }%
-- % [mynode],
-- [\printednodename],\space
-- % page 3
-- \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-+ % node/anchor (non-float) references.
-+ %
-+ % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-+ % insert empty discretionaries after hyphens, which means that it will
-+ % not find a line break at a hyphen in a node names. Since some manuals
-+ % are best written with fairly long node names, containing hyphens, this
-+ % is a loss. Therefore, we give the text of the node name again, so it
-+ % is as if TeX is seeing it for the first time.
-+ \ifdim \wd1 > 0pt
-+ \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
-+ \else
-+ % _ (for example) has to be the character _ for the purposes of the
-+ % control sequence corresponding to the node, but it has to expand
-+ % into the usual \leavevmode...\vrule stuff for purposes of
-+ % printing. So we \turnoffactive for the \refx-snt, back on for the
-+ % printing, back off for the \refx-pg.
-+ {\turnoffactive
-+ % Only output a following space if the -snt ref is nonempty; for
-+ % @unnumbered and @anchor, it won't be.
-+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-+ }%
-+ % output the `[mynode]' via a macro so it can be overridden.
-+ \xrefprintnodename\printedrefname
-+ %
-+ % But we always want a comma and a space:
-+ ,\space
-+ %
-+ % output the `page 3'.
-+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-+ \fi
- \fi
- \endlink
- \endgroup}
-
--% \dosetq is the interface for calls from other macros
--
--% Use \normalturnoffactive so that punctuation chars such as underscore
--% and backslash work in node names. (\turnoffactive doesn't do \.)
--\def\dosetq#1#2{%
-- {\let\folio=0%
-- \normalturnoffactive
-- \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
-- \iflinks
-- \next
-- \fi
-- }%
--}
--
--% \internalsetq {foo}{page} expands into
--% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
--% When the aux file is read, ' is the escape character
--
--\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
--
--% Things to be expanded by \internalsetq
--
--\def\Ypagenumber{\folio}
--
--\def\Ytitle{\thissection}
--
--\def\Ynothing{}
--
--\def\Ysectionnumberandtype{%
--\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
--\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
--\else \ifnum \subsubsecno=0 %
--\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
--\else %
--\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
--\fi \fi \fi }
--
--\def\Yappendixletterandtype{%
--\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
--\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
--\else \ifnum \subsubsecno=0 %
--\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
--\else %
--\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
--\fi \fi \fi }
--
--\gdef\xreftie{'tie}
-+% This macro is called from \xrefX for the `[nodename]' part of xref
-+% output. It's a separate macro only so it can be changed more easily,
-+% since square brackets don't work well in some documents. Particularly
-+% one that Bob is working on :).
-+%
-+\def\xrefprintnodename#1{[#1]}
-
--% Use TeX 3.0's \inputlineno to get the line number, for better error
--% messages, but if we're using an old version of TeX, don't do anything.
-+% Things referred to by \setref.
- %
--\ifx\inputlineno\thisisundefined
-- \let\linenumber = \empty % Non-3.0.
--\else
-- \def\linenumber{\the\inputlineno:\space}
--\fi
-+\def\Ynothing{}
-+\def\Yomitfromtoc{}
-+\def\Ynumbered{%
-+ \ifnum\secno=0
-+ \putwordChapter at tie \the\chapno
-+ \else \ifnum\subsecno=0
-+ \putwordSection at tie \the\chapno.\the\secno
-+ \else \ifnum\subsubsecno=0
-+ \putwordSection at tie \the\chapno.\the\secno.\the\subsecno
-+ \else
-+ \putwordSection at tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
-+ \fi\fi\fi
-+}
-+\def\Yappendix{%
-+ \ifnum\secno=0
-+ \putwordAppendix at tie @char\the\appendixno{}%
-+ \else \ifnum\subsecno=0
-+ \putwordSection at tie @char\the\appendixno.\the\secno
-+ \else \ifnum\subsubsecno=0
-+ \putwordSection at tie @char\the\appendixno.\the\secno.\the\subsecno
-+ \else
-+ \putwordSection at tie
-+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
-+ \fi\fi\fi
-+}
-
- % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
- % If its value is nonempty, SUFFIX is output afterward.
--
-+%
- \def\refx#1#2{%
-- \expandafter\ifx\csname X#1\endcsname\relax
-+ {%
-+ \indexnofonts
-+ \otherbackslash
-+ \expandafter\global\expandafter\let\expandafter\thisrefX
-+ \csname XR#1\endcsname
-+ }%
-+ \ifx\thisrefX\relax
- % If not defined, say something at least.
- \angleleft un\-de\-fined\angleright
- \iflinks
- \ifhavexrefs
-- \message{\linenumber Undefined cross reference `#1'.}%
-+ {\toks0 = {#1}% avoid expansion of possibly-complex value
-+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
- \else
- \ifwarnedxrefs\else
- \global\warnedxrefstrue
-@@ -5352,22 +7975,59 @@ width0pt\relax} \fi
- \fi
- \else
- % It's defined, so just use it.
-- \csname X#1\endcsname
-+ \thisrefX
- \fi
- #2% Output the suffix in any case.
- }
-
--% This is the macro invoked by entries in the aux file.
-+% This is the macro invoked by entries in the aux file. Usually it's
-+% just a \def (we prepend XR to the control sequence name to avoid
-+% collisions). But if this is a float type, we have more work to do.
- %
--\def\xrdef#1{\begingroup
-- % Reenable \ as an escape while reading the second argument.
-- \catcode`\\ = 0
-- \afterassignment\endgroup
-- \expandafter\gdef\csname X#1\endcsname
-+\def\xrdef#1#2{%
-+ {% The node name might contain 8-bit characters, which in our current
-+ % implementation are changed to commands like @'e. Don't let these
-+ % mess up the control sequence name.
-+ \indexnofonts
-+ \turnoffactive
-+ \xdef\safexrefname{#1}%
-+ }%
-+ %
-+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
-+ %
-+ % Was that xref control sequence that we just defined for a float?
-+ \expandafter\iffloat\csname XR\safexrefname\endcsname
-+ % it was a float, and we have the (safe) float type in \iffloattype.
-+ \expandafter\let\expandafter\floatlist
-+ \csname floatlist\iffloattype\endcsname
-+ %
-+ % Is this the first time we've seen this float type?
-+ \expandafter\ifx\floatlist\relax
-+ \toks0 = {\do}% yes, so just \do
-+ \else
-+ % had it before, so preserve previous elements in list.
-+ \toks0 = \expandafter{\floatlist\do}%
-+ \fi
-+ %
-+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
-+ % for later use in \listoffloats.
-+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
-+ {\safexrefname}}%
-+ \fi
- }
-
- % Read the last existing aux file, if any. No error if none exists.
--\def\readauxfile{\begingroup
-+%
-+\def\tryauxfile{%
-+ \openin 1 \jobname.aux
-+ \ifeof 1 \else
-+ \readdatafile{aux}%
-+ \global\havexrefstrue
-+ \fi
-+ \closein 1
-+}
-+
-+\def\setupdatafile{%
- \catcode`\^^@=\other
- \catcode`\^^A=\other
- \catcode`\^^B=\other
-@@ -5395,9 +8055,7 @@ width0pt\relax} \fi
- \catcode`\^^]=\other
- \catcode`\^^^=\other
- \catcode`\^^_=\other
-- \catcode`\@=\other
-- \catcode`\^=\other
-- % It was suggested to define this as 7, which would allow ^^e4 etc.
-+ % It was suggested to set the catcode of ^ to 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 ^
-@@ -5410,6 +8068,9 @@ width0pt\relax} \fi
- % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
- % and then to call \auxhat in \setq.
- %
-+ \catcode`\^=\other
-+ %
-+ % Special characters. Should be turned off anyway, but...
- \catcode`\~=\other
- \catcode`\[=\other
- \catcode`\]=\other
-@@ -5421,41 +8082,43 @@ width0pt\relax} \fi
- \catcode`\$=\other
- \catcode`\#=\other
- \catcode`\&=\other
-+ \catcode`\%=\other
- \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
-- % Make the characters 128-255 be printing characters
-+ %
-+ % This is to support \ in node names and titles, since the \
-+ % characters end up in a \csname. It's easier than
-+ % leaving it active and making its active definition an actual \
-+ % character. What I don't understand is why it works in the *value*
-+ % of the xrdef. Seems like it should be a catcode12 \, and that
-+ % should not typeset properly. But it works, so I'm moving on for
-+ % now. --karl, 15jan04.
-+ \catcode`\\=\other
-+ %
-+ % Make the characters 128-255 be printing characters.
- {%
-- \count 1=128
-+ \count1=128
- \def\loop{%
-- \catcode\count 1=\other
-- \advance\count 1 by 1
-- \ifnum \count 1<256 \loop \fi
-+ \catcode\count1=\other
-+ \advance\count1 by 1
-+ \ifnum \count1<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.
-+ %
-+ % @ is our escape character in .aux files, and we need braces.
- \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
-+ \catcode`\@=0
-+}
-+
-+\def\readdatafile#1{%
-+\begingroup
-+ \setupdatafile
-+ \input\jobname.#1
- \endgroup}
-
-
--% Footnotes.
-+\message{insertions,}
-+% including footnotes.
-
- \newcount \footnoteno
-
-@@ -5466,40 +8129,42 @@ width0pt\relax} \fi
- % space to prevent strange expansion errors.)
- \def\supereject{\par\penalty -20000\footnoteno =0 }
-
--% @footnotestyle is meaningful for info output only.
-+% @footnotestyle is meaningful for Info output only.
- \let\footnotestyle=\comment
-
--\let\ptexfootnote=\footnote
--
- {\catcode `\@=11
- %
- % Auto-number footnotes. Otherwise like plain.
- \gdef\footnote{%
-+ \let\indent=\ptexindent
-+ \let\noindent=\ptexnoindent
- \global\advance\footnoteno by \@ne
- \edef\thisfootno{$^{\the\footnoteno}$}%
- %
- % In case the footnote comes at the end of a sentence, preserve the
- % extra spacing after we do the footnote number.
- \let\@sf\empty
-- \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
-+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
- %
- % Remove inadvertent blank space before typesetting the footnote number.
- \unskip
- \thisfootno\@sf
-- \footnotezzz
-+ \dofootnote
- }%
-
- % 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
-+% Oh yes, they do; otherwise, @ifset (and anything else that uses
-+% \parseargline) fails inside footnotes because the tokens are fixed when
- % the footnote is read. --karl, 16nov96.
- %
--\long\gdef\footnotezzz{\insert\footins\bgroup
-+\gdef\dofootnote{%
-+ \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.
-+ \hsize=\pagewidth
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox % top baseline for broken footnotes
- \splitmaxdepth\dp\strutbox
-@@ -5512,76 +8177,87 @@ width0pt\relax} \fi
- %
- \smallfonts \rm
- %
-- % Hang the footnote text off the number.
-- \hang
-+ % Because we use hanging indentation in footnotes, a @noindent appears
-+ % to exdent this text, so make it be a no-op. makeinfo does not use
-+ % hanging indentation so @noindent can still be needed within footnote
-+ % text after an @example or the like (not that this is good style).
-+ \let\noindent = \relax
-+ %
-+ % Hang the footnote text off the number. Use \everypar in case the
-+ % footnote extends for more than one paragraph.
-+ \everypar = {\hang}%
- \textindent{\thisfootno}%
- %
- % Don't crash into the line above the footnote text. Since this
- % expands into a box, it must come within the paragraph, lest it
- % provide a place where TeX can split the footnote.
- \footstrut
-+ %
-+ % Invoke rest of plain TeX footnote routine.
- \futurelet\next\fo at t
- }
--\def\fo at t{\ifcat\bgroup\noexpand\next \let\next\f@@t
-- \else\let\next\f at t\fi \next}
--\def\f@@t{\bgroup\aftergroup\@foot\let\next}
--\def\f at t#1{#1\@foot}
--\def\@foot{\strut\par\egroup}
--
- }%end \catcode `\@=11
-
--% Set the baselineskip to #1, and the lineskip and strut size
--% correspondingly. There is no deep meaning behind these magic numbers
--% used as factors; they just match (closely enough) what Knuth defined.
--%
--\def\lineskipfactor{.08333}
--\def\strutheightpercent{.70833}
--\def\strutdepthpercent {.29167}
-+% In case a @footnote appears in a vbox, save the footnote text and create
-+% the real \insert just after the vbox finished. Otherwise, the insertion
-+% would be lost.
-+% Similarly, if a @footnote appears inside an alignment, save the footnote
-+% text to a box and make the \insert when a row of the table is finished.
-+% And the same can be done for other insert classes. --kasal, 16nov03.
-+
-+% Replace the \insert primitive by a cheating macro.
-+% Deeper inside, just make sure that the saved insertions are not spilled
-+% out prematurely.
- %
--\def\setleading#1{%
-- \normalbaselineskip = #1\relax
-- \normallineskip = \lineskipfactor\normalbaselineskip
-- \normalbaselines
-- \setbox\strutbox =\hbox{%
-- \vrule width0pt height\strutheightpercent\baselineskip
-- depth \strutdepthpercent \baselineskip
-- }%
-+\def\startsavinginserts{%
-+ \ifx \insert\ptexinsert
-+ \let\insert\saveinsert
-+ \else
-+ \let\checkinserts\relax
-+ \fi
- }
-
--% @| inserts a changebar to the left of the current line. It should
--% surround any changed text. This approach does *not* work if the
--% change spans more than two lines of output. To handle that, we would
--% have adopt a much more difficult approach (putting marks into the main
--% vertical list for the beginning and end of each change).
-+% This \insert replacement works for both \insert\footins{foo} and
-+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
- %
--\def\|{%
-- % \vadjust can only be used in horizontal mode.
-- \leavevmode
-- %
-- % Append this vertical mode material after the current line in the output.
-- \vadjust{%
-- % We want to insert a rule with the height and depth of the current
-- % leading; that is exactly what \strutbox is supposed to record.
-- \vskip-\baselineskip
-- %
-- % \vadjust-items are inserted at the left edge of the type. So
-- % the \llap here moves out into the left-hand margin.
-- \llap{%
-- %
-- % For a thicker or thinner bar, change the `1pt'.
-- \vrule height\baselineskip width1pt
-- %
-- % This is the space between the bar and the text.
-- \hskip 12pt
-- }%
-- }%
-+\def\saveinsert#1{%
-+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
-+ \afterassignment\next
-+ % swallow the left brace
-+ \let\temp =
- }
-+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
-+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
-+
-+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
-+
-+\def\placesaveins#1{%
-+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
-+ {\box#1}%
-+}
-+
-+% eat @SAVE -- beware, all of them have catcode \other:
-+{
-+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
-+ \gdef\gobblesave @SAVE{}
-+}
-+
-+% initialization:
-+\def\newsaveins #1{%
-+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
-+ \next
-+}
-+\def\newsaveinsX #1{%
-+ \csname newbox\endcsname #1%
-+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
-+ \checksaveins #1}%
-+}
-+
-+% initialize:
-+\let\checkinserts\empty
-+\newsaveins\footins
-+\newsaveins\margin
-
--% For a final copy, take out the rectangles
--% that mark overfull boxes (in case you have decided
--% that the text looks ok even though it passes the margin).
--%
--\def\finalout{\overfullrule=0pt}
-
- % @image. We use the macros from epsf.tex to support this.
- % If epsf.tex is not installed and @image is used, we complain.
-@@ -5591,12 +8267,12 @@ width0pt\relax} \fi
- % undone and the next image would fail.
- \openin 1 = epsf.tex
- \ifeof 1 \else
-- \closein 1
-- % Do not bother showing banner with post-v2.7 epsf.tex (available in
-- % doc/epsf.tex until it shows up on ctan).
-+ % Do not bother showing banner with epsf.tex v2.7k (available in
-+ % doc/epsf.tex and on ctan).
- \def\epsfannounce{\toks0 = }%
- \input epsf.tex
- \fi
-+\closein 1
- %
- % We will only complain once about lack of epsf.tex.
- \newif\ifwarnednoepsf
-@@ -5605,84 +8281,1225 @@ width0pt\relax} \fi
- it from ftp://tug.org/tex/epsf.tex.}
- %
- \def\image#1{%
-- \ifx\epsfbox\undefined
-+ \ifx\epsfbox\thisiundefined
- \ifwarnednoepsf \else
- \errhelp = \noepsfhelp
- \errmessage{epsf.tex not found, images will be ignored}%
- \global\warnednoepsftrue
- \fi
- \else
-- \imagexxx #1,,,\finish
-+ \imagexxx #1,,,,,\finish
- \fi
- }
- %
- % Arguments to @image:
- % #1 is (mandatory) image filename; we tack on .eps extension.
- % #2 is (optional) width, #3 is (optional) height.
--% #4 is just the usual extra ignored arg for parsing this stuff.
--\def\imagexxx#1,#2,#3,#4\finish{%
-+% #4 is (ignored optional) html alt text.
-+% #5 is (ignored optional) extension.
-+% #6 is just the usual extra ignored arg for parsing stuff.
-+\newif\ifimagevmode
-+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
-+ \catcode`\^^M = 5 % in case we're inside an example
-+ \normalturnoffactive % allow _ et al. in names
-+ % If the image is by itself, center it.
-+ \ifvmode
-+ \imagevmodetrue
-+ \nobreak\medskip
-+ % Usually we'll have text after the image which will insert
-+ % \parskip glue, so insert it here too to equalize the space
-+ % above and below.
-+ \nobreak\vskip\parskip
-+ \nobreak
-+ \fi
-+ %
-+ % Leave vertical mode so that indentation from an enclosing
-+ % environment such as @quotation is respected. On the other hand, if
-+ % it's at the top level, we don't want the normal paragraph indentation.
-+ \noindent
-+ %
-+ % Output the image.
- \ifpdf
-- \centerline{\dopdfimage{#1}{#2}{#3}}%
-+ \dopdfimage{#1}{#2}{#3}%
- \else
- % \epsfbox itself resets \epsf?size at each figure.
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
- \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-- \begingroup
-- \catcode`\^^M = 5 % in case we're inside an example
-- % If the image is by itself, center it.
-- \ifvmode
-- \nobreak\bigskip
-- % Usually we'll have text after the image which will insert
-- % \parskip glue, so insert it here too to equalize the space
-- % above and below.
-- \nobreak\vskip\parskip
-- \nobreak
-- \centerline{\epsfbox{#1.eps}}%
-- \bigbreak
-- \else
-- % In the middle of a paragraph, no extra space.
-- \epsfbox{#1.eps}%
-+ \epsfbox{#1.eps}%
-+ \fi
-+ %
-+ \ifimagevmode \medskip \fi % space after the standalone image
-+\endgroup}
-+
-+
-+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
-+% etc. We don't actually implement floating yet, we always include the
-+% float "here". But it seemed the best name for the future.
-+%
-+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
-+
-+% There may be a space before second and/or third parameter; delete it.
-+\def\eatcommaspace#1, {#1,}
-+
-+% #1 is the optional FLOATTYPE, the text label for this float, typically
-+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
-+% this float will not be numbered and cannot be referred to.
-+%
-+% #2 is the optional xref label. Also must be present for the float to
-+% be referable.
-+%
-+% #3 is the optional positioning argument; for now, it is ignored. It
-+% will somehow specify the positions allowed to float to (here, top, bottom).
-+%
-+% We keep a separate counter for each FLOATTYPE, which we reset at each
-+% chapter-level command.
-+\let\resetallfloatnos=\empty
-+%
-+\def\dofloat#1,#2,#3,#4\finish{%
-+ \let\thiscaption=\empty
-+ \let\thisshortcaption=\empty
-+ %
-+ % don't lose footnotes inside @float.
-+ %
-+ % BEWARE: when the floats start float, we have to issue warning whenever an
-+ % insert appears inside a float which could possibly float. --kasal, 26may04
-+ %
-+ \startsavinginserts
-+ %
-+ % We can't be used inside a paragraph.
-+ \par
-+ %
-+ \vtop\bgroup
-+ \def\floattype{#1}%
-+ \def\floatlabel{#2}%
-+ \def\floatloc{#3}% we do nothing with this yet.
-+ %
-+ \ifx\floattype\empty
-+ \let\safefloattype=\empty
-+ \else
-+ {%
-+ % the floattype might have accents or other special characters,
-+ % but we need to use it in a control sequence name.
-+ \indexnofonts
-+ \turnoffactive
-+ \xdef\safefloattype{\floattype}%
-+ }%
-+ \fi
-+ %
-+ % If label is given but no type, we handle that as the empty type.
-+ \ifx\floatlabel\empty \else
-+ % We want each FLOATTYPE to be numbered separately (Figure 1,
-+ % Table 1, Figure 2, ...). (And if no label, no number.)
-+ %
-+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
-+ \global\advance\floatno by 1
-+ %
-+ {%
-+ % This magic value for \lastsection is output by \setref as the
-+ % XREFLABEL-title value. \xrefX uses it to distinguish float
-+ % labels (which have a completely different output format) from
-+ % node and anchor labels. And \xrdef uses it to construct the
-+ % lists of floats.
-+ %
-+ \edef\lastsection{\floatmagic=\safefloattype}%
-+ \setref{\floatlabel}{Yfloat}%
-+ }%
-+ \fi
-+ %
-+ % start with \parskip glue, I guess.
-+ \vskip\parskip
-+ %
-+ % Don't suppress indentation if a float happens to start a section.
-+ \restorefirstparagraphindent
-+}
-+
-+% we have these possibilities:
-+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
-+% @float Foo,lbl & no caption: Foo 1.1
-+% @float Foo & @caption{Cap}: Foo: Cap
-+% @float Foo & no caption: Foo
-+% @float ,lbl & Caption{Cap}: 1.1: Cap
-+% @float ,lbl & no caption: 1.1
-+% @float & @caption{Cap}: Cap
-+% @float & no caption:
-+%
-+\def\Efloat{%
-+ \let\floatident = \empty
-+ %
-+ % In all cases, if we have a float type, it comes first.
-+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
-+ %
-+ % If we have an xref label, the number comes next.
-+ \ifx\floatlabel\empty \else
-+ \ifx\floattype\empty \else % if also had float type, need tie first.
-+ \appendtomacro\floatident{\tie}%
- \fi
-+ % the number.
-+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
-+ \fi
-+ %
-+ % Start the printed caption with what we've constructed in
-+ % \floatident, but keep it separate; we need \floatident again.
-+ \let\captionline = \floatident
-+ %
-+ \ifx\thiscaption\empty \else
-+ \ifx\floatident\empty \else
-+ \appendtomacro\captionline{: }% had ident, so need a colon between
-+ \fi
-+ %
-+ % caption text.
-+ \appendtomacro\captionline{\scanexp\thiscaption}%
-+ \fi
-+ %
-+ % If we have anything to print, print it, with space before.
-+ % Eventually this needs to become an \insert.
-+ \ifx\captionline\empty \else
-+ \vskip.5\parskip
-+ \captionline
-+ %
-+ % Space below caption.
-+ \vskip\parskip
-+ \fi
-+ %
-+ % If have an xref label, write the list of floats info. Do this
-+ % after the caption, to avoid chance of it being a breakpoint.
-+ \ifx\floatlabel\empty \else
-+ % Write the text that goes in the lof to the aux file as
-+ % \floatlabel-lof. Besides \floatident, we include the short
-+ % caption if specified, else the full caption if specified, else nothing.
-+ {%
-+ \atdummies
-+ %
-+ % since we read the caption text in the macro world, where ^^M
-+ % is turned into a normal character, we have to scan it back, so
-+ % we don't write the literal three characters "^^M" into the aux file.
-+ \scanexp{%
-+ \xdef\noexpand\gtemp{%
-+ \ifx\thisshortcaption\empty
-+ \thiscaption
-+ \else
-+ \thisshortcaption
-+ \fi
-+ }%
-+ }%
-+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
-+ \ifx\gtemp\empty \else : \gtemp \fi}}%
-+ }%
-+ \fi
-+ \egroup % end of \vtop
-+ %
-+ % place the captured inserts
-+ %
-+ % BEWARE: when the floats start floating, we have to issue warning
-+ % whenever an insert appears inside a float which could possibly
-+ % float. --kasal, 26may04
-+ %
-+ \checkinserts
-+}
-+
-+% Append the tokens #2 to the definition of macro #1, not expanding either.
-+%
-+\def\appendtomacro#1#2{%
-+ \expandafter\def\expandafter#1\expandafter{#1#2}%
-+}
-+
-+% @caption, @shortcaption
-+%
-+\def\caption{\docaption\thiscaption}
-+\def\shortcaption{\docaption\thisshortcaption}
-+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
-+\def\defcaption#1#2{\egroup \def#1{#2}}
-+
-+% The parameter is the control sequence identifying the counter we are
-+% going to use. Create it if it doesn't exist and assign it to \floatno.
-+\def\getfloatno#1{%
-+ \ifx#1\relax
-+ % Haven't seen this figure type before.
-+ \csname newcount\endcsname #1%
-+ %
-+ % Remember to reset this floatno at the next chap.
-+ \expandafter\gdef\expandafter\resetallfloatnos
-+ \expandafter{\resetallfloatnos #1=0 }%
-+ \fi
-+ \let\floatno#1%
-+}
-+
-+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
-+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
-+% first read the @float command.
-+%
-+\def\Yfloat{\floattype at tie \chaplevelprefix\the\floatno}%
-+
-+% Magic string used for the XREFLABEL-title value, so \xrefX can
-+% distinguish floats from other xref types.
-+\def\floatmagic{!!float!!}
-+
-+% #1 is the control sequence we are passed; we expand into a conditional
-+% which is true if #1 represents a float ref. That is, the magic
-+% \lastsection value which we \setref above.
-+%
-+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
-+%
-+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
-+% (safe) float type for this float. We set \iffloattype to #2.
-+%
-+\def\doiffloat#1=#2=#3\finish{%
-+ \def\temp{#1}%
-+ \def\iffloattype{#2}%
-+ \ifx\temp\floatmagic
-+}
-+
-+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
-+%
-+\parseargdef\listoffloats{%
-+ \def\floattype{#1}% floattype
-+ {%
-+ % the floattype might have accents or other special characters,
-+ % but we need to use it in a control sequence name.
-+ \indexnofonts
-+ \turnoffactive
-+ \xdef\safefloattype{\floattype}%
-+ }%
-+ %
-+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
-+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
-+ \ifhavexrefs
-+ % if the user said @listoffloats foo but never @float foo.
-+ \message{\linenumber No `\safefloattype' floats to list.}%
-+ \fi
-+ \else
-+ \begingroup
-+ \leftskip=\tocindent % indent these entries like a toc
-+ \let\do=\listoffloatsdo
-+ \csname floatlist\safefloattype\endcsname
- \endgroup
- \fi
- }
-
-+% This is called on each entry in a list of floats. We're passed the
-+% xref label, in the form LABEL-title, which is how we save it in the
-+% aux file. We strip off the -title and look up \XRLABEL-lof, which
-+% has the text we're supposed to typeset here.
-+%
-+% Figures without xref labels will not be included in the list (since
-+% they won't appear in the aux file).
-+%
-+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
-+\def\listoffloatsdoentry#1-title\finish{{%
-+ % Can't fully expand XR#1-lof because it can contain anything. Just
-+ % pass the control sequence. On the other hand, XR#1-pg is just the
-+ % page number, and we want to fully expand that so we can get a link
-+ % in pdf output.
-+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
-+ %
-+ % use the same \entry macro we use to generate the TOC and index.
-+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
-+ \writeentry
-+}}
-+
-
- \message{localization,}
--% and i18n.
-
--% @documentlanguage is usually given very early, just after
--% @setfilename. If done too late, it may not override everything
--% properly. Single argument is the language abbreviation.
--% It would be nice if we could set up a hyphenation file here.
-+% For single-language documents, @documentlanguage is usually given very
-+% early, just after @documentencoding. Single argument is the language
-+% (de) or locale (de_DE) abbreviation.
- %
--\def\documentlanguage{\parsearg\dodocumentlanguage}
--\def\dodocumentlanguage#1{%
-+{
-+ \catcode`\_ = \active
-+ \globaldefs=1
-+\parseargdef\documentlanguage{\begingroup
-+ \let_=\normalunderscore % normal _ character for filenames
- \tex % read txi-??.tex file in plain TeX.
-- % Read the file if it exists.
-+ % Read the file by the name they passed if it exists.
-+ \openin 1 txi-#1.tex
-+ \ifeof 1
-+ \documentlanguagetrywithoutunderscore{#1_\finish}%
-+ \else
-+ \globaldefs = 1 % everything in the txi-LL files needs to persist
-+ \input txi-#1.tex
-+ \fi
-+ \closein 1
-+ \endgroup % end raw TeX
-+\endgroup}
-+%
-+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
-+% try txi-de.tex.
-+%
-+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
- \openin 1 txi-#1.tex
-- \ifeof1
-+ \ifeof 1
- \errhelp = \nolanghelp
- \errmessage{Cannot read language file txi-#1.tex}%
-- \let\temp = \relax
- \else
-- \def\temp{\input txi-#1.tex }%
-+ \globaldefs = 1 % everything in the txi-LL files needs to persist
-+ \input txi-#1.tex
- \fi
-- \temp
-- \endgroup
-+ \closein 1
- }
-+}% end of special _ catcode
-+%
- \newhelp\nolanghelp{The given language definition file cannot be found or
--is empty. Maybe you need to install it? In the current directory
--should work if nowhere else does.}
-+is empty. Maybe you need to install it? Putting it in the current
-+directory should work if nowhere else does.}
-
-+% This macro is called from txi-??.tex files; the first argument is the
-+% \language name to set (without the "\lang@" prefix), the second and
-+% third args are \{left,right}hyphenmin.
-+%
-+% The language names to pass are determined when the format is built.
-+% See the etex.log file created at that time, e.g.,
-+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
-+%
-+% With TeX Live 2008, etex now includes hyphenation patterns for all
-+% available languages. This means we can support hyphenation in
-+% Texinfo, at least to some extent. (This still doesn't solve the
-+% accented characters problem.)
-+%
-+\catcode`@=11
-+\def\txisetlanguage#1#2#3{%
-+ % do not set the language if the name is undefined in the current TeX.
-+ \expandafter\ifx\csname lang@#1\endcsname \relax
-+ \message{no patterns for #1}%
-+ \else
-+ \global\language = \csname lang@#1\endcsname
-+ \fi
-+ % but there is no harm in adjusting the hyphenmin values regardless.
-+ \global\lefthyphenmin = #2\relax
-+ \global\righthyphenmin = #3\relax
-+}
-
--% @documentencoding should change something in TeX eventually, most
--% likely, but for now just recognize it.
--\let\documentencoding = \comment
-+% Helpers for encodings.
-+% Set the catcode of characters 128 through 255 to the specified number.
-+%
-+\def\setnonasciicharscatcode#1{%
-+ \count255=128
-+ \loop\ifnum\count255<256
-+ \global\catcode\count255=#1\relax
-+ \advance\count255 by 1
-+ \repeat
-+}
-
-+\def\setnonasciicharscatcodenonglobal#1{%
-+ \count255=128
-+ \loop\ifnum\count255<256
-+ \catcode\count255=#1\relax
-+ \advance\count255 by 1
-+ \repeat
-+}
-
--% Page size parameters.
-+% @documentencoding sets the definition of non-ASCII characters
-+% according to the specified encoding.
-+%
-+\parseargdef\documentencoding{%
-+ % Encoding being declared for the document.
-+ \def\declaredencoding{\csname #1.enc\endcsname}%
-+ %
-+ % Supported encodings: names converted to tokens in order to be able
-+ % to compare them with \ifx.
-+ \def\ascii{\csname US-ASCII.enc\endcsname}%
-+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
-+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
-+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
-+ \def\utfeight{\csname UTF-8.enc\endcsname}%
-+ %
-+ \ifx \declaredencoding \ascii
-+ \asciichardefs
-+ %
-+ \else \ifx \declaredencoding \lattwo
-+ \setnonasciicharscatcode\active
-+ \lattwochardefs
-+ %
-+ \else \ifx \declaredencoding \latone
-+ \setnonasciicharscatcode\active
-+ \latonechardefs
-+ %
-+ \else \ifx \declaredencoding \latnine
-+ \setnonasciicharscatcode\active
-+ \latninechardefs
-+ %
-+ \else \ifx \declaredencoding \utfeight
-+ \setnonasciicharscatcode\active
-+ \utfeightchardefs
-+ %
-+ \else
-+ \message{Unknown document encoding #1, ignoring.}%
-+ %
-+ \fi % utfeight
-+ \fi % latnine
-+ \fi % latone
-+ \fi % lattwo
-+ \fi % ascii
-+}
-+
-+% A message to be logged when using a character that isn't available
-+% the default font encoding (OT1).
-+%
-+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
-+
-+% Take account of \c (plain) vs. \, (Texinfo) difference.
-+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
-+
-+% First, make active non-ASCII characters in order for them to be
-+% correctly categorized when TeX reads the replacement text of
-+% macros containing the character definitions.
-+\setnonasciicharscatcode\active
-+%
-+% Latin1 (ISO-8859-1) character definitions.
-+\def\latonechardefs{%
-+ \gdef^^a0{\tie}
-+ \gdef^^a1{\exclamdown}
-+ \gdef^^a2{\missingcharmsg{CENT SIGN}}
-+ \gdef^^a3{{\pounds}}
-+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-+ \gdef^^a5{\missingcharmsg{YEN SIGN}}
-+ \gdef^^a6{\missingcharmsg{BROKEN BAR}}
-+ \gdef^^a7{\S}
-+ \gdef^^a8{\"{}}
-+ \gdef^^a9{\copyright}
-+ \gdef^^aa{\ordf}
-+ \gdef^^ab{\guillemetleft}
-+ \gdef^^ac{$\lnot$}
-+ \gdef^^ad{\-}
-+ \gdef^^ae{\registeredsymbol}
-+ \gdef^^af{\={}}
-+ %
-+ \gdef^^b0{\textdegree}
-+ \gdef^^b1{$\pm$}
-+ \gdef^^b2{$^2$}
-+ \gdef^^b3{$^3$}
-+ \gdef^^b4{\'{}}
-+ \gdef^^b5{$\mu$}
-+ \gdef^^b6{\P}
-+ %
-+ \gdef^^b7{$^.$}
-+ \gdef^^b8{\cedilla\ }
-+ \gdef^^b9{$^1$}
-+ \gdef^^ba{\ordm}
-+ %
-+ \gdef^^bb{\guillemetright}
-+ \gdef^^bc{$1\over4$}
-+ \gdef^^bd{$1\over2$}
-+ \gdef^^be{$3\over4$}
-+ \gdef^^bf{\questiondown}
-+ %
-+ \gdef^^c0{\`A}
-+ \gdef^^c1{\'A}
-+ \gdef^^c2{\^A}
-+ \gdef^^c3{\~A}
-+ \gdef^^c4{\"A}
-+ \gdef^^c5{\ringaccent A}
-+ \gdef^^c6{\AE}
-+ \gdef^^c7{\cedilla C}
-+ \gdef^^c8{\`E}
-+ \gdef^^c9{\'E}
-+ \gdef^^ca{\^E}
-+ \gdef^^cb{\"E}
-+ \gdef^^cc{\`I}
-+ \gdef^^cd{\'I}
-+ \gdef^^ce{\^I}
-+ \gdef^^cf{\"I}
-+ %
-+ \gdef^^d0{\DH}
-+ \gdef^^d1{\~N}
-+ \gdef^^d2{\`O}
-+ \gdef^^d3{\'O}
-+ \gdef^^d4{\^O}
-+ \gdef^^d5{\~O}
-+ \gdef^^d6{\"O}
-+ \gdef^^d7{$\times$}
-+ \gdef^^d8{\O}
-+ \gdef^^d9{\`U}
-+ \gdef^^da{\'U}
-+ \gdef^^db{\^U}
-+ \gdef^^dc{\"U}
-+ \gdef^^dd{\'Y}
-+ \gdef^^de{\TH}
-+ \gdef^^df{\ss}
-+ %
-+ \gdef^^e0{\`a}
-+ \gdef^^e1{\'a}
-+ \gdef^^e2{\^a}
-+ \gdef^^e3{\~a}
-+ \gdef^^e4{\"a}
-+ \gdef^^e5{\ringaccent a}
-+ \gdef^^e6{\ae}
-+ \gdef^^e7{\cedilla c}
-+ \gdef^^e8{\`e}
-+ \gdef^^e9{\'e}
-+ \gdef^^ea{\^e}
-+ \gdef^^eb{\"e}
-+ \gdef^^ec{\`{\dotless i}}
-+ \gdef^^ed{\'{\dotless i}}
-+ \gdef^^ee{\^{\dotless i}}
-+ \gdef^^ef{\"{\dotless i}}
-+ %
-+ \gdef^^f0{\dh}
-+ \gdef^^f1{\~n}
-+ \gdef^^f2{\`o}
-+ \gdef^^f3{\'o}
-+ \gdef^^f4{\^o}
-+ \gdef^^f5{\~o}
-+ \gdef^^f6{\"o}
-+ \gdef^^f7{$\div$}
-+ \gdef^^f8{\o}
-+ \gdef^^f9{\`u}
-+ \gdef^^fa{\'u}
-+ \gdef^^fb{\^u}
-+ \gdef^^fc{\"u}
-+ \gdef^^fd{\'y}
-+ \gdef^^fe{\th}
-+ \gdef^^ff{\"y}
-+}
-+
-+% Latin9 (ISO-8859-15) encoding character definitions.
-+\def\latninechardefs{%
-+ % Encoding is almost identical to Latin1.
-+ \latonechardefs
-+ %
-+ \gdef^^a4{\euro}
-+ \gdef^^a6{\v S}
-+ \gdef^^a8{\v s}
-+ \gdef^^b4{\v Z}
-+ \gdef^^b8{\v z}
-+ \gdef^^bc{\OE}
-+ \gdef^^bd{\oe}
-+ \gdef^^be{\"Y}
-+}
-+
-+% Latin2 (ISO-8859-2) character definitions.
-+\def\lattwochardefs{%
-+ \gdef^^a0{\tie}
-+ \gdef^^a1{\ogonek{A}}
-+ \gdef^^a2{\u{}}
-+ \gdef^^a3{\L}
-+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-+ \gdef^^a5{\v L}
-+ \gdef^^a6{\'S}
-+ \gdef^^a7{\S}
-+ \gdef^^a8{\"{}}
-+ \gdef^^a9{\v S}
-+ \gdef^^aa{\cedilla S}
-+ \gdef^^ab{\v T}
-+ \gdef^^ac{\'Z}
-+ \gdef^^ad{\-}
-+ \gdef^^ae{\v Z}
-+ \gdef^^af{\dotaccent Z}
-+ %
-+ \gdef^^b0{\textdegree}
-+ \gdef^^b1{\ogonek{a}}
-+ \gdef^^b2{\ogonek{ }}
-+ \gdef^^b3{\l}
-+ \gdef^^b4{\'{}}
-+ \gdef^^b5{\v l}
-+ \gdef^^b6{\'s}
-+ \gdef^^b7{\v{}}
-+ \gdef^^b8{\cedilla\ }
-+ \gdef^^b9{\v s}
-+ \gdef^^ba{\cedilla s}
-+ \gdef^^bb{\v t}
-+ \gdef^^bc{\'z}
-+ \gdef^^bd{\H{}}
-+ \gdef^^be{\v z}
-+ \gdef^^bf{\dotaccent z}
-+ %
-+ \gdef^^c0{\'R}
-+ \gdef^^c1{\'A}
-+ \gdef^^c2{\^A}
-+ \gdef^^c3{\u A}
-+ \gdef^^c4{\"A}
-+ \gdef^^c5{\'L}
-+ \gdef^^c6{\'C}
-+ \gdef^^c7{\cedilla C}
-+ \gdef^^c8{\v C}
-+ \gdef^^c9{\'E}
-+ \gdef^^ca{\ogonek{E}}
-+ \gdef^^cb{\"E}
-+ \gdef^^cc{\v E}
-+ \gdef^^cd{\'I}
-+ \gdef^^ce{\^I}
-+ \gdef^^cf{\v D}
-+ %
-+ \gdef^^d0{\DH}
-+ \gdef^^d1{\'N}
-+ \gdef^^d2{\v N}
-+ \gdef^^d3{\'O}
-+ \gdef^^d4{\^O}
-+ \gdef^^d5{\H O}
-+ \gdef^^d6{\"O}
-+ \gdef^^d7{$\times$}
-+ \gdef^^d8{\v R}
-+ \gdef^^d9{\ringaccent U}
-+ \gdef^^da{\'U}
-+ \gdef^^db{\H U}
-+ \gdef^^dc{\"U}
-+ \gdef^^dd{\'Y}
-+ \gdef^^de{\cedilla T}
-+ \gdef^^df{\ss}
-+ %
-+ \gdef^^e0{\'r}
-+ \gdef^^e1{\'a}
-+ \gdef^^e2{\^a}
-+ \gdef^^e3{\u a}
-+ \gdef^^e4{\"a}
-+ \gdef^^e5{\'l}
-+ \gdef^^e6{\'c}
-+ \gdef^^e7{\cedilla c}
-+ \gdef^^e8{\v c}
-+ \gdef^^e9{\'e}
-+ \gdef^^ea{\ogonek{e}}
-+ \gdef^^eb{\"e}
-+ \gdef^^ec{\v e}
-+ \gdef^^ed{\'{\dotless{i}}}
-+ \gdef^^ee{\^{\dotless{i}}}
-+ \gdef^^ef{\v d}
-+ %
-+ \gdef^^f0{\dh}
-+ \gdef^^f1{\'n}
-+ \gdef^^f2{\v n}
-+ \gdef^^f3{\'o}
-+ \gdef^^f4{\^o}
-+ \gdef^^f5{\H o}
-+ \gdef^^f6{\"o}
-+ \gdef^^f7{$\div$}
-+ \gdef^^f8{\v r}
-+ \gdef^^f9{\ringaccent u}
-+ \gdef^^fa{\'u}
-+ \gdef^^fb{\H u}
-+ \gdef^^fc{\"u}
-+ \gdef^^fd{\'y}
-+ \gdef^^fe{\cedilla t}
-+ \gdef^^ff{\dotaccent{}}
-+}
-+
-+% UTF-8 character definitions.
-+%
-+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
-+% changes for Texinfo conventions. It is included here under the GPL by
-+% permission from Frank Mittelbach and the LaTeX team.
-+%
-+\newcount\countUTFx
-+\newcount\countUTFy
-+\newcount\countUTFz
-+
-+\gdef\UTFviiiTwoOctets#1#2{\expandafter
-+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
-+%
-+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
-+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
- %
-+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
-+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
-+
-+\gdef\UTFviiiDefined#1{%
-+ \ifx #1\relax
-+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
-+ \else
-+ \expandafter #1%
-+ \fi
-+}
-+
-+\begingroup
-+ \catcode`\~13
-+ \catcode`\"12
-+
-+ \def\UTFviiiLoop{%
-+ \global\catcode\countUTFx\active
-+ \uccode`\~\countUTFx
-+ \uppercase\expandafter{\UTFviiiTmp}%
-+ \advance\countUTFx by 1
-+ \ifnum\countUTFx < \countUTFy
-+ \expandafter\UTFviiiLoop
-+ \fi}
-+
-+ \countUTFx = "C2
-+ \countUTFy = "E0
-+ \def\UTFviiiTmp{%
-+ \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
-+ \UTFviiiLoop
-+
-+ \countUTFx = "E0
-+ \countUTFy = "F0
-+ \def\UTFviiiTmp{%
-+ \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
-+ \UTFviiiLoop
-+
-+ \countUTFx = "F0
-+ \countUTFy = "F4
-+ \def\UTFviiiTmp{%
-+ \xdef~{\noexpand\UTFviiiFourOctets\string~}}
-+ \UTFviiiLoop
-+\endgroup
-+
-+\begingroup
-+ \catcode`\"=12
-+ \catcode`\<=12
-+ \catcode`\.=12
-+ \catcode`\,=12
-+ \catcode`\;=12
-+ \catcode`\!=12
-+ \catcode`\~=13
-+
-+ \gdef\DeclareUnicodeCharacter#1#2{%
-+ \countUTFz = "#1\relax
-+ %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
-+ \begingroup
-+ \parseXMLCharref
-+ \def\UTFviiiTwoOctets##1##2{%
-+ \csname u8:##1\string ##2\endcsname}%
-+ \def\UTFviiiThreeOctets##1##2##3{%
-+ \csname u8:##1\string ##2\string ##3\endcsname}%
-+ \def\UTFviiiFourOctets##1##2##3##4{%
-+ \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
-+ \expandafter\expandafter\expandafter\expandafter
-+ \expandafter\expandafter\expandafter
-+ \gdef\UTFviiiTmp{#2}%
-+ \endgroup}
-+
-+ \gdef\parseXMLCharref{%
-+ \ifnum\countUTFz < "A0\relax
-+ \errhelp = \EMsimple
-+ \errmessage{Cannot define Unicode char value < 00A0}%
-+ \else\ifnum\countUTFz < "800\relax
-+ \parseUTFviiiA,%
-+ \parseUTFviiiB C\UTFviiiTwoOctets.,%
-+ \else\ifnum\countUTFz < "10000\relax
-+ \parseUTFviiiA;%
-+ \parseUTFviiiA,%
-+ \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
-+ \else
-+ \parseUTFviiiA;%
-+ \parseUTFviiiA,%
-+ \parseUTFviiiA!%
-+ \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
-+ \fi\fi\fi
-+ }
-+
-+ \gdef\parseUTFviiiA#1{%
-+ \countUTFx = \countUTFz
-+ \divide\countUTFz by 64
-+ \countUTFy = \countUTFz
-+ \multiply\countUTFz by 64
-+ \advance\countUTFx by -\countUTFz
-+ \advance\countUTFx by 128
-+ \uccode `#1\countUTFx
-+ \countUTFz = \countUTFy}
-+
-+ \gdef\parseUTFviiiB#1#2#3#4{%
-+ \advance\countUTFz by "#10\relax
-+ \uccode `#3\countUTFz
-+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
-+\endgroup
-+
-+\def\utfeightchardefs{%
-+ \DeclareUnicodeCharacter{00A0}{\tie}
-+ \DeclareUnicodeCharacter{00A1}{\exclamdown}
-+ \DeclareUnicodeCharacter{00A3}{\pounds}
-+ \DeclareUnicodeCharacter{00A8}{\"{ }}
-+ \DeclareUnicodeCharacter{00A9}{\copyright}
-+ \DeclareUnicodeCharacter{00AA}{\ordf}
-+ \DeclareUnicodeCharacter{00AB}{\guillemetleft}
-+ \DeclareUnicodeCharacter{00AD}{\-}
-+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
-+ \DeclareUnicodeCharacter{00AF}{\={ }}
-+
-+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-+ \DeclareUnicodeCharacter{00B4}{\'{ }}
-+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
-+ \DeclareUnicodeCharacter{00BA}{\ordm}
-+ \DeclareUnicodeCharacter{00BB}{\guillemetright}
-+ \DeclareUnicodeCharacter{00BF}{\questiondown}
-+
-+ \DeclareUnicodeCharacter{00C0}{\`A}
-+ \DeclareUnicodeCharacter{00C1}{\'A}
-+ \DeclareUnicodeCharacter{00C2}{\^A}
-+ \DeclareUnicodeCharacter{00C3}{\~A}
-+ \DeclareUnicodeCharacter{00C4}{\"A}
-+ \DeclareUnicodeCharacter{00C5}{\AA}
-+ \DeclareUnicodeCharacter{00C6}{\AE}
-+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
-+ \DeclareUnicodeCharacter{00C8}{\`E}
-+ \DeclareUnicodeCharacter{00C9}{\'E}
-+ \DeclareUnicodeCharacter{00CA}{\^E}
-+ \DeclareUnicodeCharacter{00CB}{\"E}
-+ \DeclareUnicodeCharacter{00CC}{\`I}
-+ \DeclareUnicodeCharacter{00CD}{\'I}
-+ \DeclareUnicodeCharacter{00CE}{\^I}
-+ \DeclareUnicodeCharacter{00CF}{\"I}
-+
-+ \DeclareUnicodeCharacter{00D0}{\DH}
-+ \DeclareUnicodeCharacter{00D1}{\~N}
-+ \DeclareUnicodeCharacter{00D2}{\`O}
-+ \DeclareUnicodeCharacter{00D3}{\'O}
-+ \DeclareUnicodeCharacter{00D4}{\^O}
-+ \DeclareUnicodeCharacter{00D5}{\~O}
-+ \DeclareUnicodeCharacter{00D6}{\"O}
-+ \DeclareUnicodeCharacter{00D8}{\O}
-+ \DeclareUnicodeCharacter{00D9}{\`U}
-+ \DeclareUnicodeCharacter{00DA}{\'U}
-+ \DeclareUnicodeCharacter{00DB}{\^U}
-+ \DeclareUnicodeCharacter{00DC}{\"U}
-+ \DeclareUnicodeCharacter{00DD}{\'Y}
-+ \DeclareUnicodeCharacter{00DE}{\TH}
-+ \DeclareUnicodeCharacter{00DF}{\ss}
-+
-+ \DeclareUnicodeCharacter{00E0}{\`a}
-+ \DeclareUnicodeCharacter{00E1}{\'a}
-+ \DeclareUnicodeCharacter{00E2}{\^a}
-+ \DeclareUnicodeCharacter{00E3}{\~a}
-+ \DeclareUnicodeCharacter{00E4}{\"a}
-+ \DeclareUnicodeCharacter{00E5}{\aa}
-+ \DeclareUnicodeCharacter{00E6}{\ae}
-+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
-+ \DeclareUnicodeCharacter{00E8}{\`e}
-+ \DeclareUnicodeCharacter{00E9}{\'e}
-+ \DeclareUnicodeCharacter{00EA}{\^e}
-+ \DeclareUnicodeCharacter{00EB}{\"e}
-+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
-+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
-+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
-+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
-+
-+ \DeclareUnicodeCharacter{00F0}{\dh}
-+ \DeclareUnicodeCharacter{00F1}{\~n}
-+ \DeclareUnicodeCharacter{00F2}{\`o}
-+ \DeclareUnicodeCharacter{00F3}{\'o}
-+ \DeclareUnicodeCharacter{00F4}{\^o}
-+ \DeclareUnicodeCharacter{00F5}{\~o}
-+ \DeclareUnicodeCharacter{00F6}{\"o}
-+ \DeclareUnicodeCharacter{00F8}{\o}
-+ \DeclareUnicodeCharacter{00F9}{\`u}
-+ \DeclareUnicodeCharacter{00FA}{\'u}
-+ \DeclareUnicodeCharacter{00FB}{\^u}
-+ \DeclareUnicodeCharacter{00FC}{\"u}
-+ \DeclareUnicodeCharacter{00FD}{\'y}
-+ \DeclareUnicodeCharacter{00FE}{\th}
-+ \DeclareUnicodeCharacter{00FF}{\"y}
-+
-+ \DeclareUnicodeCharacter{0100}{\=A}
-+ \DeclareUnicodeCharacter{0101}{\=a}
-+ \DeclareUnicodeCharacter{0102}{\u{A}}
-+ \DeclareUnicodeCharacter{0103}{\u{a}}
-+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}
-+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}
-+ \DeclareUnicodeCharacter{0106}{\'C}
-+ \DeclareUnicodeCharacter{0107}{\'c}
-+ \DeclareUnicodeCharacter{0108}{\^C}
-+ \DeclareUnicodeCharacter{0109}{\^c}
-+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
-+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
-+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
-+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
-+ \DeclareUnicodeCharacter{010C}{\v{C}}
-+ \DeclareUnicodeCharacter{010D}{\v{c}}
-+ \DeclareUnicodeCharacter{010E}{\v{D}}
-+
-+ \DeclareUnicodeCharacter{0112}{\=E}
-+ \DeclareUnicodeCharacter{0113}{\=e}
-+ \DeclareUnicodeCharacter{0114}{\u{E}}
-+ \DeclareUnicodeCharacter{0115}{\u{e}}
-+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
-+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
-+ \DeclareUnicodeCharacter{011A}{\v{E}}
-+ \DeclareUnicodeCharacter{011B}{\v{e}}
-+ \DeclareUnicodeCharacter{011C}{\^G}
-+ \DeclareUnicodeCharacter{011D}{\^g}
-+ \DeclareUnicodeCharacter{011E}{\u{G}}
-+ \DeclareUnicodeCharacter{011F}{\u{g}}
-+
-+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
-+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
-+ \DeclareUnicodeCharacter{0124}{\^H}
-+ \DeclareUnicodeCharacter{0125}{\^h}
-+ \DeclareUnicodeCharacter{0128}{\~I}
-+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
-+ \DeclareUnicodeCharacter{012A}{\=I}
-+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
-+ \DeclareUnicodeCharacter{012C}{\u{I}}
-+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
-+
-+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
-+ \DeclareUnicodeCharacter{0131}{\dotless{i}}
-+ \DeclareUnicodeCharacter{0132}{IJ}
-+ \DeclareUnicodeCharacter{0133}{ij}
-+ \DeclareUnicodeCharacter{0134}{\^J}
-+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
-+ \DeclareUnicodeCharacter{0139}{\'L}
-+ \DeclareUnicodeCharacter{013A}{\'l}
-+
-+ \DeclareUnicodeCharacter{0141}{\L}
-+ \DeclareUnicodeCharacter{0142}{\l}
-+ \DeclareUnicodeCharacter{0143}{\'N}
-+ \DeclareUnicodeCharacter{0144}{\'n}
-+ \DeclareUnicodeCharacter{0147}{\v{N}}
-+ \DeclareUnicodeCharacter{0148}{\v{n}}
-+ \DeclareUnicodeCharacter{014C}{\=O}
-+ \DeclareUnicodeCharacter{014D}{\=o}
-+ \DeclareUnicodeCharacter{014E}{\u{O}}
-+ \DeclareUnicodeCharacter{014F}{\u{o}}
-+
-+ \DeclareUnicodeCharacter{0150}{\H{O}}
-+ \DeclareUnicodeCharacter{0151}{\H{o}}
-+ \DeclareUnicodeCharacter{0152}{\OE}
-+ \DeclareUnicodeCharacter{0153}{\oe}
-+ \DeclareUnicodeCharacter{0154}{\'R}
-+ \DeclareUnicodeCharacter{0155}{\'r}
-+ \DeclareUnicodeCharacter{0158}{\v{R}}
-+ \DeclareUnicodeCharacter{0159}{\v{r}}
-+ \DeclareUnicodeCharacter{015A}{\'S}
-+ \DeclareUnicodeCharacter{015B}{\'s}
-+ \DeclareUnicodeCharacter{015C}{\^S}
-+ \DeclareUnicodeCharacter{015D}{\^s}
-+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}
-+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}
-+
-+ \DeclareUnicodeCharacter{0160}{\v{S}}
-+ \DeclareUnicodeCharacter{0161}{\v{s}}
-+ \DeclareUnicodeCharacter{0162}{\cedilla{t}}
-+ \DeclareUnicodeCharacter{0163}{\cedilla{T}}
-+ \DeclareUnicodeCharacter{0164}{\v{T}}
-+
-+ \DeclareUnicodeCharacter{0168}{\~U}
-+ \DeclareUnicodeCharacter{0169}{\~u}
-+ \DeclareUnicodeCharacter{016A}{\=U}
-+ \DeclareUnicodeCharacter{016B}{\=u}
-+ \DeclareUnicodeCharacter{016C}{\u{U}}
-+ \DeclareUnicodeCharacter{016D}{\u{u}}
-+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
-+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
-+
-+ \DeclareUnicodeCharacter{0170}{\H{U}}
-+ \DeclareUnicodeCharacter{0171}{\H{u}}
-+ \DeclareUnicodeCharacter{0174}{\^W}
-+ \DeclareUnicodeCharacter{0175}{\^w}
-+ \DeclareUnicodeCharacter{0176}{\^Y}
-+ \DeclareUnicodeCharacter{0177}{\^y}
-+ \DeclareUnicodeCharacter{0178}{\"Y}
-+ \DeclareUnicodeCharacter{0179}{\'Z}
-+ \DeclareUnicodeCharacter{017A}{\'z}
-+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
-+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
-+ \DeclareUnicodeCharacter{017D}{\v{Z}}
-+ \DeclareUnicodeCharacter{017E}{\v{z}}
-+
-+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}
-+ \DeclareUnicodeCharacter{01C5}{D\v{z}}
-+ \DeclareUnicodeCharacter{01C6}{d\v{z}}
-+ \DeclareUnicodeCharacter{01C7}{LJ}
-+ \DeclareUnicodeCharacter{01C8}{Lj}
-+ \DeclareUnicodeCharacter{01C9}{lj}
-+ \DeclareUnicodeCharacter{01CA}{NJ}
-+ \DeclareUnicodeCharacter{01CB}{Nj}
-+ \DeclareUnicodeCharacter{01CC}{nj}
-+ \DeclareUnicodeCharacter{01CD}{\v{A}}
-+ \DeclareUnicodeCharacter{01CE}{\v{a}}
-+ \DeclareUnicodeCharacter{01CF}{\v{I}}
-+
-+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
-+ \DeclareUnicodeCharacter{01D1}{\v{O}}
-+ \DeclareUnicodeCharacter{01D2}{\v{o}}
-+ \DeclareUnicodeCharacter{01D3}{\v{U}}
-+ \DeclareUnicodeCharacter{01D4}{\v{u}}
-+
-+ \DeclareUnicodeCharacter{01E2}{\={\AE}}
-+ \DeclareUnicodeCharacter{01E3}{\={\ae}}
-+ \DeclareUnicodeCharacter{01E6}{\v{G}}
-+ \DeclareUnicodeCharacter{01E7}{\v{g}}
-+ \DeclareUnicodeCharacter{01E8}{\v{K}}
-+ \DeclareUnicodeCharacter{01E9}{\v{k}}
-+
-+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
-+ \DeclareUnicodeCharacter{01F1}{DZ}
-+ \DeclareUnicodeCharacter{01F2}{Dz}
-+ \DeclareUnicodeCharacter{01F3}{dz}
-+ \DeclareUnicodeCharacter{01F4}{\'G}
-+ \DeclareUnicodeCharacter{01F5}{\'g}
-+ \DeclareUnicodeCharacter{01F8}{\`N}
-+ \DeclareUnicodeCharacter{01F9}{\`n}
-+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}
-+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}
-+ \DeclareUnicodeCharacter{01FE}{\'{\O}}
-+ \DeclareUnicodeCharacter{01FF}{\'{\o}}
-+
-+ \DeclareUnicodeCharacter{021E}{\v{H}}
-+ \DeclareUnicodeCharacter{021F}{\v{h}}
-+
-+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
-+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
-+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}
-+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}
-+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
-+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
-+
-+ \DeclareUnicodeCharacter{0232}{\=Y}
-+ \DeclareUnicodeCharacter{0233}{\=y}
-+ \DeclareUnicodeCharacter{0237}{\dotless{j}}
-+
-+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
-+
-+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
-+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
-+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
-+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
-+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
-+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
-+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
-+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
-+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
-+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
-+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
-+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
-+
-+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
-+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
-+
-+ \DeclareUnicodeCharacter{1E20}{\=G}
-+ \DeclareUnicodeCharacter{1E21}{\=g}
-+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
-+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
-+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
-+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
-+ \DeclareUnicodeCharacter{1E26}{\"H}
-+ \DeclareUnicodeCharacter{1E27}{\"h}
-+
-+ \DeclareUnicodeCharacter{1E30}{\'K}
-+ \DeclareUnicodeCharacter{1E31}{\'k}
-+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
-+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
-+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
-+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
-+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
-+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
-+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
-+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
-+ \DeclareUnicodeCharacter{1E3E}{\'M}
-+ \DeclareUnicodeCharacter{1E3F}{\'m}
-+
-+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
-+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
-+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
-+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
-+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
-+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
-+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
-+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
-+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
-+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
-+
-+ \DeclareUnicodeCharacter{1E54}{\'P}
-+ \DeclareUnicodeCharacter{1E55}{\'p}
-+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
-+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
-+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
-+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
-+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
-+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
-+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
-+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
-+
-+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
-+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
-+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
-+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
-+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
-+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
-+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
-+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
-+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
-+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
-+
-+ \DeclareUnicodeCharacter{1E7C}{\~V}
-+ \DeclareUnicodeCharacter{1E7D}{\~v}
-+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
-+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
-+
-+ \DeclareUnicodeCharacter{1E80}{\`W}
-+ \DeclareUnicodeCharacter{1E81}{\`w}
-+ \DeclareUnicodeCharacter{1E82}{\'W}
-+ \DeclareUnicodeCharacter{1E83}{\'w}
-+ \DeclareUnicodeCharacter{1E84}{\"W}
-+ \DeclareUnicodeCharacter{1E85}{\"w}
-+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
-+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
-+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
-+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
-+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
-+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
-+ \DeclareUnicodeCharacter{1E8C}{\"X}
-+ \DeclareUnicodeCharacter{1E8D}{\"x}
-+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
-+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
-+
-+ \DeclareUnicodeCharacter{1E90}{\^Z}
-+ \DeclareUnicodeCharacter{1E91}{\^z}
-+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
-+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
-+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
-+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
-+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
-+ \DeclareUnicodeCharacter{1E97}{\"t}
-+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
-+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
-+
-+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
-+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
-+
-+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
-+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
-+ \DeclareUnicodeCharacter{1EBC}{\~E}
-+ \DeclareUnicodeCharacter{1EBD}{\~e}
-+
-+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
-+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
-+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
-+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
-+
-+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
-+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
-+
-+ \DeclareUnicodeCharacter{1EF2}{\`Y}
-+ \DeclareUnicodeCharacter{1EF3}{\`y}
-+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
-+
-+ \DeclareUnicodeCharacter{1EF8}{\~Y}
-+ \DeclareUnicodeCharacter{1EF9}{\~y}
-+
-+ \DeclareUnicodeCharacter{2013}{--}
-+ \DeclareUnicodeCharacter{2014}{---}
-+ \DeclareUnicodeCharacter{2018}{\quoteleft}
-+ \DeclareUnicodeCharacter{2019}{\quoteright}
-+ \DeclareUnicodeCharacter{201A}{\quotesinglbase}
-+ \DeclareUnicodeCharacter{201C}{\quotedblleft}
-+ \DeclareUnicodeCharacter{201D}{\quotedblright}
-+ \DeclareUnicodeCharacter{201E}{\quotedblbase}
-+ \DeclareUnicodeCharacter{2022}{\bullet}
-+ \DeclareUnicodeCharacter{2026}{\dots}
-+ \DeclareUnicodeCharacter{2039}{\guilsinglleft}
-+ \DeclareUnicodeCharacter{203A}{\guilsinglright}
-+ \DeclareUnicodeCharacter{20AC}{\euro}
-+
-+ \DeclareUnicodeCharacter{2192}{\expansion}
-+ \DeclareUnicodeCharacter{21D2}{\result}
-+
-+ \DeclareUnicodeCharacter{2212}{\minus}
-+ \DeclareUnicodeCharacter{2217}{\point}
-+ \DeclareUnicodeCharacter{2261}{\equiv}
-+}% end of \utfeightchardefs
-+
-+
-+% US-ASCII character definitions.
-+\def\asciichardefs{% nothing need be done
-+ \relax
-+}
-+
-+% Make non-ASCII characters printable again for compatibility with
-+% existing Texinfo documents that may use them, even without declaring a
-+% document encoding.
-+%
-+\setnonasciicharscatcode \other
-+
-+
-+\message{formatting,}
-+
- \newdimen\defaultparindent \defaultparindent = 15pt
-
- \chapheadingskip = 15pt plus 4pt minus 2pt
-@@ -5692,10 +9509,10 @@ should work if nowhere else does.}
- % Prevent underfull vbox error messages.
- \vbadness = 10000
-
--% Don't be so finicky about underfull hboxes, either.
--\hbadness = 2000
-+% Don't be very finicky about underfull hboxes, either.
-+\hbadness = 6666
-
--% Following George Bush, just get rid of widows and orphans.
-+% Following George Bush, get rid of widows and orphans.
- \widowpenalty=10000
- \clubpenalty=10000
-
-@@ -5713,11 +9530,14 @@ should work if nowhere else does.}
- \fi
- }
-
--% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
--% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can
--% set \parskip and call \setleading for \baselineskip.
-+% Parameters in order: 1) textheight; 2) textwidth;
-+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
-+% 7) physical page height; 8) physical page width.
- %
--\def\internalpagesizes#1#2#3#4#5#6{%
-+% We also call \setleading{\textleading}, so the caller should define
-+% \textleading. The caller should also set \parskip.
-+%
-+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
- \voffset = #3\relax
- \topskip = #6\relax
- \splittopskip = \topskip
-@@ -5736,6 +9556,17 @@ should work if nowhere else does.}
- \normaloffset = #4\relax
- \bindingoffset = #5\relax
- %
-+ \ifpdf
-+ \pdfpageheight #7\relax
-+ \pdfpagewidth #8\relax
-+ % if we don't reset these, they will remain at "1 true in" of
-+ % whatever layout pdftex was dumped with.
-+ \pdfhorigin = 1 true in
-+ \pdfvorigin = 1 true in
-+ \fi
-+ %
-+ \setleading{\textleading}
-+ %
- \parindent = \defaultparindent
- \setemergencystretch
- }
-@@ -5743,76 +9574,140 @@ should work if nowhere else does.}
- % @letterpaper (the default).
- \def\letterpaper{{\globaldefs = 1
- \parskip = 3pt plus 2pt minus 1pt
-- \setleading{13.2pt}%
-+ \textleading = 13.2pt
- %
- % If page is nothing but text, make it come out even.
-- \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
-+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
-+ {\voffset}{.25in}%
-+ {\bindingoffset}{36pt}%
-+ {11in}{8.5in}%
- }}
-
--% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-+% Use @smallbook to reset parameters for 7x9.25 trim size.
- \def\smallbook{{\globaldefs = 1
- \parskip = 2pt plus 1pt
-- \setleading{12pt}%
-+ \textleading = 12pt
- %
-- \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
-+ \internalpagesizes{7.5in}{5in}%
-+ {-.2in}{0in}%
-+ {\bindingoffset}{16pt}%
-+ {9.25in}{7in}%
- %
- \lispnarrowing = 0.3in
- \tolerance = 700
- \hfuzz = 1pt
- \contentsrightmargin = 0pt
-- \deftypemargin = 0pt
- \defbodyindent = .5cm
-+}}
-+
-+% Use @smallerbook to reset parameters for 6x9 trim size.
-+% (Just testing, parameters still in flux.)
-+\def\smallerbook{{\globaldefs = 1
-+ \parskip = 1.5pt plus 1pt
-+ \textleading = 12pt
- %
-- \let\smalldisplay = \smalldisplayx
-- \let\smallexample = \smalllispx
-- \let\smallformat = \smallformatx
-- \let\smalllisp = \smalllispx
-+ \internalpagesizes{7.4in}{4.8in}%
-+ {-.2in}{-.4in}%
-+ {0pt}{14pt}%
-+ {9in}{6in}%
-+ %
-+ \lispnarrowing = 0.25in
-+ \tolerance = 700
-+ \hfuzz = 1pt
-+ \contentsrightmargin = 0pt
-+ \defbodyindent = .4cm
- }}
-
- % Use @afourpaper to print on European A4 paper.
- \def\afourpaper{{\globaldefs = 1
-- \setleading{12pt}%
- \parskip = 3pt plus 2pt minus 1pt
-+ \textleading = 13.2pt
- %
-- \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
-+ % Double-side printing via postscript on Laserjet 4050
-+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
-+ % To change the settings for a different printer or situation, adjust
-+ % \normaloffset until the front-side and back-side texts align. Then
-+ % do the same for \bindingoffset. You can set these for testing in
-+ % your texinfo source file like this:
-+ % @tex
-+ % \global\normaloffset = -6mm
-+ % \global\bindingoffset = 10mm
-+ % @end tex
-+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
-+ {\voffset}{\hoffset}%
-+ {\bindingoffset}{44pt}%
-+ {297mm}{210mm}%
- %
- \tolerance = 700
- \hfuzz = 1pt
-+ \contentsrightmargin = 0pt
-+ \defbodyindent = 5mm
- }}
-
--% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
--% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
--\def\afourlatex{{\globaldefs = 1
-- \setleading{13.6pt}%
-+% Use @afivepaper to print on European A5 paper.
-+% From romildo at urano.iceb.ufop.br, 2 July 2000.
-+% He also recommends making @example and @lisp be small.
-+\def\afivepaper{{\globaldefs = 1
-+ \parskip = 2pt plus 1pt minus 0.1pt
-+ \textleading = 12.5pt
-+ %
-+ \internalpagesizes{160mm}{120mm}%
-+ {\voffset}{\hoffset}%
-+ {\bindingoffset}{8pt}%
-+ {210mm}{148mm}%
- %
-+ \lispnarrowing = 0.2in
-+ \tolerance = 800
-+ \hfuzz = 1.2pt
-+ \contentsrightmargin = 0pt
-+ \defbodyindent = 2mm
-+ \tableindent = 12mm
-+}}
-+
-+% A specific text layout, 24x15cm overall, intended for A4 paper.
-+\def\afourlatex{{\globaldefs = 1
- \afourpaper
-- \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
-+ \internalpagesizes{237mm}{150mm}%
-+ {\voffset}{4.6mm}%
-+ {\bindingoffset}{7mm}%
-+ {297mm}{210mm}%
- %
-+ % Must explicitly reset to 0 because we call \afourpaper.
- \globaldefs = 0
- }}
-
--% Use @afourwide to print on European A4 paper in wide format.
--\def\afourwide{%
-+% Use @afourwide to print on A4 paper in landscape format.
-+\def\afourwide{{\globaldefs = 1
- \afourpaper
-- \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
-- %
-+ \internalpagesizes{241mm}{165mm}%
-+ {\voffset}{-2.95mm}%
-+ {\bindingoffset}{7mm}%
-+ {297mm}{210mm}%
- \globaldefs = 0
--}
-+}}
-
- % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
- % Perhaps we should allow setting the margins, \topskip, \parskip,
- % and/or leading, also. Or perhaps we should compute them somehow.
- %
--\def\pagesizes{\parsearg\pagesizesxxx}
--\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
- \def\pagesizesyyy#1,#2,#3\finish{{%
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
- \globaldefs = 1
- %
- \parskip = 3pt plus 2pt minus 1pt
-- \setleading{13.2pt}%
-+ \setleading{\textleading}%
- %
-- \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
-+ \dimen0 = #1\relax
-+ \advance\dimen0 by \voffset
-+ %
-+ \dimen2 = \hsize
-+ \advance\dimen2 by \normaloffset
-+ %
-+ \internalpagesizes{#1}{\hsize}%
-+ {\voffset}{\normaloffset}%
-+ {\bindingoffset}{44pt}%
-+ {\dimen0}{\dimen2}%
- }}
-
- % Set default to letter.
-@@ -5822,28 +9717,24 @@ should work if nowhere else does.}
-
- \message{and turning on texinfo input format.}
-
-+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
-+
-+% DEL is a comment character, in case @c does not suffice.
-+\catcode`\^^? = 14
-+
- % Define macros to output various characters with catcode for normal text.
--\catcode`\"=\other
--\catcode`\~=\other
--\catcode`\^=\other
--\catcode`\_=\other
--\catcode`\|=\other
--\catcode`\<=\other
--\catcode`\>=\other
--\catcode`\+=\other
--\catcode`\$=\other
--\def\normaldoublequote{"}
--\def\normaltilde{~}
--\def\normalcaret{^}
--\def\normalunderscore{_}
--\def\normalverticalbar{|}
--\def\normalless{<}
--\def\normalgreater{>}
--\def\normalplus{+}
--\def\normaldollar{$}
-+\catcode`\"=\other \def\normaldoublequote{"}
-+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
-+\catcode`\+=\other \def\normalplus{+}
-+\catcode`\<=\other \def\normalless{<}
-+\catcode`\>=\other \def\normalgreater{>}
-+\catcode`\^=\other \def\normalcaret{^}
-+\catcode`\_=\other \def\normalunderscore{_}
-+\catcode`\|=\other \def\normalverticalbar{|}
-+\catcode`\~=\other \def\normaltilde{~}
-
--% This macro is used to make a character print one way in ttfont
--% where it can probably just be output, and another way in other fonts,
-+% This macro is used to make a character print one way in \tt
-+% (where it can probably be output as-is), and another way in other fonts,
- % where something hairier probably needs to be done.
- %
- % #1 is what to print if we are indeed using \tt; #2 is what to print
-@@ -5875,8 +9766,9 @@ should work if nowhere else does.}
-
- \catcode`\_=\active
- \def_{\ifusingtt\normalunderscore\_}
-+\let\realunder=_
- % Subroutine for the previous macro.
--\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
-
- \catcode`\|=\active
- \def|{{\tt\char124}}
-@@ -5889,16 +9781,7 @@ should work if nowhere else does.}
- \catcode`\+=\active
- \def+{{\tt \char 43}}
- \catcode`\$=\active
--\def${\ifusingit{{\sl\$}}\normaldollar}
--%\catcode 27=\active
--%\def^^[{$\diamondsuit$}
--
--% Set up an active definition for =, but don't enable it most of the time.
--{\catcode`\==\active
--\global\def={{\tt \char 61}}}
--
--\catcode`+=\active
--\catcode`\_=\active
-+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
-
- % 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.
-@@ -5906,46 +9789,65 @@ should work if nowhere else does.}
- % \otherifyactive is called near the end of this file.
- \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-+% Used sometimes to turn off (effectively) the active characters even after
-+% parsing them.
-+\def\turnoffactive{%
-+ \normalturnoffactive
-+ \otherbackslash
-+}
-+
- \catcode`\@=0
-
--% \rawbackslashxx output one backslash character in current font
--\global\chardef\rawbackslashxx=`\\
--%{\catcode`\\=\other
--%@gdef at rawbackslashxx{\}}
-+% \backslashcurfont outputs one backslash character in current font,
-+% as in \char`\\.
-+\global\chardef\backslashcurfont=`\\
-+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
-
--% \rawbackslash redefines \ as input to do \rawbackslashxx.
--{\catcode`\\=\active
-- at gdef@rawbackslash{@let\=@rawbackslashxx }}
-+% \realbackslash is an actual character `\' with catcode other, and
-+% \doublebackslash is two of them (for the pdf outlines).
-+{\catcode`\\=\other @gdef at realbackslash{\} @gdef at doublebackslash{\\}}
-
--% \normalbackslash outputs one backslash in fixed width font.
--\def\normalbackslash{{\tt\rawbackslashxx}}
-+% In texinfo, backslash is an active character; it prints the backslash
-+% in fixed width font.
-+\catcode`\\=\active % @ for escape char from now on.
-
--% \catcode 17=0 % Define control-q
--\catcode`\\=\active
-+% The story here is that in math mode, the \char of \backslashcurfont
-+% ends up printing the roman \ from the math symbol font (because \char
-+% in math mode uses the \mathcode, and plain.tex sets
-+% \mathcode`\\="026E). It seems better for @backslashchar{} to always
-+% print a typewriter backslash, hence we use an explicit \mathchar,
-+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
-+% ignored family value; char position "5C). We can't use " for the
-+% usual hex value because it has already been made active.
-+ at def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
-+ at let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
-
--% Used sometimes to turn off (effectively) the active characters
--% even after parsing them.
-- at def@turnoffactive{@let"=@normaldoublequote
-- at let\=@realbackslash
-- at let~=@normaltilde
-- at let^=@normalcaret
-- at let_=@normalunderscore
-- at let|=@normalverticalbar
-- at let<=@normalless
-- at let>=@normalgreater
-- at let+=@normalplus
-- at let$=@normaldollar}
-+% On startup, @fixbackslash assigns:
-+% @let \ = @normalbackslash
-+% \rawbackslash defines an active \ to do \backslashcurfont.
-+% \otherbackslash defines an active \ to be a literal `\' character with
-+% catcode other. We switch back and forth between these.
-+ at gdef@rawbackslash{@let\=@backslashcurfont}
-+ at gdef@otherbackslash{@let\=@realbackslash}
-
-- at def@normalturnoffactive{@let"=@normaldoublequote
-- at let\=@normalbackslash
-- at let~=@normaltilde
-- at let^=@normalcaret
-- at let_=@normalunderscore
-- at let|=@normalverticalbar
-- at let<=@normalless
-- at let>=@normalgreater
-- at let+=@normalplus
-- at let$=@normaldollar}
-+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-+% the literal character `\'.
-+%
-+ at def@normalturnoffactive{%
-+ @let"=@normaldoublequote
-+ @let$=@normaldollar %$ font-lock fix
-+ @let+=@normalplus
-+ @let<=@normalless
-+ @let>=@normalgreater
-+ @let\=@normalbackslash
-+ @let^=@normalcaret
-+ @let_=@normalunderscore
-+ @let|=@normalverticalbar
-+ @let~=@normaltilde
-+ @markupsetuplqdefault
-+ @markupsetuprqdefault
-+ @unsepspaces
-+}
-
- % Make _ and + \other characters, temporarily.
- % This is canceled by @fixbackslash.
-@@ -5959,9 +9861,9 @@ should work if nowhere else does.}
- @global at let\ = @eatinput
-
- % 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
-+% 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
-+% Also turn back on active characters that might appear in the input
- % file name, in case not using a pre-dumped format.
- %
- @gdef at fixbackslash{%
-@@ -5973,15 +9875,28 @@ should work if nowhere else does.}
- % Say @foo, not \foo, in error messages.
- @escapechar = `@@
-
--% These look ok in all fonts, so just make them not special.
-- at catcode`@& = @other
-- at catcode`@# = @other
-- at catcode`@% = @other
-+% These (along with & and #) are made active for url-breaking, so need
-+% active definitions as the normal characters.
-+ at def@normaldot{.}
-+ at def@normalquest{?}
-+ at def@normalslash{/}
-
-- at c Set initial fonts.
-- at textfonts
-- at rm
-+% These look ok in all fonts, so just make them not special.
-+% @hashchar{} gets its own user-level command, because of #line.
-+ at catcode`@& = @other @def at normalamp{&}
-+ at catcode`@# = @other @def at normalhash{#}
-+ at catcode`@% = @other @def at normalpercent{%}
-+
-+ at let @hashchar = @normalhash
-
-+ at c Finally, make ` and ' active, so that txicodequoteundirected and
-+ at c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
-+ at c don't make ` and ' active, @code will not get them as active chars.
-+ at c Do this last of all since we use ` in the previous @catcode assignments.
-+ at catcode`@'=@active
-+ at catcode`@`=@active
-+ at markupsetuplqdefault
-+ at markupsetuprqdefault
-
- @c Local variables:
- @c eval: (add-hook 'write-file-hooks 'time-stamp)
-@@ -5990,3 +9905,9 @@ should work if nowhere else does.}
- @c time-stamp-format: "%:y-%02m-%02d.%02H"
- @c time-stamp-end: "}"
- @c End:
-+
-+ at c vim:sw=2:
-+
-+ at ignore
-+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
-+ at end ignore
--- ./ltmain.sh.orig 2002-08-08 23:49:32.000000000 -0600
-+++ ./ltmain.sh 2012-07-26 09:59:36.977378175 -0600
++++ ./ltmain.sh 2012-09-23 01:32:05.000000000 -0600
@@ -1,199 +1,924 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
diff --git a/gcl-2.6.8-largefile.patch b/gcl-2.6.8-largefile.patch
new file mode 100644
index 0000000..2d29931
--- /dev/null
+++ b/gcl-2.6.8-largefile.patch
@@ -0,0 +1,926 @@
+--- ./h/protoize.h.orig 2013-05-11 14:42:29.000000000 -0600
++++ ./h/protoize.h 2013-05-13 14:46:33.925671152 -0600
+@@ -508,7 +508,7 @@ typedef void (*funcvoid)(void);
+ /* unixfsys.c:329:OF */ extern bool file_exists (object file); /* (file) object file; */
+ /* unixfsys.c:359:OF */ extern FILE *backup_fopen (char *filename, char *option); /* (filename, option) char *filename; char *option; */
+ /* unixfsys.c:359:OF */ extern FILE *fopen_not_dir (char *filename, char *option); /* (filename, option) char *filename; char *option; */
+-/* unixfsys.c:372:OF */ extern int file_len (FILE *fp); /* (fp) FILE *fp; */
++/* unixfsys.c:372:OF */ extern off_t file_len (FILE *fp); /* (fp) FILE *fp; */
+ /* unixfsys.c:382:OF */ extern object truename (object); /* () */
+ /* unixfsys.c:382:OF */ extern void Ltruename (void); /* () */
+ /* unixfsys.c:418:OF */ extern object fSsetenv (object variable, object value); /* (variable, value) object variable; object value; */
+@@ -731,11 +731,11 @@ edit_double(int, double, int *, char *,
+ void
+ sethash(object,object,object);
+
+-int
++off_t
+ file_position(object);
+
+ int
+-file_position_set(object, int);
++file_position_set(object, off_t);
+
+ void
+ princ_str(char *s, object);
+--- ./h/linux.h.orig 2012-01-17 18:29:27.000000000 -0700
++++ ./h/linux.h 2013-05-13 14:46:33.926671150 -0600
+@@ -12,13 +12,13 @@
+ #include <link.h>
+ #define SEEK_TO_END_OFILE(fp)\
+ do { \
+- long offset = 0, endofelf; int j; \
++ off_t offset = 0, endofelf; int j; \
+ ElfW(Ehdr) eheader; ElfW(Shdr) shdr; \
+- fseek(fp, 0, SEEK_SET); \
++ fseeko(fp, 0, SEEK_SET); \
+ fread(&eheader, sizeof(eheader), 1, fp); \
+ /* in case the headers themselves come AFTER the actual sections */ \
+ endofelf=offset = eheader.e_shoff+ eheader.e_shentsize *eheader.e_shnum;\
+- fseek(fp, eheader.e_shoff, SEEK_SET); \
++ fseeko(fp, eheader.e_shoff, SEEK_SET); \
+ if ( eheader.e_shentsize != sizeof(ElfW(Shdr)) ) \
+ { FEerror("Bad ELF section header size",0); } \
+ for ( j = 0; j < eheader.e_shnum; j++ ) \
+@@ -26,7 +26,7 @@
+ if ( (shdr.sh_offset > offset) && (shdr.sh_type != SHT_NOBITS) ) \
+ { offset = shdr.sh_offset; endofelf = offset+shdr.sh_size; } \
+ } \
+- if ( fseek(fp, endofelf, SEEK_SET) ) \
++ if ( fseeko(fp, endofelf, SEEK_SET) ) \
+ FEerror("Bad ELF file",0); \
+ } while(0)
+
+--- ./h/mp.h.orig 2005-01-15 09:27:36.000000000 -0700
++++ ./h/mp.h 2013-05-13 14:46:33.926671150 -0600
+@@ -35,6 +35,22 @@ typedef struct
+
+ #define SI_TO_MP(x, temp) (mpz_set_si(MP(temp),(x)), MP(temp))
+
++#define C_INT_TO_OBJ(x) ({ \
++ object temp = big_fixnum1; \
++ if (x >= MOST_NEG_FIXNUM && x <= MOST_POSITIVE_FIXNUM) \
++ temp = make_fixnum(x); \
++ else if (sizeof(x) <= sizeof(long)) \
++ mpz_set_si(MP(big_fixnum1), x); \
++ else if (x < 0) { \
++ __typeof__(x) y = -x; \
++ mpz_import(MP(big_fixnum2), 1U, 1, sizeof(x), 0, 0U, &y); \
++ mpz_neg(MP(big_fixnum1), MP(big_fixnum2)); \
++ } else { \
++ __typeof__(x) y = x; \
++ mpz_import(MP(big_fixnum1), 1U, 1, sizeof(x), 0, 0U, &y); \
++ } \
++ temp; \
++})
+
+ #define INTEGER_TO_MP(x, temp ) \
+ (type_of(x) == t_bignum ? MP(x) : SI_TO_MP(fix(x), temp))
+@@ -110,6 +126,20 @@ GEN subss();
+
+ #define SI_TO_MP(x,ignore) stoi(x)
+
++#define C_INT_TO_OBJ(x) ({ \
++ object temp = big_fixnum1; \
++ if (x >= MOST_NEG_FIXNUM && x <= MOST_POSITIVE_FIXNUM) \
++ temp = make_fixnum(x); \
++ else if (sizeof(x) <= sizeof(long)) \
++ MP(big_fixnum1) = stoi(x); \
++ else if (x < 0) { \
++ __typeof__(x) y = -x; \
++ MP(big_fixnum1) = uutoineg((y) >> (sizeof(ulong) * 8), (y) & (ulong)-1); \
++ } else \
++ MP(big_fixnum1) = uutoi((x) >> (sizeof(ulong) * 8), (x) & (ulong)-1); \
++ temp; \
++})
++
+ #define INT_FLAG 0x1010000
+
+ #define MP_ALLOCATED(x) (x)->big.big_length
+--- ./o/unixfasl.c.orig 2004-05-03 15:35:58.000000000 -0600
++++ ./o/unixfasl.c 2013-05-13 14:46:33.927671148 -0600
+@@ -90,8 +90,8 @@ object faslfile;
+ #ifdef ATT
+ struct filehdr fileheader;
+ struct scnhdr sectionheader;
+- int textsize, datasize, bsssize;
+- int textstart;
++ off_t textsize, datasize, bsssize;
++ off_t textstart;
+ #endif
+
+ #ifdef E15
+@@ -129,7 +129,7 @@ object faslfile;
+ #ifdef ATT
+ fread(&fileheader, sizeof(fileheader), 1, fp);
+ #ifdef S3000
+- if(fileheader.f_opthdr != 0) fseek(fp,fileheader.f_opthdr,1);
++ if(fileheader.f_opthdr != 0) fseeko(fp,fileheader.f_opthdr,1);
+ #endif
+ fread(§ionheader, sizeof(sectionheader), 1, fp);
+ textsize = sectionheader.s_size;
+@@ -162,27 +162,27 @@ object faslfile;
+ SEEK_TO_END_OFILE(fp);
+ #else
+ #ifdef BSD
+- fseek(fp,
++ fseeko(fp,
+ header.a_text+header.a_data+
+ header.a_syms+header.a_trsize+header.a_drsize,
+ 1);
+ fread(&i, sizeof(i), 1, fp);
+- fseek(fp, i - sizeof(i), 1);
++ fseeko(fp, i - sizeof(i), 1);
+ #endif
+
+ #ifdef ATT
+- fseek(fp,
++ fseeko(fp,
+ fileheader.f_symptr + SYMESZ*fileheader.f_nsyms,
+ 0);
+ fread(&i, sizeof(i), 1, fp);
+- fseek(fp, i - sizeof(i), 1);
++ fseeko(fp, i - sizeof(i), 1);
+ while ((i = getc(fp)) == 0)
+ ;
+ ungetc(i, fp);
+ #endif
+
+ #ifdef E15
+- fseek(fp,
++ fseeko(fp,
+ header.a_text+header.a_data+
+ header.a_syms+header.a_trsize+header.a_drsize,
+ 1);
+@@ -255,7 +255,7 @@ AGAIN:
+ }
+ #endif
+
+- if (fseek(fp, textstart, 0) < 0)
++ if (fseeko(fp, textstart, 0) < 0)
+ error("file seek error");
+
+ fread(memory->cfd.cfd_start, textsize + datasize, 1, fp);
+@@ -334,12 +334,12 @@ SEEK_TO_END_OFILE(faslfile->sm.sm_fp);
+ #else
+ fp = faslfile->sm.sm_fp;
+ fread(&faslheader, sizeof(faslheader), 1, fp);
+- fseek(fp,
++ fseeko(fp,
+ faslheader.a_text+faslheader.a_data+
+ faslheader.a_syms+faslheader.a_trsize+faslheader.a_drsize,
+ 1);
+ fread(&i, sizeof(i), 1, fp);
+- fseek(fp, i - sizeof(i), 1);
++ fseeko(fp, i - sizeof(i), 1);
+ #endif
+ data = read_fasl_vector(faslfile);
+ vs_push(data);
+@@ -361,7 +361,7 @@ SEEK_TO_END_OFILE(faslfile->sm.sm_fp);
+ vs_push(tempfile);
+ fp = tempfile->sm.sm_fp;
+
+- if (fseek(fp, textstart, 0) < 0)
++ if (fseeko(fp, textstart, 0) < 0)
+ error("file seek error");
+
+ fread(memory->cfd.cfd_start, textsize + datasize, 1, fp);
+--- ./o/sfasl.c.orig 2010-08-04 15:44:27.000000000 -0600
++++ ./o/sfasl.c 2013-05-13 14:46:33.927671148 -0600
+@@ -133,7 +133,7 @@ void set_symbol_address ( struct syment
+ int
+ fasload(faslfile)
+ object faslfile;
+-{ long fasl_vector_start;
++{ off_t fasl_vector_start;
+ struct filehdr fileheader;
+ struct sfasl_info sfasl_info_buf;
+ #ifdef COFF
+@@ -195,7 +195,7 @@ object faslfile;
+ symbol_table =
+ (struct syment *) OUR_ALLOCA(sizeof(struct syment)*
+ (unsigned int)nsyms);
+- fseek(fp,(int)( N_SYMOFF(fileheader)), 0);
++ fseeko(fp,(off_t)( N_SYMOFF(fileheader)), 0);
+ {
+ for (i = 0; i < nsyms; i++)
+ { fread((char *)&symbol_table[i], SYMESZ, 1, fp);
+@@ -206,7 +206,7 @@ object faslfile;
+ symbol_table[i].n_un.n_strx = string_size;
+ dprintf(string_size %d, string_size);
+ string_size += symbol_table[i].n_length + 1;
+- fseek(fp,(int)symbol_table[i].n_length,1);
++ fseeko(fp,(off_t)symbol_table[i].n_length,1);
+ #endif
+ }
+ }
+@@ -223,13 +223,13 @@ my_string_table=READ_IN_STRING_TABLE(fp,
+
+ #else
+ #ifdef MUST_SEEK_TO_STROFF
+- fseek(fp,N_STROFF(fileheader),0);
++ fseeko(fp,N_STROFF(fileheader),0);
+ #endif
+ {int ii=0;
+ if (!fread((char *)&ii,sizeof(int),1,fp))
+ {FEerror("The string table of this file did not have any length",0,
+ 0);}
+- fseek(fp,-4,1);
++ fseeko(fp,-4,1);
+ /* at present the string table is located just after the symbols */
+ my_string_table=OUR_ALLOCA((unsigned int)ii);
+ dprintf( string table leng = %d, ii);
+@@ -246,7 +246,7 @@ SEEK_TO_END_OFILE(fp);
+ ungetc(i, fp);
+ #endif
+
+- fasl_vector_start=ftell(fp);
++ fasl_vector_start=ftello(fp);
+
+ if (!((c_table.ptable) && *(c_table.ptable)))
+ build_symbol_table();
+@@ -278,7 +278,7 @@ SEEK_TO_END_OFILE(fp);
+ #endif
+
+ dprintf( code size %d , datasize+textsize+bsssize + extra_bss);
+- if (fseek(fp,N_TXTOFF(fileheader) ,0) < 0)
++ if (fseeko(fp,N_TXTOFF(fileheader) ,0) < 0)
+ FEerror("file seek error",0,0);
+ SAFE_FREAD(the_start, textsize + datasize, 1, fp);
+ dprintf(read into memory text +data %d bytes, textsize + datasize);
+@@ -292,7 +292,7 @@ SEEK_TO_END_OFILE(fp);
+ {int j=0;
+ for(j=1; j< BSS_NSCN ; j++)
+ { dprintf( relocating section %d \n,j);
+- if (section[j].s_nreloc) fseek(fp,section[j].s_relptr,0);
++ if (section[j].s_nreloc) fseeko(fp,section[j].s_relptr,0);
+ for(i=0; i < section[j].s_nreloc; i++)
+ { struct syment *sym;
+ fread(&relocation_info, RELSZ, 1, fp);
+@@ -311,7 +311,7 @@ SEEK_TO_END_OFILE(fp);
+ {int j=0;
+ for(j=1; j< BSS_NSCN ; j++)
+ { dprintf( relocating section %d \n,j);
+- if (section[j].s_nreloc) fseek(fp,section[j].s_relptr,0);
++ if (section[j].s_nreloc) fseeko(fp,section[j].s_relptr,0);
+ #ifdef ADJUST_RELOC_START
+ ADJUST_RELOC_START(j)
+ #endif
+@@ -323,7 +323,7 @@ ADJUST_RELOC_START(j)
+ }};
+ #endif
+ #ifdef BSD
+- fseek(fp,N_RELOFF(fileheader),0);
++ fseeko(fp,N_RELOFF(fileheader),0);
+ {int nrel = (fileheader.a_trsize/sizeof(struct reloc));
+ for (i=0; i < nrel; i++)
+ {fread((char *)&relocation_info, sizeof(struct reloc),
+@@ -333,7 +333,7 @@ ADJUST_RELOC_START(j)
+ }
+ }
+ #ifdef N_DRELOFF
+- fseek (fp, N_DRELOFF(fileheader), 0);
++ fseeko (fp, N_DRELOFF(fileheader), 0);
+ #endif
+ {int nrel = (fileheader.a_drsize/sizeof(struct reloc));
+ the_start += fileheader.a_text;
+@@ -354,7 +354,7 @@ ADJUST_RELOC_START(j)
+ dprintf( datasize is %x,datasize);
+
+ /* read in the fasl vector */
+- fseek(fp,fasl_vector_start,0);
++ fseeko(fp,fasl_vector_start,0);
+ if (feof(fp))
+ {data=0;}
+ else{
+--- ./o/file.d.orig 2013-05-11 14:29:11.000000000 -0600
++++ ./o/file.d 2013-05-13 14:46:33.928671146 -0600
+@@ -410,7 +410,7 @@ object if_exists, if_does_not_exist;
+ FEerror("Cannot write pipe output to temporary file",0);
+ if (pclose(pp)<0)
+ FEerror("Cannot close zcat pipe",0);
+- if (fseek(fp,0,SEEK_SET))
++ if (fseeko(fp,0,SEEK_SET))
+ FEerror("Cannot rewind temporary file\n",0);
+ goto AGAIN;
+ }
+@@ -1321,7 +1321,7 @@ BEGIN:
+ }
+ }
+
+-int
++off_t
+ file_position(strm)
+ object strm;
+ {
+@@ -1333,7 +1333,7 @@ BEGIN:
+ /* return(strm->sm.sm_int0); */
+ if (strm->sm.sm_fp == NULL)
+ closed_stream(strm);
+- return(ftell(strm->sm.sm_fp));
++ return(ftello(strm->sm.sm_fp));
+ case smm_socket:
+ return -1;
+
+@@ -1364,7 +1364,7 @@ BEGIN:
+ int
+ file_position_set(strm, disp)
+ object strm;
+-int disp;
++off_t disp;
+ {
+ BEGIN:
+ switch (strm->sm.sm_mode) {
+@@ -1374,7 +1374,7 @@ BEGIN:
+ case smm_output:
+ case smm_io:
+
+- if (fseek(strm->sm.sm_fp, disp, 0) < 0)
++ if (fseeko(strm->sm.sm_fp, disp, 0) < 0)
+ return(-1);
+ /* strm->sm.sm_int0 = disp; */
+ return(0);
+@@ -1410,7 +1410,7 @@ BEGIN:
+ }
+ }
+
+-static int
++static off_t
+ file_length(strm)
+ object strm;
+ {
+@@ -1773,14 +1773,14 @@ LFD(Lstream_element_type)()
+ @)
+
+ @(defun file_position (file_stream &o position)
+- int i=0;
++ off_t i=0;
+ @
+ check_type_stream(&file_stream);
+ if (position == Cnil) {
+ i = file_position(file_stream);
+ if (i < 0)
+ @(return Cnil)
+- @(return `make_fixnum(i)`)
++ @(return `C_INT_TO_OBJ(i)`)
+ } else {
+ if (position == sKstart)
+ i = 0;
+@@ -1807,7 +1807,7 @@ LFD(Lfile_length)()
+ if (i < 0)
+ vs_base[0] = Cnil;
+ else
+- vs_base[0] = make_fixnum(i);
++ vs_base[0] = C_INT_TO_OBJ(i);
+ }
+
+ object sSAload_pathnameA;
+@@ -2706,22 +2706,22 @@ read_fasl_data(const char *str) {
+ #ifdef BSD
+ fp = faslfile->sm.sm_fp;
+ fread(&header, sizeof(header), 1, fp);
+- fseek(fp,
++ fseeko(fp,
+ header.a_text+header.a_data+
+ header.a_syms+header.a_trsize+header.a_drsize,
+ 1);
+ fread(&i, sizeof(i), 1, fp);
+- fseek(fp, i - sizeof(i), 1);
++ fseeko(fp, i - sizeof(i), 1);
+ #endif
+
+ #ifdef HAVE_FILEHDR
+ fp = faslfile->sm.sm_fp;
+ fread(&fileheader, sizeof(fileheader), 1, fp);
+- fseek(fp,
++ fseeko(fp,
+ fileheader.f_symptr+fileheader.f_nsyms*SYMESZ,
+ 0);
+ fread(&i, sizeof(i), 1, fp);
+- fseek(fp, i - sizeof(i), 1);
++ fseeko(fp, i - sizeof(i), 1);
+ while ((i = getc(fp)) == 0)
+ ;
+ ungetc(i, fp);
+@@ -2730,7 +2730,7 @@ read_fasl_data(const char *str) {
+ #ifdef E15
+ fp = faslfile->sm.sm_fp;
+ fread(&header, sizeof(header), 1, fp);
+- fseek(fp,
++ fseeko(fp,
+ header.a_text+header.a_data+
+ header.a_syms+header.a_trsize+header.a_drsize,
+ 1);
+--- ./o/unexelf.c.orig 2004-05-03 15:35:58.000000000 -0600
++++ ./o/unexelf.c 2013-05-13 14:46:33.928671146 -0600
+@@ -634,7 +634,8 @@ find_section (char *name, char *section_
+ static void
+ unexec (char *new_name, char *old_name, unsigned int data_start, unsigned int bss_start, unsigned int entry_address)
+ {
+- int new_file, old_file, new_file_size;
++ int new_file, old_file;
++ off_t new_file_size;
+
+ /* Pointers to the base of the image of the two files. */
+ caddr_t old_base, new_base;
+@@ -664,7 +665,7 @@ unexec (char *new_name, char *old_name,
+ int old_data_index, new_data2_index;
+ int old_mdebug_index;
+ struct stat stat_buf;
+- int old_file_size;
++ size_t old_file_size;
+
+ /* Open the old file, allocate a buffer of the right size, and read
+ in the file contents. */
+@@ -687,13 +688,13 @@ unexec (char *new_name, char *old_name,
+ we'd dump our temporary buffers with Emacs, and we'd have to be
+ extra careful to use the correct value of sbrk(0) after
+ allocating all buffers in the code below, which we aren't. */
+- old_file_size = stat_buf.st_size;
++ old_file_size = (size_t) stat_buf.st_size;
+ old_base = mmap (NULL, old_file_size, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_PRIVATE, mmap_fd, 0);
+ if (old_base == MAP_FAILED)
+ fatal ("Can't allocate buffer for %s\n", old_name);
+
+- if (read (old_file, old_base, stat_buf.st_size) != stat_buf.st_size)
++ if (read (old_file, old_base, old_file_size) != stat_buf.st_size)
+ fatal ("Didn't read all of %s: errno %d\n", old_name, errno);
+
+ /* Get pointers to headers & section names */
+@@ -778,7 +779,7 @@ unexec (char *new_name, char *old_name,
+ if (ftruncate (new_file, new_file_size))
+ fatal ("Can't ftruncate (%s): errno %d\n", new_name, errno);
+
+- new_base = mmap (NULL, new_file_size, PROT_READ | PROT_WRITE,
++ new_base = mmap (NULL, (size_t) new_file_size, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_PRIVATE, mmap_fd, 0);
+ if (new_base == MAP_FAILED)
+ fatal ("Can't allocate buffer for %s\n", old_name);
+@@ -1208,12 +1209,12 @@ unexec (char *new_name, char *old_name,
+
+ /* Write out new_file, and free the buffers. */
+
+- if (write (new_file, new_base, new_file_size) != new_file_size)
+- fatal ("Didn't write %d bytes to %s: errno %d\n",
+- new_file_size, new_base, errno);
++ if (write (new_file, new_base, (size_t) new_file_size) != new_file_size)
++ fatal ("Didn't write %zu bytes to %s: errno %d\n",
++ (size_t) new_file_size, new_base, errno);
+
+ munmap (old_base, old_file_size);
+- munmap (new_base, new_file_size);
++ munmap (new_base, (size_t) new_file_size);
+
+ /* Close the files and make the new file executable. */
+
+--- ./o/fasdump.c.orig 2005-10-05 12:51:55.000000000 -0600
++++ ./o/fasdump.c 2013-05-13 14:46:33.929671144 -0600
+@@ -605,7 +605,7 @@ FFN(open_fasd)(object stream, object dir
+ fd->eof=eof;
+ fd->index=small_fixnum(0);
+ fd->package=symbol_value(sLApackageA);
+- fd->filepos = make_fixnum(file_position(stream));
++ fd->filepos = C_INT_TO_OBJ(file_position(stream));
+
+ SETUP_FASD_IN(fd);
+ if (direction==sKoutput){
+@@ -645,7 +645,7 @@ FFN(close_fasd)(object ar)
+ {clrhash(fd->table);
+ SETUP_FASD_IN(fd);
+ PUT_OP(d_end_of_file);
+- {int i = file_position(fd->stream);
++ {off_t i = file_position(fd->stream);
+ if(type_of(fd->filepos) == t_fixnum)
+ { file_position_set(fd->stream,fix(fd->filepos) +2);
+ /* record the length of array needed to read the indices */
+--- ./o/unixsave.c.orig 2005-05-06 15:56:56.000000000 -0600
++++ ./o/unixsave.c 2013-05-13 14:46:33.929671144 -0600
+@@ -93,7 +93,7 @@ memory_save(original_file, save_file)
+ char *original_file, *save_file;
+ { MEM_SAVE_LOCALS;
+ char *data_begin, *data_end;
+- int original_data;
++ off_t original_data = 0;
+ FILE *original, *save;
+ register int n;
+ register char *p;
+@@ -130,7 +130,7 @@ char *original_file, *save_file;
+ } else
+ break;
+
+- fseek(original, original_data, 1);
++ fseeko(original, original_data, 1);
+
+ COPY_TO_SAVE;
+
+--- ./o/unixfsys.c.orig 2013-05-13 14:42:55.958085843 -0600
++++ ./o/unixfsys.c 2013-05-13 14:46:33.929671144 -0600
+@@ -414,7 +414,7 @@ backup_fopen(char *filename, char *optio
+ return(fopen(filename, option));
+ }
+
+-int
++off_t
+ file_len(FILE *fp)
+ {
+ struct stat filestatus;
+@@ -486,7 +486,7 @@ DEFUN_NEW("STAT",object,fSstat,SI,1,1,NO
+ filename[j-1]=0;*/
+ RETURN1(list(3,S_ISDIR(ss.st_mode) ? sKdirectory :
+ (S_ISLNK(ss.st_mode) ? sKlink : sKfile),
+- make_fixnum(ss.st_size),make_fixnum(ss.st_ctime)));
++ C_INT_TO_OBJ(ss.st_size),make_fixnum(ss.st_ctime)));
+ }
+ }
+
+--- ./unixport/bsd_rsym.c.orig 1999-12-06 15:44:15.000000000 -0700
++++ ./unixport/bsd_rsym.c 2013-05-13 14:46:33.930671142 -0600
+@@ -121,7 +121,7 @@ tab.n_symbols=0;tab.tot_leng=0;
+ symout=fopen(outfile,"w");
+ if (!symout)
+ {perror(outfile); exit(1);};
+- fseek(symout,sizeof(struct lsymbol_table),0);
++ fseeko(symout,sizeof(struct lsymbol_table),0);
+ end = my_symbol_table + NSYMS(my_header);
+ for (p = my_symbol_table; p < end; p++) {
+ /*
+@@ -146,7 +146,7 @@ tab.n_symbols=0;tab.tot_leng=0;
+ dprintf( index , (int) (p - my_symbol_table) / sizeof(struct syment));
+ p = p + NUM_AUX(p); }
+ }
+- fseek(symout,0,0);
++ fseeko(symout,0,0);
+ fwrite(&tab,sizeof(tab),1,symout);
+ fclose(symout);
+ return 0;
+--- ./unixport/rsym.c.orig 2002-07-25 15:49:47.000000000 -0600
++++ ./unixport/rsym.c 2013-05-13 14:46:33.930671142 -0600
+@@ -102,7 +102,7 @@ char *filename;
+ sizeof(struct syment) and SYMESZ are not always the same.
+ */
+
+- if(fseek(fp,(int)(N_SYMOFF(my_header)),0))
++ if(fseeko(fp,(off_t)(N_SYMOFF(my_header)),0))
+ {fprintf(stderr,"seek error");
+ exit(1);}
+
+@@ -113,7 +113,7 @@ char *filename;
+ dprintf(string_size %d,string_size);
+ symbol_table[i].n_un.n_strx = string_size;
+ string_size += symbol_table[i].n_length + 1;
+- fseek(fp,symbol_table[i].n_length,1);
++ fseeko(fp,symbol_table[i].n_length,1);
+ }
+ #else
+ fread((char *)&symbol_table[i], SYMESZ, 1, fp);
+@@ -127,14 +127,14 @@ char *filename;
+ strings follow symbol table! */
+ #ifndef HPUX
+ #ifdef N_STROFF
+- fseek(fp,N_STROFF(my_header),0);
++ fseeko(fp,N_STROFF(my_header),0);
+ #endif
+ if (fread((char *)&string_size, 4, 1, fp) > 0) {
+ my_string_table = malloc(string_size);
+ if(debug)
+- {printf(" string_size is %d fseek %d ",string_size,fseek(fp,string_size-1,1));
+- printf(" fseek back %d ",fseek(fp,1-string_size,1));};
+- fseek(fp, -4, 1);
++ {printf(" string_size is %d fseek %zd ",string_size,fseeko(fp,string_size-1,1));
++ printf(" fseek back %d ",fseeko(fp,1-string_size,1));};
++ fseeko(fp, -4, 1);
+ if(string_size!=(fread(my_string_table, 1, string_size, fp)))
+ {dprintf( string_size was %d ,string_size);
+ perror("rsym could not read bad string table") ;
+@@ -149,10 +149,10 @@ char *filename;
+ int slen;
+ p = my_string_table=malloc((unsigned int)string_size);
+ dprintf( string table leng = %d, string_size);
+- fseek(fp,(int)( LESYM_OFFSET(my_header)), 0);
++ fseeko(fp,(off_t)( LESYM_OFFSET(my_header)), 0);
+ for (i = 0; i < nsyms; i++)
+ {
+- fseek(fp,SYMESZ, 1);
++ fseeko(fp,SYMESZ, 1);
+ slen = symbol_table[i].n_length;
+ dprintf( slen = %d,slen);
+ fread(p,slen,1,fp);
+@@ -182,7 +182,7 @@ char *out;
+ symout=fopen(out,"wr");
+ if (!symout)
+ {perror(out); exit(1);};
+- fseek(symout,sizeof(struct lsymbol_table),0);
++ fseeko(symout,sizeof(struct lsymbol_table),0);
+ end = symbol_table + nsyms;
+ for (p = symbol_table; p < end; p++) {
+ /*
+@@ -219,7 +219,7 @@ char *out;
+ dprintf( index , (int) (p - symbol_table) / sizeof(struct syment));
+ p = p + NUM_AUX(p); }
+ }
+- fseek(symout,0,0);
++ fseeko(symout,0,0);
+ fwrite(&tab,sizeof(tab),1,symout);
+ fclose(symout);
+ #ifdef AIX3
+@@ -323,7 +323,7 @@ char *out;
+ symin=fopen(out,"w");
+ if(symin==0) perror("can't open");
+ fwrite(&tab,sizeof(tab),1,symin);
+- fseek(symin,sizeof(tab),0);
++ fseeko(symin,sizeof(tab),0);
+ {int i,j;
+ unsigned short k;
+ for (i=0 ; i < tab.n_symbols ; i++)
+--- ./unixport/rsym_elf.c.orig 2004-05-03 15:35:59.000000000 -0600
++++ ./unixport/rsym_elf.c 2013-05-13 14:46:33.930671142 -0600
+@@ -147,7 +147,7 @@ get_section(fp,name)
+ else
+ shndx = get_section_number(name);
+ {
+- fseek(fp,SECTION_H(shndx).sh_offset,SEEK_SET);
++ fseeko(fp,SECTION_H(shndx).sh_offset,SEEK_SET);
+ ans = malloc(SECTION_H(shndx).sh_size);
+ fread(ans,SECTION_H(shndx).sh_size,1,fp);
+ return ans;
+@@ -173,7 +173,7 @@ char *filename;
+ }
+
+ fread(&eheader,sizeof(eheader),1,fp);
+- fseek(fp,eheader.e_ehsize,SEEK_SET);
++ fseeko(fp,eheader.e_ehsize,SEEK_SET);
+ fread(&pheader,sizeof(pheader),1,fp);
+
+ if(ELFMAG0 != eheader.e_ident[0]){
+@@ -182,7 +182,7 @@ char *filename;
+
+ section_headers = (void *)malloc(sizeof(ElfW(Shdr))*
+ (1+ eheader.e_shnum));
+- fseek(fp,eheader.e_shoff,0);
++ fseeko(fp,eheader.e_shoff,0);
+ for (i=0 ; i< eheader.e_shnum ; i++)
+ fread(§ion_headers[i],eheader.e_shentsize,1,fp);
+
+@@ -196,7 +196,7 @@ char *filename;
+ sizeof(struct syment) and SYMESZ are not always the same.
+ */
+
+- if(fseek(fp,(int)SECTION_H(symbol_index).sh_offset,0))
++ if(fseeko(fp,(off_t)SECTION_H(symbol_index).sh_offset,0))
+ {fprintf(stderr,"seek error");
+ exit(1);}
+
+@@ -242,7 +242,7 @@ char *out;
+ symout=fopen(out,"wr");
+ if (!symout)
+ {perror(out); exit(1);};
+- fseek(symout,sizeof(struct lsymbol_table),0);
++ fseeko(symout,sizeof(struct lsymbol_table),0);
+ end = symbol_table + nsyms;
+ for (p = symbol_table; p < end; p++) {
+ /*
+@@ -300,7 +300,7 @@ char *out;
+ dprintf( index , (int) (p - symbol_table) / sizeof(STRUCT_SYMENT));
+ p = p + NUM_AUX(p); }
+ }
+- fseek(symout,0,0);
++ fseeko(symout,0,0);
+ fwrite(&tab,sizeof(tab),1,symout);
+ fclose(symout);
+ #ifdef AIX3
+--- ./configure.in.orig 2013-05-13 14:45:23.256804964 -0600
++++ ./configure.in 2013-05-13 14:46:51.387638090 -0600
+@@ -425,7 +425,7 @@ AC_USE_SYSTEM_EXTENSIONS
+ AC_PROG_CC
+ AC_PROG_CPP
+ AC_SUBST(CC)
+-
++AC_SYS_LARGEFILE
+
+ # can only test for numbers -- CM
+ # if test "${GCC}" -eq "yes" ; then
+--- ./configure.orig 2013-05-13 14:45:23.258804961 -0600
++++ ./configure 2013-05-13 14:46:55.322630640 -0600
+@@ -763,6 +763,7 @@ enable_static
+ enable_pic
+ enable_oldgmp
+ enable_dynsysgmp
++enable_largefile
+ with_x
+ enable_readline
+ enable_ansi
+@@ -1428,6 +1429,7 @@ Optional Features:
+
+ --enable-dynsysgmp will link against the system libgmp3 overriding certain functions with patched versions from the local source
+
++ --disable-largefile omit support for large files
+ --enable-readline enables command line completion via the readline library
+ --enable-ansi builds a large gcl aiming for ansi compliance,
+ --disable-ansi builds the smaller traditional CLtL1 image
+@@ -5067,6 +5069,205 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
++# Check whether --enable-largefile was given.
++if test "${enable_largefile+set}" = set; then :
++ enableval=$enable_largefile;
++fi
++
++if test "$enable_largefile" != no; then
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
++$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
++if ${ac_cv_sys_largefile_CC+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_cv_sys_largefile_CC=no
++ if test "$GCC" != yes; then
++ ac_save_CC=$CC
++ while :; do
++ # IRIX 6.2 and later do not support large files by default,
++ # so use the C compiler's -n32 option if that helps.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++ if ac_fn_c_try_compile "$LINENO"; then :
++ break
++fi
++rm -f core conftest.err conftest.$ac_objext
++ CC="$CC -n32"
++ if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_sys_largefile_CC=' -n32'; break
++fi
++rm -f core conftest.err conftest.$ac_objext
++ break
++ done
++ CC=$ac_save_CC
++ rm -f conftest.$ac_ext
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
++$as_echo "$ac_cv_sys_largefile_CC" >&6; }
++ if test "$ac_cv_sys_largefile_CC" != no; then
++ CC=$CC$ac_cv_sys_largefile_CC
++ fi
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
++$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
++if ${ac_cv_sys_file_offset_bits+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ while :; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_sys_file_offset_bits=no; break
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#define _FILE_OFFSET_BITS 64
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_sys_file_offset_bits=64; break
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ ac_cv_sys_file_offset_bits=unknown
++ break
++done
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
++$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
++case $ac_cv_sys_file_offset_bits in #(
++ no | unknown) ;;
++ *)
++cat >>confdefs.h <<_ACEOF
++#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
++_ACEOF
++;;
++esac
++rm -rf conftest*
++ if test $ac_cv_sys_file_offset_bits = unknown; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
++$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
++if ${ac_cv_sys_large_files+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ while :; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_sys_large_files=no; break
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#define _LARGE_FILES 1
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_sys_large_files=1; break
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ ac_cv_sys_large_files=unknown
++ break
++done
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
++$as_echo "$ac_cv_sys_large_files" >&6; }
++case $ac_cv_sys_large_files in #(
++ no | unknown) ;;
++ *)
++cat >>confdefs.h <<_ACEOF
++#define _LARGE_FILES $ac_cv_sys_large_files
++_ACEOF
++;;
++esac
++rm -rf conftest*
++ fi
++
++
++fi
+
+
+ # can only test for numbers -- CM
diff --git a/gcl-2.6.8-texinfo.patch b/gcl-2.6.8-texinfo.patch
index 039453b..77a2dab 100644
--- a/gcl-2.6.8-texinfo.patch
+++ b/gcl-2.6.8-texinfo.patch
@@ -1,16 +1,5 @@
---- ./info/debug.texi.orig 1999-12-06 15:44:04.000000000 -0700
-+++ ./info/debug.texi 2013-03-21 14:19:09.818219642 -0600
-@@ -87,7 +87,7 @@ M-c continues execution.
-
- Keywords typed at top level, in the debug loop have
- a special meaning:
-- at itemize @asis
-+ at itemize
-
- @item
- :delete [n1] [n2] .. -- delete all break points or just n1,n2
--- ./info/chap-a.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-a.texi 2013-03-21 14:29:52.019161525 -0600
++++ ./info/chap-a.texi 2013-05-13 10:11:19.756813225 -0600
@@ -47,7 +47,7 @@ For a list of deprecated features, see @
@subsection Removed Types
@@ -124,7 +113,7 @@
are no longer required. It is valid for @i{packages} with one or more of these
names to be provided by a @i{conforming implementation} as extensions.
--- ./info/chap-4.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-4.texi 2013-03-21 14:25:00.365647351 -0600
++++ ./info/chap-4.texi 2013-05-13 10:11:19.757813220 -0600
@@ -61,7 +61,7 @@ For more information, see @ref{Generic F
The @i{class} of the @i{class} of an @i{object}
@@ -258,7 +247,7 @@
depends on the @i{classes} or identities of the @i{arguments}
supplied to it. A generic function object contains a set of
--- ./info/chap-13.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-13.texi 2013-03-21 14:26:06.624538420 -0600
++++ ./info/chap-13.texi 2013-05-13 10:11:19.758813215 -0600
@@ -30,7 +30,7 @@
@subsection Introduction to Characters
@@ -304,8 +293,8 @@
.
@i{Non-graphic} @i{characters} are sometimes informally called
---- ./info/gcl-si.texi.orig 2005-04-30 22:12:37.000000000 -0600
-+++ ./info/gcl-si.texi 2013-03-21 14:19:09.818219642 -0600
+--- ./info/gcl-si.texi.orig 2013-05-11 07:35:20.000000000 -0600
++++ ./info/gcl-si.texi 2013-05-13 10:11:19.758813215 -0600
@@ -10,6 +10,7 @@
@c @smallbook
@@ -314,100 +303,8 @@
@synindex vr fn
@c to update the menus do:
---- ./info/widgets.texi.orig 1999-12-06 15:44:05.000000000 -0700
-+++ ./info/widgets.texi 2013-03-21 14:19:09.820219640 -0600
-@@ -210,7 +210,7 @@ This command is ignored if the button's
-
- Tk automatically creates class bindings for buttons that give them
- the following default behavior:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- The button activates whenever the mouse passes over it and deactivates
-@@ -414,7 +414,7 @@ element of the listbox. Returns an empt
-
- Tk automatically creates class bindings for listboxes that give them
- the following default behavior:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- When button 1 is pressed over a listbox, the element underneath the
-@@ -2482,7 +2482,7 @@ window of the topmost pixel in the entry
-
- Tk automatically creates class bindings for menus that give them
- the following default behavior:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- When the mouse cursor enters a menu, the entry underneath the mouse
-@@ -2949,7 +2949,7 @@ modifying its associated variable to ref
-
- Tk automatically creates class bindings for check buttons that give them
- the following default behavior:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- The check button activates whenever the mouse passes over it and deactivates
-@@ -3145,7 +3145,7 @@ use ``@i{pathName }@b{:configure :state
-
- Tk automatically creates class bindings for menu buttons that give them
- the following default behavior:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- A menu button activates whenever the mouse passes over it and deactivates
-@@ -3560,7 +3560,7 @@ Text widgets support the standard X sele
- Selection support is implemented via tags.
- If the @b{exportSelection} option for the text widget is true
- then the @b{sel} tag will be associated with the selection:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- Whenever characters are tagged with @b{sel} the text widget
-@@ -3892,7 +3892,7 @@ If the @b{:pickplace}@r{ option isn't sp
- appear at the top of the window.
- If @b{:pickplace} is specified then the widget chooses where
- @i{what} appears in the window:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- If @i{what} is already visible somewhere in the window then the
-@@ -3920,7 +3920,7 @@ This command returns an empty string.
-
- Tk automatically creates class bindings for texts that give them
- the following default behavior:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- Pressing mouse button 1 in an text positions the insertion cursor
-@@ -4217,7 +4217,7 @@ at the left edge of the window. Returns
- Tk automatically creates class bindings for entries that give them
- the following default behavior:
-
-- at itemize @asis
-+ at itemize
- @item
- [1]
- Clicking mouse button 1 in an entry positions the insertion cursor
-@@ -4908,7 +4908,7 @@ to this widget.
-
- Tk automatically creates class bindings for radio buttons that give them
- the following default behavior:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- The radio button activates whenever the mouse passes over it and deactivates
--- ./info/chap-11.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-11.texi 2013-03-21 14:25:53.269560466 -0600
++++ ./info/chap-11.texi 2013-05-13 10:11:19.759813211 -0600
@@ -22,11 +22,11 @@
@subsection Introduction to Packages
@@ -518,7 +415,7 @@
The @t{KEYWORD} @i{package} contains @i{symbols}, called @i{keywords}_1,
that are typically used as special markers in @i{programs}
--- ./info/chap-15.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-15.texi 2013-03-21 14:26:21.461513879 -0600
++++ ./info/chap-15.texi 2013-05-13 10:11:19.760813206 -0600
@@ -51,7 +51,7 @@ less than the corresponding @i{array} @i
@subsubsection Array Dimensions
@@ -604,7 +501,7 @@
@i{Bit vectors} are of @i{type} @b{bit-vector}.
Figure 15--3 lists some @i{defined names} for operations on @i{bit arrays}.
--- ./info/chap-25.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-25.texi 2013-03-21 14:28:52.041262518 -0600
++++ ./info/chap-25.texi 2013-05-13 10:11:19.761813201 -0600
@@ -141,7 +141,7 @@ Figure 25--4 shows @i{defined names} rel
@subsubsection Decoded Time
@@ -633,7 +530,7 @@
in terms of an @i{implementation-dependent} unit called an @i{internal time unit}.
Relative time is measured as a number of these units.
--- ./info/chap-24.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-24.texi 2013-03-21 14:28:44.590275035 -0600
++++ ./info/chap-24.texi 2013-05-13 10:11:19.762813196 -0600
@@ -24,20 +24,20 @@
To @b{load} a @i{file} is to treat its contents as @i{code}
and @i{execute} that @i{code}.
@@ -693,7 +590,7 @@
are used by the @t{#+} and @t{#-} @i{reader macros} in order to
direct conditional @i{reading} of @i{expressions} by the @i{Lisp reader}.
--- ./info/chap-3.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-3.texi 2013-03-21 14:24:49.901664442 -0600
++++ ./info/chap-3.texi 2013-05-13 10:11:19.765813181 -0600
@@ -24,7 +24,7 @@ from direct interpretation of a @i{form}
to invocation of @i{compiled code} produced by a @i{compiler}.
@@ -1327,49 +1224,18 @@
@subsubheading Arguments::
---- ./info/gcl-tk.texi.orig 2002-02-19 12:21:19.000000000 -0700
-+++ ./info/gcl-tk.texi 2013-03-21 14:19:09.820219640 -0600
-@@ -2,6 +2,7 @@
- @c -*-texinfo-*-
+--- ./info/gcl-tk.texi.orig 2013-05-11 07:35:21.000000000 -0600
++++ ./info/gcl-tk.texi 2013-05-13 10:12:56.274561378 -0600
+@@ -10,6 +10,7 @@
+
@c @smallbook
@setfilename gcl-tk.info
+ at settitle GCL TK Manual
+ @synindex vr fn
@c to update the menus do:
- @c (texinfo-multiple-files-update "gcl-tk.texi" t t)
---- ./info/si-defs.texi.orig 2005-05-01 15:16:21.000000000 -0600
-+++ ./info/si-defs.texi 2013-03-21 14:19:09.821219638 -0600
-@@ -992,7 +992,7 @@ will be called automatically as needed.
- @end menu
-
- @node Regular Expressions, , System Definitions, System Definitions
-- at subsection Regular Expressions
-+ at section Regular Expressions
-
- The function @code{string-match} (*Index string-match::) is used to
- match a regular expression against a string. If the variable
-@@ -1085,7 +1085,7 @@ from left to right across the input stri
- attempts to match longer pieces of the input string before shorter
- ones. More specifically, the following rules apply in decreasing
- order of priority:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- If a regular expression could match two different parts of an input string
---- ./info/compile.texi.orig 2003-12-30 09:23:30.000000000 -0700
-+++ ./info/compile.texi 2013-03-21 14:19:09.821219638 -0600
-@@ -128,7 +128,7 @@ are given. Note that most common lisps
-
- Defentry, clines, and defcfun also result in machine code being generated.
-
-- at unnumbered subsection Evaluation at Compile time
-+ at unnumberedsubsec Evaluation at Compile time
-
- In GCL the eval-when behaviour was changed in order to allow
- more efficient init code, and also to bring it into line with the resolution
--- ./info/chap-23.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-23.texi 2013-03-21 14:28:38.527285216 -0600
++++ ./info/chap-23.texi 2013-05-13 10:11:19.766813176 -0600
@@ -1174,7 +1174,7 @@ Controls the interpretation of tokens by
@i{integers} or @i{ratios}.
@@ -1380,7 +1246,7 @@
is the radix in which @i{integers} and
@i{ratios} are to be read by the @i{Lisp reader}.
--- ./info/chap-19.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-19.texi 2013-03-21 14:26:36.629488740 -0600
++++ ./info/chap-19.texi 2013-05-13 10:11:19.767813172 -0600
@@ -37,7 +37,7 @@ as @i{namestrings} and as @i{pathnames}.
@subsection Namestrings as Filenames
@@ -1474,7 +1340,7 @@
@format
@group
--- ./info/chap-17.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-17.texi 2013-03-21 14:26:30.043499662 -0600
++++ ./info/chap-17.texi 2013-05-13 10:11:19.767813172 -0600
@@ -15,7 +15,7 @@
@c including concept-sequences
@@ -1530,7 +1396,7 @@
returns a @i{generalized boolean} representing @i{false}.
--- ./info/chap-9.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-9.texi 2013-03-21 14:41:03.631142626 -0600
++++ ./info/chap-9.texi 2013-05-13 10:11:19.768813167 -0600
@@ -212,7 +212,7 @@ implicitly. Macros such as @b{ccase}, @
A number of the functions in the condition system take arguments which
@@ -1596,7 +1462,7 @@
@code{abort} @i{@r{&optional} condition}
@result{} #<NoValue>
--- ./info/chap-1.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-1.texi 2013-03-21 14:24:26.888701908 -0600
++++ ./info/chap-1.texi 2013-05-13 10:11:19.769813162 -0600
@@ -419,7 +419,7 @@ used in this manual.
@node Notational Conventions, Error Terminology, Definitions, Definitions
@subsection Notational Conventions
@@ -1862,7 +1728,7 @@
@format
@group
--- ./info/chap-2.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-2.texi 2013-03-21 14:24:40.741679375 -0600
++++ ./info/chap-2.texi 2013-05-13 10:11:19.770813157 -0600
@@ -20,7 +20,7 @@ interprets them as a printed representat
constructs that @i{object}, and returns it.
@@ -1981,7 +1847,7 @@
the next @i{character} is to be treated as
an @i{alphabetic}_2 @i{character}
--- ./info/chap-5.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-5.texi 2013-03-21 14:33:12.303822161 -0600
++++ ./info/chap-5.texi 2013-05-13 10:11:19.771813152 -0600
@@ -24,10 +24,10 @@
@subsection Overview of Places and Generalized Reference
@@ -2082,7 +1948,7 @@
See @ref{VALUES Forms as Places}.
--- ./info/chap-22.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-22.texi 2013-03-21 14:28:33.969292866 -0600
++++ ./info/chap-22.texi 2013-05-13 10:11:19.772813147 -0600
@@ -79,7 +79,7 @@ program-readable.
A number of option variables, called
@@ -2254,7 +2120,7 @@
The @i{value} of @b{*print-base*} is the @i{radix} in which the printer
--- ./info/chap-21.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-21.texi 2013-03-21 14:26:52.570462270 -0600
++++ ./info/chap-21.texi 2013-05-13 10:11:19.773813142 -0600
@@ -24,19 +24,19 @@
@subsection Introduction to Streams
@@ -2351,7 +2217,7 @@
Certain @i{stream variables} are defined by this specification
--- ./info/chap-20.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-20.texi 2013-03-21 14:26:47.604470522 -0600
++++ ./info/chap-20.texi 2013-05-13 10:11:19.774813138 -0600
@@ -16,13 +16,13 @@
This section describes the @r{Common Lisp} interface to file systems.
The model used by this interface assumes
@@ -2392,7 +2258,7 @@
The @i{truename} of a @i{file} may differ from other @i{filenames}
--- ./info/chap-7.texi.orig 2003-12-30 09:50:01.000000000 -0700
-+++ ./info/chap-7.texi 2013-03-21 14:40:41.320170642 -0600
++++ ./info/chap-7.texi 2013-05-13 10:11:19.775813133 -0600
@@ -22,7 +22,7 @@ The @i{generic function} @b{make-instanc
@i{instance} of a @i{class}. The first argument is a @i{class} or
the @i{name} of a @i{class}, and the remaining arguments form an
@@ -2613,7 +2479,7 @@
@end example
--- ./info/chap-12.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-12.texi 2013-03-21 14:26:01.607546707 -0600
++++ ./info/chap-12.texi 2013-05-13 10:11:19.776813128 -0600
@@ -4823,9 +4823,9 @@ in a given @i{place}.
The order of evaluation, when an @b{ldb} form is supplied
to @b{setf}, is exactly left-to-right.
@@ -2627,7 +2493,7 @@
The effect is to perform a @b{dpb} operation
and then store the result back into the @i{place}.
--- ./info/chap-26.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-26.texi 2013-03-21 14:28:56.869254403 -0600
++++ ./info/chap-26.texi 2013-05-13 10:11:19.780813108 -0600
@@ -122,7 +122,7 @@ transitive verb
@subheading @b{Non-alphabetic}
@table @asis
@@ -8143,7 +8009,7 @@
@i{v.t.} (@i{values})
to produce the @i{values} as the result of @i{evaluation}.
--- ./info/chap-6.texi.orig 2003-11-24 09:31:36.000000000 -0700
-+++ ./info/chap-6.texi 2013-03-21 14:25:21.710612387 -0600
++++ ./info/chap-6.texi 2013-05-13 10:11:19.781813103 -0600
@@ -373,9 +373,9 @@ For more information, see @ref{Miscellan
@node Order of Execution, Destructuring, Summary of Miscellaneous Clauses, Overview of the Loop Facility
@subsubsection Order of Execution
@@ -8168,184 +8034,3 @@
Consider:
---- ./info/system.texi.orig 1999-12-06 15:44:05.000000000 -0700
-+++ ./info/system.texi 2013-03-21 14:19:09.822219637 -0600
-@@ -285,11 +285,11 @@ Package:LISP
-
- Displays information about storage allocation in the following format.
-
-- at itemize @asis
-+ at itemize
-
- @item
- for each type class
-- at itemize @asis
-+ at itemize
- @item
- the number of pages so-far allocated for the type class
- @item
---- ./info/chap-14.texi.orig 2002-10-18 04:31:14.000000000 -0600
-+++ ./info/chap-14.texi 2013-03-21 14:26:11.247530778 -0600
-@@ -14,7 +14,7 @@
- @c including concept-conses
-
- A @i{cons}
-- at IGindex{cons}
-+ at IGindex cons
- is a compound data @i{object}
- having two components called the @i{car} and the @i{cdr}.
-
-@@ -43,13 +43,13 @@ support each of these various views.
- @subsection Conses as Trees
-
- A @i{tree}
-- at IGindex{tree}
-+ at IGindex tree
- is a binary recursive data structure made up of
- @i{conses} and @i{atoms}:
- the @i{conses} are themselves also @i{trees}
- (sometimes called ``subtrees'' or ``branches''), and the @i{atoms}
- are terminal nodes (sometimes called @i{leaves}
-- at IGindex{leaves}
-+ at IGindex leaves
- ).
- Typically, the @i{leaves} represent data while the branches
- establish some relationship among that data.
-@@ -91,30 +91,30 @@ if that @i{tree} is circular.
- @subsection Conses as Lists
-
- A @i{list}
-- at IGindex{list}
-+ at IGindex list
- is a chain of @i{conses} in which the @i{car} of each
- @i{cons} is an @i{element} of the @i{list},
- and the @i{cdr} of each @i{cons} is either the next
- link in the chain or a terminating @i{atom}.
-
- A @i{proper list}
-- at IGindex{proper list}
-+ at IGindex proper list
- is a @i{list} terminated by the @i{empty list}.
- The @i{empty list} is a @i{proper list}, but is not a @i{cons}.
-
- An @i{improper list}
-- at IGindex{improper list}
-+ at IGindex improper list
- is a @i{list} that is not a @i{proper list};
- that is, it is a @i{circular list} or a @i{dotted list}.
-
- A @i{dotted list}
-- at IGindex{dotted list}
-+ at IGindex dotted list
- is a @i{list} that has a terminating @i{atom}
- that is not the @i{empty list}. A @i{non-nil} @i{atom} by itself
- is not considered to be a @i{list} of any kind---not even a @i{dotted list}.
-
- A @i{circular list}
-- at IGindex{circular list}
-+ at IGindex circular list
- is a chain of @i{conses} that has no termination
- because some @i{cons} in the chain is the @i{cdr} of a later @i{cons}.
-
-@@ -147,7 +147,7 @@ because some @i{cons} in the chain is th
- @subsubsection Lists as Association Lists
-
- An @i{association list}
-- at IGindex{association list}
-+ at IGindex association list
- is a @i{list} of @i{conses}
- representing an association of @i{keys} with @i{values},
- where the @i{car} of each @i{cons} is the @i{key}
-@@ -269,24 +269,24 @@ if that @i{list} is @i{circular}.
- @subsubheading Description::
-
- A @i{list}
-- at IGindex{list}
-+ at IGindex list
- is a chain of @i{conses} in which the @i{car} of each
- @i{cons} is an @i{element} of the @i{list}, and the @i{cdr} of
- each @i{cons} is either the next link in the chain or a terminating
- @i{atom}.
-
- A @i{proper list}
-- at IGindex{proper list}
-+ at IGindex proper list
- is a chain of @i{conses} terminated by
- the @i{empty list}
-- at IGindex{empty list}
-+ at IGindex empty list
- , @t{()}, which is itself a @i{proper list}.
- A @i{dotted list}
-- at IGindex{dotted list}
-+ at IGindex dotted list
- is a @i{list} which has a terminating @i{atom}
- that is not the @i{empty list}.
- A @i{circular list}
-- at IGindex{circular list}
-+ at IGindex circular list
- is a chain of @i{conses} that has no termination
- because some @i{cons} in the chain is the @i{cdr} of a later @i{cons}.
-
---- ./info/control.texi.orig 2001-12-18 13:44:23.000000000 -0700
-+++ ./info/control.texi 2013-03-21 14:19:09.823219635 -0600
-@@ -926,7 +926,7 @@ At any given time, the only menus availa
- are those associated with the top-level window containing the
- input focus.
- Menu traversal is initiated by one of the following actions:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- If <F10> is typed, then the first menu button in the list for the
-@@ -950,7 +950,7 @@ its first entry.
-
- Once a menu has been posted, the input focus is switched to that
- menu and the following actions are possible:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- Typing <ESC> or clicking mouse button 1 outside the menu button or
-@@ -2046,7 +2046,7 @@ This area is called the @i{cavity}; for
- is the entire area of the master.
-
- For each slave the packer carries out the following steps:
-- at itemize @asis
-+ at itemize
- @item
- [1]
- The packer allocates a rectangular @i{parcel} for the slave
---- ./info/form.texi.orig 1999-12-06 15:44:04.000000000 -0700
-+++ ./info/form.texi 2013-03-21 14:19:09.824219633 -0600
-@@ -45,7 +45,7 @@ Syntax:
- Replaces the value in PLACE with the value of NEWVALUE, from left to right.
- Returns the value of the last NEWVALUE. Each PLACE may be any one of the
- following:
-- at itemize @asis
-+ at itemize
- @item
- A symbol that names a variable.
- @item
---- ./info/makefile.orig 2006-10-25 15:37:07.000000000 -0600
-+++ ./info/makefile 2013-03-21 14:19:09.824219633 -0600
-@@ -58,17 +58,17 @@ gcl.info: ${GCL_MAN} gcl.texi
- # $(HTML_CMD) gcl.texi
-
- gcl-si/index.html: ${GCL_SI} gcl-si.texi
-- mkdir -p $@
-+ mkdir -p gcl-si
- touch $@
- -$(HTML_CMD) gcl-si.texi
-
- gcl-tk/index.html: ${GCL_TK} gcl-tk.texi
-- mkdir -p $@
-+ mkdir -p gcl-tk
- touch $@
- -$(HTML_CMD) gcl-tk.texi
-
- gcl/index.html: gcl.texi
-- mkdir -p $@
-+ mkdir -p gcl
- touch $@
- -$(HTML_CMD) gcl.texi
-
diff --git a/gcl-2.6.8-unrandomize.patch b/gcl-2.6.8-unrandomize.patch
index 55785f8..2568fd7 100644
--- a/gcl-2.6.8-unrandomize.patch
+++ b/gcl-2.6.8-unrandomize.patch
@@ -62,9 +62,9 @@
b = (void *) malloc(1000);
fp = fopen("conftest1","w");
---- ./configure.orig 2012-07-26 09:50:32.725227589 -0600
-+++ ./configure 2012-07-26 09:52:50.676012289 -0600
-@@ -7065,9 +7065,11 @@ else
+--- ./configure.orig 2013-05-10 10:16:24.215085642 -0600
++++ ./configure 2013-05-10 10:19:55.934751565 -0600
+@@ -7086,9 +7086,11 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -77,7 +77,7 @@
return 0;}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
-@@ -7099,12 +7101,11 @@ else
+@@ -7120,12 +7122,11 @@ else
/* end confdefs.h. */
#include <stdio.h>
@@ -92,7 +92,7 @@
if (!(f=fopen("conftest1","w"))) return -1;
fprintf(f,"%u",sbrk(0));
return 0;}
-@@ -7128,12 +7129,11 @@ else
+@@ -7149,12 +7150,11 @@ else
/* end confdefs.h. */
#include <stdio.h>
@@ -107,7 +107,7 @@
if (!(f=fopen("conftest1","w"))) return -1;
fprintf(f,"%u",sbrk(0));
return 0;}
-@@ -7220,6 +7220,7 @@ else
+@@ -7241,6 +7241,7 @@ else
#include <stdio.h>
#include <stdlib.h>
@@ -115,7 +115,7 @@
void gprof_cleanup() {}
int
-@@ -7228,9 +7229,7 @@ main(int argc,char * argv[],char *envp[]
+@@ -7249,9 +7250,7 @@ main(int argc,char * argv[],char *envp[]
char *b,*b1;
FILE *fp;
diff --git a/gcl.spec b/gcl.spec
index 0b7d445..e3399f4 100644
--- a/gcl.spec
+++ b/gcl.spec
@@ -8,11 +8,11 @@
%global __global_cflags %(printf %%s '%__global_cflags' | sed -r 's/ -fstack-protector( --param=ssp-buffer-size=[[:digit:]]+)?//')
# Prerelease of 2.6.8
-%global alphatag 20130126cvs
+%global alphatag 20130511cvs
Name: gcl
Version: 2.6.8
-Release: 0.15.%{alphatag}%{?dist}
+Release: 0.16.%{alphatag}%{?dist}
Summary: GNU Common Lisp
Group: Development/Languages
@@ -21,7 +21,7 @@ URL: http://www.gnu.org/software/gcl/
# The source for this package was pulled from upstream's CVS repository. Use
# the following commands to generate the tarball:
# cvs -d:pserver:anonymous at cvs.savannah.gnu.org:/sources/gcl export \
-# -r Version_2_6_8pre -D 2013-01-27 -d gcl-2.6.8 gcl
+# -r Version_2_6_8pre -D 2013-05-12 -d gcl-2.6.8 gcl
# tar cvJf gcl-2.6.8.tar.xz gcl-2.6.8
Source0: %{name}-%{version}.tar.xz
Source1: gcl.el
@@ -89,9 +89,8 @@ Patch15: %{name}-2.6.8-man.patch
# This patch was last sent upstream on 30 Oct 2012. It provides more
# information when an unknown reloc type is encountered.
Patch16: %{name}-2.6.8-reloc-type.patch
-
-# Temporary workaround until bz 924938 is fixed
-BuildRequires: perl-Carp
+# This patch is still experimental. Enable large file support.
+Patch17: %{name}-2.6.8-largefile.patch
BuildRequires: libXaw-devel
BuildRequires: readline-devel
@@ -194,6 +193,7 @@ gcl_exec_t.
%patch14
%patch15
%patch16
+%patch17
# Don't let the configure script add compiler flags we don't want
sed -e 's/"-fomit-frame-pointer"/""/' \
@@ -350,6 +350,10 @@ fi
%changelog
+* Fri Mar 22 2013 Jerry James <loganjerry at gmail.com> - 2.6.8-0.16.20130511cvs
+- Update to 20130511 snapshot for bug fixes
+- Add -largefile patch
+
* Fri Mar 22 2013 Jerry James <loganjerry at gmail.com> - 2.6.8-0.15.20130126cvs
- Really fix FTBFS on i386 with -fno-omit-frame-pointer
- Update the -texinfo patch for texinfo 5.x
More information about the scm-commits
mailing list