[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\&#1}\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\&#1 }}
- 
--\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(&sectionheader, 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(&section_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