[gcl] Update to 20120705 snapshot. Change SELinux BR to match recent changes in Rawhide.

Jerry James jjames at fedoraproject.org
Thu Jul 26 16:42:05 UTC 2012


commit cb0eb8caaccd1929f4d37571b8e633188caff1c3
Author: Jerry James <loganjerry at gmail.com>
Date:   Thu Jul 26 10:41:46 2012 -0600

    Update to 20120705 snapshot.
    Change SELinux BR to match recent changes in Rawhide.

 gcl-2.6.8-alloca.patch         |   28 +-
 gcl-2.6.8-asm-signal-h.patch   |   16 +-
 gcl-2.6.8-extension.patch      |   48 +-
 gcl-2.6.8-infrastructure.patch | 4080 +++++++++++++++++++++++++++-------------
 gcl-2.6.8-unrandomize.patch    |   36 +-
 gcl.spec                       |   10 +-
 sources                        |    2 +-
 7 files changed, 2835 insertions(+), 1385 deletions(-)
---
diff --git a/gcl-2.6.8-alloca.patch b/gcl-2.6.8-alloca.patch
index d589503..d75e3f4 100644
--- a/gcl-2.6.8-alloca.patch
+++ b/gcl-2.6.8-alloca.patch
@@ -1,6 +1,6 @@
---- ./configure.in.orig	2012-03-28 09:53:39.622413068 -0600
-+++ ./configure.in	2012-03-28 09:55:40.957561557 -0600
-@@ -1923,33 +1923,7 @@
+--- ./configure.in.orig	2012-07-26 09:38:23.701365523 -0600
++++ ./configure.in	2012-07-26 09:46:52.534571240 -0600
+@@ -1926,33 +1926,7 @@ AC_SUBST(NOTIFY)
  
  # alloca
  
@@ -35,9 +35,9 @@
  
  # dlopen etc
  # idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
---- ./configure.orig	2012-03-28 09:53:39.628412580 -0600
-+++ ./configure	2012-03-28 09:55:40.964560988 -0600
-@@ -609,6 +609,7 @@
+--- ./configure.orig	2012-07-26 09:41:54.001037163 -0600
++++ ./configure	2012-07-26 09:47:26.043518943 -0600
+@@ -609,6 +609,7 @@ O3FLAGS
  NIFLAGS
  FINAL_CFLAGS
  BROKEN_O4_OPT
@@ -45,7 +45,7 @@
  NOTIFY
  TCL_LIBS
  TCL_DL_LIBS
-@@ -2045,6 +2046,60 @@
+@@ -2045,6 +2046,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.
-@@ -7963,81 +8018,205 @@
+@@ -7966,81 +8021,205 @@ NOTIFY=$enable_notify
  
  # alloca
  
@@ -347,8 +347,8 @@
  
  # dlopen etc
 --- ./h/gclincl.h.in.orig	2012-01-16 13:08:04.000000000 -0700
-+++ ./h/gclincl.h.in	2012-03-28 09:55:40.955561719 -0600
-@@ -54,11 +54,10 @@
++++ ./h/gclincl.h.in	2012-07-26 09:46:52.541571229 -0600
+@@ -54,11 +54,10 @@ SGC is enabled.  */
  #undef HAVE_ALLOCA 
  #endif
  
@@ -362,7 +362,7 @@
  #include <alloca.h>
  #endif
  
-@@ -261,6 +260,21 @@
+@@ -261,6 +260,21 @@ SGC is enabled.  */
  #undef HAVE_OUTPUT_BFD
  #undef HAVE_BUILTIN_CLEAR_CACHE
  
@@ -384,7 +384,7 @@
  /* Define to 1 if you have the <asm/sigcontext.h> header file. */
  #undef HAVE_ASM_SIGCONTEXT_H
  
-@@ -366,8 +380,19 @@
+@@ -366,8 +380,19 @@ SGC is enabled.  */
  /* The size of `long', as computed by sizeof. */
  #undef SIZEOF_LONG
  
@@ -405,8 +405,8 @@
 +/* Define to `unsigned int' if <sys/types.h> does not define. */
 +#undef size_t
 --- ./acconfig.h.orig	2012-01-16 13:07:59.000000000 -0700
-+++ ./acconfig.h	2012-03-28 09:55:40.953561881 -0600
-@@ -53,11 +53,10 @@
++++ ./acconfig.h	2012-07-26 09:46:52.541571229 -0600
+@@ -53,11 +53,10 @@ SGC is enabled.  */
  #undef HAVE_ALLOCA 
  #endif
  
diff --git a/gcl-2.6.8-asm-signal-h.patch b/gcl-2.6.8-asm-signal-h.patch
index 0827fc7..83f3161 100644
--- a/gcl-2.6.8-asm-signal-h.patch
+++ b/gcl-2.6.8-asm-signal-h.patch
@@ -1,6 +1,6 @@
---- ./configure.in.orig	2012-03-28 09:57:37.877068843 -0600
-+++ ./configure.in	2012-03-28 09:58:08.359593977 -0600
-@@ -1641,7 +1641,7 @@
+--- ./configure.in.orig	2012-07-26 09:52:37.218033294 -0600
++++ ./configure.in	2012-07-26 09:56:25.786676566 -0600
+@@ -1644,7 +1644,7 @@ AC_MSG_RESULT(no))
  
  #if test $use = "386-linux" ; then
  	AC_CHECK_HEADERS(asm/sigcontext.h)
@@ -9,7 +9,7 @@
  	AC_MSG_CHECKING([for sigcontext])
  	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  	#include <signal.h>
-@@ -1666,6 +1666,7 @@
+@@ -1669,6 +1669,7 @@ AC_MSG_RESULT(no))
               #include <asm/sigcontext.h>
               #endif
               #ifdef HAVE_ASM_SIGNAL_H          
@@ -17,9 +17,9 @@
               #include <asm/signal.h>
               #endif
            ]],
---- ./configure.orig	2012-03-28 09:57:37.885068193 -0600
-+++ ./configure	2012-03-28 09:58:08.366593408 -0600
-@@ -8311,7 +8311,8 @@
+--- ./configure.orig	2012-07-26 09:52:50.676012289 -0600
++++ ./configure	2012-07-26 09:56:29.994669997 -0600
+@@ -8314,7 +8314,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
-@@ -8364,6 +8365,7 @@
+@@ -8367,6 +8368,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 9bc8748..c0b9864 100644
--- a/gcl-2.6.8-extension.patch
+++ b/gcl-2.6.8-extension.patch
@@ -1,6 +1,6 @@
---- ./configure.in.orig	2012-03-28 09:55:40.957561557 -0600
-+++ ./configure.in	2012-03-28 09:56:09.658231276 -0600
-@@ -421,6 +421,7 @@
+--- ./configure.in.orig	2012-07-26 09:46:52.534571240 -0600
++++ ./configure.in	2012-07-26 09:50:25.715238529 -0600
+@@ -421,6 +421,7 @@ if test "$LDFLAGS" = "" ; then
  	LDFLAGS=" "
  fi
  
@@ -8,7 +8,7 @@
  AC_PROG_CC
  AC_PROG_CPP
  AC_SUBST(CC)
-@@ -1431,7 +1432,6 @@
+@@ -1434,7 +1435,6 @@ AC_CHECK_HEADERS(float.h,AC_DEFINE(HAVE_
  #
  AC_MSG_CHECKING([for isnormal])
  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
@@ -16,7 +16,7 @@
  	    #include <math.h>
  	    ]],[[
  	    float f;
-@@ -1449,7 +1449,6 @@
+@@ -1452,7 +1452,6 @@ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
  
  AC_MSG_CHECKING([for isfinite])
  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
@@ -24,9 +24,9 @@
  	#include <math.h>
  	]],[[
  	float f;
---- ./configure.orig	2012-03-28 09:55:40.964560988 -0600
-+++ ./configure	2012-03-28 09:56:09.667230545 -0600
-@@ -654,9 +654,9 @@
+--- ./configure.orig	2012-07-26 09:47:26.043518943 -0600
++++ ./configure	2012-07-26 09:50:32.725227589 -0600
+@@ -654,9 +654,9 @@ GMPDIR
  GMP
  MAKEINFO
  HAVE_MALLOC_ZONE_MEMALIGN
@@ -37,7 +37,7 @@
  CPP
  OBJEXT
  EXEEXT
-@@ -1585,48 +1585,6 @@
+@@ -1585,48 +1585,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 @@
+@@ -1714,6 +1672,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 @@
+@@ -3909,6 +3909,1005 @@ 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
  
@@ -1141,7 +1141,7 @@
  ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-@@ -4069,8 +5068,7 @@
+@@ -4069,8 +5068,7 @@ if test "$GCC" = "yes" ; then
  $as_echo_n "checking for CFLAG $TMPF... " >&6; }
     CFLAGS_ORI=$CFLAGS
     CFLAGS="$CFLAGS $TMPF"
@@ -1151,7 +1151,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 @@
+@@ -4356,267 +5354,7 @@ fi
  
  case $use in
       *macosx)
@@ -1420,7 +1420,7 @@
  if test "x$ac_cv_header_malloc_malloc_h" = xyes; then :
  
  else
-@@ -6941,7 +7679,6 @@
+@@ -6944,7 +7682,6 @@ else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
@@ -1428,7 +1428,7 @@
  	    #include <math.h>
  
  int
-@@ -7015,7 +7752,6 @@
+@@ -7018,7 +7755,6 @@ else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
@@ -1436,8 +1436,8 @@
  	#include <math.h>
  
  int
---- ./h/gclincl.h.in.orig	2012-03-28 09:55:40.955561719 -0600
-+++ ./h/gclincl.h.in	2012-03-28 09:56:09.657231357 -0600
+--- ./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
 @@ -1,4 +1,7 @@
  /* h/gclincl.h.in.  Generated from configure.in by autoheader.  */
 +/* Whether compiling on a glibc-based system */
@@ -1446,7 +1446,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 @@
+@@ -158,7 +161,6 @@ SGC is enabled.  */
  
  #ifdef IN_NUM_CO
  #ifdef HAVE_ISNORMAL
@@ -1454,7 +1454,7 @@
  #include <math.h>
  #define ISNORMAL(a) isnormal(a)
  #else
-@@ -179,7 +181,6 @@
+@@ -179,7 +181,6 @@ SGC is enabled.  */
  
  #ifdef NEED_ISFINITE
  #ifdef HAVE_ISFINITE
@@ -1462,7 +1462,7 @@
  #include <math.h>
  #define ISFINITE(a) isfinite(a)
  #else
-@@ -394,5 +395,37 @@
+@@ -394,5 +395,37 @@ SGC is enabled.  */
  /* Define to 1 if you have the ANSI C header files. */
  #undef STDC_HEADERS
  
@@ -1500,8 +1500,8 @@
 +
  /* Define to `unsigned int' if <sys/types.h> does not define. */
  #undef size_t
---- ./acconfig.h.orig	2012-03-28 09:55:40.953561881 -0600
-+++ ./acconfig.h	2012-03-28 09:56:09.656231438 -0600
+--- ./acconfig.h.orig	2012-07-26 09:46:52.541571229 -0600
++++ ./acconfig.h	2012-07-26 09:50:25.737238495 -0600
 @@ -1,3 +1,6 @@
 +/* Whether compiling on a glibc-based system */
 +#undef _GNU_SOURCE
@@ -1509,7 +1509,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 @@
+@@ -157,7 +160,6 @@ SGC is enabled.  */
  
  #ifdef IN_NUM_CO
  #ifdef HAVE_ISNORMAL
@@ -1517,7 +1517,7 @@
  #include <math.h>
  #define ISNORMAL(a) isnormal(a)
  #else
-@@ -178,7 +180,6 @@
+@@ -178,7 +180,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 1668762..d00bea1 100644
--- a/gcl-2.6.8-infrastructure.patch
+++ b/gcl-2.6.8-infrastructure.patch
@@ -1,12 +1,12 @@
---- ./configure.in.orig	2012-01-18 07:52:07.000000000 -0700
-+++ ./configure.in	2012-03-28 09:53:39.622413068 -0600
+--- ./configure.in.orig	2012-05-05 13:52:46.000000000 -0600
++++ ./configure.in	2012-07-26 10:03:54.941975570 -0600
 @@ -1,4 +1,4 @@
 -AC_INIT()
 +AC_INIT
  AC_PREREQ([2.61])
  AC_CONFIG_HEADER(h/gclincl.h)
  
-@@ -445,7 +445,7 @@
+@@ -445,7 +445,7 @@ if test "$GCC" = "yes" ; then
     AC_MSG_CHECKING([for CFLAG $TMPF])
     CFLAGS_ORI=$CFLAGS
     CFLAGS="$CFLAGS $TMPF"
@@ -15,7 +15,7 @@
     CFLAGS=$CFLAGS_ORI
  
  else
-@@ -629,9 +629,6 @@
+@@ -629,9 +629,6 @@ fi
  AC_MSG_CHECKING([system version (for dynamic loading)])
  if machine=`uname -m` ; then true; else machine=unknown ; fi
  
@@ -25,7 +25,7 @@
  if test -f /usr/lib/NextStep/software_version; then
      system=NEXTSTEP-`${AWK} '/3/,/3/' /usr/lib/NextStep/software_version`
  else
-@@ -672,21 +669,24 @@
+@@ -672,21 +669,24 @@ esac
  
  AC_CHECK_HEADER(unistd.h,
  	AC_CHECK_LIB(c,sysconf,
@@ -55,7 +55,7 @@
  
  #MY_SUBDIRS=
  
-@@ -703,17 +703,19 @@
+@@ -703,17 +703,19 @@ if test $use_gmp = yes ; then
   if test "$enable_dynsysgmp" = "yes" ; then
  	AC_CHECK_HEADER(gmp.h,
  		AC_CHECK_LIB(gmp,__gmpz_init,
@@ -79,7 +79,7 @@
  				MPFILES=
  				PATCHED_SYMBOLS=
  #				if test "$use" = "m68k-linux" ; then
-@@ -725,7 +727,8 @@
+@@ -725,7 +727,8 @@ if test $use_gmp = yes ; then
  				echo "int main() {return 0;}" >>foo.c
  				MP_INCLUDE=`cpp foo.c | grep /gmp.h | head -n 1 | $AWK '{print $3}' | tr -d '"'`
  				rm -f foo.c,
@@ -89,7 +89,7 @@
  			echo "Cannot use dynamic gmp lib" ,),
  		echo "Cannot use dynamic gmp lib" ,)
  fi
-@@ -772,7 +775,7 @@
+@@ -772,7 +775,7 @@ if test "$NEED_LOCAL_GMP" != "" ; then
  
  fi
  
@@ -98,7 +98,7 @@
  cat>foo.c <<EOFF
  #include <math.h>
  #include <stdio.h>
-@@ -782,60 +785,62 @@
+@@ -782,60 +785,62 @@ $CC -c foo.c -o foo.o
  if nm foo.o |grep " U " | grep "_cos" >/dev/null || nm foo.o |grep " U " | grep " _getc" >/dev/null ; then
  	LEADING_UNDERSCORE=1
  	AC_DEFINE(LEADING_UNDERSCORE)
@@ -180,7 +180,7 @@
  
   GMP=1
   AC_DEFINE(GMP)
-@@ -891,10 +896,9 @@
+@@ -891,10 +896,9 @@ if test "$enable_dlopen" = "yes" ; then
  
   	AC_CHECK_LIB(dl,dlopen,have_dl=1,have_dl=0)
   	if test "$have_dl" = "0" ; then
@@ -193,7 +193,7 @@
  dnl LIBS and TLIBS - why not merged from the beginning?
  
  	TLIBS="$TLIBS -ldl -rdynamic"
-@@ -908,15 +912,17 @@
+@@ -908,15 +912,17 @@ if test "$enable_statsysbfd" = "yes" ||
  		#
  		# Old binutils appear to need CONST defined to const
  		#
@@ -216,7 +216,7 @@
  					AC_MSG_RESULT(yes) 
  					AC_DEFINE(NEED_CONST),
  					AC_MSG_ERROR([cannot use bfd]),
-@@ -930,11 +936,12 @@
+@@ -930,11 +936,12 @@ if test "$enable_statsysbfd" = "yes" ||
  # BFD boolean syntax
  #
  
@@ -232,7 +232,7 @@
  		AC_MSG_RESULT(yes) 
  		AC_DEFINE(HAVE_BFD_BOOLEAN),
  		AC_MSG_RESULT(no),
-@@ -945,10 +952,11 @@
+@@ -945,10 +952,11 @@ if test "$enable_statsysbfd" = "yes" ||
  # bfd_link_info.output_bfd minimal configure change check
  #
  
@@ -247,7 +247,22 @@
  		AC_MSG_RESULT(yes) 
  		AC_DEFINE(HAVE_OUTPUT_BFD),
  		AC_MSG_RESULT(no),
-@@ -1073,45 +1081,47 @@
+@@ -1061,10 +1069,10 @@ case $use in
+      ia64*) ;;    #FIXME
+      *) 
+      AC_MSG_CHECKING(__builtin___clear_cache)
+-     		AC_TRY_COMPILE([],
+-			       [void *v,*ve;
+-			        __builtin___clear_cache(v,ve);
+-				],
++	  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
++				[[void *v,*ve;
++				  __builtin___clear_cache(v,ve);
++				]])],
+ 				[AC_DEFINE(HAVE_BUILTIN_CLEAR_CACHE)
+ 				 AC_MSG_RESULT(yes)],
+ 				 AC_MSG_RESULT(no));;
+@@ -1076,45 +1084,47 @@ esac
  # mechanism, in the PAGE macro.  This offset is subtracted from
  # addresses, in calculating a page for an address in the heap.
  
@@ -308,7 +323,7 @@
    /* Are we little or big endian?  Adapted from Harbison&Steele.  */
    union
    {
-@@ -1120,7 +1130,7 @@
+@@ -1123,7 +1133,7 @@ AC_TRY_RUN([int main () {
    } u;
    u.d = 1.0;
    return u.l[sizeof(double)/sizeof(int)-1] ? 0 : 1;
@@ -317,7 +332,7 @@
     AC_DEFINE(LITTLE_END),
     AC_MSG_RESULT(big),
     AC_MSG_RESULT([WARNING: ASSUMING LITTLE ENDIAN FOR CROSS COMPILING !!!]
-@@ -1133,15 +1143,16 @@
+@@ -1136,15 +1146,16 @@ AC_SUBST(LITTLE_END)
  
  AC_MSG_CHECKING([for sbrk])
  HAVE_SBRK=""
@@ -338,7 +353,7 @@
  		HAVE_SBRK=1
  		AC_MSG_RESULT(yes),
  		AC_MSG_RESULT([no: WARNING you must be able to emulate sbrk: as on mingw or macosx]),
-@@ -1153,14 +1164,15 @@
+@@ -1156,14 +1167,15 @@ if test "$HAVE_SBRK" = "1" ; then
  #		   AC_MSG_RESULT(sys/personality.h not found))
  
  	AC_MSG_CHECKING([for ADDR_NO_RANDOMIZE constant])
@@ -358,7 +373,7 @@
  			ADDR_NO_RANDOMIZE=`cat conftest1`,ADDR_NO_RANDOMIZE=0,ADDR_NO_RANDOMIZE=0)
  	if test "$ADDR_NO_RANDOMIZE" = "0" ; then
  		AC_MSG_RESULT([no, assuming 0x40000])
-@@ -1170,10 +1182,11 @@
+@@ -1173,10 +1185,11 @@ if test "$HAVE_SBRK" = "1" ; then
  	fi
  
  	AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
@@ -372,7 +387,7 @@
  
  	if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
  		AC_MSG_RESULT(yes)
-@@ -1183,8 +1196,9 @@
+@@ -1186,8 +1199,9 @@ if test "$HAVE_SBRK" = "1" ; then
  	fi
  
  	AC_MSG_CHECKING([that sbrk is (now) non-random])
@@ -384,7 +399,7 @@
  		    int main(int argc,char * argv[],char * envp[]) {
  			FILE *f;
  			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -1192,13 +1206,13 @@
+@@ -1195,13 +1209,13 @@ if test "$HAVE_SBRK" = "1" ; then
  			#endif
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
@@ -403,7 +418,7 @@
  		    int main(int argc,char * argv[],char * envp[]) {
  			FILE *f;
  			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -1206,10 +1220,9 @@
+@@ -1209,10 +1223,9 @@ if test "$HAVE_SBRK" = "1" ; then
  			#endif
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
@@ -416,7 +431,7 @@
  	fi
  	if test "$SBRK" = "$SBRK1" ; then
  		AC_MSG_RESULT(yes)
-@@ -1224,15 +1237,17 @@
+@@ -1227,15 +1240,17 @@ if test "$HAVE_SBRK" = "1" ; then
  fi
  
  # pagewidth
@@ -438,7 +453,7 @@
  AC_MSG_RESULT($PAGEWIDTH)
  AC_DEFINE_UNQUOTED(PAGEWIDTH,$PAGEWIDTH)
  AC_SUBST(PAGEWIDTH)
-@@ -1240,11 +1255,12 @@
+@@ -1243,11 +1258,12 @@ AC_SUBST(PAGEWIDTH)
  
  old_LDFLAGS="$LDFLAGS"
  LDFLAGS="$TLDFLAGS"
@@ -455,7 +470,7 @@
  int
  main(int argc,char * argv[],char *envp[])
  {
-@@ -1269,36 +1285,35 @@
+@@ -1272,36 +1288,35 @@ main(int argc,char * argv[],char *envp[]
  #endif
    fclose(fp);
    return 0;
@@ -503,7 +518,7 @@
  AC_MSG_RESULT(yes)],
  AC_MSG_RESULT(no),
  AC_MSG_RESULT(no)
-@@ -1467,7 +1482,6 @@
+@@ -1470,7 +1485,6 @@ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
  #	   To get around this problem, check for both libraries together
  #	   if -lsocket doesn't work by itself.
  #--------------------------------------------------------------------
@@ -511,7 +526,7 @@
  tcl_checkBoth=0
  AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
  if test "$tcl_checkSocket" = 1; then
-@@ -1504,8 +1518,8 @@
+@@ -1507,8 +1521,8 @@ fi
  AC_SUBST(RL_OBJS)
  AC_SUBST(RL_LIB)
  
@@ -522,7 +537,7 @@
  #include <sys/time.h>
  #include <sys/types.h>
  #include <unistd.h>
-@@ -1522,24 +1536,25 @@
+@@ -1525,24 +1539,25 @@ AC_TRY_LINK([
  #include <netinet/in.h>		/* struct in_addr, struct sockaddr_in */
  #include <arpa/inet.h>		/* inet_ntoa() */
  #include <netdb.h>		/* gethostbyname() */
@@ -555,7 +570,7 @@
  [AC_DEFINE(LISTEN_USE_FCNTL)
   AC_MSG_RESULT(yes)],
  AC_MSG_RESULT(no))
-@@ -1560,7 +1575,7 @@
+@@ -1563,7 +1578,7 @@ AC_CHECK_FUNC(_cleanup, [AC_DEFINE(USE_C
  AC_SUBST(USE_CLEANUP)
  gcl_ok=no
  
@@ -564,7 +579,7 @@
  if test $gcl_ok = yes ; then
  AC_DEFINE(ENDIAN_ALREADY_DEFINED)
  fi
-@@ -1592,32 +1607,32 @@
+@@ -1595,32 +1610,32 @@ case $system in
  esac
  
  
@@ -612,7 +627,7 @@
  [AC_DEFINE(HAVE_SIGEMT)
   AC_SUBST(HAVE_SIGEMT)
   AC_MSG_RESULT(yes)],
-@@ -1629,12 +1644,13 @@
+@@ -1632,12 +1647,13 @@ AC_MSG_RESULT(no))
  #if test $use = "386-linux" ; then
  	AC_CHECK_HEADERS(asm/sigcontext.h)
  	AC_CHECK_HEADERS(asm/signal.h)
@@ -631,7 +646,7 @@
         [
          sigcontext_works=1;
          AC_DEFINE(SIGNAL_H_HAS_SIGCONTEXT)
-@@ -1645,18 +1661,19 @@
+@@ -1648,18 +1664,19 @@ AC_MSG_RESULT(no))
           AC_MSG_RESULT(sigcontext NOT in signal.h)]
         )
         if test "$sigcontext_works" = 0 ; then
@@ -656,7 +671,7 @@
          [
          AC_DEFINE(HAVE_SIGCONTEXT)
  	AC_MSG_RESULT(sigcontext in asm files)
-@@ -1766,6 +1783,8 @@
+@@ -1769,6 +1786,8 @@ AC_SUBST(INFO_DIR)
  
  if test "$enable_tcltk" = "yes" ; then
  
@@ -665,7 +680,7 @@
  AC_MSG_CHECKING([for tcl/tk])
  
  
-@@ -1786,9 +1805,6 @@
+@@ -1789,9 +1808,6 @@ if { [file exists [file join [set dir] t
  EOF
  #cp conftest.tcl foo.tcl
  
@@ -675,7 +690,7 @@
  if test "${TCLSH}" = "" ; then true ; else
  TCL_CONFIG_PREFIX=`${TCLSH} < conftest.tcl`
  fi
-@@ -1862,7 +1878,6 @@
+@@ -1865,7 +1881,6 @@ fi
  
  fi
  
@@ -683,7 +698,7 @@
  if test "$have_ieee" = "0" ; then
   TCL_LIBS=`echo ${TCL_LIBS} | sed -e "s:-lieee::g" `
  fi
-@@ -1906,15 +1921,18 @@
+@@ -1909,15 +1924,18 @@ AC_SUBST(NOTIFY)
  
  # the time handling for unixtime, add timezone
  
@@ -706,7 +721,7 @@
    ,gcl_ok=yes, gcl_ok=no,gcl_ok=no)
   if test $gcl_ok = yes ; then
      AC_MSG_RESULT(yes)
-@@ -1933,8 +1951,6 @@
+@@ -1936,8 +1954,6 @@ if test $gcl_ok = no ; then     AC_MSG_R
  
  
  
@@ -715,7 +730,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
-@@ -1958,7 +1974,7 @@
+@@ -1961,7 +1977,7 @@ if test $gcl_ok = no ; then     AC_MSG_R
  
  # redhat/cygnus released for some reason a buggy version of gcc,
  # which no one else released.   Catch that here.
@@ -724,7 +739,7 @@
  if  2>&1 $CC -v | fgrep "gcc version 2.96" > /dev/null 
     then 
          BROKEN_O4_OPT=1
-@@ -1993,7 +2009,8 @@
+@@ -1996,7 +2012,8 @@ AC_SUBST(GNU_LD)
  if test -f h/$use.defs  ; then
  
    AC_SUBST(use)
@@ -734,9 +749,9 @@
    echo makedefc
    cat makedefc
  
---- ./configure.orig	2012-01-18 07:52:04.000000000 -0700
-+++ ./configure	2012-03-28 09:53:39.628412580 -0600
-@@ -651,10 +651,10 @@
+--- ./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
  XMKMF
  GMPDIR
  GMP
@@ -748,7 +763,7 @@
  AWK
  CPP
  OBJEXT
-@@ -4023,7 +4023,14 @@
+@@ -4023,7 +4023,14 @@ See \`config.log' for more details" "$LI
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -764,7 +779,7 @@
  _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 @@
+@@ -4269,51 +4276,6 @@ fi
  $as_echo_n "checking system version (for dynamic loading)... " >&6; }
  if machine=`uname -m` ; then true; else machine=unknown ; fi
  
@@ -816,7 +831,7 @@
  if test -f /usr/lib/NextStep/software_version; then
      system=NEXTSTEP-`${AWK} '/3/,/3/' /usr/lib/NextStep/software_version`
  else
-@@ -4711,22 +4673,29 @@
+@@ -4711,22 +4673,29 @@ fi
  { $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 :
@@ -852,7 +867,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    hz=`cat conftest1`
-@@ -4750,6 +4719,117 @@
+@@ -4750,6 +4719,117 @@ fi
  
  
  
@@ -970,7 +985,7 @@
  
  #MY_SUBDIRS=
  
-@@ -4803,25 +4883,36 @@
+@@ -4803,25 +4883,36 @@ fi
  { $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 :
@@ -1013,7 +1028,7 @@
  				MPFILES=
  				PATCHED_SYMBOLS=
  #				if test "$use" = "m68k-linux" ; then
-@@ -4834,7 +4925,8 @@
+@@ -4834,7 +4925,8 @@ if ac_fn_c_try_run "$LINENO"; then :
  				MP_INCLUDE=`cpp foo.c | grep /gmp.h | head -n 1 | $AWK '{print $3}' | tr -d '"'`
  				rm -f foo.c
  else
@@ -1023,7 +1038,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 @@
+@@ -4894,8 +4986,8 @@ $as_echo_n "checking use_gmp=yes, doing
  
  fi
  
@@ -1034,7 +1049,7 @@
  cat>foo.c <<EOFF
  #include <math.h>
  #include <stdio.h>
-@@ -4906,45 +4998,53 @@
+@@ -4906,45 +4998,53 @@ if nm foo.o |grep " U " | grep "_cos" >/
  	LEADING_UNDERSCORE=1
  	$as_echo "#define LEADING_UNDERSCORE 1" >>confdefs.h
  
@@ -1103,7 +1118,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    mpsize=`cat conftest1`
-@@ -4956,8 +5056,7 @@
+@@ -4956,8 +5056,7 @@ rm -f core *.core core.conftest.* gmon.o
  fi
  
   if test "$mpsize" = "0" ; then
@@ -1113,7 +1128,7 @@
   fi
   cat >>confdefs.h <<_ACEOF
  #define MP_LIMB_BYTES $mpsize
-@@ -4966,23 +5065,31 @@
+@@ -4966,23 +5065,31 @@ _ACEOF
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mpsize" >&5
  $as_echo "$mpsize" >&6; }
  
@@ -1150,7 +1165,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    $as_echo "#define __SHORT_LIMB 1" >>confdefs.h
-@@ -4996,23 +5103,31 @@
+@@ -4996,23 +5103,31 @@ rm -f core *.core core.conftest.* gmon.o
    conftest.$ac_objext conftest.beam conftest.$ac_ext
  fi
  
@@ -1187,7 +1202,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    $as_echo "#define __LONG_LONG_LIMB 1" >>confdefs.h
-@@ -5351,8 +5466,7 @@
+@@ -5351,8 +5466,7 @@ else
  fi
  
   	if test "$have_dl" = "0" ; then
@@ -1197,7 +1212,7 @@
   	fi
  
  	TLIBS="$TLIBS -ldl -rdynamic"
-@@ -5410,9 +5524,17 @@
+@@ -5410,9 +5524,17 @@ $as_echo_n "checking if need to define C
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1217,7 +1232,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-@@ -5423,10 +5545,18 @@
+@@ -5423,10 +5545,18 @@ else
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1238,7 +1253,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5459,18 +5589,26 @@
+@@ -5459,18 +5589,26 @@ fi
  # BFD boolean syntax
  #
  
@@ -1269,7 +1284,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5499,9 +5637,17 @@
+@@ -5499,9 +5637,17 @@ $as_echo "no" >&6; }
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1289,7 +1304,24 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5899,26 +6045,34 @@
+@@ -5832,14 +5978,14 @@ case $use in
+      *)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking __builtin___clear_cache" >&5
+ $as_echo_n "checking __builtin___clear_cache... " >&6; }
+-     		cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++	  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+ void *v,*ve;
+-			        __builtin___clear_cache(v,ve);
++				  __builtin___clear_cache(v,ve);
+ 
+   ;
+   return 0;
+@@ -5902,26 +6048,34 @@ $as_echo_n "checking sizeof struct contb
  # work around MSYS pwd result incompatibility
  if test "$use" = "mingw" ; then
  if test "$cross_compiling" = yes; then :
@@ -1329,7 +1361,7 @@
  fi
  rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
    conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -5926,26 +6080,34 @@
+@@ -5929,26 +6083,34 @@ fi
  
  else
  if test "$cross_compiling" = yes; then :
@@ -1369,7 +1401,7 @@
  fi
  rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
    conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -5972,7 +6134,11 @@
+@@ -5975,7 +6137,11 @@ $as_echo "WARNING: ASSUMING LITTLE ENDIA
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1382,7 +1414,7 @@
    /* Are we little or big endian?  Adapted from Harbison&Steele.  */
    union
    {
-@@ -5981,6 +6147,9 @@
+@@ -5984,6 +6150,9 @@ int main () {
    } u;
    u.d = 1.0;
    return u.l[sizeof(double)/sizeof(int)-1] ? 0 : 1;
@@ -1392,7 +1424,7 @@
  }
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
-@@ -6011,15 +6180,23 @@
+@@ -6014,15 +6183,23 @@ $as_echo "no: WARNING you must be able t
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1420,7 +1452,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    HAVE_SBRK=1
-@@ -6046,14 +6223,22 @@
+@@ -6049,14 +6226,22 @@ $as_echo_n "checking for ADDR_NO_RANDOMI
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1447,7 +1479,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    ADDR_NO_RANDOMIZE=`cat conftest1`
-@@ -6083,7 +6268,8 @@
+@@ -6086,7 +6271,8 @@ $as_echo_n "checking for personality(ADD
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1457,7 +1489,7 @@
  		    int main(int argc,char *argv[],char *envp[]) {
  	            #include "h/unrandomize.h"
  		    return 0;}
-@@ -6115,8 +6301,9 @@
+@@ -6118,8 +6304,9 @@ $as_echo_n "checking that sbrk is (now)
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1469,7 +1501,7 @@
  		    int main(int argc,char * argv[],char * envp[]) {
  			FILE *f;
  			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -6136,17 +6323,16 @@
+@@ -6139,17 +6326,16 @@ rm -f core *.core core.conftest.* gmon.o
  fi
  
  	if test "$SBRK" = "0" ; then
@@ -1491,7 +1523,7 @@
  		    int main(int argc,char * argv[],char * envp[]) {
  			FILE *f;
  			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -6166,9 +6352,7 @@
+@@ -6169,9 +6355,7 @@ rm -f core *.core core.conftest.* gmon.o
  fi
  
  	if test "$SBRK1" = "0" ; then
@@ -1502,7 +1534,7 @@
  	fi
  	if test "$SBRK" = "$SBRK1" ; then
  		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -6192,14 +6376,23 @@
+@@ -6195,14 +6379,23 @@ if test "$cross_compiling" = yes; then :
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1529,7 +1561,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    PAGEWIDTH=`cat conftest1`
-@@ -6221,17 +6414,18 @@
+@@ -6224,17 +6417,18 @@ _ACEOF
  
  old_LDFLAGS="$LDFLAGS"
  LDFLAGS="$TLDFLAGS"
@@ -1552,7 +1584,7 @@
  int
  main(int argc,char * argv[],char *envp[])
  {
-@@ -6276,21 +6470,28 @@
+@@ -6279,21 +6473,28 @@ $as_echo "got $dbegin" >&6; }
  LDFLAGS="$old_LDFLAGS"
  
  
@@ -1584,7 +1616,7 @@
  }
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
-@@ -6312,8 +6513,8 @@
+@@ -6315,8 +6516,8 @@ $as_echo "got $cstack_address" >&6; }
  
  
  
@@ -1595,7 +1627,7 @@
  if test "$cross_compiling" = yes; then :
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
-@@ -6321,13 +6522,19 @@
+@@ -6324,13 +6525,19 @@ $as_echo "no" >&6; }
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1617,7 +1649,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
    $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
-@@ -6833,8 +7040,6 @@
+@@ -6836,8 +7043,6 @@ fi
  #	   To get around this problem, check for both libraries together
  #	   if -lsocket doesn't work by itself.
  #--------------------------------------------------------------------
@@ -1626,7 +1658,7 @@
  tcl_checkBoth=0
  ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
  if test "x$ac_cv_func_connect" = xyes; then :
-@@ -7046,8 +7251,8 @@
+@@ -7049,8 +7254,8 @@ fi
  
  
  
@@ -1637,7 +1669,7 @@
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
-@@ -7071,7 +7276,7 @@
+@@ -7074,7 +7279,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_
  int
  main ()
  {
@@ -1646,7 +1678,7 @@
      gethostbyname("jil");
      socket(AF_INET, SOCK_STREAM, 0);
  
-@@ -7092,10 +7297,11 @@
+@@ -7095,10 +7300,11 @@ rm -f core conftest.err conftest.$ac_obj
      conftest$ac_exeext conftest.$ac_ext
  
  
@@ -1660,7 +1692,7 @@
  #include <stdio.h>
  #include <fcntl.h>
  
-@@ -7171,7 +7377,7 @@
+@@ -7174,7 +7380,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&
    $EGREP "LITTLE_ENDIAN" >/dev/null 2>&1; then :
    gcl_ok=yes
  else
@@ -1669,7 +1701,7 @@
  fi
  rm -f conftest*
  
-@@ -7215,17 +7421,17 @@
+@@ -7218,17 +7424,17 @@ $as_echo "O_NONBLOCK" >&6; }
  esac
  
  
@@ -1691,7 +1723,7 @@
    ;
    return 0;
  }
-@@ -7242,17 +7448,17 @@
+@@ -7245,17 +7451,17 @@ $as_echo "no" >&6; }
  fi
  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  
@@ -1713,7 +1745,7 @@
    ;
    return 0;
  }
-@@ -7270,17 +7476,17 @@
+@@ -7273,17 +7479,17 @@ fi
  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  
  
@@ -1735,7 +1767,7 @@
    ;
    return 0;
  }
-@@ -7325,11 +7531,12 @@
+@@ -7328,11 +7534,12 @@ fi
  
  done
  
@@ -1752,7 +1784,7 @@
  
  int
  main ()
-@@ -7357,11 +7564,12 @@
+@@ -7360,11 +7567,12 @@ $as_echo "sigcontext NOT in signal.h" >&
  fi
  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
         if test "$sigcontext_works" = 0 ; then
@@ -1768,7 +1800,7 @@
               #ifdef HAVE_ASM_SIGCONTEXT_H
               #include <asm/sigcontext.h>
               #endif
-@@ -7540,26 +7748,41 @@
+@@ -7543,26 +7751,41 @@ $as_echo "$INFO_DIR" >&6; }
  
  if test "$enable_tcltk" = "yes" ; then
  
@@ -1828,7 +1860,7 @@
  
  # Extract the first word of "tclsh", so it can be a program name with args.
  set dummy tclsh; ac_word=$2
-@@ -7599,7 +7822,26 @@
+@@ -7602,7 +7825,26 @@ $as_echo "no" >&6; }
  fi
  
  
@@ -1856,7 +1888,7 @@
  
  if test "${TCLSH}" = "" ; then true ; else
  TCL_CONFIG_PREFIX=`${TCLSH} < conftest.tcl`
-@@ -7674,42 +7916,6 @@
+@@ -7677,42 +7919,6 @@ fi
  
  fi
  
@@ -1899,7 +1931,7 @@
  if test "$have_ieee" = "0" ; then
   TCL_LIBS=`echo ${TCL_LIBS} | sed -e "s:-lieee::g" `
  fi
-@@ -7755,14 +7961,23 @@
+@@ -7758,14 +7964,23 @@ NOTIFY=$enable_notify
  
  # the time handling for unixtime, add timezone
  
@@ -1926,7 +1958,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
  
-@@ -7784,8 +7999,16 @@
+@@ -7787,8 +8002,16 @@ else
  else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
@@ -1945,7 +1977,7 @@
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
  
-@@ -7817,8 +8040,6 @@
+@@ -7820,8 +8043,6 @@ $as_echo "no" >&6; } ; fi
  
  
  
@@ -1954,7 +1986,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
-@@ -7842,8 +8063,8 @@
+@@ -7845,8 +8066,8 @@ $as_echo "no" >&6; } ; fi
  
  # redhat/cygnus released for some reason a buggy version of gcc,
  # which no one else released.   Catch that here.
@@ -1965,7 +1997,7 @@
  if  2>&1 $CC -v | fgrep "gcc version 2.96" > /dev/null
     then
          BROKEN_O4_OPT=1
-@@ -7883,7 +8104,7 @@
+@@ -7886,7 +8107,7 @@ if test -f h/$use.defs  ; then
  
    ac_config_files="$ac_config_files makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp"
  
@@ -1975,7 +2007,7 @@
  # tests run on this system so they can be shared between configure
  # scripts and configure runs, see configure's option --config-cache.
 --- ./install.sh.orig	1999-12-06 15:43:54.000000000 -0700
-+++ ./install.sh	2012-01-09 20:36:31.000000000 -0700
++++ ./install.sh	2012-07-26 09:59:36.960378201 -0600
 @@ -1,19 +1,38 @@
 -#! /bin/sh
 -#
@@ -1983,7 +2015,7 @@
  # install - install a program, script, or datafile
 -# This comes from X11R5 (mit/util/scripts/install.sh).
 +
-+scriptversion=2009-04-28.21; # UTC
++scriptversion=2011-01-19.21; # UTC
 +
 +# This originates from X11R5 (mit/util/scripts/install.sh), which was
 +# later released in X11R6 (xc/config/util/install.sh) with the
@@ -2028,7 +2060,7 @@
  #
  # 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,481 @@
+@@ -21,230 +40,488 @@
  #
  # This script is compatible with the BSD install script, but was written
  # from scratch.
@@ -2210,6 +2242,10 @@
 +    -s) stripcmd=$stripprog;;
 +
 +    -t) dst_arg=$2
++	# Protect names problematic for `test' and other utilities.
++	case $dst_arg in
++	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
++	esac
 +	shift;;
 +
 +    -T) no_target_directory=true;;
@@ -2246,6 +2282,10 @@
 +    fi
 +    shift # arg
 +    dst_arg=$arg
++    # Protect names problematic for `test' and other utilities.
++    case $dst_arg in
++      -* | [=\(\)!]) dst_arg=./$dst_arg;;
++    esac
 +  done
  fi
  
@@ -2289,7 +2329,11 @@
 -		true
 -	fi
 +if test -z "$dir_arg"; then
-+  trap '(exit $?); exit' 1 2 13 15
++  do_exit='(exit $ret); exit $ret'
++  trap "ret=129; $do_exit" 1
++  trap "ret=130; $do_exit" 2
++  trap "ret=141; $do_exit" 13
++  trap "ret=143; $do_exit" 15
  
 -# If destination is a directory, append the input filename; if your system
 -# does not like double slashes in filenames, you may need to add some logic
@@ -2327,9 +2371,9 @@
 -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
 +for src
 +do
-+  # Protect names starting with `-'.
++  # Protect names problematic for `test' and other utilities.
 +  case $src in
-+    -*) src=./$src;;
++    -* | [=\(\)!]) src=./$src;;
 +  esac
  
 -# Make sure that the destination directory exists.
@@ -2363,17 +2407,9 @@
 +      echo "$0: no destination specified." >&2
 +      exit 1
 +    fi
- 
--pathcomp=''
 +    dst=$dst_arg
-+    # Protect names starting with `-'.
-+    case $dst in
-+      -*) dst=./$dst;;
-+    esac
  
--while [ $# -ne 0 ] ; do
--	pathcomp="${pathcomp}${1}"
--	shift
+-pathcomp=''
 +    # If destination is a directory, append the input filename; won't work
 +    # if double slashes aren't ignored.
 +    if test -d "$dst"; then
@@ -2412,14 +2448,17 @@
 +		 s/.*/./; q'
 +      `
  
--	if [ ! -d "${pathcomp}" ] ;
--        then
--		$mkdirprog "${pathcomp}"
+-while [ $# -ne 0 ] ; do
+-	pathcomp="${pathcomp}${1}"
+-	shift
 +      test -d "$dstdir"
 +      dstdir_status=$?
 +    fi
 +  fi
-+
+ 
+-	if [ ! -d "${pathcomp}" ] ;
+-        then
+-		$mkdirprog "${pathcomp}"
 +  obsolete_mkdir_used=false
 +
 +  if test $dstdir_status != 0; then
@@ -2523,7 +2562,7 @@
 -	fi
 +      case $dstdir in
 +	/*) prefix='/';;
-+	-*) prefix='./';;
++	[-=\(\)!]*) prefix='./';;
 +	*)  prefix='';;
 +      esac
  
@@ -2545,7 +2584,7 @@
 +
 +      for d
 +      do
-+	test -z "$d" && continue
++	test X"$d" = X && continue
 +
 +	prefix=$prefix$d
 +	if test -d "$prefix"; then
@@ -2680,19 +2719,22 @@
 +# time-stamp-end: "; # UTC"
 +# End:
 --- ./info/texinfo.tex.orig	2002-10-26 09:14:15.000000000 -0600
-+++ ./info/texinfo.tex	2012-01-09 20:36:31.000000000 -0700
-@@ -3,15 +3,16 @@
++++ ./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{2008-04-18.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 (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
++% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-+% 2007, 2008 Free Software Foundation, Inc.
++% 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
@@ -2760,12 +2802,11 @@
  
  \message{Loading texinfo [version \texinfoversion]:}
  
-@@ -66,7 +65,14 @@
+@@ -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.
@@ -2776,7 +2817,7 @@
  \let\ptexb=\b
  \let\ptexbullet=\bullet
  \let\ptexc=\c
-@@ -76,23 +82,36 @@
+@@ -76,30 +81,46 @@
  \let\ptexend=\end
  \let\ptexequiv=\equiv
  \let\ptexexclam=\!
@@ -2791,6 +2832,7 @@
 +\let\ptexnewwrite\newwrite
 +\let\ptexnoindent=\noindent
 +\let\ptexplus=+
++\let\ptexraggedright=\raggedright
  \let\ptexrbrace=\}
 +\let\ptexslash=\/
  \let\ptexstar=\*
@@ -2803,6 +2845,7 @@
 -\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.
@@ -2820,7 +2863,17 @@
  % Set up fixed words for English if not already set.
  \ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
  \ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
-@@ -131,44 +150,119 @@
++\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
@@ -2833,15 +2886,18 @@
 +\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.
@@ -2878,36 +2934,7 @@
 +% that mark overfull boxes (in case you have decided
 +% that the text looks ok even though it passes the margin).
 +%
-+\def\finalout{\overfullrule=0pt}
-+
-+% @| 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).
-+%
-+\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\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,
@@ -2939,7 +2966,7 @@
 +  \tracingmacros2
 +  \tracingrestores1
 +  \showboxbreadth\maxdimen \showboxdepth\maxdimen
-+  \ifx\eTeXversion\undefined\else % etex gives us more logging
++  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
 +    \tracingscantokens1
 +    \tracingifs1
 +    \tracinggroups1
@@ -2950,6 +2977,14 @@
 +  \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.
@@ -2960,10 +2995,11 @@
 +  \removelastskip\penalty-100\medskip\fi\fi}
 +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
 +  \removelastskip\penalty-200\bigskip\fi\fi}
- 
- % For @cropmarks command.
++
  % Do @cropmarks to get crop marks.
-@@ -184,6 +278,50 @@
+ %
+ \newif\ifcropmarks
+@@ -184,6 +260,50 @@
  \newdimen\cornerthick \cornerthick=.3pt
  \newdimen\topandbottommargin \topandbottommargin=.75in
  
@@ -3014,7 +3050,7 @@
  % Main output routine.
  \chardef\PAGE = 255
  \output = {\onepageout{\pagecontents\PAGE}}
-@@ -201,7 +339,9 @@
+@@ -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).
@@ -3024,7 +3060,7 @@
    \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
    %
    {%
-@@ -209,11 +349,18 @@
+@@ -209,11 +331,18 @@
      % take effect in \write's, yet the group defined by the \vbox ends
      % before the \shipout runs.
      %
@@ -3036,7 +3072,7 @@
 +               % 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 
++               % it needs to be
 +               % {\code {{\tt \backslashcurfont }acronym}
      \shipout\vbox{%
 +      % Do this early so pdf references go to the beginning of the page.
@@ -3045,7 +3081,7 @@
        \ifcropmarks \vbox to \outervsize\bgroup
          \hsize = \outerhsize
          \vskip-\topandbottommargin
-@@ -237,14 +384,12 @@
+@@ -237,14 +366,12 @@
        \pagebody{#1}%
        \ifdim\ht\footlinebox > 0pt
          % Only leave this space if the footline is nonempty.
@@ -3062,7 +3098,7 @@
        \ifcropmarks
            \egroup % end of \vbox\bgroup
          \hfil\egroup % end of (centering) \line\bgroup
-@@ -262,7 +407,7 @@
+@@ -262,7 +389,7 @@
        \egroup % \vbox from first cropmarks clause
        \fi
      }% end of \shipout\vbox
@@ -3071,7 +3107,7 @@
    \advancepageno
    \ifnum\outputpenalty>-20000 \else\dosupereject\fi
  }
-@@ -275,7 +420,7 @@
+@@ -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
@@ -3080,7 +3116,7 @@
  \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
  \ifr at ggedbottom \kern-\dimen@ \vfil \fi}
  }
-@@ -295,143 +440,161 @@
+@@ -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.
  %
@@ -3303,33 +3339,21 @@
 -  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
 +  \errmessage{This command can appear only \inenvironment\temp,
 +    not \inenvironment\thisenv}%
-+}
-+\def\inenvironment#1{%
-+  \ifx#1\empty
-+    out of any environment%
-+  \else
-+    in environment \expandafter\string#1%
-+  \fi
  }
- 
+-
 -% Define the control sequence \E#1 to give an unmatched @end error.
-+% @end foo executes the definition of \Efoo.
-+% But first, it executes a specialized version of \checkenv
- %
+-%
 -\def\defineunmatchedend#1{%
 -  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-+\parseargdef\end{%
-+  \if 1\csname iscond.#1\endcsname
++\def\inenvironment#1{%
++  \ifx#1\empty
++    outside of any environment%
 +  \else
-+    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
-+    \expandafter\checkenv\csname#1\endcsname
-+    \csname E#1\endcsname
-+    \endgroup
++    in environment \expandafter\string#1%
 +  \fi
  }
  
-+\newhelp\EMsimple{Press RETURN to continue.}
- 
+-
 -% Single-spacing is done by various environments (specifically, in
 -% \nonfillstart and \quotations).
 -\newskip\singlespaceskip \singlespaceskip = 12.5pt
@@ -3339,89 +3363,75 @@
 -  %{\advance \baselineskip by -\singlespaceskip
 -  %\kern \baselineskip}%
 -  \setleading \singlespaceskip
--}
- 
- %% Simple single-character @ commands
++% @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
+ }
  
-@@ -452,16 +615,22 @@
- \let\{=\mylbrace
- \let\}=\myrbrace
- \begingroup
+-%% 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
-+  % Definitions to produce \{ and \} commands for indices,
-+  % and @{ and @} for the aux/toc files.
-+  \catcode`\{ = \other \catcode`\} = \other
-   \catcode`\[ = 1 \catcode`\] = 2
+-  \catcode`\[ = 1 \catcode`\] = 2
 -  \catcode`\@ = 0 \catcode`\\ = 12
 -  @gdef at lbracecmd[\{]%
 -  @gdef at rbracecmd[\}]%
 - at endgroup
-+  \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
+-
+-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
 -% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
-+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
- \let\, = \c
- \let\dotaccent = \.
- \def\ringaccent#1{{\accent23 #1}}
-@@ -469,22 +638,43 @@
- \let\ubaraccent = \b
- \let\udotaccent = \d
+-\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.
-+% 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}%
+-\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
-+  \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
- }
+-  \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{\selectfonts\lllsize A}\vss}}%
-+  \kern-.15em
-+  \TeX
-+}
-+
  % 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
- % at the beginning of a line will start with \penalty -- and
-@@ -503,14 +693,32 @@
+@@ -503,14 +596,32 @@
  % @* forces a line break.
  \def\*{\hfil\break\hbox{}\ignorespaces}
  
@@ -3441,7 +3451,7 @@
 +\def\?{?\spacefactor=\endofsentencespacefactor\space}
 +
 +% @frenchspacing on|off  says whether to put extra space after punctuation.
-+% 
++%
 +\def\onword{on}
 +\def\offword{off}
 +%
@@ -3451,13 +3461,13 @@
 +  \else\ifx\temp\offword \plainnonfrenchspacing
 +  \else
 +    \errhelp = \EMsimple
-+    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
++    \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 +733,24 @@
+@@ -525,47 +636,24 @@
  % therefore, no glue is inserted, and the space between the headline and
  % the text is small, which looks bad.
  %
@@ -3519,7 +3529,7 @@
      % 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 +760,32 @@
+@@ -575,6 +663,32 @@
      \comment
  }
  %
@@ -3552,28 +3562,27 @@
  % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
  % message, so this ends up printing `@group can only ...'.
  %
-@@ -587,10 +798,8 @@
+@@ -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.
+-% Old definition--didn't work.
 -%\def\needx #1{\par %
-+%\parseargdef\need{\par %
- %% This method tries to make TeX break the page naturally
- %% if the depth of the box does not fit.
- %{\baselineskip=0pt%
-@@ -598,7 +807,7 @@
- %\prevdepth=-1000pt
- %}}
- 
+-%% 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 +846,11 @@
+@@ -637,37 +740,11 @@ where each line of input produces a line
    \fi
  }
  
@@ -3613,7 +3622,7 @@
  %
  \def\page{\par\vfill\supereject}
  
-@@ -679,57 +862,131 @@
+@@ -679,57 +756,165 @@ where each line of input produces a line
  \newskip\exdentamount
  
  % This defn is used inside fill environments such as @defun.
@@ -3636,7 +3645,7 @@
 -  \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'.
++% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
 +%
  \newskip\inmarginspacing \inmarginspacing=1cm
  \def\strutdepth{\dp\strutbox}
@@ -3684,7 +3693,36 @@
 +}
  
 -%\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
@@ -3711,6 +3749,8 @@
 +  {%
 +    \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
@@ -3729,6 +3769,8 @@
 +  \catcode`>=\other
 +  \catcode`+=\other
 +  \catcode`-=\other
++  \catcode`\`=\other
++  \catcode`\'=\other
 +}
  
 -\def\thisfile{}
@@ -3783,7 +3825,7 @@
  
  % @comment ...line which is ignored...
  % @c is the same as @comment
-@@ -744,13 +1001,13 @@
+@@ -744,13 +929,13 @@ where each line of input produces a line
  
  % @paragraphindent NCHARS
  % We'll use ems for NCHARS, close enough.
@@ -3801,7 +3843,7 @@
    \def\temp{#1}%
    \ifx\temp\asisword
    \else
-@@ -767,8 +1024,7 @@
+@@ -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.
@@ -3811,15 +3853,17 @@
    \def\temp{#1}%
    \ifx\temp\asisword
    \else
-@@ -780,26 +1036,159 @@
+@@ -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.
@@ -3839,13 +3883,23 @@
 +    \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
@@ -3866,125 +3920,14 @@
 +  \global \let \noindent = \ptexnoindent
 +  \global \everypar = {}%
 +}
-+
-+
- % @asis just yields its argument.  Used with @table, for example.
- %
- \def\asis#1{#1}
- 
--% @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.
-+% @math outputs its argument in math mode.
- %
--% This isn't quite enough for @math to work properly in indices, but it
--% seems unlikely it will ever be needed there.
-+% 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 \ character.
-+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
-+% this is not advertised and we don't care.  Texinfo does not
-+% otherwise define @\.
- %
--\let\implicitmath = $
--\def\math#1{\implicitmath #1\implicitmath}
-+% 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.
  
 -% @bullet and @minus need the same treatment as @math, just above.
 -\def\bullet{\implicitmath\ptexbullet\implicitmath}
 -\def\minus{\implicitmath-\implicitmath}
-+% 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
-+  \gdef\mathactive{%
-+    \let^ = \ptexhat
-+    \let< = \ptexless
-+    \let> = \ptexgtr
-+    \let+ = \ptexplus
-+  }
-+}
-+
-+% 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
-+}
-+
-+% @comma{} is so commas can be inserted into text without messing up
-+% Texinfo's parsing.
-+%
-+\let\comma = ,
  
  % @refill is a no-op.
  \let\refill=\relax
-@@ -815,20 +1204,20 @@
+@@ -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{%
@@ -4012,20 +3955,20 @@
     %
     \comment % Ignore the actual filename.
  }
-@@ -864,111 +1253,294 @@
+@@ -864,111 +1080,280 @@ where each line of input produces a line
  \newif\ifpdf
  \newif\ifpdfmakepagedest
  
-+% 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 \undefined,
-+% borrowed from ifpdf.sty.
- \ifx\pdfoutput\undefined
+-\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
@@ -4043,50 +3986,24 @@
 +% 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.
-+% 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).
-+
-+% double active backslashes.
-+% 
-+{\catcode`\@=0 \catcode`\\=\active
-+ @gdef at activebackslashdouble{%
-+   @catcode`@\=@active
-+   @let\=@doublebackslash}
-+}
-+
-+% To handle parens, we must adopt a different approach, since parens are
-+% not active characters.  hyperref.dtx (which has the same problem as
-+% us) handles it with this amazing macro to replace tokens, with minor
-+% changes for Texinfo.  It is included here under the GPL by permission
-+% from the author, Heiko Oberdiek.
 +% 
-+% #1 is the tokens to replace.
-+% #2 is the replacement.
-+% #3 is the control sequence with the string.
-+% 
-+\def\HyPsdSubst#1#2#3{%
-+  \def\HyPsdReplace##1#1##2\END{%
-+    ##1%
-+    \ifx\\##2\\%
-+    \else
-+      #2%
-+      \HyReturnAfterFi{%
-+        \HyPsdReplace##2\END
-+      }%
-+    \fi
-+  }%
-+  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
-+}
-+\long\def\HyReturnAfterFi#1\fi{\fi#1}
-+
-+% #1 is a control sequence in which to do the replacements.
-+\def\backslashparens#1{%
-+  \xdef#1{#1}% redefine it as its expansion; the definition is simply
-+             % \lastnode when called from \setref -> \pdfmkdest.
-+  \HyPsdSubst{(}{\realbackslash(}{#1}%
-+  \HyPsdSubst{)}{\realbackslash)}{#1}%
++% 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
@@ -4096,11 +4013,17 @@
 +
 +\ifpdf
 +  %
-+  % Color manipulation macros based on pdfcolor.tex.
-+  \def\cmykDarkRed{0.28 1 1 0.35}
-+  \def\cmykBlack{0 0 0 1}
++  % 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}}
 +  %
-+  \def\pdfsetcolor#1{\pdfliteral{#1 k}}
 +  % Set color, and create a mark which defines \thiscolor accordingly,
 +  % so that \makeheadline knows which color to restore.
 +  \def\setcolor#1{%
@@ -4109,7 +4032,7 @@
 +    \pdfsetcolor{#1}%
 +  }
 +  %
-+  \def\maincolor{\cmykBlack}
++  \def\maincolor{\rgbBlack}
 +  \pdfsetcolor{\maincolor}
 +  \edef\thiscolor{\maincolor}
 +  \def\lastcolordefs{}
@@ -4144,29 +4067,31 @@
 +    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
 +    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
 +    %
-+    % pdftex (and the PDF format) support .png, .jpg, .pdf (among
-+    % others).  Let's try in that order.
++    % 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.png \ifeof 1
-+        \openin 1 #1.jpg \ifeof 1
-+          \openin 1 #1.jpeg \ifeof 1
-+            \openin 1 #1.JPG \ifeof 1
-+              \openin 1 #1.pdf \ifeof 1
-+                \openin 1 #1.PDF \ifeof 1
++      \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{PDF}%
++                \else \gdef\pdfimgext{JPG}%
 +                \fi
-+              \else \gdef\pdfimgext{pdf}%
++              \else \gdef\pdfimgext{jpeg}%
 +              \fi
-+            \else \gdef\pdfimgext{JPG}%
++            \else \gdef\pdfimgext{jpg}%
 +            \fi
-+          \else \gdef\pdfimgext{jpeg}%
++          \else \gdef\pdfimgext{png}%
 +          \fi
-+        \else \gdef\pdfimgext{jpg}%
++        \else \gdef\pdfimgext{PDF}%
 +        \fi
-+      \else \gdef\pdfimgext{png}%
++      \else \gdef\pdfimgext{pdf}%
 +      \fi
 +      \closein 1
 +    \endgroup
@@ -4203,10 +4128,9 @@
 +    % such as \, aren't expanded when present in a section title.
 +    \indexnofonts
 +    \turnoffactive
-+    \activebackslashdouble
 +    \makevalueexpandable
 +    \def\pdfdestname{#1}%
-+    \backslashparens\pdfdestname
++    \txiescapepdf\pdfdestname
 +    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
 +  }}
 +  %
@@ -4215,8 +4139,8 @@
 +  %
 +  % by default, use a color that is dark enough to print on paper as
 +  % nearly black, but still distinguishable for online viewing.
-+  \def\urlcolor{\cmykDarkRed}
-+  \def\linkcolor{\cmykDarkRed}
++  \def\urlcolor{\rgbDarkRed}
++  \def\linkcolor{\rgbDarkRed}
 +  \def\endlink{\setcolor{\maincolor}\pdfendlink}
 +  %
    % Adding outlines to PDF; macros for calculating structure of outlines
@@ -4281,7 +4205,7 @@
 +    % 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.
-+    \def\pdfoutlinedest{#3}%
++    \edef\pdfoutlinedest{#3}%
 +    \ifx\pdfoutlinedest\empty
 +      \def\pdfoutlinedest{#4}%
      \else
@@ -4293,15 +4217,13 @@
 -      \linkcolor #1%
 -      \advance\lnkcount by 1%
 -      \endlink
-+      % Doubled backslashes in the name.
-+      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
-+       \backslashparens\pdfoutlinedest}%
++      \txiescapepdf\pdfoutlinedest
      \fi
 -    \nextmakelinks
 +    %
-+    % Also double the backslashes in the display string.
-+    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
-+     \backslashparens\pdfoutlinetext}%
++    % Also escape PDF chars in the display string.
++    \edef\pdfoutlinetext{#1}%
++    \txiescapepdf\pdfoutlinetext
 +    %
 +    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
    }
@@ -4318,11 +4240,8 @@
 +  %
 +  \def\pdfmakeoutlines{%
 +    \begingroup
-+      % Thanh's hack / proper braces in bookmarks
-+      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
-+      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
-+      %
 +      % 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}%
@@ -4376,11 +4295,17 @@
 +      % Latin 2 (0xea) gets translated to a | character.  Info from
 +      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
 +      %
-+      % xx to do this right, we have to translate 8-bit characters to
-+      % their "best" equivalent, based on the @documentencoding.  Right
-+      % now, I guess we'll just let the pdf reader have its way.
++      % 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
@@ -4389,11 +4314,16 @@
 -  \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 +1555,32 @@
+@@ -983,24 +1368,36 @@ where each line of input produces a line
    \else
      \let \startlink \pdfstartlink
    \fi
@@ -4406,11 +4336,15 @@
 +      % 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) >>}%
@@ -4431,7 +4365,7 @@
      \else
        \ifnum0=\countA\else\makelink\fi
        \ifx\first.\let\next=\done\else
-@@ -1013,33 +1593,348 @@
+@@ -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{%
@@ -4443,6 +4377,7 @@
    \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
@@ -4473,6 +4408,10 @@
 +\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.
@@ -4523,7 +4462,7 @@
 +% 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\undefined \else
++\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
@@ -4794,7 +4733,13 @@
  
  % Use cm as the default font prefix.
  % To specify the font prefix, you must define \fontprefix
-@@ -1064,165 +1959,409 @@
+ % 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}
  
@@ -4817,7 +4762,7 @@
 -\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}
@@ -4900,8 +4845,7 @@
 +\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
  \font\titlei=cmmi12 scaled \magstep3
  \font\titlesy=cmsy10 scaled \magstep4
- \def\authorrm{\secrm}
-+\def\authortt{\sectt}
+-\def\authorrm{\secrm}
 +\def\titleecsize{2074}
  
  % Chapter (and unnumbered) fonts (17.28pt).
@@ -4997,8 +4941,8 @@
 +\font\reducedsy=cmsy10
 +\def\reducedecsize{1000}
 +
-+% reset the current fonts
-+\textfonts
++\textleading = 13.2pt % line spacing for 11pt CM
++\textfonts            % reset the current fonts
 +\rm
 +} % end of 11pt text font size definitions
 +
@@ -5007,7 +4951,7 @@
 +% 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}
@@ -5070,8 +5014,6 @@
 +\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
 +\font\titlei=cmmi12 scaled \magstep3
 +\font\titlesy=cmsy10 scaled \magstep4
-+\def\authorrm{\secrm}
-+\def\authortt{\sectt}
 +\def\titleecsize{2074}
 +
 +% Chapter fonts (14.4pt).
@@ -5098,7 +5040,7 @@
 +\setfont\secsf\sfbshape{12}{1000}{OT1}
 +\let\secbf\secrm
 +\setfont\secsc\scbshape{10}{\magstep1}{OT1}
-+\font\seci=cmmi12 
++\font\seci=cmmi12
 +\font\secsy=cmsy10 scaled \magstep1
 +\def\sececsize{1200}
 +
@@ -5130,11 +5072,9 @@
 +\font\reducedsy=cmsy9
 +\def\reducedecsize{0900}
 +
-+% reduce space between paragraphs
-+\divide\parskip by 2
-+
-+% reset the current fonts
-+\textfonts
++\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
 +
@@ -5142,17 +5082,18 @@
 +% We provide the user-level command
 +%   @fonttextsize 10
 +% (or 11) to redefine the text font size.  pt is assumed.
-+% 
-+\def\xword{10}
++%
 +\def\xiword{11}
++\def\xword{10}
++\def\xwordpt{10pt}
 +%
 +\parseargdef\fonttextsize{%
 +  \def\textsizearg{#1}%
-+  \wlog{doing @fonttextsize \textsizearg}%
++  %\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
@@ -5214,10 +5155,12 @@
    \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{25pt}}
- \def\titlefont#1{{\titlefonts\rm #1}}
++  \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
@@ -5272,7 +5215,21 @@
 +  \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
 +
@@ -5286,59 +5243,228 @@
 +%
 +% By the way, for comparison, here's what fits with @example (10pt):
 +%   8.5x11=71  smallbook=60  a4=75  a5=58
-+%
-+% I wish the USA used A4 paper.
 +% --karl, 24jan03.
 +
- 
- % Set up the default fonts, so we can use them for creating boxes.
- %
--\textfonts
++% Set up the default fonts, so we can use them for creating boxes.
++%
 +\definetextfontsizexi
- 
- % Define these so they can be easily changed for other fonts.
- \def\angleleft{$\langle$}
-@@ -1232,28 +2371,42 @@
++
++
++\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.
+-% Fonts for short table of contents.
 -\setfont\shortcontrm\rmshape{12}{1000}
 -\setfont\shortcontbf\bxshape{12}{1000}
 -\setfont\shortcontsl\slshape{12}{1000}
-+\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}
- 
- %% Add scribe-like font environments, plus @l for inline lisp (usually sans
- %% serif) and @ii for TeX italic
++% 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.
+-% \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}
-+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
-+                    \ptexslash\fi\fi\fi}
-+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
-+\def\smartitalic#1{{\ifusingtt\ttsl\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.
++% like \smartslanted except unconditionally uses \ttsl, and no ic.
 +% @var is set to this for defun arguments.
-+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
++\def\ttslanted#1{{\ttsl #1}}
 +
-+% like \smartslanted except unconditionally use \sl.  We never want
++% @cite is like \smartslanted except unconditionally use \sl.  We never want
 +% ttsl for book titles, do we?
-+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
++\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\var=\smartslanted
  \let\dfn=\smartslanted
  \let\emph=\smartitalic
 -\let\cite=\smartslanted
  
-+% @b, explicit bold.
++% 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
  
@@ -5348,7 +5474,7 @@
  % 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,13 +2414,30 @@
+@@ -1261,22 +2403,53 @@ where each line of input produces a line
  \def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
  \def\restorehyphenation{\hyphenchar\font = `- }
  
@@ -5370,27 +5496,52 @@
 +\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}
+-\def\samp#1{`\tclose{#1}'\null}
 -\setfont\keyrm\rmshape{8}{1000}
-+\setfont\keyrm\rmshape{8}{1000}{OT1}
- \font\keysy=cmsy9
- \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-   \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-@@ -1275,6 +2445,7 @@
-      \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-     \kern-0.4pt\hrule}%
-   \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-+\def\key #1{{\nohyphenation \uppercase{#1}}\null}
- % The old definition, with no lozenge:
- %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+-\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}
-@@ -1300,13 +2471,13 @@
+ 
+ % @file, @option are the same as @samp.
+@@ -1300,13 +2473,13 @@ where each line of input produces a line
      \nohyphenation
      %
      \rawbackslash
@@ -5398,7 +5549,8 @@
 +    \plainfrenchspacing
      #1%
    }%
-   \null
+-  \null
++  \null % reset spacefactor to 1000
  }
  
 -% We *must* turn on hyphenation at `-' and `_' in \code.
@@ -5406,7 +5558,7 @@
  % Otherwise, it is too hard to avoid overfull hboxes
  % in the Emacs manual, the Library manual, etc.
  
-@@ -1316,26 +2487,61 @@
+@@ -1316,71 +2489,71 @@ where each line of input produces a line
  % and arrange explicitly to hyphenate at a dash.
  %  -- rms.
  {
@@ -5414,13 +5566,13 @@
 -  \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
-+    \catcode\rquoteChar=\active \catcode\lquoteChar=\active
-+    \let'\codequoteright \let`\codequoteleft
-+    %
++    \setupmarkupstyle{code}%
++    % The following should really be moved into \setupmarkupstyle handlers.
 +    \catcode\dashChar=\active  \catcode\underChar=\active
 +    \ifallowcodebreaks
 +     \let-\codedash
@@ -5437,9 +5589,31 @@
 -  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
  }
  
- \def\realdash{-}
- \def\codedash{-\discretionary{}{}{}}
+-\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.)
@@ -5450,20 +5624,33 @@
 +             \else\normalunderscore \fi
 +             \discretionary{}{}{}}%
 +            {\_}%
-+}
- \def\codex #1{\tclose{#1}\endgroup}
+ }
+-\def\worddistinct{distinct}
+-\def\wordexample{example}
+-\def\wordcode{code}
  
--%\let\exp=\tclose  %Was temporary
+-% 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
@@ -5472,93 +5659,213 @@
 +    \allowcodebreaksfalse
 +  \else
 +    \errhelp = \EMsimple
-+    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
++    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
 +  \fi\fi
 +}
  
- % @kbd is like @code, except that if the argument is just one @key command,
- % then @kbd has no effect.
-@@ -1343,24 +2549,25 @@
- % @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
-+\parseargdef\kbdinputstyle{%
-+  \def\txiarg{#1}%
-+  \ifx\txiarg\worddistinct
-     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
--  \else\ifx\arg\wordexample
-+  \else\ifx\txiarg\wordexample
-     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
--  \else\ifx\arg\wordcode
-+  \else\ifx\txiarg\wordcode
-     \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-+  \else
-+    \errhelp = \EMsimple
-+    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
-   \fi\fi\fi
- }
- \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}
-+% Default is `distinct.'
-+\kbdinputstyle distinct
- 
- \def\xkey{\key}
- \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-@@ -1368,11 +2575,18 @@
- \else{\tclose{\kbdfont\look}}\fi
- \else{\tclose{\kbdfont\look}}\fi}
- 
--% For @url, @env, @command quotes seem unnecessary, so use \code.
--\let\url=\code
-+% 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}
-+
  % @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
-@@ -1401,9 +2615,13 @@
+-% 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}
  
-+% @url synonym for @uref, since that's how everyone uses it.
-+%
-+\let\url=\uref
++% 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}
 +
- % 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
++% 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}
-@@ -1442,12 +2660,140 @@
- \def\sc#1{{\smallcaps#1}}       % smallcaps font
- \def\ii#1{{\it #1}}             % italic font
+@@ -1418,36 +2692,478 @@ where each line of input produces a line
+   \let\email=\uref
+ \fi
  
--% @acronym downcases the argument and prints in smallcaps.
--\def\acronym#1{{\smallcaps \lowercase{#1}}}
+-% 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}%
@@ -5566,12 +5873,14 @@
 +  \ifx\temp\empty \else
 +    \space ({\unsepspaces \ignorespaces \temp \unskip})%
 +  \fi
++  \null % reset \spacefactor=1000
 +}
  
--% @pounds{} is a sterling sign.
+-% @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}%
@@ -5579,8 +5888,256 @@
 +  \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\$}}
@@ -5590,52 +6147,59 @@
 +% 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 
++  \ifx\curfontstyle\bfstylename
 +    % bold:
 +    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
-+  \else 
++  \else
 +    % regular:
 +    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
 +  \fi
 +  \thiseurofont
 +}
 +
-+% Hacks for glyphs from the EC fonts similar to \euro.  We don't
-+% use \let for the aliases, because sometimes we redefine the original
-+% macro, and the alias should reflect the redefinition.
++% 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}}
@@ -5645,8 +6209,36 @@
 +\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/sanserif and italic/slanted, but this
++  % 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.
@@ -5679,8 +6271,8 @@
 +% 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\undefined
++%
++\ifx\Orb\thisisundefined
 +\def\Orb{\mathhexbox20D}
 +\fi
 +
@@ -5693,14 +6285,16 @@
  
  \message{page headings,}
  
-@@ -1466,86 +2812,103 @@
+@@ -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}%
-+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-         \endgroup\page\hbox{}\page}
+-        \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
@@ -5825,17 +6419,15 @@
 +  \finishedtitlepagetrue
  }
  
-+%%% Macros to be used within @titlepage:
+-%%% Set up page headings and footings.
++% Macros to be used within @titlepage:
 +
 +\let\subtitlerm=\tenrm
 +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
 +
-+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
-+		\let\tt=\authortt}
-+
 +\parseargdef\title{%
 +  \checkenv\titlepage
-+  \leftline{\titlefonts\rm #1}
++  \leftline{\titlefonts\rmisbold #1}
 +  % print a rule at the page bottom also.
 +  \finishedtitlepagefalse
 +  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
@@ -5856,15 +6448,16 @@
 +  \else
 +    \checkenv\titlepage
 +    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
-+    {\authorfont \leftline{#1}}%
++    {\secfonts\rmisbold \leftline{#1}}%
 +  \fi
 +}
 +
 +
- %%% Set up page headings and footings.
++% Set up page headings and footings.
  
  \let\thispage=\folio
-@@ -1555,7 +2918,7 @@
+ 
+@@ -1555,7 +3286,7 @@ where each line of input produces a line
  \newtoks\evenfootline    % footline on even pages
  \newtoks\oddfootline     % footline on odd pages
  
@@ -5873,7 +6466,7 @@
  \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
                              \else \the\evenheadline \fi}}
  \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-@@ -1569,43 +2932,64 @@
+@@ -1569,43 +3300,64 @@ where each line of input produces a line
  % @evenfooting @thisfile||
  % @oddfooting ||@thisfile
  
@@ -5960,16 +6553,24 @@
  
  % @headings double      turns headings on for double-sided printing.
  % @headings single      turns headings on for single-sided printing.
-@@ -1619,7 +3003,7 @@
+@@ -1619,16 +3371,20 @@ where each line of input produces a line
  
  \def\headings #1 {\csname HEADINGS#1\endcsname}
  
 -\def\HEADINGSoff{
-+\def\HEADINGSoff{%
- \global\evenheadline={\hfil} \global\evenfootline={\hfil}
- \global\oddheadline={\hfil} \global\oddfootline={\hfil}}
- \HEADINGSoff
-@@ -1628,7 +3012,7 @@
+-\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.
@@ -5978,7 +6579,7 @@
  \global\pageno=1
  \global\evenfootline={\hfil}
  \global\oddfootline={\hfil}
-@@ -1640,7 +3024,7 @@
+@@ -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.
@@ -5987,7 +6588,7 @@
  \global\pageno=1
  \global\evenfootline={\hfil}
  \global\oddfootline={\hfil}
-@@ -1670,7 +3054,10 @@
+@@ -1670,7 +3426,10 @@ where each line of input produces a line
  }
  
  % Subroutines used in generating headings
@@ -5995,11 +6596,11 @@
 +% 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\undefined
++\ifx\today\thisisundefined
  \def\today{%
    \number\day\space
    \ifcase\month
-@@ -1679,16 +3066,16 @@
+@@ -1679,16 +3438,16 @@ where each line of input produces a line
    \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
    \fi
    \space\number\year}
@@ -6019,7 +6620,7 @@
  
  % default indentation of table text
  \newdimen\tableindent \tableindent=.8in
-@@ -1700,7 +3087,7 @@
+@@ -1700,7 +3459,7 @@ where each line of input produces a line
  % used internally for \itemindent minus \itemmargin
  \newdimen\itemmax
  
@@ -6028,7 +6629,7 @@
  % these defs.
  % They also define \itemindex
  % to index the item name in whatever manner is desired (perhaps none).
-@@ -1712,22 +3099,10 @@
+@@ -1712,22 +3471,10 @@ where each line of input produces a line
  \def\internalBitem{\smallbreak \parsearg\itemzzz}
  \def\internalBitemx{\itemxpar \parsearg\itemzzz}
  
@@ -6052,7 +6653,16 @@
    \itemindex{#1}%
    \nobreak % This prevents a break before @itemx.
    %
-@@ -1751,10 +3126,14 @@
+@@ -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
      %
@@ -6066,12 +6676,12 @@
 +    % 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 +3152,106 @@
+@@ -1773,97 +3524,116 @@ where each line of input produces a line
    \fi
  }
  
@@ -6212,9 +6822,18 @@
 +  \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
  }
  
@@ -6252,13 +6871,14 @@
 +   \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 +3262,8 @@
+@@ -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'.
  %
@@ -6271,7 +6891,7 @@
    % If we were given no argument, pretend we were given `1'.
    \def\thearg{#1}%
    \ifx\thearg\empty \def\thearg{1}\fi
-@@ -1949,13 +3334,13 @@
+@@ -1949,13 +3716,13 @@ where each line of input produces a line
    }%
  }
  
@@ -6287,7 +6907,7 @@
  }
  
  % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-@@ -1966,16 +3351,6 @@
+@@ -1966,16 +3733,6 @@ where each line of input produces a line
  \def\Ealphaenumerate{\Eenumerate}
  \def\Ecapsenumerate{\Eenumerate}
  
@@ -6304,7 +6924,7 @@
  
  % @multitable macros
  % Amy Hendrickson, 8/18/94, 3/6/96
-@@ -2002,24 +3377,14 @@
+@@ -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.
@@ -6331,7 +6951,7 @@
  
  % Sample multitable:
  
-@@ -2063,13 +3428,12 @@
+@@ -2063,13 +3810,12 @@ where each line of input produces a line
  \def\xcolumnfractions{\columnfractions}
  \newif\ifsetpercent
  
@@ -6350,7 +6970,7 @@
    \setuptable
  }
  
-@@ -2086,8 +3450,8 @@
+@@ -2086,8 +3832,8 @@ where each line of input produces a line
           \let\go\pickupwholefraction
        \else
           \global\advance\colcount by 1
@@ -6361,7 +6981,7 @@
           \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
        \fi
      \fi
-@@ -2102,18 +3466,33 @@
+@@ -2102,18 +3848,40 @@ where each line of input produces a line
    \go
  }
  
@@ -6374,12 +6994,19 @@
 +%
 +% @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.  Note that \everycr resets \everytab.
-+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
++% 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 encounter the problem it was intended to solve again.
++% we again encounter the problem the 1sp was intended to solve.
 +%					--karl, nathan at acm.org, 20apr99.
 +\def\tab{\checkenv\multitable &\the\everytab}%
  
@@ -6403,7 +7030,7 @@
    \tolerance=9500
    \hbadness=9500
    \setmultitablespacing
-@@ -2121,81 +3500,93 @@
+@@ -2121,373 +3889,281 @@ where each line of input produces a line
    \parindent=\multitableparindent
    \overfullrule=0pt
    \global\colcount=0
@@ -6555,11 +7182,27 @@
 -%% 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.
-@@ -2212,282 +3603,178 @@
++% 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,}
@@ -6834,8 +7477,8 @@
 +    % And now expand that command.
 +    \doignoretext ^^M%
 +  }%
-+}
-+
+ }
+ 
 +\def\doignoreyyy#1{%
 +  \def\temp{#1}%
 +  \ifx\temp\empty			% Nothing found.
@@ -6858,8 +7501,8 @@
 +    \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
@@ -6968,7 +7611,7 @@
    \else
      \csname SET#1\endcsname
    \fi
-@@ -2496,66 +3783,36 @@
+@@ -2496,66 +4172,36 @@ width0pt\relax} \fi
  % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
  % with @set.
  %
@@ -7058,7 +7701,7 @@
  
  % @defininfoenclose.
  \let\definfoenclose=\comment
-@@ -2565,9 +3822,8 @@
+@@ -2565,9 +4211,8 @@ width0pt\relax} \fi
  % Index generation facilities
  
  % Define \newwrite to be identical to plain tex's \newwrite
@@ -7070,7 +7713,7 @@
  
  % \newindex {foo} defines an index named foo.
  % It automatically defines \fooindex such that
-@@ -2587,42 +3843,48 @@
+@@ -2587,42 +4232,48 @@ width0pt\relax} \fi
  }
  
  % @defindex foo  ==  \newindex{foo}
@@ -7125,11 +7768,11 @@
 +\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 \undefined
++  \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
++    \expandafter\let\csname donesynindex#2\endcsname = 1
 +  \fi
 +  % redefine \fooindfile:
 +  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
@@ -7139,7 +7782,7 @@
  }
  
  % Define \doindex, the driver for all \fooindex macros.
-@@ -2642,265 +3904,445 @@
+@@ -2642,265 +4293,486 @@ width0pt\relax} \fi
  \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
  \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
  
@@ -7234,11 +7877,14 @@
 +  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
 +  \def\ {\realbackslash\space }%
 +  %
-+  % 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
++  % 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
@@ -7249,7 +7895,7 @@
 +  % 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}
@@ -7257,12 +7903,12 @@
 +  % @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
 +  %
@@ -7299,7 +7945,7 @@
 +\def\commondummies{%
 +  %
 +  % \definedummyword defines \#1 as \string\#1\space, thus effectively
-+  % preventing its expansion.  This is used only for control% words,
++  % 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.
@@ -7318,23 +7964,28 @@
 +  \commondummiesnofonts
 +  %
 +  \definedummyletter\_%
++  \definedummyletter\-%
 +  %
 +  % Non-English letters.
 +  \definedummyword\AA
 +  \definedummyword\AE
++  \definedummyword\DH
 +  \definedummyword\L
-+  \definedummyword\OE
 +  \definedummyword\O
++  \definedummyword\OE
++  \definedummyword\TH
 +  \definedummyword\aa
 +  \definedummyword\ae
++  \definedummyword\dh
++  \definedummyword\exclamdown
 +  \definedummyword\l
-+  \definedummyword\oe
 +  \definedummyword\o
-+  \definedummyword\ss
-+  \definedummyword\exclamdown
-+  \definedummyword\questiondown
++  \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
@@ -7350,21 +8001,26 @@
 +  \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\expansion
++  \definedummyword\leq
 +  \definedummyword\minus
++  \definedummyword\ogonek
 +  \definedummyword\pounds
 +  \definedummyword\point
 +  \definedummyword\print
@@ -7413,6 +8069,7 @@
 +  \definedummyword\v
 +  \definedummyword\H
 +  \definedummyword\dotaccent
++  \definedummyword\ogonek
 +  \definedummyword\ringaccent
 +  \definedummyword\tieaccent
 +  \definedummyword\ubaraccent
@@ -7423,18 +8080,24 @@
 +  \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
@@ -7517,7 +8180,7 @@
 +  \def\definedummyaccent##1{\let##1\asis}%
 +  % We can just ignore other control letters.
 +  \def\definedummyletter##1{\let##1\empty}%
-+  % Hopefully, all control words can become @asis.
++  % All control words become @asis by default; overrides below.
 +  \let\definedummyword\definedummyaccent
 +  %
 +  \commondummiesnofonts
@@ -7529,48 +8192,60 @@
 +  %
 +  \def\ { }%
 +  \def\@{@}%
-+  % how to handle braces?
 +  \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\o{o}%
-+  \def\ss{ss}%
-+  \def\exclamdown{!}%
-+  \def\questiondown{?}%
 +  \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\registeredsymbol{R}%
 +  \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\expansion{==>}%
++  \def\leq{<=}%
 +  \def\minus{-}%
-+  \def\pounds{pounds}%
 +  \def\point{.}%
++  \def\pounds{pounds}%
 +  \def\print{-|}%
 +  \def\quotedblbase{"}%
 +  \def\quotedblleft{"}%
@@ -7578,19 +8253,23 @@
 +  \def\quoteleft{`}%
 +  \def\quoteright{'}%
 +  \def\quotesinglbase{,}%
++  \def\registeredsymbol{R}%
 +  \def\result{=>}%
-+  \def\textdegree{degrees}%
++  \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
  }
  
@@ -7600,7 +8279,11 @@
 -
 -{\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)?
  
@@ -7805,7 +8488,7 @@
 +    % 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.
@@ -7822,7 +8505,7 @@
  }
  
  % The index entry written in the file actually looks like
-@@ -2938,13 +4380,13 @@
+@@ -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).
  %
@@ -7839,7 +8522,7 @@
    %
    % See if the index file exists and is nonempty.
    % Change catcode of @ here so that if the index file contains
-@@ -2971,7 +4413,7 @@
+@@ -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.
@@ -7848,7 +8531,7 @@
        \catcode`\\ = 0
        \escapechar = `\\
        \begindoublecolumns
-@@ -2993,7 +4435,10 @@
+@@ -2993,7 +4865,10 @@ width0pt\relax} \fi
    \removelastskip
    %
    % We like breaks before the index initials, so insert a bonus.
@@ -7860,7 +8543,7 @@
    %
    % 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 +4448,117 @@
+@@ -3003,93 +4878,123 @@ width0pt\relax} \fi
    % No shrink because it confuses \balancecolumns.
    \vskip 1.67\baselineskip plus .5\baselineskip
    \leftline{\secbf #1}%
@@ -7929,7 +8612,6 @@
 +% 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{%
@@ -7976,10 +8658,17 @@
 +    % 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
@@ -8050,7 +8739,7 @@
  }}
  
  % Define two-column mode, which we use to typeset indexes.
-@@ -3149,7 +4618,6 @@
+@@ -3149,7 +5054,6 @@ width0pt\relax} \fi
    %
    % Double the \vsize as well.  (We don't need a separate register here,
    % since nobody clobbers \vsize.)
@@ -8058,7 +8747,7 @@
    \vsize = 2\vsize
  }
  
-@@ -3163,6 +4631,7 @@
+@@ -3163,6 +5067,7 @@ width0pt\relax} \fi
    % previous page.
    \dimen@ = \vsize
    \divide\dimen@ by 2
@@ -8066,7 +8755,7 @@
    %
    % box0 will be the left-hand column, box2 the right.
    \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-@@ -3170,16 +4639,47 @@
+@@ -3170,16 +5075,47 @@ width0pt\relax} \fi
    \unvbox255
    \penalty\outputpenalty
  }
@@ -8116,7 +8805,7 @@
    \output = {%
      % Split the last of the double-column material.  Leave it on the
      % current page, no automatic page break.
-@@ -3203,8 +4703,9 @@
+@@ -3203,8 +5139,9 @@ width0pt\relax} \fi
    % \endgroup where \vsize got restored).
    \pagegoal = \vsize
  }
@@ -8127,11 +8816,26 @@
    \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
    \dimen@ = \ht0
    \advance\dimen@ by \topskip
-@@ -3234,6 +4735,12 @@
+@@ -3234,6 +5171,27 @@ width0pt\relax} \fi
  \message{sectioning,}
  % Chapters, sections, etc.
  
-+% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
++% 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
@@ -8140,7 +8844,7 @@
  \newcount\chapno
  \newcount\secno        \secno=0
  \newcount\subsecno     \subsecno=0
-@@ -3241,9 +4748,12 @@
+@@ -3241,9 +5199,12 @@ width0pt\relax} \fi
  
  % This counter is funny since it counts through charcodes of letters A, B, ...
  \newcount\appendixno  \appendixno = `\@
@@ -8154,7 +8858,7 @@
  \def\appendixletter{%
    \ifnum\appendixno=`A A%
    \else\ifnum\appendixno=`B B%
-@@ -3279,13 +4789,18 @@
+@@ -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}
  
@@ -8176,7 +8880,7 @@
  
  % @raisesections: treat @section as chapter, @subsection as section, etc.
  \def\raisesections{\global\advance\secbase by -1}
-@@ -3295,287 +4810,246 @@
+@@ -3295,287 +5261,262 @@ width0pt\relax} \fi
  \def\lowersections{\global\advance\secbase by 1}
  \let\down=\lowersections % original BFox name
  
@@ -8199,8 +8903,8 @@
 +\chardef\maxseclevel = 3
 +%
 +% A numbered section within an unnumbered changes to unnumbered too.
-+% To achive this, remember the "biggest" unnum. sec. we are currently in:
-+\chardef\unmlevel = \maxseclevel
++% 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.
@@ -8242,8 +8946,8 @@
 +  % The heading type:
 +  \def\headtype{#1}%
 +  \if \headtype U%
-+    \ifnum \absseclevel < \unmlevel
-+      \chardef\unmlevel = \absseclevel
++    \ifnum \absseclevel < \unnlevel
++      \chardef\unnlevel = \absseclevel
 +    \fi
    \else
 -    \appendixsubsubseczzz{#2}
@@ -8256,10 +8960,10 @@
 +      \fi\fi
 +    \fi
 +    % Check for numbered within unnumbered:
-+    \ifnum \absseclevel > \unmlevel
++    \ifnum \absseclevel > \unnlevel
 +      \def\headtype{U}%
 +    \else
-+      \chardef\unmlevel = 3
++      \chardef\unnlevel = 3
 +    \fi
    \fi
 -\fi
@@ -8352,7 +9056,9 @@
 +  \gdef\chaplevelprefix{\the\chapno.}%
 +  \resetallfloatnos
 +  %
-+  \message{\putwordChapter\space \the\chapno}%
++  % \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}%
@@ -8381,15 +9087,17 @@
 -\global\let\section = \appendixsec
 -\global\let\subsection = \appendixsubsec
 -\global\let\subsubsection = \appendixsubsubsec
-+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
++\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
 +  %
-+  \def\appendixnum{\putwordAppendix\space \appendixletter}%
-+  \message{\appendixnum}%
++  % \putwordAppendix can contain complex things in translations.
++  \toks0=\expandafter{\putwordAppendix}%
++  \message{\the\toks0 \space \appendixletter}%
 +  %
 +  \chapmacro{#1}{Yappendix}{\appendixletter}%
 +  %
@@ -8398,7 +9106,8 @@
 +  \global\let\subsubsection = \appendixsubsubsec
 +}
 +
-+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
++% 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
@@ -8485,6 +9194,7 @@
 -\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
@@ -8503,7 +9213,8 @@
 -\temp
 -\appendixnoderef
 -\nobreak
-+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
++% 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}%
@@ -8519,7 +9230,8 @@
 -\temp
 -\unnumbnoderef
 -\nobreak
-+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
++% 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}%
@@ -8537,7 +9249,9 @@
 -\temp
 -\donoderef
 -\nobreak
-+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
++% 
++% 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}%
@@ -8554,7 +9268,8 @@
 -\temp
 -\appendixnoderef
 -\nobreak
-+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
++% normally calls appendixsubseczzz:
++\outer\parseargdef\appendixsubsec{\apphead2{#1}}
 +\def\appendixsubseczzz#1{%
 +  \global\subsubsecno=0  \global\advance\subsecno by 1
 +  \sectionheading{#1}{subsec}{Yappendix}%
@@ -8571,7 +9286,8 @@
 -\temp
 -\unnumbnoderef
 -\nobreak
-+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
++% normally calls unnumberedsubseczzz:
++\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
 +\def\unnumberedsubseczzz#1{%
 +  \global\subsubsecno=0  \global\advance\subsecno by 1
 +  \sectionheading{#1}{subsec}{Ynothing}%
@@ -8591,7 +9307,9 @@
 -\temp
 -\donoderef
 -\nobreak
-+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
++% 
++% normally numberedsubsubseczzz:
++\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
 +\def\numberedsubsubseczzz#1{%
 +  \global\advance\subsubsecno by 1
 +  \sectionheading{#1}{subsubsec}{Ynumbered}%
@@ -8610,7 +9328,8 @@
 -\temp
 -\appendixnoderef
 -\nobreak
-+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
++% normally appendixsubsubseczzz:
++\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
 +\def\appendixsubsubseczzz#1{%
 +  \global\advance\subsubsecno by 1
 +  \sectionheading{#1}{subsubsec}{Yappendix}%
@@ -8627,7 +9346,8 @@
 -\temp
 -\unnumbnoderef
 -\nobreak
-+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
++% normally unnumberedsubsubseczzz:
++\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
 +\def\unnumberedsubsubseczzz#1{%
 +  \global\advance\subsubsecno by 1
 +  \sectionheading{#1}{subsubsec}{Ynothing}%
@@ -8664,9 +9384,14 @@
  
  % Define @majorheading, @heading and @subheading
  
-@@ -3588,23 +5062,27 @@
+@@ -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{%
@@ -8674,11 +9399,7 @@
 -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
 -                  \parindent=0pt\raggedright
 -                  \rm #1\hfill}}\bigskip \par\penalty 200}
-+\def\majorheading{%
-+  {\advance\chapheadingskip by 10pt \chapbreak }%
-+  \parsearg\chapheadingzzz
-+}
- 
+-
 -\def\chapheading{\parsearg\chapheadingzzz}
 -\def\chapheadingzzz #1{\chapbreak %
 -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
@@ -8687,8 +9408,8 @@
 +\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
 +\def\chapheadingzzz#1{%
 +  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-+                    \parindent=0pt\raggedright
-+                    \rm #1\hfill}}%
++                    \parindent=0pt\ptexraggedright
++                    \rmisbold #1\hfill}}%
 +  \bigskip \par\penalty 200\relax
 +  \suppressfirstparagraphindent
 +}
@@ -8706,17 +9427,20 @@
  
  % These macros generate a chapter, section, etc. heading only
  % (including whitespace, linebreaking, etc. around it),
-@@ -3613,8 +5091,6 @@
- %%% Args are the skip and penalty (usually negative)
+ % 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
+-%%% Define plain chapter starts, and page on/off switching for it
  % Parameter controlling skip before chapter headings (if needed)
+-
+ \newskip\chapheadingskip
  
-@@ -3622,7 +5098,20 @@
- 
++% 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}
@@ -8727,9 +9451,8 @@
 +  \chappager
 +  \ifodd\pageno \else
 +    \begingroup
-+      \evenheadline={\hfil}\evenfootline={\hfil}%
-+      \oddheadline={\hfil}\oddfootline={\hfil}%
-+      \hbox to 0pt{}%
++      \headingsoff
++      \null
 +      \chappager
 +    \endgroup
 +  \fi
@@ -8737,7 +9460,7 @@
  
  \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
  
-@@ -3637,7 +5126,7 @@
+@@ -3637,7 +5590,7 @@ width0pt\relax} \fi
  \global\let\pagealignmacro=\chappager
  \global\def\HEADINGSon{\HEADINGSsingle}}
  
@@ -8746,7 +9469,7 @@
  \global\let\contentsalignmacro = \chapoddpage
  \global\let\pchapsepmacro=\chapoddpage
  \global\let\pagealignmacro=\chapoddpage
-@@ -3645,107 +5134,275 @@
+@@ -3645,107 +5598,293 @@ width0pt\relax} \fi
  
  \CHAPPAGon
  
@@ -8787,7 +9510,10 @@
 +    \xdef\lastchapterdefs{%
 +      \gdef\noexpand\thischaptername{\the\toks0}%
 +      \gdef\noexpand\thischapternum{\appendixletter}%
-+      \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum:
++      % \noexpand\putwordAppendix avoids expanding indigestible
++      % commands in some of the translations.
++      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
++                                 \noexpand\thischapternum:
 +                                 \noexpand\thischaptername}%
 +    }%
 +  \else
@@ -8795,7 +9521,10 @@
 +    \xdef\lastchapterdefs{%
 +      \gdef\noexpand\thischaptername{\the\toks0}%
 +      \gdef\noexpand\thischapternum{\the\chapno}%
-+      \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum:
++      % \noexpand\putwordChapter avoids expanding indigestible
++      % commands in some of the translations.
++      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
++                                 \noexpand\thischapternum:
 +                                 \noexpand\thischaptername}%
 +    }%
 +  \fi\fi\fi
@@ -8814,9 +9543,12 @@
 +  \domark
 +  %
    {%
-     \chapfonts \rm
+-    \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
@@ -8853,8 +9585,7 @@
 +    %
 +    % Typeset the actual heading.
 +    \nobreak % Avoid page breaks at the interline glue.
-     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
--          \hangindent = \wd0 \centerparametersmaybe
++    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
 +          \hangindent=\wd0 \centerparametersmaybe
            \unhbox0 #1\par}%
    }%
@@ -8890,8 +9621,10 @@
 +%
  \def\unnchfopen #1{%
  \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                        \parindent=0pt\raggedright
-                        \rm #1\hfill}}\bigskip \par\nobreak
+-                       \parindent=0pt\raggedright
+-                       \rm #1\hfill}}\bigskip \par\nobreak
++                       \parindent=0pt\ptexraggedright
++                       \rmisbold #1\hfill}}\bigskip \par\nobreak
  }
 -
  \def\chfopen #1#2{\chapoddpage {\chapfonts
@@ -8902,7 +9635,8 @@
  \def\centerchfopen #1{%
  \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                         \parindent=0pt
-                        \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+-                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
++                       \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
  }
 -
 -\def\CHAPFopen{
@@ -8959,16 +9693,21 @@
 +%
 +\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 \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
@@ -8984,7 +9723,10 @@
 +        \xdef\lastsectiondefs{%
 +          \gdef\noexpand\thissectionname{\the\toks0}%
 +          \gdef\noexpand\thissectionnum{#4}%
-+          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
++          % \noexpand\putwordSection avoids expanding indigestible
++          % commands in some of the translations.
++          \gdef\noexpand\thissection{\noexpand\putwordSection{}
++                                     \noexpand\thissectionnum:
 +                                     \noexpand\thissectionname}%
 +        }%
 +      \fi
@@ -8994,12 +9736,20 @@
 +        \xdef\lastsectiondefs{%
 +          \gdef\noexpand\thissectionname{\the\toks0}%
 +          \gdef\noexpand\thissectionnum{#4}%
-+          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
++          % \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
@@ -9047,11 +9797,9 @@
 +    % 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 \raggedright
--          \hangindent = \wd0 % zero if no section number
--          \unhbox0 #3}%
++    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
 +          \hangindent=\wd0  % zero if no section number
 +          \unhbox0 #1}%
    }%
@@ -9068,18 +9816,17 @@
 +  % 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 +5411,224 @@
+@@ -3754,161 +5893,238 @@ width0pt\relax} \fi
  \newwrite\tocfile
  
  % Write an entry to the toc file, opening it if necessary.
@@ -9138,7 +9885,7 @@
 +% 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
@@ -9211,7 +9958,7 @@
  
 +% redefined for the two-volume lispref.  We always output on
 +% \jobname.toc even if this is redefined.
-+% 
++%
 +\def\tocreadfilename{\jobname.toc}
  
  % Normal (long) toc.
@@ -9275,6 +10022,7 @@
 -   \pageno = \savepageno
 +  \startcontents{\putwordShortTOC}%
 +    %
++    \let\partentry = \shortpartentry
 +    \let\numchapentry = \shortchapentry
 +    \let\appentry = \shortchapentry
 +    \let\unnchapentry = \shortunnchapentry
@@ -9335,7 +10083,19 @@
  
 -% 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}%
@@ -9416,7 +10176,7 @@
  
  % Now for the actual typesetting. In all these, #1 is the text and #2 is the
  % page number.
-@@ -3939,17 +5659,8 @@
+@@ -3939,17 +6155,8 @@ width0pt\relax} \fi
    \tocentry{#1}{\dopageno\bgroup#2\egroup}%
  \endgroup}
  
@@ -9436,7 +10196,7 @@
  
  % Space between chapter (or whatever) number and the title.
  \def\labelspace{\hskip1em \relax}
-@@ -3959,72 +5670,62 @@
+@@ -3959,74 +6166,36 @@ width0pt\relax} \fi
  
  \def\chapentryfonts{\secfonts \rm}
  \def\secentryfonts{\textfonts}
@@ -9466,56 +10226,42 @@
 -%                                      depth .1ex\hfil}
 -%}
 -
- % @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$}
+-% @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\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\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
 -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\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.)
+-
+-% 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
-+\setbox0 = \hbox{\kern-.75pt \reducedsf error\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.
+-   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+-   \advance\hsize by -2\dimen2 % Rules.
 -   \vbox{
-+   \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}
+-      \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.
+-\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 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
@@ -9532,10 +10278,18 @@
 +  \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
-@@ -4036,20 +5737,26 @@
+   \let\bullet=\ptexbullet
+   \let\c=\ptexc
+@@ -4036,20 +6205,26 @@ width0pt\relax} \fi
    \let\equiv=\ptexequiv
    \let\!=\ptexexclam
    \let\i=\ptexi
@@ -9566,7 +10320,7 @@
  
  % Amount to narrow the margins by for @lisp.
  \newskip\lispnarrowing \lispnarrowing=0.4in
-@@ -4059,34 +5766,34 @@
+@@ -4059,34 +6234,34 @@ width0pt\relax} \fi
  % have any width.
  \def\lisppar{\null\endgraf}
  
@@ -9619,7 +10373,7 @@
  \let\nonarrowing=\relax
  
  % @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-@@ -4110,738 +5817,733 @@
+@@ -4110,738 +6285,821 @@ width0pt\relax} \fi
  %
  \newskip\lskip\newskip\rskip
  
@@ -9664,6 +10418,12 @@
 +  \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
@@ -9677,7 +10437,7 @@
 +	      \lineskip=\normlskip
 +	      \parskip=\normpskip
 +	      \vskip -\parskip
-+	      \comment % For explanation, see the end of \def\group.
++	      \comment % For explanation, see the end of def\group.
 +}
  \def\Ecartouche{%
 -                                \endgroup
@@ -9704,6 +10464,7 @@
  
  % 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
@@ -9713,7 +10474,12 @@
    \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.
@@ -9736,12 +10502,38 @@
 -% 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\nonfillfinish{\afterenvbreak\endgroup}
++%
 +\def\smallword{small}
 +\def\nosmallword{nosmall}
 +\let\SETdispenvsize\relax
@@ -9761,40 +10553,33 @@
 +    \ifnum \lastpenalty=10000 \else \endgraf \fi
 +    \smallexamplefonts \rm
 +  \fi
-+}
- 
--% @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
-+% We often define two environments, @foo and @smallfoo.
-+% Let's do it by one command:
-+\def\makedispenv #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
  }
  
 -% @example: Same as @lisp.
 -\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-+% Define two synonyms:
-+\def\maketwodispenvs #1#2#3{
-+  \makedispenv{#1}{#3}
-+  \makedispenv{#2}{#3}
++% 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.
++% @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}
@@ -9814,13 +10599,13 @@
 -% @display: same as @lisp except keep current font.
  %
 -\def\display{\begingroup
-+\maketwodispenvs {lisp}{example}{%
++\maketwodispenvdef{lisp}{example}{%
    \nonfillstart
 -  \let\Edisplay = \nonfillfinish
 -  \gobble
-+  \tt\quoteexpand
++  \tt\setupmarkupstyle{example}%
 +  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-+  \gobble       % eat return
++  \gobble % eat return
  }
 -
 -% @smalldisplay (when @smallbook): @display plus smaller fonts.
@@ -9830,7 +10615,7 @@
 -  \def\Esmalldisplay{\nonfillfinish\endgroup}%
 -  \smallfonts \rm
 -  \display
-+\makedispenv {display}{%
++\makedispenvdef{display}{%
 +  \nonfillstart
 +  \gobble
  }
@@ -9840,7 +10625,7 @@
  %
 -\def\format{\begingroup
 -  \let\nonarrowing = t
-+\makedispenv{format}{%
++\makedispenvdef{format}{%
 +  \let\nonarrowing = t%
    \nonfillstart
 -  \let\Eformat = \nonfillfinish
@@ -9873,11 +10658,36 @@
 +  \let\nonarrowing = t%
    \nonfillstart
 -  \let\Eflushright = \nonfillfinish
-   \advance\leftskip by 0pt plus 1fill
+-  \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.
@@ -9887,7 +10697,9 @@
  %
 -\def\quotation{%
 -  \begingroup\inENV %This group ends at the end of the @quotation body
-+\envdef\quotation{%
++\makedispenvdef{quotation}{\quotationstart}
++%
++\def\quotationstart{%
    {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
 -  \singlespace
    \parindent=0pt
@@ -9911,12 +10723,13 @@
 +%
 +\def\Equotation{%
 +  \par
-+  \ifx\quotationauthor\undefined\else
++  \ifx\quotationauthor\thisisundefined\else
 +    % indent a bit.
 +    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
 +  \fi
 +  {\parskip=0pt \afterenvbreak}%
 +}
++\def\Esmallquotation{\Equotation}
  
 -\message{defuns,}
 -% @defun etc.
@@ -9978,6 +10791,10 @@
 +  \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.
@@ -9992,11 +10809,7 @@
 -  \global\advance \parencount by -1 }
 -% If we encounter &foo, then turn on ()-hacking afterwards
 -\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-+% [Knuth] pp. 380,381,391
-+% Disable Spanish ligatures ?` and !` of \tt font
-+\begingroup
-+  \catcode`\`=\active\gdef`{\relax\lq}
-+\endgroup
++% Setup for the @verb command.
  %
 -\gdef\normalparens{\boldbrax\let&=\ampnr}
 -} % End of definition inside \activeparens
@@ -10012,8 +10825,6 @@
 -{
 -  \catcode`& = 13
 -  \global\let& = \ampnr
-+% Setup for the @verb command.
-+%
 +% Eight spaces for a tab
 +\begingroup
 +  \catcode`\^^I=\active
@@ -10023,7 +10834,7 @@
 +\def\setupverb{%
 +  \tt  % easiest (and conventionally used) font for verbatim
 +  \def\par{\leavevmode\endgraf}%
-+  \catcode`\`=\active
++  \setupmarkupstyle{verb}%
 +  \tabeightspaces
 +  % Respect line breaks,
 +  % print special symbols as themselves, and
@@ -10037,10 +10848,31 @@
 -% #2 should be the type of definition, such as "Function".
 +% Setup for the @verbatim environment
 +%
-+% Real tab expansion
++% Real tab expansion.
 +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
 +%
-+\def\starttabbox{\setbox0=\hbox\bgroup}
++% 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
@@ -10064,108 +10896,33 @@
 -\advance\leftskip by -\defbodyindent
 -\exdentamount=\defbodyindent
 -{\df #1}\enskip        % Generate function name
-+% Allow an option to not replace quotes with a regular directed right
-+% quote/apostrophe (char 0x27), but instead use 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
-+      `%
-+    \else \char'22 \fi
-+  \else \char'22 \fi
-+}
-+%
-+\begingroup
-+  \catcode`\^^I=\active
-+  \gdef\tabexpand{%
-+    \catcode`\^^I=\active
-+    \def^^I{\leavevmode\egroup
-+      \dimen0=\wd0 % the width so far, or since the previous tab
-+      \divide\dimen0 by\tabw
-+      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
-+      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
-+      \wd0=\dimen0 \box0 \starttabbox
-+    }%
-+  }
-+  \catcode`\'=\active
-+  \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}%
-+  %
-+  \catcode`\`=\active
-+  \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}%
-+  %
-+  \gdef\quoteexpand{\rquoteexpand \lquoteexpand}%
-+\endgroup
- 
--% 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.
--
--\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}
 +% start the verbatim environment.
 +\def\setupverbatim{%
 +  \let\nonarrowing = t%
 +  \nonfillstart
-+  % Easiest (and conventionally used) font for verbatim
-+  \tt
-+  \def\par{\leavevmode\egroup\box0\endgraf}%
-+  \catcode`\`=\active
++  \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
-+  \quoteexpand
++  \setupmarkupstyle{verbatim}%
 +  % Respect line breaks,
 +  % print special symbols as themselves, and
-+  % make each space count
-+  % must do in this order:
++  % make each space count.
++  % Must do in this order:
 +  \obeylines \uncatcodespecials \sepspaces
 +  \everypar{\starttabbox}%
-+}
+ }
  
--% #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.
+-% 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\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}}}
++%
 +%    \def\doverb'{'<char>#1<char>'}'{#1}
 +%
 +% [Knuth] p. 382; only eat outer {}
@@ -10204,14 +10961,43 @@
 +}
 +\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.
-+
-+% @verbatiminclude FILE - insert text of file in verbatim environment.
++\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
  %
 -\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
 -  \medbreak
@@ -10221,12 +11007,12 @@
 -  \advance\leftskip by \defbodyindent
 -  \exdentamount=\defbodyindent
 -  \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
-+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
-+%
 +\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
 +  }%
@@ -10329,7 +11115,7 @@
 +    % commands also insert a nobreak penalty, and we don't want to allow
 +    % a break between a section heading and a defun.
 +    %
-+    % As a minor refinement, we avoid "club" headers by signalling
++    % 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.
@@ -10381,7 +11167,7 @@
 +    #1#2 \endheader
 +    % common ending:
 +    \interlinepenalty = 10000
-+    \advance\rightskip by 0pt plus 1fil
++    \advance\rightskip by 0pt plus 1fil\relax
 +    \endgraf
 +    \nobreak\vskip -\parskip
 +    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
@@ -10393,20 +11179,40 @@
  
 -% Fine, but then we have to eventually remove the \empty *and* the
 -% braces (if any).  That's what this does.
--%
--\def\removeemptybraces\empty#1\relax{#1}
 +\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.
-+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-+% the only thing remaining is to define \deffnheader.
++% \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
@@ -10418,12 +11224,8 @@
 -\advance\leftskip by \defbodyindent
 -\exdentamount=\defbodyindent
 -\begingroup\obeylines\spacesplit{#3{#5}}}
-+\def\makedefun#1{%
-+  \expandafter\let\csname E#1\endcsname = \Edefun
-+  \edef\temp{\noexpand\domakedefun
-+    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
-+  \temp
-+}
++\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:
@@ -10431,18 +11233,23 @@
 -%  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.
-+% \domakedefun \deffn \deffnx \deffnheader
-+%
-+% Define \deffn and \deffnx, without parameters.
-+% \deffnheader has to be defined explicitly.
-+%
-+\def\domakedefun#1#2#3{%
-+  \envdef#1{%
-+    \startdefun
-+    \parseargusing\activeparens{\printdefunline#3}%
-+  }%
-+  \def#2{\dodefunx#1}%
-+  \def#3%
++% @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
@@ -10450,7 +11257,7 @@
 -\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
 -\ifx\relax #3%
 -#1{#2}{}\else #1{#2}{#3#4}\fi}}
-+%%% Untyped functions:
++% Untyped functions:
  
 -% So much for the things common to all kinds of definitions.
 +% @deffn category name args
@@ -10494,7 +11301,7 @@
 -\advance\rightskip by 0pt plus 1fil
 -\endgraf\nobreak\vskip -\parskip\nobreak
 -}
-+%%% Typed functions:
++% Typed functions:
  
 -% Do complete processing of one @defun or @defunx line already parsed.
 +% @deftypefn category type name args
@@ -10515,13 +11322,14 @@
 +%
 +\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:
++% Typed variables:
  
 -\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
 -\begingroup\defname {#1}{\putwordDeffunc}%
@@ -10557,11 +11365,13 @@
 -% @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}
-+%%% Untyped variables:
++% @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}
@@ -10575,22 +11385,20 @@
 -\deftypefunargs {#4}\endgroup %
 -\catcode 61=\other % Turn off change made in \defparsebody
 -}
-+% @defvr category var args
-+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
- 
--% @defmac == @deffn Macro
 +% @defcv category class var args
 +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
  
--\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+-% @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
-+%%% Type:
 +% @deftp category name args
 +\makedefun{deftp}#1 #2 #3\endheader{%
 +  \doind{tp}{\code{#2}}%
@@ -10634,25 +11442,49 @@
 -\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
 +  %
-+  % How we'll format the type name.  Putting it in brackets helps
++  % 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.
++  % 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
-+  % (plain.tex says that \dimen1 should be used only as global.)
-+  \parshape 2 0in \dimen0 \defargsindent \dimen2
 +  %
-+  % Put the type name to the right margin.
++  % 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
@@ -10674,8 +11506,16 @@
 +    % . this still does not fix the ?` and !` ligatures, but so far no
 +    %   one has made identifiers using them :).
 +    \df \tt
-+    \def\temp{#2}% return value type
-+    \ifx\temp\empty\else \tclose{\temp} \fi
++    \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
@@ -10709,7 +11549,7 @@
 +  %
 +  % 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.
-+  \let\var=\ttslanted
++  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
 +  #1%
 +  \sl\hyphenchar\font=45
  }
@@ -10942,10 +11782,11 @@
  
  
  \message{macros,}
-@@ -4850,42 +6552,68 @@
+@@ -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
+-\ifx\eTeXversion\undefined
 - \newwrite\macscribble
 - \def\scanmacro#1{%
 -   \begingroup \newlinechar`\^^M
@@ -10966,6 +11807,7 @@
 -% 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}%
@@ -10976,25 +11818,30 @@
 +  }
  \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 \example
-+    \spaceisspace
-+    %
-+    % Append \endinput to make sure that TeX does not see the ending newline.
-+    % I've verified that it is necessary both for e-TeX and for ordinary TeX
-+    %							--kasal, 29nov03
-+    \scantokens{#1\endinput}%
-+  \endgroup
-+}
++\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}}%
@@ -11025,7 +11872,7 @@
 +% 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
@@ -11039,7 +11886,7 @@
  
  % Trim leading and trailing spaces off a string.
  % Concepts from aro-bend problem 15 (see CTAN).
-@@ -4898,7 +6626,7 @@
+@@ -4898,7 +7187,7 @@ width0pt\relax} \fi
  }
  
  % Trim a single trailing ^^M off a string.
@@ -11048,19 +11895,25 @@
  \gdef\eatcr #1{\eatcra #1Q^^MQ}%
  \gdef\eatcra#1^^MQ{\eatcrb#1Q}%
  \gdef\eatcrb#1Q#2Q{#1}%
-@@ -4908,34 +6636,45 @@
- % all characters are catcode 10, 11 or 12, except \ which is active
- % (as in normal texinfo). It is necessary to change the definition of \.
+@@ -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
++% done by making ^^M (\endlinechar) catcode 12 when reading the macro
  % body, and then making it the \newlinechar in \scanmacro.
- 
-+\def\scanctxt{%
++%
++\def\scanctxt{% used as subroutine
 +  \catcode`\"=\other
 +  \catcode`\+=\other
 +  \catcode`\<=\other
@@ -11072,14 +11925,8 @@
 +  \catcode`\~=\other
 +  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
 +}
-+
-+\def\scanargctxt{%
-+  \scanctxt
-+  \catcode`\\=\other
-+  \catcode`\^^M=\other
-+}
-+
- \def\macrobodyctxt{%
+ 
+-\def\macrobodyctxt{%
 -  \catcode`\~=12
 -  \catcode`\^=12
 -  \catcode`\_=12
@@ -11092,14 +11939,41 @@
 -  \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{%
+-\def\macroargctxt{%
 -  \catcode`\~=12
 -  \catcode`\^=12
 -  \catcode`\_=12
@@ -11109,13 +11983,41 @@
 -  \catcode`\+=12
 -  \catcode`\@=12
 -  \catcode`\\=12}
-+  \scanctxt
-+  \catcode`\\=\other
-+}
  
  % \mbodybackslash is the definition of \ in @macro bodies.
  % It maps \foo\ => \csname macarg.foo\endcsname => #N
-@@ -4963,45 +6702,42 @@
+ % 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
@@ -11179,11 +12081,376 @@
  % 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.
-@@ -5111,34 +6847,31 @@
+ \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)
+-% 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
@@ -11199,8 +12466,10 @@
  
  % @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.
+-% 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
@@ -11225,8 +12494,11 @@
  \newif\ifhavexrefs    % True if xref values are known.
  \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
  
-@@ -5147,56 +6880,68 @@
- \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ % @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.
@@ -11326,14 +12598,35 @@
 +      \toks0 = \expandafter{\lastsection}%
 +      \immediate \writexrdef{title}{\the\toks0 }%
 +      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
-+      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout
++      \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,135 +6954,162 @@
+@@ -5209,140 +7805,167 @@ width0pt\relax} \fi
  \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
    \unsepspaces
    \def\printedmanual{\ignorespaces #5}%
@@ -11345,7 +12638,8 @@
 +  \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
++    \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}%
@@ -11394,9 +12688,8 @@
 +     % etc. don't get their TeX definitions.
 +     \getfilename{#4}%
 +     %
-+     % See comments at \activebackslashdouble.
-+     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
-+      \backslashparens\pdfxrefdest}%
++     \edef\pdfxrefdest{#1}%
++     \txiescapepdf\pdfxrefdest
 +     %
 +     \leavevmode
 +     \startlink attr{/Border [0 0 0]}%
@@ -11592,7 +12885,14 @@
      % If not defined, say something at least.
      \angleleft un\-de\-fined\angleright
      \iflinks
-@@ -5352,22 +7124,59 @@
+       \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.
@@ -11660,7 +12960,7 @@
    \catcode`\^^@=\other
    \catcode`\^^A=\other
    \catcode`\^^B=\other
-@@ -5395,9 +7204,7 @@
+@@ -5395,9 +8055,7 @@ width0pt\relax} \fi
    \catcode`\^^]=\other
    \catcode`\^^^=\other
    \catcode`\^^_=\other
@@ -11671,7 +12971,7 @@
    % 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 +7217,9 @@
+@@ -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.
    %
@@ -11681,7 +12981,7 @@
    \catcode`\~=\other
    \catcode`\[=\other
    \catcode`\]=\other
-@@ -5421,41 +7231,43 @@
+@@ -5421,41 +8082,43 @@ width0pt\relax} \fi
    \catcode`\$=\other
    \catcode`\#=\other
    \catcode`\&=\other
@@ -11750,8 +13050,12 @@
  
  \newcount \footnoteno
  
-@@ -5469,37 +7281,39 @@
- % @footnotestyle is meaningful for info output only.
+@@ -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
@@ -11797,7 +13101,7 @@
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\ht\strutbox % top baseline for broken footnotes
    \splitmaxdepth\dp\strutbox
-@@ -5512,8 +7326,15 @@
+@@ -5512,76 +8177,87 @@ width0pt\relax} \fi
    %
    \smallfonts \rm
    %
@@ -11815,8 +13119,11 @@
    \textindent{\thisfootno}%
    %
    % Don't crash into the line above the footnote text.  Since this
-@@ -5522,66 +7343,68 @@
+   % 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
@@ -11936,7 +13243,7 @@
  
  % @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 +7414,12 @@
+@@ -5591,12 +8267,12 @@ width0pt\relax} \fi
  % undone and the next image would fail.
  \openin 1 = epsf.tex
  \ifeof 1 \else
@@ -11952,7 +13259,15 @@
  %
  % We will only complain once about lack of epsf.tex.
  \newif\ifwarnednoepsf
-@@ -5612,77 +7435,1180 @@
+@@ -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
@@ -11968,7 +13283,7 @@
 -\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 this stuff.
++% #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
@@ -12288,12 +13603,13 @@
  \message{localization,}
 -% and i18n.
  
- % @documentlanguage is usually given very early, just after
- % @setfilename.  If done too late, it may not override everything
+-% @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.
-+% properly.  Single argument is the language (de) or locale (de_DE)
-+% abbreviation.  It would be nice if we could set up a hyphenation file.
++% 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{%
@@ -12309,17 +13625,17 @@
 +    \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
++  \endgroup % end raw TeX
 +\endgroup}
-+}
 +%
 +% If they passed de_DE, and txi-de_DE.tex doesn't exist,
 +% try txi-de.tex.
-+% 
-+\def\documentlanguagetrywithoutunderscore#1_#2\finish{%
++%
++\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
    \openin 1 txi-#1.tex
 -  \ifeof1
 +  \ifeof 1
@@ -12328,17 +13644,51 @@
 -    \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?  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{%
@@ -12349,9 +13699,6 @@
 +   \repeat
 +}
  
--% @documentencoding should change something in TeX eventually, most
--% likely, but for now just recognize it.
--\let\documentencoding = \comment
 +\def\setnonasciicharscatcodenonglobal#1{%
 +   \count255=128
 +   \loop\ifnum\count255<256
@@ -12359,7 +13706,8 @@
 +      \advance\count255 by 1
 +   \repeat
 +}
-+
+ 
+-% Page size parameters.
 +% @documentencoding sets the definition of non-ASCII characters
 +% according to the specified encoding.
 +%
@@ -12382,7 +13730,7 @@
 +     \setnonasciicharscatcode\active
 +     \lattwochardefs
 +  %
-+  \else \ifx \declaredencoding \latone 
++  \else \ifx \declaredencoding \latone
 +     \setnonasciicharscatcode\active
 +     \latonechardefs
 +  %
@@ -12394,7 +13742,7 @@
 +     \setnonasciicharscatcode\active
 +     \utfeightchardefs
 +  %
-+  \else 
++  \else
 +    \message{Unknown document encoding #1, ignoring.}%
 +  %
 +  \fi % utfeight
@@ -12403,13 +13751,12 @@
 +  \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.}}
- 
--% Page size parameters.
++
 +% Take account of \c (plain) vs. \, (Texinfo) difference.
 +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
 +
@@ -12417,24 +13764,24 @@
 +% 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{~} 
++  \gdef^^a0{\tie}
 +  \gdef^^a1{\exclamdown}
-+  \gdef^^a2{\missingcharmsg{CENT SIGN}} 
++  \gdef^^a2{\missingcharmsg{CENT SIGN}}
 +  \gdef^^a3{{\pounds}}
 +  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
 +  \gdef^^a5{\missingcharmsg{YEN SIGN}}
-+  \gdef^^a6{\missingcharmsg{BROKEN BAR}} 
++  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
 +  \gdef^^a7{\S}
-+  \gdef^^a8{\"{}} 
-+  \gdef^^a9{\copyright} 
++  \gdef^^a8{\"{}}
++  \gdef^^a9{\copyright}
 +  \gdef^^aa{\ordf}
-+  \gdef^^ab{\missingcharmsg{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}} 
++  \gdef^^ab{\guillemetleft}
 +  \gdef^^ac{$\lnot$}
-+  \gdef^^ad{\-} 
-+  \gdef^^ae{\registeredsymbol} 
++  \gdef^^ad{\-}
++  \gdef^^ae{\registeredsymbol}
 +  \gdef^^af{\={}}
 +  %
 +  \gdef^^b0{\textdegree}
@@ -12450,7 +13797,7 @@
 +  \gdef^^b9{$^1$}
 +  \gdef^^ba{\ordm}
 +  %
-+  \gdef^^bb{\missingcharmsg{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}}
++  \gdef^^bb{\guillemetright}
 +  \gdef^^bc{$1\over4$}
 +  \gdef^^bd{$1\over2$}
 +  \gdef^^be{$3\over4$}
@@ -12461,7 +13808,7 @@
 +  \gdef^^c2{\^A}
 +  \gdef^^c3{\~A}
 +  \gdef^^c4{\"A}
-+  \gdef^^c5{\ringaccent A} 
++  \gdef^^c5{\ringaccent A}
 +  \gdef^^c6{\AE}
 +  \gdef^^c7{\cedilla C}
 +  \gdef^^c8{\`E}
@@ -12473,7 +13820,7 @@
 +  \gdef^^ce{\^I}
 +  \gdef^^cf{\"I}
 +  %
-+  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}}
++  \gdef^^d0{\DH}
 +  \gdef^^d1{\~N}
 +  \gdef^^d2{\`O}
 +  \gdef^^d3{\'O}
@@ -12487,7 +13834,7 @@
 +  \gdef^^db{\^U}
 +  \gdef^^dc{\"U}
 +  \gdef^^dd{\'Y}
-+  \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}}
++  \gdef^^de{\TH}
 +  \gdef^^df{\ss}
 +  %
 +  \gdef^^e0{\`a}
@@ -12507,7 +13854,7 @@
 +  \gdef^^ee{\^{\dotless i}}
 +  \gdef^^ef{\"{\dotless i}}
 +  %
-+  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}}
++  \gdef^^f0{\dh}
 +  \gdef^^f1{\~n}
 +  \gdef^^f2{\`o}
 +  \gdef^^f3{\'o}
@@ -12521,7 +13868,7 @@
 +  \gdef^^fb{\^u}
 +  \gdef^^fc{\"u}
 +  \gdef^^fd{\'y}
-+  \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}}
++  \gdef^^fe{\th}
 +  \gdef^^ff{\"y}
 +}
 +
@@ -12542,8 +13889,8 @@
 +
 +% Latin2 (ISO-8859-2) character definitions.
 +\def\lattwochardefs{%
-+  \gdef^^a0{~}
-+  \gdef^^a1{\missingcharmsg{LATIN CAPITAL LETTER A WITH OGONEK}}
++  \gdef^^a0{\tie}
++  \gdef^^a1{\ogonek{A}}
 +  \gdef^^a2{\u{}}
 +  \gdef^^a3{\L}
 +  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
@@ -12560,8 +13907,8 @@
 +  \gdef^^af{\dotaccent Z}
 +  %
 +  \gdef^^b0{\textdegree}
-+  \gdef^^b1{\missingcharmsg{LATIN SMALL LETTER A WITH OGONEK}}
-+  \gdef^^b2{\missingcharmsg{OGONEK}}
++  \gdef^^b1{\ogonek{a}}
++  \gdef^^b2{\ogonek{ }}
 +  \gdef^^b3{\l}
 +  \gdef^^b4{\'{}}
 +  \gdef^^b5{\v l}
@@ -12586,14 +13933,14 @@
 +  \gdef^^c7{\cedilla C}
 +  \gdef^^c8{\v C}
 +  \gdef^^c9{\'E}
-+  \gdef^^ca{\missingcharmsg{LATIN CAPITAL LETTER E WITH OGONEK}}
++  \gdef^^ca{\ogonek{E}}
 +  \gdef^^cb{\"E}
 +  \gdef^^cc{\v E}
 +  \gdef^^cd{\'I}
 +  \gdef^^ce{\^I}
 +  \gdef^^cf{\v D}
 +  %
-+  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}}
++  \gdef^^d0{\DH}
 +  \gdef^^d1{\'N}
 +  \gdef^^d2{\v N}
 +  \gdef^^d3{\'O}
@@ -12602,7 +13949,7 @@
 +  \gdef^^d6{\"O}
 +  \gdef^^d7{$\times$}
 +  \gdef^^d8{\v R}
-+  \gdef^^d9{\ringaccent U} 
++  \gdef^^d9{\ringaccent U}
 +  \gdef^^da{\'U}
 +  \gdef^^db{\H U}
 +  \gdef^^dc{\"U}
@@ -12620,14 +13967,14 @@
 +  \gdef^^e7{\cedilla c}
 +  \gdef^^e8{\v c}
 +  \gdef^^e9{\'e}
-+  \gdef^^ea{\missingcharmsg{LATIN SMALL LETTER E WITH OGONEK}}
++  \gdef^^ea{\ogonek{e}}
 +  \gdef^^eb{\"e}
 +  \gdef^^ec{\v e}
-+  \gdef^^ed{\'\i}
-+  \gdef^^ee{\^\i}
++  \gdef^^ed{\'{\dotless{i}}}
++  \gdef^^ee{\^{\dotless{i}}}
 +  \gdef^^ef{\v d}
 +  %
-+  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}}
++  \gdef^^f0{\dh}
 +  \gdef^^f1{\'n}
 +  \gdef^^f2{\v n}
 +  \gdef^^f3{\'o}
@@ -12646,11 +13993,11 @@
 +}
 +
 +% 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
@@ -12660,7 +14007,7 @@
 +%
 +\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}
 +
@@ -12715,7 +14062,7 @@
 +
 +  \gdef\DeclareUnicodeCharacter#1#2{%
 +    \countUTFz = "#1\relax
-+    \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
++    %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
 +    \begingroup
 +      \parseXMLCharref
 +      \def\UTFviiiTwoOctets##1##2{%
@@ -12800,6 +14147,7 @@
 +  \DeclareUnicodeCharacter{00CE}{\^I}
 +  \DeclareUnicodeCharacter{00CF}{\"I}
 +
++  \DeclareUnicodeCharacter{00D0}{\DH}
 +  \DeclareUnicodeCharacter{00D1}{\~N}
 +  \DeclareUnicodeCharacter{00D2}{\`O}
 +  \DeclareUnicodeCharacter{00D3}{\'O}
@@ -12812,6 +14160,7 @@
 +  \DeclareUnicodeCharacter{00DB}{\^U}
 +  \DeclareUnicodeCharacter{00DC}{\"U}
 +  \DeclareUnicodeCharacter{00DD}{\'Y}
++  \DeclareUnicodeCharacter{00DE}{\TH}
 +  \DeclareUnicodeCharacter{00DF}{\ss}
 +
 +  \DeclareUnicodeCharacter{00E0}{\`a}
@@ -12831,6 +14180,7 @@
 +  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
 +  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
 +
++  \DeclareUnicodeCharacter{00F0}{\dh}
 +  \DeclareUnicodeCharacter{00F1}{\~n}
 +  \DeclareUnicodeCharacter{00F2}{\`o}
 +  \DeclareUnicodeCharacter{00F3}{\'o}
@@ -12843,16 +14193,21 @@
 +  \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}}
@@ -13000,6 +14355,8 @@
 +  \DeclareUnicodeCharacter{0233}{\=y}
 +  \DeclareUnicodeCharacter{0237}{\dotless{j}}
 +
++  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
++
 +  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
 +  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
 +  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
@@ -13167,16 +14524,21 @@
  \newdimen\defaultparindent \defaultparindent = 15pt
  
  \chapheadingskip = 15pt plus 4pt minus 2pt
-@@ -5695,7 +8621,7 @@
- % Don't be so finicky about underfull hboxes, either.
- \hbadness = 2000
+@@ -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 +8639,14 @@
+@@ -5713,11 +9530,14 @@ should work if nowhere else does.}
    \fi
  }
  
@@ -13195,7 +14557,7 @@
    \voffset = #3\relax
    \topskip = #6\relax
    \splittopskip = \topskip
-@@ -5736,6 +8665,17 @@
+@@ -5736,6 +9556,17 @@ should work if nowhere else does.}
    \normaloffset = #4\relax
    \bindingoffset = #5\relax
    %
@@ -13213,7 +14575,7 @@
    \parindent = \defaultparindent
    \setemergencystretch
  }
-@@ -5743,76 +8683,140 @@
+@@ -5743,76 +9574,140 @@ should work if nowhere else does.}
  % @letterpaper (the default).
  \def\letterpaper{{\globaldefs = 1
    \parskip = 3pt plus 2pt minus 1pt
@@ -13309,12 +14671,12 @@
 +\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
@@ -13380,12 +14742,43 @@
  }}
  
  % Set default to letter.
-@@ -5840,10 +8844,10 @@
- \def\normalless{<}
- \def\normalgreater{>}
- \def\normalplus{+}
+@@ -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{$}
-+\def\normaldollar{$}%$ font-lock fix
++\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,
@@ -13394,7 +14787,7 @@
  % 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 +8879,9 @@
+@@ -5875,8 +9766,9 @@ should work if nowhere else does.}
  
  \catcode`\_=\active
  \def_{\ifusingtt\normalunderscore\_}
@@ -13405,7 +14798,7 @@
  
  \catcode`\|=\active
  \def|{{\tt\char124}}
-@@ -5889,16 +8894,7 @@
+@@ -5889,16 +9781,7 @@ should work if nowhere else does.}
  \catcode`\+=\active
  \def+{{\tt \char 43}}
  \catcode`\$=\active
@@ -13423,45 +14816,53 @@
  
  % 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 +8902,53 @@
+@@ -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}
  
--\catcode`\@=0
 +% 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{\}}
-+\catcode`\@=0
- 
--% \rawbackslash redefines \ as input to do \rawbackslashxx.
--{\catcode`\\=\active
-- at gdef@rawbackslash{@let\=@rawbackslashxx }}
 +% \backslashcurfont outputs one backslash character in current font,
 +% as in \char`\\.
 +\global\chardef\backslashcurfont=`\\
 +\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
  
--% \normalbackslash outputs one backslash in fixed width font.
--\def\normalbackslash{{\tt\rawbackslashxx}}
+-% \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{\\}}
  
--% \catcode 17=0   % Define control-q
+-% \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
-+ at def@normalbackslash{{@tt at backslashcurfont}}
-+% On startup, @fixbackslash assigns:
-+%  @let \ = @normalbackslash
++\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.
@@ -13475,9 +14876,11 @@
 - 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.
++% catcode other.  We switch back and forth between these.
 + at gdef@rawbackslash{@let\=@backslashcurfont}
 + at gdef@otherbackslash{@let\=@realbackslash}
  
@@ -13493,24 +14896,26 @@
 - at let$=@normaldollar}
 +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
 +% the literal character `\'.
-+% 
++%
 + at def@normalturnoffactive{%
-+  @let\=@normalbackslash
 +  @let"=@normaldoublequote
-+  @let~=@normaltilde
++  @let$=@normaldollar %$ font-lock fix
++  @let+=@normalplus
++  @let<=@normalless
++  @let>=@normalgreater
++  @let\=@normalbackslash
 +  @let^=@normalcaret
 +  @let_=@normalunderscore
 +  @let|=@normalverticalbar
-+  @let<=@normalless
-+  @let>=@normalgreater
-+  @let+=@normalplus
-+  @let$=@normaldollar %$ font-lock fix
++  @let~=@normaltilde
++  @markupsetuplqdefault
++  @markupsetuprqdefault
 +  @unsepspaces
 +}
  
  % Make _ and + \other characters, temporarily.
  % This is canceled by @fixbackslash.
-@@ -5959,9 +8962,9 @@
+@@ -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
@@ -13522,24 +14927,43 @@
  % file name, in case not using a pre-dumped format.
  %
  @gdef at fixbackslash{%
-@@ -5973,15 +8976,11 @@
+@@ -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.  
-+% These look ok in all fonts, so just make them not special.
- @catcode`@& = @other
- @catcode`@# = @other
- @catcode`@% = @other
+- 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 +8989,9 @@
+@@ -5990,3 +9905,9 @@ should work if nowhere else does.}
  @c time-stamp-format: "%:y-%02m-%02d.%02H"
  @c time-stamp-end: "}"
  @c End:
@@ -13550,8 +14974,8 @@
 +   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
 + at end ignore
 --- ./ltmain.sh.orig	2002-08-08 23:49:32.000000000 -0600
-+++ ./ltmain.sh	2012-01-09 20:36:31.000000000 -0700
-@@ -1,199 +1,928 @@
++++ ./ltmain.sh	2012-07-26 09:59:36.977378175 -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.
 -#
@@ -13561,11 +14985,11 @@
 -#
 -# This program is free software; you can redistribute it and/or modify
 +
-+# libtool (GNU libtool) 2.4
++# libtool (GNU libtool) 2.4.2
 +# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 +
 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++# 2007, 2008, 2009, 2010, 2011 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.
 +
@@ -13610,6 +15034,7 @@
 +#       --quiet, --silent    don't print informational messages
 +#       --no-quiet, --no-silent
 +#                            print informational messages (default)
++#       --no-warn            don't display warning messages
 +#       --tag=TAG            use configuration variables from tag TAG
 +#   -v, --verbose            print more informational messages than default
 +#       --no-verbose         don't print the extra informational messages
@@ -13638,7 +15063,7 @@
 +#         compiler:		$LTCC
 +#         compiler flags:		$LTCFLAGS
 +#         linker:		$LD (gnu? $with_gnu_ld)
-+#         $progname:	(GNU libtool) 2.4
++#         $progname:	(GNU libtool) 2.4.2
 +#         automake:	$automake_version
 +#         autoconf:	$autoconf_version
 +#
@@ -13658,9 +15083,9 @@
 -  :
 +PROGRAM=libtool
 +PACKAGE=libtool
-+VERSION=2.4
++VERSION=2.4.2
 +TIMESTAMP=""
-+package_revision=1.3293
++package_revision=1.3337
 +
 +# Be Bourne compatible
 +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -13766,15 +15191,10 @@
 -fi
 +: ${CP="cp -f"}
 +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-+: ${EGREP="/bin/grep -E"}
-+: ${FGREP="/bin/grep -F"}
-+: ${GREP="/bin/grep"}
-+: ${LN_S="ln -s"}
 +: ${MAKE="make"}
 +: ${MKDIR="mkdir"}
 +: ${MV="mv -f"}
 +: ${RM="rm -f"}
-+: ${SED="/bin/sed"}
 +: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 +: ${Xsed="$SED -e 1s/^X//"}
  
@@ -14080,7 +15500,7 @@
 +     ;;
 +  *)
 +     save_IFS="$IFS"
-+     IFS=:
++     IFS=${PATH_SEPARATOR-:}
 +     for progdir in $PATH; do
 +       IFS="$save_IFS"
 +       test -x "$progdir/$progname" && break
@@ -14464,8 +15884,8 @@
 +	s*\$LTCFLAGS*'"$LTCFLAGS"'*
 +	s*\$LD*'"$LD"'*
 +	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-+	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-+	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
++	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
++	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
 +	p
 +	d
 +     }
@@ -14633,7 +16053,7 @@
      echo "host: $host"
      if test "$build_libtool_libs" = yes; then
        echo "enable shared libraries"
-@@ -205,349 +934,1184 @@
+@@ -205,349 +930,1189 @@ do
      else
        echo "disable static libraries"
      fi
@@ -14766,6 +16186,7 @@
 +opt_help=false
 +opt_help_all=false
 +opt_silent=:
++opt_warning=:
 +opt_verbose=:
 +opt_silent=false
 +opt_verbose=false
@@ -14840,6 +16261,10 @@
 +			opt_silent=false
 +func_append preserve_args " $opt"
 +			;;
++      --no-warning|--no-warn)
++			opt_warning=false
++func_append preserve_args " $opt"
++			;;
 +      --no-verbose)
 +			opt_verbose=false
 +func_append preserve_args " $opt"
@@ -15979,7 +17404,7 @@
 +    *.[cCFSifmso] | \
 +    *.ada | *.adb | *.ads | *.asm | \
 +    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-+    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
++    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
 +      func_xform "$libobj"
 +      libobj=$func_xform_result
 +      ;;
@@ -16093,7 +17518,7 @@
  
      # Delete any leftover library objects.
      if test "$build_old_libs" = yes; then
-@@ -556,16 +2120,13 @@
+@@ -556,16 +2121,13 @@ if test -z "$show_help"; then
        removelist="$lobj $libobj ${libobj}T"
      fi
  
@@ -16112,7 +17537,7 @@
        # non-PIC code in shared libraries is not supported
        pic_mode=default
      fi
-@@ -573,10 +2134,8 @@
+@@ -573,10 +2135,8 @@ if test -z "$show_help"; then
      # Calculate the filename of the output object if compiler does
      # not support -o with -c
      if test "$compiler_c_o" = no; then
@@ -16124,7 +17549,7 @@
      else
        output_obj=
        need_locks=no
-@@ -586,13 +2145,13 @@
+@@ -586,13 +2146,13 @@ if test -z "$show_help"; then
      # Lock this critical section if it is needed
      # We use this script file to make the link, it avoids creating a new file
      if test "$need_locks" = yes; then
@@ -16141,7 +17566,7 @@
  *** ERROR, $lockfile exists and contains:
  `cat $lockfile 2>/dev/null`
  
-@@ -603,29 +2162,21 @@
+@@ -603,29 +2163,21 @@ repeat this compilation, it may succeed,
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
@@ -16182,7 +17607,7 @@
  
      # Only build a PIC object if we are building libtool libraries.
      if test "$build_libtool_libs" = yes; then
-@@ -633,38 +2184,25 @@
+@@ -633,38 +2185,25 @@ EOF
        fbsd_hideous_sh_bug=$base_compile
  
        if test "$pic_mode" != no; then
@@ -16230,7 +17655,7 @@
  *** ERROR, $lockfile contains:
  `cat $lockfile 2>/dev/null`
  
-@@ -678,63 +2216,42 @@
+@@ -678,63 +2217,42 @@ repeat this compilation, it may succeed,
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
@@ -16310,7 +17735,7 @@
  *** ERROR, $lockfile contains:
  `cat $lockfile 2>/dev/null`
  
-@@ -748,57 +2265,2828 @@
+@@ -748,57 +2266,2839 @@ repeat this compilation, it may succeed,
  avoid parallel builds (make -j) in this platform, or get a better
  compiler."
  
@@ -17275,11 +18700,13 @@
 +
 +      # Set up the ranlib parameters.
 +      oldlib="$destdir/$name"
++      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
++      tool_oldlib=$func_to_tool_file_result
 +
 +      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 +
 +      if test -n "$stripme" && test -n "$old_striplib"; then
-+	func_show_eval "$old_striplib $oldlib" 'exit $?'
++	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
 +      fi
 +
 +      # Do each command in the postinstall commands.
@@ -17544,7 +18971,7 @@
 +	  # linked before any other PIC object.  But we must not use
 +	  # pic_flag when linking with -static.  The problem exists in
 +	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
++	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 +	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
 +	  *-*-hpux*)
 +	    pic_flag_for_symtable=" $pic_flag"  ;;
@@ -17618,7 +19045,7 @@
 +  case $win32_fileres in
 +  *ar\ archive\ import\ library*) # definitely import
 +    win32_libid_type="x86 archive import"
-+    ;;
+     ;;
 +  *ar\ archive*) # could be an import, or static
 +    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
 +    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
@@ -17648,7 +19075,7 @@
 +      win32_libid_type="x86 DLL"
 +      ;;
 +    esac
-     ;;
++    ;;
 +  esac
 +  $ECHO "$win32_libid_type"
 +}
@@ -18059,14 +19486,17 @@
 +# launches target application with the remaining arguments.
 +func_exec_program ()
 +{
-+  for lt_wr_arg
-+  do
-+    case \$lt_wr_arg in
-+    --lt-*) ;;
-+    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
-+    esac
-+    shift
-+  done
++  case \" \$* \" in
++  *\\ --lt-*)
++    for lt_wr_arg
++    do
++      case \$lt_wr_arg in
++      --lt-*) ;;
++      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
++      esac
++      shift
++    done ;;
++  esac
 +  func_exec_program_core \${1+\"\$@\"}
 +}
 +
@@ -19134,9 +20564,15 @@
 +{
 +EOF
 +	    func_emit_wrapper yes |
-+              $SED -e 's/\([\\"]\)/\\\1/g' \
-+	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
-+
++	      $SED -n -e '
++s/^\(.\{79\}\)\(..*\)/\1\
++\2/
++h
++s/\([\\"]\)/\\\1/g
++s/$/\\n/
++s/\([^\n]*\).*/  fputs ("\1", f);/p
++g
++D'
 +            cat <<"EOF"
 +}
 +EOF
@@ -19169,7 +20605,7 @@
        # allow_undefined=no
  
        # FIXME: Unfortunately, there are problems with the above when trying
-@@ -812,10 +5100,10 @@
+@@ -812,10 +5112,10 @@ EOF
        allow_undefined=yes
        ;;
      esac
@@ -19184,7 +20620,7 @@
  
      compile_rpath=
      finalize_rpath=
-@@ -829,8 +5117,11 @@
+@@ -829,8 +5129,11 @@ EOF
      linker_flags=
      dllsearchpath=
      lib_search_path=`pwd`
@@ -19196,7 +20632,7 @@
      dlfiles=
      dlprefiles=
      dlself=no
-@@ -844,6 +5135,7 @@
+@@ -844,6 +5147,7 @@ EOF
      no_install=no
      objs=
      non_pic_objects=
@@ -19204,7 +20640,7 @@
      prefer_static_libs=no
      preload=no
      prev=
-@@ -855,27 +5147,47 @@
+@@ -855,27 +5159,47 @@ EOF
      temp_rpath=
      thread_safe=no
      vinfo=
@@ -19258,7 +20694,7 @@
  	break
  	;;
        esac
-@@ -885,33 +5197,33 @@
+@@ -885,33 +5209,33 @@ EOF
      test -n "$old_archive_from_new_cmds" && build_old_libs=yes
  
      # Go through the arguments, transforming them on the way.
@@ -19305,7 +20741,7 @@
  	    preload=yes
  	  fi
  	  case $arg in
-@@ -938,9 +5250,9 @@
+@@ -938,9 +5262,9 @@ EOF
  	    ;;
  	  *)
  	    if test "$prev" = dlfiles; then
@@ -19317,7 +20753,7 @@
  	    fi
  	    prev=
  	    continue
-@@ -949,10 +5261,8 @@
+@@ -949,10 +5273,8 @@ EOF
  	  ;;
  	expsyms)
  	  export_symbols="$arg"
@@ -19330,7 +20766,7 @@
  	  prev=
  	  continue
  	  ;;
-@@ -961,115 +5271,127 @@
+@@ -961,115 +5283,127 @@ EOF
  	  prev=
  	  continue
  	  ;;
@@ -19544,7 +20980,7 @@
  	  prev=
  	  continue
  	  ;;
-@@ -1078,37 +5400,54 @@
+@@ -1078,37 +5412,54 @@ EOF
  	  case $arg in
  	  [\\/]* | [A-Za-z]:[\\/]*) ;;
  	  *)
@@ -19610,7 +21046,7 @@
  	  continue
  	  ;;
  	*)
-@@ -1117,23 +5456,23 @@
+@@ -1117,23 +5468,23 @@ EOF
  	  continue
  	  ;;
  	esac
@@ -19639,7 +21075,7 @@
  	;;
  
        -avoid-version)
-@@ -1141,6 +5480,11 @@
+@@ -1141,6 +5492,11 @@ EOF
  	continue
  	;;
  
@@ -19651,7 +21087,7 @@
        -dlopen)
  	prev=dlfiles
  	continue
-@@ -1158,8 +5502,7 @@
+@@ -1158,8 +5514,7 @@ EOF
  
        -export-symbols | -export-symbols-regex)
  	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
@@ -19661,7 +21097,7 @@
  	fi
  	if test "X$arg" = "X-export-symbols"; then
  	  prev=expsyms
-@@ -1169,44 +5512,74 @@
+@@ -1169,44 +5524,74 @@ EOF
  	continue
  	;;
  
@@ -19749,7 +21185,7 @@
  	  esac
  	  ;;
  	esac
-@@ -1216,17 +5589,41 @@
+@@ -1216,17 +5601,41 @@ EOF
        -l*)
  	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
  	  case $host in
@@ -19794,7 +21230,7 @@
  	continue
  	;;
  
-@@ -1235,6 +5632,33 @@
+@@ -1235,6 +5644,34 @@ EOF
  	continue
  	;;
  
@@ -19809,7 +21245,8 @@
 +	continue
 +	;;
 +
-+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
++      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
++      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 +	func_append compiler_flags " $arg"
 +	func_append compile_command " $arg"
 +	func_append finalize_command " $arg"
@@ -19828,7 +21265,7 @@
        -no-fast-install)
  	fast_install=no
  	continue
-@@ -1242,11 +5666,11 @@
+@@ -1242,11 +5679,11 @@ EOF
  
        -no-install)
  	case $host in
@@ -19844,7 +21281,7 @@
  	  fast_install=no
  	  ;;
  	*) no_install=yes ;;
-@@ -1266,6 +5690,11 @@
+@@ -1266,6 +5703,11 @@ EOF
  
        -o) prev=output ;;
  
@@ -19856,7 +21293,7 @@
        -release)
  	prev=release
  	continue
-@@ -1282,23 +5711,37 @@
+@@ -1282,23 +5724,37 @@ EOF
  	;;
  
        -R*)
@@ -19899,7 +21336,7 @@
  	# The effects of -static are defined in a previous loop.
  	# We used to do the same as -all-static on platforms that
  	# didn't have a PIC flag, but the assumption that the effects
-@@ -1317,41 +5760,48 @@
+@@ -1317,41 +5773,48 @@ EOF
  	continue
  	;;
  
@@ -19969,7 +21406,7 @@
  	;;
  
        -Xcompiler)
-@@ -1364,136 +5814,156 @@
+@@ -1364,136 +5827,156 @@ EOF
  	continue
  	;;
  
@@ -20203,7 +21640,7 @@
  	fi
  	continue
  	;;
-@@ -1502,113 +5972,53 @@
+@@ -1502,113 +5985,53 @@ EOF
        *)
  	# Unknown arguments in both finalize_command and compile_command need
  	# to be aesthetically quoted because they are evaled later.
@@ -20335,7 +21772,7 @@
        ;;
      *.$libext) linkmode=oldlib ;;
      *.lo | *.$objext) linkmode=obj ;;
-@@ -1617,29 +6027,34 @@
+@@ -1617,29 +6040,34 @@ EOF
      esac
  
      specialdeplibs=
@@ -20381,7 +21818,7 @@
        pre_post_deps=
      fi
  
-@@ -1649,15 +6064,15 @@
+@@ -1649,15 +6077,15 @@ EOF
      need_relink=no # whether we're linking any uninstalled libtool libraries
      notinst_deplibs= # not-installed libtool libraries
      notinst_path= # paths that contain not-installed libtool libraries
@@ -20400,7 +21837,7 @@
  	    ;;
  	  esac
  	done
-@@ -1673,40 +6088,105 @@
+@@ -1673,40 +6101,106 @@ EOF
      *)  passes="conv"
  	;;
      esac
@@ -20470,7 +21907,8 @@
  	lib=
  	found=no
  	case $deplib in
-+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
++	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
++        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 +	  if test "$linkmode,$pass" = "prog,link"; then
 +	    compile_deplibs="$deplib $compile_deplibs"
 +	    finalize_deplibs="$deplib $finalize_deplibs"
@@ -20526,7 +21964,7 @@
  	  done
  	  if test "$found" != yes; then
  	    # deplib doesn't seem to be a libtool library
-@@ -1715,74 +6195,153 @@
+@@ -1715,74 +6209,153 @@ EOF
  	      finalize_deplibs="$deplib $finalize_deplibs"
  	    else
  	      deplibs="$deplib $deplibs"
@@ -20705,7 +22143,7 @@
  	      deplibs="$deplib $deplibs"
  	    else
  	      compile_deplibs="$deplib $compile_deplibs"
-@@ -1793,14 +6352,18 @@
+@@ -1793,14 +6366,18 @@ EOF
  	  esac # linkmode
  	  ;; # *.$libext
  	*.lo | *.$objext)
@@ -20732,7 +22170,7 @@
  	  fi
  	  continue
  	  ;;
-@@ -1809,21 +6372,18 @@
+@@ -1809,21 +6386,18 @@ EOF
  	  continue
  	  ;;
  	esac # case $deplib
@@ -20761,7 +22199,7 @@
  
  	dlname=
  	dlopen=
-@@ -1831,72 +6391,92 @@
+@@ -1831,72 +6405,92 @@ EOF
  	libdir=
  	library_names=
  	old_library=
@@ -20890,7 +22328,7 @@
  	  fi
  	  continue
  	fi # $pass = dlopen
-@@ -1907,66 +6487,106 @@
+@@ -1907,66 +6501,106 @@ EOF
  	*)
  	  abs_ladir=`cd "$ladir" && pwd`
  	  if test -z "$abs_ladir"; then
@@ -21027,7 +22465,7 @@
  	  deplibs="$lib $deplibs"
  
  	  linkalldeplibs=no
-@@ -1978,31 +6598,43 @@
+@@ -1978,31 +6612,43 @@ EOF
  	  tmp_libs=
  	  for deplib in $dependency_libs; do
  	    case $deplib in
@@ -21083,7 +22521,7 @@
  	    # Hardcode the library path.
  	    # Skip directories that are in the system default run-time
  	    # search path.
-@@ -2011,7 +6643,7 @@
+@@ -2011,7 +6657,7 @@ EOF
  	    *)
  	      case "$compile_rpath " in
  	      *" $absdir "*) ;;
@@ -21092,7 +22530,7 @@
  	      esac
  	      ;;
  	    esac
-@@ -2020,21 +6652,10 @@
+@@ -2020,21 +6666,10 @@ EOF
  	    *)
  	      case "$finalize_rpath " in
  	      *" $libdir "*) ;;
@@ -21115,7 +22553,7 @@
  	  fi # $linkmode,$pass = prog,link...
  
  	  if test "$alldeplibs" = yes &&
-@@ -2044,26 +6665,89 @@
+@@ -2044,26 +6679,89 @@ EOF
  	    # We only need to search for static libraries
  	    continue
  	  fi
@@ -21213,7 +22651,7 @@
  		versuffix="-$major"
  		;;
  	      esac
-@@ -2074,41 +6758,29 @@
+@@ -2074,41 +6772,29 @@ EOF
  
  	    # Make a new name for the extract_expsyms_cmds to use
  	    soroot="$soname"
@@ -21265,7 +22703,7 @@
  	    add_shlibpath=
  	    add_dir=
  	    add=
-@@ -2117,6 +6789,30 @@
+@@ -2117,6 +6803,30 @@ EOF
  	    immediate | unsupported)
  	      if test "$hardcode_direct" = no; then
  		add="$dir/$linklib"
@@ -21296,7 +22734,7 @@
  	      elif test "$hardcode_minus_L" = no; then
  		case $host in
  		*-*-sunos*) add_shlibpath="$dir" ;;
-@@ -2131,10 +6827,19 @@
+@@ -2131,10 +6841,19 @@ EOF
  	      fi
  	      ;;
  	    relink)
@@ -21305,7 +22743,8 @@
 +	         test "$hardcode_direct_absolute" = no; then
  		add="$dir/$linklib"
  	      elif test "$hardcode_minus_L" = yes; then
- 		add_dir="-L$dir"
+-		add_dir="-L$dir"
++		add_dir="-L$absdir"
 +		# Try looking first in the location we're being installed to.
 +		if test -n "$inst_prefix_dir"; then
 +		  case $libdir in
@@ -21317,7 +22756,7 @@
  		add="-l$name"
  	      elif test "$hardcode_shlibpath_var" = yes; then
  		add_shlibpath="$dir"
-@@ -2147,39 +6852,39 @@
+@@ -2147,39 +6866,39 @@ EOF
  	    esac
  
  	    if test "$lib_linked" != yes; then
@@ -21366,7 +22805,7 @@
  	      add="$libdir/$linklib"
  	    elif test "$hardcode_minus_L" = yes; then
  	      add_dir="-L$libdir"
-@@ -2187,16 +6892,31 @@
+@@ -2187,16 +6906,31 @@ EOF
  	    elif test "$hardcode_shlibpath_var" = yes; then
  	      case :$finalize_shlibpath: in
  	      *":$libdir:"*) ;;
@@ -21400,7 +22839,7 @@
  	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
  	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
  	    else
-@@ -2204,16 +6924,7 @@
+@@ -2204,16 +6938,7 @@ EOF
  	      test -n "$add" && deplibs="$add $deplibs"
  	    fi
  	  fi
@@ -21418,7 +22857,7 @@
  	  # Here we assume that one of hardcode_direct or hardcode_minus_L
  	  # is not unsupported.  This is valid on all known static and
  	  # shared platforms.
-@@ -2234,101 +6945,133 @@
+@@ -2234,101 +6959,133 @@ EOF
  	    # Just print a warning and add the library to dependency_libs so
  	    # that the program can be linked against the static library.
  	    echo
@@ -21590,7 +23029,7 @@
  	      esac
  	      case " $deplibs " in
  	      *" $path "*) ;;
-@@ -2338,21 +7081,29 @@
+@@ -2338,21 +7095,29 @@ EOF
  	  fi # link_all_deplibs != no
  	fi # linkmode = lib
        done # for deplib in $libs
@@ -21625,7 +23064,7 @@
  	    esac
  	  done
  	  newlib_search_path=
-@@ -2368,9 +7119,30 @@
+@@ -2368,9 +7133,30 @@ EOF
  	  eval tmp_libs=\"\$$var\"
  	  new_libs=
  	  for deplib in $tmp_libs; do
@@ -21656,7 +23095,7 @@
  	      case " $specialdeplibs " in
  	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
  	      *)
-@@ -2389,171 +7161,216 @@
+@@ -2389,171 +7175,217 @@ EOF
  	    -L*)
  	      case " $tmp_libs " in
  	      *" $deplib "*) ;;
@@ -21877,6 +23316,7 @@
 +	  # which has an extra 1 added just for fun
 +	  #
 +	  case $version_type in
++	  # correct linux to gnu/linux during the next big refactor
 +	  darwin|linux|osf|windows|none)
 +	    func_arith $number_major + $number_minor
 +	    current=$func_arith_result
@@ -21951,7 +23391,7 @@
  	fi
  
  	# Calculate the version variables.
-@@ -2566,10 +7383,13 @@
+@@ -2566,10 +7398,13 @@ EOF
  	darwin)
  	  # Like Linux, but with the current version available in
  	  # verstring for coding it into the library header
@@ -21967,7 +23407,7 @@
  	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
  	  ;;
  
-@@ -2580,19 +7400,31 @@
+@@ -2580,19 +7415,31 @@ EOF
  
  	freebsd-elf)
  	  major=".$current"
@@ -22007,11 +23447,13 @@
  	  done
  
  	  # Before this point, $major must not contain `.'.
-@@ -2601,25 +7433,34 @@
+@@ -2600,26 +7447,35 @@ EOF
+ 	  versuffix="$major.$revision"
  	  ;;
  
- 	linux)
+-	linux)
 -	  major=.`expr $current - $age`
++	linux) # correct to gnu/linux during the next big refactor
 +	  func_arith $current - $age
 +	  major=.$func_arith_result
  	  versuffix="$major.$age.$revision"
@@ -22048,7 +23490,7 @@
  	  ;;
  
  	sunos)
-@@ -2630,21 +7471,29 @@
+@@ -2630,21 +7486,29 @@ EOF
  	windows)
  	  # Use '-' rather than '.', since we only want one
  	  # extension on DOS 8.3 filesystems.
@@ -22083,7 +23525,7 @@
  	  if test "$need_version" = no; then
  	    versuffix=
  	  else
-@@ -2662,7 +7511,7 @@
+@@ -2662,7 +7526,7 @@ EOF
  	# Check to see if the archive will have undefined symbols.
  	if test "$allow_undefined" = yes; then
  	  if test "$allow_undefined_flag" = unsupported; then
@@ -22092,7 +23534,7 @@
  	    build_libtool_libs=no
  	    build_old_libs=yes
  	  fi
-@@ -2670,55 +7519,65 @@
+@@ -2670,55 +7534,65 @@ EOF
  	  # Don't allow undefined symbols.
  	  allow_undefined_flag="$no_undefined_flag"
  	fi
@@ -22185,7 +23627,7 @@
  	  dependency_libs="$temp_xrpath $dependency_libs"
  	fi
        fi
-@@ -2729,7 +7588,7 @@
+@@ -2729,7 +7603,7 @@ EOF
        for lib in $old_dlfiles; do
  	case " $dlprefiles $dlfiles " in
  	*" $lib "*) ;;
@@ -22194,7 +23636,7 @@
  	esac
        done
  
-@@ -2739,27 +7598,36 @@
+@@ -2739,27 +7613,36 @@ EOF
        for lib in $old_dlprefiles; do
  	case "$dlprefiles " in
  	*" $lib "*) ;;
@@ -22236,7 +23678,7 @@
  	    fi
  	    ;;
  	  esac
-@@ -2785,7 +7653,7 @@
+@@ -2785,7 +7668,7 @@ EOF
  	  # This might be a little naive.  We might want to check
  	  # whether the library exists or not.  But this is on
  	  # osf3 & osf4 and I'm not really sure... Just
@@ -22245,7 +23687,7 @@
  	  newdeplibs=$deplibs
  	  ;;
  	test_compile)
-@@ -2793,90 +7661,139 @@
+@@ -2793,90 +7676,139 @@ EOF
  	  # limits. Maybe even breaks it.  We compile a program, linking it
  	  # against the deplibs as a proxy for the library.  Then we can check
  	  # whether they linked in statically or dynamically with ldd.
@@ -22444,7 +23886,7 @@
  			continue
  		      fi
  		      # The statement above tries to avoid entering an
-@@ -2886,81 +7803,110 @@
+@@ -2886,81 +7818,110 @@ EOF
  		      # but so what?
  		      potlib="$potent_lib"
  		      while test -h "$potlib" 2>/dev/null; do
@@ -22600,7 +24042,7 @@
  	    echo
  	    if test "X$deplibs_check_method" = "Xnone"; then
  	      echo "*** Warning: inter-library dependencies are not supported in this platform."
-@@ -2969,7 +7915,8 @@
+@@ -2969,7 +7930,8 @@ EOF
  	    fi
  	    echo "*** All declared inter-library dependencies are being dropped."
  	    droppeddeps=yes
@@ -22610,7 +24052,7 @@
  	  ;;
  	esac
  	versuffix=$versuffix_save
-@@ -2980,8 +7927,8 @@
+@@ -2980,8 +7942,8 @@ EOF
  
  	case $host in
  	*-*-rhapsody* | *-*-darwin1.[012])
@@ -22621,7 +24063,7 @@
  	  ;;
  	esac
  
-@@ -2989,7 +7936,7 @@
+@@ -2989,7 +7951,7 @@ EOF
  	  if test "$module" = yes; then
  	    echo
  	    echo "*** Warning: libtool could not satisfy all declared inter-library"
@@ -22630,7 +24072,7 @@
  	    echo "*** a static module, that should work as long as the dlopening"
  	    echo "*** application is linked with the -dlopen flag."
  	    if test -z "$global_symbol_pipe"; then
-@@ -3011,7 +7958,7 @@
+@@ -3011,7 +7973,7 @@ EOF
  	    echo "*** automatically added whenever a program is linked with this library"
  	    echo "*** or is declared to -dlopen it."
  
@@ -22639,7 +24081,7 @@
  	      echo
  	      echo "*** Since this library must not contain undefined symbols,"
  	      echo "*** because either the platform does not support them or"
-@@ -3030,6 +7977,41 @@
+@@ -3030,6 +7992,41 @@ EOF
  	# Done checking deplibs!
  	deplibs=$newdeplibs
        fi
@@ -22681,11 +24123,16 @@
  
        # All the library-specific variables (install_libdir is set above).
        library_names=
-@@ -3038,15 +8020,17 @@
+@@ -3038,15 +8035,22 @@ EOF
  
        # Test again, we may have decided not to build it any more
        if test "$build_libtool_libs" = yes; then
 -	if test $hardcode_into_libs = yes; then
++	# Remove ${wl} instances when linking with ld.
++	# FIXME: should test the right _cmds variable.
++	case $archive_cmds in
++	  *\$LD\ *) wl= ;;
++        esac
 +	if test "$hardcode_into_libs" = yes; then
  	  # Hardcode the library paths
  	  hardcode_libdirs=
@@ -22701,7 +24148,7 @@
  		if test -z "$hardcode_libdirs"; then
  		  hardcode_libdirs="$libdir"
  		else
-@@ -3055,18 +8039,18 @@
+@@ -3055,18 +8059,18 @@ EOF
  		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		    ;;
  		  *)
@@ -22723,16 +24170,12 @@
  	      esac
  	    fi
  	  done
-@@ -3074,13 +8058,17 @@
+@@ -3074,13 +8078,13 @@ EOF
  	  if test -n "$hardcode_libdir_separator" &&
  	     test -n "$hardcode_libdirs"; then
  	    libdir="$hardcode_libdirs"
 -	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-+	    else
-+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-+	    fi
++	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
  	  fi
  	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
  	    # We should set the runpath_var.
@@ -22743,7 +24186,7 @@
  	    done
  	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
  	  fi
-@@ -3088,140 +8076,222 @@
+@@ -3088,140 +8092,222 @@ EOF
  	fi
  
  	shlibpath="$finalize_shlibpath"
@@ -23045,7 +24488,7 @@
  
  	  # Save the value of $output and $libobjs because we want to
  	  # use them later.  If we have whole_archive_flag_spec, we
-@@ -3234,109 +8304,255 @@
+@@ -3234,109 +8320,255 @@ EOF
  	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
  	    save_libobjs=$libobjs
  	  fi
@@ -23380,7 +24823,7 @@
  	  fi
  	done
  
-@@ -3349,38 +8565,35 @@
+@@ -3349,38 +8581,35 @@ EOF
        ;;
  
      obj)
@@ -23439,7 +24882,7 @@
  	;;
        *)
  	libobj=
-@@ -3389,7 +8602,7 @@
+@@ -3389,7 +8618,7 @@ EOF
        esac
  
        # Delete the old objects.
@@ -23448,7 +24891,7 @@
  
        # Objects from convenience libraries.  This assumes
        # single-version convenience libraries.  Whenever we create
-@@ -3398,150 +8611,141 @@
+@@ -3398,150 +8627,141 @@ EOF
        reload_conv_objs=
        gentop=
        # reload_cmds runs $LD directly, so let us get rid of
@@ -23681,7 +25124,7 @@
  
        if test -n "$rpath$xrpath"; then
  	# If the user specified any rpath flags, then add them.
-@@ -3549,7 +8753,7 @@
+@@ -3549,7 +8769,7 @@ EOF
  	  # This is the magic to use -rpath.
  	  case "$finalize_rpath " in
  	  *" $libdir "*) ;;
@@ -23690,7 +25133,7 @@
  	  esac
  	done
        fi
-@@ -3568,25 +8772,32 @@
+@@ -3568,25 +8788,32 @@ EOF
  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		;;
  	      *)
@@ -23728,7 +25171,7 @@
  	  esac
  	  ;;
  	esac
-@@ -3612,18 +8823,18 @@
+@@ -3612,18 +8839,18 @@ EOF
  	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
  		;;
  	      *)
@@ -23750,7 +25193,7 @@
  	  esac
  	fi
        done
-@@ -3635,227 +8846,57 @@
+@@ -3635,227 +8862,57 @@ EOF
        fi
        finalize_rpath="$rpath"
  
@@ -24016,7 +25459,7 @@
        fi
  
        if test -n "$compile_shlibpath$finalize_shlibpath"; then
-@@ -3872,7 +8913,7 @@
+@@ -3872,7 +8929,7 @@ static const void *lt_preloaded_setup()
  	  # We should set the runpath_var.
  	  rpath=
  	  for dir in $perm_rpath; do
@@ -24025,7 +25468,7 @@
  	  done
  	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
  	fi
-@@ -3880,7 +8921,7 @@
+@@ -3880,7 +8937,7 @@ static const void *lt_preloaded_setup()
  	  # We should set the runpath_var.
  	  rpath=
  	  for dir in $finalize_perm_rpath; do
@@ -24034,7 +25477,7 @@
  	  done
  	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
  	fi
-@@ -3890,13 +8931,19 @@
+@@ -3890,13 +8947,19 @@ static const void *lt_preloaded_setup()
  	# We don't need to create a wrapper script.
  	link_command="$compile_var$compile_command$compile_rpath"
  	# Replace the output file specification.
@@ -24059,7 +25502,7 @@
        fi
  
        if test "$hardcode_action" = relink; then
-@@ -3904,13 +8951,13 @@
+@@ -3904,13 +8967,13 @@ static const void *lt_preloaded_setup()
  	link_command="$compile_var$compile_command$compile_rpath"
  	relink_command="$finalize_var$finalize_command$finalize_rpath"
  
@@ -24076,7 +25519,7 @@
  	  else
  	    # fast_install is set to needless
  	    relink_command=
-@@ -3922,246 +8969,99 @@
+@@ -3922,246 +8985,99 @@ static const void *lt_preloaded_setup()
        fi
  
        # Replace the output file specification.
@@ -24383,7 +25826,7 @@
        ;;
      esac
  
-@@ -4169,7 +9069,7 @@
+@@ -4169,7 +9085,7 @@ fi\
      for oldlib in $oldlibs; do
  
        if test "$build_libtool_libs" = convenience; then
@@ -24392,7 +25835,7 @@
  	addlibs="$convenience"
  	build_libtool_libs=no
        else
-@@ -4177,146 +9077,177 @@
+@@ -4177,146 +9093,179 @@ fi\
  	  oldobjs="$libobjs_save"
  	  build_libtool_libs=no
  	else
@@ -24529,6 +25972,8 @@
 +	    esac
 +	  done
 +	fi
++	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
++	tool_oldlib=$func_to_tool_file_result
 +	eval cmds=\"$old_archive_cmds\"
 +
 +	func_len " $cmds"
@@ -24671,7 +26116,7 @@
  	for installed in no yes; do
  	  if test "$installed" = yes; then
  	    if test -z "$install_libdir"; then
-@@ -4328,50 +9259,108 @@
+@@ -4328,50 +9277,109 @@ fi\
  	    for deplib in $dependency_libs; do
  	      case $deplib in
  	      *.la)
@@ -24684,7 +26129,8 @@
 -		newdependency_libs="$newdependency_libs $libdir/$name"
 +		func_basename "$deplib"
 +		name="$func_basename_result"
-+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++		func_resolve_sysroot "$deplib"
++		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
 +		test -z "$libdir" && \
 +		  func_fatal_error "\`$deplib' is not a valid libtool archive"
 +		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
@@ -24806,7 +26252,7 @@
  #
  # Please DO NOT delete this file!
  # It is necessary for linking the library.
-@@ -4385,9 +9374,15 @@
+@@ -4385,9 +9393,15 @@ library_names='$library_names'
  # The name of the static archive.
  old_library='$old_library'
  
@@ -24822,7 +26268,7 @@
  # Version information for $libname.
  current=$current
  age=$age
-@@ -4396,692 +9391,39 @@
+@@ -4396,692 +9410,39 @@ revision=$revision
  # Is this an already installed library?
  installed=$installed
  
@@ -25495,7 +26941,9 @@
 -	# Export the shlibpath_var.
 -	eval "export $shlibpath_var"
 -      fi
--
++{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
++    func_mode_link ${1+"$@"}
+ 
 -      # Restore saved enviroment variables
 -      if test "${save_LC_ALL+set}" = set; then
 -	LC_ALL="$save_LC_ALL"; export LC_ALL
@@ -25503,8 +26951,6 @@
 -      if test "${save_LANG+set}" = set; then
 -	LANG="$save_LANG"; export LANG
 -      fi
-+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
-+    func_mode_link ${1+"$@"}
  
 -      # Now prepare to actually exec the command.
 -      exec_cmd='"$cmd"$args'
@@ -25518,7 +26964,7 @@
 -      exit 0
 -    fi
 -    ;;
- 
+-
 -  # libtool clean and uninstall mode
 -  clean | uninstall)
 -    modename="$modename: $mode"
@@ -25531,7 +26977,7 @@
      files=
      rmforce=
      exit_status=0
-@@ -5093,49 +9435,47 @@
+@@ -5093,49 +9454,47 @@ relink_command=\"$relink_command\""
      for arg
      do
        case $arg in
@@ -25604,7 +27050,7 @@
        fi
  
        rmfiles="$file"
-@@ -5143,312 +9483,130 @@
+@@ -5143,312 +9502,130 @@ relink_command=\"$relink_command\""
        case $name in
        *.la)
  	# Possibly a libtool archive, so verify it.
@@ -25993,7 +27439,7 @@
  
  # The TAGs below are defined such that we never get into a situation
  # in which we disable both kinds of libraries.  Given conflicting
-@@ -5461,16 +9619,18 @@
+@@ -5461,16 +9638,18 @@ exit 0
  # If a disable-shared tag is given, we'll fallback to a static-only
  # configuration.  But we'll never go from static-only to shared-only.
  
diff --git a/gcl-2.6.8-unrandomize.patch b/gcl-2.6.8-unrandomize.patch
index 84efa59..55785f8 100644
--- a/gcl-2.6.8-unrandomize.patch
+++ b/gcl-2.6.8-unrandomize.patch
@@ -1,6 +1,6 @@
---- ./configure.in.orig	2012-03-28 09:56:09.658231276 -0600
-+++ ./configure.in	2012-03-28 09:57:37.877068843 -0600
-@@ -1184,9 +1184,11 @@
+--- ./configure.in.orig	2012-07-26 09:50:25.715238529 -0600
++++ ./configure.in	2012-07-26 09:52:37.218033294 -0600
+@@ -1187,9 +1187,11 @@ if test "$HAVE_SBRK" = "1" ; then
  
  	AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
  	AC_RUN_IFELSE([AC_LANG_SOURCE([[
@@ -13,7 +13,7 @@
  		    return 0;}]])],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
  
  	if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
-@@ -1199,12 +1201,11 @@
+@@ -1202,12 +1204,11 @@ if test "$HAVE_SBRK" = "1" ; then
  	AC_MSG_CHECKING([that sbrk is (now) non-random])
  	AC_RUN_IFELSE([AC_LANG_SOURCE([[
  		    #include <stdio.h>
@@ -28,7 +28,7 @@
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
  			return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
-@@ -1213,12 +1214,11 @@
+@@ -1216,12 +1217,11 @@ if test "$HAVE_SBRK" = "1" ; then
  	fi
  	AC_RUN_IFELSE([AC_LANG_SOURCE([[
  		    #include <stdio.h>
@@ -43,7 +43,7 @@
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
  			return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
-@@ -1260,6 +1260,7 @@
+@@ -1263,6 +1263,7 @@ AC_MSG_CHECKING([finding DBEGIN])
  AC_RUN_IFELSE([AC_LANG_SOURCE([[
  #include <stdio.h>
  #include <stdlib.h>
@@ -51,7 +51,7 @@
  
  void gprof_cleanup() {}
  int
-@@ -1268,9 +1269,7 @@
+@@ -1271,9 +1272,7 @@ main(int argc,char * argv[],char *envp[]
    char *b,*b1;
    FILE *fp;
  
@@ -62,9 +62,9 @@
    b = (void *) malloc(1000);
    fp = fopen("conftest1","w");
  
---- ./configure.orig	2012-03-28 09:56:09.667230545 -0600
-+++ ./configure	2012-03-28 09:57:37.885068193 -0600
-@@ -7062,9 +7062,11 @@
+--- ./configure.orig	2012-07-26 09:50:32.725227589 -0600
++++ ./configure	2012-07-26 09:52:50.676012289 -0600
+@@ -7065,9 +7065,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 :
-@@ -7096,12 +7098,11 @@
+@@ -7099,12 +7101,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;}
-@@ -7125,12 +7126,11 @@
+@@ -7128,12 +7129,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;}
-@@ -7217,6 +7217,7 @@
+@@ -7220,6 +7220,7 @@ else
  
  #include <stdio.h>
  #include <stdlib.h>
@@ -115,7 +115,7 @@
  
  void gprof_cleanup() {}
  int
-@@ -7225,9 +7226,7 @@
+@@ -7228,9 +7229,7 @@ main(int argc,char * argv[],char *envp[]
    char *b,*b1;
    FILE *fp;
  
@@ -127,8 +127,8 @@
    fp = fopen("conftest1","w");
  
 --- ./o/main.c.orig	2010-11-02 15:56:45.000000000 -0600
-+++ ./o/main.c	2012-01-09 20:51:43.000000000 -0700
-@@ -51,6 +51,7 @@
++++ ./o/main.c	2012-07-26 09:52:37.251033241 -0600
+@@ -51,6 +51,7 @@ void initialize_process();
  #include <signal.h>
  #endif
  #include "page.h"
@@ -136,7 +136,7 @@
  
  bool saving_system ;
  
-@@ -146,11 +147,7 @@
+@@ -146,11 +147,7 @@ main(int argc, char **argv, char **envp)
  #endif	
  	*argv=kcl_self;
  
@@ -150,7 +150,7 @@
  #ifdef LD_BIND_NOW
  #include <stdio.h>
 --- ./h/unrandomize.h.orig	2010-01-12 07:19:15.000000000 -0700
-+++ ./h/unrandomize.h	2012-01-09 20:51:43.000000000 -0700
++++ ./h/unrandomize.h	2012-07-26 09:52:37.274033201 -0600
 @@ -1,39 +1,45 @@
 +#include <stdio.h>
 +#include <stdlib.h>
diff --git a/gcl.spec b/gcl.spec
index edb1912..4a5bb15 100644
--- a/gcl.spec
+++ b/gcl.spec
@@ -3,7 +3,7 @@
 %global __global_cflags %(printf %%s '%__global_cflags' | sed 's/-fstack-protector --param=ssp-buffer-size=4//')
 
 # Prerelease of 2.6.8
-%global alphatag 20120323cvs
+%global alphatag 20120705cvs
 
 Name:           gcl
 Version:        2.6.8
@@ -16,7 +16,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 2012-03-24 -d gcl-2.6.8 gcl
+#     -r Version_2_6_8pre -D 2012-07-06 -d gcl-2.6.8 gcl
 #   tar cvJf gcl-2.6.8.tar gcl-2.6.8
 Source0:        gcl-%{version}.tar.xz
 Source1:        gcl.el
@@ -97,7 +97,7 @@ BuildRequires:  texinfo
 BuildRequires:  emacs
 BuildRequires:  xemacs
 BuildRequires:  xemacs-packages-extra
-BuildRequires:  selinux-policy-doc
+BuildRequires:  selinux-policy-devel
 Requires:       gcl-selinux%{?_isa} = %{version}-%{release}
 Requires(post): info
 Requires(postun): info
@@ -332,6 +332,10 @@ fi
 
 
 %changelog
+* Thu Jul 26 2012 Jerry James <loganjerry at gmail.com> - 2.6.8-0.11.20120705cvs
+- Update to 20120705 snapshot
+- Change SELinux BR to match recent changes in Rawhide
+
 * Thu Jul 19 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.6.8-0.11.20120323cvs
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
 
diff --git a/sources b/sources
index 037c66f..1a175fc 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-b796703820bc3f7f539a37b35a2097d0  gcl-2.6.8.tar.xz
+4a53090cc59f4b33a0c77526b292246a  gcl-2.6.8.tar.xz
 b965d4ea561a9c3e019c65be69fcfb1e  gcl-2.6.8-info.tar.xz


More information about the scm-commits mailing list