XEmacs 21.2.22 "Mercedes".
authortomo <tomo>
Thu, 6 Jan 2000 06:28:03 +0000 (06:28 +0000)
committertomo <tomo>
Thu, 6 Jan 2000 06:28:03 +0000 (06:28 +0000)
202 files changed:
CHANGES-beta
ChangeLog
INSTALL
Makefile.in.in
aclocal.m4
configure
configure.in
configure.usage
etc/FTP
etc/MAILINGLISTS
etc/NEWS
etc/OONEWS
etc/README.HYPERBOLE
etc/README.OO-BROWSER
etc/SERVICE
etc/aliases.ksh
etc/editclient.sh
etc/etags.1
etc/gnuserv.1
etc/package-index.LATEST.pgp
etc/sample.Xdefaults
etc/xemacs.1
info/cl.info
info/custom.info
info/emodules.info
info/external-widget.info
info/info.info
info/internals.info
info/internals.info-1
info/internals.info-2
info/lispref.info
info/lispref.info-1
info/lispref.info-2
info/lispref.info-3
info/lispref.info-4
info/lispref.info-5
info/lispref.info-6
info/lispref.info-7
info/lispref.info-8
info/lispref.info-9
info/new-users-guide.info
info/standards.info
info/term.info
info/termcap.info
info/texinfo.info
info/texinfo.info-1
info/texinfo.info-2
info/widget.info
info/xemacs-faq.info
info/xemacs-faq.info-1
info/xemacs-faq.info-2
info/xemacs.info
info/xemacs.info-1
info/xemacs.info-2
info/xemacs.info-3
info/xemacs.info-4
lib-src/ChangeLog
lib-src/Makefile.in.in
lib-src/add-big-package.sh
lib-src/config.values.in
lib-src/config.values.sh
lib-src/etags.c
lib-src/gnuserv.c
lib-src/gzip-el.sh
lib-src/update-autoloads.sh
lisp/ChangeLog
lisp/about.el
lisp/apropos.el
lisp/auto-autoloads.el
lisp/auto-save.el
lisp/backquote.el
lisp/byte-optimize.el
lisp/bytecomp-runtime.el
lisp/bytecomp.el
lisp/check-features.el
lisp/cus-dep.el
lisp/cus-edit.el
lisp/cus-face.el
lisp/cus-load.el
lisp/custom-load.el
lisp/custom.el
lisp/disass.el
lisp/etags.el
lisp/faces.el
lisp/fill.el
lisp/font-lock.el
lisp/gnuserv.el
lisp/help.el
lisp/hyper-apropos.el
lisp/iso8859-1.el
lisp/lisp-mnt.el
lisp/make-docfile.el
lisp/menubar-items.el
lisp/minibuf.el
lisp/mouse.el
lisp/mule/mule-category.el
lisp/mule/mule-ccl.el
lisp/mule/mule-help.el
lisp/mule/mule-x-init.el
lisp/package-admin.el
lisp/package-get.el
lisp/package-info.el
lisp/packages.el
lisp/simple.el
lisp/site-load.el
lisp/text-props.el
lisp/very-early-lisp.el
lisp/wid-edit.el
lisp/widget.el
lisp/x-compose.el
lisp/x-faces.el
lisp/x-font-menu.el
lisp/x-iso8859-1.el
lwlib/ChangeLog
lwlib/xlwtabs.c
man/ChangeLog
man/Makefile
man/emodules.texi
man/info.texi
man/internals/internals.texi
man/lispref/commands.texi
man/lispref/display.texi
man/lispref/faces.texi
man/lispref/functions.texi
man/lispref/intro.texi
man/lispref/keymaps.texi
man/lispref/lispref.texi
man/lispref/lists.texi
man/lispref/modes.texi
man/lispref/objects.texi
man/lispref/os.texi
man/lispref/sequences.texi
man/lispref/strings.texi
man/lispref/text.texi
man/make-stds.texi
man/new-users-guide/custom1.texi
man/new-users-guide/new-users-guide.texi
man/standards.texi
man/texinfo.tex
man/texinfo.texi
man/xemacs-faq.texi
man/xemacs/custom.texi
man/xemacs/menus.texi
man/xemacs/programs.texi
man/xemacs/xemacs.texi
nt/ChangeLog
src/ChangeLog
src/Makefile.in.in
src/abbrev.c
src/alloc.c
src/buffer.h
src/bytecode.c
src/callproc.c
src/config.h.in
src/console-tty.c
src/console-tty.h
src/depend
src/device-tty.c
src/device-x.c
src/editfns.c
src/emacs.c
src/event-Xt.c
src/event-msw.c
src/event-stream.c
src/event-unixoid.c
src/file-coding.c
src/fileio.c
src/frame-tty.c
src/getloadavg.c
src/glyphs-x.c
src/gpmevent.c
src/input-method-xlib.c
src/linuxplay.c
src/lisp.h
src/lread.c
src/lstream.c
src/lstream.h
src/make-src-depend
src/md5.c
src/mule-ccl.c
src/mule-charset.c
src/mule-charset.h
src/nt.c
src/process-nt.c
src/process-unix.c
src/process.c
src/redisplay-output.c
src/redisplay.h
src/s/mingw32.h
src/s/windowsnt.h
src/sound.c
src/src-headers
src/symsinit.h
src/syntax.c
src/sysdep.c
src/sysfile.h
src/tooltalk.c
tests/ChangeLog
tests/Dnd/droptest.sh
tests/automated/md5-tests.el
tests/automated/symbol-tests.el
version.sh

index c400359..6666b17 100644 (file)
@@ -1,4 +1,16 @@
                                                        -*- indented-text -*-
+to 21.2.22 "Mercedes"
+-- ESD Sound support from Robert Bihlmeyer
+-- 10% faster redisplay from Jan Vroonhof
+-- Fixes from Jeff Miller, Alexandre Oliva and Yoshiki Hayashi
+-- "If you've got problems, read PROBLEMS!" from Robert Pluim
+-- Lstream code now uses size_t, ssize_t consistently, Martin Buchholz
+-- Fix `make install' if prefix != exec_prefix, Martin Buchholz
+-- Fix compile warnings and C++ compilation, Martin Buchholz
+-- Fix detection of coding: cookie in -*- first line.
+-- More xim-xlib work by Kazuyuki Ienaga
+-- Fix crash in abbrev.c (abbrev_location), Eric Darve
+
 to 21.2.20 "Yoko"
 -- UTF-8 & file-coding magic cookie fix from MORIOKA Tomohiko
 -- bug fixes from Adrian Aichner, Sean MacLennan, and Jeff Miller
index 46a3797..bba1269 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,72 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
+1999-11-26  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: 
+       Add configure support for Unix 98 type ssize_t.
+
+1999-11-27  Martin Buchholz  <martin@xemacs.org>
+
+       * Makefile.in.in:
+       Make sure config.values.sh is up to date.
+       Use $(SHELL) instead of sh or /bin/sh consistently.
+       Delegate `depend' target to src/Makefile.in.in.
+
+1999-10-27  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * INSTALL: Update configure option.
+
+1999-10-12  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+       
+       * configure.in (native_sound_lib, *-sgi-*): Check for audio.h.
+       (LIBS): Check for libCsup.
+
+       * etc/sample.Xdefaults: adds a reference to beNiceToColrmap,
+         so that the user can guess what to do if xemacs' dialogs are
+         butt ugly.
+
+1999-10-24  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+       * config.h.in: define HAVE_ESD_SOUND
+
+       * configure.in: Add support for esd sound. --with-sound
+       now accepts a list of options.
+       * configure.usage (--native-sound-lib): ditto.
+
+1999-11-17  Martin Buchholz  <martin@xemacs.org>
+
+       * Makefile.in.in (install-arch-dep): 
+       Fix `make install' if prefix != exec_prefix.
+
+1999-11-15  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in:
+       - Accept --with-database=gdbm as an alias for
+       --with-database=gnudbm.
+       - rename with_database_gnudbm to with_database_gdbm.
+
+       * aclocal.m4 (ld_dynamic_link_flags): Just use empty value for
+       ld_dynamic_link_flags on Solaris.  Else CC gives us:
+       CC: Warning: Option -Wl,-Bdynamic passed to ld, if ld is invoked, ignored otherwise
+       /usr/ccs/bin/ld: illegal option -- W
+
+
+1999-11-13  Jason R Mastaler  <jason@mastaler.com>
+
+       * etc/FTP: Updated FTP mirrors list.  Replaced GNU FTP document
+       with a URL.
+
+1999-11-13  Jason R Mastaler  <jason@mastaler.com>
+
+       * etc/MAILINGLISTS: Updated mailing list subscription information.
+       Replaced GNU MAILINGLISTS document with a URL.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
diff --git a/INSTALL b/INSTALL
index e795ec5..ce6d91f 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -310,12 +310,12 @@ inefficient.  Generally, it's best to go with the default
 configuration for your system.  You can tweak this based on how you
 use XEmacs, and the memory and cpu resources available on your system.
 
-The `--use-system-malloc' option can be use to either enable or
+The `--with-system-malloc' option can be use to either enable or
 disable use of the system malloc.  Generally, it's best to go with the
 default configuration for your system.  Note that on many systems
 using the system malloc disables the use of the relocating allocator.
 
-The `--use-debug-malloc' option can be used to link a special debugging
+The `--with-debug-malloc' option can be used to link a special debugging
 version of malloc.  Debug Malloc is not included with XEmacs, is
 intended for use only by the developers and may be obtained from
 <URL:http://www.letters.com/dmalloc/>.
index 95f1a21..3a29d39 100644 (file)
@@ -63,6 +63,7 @@ SHELL = /bin/sh
 LANG = C
 LC_ALL = C
 RM = rm -f
+MAKEPATH=./lib-src/make-path
 pwd = /bin/pwd
 
 ## ==================== Things `configure' Might Edit ====================
@@ -273,30 +274,31 @@ dist: all-elc info
 ## - src/depend from src/*.[ch]
 .PHONY: config configure depend
 config: configure depend
-configure: ${srcdir}/configure
-${srcdir}/configure: ${srcdir}/configure.in
+configure: ${srcdir}/configure ${srcdir}/lib-src/config.values.in
+
+${srcdir}/configure : ${srcdir}/configure.in
        cd ${srcdir} && autoconf
-       cd ${srcdir} && /bin/sh lib-src/config.values.sh
 
-depend ${srcdir}/src/depend:
-       cd ${srcdir}/src && \
-               perl ./make-src-depend > depend.tmp && \
-               $(RM) depend && mv depend.tmp depend
+${srcdir}/lib-src/config.values.in : ${srcdir}/configure
+       cd ${srcdir} && $(SHELL) lib-src/config.values.sh
+
+depend ${srcdir}/src/depend :
+       cd ${srcdir}/src && $(RECURSIVE_MAKE) depend
 
 ## Build XEmacs and recompile out-of-date and missing .elc files along
 ## the way.
 all-elc all-elcs: lib-src lwlib dump-elcs src
-       MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' sh ${srcdir}/lib-src/update-elc.sh
+       MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' $(SHELL) ${srcdir}/lib-src/update-elc.sh
 
 ## Sub-target for all-elc.
 dump-elc dump-elcs: ${GENERATED_HEADERS} FRC.dump-elcs
        cd ./src && $(RECURSIVE_MAKE) dump-elcs
 
 autoloads: src
-       MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' sh ${srcdir}/lib-src/update-autoloads.sh
+       MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' $(SHELL) ${srcdir}/lib-src/update-autoloads.sh
 
 custom-loads:
-       MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' sh ${srcdir}/lib-src/update-custom.sh
+       MAKE='$(MAKE)' EMACS='./src/$(PROGNAME)' $(SHELL) ${srcdir}/lib-src/update-custom.sh
 
 finder: src
        @echo "Building finder database ..."
@@ -323,7 +325,7 @@ src/Emacs.ad.h: ${srcdir}/etc/Emacs.ad
        @(echo "/*      Do not edit this file!" ; \
          echo "        Automatically generated from ${srcdir}/etc/Emacs.ad" ; \
          echo " */" ; \
-         /bin/sh ${srcdir}/lib-src/ad2c ${srcdir}/etc/Emacs.ad ) > \
+         $(SHELL) ${srcdir}/lib-src/ad2c ${srcdir}/etc/Emacs.ad ) > \
          src/Emacs.ad.h
 
 src/sheap-adjust.h:
@@ -428,6 +430,7 @@ install-arch-dep: mkdir
 # endif /* __CYGWIN32__ */
 #endif /* WINDOWSNT */
        if test "${prefix}" != "${exec_prefix}"; then \
+         $(MAKEPATH) ${exec_prefix}/lib/${instvardir}; \
          for dir in \
                lib/${inststaticdir} \
                lib/${instvardir}/etc \
@@ -487,9 +490,8 @@ install-arch-indep: mkdir info
        @echo "${lispdir}"
 
 gzip-el:
-       ${srcdir}/lib-src/gzip-el.sh ${lispdir}
+       $(SHELL) ${srcdir}/lib-src/gzip-el.sh ${lispdir}
 
-MAKEPATH=./lib-src/make-path
 ## Build all the directories to install XEmacs in.
 ## Since we may be creating several layers of directories,
 ## (e.g. /usr/local/lib/${PROGNAME}-20.5/sparc-sun-solaris2.6), we use
index ff5c7ae..5635441 100644 (file)
@@ -569,7 +569,7 @@ if test -z "$ld_dynamic_link_flags"; then
     ;;
 
   solaris2* | solaris7*)
-    ld_dynamic_link_flags="${wl}-Bdynamic"
+    ld_dynamic_link_flags=
     ;;
 
   sco3.2v5* | unixware* | sysv5* | sysv4*)
index e19107a..cf53d2e 100755 (executable)
--- a/configure
+++ b/configure
@@ -424,22 +424,22 @@ echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
                 "with_database" )
          with_database_berkdb=no
          with_database_dbm=no
-         with_database_gnudbm=no
+         with_database_gdbm=no
          for x in `echo "$val" | sed -e 's/,/ /g'` ; do
            case "$x" in
-               no ) ;;
-               b | be | ber | berk | berkd | berkdb )  with_database_berkdb=yes ;;
-               d | db | dbm )                          with_database_dbm=yes    ;;
-               g | gn | gnu | gnud | gnudb | gnudbm )  with_database_gnudbm=yes ;;
-               * ) (echo "$progname: Usage error:"
+             no ) ;;
+             b | be | ber | berk | berkd | berkdb )       with_database_berkdb=yes ;;
+             d | db | dbm )                               with_database_dbm=yes    ;;
+             g | gn | gnu | gnud | gnudb | gnudbm | gdbm) with_database_gdbm=yes   ;;
+             * ) (echo "$progname: Usage error:"
 echo " " "The \`--$optname' option value
   must be either \`no' or a comma-separated list
   of one or more of \`berkdb' and either \`dbm' or \`gnudbm'."
 echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
             esac
          done
-         if test "$with_database_dbm"    = "yes" -a \
-                 "$with_database_gnudbm" = "yes"; then
+         if test "$with_database_dbm"  = "yes" -a \
+                 "$with_database_gdbm" = "yes"; then
          (echo "$progname: Usage error:"
 echo " " "Only one of \`dbm' and \`gnudbm' may be specified
   with the \`--$optname' option."
@@ -448,18 +448,38 @@ echo "  Use \`$progname --help' to show usage.") >&2 && exit 1
         ;;
 
                "with_sound" )
-                         case "$val" in
-           y | ye | yes )                      val=native ;;
-           n | no | non | none )               val=no;;
-           na | nat | nati | nativ | native )  val=native  ;;
-           ne | net | neta | netau | netaud | netaudi | netaudio | nas ) val=nas  ;;
-           b | bo | bot | both )               val=both;;
-           * ) (echo "$progname: Usage error:"
-echo " " "The \`--$optname' option must have one of these values:
-  \`native', \`nas', \`both', or \`none'."
-echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
-         esac
-          eval "$opt=\"$val\""
+                         for x in `echo "$val" | sed -e 's/,/ /g'` ; do
+           case "$x" in
+                     n | no | non | none ) new_sdefault=no ;;
+             a | al | all | both ) new_sdefault=yes ;;
+
+             native )       with_native_sound=yes ;;
+             nonative )     with_native_sound=no ;;
+
+             nas )          with_nas_sound=yes ;;
+             nonas )        with_nas_sound=no ;;
+
+             esd )          with_esd=yes ;;
+             noesd )        with_esh=no ;;
+
+             * ) bogus_sound=yes ;;
+           esac
+           if test "$bogus_sound" -o \
+                \( -n "$new_sdefault" -a -n "$sound_notfirst" \) ; then
+               types="\`all', \`none', \`(no)native', \`no(nas)', \`(no)esd'."
+               (echo "$progname: Usage error:"
+echo " " "Valid types for the \`--$optname' option are:
+  $types.
+The default is native,esd."
+echo "  Use \`$progname --help' to show usage.") >&2 && exit 1
+           elif test -n "$new_sdefault" ; then
+               with_native_sound=$new_sdefault
+               with_nas_sound=$new_sdefault
+               with_esd=$new_sdefault
+               new_sdefault=   # reset this
+           fi
+           sound_notfirst=true
+         done
         ;;
 
                "with_xim" )
@@ -796,7 +816,7 @@ echo "  Use \`$progname --help' to show usage.") >&2 && exit 1
 fi
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:800: checking whether ln -s works" >&5
+echo "configure:820: checking whether ln -s works" >&5
 
 rm -f conftestdata
 if ln -s X conftestdata 2>/dev/null
@@ -1041,7 +1061,7 @@ EOF
 
 
 echo $ac_n "checking "host system type"""... $ac_c" 1>&6
-echo "configure:1045: checking "host system type"" >&5
+echo "configure:1065: checking "host system type"" >&5
 internal_configuration=`echo $configuration | sed 's/-\(workshop\)//'`
 canonical=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub "$internal_configuration"`
 configuration=`echo "$configuration" | sed 's/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/'`
@@ -1535,7 +1555,7 @@ xe_save_CFLAGS="$CFLAGS"
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1539: checking for $ac_word" >&5
+echo "configure:1559: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1562,7 +1582,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1566: checking for $ac_word" >&5
+echo "configure:1586: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1610,7 +1630,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1614: checking for $ac_word" >&5
+echo "configure:1634: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1639,7 +1659,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1643: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1663: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS'
@@ -1652,12 +1672,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1656 "configure"
+#line 1676 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1685,19 +1705,19 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1689: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1709: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1694: checking whether we are using GNU C" >&5
+echo "configure:1714: checking whether we are using GNU C" >&5
 
 cat > conftest.c <<EOF
 #ifdef __GNUC__
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1721: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1715,7 +1735,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1719: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1739: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1748,7 +1768,7 @@ if   test "$with_gcc" = "no"  -a "$GCC" = "yes"; then
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1752: checking for $ac_word" >&5
+echo "configure:1772: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1775,7 +1795,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1779: checking for $ac_word" >&5
+echo "configure:1799: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1823,7 +1843,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1827: checking for $ac_word" >&5
+echo "configure:1847: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1852,7 +1872,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1856: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1876: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS'
@@ -1865,12 +1885,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1869 "configure"
+#line 1889 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1898,19 +1918,19 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1902: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1922: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1907: checking whether we are using GNU C" >&5
+echo "configure:1927: checking whether we are using GNU C" >&5
 
 cat > conftest.c <<EOF
 #ifdef __GNUC__
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1914: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1934: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1928,7 +1948,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1932: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1952: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1961,7 +1981,7 @@ elif test "$with_gcc" = "yes" -a "$GCC" != "yes" ; then
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1965: checking for $ac_word" >&5
+echo "configure:1985: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1988,7 +2008,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1992: checking for $ac_word" >&5
+echo "configure:2012: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2036,7 +2056,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2040: checking for $ac_word" >&5
+echo "configure:2060: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2065,7 +2085,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2069: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2089: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS'
@@ -2078,12 +2098,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 2082 "configure"
+#line 2102 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -2111,19 +2131,19 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:2115: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2135: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:2120: checking whether we are using GNU C" >&5
+echo "configure:2140: checking whether we are using GNU C" >&5
 
 cat > conftest.c <<EOF
 #ifdef __GNUC__
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2127: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -2141,7 +2161,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:2145: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2165: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -2178,7 +2198,7 @@ test -n "$CPP" -a -d "$CPP" && CPP=
 test -n "$NON_GNU_CPP" -a "$GCC" != "yes" -a -z "$CPP" && CPP="$NON_GNU_CPP"
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2182: checking how to run the C preprocessor" >&5
+echo "configure:2202: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2191,13 +2211,13 @@ if test -z "$CPP"; then
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2195 "configure"
+#line 2215 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2201: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2208,13 +2228,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2212 "configure"
+#line 2232 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2225,13 +2245,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2229 "configure"
+#line 2249 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2255: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2256,9 +2276,9 @@ echo "$ac_t""$CPP" 1>&6
 
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:2260: checking for AIX" >&5
+echo "configure:2280: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2262 "configure"
+#line 2282 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -2285,9 +2305,9 @@ rm -f conftest*
 
 
 echo $ac_n "checking for GNU libc""... $ac_c" 1>&6
-echo "configure:2289: checking for GNU libc" >&5
+echo "configure:2309: checking for GNU libc" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2291 "configure"
+#line 2311 "configure"
 #include "confdefs.h"
 #include <features.h>
 int main() {
@@ -2299,7 +2319,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2303: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_glibc=yes
 else
@@ -2321,7 +2341,7 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 2325 "configure"
+#line 2345 "configure"
 #include "confdefs.h"
 int main () {
 #if defined __SUNPRO_C
@@ -2333,7 +2353,7 @@ return 0;
 #endif
 }
 EOF
-if { (eval echo configure:2337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:2357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -2607,7 +2627,7 @@ test -n "$unexec"          && extra_objs="$extra_objs $unexec" &&  if test "$ext
  fi
 
 echo $ac_n "checking for dynodump""... $ac_c" 1>&6
-echo "configure:2611: checking for dynodump" >&5
+echo "configure:2631: checking for dynodump" >&5
 if test "$unexec" != "unexsol2.o"; then
   echo "$ac_t""no" 1>&6
 else
@@ -2645,12 +2665,12 @@ if test "$unexec" = "unexaix.o"; then
   done
   
 echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6
-echo "configure:2649: checking for terminateAndUnload in -lC" >&5
+echo "configure:2669: checking for terminateAndUnload in -lC" >&5
 ac_lib_var=`echo C'_'terminateAndUnload | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lC "
 cat > conftest.$ac_ext <<EOF
-#line 2654 "configure"
+#line 2674 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2661,7 +2681,7 @@ int main() {
 terminateAndUnload()
 ; return 0; }
 EOF
-if { (eval echo configure:2665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2765,7 +2785,7 @@ fi
 
 if test "$add_runtime_path" = "yes"; then
       echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6
-echo "configure:2769: checking "for runtime libraries flag"" >&5
+echo "configure:2789: checking "for runtime libraries flag"" >&5
   case "$opsys" in
     sol2 ) dash_r="-R" ;;
     decosf* | linux* | irix*) dash_r="-rpath " ;;
@@ -2787,14 +2807,14 @@ if test "$GCC" = "yes"; then
   done
 fi
         cat > conftest.$ac_ext <<EOF
-#line 2791 "configure"
+#line 2811 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   dash_r="$try_dash_r"
 else
@@ -2896,10 +2916,10 @@ else
 fi
 after_morecore_hook_exists=yes
 echo $ac_n "checking for malloc_get_state""... $ac_c" 1>&6
-echo "configure:2900: checking for malloc_get_state" >&5
+echo "configure:2920: checking for malloc_get_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2903 "configure"
+#line 2923 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_get_state(); below.  */
@@ -2922,7 +2942,7 @@ malloc_get_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_malloc_get_state=yes"
 else
@@ -2942,10 +2962,10 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6
-echo "configure:2946: checking for malloc_set_state" >&5
+echo "configure:2966: checking for malloc_set_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2949 "configure"
+#line 2969 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_set_state(); below.  */
@@ -2968,7 +2988,7 @@ malloc_set_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_malloc_set_state=yes"
 else
@@ -2988,16 +3008,16 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6
-echo "configure:2992: checking whether __after_morecore_hook exists" >&5
+echo "configure:3012: checking whether __after_morecore_hook exists" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2994 "configure"
+#line 3014 "configure"
 #include "confdefs.h"
 extern void (* __after_morecore_hook)();
 int main() {
 __after_morecore_hook = 0
 ; return 0; }
 EOF
-if { (eval echo configure:3001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 else
@@ -3056,7 +3076,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3060: checking for $ac_word" >&5
+echo "configure:3080: checking for $ac_word" >&5
 
 if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3111,7 +3131,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:3115: checking for a BSD compatible install" >&5
+echo "configure:3135: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 
   IFS="${IFS=  }"; ac_save_IFS="$IFS"; IFS=":"
@@ -3165,7 +3185,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3169: checking for $ac_word" >&5
+echo "configure:3189: checking for $ac_word" >&5
 
 if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -3197,15 +3217,15 @@ for ac_hdr in mach/mach.h sys/stropts.h sys/timeb.h sys/time.h unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3201: checking for $ac_hdr" >&5
+echo "configure:3221: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3204 "configure"
+#line 3224 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3209: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3238,15 +3258,15 @@ for ac_hdr in utime.h locale.h libgen.h fcntl.h ulimit.h cygwin/version.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3242: checking for $ac_hdr" >&5
+echo "configure:3262: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3245 "configure"
+#line 3265 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3250: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3279,15 +3299,15 @@ for ac_hdr in kstat.h sys/pstat.h inttypes.h sys/un.h a.out.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3283: checking for $ac_hdr" >&5
+echo "configure:3303: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3286 "configure"
+#line 3306 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3291: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3311: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3317,10 +3337,10 @@ fi
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:3321: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3341: checking for sys/wait.h that is POSIX.1 compatible" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3324 "configure"
+#line 3344 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -3336,7 +3356,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:3340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -3360,10 +3380,10 @@ EOF
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3364: checking for ANSI C header files" >&5
+echo "configure:3384: checking for ANSI C header files" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3367 "configure"
+#line 3387 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3371,7 +3391,7 @@ cat > conftest.$ac_ext <<EOF
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3375: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3388,7 +3408,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3392 "configure"
+#line 3412 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3406,7 +3426,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3410 "configure"
+#line 3430 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3424,7 +3444,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
 cat > conftest.$ac_ext <<EOF
-#line 3428 "configure"
+#line 3448 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3435,7 +3455,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:3459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -3461,10 +3481,10 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3465: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3485: checking whether time.h and sys/time.h may both be included" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3468 "configure"
+#line 3488 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -3473,7 +3493,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:3477: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -3497,10 +3517,10 @@ EOF
 fi
 
 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:3501: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:3521: checking for sys_siglist declaration in signal.h or unistd.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3504 "configure"
+#line 3524 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3512,7 +3532,7 @@ int main() {
 char *msg = *(sys_siglist + 1);
 ; return 0; }
 EOF
-if { (eval echo configure:3516: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3536: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_decl_sys_siglist=yes
 else
@@ -3537,9 +3557,9 @@ fi
 
 
 echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6
-echo "configure:3541: checking for struct utimbuf" >&5
+echo "configure:3561: checking for struct utimbuf" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3543 "configure"
+#line 3563 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3558,7 +3578,7 @@ int main() {
 static struct utimbuf x; x.actime = x.modtime;
 ; return 0; }
 EOF
-if { (eval echo configure:3562: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3582: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    { test "$extra_verbose" = "yes" && cat << \EOF
@@ -3578,10 +3598,10 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3582: checking return type of signal handlers" >&5
+echo "configure:3602: checking return type of signal handlers" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3585 "configure"
+#line 3605 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3598,7 +3618,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:3602: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -3620,10 +3640,10 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3624: checking for size_t" >&5
+echo "configure:3644: checking for size_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3627 "configure"
+#line 3647 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3654,10 +3674,10 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3658: checking for pid_t" >&5
+echo "configure:3678: checking for pid_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3661 "configure"
+#line 3681 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3688,10 +3708,10 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3692: checking for uid_t in sys/types.h" >&5
+echo "configure:3712: checking for uid_t in sys/types.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3695 "configure"
+#line 3715 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -3727,10 +3747,10 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:3731: checking for mode_t" >&5
+echo "configure:3751: checking for mode_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3734 "configure"
+#line 3754 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3761,10 +3781,10 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3765: checking for off_t" >&5
+echo "configure:3785: checking for off_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3768 "configure"
+#line 3788 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3794,11 +3814,45 @@ EOF
 
 fi
 
+echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
+echo "configure:3819: checking for ssize_t" >&5
+
+cat > conftest.$ac_ext <<EOF
+#line 3822 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])ssize_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_ssize_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_ssize_t=no
+fi
+rm -f conftest*
+
+echo "$ac_t""$ac_cv_type_ssize_t" 1>&6
+if test $ac_cv_type_ssize_t = no; then
+  { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining ssize_t = int
+EOF
+cat >> confdefs.h <<\EOF
+#define ssize_t int
+EOF
+}
+
+fi
+
 
 echo $ac_n "checking for struct timeval""... $ac_c" 1>&6
-echo "configure:3800: checking for struct timeval" >&5
+echo "configure:3854: checking for struct timeval" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3802 "configure"
+#line 3856 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3814,7 +3868,7 @@ int main() {
 static struct timeval x; x.tv_sec = x.tv_usec;
 ; return 0; }
 EOF
-if { (eval echo configure:3818: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
   HAVE_TIMEVAL=yes
@@ -3836,10 +3890,10 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:3840: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:3894: checking whether struct tm is in sys/time.h or time.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3843 "configure"
+#line 3897 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
@@ -3847,7 +3901,7 @@ int main() {
 struct tm *tp; tp->tm_sec;
 ; return 0; }
 EOF
-if { (eval echo configure:3851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm=time.h
 else
@@ -3871,10 +3925,10 @@ EOF
 fi
 
 echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:3875: checking for tm_zone in struct tm" >&5
+echo "configure:3929: checking for tm_zone in struct tm" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3878 "configure"
+#line 3932 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -3882,7 +3936,7 @@ int main() {
 struct tm tm; tm.tm_zone;
 ; return 0; }
 EOF
-if { (eval echo configure:3886: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_zone=yes
 else
@@ -3905,10 +3959,10 @@ EOF
 
 else
   echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:3909: checking for tzname" >&5
+echo "configure:3963: checking for tzname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3912 "configure"
+#line 3966 "configure"
 #include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
@@ -3918,7 +3972,7 @@ int main() {
 atoi(*tzname);
 ; return 0; }
 EOF
-if { (eval echo configure:3922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_var_tzname=yes
 else
@@ -3944,10 +3998,10 @@ fi
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3948: checking for working const" >&5
+echo "configure:4002: checking for working const" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3951 "configure"
+#line 4005 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3996,7 +4050,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:4000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4021,7 +4075,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:4025: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:4079: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 
 cat > conftestmake <<\EOF
@@ -4046,12 +4100,12 @@ fi
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4050: checking whether byte ordering is bigendian" >&5
+echo "configure:4104: checking whether byte ordering is bigendian" >&5
 
 ac_cv_c_bigendian=unknown
 # See if sys/param.h defines the BYTE_ORDER macro.
 cat > conftest.$ac_ext <<EOF
-#line 4055 "configure"
+#line 4109 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4062,11 +4116,11 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4066: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   # It does; now see whether it defined to BIG_ENDIAN or not.
 cat > conftest.$ac_ext <<EOF
-#line 4070 "configure"
+#line 4124 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4077,7 +4131,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4135: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -4094,7 +4148,7 @@ fi
 rm -f conftest*
 if test $ac_cv_c_bigendian = unknown; then
 cat > conftest.$ac_ext <<EOF
-#line 4098 "configure"
+#line 4152 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -4107,7 +4161,7 @@ main () {
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:4111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_bigendian=no
 else
@@ -4134,10 +4188,10 @@ fi
 
 
 echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4138: checking size of short" >&5
+echo "configure:4192: checking size of short" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4141 "configure"
+#line 4195 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4148,7 +4202,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -4176,10 +4230,10 @@ if test "$ac_cv_sizeof_short" = 0; then
   exit 1
 fi
 echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:4180: checking size of int" >&5
+echo "configure:4234: checking size of int" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4183 "configure"
+#line 4237 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4190,7 +4244,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -4212,10 +4266,10 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4216: checking size of long" >&5
+echo "configure:4270: checking size of long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4219 "configure"
+#line 4273 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4226,7 +4280,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -4248,10 +4302,10 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4252: checking size of long long" >&5
+echo "configure:4306: checking size of long long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4255 "configure"
+#line 4309 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4262,7 +4316,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -4284,10 +4338,10 @@ EOF
 
 
 echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4288: checking size of void *" >&5
+echo "configure:4342: checking size of void *" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4291 "configure"
+#line 4345 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4298,7 +4352,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_void_p=`cat conftestval`
 else
@@ -4321,7 +4375,7 @@ EOF
 
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:4325: checking for long file names" >&5
+echo "configure:4379: checking for long file names" >&5
 
 ac_cv_sys_long_file_names=yes
 # Test for long file names in all the places we know might matter:
@@ -4367,10 +4421,10 @@ fi
 
 
 echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:4371: checking for sin" >&5
+echo "configure:4425: checking for sin" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4374 "configure"
+#line 4428 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char sin(); below.  */
@@ -4393,7 +4447,7 @@ sin();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_sin=yes"
 else
@@ -4411,12 +4465,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:4415: checking for sin in -lm" >&5
+echo "configure:4469: checking for sin in -lm" >&5
 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lm "
 cat > conftest.$ac_ext <<EOF
-#line 4420 "configure"
+#line 4474 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4427,7 +4481,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:4431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4471,14 +4525,14 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4475 "configure"
+#line 4529 "configure"
 #include "confdefs.h"
 #include <math.h>
 int main() {
 return atanh(1.0) + asinh(1.0) + acosh(1.0); 
 ; return 0; }
 EOF
-if { (eval echo configure:4482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_INVERSE_HYPERBOLIC
@@ -4495,7 +4549,7 @@ fi
 rm -f conftest*
 
 echo "checking type of mail spool file locking" 1>&6
-echo "configure:4499: checking type of mail spool file locking" >&5
+echo "configure:4553: checking type of mail spool file locking" >&5
 test -z "$mail_locking" -a "$mail_use_flock" = "yes" && mail_locking=flock
 test -z "$mail_locking" -a "$mail_use_lockf" = "yes" && mail_locking=lockf
 if   test "$mail_locking" = "lockf"; then { test "$extra_verbose" = "yes" && cat << \EOF
@@ -4520,12 +4574,12 @@ fi
 case "$opsys" in decosf*)
   
 echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6
-echo "configure:4524: checking for cma_open in -lpthreads" >&5
+echo "configure:4578: checking for cma_open in -lpthreads" >&5
 ac_lib_var=`echo pthreads'_'cma_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lpthreads "
 cat > conftest.$ac_ext <<EOF
-#line 4529 "configure"
+#line 4583 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4536,7 +4590,7 @@ int main() {
 cma_open()
 ; return 0; }
 EOF
-if { (eval echo configure:4540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4572,7 +4626,7 @@ fi
 esac
 
 echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6
-echo "configure:4576: checking whether the -xildoff compiler flag is required" >&5
+echo "configure:4630: checking whether the -xildoff compiler flag is required" >&5
 if   ${CC-cc} '-###' -xildon  no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then
   if ${CC-cc} '-###' -xildoff no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ;
     then echo "$ac_t""no" 1>&6;
@@ -4583,7 +4637,7 @@ fi
 
 if test "$opsys" = "sol2" && test "$OS_RELEASE" -ge 56; then
   echo $ac_n "checking for \"-z ignore\" linker flag""... $ac_c" 1>&6
-echo "configure:4587: checking for \"-z ignore\" linker flag" >&5
+echo "configure:4641: checking for \"-z ignore\" linker flag" >&5
   case "`ld -h 2>&1`" in
     *-z\ ignore\|record* ) echo "$ac_t""yes" 1>&6
       ld_switch_site="-z ignore $ld_switch_site" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-z ignore\" to \$ld_switch_site"; fi ;;
@@ -4593,7 +4647,7 @@ fi
 
 
 echo "checking "for specified window system"" 1>&6
-echo "configure:4597: checking "for specified window system"" >&5
+echo "configure:4651: checking "for specified window system"" >&5
 
 if test "$with_x11" != "no"; then
     test "$x_includes $x_libraries" != "NONE NONE" && \
@@ -4626,7 +4680,7 @@ if test "$with_x11" != "no"; then
 # Uses ac_ vars as temps to allow command line to override cache and checks.
 # --without-x overrides everything else, but does not touch the cache.
 echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:4630: checking for X" >&5
+echo "configure:4684: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -4686,12 +4740,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 4690 "configure"
+#line 4744 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4695: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4760,14 +4814,14 @@ if test "$ac_x_libraries" = NO; then
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4764 "configure"
+#line 4818 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:4771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -4876,17 +4930,17 @@ else
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:4880: checking whether -R must be followed by a space" >&5
+echo "configure:4934: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 4883 "configure"
+#line 4937 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -4902,14 +4956,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 4906 "configure"
+#line 4960 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -4945,12 +4999,12 @@ ac_cv_lib_dnet_dnet_ntoa=no
 else
 
 echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:4949: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:5003: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldnet "
 cat > conftest.$ac_ext <<EOF
-#line 4954 "configure"
+#line 5008 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4961,7 +5015,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:4965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4985,12 +5039,12 @@ fi
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       
 echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:4989: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:5043: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldnet_stub "
 cat > conftest.$ac_ext <<EOF
-#line 4994 "configure"
+#line 5048 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5001,7 +5055,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5030,10 +5084,10 @@ fi
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey@clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:5034: checking for gethostbyname" >&5
+echo "configure:5088: checking for gethostbyname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5037 "configure"
+#line 5091 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -5056,7 +5110,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -5077,12 +5131,12 @@ fi
     if test $ac_cv_func_gethostbyname = no; then
       
 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:5081: checking for gethostbyname in -lnsl" >&5
+echo "configure:5135: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lnsl "
 cat > conftest.$ac_ext <<EOF
-#line 5086 "configure"
+#line 5140 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5093,7 +5147,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:5097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5123,10 +5177,10 @@ fi
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:5127: checking for connect" >&5
+echo "configure:5181: checking for connect" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5130 "configure"
+#line 5184 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -5149,7 +5203,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -5172,12 +5226,12 @@ fi
 xe_msg_checking="for connect in -lsocket"
 test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:5176: checking "$xe_msg_checking"" >&5
+echo "configure:5230: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lsocket $X_EXTRA_LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5181 "configure"
+#line 5235 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5188,7 +5242,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:5192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5212,10 +5266,10 @@ fi
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:5216: checking for remove" >&5
+echo "configure:5270: checking for remove" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5219 "configure"
+#line 5273 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -5238,7 +5292,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -5259,12 +5313,12 @@ fi
     if test $ac_cv_func_remove = no; then
       
 echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:5263: checking for remove in -lposix" >&5
+echo "configure:5317: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lposix "
 cat > conftest.$ac_ext <<EOF
-#line 5268 "configure"
+#line 5322 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5275,7 +5329,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:5279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5299,10 +5353,10 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:5303: checking for shmat" >&5
+echo "configure:5357: checking for shmat" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5306 "configure"
+#line 5360 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -5325,7 +5379,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -5346,12 +5400,12 @@ fi
     if test $ac_cv_func_shmat = no; then
       
 echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:5350: checking for shmat in -lipc" >&5
+echo "configure:5404: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lipc "
 cat > conftest.$ac_ext <<EOF
-#line 5355 "configure"
+#line 5409 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5362,7 +5416,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:5366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5398,12 +5452,12 @@ fi
 xe_msg_checking="for IceConnectionNumber in -lICE"
 test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:5402: checking "$xe_msg_checking"" >&5
+echo "configure:5456: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lICE $X_EXTRA_LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5407 "configure"
+#line 5461 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5414,7 +5468,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:5418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5583,7 +5637,7 @@ EOF
 
 
     echo "checking for X defines extracted by xmkmf" 1>&6
-echo "configure:5587: checking for X defines extracted by xmkmf" >&5
+echo "configure:5641: checking for X defines extracted by xmkmf" >&5
   rm -fr conftestdir
   if mkdir conftestdir; then
     cd conftestdir
@@ -5615,15 +5669,15 @@ EOF
 
     ac_safe=`echo "X11/Intrinsic.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Intrinsic.h""... $ac_c" 1>&6
-echo "configure:5619: checking for X11/Intrinsic.h" >&5
+echo "configure:5673: checking for X11/Intrinsic.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5622 "configure"
+#line 5676 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5647,12 +5701,12 @@ fi
 
       
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:5651: checking for XOpenDisplay in -lX11" >&5
+echo "configure:5705: checking for XOpenDisplay in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 "
 cat > conftest.$ac_ext <<EOF
-#line 5656 "configure"
+#line 5710 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5663,7 +5717,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5688,12 +5742,12 @@ fi
 xe_msg_checking="for XGetFontProperty in -lX11"
 test -n "-b i486-linuxaout" && xe_msg_checking="$xe_msg_checking using extra libs -b i486-linuxaout"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:5692: checking "$xe_msg_checking"" >&5
+echo "configure:5746: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo X11'_'XGetFontProperty | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 -b i486-linuxaout"
 cat > conftest.$ac_ext <<EOF
-#line 5697 "configure"
+#line 5751 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5704,7 +5758,7 @@ int main() {
 XGetFontProperty()
 ; return 0; }
 EOF
-if { (eval echo configure:5708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5731,12 +5785,12 @@ fi
 
     
 echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6
-echo "configure:5735: checking for XShapeSelectInput in -lXext" >&5
+echo "configure:5789: checking for XShapeSelectInput in -lXext" >&5
 ac_lib_var=`echo Xext'_'XShapeSelectInput | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXext "
 cat > conftest.$ac_ext <<EOF
-#line 5740 "configure"
+#line 5794 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5747,7 +5801,7 @@ int main() {
 XShapeSelectInput()
 ; return 0; }
 EOF
-if { (eval echo configure:5751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5770,12 +5824,12 @@ fi
 
     
 echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6
-echo "configure:5774: checking for XtOpenDisplay in -lXt" >&5
+echo "configure:5828: checking for XtOpenDisplay in -lXt" >&5
 ac_lib_var=`echo Xt'_'XtOpenDisplay | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXt "
 cat > conftest.$ac_ext <<EOF
-#line 5779 "configure"
+#line 5833 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5786,7 +5840,7 @@ int main() {
 XtOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5809,14 +5863,14 @@ fi
 
 
   echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6
-echo "configure:5813: checking the version of X11 being used" >&5
+echo "configure:5867: checking the version of X11 being used" >&5
   cat > conftest.$ac_ext <<EOF
-#line 5815 "configure"
+#line 5869 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
     int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }
 EOF
-if { (eval echo configure:5820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:5874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest foobar; x11_release=$?
 else
@@ -5841,15 +5895,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5845: checking for $ac_hdr" >&5
+echo "configure:5899: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5848 "configure"
+#line 5902 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5880,7 +5934,7 @@ done
 
 
     echo $ac_n "checking for XFree86""... $ac_c" 1>&6
-echo "configure:5884: checking for XFree86" >&5
+echo "configure:5938: checking for XFree86" >&5
   if test -d "/usr/X386/include" -o \
           -f "/etc/XF86Config"    -o \
          -f "/etc/X11/XF86Config" -o \
@@ -5900,12 +5954,12 @@ EOF
 
     test -z "$with_xmu" && { 
 echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6
-echo "configure:5904: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
+echo "configure:5958: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
 ac_lib_var=`echo Xmu'_'XmuReadBitmapDataFromFile | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXmu "
 cat > conftest.$ac_ext <<EOF
-#line 5909 "configure"
+#line 5963 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5916,7 +5970,7 @@ int main() {
 XmuReadBitmapDataFromFile()
 ; return 0; }
 EOF
-if { (eval echo configure:5920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5955,19 +6009,19 @@ EOF
 
       
 echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6
-echo "configure:5959: checking for main in -lXbsd" >&5
+echo "configure:6013: checking for main in -lXbsd" >&5
 ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXbsd "
 cat > conftest.$ac_ext <<EOF
-#line 5964 "configure"
+#line 6018 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6004,22 +6058,22 @@ fi
 fi 
 if test "$with_msw" != "no"; then
   echo "checking for MS-Windows" 1>&6
-echo "configure:6008: checking for MS-Windows" >&5
+echo "configure:6062: checking for MS-Windows" >&5
   
 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6
-echo "configure:6011: checking for main in -lgdi32" >&5
+echo "configure:6065: checking for main in -lgdi32" >&5
 ac_lib_var=`echo gdi32'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgdi32 "
 cat > conftest.$ac_ext <<EOF
-#line 6016 "configure"
+#line 6070 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6085,12 +6139,12 @@ EOF
  fi
     fi
         cat > conftest.$ac_ext <<EOF
-#line 6089 "configure"
+#line 6143 "configure"
 #include "confdefs.h"
 #include <fcntl.h>
     int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }
 EOF
-if { (eval echo configure:6094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_MSG_SELECT
@@ -6166,7 +6220,7 @@ case "$x_libraries" in *X11R4* )
 esac
 
 echo "checking for WM_COMMAND option" 1>&6
-echo "configure:6170: checking for WM_COMMAND option" >&5;
+echo "configure:6224: checking for WM_COMMAND option" >&5;
 if test "$with_wmcommand" != "no"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_WMCOMMAND
@@ -6181,15 +6235,15 @@ fi
 test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no
 test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6
-echo "configure:6185: checking for X11/Xauth.h" >&5
+echo "configure:6239: checking for X11/Xauth.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6188 "configure"
+#line 6242 "configure"
 #include "confdefs.h"
 #include <X11/Xauth.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6247: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6212,12 +6266,12 @@ fi
  }
 test -z "$with_xauth" && { 
 echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6
-echo "configure:6216: checking for XauGetAuthByAddr in -lXau" >&5
+echo "configure:6270: checking for XauGetAuthByAddr in -lXau" >&5
 ac_lib_var=`echo Xau'_'XauGetAuthByAddr | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXau "
 cat > conftest.$ac_ext <<EOF
-#line 6221 "configure"
+#line 6275 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6228,7 +6282,7 @@ int main() {
 XauGetAuthByAddr()
 ; return 0; }
 EOF
-if { (eval echo configure:6232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6273,15 +6327,15 @@ if test "$with_tooltalk" != "no" ; then
       for dir in "" "Tt/" "desktop/" ; do
     ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6
-echo "configure:6277: checking for ${dir}tt_c.h" >&5
+echo "configure:6331: checking for ${dir}tt_c.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6280 "configure"
+#line 6334 "configure"
 #include "confdefs.h"
 #include <${dir}tt_c.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6285: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6339: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6317,12 +6371,12 @@ if test "$with_tooltalk" != "no" ; then
 xe_msg_checking="for tt_message_create in -ltt"
 test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6321: checking "$xe_msg_checking"" >&5
+echo "configure:6375: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo tt'_'tt_message_create | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ltt $extra_libs"
 cat > conftest.$ac_ext <<EOF
-#line 6326 "configure"
+#line 6380 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6333,7 +6387,7 @@ int main() {
 tt_message_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6390,15 +6444,15 @@ fi
 
 test -z "$with_cde" && { ac_safe=`echo "Dt/Dt.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Dt/Dt.h""... $ac_c" 1>&6
-echo "configure:6394: checking for Dt/Dt.h" >&5
+echo "configure:6448: checking for Dt/Dt.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6397 "configure"
+#line 6451 "configure"
 #include "confdefs.h"
 #include <Dt/Dt.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6456: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6421,12 +6475,12 @@ fi
  }
 test -z "$with_cde" && { 
 echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6
-echo "configure:6425: checking for DtDndDragStart in -lDtSvc" >&5
+echo "configure:6479: checking for DtDndDragStart in -lDtSvc" >&5
 ac_lib_var=`echo DtSvc'_'DtDndDragStart | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lDtSvc "
 cat > conftest.$ac_ext <<EOF
-#line 6430 "configure"
+#line 6484 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6437,7 +6491,7 @@ int main() {
 DtDndDragStart()
 ; return 0; }
 EOF
-if { (eval echo configure:6441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6506,7 +6560,7 @@ EOF
 fi
 
 echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6
-echo "configure:6510: checking if drag and drop API is needed" >&5
+echo "configure:6564: checking if drag and drop API is needed" >&5
 if test "$with_dragndrop" != "no" ; then
   if test -n "$dragndrop_proto" ; then
     with_dragndrop=yes
@@ -6527,18 +6581,18 @@ EOF
 fi
 
 echo "checking for LDAP" 1>&6
-echo "configure:6531: checking for LDAP" >&5
+echo "configure:6585: checking for LDAP" >&5
 test -z "$with_ldap" && { ac_safe=`echo "ldap.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ldap.h""... $ac_c" 1>&6
-echo "configure:6534: checking for ldap.h" >&5
+echo "configure:6588: checking for ldap.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6537 "configure"
+#line 6591 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6542: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6596: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6561,15 +6615,15 @@ fi
  }
 test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for lber.h""... $ac_c" 1>&6
-echo "configure:6565: checking for lber.h" >&5
+echo "configure:6619: checking for lber.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6568 "configure"
+#line 6622 "configure"
 #include "confdefs.h"
 #include <lber.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6573: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6593,12 +6647,12 @@ fi
 if test "$with_ldap" != "no"; then
   
 echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6
-echo "configure:6597: checking for ldap_search in -lldap" >&5
+echo "configure:6651: checking for ldap_search in -lldap" >&5
 ac_lib_var=`echo ldap'_'ldap_search | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap "
 cat > conftest.$ac_ext <<EOF
-#line 6602 "configure"
+#line 6656 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6609,7 +6663,7 @@ int main() {
 ldap_search()
 ; return 0; }
 EOF
-if { (eval echo configure:6613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6634,12 +6688,12 @@ fi
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber" && xe_msg_checking="$xe_msg_checking using extra libs -llber"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6638: checking "$xe_msg_checking"" >&5
+echo "configure:6692: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap -llber"
 cat > conftest.$ac_ext <<EOF
-#line 6643 "configure"
+#line 6697 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6650,7 +6704,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6675,12 +6729,12 @@ fi
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber -lkrb" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6679: checking "$xe_msg_checking"" >&5
+echo "configure:6733: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap -llber -lkrb"
 cat > conftest.$ac_ext <<EOF
-#line 6684 "configure"
+#line 6738 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6691,7 +6745,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6716,12 +6770,12 @@ fi
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber -lkrb -ldes" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb -ldes"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6720: checking "$xe_msg_checking"" >&5
+echo "configure:6774: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap -llber -lkrb -ldes"
 cat > conftest.$ac_ext <<EOF
-#line 6725 "configure"
+#line 6779 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6732,7 +6786,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6783,10 +6837,10 @@ EOF
   for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6787: checking for $ac_func" >&5
+echo "configure:6841: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6790 "configure"
+#line 6844 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6809,7 +6863,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -6841,15 +6895,15 @@ fi
 
 if test "$window_system" != "none"; then
   echo "checking for graphics libraries" 1>&6
-echo "configure:6845: checking for graphics libraries" >&5
+echo "configure:6899: checking for graphics libraries" >&5
 
     xpm_problem=""
   if test -z "$with_xpm"; then
     echo $ac_n "checking for Xpm - no older than 3.4f""... $ac_c" 1>&6
-echo "configure:6850: checking for Xpm - no older than 3.4f" >&5
+echo "configure:6904: checking for Xpm - no older than 3.4f" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6853 "configure"
+#line 6907 "configure"
 #include "confdefs.h"
 #include <X11/xpm.h>
     int main(int c, char **v) {
@@ -6857,7 +6911,7 @@ echo "configure:6850: checking for Xpm - no older than 3.4f" >&5
       XpmIncludeVersion != XpmLibraryVersion() ? 1 :
       XpmIncludeVersion < 30406 ? 2 : 0 ;}
 EOF
-if { (eval echo configure:6861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest dummy_arg; xpm_status=$?;
       if test "$xpm_status" = "0"; then
@@ -6899,17 +6953,17 @@ EOF
 
     libs_x="-lXpm $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXpm\" to \$libs_x"; fi
     echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6
-echo "configure:6903: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:6957: checking for \"FOR_MSW\" xpm" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6906 "configure"
+#line 6960 "configure"
 #include "confdefs.h"
 
 int main() {
 XpmCreatePixmapFromData()
 ; return 0; }
 EOF
-if { (eval echo configure:6913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   xpm_for_msw=no
 else
@@ -6935,15 +6989,15 @@ EOF
 
     test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for compface.h""... $ac_c" 1>&6
-echo "configure:6939: checking for compface.h" >&5
+echo "configure:6993: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6942 "configure"
+#line 6996 "configure"
 #include "confdefs.h"
 #include <compface.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6947: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7001: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6966,12 +7020,12 @@ fi
  }
   test -z "$with_xface" && { 
 echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:6970: checking for UnGenFace in -lcompface" >&5
+echo "configure:7024: checking for UnGenFace in -lcompface" >&5
 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcompface "
 cat > conftest.$ac_ext <<EOF
-#line 6975 "configure"
+#line 7029 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6982,7 +7036,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:6986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7034,12 +7088,12 @@ EOF
       if test "$with_png $with_tiff" != "no no"; then
     
 echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6
-echo "configure:7038: checking for inflate in -lc" >&5
+echo "configure:7092: checking for inflate in -lc" >&5
 ac_lib_var=`echo c'_'inflate | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lc "
 cat > conftest.$ac_ext <<EOF
-#line 7043 "configure"
+#line 7097 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7050,7 +7104,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7069,12 +7123,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6
-echo "configure:7073: checking for inflate in -lz" >&5
+echo "configure:7127: checking for inflate in -lz" >&5
 ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lz "
 cat > conftest.$ac_ext <<EOF
-#line 7078 "configure"
+#line 7132 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7085,7 +7139,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7104,12 +7158,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6
-echo "configure:7108: checking for inflate in -lgz" >&5
+echo "configure:7162: checking for inflate in -lgz" >&5
 ac_lib_var=`echo gz'_'inflate | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgz "
 cat > conftest.$ac_ext <<EOF
-#line 7113 "configure"
+#line 7167 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7120,7 +7174,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7150,15 +7204,15 @@ fi
 
     test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6
-echo "configure:7154: checking for jpeglib.h" >&5
+echo "configure:7208: checking for jpeglib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7157 "configure"
+#line 7211 "configure"
 #include "confdefs.h"
 #include <jpeglib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7181,12 +7235,12 @@ fi
  }
   test -z "$with_jpeg" && { 
 echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6
-echo "configure:7185: checking for jpeg_destroy_decompress in -ljpeg" >&5
+echo "configure:7239: checking for jpeg_destroy_decompress in -ljpeg" >&5
 ac_lib_var=`echo jpeg'_'jpeg_destroy_decompress | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ljpeg "
 cat > conftest.$ac_ext <<EOF
-#line 7190 "configure"
+#line 7244 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7197,7 +7251,7 @@ int main() {
 jpeg_destroy_decompress()
 ; return 0; }
 EOF
-if { (eval echo configure:7201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7233,10 +7287,10 @@ EOF
 
     png_problem=""
   test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:7237: checking for pow" >&5
+echo "configure:7291: checking for pow" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7240 "configure"
+#line 7294 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pow(); below.  */
@@ -7259,7 +7313,7 @@ pow();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_pow=yes"
 else
@@ -7280,15 +7334,15 @@ fi
  }
   test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for png.h""... $ac_c" 1>&6
-echo "configure:7284: checking for png.h" >&5
+echo "configure:7338: checking for png.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7287 "configure"
+#line 7341 "configure"
 #include "confdefs.h"
 #include <png.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7292: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7311,12 +7365,12 @@ fi
  }
   test -z "$with_png" && { 
 echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:7315: checking for png_read_image in -lpng" >&5
+echo "configure:7369: checking for png_read_image in -lpng" >&5
 ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lpng "
 cat > conftest.$ac_ext <<EOF
-#line 7320 "configure"
+#line 7374 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7327,7 +7381,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:7331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7350,10 +7404,10 @@ fi
  }
   if test -z "$with_png"; then
     echo $ac_n "checking for workable png version information""... $ac_c" 1>&6
-echo "configure:7354: checking for workable png version information" >&5
+echo "configure:7408: checking for workable png version information" >&5
     xe_check_libs="-lpng -lz"
     cat > conftest.$ac_ext <<EOF
-#line 7357 "configure"
+#line 7411 "configure"
 #include "confdefs.h"
 #include <png.h>
     int main(int c, char **v) {
@@ -7361,7 +7415,7 @@ echo "configure:7354: checking for workable png version information" >&5
     if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1;
     return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;}
 EOF
-if { (eval echo configure:7365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest dummy_arg; png_status=$?;
       if test "$png_status" = "0"; then
@@ -7404,15 +7458,15 @@ EOF
 
     test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6
-echo "configure:7408: checking for tiffio.h" >&5
+echo "configure:7462: checking for tiffio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7411 "configure"
+#line 7465 "configure"
 #include "confdefs.h"
 #include <tiffio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7416: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7470: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7435,12 +7489,12 @@ fi
  }
   test -z "$with_tiff" && { 
 echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:7439: checking for TIFFClientOpen in -ltiff" >&5
+echo "configure:7493: checking for TIFFClientOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFClientOpen | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ltiff "
 cat > conftest.$ac_ext <<EOF
-#line 7444 "configure"
+#line 7498 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7451,7 +7505,7 @@ int main() {
 TIFFClientOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:7455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7490,16 +7544,16 @@ fi
 if test "$with_x11" = "yes"; then
 
   echo "checking for X11 graphics libraries" 1>&6
-echo "configure:7494: checking for X11 graphics libraries" >&5
+echo "configure:7548: checking for X11 graphics libraries" >&5
 
     
 echo $ac_n "checking for XawScrollbarSetThumb in -lXaw""... $ac_c" 1>&6
-echo "configure:7498: checking for XawScrollbarSetThumb in -lXaw" >&5
+echo "configure:7552: checking for XawScrollbarSetThumb in -lXaw" >&5
 ac_lib_var=`echo Xaw'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXaw "
 cat > conftest.$ac_ext <<EOF
-#line 7503 "configure"
+#line 7557 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7510,7 +7564,7 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:7514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7534,12 +7588,12 @@ fi
                     
     
 echo $ac_n "checking for XawScrollbarSetThumb in -lXaw3d""... $ac_c" 1>&6
-echo "configure:7538: checking for XawScrollbarSetThumb in -lXaw3d" >&5
+echo "configure:7592: checking for XawScrollbarSetThumb in -lXaw3d" >&5
 ac_lib_var=`echo Xaw3d'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXaw3d "
 cat > conftest.$ac_ext <<EOF
-#line 7543 "configure"
+#line 7597 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7550,7 +7604,7 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:7554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7574,15 +7628,15 @@ fi
 
     ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:7578: checking for Xm/Xm.h" >&5
+echo "configure:7632: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7581 "configure"
+#line 7635 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7586: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7640: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7599,12 +7653,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   
 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6
-echo "configure:7603: checking for XmStringFree in -lXm" >&5
+echo "configure:7657: checking for XmStringFree in -lXm" >&5
 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXm "
 cat > conftest.$ac_ext <<EOF
-#line 7608 "configure"
+#line 7662 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7615,7 +7669,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:7619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7644,9 +7698,9 @@ fi
 
   if test "$have_motif" = "yes"; then
         echo $ac_n "checking for Lesstif""... $ac_c" 1>&6
-echo "configure:7648: checking for Lesstif" >&5
+echo "configure:7702: checking for Lesstif" >&5
     cat > conftest.$ac_ext <<EOF
-#line 7650 "configure"
+#line 7704 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 #ifdef LESSTIF_VERSION
@@ -7951,7 +8005,7 @@ if test "$with_x11" = "yes"; then
    echo "    xemacs will be linked with \"gui-x.o\""
  fi
 else
-  if test \( "$with_sound" = "nas" \) -o \( "$with_sound" = "both" \); then
+  if test "$with_nas_sound" = "nas"; then
     echo "Attempt to Build NAS sound without X"
     echo "Please remove NAS configuration or build with X"
     exit 1
@@ -7979,7 +8033,7 @@ fi
 
 if test "$with_mule" = "yes" ; then
   echo "checking for Mule-related features" 1>&6
-echo "configure:7983: checking for Mule-related features" >&5
+echo "configure:8037: checking for Mule-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining MULE
 EOF
@@ -8004,15 +8058,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8008: checking for $ac_hdr" >&5
+echo "configure:8062: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8011 "configure"
+#line 8065 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8016: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8070: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8043,12 +8097,12 @@ done
 
   
 echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6
-echo "configure:8047: checking for strerror in -lintl" >&5
+echo "configure:8101: checking for strerror in -lintl" >&5
 ac_lib_var=`echo intl'_'strerror | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lintl "
 cat > conftest.$ac_ext <<EOF
-#line 8052 "configure"
+#line 8106 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8059,7 +8113,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:8063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8092,18 +8146,18 @@ fi
 
 
   echo "checking for Mule input methods" 1>&6
-echo "configure:8096: checking for Mule input methods" >&5
+echo "configure:8150: checking for Mule input methods" >&5
         case "$with_xim" in "" | "yes" )
     echo "checking for XIM" 1>&6
-echo "configure:8099: checking for XIM" >&5
+echo "configure:8153: checking for XIM" >&5
     
 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6
-echo "configure:8102: checking for XOpenIM in -lX11" >&5
+echo "configure:8156: checking for XOpenIM in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenIM | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 "
 cat > conftest.$ac_ext <<EOF
-#line 8107 "configure"
+#line 8161 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8114,7 +8168,7 @@ int main() {
 XOpenIM()
 ; return 0; }
 EOF
-if { (eval echo configure:8118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8138,12 +8192,12 @@ fi
         if test "$have_motif $have_lesstif" = "yes no"; then
       
 echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6
-echo "configure:8142: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:8196: checking for XmImMbLookupString in -lXm" >&5
 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXm "
 cat > conftest.$ac_ext <<EOF
-#line 8147 "configure"
+#line 8201 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8154,7 +8208,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:8158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8219,15 +8273,15 @@ EOF
 
     if test "$with_xfs" = "yes" ; then
     echo "checking for XFontSet" 1>&6
-echo "configure:8223: checking for XFontSet" >&5
+echo "configure:8277: checking for XFontSet" >&5
     
 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6
-echo "configure:8226: checking for XmbDrawString in -lX11" >&5
+echo "configure:8280: checking for XmbDrawString in -lX11" >&5
 ac_lib_var=`echo X11'_'XmbDrawString | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 "
 cat > conftest.$ac_ext <<EOF
-#line 8231 "configure"
+#line 8285 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8238,7 +8292,7 @@ int main() {
 XmbDrawString()
 ; return 0; }
 EOF
-if { (eval echo configure:8242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8278,15 +8332,15 @@ EOF
     test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support
   test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6
-echo "configure:8282: checking for wnn/jllib.h" >&5
+echo "configure:8336: checking for wnn/jllib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8285 "configure"
+#line 8339 "configure"
 #include "confdefs.h"
 #include <wnn/jllib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8290: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8344: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8311,10 +8365,10 @@ fi
     for ac_func in crypt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8315: checking for $ac_func" >&5
+echo "configure:8369: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8318 "configure"
+#line 8372 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8337,7 +8391,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -8366,12 +8420,12 @@ done
 
     test "$ac_cv_func_crypt" != "yes" && { 
 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:8370: checking for crypt in -lcrypt" >&5
+echo "configure:8424: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcrypt "
 cat > conftest.$ac_ext <<EOF
-#line 8375 "configure"
+#line 8429 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8382,7 +8436,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:8386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8417,12 +8471,12 @@ fi
     if test -z "$with_wnn" -o "$with_wnn" = "yes"; then
     
 echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6
-echo "configure:8421: checking for jl_dic_list_e in -lwnn" >&5
+echo "configure:8475: checking for jl_dic_list_e in -lwnn" >&5
 ac_lib_var=`echo wnn'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn "
 cat > conftest.$ac_ext <<EOF
-#line 8426 "configure"
+#line 8480 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8433,7 +8487,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8451,12 +8505,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6
-echo "configure:8455: checking for jl_dic_list_e in -lwnn4" >&5
+echo "configure:8509: checking for jl_dic_list_e in -lwnn4" >&5
 ac_lib_var=`echo wnn4'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn4 "
 cat > conftest.$ac_ext <<EOF
-#line 8460 "configure"
+#line 8514 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8467,7 +8521,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8485,12 +8539,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6
-echo "configure:8489: checking for jl_dic_list_e in -lwnn6" >&5
+echo "configure:8543: checking for jl_dic_list_e in -lwnn6" >&5
 ac_lib_var=`echo wnn6'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn6 "
 cat > conftest.$ac_ext <<EOF
-#line 8494 "configure"
+#line 8548 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8501,7 +8555,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8519,12 +8573,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6
-echo "configure:8523: checking for dic_list_e in -lwnn6_fromsrc" >&5
+echo "configure:8577: checking for dic_list_e in -lwnn6_fromsrc" >&5
 ac_lib_var=`echo wnn6_fromsrc'_'dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn6_fromsrc "
 cat > conftest.$ac_ext <<EOF
-#line 8528 "configure"
+#line 8582 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8535,7 +8589,7 @@ int main() {
 dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8583,12 +8637,12 @@ EOF
     if test "$with_wnn6" != "no"; then
       
 echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6
-echo "configure:8587: checking for jl_fi_dic_list in -l$libwnn" >&5
+echo "configure:8641: checking for jl_fi_dic_list in -l$libwnn" >&5
 ac_lib_var=`echo $libwnn'_'jl_fi_dic_list | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$libwnn "
 cat > conftest.$ac_ext <<EOF
-#line 8592 "configure"
+#line 8646 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8599,7 +8653,7 @@ int main() {
 jl_fi_dic_list()
 ; return 0; }
 EOF
-if { (eval echo configure:8603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8634,15 +8688,15 @@ EOF
   if test "$with_canna" != "no"; then
     ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:8638: checking for canna/jrkanji.h" >&5
+echo "configure:8692: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8641 "configure"
+#line 8695 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8646: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8669,15 +8723,15 @@ fi
     c_switch_site="$c_switch_site -I/usr/local/canna/include"
     ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:8673: checking for canna/jrkanji.h" >&5
+echo "configure:8727: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8676 "configure"
+#line 8730 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8735: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8705,15 +8759,15 @@ fi
 
   test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6
-echo "configure:8709: checking for canna/RK.h" >&5
+echo "configure:8763: checking for canna/RK.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8712 "configure"
+#line 8766 "configure"
 #include "confdefs.h"
 #include <canna/RK.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8771: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8736,12 +8790,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6
-echo "configure:8740: checking for RkBgnBun in -lRKC" >&5
+echo "configure:8794: checking for RkBgnBun in -lRKC" >&5
 ac_lib_var=`echo RKC'_'RkBgnBun | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lRKC "
 cat > conftest.$ac_ext <<EOF
-#line 8745 "configure"
+#line 8799 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8752,7 +8806,7 @@ int main() {
 RkBgnBun()
 ; return 0; }
 EOF
-if { (eval echo configure:8756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8775,12 +8829,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6
-echo "configure:8779: checking for jrKanjiControl in -lcanna" >&5
+echo "configure:8833: checking for jrKanjiControl in -lcanna" >&5
 ac_lib_var=`echo canna'_'jrKanjiControl | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcanna "
 cat > conftest.$ac_ext <<EOF
-#line 8784 "configure"
+#line 8838 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8791,7 +8845,7 @@ int main() {
 jrKanjiControl()
 ; return 0; }
 EOF
-if { (eval echo configure:8795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8840,12 +8894,12 @@ if test "$need_motif" = "yes" ; then
   libs_x="-lXm $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXm\" to \$libs_x"; fi
     
 echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6
-echo "configure:8844: checking for layout_object_getvalue in -li18n" >&5
+echo "configure:8898: checking for layout_object_getvalue in -li18n" >&5
 ac_lib_var=`echo i18n'_'layout_object_getvalue | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -li18n "
 cat > conftest.$ac_ext <<EOF
-#line 8849 "configure"
+#line 8903 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8856,7 +8910,7 @@ int main() {
 layout_object_getvalue()
 ; return 0; }
 EOF
-if { (eval echo configure:8860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8942,10 +8996,10 @@ fi
 for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime gethostname getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8946: checking for $ac_func" >&5
+echo "configure:9000: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8949 "configure"
+#line 9003 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8968,7 +9022,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9009,10 +9063,10 @@ case "$opsys" in
       * ) for ac_func in realpath
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9013: checking for $ac_func" >&5
+echo "configure:9067: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9016 "configure"
+#line 9070 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9035,7 +9089,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9071,10 +9125,10 @@ esac
 for ac_func in getloadavg
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9075: checking for $ac_func" >&5
+echo "configure:9129: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9078 "configure"
+#line 9132 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9097,7 +9151,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9133,12 +9187,12 @@ then
 
     
 echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6
-echo "configure:9137: checking for kstat_open in -lkstat" >&5
+echo "configure:9191: checking for kstat_open in -lkstat" >&5
 ac_lib_var=`echo kstat'_'kstat_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lkstat "
 cat > conftest.$ac_ext <<EOF
-#line 9142 "configure"
+#line 9196 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9149,7 +9203,7 @@ int main() {
 kstat_open()
 ; return 0; }
 EOF
-if { (eval echo configure:9153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9183,12 +9237,12 @@ fi
 
     
 echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6
-echo "configure:9187: checking for kvm_read in -lkvm" >&5
+echo "configure:9241: checking for kvm_read in -lkvm" >&5
 ac_lib_var=`echo kvm'_'kvm_read | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lkvm "
 cat > conftest.$ac_ext <<EOF
-#line 9192 "configure"
+#line 9246 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9199,7 +9253,7 @@ int main() {
 kvm_read()
 ; return 0; }
 EOF
-if { (eval echo configure:9203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9233,16 +9287,16 @@ fi
 fi
 
 echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:9237: checking whether netdb declares h_errno" >&5
+echo "configure:9291: checking whether netdb declares h_errno" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9239 "configure"
+#line 9293 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 int main() {
 return h_errno;
 ; return 0; }
 EOF
-if { (eval echo configure:9246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    { test "$extra_verbose" = "yes" && cat << \EOF
@@ -9262,16 +9316,16 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:9266: checking for sigsetjmp" >&5
+echo "configure:9320: checking for sigsetjmp" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9268 "configure"
+#line 9322 "configure"
 #include "confdefs.h"
 #include <setjmp.h>
 int main() {
 sigjmp_buf bar; sigsetjmp (bar, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:9275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9329: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    { test "$extra_verbose" = "yes" && cat << \EOF
@@ -9291,11 +9345,11 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6
-echo "configure:9295: checking whether localtime caches TZ" >&5
+echo "configure:9349: checking whether localtime caches TZ" >&5
 
 if test "$ac_cv_func_tzset" = "yes"; then
 cat > conftest.$ac_ext <<EOF
-#line 9299 "configure"
+#line 9353 "configure"
 #include "confdefs.h"
 #include <time.h>
 #if STDC_HEADERS
@@ -9330,7 +9384,7 @@ main()
   exit (0);
 }
 EOF
-if { (eval echo configure:9334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   emacs_cv_localtime_cache=no
 else
@@ -9360,9 +9414,9 @@ fi
 
 if test "$HAVE_TIMEVAL" = "yes"; then
 echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6
-echo "configure:9364: checking whether gettimeofday accepts one or two arguments" >&5
+echo "configure:9418: checking whether gettimeofday accepts one or two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9366 "configure"
+#line 9420 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -9384,7 +9438,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:9388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""two" 1>&6
 else
@@ -9406,19 +9460,19 @@ fi
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:9410: checking for inline" >&5
+echo "configure:9464: checking for inline" >&5
 
 ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 9415 "configure"
+#line 9469 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:9422: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9476: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -9468,17 +9522,17 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:9472: checking for working alloca.h" >&5
+echo "configure:9526: checking for working alloca.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9475 "configure"
+#line 9529 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:9482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -9502,10 +9556,10 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:9506: checking for alloca" >&5
+echo "configure:9560: checking for alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9509 "configure"
+#line 9563 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -9533,7 +9587,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:9537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -9572,10 +9626,10 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:9576: checking whether alloca needs Cray hooks" >&5
+echo "configure:9630: checking whether alloca needs Cray hooks" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9579 "configure"
+#line 9633 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -9599,10 +9653,10 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9603: checking for $ac_func" >&5
+echo "configure:9657: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9606 "configure"
+#line 9660 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9625,7 +9679,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9655,10 +9709,10 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:9659: checking stack direction for C alloca" >&5
+echo "configure:9713: checking stack direction for C alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9662 "configure"
+#line 9716 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -9677,7 +9731,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:9681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_stack_direction=1
 else
@@ -9706,15 +9760,15 @@ test -n "$ALLOCA" && extra_objs="$extra_objs $ALLOCA" &&  if test "$extra_verbos
 
 ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:9710: checking for vfork.h" >&5
+echo "configure:9764: checking for vfork.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9713 "configure"
+#line 9767 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9718: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9772: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9742,10 +9796,10 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:9746: checking for working vfork" >&5
+echo "configure:9800: checking for working vfork" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9749 "configure"
+#line 9803 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -9840,7 +9894,7 @@ main() {
   }
 }
 EOF
-if { (eval echo configure:9844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_vfork_works=yes
 else
@@ -9866,10 +9920,10 @@ fi
 
 
 echo $ac_n "checking for working strcoll""... $ac_c" 1>&6
-echo "configure:9870: checking for working strcoll" >&5
+echo "configure:9924: checking for working strcoll" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9873 "configure"
+#line 9927 "configure"
 #include "confdefs.h"
 #include <string.h>
 main ()
@@ -9879,7 +9933,7 @@ main ()
        strcoll ("123", "456") >= 0);
 }
 EOF
-if { (eval echo configure:9883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_strcoll_works=yes
 else
@@ -9907,10 +9961,10 @@ fi
 for ac_func in getpgrp
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9911: checking for $ac_func" >&5
+echo "configure:9965: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9914 "configure"
+#line 9968 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9933,7 +9987,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
 done
 
 echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6
-echo "configure:9965: checking whether getpgrp takes no argument" >&5
+echo "configure:10019: checking whether getpgrp takes no argument" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9968 "configure"
+#line 10022 "configure"
 #include "confdefs.h"
 
 /*
@@ -10019,7 +10073,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:10023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_getpgrp_void=yes
 else
 
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:10050: checking for working mmap" >&5
+echo "configure:10104: checking for working mmap" >&5
 case "$opsys" in ultrix* ) have_mmap=no ;; *)
 cat > conftest.$ac_ext <<EOF
-#line 10053 "configure"
+#line 10107 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <unistd.h>
@@ -10082,7 +10136,7 @@ int main (int argc, char *argv[])
   return 1;
 }
 EOF
-if { (eval echo configure:10086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   have_mmap=yes
 else
@@ -10117,15 +10171,15 @@ EOF
 
 ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termios.h""... $ac_c" 1>&6
-echo "configure:10121: checking for termios.h" >&5
+echo "configure:10175: checking for termios.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10124 "configure"
+#line 10178 "configure"
 #include "confdefs.h"
 #include <termios.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10183: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10168,15 +10222,15 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termio.h""... $ac_c" 1>&6
-echo "configure:10172: checking for termio.h" >&5
+echo "configure:10226: checking for termio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10175 "configure"
+#line 10229 "configure"
 #include "confdefs.h"
 #include <termio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 
 echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:10212: checking for socket" >&5
+echo "configure:10266: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10215 "configure"
+#line 10269 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -10234,7 +10288,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_socket=yes"
 else
@@ -10249,15 +10303,15 @@ if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6
-echo "configure:10253: checking for netinet/in.h" >&5
+echo "configure:10307: checking for netinet/in.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10256 "configure"
+#line 10310 "configure"
 #include "confdefs.h"
 #include <netinet/in.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10261: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10274,15 +10328,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6
-echo "configure:10278: checking for arpa/inet.h" >&5
+echo "configure:10332: checking for arpa/inet.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10281 "configure"
+#line 10335 "configure"
 #include "confdefs.h"
 #include <arpa/inet.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10286: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10340: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10307,9 +10361,9 @@ EOF
 }
 
       echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:10311: checking "for sun_len member in struct sockaddr_un"" >&5
+echo "configure:10365: checking "for sun_len member in struct sockaddr_un"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10313 "configure"
+#line 10367 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10320,7 +10374,7 @@ int main() {
 static struct sockaddr_un x; x.sun_len = 1;
 ; return 0; }
 EOF
-if { (eval echo configure:10324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_SOCKADDR_SUN_LEN
@@ -10338,9 +10392,9 @@ else
 fi
 rm -f conftest*
       echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6
-echo "configure:10342: checking "for ip_mreq struct in netinet/in.h"" >&5
+echo "configure:10396: checking "for ip_mreq struct in netinet/in.h"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10344 "configure"
+#line 10398 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10350,7 +10404,7 @@ int main() {
 static struct ip_mreq x;
 ; return 0; }
 EOF
-if { (eval echo configure:10354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_MULTICAST
 
 
 echo $ac_n "checking for msgget""... $ac_c" 1>&6
-echo "configure:10385: checking for msgget" >&5
+echo "configure:10439: checking for msgget" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10388 "configure"
+#line 10442 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char msgget(); below.  */
@@ -10407,7 +10461,7 @@ msgget();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_msgget=yes"
 else
@@ -10422,15 +10476,15 @@ if eval "test \"`echo '$ac_cv_func_'msgget`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6
-echo "configure:10426: checking for sys/ipc.h" >&5
+echo "configure:10480: checking for sys/ipc.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10429 "configure"
+#line 10483 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10488: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10447,15 +10501,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6
-echo "configure:10451: checking for sys/msg.h" >&5
+echo "configure:10505: checking for sys/msg.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10454 "configure"
+#line 10508 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10459: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10513: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dirent.h""... $ac_c" 1>&6
-echo "configure:10497: checking for dirent.h" >&5
+echo "configure:10551: checking for dirent.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10500 "configure"
+#line 10554 "configure"
 #include "confdefs.h"
 #include <dirent.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10505: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10559: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10528,15 +10582,15 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6
-echo "configure:10532: checking for sys/dir.h" >&5
+echo "configure:10586: checking for sys/dir.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10535 "configure"
+#line 10589 "configure"
 #include "confdefs.h"
 #include <sys/dir.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10540: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10594: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for nlist.h""... $ac_c" 1>&6
-echo "configure:10573: checking for nlist.h" >&5
+echo "configure:10627: checking for nlist.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10576 "configure"
+#line 10630 "configure"
 #include "confdefs.h"
 #include <nlist.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10581: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 
 echo "checking "for sound support"" 1>&6
-echo "configure:10611: checking "for sound support"" >&5
-case "$with_sound" in
-  native | both ) with_native_sound=yes;;
-  nas    | no   ) with_native_sound=no;;
-esac
+echo "configure:10665: checking "for sound support"" >&5
 test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes
 
 if test "$with_native_sound" != "no"; then
     if test -n "$native_sound_lib"; then
     ac_safe=`echo "multimedia/audio_device.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for multimedia/audio_device.h""... $ac_c" 1>&6
-echo "configure:10622: checking for multimedia/audio_device.h" >&5
+echo "configure:10672: checking for multimedia/audio_device.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10625 "configure"
+#line 10675 "configure"
 #include "confdefs.h"
 #include <multimedia/audio_device.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10630: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10680: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
       if test -z "$native_sound_lib"; then
         
 echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6
-echo "configure:10678: checking for ALopenport in -laudio" >&5
+echo "configure:10728: checking for ALopenport in -laudio" >&5
 ac_lib_var=`echo audio'_'ALopenport | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -laudio "
 cat > conftest.$ac_ext <<EOF
-#line 10683 "configure"
+#line 10733 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10690,7 +10740,7 @@ int main() {
 ALopenport()
 ; return 0; }
 EOF
-if { (eval echo configure:10694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
       if test -z "$native_sound_lib"; then
        
 echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6
-echo "configure:10725: checking for AOpenAudio in -lAlib" >&5
+echo "configure:10775: checking for AOpenAudio in -lAlib" >&5
 ac_lib_var=`echo Alib'_'AOpenAudio | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lAlib "
 cat > conftest.$ac_ext <<EOF
-#line 10730 "configure"
+#line 10780 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10737,7 +10787,7 @@ int main() {
 AOpenAudio()
 ; return 0; }
 EOF
-if { (eval echo configure:10741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
     for dir in "machine" "sys" "linux"; do
       ac_safe=`echo "${dir}/soundcard.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ${dir}/soundcard.h""... $ac_c" 1>&6
-echo "configure:10779: checking for ${dir}/soundcard.h" >&5
+echo "configure:10829: checking for ${dir}/soundcard.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10782 "configure"
+#line 10832 "configure"
 #include "confdefs.h"
 #include <${dir}/soundcard.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10787: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10799,6 +10849,7 @@ rm -f conftest*
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   sound_found=yes
+       need_miscplay=yes
         extra_objs="$extra_objs linuxplay.o" &&  if test "$extra_verbose" = "yes"; then
    echo "    xemacs will be linked with \"linuxplay.o\""
  fi
   test "$sound_found" = "yes" && with_native_sound=yes
 fi
 
-if test -z "$with_sound"; then
-  if test "$with_native_sound" = "yes" -o -n "$native_sound_lib"; then
-    with_sound=native
-  fi
-fi
-
 if test "$with_native_sound" = "yes"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_NATIVE_SOUND
@@ -10839,7 +10884,7 @@ EOF
   test -n "$native_sound_lib" && LIBS="$native_sound_lib $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"$native_sound_lib\" to \$LIBS"; fi
 fi
 
-case "$with_sound" in both | nas )
+if test "$with_nas_sound" = "yes"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_NAS_SOUND
 EOF
@@ -10853,7 +10898,7 @@ EOF
  fi
   libs_x="-laudio $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-laudio\" to \$libs_x"; fi
       cat > conftest.$ac_ext <<EOF
-#line 10857 "configure"
+#line 10902 "configure"
 #include "confdefs.h"
 #include <audio/Xtutil.h>
 EOF
@@ -10873,14 +10918,72 @@ EOF
 fi
 rm -f conftest*
 
-esac
+fi
+
+# Extract the first word of "esd-config", so it can be a program name with args.
+set dummy esd-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:10927: checking for $ac_word" >&5
+
+if test -n "$have_esd_config"; then
+  ac_cv_prog_have_esd_config="$have_esd_config" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_have_esd_config="yes"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_have_esd_config" && ac_cv_prog_have_esd_config="no"
+fi
+have_esd_config="$ac_cv_prog_have_esd_config"
+if test -n "$have_esd_config"; then
+  echo "$ac_t""$have_esd_config" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$with_esd"; then
+  with_esd=$have_esd_config
+fi
+
+if test "$with_esd" = "yes"; then
+  if test "$have_esd_config" = "no"; then
+    echo "*** esd-config was not found in your PATH. Disabling esd support."
+    with_esd=no
+  else
+    { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining HAVE_ESD_SOUND
+EOF
+cat >> confdefs.h <<\EOF
+#define HAVE_ESD_SOUND 1
+EOF
+}
+
+    need_miscplay=yes
+    extra_objs="$extra_objs esd.o" &&  if test "$extra_verbose" = "yes"; then
+   echo "    xemacs will be linked with \"esd.o\""
+ fi
+    libs_x="`esd-config --libs` $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"`esd-config --libs`\" to \$libs_x"; fi
+  fi
+fi
+
+if test "$need_miscplay" = "yes"; then
+  extra_objs="$extra_objs miscplay.o" &&  if test "$extra_verbose" = "yes"; then
+   echo "    xemacs will be linked with \"miscplay.o\""
+ fi
+fi
 
 
 test -z "$with_tty" && with_tty=yes
 
 if test "$with_tty" = "yes"  ; then
   echo "checking for TTY-related features" 1>&6
-echo "configure:10884: checking for TTY-related features" >&5
+echo "configure:10987: checking for TTY-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_TTY
 EOF
@@ -10896,12 +10999,12 @@ EOF
     if test -z "$with_ncurses"; then
     
 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:10900: checking for tgetent in -lncurses" >&5
+echo "configure:11003: checking for tgetent in -lncurses" >&5
 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lncurses "
 cat > conftest.$ac_ext <<EOF
-#line 10905 "configure"
+#line 11008 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10912,7 +11015,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:10916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10945,15 +11048,15 @@ EOF
 
     ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6
-echo "configure:10949: checking for ncurses/curses.h" >&5
+echo "configure:11052: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10952 "configure"
+#line 11055 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11060: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
     ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6
-echo "configure:10979: checking for ncurses/term.h" >&5
+echo "configure:11082: checking for ncurses/term.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10982 "configure"
+#line 11085 "configure"
 #include "confdefs.h"
 #include <ncurses/term.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11090: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
       c_switch_site="$c_switch_site -I/usr/include/ncurses"
       ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6
-echo "configure:11017: checking for ncurses/curses.h" >&5
+echo "configure:11120: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11020 "configure"
+#line 11123 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11025: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
        for lib in curses termlib termcap; do
          
 echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6
-echo "configure:11060: checking for tgetent in -l$lib" >&5
+echo "configure:11163: checking for tgetent in -l$lib" >&5
 ac_lib_var=`echo $lib'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$lib "
 cat > conftest.$ac_ext <<EOF
-#line 11065 "configure"
+#line 11168 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11072,7 +11175,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
       else
        
 echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
-echo "configure:11107: checking for tgetent in -lcurses" >&5
+echo "configure:11210: checking for tgetent in -lcurses" >&5
 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcurses "
 cat > conftest.$ac_ext <<EOF
-#line 11112 "configure"
+#line 11215 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11119,7 +11222,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11137,12 +11240,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:11141: checking for tgetent in -ltermcap" >&5
+echo "configure:11244: checking for tgetent in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ltermcap "
 cat > conftest.$ac_ext <<EOF
-#line 11146 "configure"
+#line 11249 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11153,7 +11256,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11201,15 +11304,15 @@ EOF
 
     test -z "$with_gpm" && { ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for gpm.h""... $ac_c" 1>&6
-echo "configure:11205: checking for gpm.h" >&5
+echo "configure:11308: checking for gpm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11208 "configure"
+#line 11311 "configure"
 #include "confdefs.h"
 #include <gpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11316: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
  }
   test -z "$with_gpm" && { 
 echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
-echo "configure:11236: checking for Gpm_Open in -lgpm" >&5
+echo "configure:11339: checking for Gpm_Open in -lgpm" >&5
 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgpm "
 cat > conftest.$ac_ext <<EOF
-#line 11241 "configure"
+#line 11344 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11248,7 +11351,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:11252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11296,22 +11399,22 @@ test "$with_x11" = "yes" -o "$with_tty" = "yes" && extra_objs="$extra_objs event
  fi
 
 
-test "$with_database_gnudbm $with_database_dbm $with_database_berkdb" \
+test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
   != "no no no" && echo "checking for database support" 1>&6
-echo "configure:11302: checking for database support" >&5
+echo "configure:11405: checking for database support" >&5
 
-if test "$with_database_gnudbm $with_database_dbm" != "no no"; then
+if test "$with_database_gdbm $with_database_dbm" != "no no"; then
   ac_safe=`echo "ndbm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ndbm.h""... $ac_c" 1>&6
-echo "configure:11307: checking for ndbm.h" >&5
+echo "configure:11410: checking for ndbm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11310 "configure"
+#line 11413 "configure"
 #include "confdefs.h"
 #include <ndbm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11418: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11330,23 +11433,23 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
 else
   echo "$ac_t""no" 1>&6
 
-    test "$with_database_gnudbm" = "yes" -o \
-         "$with_database_dbm"    = "yes" && \
+    test "$with_database_gdbm" = "yes" -o \
+         "$with_database_dbm"  = "yes" && \
       { echo "Error:" "Required DBM support cannot be provided." >&2; exit 1; }
-    with_database_gnudbm=no with_database_dbm=no
+    with_database_gdbm=no with_database_dbm=no
 fi
 
 fi
 
-if test "$with_database_gnudbm" != "no"; then
+if test "$with_database_gdbm" != "no"; then
   
 echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6
-echo "configure:11345: checking for dbm_open in -lgdbm" >&5
+echo "configure:11448: checking for dbm_open in -lgdbm" >&5
 ac_lib_var=`echo gdbm'_'dbm_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgdbm "
 cat > conftest.$ac_ext <<EOF
-#line 11350 "configure"
+#line 11453 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11357,7 +11460,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:11361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11371,13 +11474,13 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  with_database_gnudbm=yes with_database_dbm=no libdbm=-lgdbm
+  with_database_gdbm=yes with_database_dbm=no libdbm=-lgdbm
 else
   echo "$ac_t""no" 1>&6
-if test "$with_database_gnudbm" = "yes"; then
+if test "$with_database_gdbm" = "yes"; then
      { echo "Error:" "Required GNU DBM support cannot be provided." >&2; exit 1; }
    fi
-   with_database_gnudbm=no
+   with_database_gdbm=no
 fi
 
 
 
 if test "$with_database_dbm" != "no"; then
   echo $ac_n "checking for dbm_open""... $ac_c" 1>&6
-echo "configure:11389: checking for dbm_open" >&5
+echo "configure:11492: checking for dbm_open" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11392 "configure"
+#line 11495 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dbm_open(); below.  */
@@ -11411,7 +11514,7 @@ dbm_open();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dbm_open=yes"
 else
@@ -11430,12 +11533,12 @@ else
 
     
 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6
-echo "configure:11434: checking for dbm_open in -ldbm" >&5
+echo "configure:11537: checking for dbm_open in -ldbm" >&5
 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldbm "
 cat > conftest.$ac_ext <<EOF
-#line 11439 "configure"
+#line 11542 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11446,7 +11549,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:11450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11474,8 +11577,8 @@ fi
 fi
 
 test -n "$libdbm" && LIBS=""$libdbm" $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \""$libdbm"\" to \$LIBS"; fi
-test "$with_database_gnudbm" = "yes" -o \
-     "$with_database_dbm"    = "yes" && \
+test "$with_database_gdbm" = "yes" -o \
+     "$with_database_dbm"  = "yes" && \
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_DBM
 EOF
@@ -11487,10 +11590,10 @@ EOF
 
 if test "$with_database_berkdb" != "no"; then
   echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6
-echo "configure:11491: checking for Berkeley db.h" >&5
+echo "configure:11594: checking for Berkeley db.h" >&5
   for path in "db/db.h" "db.h"; do
     cat > conftest.$ac_ext <<EOF
-#line 11494 "configure"
+#line 11597 "configure"
 #include "confdefs.h"
 #ifdef HAVE_INTTYPES_H
 #define __BIT_TYPES_DEFINED__
@@ -11508,7 +11611,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:11512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   db_h_path="$path"; break
 else
@@ -11524,9 +11627,9 @@ rm -f conftest*
 
   if test "$with_database_berkdb" != "no"; then
     echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6
-echo "configure:11528: checking for Berkeley DB version" >&5
+echo "configure:11631: checking for Berkeley DB version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 11530 "configure"
+#line 11633 "configure"
 #include "confdefs.h"
 #include <$db_h_path>
 #if DB_VERSION_MAJOR > 1
 rm -f conftest*
 
     echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6
-echo "configure:11549: checking for $dbfunc" >&5
+echo "configure:11652: checking for $dbfunc" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11552 "configure"
+#line 11655 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $dbfunc(); below.  */
@@ -11571,7 +11674,7 @@ $dbfunc();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$dbfunc=yes"
 else
@@ -11590,12 +11693,12 @@ else
 
     
 echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6
-echo "configure:11594: checking for $dbfunc in -ldb" >&5
+echo "configure:11697: checking for $dbfunc in -ldb" >&5
 ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldb "
 cat > conftest.$ac_ext <<EOF
-#line 11599 "configure"
+#line 11702 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11606,7 +11709,7 @@ int main() {
 $dbfunc()
 ; return 0; }
 EOF
-if { (eval echo configure:11610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11652,7 +11755,7 @@ EOF
   fi
 fi
 
-if test "$with_database_gnudbm $with_database_dbm $with_database_berkdb" \
+if test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
      != "no no no"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_DATABASE
 if test "$with_socks" = "yes"; then
   
 echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6
-echo "configure:11674: checking for SOCKSinit in -lsocks" >&5
+echo "configure:11777: checking for SOCKSinit in -lsocks" >&5
 ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lsocks "
 cat > conftest.$ac_ext <<EOF
-#line 11679 "configure"
+#line 11782 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11686,7 +11789,7 @@ int main() {
 SOCKSinit()
 ; return 0; }
 EOF
-if { (eval echo configure:11690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11743,15 +11846,15 @@ for ac_hdr in dlfcn.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11747: checking for $ac_hdr" >&5
+echo "configure:11850: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11750 "configure"
+#line 11853 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11755: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11790,12 +11893,12 @@ done
 
 test -z "$with_modules" && test ! -z "$have_dlfcn" && { 
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:11794: checking for dlopen in -ldl" >&5
+echo "configure:11897: checking for dlopen in -ldl" >&5
 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldl "
 cat > conftest.$ac_ext <<EOF
-#line 11799 "configure"
+#line 11902 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11806,7 +11909,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:11810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
  }
 test -z "$with_modules" && test ! -z "$have_dlfcn" && { 
 echo $ac_n "checking for _dlopen in -lc""... $ac_c" 1>&6
-echo "configure:11839: checking for _dlopen in -lc" >&5
+echo "configure:11942: checking for _dlopen in -lc" >&5
 ac_lib_var=`echo c'_'_dlopen | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lc "
 cat > conftest.$ac_ext <<EOF
-#line 11844 "configure"
+#line 11947 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11851,7 +11954,7 @@ int main() {
 _dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:11855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
  }
 test -z "$with_modules" && test ! -z "$have_dlfcn" && { 
 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6
-echo "configure:11884: checking for dlopen in -lc" >&5
+echo "configure:11987: checking for dlopen in -lc" >&5
 ac_lib_var=`echo c'_'dlopen | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lc "
 cat > conftest.$ac_ext <<EOF
-#line 11889 "configure"
+#line 11992 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11896,7 +11999,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:11900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
  }
 test -z "$with_modules" && { 
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:11929: checking for shl_load in -ldld" >&5
+echo "configure:12032: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldld "
 cat > conftest.$ac_ext <<EOF
-#line 11934 "configure"
+#line 12037 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11941,7 +12044,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:11945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
  }
 test -z "$with_modules" && { 
 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6
-echo "configure:11974: checking for dld_init in -ldld" >&5
+echo "configure:12077: checking for dld_init in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldld "
 cat > conftest.$ac_ext <<EOF
-#line 11979 "configure"
+#line 12082 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11986,7 +12089,7 @@ int main() {
 dld_init()
 ; return 0; }
 EOF
-if { (eval echo configure:11990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12025,7 +12128,7 @@ xehost=$canonical
 xealias=$internal_configuration
 
 echo "checking how to build dynamic libraries for ${xehost}" 1>&6
-echo "configure:12029: checking how to build dynamic libraries for ${xehost}" >&5
+echo "configure:12132: checking how to build dynamic libraries for ${xehost}" >&5
 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
 case "$xehost" in
 *-*-linux-gnu*) ;;
@@ -12053,9 +12156,9 @@ if test "$GCC" = "yes"; then
   XEGCC=yes
 else
   echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:12057: checking checking whether we are using GNU C" >&5
+echo "configure:12160: checking checking whether we are using GNU C" >&5
   cat > conftest.$ac_ext <<EOF
-#line 12059 "configure"
+#line 12162 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -12077,7 +12180,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6
-echo "configure:12081: checking how to produce PIC code" >&5
+echo "configure:12184: checking how to produce PIC code" >&5
 wl=
 
 can_build_shared=yes
@@ -12170,18 +12273,18 @@ if test -n "$dll_cflags"; then
   
   # Check to make sure the dll_cflags actually works.
   echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6
-echo "configure:12174: checking if PIC flag ${dll_cflags} really works" >&5
+echo "configure:12277: checking if PIC flag ${dll_cflags} really works" >&5
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $dll_cflags -DPIC"
   cat > conftest.$ac_ext <<EOF
-#line 12178 "configure"
+#line 12281 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12185: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     # On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also
@@ -12212,7 +12315,7 @@ cc_produces_so=no
 xldf=
 xcldf=
 echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6
-echo "configure:12216: checking if C compiler can produce shared libraries" >&5
+echo "configure:12319: checking if C compiler can produce shared libraries" >&5
 if test "$XEGCC" = yes; then
   xcldf="-shared"
   xldf="-shared"
@@ -12263,14 +12366,14 @@ if test -n "$xcldf"; then
   xe_libs=
   ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5'
   cat > conftest.$ac_ext <<EOF
-#line 12267 "configure"
+#line 12370 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cc_produces_so=yes
 else
@@ -12295,7 +12398,7 @@ if test -z "$LTLD"; then
   if test "$XEGCC" = yes; then
     # Check if gcc -print-prog-name=ld gives a path.
     echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:12299: checking for ld used by GCC" >&5
+echo "configure:12402: checking for ld used by GCC" >&5
     ac_prog=`($CC -print-prog-name=ld) 2>&5`
     case "$ac_prog" in
     # Accept absolute paths.
@@ -12320,7 +12423,7 @@ echo "configure:12299: checking for ld used by GCC" >&5
     esac
   else
     echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:12324: checking for GNU ld" >&5
+echo "configure:12427: checking for GNU ld" >&5
   fi
 
   if test -z "$LTLD"; then
@@ -12358,7 +12461,7 @@ ld_dynamic_link_flags=
 
 # Check to see if it really is or isn't GNU ld.
 echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6
-echo "configure:12362: checking if the linker is GNU ld" >&5
+echo "configure:12465: checking if the linker is GNU ld" >&5
 # I'd rather use --version here, but apparently some GNU ld's only accept -v.
 if $LTLD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
   xe_gnu_ld=yes
@@ -12385,7 +12488,7 @@ else
   # OK - only NOW do we futz about with ld.
   # See if the linker supports building shared libraries.
   echo $ac_n "checking whether the linker supports shared libraries""... $ac_c" 1>&6
-echo "configure:12389: checking whether the linker supports shared libraries" >&5
+echo "configure:12492: checking whether the linker supports shared libraries" >&5
   dll_ld=$CC
   dll_ldflags=$LDFLAGS
   ld_shlibs=yes
@@ -12551,7 +12654,7 @@ if test -z "$ld_dynamic_link_flags"; then
     ;;
 
   solaris2* | solaris7*)
-    ld_dynamic_link_flags="${wl}-Bdynamic"
+    ld_dynamic_link_flags=
     ;;
 
   sco3.2v5* | unixware* | sysv5* | sysv4*)
@@ -12601,10 +12704,10 @@ EOF
     for ac_func in dlerror _dlerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12605: checking for $ac_func" >&5
+echo "configure:12708: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12608 "configure"
+#line 12711 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -12627,7 +12730,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -12661,11 +12764,11 @@ done
 fi
 
 cat > conftest.$ac_ext <<EOF
-#line 12665 "configure"
+#line 12768 "configure"
 #include "confdefs.h"
 int main(int c,char *v[]){return 0;}
 EOF
-if { (eval echo configure:12669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:12772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -13331,16 +13434,14 @@ test "$with_gif"   = yes && echo "  Compiling in support for (builtin) GIF image
 test "$with_jpeg"  = yes && echo "  Compiling in support for JPEG image handling."
 test "$with_tiff"  = yes && echo "  Compiling in support for TIFF image handling."
 test "$with_xface" = yes && echo "  Compiling in support for X-Face message headers."
-case "$with_sound" in
-  nas    ) echo "  Compiling in network sound (NAS) support." ;;
-  native ) echo "  Compiling in native sound support." ;;
-  both   ) echo "  Compiling in both network and native sound support." ;;
-esac
+test "$with_native_sound" = yes && echo "  Compiling in native sound support."
+test "$with_nas_sound" = yes && echo "  Compiling in network sound (NAS) support." 
 test "$old_nas" = yes && echo "        nas library lacks error trapping, will play synchronously."
+test "$with_esd" = yes && echo "  Compiling in support for Enlightened Sound Daemon."
 
 test "$with_database_berkdb" = yes && echo "  Compiling in support for Berkeley DB."
 test "$with_database_dbm"    = yes && echo "  Compiling in support for DBM."
-test "$with_database_gnudbm" = yes && echo "  Compiling in support for GNU DBM."
+test "$with_database_gdbm"   = yes && echo "  Compiling in support for GNU DBM."
 
 test "$with_ldap"           = yes && echo "  Compiling in support for LDAP."
 
@@ -13553,6 +13654,7 @@ s%@libs_xauth@%$libs_xauth%g
 s%@dnd_objs@%$dnd_objs%g
 s%@lwlib_objs@%$lwlib_objs%g
 s%@ALLOCA@%$ALLOCA%g
+s%@have_esd_config@%$have_esd_config%g
 s%@dll_ld@%$dll_ld%g
 s%@dll_cflags@%$dll_cflags%g
 s%@dll_ldflags@%$dll_ldflags%g
index 9ae8f22..2962071 100644 (file)
@@ -582,20 +582,20 @@ while test $# != 0; do
         "with_database" )
          with_database_berkdb=no
          with_database_dbm=no
-         with_database_gnudbm=no
+         with_database_gdbm=no
          for x in `echo "$val" | sed -e 's/,/ /g'` ; do
            case "$x" in
-               no ) ;;
-               b | be | ber | berk | berkd | berkdb )  with_database_berkdb=yes ;;
-               d | db | dbm )                          with_database_dbm=yes    ;;
-               g | gn | gnu | gnud | gnudb | gnudbm )  with_database_gnudbm=yes ;;
-               * ) USAGE_ERROR(["The \`--$optname' option value
+             no ) ;;
+             b | be | ber | berk | berkd | berkdb )       with_database_berkdb=yes ;;
+             d | db | dbm )                               with_database_dbm=yes    ;;
+             g | gn | gnu | gnud | gnudb | gnudbm | gdbm) with_database_gdbm=yes   ;;
+             * ) USAGE_ERROR(["The \`--$optname' option value
   must be either \`no' or a comma-separated list
   of one or more of \`berkdb' and either \`dbm' or \`gnudbm'."]) ;;
             esac
          done
-         if test "$with_database_dbm"    = "yes" -a \
-                 "$with_database_gnudbm" = "yes"; then
+         if test "$with_database_dbm"  = "yes" -a \
+                 "$with_database_gdbm" = "yes"; then
          USAGE_ERROR("Only one of \`dbm' and \`gnudbm' may be specified
   with the \`--$optname' option.")
          fi
@@ -603,18 +603,39 @@ while test $# != 0; do
 
         dnl Has the user requested sound support?
        "with_sound" )
-         dnl value can be native, nas or both. yes is allowed
-         dnl as a backwards compatible synonym for native
-         case "$val" in
-           y | ye | yes )                      val=native ;;
-           n | no | non | none )               val=no;;
-           na | nat | nati | nativ | native )  val=native  ;;
-           ne | net | neta | netau | netaud | netaudi | netaudio | nas ) val=nas  ;;
-           b | bo | bot | both )               val=both;;
-           * ) USAGE_ERROR(["The \`--$optname' option must have one of these values:
-  \`native', \`nas', \`both', or \`none'."]) ;;
-         esac
-          eval "$opt=\"$val\""
+       dnl values is a subset of all,native,nas,esd
+        dnl or their negatives: none,nonative,nonas,noesd
+         for x in `echo "$val" | sed -e 's/,/ /g'` ; do
+           case "$x" in
+             dnl all and none are only permitted as the first in the list.
+             n | no | non | none ) new_sdefault=no ;;
+             a | al | all | both ) new_sdefault=yes ;;
+
+             native )       with_native_sound=yes ;;
+             nonative )     with_native_sound=no ;;
+
+             nas )          with_nas_sound=yes ;;
+             nonas )        with_nas_sound=no ;;
+
+             esd )          with_esd=yes ;;
+             noesd )        with_esh=no ;;
+
+             * ) bogus_sound=yes ;;
+           esac
+           if test "$bogus_sound" -o \
+                \( -n "$new_sdefault" -a -n "$sound_notfirst" \) ; then
+               types="\`all', \`none', \`(no)native', \`no(nas)', \`(no)esd'."
+               USAGE_ERROR(["Valid types for the \`--$optname' option are:
+  $types.
+The default is native,esd."])
+           elif test -n "$new_sdefault" ; then
+               with_native_sound=$new_sdefault
+               with_nas_sound=$new_sdefault
+               with_esd=$new_sdefault
+               new_sdefault=   # reset this
+           fi
+           sound_notfirst=true
+         done
         ;;
 
         dnl Has the user requested XIM support?
@@ -2158,6 +2179,7 @@ AC_TYPE_PID_T
 AC_TYPE_UID_T
 AC_TYPE_MODE_T
 AC_TYPE_OFF_T
+AC_CHECK_TYPE(ssize_t, int)
 
 AC_MSG_CHECKING(for struct timeval)
 AC_TRY_COMPILE([#ifdef TIME_WITH_SYS_TIME
@@ -2987,7 +3009,7 @@ if test "$with_x11" = "yes"; then
   test "$with_toolbars"   != "no"      && XE_ADD_OBJS(toolbar-x.o)
   test "$all_widgets" != "no no no no no" && XE_ADD_OBJS(gui-x.o)
 else
-  if test \( "$with_sound" = "nas" \) -o \( "$with_sound" = "both" \); then
+  if test "$with_nas_sound" = "nas"; then
     echo "Attempt to Build NAS sound without X"
     echo "Please remove NAS configuration or build with X"
     exit 1
@@ -3376,10 +3398,6 @@ dnl Check for sound of various sorts.
 
 dnl Autodetect native sound
 AC_CHECKING("for sound support")
-case "$with_sound" in
-  native | both ) with_native_sound=yes;;
-  nas    | no   ) with_native_sound=no;;
-esac
 test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes
 
 if test "$with_native_sound" != "no"; then
@@ -3437,6 +3455,7 @@ if test "$with_native_sound" != "no"; then
     for dir in "machine" "sys" "linux"; do
       AC_CHECK_HEADER(${dir}/soundcard.h,
         sound_found=yes
+       need_miscplay=yes
         XE_ADD_OBJS(linuxplay.o)
         [AC_DEFINE_UNQUOTED(SOUNDCARD_H_PATH, "${dir}/soundcard.h")]
         break)
@@ -3446,25 +3465,40 @@ if test "$with_native_sound" != "no"; then
   test "$sound_found" = "yes" && with_native_sound=yes
 fi
 
-if test -z "$with_sound"; then
-  if test "$with_native_sound" = "yes" -o -n "$native_sound_lib"; then
-    with_sound=native
-  fi
-fi
-
 if test "$with_native_sound" = "yes"; then
   AC_DEFINE(HAVE_NATIVE_SOUND)
   test -n "$native_sound_lib" && XE_PREPEND($native_sound_lib, LIBS)
 fi
 
-case "$with_sound" in both | nas )
+if test "$with_nas_sound" = "yes"; then
   AC_DEFINE(HAVE_NAS_SOUND)
   XE_ADD_OBJS(nas.o)
   XE_PREPEND(-laudio, libs_x)
   dnl If the nas library does not contain the error jump point,
   dnl then we force safer behavior.
   AC_EGREP_HEADER(AuXtErrorJump,audio/Xtutil.h,,[AC_DEFINE(NAS_NO_ERROR_JUMP)])
-esac
+fi
+
+AC_CHECK_PROG(have_esd_config, esd-config, yes, no)
+if test -z "$with_esd"; then
+  with_esd=$have_esd_config
+fi
+
+if test "$with_esd" = "yes"; then
+  if test "$have_esd_config" = "no"; then
+    echo "*** esd-config was not found in your PATH. Disabling esd support."
+    with_esd=no
+  else
+    AC_DEFINE(HAVE_ESD_SOUND)
+    need_miscplay=yes
+    XE_ADD_OBJS(esd.o)
+    XE_PREPEND(`esd-config --libs`, libs_x)
+  fi
+fi
+
+if test "$need_miscplay" = "yes"; then
+  XE_ADD_OBJS(miscplay.o)
+fi
 
 dnl ---------------------
 dnl TTY-dependent options
@@ -3555,26 +3589,26 @@ dnl We do not necessarily have to have libdb/lib(g)dbm for DB/(G)DBM support.
 dnl On FreeBSD, both DB and DBM are part of libc.
 dnl By default, we check for DBM support in libgdbm, then libc, then libdbm.
 
-test "$with_database_gnudbm $with_database_dbm $with_database_berkdb" \
+test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
   != "no no no" && AC_CHECKING(for database support)
 
 dnl Check for ndbm.h, required for either kind of DBM support.
-if test "$with_database_gnudbm $with_database_dbm" != "no no"; then
+if test "$with_database_gdbm $with_database_dbm" != "no no"; then
   AC_CHECK_HEADER(ndbm.h, [:], [
-    test "$with_database_gnudbm" = "yes" -o \
-         "$with_database_dbm"    = "yes" && \
+    test "$with_database_gdbm" = "yes" -o \
+         "$with_database_dbm"  = "yes" && \
       XE_DIE("Required DBM support cannot be provided.")
-    with_database_gnudbm=no with_database_dbm=no])
+    with_database_gdbm=no with_database_dbm=no])
 fi
 
 dnl Check for DBM support in libgdbm.
-if test "$with_database_gnudbm" != "no"; then
+if test "$with_database_gdbm" != "no"; then
   AC_CHECK_LIB(gdbm, dbm_open, [
-   with_database_gnudbm=yes with_database_dbm=no libdbm=-lgdbm], [
-   if test "$with_database_gnudbm" = "yes"; then
+   with_database_gdbm=yes with_database_dbm=no libdbm=-lgdbm], [
+   if test "$with_database_gdbm" = "yes"; then
      XE_DIE("Required GNU DBM support cannot be provided.")
    fi
-   with_database_gnudbm=no])
+   with_database_gdbm=no])
 fi
 
 dnl Check for DBM support in libc and libdbm.
@@ -3588,8 +3622,8 @@ fi
 
 dnl Tell make about the DBM support we detected.
 test -n "$libdbm" && XE_PREPEND("$libdbm", LIBS)
-test "$with_database_gnudbm" = "yes" -o \
-     "$with_database_dbm"    = "yes" && \
+test "$with_database_gdbm" = "yes" -o \
+     "$with_database_dbm"  = "yes" && \
   AC_DEFINE(HAVE_DBM)
 
 dnl Check for Berkeley DB.
@@ -3634,7 +3668,7 @@ yes
   fi
 fi
 
-if test "$with_database_gnudbm $with_database_dbm $with_database_berkdb" \
+if test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
      != "no no no"; then
   AC_DEFINE(HAVE_DATABASE)
   XE_ADD_OBJS(database.o)
@@ -4123,16 +4157,14 @@ test "$with_gif"   = yes && echo "  Compiling in support for (builtin) GIF image
 test "$with_jpeg"  = yes && echo "  Compiling in support for JPEG image handling."
 test "$with_tiff"  = yes && echo "  Compiling in support for TIFF image handling."
 test "$with_xface" = yes && echo "  Compiling in support for X-Face message headers."
-case "$with_sound" in
-  nas    ) echo "  Compiling in network sound (NAS) support." ;;
-  native ) echo "  Compiling in native sound support." ;;
-  both   ) echo "  Compiling in both network and native sound support." ;;
-esac
+test "$with_native_sound" = yes && echo "  Compiling in native sound support."
+test "$with_nas_sound" = yes && echo "  Compiling in network sound (NAS) support." 
 test "$old_nas" = yes && echo "        nas library lacks error trapping, will play synchronously."
+test "$with_esd" = yes && echo "  Compiling in support for Enlightened Sound Daemon."
 
 test "$with_database_berkdb" = yes && echo "  Compiling in support for Berkeley DB."
 test "$with_database_dbm"    = yes && echo "  Compiling in support for DBM."
-test "$with_database_gnudbm" = yes && echo "  Compiling in support for GNU DBM."
+test "$with_database_gdbm"   = yes && echo "  Compiling in support for GNU DBM."
 
 test "$with_ldap"           = yes && echo "  Compiling in support for LDAP."
 
index 6cbfcc6..1f1b77e 100644 (file)
@@ -121,9 +121,11 @@ Additional features:
 --with-database=TYPE (*) Compile with database support.  Valid types are
                         `no' or a comma-separated list of one or more
                         of `berkdb' and either `dbm' or `gnudbm'.
---with-sound=native (*) Compile with native sound support.
---with-sound=nas        Compile with network sound support.
---with-sound=both       Compile with native and network sound support.
+--with-sound=TYPE,[TYPE],... Compile with native sound support.
+                       Valid types are `native', `nas' and `esd'.
+                       Prefix a type with 'no' to disable.
+                       The first option can be `none' or `all' to change
+                       the default which is: native,esd
 --native-sound-lib=LIB  Native sound support library.  Needed on Suns
                         with --with-sound=both because both sound libraries
                         are called libaudio.
diff --git a/etc/FTP b/etc/FTP
index 965f0b9..2074ec4 100644 (file)
--- a/etc/FTP
+++ b/etc/FTP
-                                                               -*- text -*-
 
-          XEmacs availability information.  Last Modified: 9-Jul-1998.
+          XEmacs availability information.  Last Modified: 1999-11-08
 
 XEmacs is available via anonymous FTP from ftp.xemacs.org (207.96.122.8)
 in the directory /pub/xemacs/.
 
 ftp.xemacs.org is the primary distribution point, but you may find
 copies of it at other sites as well.  Some sites to try include:
-
-       ftp://ftp.jaist.ac.jp/pub/GNU/xemacs/
-       ftp://ring.aist.go.jp/pub/text/xemacs/
-       ftp://ring.asahi-net.or.jp/pub/text/xemacs/
-       ftp://ftp.uu.net/systems/gnu/xemacs/
-       ftp://ftp.sunet.se/pub/gnu/xemacs/
-       ftp://ftp.cenatls.cena.dgac.fr/pub/Emacs/xemacs/
-       ftp://ftp.th-darmstadt.de/pub/editors/xemacs/
-       ftp://sunsite.doc.ic.ac.uk/gnu/xemacs/
-       ftp://ftp.lip6.fr/pub/emacs/xemacs/
-       ftp://uiarchive.cso.uiuc.edu/pub/packages/xemacs/
-       ftp://ftp.technion.ac.il/pub/unsupported/gnu/xemacs/
-       ftp://ftp.linux.hr/pub/xemacs/
-       ftp://sunsite.cnlab-switch.ch/mirror/xemacs/
-       ftp://ftp.unicamp.br/pub/xemacs/
-       ftp://ftp.usyd.edu.au/pub/Xemacs/
-       ftp://ftp.lab.kdd.co.jp/xemacs/
-       ftp://SunSITE.sut.ac.jp/pub/archives/xemacs/
-       ftp://sunsite.icm.edu.pl/pub/unix/xemacs
+* North America
+
+     o Canada
+          + ftp://ftp.crc.ca/pub/packages/editors/xemacs/
+          + ftp://sunsite.ualberta.ca/pub/Mirror/xemacs/
+     o United States
+          + ftp://uiarchive.uiuc.edu/pub/packages/xemacs/
+          + ftp://metalab.unc.edu/pub/packages/editors/xemacs/
+          + ftp://ftp.sunsite.utk.edu/pub/xemacs/
+
+* South America
+
+     o Brazil
+          + ftp://ftp.unicamp.br/pub/xemacs/
+
+* Europe
+
+     o Austria
+          + ftp://gd.tuwien.ac.at/editors/xemacs/
+     o Denmark
+          + ftp://sunsite.auc.dk/pub/emacs/xemacs/
+     o England
+          + ftp://sunsite.doc.ic.ac.uk/packages/xemacs/
+     o Finland
+          + ftp://ftp.funet.fi/pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/
+     o France
+          + ftp://ftp.pasteur.fr/pub/computing/xemacs/
+          + ftp://ftp.cenatls.cena.dgac.fr/Emacs/xemacs/
+     o Germany
+          + ftp://ftp.tu-darmstadt.de/pub/editors/xemacs/
+     o Hungary
+          + ftp://ftp.kfki.hu/pub/packages/xemacs/
+     o Ireland
+          + ftp://ftp.eunet.ie/mirrors/ftp.xemacs.org/pub/xemacs/
+     o Italy
+          + ftp://ftp.uniroma2.it/unix/misc/dist/XEMACS/
+     o Norway
+          + ftp://sunsite.uio.no/pub/xemacs
+     o Poland
+          + ftp://ftp.icm.edu.pl/pub/unix/editors/xemacs/
+     o Russia
+          + ftp://ftp.srcc.msu.su/mirror/ftp.xemacs.org/
+     o Sweden
+          + ftp://ftp.sunet.se/pub/gnu/xemacs/
+     o Switzerland
+          + ftp://sunsite.cnlab-switch.ch/mirror/xemacs/
+
+* Asia
+
+     o Japan
+          + ftp://ftp.netlab.is.tsukuba.ac.jp/pub/GNU/xemacs/
+          + ftp://ftp.jaist.ac.jp/pub/GNU/xemacs/
+          + ftp://ring.aist.go.jp/pub/text/xemacs/
+          + ftp://ring.asahi-net.or.jp/pub/text/xemacs/
+          + ftp://sunsite.sut.ac.jp/pub/archives/packages/xemacs/
+          + ftp://ftp.dti.ad.jp/pub/unix/editor/xemacs/
+          + ftp://mirror.nucba.ac.jp/mirror/xemacs/
+     o Korea
+          + ftp://ftp.kreonet.re.kr/pub/tools/emacs/xemacs/
+     o Taiwan
+          + ftp://coda.nctu.edu.tw/Editors/xemacs/
+
+* Africa
+
+     o South Africa
+          + ftp://ftp.sun.ac.za/xemacs/
+
+* Middle East
+
+     o Saudi Arabia
+          + ftp://ftp.isu.net.sa/pub/mirrors/ftp.xemacs.org/
+
+* Australia
+
+     o ftp://mirror.aarnet.edu.au/pub/xemacs
 
 
 The most up-to-date list of distribution sites can always be found on
-the XEmacs WWW page, http://www.xemacs.org/.  Try to pick a site
-that is networkologically close to you.  If you know of other mirrors
-of the XEmacs archives, please send us mail and we will list them here
-as well.
+the XEmacs WWW page, http://www.xemacs.org/.  Try to pick a site that
+is networkologically close to you.  If you know of other mirrors of
+the XEmacs archives, please send us mail and we will list them here as
+well.
 
 There are mailing lists and newsgroups specifically for discussing and
 reporting bugs in XEmacs; see the file MAILINGLISTS in this directory.
 
-The FTP and ordering information in the remainder of this file applies
-to the versions of GNU Emacs distributed by the Free Software Foundation,
-not to XEmacs.
-
 -----------------------------------------------------------------------
-How to get GNU Software by Internet FTP or by UUCP.  Last updated 11 June 95.
-
-* Please send improvements to this file to gnu@prep.ai.mit.edu.
-
-* No Warranties
-
-We distribute software in the hope that it will be useful, but without
-any warranty.  No author or distributor of this software accepts
-responsibility to anyone for the consequences of using it or for
-whether it serves any particular purpose or works at all, unless he
-says so in writing.
-
-* Updates
-
-If you find this file in the Emacs distribution, there is a chance it
-is out of date.  If you plan to FTP files from a GNU FTP host, you
-might as well start by FTPing the current version of this file, which
-is `/pub/gnu/GNUinfo/FTP'.
-
-* How to FTP
-
-Use the ftp program on your system (ask locally if you can't find it)
-to connect to the host you are ftping from.  Unless indicated
-otherwise, login in as user "anonymous", with password: "your e-mail
-address" and set "binary" mode (to transfer all eight bits in each
-byte).
-
-* FTPing GNU Software
-
-** How to FTP GNU Emacs
-
-If you are on the Internet (see also "** Alternative Internet FTP
-Sources" below), you can at present copy the latest distribution
-version of GNU Emacs from the file /pub/gnu/emacs-M.N.tar on host
-prep.ai.mit.edu (or the file /pub/gnu/emacs-M.N.tar.gz which has been
-run through gzip after tar).  M and N stand for version numbers; look
-at a listing of the directory through ftp to see what version is
-available.  These files are about 11 and 4 megabytes long,
-respectively.  After you unpack the distribution, be sure to look at
-the files README and INSTALL.
-
-Because of difficulties in transferring large files, sometimes a split
-version of the tar file is created.  This would be in a directory
-named /pub/gnu/emacs-M.N.tar-split or perhaps
-/pub/gnu/emacs-M.N.tar.gz-split, containing files of 100000 characters
-each.  There is generally no trouble in ftping files of this size.
-They can be combined with cat to make a tar file or compressed tar
-file.  If you can't find such files on prep.ai.mit.edu, have a look at
-archive.cis.ohio-state.edu.
-
-ALWAYS USE BINARY/IMAGE MODE TO TRANSFER THESE FILES!
-Text mode does not work for tar files or compressed files.
-
-Some ftp'ers have found it necessary for successful file transfer:
-   - to explicitly use prep.ai.mit.edu internet address:
-18.159.0.42    (as of 18 June 95)
-
-Files of differences from previous widely distributed GNU Emacs
-versions to the present version are also available on prep.ai.mit.edu
-under names of the form emacs.diff-OO.OO-NN.NN in directory /pub/gnu.
-These are made with diff -rc2.  Sometimes there are versions
-compressed with gzip of these difference files as well; their names
-have .gz appended.
-
-The Emacs manual in source form is included in the distribution.  The
-dvi file produced by TeX is not included, but a copy may be available
-for ftp under the name /pub/gnu/emacs.dvi.
-
-The Emacs Lisp Reference Manual is in a separate file:
-       /pub/gnu/elisp-manual-NN.tar.gz
-
-** VMS FTP sites with GNU Software
-You can anonymously ftp a VMS version of GNU emacs from:
-       - ftp.stacken.kth.se:[.GNU-VMS] - GNU Emacs and some other VMS
-ports (and some VMS binaries) of GNU software
-       - mango.rsmas.miami.edu has a VMS version of the GCC/G++ compiler.
-Contact angel@flipper.miami.edu (angel li) for details.
-       - addvax.llnl.gov - GNU Emacs
-       - VMSD.OAC.UCI.EDU - GNU Emacs 
-       - RIGEL.EFD.LTH.SE [130.235.48.3] - GNU Emacs 
-       - ctrsci.cc.utah.edu - GNU Emacs - The 00readme.txt file gives details
-       - cc.utah.edu [128.110.8.24] - misc. GNU software - user
-anonymous, pass guest.  The 00README.txt file gives details.
-
-** Other GNU Software and How To FTP It
-
-Other GNU software is available on prep.ai.mit.edu under directory
-/pub/gnu.  diff files to convert between versions (like those used for
-GNU Emacs), exist for some of these programs.  Some programs have misc
-support files as well.  Have a look on prep to see which ones.
-Compressed versions of the tar or diff files are often available
-(indicated by a .gz suffix and made with the `gzip' program).  Some of
-this software is in beta test (probably still buggy), and is being
-made available for use by hackers who like to test software.
-
-The file /pub/gnu/DESCRIPTIONS has a list of the packages distributed
-on prep.ai.mit.edu with a brief description explaining what
-each one can be used for.
-
-More information about these programs can typically be found in the
-GNU Bulletin.  To receive a copy, write to gnu@prep.ai.mit.edu.
-
-** Scheme and How to FTP It
-
-The latest distribution version of C Scheme is available via anonymous FTP
-from altdorf.ai.mit.edu in /archive/scheme-X.XX/ (where X.XX is some version
-number).
-
-Read the files INSTALL and README in the top level C Scheme directory.
-
-** TeX and How to Obtain It
-
-We don't distribute TeX now, but it is free software.
-
-TeX is a document formatter that is used, among other things, by the FSF
-for all its documentation.  You will need it if you want to make printed
-manuals.
-
-TeX is freely redistributable.  You can get it by ftp, tape, or CD/ROM.
-
-*** For FTP instructions, retrieve the file
-ftp.cs.umb.edu:pub/tex/unixtex.ftp. (We don't include it here because it
-changes relatively frequently.  Sorry.)
-
-*** For TeX on a single tape (4mm DAT or QIC-24), ordering information is
-available from unixtex@u.washington.edu.  A distribution fee in the area
-of US$210.00 covers administrative costs.  Tapes will be available at
-least through summer of 1994.
-
-*** The FSF hopes soon to distribute tapes of TeX itself, after the
-University of Washington distribution service goes away.
-
-*** A minimal TeX collection (enough to process Texinfo files, anyway)
-is included on the GNU source CD/ROM.  See the file ORDERS in this
-directory for more information.
-
-** Alternative Internet FTP Sources
-
-Please do NOT use a site outside your country, until you have checked
-all sites inside your country, and then your continent.  Trans-ocean
-TCP/IP links are very expensive and usually very low speed.
-
-The administrators of louie.udel.edu maintains copies of GNU Emacs.
-The files are available via anonymous ftp under directory ~ftp/gnu.
-
-Emacs and other GNU programs may be available via anonymous ftp from
-these US sites: ftp.kpc.com:/pub/mirror/gnu (Silicon Valley, CA)
-ftp.hawaii.edu:/mirrors/gnu, f.ms.uky.edu:/pub3/gnu,
-ftp.digex.net:/pub/gnu (Internet address 164.109.10.23, nightly full
-mirror, ran by mcguire@digex.net), wuarchive.wustl.edu:/systems/gnu,
-col.hp.com:/mirrors/gnu, ftp.cs.columbia.edu:/archives/gnu/prep,
-uiarchive.cso.uiuc.edu:/pub/gnu (Internet address 128.174.5.14,
-nightly full mirror, ran by ftpadmin@uiuc.edu),
-jaguar.utah.edu:/gnustuff, gatekeeper.dec.com:/pub/GNU,
-labrea.stanford.edu, archive.cis.ohio-state.edu, and
-ftp.uu.net:/archive/systems/gnu.
-
-And these foreign sites: ftp.cs.ubc.ca:/mirror2/gnu (Western Canada,
-daily full mirror, ran by ftp-admin@cs.ubc.ca),
-ftp.inf.utfsm.cl:/pub/gnu (Chile 146.83.198.3 nightly full mirror, ran
-by ftp@inf.utfsm.cl), ftp.unicamp.br:/pub/gnu (Brazil manual mirror,
-ran by oliva@dcc.unicamp.br), archie.au:/gnu (Australia (archie.oz or
-archie.oz.au for ACSnet)), ftp.technion.ac.il:/pub/unsupported/gnu
-(Israel, daily full mirror, ran by ftp-admin), ftp.sun.ac.za:/pub/gnu
-(South Africa), ftp.etsimo.uniovi.es:/pub/gnu (Spain),
-ftp.mcc.ac.uk:/pub/gnu (130.88.203.12 daily full mirror, ran by
-root@ftp.mcc.ac.uk), unix.hensa.ac.uk:/mirrors/uunet/systems/gnu,
-ftp.warwick.ac.uk (137.205.192.14 daily full mirror, ran by
-unixhelp@warwick.ac.uk), ftp.informatik.tu-muenchen.de,
-ftp.informatik.rwth-aachen.de, or germany.eu.net (mirror ran by
-archive-admin@germany.eu.net) (Germany), isy.liu.se (Sweden),
-ftp.stacken.kth.se or ftp.luth.se:/pub/unix/gnu (Sweden),
-ftp.sunet.se:/pub/gnu (Sweden 130.238.127.3 daily mirror, ran by
-archive@ftp.sunet.se (also mirrors the Mailing List Archives)
-ftp.nl.net (Netherlands), ftp.win.tue.nl:/pub/gnu (Netherlands
-131.155.70.100 daily mirror, ran by ftp@win.tue.nl),
-ftp.funet.fi:/pub/gnu (Finland 128.214.6.100, ran by gnu-adm),
-ftp.denet.dk (Denmark), ugle.unit.no (Norway 129.241.1.97),
-ftp.eunet.ch or nic.switch.ch:/mirror/gnu (Switzerland),
-irisa.irisa.fr:/pub/gnu or ftp.univ-lyon1.fr:pub/gnu (ran by
-ftpmaint@ftp.univ-lyon1.fr) (France), ftp.ieunet.ie:pub/gnu (Ireland
-192.111.39.1 weekly mirror, ran by archive@ieunet.ie), archive.eu.net
-(Europe 192.16.202.1), cair-archive.kaist.ac.kr:/pub/gnu (Korea
-143.248.11.171, ran by ftpkeeper@cair-archive.kaist.ac.kr),
-ftp.nectec.or.th:/pub/mirrors/gnu (Thailand 192.150.251.32 daily
-mirror, ran by ftp@nwg.nectec.or.th),
-utsun.s.u-tokyo.ac.jp:/ftpsync/prep or ftp.cs.titech.ac.jp (Japan,
-nemacs, the japanese port of GNU Emacs, is under ~ftp/JAPAN).
-
-* Getting GNU software in Great Britain
-
-jpo@cs.nott.ac.uk is willing to distribute those GNU sources he has
-available.  The smaller items are available from the info-server (send
-to info-server@cs.nott.ac.uk) the larger items by negotiation.  Due to
-communication costs this service is only available within the UK.
-
-BattenIG@computer-science.birmingham.ac.uk (aka
-I.G.Batten@fulcrum.bt.co.uk) is also willing to distribute those GNU
-sources he has.  He can also write tapes in qic-21 and qic-24 formats.
-
-lmjm@doc.ic.ac.uk is willing to distribute those GNU sources he has
-along with comp.sources.unix, comp.sources.x, X windows et al.  The
-archive, on src.doc.ic.ac.uk in directory /gnu, is available via ftp
-over the Internet (on 146.169.3.7), ftam over IXI, HTTP, FSP, Gopher,
-ftpmail, NFS, Lanmanger over IP, telnet, and uucp.  Due to
-communication costs this service is only available within the UK.
-Mail to info-server@doc.ic.ac.uk for details.  He can also write sun
-cartridge or exabyte tapes.
-
-UK sites with just anonymous FTP access are in the above list.
-
-* Getting GNU software via UUCP
-
-OSU is distributing via UUCP: most GNU software, MIT C Scheme,
-Compress, News, RN, NNTP, Patch, some Appletalk stuff, some of the
-Internet Requests For Comment (RFC) et al..  See their periodic
-postings on the Usenet newsgroup comp.sources.d for informational
-updates.  Current details from <staff@cis.ohio-state.edu> or
-<...!osu-cis!staff>.
-
-Information on how to uucp some GNU programs is available via
-electronic mail from: uunet!hutch!barber, hqda-ai!merlin, acornrc!bob,
-hao!scicom!qetzal!upba!ugn!nepa!denny, ncar!noao!asuvax!hrc!dan,
-bigtex!james (aka james@bigtex.cactus.org), oli-stl!root,
-src@contrib.de (Germany), toku@dit.co.jp (Japan) and info@ftp.uu.net.
 
-* If You Like The Software
+       How to get GNU Software by Internet FTP or by UUCP: 
 
-If you like the software developed and distributed by the Free
-Software Foundation, please express your satisfaction with a donation.
-Your donations will help to support the Foundation and make our future
-efforts successful, including a complete development and operating
-system, called GNU (Gnu's Not Un*x), which will run Un*x user
-programs.  For more information on GNU and the Foundation, contact us
-at the above address.
+The XEmacs project is separate from and not managed by the GNU
+project.  The latest GNU project FTP and UUCP availability information
+can be found at ftp://ftp.gnu.org/gnu/GNUinfo/FTP
 
-Ordering a distribution tape from the Foundation is often a good
-way to bring your company or university to make a donation.
index 2bab54a..d175754 100644 (file)
 
-          XEmacs Electronic Mailing Lists.  Last Modified: 1997-01-13
+          XEmacs Electronic Mailing Lists.  Last Modified: 1999-11-08
 
-XEmacs has its own mailing list and newsgroup which are distinct from
-the FSF GNU Emacs mailing lists and newsgroups.  The mailing list is:
+XEmacs has its own mailing lists and newsgroup which are distinct from
+the FSF GNU Emacs mailing lists and newsgroups.  The mailing lists are: 
 
-   xemacs@xemacs.org   For reporting all bugs in XEmacs, including bugs
-                       in the compilation and installation procedures.
-                       Also for all random questions and conversation
-                       about XEmacs.
+xemacs@xemacs.org              comp.emacs.xemacs bi-directional gateway.
+  
+  xemacs is an open list for discussion and bug reporting for
+  XEmacs. This mailing list is bi-directionally gatewayed with the
+  USENET newsgroup comp.emacs.xemacs.
 
-This mailing list is bidirectionally gatewayed into the USENET newsgroup
-comp.emacs.xemacs.
+xemacs-announce@xemacs.org     XEmacs Announcements.
 
-To be added or removed from this mailing list, send mail to
-xemacs-request@xemacs.org (If it is possible for you to read the
-messages via the newsgroup, we would prefer that; the fewer people there
-are on the mailing list, the less trouble it is to maintain.)
+  xemacs-announce is a read-only, low volume list for announcements
+  concerning the XEmacs project and new releases of the XEmacs
+  software.
 
-Please do NOT send messages about problems with XEmacs to the FSF GNU
-Emacs newsgroups and mailing lists (listed below) unless you are sure
-that the problem you are reporting is a problem with both versions of
-GNU Emacs.  People who aren't subscribed to the XEmacs mailing list most
-likely are not interested in hearing about problems with it.
-
-The XEmacs mailing list is archived at ftp://ftp.xemacs.org/pub/xemacs/mlists/.
-
-See the file etc/BETA for more information about mailing lists for use
-by beta testers and XEmacs developers.
-
-IMPORTANT IMPORTANT IMPORTANT:
-
-Aside from the names of the mailing lists and newsgroups corresponding
-to this version of Emacs, the guidelines enumerated below still apply.
-Please read them before sending a message.
-
------------------------------------------------------------------------
-      GNU Project Electronic Mailing Lists and gnUSENET Newsgroups
-                        Last Updated 1 July 97
-
-          Please report improvements to: gnu@prep.ai.mit.edu
-
-* GNU mailing lists are also distributed as USENET news groups
-
-The mailing lists are gated both ways with the gnu.all newsgroups at
-ohio-state.edu.  The one-to-one correspondence is indicated below.  If
-you don't know if your site is on USENET, ask your system administrator.
-If you are a USENET site and don't get the gnu.all newsgroups, please
-ask your USENET administrator to get them.  If he has your feeds ask
-their feeds, you should win.  And everyone else wins: newsgroups make
-better use of the limited bandwidth of the computer networks and your
-home machine than mailing list traffic; and staying off the mailing
-lists make better use of the people who maintain the lists and the
-machines that the GNU people working with rms use (i.e. we have more
-time to produce code!!).  Thanx.
-
-* Getting the mailing lists directly
-
-If several users at your site or local network want to read a list and
-you aren't a USENET site, Project GNU would prefer that you would set up
-one address that redistributes locally.  This reduces overhead on our
-people and machines, your gateway machine, and the network(s) used to
-transport the mail from us to you.
-
-* How to subscribe to and report bugs in mailing lists
-
-Send messages ABOUT these lists, such as reports of mail problems, or
-requests to be added or removed, to help-gnu-emacs-request (or
-info-gnu-request, bug-gdb-request, etc.), NOT to info-gnu-emacs (or
-info-gnu, etc.).  These <LIST_NAME>-request addresses go only to the
-people who can do something about your requests or problems, and thus
-avoids disturbing everyone else.
-
-Note that all GNU mailing lists are maintained by volunteers.  They get
-behind occasionally.  Wait at least 3 or 4 days before asking again.
-Thanks!
-
-Many of the GNU mailing lists are very large and are received by many
-people.  Please don't send them anything that is not seriously important
-to all their readers.  All GNU mailing lists are unmoderated, mail
-reflectors, except info-gnu, info-gnu-emacs, info-gcc, info-g++,
-info-gnu-fortran.
-
-All addresses below are in internet format.  Consult the mail guru for
-your computer to figure out address syntaxes from other networks.  From
-UUCP machines:
-       ..!ucbvax!prep.ai.mit.edu!ADDRESS
-       ..!uunet!prep.ai.mit.edu!ADDRESS
-
-If a message you mail to a list is returned from a MAILER-DAEMON (often
-with the line:
-      ----- Transcript of session follows -----
- don't resend the message to the list.  All this return means is that
-your original message failed to reach a few addresses on the list.  Such
-messages are NEVER a reason to resend a piece of mail a 2nd time.  This
-just bothers all (less the few delivery failures (which will probably
-just fail again!)) of the readers of the list with a message they have
-already seen.  It also wastes computer and network resources.
-
-It is appropriate to send these to the -request address for a list, and
-ask them to check the problem out.
-
-* Send Specific Requests for Information to: gnu@prep.ai.mit.edu
-
-Specific requests for information about obtaining GNU software, or GNU
-activities in Cambridge and elsewhere can be directed to:
-       gnu@prep.ai.mit.edu
-
-* General Information about all lists
-
-Please keep each message under 25,000 characters.  Some mailers bounce
-messages that are longer than this.  If your message is long, it is
-generally better to send a message offering to make the large file
-available to only those people who want it (e.g. mailing it to people
-who ask, or putting it up for FTP).  In the case of gnu.emacs.sources,
-somewhat larger postings (up to 10 parts of no more than 25,000
-characters each) are acceptable (assuming they are likely to be of
-interest to a reasonable number of people); if it is larger than that
-have it added to archive.cis.ohio-state.edu (the GNU Emacs Lisp ftp and
-uucp archive on and announce) its location there.  Good bug reports are
-short.  See section '* General Information about bug-* lists and ...'
-for further details.
-
-Most of the time, when you reply to a message sent to a list, the reply
-should not go to the list.  But most mail reading programs supply, by
-default, all the recipients of the original as recipients of the reply.
-Make a point of deleting the list address from the header when it does
-not belong.  This prevents bothering all readers of a list, and reduces
-network congestion.
-
-The GNU mailing lists and newsgroups, like the GNU project itself, exist
-to promote the freedom to share software.  So don't use these lists to
-promote or recommend non-free software.  (Using them to post ordering
-information is the ultimate faux pas.)  If there is no free program to
-do a certain task, then somebody should write one!
-
-* General Information about info-* lists
-
-These lists and their newsgroups are meant for important announcements.
-Since the GNU project uses software development as a means for social
-change, the announcements may be technical or political.
-
-Most GNU projects info-* lists (and their corresponding gnu.*.announce
-newsgroups) are moderated to keep their content significant and
-relevant.  If you have a bug to report, send it to the bug-* list.  If
-you need help on something else and the help-* list exists, ask it.
-
-See section '* General Information about all lists'.
-
-* General Information about help-* lists
-
-These lists (and their newsgroups) exist for anyone to ask questions
-about the GNU software that the list deals with.  The lists are read by
-people who are willing to take the time to help other users.
-
-When you answer the questions that people ask on the help-* lists, keep
-in mind that you shouldn't answer by promoting a proprietary program as
-a solution.  The only real solutions are the ones all the readers can
-share.
-
-If a program crashes, or if you build it following the standard
-procedure on a system on which it is supposed to work and it does not
-work at all, or if an command does not behave as it is documented to
-behave, this is a bug.  Don't send bug reports to a help-* list; mail
-them to the bug-* list instead.
-
-See section '* General Information about all lists'.
-
-* General Information about bug-* lists and reporting program bugs
-
-If you think something is a bug in a program, it might be one; or, it
-might be a misunderstanding or even a feature.  Before beginning to
-report bugs, please read the section ``Reporting Emacs Bugs'' toward the
-end of the GNU Emacs reference manual (or node Emacs/Bugs in Emacs's
-built-in Info system) for a discussion of how and when to send in bug
-reports.  For GNU programs other than GNU Emacs, also consult their
-documentation for their bug reporting procedures.  Always include the
-version number of the GNU program, as well as the operating system and
-machine the program was ran on (if the program doesn't have a version
-number, send the date of the latest entry in the file ChangeLog).  For
-GNU Emacs bugs, type "M-x emacs-version".  A debugger backtrace of any
-core dump, can also be useful.  Be careful to separate out hypothesis
-from fact!  For bugs in GNU Emacs lisp, set variable debug-on-error to
-t, and re-enter the command(s) that cause the error message; Emacs will
-pop up a debug buffer if something is wrong; please include a copy of
-the buffer in your bug report.  Please also try to make your bug report
-as short as possible; distill the problem to as few lines of code and/or
-input as possible.  GNU maintainers give priority to the shortest, high
-quality bug reports.
-
-Please don't send in a patch without a test case to illustrate the
-problem the patch is supposed to fix.  Sometimes the patches aren't
-correct or aren't the best way to do the job, and without a test case
-there is no way to debug an alternate fix.
-
-The purpose of reporting a bug is to enable the bug to be fixed for the
-sake of the whole community of users.  You may or may not receive a
-response; the maintainers will send one if that helps them find or
-verify a fix.  Most GNU maintainers are volunteers and all are
-overworked; they don't have time to help individuals and still fix the
-bugs and make the improvements that everyone wants.  If you want help
-for yourself in particular, you may have to hire someone.  The GNU
-project maintains a list of people providing such services.  It is
-distributed with GNU Emacs in file etc/SERVICE, and can be requested
-from gnu@prep.ai.mit.edu.
-
-Anything addressed to the implementors and maintainers of a GNU program
-via a bug-* list, should NOT be sent to the corresponding info-* or
-help-* list.
-
-Please DON'T post your bug reports on the gnu.*.bug newsgroups!  Mail
-them to bug-*@prep instead!  At first sight, it seems to make no
-difference: anything sent to one will be propagated to the other; but:
-       - if you post on the newsgroup, the information about how to
-reach you is lost in the message that goes on the mailing list.  It
-can be very important to know how to reach you, if there is anything
-in the bug report that we don't understand;
-       - bug reports reach the GNU maintainers quickest when they are
-sent to the bug-* mailing list submittal address;
-       - mail is much more reliable then netnews; and
-       - if the internet mailers can't get your bug report delivered,
-they almost always send you an error message, so you can find another
-way to get the bug report in.  When netnews fails to get your message
-delivered to the maintainers, you'll never know about it and the
-maintainers will never see the bug report.
-
-And please DON'T post your GNU bug reports to comp.* or other gnu.*
-newsgroups, they never make it to the GNU maintainers at all.  Please
-mail them to bug-*@prep instead!
-
-See section '* General Information about all lists'.
-
-* info-gnu-request@prep.ai.mit.edu to subscribe to info-gnu
-** gnUSENET newsgroup: gnu.announce
-** Send announcements to: info-gnu@prep.ai.mit.edu
-
-This list distributes progress reports on the GNU Project.  It is also
-used by the GNU Project to ask people for various kinds of help.  It is
-NOT for general discussion.
-
-The list is filtered to remove items meant for info-gnu-request, that
-can be answered by the moderator without bothering the list, or should
-have been sent to another list.
-
-See section '* General Information about info-* lists'.
-
-* gnu-misc-discuss-request@prep.ai.mit.edu to subscribe to gnu-misc-discuss
-** gnUSENET newsgroup: gnu.misc.discuss
-** Send contributions to: gnu-misc-discuss@prep.ai.mit.edu
-
-This list is for serious discussion of freed software, the GNU Project,
-the GNU Manifesto, and their implications.  It's THE place for
-discussion that is not appropriate in the other GNU mailing lists and
-gnUSENET newsgroups.
-
-Flaming is out of place.  Tit-for-tat is not welcome.  Repetition
-should not occur.
-
-Good READING and writing are expected.  Before posting, wait a while,
-cool off, and think.
-
-Don't use this group for complaints and bug reports about GNU software!
-The maintainers don't read this group; they won't see your complaint.
-Use the appropriate bug-reporting mailing list instead, so that people
-who can do something about the problem will see it.
-
-Don't trust pronouncements made on gnu-misc-discuss about what GNU is,
-what FSF position is, what the GNU General Public License is, etc.,
-unless they are made by someone you know is well connected with GNU and
-are sure the message is not forged.
-
-USENET and gnUSENET readers are expected to have read ALL the articles
-in news.announce.newusers before posting.  If news.announce.newusers is
-empty at your site, wait (the articles are posted monthly), your posting
-isn't that urgent!  Readers on the Internet can anonymous FTP these
-articles from host ftp.uu.net under directory ??
-
-Someone from the Free Software Foundation will attempt to follow this
-group as time and volume permits.
-
-Remember, "GNUs Not Unix" and "gnUSENET is Not USENET".  We have
-higher standards!
-
-Note that sending technical questions about specific GNU software to
-gnu-misc-discuss is likely to be less useful than sending them to the
-appropriate mailing list or gnUSENET newsgroup, since more technical
-people read those.
-
-* bug-gnu-sql-request@prep.ai.mit.edu to subscribe to bug-gnu-sql
-** gnUSENET newsgroup: NONE PLANNED
-** GNU-SQL BUG reports to: bug-gnu-sql@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of GNU's SQL (GNU's SQL
-full scale database server), bug reports and fixes for, and suggestions
-for improvements to GNU's SQL.  User discussion of GNU's SQL also occurs
-here.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for GNU's SQL.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-guile-request@prep.ai.mit.edu to subscribe to bug-guile
-** gnUSENET newsgroup: NONE PLANNED
-** GUILE BUG reports to: bug-guile@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of GUILE (GNU's
-Ubiquitous Extension Language), bug reports and fixes for, and suggestions for
-improvements to GUILE.  User discussion of GUILE also occurs here.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for GUILE .
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* guile-sources-request@prep.ai.mit.edu to subscribe to guile-sources
-** gnUSENET newsgroup: NONE PLANNED
-** Guile source code to: guile-sources@prep.ai.mit.edu
-
-This list will be for the posting, by their authors, of GUILE, Scheme,
-and C sources and patches that improve Guile.  Its contents will be
-reviewed by the FSF for inclusion in future releases of GUILE.
-
-Please do NOT discuss or request source code here.  Use bug-guile for
-those purposes.  This allows the automatic archiving of sources posted
-to this list.
-
-Please do NOT post such sources to any other GNU mailing list (e.g
-bug-guile) or gnUSENET newsgroups.  It's up to each poster to decide
-whether to cross-post to any non-gnUSENET newsgroup.
-
-Please do NOT announce that you have posted source code to guile.sources
-to any other GNU mailing list (e.g. bug-guile) or gnUSENET newsgroups.
-People who want to keep up with sources will read this list.  It's up to
-each poster to decide whether to announce a guile.sources article in any
-non-gnUSENET newsgroup (e.g. comp.emacs or comp.sources.d).
-
-If source or patches that were previously posted or a simple fix is
-requested in bug-guile, please mail it to the requester.  Do NOT
-repost it.  If you also want something that is requested, send mail to
-the requester asking him to forward it to you.  This kind of traffic is
-best handled by e-mail, not by a broadcast medium that reaches millions
-of sites.
-
-If the requested source is very long (>10k bytes) send mail offering to
-send it.  This prevents the requester from getting many redundant copies
-and saves network bandwidth.
-
-* bug-gnustep-request@prep.ai.mit.edu to subscribe to bug-gnustep
-** gnUSENET newsgroup: gnu.gnustep.bug
-** Gnustep bug reports to: bug-gnustep@prep.ai.mit.edu
-** FAQ-URL: none known
-** FAQ-Archive-name: none known
-** FAQ-Posting-frequency: none known
-
-This list distributes bug reports for, fixes for bugs in, and
-suggestions for improvements in GNUstep to its active developers.
-
-Subscribers to bug-gnustep get all info-gnustep messages.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* help-gnustep-request@prep.ai.mit.edu to subscribe to help-gnustep
-** gnUSENET newsgroup: gnu.gnustep.help        
-** Send contributions to: help-gnustep@prep.ai.mit.edu
-** FAQ-URL: none known
-** FAQ-Archive-name: none known
-** FAQ-Posting-frequency: none known
-
-This list is the place for users and installers of the GNUstep to ask
-for help.  Please send bug reports to bug-gnustep@prep.ai.mit.edu
-instead of posting them here.
-
-See section '* General Information about help-* lists'.
-
-* discuss-gnustep-request@prep.ai.mit.edu to subscribe to discuss-gnustep
-** gnUSENET newsgroup: gnu.gnustep.discuss     
-** Send contributions to: discuss-gnustep@prep.ai.mit.edu
-** FAQ-URL: none known
-** FAQ-Archive-name: none known
-** FAQ-Posting-frequency: none known
-
-This list is the place for GNUstep users and developers to discuss
-GNUstep.  Please send bug reports to bug-gnustep@prep.ai.mit.edu
-instead of posting them here.
-
-See section '* General Information about discuss-* lists'.
-
-* info-gnustep-request@prep.ai.mit.edu to subscribe to info-gnustep
-** gnUSENET newsgroup: gnu.gnustep.announce
-** Send announcements to: info-gnustep@prep.ai.mit.edu
-** FAQ-URL: none known
-** FAQ-Archive-name: none known
-** FAQ-Posting-frequency: none known
-
-This list distributes announcements and progress reports on GNUstep.
-It is NOT for general discussion; please use discuss-gnustep for that.
-
-The list is filtered to remove items meant for info-gnustep-request, that
-can be answered by the moderator without bothering the list, or should
-have been sent to another list.
-
-Do not report GNUstep bugs to info-gnustep, help-gnustep, or
-discuss-gnustep, mail them to bug-gnustep@prep.ai.mit.edu instead.
-
-See section '* General Information about info-* lists'.
-
-* bug-hurd-request@prep.ai.mit.edu to subscribe to bug-hurd
-** gnUSENET newsgroup: gnu.hurd.bug
-** Hurd bug reports to: bug-hurd@prep.ai.mit.edu
-
-This list distributes bug reports for, fixes for bugs in, and
-suggestions for improvements in the GNU Hurd to its active developers.
-
-No info-gnu-hurd list is planned.  Announcements about the GNU Hurd will
-be made to the list info-gnu@prep.ai.mit.edu (see above).
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* help-hurd-request@prep.ai.mit.edu to subscribe to help-hurd
-** gnUSENET newsgroup: gnu.hurd.help
-** Send contributions to: help-hurd@prep.ai.mit.edu
-
-This list is the place for users and installers of the GNU Hurd to ask
-for help.
-
-No info-gnu-hurd list is planned.  Announcements about the GNU Hurd will
-be made to the list info-gnu@prep.ai.mit.edu (see above).
-
-See section '* General Information about help-* lists'.
-
-* hurd-ann-request@prep.ai.mit.edu IS NOW DEFUNCT
-** gnUSENET newsgroup: NEVER EXISTED
-** DEAD address: hurd-ann@prep.ai.mit.edu
-
-This list is dead.  Announcements about the GNU Hurd will be made to the
-list info-gnu@prep.ai.mit.edu (see above).
-
-* bug-gnu-emacs-request@prep.ai.mit.edu to subscribe to bug-gnu-emacs
-** gnUSENET newsgroup: gnu.emacs.bug
-** Gnu Emacs bug reports to: bug-gnu-emacs@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of GNU Emacs, bug
-reports and fixes for, and suggestions for improvements in GNU Emacs.
-
-Send bugs in the GNU Emacs Lisp reference manual to:
-       lisp-manual-bugs@prep.ai.mit.edu
-
-lisp-manual-bugs is neither a mailing list nor a gnUSENET newsgroup.
-It's just a bug-reporting address.
-
-Subscribers to bug-gnu-emacs get all info-gnu-emacs messages.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* gnu-emacs-sources-request@prep.ai.mit.edu to subscribe to gnu-emacs-sources
-** gnUSENET newsgroup: gnu.emacs.sources
-** Gnu Emacs source code to: gnu-emacs-sources@prep.ai.mit.edu
-
-This list/newsgroup will be for the posting, by their authors, of Emacs
-Lisp and C sources and patches that improve GNU Emacs.  Its contents
-will be reviewed by the FSF for inclusion in future releases of GNU
-Emacs.
-
-Please do NOT discuss or request source code here.  Use
-help-gnu-emacs/gnu.emacs.help for those purposes.  This allows the
-automatic archiving of sources posted to this list/newsgroup.
-
-Please do NOT post such sources to any other GNU mailing list (e.g
-help-gnu-emacs) or gnUSENET newsgroups (e.g. gnu.emacs.help).  It's up
-to each poster to decide whether to cross-post to any non-gnUSENET
-newsgroup (e.g. comp.emacs or vmsnet.sources).
-
-Please do NOT announce that you have posted source code to
-gnu.emacs.sources to any other GNU mailing list (e.g. help-gnu-emacs) or
-gnUSENET newsgroups (e.g. gnu.emacs.help).  People who want to keep up
-with sources will read this list/newsgroup.  It's up to each poster to
-decide whether to announce a gnu.emacs.sources article in any
-non-gnUSENET newsgroup (e.g. comp.emacs or comp.sources.d).
-
-If source or patches that were previously posted or a simple fix is
-requested in help-gnu-emacs, please mail it to the requester.  Do NOT
-repost it.  If you also want something that is requested, send mail to
-the requester asking him to forward it to you.  This kind of traffic is
-best handled by e-mail, not by a broadcast medium that reaches millions
-of sites.
-
-If the requested source is very long (>10k bytes) send mail offering to
-send it.  This prevents the requester from getting many redundant copies
-and saves network bandwidth.
-
-* help-gnu-emacs-request@prep.ai.mit.edu to subscribe to help-gnu-emacs
-** gnUSENET newsgroup: gnu.emacs.help  (and one-way into comp.emacs)
-** Send contributions to: help-gnu-emacs@prep.ai.mit.edu
-
-This list is the place for users and installers of GNU Emacs to ask for
-help.  Please send bug reports to bug-gnu-emacs instead of posting them
-here.
-
-Since help-gnu-emacs is a very large list, send it only those items that
-are seriously important to many people.
-
-If source or patches that were previously posted or a simple fix is
-requested in help-gnu-emacs, please mail it to the requester.  Do NOT
-repost it.  If you also want something that is requested, send mail to
-the requester asking him to forward it to you.  This kind of traffic is
-best handled by e-mail, not a broadcast medium that reaches millions of
-sites.
-
-This list is also gated one way to USENET's newsgroup comp.emacs (once
-known as net.emacs).  This one-way gating is done for users whose sites
-get comp.emacs, but not gnu.emacs.help.  Users at non-USENET sites may
-receive all articles from comp.emacs by making their request to:
-unix-emacs-request@bbn.com
-
-If Emacs crashes, or if you build Emacs following the standard procedure
-on a system which Emacs is supposed to work on (see etc/MACHINES) and it
-does not work at all, or if an editing command does not behave as it is
-documented to behave, this is a bug.  Don't send bug reports to
-help-gnu-emacs (gnu.emacs.help) or post them to comp.emacs; mail them to
-bug-gnu-emacs@prep.ai.mit.edu instead.
-
-See section '* General Information about help-* lists'.
-
-* info-gnu-emacs-request@prep.ai.mit.edu to subscribe to info-gnu-emacs
-** gnUSENET newsgroup: gnu.emacs.announce      (and one-way into comp.emacs)
-** Send announcements to: info-gnu-emacs@prep.ai.mit.edu
-
-This list distributes announcements and progress reports on GNU Emacs.
-It is NOT for general discussion; please use help-gnu-emacs for that.
-
-The list is filtered to remove items meant for info-gnu-emacs-request,
-that can be answered by the moderator without bothering the list, or
-should have been sent to another list.
-
-info-gnu-emacs is also gated one way to USENET's newsgroup comp.emacs
-(once known as net.emacs).  This one-way gating is done for users whose
-sites get comp.emacs, but not gnu.emacs.announce.  Users at non-USENET
-sites may receive all articles from comp.emacs by making their request
-to: unix-emacs-request@bbn.com
-
-Do not report GNU Emacs bugs to info-gnu-emacs or comp.emacs, instead
-mail them to bug-gnu-emacs@prep.ai.mit.edu.
-
-See section '* General Information about info-* lists'.
-
-* vms-gnu-emacs-request@prep.ai.mit.edu to subscribe
-** gnUSENET newsgroup: gnu.emacs.vms
-** Send contributions to: vms-gnu-emacs@prep.ai.mit.edu
-
-This list was a working group who did the initial port of GNU Emacs to
-the VMS operating system.  It still discusses problems and solutions to
-the VMS port and the distribution of it.
-
-* bug-bash-request@prep.ai.mit.edu to subscribe to bug-bash
-** gnUSENET newsgroup: gnu.bash.bug
-** BASH bug reports to: bug-bash@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of BASH (the Bourne
-Again SHell), bug reports and fixes for, and suggestions for
-improvements in BASH.  User discussion of BASH also occurs here.
-
-Always report the version number of the operating system, hardware, and
-bash (flag -version on startup or check the variable $BASH_VERSION in a
-running bash).
-
-There are no other GNU mailing lists or gnUSENET newsgroups for BASH.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-gdb-request@prep.ai.mit.edu to subscribe to bug-gdb
-** gnUSENET newsgroup: gnu.gdb.bug
-** GDB bug reports to: bug-gdb@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of GDB (Gnu's
-DeBugger), bug reports and fixes for, and suggestions for improvements
-in GDB.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for GDB.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-octave-request@che.utexas.edu to subscribe to bug-octave
-** gnUSENET newsgroup: NONE PLANNED
-** Octave bug reports to: bug-octave@che.utexas.edu
-
-This list distributes, to the active maintainers of Octave (a system
-for numerical computations), bug reports and fixes for, and
-suggestions for improvements to Octave.
-
-The help-octave mailing list is for user discussion of Octave.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-
-* help-octave-request@che.utexas.edu to subscribe to help-octave
-** gnUSENET newsgroup: NONE PLANNED
-** Send contributions to: help-octave@che.utexas.edu
-
-This list is the place for users and installers of Octave to ask for
-help.  Please send bug reports to bug-octave instead of posting them
-here.
-
-If Octave crashes, or if you build Octave following the standard
-procedure on a system on which Octave is supposed to work on and it
-does not work at all, or if a command does not behave as it is
-documented to behave, this is a bug.  Don't send bug reports to
-help-octave; mail them to bug-octave@che.utexas.edu instead.
-
-See section '* General Information about help-* lists'.
+xemacs-beta@xemacs.org         XEmacs Beta Testers.
 
-* bug-gcc-request@prep.ai.mit.edu to subscribe to bug-gcc
-** gnUSENET newsgroup: gnu.gcc.bug
-** GCC bug reports to: bug-gcc@prep.ai.mit.edu
+  xemacs-beta is an open list for bug reports and general
+  communication about beta versions of XEmacs.
 
-This list distributes bug reports for, fixes for bugs in, and
-suggestions for improvements in the GNU C Compiler to its active
-developers.
+xemacs-build-reports@xemacs.org        XEmacs Build Report Submissions.
+       
+  xemacs-build-reports is an open list for submission of build-reports
+  on beta versions of XEmacs. For information on what the
+  build-reports should contain, please see the `etc/BETA' file which
+  is included in each beta distribution.
 
-Please don't send in a patch without a test case to illustrate the
-problem the patch is supposed to fix.  Sometimes the patches aren't
-correct or aren't the best way to do the job, and without a test case
-there is no way to debug an alternate fix.
+xemacs-cvs@xemacs.org          XEmacs CVS Commit Notices.
 
-The most convenient form of test case is a piece of cpp output that can
-be passed directly to cc1.  Preferably written in C, not C++ or
-Objective C.
+  xemacs-cvs is a read-only list for notices and information on what
+  has been committed to the XEmacs CVS trees, by whom, and for
+  what. (For more information on the XEmacs CVS Archive:
+  http://cvs.xemacs.org/.)
 
-Subscribers to bug-gcc get all info-gcc messages.
+xemacs-mule@xemacs.org         XEmacs International Extensions.
 
-See section '* General Information about bug-* lists and reporting
-program bugs'.
+  xemacs-mule is an open mailing list for discussion of International
+  extensions to XEmacs including Mule, XIM, I18n issues, etc, and is
+  not confined to developmental issues.  This list is not restricted
+  to English, postings in all languages are welcome.
 
-* help-gcc-request@prep.ai.mit.edu to subscribe to help-gcc
-** gnUSENET newsgroup: gnu.gcc.help
-** Send contributions to: help-gcc@prep.ai.mit.edu
+xemacs-nt@xemacs.org           XEmacs on Windows NT/98/95.
 
-This list is the place for users and installers of the GNU C Compiler to
-ask for help.
+  xemacs-nt is a developer's only mailing list and is intended for
+  people who wish to work actively on the porting of XEmacs to
+  Microsoft Windows NT and Microsoft Windows 98/95.
 
-If gcc crashes, or if you build gcc following the standard procedure on
-a system which gcc is supposed to work on (see config.sub) and it does
-not work at all, or if an command line option does not behave as it is
-documented to behave, this is a bug.  Don't send bug reports to help-gcc
-(gnu.gcc.help); mail them to bug-gcc@prep.ai.mit.edu instead.
+xemacs-patches@xemacs.org      XEmacs Patch Submissions.
 
-See section '* General Information about help-* lists'.
+  xemacs-patches is an open, moderated list for submission of patches
+  to the XEmacs distribution and its packages. Anyone may subscribe or
+  submit to xemacs-patches, but all submissions are reviewed by the
+  list moderator before they are distributed to the list.  Discussion
+  is not appropriate on xemacs-patches.
 
-* info-gcc-request@prep.ai.mit.edu to subscribe to info-gcc
-** gnUSENET newsgroup: gnu.gcc.announce
-** Send announcements to: info-gcc@prep.ai.mit.edu
+xemacs-users-ja@xemacs.org     XEmacs (Japanese).
 
-This list distributes announcements and progress reports on the GNU C
-Compiler.  It is NOT for general discussion; please use help-gcc for
-that.
+  xemacs-users-ja is an open list for discussion and bug reporting for
+  XEmacs. Japanese is the preferred language of discussion. It is not
+  gated to comp.emacs.xemacs or the xemacs list.  For fastest
+  response, bugs not specifically related to Japanese or Mule features
+  should be reported on xemacs (in English).
 
-The list is filtered to remove items meant for info-gcc-request, that
-can be answered by the moderator without bothering the list, or should
-have been sent to another list.
+xemacs-beta-ja@xemacs.org      XEmacs Beta (Japanese).
 
-See section '* General Information about info-* lists'.
+  xemacs-beta-ja is an open list for bug reports and general
+  communication about beta versions of XEmacs, especially features
+  related to Mule and Japanese-handling. Japanese is the preferred
+  language of discussion. Bugs not specifically related to Japanese or
+  Mule features should be reported on xemacs-beta (in English). Please
+  consider sending bug reports on Mule to xemacs-mule, in English.
 
-* bug-gnu960-request@ichips.intel.com to subscribe to bug-gnu960
-** gnUSENET newsgroup: NONE PLANNED
-** Intel 960 Port bug reports to: bug-gnu960@ichips.intel.com
+The most up to date information on the mailing lists can always be
+found at http://www.xemacs.org/.
 
-This list distributes bug reports for, fixes for bugs in, and
-suggestions for improvements in Intel's port of GNU software to the
-Intel 960 microprocessor.
+Subscriptions:
 
-You can also fax to: GNU/960 - 1-503-696-4930.
+Subscription to all the lists is accomplished by sending an e-mail
+message to LISTNAME-request@xemacs.org with `subscribe' (without the
+quotes) as the BODY of the message.
 
-There are no other GNU mailing lists or gnUSENET newsgroups for Intel's
-port of GNU software to the Intel 960 microprocessor.
+To unsubscribe, send an e-mail to LISTNAME-request@xemacs.org with
+`unsubscribe' (without the quotes) as the BODY of the message.
 
-See section '* General Information about bug-* lists and reporting
-program bugs'.
+List Archives:
 
-* bug-glibc-request@prep.ai.mit.edu to subscribe to bug-glibc
-** gnUSENET newsgroup: gnu.glibc.bug
-** GNU C Library bug reports to: bug-glibc@prep.ai.mit.edu
+A browsable and searchable archive of these lists is available at
+http://www.xemacs.org/list-archives/.
 
-This list distributes, to the active maintainers of glibc (GNU's C
-library), bug reports and fixes for, and suggestions for improvements in
-glibc.  User discussion of glibc also occurs here.
+Problems:
 
-Announcements of new releases of glibc are made on both info-gcc and
-bug-glibc.
+Any comments, questions, or complaints about the lists should be
+brought to the attention of the XEmacs Mailing List Manager
+<list-manager@xemacs.org>.
 
-There are no other GNU mailing lists or gnUSENET newsgroups for the GNU
-C Library.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-g++-request@prep.ai.mit.edu to subscribe to bug-g++
-** gnUSENET newsgroup: gnu.g++.bug
-** G++ bug reports to: bug-g++@prep.ai.mit.edu
-
-This list distributes bug reports for, fixes for bugs in, and
-suggestions for improvements in the GNU C++ Compiler to its active
-developers.
-
-G++ uses the GNU C-Compiler back end.  Active developers may wish to
-subscribe to bug-gcc@prep.ai.mit.edu as well.
-
-Subscribers to bug-g++ get all info-g++ messages.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* help-g++-request@prep.ai.mit.edu to subscribe to help-g++
-** gnUSENET newsgroup: gnu.g++.help    (and one-way into comp.lang.c++)
-** Send contributions to: help-g++@prep.ai.mit.edu
-
-This list is the place for users and installers of the GNU C++ Compiler
-to ask for help.  Please send bug reports to bug-g++@prep.ai.mit.edu
-instead of posting them here.
-
-help-g++ is also gated one way to USENET's newsgroup comp.lang.c++.
-This one-way gating is done for users whose sites get comp.lang.c++, but
-not gnu.g++.help.
-
-See section '* General Information about help-* lists'.
-
-* info-g++-request@prep.ai.mit.edu to subscribe to info-g++
-** gnUSENET newsgroup: gnu.g++.announce        (and one-way into comp.lang.c++)
-** Send announcements to: info-g++@prep.ai.mit.edu
-
-This list distributes announcements and progress reports on the GNU C++
-Compiler.  It is NOT for general discussion; please use help-g++ for
-that.
-
-The list is filtered to remove items meant for info-g++-request, that
-can be answered by the moderator without bothering the list, or should
-have been sent to another list.
-
-It is also gated one way to USENET's newsgroup comp.lang.c++.  This
-one-way gating is done for users whose sites get comp.lang.c++, but not
-gnu.g++.announce.
-
-Do not report g++ bugs to info-g++ or comp.lang.c++, mail them to
-bug-g++@prep.ai.mit.edu instead.
-
-See section '* General Information about info-* lists'.
-
-* bug-lib-g++-request@prep.ai.mit.edu to subscribe to bug-lib-g++
-** gnUSENET newsgroup: gnu.g++.lib.bug
-** lib-g++ bug reports to: bug-lib-g++@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of libg++ (GNU's
-library for C++), bug reports and fixes for, and suggestions for
-improvements in lib-g++.  User discussion of libg++ also occurs here.
-
-Announcements of new releases of libg++ are made on both info-g++ and
-bug-lib-g++.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for GNU's
-G++ Library.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* info-gnu-fortran-request@prep.ai.mit.edu to subscribe to info-gnu-fortran
-** gnUSENET newsgroup: NONE YET
-** Send announcements to: info-gnu-fortran@prep.ai.mit.edu
-
-This list is for progress reports about the GNU Fortran compiler.  In
-the future it will also be used for release notices.
-
-The list is filtered to remove items meant for info-gnu-fortran-request,
-that can be answered by the moderator without bothering the list, or
-should have been sent to another list.
-
-People on the Internet can get a current status report by fingering the
-address fortran@gnu.ai.mit.edu.
-
-See section '* General Information about info-* lists'.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for GNU
-Fortran (yet).
-
-* bug-oleo-request@prep.ai.mit.edu to subscribe to bug-oleo
-** gnUSENET newsgroup: NONE PLANNED
-** Oleo bug reports to: bug-oleo@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of Oleo (the GNU
-spreadsheet), bug reports and fixes for, and suggestions for
-improvements to Oleo.  User discussion of Oleo also occurs here.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for Oleo .
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-gmp-request@prep.ai.mit.edu to subscribe to bug-gmp
-** gnUSENET newsgroup: NONE PLANNED
-** gmp bug reports to: bug-gmp@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of gmp (the GNU
-Multiple Precision Library), bug reports and fixes for, and suggestions
-for improvements to gmp.  User discussion of gmp also occurs here.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for gmp .
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-pine-request@prep.ai.mit.edu to subscribe to bug-pine
-** gnUSENET newsgroup: NONE PLANNED
-** pine bug reports to: bug-pine@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of pine (the GNU
-version of the pine mail reader), bug reports and fixes for, and suggestions
-for improvements to pine.  User discussion of pine also occurs here.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for pine .
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-cfengine-request@prep.ai.mit.edu to subscribe to bug-cfengine
-** gnUSENET newsgroup: gnu.cfengine.bug
-** cfengine bug reports to: bug-cfengine@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of cfengine (configure
-BSD and System-5-like operating systems attached to a TCP/IP network),
-bug reports and fixes for, and suggestions for improvements to cfengine.
-User discussion of cfengine also occurs here.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* help-cfengine-request@prep.ai.mit.edu to subscribe to help-cfengine
-** gnUSENET newsgroup: gnu.cfengine.help
-** Send contributions to: help-cfengine@prep.ai.mit.edu
-
-This list is the place for users and installers of cfengine to ask for
-help.  Please send bug reports to bug-cfengine instead of posting them
-here.
-
-This list is also used for announcements about cfengine and related
-programs, and small but important patches.  Announcements of cfengine
-releases are also made to info-gnu@prep.ai.mit.edu (see above)
-
-Since help-cfengine is a large list, send it only those items that
-are seriously important to many people.
-
-If source or patches that were previously posted or a simple fix is
-requested in help-cfengine, please mail it to the requester.  Do NOT
-repost it.  If you also want something that is requested, send mail to
-the requester asking him to forward it to you.  This kind of traffic is
-best handled by e-mail, not a broadcast medium that reaches millions of
-sites.
-
-See section '* General Information about help-* lists'.
-Also see section '* General Information about info-* lists'.
-
-* bug-gnu-smalltalk-request@prep.ai.mit.edu to subscribe to bug-gnu-smalltalk
-** gnUSENET newsgroup: gnu.smalltalk.bug
-** GNU Smalltalk bug reports to: bug-gnu-smalltalk@prep.ai.mit.edu
-
-GNU Smalltalk is the GNU project implementation of the Smalltalk language.
-
-This list distributes, to the active maintainers of GNU Smalltalk, bug
-reports and fixes for, and suggestions for improvements to GNU
-Smalltalk.  User discussion of GNU Smalltalk also occurs here.
-
-For now, new releases of GNU Smalltalk will also be announced on this list.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for GNU
-Smalltalk.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* st-next-request@laplace.eng.sun.com to subscribe to st-next
-** gnUSENET newsgroup: NONE PLANNED
-** Send contributions to: st-next@laplace.eng.sun.com
-
-For people interested in working on GNU Smalltalk on the NeXT.
-
-* bug-groff-request@prep.ai.mit.edu to subscribe to bug-groff
-** gnUSENET newsgroup: gnu.groff.bug
-** GNU groff bug reports to: bug-groff@prep.ai.mit.edu
-
-groff is the GNU project implementation, in C++, of the traditional Unix
-document formatting tools.
-
-This list distributes, to the active maintainers of groff, bug reports
-and fixes for, and suggestions for improvements to groff (and it
-component programs).  User discussion of groff also occurs here.
-
-For now, new releases of groff will also be announced on this list.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for groff.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-ghostscript-request@prep.ai.mit.edu to subscribe to bug-ghostscript
-** gnUSENET newsgroup: gnu.ghostscript.bug
-** Ghostscript bug reports to: bug-ghostscript@prep.ai.mit.edu
-
-Ghostscript is the GNU project implementation of a language and graphics
-library with a remarkable similarity to PostScript.
-
-This list distributes, to the active maintainers of Ghostscript, bug
-reports and fixes for, and suggestions for improvements in Ghostscript.
-
-For now, new releases of Ghostscript will also be announced on this list.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for
-Ghostscript.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-gnu-utils-request@prep.ai.mit.edu to subscribe to bug-gnu-utils
-** gnUSENET newsgroup: gnu.utils.bug
-** GNU Utilities bug reports to: bug-gnu-utils@prep.ai.mit.edu
-
-This list distributes, to the active maintainers of these programs, bug
-reports and fixes for, and suggestions for improvements in GNU programs
-not covered by other bug-* mailing lists/gnu.*.bug newsgroups.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* help-gnu-utils-request@prep.ai.mit.edu to subscribe to help-gnu-utils
-** gnUSENET newsgroup: gnu.utils.help
-** Send contributions to: help-gnu-utils@prep.ai.mit.edu
-
-This list is the place for users and installers of GNU programs not
-covered by other GNU mailing lists/gnu.* newsgroups to ask for help.
-
-Don't send bug reports to help-gnu-utils (gnu.utils.help); mail them to
-bug-gnu-utils@prep.ai.mit.edu instead.
-
-See section '* General Information about help-* lists'.
-
-* info-gnu-utils-request@prep.ai.mit.edu IS NOW DEFUNCT
-** a gnUSENET newsgroup bever existed
-** DEAD address: info-gnu-utils@prep.ai.mit.edu
-
-This list is dead.  Announcements about GNU Utilities will be made to the
-list info-gnu@prep.ai.mit.edu (see above).
-
-* info-cvs-request@prep.ai.mit.edu to subscribe to info-cvs.
-** USENET newsgroup: (none)
-** CVS discussions/questions to: info-cvs@prep.ai.mit.edu
-
-This list is for discussion and dissemination of information about
-CVS.  Please check the FAQ before posting questions, however.
-
-* bug-cvs-request@prep.ai.mit.edu to subscribe to bug-cvs.
-** USENET newsgroup: (none)
-** CVS bug reports to: bug-cvs@prep.ai.mit.edu
-
-This list distributes bug reports, fixes, and suggestions for
-improvements to the maintainers of CVS.
-
-* bug-fortran-mode-request@erl.mit.edu to subscribe to bug-fortran-mode
-** USENET newsgroup: (none)
-** Fortran mode bug reports to: bug-fortran-mode@erl.mit.edu
-
-This list collects bug reports, fixes for bugs, and suggestions for
-improvements in GNU Emacs's Fortran mode (a major mode to support
-editing Fortran source code).
-
-It is the place to report Fortran mode bugs by all users of Fortran
-mode.
-
-Always report the version number Fortran mode reports on startup as well
-as the version of Emacs.
-
-There is no info-fortran-mode list.  There are no USENET gateways to
-bug-fortran-mode at this time.
-
-* info-gnus-request@flab.fujitsu.co.jp  to subscribe
-** gnUSENET newsgroup: NONE YET
-** Send contributions to: info-gnus@flab.fujitsu.co.jp
-
-The list is intended to exchange useful information about GNUS, such as
-bug reports, useful hooks, and extensions of GNUS.  GNUS is an NNTP-base
-network news reader for GNU Emacs (which also works with a news spool).
-English and Japanese are the official languages of the list.  GNUS is
-quite different than gnews.
-
-* info-gnus-english-request@prep.ai.mit.edu  to subscribe
-** gnUSENET newsgroup: gnu.emacs.gnus
-** Send contributions to: info-gnus-english@prep.ai.mit.edu
-
-The list has the same charter as info-gnus.  The difference is that
-English is the only official language of the list.
-
-info-gnus-english/gnu.emacs.gnus is forward to info-gnus, but NOT
-vice-versa.
-
-* info-gnews-request@ics.uci.edu to subscribe to info-gnews
-** gnUSENET newsgroup: gnu.emacs.gnews
-** Send contributions to: info-gnews@ics.uci.edu
-
-This newsgroup is intended to exchange useful information about gnews,
-such as bug reports, useful hooks, and extensions of gnews.  gnews is an
-NNTP-base network news reader for GNU Emacs (which also works a news
-spool).  It is quite different than GNUS.
-
-* gnu-emacs-ada-request@grebyn.com to subscribe to gnu-emacs-ada
-** gnUSENET newsgroup: NONE PLANNED
-** Gnu Emacs Ada support bug reports to: gnu-emacs-ada@grebyn.com
-
-This list distributes bug reports for, fixes for bugs in, and
-suggestions for improvements in GNU Emacs' editing support of the Ada
-programming language.
-
-There are no other GNU mailing lists or gnUSENET newsgroups for GNU
-Emacs' editing support of Ada.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* bug-vm-request@uunet.uu.net to subscribe to bug-vm
-** gnUSENET newsgroup: gnu.emacs.vm.bug
-** VM mail reader bug reports to: bug-vm@uunet.uu.net
-
-This list discusses bugs in View Mail mode for GNU Emacs, with an
-emphasis on beta and prerelease versions.
-
-Always report the version number of VM you are using, as well as the
-version of Emacs you're running.  If you believe it is significant,
-report the operating system used and the hardware.
-
-Subscribers to bug-vm get all info-vm messages.
-
-* info-vm-request@uunet.uu.net to subscribe to info-vm
-** gnUSENET newsgroup: gnu.emacs.vm.info
-** Send contributions to: info-vm@uunet.uu.net
-
-This list discusses the View Mail mode for GNU Emacs, an alternative to
-rmail mode.
-
-* supercite-request@warsaw.nlm.nih.gov to subscribe to supercite
-** gnUSENET newsgroup: NONE PLANNED
-** Send articles to: supercite@warsaw.nlm.nih.gov
-*** UUCP: ..!uunet!warsaw.nlm.nih.gov!supercite-request
-
-The supercite mailing list covers issues related to the advanced
-mail/news citation package called Supercite for GNU Emacs.
-
-* auc-tex-request@iesd.auc.dk to subscribe
-** USENET newsgroup: NONE YET
-** Send contributions to: auc-tex@iesd.auc.dk
-
-The list is intended to exchange information about AUC TeX, such as
-bug reports, request for help, and information on current
-developments.  AUC TeX is a much enhanced LaTeX mode for GNU Emacs.
-
-The list is unmoderated.
-
-* bug-gnu-chess-request@prep.ai.mit.edu to subscribe to bug-gnu-chess
-** gnUSENET newsgroup: gnu.chess.bug
-** GNU Chess bug reports to: bug-gnu-chess@prep.ai.mit.edu
-
-This list directly accesses the GNU Chess developer's group.  If you
-have a *BUG* to report about the program, which can also include a
-feature enhancement request, please send it to this list.
-
-Subscribers to bug-gnu-chess get all info-gnu-chess messages.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-* help-gnu-chess-request@prep.ai.mit.edu IS NOW DEFUNCT
-** gnUSENET newsgroup: NONE PLANNED
-** DEAD address: help-gnu-chess@prep.ai.mit.edu
-
-This list is dead.  Use info-gnu-chess@prep.ai.mit.edu/gnu.chess instead.
-
-* info-gnu-chess-request@prep.ai.mit.edu to subscribe to info-gnu-chess
-** gnUSENET newsgroup: gnu.chess
-** Send contributions to: info-gnu-chess@prep.ai.mit.edu
-** FAQ-URL: http://www.research.digital.com/SRC/personal/Tim_Mann/chess.html
-** FAQ-Archive-name: games/chess/gnu-faq
-** FAQ-Posting-frequency: monthly
-
-This list is the place for users and installers of GNU Chess to ask for
-help.  This list is also used for games played by people or other
-entities against the program, and other generalized non-bug,
-non-enhancement data.  Please send bug reports to bug-gnu-chess instead
-of posting them here.
-
-This list is also used for announcements about GNU Chess and related
-programs, and small but important patches.  Announcements of GNU Chess
-releases are also made to info-gnu@prep.ai.mit.edu (see above)
-
-Since info-gnu-chess is a large list, send it only those items that
-are seriously important to many people.
-
-If source or patches that were previously posted or a simple fix is
-requested in info-gnu-chess, please mail it to the requester.  Do NOT
-repost it.  If you also want something that is requested, send mail to
-the requester asking him to forward it to you.  This kind of traffic is
-best handled by e-mail, not a broadcast medium that reaches millions of
-sites.
-
-See section '* General Information about help-* lists'.
-Also see section '* General Information about info-* lists'.
-
-* bug-gnu-shogi-request@prep.ai.mit.edu to subscribe to bug-gnu-shogi
-** gnUSENET newsgroup: NONE PLANNED
-** GNU Shogi bug reports to: bug-gnu-shogi@prep.ai.mit.edu
-
-This list directly accesses the GNU Shogi developer's group.  If you
-have a *BUG* to report about the program, which can also include a
-feature enhancement request, please send it to this list.
-
-Subscribers to bug-gnu-shogi get all info-gnu-shogi messages.
-
-See section '* General Information about bug-* lists and reporting
-program bugs'.
-
-Shogi is a game something like chess.  There are several different types
-of pieces, a board that is 9 by 9 squares, and the modification that a
-captured piece can be reintroduced on the board by the capturing player
-(and used).  Due to this last difference from Western chess, a Shogi
-game never simplifies.
-
-* help-gnu-shogi-request@prep.ai.mit.edu IS NOW DEFUNCT
-** gnUSENET newsgroup: NONE PLANNED
-** DEAD address: help-gnu-shogi@prep.ai.mit.edu
-
-This list is dead.
-
-* info-gnu-shogi-request@prep.ai.mit.edu to subscribe to info-gnu-shogi
-** gnUSENET newsgroup: NONE PLANNED
-** Send contributions to: info-gnu-shogi@prep.ai.mit.edu
-
-This list is the place for users and installers of GNU Shogi to ask for
-help.  This list is also used for games played by people or other
-entities against the program, and other generalized non-bug,
-non-enhancement data.  Please send bug reports to bug-gnu-shogi instead
-of posting them here.
-
-This list is also used for announcements about GNU Shogi and related
-programs, and small but important patches.  Announcements of GNU Shogi
-releases are also made to info-gnu@prep.ai.mit.edu (see above)
-
-Since info-gnu-shogi is a large list, send it only those items that
-are seriously important to many people.
-
-If source or patches that were previously posted or a simple fix is
-requested in info-gnu-shogi, please mail it to the requester.  Do NOT
-repost it.  If you also want something that is requested, send mail to
-the requester asking him to forward it to you.  This kind of traffic is
-best handled by e-mail, not a broadcast medium that reaches millions of
-sites.
-
-See section '* General Information about help-* lists'.
-Also see section '* General Information about info-* lists'.
-
-* gnu-manual-request@a.cs.uiuc.edu IS NOW DEFUNCT
-** DEAD: Gnusenet newsgroup: gnu.emacs.lisp.manual
-** DEAD address: gnu-manual@a.cs.uiuc.edu
-*** DEAD UUCP address: ..!uunet!uiucdcs!gnu-manual-request
-
-This list and newsgroup is dead.  It was a working group whose
-volunteers wrote, proofread and commented on the developing GNU Emacs
-Lisp programmers manual.
-
-Send bugs in the GNU Emacs Lisp reference manual to:
-       lisp-manual-bugs@prep.ai.mit.edu
-
-lisp-manual-bugs is neither a mailing list nor a gnUSENET newsgroup.
-It's just a bug-reporting address.
-
-* no mailing list request
-** gnUSENET newsgroup: gnu.gnusenet.config
-** no mailing list
-
-This newsgroup has nothing to do with GNU software, especially its
-configuration.  It exists to distribute information about the
-administration and configuration of gnUSENET: the gnu.all alternative
-USENET hierarchy that carry the GNU mailing lists.
+-----------------------------------------------------------------------
 
-Administrators of gnUSENET hosts receiving the gnu.all newsgroups are
-welcome to ask questions here or via e-mail of gnu@prep.ai.mit.edu.
+       GNU Project Electronic Mailing Lists and gnUSENET Newsgroups:
 
-* no mailing list request
-** gnUSENET newsgroup: gnu.gnusenet.test
-** no mailing list
+The XEmacs project is separate from and not managed by the GNU
+project.  The latest information about the GNU project mailing lists
+can be found at ftp://ftp.gnu.org/gnu/GNUinfo/MAILINGLISTS
 
-This newsgroup has nothing to do with GNU software, especially its
-testing.  It exists to allow test messages to be made in gnUSENET: the
-gnu.all alternative USENET hierarchy that carry the GNU mailing lists.
+Please do NOT send messages about problems with XEmacs to the FSF GNU
+Emacs newsgroups and mailing lists unless you are sure that the
+problem you are reporting is a problem with both versions of GNU
+Emacs.  People who aren't subscribed to the XEmacs mailing list most
+likely are not interested in hearing about problems with it.
 
-Local variables:
-mode: outline
-fill-column: 72
-End:
index 0e7ab45..7267c67 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -124,6 +124,9 @@ buffer.  As a side effect subwindow support now works once again.
 
 This support is currently only available under MS-Windows.
 
+** XEmacs can now play sound using Enlightenment Sound Daemon (ESD).
+It will try NAS first, then ESD, then playing native sound directly.
+
 ** X-Face support is now available under MS-Windows.
 If an X-Face libary built under MS-Windows is available then XEmacs
 will use this at build time.
@@ -150,6 +153,40 @@ Moreover, -user <user> (which used to only work in unpredictable ways)
 is now equivalent to
 -user-init-file ~<user>/.emacs -user-init-directory ~<user>/.xemacs.
 
+** Etags changes.
+
+*** In DOS, etags looks for file.cgz if it cannot find file.c.
+
+*** New option --ignore-case-regex is an alternative to --regex.  It is now
+possible to bind a regexp to a language, by prepending the regexp with
+{lang}, where lang is one of the languages that `etags --help' prints out.
+This feature is useful especially for regex files, where each line contains
+a regular expression.  The manual contains details.
+
+*** In C and derived languages, etags creates tags for function
+declarations when given the --declarations option.
+
+*** In C++, tags are created for "operator".  The tags have the form
+"operator+", without spaces between the keyword and the operator.
+
+*** New language Ada: tags are functions, procedures, packages, tasks, and
+types.
+
+*** In Fortran, procedure is no more tagged.
+
+*** In Java, tags are created for "interface".
+
+*** In Lisp, "(defstruct (foo", "(defun (operator" and similar constructs
+are now tagged.
+
+*** In Perl, the --globals option tags global variables.  my and local
+variables are tagged.
+
+*** New language Python: def and class at the beginning of a line are tags.
+
+*** .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is
+for PSWrap.
+
 \f
 * Lisp and internal changes in XEmacs 21.2
 ==========================================
@@ -236,15 +273,21 @@ Except that SUFFIXES are now a list of strings instead of a single,
 colon-separated string.  MODE is now a symbol or a list of symbols
 (symbols `exists', `executable', `writable', and `readable' are
 supported) instead of an integer code.  See the documentation for
-details.
+details.  Of course, the old form is still accepted for backward
+compatibility.
 
-Of course, the old form is still accepted for backward compatibility.
+Several bugs in locate-file have been fixed, most notably its failure
+to call expand-file-name on elements of PATH-LIST.  Because of that
+elements of load-path of the form "~/..." used to not work.
+locate-file is now guaranteed to expand files during its course of
+operation.
 
 ** `translate-region' has been improved in several ways.  Its TABLE
 argument used to be a 256-character string.  In addition to this, it
-can now also be a vector or a char-table (which is useful for Mule.)
-If TABLE a vector or a generic char-table, you can map characters to
-strings instead of to other characters.  For instance:
+can now also be a vector or a char-table, which makes the function
+useful for Mule, which it wasn't.  If TABLE a vector or a generic
+char-table, you can map characters to strings instead of to other
+characters.  For instance:
 
     (let ((table (make-char-table 'generic)))
       (put-char-table ?a "the letter a" table)
index 56e72d7..57b3174 100644 (file)
@@ -2403,7 +2403,7 @@ source; if you're going to use this, you'd better be able to.
 *** utils/bench.el
 Commentary:
 
-Adapted from Shane Holder's bench.el by steve@altair.xemacs.org.
+Adapted from Shane Holder's bench.el by steve@xemacs.org.
 
 To run
 Extract the shar file in /tmp, or modify bench-lisp-file to
index b1e8e63..5b0fd2e 100644 (file)
@@ -2,5 +2,5 @@ Hyperbole is a suite of tools for enhancing productivity.
 
 The latest working version of this package with major enhancements
 is available together with professional support exclusively from their
-developer, Altrasoft Inc.  See http://www.altrasoft.com for product
+developer, BeOpen Inc.  See http://www.beopen.com for product
 and service details.
index f572fab..f480ee4 100644 (file)
@@ -2,5 +2,5 @@ The OO-Browser is a tool for examining object oriented code.
 
 The latest working version of this package with major enhancements
 is available together with professional support exclusively from their
-developer, Altrasoft Inc.  See http://www.altrasoft.com for product
+developer, BeOpen Inc.  See http://www.beopen.com for product
 and service details.
index 9219b24..b54b83f 100644 (file)
@@ -40,13 +40,13 @@ For a current copy of this directory, or to have yourself listed, ask:
 ** Please keep the entries in this file alphabetical **
 
 \1f
-Altrasoft      <info@altrasoft.com>
+BeOpen <info@beopen.com>
 4880 Stevens Creek Blvd., Suite 205
 San Jose, CA  95129-1034
 +1 408 243 3300
-http://www.altrasoft.com
+http://www.beopen.com
 
-Altrasoft provides corporate-quality support, development and user
+BeOpen provides corporate-quality support, development and user
 documentation for GNU Emacs, XEmacs and InfoDock.  (InfoDock is a turnkey
 information management and software development toolset built atop emacs,
 written by one of our associates.)  Emacs distributions for a variety of
index 90c0e70..a45d60d 100755 (executable)
@@ -24,7 +24,7 @@
 
 # Shortcuts for sh-derived Unix shells (ksh, zsh, bash)
 
-# From Steve Baur <steve@altair.xemacs.org>
+# From Steve Baur <steve@xemacs.org>
 # Run temacs as XEmacs
 function runtemacs
 {
index 8e1c9b7..99152dd 100644 (file)
@@ -1,6 +1,5 @@
 #!/bin/sh
-if gnuclient -batch -eval t >/dev/null 2>&1
-then
+if gnuclient -batch -eval t >/dev/null 2>&1; then
   exec gnuclient ${1+"$@"}
 else
   xemacs -unmapped -f gnuserv-start &
index 2a6c375..735b187 100644 (file)
@@ -1,6 +1,6 @@
 .\" Copyright (c) 1992 Free Software Foundation
 .\" See section COPYING for conditions for redistribution
-.TH etags 1 "19apr1994" "GNU Tools" "GNU Tools"
+.TH etags 1 "02nov1999" "GNU Tools" "GNU Tools"
 .de BP
 .sp
 .ti -.2i
@@ -12,24 +12,33 @@ etags, ctags \- generate tag file for Emacs, vi
 .SH SYNOPSIS
 .hy 0
 .na
-.B etags [\|\-aCDRSVh\|] [\|\-i \fIfile\fP\|] [\|\-l \fIlanguage\fP\|] [\|\-i \fIregexp\fP\|] [\|\-o \fItagfile\fP\|]
+.B etags [\|\-aCDGImRVh\|] [\|\-i \fIfile\fP\|] [\|\-l \fIlanguage\fP\|]
+.if n .br
+.B [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|]
 .br
-[\|\-\-c++\|] [\|\-\-no\-defines\|] [\|\-\-ignore\-indentation\|]
-[\|\-\-language=\fIlanguage\fP\|] [\|\-\-regex=\fIregexp\fP\|]
-[\|\-\-no\-regexp\|] [\|\-\-help\|] [\|\-\-version\|]
-[\|\-\-include=\fIfile\fP\|] [\|\-\-output=\fItagfile\fP\|]
-[\|\-\-append\|] \fIfile\fP .\|.\|.
+[\|\-\-append\|] [\|\-\-c++\|] [\|\-\-no\-defines\|]
+[\|\-\-no\-globals\|] [\|\-\-include=\fIfile\fP\|]
+[\|\-\-ignore\-indentation\|] [\|\-\-language=\fIlanguage\fP\|]
+[\|\-\-members\|] [\|\-\-output=\fItagfile\fP\|]
+[\|\-\-regex=\fIregexp\fP\|] [\|\-\-no\-regex\|]
+[\|\-\-ignore\-case\-regex=\fIregexp\fP\|]
+[\|\-\-help\|] [\|\-\-version\|]
+\fIfile\fP .\|.\|.
 
-.B ctags [\|\-aCdRSVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
+.B ctags [\|\-aCdgImRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
+.if n .br
+.B [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|]
 .br
-[\|\-i \fIregexp\fP\|] [\|\-o \fItagfile\fP\|]
-[\|\-\-c++\|] [\|\-\-defines\|] [\|\-\-ignore\-indentation\|]
-[\|\-\-no\-warn\|] [\|\-\-cxref\|] [\|\-\-backward\-search\|]
-[\|\-\-forward\-search\|] [\|\-\-typedefs\|] [\|\-\-typedefs\-and\-c++\|]
-[\|\-\-language=\fIlanguage\fP\|] [\|\-\-regex=\fIregexp\fP\|]
+[\|\-\-append\|] [\|\-\-backward\-search\|] [\|\-\-c++\|]
+[\|\-\-cxref\|] [\|\-\-defines\|] [\|\-\-forward\-search\|]
+[\|\-\-globals\|] [\|\-\-ignore\-indentation\|]
+[\|\-\-language=\fIlanguage\fP\|] [\|\-\-members\|]
+[\|\-\-output=\fItagfile\fP\|] [\|\-\-regex=\fIregexp\fP\|]
+[\|\-\-ignore\-case\-regex=\fIregexp\fP\|]
+[\|\-\-typedefs\|] [\|\-\-typedefs\-and\-c++\|]
+[\|\-\-update\|] [\|\-\-no\-warn\|]
 [\|\-\-help\|] [\|\-\-version\|]
-.br
-[\|\-\-output=\fItagfile\fP\|] [\|\-\-append\|] [\|\-\-update\|] \fIfile\fP .\|.\|.
+\fIfile\fP .\|.\|.
 .ad b
 .hy 1
 .SH DESCRIPTION
@@ -40,8 +49,8 @@ understood by
 format understood by
 .BR vi ( 1 )\c
 \&.  Both forms of the program understand
-the syntax of C, Objective C, C++, Java, Fortran, Pascal, Cobol,
-LaTeX, Scheme, Emacs Lisp/Common Lisp, Postscript, Erlang, Prolog and
+the syntax of C, Objective C, C++, Java, Fortran, Pascal, Cobol, Ada, Perl,
+LaTeX, Scheme, Emacs Lisp/Common Lisp, Postscript, Erlang, Python, Prolog and
 most assembler\-like syntaxes.
 Both forms read the files specified on the command line, and write a tag
 table (defaults: `\|TAGS\|' for \fBetags\fP, `\|tags\|' for
@@ -77,18 +86,39 @@ Treat files with `\|.c\|' and `\|.h\|' extensions as C++ code, not C
 code.  Files with `\|.C\|', `\|.H\|', `\|.cxx\|', `\|.hxx\|', or
 `\|.cc\|' extensions are always assumed to be C++ code.
 .TP
+.B \-\-declarations
+In C and derived languages, create tags for function declarations,
+and create tags for extern variables unless \-\-no\-globals is used.
+.TP
 .B \-d, \-\-defines
-Create tag entries for C preprocessor constant definitions 
+Create tag entries for C preprocessor constant definitions
 and enum constants, too.  This is the
-default behavior for \fBetags\fP, so this option is only accepted
-by \fBctags\fP.
+default behavior for \fBetags\fP.
 .TP
 .B \-D, \-\-no\-defines
 Do not create tag entries for C preprocessor constant definitions
 and enum constants.
 This may make the tags file much smaller if many header files are tagged.
-This is the default behavior for \fBctags\fP, so this option is only
-accepted by \fBetags\fP.
+This is the default behavior for \fBctags\fP.
+.TP
+.B \-g, \-\-globals
+Create tag entries for global variables in C, C++, Objective C, Java,
+and Perl.
+This is the default behavior for \fBetags\fP.
+.TP
+.B \-G, \-\-no\-globals
+Do not tag global variables.  Typically this reduces the file size by
+one fourth.  This is the default behavior for \fBctags\fP.
+.TP
+\fB\-i\fP \fIfile\fP, \fB\-\-include=\fIfile\fP
+Include a note in the tag file indicating that, when searching for a
+tag, one should also consult the tags file \fIfile\fP after checking the
+current file.  This options is only accepted by \fBetags\fP.
+.TP
+.B \-I, \-\-ignore\-indentation
+Don't rely on indentation as much as we normally do.  Currently, this
+means not to assume that a closing brace in the first column is the
+final brace of a function or structure definition in C and C++.
 .TP
 \fB\-l\fP \fIlanguage\fP, \fB\-\-language=\fIlanguage\fP
 Parse the following files according to the given language.  More than
@@ -99,27 +129,30 @@ detection of language based on filename extension.  The `none'
 language may be used to disable language parsing altogether; only
 regexp matching is done in this case (see the \fB\-\-regex\fP option).
 .TP
-\fB\-\-no_globals\fP
-Do not tag global variables in C, C++, Objective C, Java.  Typically
-this reduces the file size by one fourth.
+.B \-m, \-\-members
+Create tag entries for variables that are members of structure-like
+constructs in C++, Objective C, Java.
 .TP
-\fB\-\-members\fP
-Tag variables that are members of strucure-like constructs in C++,
-Objective C, Java. 
+.B \-M, \-\-no\-members
+Do not tag member variables.  This is the default behavior.
+.TP
+.B \-\-packages\-only
+Only tag packages in Ada files.
 .TP
 \fB\-o\fP \fItagfile\fP, \fB\-\-output=\fItagfile\fP
 Explicit name of file for tag table; overrides default `\|TAGS\|' or
 `\|tags\|'.   (But ignored with \fB\-v\fP or \fB\-x\fP.)
 .TP
 \fB\-r\fP \fIregexp\fP, \fB\-\-regex=\fIregexp\fP
-Make tags based on regexp matching for each line of the files
-following this option, in addition to the tags made with the standard
-parsing based on language.  May be freely intermixed with filenames
-and the \fB\-R\fP option.  The regexps are cumulative, i.e. each
-option will add to the previous ones.  The regexps are of the form:
+\fB\-\-ignore\-case\-regex=\fIregexp\fP\
+Make tags based on regexp matching for each line of the files following
+this option, in addition to the tags made with the standard parsing based
+on language.  When using \-\-regex, case is significant, while it is not
+with \-\-ignore\-case\-regex. May be freely intermixed with filenames and
+the \fB\-R\fP option.  The regexps are cumulative, i.e. each option will
+add to the previous ones.  The regexps are of the form:
 .br
-
-               \fB/\fP\fItagregexp\fP[\fB/\fP\fInameregexp\fP]\fB/\fP
+       \fB/\fP\fItagregexp\fP[\fB/\fP\fInameregexp\fP]\fB/\fP
 .br
 
 where \fItagregexp\fP is used to match the lines that must be tagged.
@@ -127,8 +160,8 @@ It should not match useless characters.  If the match is
 such that more characters than needed are unavoidably matched by
 \fItagregexp\fP, it may be useful to add a \fInameregexp\fP, to
 narrow down the tag scope.  \fBctags\fP ignores regexps without a
-\fInameregexp\fP.  The syntax of regexps is the same as in emacs, 
-augmented with intervals of the form \\{m,n\\}, as id ed or grep.
+\fInameregexp\fP.  The syntax of regexps is the same as in emacs,
+augmented with intervals of the form \\{m,n\\}, as in ed or grep.
 .br
 Here are some examples.  All the regexps are quoted to protect them
 from shell interpretation.
@@ -152,16 +185,25 @@ Tag TCL files (this last example shows the usage of a \fItagregexp\fP):
 .br
 \fI\-\-lang\=none \-\-regex\='/proc[\ \\t]+\\([^\ \\t]+\\)/\\1/'\fP
 
+.br
+A regexp can be preceded by {lang}, thus restriciting it to match lines of
+files of the specified language.  Use \fBetags --help\bP to obtain a list
+of the recognised languages.  This feature is particularly useful inside
+\fBregex files\fB.  A regex file contains one regex per line.  Empty lines,
+and those lines beginning with space or tab are ignored.  Lines beginning
+with @ are references to regex files whose name follows the @ sign.  Other
+lines are considered regular expressions like those following \-\-regex.
+.br
+For example, the command
+.br
+etags \-\-regex=@regex.file *.c
+.br
+reads the regexes contained in the file regex.file.
 .TP
 .B \-R, \-\-no\-regex
 Don't do any more regexp matching on the following files.  May be
 freely intermixed with filenames and the \fB\-\-regex\fP option.
 .TP
-.B \-S, \-\-ignore\-indentation
-Don't rely on indentation as much as we normally do.  Currently, this
-means not to assume that a closing brace in the first column is the
-final brace of a function or structure definition in C and C++.
-.TP
 .B \-t, \-\-typedefs
 Record typedefs in C code as tags.  Since this is the default behaviour
 of \fBetags\fP, only \fBctags\fP accepts this option.
@@ -192,7 +234,7 @@ allowed with it.
 Instead of generating a tag file, write a cross reference (in
 \fBcxref\fP format) to standard output.  Only \fBctags\fP accepts this option.
 .TP
-.B \-H, \-\-help
+.B \-h, \-H, \-\-help
 Print usage information.
 .TP
 .B \-V, \-\-version
@@ -209,7 +251,7 @@ Stallman.
 .BR vi ( 1 ).
 
 .SH COPYING
-Copyright (c) 1992 Free Software Foundation, Inc.
+Copyright (c) 1999 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
index f87359f..781d24e 100644 (file)
@@ -291,4 +291,4 @@ Andy Norman (ange@hplb.hpl.hp.com), based heavily upon
 etc/emacsclient.c, etc/server.c and lisp/server.el from the GNU Emacs
 18.52 distribution.  Various modifications from Bob Weiner (weiner@mot.com),
 Darrell Kindred (dkindred@cmu.edu), Arup Mukherjee (arup@cmu.edu), Ben
-Wing (ben@xemacs.org) and Hrvoje Niksic (hniksic@srce.hr).
+Wing (ben@xemacs.org) and Hrvoje Niksic (hniksic@xemacs.org).
index 6feef5a..3464c72 100644 (file)
@@ -120,7 +120,7 @@ Hash: SHA1
    author-version "10.38"
    date "1999-05-18"
    build-date "1999-07-30"
-   maintainer "SL Baur <steve@altair.xemacs.org>"
+   maintainer "SL Baur <steve@xemacs.org>"
    distribution mule
    priority medium
    category "mule"
@@ -230,7 +230,7 @@ Hash: SHA1
    author-version "21.1"
    date "1999-06-30"
    build-date "1999-07-30"
-   maintainer "SL Baur <steve@altair.xemacs.org>"
+   maintainer "SL Baur <steve@xemacs.org>"
    distribution mule
    priority high
    category "mule"
index 52199e8..71151aa 100644 (file)
@@ -75,6 +75,13 @@ Emacs*dialog*XmList*Background:              WhiteSmoke
 ! While this one is for Athena dialog boxes.
 Emacs*dialog*Command*Background:       WhiteSmoke
 
+! Athena dialog boxes are sometimes built with the Xaw3d
+! variant of the Athena toolkit.
+! XEmacs being nice to 8bit displays, it defaults to:
+Emacs*dialog*Command*beNiceToColormap: true
+! If you are shocked by the ugliness of the 3d rendition,
+! you may want to set (even on 8bit displays) the above to false.
+
 ! Xlw Scrollbar colors
 Emacs*XlwScrollBar.Foreground:         Gray30
 Emacs*XlwScrollBar.Background:         Gray75
index e86dce2..c912a1c 100644 (file)
@@ -742,10 +742,10 @@ was written by
 Steve Baur <steve@xemacs.org>,
 Martin Buchholz <martin@xemacs.org>,
 Richard Mlynarik <mly@adoc.xerox.com>,
-Hrvoje Niksic <hniksic@srce.hr>,
+Hrvoje Niksic <hniksic@xemacs.org>,
 Chuck Thompson <cthomp@xemacs.org>,
-Ben Wing <wing@666.com>,
-Jamie Zawinski <jwz@netscape.com>,
+Ben Wing <ben@xemacs.org>,
+Jamie Zawinski <jwz@jwz.org>,
 and many others.
 It was based on an early version of
 .I GNU Emacs Version
index 06f1c56..fdd0642 100644 (file)
@@ -1,5 +1,4 @@
-This is Info file ../info/cl.info, produced by Makeinfo version 1.68
-from the input file cl.texi.
+This is ../info/cl.info, produced by makeinfo version 4.0 from cl.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -29,79 +28,79 @@ the original English.
 
 \1f
 Indirect:
-cl.info-1: 1190
-cl.info-2: 46365
-cl.info-3: 89150
-cl.info-4: 138909
-cl.info-5: 176907
-cl.info-6: 219515
+cl.info-1: 1164
+cl.info-2: 46335
+cl.info-3: 89116
+cl.info-4: 138874
+cl.info-5: 176870
+cl.info-6: 219475
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f1190
-Node: Overview\7f2742
-Node: Usage\7f5021
-Node: Organization\7f5671
-Node: Installation\7f7494
-Node: Naming Conventions\7f8647
-Node: Program Structure\7f10786
-Node: Argument Lists\7f11254
-Node: Time of Evaluation\7f21039
-Node: Function Aliases\7f27019
-Node: Predicates\7f27603
-Node: Type Predicates\7f27923
-Node: Equality Predicates\7f32966
-Node: Control Structure\7f35742
-Node: Assignment\7f36546
-Node: Generalized Variables\7f37788
-Node: Basic Setf\7f39095
-Node: Modify Macros\7f46365
-Node: Customizing Setf\7f53575
-Node: Variable Bindings\7f60865
-Node: Dynamic Bindings\7f61446
-Node: Lexical Bindings\7f62336
-Node: Function Bindings\7f66440
-Node: Macro Bindings\7f68827
-Node: Conditionals\7f71751
-Node: Blocks and Exits\7f74834
-Node: Iteration\7f77890
-Node: Loop Facility\7f83364
-Node: Loop Basics\7f84291
-Node: Loop Examples\7f86891
-Node: For Clauses\7f89150
-Node: Iteration Clauses\7f101028
-Node: Accumulation Clauses\7f102869
-Node: Other Clauses\7f105213
-Node: Multiple Values\7f111282
-Node: Macros\7f113175
-Node: Declarations\7f116393
-Node: Symbols\7f124885
-Node: Property Lists\7f125185
-Node: Creating Symbols\7f128386
-Node: Numbers\7f130464
-Node: Predicates on Numbers\7f130944
-Node: Numerical Functions\7f131973
-Node: Random Numbers\7f136200
-Node: Implementation Parameters\7f138909
-Node: Sequences\7f142481
-Node: Sequence Basics\7f143154
-Node: Mapping over Sequences\7f146733
-Node: Sequence Functions\7f152587
-Node: Searching Sequences\7f158762
-Node: Sorting Sequences\7f161800
-Node: Lists\7f164348
-Node: List Functions\7f164773
-Node: Substitution of Expressions\7f169036
-Node: Lists as Sets\7f170922
-Node: Association Lists\7f174984
-Node: Hash Tables\7f176687
-Node: Structures\7f176907
-Node: Assertions\7f191690
-Node: Efficiency Concerns\7f194633
-Node: Common Lisp Compatibility\7f200960
-Node: Old CL Compatibility\7f204118
-Node: Porting Common Lisp\7f208501
-Node: Function Index\7f219515
-Node: Variable Index\7f230778
+Node: Top\7f1164
+Node: Overview\7f2716
+Node: Usage\7f4995
+Node: Organization\7f5645
+Node: Installation\7f7468
+Node: Naming Conventions\7f8621
+Node: Program Structure\7f10760
+Node: Argument Lists\7f11228
+Node: Time of Evaluation\7f21011
+Node: Function Aliases\7f26991
+Node: Predicates\7f27575
+Node: Type Predicates\7f27895
+Node: Equality Predicates\7f32937
+Node: Control Structure\7f35713
+Node: Assignment\7f36517
+Node: Generalized Variables\7f37758
+Node: Basic Setf\7f39065
+Node: Modify Macros\7f46335
+Node: Customizing Setf\7f53544
+Node: Variable Bindings\7f60833
+Node: Dynamic Bindings\7f61414
+Node: Lexical Bindings\7f62304
+Node: Function Bindings\7f66408
+Node: Macro Bindings\7f68795
+Node: Conditionals\7f71718
+Node: Blocks and Exits\7f74801
+Node: Iteration\7f77857
+Node: Loop Facility\7f83330
+Node: Loop Basics\7f84257
+Node: Loop Examples\7f86857
+Node: For Clauses\7f89116
+Node: Iteration Clauses\7f100993
+Node: Accumulation Clauses\7f102834
+Node: Other Clauses\7f105178
+Node: Multiple Values\7f111247
+Node: Macros\7f113140
+Node: Declarations\7f116358
+Node: Symbols\7f124850
+Node: Property Lists\7f125150
+Node: Creating Symbols\7f128351
+Node: Numbers\7f130429
+Node: Predicates on Numbers\7f130909
+Node: Numerical Functions\7f131938
+Node: Random Numbers\7f136165
+Node: Implementation Parameters\7f138874
+Node: Sequences\7f142446
+Node: Sequence Basics\7f143119
+Node: Mapping over Sequences\7f146697
+Node: Sequence Functions\7f152551
+Node: Searching Sequences\7f158726
+Node: Sorting Sequences\7f161763
+Node: Lists\7f164311
+Node: List Functions\7f164736
+Node: Substitution of Expressions\7f168999
+Node: Lists as Sets\7f170885
+Node: Association Lists\7f174947
+Node: Hash Tables\7f176650
+Node: Structures\7f176870
+Node: Assertions\7f191653
+Node: Efficiency Concerns\7f194596
+Node: Common Lisp Compatibility\7f200923
+Node: Old CL Compatibility\7f204079
+Node: Porting Common Lisp\7f208462
+Node: Function Index\7f219475
+Node: Variable Index\7f230738
 \1f
 End Tag Table
index ccf40ba..0a0b284 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/custom.info, produced by Makeinfo version
-1.68 from the input file custom.texi.
+This is ../info/custom.info, produced by makeinfo version 4.0 from
+custom.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -58,7 +58,7 @@ Declaring Groups
 
    Use `defgroup' to declare new customization groups.
 
- - Function: defgroup SYMBOL MEMBERS DOC [KEYWORD VALUE]...
+ - Function: defgroup symbol members doc [keyword value]...
      Declare SYMBOL as a customization group containing MEMBERS.
      SYMBOL does not need to be quoted.
 
@@ -89,7 +89,7 @@ Declaring Variables
 
    Use `defcustom' to declare user editable variables.
 
- - Function: defcustom SYMBOL VALUE DOC [KEYWORD VALUE]...
+ - Function: defcustom symbol value doc [keyword value]...
      Declare SYMBOL as a customizable variable that defaults to VALUE.
      Neither SYMBOL nor VALUE needs to be quoted.  If SYMBOL is not
      already bound, initialize it to VALUE.
@@ -156,7 +156,7 @@ default value, `saved-value' for a value saved by the user, and
    Use `custom-add-option' to specify that a specific function is
 useful as an member of a hook.
 
- - Function: custom-add-option SYMBOL OPTION
+ - Function: custom-add-option symbol option
      To the variable SYMBOL add OPTION.
 
      If SYMBOL is a hook variable, OPTION should be a hook member.  For
@@ -170,7 +170,7 @@ Declaring Faces
 
    Faces are declared with `defface'.
 
- - Function: defface FACE SPEC DOC [KEYWORD VALUE]...
+ - Function: defface face spec doc [keyword value]...
      Declare FACE as a customizable face that defaults to SPEC.  FACE
      does not need to be quoted.
 
@@ -225,7 +225,7 @@ subgroups, with each subgroup being member of the top level group.
 
    The top level group for the package should itself be member of one or
 more of the standard customization groups.  There exists a group for
-each *finder* keyword.  Press `C-h p' to see a list of finder keywords,
+each _finder_ keyword.  Press `C-h p' to see a list of finder keywords,
 and add you group to each of them, using the `:group' keyword.
 
 \1f
@@ -240,18 +240,18 @@ Utilities
      Widget type for specifying the info manual entry for a
      customization option.  It takes one argument, an info address.
 
- - Function: custom-add-to-group GROUP MEMBER WIDGET
+ - Function: custom-add-to-group group member widget
      To existing GROUP add a new MEMBER of type WIDGET, If there
      already is an entry for that member, overwrite it.
 
- - Function: custom-add-link SYMBOL WIDGET
+ - Function: custom-add-link symbol widget
      To the custom option SYMBOL add the link WIDGET.
 
- - Function: custom-add-load SYMBOL LOAD
+ - Function: custom-add-load symbol load
      To the custom option SYMBOL add the dependency LOAD.  LOAD should
      be either a library file name, or a feature name.
 
- - Function: customize-menu-create SYMBOL &optional NAME
+ - Function: customize-menu-create symbol &optional name
      Create menu for customization group SYMBOL.  If optional NAME is
      given, use that as the name of the menu.  Otherwise the menu will
      be named `Customize'.  The menu is in a format applicable to
@@ -378,15 +378,16 @@ Wishlist
      Add colors.
 
 
+
 \1f
 Tag Table:
-Node: Top\7f230
-Node: Declaring Groups\7f1651
-Node: Declaring Variables\7f2752
-Node: Declaring Faces\7f5843
-Node: Usage for Package Authors\7f7541
-Node: Utilities\7f8320
-Node: The Init File\7f9404
-Node: Wishlist\7f9856
+Node: Top\7f204
+Node: Declaring Groups\7f1625
+Node: Declaring Variables\7f2726
+Node: Declaring Faces\7f5817
+Node: Usage for Package Authors\7f7515
+Node: Utilities\7f8294
+Node: The Init File\7f9378
+Node: Wishlist\7f9830
 \1f
 End Tag Table
index f81e90f..b04e884 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/emodules.info, produced by Makeinfo version
-1.68 from the input file emodules.texi.
+This is ../info/emodules.info, produced by makeinfo version 4.0 from
+emodules.texi.
 
    This file documents the module loading technology of XEmacs.
 
@@ -47,7 +47,7 @@ support documentation.
 * Defining Variables::          Creating new Lisp variables
 * Index::                       Concept Index
 
- -- The Detailed Node Listing --
+ --- The Detailed Node Listing ---
 
 Annatomy of a Module
 
@@ -244,7 +244,7 @@ place-holder, not an actual function name.
 `syms_of_module'
      This required function is responsible for introducing to the Lisp
      reader all functions that you have defined in your module using
-     `DEFUN()'.  Note that *only* functions are declared here, using
+     `DEFUN()'.  Note that _only_ functions are declared here, using
      the `DEFSUBR()' macro.  No variables are declared.
 
 `vars_of_module'
@@ -276,7 +276,7 @@ Required Variables
    Not only does a module need to declare the initialization functions
 mentioned above, it is also required to provide certain variables which
 the module loading code searches for in order to determine the viability
-of a module.  You are *not* required to provide these variables in your
+of a module.  You are _not_ required to provide these variables in your
 source files.  They are automatically set up in the module
 initialization file by the `ellcc' compiler.  These variables are
 discussed here simply for the sake of completeness.
@@ -820,7 +820,7 @@ initialization function using special XEmacs macros such as
 how to use these macros is to look at existing source code, or read the
 internals manual.
 
-   One *very* important difference between XEmacs variables and module
+   One _very_ important difference between XEmacs variables and module
 variables is how you use pure space.  Simply put, you *never* use pure
 space in XEmacs modules.  The pure space storage is of a limited size,
 and is initialized propperly during the dumping of XEmacs.  Because
@@ -930,23 +930,23 @@ Index
 
 \1f
 Tag Table:
-Node: Top\7f1562
-Node: Introduction\7f2908
-Node: Annatomy of a Module\7f7417
-Node: Required Header File\7f8233
-Node: Required Functions\7f10154
-Node: Required Variables\7f12403
-Node: Loading other Modules\7f15090
-Node: Using ellcc\7f17148
-Node: Compile Mode\7f18943
-Node: Initialization Mode\7f20311
-Node: Link Mode\7f25343
-Node: Other ellcc options\7f26490
-Node: Environment Variables\7f29070
-Node: Defining Functions\7f30761
-Node: Using DEFUN\7f32772
-Node: Declaring Functions\7f34483
-Node: Defining Variables\7f35826
-Node: Index\7f38071
+Node: Top\7f1536
+Node: Introduction\7f2884
+Node: Annatomy of a Module\7f7393
+Node: Required Header File\7f8209
+Node: Required Functions\7f10130
+Node: Required Variables\7f12379
+Node: Loading other Modules\7f15066
+Node: Using ellcc\7f17124
+Node: Compile Mode\7f18919
+Node: Initialization Mode\7f20287
+Node: Link Mode\7f25319
+Node: Other ellcc options\7f26466
+Node: Environment Variables\7f29046
+Node: Defining Functions\7f30737
+Node: Using DEFUN\7f32748
+Node: Declaring Functions\7f34459
+Node: Defining Variables\7f35802
+Node: Index\7f38047
 \1f
 End Tag Table
index def4c1b..e7ebc60 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/external-widget.info, produced by Makeinfo
-version 1.68 from the input file external-widget.texi.
+This is ../info/external-widget.info, produced by makeinfo version 4.0
+from external-widget.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -129,9 +129,9 @@ are not seen by Emacs.
 
 \1f
 Tag Table:
-Node: Top\7f258
-Node: Using an External Client Widget\7f688
-Node: External Client Widget Resource Settings\7f2403
-Node: Motif-Specific Info About the External Client Widget\7f5146
+Node: Top\7f232
+Node: Using an External Client Widget\7f662
+Node: External Client Widget Resource Settings\7f2377
+Node: Motif-Specific Info About the External Client Widget\7f5120
 \1f
 End Tag Table
index ff9d60e..17280e2 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/info.info, produced by Makeinfo version 1.68
-from the input file info.texi.
+This is ../info/info.info, produced by makeinfo version 4.0 from
+info.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
 START-INFO-DIR-ENTRY
@@ -9,7 +9,7 @@ END-INFO-DIR-ENTRY
    This file describes how to use Info, the on-line, menu-driven GNU
 documentation system.
 
-   Copyright (C) 1989, 92, 96, 97 Free Software Foundation, Inc.
+   Copyright (C) 1989, 92, 96, 97, 98, 99 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -36,15 +36,11 @@ Info: An Introduction
    To learn how to use Info, type the command `h'.  It brings you to a
 programmed instruction sequence.
 
-   To learn advanced Info commands, type `n' twice.  This brings you to
-`Info for Experts', skipping over the `Getting Started' chapter.
-
 * Menu:
 
 * Getting Started::             Getting started using an Info reader.
 * Advanced Info::               Advanced commands within Info.
-* Create an Info File::         How to make your own Info file.
-* The Standalone Info Program: (info-stnd.info).
+* Creating an Info File::       How to make your own Info file.
 
 \1f
 File: info.info,  Node: Getting Started,  Next: Advanced Info,  Prev: Top,  Up: Top
@@ -172,7 +168,7 @@ Another `n' command now would take you to the next node, `Help-^L'.
  you to the `Previous' node.  When you get there, you can do an    `n'
 again to return here.
 
-   This all probably seems insultingly simple so far, but *do not* be
+   This all probably seems insultingly simple so far, but _do not_ be
 led into skimming.  Things will get more complicated soon.  Also, do
 not try a new command until you are told it is time to.  Otherwise, you
 may make Info skip past an important warning that was coming up.
@@ -204,7 +200,7 @@ not anything above the top until you have typed some spaces).
 
    When you type the space, the two lines that were at the bottom of
 the screen appear at the top, followed by more lines.  Delete takes the
-two lines from the top and moves them to the bottom, *usually*, but if
+two lines from the top and moves them to the bottom, _usually_, but if
 there are not a full screen's worth of lines above them they may not
 make it all the way to the bottom.
 
@@ -298,8 +294,8 @@ actually visible in its node.  If you cannot find a menu in a node
 by looking at it, then the node does not have a menu and the    `m'
 command is not available.
 
-   The command to go to one of the subnodes is `m'--but *do not do it
-yet!*  Before you use `m', you must understand the difference between
+   The command to go to one of the subnodes is `m'--but _do not do it
+yet!_  Before you use `m', you must understand the difference between
 commands and arguments.  So far, you have learned several commands that
 do not need arguments.  When you type one, Info processes it and is
 instantly ready for another command.  The `m' command is different: it
@@ -338,16 +334,16 @@ what you have entered.
 not need to type the argument: you just type a Return, and it stands for
 the subtopic of the line you are on.
 
-   Here is a menu to give you a chance to practice.
-
-   * Menu:    The menu starts here.
+   Here is a menu to give you a chance to practice.  This menu gives you
+three ways of going to one place, Help-FOO:
 
-   This menu gives you three ways of going to one place, Help-FOO.
+* Menu:
 
-   * Foo:  Help-FOO.       A node you can visit for fun.
+* Foo:  Help-FOO.       A node you can visit for fun.
 * Bar:  Help-FOO.       Strange!  two ways to get to the same place.
 * Help-FOO::            And yet another!
->>  Now type just an `m' and see what happens:
+
+   >>  Now type just an `m' and see what happens:
 
    Now you are "inside" an `m' command.  Commands cannot be used now;
 the next thing you will type must be the name of a subtopic.
@@ -393,7 +389,7 @@ Menus move Down in the tree, and `Up' moves Up.  `Previous', on the
 other hand, is usually used to "stay on the same level but go backwards"
 
    You can go back to the node `Help-M' by typing the command `u' for
-"Up".  That puts you at the *front* of the node--to get back to where
+"Up".  That puts you at the _front_ of the node--to get back to where
 you were reading you have to type some <SPC>s.
 
    >> Now type `u' to move back up to `Help-M'.
@@ -423,7 +419,7 @@ back to `Help-M'.
 
    Then follow directions again and you will end up back here.
 
-   Note the difference between `l' and `p': `l' moves to where *you*
+   Note the difference between `l' and `p': `l' moves to where _you_
 last were, whereas `p' always moves to the node which the header says
 is the `Previous' node (from this node, to `Help-M').
 
@@ -432,7 +428,7 @@ node, which is the first one you saw when you entered Info, has a menu
 which leads (directly, or indirectly through other menus), to all the
 nodes that exist.
 
-   >> Try doing a `d', then do an `l' to return here (yes,    *do*
+   >> Try doing a `d', then do an `l' to return here (yes,    _do_
 return).
 
    Sometimes, in Info documentation, you will see a cross reference.
@@ -499,14 +495,14 @@ and Return, to get to the node about Info and    see what other help is
 available.
 
 \1f
-File: info.info,  Node: Advanced Info,  Next: Create an Info File,  Prev: Getting Started,  Up: Top
+File: info.info,  Node: Advanced Info,  Next: Creating an Info File,  Prev: Getting Started,  Up: Top
 
 Info for Experts
 ****************
 
    This chapter describes various advanced Info commands, and how to
 write an Info as distinct from a Texinfo file.  (However, in most
-cases, writing a Texinfo file is better, since you can use it *both* to
+cases, writing a Texinfo file is better, since you can use it _both_ to
 generate an Info file and to make a printed manual.  *Note Overview of
 Texinfo: (texinfo)Top.)
 
@@ -562,10 +558,10 @@ short for the `m' command together with an argument.  `1' goes through
 the first item in the current node's menu; `2' goes through the second
 item, etc.
 
-   If you display supports multiple fonts, and you are using Emacs' Info
-mode to read Info files, the `*' for the fifth menu item is underlines,
-and so is the `*' for the ninth item; these underlines make it easy to
-see at a glance which number to use for an item.
+   If your display supports multiple fonts, and you are using Emacs'
+Info mode to read Info files, the `*' for the fifth menu item is
+underlined, and so is the `*' for the ninth item; these underlines make
+it easy to see at a glance which number to use for an item.
 
    On ordinary terminals, you won't have underlining.  If you need to
 actually count items, it is better to use `m' instead, and specify the
@@ -587,7 +583,7 @@ Adding a new node to Info
 
   2. Put that topic in the menu in the directory.  *Note Menu: Menus.
 
-   Usually, the way to create the nodes is with Texinfo *note Overview
+   Usually, the way to create the nodes is with Texinfo (*note Overview
 of Texinfo: (texinfo)Top.); this has the advantage that you can also
 make a printed manual from them.  However, if you want to edit an Info
 file, here is how.
@@ -597,8 +593,8 @@ one.  It must have a <^_> character before it (invisible to the user;
 this node has one but you cannot see it), and it ends with either a
 <^_>, a <^L>, or the end of file.  Note: If you put in a <^L> to end a
 new node, be sure that there is a <^_> after it to start the next one,
-since <^L> cannot *start* a node.  Also, a nicer way to make a node
-boundary be a page boundary as well is to put a <^L> *right after* the
+since <^L> cannot _start_ a node.  Also, a nicer way to make a node
+boundary be a page boundary as well is to put a <^L> _right after_ the
 <^_>.
 
    The <^_> starting a node must be followed by a newline or a <^L>
@@ -634,10 +630,10 @@ make it possible to make old-fashioned, unstructured files into nodes
 of the tree.
 
    The `Node:' name, in which a node states its own name, must not
-contain a filename, since Info when searching for a node does not
-expect one to be there.  The `Next', `Previous' and `Up' names may
-contain them.  In this node, since the `Up' node is in the same file,
-it was not necessary to use one.
+contain a filename, since Info when searching for a node does not expect
+one to be there.  The `Next', `Previous' and `Up' names may contain
+them.  In this node, since the `Up' node is in the same file, it was
+not necessary to use one.
 
    Note that the nodes in this file have a file name in the header
 line.  The file names are ignored by Info, but they serve as comments
@@ -682,13 +678,13 @@ to see them all need not keep revisiting the Menu.
 
    The Info Directory is simply the menu of the node `(dir)Top'--that
 is, node `Top' in file `.../info/dir'.  You can put new entries in that
-menu just like any other menu.  The Info Directory is *not* the same as
+menu just like any other menu.  The Info Directory is _not_ the same as
 the file directory called `info'.  It happens that many of Info's files
 live on that file directory, but they do not have to; and files on that
 directory are not automatically listed in the Info Directory node.
 
    Also, although the Info node graph is claimed to be a "hierarchy",
-in fact it can be *any* directed graph.  Shared structures and pointer
+in fact it can be _any_ directed graph.  Shared structures and pointer
 cycles are perfectly possible, and can be used if they are appropriate
 to the meaning to be expressed.  There is no need for all the nodes in
 a file to form a connected structure.  In fact, this file has two
@@ -707,7 +703,7 @@ Creating Cross References
    A cross reference can be placed anywhere in the text, unlike a menu
 item which must go at the front of a line.  A cross reference looks
 like a menu item except that it has `*note' instead of `*'.  It
-*cannot* be terminated by a `)', because `)''s are so often part of
+_cannot_ be terminated by a `)', because `)''s are so often part of
 node names.  If you wish to enclose a cross reference in parentheses,
 terminate it with a period first.  Here are two examples of cross
 references pointers:
@@ -802,43 +798,42 @@ Setting Variables: (emacs)Examining.
      when the function `Info-directory' is called.
 
 \1f
-File: info.info,  Node: Create an Info File,  Prev: Advanced Info,  Up: Top
-
-Creating an Info File from a Makeinfo file
-******************************************
+File: info.info,  Node: Creating an Info File,  Prev: Advanced Info,  Up: Top
 
-   `makeinfo' is a utility that converts a Texinfo file into an Info
-file; `texinfo-format-region' and `texinfo-format-buffer' are GNU Emacs
-functions that do the same.
-
-   *Note Creating an Info File: (texinfo)Create an Info File, to learn
-how to create an Info file from a Texinfo file.
+Creating an Info File
+*********************
 
    *Note Overview of Texinfo: (texinfo)Top, to learn how to write a
 Texinfo file.
 
+   *Note Creating an Info File: (texinfo)Creating an Info File, to
+learn how to create an Info file from a Texinfo file.
+
+   *Note Installing an Info File: (texinfo)Installing an Info File, to
+learn how to install an Info file after you have created one.
+
 
 \1f
 Tag Table:
-Node: Top\7f1085
-Node: Getting Started\7f1770
-Node: Help-Small-Screen\7f2518
-Node: Help\7f4267
-Node: Help-P\7f5297
-Node: Help-^L\7f6159
-Node: Help-M\7f9037
-Node: Help-FOO\7f15047
-Node: Help-Adv\7f15785
-Node: Help-Cross\7f18460
-Node: Help-Q\7f19106
-Node: Advanced Info\7f19733
-Node: Expert\7f20709
-Node: Add\7f23222
-Node: Menus\7f26581
-Node: Cross-refs\7f29455
-Node: Tags\7f30157
-Node: Checking\7f31459
-Node: Emacs Info Variables\7f32412
-Node: Create an Info File\7f33401
+Node: Top\7f1067
+Node: Getting Started\7f1565
+Node: Help-Small-Screen\7f2313
+Node: Help\7f4062
+Node: Help-P\7f5092
+Node: Help-^L\7f5954
+Node: Help-M\7f8832
+Node: Help-FOO\7f14812
+Node: Help-Adv\7f15550
+Node: Help-Cross\7f18225
+Node: Help-Q\7f18871
+Node: Advanced Info\7f19498
+Node: Expert\7f20476
+Node: Add\7f22990
+Node: Menus\7f26350
+Node: Cross-refs\7f29224
+Node: Tags\7f29926
+Node: Checking\7f31228
+Node: Emacs Info Variables\7f32181
+Node: Creating an Info File\7f33170
 \1f
 End Tag Table
index c7464dc..0674c50 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/internals.info, produced by Makeinfo
-version 1.68 from the input file internals.texi.
+This is ../info/internals.info, produced by makeinfo version 4.0 from
+internals/internals.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -39,141 +39,141 @@ Foundation instead of in the original English.
 
 \1f
 Indirect:
-internals.info-1: 1789
-internals.info-2: 45943
-internals.info-3: 93017
-internals.info-4: 141389
-internals.info-5: 183420
-internals.info-6: 232841
-internals.info-7: 281571
-internals.info-8: 330967
+internals.info-1: 1770
+internals.info-2: 45926
+internals.info-3: 92999
+internals.info-4: 141365
+internals.info-5: 183396
+internals.info-6: 232817
+internals.info-7: 281547
+internals.info-8: 331004
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f1789
-Node: A History of Emacs\7f6369
-Node: Through Version 18\7f7894
-Node: Lucid Emacs\7f11315
-Node: GNU Emacs 19\7f14333
-Node: GNU Emacs 20\7f16516
-Node: XEmacs\7f16943
-Node: XEmacs From the Outside\7f20122
-Node: The Lisp Language\7f21890
-Node: XEmacs From the Perspective of Building\7f31435
-Node: XEmacs From the Inside\7f37560
-Node: The XEmacs Object System (Abstractly Speaking)\7f45943
-Node: How Lisp Objects Are Represented in C\7f60031
-Node: Rules When Writing New C Code\7f68593
-Node: General Coding Rules\7f69397
-Node: Writing Lisp Primitives\7f74557
-Node: Adding Global Lisp Variables\7f85727
-Node: Coding for Mule\7f89365
-Node: Character-Related Data Types\7f90344
-Node: Working With Character and Byte Positions\7f93017
-Node: Conversion to and from External Data\7f96767
-Node: General Guidelines for Writing Mule-Aware Code\7f101648
-Node: An Example of Mule-Aware Code\7f103679
-Node: Techniques for XEmacs Developers\7f105666
-Node: A Summary of the Various XEmacs Modules\7f109437
-Node: Low-Level Modules\7f110257
-Node: Basic Lisp Modules\7f117779
-Node: Modules for Standard Editing Operations\7f126103
-Node: Editor-Level Control Flow Modules\7f131991
-Node: Modules for the Basic Displayable Lisp Objects\7f135438
-Node: Modules for other Display-Related Lisp Objects\7f137960
-Node: Modules for the Redisplay Mechanism\7f139038
-Node: Modules for Interfacing with the File System\7f141389
-Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145087
-Node: Modules for Interfacing with the Operating System\7f150541
-Node: Modules for Interfacing with X Windows\7f158202
-Node: Modules for Internationalization\7f161638
-Node: Allocation of Objects in XEmacs Lisp\7f164275
-Node: Introduction to Allocation\7f164829
-Node: Garbage Collection\7f170292
-Node: GCPROing\7f173245
-Node: Garbage Collection - Step by Step\7f180056
-Node: Invocation\7f180448
-Node: garbage_collect_1\7f183420
-Node: mark_object\7f192900
-Node: gc_sweep\7f194712
-Node: sweep_lcrecords_1\7f199775
-Node: compact_string_chars\7f200770
-Node: sweep_strings\7f202950
-Node: sweep_bit_vectors_1\7f203915
-Node: Integers and Characters\7f204591
-Node: Allocation from Frob Blocks\7f205343
-Node: lrecords\7f206947
-Node: Low-level allocation\7f219409
-Node: Pure Space\7f223577
-Node: Cons\7f223752
-Node: Vector\7f224468
-Node: Bit Vector\7f225045
-Node: Symbol\7f225538
-Node: Marker\7f226107
-Node: String\7f226662
-Node: Compiled Function\7f230277
-Node: Events and the Event Loop\7f230446
-Node: Introduction to Events\7f230925
-Node: Main Loop\7f232841
-Node: Specifics of the Event Gathering Mechanism\7f236417
-Node: Specifics About the Emacs Event\7f248870
-Node: The Event Stream Callback Routines\7f249125
-Node: Other Event Loop Functions\7f249370
-Node: Converting Events\7f250510
-Node: Dispatching Events; The Command Builder\7f251119
-Node: Evaluation; Stack Frames; Bindings\7f251354
-Node: Evaluation\7f251696
-Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258236
-Node: Simple Special Forms\7f260620
-Node: Catch and Throw\7f261402
-Node: Symbols and Variables\7f263977
-Node: Introduction to Symbols\7f264241
-Node: Obarrays\7f265279
-Node: Symbol Values\7f268812
-Node: Buffers and Textual Representation\7f271100
-Node: Introduction to Buffers\7f271758
-Node: The Text in a Buffer\7f274421
-Node: Buffer Lists\7f281571
-Node: Markers and Extents\7f283522
-Node: Bufbytes and Emchars\7f285787
-Node: The Buffer Object\7f286002
-Node: MULE Character Sets and Encodings\7f289482
-Node: Character Sets\7f290544
-Node: Encodings\7f293987
-Node: Japanese EUC (Extended Unix Code)\7f295054
-Node: JIS7\7f295868
-Node: Internal Mule Encodings\7f297218
-Node: Internal String Encoding\7f299048
-Node: Internal Character Encoding\7f301161
-Node: CCL\7f302885
-Node: The Lisp Reader and Compiler\7f309637
-Node: Lstreams\7f309850
-Node: Creating an Lstream\7f310881
-Node: Lstream Types\7f312091
-Node: Lstream Functions\7f312343
-Node: Lstream Methods\7f315865
-Node: Consoles; Devices; Frames; Windows\7f318994
-Node: Introduction to Consoles; Devices; Frames; Windows\7f319309
-Node: Point\7f321801
-Node: Window Hierarchy\7f323080
-Node: The Window Object\7f327530
-Node: The Redisplay Mechanism\7f330967
-Node: Critical Redisplay Sections\7f331759
-Node: Line Start Cache\7f332714
-Node: Redisplay Piece by Piece\7f335951
-Node: Extents\7f337987
-Node: Introduction to Extents\7f338525
-Node: Extent Ordering\7f339651
-Node: Format of the Extent Info\7f340892
-Node: Zero-Length Extents\7f342780
-Node: Mathematics of Extent Ordering\7f344178
-Node: Extent Fragments\7f348935
-Node: Faces\7f350022
-Node: Glyphs\7f350138
-Node: Specifiers\7f353156
-Node: Menus\7f353285
-Node: Subprocesses\7f355543
-Node: Interface to X Windows\7f357519
-Node: Index\7f357690
+Node: Top\7f1770
+Node: A History of Emacs\7f6352
+Node: Through Version 18\7f7877
+Node: Lucid Emacs\7f11298
+Node: GNU Emacs 19\7f14316
+Node: GNU Emacs 20\7f16499
+Node: XEmacs\7f16926
+Node: XEmacs From the Outside\7f20105
+Node: The Lisp Language\7f21873
+Node: XEmacs From the Perspective of Building\7f31418
+Node: XEmacs From the Inside\7f37543
+Node: The XEmacs Object System (Abstractly Speaking)\7f45926
+Node: How Lisp Objects Are Represented in C\7f60014
+Node: Rules When Writing New C Code\7f68576
+Node: General Coding Rules\7f69380
+Node: Writing Lisp Primitives\7f74540
+Node: Adding Global Lisp Variables\7f85709
+Node: Coding for Mule\7f89347
+Node: Character-Related Data Types\7f90326
+Node: Working With Character and Byte Positions\7f92999
+Node: Conversion to and from External Data\7f96749
+Node: General Guidelines for Writing Mule-Aware Code\7f101630
+Node: An Example of Mule-Aware Code\7f103661
+Node: Techniques for XEmacs Developers\7f105648
+Node: A Summary of the Various XEmacs Modules\7f109413
+Node: Low-Level Modules\7f110233
+Node: Basic Lisp Modules\7f117755
+Node: Modules for Standard Editing Operations\7f126079
+Node: Editor-Level Control Flow Modules\7f131967
+Node: Modules for the Basic Displayable Lisp Objects\7f135414
+Node: Modules for other Display-Related Lisp Objects\7f137936
+Node: Modules for the Redisplay Mechanism\7f139014
+Node: Modules for Interfacing with the File System\7f141365
+Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145063
+Node: Modules for Interfacing with the Operating System\7f150517
+Node: Modules for Interfacing with X Windows\7f158178
+Node: Modules for Internationalization\7f161614
+Node: Allocation of Objects in XEmacs Lisp\7f164251
+Node: Introduction to Allocation\7f164805
+Node: Garbage Collection\7f170268
+Node: GCPROing\7f173221
+Node: Garbage Collection - Step by Step\7f180032
+Node: Invocation\7f180424
+Node: garbage_collect_1\7f183396
+Node: mark_object\7f192876
+Node: gc_sweep\7f194688
+Node: sweep_lcrecords_1\7f199751
+Node: compact_string_chars\7f200746
+Node: sweep_strings\7f202926
+Node: sweep_bit_vectors_1\7f203891
+Node: Integers and Characters\7f204567
+Node: Allocation from Frob Blocks\7f205319
+Node: lrecords\7f206923
+Node: Low-level allocation\7f219385
+Node: Pure Space\7f223553
+Node: Cons\7f223728
+Node: Vector\7f224444
+Node: Bit Vector\7f225021
+Node: Symbol\7f225514
+Node: Marker\7f226083
+Node: String\7f226638
+Node: Compiled Function\7f230253
+Node: Events and the Event Loop\7f230422
+Node: Introduction to Events\7f230901
+Node: Main Loop\7f232817
+Node: Specifics of the Event Gathering Mechanism\7f236393
+Node: Specifics About the Emacs Event\7f248846
+Node: The Event Stream Callback Routines\7f249101
+Node: Other Event Loop Functions\7f249346
+Node: Converting Events\7f250486
+Node: Dispatching Events; The Command Builder\7f251095
+Node: Evaluation; Stack Frames; Bindings\7f251330
+Node: Evaluation\7f251672
+Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258212
+Node: Simple Special Forms\7f260596
+Node: Catch and Throw\7f261378
+Node: Symbols and Variables\7f263953
+Node: Introduction to Symbols\7f264217
+Node: Obarrays\7f265255
+Node: Symbol Values\7f268788
+Node: Buffers and Textual Representation\7f271076
+Node: Introduction to Buffers\7f271734
+Node: The Text in a Buffer\7f274397
+Node: Buffer Lists\7f281547
+Node: Markers and Extents\7f283498
+Node: Bufbytes and Emchars\7f285763
+Node: The Buffer Object\7f285978
+Node: MULE Character Sets and Encodings\7f289458
+Node: Character Sets\7f290520
+Node: Encodings\7f293963
+Node: Japanese EUC (Extended Unix Code)\7f295030
+Node: JIS7\7f295844
+Node: Internal Mule Encodings\7f297194
+Node: Internal String Encoding\7f299024
+Node: Internal Character Encoding\7f301137
+Node: CCL\7f302861
+Node: The Lisp Reader and Compiler\7f309613
+Node: Lstreams\7f309826
+Node: Creating an Lstream\7f310857
+Node: Lstream Types\7f312067
+Node: Lstream Functions\7f312319
+Node: Lstream Methods\7f315888
+Node: Consoles; Devices; Frames; Windows\7f319031
+Node: Introduction to Consoles; Devices; Frames; Windows\7f319346
+Node: Point\7f321838
+Node: Window Hierarchy\7f323117
+Node: The Window Object\7f327567
+Node: The Redisplay Mechanism\7f331004
+Node: Critical Redisplay Sections\7f331796
+Node: Line Start Cache\7f332751
+Node: Redisplay Piece by Piece\7f335988
+Node: Extents\7f338024
+Node: Introduction to Extents\7f338562
+Node: Extent Ordering\7f339688
+Node: Format of the Extent Info\7f340929
+Node: Zero-Length Extents\7f342817
+Node: Mathematics of Extent Ordering\7f344215
+Node: Extent Fragments\7f348972
+Node: Faces\7f350059
+Node: Glyphs\7f350175
+Node: Specifiers\7f353193
+Node: Menus\7f353322
+Node: Subprocesses\7f355580
+Node: Interface to X Windows\7f357556
+Node: Index\7f357727
 \1f
 End Tag Table
index c43d904..5768b91 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/internals.info, produced by Makeinfo
-version 1.68 from the input file internals.texi.
+This is ../info/internals.info, produced by makeinfo version 4.0 from
+internals/internals.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -73,7 +73,7 @@ File: internals.info,  Node: Top,  Next: A History of Emacs,  Prev: (dir),  Up:
 * Index::                   Index including concepts, functions, variables,
                               and other terms.
 
-      -- The Detailed Node Listing --
+      --- The Detailed Node Listing ---
 
 Here are other nodes that are inferiors of those already listed,
 mentioned here so you can get to them in one step:
@@ -886,7 +886,7 @@ for easy upgrading of parts of a system without upgrading the rest.  It
 would be impossible to pre-determine and pre-specify the information for
 all possible configurations.
 
-   In fact, the `s/' and `m/' files are basically *evil*, since they
+   In fact, the `s/' and `m/' files are basically _evil_, since they
 contain unmaintainable platform-specific hard-coded information.
 XEmacs has been moving in the direction of having all system-specific
 information be determined dynamically by `configure'.  Perhaps someday
@@ -897,7 +897,7 @@ we can `rm -rf src/s src/m'.
 features of your system) from template files.  You then run `make',
 which compiles the auxiliary code and programs in `lib-src/' and
 `lwlib/' and the main XEmacs executable in `src/'.  The result of
-compiling and linking is an executable called `temacs', which is *not*
+compiling and linking is an executable called `temacs', which is _not_
 the final XEmacs executable.  `temacs' by itself is not intended to
 function as an editor or even display any windows on the screen, and if
 you simply run it, it will exit immediately.  The `Makefile' runs
index 8d78cb4..0ae8e55 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/internals.info, produced by Makeinfo
-version 1.68 from the input file internals.texi.
+This is ../info/internals.info, produced by makeinfo version 4.0 from
+internals/internals.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -286,7 +286,7 @@ but detached extents (extents not referring to any text, as happens to
 some extents when the text they are referring to is deleted) are
 temporary.  Note that some permanent objects, such as faces and coding
 systems, cannot be deleted.  Note also that windows are unique in that
-they can be *undeleted* after having previously been deleted. (This
+they can be _undeleted_ after having previously been deleted. (This
 happens as a result of restoring a window configuration.)
 
    Note that many types of objects have a "read syntax", i.e. a way of
@@ -493,7 +493,7 @@ advantages:
 
   1. 31 bits can be used for Lisp Integers.
 
-  2. *Any* pointer can be represented directly, and no bit masking
+  2. _Any_ pointer can be represented directly, and no bit masking
      operations are necessary.
 
    The disadvantages are:
@@ -535,7 +535,7 @@ have to be a statement rather than just used in an expression.  The
 reason for this is that standard C doesn't let you "construct" a
 structure (but GCC does).  Granted, this sometimes isn't too convenient;
 for the case of integers, at least, you can use the function
-`make_int()', which constructs and *returns* an integer Lisp object.
+`make_int()', which constructs and _returns_ an integer Lisp object.
 Note that the `XSETTYPE()' macros are also affected by
 `ERROR_CHECK_TYPECHECK' and make sure that the structure is of the
 right type in the case of record types, where the type is contained in
@@ -870,7 +870,7 @@ call the C function.
 
    Defining the C function is not enough to make a Lisp primitive
 available; you must also create the Lisp symbol for the primitive (the
-symbol is "interned"; *note Obarrays::.) and store a suitable subr
+symbol is "interned"; *note Obarrays::) and store a suitable subr
 object in its function cell. (If you don't do this, the primitive won't
 be seen by Lisp code.) The code looks like this:
 
@@ -956,7 +956,7 @@ variable gets changed.
 
    Whether or not you `DEFVAR_LISP()' a variable, you need to
 initialize it in the `vars_of_*()' function; otherwise it will end up
-as all zeroes, which is the integer 0 (*not* `nil'), and this is
+as all zeroes, which is the integer 0 (_not_ `nil'), and this is
 probably not what you want.  Also, if the variable is not
 `DEFVAR_LISP()'ed, *you must call* `staticpro()' on the C variable in
 the `vars_of_*()' function.  Otherwise, the garbage-collection
index b7c31a9..360182b 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -51,836 +51,838 @@ Foundation instead of in the original English.
 
 \1f
 Indirect:
-lispref.info-1: 2387
-lispref.info-2: 48394
-lispref.info-3: 96933
-lispref.info-4: 146792
-lispref.info-5: 195517
-lispref.info-6: 243211
-lispref.info-7: 291472
-lispref.info-8: 340630
-lispref.info-9: 387982
-lispref.info-10: 436629
-lispref.info-11: 484512
-lispref.info-12: 531109
-lispref.info-13: 579014
-lispref.info-14: 627229
-lispref.info-15: 675480
-lispref.info-16: 724640
-lispref.info-17: 771866
-lispref.info-18: 818656
-lispref.info-19: 865712
-lispref.info-20: 914446
-lispref.info-21: 963810
-lispref.info-22: 1010651
-lispref.info-23: 1057664
-lispref.info-24: 1107066
-lispref.info-25: 1156744
-lispref.info-26: 1206642
-lispref.info-27: 1255865
-lispref.info-28: 1304640
-lispref.info-29: 1353618
-lispref.info-30: 1394929
-lispref.info-31: 1444081
-lispref.info-32: 1493295
-lispref.info-33: 1542879
-lispref.info-34: 1591063
-lispref.info-35: 1636699
-lispref.info-36: 1678018
-lispref.info-37: 1722965
-lispref.info-38: 1772661
-lispref.info-39: 1821723
-lispref.info-40: 1871108
-lispref.info-41: 1921004
-lispref.info-42: 1969995
-lispref.info-43: 2014504
-lispref.info-44: 2052883
+lispref.info-1: 2366
+lispref.info-2: 48385
+lispref.info-3: 96924
+lispref.info-4: 146766
+lispref.info-5: 195600
+lispref.info-6: 243285
+lispref.info-7: 291568
+lispref.info-8: 340704
+lispref.info-9: 388026
+lispref.info-10: 436665
+lispref.info-11: 484608
+lispref.info-12: 531220
+lispref.info-13: 579119
+lispref.info-14: 627342
+lispref.info-15: 675596
+lispref.info-16: 724798
+lispref.info-17: 772038
+lispref.info-18: 818888
+lispref.info-19: 865939
+lispref.info-20: 914669
+lispref.info-21: 964091
+lispref.info-22: 1011010
+lispref.info-23: 1058037
+lispref.info-24: 1107436
+lispref.info-25: 1157118
+lispref.info-26: 1207028
+lispref.info-27: 1256251
+lispref.info-28: 1305018
+lispref.info-29: 1353990
+lispref.info-30: 1395325
+lispref.info-31: 1444468
+lispref.info-32: 1493681
+lispref.info-33: 1543255
+lispref.info-34: 1591432
+lispref.info-35: 1637064
+lispref.info-36: 1678380
+lispref.info-37: 1723321
+lispref.info-38: 1773008
+lispref.info-39: 1822112
+lispref.info-40: 1871516
+lispref.info-41: 1921400
+lispref.info-42: 1970391
+lispref.info-43: 2014283
+lispref.info-44: 2052619
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f2387
-Node: Copying\7f48394
-Node: Introduction\7f67552
-Node: Caveats\7f69143
-Node: Lisp History\7f70872
-Node: Conventions\7f72128
-Node: Some Terms\7f72943
-Node: nil and t\7f73664
-Node: Evaluation Notation\7f75341
-Node: Printing Notation\7f76254
-Node: Error Messages\7f77128
-Node: Buffer Text Notation\7f77569
-Node: Format of Descriptions\7f78444
-Node: A Sample Function Description\7f79298
-Node: A Sample Variable Description\7f83284
-Node: Acknowledgements\7f84192
-Node: Lisp Data Types\7f86170
-Node: Printed Representation\7f88725
-Node: Comments\7f90768
-Node: Primitive Types\7f91666
-Node: Programming Types\7f93325
-Node: Integer Type\7f95277
-Node: Floating Point Type\7f96314
-Node: Character Type\7f96933
-Node: Symbol Type\7f104839
-Node: Sequence Type\7f107534
-Node: Cons Cell Type\7f109055
-Node: Dotted Pair Notation\7f113538
-Node: Association List Type\7f115659
-Node: Array Type\7f116542
-Node: String Type\7f118008
-Node: Vector Type\7f120689
-Node: Bit Vector Type\7f121461
-Node: Function Type\7f122323
-Node: Macro Type\7f123439
-Node: Primitive Function Type\7f124136
-Node: Compiled-Function Type\7f125663
-Node: Autoload Type\7f126217
-Node: Char Table Type\7f127231
-Node: Hash Table Type\7f127405
-Node: Range Table Type\7f128560
-Node: Weak List Type\7f129413
-Node: Editing Types\7f129563
-Node: Buffer Type\7f131190
-Node: Marker Type\7f133226
-Node: Extent Type\7f133950
-Node: Window Type\7f135218
-Node: Frame Type\7f136629
-Node: Device Type\7f137424
-Node: Console Type\7f138250
-Node: Window Configuration Type\7f139451
-Node: Event Type\7f140149
-Node: Process Type\7f140313
-Node: Stream Type\7f141348
-Node: Keymap Type\7f142473
-Node: Syntax Table Type\7f143011
-Node: Display Table Type\7f144035
-Node: Database Type\7f144474
-Node: Charset Type\7f144640
-Node: Coding System Type\7f144804
-Node: ToolTalk Message Type\7f144988
-Node: ToolTalk Pattern Type\7f145187
-Node: Window-System Types\7f145359
-Node: Face Type\7f146505
-Node: Glyph Type\7f146636
-Node: Specifier Type\7f146792
-Node: Font Instance Type\7f146965
-Node: Color Instance Type\7f147155
-Node: Image Instance Type\7f147352
-Node: Toolbar Button Type\7f147550
-Node: Subwindow Type\7f147743
-Node: X Resource Type\7f147922
-Node: Type Predicates\7f148075
-Node: Equality Predicates\7f157205
-Node: Numbers\7f162010
-Node: Integer Basics\7f163465
-Node: Float Basics\7f165815
-Node: Predicates on Numbers\7f167557
-Node: Comparison of Numbers\7f169190
-Node: Numeric Conversions\7f173011
-Node: Arithmetic Operations\7f174477
-Node: Rounding Operations\7f179942
-Node: Bitwise Operations\7f181047
-Node: Math Functions\7f189982
-Node: Random Numbers\7f192298
-Node: Strings and Characters\7f194064
-Node: String Basics\7f195517
-Node: Predicates for Strings\7f197939
-Node: Creating Strings\7f198702
-Node: Predicates for Characters\7f204030
-Node: Character Codes\7f205101
-Node: Text Comparison\7f206514
-Node: String Conversion\7f209876
-Node: Modifying Strings\7f213554
-Node: String Properties\7f214195
-Node: Formatting Strings\7f214838
-Node: Character Case\7f224446
-Node: Case Tables\7f227593
-Node: Char Tables\7f231492
-Node: Char Table Types\7f232884
-Node: Working With Char Tables\7f234459
-Node: Lists\7f236408
-Node: Cons Cells\7f237531
-Node: Lists as Boxes\7f238867
-Node: List-related Predicates\7f241509
-Node: List Elements\7f243211
-Node: Building Lists\7f248240
-Node: Modifying Lists\7f254235
-Node: Setcar\7f255047
-Node: Setcdr\7f257468
-Node: Rearrangement\7f259978
-Node: Sets And Lists\7f265537
-Node: Association Lists\7f269766
-Node: Property Lists\7f279267
-Node: Working With Normal Plists\7f280815
-Node: Working With Lax Plists\7f283083
-Node: Converting Plists To/From Alists\7f285323
-Node: Weak Lists\7f286671
-Node: Sequences Arrays Vectors\7f288836
-Node: Sequence Functions\7f291472
-Node: Arrays\7f295133
-Node: Array Functions\7f298198
-Node: Vectors\7f300731
-Node: Vector Functions\7f302229
-Node: Bit Vectors\7f304803
-Node: Bit Vector Functions\7f305648
-Node: Symbols\7f307899
-Node: Symbol Components\7f308948
-Node: Definitions\7f313127
-Node: Creating Symbols\7f315352
-Node: Symbol Properties\7f322390
-Node: Plists and Alists\7f323906
-Node: Symbol Plists\7f325656
-Node: Other Plists\7f327466
-Node: Evaluation\7f329244
-Node: Intro Eval\7f330049
-Node: Eval\7f333540
-Node: Forms\7f337960
-Node: Self-Evaluating Forms\7f339117
-Node: Symbol Forms\7f340630
-Node: Classifying Lists\7f341547
-Node: Function Indirection\7f342303
-Node: Function Forms\7f345418
-Node: Macro Forms\7f346417
-Node: Special Forms\7f348017
-Node: Autoloading\7f350351
-Node: Quoting\7f350849
-Node: Control Structures\7f352212
-Node: Sequencing\7f353834
-Node: Conditionals\7f356699
-Node: Combining Conditions\7f360122
-Node: Iteration\7f363392
-Node: Nonlocal Exits\7f365177
-Node: Catch and Throw\7f365879
-Node: Examples of Catch\7f369723
-Node: Errors\7f371742
-Node: Signaling Errors\7f373231
-Node: Processing of Errors\7f376299
-Node: Handling Errors\7f377629
-Node: Error Symbols\7f384535
-Node: Cleanups\7f387982
-Node: Variables\7f391762
-Node: Global Variables\7f393531
-Node: Constant Variables\7f394607
-Node: Local Variables\7f395233
-Node: Void Variables\7f400177
-Node: Defining Variables\7f403688
-Node: Accessing Variables\7f410853
-Node: Setting Variables\7f412279
-Node: Variable Scoping\7f416798
-Node: Scope\7f418397
-Node: Extent\7f419922
-Node: Impl of Scope\7f421401
-Node: Using Scoping\7f423364
-Node: Buffer-Local Variables\7f424886
-Node: Intro to Buffer-Local\7f425722
-Node: Creating Buffer-Local\7f428265
-Node: Default Value\7f433485
-Node: Variable Aliases\7f436629
-Node: Functions\7f438415
-Node: What Is a Function\7f439509
-Node: Lambda Expressions\7f443556
-Node: Lambda Components\7f444466
-Node: Simple Lambda\7f446298
-Node: Argument List\7f447957
-Node: Function Documentation\7f451685
-Node: Function Names\7f453627
-Node: Defining Functions\7f456201
-Node: Calling Functions\7f459243
-Node: Mapping Functions\7f463092
-Node: Anonymous Functions\7f465445
-Node: Function Cells\7f468690
-Node: Inline Functions\7f473500
-Node: Related Topics\7f475310
-Node: Macros\7f476363
-Node: Simple Macro\7f477647
-Node: Expansion\7f478382
-Node: Compiling Macros\7f481356
-Node: Defining Macros\7f483194
-Node: Backquote\7f484512
-Node: Problems with Macros\7f486910
-Node: Argument Evaluation\7f487605
-Node: Surprising Local Vars\7f490506
-Node: Eval During Expansion\7f492574
-Node: Repeated Expansion\7f494268
-Node: Customization\7f496179
-Node: Common Keywords\7f496648
-Node: Group Definitions\7f499493
-Node: Variable Definitions\7f501686
-Node: Customization Types\7f506669
-Node: Simple Types\7f508105
-Node: Composite Types\7f510262
-Node: Splicing into Lists\7f514952
-Node: Type Keywords\7f516787
-Node: Loading\7f520307
-Node: How Programs Do Loading\7f521980
-Node: Autoload\7f531109
-Node: Repeated Loading\7f537189
-Node: Named Features\7f539303
-Node: Unloading\7f545736
-Node: Hooks for Loading\7f547892
-Node: Byte Compilation\7f548609
-Node: Speed of Byte-Code\7f550526
-Node: Compilation Functions\7f551733
-Node: Docs and Compilation\7f558122
-Node: Dynamic Loading\7f560775
-Node: Eval During Compile\7f563139
-Node: Compiled-Function Objects\7f564404
-Node: Disassembly\7f569203
-Node: Debugging\7f576457
-Node: Debugger\7f577869
-Node: Error Debugging\7f579014
-Node: Infinite Loops\7f581767
-Node: Function Debugging\7f583011
-Node: Explicit Debug\7f585801
-Node: Using Debugger\7f586573
-Node: Debugger Commands\7f588437
-Node: Invoking the Debugger\7f592754
-Node: Internals of Debugger\7f596669
-Node: Syntax Errors\7f601546
-Node: Excess Open\7f602794
-Node: Excess Close\7f604669
-Node: Compilation Errors\7f606090
-Node: Edebug\7f607378
-Node: Using Edebug\7f609485
-Node: Instrumenting\7f612182
-Node: Edebug Execution Modes\7f615671
-Node: Jumping\7f618781
-Node: Edebug Misc\7f621124
-Node: Breakpoints\7f622513
-Node: Global Break Condition\7f625319
-Node: Embedded Breakpoints\7f626274
-Node: Trapping Errors\7f627229
-Node: Edebug Views\7f629305
-Node: Edebug Eval\7f631270
-Node: Eval List\7f632447
-Node: Reading in Edebug\7f635832
-Node: Printing in Edebug\7f636631
-Node: Tracing\7f638346
-Node: Coverage Testing\7f640232
-Node: The Outside Context\7f642273
-Node: Checking Whether to Stop\7f643222
-Node: Edebug Display Update\7f643868
-Node: Edebug Recursive Edit\7f645890
-Node: Instrumenting Macro Calls\7f647544
-Node: Specification List\7f650026
-Node: Backtracking\7f659437
-Node: Debugging Backquote\7f661375
-Node: Specification Examples\7f665081
-Node: Edebug Options\7f667148
-Node: Read and Print\7f672485
-Node: Streams Intro\7f673462
-Node: Input Streams\7f675480
-Node: Input Functions\7f680381
-Node: Output Streams\7f682441
-Node: Output Functions\7f686493
-Node: Output Variables\7f690793
-Node: Minibuffers\7f695592
-Node: Intro to Minibuffers\7f696677
-Node: Text from Minibuffer\7f699005
-Node: Object from Minibuffer\7f703668
-Node: Minibuffer History\7f706865
-Node: Completion\7f709775
-Node: Basic Completion\7f711750
-Node: Minibuffer Completion\7f716757
-Node: Completion Commands\7f719992
-Node: High-Level Completion\7f724640
-Node: Reading File Names\7f728664
-Node: Programmed Completion\7f732353
-Node: Yes-or-No Queries\7f734563
-Node: Multiple Queries\7f740259
-Node: Minibuffer Misc\7f744324
-Node: Command Loop\7f749193
-Node: Command Overview\7f750539
-Node: Defining Commands\7f753823
-Node: Using Interactive\7f754571
-Node: Interactive Codes\7f759345
-Node: Interactive Examples\7f765149
-Node: Interactive Call\7f766463
-Node: Command Loop Info\7f771866
-Node: Events\7f776845
-Node: Event Types\7f778305
-Node: Event Contents\7f780228
-Node: Event Predicates\7f784704
-Node: Accessing Mouse Event Positions\7f786029
-Node: Frame-Level Event Position Info\7f786728
-Node: Window-Level Event Position Info\7f787768
-Node: Event Text Position Info\7f789532
-Node: Event Glyph Position Info\7f792024
-Node: Event Toolbar Position Info\7f793347
-Node: Other Event Position Info\7f794018
-Node: Accessing Other Event Info\7f794427
-Node: Working With Events\7f796047
-Node: Converting Events\7f801975
-Node: Reading Input\7f804928
-Node: Key Sequence Input\7f805930
-Node: Reading One Event\7f807884
-Node: Dispatching an Event\7f810645
-Node: Quoted Character Input\7f811096
-Node: Peeking and Discarding\7f812444
-Node: Waiting\7f816348
-Node: Quitting\7f818656
-Node: Prefix Command Arguments\7f823064
-Node: Recursive Editing\7f828151
-Node: Disabling Commands\7f832948
-Node: Command History\7f835016
-Node: Keyboard Macros\7f836755
-Node: Keymaps\7f838973
-Node: Keymap Terminology\7f840550
-Node: Format of Keymaps\7f843480
-Node: Creating Keymaps\7f843891
-Node: Inheritance and Keymaps\7f845970
-Node: Key Sequences\7f848342
-Node: Prefix Keys\7f852912
-Node: Active Keymaps\7f856497
-Node: Key Lookup\7f865712
-Node: Functions for Key Lookup\7f870876
-Node: Changing Key Bindings\7f876579
-Node: Key Binding Commands\7f883466
-Node: Scanning Keymaps\7f885532
-Node: Other Keymap Functions\7f894044
-Node: Menus\7f894666
-Node: Menu Format\7f895208
-Node: Menubar Format\7f903793
-Node: Menubar\7f904418
-Node: Modifying Menus\7f907532
-Node: Menu Filters\7f912550
-Node: Pop-Up Menus\7f914446
-Node: Menu Accelerators\7f916652
-Node: Creating Menu Accelerators\7f917374
-Node: Keyboard Menu Traversal\7f918692
-Node: Menu Accelerator Functions\7f919419
-Node: Buffers Menu\7f922454
-Node: Dialog Boxes\7f923748
-Node: Dialog Box Format\7f923915
-Node: Dialog Box Functions\7f925285
-Node: Toolbar\7f925683
-Node: Toolbar Intro\7f926008
-Node: Toolbar Descriptor Format\7f928419
-Node: Specifying the Toolbar\7f932913
-Node: Other Toolbar Variables\7f936521
-Node: Scrollbars\7f940948
-Node: Drag and Drop\7f941084
-Node: Supported Protocols\7f942160
-Node: OffiX DND\7f942663
-Node: CDE dt\7f943670
-Node: MSWindows OLE\7f944261
-Node: Loose ends\7f944432
-Node: Drop Interface\7f944824
-Node: Drag Interface\7f945846
-Node: Modes\7f946020
-Node: Major Modes\7f946971
-Node: Major Mode Conventions\7f949887
-Node: Example Major Modes\7f955842
-Node: Auto Major Mode\7f963810
-Node: Mode Help\7f971260
-Node: Derived Modes\7f972361
-Node: Minor Modes\7f974552
-Node: Minor Mode Conventions\7f975854
-Node: Keymaps and Minor Modes\7f978718
-Node: Modeline Format\7f979553
-Node: Modeline Data\7f981322
-Node: Modeline Variables\7f985594
-Node: %-Constructs\7f990310
-Node: Hooks\7f993221
-Node: Documentation\7f999985
-Node: Documentation Basics\7f1001408
-Node: Accessing Documentation\7f1004460
-Node: Keys in Documentation\7f1010651
-Node: Describing Characters\7f1014114
-Node: Help Functions\7f1016468
-Node: Obsoleteness\7f1022911
-Node: Files\7f1025905
-Node: Visiting Files\7f1027830
-Node: Visiting Functions\7f1029335
-Node: Subroutines of Visiting\7f1034383
-Node: Saving Buffers\7f1036459
-Node: Reading from Files\7f1042552
-Node: Writing to Files\7f1044709
-Node: File Locks\7f1047426
-Node: Information about Files\7f1050479
-Node: Testing Accessibility\7f1051240
-Node: Kinds of Files\7f1054980
-Node: Truenames\7f1056661
-Node: File Attributes\7f1057664
-Node: Changing File Attributes\7f1062804
-Node: File Names\7f1068210
-Node: File Name Components\7f1069819
-Node: Directory Names\7f1072920
-Node: Relative File Names\7f1076373
-Node: File Name Expansion\7f1077451
-Node: Unique File Names\7f1081358
-Node: File Name Completion\7f1082973
-Node: User Name Completion\7f1085634
-Node: Contents of Directories\7f1086974
-Node: Create/Delete Dirs\7f1090287
-Node: Magic File Names\7f1091393
-Node: Partial Files\7f1097023
-Node: Intro to Partial Files\7f1097251
-Node: Creating a Partial File\7f1098491
-Node: Detached Partial Files\7f1099426
-Node: Format Conversion\7f1100548
-Node: Files and MS-DOS\7f1107066
-Node: Backups and Auto-Saving\7f1109130
-Node: Backup Files\7f1109805
-Node: Making Backups\7f1111202
-Node: Rename or Copy\7f1113951
-Node: Numbered Backups\7f1116444
-Node: Backup Names\7f1118689
-Node: Auto-Saving\7f1121972
-Node: Reverting\7f1130114
-Node: Buffers\7f1133272
-Node: Buffer Basics\7f1134687
-Node: Current Buffer\7f1136740
-Node: Buffer Names\7f1141430
-Node: Buffer File Name\7f1144635
-Node: Buffer Modification\7f1148755
-Node: Modification Time\7f1150951
-Node: Read Only Buffers\7f1154326
-Node: The Buffer List\7f1156744
-Node: Creating Buffers\7f1161574
-Node: Killing Buffers\7f1163723
-Node: Indirect Buffers\7f1167454
-Node: Windows\7f1170026
-Node: Basic Windows\7f1171504
-Node: Splitting Windows\7f1174602
-Node: Deleting Windows\7f1181473
-Node: Selecting Windows\7f1184154
-Node: Cyclic Window Ordering\7f1187283
-Node: Buffers and Windows\7f1191907
-Node: Displaying Buffers\7f1193748
-Node: Choosing Window\7f1198926
-Node: Window Point\7f1206642
-Node: Window Start\7f1208688
-Node: Vertical Scrolling\7f1213178
-Node: Horizontal Scrolling\7f1219315
-Node: Size of Window\7f1222824
-Node: Position of Window\7f1227542
-Node: Resizing Windows\7f1229782
-Node: Window Configurations\7f1235211
-Node: Frames\7f1238636
-Node: Creating Frames\7f1240405
-Node: Frame Properties\7f1241746
-Node: Property Access\7f1242562
-Node: Initial Properties\7f1243411
-Node: X Frame Properties\7f1245897
-Node: Size and Position\7f1250531
-Node: Frame Name\7f1252527
-Node: Frame Titles\7f1253441
-Node: Deleting Frames\7f1255265
-Node: Finding All Frames\7f1255865
-Node: Frames and Windows\7f1257859
-Node: Minibuffers and Frames\7f1259564
-Node: Input Focus\7f1260483
-Node: Visibility of Frames\7f1263561
-Node: Raising and Lowering\7f1265480
-Node: Frame Configurations\7f1267857
-Node: Frame Hooks\7f1268451
-Node: Consoles and Devices\7f1270258
-Node: Basic Console Functions\7f1273002
-Node: Basic Device Functions\7f1273425
-Node: Console Types and Device Classes\7f1274141
-Node: Connecting to a Console or Device\7f1276338
-Node: The Selected Console and Device\7f1278501
-Node: Console and Device I/O\7f1279527
-Node: Positions\7f1280291
-Node: Point\7f1281260
-Node: Motion\7f1284353
-Node: Character Motion\7f1285120
-Node: Word Motion\7f1287357
-Node: Buffer End Motion\7f1288858
-Node: Text Lines\7f1290355
-Node: Screen Lines\7f1294950
-Node: List Motion\7f1299013
-Node: Skipping Characters\7f1302421
-Node: Excursions\7f1304640
-Node: Narrowing\7f1307675
-Node: Markers\7f1313002
-Node: Overview of Markers\7f1313904
-Node: Predicates on Markers\7f1318597
-Node: Creating Markers\7f1319843
-Node: Information from Markers\7f1323880
-Node: Changing Markers\7f1324978
-Node: The Mark\7f1326356
-Node: The Region\7f1334850
-Node: Text\7f1340537
-Node: Near Point\7f1343239
-Node: Buffer Contents\7f1346961
-Node: Comparing Text\7f1348367
-Node: Insertion\7f1349775
-Node: Commands for Insertion\7f1353618
-Node: Deletion\7f1356576
-Node: User-Level Deletion\7f1360173
-Node: The Kill Ring\7f1364303
-Node: Kill Ring Concepts\7f1366477
-Node: Kill Functions\7f1367531
-Node: Yank Commands\7f1369436
-Node: Low-Level Kill Ring\7f1371307
-Node: Internals of Kill Ring\7f1374093
-Node: Undo\7f1376873
-Node: Maintaining Undo\7f1381202
-Node: Filling\7f1383822
-Node: Margins\7f1389818
-Node: Auto Filling\7f1393748
-Node: Sorting\7f1394929
-Node: Columns\7f1404230
-Node: Indentation\7f1406746
-Node: Primitive Indent\7f1407525
-Node: Mode-Specific Indent\7f1408769
-Node: Region Indent\7f1411280
-Node: Relative Indent\7f1414228
-Node: Indent Tabs\7f1416610
-Node: Motion by Indent\7f1417932
-Node: Case Changes\7f1418711
-Node: Text Properties\7f1421962
-Node: Examining Properties\7f1423777
-Node: Changing Properties\7f1425644
-Node: Property Search\7f1429239
-Node: Special Properties\7f1433950
-Node: Saving Properties\7f1434231
-Node: Substitution\7f1437373
-Node: Registers\7f1440644
-Node: Transposition\7f1443187
-Node: Change Hooks\7f1444081
-Node: Transformations\7f1446121
-Node: Searching and Matching\7f1450506
-Node: String Search\7f1451637
-Node: Regular Expressions\7f1456361
-Node: Syntax of Regexps\7f1457728
-Node: Regexp Example\7f1472108
-Node: Regexp Search\7f1474278
-Node: POSIX Regexps\7f1480366
-Node: Search and Replace\7f1482201
-Node: Match Data\7f1485566
-Node: Simple Match Data\7f1486696
-Node: Replacing Match\7f1490961
-Node: Entire Match Data\7f1493295
-Node: Saving Match Data\7f1495286
-Node: Searching and Case\7f1496669
-Node: Standard Regexps\7f1498703
-Node: Syntax Tables\7f1500901
-Node: Syntax Basics\7f1502017
-Node: Syntax Descriptors\7f1504992
-Node: Syntax Class Table\7f1506842
-Node: Syntax Flags\7f1512880
-Node: Syntax Table Functions\7f1516097
-Node: Motion and Syntax\7f1519961
-Node: Parsing Expressions\7f1521413
-Node: Standard Syntax Tables\7f1527482
-Node: Syntax Table Internals\7f1528326
-Node: Abbrevs\7f1529353
-Node: Abbrev Mode\7f1531157
-Node: Abbrev Tables\7f1531877
-Node: Defining Abbrevs\7f1533410
-Node: Abbrev Files\7f1535315
-Node: Abbrev Expansion\7f1537089
-Node: Standard Abbrev Tables\7f1541720
-Node: Extents\7f1542879
-Node: Intro to Extents\7f1544122
-Node: Creating and Modifying Extents\7f1548116
-Node: Extent Endpoints\7f1549625
-Node: Finding Extents\7f1552890
-Node: Mapping Over Extents\7f1556641
-Node: Extent Properties\7f1562759
-Node: Detached Extents\7f1572903
-Node: Extent Parents\7f1574762
-Node: Duplicable Extents\7f1576457
-Node: Extents and Events\7f1579680
-Node: Atomic Extents\7f1581588
-Node: Specifiers\7f1582035
-Node: Introduction to Specifiers\7f1583838
-Node: Specifiers In-Depth\7f1586148
-Node: Specifier Instancing\7f1591063
-Node: Specifier Types\7f1594325
-Node: Adding Specifications\7f1599399
-Node: Retrieving Specifications\7f1608762
-Node: Specifier Tag Functions\7f1612497
-Node: Specifier Instancing Functions\7f1615731
-Node: Specifier Example\7f1619138
-Node: Creating Specifiers\7f1622244
-Node: Specifier Validation Functions\7f1624493
-Node: Other Specification Functions\7f1626877
-Node: Faces and Window-System Objects\7f1630696
-Node: Faces\7f1631020
-Node: Merging Faces\7f1632639
-Node: Basic Face Functions\7f1634600
-Node: Face Properties\7f1636699
-Node: Face Convenience Functions\7f1646258
-Node: Other Face Display Functions\7f1649391
-Node: Fonts\7f1650204
-Node: Font Specifiers\7f1650905
-Node: Font Instances\7f1651146
-Node: Font Instance Names\7f1652113
-Node: Font Instance Size\7f1652954
-Node: Font Instance Characteristics\7f1654240
-Node: Font Convenience Functions\7f1655409
-Node: Colors\7f1656699
-Node: Color Specifiers\7f1657139
-Node: Color Instances\7f1657366
-Node: Color Instance Properties\7f1658110
-Node: Color Convenience Functions\7f1658736
-Node: Glyphs\7f1659789
-Node: Glyph Functions\7f1661381
-Node: Creating Glyphs\7f1661788
-Node: Glyph Properties\7f1663375
-Node: Glyph Convenience Functions\7f1672542
-Node: Glyph Dimensions\7f1676489
-Node: Images\7f1677569
-Node: Image Specifiers\7f1678018
-Node: Image Instantiator Conversion\7f1689442
-Node: Image Instances\7f1690807
-Node: Image Instance Types\7f1691558
-Node: Image Instance Functions\7f1694213
-Node: Glyph Types\7f1698783
-Node: Mouse Pointer\7f1700555
-Node: Redisplay Glyphs\7f1703558
-Node: Subwindows\7f1704591
-Node: Annotations\7f1704834
-Node: Annotation Basics\7f1705851
-Node: Annotation Primitives\7f1709789
-Node: Annotation Properties\7f1711118
-Node: Locating Annotations\7f1714158
-Node: Margin Primitives\7f1714995
-Node: Annotation Hooks\7f1716889
-Node: Display\7f1717549
-Node: Refresh Screen\7f1718527
-Node: Truncation\7f1720438
-Node: The Echo Area\7f1722965
-Node: Warnings\7f1729401
-Node: Invisible Text\7f1733837
-Node: Selective Display\7f1736417
-Node: Overlay Arrow\7f1740544
-Node: Temporary Displays\7f1741898
-Node: Blinking\7f1746019
-Node: Usual Display\7f1748203
-Node: Display Tables\7f1750753
-Node: Display Table Format\7f1751557
-Node: Active Display Table\7f1753001
-Node: Character Descriptors\7f1754193
-Node: Beeping\7f1754951
-Node: Hash Tables\7f1759717
-Node: Introduction to Hash Tables\7f1760325
-Node: Working With Hash Tables\7f1766350
-Node: Weak Hash Tables\7f1767467
-Node: Range Tables\7f1769266
-Node: Introduction to Range Tables\7f1769955
-Node: Working With Range Tables\7f1770386
-Node: Databases\7f1771271
-Node: Connecting to a Database\7f1771570
-Node: Working With a Database\7f1772661
-Node: Other Database Functions\7f1773519
-Node: Processes\7f1774093
-Node: Subprocess Creation\7f1776317
-Node: Synchronous Processes\7f1779610
-Node: MS-DOS Subprocesses\7f1786308
-Node: Asynchronous Processes\7f1787382
-Node: Deleting Processes\7f1791086
-Node: Process Information\7f1792957
-Node: Input to Processes\7f1796885
-Node: Signals to Processes\7f1799154
-Node: Output from Processes\7f1803574
-Node: Process Buffers\7f1804386
-Node: Filter Functions\7f1807255
-Node: Accepting Output\7f1812822
-Node: Sentinels\7f1814349
-Node: Process Window Size\7f1817842
-Node: Transaction Queues\7f1818191
-Node: Network\7f1819889
-Node: System Interface\7f1821723
-Node: Starting Up\7f1822993
-Node: Start-up Summary\7f1823587
-Node: Init File\7f1827141
-Node: Terminal-Specific\7f1829525
-Node: Command Line Arguments\7f1832684
-Node: Getting Out\7f1836173
-Node: Killing XEmacs\7f1836742
-Node: Suspending XEmacs\7f1838411
-Node: System Environment\7f1841727
-Node: User Identification\7f1848392
-Node: Time of Day\7f1851922
-Node: Time Conversion\7f1854711
-Node: Timers\7f1859753
-Node: Terminal Input\7f1861926
-Node: Input Modes\7f1862429
-Node: Translating Input\7f1864842
-Node: Recording Input\7f1869007
-Node: Terminal Output\7f1871108
-Node: Flow Control\7f1874731
-Node: Batch Mode\7f1878524
-Node: X-Windows\7f1879906
-Node: X Selections\7f1880718
-Node: X Server\7f1882928
-Node: Resources\7f1883329
-Node: Server Data\7f1888470
-Node: Grabs\7f1889677
-Node: X Miscellaneous\7f1891258
-Node: ToolTalk Support\7f1893643
-Node: XEmacs ToolTalk API Summary\7f1893860
-Node: Sending Messages\7f1895160
-Node: Example of Sending Messages\7f1895411
-Node: Elisp Interface for Sending Messages\7f1896473
-Node: Receiving Messages\7f1902866
-Node: Example of Receiving Messages\7f1903089
-Node: Elisp Interface for Receiving Messages\7f1903925
-Node: LDAP Support\7f1907750
-Node: Building XEmacs with LDAP support\7f1908246
-Node: XEmacs LDAP API\7f1909224
-Node: LDAP Variables\7f1909954
-Node: The High-Level LDAP API\7f1912431
-Node: The Low-Level LDAP API\7f1913544
-Node: The LDAP Lisp Object\7f1913818
-Node: Opening and Closing a LDAP Connection\7f1914371
-Node: Searching on a LDAP Server (Low-level)\7f1916154
-Node: Syntax of Search Filters\7f1917549
-Node: Internationalization\7f1918847
-Node: I18N Levels 1 and 2\7f1919184
-Node: I18N Level 3\7f1919890
-Node: Level 3 Basics\7f1920171
-Node: Level 3 Primitives\7f1921004
-Node: Dynamic Messaging\7f1922610
-Node: Domain Specification\7f1923073
-Node: Documentation String Extraction\7f1924976
-Node: I18N Level 4\7f1925894
-Node: MULE\7f1926086
-Node: Internationalization Terminology\7f1927197
-Node: Charsets\7f1935736
-Node: Charset Properties\7f1936432
-Node: Basic Charset Functions\7f1941118
-Node: Charset Property Functions\7f1943299
-Node: Predefined Charsets\7f1945342
-Node: MULE Characters\7f1948262
-Node: Composite Characters\7f1949109
-Node: ISO 2022\7f1950363
-Node: Coding Systems\7f1956085
-Node: Coding System Types\7f1958007
-Node: EOL Conversion\7f1959826
-Node: Coding System Properties\7f1961009
-Node: Basic Coding System Functions\7f1964861
-Node: Coding System Property Functions\7f1966765
-Node: Encoding and Decoding Text\7f1967323
-Node: Detection of Textual Encoding\7f1968459
-Node: Big5 and Shift-JIS Functions\7f1969995
-Node: CCL\7f1971083
-Node: CCL Syntax\7f1974187
-Node: CCL Statements\7f1975775
-Node: CCL Expressions\7f1980423
-Node: Calling CCL\7f1983575
-Node: CCL Examples\7f1986565
-Node: Category Tables\7f1986702
-Node: Tips\7f1989061
-Node: Style Tips\7f1989702
-Node: Compilation Tips\7f1999222
-Node: Documentation Tips\7f2001138
-Node: Comment Tips\7f2006647
-Node: Library Headers\7f2009649
-Node: Building XEmacs and Object Allocation\7f2013621
-Node: Building XEmacs\7f2014504
-Node: Pure Storage\7f2020839
-Node: Garbage Collection\7f2023627
-Node: Standard Errors\7f2034766
-Node: Standard Buffer-Local Variables\7f2038975
-Node: Standard Keymaps\7f2041651
-Node: Standard Hooks\7f2045383
-Node: Index\7f2052883
+Node: Top\7f2366
+Node: Copying\7f48385
+Node: Introduction\7f67543
+Node: Caveats\7f69134
+Node: Lisp History\7f70865
+Node: Conventions\7f72121
+Node: Some Terms\7f72936
+Node: nil and t\7f73657
+Node: Evaluation Notation\7f75334
+Node: Printing Notation\7f76247
+Node: Error Messages\7f77121
+Node: Buffer Text Notation\7f77562
+Node: Format of Descriptions\7f78437
+Node: A Sample Function Description\7f79291
+Node: A Sample Variable Description\7f83277
+Node: Acknowledgements\7f84185
+Node: Lisp Data Types\7f86163
+Node: Printed Representation\7f88718
+Node: Comments\7f90760
+Node: Primitive Types\7f91657
+Node: Programming Types\7f93316
+Node: Integer Type\7f95268
+Node: Floating Point Type\7f96305
+Node: Character Type\7f96924
+Node: Symbol Type\7f104830
+Node: Sequence Type\7f107525
+Node: Cons Cell Type\7f109044
+Node: Dotted Pair Notation\7f113528
+Node: Association List Type\7f115649
+Node: Array Type\7f116532
+Node: String Type\7f117998
+Node: Vector Type\7f120679
+Node: Bit Vector Type\7f121451
+Node: Function Type\7f122313
+Node: Macro Type\7f123426
+Node: Primitive Function Type\7f124123
+Node: Compiled-Function Type\7f125649
+Node: Autoload Type\7f126203
+Node: Char Table Type\7f127217
+Node: Hash Table Type\7f127391
+Node: Range Table Type\7f128546
+Node: Weak List Type\7f129399
+Node: Editing Types\7f129549
+Node: Buffer Type\7f131176
+Node: Marker Type\7f133203
+Node: Extent Type\7f133927
+Node: Window Type\7f135195
+Node: Frame Type\7f136606
+Node: Device Type\7f137401
+Node: Console Type\7f138227
+Node: Window Configuration Type\7f139428
+Node: Event Type\7f140126
+Node: Process Type\7f140290
+Node: Stream Type\7f141325
+Node: Keymap Type\7f142448
+Node: Syntax Table Type\7f142986
+Node: Display Table Type\7f144009
+Node: Database Type\7f144448
+Node: Charset Type\7f144614
+Node: Coding System Type\7f144778
+Node: ToolTalk Message Type\7f144962
+Node: ToolTalk Pattern Type\7f145161
+Node: Window-System Types\7f145333
+Node: Face Type\7f146479
+Node: Glyph Type\7f146610
+Node: Specifier Type\7f146766
+Node: Font Instance Type\7f146939
+Node: Color Instance Type\7f147129
+Node: Image Instance Type\7f147326
+Node: Toolbar Button Type\7f147524
+Node: Subwindow Type\7f147717
+Node: X Resource Type\7f147896
+Node: Type Predicates\7f148049
+Node: Equality Predicates\7f157178
+Node: Numbers\7f161983
+Node: Integer Basics\7f163438
+Node: Float Basics\7f165787
+Node: Predicates on Numbers\7f167529
+Node: Comparison of Numbers\7f169162
+Node: Numeric Conversions\7f172983
+Node: Arithmetic Operations\7f174449
+Node: Rounding Operations\7f179914
+Node: Bitwise Operations\7f181019
+Node: Math Functions\7f190065
+Node: Random Numbers\7f192381
+Node: Strings and Characters\7f194147
+Node: String Basics\7f195600
+Node: Predicates for Strings\7f198018
+Node: Creating Strings\7f198781
+Node: Predicates for Characters\7f204098
+Node: Character Codes\7f205169
+Node: Text Comparison\7f206582
+Node: String Conversion\7f209944
+Node: Modifying Strings\7f213620
+Node: String Properties\7f214261
+Node: Formatting Strings\7f214904
+Node: Character Case\7f224522
+Node: Case Tables\7f227668
+Node: Char Tables\7f231566
+Node: Char Table Types\7f232958
+Node: Working With Char Tables\7f234533
+Node: Lists\7f236482
+Node: Cons Cells\7f237605
+Node: Lists as Boxes\7f238941
+Node: List-related Predicates\7f241583
+Node: List Elements\7f243285
+Node: Building Lists\7f248314
+Node: Modifying Lists\7f254306
+Node: Setcar\7f255118
+Node: Setcdr\7f257539
+Node: Rearrangement\7f260050
+Node: Sets And Lists\7f265636
+Node: Association Lists\7f269864
+Ref: Association Lists-Footnote-1\7f279159
+Node: Property Lists\7f279364
+Node: Working With Normal Plists\7f280912
+Node: Working With Lax Plists\7f283180
+Node: Converting Plists To/From Alists\7f285420
+Node: Weak Lists\7f286768
+Node: Sequences Arrays Vectors\7f288932
+Node: Sequence Functions\7f291568
+Node: Arrays\7f295227
+Node: Array Functions\7f298291
+Node: Vectors\7f300824
+Node: Vector Functions\7f302322
+Node: Bit Vectors\7f304893
+Node: Bit Vector Functions\7f305738
+Node: Symbols\7f307988
+Node: Symbol Components\7f309037
+Node: Definitions\7f313210
+Node: Creating Symbols\7f315435
+Node: Symbol Properties\7f322469
+Node: Plists and Alists\7f323985
+Node: Symbol Plists\7f325734
+Node: Other Plists\7f327543
+Node: Evaluation\7f329321
+Node: Intro Eval\7f330126
+Ref: Intro Eval-Footnote-1\7f333479
+Node: Eval\7f333614
+Node: Forms\7f338032
+Node: Self-Evaluating Forms\7f339191
+Node: Symbol Forms\7f340704
+Node: Classifying Lists\7f341621
+Node: Function Indirection\7f342377
+Node: Function Forms\7f345488
+Node: Macro Forms\7f346485
+Node: Special Forms\7f348085
+Node: Autoloading\7f350394
+Node: Quoting\7f350892
+Node: Control Structures\7f352253
+Node: Sequencing\7f353873
+Node: Conditionals\7f356738
+Node: Combining Conditions\7f360161
+Node: Iteration\7f363431
+Node: Nonlocal Exits\7f365210
+Node: Catch and Throw\7f365912
+Node: Examples of Catch\7f369751
+Node: Errors\7f371770
+Node: Signaling Errors\7f373259
+Node: Processing of Errors\7f376335
+Node: Handling Errors\7f377664
+Node: Error Symbols\7f384580
+Node: Cleanups\7f388026
+Node: Variables\7f391804
+Node: Global Variables\7f393573
+Node: Constant Variables\7f394649
+Node: Local Variables\7f395275
+Node: Void Variables\7f400212
+Node: Defining Variables\7f403728
+Node: Accessing Variables\7f410892
+Node: Setting Variables\7f412317
+Node: Variable Scoping\7f416836
+Node: Scope\7f418435
+Node: Extent\7f419960
+Node: Impl of Scope\7f421439
+Node: Using Scoping\7f423402
+Node: Buffer-Local Variables\7f424924
+Node: Intro to Buffer-Local\7f425760
+Node: Creating Buffer-Local\7f428303
+Node: Default Value\7f433522
+Node: Variable Aliases\7f436665
+Node: Functions\7f438450
+Node: What Is a Function\7f439544
+Node: Lambda Expressions\7f443590
+Node: Lambda Components\7f444500
+Node: Simple Lambda\7f446332
+Node: Argument List\7f447989
+Node: Function Documentation\7f451717
+Node: Function Names\7f453659
+Node: Defining Functions\7f456232
+Node: Calling Functions\7f459272
+Node: Mapping Functions\7f463121
+Node: Anonymous Functions\7f465514
+Node: Function Cells\7f468759
+Node: Inline Functions\7f473569
+Node: Related Topics\7f475379
+Node: Macros\7f476432
+Node: Simple Macro\7f477716
+Node: Expansion\7f478451
+Node: Compiling Macros\7f481455
+Node: Defining Macros\7f483291
+Node: Backquote\7f484608
+Node: Problems with Macros\7f487005
+Node: Argument Evaluation\7f487700
+Node: Surprising Local Vars\7f490615
+Node: Eval During Expansion\7f492683
+Node: Repeated Expansion\7f494376
+Node: Customization\7f496292
+Node: Common Keywords\7f496761
+Node: Group Definitions\7f499606
+Node: Variable Definitions\7f501798
+Node: Customization Types\7f506781
+Node: Simple Types\7f508216
+Node: Composite Types\7f510373
+Node: Splicing into Lists\7f515063
+Node: Type Keywords\7f516898
+Node: Loading\7f520418
+Node: How Programs Do Loading\7f522093
+Node: Autoload\7f531220
+Node: Repeated Loading\7f537299
+Node: Named Features\7f539412
+Node: Unloading\7f545844
+Node: Hooks for Loading\7f548000
+Node: Byte Compilation\7f548717
+Node: Speed of Byte-Code\7f550634
+Node: Compilation Functions\7f551841
+Node: Docs and Compilation\7f558228
+Node: Dynamic Loading\7f560881
+Node: Eval During Compile\7f563245
+Node: Compiled-Function Objects\7f564510
+Node: Disassembly\7f569308
+Node: Debugging\7f576562
+Node: Debugger\7f577974
+Node: Error Debugging\7f579119
+Node: Infinite Loops\7f581872
+Node: Function Debugging\7f583116
+Node: Explicit Debug\7f585906
+Node: Using Debugger\7f586677
+Node: Debugger Commands\7f588539
+Node: Invoking the Debugger\7f592856
+Node: Internals of Debugger\7f596771
+Node: Syntax Errors\7f601658
+Node: Excess Open\7f602906
+Node: Excess Close\7f604781
+Node: Compilation Errors\7f606202
+Node: Edebug\7f607490
+Node: Using Edebug\7f609598
+Node: Instrumenting\7f612295
+Node: Edebug Execution Modes\7f615784
+Node: Jumping\7f618894
+Node: Edebug Misc\7f621237
+Node: Breakpoints\7f622626
+Node: Global Break Condition\7f625432
+Node: Embedded Breakpoints\7f626387
+Node: Trapping Errors\7f627342
+Node: Edebug Views\7f629418
+Node: Edebug Eval\7f631383
+Node: Eval List\7f632560
+Node: Reading in Edebug\7f635945
+Node: Printing in Edebug\7f636744
+Node: Tracing\7f638459
+Node: Coverage Testing\7f640345
+Node: The Outside Context\7f642386
+Node: Checking Whether to Stop\7f643335
+Node: Edebug Display Update\7f643982
+Node: Edebug Recursive Edit\7f646005
+Node: Instrumenting Macro Calls\7f647660
+Node: Specification List\7f650142
+Node: Backtracking\7f659553
+Node: Debugging Backquote\7f661491
+Node: Specification Examples\7f665197
+Node: Edebug Options\7f667264
+Node: Read and Print\7f672601
+Node: Streams Intro\7f673578
+Node: Input Streams\7f675596
+Node: Input Functions\7f680497
+Node: Output Streams\7f682557
+Node: Output Functions\7f686608
+Node: Output Variables\7f690908
+Node: Minibuffers\7f695707
+Node: Intro to Minibuffers\7f696792
+Node: Text from Minibuffer\7f699118
+Node: Object from Minibuffer\7f703780
+Node: Minibuffer History\7f706997
+Node: Completion\7f709907
+Node: Basic Completion\7f711882
+Node: Minibuffer Completion\7f716906
+Node: Completion Commands\7f720151
+Node: High-Level Completion\7f724798
+Node: Reading File Names\7f728822
+Node: Programmed Completion\7f732511
+Node: Yes-or-No Queries\7f734721
+Node: Multiple Queries\7f740458
+Node: Minibuffer Misc\7f744522
+Node: Command Loop\7f749388
+Node: Command Overview\7f750732
+Node: Defining Commands\7f754010
+Node: Using Interactive\7f754758
+Node: Interactive Codes\7f759531
+Node: Interactive Examples\7f765323
+Node: Interactive Call\7f766637
+Node: Command Loop Info\7f772038
+Node: Events\7f777017
+Node: Event Types\7f778477
+Node: Event Contents\7f780400
+Node: Event Predicates\7f784876
+Node: Accessing Mouse Event Positions\7f786201
+Node: Frame-Level Event Position Info\7f786900
+Node: Window-Level Event Position Info\7f787940
+Node: Event Text Position Info\7f789704
+Node: Event Glyph Position Info\7f792196
+Node: Event Toolbar Position Info\7f793519
+Node: Other Event Position Info\7f794190
+Node: Accessing Other Event Info\7f794599
+Node: Working With Events\7f796219
+Node: Converting Events\7f802207
+Node: Reading Input\7f805160
+Node: Key Sequence Input\7f806162
+Node: Reading One Event\7f808116
+Node: Dispatching an Event\7f810877
+Node: Quoted Character Input\7f811328
+Node: Peeking and Discarding\7f812676
+Node: Waiting\7f816580
+Node: Quitting\7f818888
+Node: Prefix Command Arguments\7f823296
+Node: Recursive Editing\7f828383
+Node: Disabling Commands\7f833179
+Node: Command History\7f835247
+Node: Keyboard Macros\7f836984
+Node: Keymaps\7f839201
+Node: Keymap Terminology\7f840778
+Node: Format of Keymaps\7f843707
+Node: Creating Keymaps\7f844118
+Node: Inheritance and Keymaps\7f846197
+Node: Key Sequences\7f848569
+Node: Prefix Keys\7f853139
+Node: Active Keymaps\7f856724
+Node: Key Lookup\7f865939
+Node: Functions for Key Lookup\7f871102
+Node: Changing Key Bindings\7f876799
+Node: Key Binding Commands\7f883696
+Node: Scanning Keymaps\7f885761
+Node: Other Keymap Functions\7f894272
+Node: Menus\7f894894
+Node: Menu Format\7f895436
+Node: Menubar Format\7f904021
+Node: Menubar\7f904646
+Node: Modifying Menus\7f907759
+Node: Menu Filters\7f912773
+Node: Pop-Up Menus\7f914669
+Node: Menu Accelerators\7f916874
+Node: Creating Menu Accelerators\7f917596
+Node: Keyboard Menu Traversal\7f918914
+Node: Menu Accelerator Functions\7f919641
+Node: Buffers Menu\7f922676
+Node: Dialog Boxes\7f923970
+Node: Dialog Box Format\7f924137
+Node: Dialog Box Functions\7f925507
+Node: Toolbar\7f925904
+Node: Toolbar Intro\7f926229
+Node: Toolbar Descriptor Format\7f928639
+Node: Specifying the Toolbar\7f933133
+Node: Other Toolbar Variables\7f936738
+Node: Scrollbars\7f941165
+Node: Drag and Drop\7f941301
+Node: Supported Protocols\7f942377
+Node: OffiX DND\7f942880
+Node: CDE dt\7f943887
+Node: MSWindows OLE\7f944478
+Node: Loose ends\7f944649
+Node: Drop Interface\7f945041
+Node: Drag Interface\7f946063
+Node: Modes\7f946237
+Node: Major Modes\7f947188
+Node: Major Mode Conventions\7f950103
+Node: Example Major Modes\7f956058
+Node: Auto Major Mode\7f964091
+Node: Mode Help\7f971539
+Node: Derived Modes\7f972640
+Node: Minor Modes\7f974831
+Node: Minor Mode Conventions\7f976133
+Node: Keymaps and Minor Modes\7f978996
+Node: Modeline Format\7f979831
+Node: Modeline Data\7f981599
+Node: Modeline Variables\7f985869
+Node: %-Constructs\7f990585
+Node: Hooks\7f993496
+Node: Documentation\7f1000258
+Node: Documentation Basics\7f1001681
+Node: Accessing Documentation\7f1004731
+Node: Keys in Documentation\7f1011010
+Node: Describing Characters\7f1014489
+Node: Help Functions\7f1016838
+Node: Obsoleteness\7f1023289
+Node: Files\7f1026283
+Node: Visiting Files\7f1028208
+Node: Visiting Functions\7f1029713
+Node: Subroutines of Visiting\7f1034760
+Node: Saving Buffers\7f1036833
+Node: Reading from Files\7f1042926
+Node: Writing to Files\7f1045083
+Node: File Locks\7f1047800
+Node: Information about Files\7f1050853
+Node: Testing Accessibility\7f1051614
+Node: Kinds of Files\7f1055354
+Node: Truenames\7f1057035
+Node: File Attributes\7f1058037
+Node: Changing File Attributes\7f1063176
+Node: File Names\7f1068582
+Node: File Name Components\7f1070191
+Node: Directory Names\7f1073292
+Node: Relative File Names\7f1076745
+Node: File Name Expansion\7f1077823
+Node: Unique File Names\7f1081730
+Node: File Name Completion\7f1083345
+Node: User Name Completion\7f1086006
+Node: Contents of Directories\7f1087346
+Node: Create/Delete Dirs\7f1090659
+Node: Magic File Names\7f1091765
+Node: Partial Files\7f1097395
+Node: Intro to Partial Files\7f1097623
+Node: Creating a Partial File\7f1098863
+Node: Detached Partial Files\7f1099798
+Node: Format Conversion\7f1100920
+Node: Files and MS-DOS\7f1107436
+Node: Backups and Auto-Saving\7f1109500
+Node: Backup Files\7f1110175
+Node: Making Backups\7f1111572
+Node: Rename or Copy\7f1114321
+Node: Numbered Backups\7f1116814
+Node: Backup Names\7f1119058
+Node: Auto-Saving\7f1122350
+Node: Reverting\7f1130492
+Node: Buffers\7f1133650
+Node: Buffer Basics\7f1135067
+Node: Current Buffer\7f1137120
+Node: Buffer Names\7f1141808
+Node: Buffer File Name\7f1145013
+Node: Buffer Modification\7f1149132
+Node: Modification Time\7f1151325
+Node: Read Only Buffers\7f1154700
+Node: The Buffer List\7f1157118
+Node: Creating Buffers\7f1161948
+Node: Killing Buffers\7f1164094
+Node: Indirect Buffers\7f1167825
+Node: Windows\7f1170397
+Node: Basic Windows\7f1171875
+Node: Splitting Windows\7f1174973
+Node: Deleting Windows\7f1181862
+Node: Selecting Windows\7f1184542
+Node: Cyclic Window Ordering\7f1187671
+Node: Buffers and Windows\7f1192295
+Node: Displaying Buffers\7f1194136
+Node: Choosing Window\7f1199312
+Node: Window Point\7f1207028
+Node: Window Start\7f1209074
+Node: Vertical Scrolling\7f1213564
+Node: Horizontal Scrolling\7f1219701
+Node: Size of Window\7f1223210
+Node: Position of Window\7f1227928
+Node: Resizing Windows\7f1230168
+Node: Window Configurations\7f1235597
+Node: Frames\7f1239022
+Node: Creating Frames\7f1240791
+Node: Frame Properties\7f1242132
+Node: Property Access\7f1242948
+Node: Initial Properties\7f1243797
+Node: X Frame Properties\7f1246283
+Node: Size and Position\7f1250917
+Node: Frame Name\7f1252913
+Node: Frame Titles\7f1253827
+Node: Deleting Frames\7f1255651
+Node: Finding All Frames\7f1256251
+Node: Frames and Windows\7f1258245
+Node: Minibuffers and Frames\7f1259950
+Node: Input Focus\7f1260868
+Node: Visibility of Frames\7f1263945
+Node: Raising and Lowering\7f1265864
+Node: Frame Configurations\7f1268240
+Node: Frame Hooks\7f1268834
+Node: Consoles and Devices\7f1270639
+Node: Basic Console Functions\7f1273383
+Node: Basic Device Functions\7f1273806
+Node: Console Types and Device Classes\7f1274522
+Node: Connecting to a Console or Device\7f1276719
+Node: The Selected Console and Device\7f1278882
+Node: Console and Device I/O\7f1279908
+Node: Positions\7f1280672
+Node: Point\7f1281641
+Node: Motion\7f1284731
+Node: Character Motion\7f1285498
+Node: Word Motion\7f1287735
+Node: Buffer End Motion\7f1289236
+Node: Text Lines\7f1290733
+Node: Screen Lines\7f1295328
+Node: List Motion\7f1299391
+Node: Skipping Characters\7f1302799
+Node: Excursions\7f1305018
+Node: Narrowing\7f1308050
+Node: Markers\7f1313375
+Node: Overview of Markers\7f1314281
+Node: Predicates on Markers\7f1318973
+Node: Creating Markers\7f1320219
+Node: Information from Markers\7f1324256
+Node: Changing Markers\7f1325354
+Node: The Mark\7f1326732
+Node: The Region\7f1335226
+Node: Text\7f1340913
+Node: Near Point\7f1343612
+Node: Buffer Contents\7f1347334
+Node: Comparing Text\7f1348740
+Node: Insertion\7f1350148
+Node: Commands for Insertion\7f1353990
+Node: Deletion\7f1356946
+Node: User-Level Deletion\7f1360541
+Node: The Kill Ring\7f1364702
+Node: Kill Ring Concepts\7f1366876
+Node: Kill Functions\7f1367930
+Node: Yank Commands\7f1369835
+Node: Low-Level Kill Ring\7f1371706
+Node: Internals of Kill Ring\7f1374492
+Node: Undo\7f1377272
+Node: Maintaining Undo\7f1381601
+Node: Filling\7f1384221
+Node: Margins\7f1390215
+Node: Auto Filling\7f1394144
+Node: Sorting\7f1395325
+Node: Columns\7f1404625
+Node: Indentation\7f1407141
+Node: Primitive Indent\7f1407920
+Node: Mode-Specific Indent\7f1409164
+Node: Region Indent\7f1411675
+Node: Relative Indent\7f1414623
+Node: Indent Tabs\7f1417005
+Node: Motion by Indent\7f1418326
+Node: Case Changes\7f1419105
+Node: Text Properties\7f1422356
+Node: Examining Properties\7f1424169
+Node: Changing Properties\7f1426036
+Node: Property Search\7f1429627
+Node: Special Properties\7f1434338
+Node: Saving Properties\7f1434619
+Node: Substitution\7f1437761
+Node: Registers\7f1441031
+Node: Transposition\7f1443574
+Node: Change Hooks\7f1444468
+Node: Transformations\7f1446508
+Node: Searching and Matching\7f1450893
+Node: String Search\7f1452024
+Node: Regular Expressions\7f1456748
+Node: Syntax of Regexps\7f1458115
+Node: Regexp Example\7f1472494
+Node: Regexp Search\7f1474664
+Node: POSIX Regexps\7f1480752
+Node: Search and Replace\7f1482587
+Node: Match Data\7f1485952
+Node: Simple Match Data\7f1487082
+Node: Replacing Match\7f1491347
+Node: Entire Match Data\7f1493681
+Node: Saving Match Data\7f1495672
+Node: Searching and Case\7f1497053
+Node: Standard Regexps\7f1499087
+Node: Syntax Tables\7f1501285
+Node: Syntax Basics\7f1502399
+Node: Syntax Descriptors\7f1505371
+Node: Syntax Class Table\7f1507221
+Node: Syntax Flags\7f1513259
+Node: Syntax Table Functions\7f1516476
+Node: Motion and Syntax\7f1520340
+Node: Parsing Expressions\7f1521792
+Node: Standard Syntax Tables\7f1527861
+Node: Syntax Table Internals\7f1528705
+Node: Abbrevs\7f1529731
+Node: Abbrev Mode\7f1531534
+Node: Abbrev Tables\7f1532254
+Node: Defining Abbrevs\7f1533787
+Node: Abbrev Files\7f1535692
+Node: Abbrev Expansion\7f1537465
+Node: Standard Abbrev Tables\7f1542096
+Node: Extents\7f1543255
+Node: Intro to Extents\7f1544498
+Node: Creating and Modifying Extents\7f1548492
+Node: Extent Endpoints\7f1549999
+Node: Finding Extents\7f1553262
+Node: Mapping Over Extents\7f1557011
+Node: Extent Properties\7f1563128
+Node: Detached Extents\7f1573272
+Node: Extent Parents\7f1575131
+Node: Duplicable Extents\7f1576826
+Node: Extents and Events\7f1580047
+Node: Atomic Extents\7f1581954
+Node: Specifiers\7f1582401
+Node: Introduction to Specifiers\7f1584208
+Node: Specifiers In-Depth\7f1586518
+Node: Specifier Instancing\7f1591432
+Node: Specifier Types\7f1594694
+Node: Adding Specifications\7f1599768
+Node: Retrieving Specifications\7f1609130
+Node: Specifier Tag Functions\7f1612865
+Node: Specifier Instancing Functions\7f1616099
+Node: Specifier Example\7f1619506
+Node: Creating Specifiers\7f1622612
+Node: Specifier Validation Functions\7f1624861
+Node: Other Specification Functions\7f1627245
+Node: Faces and Window-System Objects\7f1631064
+Node: Faces\7f1631388
+Node: Merging Faces\7f1633005
+Node: Basic Face Functions\7f1634966
+Node: Face Properties\7f1637064
+Node: Face Convenience Functions\7f1646623
+Node: Other Face Display Functions\7f1649753
+Node: Fonts\7f1650566
+Node: Font Specifiers\7f1651267
+Node: Font Instances\7f1651508
+Node: Font Instance Names\7f1652475
+Node: Font Instance Size\7f1653316
+Node: Font Instance Characteristics\7f1654602
+Node: Font Convenience Functions\7f1655771
+Node: Colors\7f1657061
+Node: Color Specifiers\7f1657501
+Node: Color Instances\7f1657728
+Node: Color Instance Properties\7f1658472
+Node: Color Convenience Functions\7f1659098
+Node: Glyphs\7f1660151
+Node: Glyph Functions\7f1661743
+Node: Creating Glyphs\7f1662150
+Node: Glyph Properties\7f1663737
+Node: Glyph Convenience Functions\7f1672904
+Node: Glyph Dimensions\7f1676851
+Node: Images\7f1677931
+Node: Image Specifiers\7f1678380
+Node: Image Instantiator Conversion\7f1689802
+Node: Image Instances\7f1691167
+Node: Image Instance Types\7f1691918
+Node: Image Instance Functions\7f1694573
+Node: Glyph Types\7f1699142
+Node: Mouse Pointer\7f1700914
+Node: Redisplay Glyphs\7f1703917
+Node: Subwindows\7f1704950
+Node: Annotations\7f1705193
+Node: Annotation Basics\7f1706209
+Node: Annotation Primitives\7f1710147
+Node: Annotation Properties\7f1711476
+Node: Locating Annotations\7f1714516
+Node: Margin Primitives\7f1715353
+Node: Annotation Hooks\7f1717247
+Node: Display\7f1717907
+Node: Refresh Screen\7f1718885
+Node: Truncation\7f1720796
+Node: The Echo Area\7f1723321
+Node: Warnings\7f1729756
+Node: Invisible Text\7f1734192
+Node: Selective Display\7f1736771
+Node: Overlay Arrow\7f1740897
+Node: Temporary Displays\7f1742250
+Node: Blinking\7f1746371
+Node: Usual Display\7f1748556
+Node: Display Tables\7f1751105
+Node: Display Table Format\7f1751909
+Node: Active Display Table\7f1753351
+Node: Character Descriptors\7f1754543
+Node: Beeping\7f1755300
+Node: Hash Tables\7f1760066
+Node: Introduction to Hash Tables\7f1760674
+Node: Working With Hash Tables\7f1766697
+Node: Weak Hash Tables\7f1767814
+Node: Range Tables\7f1769613
+Node: Introduction to Range Tables\7f1770302
+Node: Working With Range Tables\7f1770733
+Node: Databases\7f1771618
+Node: Connecting to a Database\7f1771917
+Node: Working With a Database\7f1773008
+Node: Other Database Functions\7f1773866
+Node: Processes\7f1774440
+Node: Subprocess Creation\7f1776664
+Node: Synchronous Processes\7f1779953
+Node: MS-DOS Subprocesses\7f1786671
+Node: Asynchronous Processes\7f1787745
+Node: Deleting Processes\7f1791458
+Node: Process Information\7f1793329
+Node: Input to Processes\7f1797255
+Node: Signals to Processes\7f1799545
+Node: Output from Processes\7f1803965
+Node: Process Buffers\7f1804777
+Node: Filter Functions\7f1807644
+Node: Accepting Output\7f1813214
+Node: Sentinels\7f1814741
+Node: Process Window Size\7f1818231
+Node: Transaction Queues\7f1818580
+Node: Network\7f1820278
+Node: System Interface\7f1822112
+Node: Starting Up\7f1823382
+Node: Start-up Summary\7f1823976
+Node: Init File\7f1827530
+Node: Terminal-Specific\7f1829911
+Node: Command Line Arguments\7f1833070
+Node: Getting Out\7f1836559
+Node: Killing XEmacs\7f1837128
+Node: Suspending XEmacs\7f1838797
+Node: System Environment\7f1842139
+Node: User Identification\7f1848806
+Node: Time of Day\7f1852335
+Node: Time Conversion\7f1855122
+Node: Timers\7f1860162
+Node: Terminal Input\7f1862335
+Node: Input Modes\7f1862838
+Node: Translating Input\7f1865251
+Node: Recording Input\7f1869416
+Node: Terminal Output\7f1871516
+Node: Flow Control\7f1875139
+Node: Batch Mode\7f1878931
+Node: X-Windows\7f1880313
+Node: X Selections\7f1881125
+Node: X Server\7f1883335
+Node: Resources\7f1883736
+Node: Server Data\7f1888877
+Node: Grabs\7f1890084
+Node: X Miscellaneous\7f1891665
+Node: ToolTalk Support\7f1894050
+Node: XEmacs ToolTalk API Summary\7f1894267
+Node: Sending Messages\7f1895567
+Node: Example of Sending Messages\7f1895818
+Node: Elisp Interface for Sending Messages\7f1896880
+Node: Receiving Messages\7f1903273
+Node: Example of Receiving Messages\7f1903496
+Node: Elisp Interface for Receiving Messages\7f1904332
+Node: LDAP Support\7f1908157
+Node: Building XEmacs with LDAP support\7f1908653
+Node: XEmacs LDAP API\7f1909631
+Node: LDAP Variables\7f1910361
+Node: The High-Level LDAP API\7f1912837
+Node: The Low-Level LDAP API\7f1913942
+Node: The LDAP Lisp Object\7f1914216
+Node: Opening and Closing a LDAP Connection\7f1914769
+Node: Searching on a LDAP Server (Low-level)\7f1916552
+Node: Syntax of Search Filters\7f1917945
+Node: Internationalization\7f1919243
+Node: I18N Levels 1 and 2\7f1919580
+Node: I18N Level 3\7f1920286
+Node: Level 3 Basics\7f1920567
+Node: Level 3 Primitives\7f1921400
+Node: Dynamic Messaging\7f1923006
+Node: Domain Specification\7f1923469
+Node: Documentation String Extraction\7f1925372
+Node: I18N Level 4\7f1926290
+Node: MULE\7f1926482
+Node: Internationalization Terminology\7f1927593
+Node: Charsets\7f1936132
+Node: Charset Properties\7f1936828
+Node: Basic Charset Functions\7f1941514
+Node: Charset Property Functions\7f1943695
+Node: Predefined Charsets\7f1945738
+Node: MULE Characters\7f1948658
+Node: Composite Characters\7f1949505
+Node: ISO 2022\7f1950759
+Node: Coding Systems\7f1956481
+Node: Coding System Types\7f1958403
+Node: EOL Conversion\7f1960222
+Node: Coding System Properties\7f1961405
+Node: Basic Coding System Functions\7f1965257
+Node: Coding System Property Functions\7f1967161
+Node: Encoding and Decoding Text\7f1967719
+Node: Detection of Textual Encoding\7f1968855
+Node: Big5 and Shift-JIS Functions\7f1970391
+Node: CCL\7f1971479
+Node: CCL Syntax\7f1974583
+Node: CCL Statements\7f1976171
+Node: CCL Expressions\7f1980819
+Node: Calling CCL\7f1983358
+Node: CCL Examples\7f1986347
+Node: Category Tables\7f1986484
+Node: Tips\7f1988843
+Node: Style Tips\7f1989484
+Node: Compilation Tips\7f1999003
+Node: Documentation Tips\7f2000917
+Node: Comment Tips\7f2006426
+Node: Library Headers\7f2009428
+Node: Building XEmacs and Object Allocation\7f2013400
+Node: Building XEmacs\7f2014283
+Node: Pure Storage\7f2020618
+Node: Garbage Collection\7f2023406
+Node: Standard Errors\7f2034545
+Node: Standard Buffer-Local Variables\7f2038754
+Node: Standard Keymaps\7f2041387
+Node: Standard Hooks\7f2045119
+Node: Index\7f2052619
 \1f
 End Tag Table
index 097bf97..dfc2f71 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -151,7 +151,7 @@ Appendices
 * Index::                   Index including concepts, functions, variables,
                               and other terms.
 
-      -- The Detailed Node Listing --
+      --- The Detailed Node Listing ---
 
 Here are other nodes that are inferiors of those already listed,
 mentioned here so you can get to them in one step:
@@ -303,7 +303,7 @@ Kinds of Forms
 * Classifying Lists::       How to distinguish various sorts of list forms.
 * Function Forms::          Forms that call functions.
 * Macro Forms::             Forms that call macros.
-* Special Forms::           "Special forms" are idiosyncratic primitives,
+* Special Forms::           ``Special forms'' are idiosyncratic primitives,
                               most of them extremely important.
 * Autoloading::             Functions set up to load files
                               containing their real definitions.
@@ -466,7 +466,7 @@ Command Loop
 * Events::             What input looks like when you read it.
 * Reading Input::       How to read input events from the keyboard or mouse.
 * Waiting::             Waiting for user input or elapsed time.
-* Quitting::            How `C-g' works.  How to catch or defer quitting.
+* Quitting::            How C-g works.  How to catch or defer quitting.
 * Prefix Command Arguments::    How the commands to set prefix args work.
 * Recursive Editing::   Entering a recursive edit,
                           and why you usually shouldn't.
@@ -651,7 +651,7 @@ Buffers
                               is visited.
 * Buffer Modification::     A buffer is "modified" if it needs to be saved.
 * Modification Time::       Determining whether the visited file was changed
-                              "behind XEmacs's back".
+                              ``behind XEmacs's back''.
 * Read Only Buffers::       Modifying text is not allowed in a
                               read-only buffer.
 * The Buffer List::         How to look at all the existing buffers.
@@ -720,8 +720,8 @@ Markers
 * Information from Markers::  Finding the marker's buffer or character
                                 position.
 * Changing Markers::        Moving the marker to a new buffer or position.
-* The Mark::                How "the mark" is implemented with a marker.
-* The Region::              How to access "the region".
+* The Mark::                How ``the mark'' is implemented with a marker.
+* The Region::              How to access ``the region''.
 
 Text
 
@@ -828,10 +828,10 @@ Specifiers
                                (under user control) in a wide variety
                                of contexts.
 * Specifiers In-Depth::                Gory details about specifier innards.
-* Specifier Instancing::       Instancing means obtaining the "value" of
+* Specifier Instancing::       Instancing means obtaining the ``value'' of
                                a specifier in a particular context.
 * Specifier Types::            Specifiers come in different flavors.
-* Adding Specifications::      Specifications control a specifier's "value"
+* Adding Specifications::      Specifications control a specifier's ``value''
                                by giving conditions under which a
                                particular value is valid.
 * Retrieving Specifications::  Querying a specifier's specifications.
index 291dd3e..e2a39c4 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -477,7 +477,7 @@ function or variable name, as appropriate.  Also state the number of
 the edition which you are criticizing.
 
    This manual was originally written for FSF Emacs 19 and was updated
-by Ben Wing (wing@666.com) for Lucid Emacs 19.10 and later for XEmacs
+by Ben Wing (ben@xemacs.org) for Lucid Emacs 19.10 and later for XEmacs
 19.12, 19.13, 19.14, and 20.0.  It was further updated by the XEmacs
 Development Team for 19.15 and 20.1.  Please send comments and
 corrections relating to XEmacs-specific portions of this manual to
@@ -667,7 +667,7 @@ and "after" versions of the text.  These examples show the contents of
 the buffer in question between two lines of dashes containing the buffer
 name.  In addition, `-!-' indicates the location of point.  (The symbol
 for point, of course, is not part of the text in the buffer; it
-indicates the place *between* two characters where point is located.)
+indicates the place _between_ two characters where point is located.)
 
      ---------- Buffer: foo ----------
      This is the -!-contents of foo.
@@ -723,7 +723,7 @@ Do not write `&rest' when you call the function.
 
    Here is a description of an imaginary function `foo':
 
- - Function: foo INTEGER1 &optional INTEGER2 &rest INTEGERS
+ - Function: foo integer1 &optional integer2 &rest integers
      The function `foo' subtracts INTEGER1 from INTEGER2, then adds all
      the rest of the arguments to the result.  If INTEGER2 is not
      supplied, then the number 19 is used by default.
@@ -939,7 +939,7 @@ signals the error `invalid-read-syntax' whenever it encounters `#<'.
 
    When you evaluate an expression interactively, the Lisp interpreter
 first reads the textual representation of it, producing a Lisp object,
-and then evaluates that object (*note Evaluation::.).  However,
+and then evaluates that object (*note Evaluation::).  However,
 evaluation and reading are separate activities.  Reading returns the
 Lisp object represented by the text that is read; the object may or may
 not be evaluated later.  *Note Input Functions::, for a description of
@@ -962,7 +962,7 @@ system.
    The `#@COUNT' construct, which skips the next COUNT characters, is
 useful for program-generated comments containing binary data.  The
 XEmacs Lisp byte compiler uses this in its output files (*note Byte
-Compilation::.).  It isn't meant for source files, however.
+Compilation::).  It isn't meant for source files, however.
 
    *Note Comment Tips::, for conventions for formatting comments.
 
@@ -1138,7 +1138,7 @@ Integer Type
 machines, in particular 64-bit machines such as the DEC Alpha, may
 provide a wider range.)  It is important to note that the XEmacs Lisp
 arithmetic functions do not check for overflow.  Thus `(1+ 134217727)'
-is -134217728 on most machines. (However, you *will* get an error if
+is -134217728 on most machines. (However, you _will_ get an error if
 you attempt to read an out-of-range number using the Lisp reader.)
 
    The read syntax for integers is a sequence of (base ten) digits with
index d59669d..bb82c59 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -83,7 +83,7 @@ integer 65, following the standard ASCII representation of characters.
 If XEmacs was not compiled with MULE support, the range of this integer
 will always be 0 to 255 - eight bits, or one byte. (Integers outside
 this range are accepted but silently truncated; however, you should
-most decidedly *not* rely on this, because it will not work under
+most decidedly _not_ rely on this, because it will not work under
 XEmacs with MULE support.)  When MULE support is present, the range of
 character codes is much larger. (Currently, 19 bits are used.)
 
@@ -94,7 +94,7 @@ that does not distinguish between ASCII keys and other keys), so you
 will never find character codes above 255 in a non-MULE XEmacs.
 
    Individual characters are not often used in programs.  It is far more
-common to work with *strings*, which are sequences composed of
+common to work with _strings_, which are sequences composed of
 characters.  *Note String Type::.
 
    The read syntax for characters begins with a question mark, followed
@@ -104,7 +104,7 @@ print representation.  In XEmacs 19, however, where characters are
 really integers, the printed representation of a character is a decimal
 number.  This is also a possible read syntax for a character, but
 writing characters that way in Lisp programs is a very bad idea.  You
-should *always* use the special read syntax formats that XEmacs Lisp
+should _always_ use the special read syntax formats that XEmacs Lisp
 provides for characters.
 
    The usual read syntax for alphanumeric characters is a question mark
@@ -122,7 +122,7 @@ the character `B', and `?a' for the character `a'.
    You can use the same syntax for punctuation characters, but it is
 often a good idea to add a `\' so that the Emacs commands for editing
 Lisp code don't get confused.  For example, `?\ ' is the way to write
-the space character.  If the character is `\', you *must* use a second
+the space character.  If the character is `\', you _must_ use a second
 `\' to quote it: `?\\'.  XEmacs 20 always prints punctuation characters
 with a `\' in front of them, to avoid confusion.
 
@@ -177,7 +177,7 @@ example, both `?\^I' and `?\^i' are valid read syntax for the character
    There is also a character read syntax beginning with `\M-'.  This
 sets the high bit of the character code (same as adding 128 to the
 character code).  For example, `?\M-A' stands for the character with
-character code 193, or 128 plus 65.  You should *not* use this syntax
+character code 193, or 128 plus 65.  You should _not_ use this syntax
 in your programs.  It is a holdover of yet another confoundance disease
 from earlier Emacsen. (This was used to represent keyboard input with
 the <META> key set, thus the `M'; however, it conflicts with the
@@ -276,8 +276,8 @@ considered a sequence.
    Arrays are further subdivided into strings, vectors, and bit vectors.
 Vectors can hold elements of any type, but string elements must be
 characters, and bit vector elements must be either 0 or 1.  However, the
-characters in a string can have extents (*note Extents::.) and text
-properties (*note Text Properties::.) like characters in a buffer;
+characters in a string can have extents (*note Extents::) and text
+properties (*note Text Properties::) like characters in a buffer;
 vectors do not support extents or text properties even when their
 elements happen to be characters.
 
@@ -357,7 +357,7 @@ cell refers to `nil'.
    Here is another diagram of the same list, `(rose violet buttercup)',
 sketched in a different manner:
 
-     ---------------       ----------------       -------------------
+      ---------------       ----------------       -------------------
      | car   | cdr   |     | car    | cdr   |     | car       | cdr   |
      | rose  |   o-------->| violet |   o-------->| buttercup |  nil  |
      |       |       |     |        |       |     |           |       |
@@ -614,13 +614,13 @@ Function Type
 functions in Lisp are primarily Lisp objects, and only secondarily the
 text which represents them.  These Lisp objects are lambda expressions:
 lists whose first element is the symbol `lambda' (*note Lambda
-Expressions::.).
+Expressions::).
 
    In most programming languages, it is impossible to have a function
 without a name.  In Lisp, a function has no intrinsic name.  A lambda
 expression is also called an "anonymous function" (*note Anonymous
-Functions::.).  A named function in Lisp is actually a symbol with a
-valid function in its function cell (*note Defining Functions::.).
+Functions::).  A named function in Lisp is actually a symbol with a
+valid function in its function cell (*note Defining Functions::).
 
    Most of the time, functions are called when their names are written
 in Lisp expressions in Lisp programs.  However, you can construct or
@@ -655,7 +655,7 @@ in the C programming language.  Primitive functions are also called
 "subrs" or "built-in functions".  (The word "subr" is derived from
 "subroutine".)  Most primitive functions evaluate all their arguments
 when they are called.  A primitive function that does not evaluate all
-its arguments is called a "special form" (*note Special Forms::.).
+its arguments is called a "special form" (*note Special Forms::).
 
    It does not matter to the caller of a function whether the function
 is primitive.  However, this does matter if you try to substitute a
@@ -825,10 +825,10 @@ Buffer Type
 -----------
 
    A "buffer" is an object that holds text that can be edited (*note
-Buffers::.).  Most buffers hold the contents of a disk file (*note
-Files::.) so they can be edited, but some are used for other purposes.
+Buffers::).  Most buffers hold the contents of a disk file (*note
+Files::) so they can be edited, but some are used for other purposes.
 Most buffers are also meant to be seen by the user, and therefore
-displayed, at some time, in a window (*note Windows::.).  But a buffer
+displayed, at some time, in a window (*note Windows::).  But a buffer
 need not be displayed in any window.
 
    The contents of a buffer are much like a string, but buffers are not
@@ -839,21 +839,21 @@ concatenating substrings, and the result is an entirely new string
 object.
 
    Each buffer has a designated position called "point" (*note
-Positions::.).  At any time, one buffer is the "current buffer".  Most
+Positions::).  At any time, one buffer is the "current buffer".  Most
 editing commands act on the contents of the current buffer in the
 neighborhood of point.  Many of the standard Emacs functions manipulate
 or test the characters in the current buffer; a whole chapter in this
-manual is devoted to describing these functions (*note Text::.).
+manual is devoted to describing these functions (*note Text::).
 
    Several other data structures are associated with each buffer:
 
-   * a local syntax table (*note Syntax Tables::.);
+   * a local syntax table (*note Syntax Tables::);
 
-   * a local keymap (*note Keymaps::.);
+   * a local keymap (*note Keymaps::);
 
-   * a local variable binding list (*note Buffer-Local Variables::.);
+   * a local variable binding list (*note Buffer-Local Variables::);
 
-   * a list of extents (*note Extents::.);
+   * a list of extents (*note Extents::);
 
    * and various other related properties.
 
@@ -1104,8 +1104,8 @@ streams (character sinks) send characters to a buffer, such as a
    The object `nil', in addition to its other meanings, may be used as
 a stream.  It stands for the value of the variable `standard-input' or
 `standard-output'.  Also, the object `t' as a stream specifies input
-using the minibuffer (*note Minibuffers::.) or output in the echo area
-(*note The Echo Area::.).
+using the minibuffer (*note Minibuffers::) or output in the echo area
+(*note The Echo Area::).
 
    Streams have no special printed representation or read syntax, and
 print as whatever primitive type they are.
@@ -1137,7 +1137,7 @@ Syntax Table Type
    Under XEmacs 20, a "syntax table" is a particular type of char
 table.  Under XEmacs 19, a syntax table a vector of 256 integers.  In
 both cases, each element defines how one character is interpreted when
-it appears in a buffer.  For example, in C mode (*note Major Modes::.),
+it appears in a buffer.  For example, in C mode (*note Major Modes::),
 the `+' character is punctuation, but in Lisp mode it is a valid
 character in a symbol.  These modes specify different interpretations by
 changing the syntax table entry for `+'.
index 096f2d3..6f65791 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -445,10 +445,10 @@ with references to further information.
    The most general way to check the type of an object is to call the
 function `type-of'.  Recall that each object belongs to one and only
 one primitive type; `type-of' tells you which one (*note Lisp Data
-Types::.).  But `type-of' knows nothing about non-primitive types.  In
+Types::).  But `type-of' knows nothing about non-primitive types.  In
 most cases, it is more convenient to use type predicates than `type-of'.
 
- - Function: type-of OBJECT
+ - Function: type-of object
      This function returns a symbol naming the primitive type of
      OBJECT.  The value is one of `bit-vector', `buffer', `char-table',
      `character', `charset', `coding-system', `cons', `color-instance',
@@ -480,7 +480,7 @@ objects.  Other functions test equality between objects of specific
 types, e.g., strings.  For these predicates, see the appropriate chapter
 describing the data type.
 
- - Function: eq OBJECT1 OBJECT2
+ - Function: eq object1 object2
      This function returns `t' if OBJECT1 and OBJECT2 are the same
      object, `nil' otherwise.  The "same object" means that a change in
      one will be reflected by the same change in the other.
@@ -530,12 +530,12 @@ describing the data type.
                => nil
 
 
- - Function: old-eq OBJ1 OBJ2
+ - Function: old-eq obj1 obj2
      This function exists under XEmacs 20 and is exactly like `eq'
      except that it suffers from the char-int confoundance disease.  In
      other words, it returns `t' if given a character and the
      equivalent integer, even though the objects are of different types!
-     You should *not* ever call this function explicitly in your code.
+     You should _not_ ever call this function explicitly in your code.
      However, be aware that all calls to `eq' in byte code compiled
      under version 19 map to `old-eq' in XEmacs 20.  (Likewise for
      `old-equal', `old-memq', `old-member', `old-assq' and
@@ -551,7 +551,7 @@ describing the data type.
           (eq ?A 65)
                => nil             ; We are still healthy.
 
- - Function: equal OBJECT1 OBJECT2
+ - Function: equal object1 object2
      This function returns `t' if OBJECT1 and OBJECT2 have equal
      components, `nil' otherwise.  Whereas `eq' tests if its arguments
      are the same object, `equal' looks inside nonidentical arguments
@@ -655,7 +655,7 @@ optional initial sign and optional final period.
      -0               ; The integer 0.
 
    To understand how various functions work on integers, especially the
-bitwise operators (*note Bitwise Operations::.), it is often helpful to
+bitwise operators (*note Bitwise Operations::), it is often helpful to
 view the numbers in their binary form.
 
    In 28-bit binary, the decimal integer 5 looks like this:
@@ -727,7 +727,7 @@ NaNs or infinities; perhaps we should create a syntax in the future.
    You can use `logb' to extract the binary exponent of a floating
 point number (or estimate the logarithm of an integer):
 
- - Function: logb NUMBER
+ - Function: logb number
      This function returns the binary exponent of NUMBER.  More
      precisely, the value is the logarithm of NUMBER base 2, rounded
      down to an integer.
@@ -746,27 +746,27 @@ predicate requires a number as its argument.  See also
 `integer-or-marker-p', `integer-char-or-marker-p', `number-or-marker-p'
 and `number-char-or-marker-p', in *Note Predicates on Markers::.
 
- - Function: floatp OBJECT
+ - Function: floatp object
      This predicate tests whether its argument is a floating point
      number and returns `t' if so, `nil' otherwise.
 
      `floatp' does not exist in Emacs versions 18 and earlier.
 
- - Function: integerp OBJECT
+ - Function: integerp object
      This predicate tests whether its argument is an integer, and
      returns `t' if so, `nil' otherwise.
 
- - Function: numberp OBJECT
+ - Function: numberp object
      This predicate tests whether its argument is a number (either
      integer or floating point), and returns `t' if so, `nil' otherwise.
 
- - Function: natnump OBJECT
+ - Function: natnump object
      The `natnump' predicate (whose name comes from the phrase
      "natural-number-p") tests to see whether its argument is a
      nonnegative integer, and returns `t' if so, `nil' otherwise.  0 is
      considered non-negative.
 
- - Function: zerop NUMBER
+ - Function: zerop number
      This predicate tests whether its argument is zero, and returns `t'
      if so, `nil' otherwise.  The argument must be a number.
 
@@ -781,7 +781,7 @@ Comparison of Numbers
    To test numbers for numerical equality, you should normally use `=',
 not `eq'.  There can be many distinct floating point number objects
 with the same numeric value.  If you use `eq' to compare them, then you
-test whether two values are the same *object*.  By contrast, `='
+test whether two values are the same _object_.  By contrast, `='
 compares only the numeric values of the objects.
 
    At present, each integer value has a unique Lisp object in XEmacs
@@ -816,7 +816,7 @@ Here's a function to do this:
 characters and markers as arguments, and treat them as their number
 equivalents.
 
- - Function: = NUMBER &rest MORE-NUMBERS
+ - Function: = number &rest more-numbers
      This function returns `t' if all of its arguments are numerically
      equal, `nil' otherwise.
 
@@ -829,7 +829,7 @@ equivalents.
           (= 5 5 6)
                => nil
 
- - Function: /= NUMBER &rest MORE-NUMBERS
+ - Function: /= number &rest more-numbers
      This function returns `t' if no two arguments are numerically
      equal, `nil' otherwise.
 
@@ -840,7 +840,7 @@ equivalents.
           (/= 5 6 1)
                => t
 
- - Function: < NUMBER &rest MORE-NUMBERS
+ - Function: < number &rest more-numbers
      This function returns `t' if the sequence of its arguments is
      monotonically increasing, `nil' otherwise.
 
@@ -851,7 +851,7 @@ equivalents.
           (< 5 6 7)
                => t
 
- - Function: <= NUMBER &rest MORE-NUMBERS
+ - Function: <= number &rest more-numbers
      This function returns `t' if the sequence of its arguments is
      monotonically nondecreasing, `nil' otherwise.
 
@@ -862,15 +862,15 @@ equivalents.
           (<= 5 6 5)
                => nil
 
- - Function: > NUMBER &rest MORE-NUMBERS
+ - Function: > number &rest more-numbers
      This function returns `t' if the sequence of its arguments is
      monotonically decreasing, `nil' otherwise.
 
- - Function: >= NUMBER &rest MORE-NUMBERS
+ - Function: >= number &rest more-numbers
      This function returns `t' if the sequence of its arguments is
      monotonically nonincreasing, `nil' otherwise.
 
- - Function: max NUMBER &rest MORE-NUMBERS
+ - Function: max number &rest more-numbers
      This function returns the largest of its arguments.
 
           (max 20)
@@ -880,7 +880,7 @@ equivalents.
           (max 1 3 2.5)
                => 3
 
- - Function: min NUMBER &rest MORE-NUMBERS
+ - Function: min number &rest more-numbers
      This function returns the smallest of its arguments.
 
           (min -4 1)
@@ -894,7 +894,7 @@ Numeric Conversions
 
    To convert an integer to floating point, use the function `float'.
 
- - Function: float NUMBER
+ - Function: float number
      This returns NUMBER converted to floating point.  If NUMBER is
      already a floating point number, `float' returns it unchanged.
 
@@ -902,11 +902,11 @@ Numeric Conversions
 integers; they differ in how they round.  These functions accept
 integer arguments also, and return such arguments unchanged.
 
- - Function: truncate NUMBER
+ - Function: truncate number
      This returns NUMBER, converted to an integer by rounding towards
      zero.
 
- - Function: floor NUMBER &optional DIVISOR
+ - Function: floor number &optional divisor
      This returns NUMBER, converted to an integer by rounding downward
      (towards negative infinity).
 
@@ -914,11 +914,11 @@ integer arguments also, and return such arguments unchanged.
      floor is taken; this is the division operation that corresponds to
      `mod'.  An `arith-error' results if DIVISOR is 0.
 
- - Function: ceiling NUMBER
+ - Function: ceiling number
      This returns NUMBER, converted to an integer by rounding upward
      (towards positive infinity).
 
- - Function: round NUMBER
+ - Function: round number
      This returns NUMBER, converted to an integer by rounding towards
      the nearest integer.  Rounding a value equidistant between two
      integers may choose the integer closer to zero, or it may prefer
@@ -943,7 +943,7 @@ any argument is floating.
 not check for overflow.  Thus `(1+ 134217727)' may evaluate to
 -134217728, depending on your hardware.
 
- - Function: 1+ NUMBER-OR-MARKER
+ - Function: 1+ number-or-marker
      This function returns NUMBER-OR-MARKER plus 1.  For example,
 
           (setq foo 4)
@@ -968,13 +968,13 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
      more convenient and natural way to increment a variable is
      `(incf foo)'.
 
- - Function: 1- NUMBER-OR-MARKER
+ - Function: 1- number-or-marker
      This function returns NUMBER-OR-MARKER minus 1.
 
- - Function: abs NUMBER
+ - Function: abs number
      This returns the absolute value of NUMBER.
 
- - Function: + &rest NUMBERS-OR-MARKERS
+ - Function: + &rest numbers-or-markers
      This function adds its arguments together.  When given no
      arguments, `+' returns 0.
 
@@ -985,7 +985,7 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
           (+ 1 2 3 4)
                => 10
 
- - Function: - &optional NUMBER-OR-MARKER &rest OTHER-NUMBERS-OR-MARKERS
+ - Function: - &optional number-or-marker &rest other-numbers-or-markers
      The `-' function serves two purposes: negation and subtraction.
      When `-' has a single argument, the value is the negative of the
      argument.  When there are multiple arguments, `-' subtracts each of
@@ -999,7 +999,7 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
           (-)
                => 0
 
- - Function: * &rest NUMBERS-OR-MARKERS
+ - Function: * &rest numbers-or-markers
      This function multiplies its arguments together, and returns the
      product.  When given no arguments, `*' returns 1.
 
@@ -1010,7 +1010,7 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
           (* 1 2 3 4)
                => 24
 
- - Function: / DIVIDEND DIVISOR &rest DIVISORS
+ - Function: / dividend divisor &rest divisors
      This function divides DIVIDEND by DIVISOR and returns the
      quotient.  If there are additional arguments DIVISORS, then it
      divides DIVIDEND by each divisor in turn.  Each argument may be a
@@ -1039,7 +1039,7 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
      The result of `(/ -17 6)' could in principle be -3 on some
      machines.
 
- - Function: % DIVIDEND DIVISOR
+ - Function: % dividend divisor
      This function returns the integer remainder after division of
      DIVIDEND by DIVISOR.  The arguments must be integers or markers.
 
@@ -1065,7 +1065,7 @@ not check for overflow.  Thus `(1+ 134217727)' may evaluate to
 
      always equals DIVIDEND.
 
- - Function: mod DIVIDEND DIVISOR
+ - Function: mod dividend divisor
      This function returns the value of DIVIDEND modulo DIVISOR; in
      other words, the remainder after division of DIVIDEND by DIVISOR,
      but with the same sign as DIVISOR.  The arguments must be numbers
@@ -1110,19 +1110,19 @@ is a nearby integer.  `ffloor' returns the nearest integer below;
 `fceiling', the nearest integer above; `ftruncate', the nearest integer
 in the direction towards zero; `fround', the nearest integer.
 
- - Function: ffloor FLOAT
+ - Function: ffloor float
      This function rounds FLOAT to the next lower integral value, and
      returns that value as a floating point number.
 
- - Function: fceiling FLOAT
+ - Function: fceiling float
      This function rounds FLOAT to the next higher integral value, and
      returns that value as a floating point number.
 
- - Function: ftruncate FLOAT
+ - Function: ftruncate float
      This function rounds FLOAT towards zero to an integral value, and
      returns that value as a floating point number.
 
- - Function: fround FLOAT
+ - Function: fround float
      This function rounds FLOAT to the nearest integral value, and
      returns that value as a floating point number.
 
@@ -1140,7 +1140,7 @@ reproducing the same pattern "moved over".
 
    The bitwise operations in XEmacs Lisp apply only to integers.
 
- - Function: lsh INTEGER1 COUNT
+ - Function: lsh integer1 count
      `lsh', which is an abbreviation for "logical shift", shifts the
      bits in INTEGER1 to the left COUNT places, or to the right if
      COUNT is negative, bringing zeros into the vacated bits.  If COUNT
@@ -1208,7 +1208,7 @@ reproducing the same pattern "moved over".
           ;; Decimal -2
           1111  1111 1111  1111 1111  1111 1110
 
- - Function: ash INTEGER1 COUNT
+ - Function: ash integer1 count
      `ash' ("arithmetic shift") shifts the bits in INTEGER1 to the left
      COUNT places, or to the right if COUNT is negative.
 
@@ -1237,31 +1237,26 @@ reproducing the same pattern "moved over".
 
      Here are other examples:
 
-          ;               28-bit binary values
+                             ;               28-bit binary values
           
           (lsh 5 2)          ;   5  =  0000  0000 0000  0000 0000  0000 0101
                => 20         ;      =  0000  0000 0000  0000 0000  0001 0100
-
           (ash 5 2)
                => 20
           (lsh -5 2)         ;  -5  =  1111  1111 1111  1111 1111  1111 1011
                => -20        ;      =  1111  1111 1111  1111 1111  1110 1100
           (ash -5 2)
                => -20
-
           (lsh 5 -2)         ;   5  =  0000  0000 0000  0000 0000  0000 0101
                => 1          ;      =  0000  0000 0000  0000 0000  0000 0001
-
           (ash 5 -2)
                => 1
-
           (lsh -5 -2)        ;  -5  =  1111  1111 1111  1111 1111  1111 1011
                => 4194302    ;      =  0011  1111 1111  1111 1111  1111 1110
-
           (ash -5 -2)        ;  -5  =  1111  1111 1111  1111 1111  1111 1011
                => -2         ;      =  1111  1111 1111  1111 1111  1111 1110
 
- - Function: logand &rest INTS-OR-MARKERS
+ - Function: logand &rest ints-or-markers
      This function returns the "logical and" of the arguments: the Nth
      bit is set in the result if, and only if, the Nth bit is set in
      all the arguments.  ("Set" means that the value of the bit is 1
@@ -1285,57 +1280,57 @@ reproducing the same pattern "moved over".
      representation consists entirely of ones.  If `logand' is passed
      just one argument, it returns that argument.
 
-          ;                28-bit binary values
+                             ;                28-bit binary values
           
           (logand 14 13)     ; 14  =  0000  0000 0000  0000 0000  0000 1110
                              ; 13  =  0000  0000 0000  0000 0000  0000 1101
                => 12         ; 12  =  0000  0000 0000  0000 0000  0000 1100
-
+          
           (logand 14 13 4)   ; 14  =  0000  0000 0000  0000 0000  0000 1110
                              ; 13  =  0000  0000 0000  0000 0000  0000 1101
                              ;  4  =  0000  0000 0000  0000 0000  0000 0100
                => 4          ;  4  =  0000  0000 0000  0000 0000  0000 0100
-
+          
           (logand)
                => -1         ; -1  =  1111  1111 1111  1111 1111  1111 1111
 
- - Function: logior &rest INTS-OR-MARKERS
+ - Function: logior &rest ints-or-markers
      This function returns the "inclusive or" of its arguments: the Nth
      bit is set in the result if, and only if, the Nth bit is set in at
      least one of the arguments.  If there are no arguments, the result
      is zero, which is an identity element for this operation.  If
      `logior' is passed just one argument, it returns that argument.
 
-          ;               28-bit binary values
+                             ;               28-bit binary values
           
           (logior 12 5)      ; 12  =  0000  0000 0000  0000 0000  0000 1100
                              ;  5  =  0000  0000 0000  0000 0000  0000 0101
                => 13         ; 13  =  0000  0000 0000  0000 0000  0000 1101
-
+          
           (logior 12 5 7)    ; 12  =  0000  0000 0000  0000 0000  0000 1100
                              ;  5  =  0000  0000 0000  0000 0000  0000 0101
                              ;  7  =  0000  0000 0000  0000 0000  0000 0111
                => 15         ; 15  =  0000  0000 0000  0000 0000  0000 1111
 
- - Function: logxor &rest INTS-OR-MARKERS
+ - Function: logxor &rest ints-or-markers
      This function returns the "exclusive or" of its arguments: the Nth
      bit is set in the result if, and only if, the Nth bit is set in an
      odd number of the arguments.  If there are no arguments, the
      result is 0, which is an identity element for this operation.  If
      `logxor' is passed just one argument, it returns that argument.
 
-          ;               28-bit binary values
+                             ;               28-bit binary values
           
           (logxor 12 5)      ; 12  =  0000  0000 0000  0000 0000  0000 1100
                              ;  5  =  0000  0000 0000  0000 0000  0000 0101
                => 9          ;  9  =  0000  0000 0000  0000 0000  0000 1001
-
+          
           (logxor 12 5 7)    ; 12  =  0000  0000 0000  0000 0000  0000 1100
                              ;  5  =  0000  0000 0000  0000 0000  0000 0101
                              ;  7  =  0000  0000 0000  0000 0000  0000 0111
                => 14         ; 14  =  0000  0000 0000  0000 0000  0000 1110
 
- - Function: lognot INTEGER
+ - Function: lognot integer
      This function returns the logical complement of its argument: the
      Nth bit is one in the result if, and only if, the Nth bit is zero
      in INTEGER, and vice-versa.
@@ -1356,61 +1351,61 @@ Standard Mathematical Functions
 supported (which is the normal state of affairs).  They allow integers
 as well as floating point numbers as arguments.
 
- - Function: sin ARG
- - Function: cos ARG
- - Function: tan ARG
+ - Function: sin arg
+ - Function: cos arg
+ - Function: tan arg
      These are the ordinary trigonometric functions, with argument
      measured in radians.
 
- - Function: asin ARG
+ - Function: asin arg
      The value of `(asin ARG)' is a number between -pi/2 and pi/2
      (inclusive) whose sine is ARG; if, however, ARG is out of range
      (outside [-1, 1]), then the result is a NaN.
 
- - Function: acos ARG
+ - Function: acos arg
      The value of `(acos ARG)' is a number between 0 and pi (inclusive)
      whose cosine is ARG; if, however, ARG is out of range (outside
      [-1, 1]), then the result is a NaN.
 
- - Function: atan ARG
+ - Function: atan arg
      The value of `(atan ARG)' is a number between -pi/2 and pi/2
      (exclusive) whose tangent is ARG.
 
- - Function: sinh ARG
- - Function: cosh ARG
- - Function: tanh ARG
+ - Function: sinh arg
+ - Function: cosh arg
+ - Function: tanh arg
      These are the ordinary hyperbolic trigonometric functions.
 
- - Function: asinh ARG
- - Function: acosh ARG
- - Function: atanh ARG
+ - Function: asinh arg
+ - Function: acosh arg
+ - Function: atanh arg
      These are the inverse hyperbolic trigonometric functions.
 
- - Function: exp ARG
+ - Function: exp arg
      This is the exponential function; it returns e to the power ARG.
      e is a fundamental mathematical constant also called the base of
      natural logarithms.
 
- - Function: log ARG &optional BASE
+ - Function: log arg &optional base
      This function returns the logarithm of ARG, with base BASE.  If
      you don't specify BASE, the base E is used.  If ARG is negative,
      the result is a NaN.
 
- - Function: log10 ARG
+ - Function: log10 arg
      This function returns the logarithm of ARG, with base 10.  If ARG
      is negative, the result is a NaN.  `(log10 X)' == `(log X 10)', at
      least approximately.
 
- - Function: expt X Y
+ - Function: expt x y
      This function returns X raised to power Y.  If both arguments are
      integers and Y is positive, the result is an integer; in this
      case, it is truncated to fit the range of possible integer values.
 
- - Function: sqrt ARG
+ - Function: sqrt arg
      This returns the square root of ARG.  If ARG is negative, the
      value is a NaN.
 
- - Function: cube-root ARG
+ - Function: cube-root arg
      This returns the cube root of ARG.
 
 \1f
@@ -1439,7 +1434,7 @@ debugging.
 t)'.  This chooses a new seed based on the current time of day and on
 XEmacs's process ID number.
 
- - Function: random &optional LIMIT
+ - Function: random &optional limit
      This function returns a pseudo-random integer.  Repeated calls
      return a series of pseudo-random integers.
 
index cadf18b..9b6e82b 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -62,7 +62,7 @@ integers; whether an integer was intended as a character or not is
 determined only by how it is used.  *Note Character Type::.
 
    The length of a string (like any array) is fixed and independent of
-the string contents, and cannot be altered.  Strings in Lisp are *not*
+the string contents, and cannot be altered.  Strings in Lisp are _not_
 terminated by a distinguished character code.  (By contrast, strings in
 C are terminated by a character with ASCII code 0.)  This means that
 any character, including the null character (ASCII code 0), is a valid
@@ -71,22 +71,22 @@ element of a string.
    Since strings are considered arrays, you can operate on them with the
 general array functions.  (*Note Sequences Arrays Vectors::.)  For
 example, you can access or change individual characters in a string
-using the functions `aref' and `aset' (*note Array Functions::.).
+using the functions `aref' and `aset' (*note Array Functions::).
 
    Strings use an efficient representation for storing the characters
 in them, and thus take up much less memory than a vector of the same
 length.
 
    Sometimes you will see strings used to hold key sequences.  This
-exists for backward compatibility with Emacs 18, but should *not* be
+exists for backward compatibility with Emacs 18, but should _not_ be
 used in new code, since many key chords can't be represented at all and
 others (in particular meta key chords) are confused with accented
 characters.
 
    Strings are useful for holding regular expressions.  You can also
-match regular expressions against strings (*note Regexp Search::.).  The
-functions `match-string' (*note Simple Match Data::.) and
-`replace-match' (*note Replacing Match::.) are useful for decomposing
+match regular expressions against strings (*note Regexp Search::).  The
+functions `match-string' (*note Simple Match Data::) and
+`replace-match' (*note Replacing Match::) are useful for decomposing
 and modifying strings based on regular expression matching.
 
    Like a buffer, a string can contain extents in it.  These extents are
@@ -108,10 +108,10 @@ The Predicates for Strings
    For more information about general sequence and array predicates,
 see *Note Sequences Arrays Vectors::, and *Note Arrays::.
 
- - Function: stringp OBJECT
+ - Function: stringp object
      This function returns `t' if OBJECT is a string, `nil' otherwise.
 
- - Function: char-or-string-p OBJECT
+ - Function: char-or-string-p object
      This function returns `t' if OBJECT is a string or a character,
      `nil' otherwise.
 
@@ -129,7 +129,7 @@ Creating Strings
    The following functions create strings, either from scratch, or by
 putting strings together, or by taking them apart.
 
- - Function: string &rest CHARACTERS
+ - Function: string &rest characters
      This function returns a new string made up of CHARACTERS.
 
           (string ?X ?E ?m ?a ?c ?s)
@@ -138,11 +138,11 @@ putting strings together, or by taking them apart.
                => ""
 
      Analogous functions operating on other data types include `list',
-     `cons' (*note Building Lists::.), `vector' (*note Vectors::.)  and
-     `bit-vector' (*note Bit Vectors::.).  This function has not been
+     `cons' (*note Building Lists::), `vector' (*note Vectors::) and
+     `bit-vector' (*note Bit Vectors::).  This function has not been
      available in XEmacs prior to 21.0 and FSF Emacs prior to 20.3.
 
- - Function: make-string COUNT CHARACTER
+ - Function: make-string count character
      This function returns a string made up of COUNT repetitions of
      CHARACTER.  If COUNT is negative, an error is signaled.
 
@@ -152,10 +152,10 @@ putting strings together, or by taking them apart.
                => ""
 
      Other functions to compare with this one include `char-to-string'
-     (*note String Conversion::.), `make-vector' (*note Vectors::.), and
-     `make-list' (*note Building Lists::.).
+     (*note String Conversion::), `make-vector' (*note Vectors::), and
+     `make-list' (*note Building Lists::).
 
- - Function: substring STRING START &optional END
+ - Function: substring string start &optional end
      This function returns a new string which consists of those
      characters from STRING in the range from (and including) the
      character at the index START up to (but excluding) the character
@@ -195,7 +195,7 @@ putting strings together, or by taking them apart.
                => "abcdefg"
 
      But we recommend `copy-sequence' for this purpose (*note Sequence
-     Functions::.).
+     Functions::).
 
      If the characters copied from STRING have duplicable extents or
      text properties, those are copied into the new string also.  *Note
@@ -207,11 +207,11 @@ putting strings together, or by taking them apart.
      either integer is out of range for STRING.
 
      Contrast this function with `buffer-substring' (*note Buffer
-     Contents::.), which returns a string containing a portion of the
+     Contents::), which returns a string containing a portion of the
      text in the current buffer.  The beginning of a string is at index
      0, but the beginning of a buffer is at index 1.
 
- - Function: concat &rest SEQUENCES
+ - Function: concat &rest sequences
      This function returns a new string consisting of the characters in
      the arguments passed to it (along with their text properties, if
      any).  The arguments may be strings, lists of numbers, or vectors
@@ -242,8 +242,8 @@ putting strings together, or by taking them apart.
      representation of the integer.  *Don't use this feature; we plan
      to eliminate it.  If you already use this feature, change your
      programs now!*  The proper way to convert an integer to a decimal
-     number in this way is with `format' (*note Formatting Strings::.)
-     or `number-to-string' (*note String Conversion::.).
+     number in this way is with `format' (*note Formatting Strings::) or
+     `number-to-string' (*note String Conversion::).
 
           (concat 137)
                => "137"
@@ -261,7 +261,7 @@ File: lispref.info,  Node: Predicates for Characters,  Next: Character Codes,  P
 The Predicates for Characters
 =============================
 
- - Function: characterp OBJECT
+ - Function: characterp object
      This function returns `t' if OBJECT is a character.
 
      Some functions that work on integers (e.g. the comparison functions
@@ -275,7 +275,7 @@ The Predicates for Characters
      in the future; therefore, do not rely on them.  Instead, convert
      the characters explicitly using `char-int'.
 
- - Function: integer-or-char-p OBJECT
+ - Function: integer-or-char-p object
      This function returns `t' if OBJECT is an integer or character.
 
 \1f
@@ -284,7 +284,7 @@ File: lispref.info,  Node: Character Codes,  Next: Text Comparison,  Prev: Predi
 Character Codes
 ===============
 
- - Function: char-int CH
+ - Function: char-int ch
      This function converts a character into an equivalent integer.
      The resulting integer will always be non-negative.  The integers in
      the range 0 - 255 map to characters as follows:
@@ -307,17 +307,17 @@ Character Codes
      XEmacs, the order in which character sets were loaded, etc., and
      you should not depend on them.
 
- - Function: int-char INTEGER
+ - Function: int-char integer
      This function converts an integer into the equivalent character.
      Not all integers correspond to valid characters; use `char-int-p'
      to determine whether this is the case.  If the integer cannot be
      converted, `nil' is returned.
 
- - Function: char-int-p OBJECT
+ - Function: char-int-p object
      This function returns `t' if OBJECT is an integer that can be
      converted into a character.
 
- - Function: char-or-char-int-p OBJECT
+ - Function: char-or-char-int-p object
      This function returns `t' if OBJECT is a character or an integer
      that can be converted into one.
 
@@ -327,7 +327,7 @@ File: lispref.info,  Node: Text Comparison,  Next: String Conversion,  Prev: Cha
 Comparison of Characters and Strings
 ====================================
 
- - Function: char-equal CHARACTER1 CHARACTER2
+ - Function: char-equal character1 character2
      This function returns `t' if the arguments represent the same
      character, `nil' otherwise.  This function ignores differences in
      case if `case-fold-search' is non-`nil'.
@@ -341,7 +341,7 @@ Comparison of Characters and Strings
             (char-equal ?x ?X))
                => nil
 
- - Function: char= CHARACTER1 CHARACTER2
+ - Function: char= character1 character2
      This function returns `t' if the arguments represent the same
      character, `nil' otherwise.  Case is significant.
 
@@ -356,7 +356,7 @@ Comparison of Characters and Strings
             (char-equal ?x ?X))
                => nil
 
- - Function: string= STRING1 STRING2
+ - Function: string= string1 string2
      This function returns `t' if the characters of the two strings
      match exactly; case is significant.
 
@@ -368,10 +368,10 @@ Comparison of Characters and Strings
                => nil
 
 
- - Function: string-equal STRING1 STRING2
+ - Function: string-equal string1 string2
      `string-equal' is another name for `string='.
 
- - Function: string< STRING1 STRING2
+ - Function: string< string1 string2
      This function compares two strings a character at a time.  First it
      scans both the strings at once to find the first pair of
      corresponding characters that do not match.  If the lesser
@@ -410,7 +410,7 @@ Comparison of Characters and Strings
           (string< "" "")
                => nil
 
- - Function: string-lessp STRING1 STRING2
+ - Function: string-lessp string1 string2
      `string-lessp' is another name for `string<'.
 
    See also `compare-buffer-substrings' in *Note Comparing Text::, for
@@ -426,8 +426,8 @@ Conversion of Characters and Strings
 
    This section describes functions for conversions between characters,
 strings and integers.  `format' and `prin1-to-string' (*note Output
-Functions::.) can also convert Lisp objects into strings.
-`read-from-string' (*note Input Functions::.) can "convert" a string
+Functions::) can also convert Lisp objects into strings.
+`read-from-string' (*note Input Functions::) can "convert" a string
 representation of a Lisp object into an object.
 
    *Note Documentation::, for functions that produce textual
@@ -435,7 +435,7 @@ descriptions of text characters and general input events
 (`single-key-description' and `text-char-description').  These
 functions are used primarily for making help messages.
 
- - Function: char-to-string CHARACTER
+ - Function: char-to-string character
      This function returns a new string with a length of one character.
      The value of CHARACTER, modulo 256, is used to initialize the
      element of the string.
@@ -452,7 +452,7 @@ functions are used primarily for making help messages.
           (make-string 1 ?x)
                => "x"
 
- - Function: string-to-char STRING
+ - Function: string-to-char string
      This function returns the first character in STRING.  If the
      string is empty, the function returns 0. (Under XEmacs 19, the
      value is also 0 when the first character of STRING is the null
@@ -473,7 +473,7 @@ functions are used primarily for making help messages.
      This function may be eliminated in the future if it does not seem
      useful enough to retain.
 
- - Function: number-to-string NUMBER
+ - Function: number-to-string number
      This function returns a string consisting of the printed
      representation of NUMBER, which may be an integer or a floating
      point number.  The value starts with a sign if the argument is
@@ -490,7 +490,7 @@ functions are used primarily for making help messages.
 
      See also the function `format' in *Note Formatting Strings::.
 
- - Function: string-to-number STRING &optional BASE
+ - Function: string-to-number string &optional base
      This function returns the numeric value of the characters in
      STRING, read in BASE.  It skips spaces and tabs at the beginning
      of STRING, then reads as much of STRING as it can interpret as a
@@ -530,7 +530,7 @@ character.
 string is created) and is incremented each time a change is made to that
 string.
 
- - Function: string-modified-tick STRING
+ - Function: string-modified-tick string
      This function returns the tick counter for `string'.
 
 \1f
@@ -565,7 +565,7 @@ In fact, the functions `message' and `error' provide the same
 formatting feature described here; they differ from `format' only in
 how they use the result of formatting.
 
- - Function: format STRING &rest OBJECTS
+ - Function: format string &rest objects
      This function returns a new string that is made by copying STRING
      and then replacing any format specification in the copy with
      encodings of the corresponding OBJECTS.  The arguments OBJECTS are
@@ -747,11 +747,11 @@ truncated.  In the third case, the padding is on the right.
      (format "The word `%7s' actually has %d letters in it."
              "foo" (length "foo"))
           => "The word `    foo' actually has 3 letters in it."
-
+     
      (format "The word `%7s' actually has %d letters in it."
              "specification" (length "specification"))
           => "The word `specification' actually has 13 letters in it."
-
+     
      (format "The word `%-7s' actually has %d letters in it."
              "foo" (length "foo"))
           => "The word `foo    ' actually has 3 letters in it."
@@ -793,7 +793,7 @@ that are passed to them as arguments.
    The examples below use the characters `X' and `x' which have ASCII
 codes 88 and 120 respectively.
 
- - Function: downcase STRING-OR-CHAR
+ - Function: downcase string-or-char
      This function converts a character or a string to lower case.
 
      When the argument to `downcase' is a string, the function creates
@@ -811,7 +811,7 @@ codes 88 and 120 respectively.
                => ?x   ;; Under XEmacs 20.
                => 120  ;; Under XEmacs 19.
 
- - Function: upcase STRING-OR-CHAR
+ - Function: upcase string-or-char
      This function converts a character or a string to upper case.
 
      When the argument to `upcase' is a string, the function creates
@@ -831,7 +831,7 @@ codes 88 and 120 respectively.
                => ?X   ;; Under XEmacs 20.
                => 88   ;; Under XEmacs 19.
 
- - Function: capitalize STRING-OR-CHAR
+ - Function: capitalize string-or-char
      This function capitalizes strings or characters.  If
      STRING-OR-CHAR is a string, the function creates and returns a new
      string, whose contents are a copy of STRING-OR-CHAR in which each
@@ -841,7 +841,7 @@ codes 88 and 120 respectively.
 
      The definition of a word is any sequence of consecutive characters
      that are assigned to the word constituent syntax class in the
-     current syntax table (*note Syntax Class Table::.).
+     current syntax table (*note Syntax Class Table::).
 
      When the argument to `capitalize' is a character, `capitalize' has
      the same result as `upcase'.
@@ -866,8 +866,8 @@ The Case Table
 table".  A case table specifies the mapping between upper case and lower
 case letters.  It affects both the string and character case conversion
 functions (see the previous section) and those that apply to text in the
-buffer (*note Case Changes::.).  You need a case table if you are using
-a language which has letters other than the standard ASCII letters.
+buffer (*note Case Changes::).  You need a case table if you are using a
+language which has letters other than the standard ASCII letters.
 
    A case table is a list of this form:
 
@@ -907,10 +907,10 @@ Changing the standard case table doesn't affect any existing buffers.
 
    Here are the functions for working with case tables:
 
- - Function: case-table-p OBJECT
+ - Function: case-table-p object
      This predicate returns non-`nil' if OBJECT is a valid case table.
 
- - Function: set-standard-case-table TABLE
+ - Function: set-standard-case-table table
      This function makes TABLE the standard case table, so that it will
      apply to any buffers created subsequently.
 
@@ -920,7 +920,7 @@ Changing the standard case table doesn't affect any existing buffers.
  - Function: current-case-table
      This function returns the current buffer's case table.
 
- - Function: set-case-table TABLE
+ - Function: set-case-table table
      This sets the current buffer's case table to TABLE.
 
    The following three functions are convenient subroutines for packages
@@ -929,15 +929,15 @@ DOWNCASE-TABLE provided as an argument; this should be a string to be
 used as the DOWNCASE part of a case table.  They also modify the
 standard syntax table.  *Note Syntax Tables::.
 
- - Function: set-case-syntax-pair UC LC DOWNCASE-TABLE
+ - Function: set-case-syntax-pair uc lc downcase-table
      This function specifies a pair of corresponding letters, one upper
      case and one lower case.
 
- - Function: set-case-syntax-delims L R DOWNCASE-TABLE
+ - Function: set-case-syntax-delims l r downcase-table
      This function makes characters L and R a matching pair of
      case-invariant delimiters.
 
- - Function: set-case-syntax CHAR SYNTAX DOWNCASE-TABLE
+ - Function: set-case-syntax char syntax downcase-table
      This function makes CHAR case-invariant, with syntax SYNTAX.
 
  - Command: describe-buffer-case-table
@@ -984,7 +984,7 @@ assigned values are
 
    * a single character
 
- - Function: char-table-p OBJECT
+ - Function: char-table-p object
      This function returns non-`nil' if OBJECT is a char table.
 
 * Menu:
@@ -1026,13 +1026,13 @@ different sorts of values.  The different char table types are
      character.  Higher-level Lisp functions are provided for working
      with syntax tables.  The valid values are integers.
 
- - Function: char-table-type TABLE
+ - Function: char-table-type table
      This function returns the type of char table TABLE.
 
  - Function: char-table-type-list
      This function returns a list of the recognized char table types.
 
- - Function: valid-char-table-type-p TYPE
+ - Function: valid-char-table-type-p type
      This function returns `t' if TYPE if a recognized char table type.
 
 \1f
@@ -1041,12 +1041,12 @@ File: lispref.info,  Node: Working With Char Tables,  Prev: Char Table Types,  U
 Working With Char Tables
 ------------------------
 
- - Function: make-char-table TYPE
+ - Function: make-char-table type
      This function makes a new, empty char table of type TYPE.  TYPE
      should be a symbol, one of `char', `category', `display',
      `generic', or `syntax'.
 
- - Function: put-char-table RANGE VAL TABLE
+ - Function: put-char-table range val table
      This function sets the value for chars in RANGE to be VAL in TABLE.
 
      RANGE specifies one or more characters to be affected and should be
@@ -1063,17 +1063,17 @@ Working With Char Tables
 
      VAL must be a value appropriate for the type of TABLE.
 
- - Function: get-char-table CH TABLE
+ - Function: get-char-table ch table
      This function finds the value for char CH in TABLE.
 
- - Function: get-range-char-table RANGE TABLE &optional MULTI
+ - Function: get-range-char-table range table &optional multi
      This function finds the value for a range in TABLE.  If there is
      more than one value, MULTI is returned (defaults to `nil').
 
- - Function: reset-char-table TABLE
+ - Function: reset-char-table table
      This function resets a char table to its default state.
 
- - Function: map-char-table FUNCTION TABLE &optional RANGE
+ - Function: map-char-table function table &optional range
      This function maps FUNCTION over entries in TABLE, calling it with
      two args, each key and value in the table.
 
@@ -1081,11 +1081,11 @@ Working With Char Tables
      as the RANGE argument to `put-range-table'.  If omitted or `t', it
      defaults to the entire table.
 
- - Function: valid-char-table-value-p VALUE CHAR-TABLE-TYPE
+ - Function: valid-char-table-value-p value char-table-type
      This function returns non-`nil' if VALUE is a valid value for
      CHAR-TABLE-TYPE.
 
- - Function: check-valid-char-table-value VALUE CHAR-TABLE-TYPE
+ - Function: check-valid-char-table-value value char-table-type
      This function signals an error if VALUE is not a valid value for
      CHAR-TABLE-TYPE.
 
@@ -1222,18 +1222,18 @@ cons cell or is a list, or whether it is the distinguished object
 `nil'.  (Many of these predicates can be defined in terms of the
 others, but they are used so often that it is worth having all of them.)
 
- - Function: consp OBJECT
+ - Function: consp object
      This function returns `t' if OBJECT is a cons cell, `nil'
-     otherwise.  `nil' is not a cons cell, although it *is* a list.
+     otherwise.  `nil' is not a cons cell, although it _is_ a list.
 
- - Function: atom OBJECT
+ - Function: atom object
      This function returns `t' if OBJECT is an atom, `nil' otherwise.
      All objects except cons cells are atoms.  The symbol `nil' is an
      atom and is also a list; it is the only Lisp object that is both.
 
           (atom OBJECT) == (not (consp OBJECT))
 
- - Function: listp OBJECT
+ - Function: listp object
      This function returns `t' if OBJECT is a cons cell or `nil'.
      Otherwise, it returns `nil'.
 
@@ -1242,13 +1242,13 @@ others, but they are used so often that it is worth having all of them.)
           (listp '())
                => t
 
- - Function: nlistp OBJECT
+ - Function: nlistp object
      This function is the opposite of `listp': it returns `t' if OBJECT
      is not a list.  Otherwise, it returns `nil'.
 
           (listp OBJECT) == (not (nlistp OBJECT))
 
- - Function: null OBJECT
+ - Function: null object
      This function returns `t' if OBJECT is `nil', and returns `nil'
      otherwise.  This function is identical to `not', but as a matter
      of clarity we use `null' when OBJECT is considered a list and
index ce764e8..f65d3dc 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -55,7 +55,7 @@ File: lispref.info,  Node: List Elements,  Next: Building Lists,  Prev: List-rel
 Accessing Elements of Lists
 ===========================
 
- - Function: car CONS-CELL
+ - Function: car cons-cell
      This function returns the value pointed to by the first pointer of
      the cons cell CONS-CELL.  Expressed another way, this function
      returns the CAR of CONS-CELL.
@@ -69,7 +69,7 @@ Accessing Elements of Lists
           (car '())
                => nil
 
- - Function: cdr CONS-CELL
+ - Function: cdr cons-cell
      This function returns the value pointed to by the second pointer of
      the cons cell CONS-CELL.  Expressed another way, this function
      returns the CDR of CONS-CELL.
@@ -83,7 +83,7 @@ Accessing Elements of Lists
           (cdr '())
                => nil
 
- - Function: car-safe OBJECT
+ - Function: car-safe object
      This function lets you take the CAR of a cons cell while avoiding
      errors for other data types.  It returns the CAR of OBJECT if
      OBJECT is a cons cell, `nil' otherwise.  This is in contrast to
@@ -96,7 +96,7 @@ Accessing Elements of Lists
                 (car x)
               nil))
 
- - Function: cdr-safe OBJECT
+ - Function: cdr-safe object
      This function lets you take the CDR of a cons cell while avoiding
      errors for other data types.  It returns the CDR of OBJECT if
      OBJECT is a cons cell, `nil' otherwise.  This is in contrast to
@@ -109,7 +109,7 @@ Accessing Elements of Lists
                 (cdr x)
               nil))
 
- - Function: nth N LIST
+ - Function: nth n list
      This function returns the Nth element of LIST.  Elements are
      numbered starting with zero, so the CAR of LIST is element number
      zero.  If the length of LIST is N or less, the value is `nil'.
@@ -125,7 +125,7 @@ Accessing Elements of Lists
           
           (nth n x) == (car (nthcdr n x))
 
- - Function: nthcdr N LIST
+ - Function: nthcdr n list
      This function returns the Nth CDR of LIST.  In other words, it
      removes the first N links of LIST and returns what follows.
 
@@ -143,34 +143,34 @@ Accessing Elements of Lists
 access particular elements in a nested list.  All of these can be
 rewritten in terms of the functions just described.
 
- - Function: caar CONS-CELL
- - Function: cadr CONS-CELL
- - Function: cdar CONS-CELL
- - Function: cddr CONS-CELL
- - Function: caaar CONS-CELL
- - Function: caadr CONS-CELL
- - Function: cadar CONS-CELL
- - Function: caddr CONS-CELL
- - Function: cdaar CONS-CELL
- - Function: cdadr CONS-CELL
- - Function: cddar CONS-CELL
- - Function: cdddr CONS-CELL
- - Function: caaaar CONS-CELL
- - Function: caaadr CONS-CELL
- - Function: caadar CONS-CELL
- - Function: caaddr CONS-CELL
- - Function: cadaar CONS-CELL
- - Function: cadadr CONS-CELL
- - Function: caddar CONS-CELL
- - Function: cadddr CONS-CELL
- - Function: cdaaar CONS-CELL
- - Function: cdaadr CONS-CELL
- - Function: cdadar CONS-CELL
- - Function: cdaddr CONS-CELL
- - Function: cddaar CONS-CELL
- - Function: cddadr CONS-CELL
- - Function: cdddar CONS-CELL
- - Function: cddddr CONS-CELL
+ - Function: caar cons-cell
+ - Function: cadr cons-cell
+ - Function: cdar cons-cell
+ - Function: cddr cons-cell
+ - Function: caaar cons-cell
+ - Function: caadr cons-cell
+ - Function: cadar cons-cell
+ - Function: caddr cons-cell
+ - Function: cdaar cons-cell
+ - Function: cdadr cons-cell
+ - Function: cddar cons-cell
+ - Function: cdddr cons-cell
+ - Function: caaaar cons-cell
+ - Function: caaadr cons-cell
+ - Function: caadar cons-cell
+ - Function: caaddr cons-cell
+ - Function: cadaar cons-cell
+ - Function: cadadr cons-cell
+ - Function: caddar cons-cell
+ - Function: cadddr cons-cell
+ - Function: cdaaar cons-cell
+ - Function: cdaadr cons-cell
+ - Function: cdadar cons-cell
+ - Function: cdaddr cons-cell
+ - Function: cddaar cons-cell
+ - Function: cddadr cons-cell
+ - Function: cdddar cons-cell
+ - Function: cddddr cons-cell
      Each of these functions is equivalent to one or more applications
      of `car' and/or `cdr'.  For example,
 
@@ -191,22 +191,22 @@ rewritten in terms of the functions just described.
      That is to say, read the a's and d's from right to left and apply
      a `car' or `cdr' for each a or d found, respectively.
 
- - Function: first LIST
+ - Function: first list
      This is equivalent to `(nth 0 LIST)', i.e. the first element of
      LIST. (Note that this is also equivalent to `car'.)
 
- - Function: second LIST
+ - Function: second list
      This is equivalent to `(nth 1 LIST)', i.e. the second element of
      LIST.
 
- - Function: third LIST
- - Function: fourth LIST
- - Function: fifth LIST
- - Function: sixth LIST
- - Function: seventh LIST
- - Function: eighth LIST
- - Function: ninth LIST
- - Function: tenth LIST
+ - Function: third list
+ - Function: fourth list
+ - Function: fifth list
+ - Function: sixth list
+ - Function: seventh list
+ - Function: eighth list
+ - Function: ninth list
+ - Function: tenth list
      These are equivalent to `(nth 2 LIST)' through `(nth 9 LIST)'
      respectively, i.e. the third through tenth elements of LIST.
 
@@ -221,7 +221,7 @@ Lisp.  `cons' is the fundamental list-building function; however, it is
 interesting to note that `list' is used more times in the source code
 for Emacs than `cons'.
 
- - Function: cons OBJECT1 OBJECT2
+ - Function: cons object1 object2
      This function is the fundamental function used to build new list
      structure.  It creates a new cons cell, making OBJECT1 the CAR,
      and OBJECT2 the CDR.  It then returns the new cons cell.  The
@@ -245,7 +245,7 @@ for Emacs than `cons'.
      used in this example and the function named `list' described below;
      any symbol can serve both purposes.
 
- - Function: list &rest OBJECTS
+ - Function: list &rest objects
      This function creates a list with OBJECTS as its elements.  The
      resulting list is always `nil'-terminated.  If no OBJECTS are
      given, the empty list is returned.
@@ -257,17 +257,17 @@ for Emacs than `cons'.
           (list)
                => nil
 
- - Function: make-list LENGTH OBJECT
+ - Function: make-list length object
      This function creates a list of length LENGTH, in which all the
      elements have the identical value OBJECT.  Compare `make-list'
-     with `make-string' (*note Creating Strings::.).
+     with `make-string' (*note Creating Strings::).
 
           (make-list 3 'pigs)
                => (pigs pigs pigs)
           (make-list 0 'pigs)
                => nil
 
- - Function: append &rest SEQUENCES
+ - Function: append &rest sequences
      This function returns a list containing all the elements of
      SEQUENCES.  The SEQUENCES may be lists, vectors, or strings, but
      the last one should be a list.  All arguments except the last one
@@ -357,12 +357,12 @@ for Emacs than `cons'.
      of the original integers.  *Don't use this feature; we plan to
      eliminate it.  If you already use this feature, change your
      programs now!*  The proper way to convert an integer to a decimal
-     number in this way is with `format' (*note Formatting Strings::.)
-     or `number-to-string' (*note String Conversion::.).
+     number in this way is with `format' (*note Formatting Strings::)
+     or `number-to-string' (*note String Conversion::).
 
- - Function: reverse LIST
+ - Function: reverse list
      This function creates a new list whose elements are the elements of
-     LIST, but in reverse order.  The original argument LIST is *not*
+     LIST, but in reverse order.  The original argument LIST is _not_
      altered.
 
           (setq x '(1 2 3 4))
@@ -403,7 +403,7 @@ Altering List Elements with `setcar'
 a list, `setcar' replaces one element of a list with a different
 element.
 
- - Function: setcar CONS OBJECT
+ - Function: setcar cons object
      This function stores OBJECT as the new CAR of CONS, replacing its
      previous CAR.  It returns the value OBJECT.  For example:
 
@@ -481,7 +481,7 @@ Altering the CDR of a List
 
    The lowest-level primitive for modifying a CDR is `setcdr':
 
- - Function: setcdr CONS OBJECT
+ - Function: setcdr cons object
      This function stores OBJECT as the new CDR of CONS, replacing its
      previous CDR.  It returns the value OBJECT.
 
@@ -535,7 +535,7 @@ list.
 
    Here is this result in box notation:
 
-     --------------        -------------       -------------
+      --------------        -------------       -------------
      | car  | cdr   |      | car  | cdr  |     | car  | cdr  |
      |   a  |   o   |   -->|   b  |   o------->|   c  |  nil |
      |      |   |   |  |   |      |      |     |      |      |
@@ -563,9 +563,9 @@ to them as arguments, to produce a new list that is the returned value.
    See `delq', in *Note Sets And Lists::, for another function that
 modifies cons cells.
 
- - Function: nconc &rest LISTS
+ - Function: nconc &rest lists
      This function returns a list containing all the elements of LISTS.
-     Unlike `append' (*note Building Lists::.), the LISTS are *not*
+     Unlike `append' (*note Building Lists::), the LISTS are _not_
      copied.  Instead, the last CDR of each of the LISTS is changed to
      refer to the following list.  The last of the LISTS is not
      altered.  For example:
@@ -595,23 +595,21 @@ modifies cons cells.
 
           (defun add-foo (x)            ; We want this function to add
             (nconc '(foo) x))           ;   `foo' to the front of its arg.
-
+          
           (symbol-function 'add-foo)
                => (lambda (x) (nconc (quote (foo)) x))
-
+          
           (setq xx (add-foo '(1 2)))    ; It seems to work.
                => (foo 1 2)
-
           (setq xy (add-foo '(3 4)))    ; What happened?
                => (foo 1 2 3 4)
-
           (eq xx xy)
                => t
-
+          
           (symbol-function 'add-foo)
                => (lambda (x) (nconc (quote (foo 1 2 3 4) x)))
 
- - Function: nreverse LIST
+ - Function: nreverse list
      This function reverses the order of the elements of LIST.  Unlike
      `reverse', `nreverse' alters its argument by reversing the CDRs in
      the cons cells forming the list.  The cons cell that used to be
@@ -646,7 +644,7 @@ modifies cons cells.
                             |             |      |            |
                              -------------        ------------
 
- - Function: sort LIST PREDICATE
+ - Function: sort list predicate
      This function sorts LIST stably, though destructively, and returns
      the sorted list.  It compares elements using PREDICATE.  A stable
      sort is one in which elements with equal sort keys maintain their
@@ -710,7 +708,7 @@ versions, `member' and `delete'.
      XEmacs Lisp does not have them.  You can write them in Lisp if you
      wish.
 
- - Function: memq OBJECT LIST
+ - Function: memq object list
      This function tests to see whether OBJECT is a member of LIST.  If
      it is, `memq' returns a list starting with the first occurrence of
      OBJECT.  Otherwise, it returns `nil'.  The letter `q' in `memq'
@@ -722,7 +720,7 @@ versions, `member' and `delete'.
           (memq '(2) '((1) (2)))    ; `(2)' and `(2)' are not `eq'.
                => nil
 
- - Function: delq OBJECT LIST
+ - Function: delq object list
      This function destructively removes all elements `eq' to OBJECT
      from LIST.  The letter `q' in `delq' says that it uses `eq' to
      compare OBJECT against the elements of the list, like `memq'.
@@ -734,7 +732,7 @@ after those elements:
      (delq 'a '(a b c)) == (cdr '(a b c))
 
    When an element to be deleted appears in the middle of the list,
-removing it involves changing the CDRs (*note Setcdr::.).
+removing it involves changing the CDRs (*note Setcdr::).
 
      (setq sample-list '(a b c (4)))
           => (a b c (4))
@@ -766,7 +764,7 @@ and the `(4)' in the `sample-list' are not `eq':
    The following two functions are like `memq' and `delq' but use
 `equal' rather than `eq' to compare elements.  They are new in Emacs 19.
 
- - Function: member OBJECT LIST
+ - Function: member object list
      The function `member' tests to see whether OBJECT is a member of
      LIST, comparing members with OBJECT using `equal'.  If OBJECT is a
      member, `member' returns a list starting with its first occurrence
@@ -782,7 +780,7 @@ and the `(4)' in the `sample-list' are not `eq':
           (member "foo" '("foo" "bar"))
                => ("foo" "bar")
 
- - Function: delete OBJECT LIST
+ - Function: delete object list
      This function destructively removes all elements `equal' to OBJECT
      from LIST.  It is to `delq' as `member' is to `memq': it uses
      `equal' to compare elements with OBJECT, like `member'; when it
@@ -820,7 +818,7 @@ key `maple' is associated with `seeds'.
    The associated values in an alist may be any Lisp objects; so may the
 keys.  For example, in the following alist, the symbol `a' is
 associated with the number `1', and the string `"b"' is associated with
-the *list* `(2 3)', which is the CDR of the alist element:
+the _list_ `(2 3)', which is the CDR of the alist element:
 
      ((a . 1) ("b" 2 3))
 
@@ -847,7 +845,7 @@ the front of the list.  When searching an association list for an
 association with a given key, the first one found is returned, if there
 is more than one.
 
-   In XEmacs Lisp, it is *not* an error if an element of an association
+   In XEmacs Lisp, it is _not_ an error if an element of an association
 list is not a cons cell.  The alist search functions simply ignore such
 elements.  Many other versions of Lisp signal errors in such cases.
 
@@ -856,10 +854,10 @@ respects.  A property list behaves like an association list in which
 each key can occur only once.  *Note Property Lists::, for a comparison
 of property lists and association lists.
 
- - Function: assoc KEY ALIST
+ - Function: assoc key alist
      This function returns the first association for KEY in ALIST.  It
      compares KEY against the alist elements using `equal' (*note
-     Equality Predicates::.).  It returns `nil' if no association in
+     Equality Predicates::).  It returns `nil' if no association in
      ALIST has a CAR `equal' to KEY.  For example:
 
           (setq trees '((pine . cones) (oak . acorns) (maple . seeds)))
@@ -884,7 +882,7 @@ of property lists and association lists.
           (cdr (assoc 2 needles-per-cluster))
                => ("Austrian Pine" "Red Pine")
 
- - Function: rassoc VALUE ALIST
+ - Function: rassoc value alist
      This function returns the first association with value VALUE in
      ALIST.  It returns `nil' if no association in ALIST has a CDR
      `equal' to VALUE.
@@ -893,7 +891,7 @@ of property lists and association lists.
      ALIST association instead of the CAR.  You can think of this as
      "reverse `assoc'", finding the key for a given value.
 
- - Function: assq KEY ALIST
+ - Function: assq key alist
      This function is like `assoc' in that it returns the first
      association for KEY in ALIST, but it makes the comparison using
      `eq' instead of `equal'.  `assq' returns `nil' if no association
@@ -918,7 +916,7 @@ of property lists and association lists.
           (assoc "simple leaves" leaves)
                => ("simple leaves" . oak)
 
- - Function: rassq VALUE ALIST
+ - Function: rassq value alist
      This function returns the first association with value VALUE in
      ALIST.  It returns `nil' if no association in ALIST has a CDR `eq'
      to VALUE.
@@ -950,7 +948,7 @@ of property lists and association lists.
 
           (lily white) == (lily . (white))
 
- - Function: remassoc KEY ALIST
+ - Function: remassoc key alist
      This function deletes by side effect any associations with key KEY
      in ALIST - i.e. it removes any elements from ALIST whose `car' is
      `equal' to KEY.  The modified ALIST is returned.
@@ -960,7 +958,7 @@ of property lists and association lists.
      `(setq foo (remassoc key foo))' to be sure of changing the value
      of `foo'.
 
- - Function: remassq KEY ALIST
+ - Function: remassq key alist
      This function deletes by side effect any associations with key KEY
      in ALIST - i.e. it removes any elements from ALIST whose `car' is
      `eq' to KEY.  The modified ALIST is returned.
@@ -968,7 +966,7 @@ of property lists and association lists.
      This function is exactly like `remassoc', but comparisons between
      KEY and keys in ALIST are done using `eq' instead of `equal'.
 
- - Function: remrassoc VALUE ALIST
+ - Function: remrassoc value alist
      This function deletes by side effect any associations with value
      VALUE in ALIST - i.e. it removes any elements from ALIST whose
      `cdr' is `equal' to VALUE.  The modified ALIST is returned.
@@ -983,7 +981,7 @@ of property lists and association lists.
      as "reverse `remassoc'", removing an association based on its
      value instead of its key.
 
- - Function: remrassq VALUE ALIST
+ - Function: remrassq value alist
      This function deletes by side effect any associations with value
      VALUE in ALIST - i.e. it removes any elements from ALIST whose
      `cdr' is `eq' to VALUE.  The modified ALIST is returned.
@@ -991,7 +989,7 @@ of property lists and association lists.
      This function is exactly like `remrassoc', but comparisons between
      VALUE and values in ALIST are done using `eq' instead of `equal'.
 
- - Function: copy-alist ALIST
+ - Function: copy-alist alist
      This function returns a two-level deep copy of ALIST: it creates a
      new copy of each association, so that you can alter the
      associations of the new alist without changing the old one.
@@ -1062,13 +1060,13 @@ association lists generally are not.
 compared with `eq', and "lax" plists, whose keys are compared with
 `equal',
 
- - Function: valid-plist-p PLIST
+ - Function: valid-plist-p plist
      Given a plist, this function returns non-`nil' if its format is
      correct.  If it returns `nil', `check-valid-plist' will signal an
      error when given the plist; that means it's a malformed or circular
      plist or has non-symbols as keywords.
 
- - Function: check-valid-plist PLIST
+ - Function: check-valid-plist plist
      Given a plist, this function signals an error if there is anything
      wrong with it.  This means that it's a malformed or circular plist.
 
@@ -1084,25 +1082,25 @@ File: lispref.info,  Node: Working With Normal Plists,  Next: Working With Lax P
 Working With Normal Plists
 --------------------------
 
- - Function: plist-get PLIST PROP &optional DEFAULT
+ - Function: plist-get plist prop &optional default
      This function extracts a value from a property list.  The function
      returns the value corresponding to the given PROP, or DEFAULT if
      PROP is not one of the properties on the list.
 
- - Function: plist-put PLIST PROP VAL
+ - Function: plist-put plist prop val
      This function changes the value in PLIST of PROP to VAL.  If PROP
      is already a property on the list, its value is set to VAL,
      otherwise the new PROP VAL pair is added.  The new plist is
      returned; use `(setq x (plist-put x prop val))' to be sure to use
      the new value.  The PLIST is modified by side effects.
 
- - Function: plist-remprop PLIST PROP
+ - Function: plist-remprop plist prop
      This function removes from PLIST the property PROP and its value.
      The new plist is returned; use `(setq x (plist-remprop x prop
      val))' to be sure to use the new value.  The PLIST is modified by
      side effects.
 
- - Function: plist-member PLIST PROP
+ - Function: plist-member plist prop
      This function returns `t' if PROP has a value specified in PLIST.
 
    In the following functions, if optional arg NIL-MEANS-NOT-PRESENT is
@@ -1111,16 +1109,16 @@ This feature is a virus that has infected old Lisp implementations (and
 thus E-Lisp, due to RMS's enamorment with old Lisps), but should not be
 used except for backward compatibility.
 
- - Function: plists-eq A B &optional NIL-MEANS-NOT-PRESENT
+ - Function: plists-eq a b &optional nil-means-not-present
      This function returns non-`nil' if property lists A and B are `eq'
      (i.e. their values are `eq').
 
- - Function: plists-equal A B &optional NIL-MEANS-NOT-PRESENT
+ - Function: plists-equal a b &optional nil-means-not-present
      This function returns non-`nil' if property lists A and B are
      `equal' (i.e. their values are `equal'; their keys are still
      compared using `eq').
 
- - Function: canonicalize-plist PLIST &optional NIL-MEANS-NOT-PRESENT
+ - Function: canonicalize-plist plist &optional nil-means-not-present
      This function destructively removes any duplicate entries from a
      plist.  In such cases, the first entry applies.
 
@@ -1137,21 +1135,21 @@ Working With Lax Plists
    Recall that a "lax plist" is a property list whose keys are compared
 using `equal' instead of `eq'.
 
- - Function: lax-plist-get LAX-PLIST PROP &optional DEFAULT
+ - Function: lax-plist-get lax-plist prop &optional default
      This function extracts a value from a lax property list.  The
      function returns the value corresponding to the given PROP, or
      DEFAULT if PROP is not one of the properties on the list.
 
- - Function: lax-plist-put LAX-PLIST PROP VAL
+ - Function: lax-plist-put lax-plist prop val
      This function changes the value in LAX-PLIST of PROP to VAL.
 
- - Function: lax-plist-remprop LAX-PLIST PROP
+ - Function: lax-plist-remprop lax-plist prop
      This function removes from LAX-PLIST the property PROP and its
      value.  The new plist is returned; use `(setq x (lax-plist-remprop
      x prop val))' to be sure to use the new value.  The LAX-PLIST is
      modified by side effects.
 
- - Function: lax-plist-member LAX-PLIST PROP
+ - Function: lax-plist-member lax-plist prop
      This function returns `t' if PROP has a value specified in
      LAX-PLIST.
 
@@ -1161,17 +1159,17 @@ This feature is a virus that has infected old Lisp implementations (and
 thus E-Lisp, due to RMS's enamorment with old Lisps), but should not be
 used except for backward compatibility.
 
- - Function: lax-plists-eq A B &optional NIL-MEANS-NOT-PRESENT
+ - Function: lax-plists-eq a b &optional nil-means-not-present
      This function returns non-`nil' if lax property lists A and B are
      `eq' (i.e. their values are `eq'; their keys are still compared
      using `equal').
 
- - Function: lax-plists-equal A B &optional NIL-MEANS-NOT-PRESENT
+ - Function: lax-plists-equal a b &optional nil-means-not-present
      This function returns non-`nil' if lax property lists A and B are
      `equal' (i.e. their values are `equal').
 
- - Function: canonicalize-lax-plist LAX-PLIST &optional
-          NIL-MEANS-NOT-PRESENT
+ - Function: canonicalize-lax-plist lax-plist &optional
+          nil-means-not-present
      This function destructively removes any duplicate entries from a
      lax plist.  In such cases, the first entry applies.
 
@@ -1185,7 +1183,7 @@ File: lispref.info,  Node: Converting Plists To/From Alists,  Prev: Working With
 Converting Plists To/From Alists
 --------------------------------
 
- - Function: alist-to-plist ALIST
+ - Function: alist-to-plist alist
      This function converts association list ALIST into the equivalent
      property-list form.  The plist is returned.  This converts from
 
@@ -1197,7 +1195,7 @@ Converting Plists To/From Alists
 
      The original alist is not modified.
 
- - Function: plist-to-alist PLIST
+ - Function: plist-to-alist plist
      This function converts property list PLIST into the equivalent
      association-list form.  The alist is returned.  This converts from
 
@@ -1214,11 +1212,11 @@ except that they destructively modify their arguments, using cons cells
 from the original list to form the new list rather than allocating new
 cons cells.
 
- - Function: destructive-alist-to-plist ALIST
+ - Function: destructive-alist-to-plist alist
      This function destructively converts association list ALIST into
      the equivalent property-list form.  The plist is returned.
 
- - Function: destructive-plist-to-alist PLIST
+ - Function: destructive-plist-to-alist plist
      This function destructively converts property list PLIST into the
      equivalent association-list form.  The alist is returned.
 
@@ -1243,9 +1241,9 @@ parent will still be reclaimed, and will automatically be removed from
 its parent's list of children.
 
    Weak lists are similar to weak hash tables (*note Weak Hash
-Tables::.).
+Tables::).
 
- - Function: weak-list-p OBJECT
+ - Function: weak-list-p object
      This function returns non-`nil' if OBJECT is a weak list.
 
    Weak lists come in one of four types:
@@ -1266,18 +1264,18 @@ Tables::.).
      Objects in the list disappear if they are conses and the cdr is not
      referenced outside of the list.
 
- - Function: make-weak-list &optional TYPE
+ - Function: make-weak-list &optional type
      This function creates a new weak list of type TYPE.  TYPE is a
      symbol (one of `simple', `assoc', `key-assoc', or `value-assoc',
      as described above) and defaults to `simple'.
 
- - Function: weak-list-type WEAK
+ - Function: weak-list-type weak
      This function returns the type of the given weak-list object.
 
- - Function: weak-list-list WEAK
+ - Function: weak-list-list weak
      This function returns the list contained in a weak-list object.
 
- - Function: set-weak-list-list WEAK NEW-LIST
+ - Function: set-weak-list-list weak new-list
      This function changes the list contained in a weak-list object.
 
 \1f
index 780fd80..b24b1a9 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -60,11 +60,11 @@ vector, or a string.  The common property that all sequences have is
 that each is an ordered collection of elements.  This section describes
 functions that accept any kind of sequence.
 
- - Function: sequencep OBJECT
+ - Function: sequencep object
      Returns `t' if OBJECT is a list, vector, bit vector, or string,
      `nil' otherwise.
 
- - Function: copy-sequence SEQUENCE
+ - Function: copy-sequence sequence
      Returns a copy of SEQUENCE.  The copy is the same type of object
      as the original sequence, and it has the same elements in the same
      order.
@@ -115,7 +115,7 @@ functions that accept any kind of sequence.
           (bit-vector 1 0 1 1 0 1 0 0)
                => #*10110100
 
- - Function: length SEQUENCE
+ - Function: length sequence
      Returns the number of elements in SEQUENCE.  If SEQUENCE is a cons
      cell that is not a list (because the final CDR is not `nil'), a
      `wrong-type-argument' error is signaled.
@@ -131,7 +131,7 @@ functions that accept any kind of sequence.
           (length #*01101)
               => 5
 
- - Function: elt SEQUENCE INDEX
+ - Function: elt sequence index
      This function returns the element of SEQUENCE indexed by INDEX.
      Legitimate values of INDEX are integers ranging from 0 up to one
      less than the length of SEQUENCE.  If SEQUENCE is a list, then
@@ -151,8 +151,8 @@ functions that accept any kind of sequence.
           (elt [1 2 3 4] -1)
                error-->Args out of range: [1 2 3 4], -1
 
-     This function generalizes `aref' (*note Array Functions::.) and
-     `nth' (*note List Elements::.).
+     This function generalizes `aref' (*note Array Functions::) and
+     `nth' (*note List Elements::).
 
 \1f
 File: lispref.info,  Node: Arrays,  Next: Array Functions,  Prev: Sequence Functions,  Up: Sequences Arrays Vectors
@@ -188,7 +188,7 @@ Type::, *Note Vector Type::, and *Note Bit Vector Type::.
 
    * The elements of an array may be referenced or changed with the
      functions `aref' and `aset', respectively (*note Array
-     Functions::.).
+     Functions::).
 
    In principle, if you wish to have an array of text characters, you
 could use either a string or a vector.  In practice, we always choose
@@ -233,7 +233,7 @@ Functions that Operate on Arrays
    In this section, we describe the functions that accept strings,
 vectors, and bit vectors.
 
- - Function: arrayp OBJECT
+ - Function: arrayp object
      This function returns `t' if OBJECT is an array (i.e., a string,
      vector, or bit vector).
 
@@ -244,7 +244,7 @@ vectors, and bit vectors.
           (arrayp #*101)
           => t
 
- - Function: aref ARRAY INDEX
+ - Function: aref array index
      This function returns the INDEXth element of ARRAY.  The first
      element is at index zero.
 
@@ -263,7 +263,7 @@ vectors, and bit vectors.
 
      See also the function `elt', in *Note Sequence Functions::.
 
- - Function: aset ARRAY INDEX OBJECT
+ - Function: aset array index object
      This function sets the INDEXth element of ARRAY to be OBJECT.  It
      returns OBJECT.
 
@@ -291,7 +291,7 @@ vectors, and bit vectors.
      If ARRAY is a string and OBJECT is not a character, a
      `wrong-type-argument' error results.
 
- - Function: fillarray ARRAY OBJECT
+ - Function: fillarray array object
      This function fills the array ARRAY with OBJECT, so that each
      element of ARRAY is OBJECT.  It returns ARRAY.
 
@@ -364,7 +364,7 @@ Functions That Operate on Vectors
 
    Here are some functions that relate to vectors:
 
- - Function: vectorp OBJECT
+ - Function: vectorp object
      This function returns `t' if OBJECT is a vector.
 
           (vectorp [a])
@@ -372,7 +372,7 @@ Functions That Operate on Vectors
           (vectorp "asdf")
                => nil
 
- - Function: vector &rest OBJECTS
+ - Function: vector &rest objects
      This function creates and returns a vector whose elements are the
      arguments, OBJECTS.
 
@@ -381,14 +381,14 @@ Functions That Operate on Vectors
           (vector)
                => []
 
- - Function: make-vector LENGTH OBJECT
+ - Function: make-vector length object
      This function returns a new vector consisting of LENGTH elements,
      each initialized to OBJECT.
 
           (setq sleepy (make-vector 9 'Z))
                => [Z Z Z Z Z Z Z Z Z]
 
- - Function: vconcat &rest SEQUENCES
+ - Function: vconcat &rest sequences
      This function returns a new vector containing all the elements of
      the SEQUENCES.  The arguments SEQUENCES may be lists, vectors, or
      strings.  If no SEQUENCES are given, an empty vector is returned.
@@ -411,8 +411,8 @@ Functions That Operate on Vectors
      of the original integers.  *Don't use this feature; we plan to
      eliminate it.  If you already use this feature, change your
      programs now!*  The proper way to convert an integer to a decimal
-     number in this way is with `format' (*note Formatting Strings::.)
-     or `number-to-string' (*note String Conversion::.).
+     number in this way is with `format' (*note Formatting Strings::)
+     or `number-to-string' (*note String Conversion::).
 
      For other concatenation functions, see `mapconcat' in *Note
      Mapping Functions::, `concat' in *Note Creating Strings::, `append'
@@ -420,7 +420,7 @@ Functions That Operate on Vectors
      Functions::.
 
    The `append' function provides a way to convert a vector into a list
-with the same elements (*note Building Lists::.):
+with the same elements (*note Building Lists::):
 
      (setq avector [1 two (quote (three)) "four" [five]])
           => [1 two (quote (three)) "four" [five]]
@@ -458,7 +458,7 @@ Functions That Operate on Bit Vectors
 
    Here are some functions that relate to bit vectors:
 
- - Function: bit-vector-p OBJECT
+ - Function: bit-vector-p object
      This function returns `t' if OBJECT is a bit vector.
 
           (bit-vector-p #*01)
@@ -468,10 +468,10 @@ Functions That Operate on Bit Vectors
           (bit-vector-p "01")
                => nil
 
- - Function: bitp OBJECT
+ - Function: bitp object
      This function returns `t' if OBJECT is either 0 or 1.
 
- - Function: bit-vector &rest OBJECTS
+ - Function: bit-vector &rest objects
      This function creates and returns a bit vector whose elements are
      the arguments OBJECTS.  The elements must be either of the two
      integers 0 or 1.
@@ -481,14 +481,14 @@ Functions That Operate on Bit Vectors
           (bit-vector)
                => #*
 
- - Function: make-bit-vector LENGTH OBJECT
+ - Function: make-bit-vector length object
      This function creates and returns a bit vector consisting of
      LENGTH elements, each initialized to OBJECT.
 
           (setq picket-fence (make-bit-vector 9 1))
                => #*111111111
 
- - Function: bvconcat &rest SEQUENCES
+ - Function: bvconcat &rest sequences
      This function returns a new bit vector containing all the elements
      of the SEQUENCES.  The arguments SEQUENCES may be lists, vectors,
      or bit vectors, all of whose elements are the integers 0 or 1.  If
@@ -512,7 +512,7 @@ Functions That Operate on Bit Vectors
      Building Lists::.
 
    The `append' function provides a way to convert a bit vector into a
-list with the same elements (*note Building Lists::.):
+list with the same elements (*note Building Lists::):
 
      (setq bv #*00001110)
           => #*00001110
@@ -535,7 +535,7 @@ Type::.
    You can test whether an arbitrary Lisp object is a symbol with
 `symbolp':
 
- - Function: symbolp OBJECT
+ - Function: symbolp object
      This function returns `t' if OBJECT is a symbol, `nil' otherwise.
 
 * Menu:
@@ -594,15 +594,15 @@ Symbols::.)
 
    In normal usage, the function cell usually contains a function or
 macro, as that is what the Lisp interpreter expects to see there (*note
-Evaluation::.).  Keyboard macros (*note Keyboard Macros::.), keymaps
-(*note Keymaps::.) and autoload objects (*note Autoloading::.) are also
+Evaluation::).  Keyboard macros (*note Keyboard Macros::), keymaps
+(*note Keymaps::) and autoload objects (*note Autoloading::) are also
 sometimes stored in the function cell of symbols.  We often refer to
 "the function `foo'" when we really mean the function stored in the
 function cell of the symbol `foo'.  We make the distinction only when
 necessary.
 
    The property list cell normally should hold a correctly formatted
-property list (*note Property Lists::.), as a number of functions expect
+property list (*note Property Lists::), as a number of functions expect
 to see a property list there.
 
    The function cell or the value cell may be "void", which means that
@@ -635,9 +635,9 @@ file.  (29529 is the offset from the beginning of the `DOC' file to
 where that documentation string begins.)  The function cell contains
 the function for returning the name of the file.  `buffer-file-name'
 names a primitive function, which has no read syntax and prints in hash
-notation (*note Primitive Function Type::.).  A symbol naming a
-function written in Lisp would have a lambda expression (or a byte-code
-object) in this cell.
+notation (*note Primitive Function Type::).  A symbol naming a function
+written in Lisp would have a lambda expression (or a byte-code object)
+in this cell.
 
 \1f
 File: lispref.info,  Node: Definitions,  Next: Creating Symbols,  Prev: Symbol Components,  Up: Symbols
@@ -679,7 +679,7 @@ as a variable or function.  Thus, you can make a symbol a global
 variable with `setq', whether you define it first or not.  The real
 purpose of definitions is to guide programmers and programming tools.
 They inform programmers who read the code that certain symbols are
-*intended* to be used as variables, or as functions.  In addition,
+_intended_ to be used as variables, or as functions.  In addition,
 utilities such as `etags' and `make-docfile' recognize definitions, and
 add appropriate information to tag tables and the `DOC' file. *Note
 Accessing Documentation::.
@@ -744,7 +744,7 @@ symbol in the obarray bucket.  The results would be unpredictable.
    It is possible for two different symbols to have the same name in
 different obarrays; these symbols are not `eq' or `equal'.  However,
 this normally happens only as part of the abbrev mechanism (*note
-Abbrevs::.).
+Abbrevs::).
 
      Common Lisp note: In Common Lisp, a single symbol may be interned
      in several obarrays.
@@ -753,7 +753,7 @@ Abbrevs::.).
 arguments.  A `wrong-type-argument' error is signaled if the name is
 not a string, or if the obarray is not a vector.
 
- - Function: symbol-name SYMBOL
+ - Function: symbol-name symbol
      This function returns the string that is SYMBOL's name.  For
      example:
 
@@ -764,7 +764,7 @@ not a string, or if the obarray is not a vector.
      the name of the symbol, but fails to update the obarray, so don't
      do it!
 
- - Function: make-symbol NAME
+ - Function: make-symbol name
      This function returns a newly-allocated, uninterned symbol whose
      name is NAME (which must be a string).  Its value and function
      definition are void, and its property list is `nil'.  In the
@@ -776,7 +776,7 @@ not a string, or if the obarray is not a vector.
           (eq sym 'foo)
                => nil
 
- - Function: intern NAME &optional OBARRAY
+ - Function: intern name &optional obarray
      This function returns the interned symbol whose name is NAME.  If
      there is no such symbol in the obarray OBARRAY, `intern' creates a
      new one, adds it to the obarray, and returns it.  If OBARRAY is
@@ -792,7 +792,7 @@ not a string, or if the obarray is not a vector.
           (eq sym 'foo)
                => nil
 
- - Function: intern-soft NAME &optional OBARRAY
+ - Function: intern-soft name &optional obarray
      This function returns the symbol in OBARRAY whose name is NAME, or
      `nil' if OBARRAY has no symbol with that name.  Therefore, you can
      use `intern-soft' to test whether a symbol with a given name is
@@ -805,13 +805,10 @@ not a string, or if the obarray is not a vector.
                => frazzle
           (intern-soft "frazzle")        ; That one cannot be found.
                => nil
-
           (setq sym (intern "frazzle"))  ; Create an interned one.
                => frazzle
-
           (intern-soft "frazzle")        ; That one can be found!
                => frazzle
-
           (eq sym 'frazzle)              ; And it is the same one.
                => t
 
@@ -819,7 +816,7 @@ not a string, or if the obarray is not a vector.
      This variable is the standard obarray for use by `intern' and
      `read'.
 
- - Function: mapatoms FUNCTION &optional OBARRAY
+ - Function: mapatoms function &optional obarray
      This function calls FUNCTION for each symbol in the obarray
      OBARRAY.  It returns `nil'.  If OBARRAY is omitted, it defaults to
      the value of `obarray', the standard obarray for ordinary symbols.
@@ -837,7 +834,7 @@ not a string, or if the obarray is not a vector.
      See `documentation' in *Note Accessing Documentation::, for another
      example using `mapatoms'.
 
- - Function: unintern SYMBOL &optional OBARRAY
+ - Function: unintern symbol &optional obarray
      This function deletes SYMBOL from the obarray OBARRAY.  If
      `symbol' is not actually in the obarray, `unintern' does nothing.
      If OBARRAY is `nil', the current obarray is used.
@@ -891,7 +888,7 @@ File: lispref.info,  Node: Plists and Alists,  Next: Symbol Plists,  Up: Symbol
 Property Lists and Association Lists
 ------------------------------------
 
-   Association lists (*note Association Lists::.) are very similar to
+   Association lists (*note Association Lists::) are very similar to
 property lists.  In contrast to association lists, the order of the
 pairs in the property list is not significant since the property names
 must be distinct.
@@ -924,10 +921,10 @@ File: lispref.info,  Node: Symbol Plists,  Next: Other Plists,  Prev: Plists and
 Property List Functions for Symbols
 -----------------------------------
 
- - Function: symbol-plist SYMBOL
+ - Function: symbol-plist symbol
      This function returns the property list of SYMBOL.
 
- - Function: setplist SYMBOL PLIST
+ - Function: setplist symbol plist
      This function sets SYMBOL's property list to PLIST.  Normally,
      PLIST should be a well-formed property list, but this is not
      enforced.
@@ -940,9 +937,9 @@ Property List Functions for Symbols
      For symbols in special obarrays, which are not used for ordinary
      purposes, it may make sense to use the property list cell in a
      nonstandard fashion; in fact, the abbrev mechanism does so (*note
-     Abbrevs::.).
+     Abbrevs::).
 
- - Function: get SYMBOL PROPERTY
+ - Function: get symbol property
      This function finds the value of the property named PROPERTY in
      SYMBOL's property list.  If there is no such property, `nil' is
      returned.  Thus, there is no distinction between a value of `nil'
@@ -953,7 +950,7 @@ Property List Functions for Symbols
 
      See `put' for an example.
 
- - Function: put SYMBOL PROPERTY VALUE
+ - Function: put symbol property value
      This function puts VALUE onto SYMBOL's property list under the
      property name PROPERTY, replacing any previous property value.
      The `put' function returns VALUE.
@@ -976,14 +973,14 @@ Property Lists Outside Symbols
    These functions are useful for manipulating property lists that are
 stored in places other than symbols:
 
- - Function: getf PLIST PROPERTY &optional DEFAULT
+ - Function: getf plist property &optional default
      This returns the value of the PROPERTY property stored in the
      property list PLIST.  For example,
 
           (getf '(foo 4) 'foo)
                => 4
 
- - Function: putf PLIST PROPERTY VALUE
+ - Function: putf plist property value
      This stores VALUE as the value of the PROPERTY property in the
      property list PLIST.  It may modify PLIST destructively, or it may
      construct a new list structure without altering the old.  The
@@ -997,13 +994,13 @@ stored in places other than symbols:
           (setq my-plist (putf my-plist 'quux '(a)))
                => (quux (a) bar t foo 5)
 
- - Function: plists-eq A B
+ - Function: plists-eq a b
      This function returns non-`nil' if property lists A and B are
      `eq'.  This means that the property lists have the same values for
      all the same properties, where comparison between values is done
      using `eq'.
 
- - Function: plists-equal A B
+ - Function: plists-equal a b
      This function returns non-`nil' if property lists A and B are
      `equal'.
 
@@ -1087,7 +1084,7 @@ function `car'.
 in it.  *Note Functions::.  The execution of the function may itself
 work by evaluating the function definition; or the function may be a
 Lisp primitive implemented in C, or it may be a byte-compiled function
-(*note Byte Compilation::.).
+(*note Byte Compilation::).
 
    The evaluation of forms takes place in a context called the
 "environment", which consists of the current values and bindings of all
@@ -1096,14 +1093,14 @@ creating a new binding for it, the value of the binding in the current
 environment is used.  *Note Variables::.
 
    Evaluation of a form may create new environments for recursive
-evaluation by binding variables (*note Local Variables::.).  These
+evaluation by binding variables (*note Local Variables::).  These
 environments are temporary and vanish by the time evaluation of the form
 is complete.  The form may also make changes that persist; these changes
 are called "side effects".  An example of a form that produces side
 effects is `(setq foo 1)'.
 
    The details of what evaluation means for each kind of form are
-described below (*note Forms::.).
+described below (*note Forms::).
 
    ---------- Footnotes ----------
 
@@ -1129,13 +1126,13 @@ ability to pass information to them as arguments.
 
    The functions and variables described in this section evaluate forms,
 specify limits to the evaluation process, or record recently returned
-values.  Loading a file also does evaluation (*note Loading::.).
+values.  Loading a file also does evaluation (*note Loading::).
 
- - Function: eval FORM
+ - Function: eval form
      This is the basic function for performing evaluation.  It evaluates
      FORM in the current environment and returns the result.  How the
      evaluation proceeds depends on the type of the object (*note
-     Forms::.).
+     Forms::).
 
      Since `eval' is a function, the argument expression that appears
      in a call to `eval' is evaluated twice: once as preparation before
@@ -1155,7 +1152,7 @@ values.  Loading a file also does evaluation (*note Loading::.).
      The number of currently active calls to `eval' is limited to
      `max-lisp-eval-depth' (see below).
 
- - Command: eval-region START END &optional STREAM
+ - Command: eval-region start end &optional stream
      This function evaluates the forms in the current buffer in the
      region defined by the positions START and END.  It reads forms from
      the region and calls `eval' on them until the end of the region is
@@ -1170,7 +1167,7 @@ values.  Loading a file also does evaluation (*note Loading::.).
 
      `eval-region' always returns `nil'.
 
- - Command: eval-buffer BUFFER &optional STREAM
+ - Command: eval-buffer buffer &optional stream
      This is like `eval-region' except that it operates on the whole
      contents of BUFFER.
 
@@ -1243,7 +1240,7 @@ starting with "all other types" which are self-evaluating forms.
                              we find the real function via the symbol.
 * Function Forms::          Forms that call functions.
 * Macro Forms::             Forms that call macros.
-* Special Forms::           "Special forms" are idiosyncratic primitives,
+* Special Forms::           ``Special forms'' are idiosyncratic primitives,
                               most of them extremely important.
 * Autoloading::             Functions set up to load files
                               containing their real definitions.
index 379f384..c2d71fb 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -91,7 +91,7 @@ macro, or special form.
    The first step in evaluating a nonempty list is to examine its first
 element.  This element alone determines what kind of form the list is
 and how the rest of the list is to be processed.  The first element is
-*not* evaluated, as it would be in some Lisp dialects such as Scheme.
+_not_ evaluated, as it would be in some Lisp dialects such as Scheme.
 
 \1f
 File: lispref.info,  Node: Function Indirection,  Next: Function Forms,  Prev: Classifying Lists,  Up: Forms
@@ -122,7 +122,7 @@ these types, the error `invalid-function' is signaled.
 
    The following example illustrates the symbol indirection process.  We
 use `fset' to set the function cell of a symbol and `symbol-function'
-to get the function cell contents (*note Function Cells::.).
+to get the function cell contents (*note Function Cells::).
 Specifically, we store the symbol `car' into the function cell of
 `first', and the symbol `first' into the function cell of `erste'.
 
@@ -133,13 +133,10 @@ Specifically, we store the symbol `car' into the function cell of
 
      (symbol-function 'car)
           => #<subr car>
-
      (fset 'first 'car)
           => car
-
      (fset 'erste 'first)
           => first
-
      (erste '(1 2 3))   ; Call the function referenced by `erste'.
           => 1
 
@@ -157,7 +154,7 @@ symbol function indirection when calling `erste'.
    The built-in function `indirect-function' provides an easy way to
 perform symbol function indirection explicitly.
 
- - Function: indirect-function FUNCTION
+ - Function: indirect-function function
      This function returns the meaning of FUNCTION as a function.  If
      FUNCTION is a symbol, then it finds FUNCTION's function definition
      and starts over with that value.  If FUNCTION is not a symbol,
@@ -186,9 +183,9 @@ a "function call".  For example, here is a call to the function `+':
 remaining elements of the list from left to right.  The results are the
 actual argument values, one value for each list element.  The next step
 is to call the function with this list of arguments, effectively using
-the function `apply' (*note Calling Functions::.).  If the function is
+the function `apply' (*note Calling Functions::).  If the function is
 written in Lisp, the arguments are used to bind the argument variables
-of the function (*note Lambda Expressions::.); then the forms in the
+of the function (*note Lambda Expressions::); then the forms in the
 function body are evaluated in order, and the value of the last body
 form becomes the value of the function call.
 
@@ -200,7 +197,7 @@ Lisp Macro Evaluation
 
    If the first element of a list being evaluated is a macro object,
 then the list is a "macro call".  When a macro call is evaluated, the
-elements of the rest of the list are *not* initially evaluated.
+elements of the rest of the list are _not_ initially evaluated.
 Instead, these elements themselves are used as the arguments of the
 macro.  The macro definition computes a replacement form, called the
 "expansion" of the macro, to be evaluated in place of the original
@@ -250,82 +247,82 @@ evaluated may depend on the results of evaluating other arguments.
 XEmacs Lisp with a reference to where each is described.
 
 `and'
-     *note Combining Conditions::.
+     *note Combining Conditions::
 
 `catch'
-     *note Catch and Throw::.
+     *note Catch and Throw::
 
 `cond'
-     *note Conditionals::.
+     *note Conditionals::
 
 `condition-case'
-     *note Handling Errors::.
+     *note Handling Errors::
 
 `defconst'
-     *note Defining Variables::.
+     *note Defining Variables::
 
 `defmacro'
-     *note Defining Macros::.
+     *note Defining Macros::
 
 `defun'
-     *note Defining Functions::.
+     *note Defining Functions::
 
 `defvar'
-     *note Defining Variables::.
+     *note Defining Variables::
 
 `function'
-     *note Anonymous Functions::.
+     *note Anonymous Functions::
 
 `if'
-     *note Conditionals::.
+     *note Conditionals::
 
 `interactive'
-     *note Interactive Call::.
+     *note Interactive Call::
 
 `let'
 `let*'
-     *note Local Variables::.
+     *note Local Variables::
 
 `or'
-     *note Combining Conditions::.
+     *note Combining Conditions::
 
 `prog1'
 `prog2'
 `progn'
-     *note Sequencing::.
+     *note Sequencing::
 
 `quote'
-     *note Quoting::.
+     *note Quoting::
 
 `save-current-buffer'
-     *note Excursions::.
+     *note Excursions::
 
 `save-excursion'
-     *note Excursions::.
+     *note Excursions::
 
 `save-restriction'
-     *note Narrowing::.
+     *note Narrowing::
 
 `save-selected-window'
-     *note Excursions::.
+     *note Excursions::
 
 `save-window-excursion'
-     *note Window Configurations::.
+     *note Window Configurations::
 
 `setq'
-     *note Setting Variables::.
+     *note Setting Variables::
 
 `setq-default'
-     *note Creating Buffer-Local::.
+     *note Creating Buffer-Local::
 
 `unwind-protect'
-     *note Nonlocal Exits::.
+     *note Nonlocal Exits::
 
 `while'
-     *note Iteration::.
+     *note Iteration::
 
 `with-output-to-temp-buffer'
-     *note Temporary Displays::.
+     *note Temporary Displays::
 
      Common Lisp note: here are some comparisons of special forms in
      XEmacs Lisp and Common Lisp.  `setq', `if', and `catch' are
@@ -361,7 +358,7 @@ and lists, which are not self-evaluating objects, in a program.  (It is
 not necessary to quote self-evaluating objects such as numbers, strings,
 and vectors.)
 
- - Special Form: quote OBJECT
+ - Special Form: quote object
      This special form returns OBJECT, without evaluating it.
 
    Because `quote' is used so often in programs, Lisp provides a
@@ -386,9 +383,9 @@ syntax `'x' is an abbreviation for `(quote x)'.
           => [(quote foo)]
 
    Other quoting constructs include `function' (*note Anonymous
-Functions::.), which causes an anonymous lambda expression written in
-Lisp to be compiled, and ``' (*note Backquote::.), which is used to
-quote only part of a list, while computing and substituting other parts.
+Functions::), which causes an anonymous lambda expression written in
+Lisp to be compiled, and ``' (*note Backquote::), which is used to quote
+only part of a list, while computing and substituting other parts.
 
 \1f
 File: lispref.info,  Node: Control Structures,  Next: Variables,  Prev: Evaluation,  Up: Top
@@ -396,7 +393,7 @@ File: lispref.info,  Node: Control Structures,  Next: Variables,  Prev: Evaluati
 Control Structures
 ******************
 
-   A Lisp program consists of expressions or "forms" (*note Forms::.).
+   A Lisp program consists of expressions or "forms" (*note Forms::).
 We control the order of execution of the forms by enclosing them in
 "control structures".  Control structures are special forms which
 control when, whether, or how many times to execute the forms they
@@ -418,7 +415,7 @@ other varieties of sequencing, conditionals, iteration, and (controlled)
 jumps--all discussed below.  The built-in control structures are
 special forms since their subforms are not necessarily evaluated or not
 evaluated sequentially.  You can use macros to define your own control
-structure constructs (*note Macros::.).
+structure constructs (*note Macros::).
 
 * Menu:
 
@@ -458,7 +455,7 @@ structures likewise contain an implicit `progn'.  As a result, `progn'
 is not used as often as it used to be.  It is needed now most often
 inside an `unwind-protect', `and', `or', or in the THEN-part of an `if'.
 
- - Special Form: progn FORMS...
+ - Special Form: progn forms...
      This special form evaluates all of the FORMS, in textual order,
      returning the result of the final form.
 
@@ -473,7 +470,7 @@ inside an `unwind-protect', `and', `or', or in the THEN-part of an `if'.
    Two other control constructs likewise evaluate a series of forms but
 return a different value:
 
- - Special Form: prog1 FORM1 FORMS...
+ - Special Form: prog1 form1 forms...
      This special form evaluates FORM1 and all of the FORMS, in textual
      order, returning the result of FORM1.
 
@@ -490,7 +487,7 @@ return a different value:
 
           (prog1 (car x) (setq x (cdr x)))
 
- - Special Form: prog2 FORM1 FORM2 FORMS...
+ - Special Form: prog2 form1 form2 forms...
      This special form evaluates FORM1, FORM2, and all of the following
      FORMS, in textual order, returning the result of FORM2.
 
@@ -512,7 +509,7 @@ Conditionals
 Lisp has two conditional forms: `if', which is much the same as in other
 languages, and `cond', which is a generalized case statement.
 
- - Special Form: if CONDITION THEN-FORM ELSE-FORMS...
+ - Special Form: if condition then-form else-forms...
      `if' chooses between the THEN-FORM and the ELSE-FORMS based on the
      value of CONDITION.  If the evaluated CONDITION is non-`nil',
      THEN-FORM is evaluated and the result returned.  Otherwise, the
@@ -532,7 +529,7 @@ languages, and `cond', which is a generalized case statement.
             'very-false)
           => very-false
 
- - Special Form: cond CLAUSE...
+ - Special Form: cond clause...
      `cond' chooses among an arbitrary number of alternatives.  Each
      CLAUSE in the `cond' must be a list.  The CAR of this list is the
      CONDITION; the remaining elements, if any, the BODY-FORMS.  Thus,
@@ -603,13 +600,13 @@ with `if' and `cond' to express complicated conditions.  The constructs
 `and' and `or' can also be used individually as kinds of multiple
 conditional constructs.
 
- - Function: not CONDITION
+ - Function: not condition
      This function tests for the falsehood of CONDITION.  It returns
      `t' if CONDITION is `nil', and `nil' otherwise.  The function
      `not' is identical to `null', and we recommend using the name
      `null' if you are testing for an empty list.
 
- - Special Form: and CONDITIONS...
+ - Special Form: and conditions...
      The `and' special form tests whether all the CONDITIONS are true.
      It works by evaluating the CONDITIONS one by one in the order
      written.
@@ -648,7 +645,7 @@ conditional constructs.
           ==
           (cond (ARG1 (cond (ARG2 ARG3))))
 
- - Special Form: or CONDITIONS...
+ - Special Form: or conditions...
      The `or' special form tests whether at least one of the CONDITIONS
      is true.  It works by evaluating all the CONDITIONS one by one in
      the order written.
@@ -696,7 +693,7 @@ example, you might want to repeat some computation once for each element
 of a list, or once for each integer from 0 to N.  You can do this in
 XEmacs Lisp with the special form `while':
 
- - Special Form: while CONDITION FORMS...
+ - Special Form: while condition forms...
      `while' first evaluates CONDITION.  If the result is non-`nil', it
      evaluates FORMS in textual order.  Then it reevaluates CONDITION,
      and if the result is non-`nil', it evaluates FORMS again.  This
@@ -704,8 +701,7 @@ XEmacs Lisp with the special form `while':
 
      There is no limit on the number of iterations that may occur.  The
      loop will continue until either CONDITION evaluates to `nil' or
-     until an error or `throw' jumps out of it (*note Nonlocal
-     Exits::.).
+     until an error or `throw' jumps out of it (*note Nonlocal Exits::).
 
      The value of a `while' form is always `nil'.
 
@@ -786,12 +782,12 @@ innermost one takes precedence.
 `catch', including function calls.  When binding constructs such as
 `let' or function calls are exited in this way, the bindings are
 unbound, just as they are when these constructs exit normally (*note
-Local Variables::.).  Likewise, `throw' restores the buffer and
-position saved by `save-excursion' (*note Excursions::.), and the
-narrowing status saved by `save-restriction' and the window selection
-saved by `save-window-excursion' (*note Window Configurations::.).  It
-also runs any cleanups established with the `unwind-protect' special
-form when it exits that form (*note Cleanups::.).
+Local Variables::).  Likewise, `throw' restores the buffer and position
+saved by `save-excursion' (*note Excursions::), and the narrowing
+status saved by `save-restriction' and the window selection saved by
+`save-window-excursion' (*note Window Configurations::).  It also runs
+any cleanups established with the `unwind-protect' special form when it
+exits that form (*note Cleanups::).
 
    The `throw' need not appear lexically within the `catch' that it
 jumps to.  It can equally well be called from another function called
@@ -799,14 +795,14 @@ within the `catch'.  As long as the `throw' takes place chronologically
 after entry to the `catch', and chronologically before exit from it, it
 has access to that `catch'.  This is why `throw' can be used in
 commands such as `exit-recursive-edit' that throw back to the editor
-command loop (*note Recursive Editing::.).
+command loop (*note Recursive Editing::).
 
      Common Lisp note: Most other versions of Lisp, including Common
      Lisp, have several ways of transferring control nonsequentially:
      `return', `return-from', and `go', for example.  XEmacs Lisp has
      only `throw'.
 
- - Special Form: catch TAG BODY...
+ - Special Form: catch tag body...
      `catch' establishes a return point for the `throw' function.  The
      return point is distinguished from other such return points by TAG,
      which may be any Lisp object.  The argument TAG is evaluated
@@ -821,7 +817,7 @@ command loop (*note Recursive Editing::.).
      the `catch' exits immediately; the value it returns is whatever
      was specified as the second argument of `throw'.
 
- - Function: throw TAG VALUE
+ - Function: throw tag value
      The purpose of `throw' is to return from a return point previously
      established with `catch'.  The argument TAG is used to choose
      among the various existing return points; it must be `eq' to the
@@ -947,10 +943,10 @@ can also signal errors explicitly with the functions `error' and
    Quitting, which happens when the user types `C-g', is not considered
 an error, but it is handled almost like an error.  *Note Quitting::.
 
- - Function: error FORMAT-STRING &rest ARGS
+ - Function: error format-string &rest args
      This function signals an error with an error message constructed by
-     applying `format' (*note String Conversion::.) to FORMAT-STRING
-     and ARGS.
+     applying `format' (*note String Conversion::) to FORMAT-STRING and
+     ARGS.
 
      These examples show typical uses of `error':
 
@@ -971,7 +967,7 @@ an error, but it is handled almost like an error.  *Note Quitting::.
      will be interpreted as a format specifier, with undesirable
      results.  Instead, use `(error "%s" STRING)'.
 
- - Function: signal ERROR-SYMBOL DATA
+ - Function: signal error-symbol data
      This function signals an error named by ERROR-SYMBOL.  The
      argument DATA is a list of additional Lisp objects relevant to the
      circumstances of the error.
@@ -990,15 +986,15 @@ an error, but it is handled almost like an error.  *Note Quitting::.
      Both ERROR-SYMBOL and DATA are available to any error handlers
      that handle the error: `condition-case' binds a local variable to
      a list of the form `(ERROR-SYMBOL .  DATA)' (*note Handling
-     Errors::.).  If the error is not handled, these two values are
-     used in printing the error message.
+     Errors::).  If the error is not handled, these two values are used
+     in printing the error message.
 
      The function `signal' never returns (though in older Emacs versions
      it could sometimes return).
 
           (signal 'wrong-number-of-arguments '(x y))
                error--> Wrong number of arguments: x, y
-
+          
           (signal 'no-such-error '("My unknown error condition."))
                error--> peculiar error: "My unknown error condition."
 
@@ -1028,8 +1024,8 @@ print an error message.
 
    An error that has no explicit handler may call the Lisp debugger.
 The debugger is enabled if the variable `debug-on-error' (*note Error
-Debugging::.) is non-`nil'.  Unlike error handlers, the debugger runs
-in the environment of the error, so that you can examine values of
+Debugging::) is non-`nil'.  Unlike error handlers, the debugger runs in
+the environment of the error, so that you can examine values of
 variables precisely as they were at the time of the error.
 
 \1f
@@ -1099,7 +1095,7 @@ caught by a `catch', and a `throw' cannot be handled by an error
 handler (though using `throw' when there is no suitable `catch' signals
 an error that can be handled).
 
- - Special Form: condition-case VAR PROTECTED-FORM HANDLERS...
+ - Special Form: condition-case var protected-form handlers...
      This special form establishes the error handlers HANDLERS around
      the execution of PROTECTED-FORM.  If PROTECTED-FORM executes
      without error, the value it returns becomes the value of the
@@ -1123,9 +1119,9 @@ an error that can be handled).
 
      Each error that occurs has an "error symbol" that describes what
      kind of error it is.  The `error-conditions' property of this
-     symbol is a list of condition names (*note Error Symbols::.).
-     Emacs searches all the active `condition-case' forms for a handler
-     that specifies one or more of these condition names; the innermost
+     symbol is a list of condition names (*note Error Symbols::).  Emacs
+     searches all the active `condition-case' forms for a handler that
+     specifies one or more of these condition names; the innermost
      matching `condition-case' handles the error.  Within this
      `condition-case', the first applicable handler handles the error.
 
@@ -1157,7 +1153,7 @@ message and returns a very large number.
           (princ (format "Arithmetic error: %s" err))
           1000000)))
      => safe-divide
-
+     
      (safe-divide 5 0)
           -| Arithmetic error: (arith-error)
      => 1000000
@@ -1174,7 +1170,7 @@ including those signaled with `error':
 
      (setq baz 34)
           => 34
-
+     
      (condition-case err
          (if (eq baz 35)
              t
@@ -1236,7 +1232,7 @@ classification; and `error', which is the widest of all.
 not end with a period.  This is for consistency with the rest of Emacs.
 
    Naturally, XEmacs will never signal `new-error' on its own; only an
-explicit call to `signal' (*note Signaling Errors::.) in your code can
+explicit call to `signal' (*note Signaling Errors::) in your code can
 do this:
 
      (signal 'new-error '(x y))
index 579cb35..5b59644 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
+This is ../info/lispref.info, produced by makeinfo version 4.0 from
+lispref/lispref.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -59,7 +59,7 @@ Cleaning Up from Nonlocal Exits
 put a data structure in an inconsistent state; it permits you to ensure
 the data are consistent in the event of an error or throw.
 
- - Special Form: unwind-protect BODY CLEANUP-FORMS...
+ - Special Form: unwind-protect body cleanup-forms...
      `unwind-protect' executes the BODY with a guarantee that the
      CLEANUP-FORMS will be evaluated if control leaves BODY, no matter
      how that happens.  The BODY may complete normally, or execute a
@@ -73,14 +73,14 @@ the data are consistent in the event of an error or throw.
 
      Only the BODY is actually protected by the `unwind-protect'.  If
      any of the CLEANUP-FORMS themselves exits nonlocally (e.g., via a
-     `throw' or an error), `unwind-protect' is *not* guaranteed to
+     `throw' or an error), `unwind-protect' is _not_ guaranteed to
      evaluate the rest of them.  If the failure of one of the
      CLEANUP-FORMS has the potential to cause trouble, then protect it
      with another `unwind-protect' around that form.
 
      The number of currently active `unwind-protect' forms counts,
      together with the number of local variable bindings, against the
-     limit `max-specpdl-size' (*note Local Variables::.).
+     limit `max-specpdl-size' (*note Local Variables::).
 
    For example, here we make an invisible buffer for temporary use, and
 make sure to kill it before finishing:
@@ -100,7 +100,7 @@ another `save-excursion' around the body, to ensure that the temporary
 buffer becomes current in time to kill it.)
 
    Here is an actual example taken from the file `ftp.el'.  It creates
-a process (*note Processes::.) to try to establish a connection to a
+a process (*note Processes::) to try to establish a connection to a
 remote machine.  As the function `ftp-login' is highly susceptible to
 numerous problems that the writer of the function cannot anticipate, it
 is protected with a form that guarantees deletion of the process in the
@@ -247,7 +247,7 @@ variables; these last until exit from the `let' form.
 one) of the variable.  When the life span of the local value is over,
 the previous value is restored.  In the mean time, we say that the
 previous value is "shadowed" and "not visible".  Both global and local
-values may be shadowed (*note Scope::.).
+values may be shadowed (*note Scope::).
 
    If you set a variable (such as with `setq') while it is local, this
 replaces the local value; it does not alter the global value, or
@@ -277,7 +277,7 @@ binding.
 
    The special forms `let' and `let*' exist to create local bindings.
 
- - Special Form: let (BINDINGS...) FORMS...
+ - Special Form: let (bindings...) forms...
      This special form binds variables according to BINDINGS and then
      evaluates all of the FORMS in textual order.  The `let'-form
      returns the value of the last form in FORMS.
@@ -288,7 +288,7 @@ binding.
      evaluating VALUE-FORM.  If VALUE-FORM is omitted, `nil' is used.
 
      All of the VALUE-FORMs in BINDINGS are evaluated in the order they
-     appear and *before* any of the symbols are bound.  Here is an
+     appear and _before_ any of the symbols are bound.  Here is an
      example of this: `Z' is bound to the old value of `Y', which is 2,
      not the new value, 1.
 
@@ -299,7 +299,7 @@ binding.
             (list Y Z))
                => (1 2)
 
- - Special Form: let* (BINDINGS...) FORMS...
+ - Special Form: let* (bindings...) forms...
      This special form is like `let', but it binds each variable right
      after computing its local value, before computing the local value
      for the next variable.  Therefore, an expression in BINDINGS can
@@ -317,21 +317,21 @@ binding.
    Here is a complete list of the other facilities that create local
 bindings:
 
-   * Function calls (*note Functions::.).
+   * Function calls (*note Functions::).
 
-   * Macro calls (*note Macros::.).
+   * Macro calls (*note Macros::).
 
-   * `condition-case' (*note Errors::.).
+   * `condition-case' (*note Errors::).
 
    Variables can also have buffer-local bindings (*note Buffer-Local
-Variables::.).  These kinds of bindings work somewhat like ordinary
-local bindings, but they are localized depending on "where" you are in
-Emacs, rather than localized in time.
+Variables::).  These kinds of bindings work somewhat like ordinary local
+bindings, but they are localized depending on "where" you are in Emacs,
+rather than localized in time.
 
  - Variable: max-specpdl-size
      This variable defines the limit on the total number of local
      variable bindings and `unwind-protect' cleanups (*note Nonlocal
-     Exits::.)  that are allowed before signaling an error (with data
+     Exits::) that are allowed before signaling an error (with data
      `"Variable binding depth exceeds max-specpdl-size"').
 
      This limit, with the associated error when it is exceeded, is one
@@ -356,13 +356,13 @@ value.
 
    Note that a value of `nil' is not the same as void.  The symbol
 `nil' is a Lisp object and can be the value of a variable just as any
-other object can be; but it is *a value*.  A void variable does not
+other object can be; but it is _a value_.  A void variable does not
 have any value.
 
    After you have given a variable a value, you can make it void once
 more using `makunbound'.
 
- - Function: makunbound SYMBOL
+ - Function: makunbound symbol
      This function makes the current binding of SYMBOL void.
      Subsequent attempts to use this symbol's value as a variable will
      signal the error `void-variable', unless or until you set it again.
@@ -390,7 +390,6 @@ more using `makunbound'.
             (makunbound 'x)        ; Void the local binding.
             x)
           error--> Symbol's value as variable is void: x
-
           x                        ; The global binding is unchanged.
                => 1
           
@@ -399,7 +398,7 @@ more using `makunbound'.
               (makunbound 'x)      ; Void the innermost-local binding.
               x))                  ; And refer: it's void.
           error--> Symbol's value as variable is void: x
-
+          
           (let ((x 2))
             (let ((x 3))
               (makunbound 'x))     ; Void inner binding, then remove it.
@@ -413,24 +412,20 @@ always been void.
    You can use the function `boundp' to test whether a variable is
 currently void.
 
- - Function: boundp VARIABLE
+ - Function: boundp variable
      `boundp' returns `t' if VARIABLE (a symbol) is not void; more
      precisely, if its current binding is not void.  It returns `nil'
      otherwise.
 
           (boundp 'abracadabra)          ; Starts out void.
                => nil
-
           (let ((abracadabra 5))         ; Locally bind it.
             (boundp 'abracadabra))
                => t
-
           (boundp 'abracadabra)          ; Still globally void.
                => nil
-
           (setq abracadabra 5)           ; Make it globally nonvoid.
                => 5
-
           (boundp 'abracadabra)
                => t
 
@@ -445,7 +440,7 @@ with a "variable definition": a special form, either `defconst' or
 `defvar'.
 
    In XEmacs Lisp, definitions serve three purposes.  First, they inform
-people who read the code that certain symbols are *intended* to be used
+people who read the code that certain symbols are _intended_ to be used
 a certain way (as variables).  Second, they inform the Lisp system of
 these things, supplying a value and documentation.  Third, they provide
 information to utilities such as `etags' and `make-docfile', which
@@ -467,7 +462,7 @@ Users would like to be able to set user options in their init files,
 and override the default values given in the definitions.  For this
 reason, user options must be defined with `defvar'.
 
- - Special Form: defvar SYMBOL [VALUE [DOC-STRING]]
+ - Special Form: defvar symbol [value [doc-string]]
      This special form defines SYMBOL as a value and initializes it.
      The definition informs a person reading your code that SYMBOL is
      used as a variable that programs are likely to set or change.  It
@@ -495,7 +490,7 @@ reason, user options must be defined with `defvar'.
      for the variable.  (This opportunity to specify documentation is
      one of the main benefits of defining the variable.)  The
      documentation is stored in the symbol's `variable-documentation'
-     property.  The XEmacs help functions (*note Documentation::.) look
+     property.  The XEmacs help functions (*note Documentation::) look
      for this property.
 
      If the first character of DOC-STRING is `*', it means that this
@@ -539,7 +534,7 @@ reason, user options must be defined with `defvar'.
      The `defvar' form returns SYMBOL, but it is normally used at top
      level in a file where its value does not matter.
 
- - Special Form: defconst SYMBOL [VALUE [DOC-STRING]]
+ - Special Form: defconst symbol [value [doc-string]]
      This special form defines SYMBOL as a value and initializes it.
      It informs a person reading your code that SYMBOL has a global
      value, established here, that will not normally be changed or
@@ -570,7 +565,7 @@ reason, user options must be defined with `defvar'.
           pi
                => 3
 
- - Function: user-variable-p VARIABLE
+ - Function: user-variable-p variable
      This function returns `t' if VARIABLE is a user option--a variable
      intended to be set by the user for customization--and `nil'
      otherwise.  (Variables other than user options exist for the
@@ -601,12 +596,12 @@ Accessing Variable Values
 =========================
 
    The usual way to reference a variable is to write the symbol which
-names it (*note Symbol Forms::.).  This requires you to specify the
+names it (*note Symbol Forms::).  This requires you to specify the
 variable name when you write the program.  Usually that is exactly what
 you want to do.  Occasionally you need to choose at run time which
 variable to reference; then you can use `symbol-value'.
 
- - Function: symbol-value SYMBOL
+ - Function: symbol-value symbol
      This function returns the value of SYMBOL.  This is the value in
      the innermost local binding of the symbol, or its global value if
      it has no local bindings.
@@ -645,7 +640,7 @@ How to Alter a Variable Value
 form `setq'.  When you need to compute the choice of variable at run
 time, use the function `set'.
 
- - Special Form: setq [SYMBOL FORM]...
+ - Special Form: setq [symbol form]...
      This special form is the most common method of changing a
      variable's value.  Each SYMBOL is given a new value, which is the
      result of evaluating the corresponding FORM.  The most-local
@@ -676,7 +671,7 @@ time, use the function `set'.
                 y (1+ x))     ;   the value of `y' is computed.
                => 11
 
- - Function: set SYMBOL VALUE
+ - Function: set symbol value
      This function sets SYMBOL's value to VALUE, then returns VALUE.
      Since `set' is a function, the expression written for SYMBOL is
      evaluated to obtain the symbol to set.
@@ -725,7 +720,7 @@ time, use the function `set'.
    One other function for setting a variable is designed to add an
 element to a list if it is not already present in the list.
 
- - Function: add-to-list SYMBOL ELEMENT
+ - Function: add-to-list symbol element
      This function sets the variable SYMBOL by consing ELEMENT onto the
      old value, if ELEMENT is not already a member of that value.  It
      returns the resulting list, whether updated or not.  The value of
@@ -766,10 +761,10 @@ binding.  The most recently established binding takes precedence over
 the others.
 
    Local bindings in XEmacs Lisp have "indefinite scope" and "dynamic
-extent".  "Scope" refers to *where* textually in the source code the
+extent".  "Scope" refers to _where_ textually in the source code the
 binding can be accessed.  Indefinite scope means that any part of the
 program can potentially access the variable binding.  "Extent" refers
-to *when*, as the program is executing, the binding exists.  Dynamic
+to _when_, as the program is executing, the binding exists.  Dynamic
 extent means that the binding lasts as long as the activation of the
 construct that established it.
 
@@ -822,7 +817,7 @@ established in `binder', depending on circumstances:
             (user))
 
    * If we define `foo' as follows and call `binder', then the binding
-     made in `binder' *will not* be seen in `user':
+     made in `binder' _will not_ be seen in `user':
 
           (defun foo (x)
             (user))
@@ -1017,7 +1012,7 @@ File: lispref.info,  Node: Creating Buffer-Local,  Next: Default Value,  Prev: I
 Creating and Deleting Buffer-Local Bindings
 -------------------------------------------
 
- - Command: make-local-variable VARIABLE
+ - Command: make-local-variable variable
      This function creates a buffer-local binding in the current buffer
      for VARIABLE (a symbol).  Other buffers are not affected.  The
      value returned is VARIABLE.
@@ -1051,21 +1046,21 @@ Creating and Deleting Buffer-Local Bindings
      *Please note:* do not use `make-local-variable' for a hook
      variable.  Instead, use `make-local-hook'.  *Note Hooks::.
 
- - Command: make-variable-buffer-local VARIABLE
+ - Command: make-variable-buffer-local variable
      This function marks VARIABLE (a symbol) automatically
      buffer-local, so that any subsequent attempt to set it will make it
      local to the current buffer at the time.
 
      The value returned is VARIABLE.
 
- - Function: local-variable-p VARIABLE &optional BUFFER
+ - Function: local-variable-p variable &optional buffer
      This returns `t' if VARIABLE is buffer-local in buffer BUFFER
      (which defaults to the current buffer); otherwise, `nil'.
 
- - Function: buffer-local-variables &optional BUFFER
+ - Function: buffer-local-variables &optional buffer
      This function returns a list describing the buffer-local variables
      in buffer BUFFER.  It returns an association list (*note
-     Association Lists::.) in which each association contains one
+     Association Lists::) in which each association contains one
      buffer-local variable and its value.  When a buffer-local variable
      is void in BUFFER, then it appears directly in the resulting list.
      If BUFFER is omitted, the current buffer is used.
@@ -1087,9 +1082,9 @@ Creating and Deleting Buffer-Local Bindings
               (bind-me . 69))
 
      Note that storing new values into the CDRs of cons cells in this
-     list does *not* change the local values of the variables.
+     list does _not_ change the local values of the variables.
 
- - Command: kill-local-variable VARIABLE
+ - Command: kill-local-variable variable
      This function deletes the buffer-local binding (if any) for
      VARIABLE (a symbol) in the current buffer.  As a result, the
      global (default) binding of VARIABLE becomes visible in this
@@ -1151,13 +1146,13 @@ buffer-local value for this variable.
    The special forms `defvar' and `defconst' also set the default value
 (if they set the variable at all), rather than any local value.
 
- - Function: default-value SYMBOL
+ - Function: default-value symbol
      This function returns SYMBOL's default value.  This is the value
      that is seen in buffers that do not have their own values for this
      variable.  If SYMBOL is not buffer-local, this is equivalent to
-     `symbol-value' (*note Accessing Variables::.).
+     `symbol-value' (*note Accessing Variables::).
 
- - Function: default-boundp SYMBOL
+ - Function: default-boundp symbol
      The function `default-boundp' tells you whether SYMBOL's default
      value is nonvoid.  If `(default-boundp 'foo)' returns `nil', then
      `(default-value 'foo)' would get an error.
@@ -1165,7 +1160,7 @@ buffer-local value for this variable.
      `default-boundp' is to `default-value' as `boundp' is to
      `symbol-value'.
 
- - Special Form: setq-default SYMBOL VALUE
+ - Special Form: setq-default symbol value
      This sets the default value of SYMBOL to VALUE.  It does not
      evaluate SYMBOL, but does evaluate VALUE.  The value of the
      `setq-default' form is VALUE.
@@ -1205,7 +1200,7 @@ buffer-local value for this variable.
           (default-value 'local)
                => another-default
 
- - Function: set-default SYMBOL VALUE
+ - Function: set-default symbol value
      This function is like `setq-default', except that SYMBOL is
      evaluated.
 
index ced6a25..32e78d1 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/new-users-guide.info, produced by Makeinfo
-version 1.68 from the input file new-users-guide.texi.
+This is ../info/new-users-guide.info, produced by makeinfo version 4.0
+from new-users-guide/new-users-guide.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -18,59 +18,59 @@ preserved on all copies.
 
 \1f
 Indirect:
-new-users-guide.info-1: 648
-new-users-guide.info-2: 50484
-new-users-guide.info-3: 99987
+new-users-guide.info-1: 635
+new-users-guide.info-2: 50471
+new-users-guide.info-3: 99973
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f648
-Node: Intro\7f4626
-Node: Entering\7f7209
-Node: Enter\7f8723
-Node: Frame\7f9405
-Node: Exiting\7f11074
-Node: Mode Line\7f12274
-Node: Echo Area\7f14421
-Node: Windows and Menus\7f15776
-Node: XEmacs Window\7f16229
-Node: Pull-down Menus\7f19850
-Node: File menu\7f20729
-Node: Edit menu\7f23988
-Node: Options Menu\7f26515
-Node: Buffers Menu\7f31297
-Node: Help menu\7f31683
-Node: Edit\7f32181
-Node: Insert\7f33775
-Node: Cursor Position\7f35103
-Node: Erase\7f37174
-Node: Numeric Argument\7f38328
-Node: Undo\7f39512
-Node: Customization Basics\7f40275
-Node: Customizing key Bindings\7f41504
-Node: Customizing Menus\7f44994
-Node: Help\7f50484
-Node: The Help Menu\7f51172
-Node: Modes\7f56097
-Node: Major Modes\7f57013
-Node: Minor Modes\7f60962
-Node: Files\7f65048
-Node: File Names\7f65770
-Node: Visiting\7f67573
-Node: Saving Files\7f69697
-Node: Other Customizations\7f73075
-Node: Setting Variables\7f75544
-Node: Init File\7f78753
-Node: Select and Move\7f84222
-Node: Selecting Text\7f85176
-Node: Mouse\7f86689
-Node: Region Operation\7f88014
-Node: Moving Text\7f89274
-Node: Accumulating text\7f90514
-Node: Search and Replace\7f92834
-Node: Key Index\7f96698
-Node: Command Index\7f99987
-Node: Variable Index\7f104089
-Node: Concept Index\7f104666
+Node: Top\7f635
+Node: Intro\7f4615
+Node: Entering\7f7198
+Node: Enter\7f8712
+Node: Frame\7f9394
+Node: Exiting\7f11063
+Node: Mode Line\7f12263
+Node: Echo Area\7f14410
+Node: Windows and Menus\7f15765
+Node: XEmacs Window\7f16218
+Node: Pull-down Menus\7f19839
+Node: File menu\7f20718
+Node: Edit menu\7f23977
+Node: Options Menu\7f26503
+Node: Buffers Menu\7f31285
+Node: Help menu\7f31671
+Node: Edit\7f32169
+Node: Insert\7f33763
+Node: Cursor Position\7f35091
+Node: Erase\7f37162
+Node: Numeric Argument\7f38316
+Node: Undo\7f39500
+Node: Customization Basics\7f40263
+Node: Customizing key Bindings\7f41492
+Node: Customizing Menus\7f44982
+Node: Help\7f50471
+Node: The Help Menu\7f51159
+Node: Modes\7f56084
+Node: Major Modes\7f57000
+Node: Minor Modes\7f60949
+Node: Files\7f65035
+Node: File Names\7f65757
+Node: Visiting\7f67560
+Node: Saving Files\7f69684
+Node: Other Customizations\7f73061
+Node: Setting Variables\7f75529
+Node: Init File\7f78738
+Node: Select and Move\7f84208
+Node: Selecting Text\7f85162
+Node: Mouse\7f86675
+Node: Region Operation\7f88000
+Node: Moving Text\7f89260
+Node: Accumulating text\7f90500
+Node: Search and Replace\7f92820
+Node: Key Index\7f96684
+Node: Command Index\7f99973
+Node: Variable Index\7f104075
+Node: Concept Index\7f104652
 \1f
 End Tag Table
index edaa2b5..6ecf2d6 100644 (file)
@@ -1,12 +1,12 @@
-This is Info file ../info/standards.info, produced by Makeinfo version
-1.68 from the input file standards.texi.
+This is ../info/standards.info, produced by makeinfo version 4.0 from
+standards.texi.
 
 START-INFO-DIR-ENTRY
 * Standards: (standards).        GNU coding standards.
 END-INFO-DIR-ENTRY
 
-   GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996 Free
-Software Foundation, Inc.
+   GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996,
+1997, 1998, 1999 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -24,52 +24,62 @@ translation approved by the Free Software Foundation.
 
 \1f
 Indirect:
-standards.info-1: 982
-standards.info-2: 49841
-standards.info-3: 95838
+standards.info-1: 974
+standards.info-2: 48769
+standards.info-3: 97946
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f982
-Node: Preface\7f1491
-Node: Intellectual Property\7f2529
-Node: Reading Non-Free Code\7f2885
-Node: Contributions\7f4617
-Node: Design Advice\7f6215
-Node: Compatibility\7f6698
-Node: Using Extensions\7f8342
-Node: ANSI C\7f9844
-Node: Source Language\7f11080
-Node: Program Behavior\7f12214
-Node: Semantics\7f12806
-Node: Libraries\7f16560
-Node: Errors\7f17795
-Node: User Interfaces\7f19018
-Node: Memory Usage\7f36043
-Node: Writing C\7f37040
-Node: Formatting\7f37750
-Node: Comments\7f41022
-Node: Syntactic Conventions\7f43815
-Node: Names\7f46753
-Node: System Portability\7f48065
-Node: CPU Portability\7f49841
-Node: System Functions\7f52002
-Node: Internationalization\7f56903
-Node: Documentation\7f59104
-Node: GNU Manuals\7f59648
-Node: Manual Structure Details\7f61690
-Node: NEWS File\7f63095
-Node: Change Logs\7f63776
-Node: Man Pages\7f67978
-Node: Reading other Manuals\7f69597
-Node: Managing Releases\7f70381
-Node: Configuration\7f71087
-Node: Makefile Conventions\7f78027
-Node: Makefile Basics\7f78551
-Node: Utilities in Makefiles\7f81022
-Node: Command Variables\7f82896
-Node: Directory Variables\7f85732
-Node: Standard Targets\7f95838
-Node: Releases\7f105580
+Node: Top\7f974
+Node: Preface\7f1565
+Node: Legal Issues\7f2582
+Node: Reading Non-Free Code\7f2948
+Node: Contributions\7f4671
+Node: Design Advice\7f6801
+Node: Compatibility\7f7309
+Node: Using Extensions\7f8820
+Node: ANSI C\7f10322
+Node: Source Language\7f12445
+Node: Program Behavior\7f13938
+Node: Semantics\7f14647
+Node: Libraries\7f18964
+Node: Errors\7f20199
+Node: User Interfaces\7f21975
+Node: Option Table\7f28852
+Node: Memory Usage\7f43662
+Node: Writing C\7f44656
+Node: Formatting\7f45497
+Node: Comments\7f48769
+Node: Syntactic Conventions\7f52067
+Node: Names\7f55005
+Node: System Portability\7f56939
+Node: CPU Portability\7f58536
+Node: System Functions\7f60793
+Node: Internationalization\7f65897
+Node: Mmap\7f69045
+Node: Documentation\7f69750
+Node: GNU Manuals\7f70385
+Node: Manual Structure Details\7f74633
+Node: License for Manuals\7f75966
+Node: NEWS File\7f76550
+Node: Change Logs\7f77226
+Node: Change Log Concepts\7f77943
+Node: Style of Change Logs\7f79798
+Node: Simple Changes\7f81352
+Node: Conditional Changes\7f82543
+Node: Man Pages\7f83920
+Node: Reading other Manuals\7f85539
+Node: Managing Releases\7f86323
+Node: Configuration\7f87078
+Node: Makefile Conventions\7f94018
+Node: Makefile Basics\7f94777
+Node: Utilities in Makefiles\7f97946
+Node: Command Variables\7f100082
+Node: Directory Variables\7f103583
+Node: Standard Targets\7f114460
+Ref: Standard Targets-Footnote-1\7f124899
+Node: Install Command Categories\7f124999
+Node: Releases\7f129572
+Node: References\7f133655
 \1f
 End Tag Table
index e81567a..1f84f9e 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/term.info, produced by Makeinfo version 1.68
-from the input file term.texi.
+This is ../info/term.info, produced by makeinfo version 4.0 from
+term.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -142,7 +142,7 @@ screen state to what it was before the program started.  Many people
 are used to this behavior from `xterm', and its also offered by the
 `term' emulator.
 
- - Function: term-switch-to-alternate-sub-buffer SET
+ - Function: term-switch-to-alternate-sub-buffer set
      If SET is true, and we're not already using the alternate
      sub-buffer, switch to it.  What this means is that the
      `term-home-marker' is saved (in the variable
@@ -238,7 +238,7 @@ of output (since the last input sent to the inferior).  It will enter
 "pager" mode, which feels a lot like the "more" program:  Typing a
 space requests another screenful of output.  Other commands request
 more or less output, or scroll backwards in the `term' buffer.  In
-pager mode, type `h' or `?'  to display a help message listing all the
+pager mode, type `h' or `?' to display a help message listing all the
 available pager mode commands.
 
    In either character or line mode, type `C-c p' to enable paging, and
@@ -421,21 +421,21 @@ Miscellaneous escapes
 
 \1f
 Tag Table:
-Node: Top\7f227
-Node: term mode\7f393
-Node: Overview\7f1216
-Node: Output from the inferior\7f1966
-Node: subbuffer\7f3546
-Node: altsubbuffer\7f4869
-Node: Input to the inferior\7f5894
-Node: Connecting to remote computers\7f7414
-Node: Paging\7f9319
-Node: Terminal escapes\7f9989
-Node: Cursor motion\7f10857
-Node: Erasing\7f11517
-Node: Inserting and deleting\7f12312
-Node: Scrolling\7f12702
-Node: Command hook\7f13148
-Node: Miscellaneous escapes\7f14184
+Node: Top\7f201
+Node: term mode\7f367
+Node: Overview\7f1190
+Node: Output from the inferior\7f1940
+Node: subbuffer\7f3520
+Node: altsubbuffer\7f4843
+Node: Input to the inferior\7f5868
+Node: Connecting to remote computers\7f7388
+Node: Paging\7f9293
+Node: Terminal escapes\7f9962
+Node: Cursor motion\7f10830
+Node: Erasing\7f11490
+Node: Inserting and deleting\7f12285
+Node: Scrolling\7f12675
+Node: Command hook\7f13121
+Node: Miscellaneous escapes\7f14157
 \1f
 End Tag Table
index fefb70c..5bbede1 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/termcap.info, produced by Makeinfo version
-1.68 from the input file termcap.texi.
+This is ../info/termcap.info, produced by makeinfo version 4.0 from
+termcap.texi.
 
 START-INFO-DIR-ENTRY
 * Termcap: (termcap).          Termcap library of the GNU system.
@@ -25,57 +25,57 @@ translation approved by the Foundation.
 
 \1f
 Indirect:
-termcap.info-1: 985
-termcap.info-2: 49255
-termcap.info-3: 92578
+termcap.info-1: 959
+termcap.info-2: 49216
+termcap.info-3: 92525
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f985
-Node: Introduction\7f1630
-Node: Library\7f3357
-Node: Preparation\7f4374
-Node: Find\7f5573
-Node: Interrogate\7f9121
-Node: Initialize\7f14429
-Node: Padding\7f16069
-Node: Why Pad\7f16730
-Node: Describe Padding\7f18374
-Node: Output Padding\7f19849
-Node: Parameters\7f23464
-Node: Encode Parameters\7f25123
-Node: Using Parameters\7f31228
-Node: tparam\7f31817
-Node: tgoto\7f33882
-Node: Data Base\7f36437
-Node: Format\7f37315
-Node: Capability Format\7f39406
-Node: Naming\7f42459
-Node: Inheriting\7f47028
-Node: Capabilities\7f49255
-Node: Basic\7f52097
-Node: Screen Size\7f55941
-Node: Cursor Motion\7f57681
-Node: Wrapping\7f67338
-Node: Scrolling\7f70163
-Node: Windows\7f75183
-Node: Clearing\7f75917
-Node: Insdel Line\7f77681
-Node: Insdel Char\7f82593
-Node: Standout\7f92578
-Node: Underlining\7f101637
-Node: Cursor Visibility\7f104056
-Node: Bell\7f104804
-Node: Keypad\7f105353
-Node: Meta Key\7f110074
-Node: Initialization\7f111028
-Node: Pad Specs\7f113392
-Node: Status Line\7f115445
-Node: Half-Line\7f117329
-Node: Printer\7f118131
-Node: Summary\7f119810
-Node: Var Index\7f130016
-Node: Cap Index\7f130740
-Node: Index\7f137931
+Node: Top\7f959
+Node: Introduction\7f1604
+Node: Library\7f3331
+Node: Preparation\7f4348
+Node: Find\7f5547
+Node: Interrogate\7f9094
+Node: Initialize\7f14401
+Node: Padding\7f16039
+Node: Why Pad\7f16700
+Node: Describe Padding\7f18344
+Node: Output Padding\7f19819
+Node: Parameters\7f23432
+Node: Encode Parameters\7f25090
+Node: Using Parameters\7f31195
+Node: tparam\7f31784
+Node: tgoto\7f33849
+Node: Data Base\7f36404
+Node: Format\7f37281
+Node: Capability Format\7f39372
+Node: Naming\7f42422
+Node: Inheriting\7f46990
+Node: Capabilities\7f49216
+Node: Basic\7f52059
+Node: Screen Size\7f55903
+Node: Cursor Motion\7f57643
+Node: Wrapping\7f67293
+Node: Scrolling\7f70117
+Node: Windows\7f75137
+Node: Clearing\7f75871
+Node: Insdel Line\7f77635
+Node: Insdel Char\7f82541
+Node: Standout\7f92525
+Node: Underlining\7f101582
+Node: Cursor Visibility\7f104001
+Node: Bell\7f104749
+Node: Keypad\7f105298
+Node: Meta Key\7f110019
+Node: Initialization\7f110973
+Node: Pad Specs\7f113337
+Node: Status Line\7f115390
+Node: Half-Line\7f117274
+Node: Printer\7f118076
+Node: Summary\7f119755
+Node: Var Index\7f129960
+Node: Cap Index\7f130684
+Node: Index\7f137875
 \1f
 End Tag Table
index 2986f92..76cc769 100644 (file)
@@ -1,22 +1,22 @@
-This is Info file ../info/texinfo.info, produced by Makeinfo version
-1.68 from the input file texinfo.texi.
+This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
 START-INFO-DIR-ENTRY
 * Texinfo: (texinfo).           The GNU documentation format.
-* install-info: (texinfo)Invoking install-info. Updating info/dir entries.
-* texi2dvi: (texinfo)Format with texi2dvi.      Printing Texinfo documentation.
-* texindex: (texinfo)Format with tex/texindex.  Sorting Texinfo index files.
+* install-info: (texinfo)Invoking install-info. Update info/dir entries.
+* texi2dvi: (texinfo)Format with texi2dvi.      Print Texinfo documents.
+* texindex: (texinfo)Format with tex/texindex.  Sort Texinfo index files.
 * makeinfo: (texinfo)makeinfo Preferred.        Translate Texinfo source.
 END-INFO-DIR-ENTRY
 
   This file documents Texinfo, a documentation system that can produce
-both on-line information and a printed manual from a single source file.
+both online information and a printed manual from a single source file.
 
-  Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98 Free Software
+  Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98, 99 Free Software
 Foundation, Inc.
 
-  This edition is for Texinfo version 3.12.
+  This edition is for Texinfo version 4.0, 28 September 1999.
 
   Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -34,306 +34,339 @@ translation approved by the Free Software Foundation.
 
 \1f
 Indirect:
-texinfo.info-1: 1510
-texinfo.info-2: 48723
-texinfo.info-3: 96698
-texinfo.info-4: 146082
-texinfo.info-5: 196057
-texinfo.info-6: 245140
-texinfo.info-7: 294058
-texinfo.info-8: 343872
-texinfo.info-9: 393199
-texinfo.info-10: 435577
-texinfo.info-11: 481692
-texinfo.info-12: 519851
+texinfo.info-1: 1493
+texinfo.info-2: 49439
+texinfo.info-3: 98206
+texinfo.info-4: 148178
+texinfo.info-5: 197140
+texinfo.info-6: 246982
+texinfo.info-7: 296539
+texinfo.info-8: 346362
+texinfo.info-9: 395696
+texinfo.info-10: 438701
+texinfo.info-11: 479038
+texinfo.info-12: 525104
+texinfo.info-13: 564169
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f1510
-Node: Copying\7f23823
-Node: Overview\7f25828
-Node: Overview-Footnotes\7f27256
-Node: Using Texinfo\7f27792
-Node: Info Files\7f30275
-Node: Info Files-Footnotes\7f34310
-Node: Printed Books\7f34557
-Node: Printed Books-Footnotes\7f37228
-Node: Formatting Commands\7f37512
-Node: Formatting Commands-Footnotes\7f40338
-Node: Conventions\7f41040
-Node: Comments\7f43602
-Node: Minimum\7f45025
-Node: Six Parts\7f47211
-Node: Short Sample\7f48723
-Node: Acknowledgements\7f52858
-Node: Texinfo Mode\7f53693
-Node: Texinfo Mode Overview\7f55065
-Node: Emacs Editing\7f55841
-Node: Inserting\7f57971
-Node: Showing the Structure\7f62252
-Node: Updating Nodes and Menus\7f64779
-Node: Updating Commands\7f65852
-Node: Updating Requirements\7f71913
-Node: Other Updating Commands\7f74210
-Node: Info Formatting\7f77478
-Node: Printing\7f78736
-Node: Texinfo Mode Summary\7f81082
-Node: Beginning a File\7f85836
-Node: Four Parts\7f86727
-Node: Sample Beginning\7f88197
-Node: Header\7f89817
-Node: First Line\7f91169
-Node: Start of Header\7f92158
-Node: setfilename\7f92872
-Node: settitle\7f94808
-Node: setchapternewpage\7f96698
-Node: paragraphindent\7f99459
-Node: End of Header\7f100941
-Node: Info Summary and Permissions\7f101780
-Node: Titlepage & Copyright Page\7f102799
-Node: titlepage\7f104405
-Node: titlepage-Footnotes\7f106686
-Node: titlefont center sp\7f107026
-Node: title subtitle author\7f108252
-Node: Copyright & Permissions\7f110524
-Node: end titlepage\7f112525
-Node: headings on off\7f114231
-Node: The Top Node\7f116276
-Node: Title of Top Node\7f117431
-Node: Master Menu Parts\7f118684
-Node: Software Copying Permissions\7f120921
-Node: Ending a File\7f122089
-Node: Printing Indices & Menus\7f122937
-Node: Contents\7f125239
-Node: File End\7f127579
-Node: Structuring\7f128252
-Node: Tree Structuring\7f129910
-Node: Structuring Command Types\7f131353
-Node: makeinfo top\7f133679
-Node: chapter\7f134212
-Node: unnumbered & appendix\7f135236
-Node: majorheading & chapheading\7f136075
-Node: section\7f136896
-Node: unnumberedsec appendixsec heading\7f137660
-Node: subsection\7f138649
-Node: unnumberedsubsec appendixsubsec subheading\7f139221
-Node: subsubsection\7f140174
-Node: Raise/lower sections\7f141724
-Node: Nodes\7f143859
-Node: Two Paths\7f144796
-Node: Node Menu Illustration\7f146082
-Node: node\7f149777
-Node: Node Names\7f152473
-Node: Writing a Node\7f153549
-Node: Node Line Tips\7f155567
-Node: Node Line Requirements\7f156361
-Node: First Node\7f157962
-Node: makeinfo top command\7f159408
-Node: Top Node Summary\7f160587
-Node: makeinfo Pointer Creation\7f162037
-Node: Menus\7f163284
-Node: Menus-Footnotes\7f164222
-Node: Menu Location\7f164573
-Node: Writing a Menu\7f166250
-Node: Menu Parts\7f167216
-Node: Less Cluttered Menu Entry\7f168374
-Node: Menu Example\7f168999
-Node: Other Info Files\7f170520
-Node: Cross References\7f172376
-Node: References\7f173333
-Node: Cross Reference Commands\7f175080
-Node: Cross Reference Parts\7f176139
-Node: xref\7f178975
-Node: Reference Syntax\7f179774
-Node: One Argument\7f181429
-Node: Two Arguments\7f182441
-Node: Three Arguments\7f183556
-Node: Four and Five Arguments\7f185947
-Node: Top Node Naming\7f188359
-Node: ref\7f189369
-Node: pxref\7f190759
-Node: inforef\7f193141
-Node: uref\7f194434
-Node: Marking Text\7f195433
-Node: Indicating\7f196057
-Node: Useful Highlighting\7f197962
-Node: code\7f199351
-Node: kbd\7f202389
-Node: key\7f204259
-Node: samp\7f205592
-Node: var\7f207179
-Node: file\7f208972
-Node: dfn\7f209579
-Node: cite\7f210489
-Node: url\7f210943
-Node: email\7f211507
-Node: Emphasis\7f212319
-Node: emph & strong\7f213219
-Node: Smallcaps\7f214205
-Node: Fonts\7f215532
-Node: Customized Highlighting\7f216620
-Node: Customized Highlighting-Footnotes\7f219434
-Node: Quotations and Examples\7f219654
-Node: Block Enclosing Commands\7f221276
-Node: quotation\7f223301
-Node: example\7f224391
-Node: noindent\7f226446
-Node: Lisp Example\7f227911
-Node: Lisp Example-Footnotes\7f228612
-Node: smallexample & smalllisp\7f228802
-Node: display\7f230827
-Node: format\7f231459
-Node: exdent\7f231920
-Node: flushleft & flushright\7f233000
-Node: cartouche\7f234266
-Node: Lists and Tables\7f235033
-Node: Introducing Lists\7f235709
-Node: itemize\7f237371
-Node: enumerate\7f239518
-Node: Two-column Tables\7f242017
-Node: table\7f242706
-Node: ftable vtable\7f245140
-Node: itemx\7f246241
-Node: Multi-column Tables\7f247252
-Node: Multitable Column Widths\7f247923
-Node: Multitable Rows\7f249377
-Node: Indices\7f251250
-Node: Index Entries\7f252401
-Node: Predefined Indices\7f253534
-Node: Indexing Commands\7f254531
-Node: Combining Indices\7f259072
-Node: syncodeindex\7f260435
-Node: synindex\7f262097
-Node: New Indices\7f262622
-Node: Insertions\7f264448
-Node: Braces Atsigns\7f265632
-Node: Inserting An Atsign\7f266184
-Node: Inserting Braces\7f266458
-Node: Inserting Space\7f266821
-Node: Not Ending a Sentence\7f267325
-Node: Ending a Sentence\7f268679
-Node: Multiple Spaces\7f269808
-Node: dmn\7f271028
-Node: Inserting Accents\7f272236
-Node: Dots Bullets\7f274212
-Node: dots\7f275035
-Node: bullet\7f275559
-Node: TeX and copyright\7f275956
-Node: tex\7f276523
-Node: copyright symbol\7f276939
-Node: pounds\7f277199
-Node: minus\7f277563
-Node: math\7f278485
-Node: Glyphs\7f279214
-Node: Glyphs Summary\7f280327
-Node: result\7f280955
-Node: expansion\7f281440
-Node: Print Glyph\7f282396
-Node: Error Glyph\7f283273
-Node: Equivalence\7f284106
-Node: Point Glyph\7f284794
-Node: Images\7f286351
-Node: Breaks\7f288018
-Node: Break Commands\7f289449
-Node: Line Breaks\7f290290
-Node: - and hyphenation\7f291308
-Node: w\7f292559
-Node: sp\7f293272
-Node: page\7f293681
-Node: group\7f294058
-Node: need\7f295801
-Node: Definition Commands\7f296531
-Node: Def Cmd Template\7f298102
-Node: Optional Arguments\7f301099
-Node: deffnx\7f302687
-Node: Def Cmds in Detail\7f303642
-Node: Functions Commands\7f304752
-Node: Variables Commands\7f307757
-Node: Typed Functions\7f309843
-Node: Typed Variables\7f313385
-Node: Abstract Objects\7f315368
-Node: Data Types\7f320593
-Node: Def Cmd Conventions\7f321848
-Node: Sample Function Definition\7f322411
-Node: Footnotes\7f325295
-Node: Footnotes-Footnotes\7f325682
-Node: Footnote Commands\7f326028
-Node: Footnote Commands-Footnotes\7f327524
-Node: Footnote Styles\7f327642
-Node: Conditionals\7f330228
-Node: Conditional Commands\7f331039
-Node: Conditional Not Commands\7f332532
-Node: Raw Formatter Commands\7f333277
-Node: set clear value\7f335107
-Node: ifset ifclear\7f335908
-Node: value\7f339087
-Node: value Example\7f340499
-Node: Macros\7f342077
-Node: Defining Macros\7f342783
-Node: Invoking Macros\7f343872
-Node: Format/Print Hardcopy\7f344978
-Node: Use TeX\7f346815
-Node: Format with tex/texindex\7f347443
-Node: Format with texi2dvi\7f351086
-Node: Print with lpr\7f351677
-Node: Within Emacs\7f352531
-Node: Texinfo Mode Printing\7f353450
-Node: Compile-Command\7f356860
-Node: Requirements Summary\7f357748
-Node: Preparing for TeX\7f359061
-Node: Overfull hboxes\7f361850
-Node: smallbook\7f363409
-Node: A4 Paper\7f364929
-Node: Cropmarks and Magnification\7f366155
-Node: Create an Info File\7f368097
-Node: makeinfo advantages\7f369400
-Node: Invoking makeinfo\7f370316
-Node: makeinfo options\7f371004
-Node: Pointer Validation\7f376493
-Node: makeinfo in Emacs\7f377837
-Node: texinfo-format commands\7f380395
-Node: Batch Formatting\7f381667
-Node: Tag and Split Files\7f382883
-Node: Install an Info File\7f386237
-Node: Directory file\7f387055
-Node: New Info File\7f388923
-Node: Other Info Directories\7f389984
-Node: Installing Dir Entries\7f393199
-Node: Invoking install-info\7f395192
-Node: Command List\7f397607
-Node: Tips\7f435577
-Node: Sample Texinfo File\7f446987
-Node: Sample Permissions\7f449105
-Node: Inserting Permissions\7f450148
-Node: ifinfo Permissions\7f452454
-Node: Titlepage Permissions\7f454075
-Node: Include Files\7f455337
-Node: Using Include Files\7f456424
-Node: texinfo-multiple-files-update\7f458379
-Node: Include File Requirements\7f460740
-Node: Sample Include File\7f461985
-Node: Include Files Evolution\7f463504
-Node: Headings\7f465475
-Node: Headings Introduced\7f466112
-Node: Heading Format\7f468000
-Node: Heading Choice\7f470452
-Node: Custom Headings\7f471824
-Node: Catching Mistakes\7f476152
-Node: makeinfo Preferred\7f477441
-Node: Debugging with Info\7f478346
-Node: Debugging with TeX\7f481692
-Node: Using texinfo-show-structure\7f485973
-Node: Using occur\7f489072
-Node: Running Info-Validate\7f490609
-Node: Using Info-validate\7f491670
-Node: Unsplit\7f493512
-Node: Tagifying\7f494558
-Node: Splitting\7f495410
-Node: Refilling Paragraphs\7f497026
-Node: Refilling Paragraphs-Footnotes\7f498679
-Node: Command Syntax\7f498930
-Node: Obtaining TeX\7f501887
-Node: Command and Variable Index\7f503999
-Node: Concept Index\7f519851
+Node: Top\7f1493
+Node: Copying\7f24618
+Node: Overview\7f26623
+Node: Overview-Footnotes\7f27894
+Ref: Overview-Footnote-1\7f27958
+Node: Reporting Bugs\7f28415
+Node: Using Texinfo\7f29914
+Node: Info Files\7f33728
+Node: Info Files-Footnotes\7f38125
+Ref: Info Files-Footnote-1\7f38193
+Node: Printed Books\7f38372
+Node: Printed Books-Footnotes\7f41154
+Ref: Printed Books-Footnote-1\7f41228
+Node: Formatting Commands\7f41562
+Node: Formatting Commands-Footnotes\7f44559
+Ref: Formatting Commands-Footnote-1\7f44645
+Node: Conventions\7f45253
+Node: Comments\7f48014
+Node: Minimum\7f49439
+Node: Six Parts\7f51633
+Node: Short Sample\7f53145
+Node: Acknowledgements and History\7f57226
+Node: Texinfo Mode\7f59241
+Node: Texinfo Mode Overview\7f60613
+Node: Emacs Editing\7f61398
+Node: Inserting\7f63536
+Node: Showing the Structure\7f67817
+Node: Updating Nodes and Menus\7f70132
+Node: Updating Commands\7f71205
+Node: Updating Requirements\7f77249
+Node: Other Updating Commands\7f79530
+Node: Info Formatting\7f82786
+Node: Printing\7f84046
+Node: Texinfo Mode Summary\7f86378
+Node: Beginning a File\7f91134
+Node: Four Parts\7f92025
+Node: Sample Beginning\7f93495
+Node: Header\7f95115
+Node: First Line\7f96519
+Node: Start of Header\7f97493
+Node: setfilename\7f98206
+Node: settitle\7f100557
+Node: setchapternewpage\7f102447
+Node: paragraphindent\7f105299
+Node: exampleindent\7f106606
+Node: End of Header\7f107671
+Node: Info Summary and Permissions\7f108508
+Node: Titlepage & Copyright Page\7f109527
+Node: titlepage\7f111380
+Node: titlepage-Footnotes\7f113916
+Ref: titlepage-Footnote-1\7f113982
+Node: titlefont center sp\7f114256
+Node: title subtitle author\7f115559
+Node: Copyright & Permissions\7f118254
+Node: end titlepage\7f120245
+Node: headings on off\7f121951
+Node: The Top Node\7f124011
+Node: Title of Top Node\7f125166
+Node: Master Menu Parts\7f126402
+Node: Software Copying Permissions\7f128639
+Node: Ending a File\7f129807
+Node: Printing Indices & Menus\7f130662
+Node: Contents\7f133010
+Node: File End\7f136308
+Node: Structuring\7f136981
+Node: Tree Structuring\7f138638
+Node: Structuring Command Types\7f140061
+Node: makeinfo top\7f142383
+Node: chapter\7f143163
+Node: unnumbered & appendix\7f144187
+Node: majorheading & chapheading\7f145032
+Node: section\7f145853
+Node: unnumberedsec appendixsec heading\7f146617
+Node: subsection\7f147606
+Node: unnumberedsubsec appendixsubsec subheading\7f148178
+Node: subsubsection\7f149131
+Node: Raise/lower sections\7f150681
+Node: Nodes\7f152816
+Node: Two Paths\7f153824
+Node: Node Menu Illustration\7f155154
+Node: node\7f158966
+Node: Node Names\7f161787
+Node: Writing a Node\7f163154
+Node: Node Line Tips\7f165190
+Node: Node Line Requirements\7f165984
+Node: First Node\7f167765
+Node: makeinfo top command\7f169209
+Node: Top Node Summary\7f170388
+Node: makeinfo Pointer Creation\7f171838
+Node: anchor\7f172947
+Node: Menus\7f174417
+Node: Menus-Footnotes\7f175570
+Ref: Menus-Footnote-1\7f175628
+Node: Menu Location\7f175921
+Node: Writing a Menu\7f177281
+Node: Menu Parts\7f178344
+Node: Less Cluttered Menu Entry\7f179502
+Node: Menu Example\7f180127
+Node: Other Info Files\7f181648
+Node: Cross References\7f183494
+Node: References\7f184463
+Node: Cross Reference Commands\7f186254
+Node: Cross Reference Parts\7f187313
+Node: xref\7f190163
+Node: Reference Syntax\7f190962
+Node: One Argument\7f192616
+Node: Two Arguments\7f193633
+Node: Three Arguments\7f194748
+Node: Four and Five Arguments\7f197140
+Node: Top Node Naming\7f199552
+Node: ref\7f200562
+Node: pxref\7f201978
+Node: inforef\7f204360
+Node: uref\7f205653
+Node: Marking Text\7f207875
+Node: Indicating\7f208526
+Node: Useful Highlighting\7f210622
+Node: code\7f212245
+Node: kbd\7f215477
+Node: key\7f217348
+Node: samp\7f218681
+Node: var\7f220151
+Node: env\7f222115
+Node: file\7f222678
+Node: command\7f223289
+Node: option\7f223983
+Node: dfn\7f224491
+Node: cite\7f225403
+Node: acronym\7f225859
+Node: url\7f226412
+Node: email\7f227058
+Node: Emphasis\7f227872
+Node: emph & strong\7f228703
+Node: Smallcaps\7f229702
+Node: Fonts\7f231326
+Node: Quotations and Examples\7f232382
+Node: Block Enclosing Commands\7f233993
+Node: quotation\7f235893
+Node: example\7f236983
+Node: noindent\7f238982
+Node: lisp\7f240438
+Node: lisp-Footnotes\7f241105
+Ref: lisp-Footnote-1\7f241161
+Node: small\7f241279
+Node: display\7f243204
+Node: format\7f243998
+Node: exdent\7f244636
+Node: flushleft & flushright\7f245716
+Node: cartouche\7f246982
+Node: Lists and Tables\7f247742
+Node: Introducing Lists\7f248418
+Node: itemize\7f250095
+Node: enumerate\7f252370
+Node: Two-column Tables\7f254903
+Node: table\7f255592
+Node: ftable vtable\7f258049
+Node: itemx\7f259134
+Node: Multi-column Tables\7f260145
+Node: Multitable Column Widths\7f260816
+Node: Multitable Rows\7f262283
+Node: Indices\7f264059
+Node: Index Entries\7f265191
+Node: Predefined Indices\7f266324
+Node: Indexing Commands\7f267321
+Node: Combining Indices\7f271116
+Node: syncodeindex\7f272479
+Node: synindex\7f274141
+Node: New Indices\7f274666
+Node: Insertions\7f276491
+Node: Braces Atsigns\7f277733
+Node: Inserting An Atsign\7f278285
+Node: Inserting Braces\7f278559
+Node: Inserting Space\7f278922
+Node: Not Ending a Sentence\7f279426
+Node: Ending a Sentence\7f280742
+Node: Multiple Spaces\7f281762
+Node: dmn\7f282981
+Node: Inserting Accents\7f284194
+Node: Dots Bullets\7f285971
+Node: dots\7f286779
+Node: bullet\7f287330
+Node: TeX and copyright\7f287727
+Node: tex\7f288294
+Node: copyright symbol\7f288684
+Node: pounds\7f288944
+Node: minus\7f289308
+Node: math\7f290230
+Node: Glyphs\7f290956
+Node: Glyphs Summary\7f292072
+Node: result\7f292700
+Node: expansion\7f293185
+Node: Print Glyph\7f294141
+Node: Error Glyph\7f295018
+Node: Equivalence\7f295851
+Node: Point Glyph\7f296539
+Node: Footnotes\7f298104
+Node: Footnotes-Footnotes\7f298480
+Ref: Footnotes-Footnote-1\7f298546
+Node: Footnote Commands\7f298826
+Node: Footnote Commands-Footnotes\7f300441
+Ref: Footnote Commands-Footnote-1\7f300523
+Node: Footnote Styles\7f300559
+Node: Images\7f303129
+Node: Breaks\7f305394
+Node: Break Commands\7f306825
+Node: Line Breaks\7f307658
+Node: - and hyphenation\7f308676
+Node: w\7f309926
+Node: sp\7f310539
+Node: page\7f310948
+Node: group\7f311325
+Node: need\7f313068
+Node: Definition Commands\7f313798
+Node: Def Cmd Template\7f315372
+Node: Optional Arguments\7f318369
+Node: deffnx\7f319957
+Node: Def Cmds in Detail\7f320898
+Node: Functions Commands\7f322008
+Node: Variables Commands\7f325011
+Node: Typed Functions\7f327094
+Node: Typed Variables\7f330636
+Node: Abstract Objects\7f332619
+Node: Data Types\7f338447
+Node: Def Cmd Conventions\7f339702
+Node: Sample Function Definition\7f340265
+Node: Conditionals\7f343134
+Node: Conditional Commands\7f344239
+Node: Conditional Not Commands\7f345584
+Node: Raw Formatter Commands\7f346362
+Node: set clear value\7f348195
+Node: ifset ifclear\7f349002
+Node: set value\7f352223
+Node: value Example\7f353881
+Node: Internationalization\7f355603
+Node: documentlanguage\7f356135
+Node: documentencoding\7f360438
+Node: Defining New Texinfo Commands\7f361051
+Node: Defining Macros\7f362220
+Node: Invoking Macros\7f364355
+Node: Macro Details\7f366056
+Node: alias\7f367101
+Node: definfoenclose\7f368300
+Node: Hardcopy\7f371050
+Node: Use TeX\7f373074
+Node: Format with tex/texindex\7f373662
+Node: Format with texi2dvi\7f378036
+Node: Print with lpr\7f379477
+Node: Within Emacs\7f381694
+Node: Texinfo Mode Printing\7f382587
+Node: Compile-Command\7f386345
+Node: Requirements Summary\7f387219
+Node: Preparing for TeX\7f388544
+Node: Preparing for TeX-Footnotes\7f392166
+Ref: Preparing for TeX-Footnote-1\7f392248
+Node: Overfull hboxes\7f392347
+Node: smallbook\7f394500
+Node: A4 Paper\7f395696
+Node: pagesizes\7f396588
+Node: Cropmarks and Magnification\7f397773
+Node: PDF Output\7f399832
+Node: Creating and Installing Info Files\7f401043
+Node: Creating an Info File\7f401427
+Node: makeinfo advantages\7f402700
+Node: Invoking makeinfo\7f403624
+Node: makeinfo options\7f404298
+Node: Pointer Validation\7f411542
+Node: makeinfo in Emacs\7f414682
+Node: texinfo-format commands\7f417234
+Node: Batch Formatting\7f418507
+Node: Tag and Split Files\7f419724
+Node: makeinfo html\7f423134
+Node: Install an Info File\7f425154
+Node: Directory File\7f425984
+Node: New Info File\7f427768
+Node: New Info File-Footnotes\7f428867
+Ref: New Info File-Footnote-1\7f428941
+Node: Other Info Directories\7f429022
+Node: Other Info Directories-Footnotes\7f433343
+Ref: Other Info Directories-Footnote-1\7f433435
+Ref: Other Info Directories-Footnote-2\7f433562
+Node: Installing Dir Entries\7f433623
+Node: Invoking install-info\7f435842
+Node: Command List\7f438701
+Node: Tips\7f479038
+Node: Sample Texinfo File\7f490447
+Node: Sample Permissions\7f492566
+Node: Inserting Permissions\7f493608
+Node: ifinfo Permissions\7f495904
+Node: Titlepage Permissions\7f497525
+Node: Include Files\7f498787
+Node: Using Include Files\7f499874
+Node: texinfo-multiple-files-update\7f501829
+Node: Include File Requirements\7f504190
+Node: Sample Include File\7f505435
+Node: Include Files Evolution\7f506942
+Node: Headings\7f508916
+Node: Headings Introduced\7f509553
+Node: Heading Format\7f511441
+Node: Heading Choice\7f513893
+Node: Custom Headings\7f515265
+Node: Catching Mistakes\7f519564
+Node: makeinfo Preferred\7f520853
+Node: Debugging with Info\7f521758
+Node: Debugging with TeX\7f525104
+Node: Using texinfo-show-structure\7f529367
+Node: Using occur\7f532463
+Node: Running Info-Validate\7f533998
+Node: Using Info-validate\7f535059
+Node: Unsplit\7f536889
+Node: Tagifying\7f537935
+Node: Splitting\7f538787
+Node: Refilling Paragraphs\7f540405
+Node: Refilling Paragraphs-Footnotes\7f542059
+Ref: Refilling Paragraphs-Footnote-1\7f542147
+Node: Command Syntax\7f542310
+Node: Obtaining TeX\7f545267
+Node: Command and Variable Index\7f546309
+Node: Concept Index\7f564169
 \1f
 End Tag Table
index bc542dc..0d1e560 100644 (file)
@@ -1,22 +1,22 @@
-This is Info file ../info/texinfo.info, produced by Makeinfo version
-1.68 from the input file texinfo.texi.
+This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
 START-INFO-DIR-ENTRY
 * Texinfo: (texinfo).           The GNU documentation format.
-* install-info: (texinfo)Invoking install-info. Updating info/dir entries.
-* texi2dvi: (texinfo)Format with texi2dvi.      Printing Texinfo documentation.
-* texindex: (texinfo)Format with tex/texindex.  Sorting Texinfo index files.
+* install-info: (texinfo)Invoking install-info. Update info/dir entries.
+* texi2dvi: (texinfo)Format with texi2dvi.      Print Texinfo documents.
+* texindex: (texinfo)Format with tex/texindex.  Sort Texinfo index files.
 * makeinfo: (texinfo)makeinfo Preferred.        Translate Texinfo source.
 END-INFO-DIR-ENTRY
 
   This file documents Texinfo, a documentation system that can produce
-both on-line information and a printed manual from a single source file.
+both online information and a printed manual from a single source file.
 
-  Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98 Free Software
+  Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98, 99 Free Software
 Foundation, Inc.
 
-  This edition is for Texinfo version 3.12.
+  This edition is for Texinfo version 4.0, 28 September 1999.
 
   Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -33,19 +33,19 @@ versions, except that this permission notice may be stated in a
 translation approved by the Free Software Foundation.
 
 \1f
-File: texinfo.info,  Node: Top,  Next: Copying,  Prev: (dir),  Up: (dir)
+File: texinfo.info,  Node: Top,  Next: Copying,  Up: (dir)
 
 Texinfo
 *******
 
   Texinfo is a documentation system that uses a single source file to
-produce both on-line information and printed output.
+produce both online information and printed output.
 
   The first part of this master menu lists the major nodes in this Info
 document, including the @-command and concept indices.  The rest of the
 menu lists all the lower level nodes in the document.
 
-  This is Edition 3.12 of the Texinfo documentation, 27 February 1998.
+  This is Edition 4.0 of the Texinfo manual, updated 28 September 1999.
 
 * Menu:
 
@@ -69,13 +69,12 @@ menu lists all the lower level nodes in the document.
 * Breaks::                      How to force and prevent line and page breaks.
 * Definition Commands::         How to describe functions and the like
                                   in a uniform manner.
-* Footnotes::                   How to write footnotes.
 * Conditionals::                How to specify text for either TeX or Info.
-* Macros::                      Defining new Texinfo commands.
-* Format/Print Hardcopy::       How to convert a Texinfo file to a file
+* Internationalization::
+* Defining New Texinfo Commands::
+* Hardcopy::                    How to convert a Texinfo file to a file
                                   for printing and how to print that file.
-* Create an Info File::         Convert a Texinfo file into an Info file.
-* Install an Info File::        Make an Info file accessible to users.
+* Creating and Installing Info Files::
 * Command List::                All the Texinfo @-commands.
 * Tips::                        Hints on how to write a Texinfo document.
 * Sample Texinfo File::         A sample Texinfo file to look at.
@@ -91,22 +90,21 @@ menu lists all the lower level nodes in the document.
 * Concept Index::               A menu covering many topics.
 
 
- -- The Detailed Node Listing --
+ --- The Detailed Node Listing ---
 
 Overview of Texinfo
 
-* Using Texinfo::               Create a conventional printed book
-                                  or an Info file.
+* Reporting Bugs::              Submitting effective bug reports.
+* Using Texinfo::               Create printed or online output.
 * Info Files::                  What is an Info file?
 * Printed Books::               Characteristics of a printed book or manual.
 * Formatting Commands::         @-commands are used for formatting.
 * Conventions::                 General rules for writing a Texinfo file.
-* Comments::                    How to write comments and mark regions that
-                                  the formatting commands will ignore.
+* Comments::                    Writing comments and ignored text in general.
 * Minimum::                     What a Texinfo file must have.
 * Six Parts::                   Usually, a Texinfo file has six parts.
 * Short Sample::                A short sample Texinfo file.
-* Acknowledgements::
+* Acknowledgements and History::  Contributors and genesis.
 
 Using Texinfo Mode
 
@@ -147,7 +145,8 @@ The Texinfo File Header
 * setfilename::                 Tell Info the name of the Info file.
 * settitle::                    Create a title for the printed work.
 * setchapternewpage::           Start chapters on right-hand pages.
-* paragraphindent::             An option to specify paragraph indentation.
+* paragraphindent::             Specify paragraph indentation.
+* exampleindent::               Specify environment indentation.
 * End of Header::               Formatting a region requires this.
 
 The Title and Copyright Pages
@@ -196,8 +195,9 @@ Nodes
 * Two Paths::                   Different commands to structure
                                   Info output and printed output.
 * Node Menu Illustration::      A diagram, and sample nodes and menus.
-* node::                        How to write a node, in detail.
-* makeinfo Pointer Creation::   How to create node pointers with `makeinfo'.
+* node::                        Creating nodes, in detail.
+* makeinfo Pointer Creation::   Letting makeinfo determine node pointers.
+* anchor::                      Defining arbitrary cross-reference targets.
 
 The `@node' Command
 
@@ -246,23 +246,26 @@ Marking Words and Phrases
 Indicating Definitions, Commands, etc.
 
 * Useful Highlighting::         Highlighting provides useful information.
-* code::                        How to indicate code.
-* kbd::                         How to show keyboard input.
-* key::                         How to specify keys.
-* samp::                        How to show a literal sequence of characters.
-* var::                         How to indicate a metasyntactic variable.
-* file::                        How to indicate the name of a file.
-* dfn::                         How to specify a definition.
-* cite::                        How to refer to a book that is not in Info.
-* url::                         How to indicate a world wide web reference.
-* email::                       How to indicate an electronic mail address.
+* code::                        Indicating program code.
+* kbd::                         Showing keyboard input.
+* key::                         Specifying keys.
+* samp::                        Showing a literal sequence of characters.
+* var::                         Indicating metasyntactic variables.
+* env::                         Indicating environment variables.
+* file::                        Indicating file names.
+* command::                     Indicating command names.
+* option::                      Indicating option names.
+* dfn::                         Specifying definitions.
+* cite::                        Referring to books not in the  Info system.
+* acronym::                     Indicating acronyms.
+* url::                         Indicating a World Wide Web reference.
+* email::                       Indicating an electronic mail address.
 
 Emphasizing Text
 
 * emph & strong::               How to emphasize text in Texinfo.
 * Smallcaps::                   How to use the small caps font.
 * Fonts::                       Various font commands for printed output.
-* Customized Highlighting::     How to define highlighting commands.
 
 Quotations and Examples
 
@@ -271,8 +274,8 @@ Quotations and Examples
 * quotation::                   How to write a quotation.
 * example::                     How to write an example in a fixed-width font.
 * noindent::                    How to prevent paragraph indentation.
-* Lisp Example::                How to illustrate Lisp code.
-* smallexample & smalllisp::    Forms for the `@smallbook' option.
+* lisp::                        How to illustrate Lisp code.
+* small::                       Forms for `@smallbook'.
 * display::                     How to write an example in the current font.
 * format::                      How to write an example that does not narrow
                                   the margins.
@@ -299,7 +302,7 @@ Multi-column Tables
 * Multitable Column Widths::    Defining multitable column widths.
 * Multitable Rows::             Defining multitable rows, with examples.
 
-Creating Indices
+Indices
 
 * Index Entries::               Choose different words for index entries.
 * Predefined Indices::          Use different indices for different kinds
@@ -329,6 +332,7 @@ Special Insertions
 * math::                        How to format a mathematical expression.
 * Glyphs::                      How to indicate results of evaluation,
                                   expansion of macros, errors, etc.
+* Footnotes::                   How to include footnotes.
 * Images::                      How to include graphics.
 
 Inserting @ and Braces
@@ -372,6 +376,11 @@ Glyphs Summary
 * Equivalence::
 * Point Glyph::
 
+Footnotes
+
+* Footnote Commands::           How to write a footnote in Texinfo.
+* Footnote Styles::             Controlling how footnotes appear in Info.
+
 Making and Preventing Breaks
 
 * Break Commands::              Cause and prevent splits.
@@ -402,11 +411,6 @@ The Definition Commands
 * Abstract Objects::            Commands for object-oriented programming.
 * Data Types::                  The definition command for data types.
 
-Footnotes
-
-* Footnote Commands::           How to write a footnote in Texinfo.
-* Footnote Styles::             Controlling how footnotes appear in Info.
-
 Conditionally Visible Text
 
 * Conditional Commands::        Specifying text for HTML, Info, or TeX.
@@ -419,30 +423,45 @@ Conditionally Visible Text
 `@set', `@clear', and `@value'
 
 * ifset ifclear::               Format a region if a flag is set.
-* value::                       Replace a flag with a string.
+* set value::                   Expand a flag variable to a string.
 * value Example::               An easy way to update edition information.
 
-Macros: Defining New Texinfo Commands
+Internationalization
 
-* Defining Macros::             Both defining and undefining new commands.
+* documentlanguage::            Declaring the current language.
+* documentencoding::            Declaring the input encoding.
+
+Defining New Texinfo Commands
+
+* Defining Macros::             Defining and undefining new commands.
 * Invoking Macros::             Using a macro, once you've defined it.
+* Macro Details::               Beyond basic macro usage.
+* alias::                       Command aliases.
+* definfoenclose::              Customized highlighting.
 
-Format and Print Hardcopy
+Formatting and Printing Hardcopy
 
 * Use TeX::                     Use TeX to format for hardcopy.
-* Format with tex/texindex::    How to format in a shell.
-* Format with texi2dvi::        A simpler way to use the shell.
+* Format with tex/texindex::    How to format with explicit shell commands.
+* Format with texi2dvi::        A simpler way to format.
 * Print with lpr::              How to print.
 * Within Emacs::                How to format and print from an Emacs shell.
 * Texinfo Mode Printing::       How to format and print in Texinfo mode.
 * Compile-Command::             How to print using Emacs's compile command.
 * Requirements Summary::        TeX formatting requirements summary.
-* Preparing for TeX::           What you need to do to use TeX.
+* Preparing for TeX::           What to do before you use TeX.
 * Overfull hboxes::             What are and what to do with overfull hboxes.
 * smallbook::                   How to print small format books and manuals.
 * A4 Paper::                    How to print on European A4 paper.
+* pagesizes::                   How to print with customized page sizes.
 * Cropmarks and Magnification::  How to print marks to indicate the size
                                 of pages and how to print scaled up output.
+* PDF Output::                  Portable Document Format output.
+
+Creating and Installing Info Files
+
+* Creating an Info File::
+* Install an Info File::
 
 Creating an Info File
 
@@ -457,10 +476,11 @@ Creating an Info File
 * Batch Formatting::            How to format for Info in Emacs Batch mode.
 * Tag and Split Files::         How tagged and split files help Info
                                   to run better.
+* makeinfo html::               Generating HTML output.
 
 Installing an Info File
 
-* Directory file::              The top level menu for all Info files.
+* Directory File::              The top level menu for all Info files.
 * New Info File::               Listing a new info file.
 * Other Info Directories::      How to specify Info files that are
                                   located in other directories.
@@ -508,7 +528,8 @@ Finding Badly Referenced Nodes
 * Tagifying::                   How to tagify a file.
 * Splitting::                   How to split a file manually.
 
-How to Obtain TeX
+     Documentation is like sex: when it is good, it is very, very good;
+     and when it is bad, it is better than nothing.  --Dick Brandon
 
 \1f
 File: texinfo.info,  Node: Copying,  Next: Overview,  Prev: Top,  Up: Top
@@ -556,43 +577,80 @@ File: texinfo.info,  Node: Overview,  Next: Texinfo Mode,  Prev: Copying,  Up: T
 Overview of Texinfo
 *******************
 
-  "Texinfo"(1) (*note Overview-Footnotes::) is a documentation system
-that uses a single source file to produce both on-line information and
+  "Texinfo"(1) (*note Overview-Footnote-1::)  is a documentation system
+that uses a single source file to produce both online information and
 printed output.  This means that instead of writing two different
-documents, one for the on-line help or other on-line information and
-the other for a typeset manual or other printed work, you need write
-only one document.  When the work is revised, you need revise only one
-document.  (You can read the on-line information, known as an "Info
-file", with an Info documentation-reading program.)
+documents, one for the online information and the other for a printed
+work, you need write only one document.  Therefore, when the work is
+revised, you need revise only that one document.
 
 * Menu:
 
-* Using Texinfo::               Create a conventional printed book
-                                  or an Info file.
+* Reporting Bugs::              Submitting effective bug reports.
+* Using Texinfo::               Create printed or online output.
 * Info Files::                  What is an Info file?
 * Printed Books::               Characteristics of a printed book or manual.
 * Formatting Commands::         @-commands are used for formatting.
 * Conventions::                 General rules for writing a Texinfo file.
-* Comments::                    How to write comments and mark regions that
-                                  the formatting commands will ignore.
+* Comments::                    Writing comments and ignored text in general.
 * Minimum::                     What a Texinfo file must have.
 * Six Parts::                   Usually, a Texinfo file has six parts.
 * Short Sample::                A short sample Texinfo file.
-* Acknowledgements::
+* Acknowledgements and History::  Contributors and genesis.
 
 \1f
 File: texinfo.info,  Node: Overview-Footnotes,  Up: Overview
 
-  (1) Note that the first syllable of "Texinfo" is pronounced like
-"speck", not "hex".  This odd pronunciation is derived from, but is not
-the same as, the pronunciation of TeX.  In the word TeX, the `X' is
-actually the Greek letter "chi" rather than the English letter "ex".
-Pronounce TeX as if the `X' were the last sound in the name `Bach'; but
-pronounce Texinfo as if the `x' were a `k'.  Spell "Texinfo" with a
-capital "T" and write the other letters in lower case.
+  (1) The first syllable of "Texinfo" is pronounced like "speck", not
+"hex".  This odd pronunciation is derived from, but is not the same as,
+the pronunciation of TeX.  In the word TeX, the `X' is actually the
+Greek letter "chi" rather than the English letter "ex".  Pronounce TeX
+as if the `X' were the last sound in the name `Bach'; but pronounce
+Texinfo as if the `x' were a `k'.  Spell "Texinfo" with a capital "T"
+and the other letters in lower case.
+
+\1f
+File: texinfo.info,  Node: Reporting Bugs,  Next: Using Texinfo,  Up: Overview
+
+Reporting Bugs
+==============
+
+  We welcome bug reports or suggestions for the Texinfo system, both
+programs and documentation.  Please email them to
+<bug-texinfo@gnu.org>.  You can get the latest version of Texinfo from
+`ftp://ftp.gnu.org/gnu/texinfo/' and its mirrors worldwide.
+
+  For bug reports, please include enough information for the maintainers
+to reproduce the problem.  Generally speaking, that means:
+
+   * the version number of Texinfo and the program(s) or manual(s)
+     involved.
+
+   * hardware, operating system, and compiler versions.
+
+   * any unusual options you gave to `configure'.
+
+   * the contents of any input files necessary to reproduce the bug.
+
+   * a description of the problem and samples of any erroneous output.
+
+   * anything else that you think would be helpful.
+
+  When in doubt whether something is needed or not, include it.  It's
+better to include too much than to leave out something important.
+
+  Patches are most welcome; if possible, please make them with
+`diff -c' (*note Overview: (diffutils)Top.) and include `ChangeLog'
+entries (*note Change Log: (emacs)Change Log.).
+
+  When sending email, please do not encode or split the messages in any
+way if possible; it's much easier to deal with one plain text message,
+however large, than many small ones.  GNU shar
+(ftp://ftp.gnu.org/gnu/sharutils/) is a convenient way of packaging
+multiple and/or binary files for email.
 
 \1f
-File: texinfo.info,  Node: Using Texinfo,  Next: Info Files,  Prev: Overview,  Up: Overview
+File: texinfo.info,  Node: Using Texinfo,  Next: Info Files,  Prev: Reporting Bugs,  Up: Overview
 
 Using Texinfo
 =============
@@ -600,47 +658,71 @@ Using Texinfo
   Using Texinfo, you can create a printed document with the normal
 features of a book, including chapters, sections, cross references, and
 indices.  From the same Texinfo source file, you can create a
-menu-driven, on-line Info file with nodes, menus, cross references, and
-indices.  You can, if you wish, make the chapters and sections of the
-printed document correspond to the nodes of the on-line information;
-and you use the same cross references and indices for both the Info
-file and the printed work.  `The GNU Emacs Manual' is a good example of
-a Texinfo file, as is this manual.
+menu-driven, online Info file with nodes, menus, cross references, and
+indices.  You can also create from that same source file an HTML output
+file suitable for use with a web browser.  `The GNU Emacs Manual' is a
+good example of a Texinfo file, as is this manual.
 
   To make a printed document, you process a Texinfo source file with the
-TeX typesetting program.  This creates a DVI file that you can typeset
-and print as a book or report.  (Note that the Texinfo language is
-completely different from TeX's usual language, plain TeX.)  If you do
-not have TeX, but do have `troff' or `nroff', you can use the
-`texi2roff' program instead.
-
-  To make an Info file, you process a Texinfo source file with the
-`makeinfo' utility or Emacs's `texinfo-format-buffer' command; this
-creates an Info file that you can install on-line.
-
-  TeX and `texi2roff' work with many types of printers; similarly, Info
-works with almost every type of computer terminal.  This power makes
-Texinfo a general purpose system, but brings with it a constraint,
-which is that a Texinfo file may contain only the customary
-"typewriter" characters (letters, numbers, spaces, and punctuation
-marks) but no special graphics.
-
-  A Texinfo file is a plain ASCII file containing text and "@-commands"
-(words preceded by an `@') that tell the typesetting and formatting
-programs what to do.  You may edit a Texinfo file with any text editor;
-but it is especially convenient to use GNU Emacs since that editor has
-a special mode, called Texinfo mode, that provides various
-Texinfo-related features.  (*Note Texinfo Mode::.)
-
-  Before writing a Texinfo source file, you should become familiar with
-the Info documentation reading program and learn about nodes, menus,
-cross references, and the rest.  (*note info: (info)Top, for more
-information.)
-
-  You can use Texinfo to create both on-line help and printed manuals;
+TeX typesetting program (but the Texinfo language is very different
+from TeX's usual language, plain TeX).  This creates a DVI file that
+you can typeset and print as a book or report (*note Hardcopy::).
+
+  To output an Info file, process your Texinfo source with the
+`makeinfo' utility or Emacs's `texinfo-format-buffer' command.  You can
+install the result in your Info tree (*note Install an Info File::).
+
+  To output an HTML file, process your Texinfo source with `makeinfo'
+using the `--html' option.  You can (for example) install the result on
+your web site.
+
+  If you are a programmer and would like to contribute to the GNU
+project by implementing additional output formats for Texinfo, that
+would be excellent.  But please do not write a separate translator
+texi2foo for your favorite format foo!  That is the hard way to do the
+job, and makes extra work in subsequent maintenance, since the Texinfo
+language is continually being enhanced and updated.  Instead, the best
+approach is modify `makeinfo' to generate the new format, as it does
+now for Info and HTML.
+
+  TeX works with virtually all printers; Info works with virtually all
+computer terminals; the HTML output works with virtually all web
+browsers.  Thus Texinfo can be used by almost any computer user.
+
+  A Texinfo source file is a plain ASCII file containing text and
+"@-commands" (words preceded by an `@') that tell the typesetting and
+formatting programs what to do.  You may edit a Texinfo file with any
+text editor; but it is especially convenient to use GNU Emacs since
+that editor has a special mode, called Texinfo mode, that provides
+various Texinfo-related features.  (*Note Texinfo Mode::.)
+
+  Before writing a Texinfo source file, you should learn about nodes,
+menus, cross references, and the rest, for example by reading this
+manual.
+
+  You can use Texinfo to create both online help and printed manuals;
 moreover, Texinfo is freely redistributable.  For these reasons, Texinfo
-is the format in which documentation for GNU utilities and libraries is
-written.
+is the official documentation format of the GNU project.  More
+information is available at the GNU documentation web page
+(http://www.gnu.org/doc/).
+
+  From time to time, proposals are made to generate traditional Unix man
+pages from Texinfo source.  This is not likely to ever be supported,
+because man pages have a very strict conventional format.  Merely
+enhancing `makeinfo' to output troff format would be insufficient.
+Generating a good man page therefore requires a completely different
+source than the typical Texinfo applications of generating a good user
+manual or a good reference manual.  This makes generating man pages
+incompatible with the Texinfo design goal of not having to document the
+same information in different ways for different output formats.  You
+might as well just write the man page directly.
+
+  If you wish to support man pages, the program `help2man' may be
+useful; it generates a traditional man page from the `--help' output of
+a program.  In fact, this is currently used to generate man pages for
+the Texinfo programs themselves.  It is free software written by
+Brendan O'Dea, available from
+`http://www.ozemail.com.au/~bod/help2man.tar.gz'.
 
 \1f
 File: texinfo.info,  Node: Info Files,  Next: Printed Books,  Prev: Using Texinfo,  Up: Overview
@@ -679,7 +761,7 @@ Normally the order in this chain is the same as the order of the
 children in the parent's menu.  Each child node records the parent node
 name as its `Up' pointer.  The last child has no `Next' pointer, and the
 first child has the parent both as its `Previous' and as its `Up'
-pointer.(1) (*note Info Files-Footnotes::)
+pointer.(1) (*note Info Files-Footnote-1::)
 
   The book-like structuring of an Info file into nodes that correspond
 to chapters, sections, and the like is a matter of convention, not a
@@ -720,6 +802,15 @@ with the advanced Info command `g *'.  (*note Advanced Info commands:
 for the whole Info system.  From it, you can reach the `Top' nodes of
 each of the documents in a complete Info system.
 
+  If you wish to refer to an Info file in a URI, you can use the
+(unofficial) syntax exemplified in the following.  This works with
+Emacs/W3, for example:
+     info:///usr/info/emacs#Dissociated%20Press
+     info:emacs#Dissociated%20Press
+     info://localhost/usr/info/emacs#Dissociated%20Press
+
+  The `info' program itself does not follow URI's of any kind.
+
 \1f
 File: texinfo.info,  Node: Info Files-Footnotes,  Up: Info Files
 
@@ -735,7 +826,7 @@ Printed Books
 
   A Texinfo file can be formatted and typeset as a printed book or
 manual.  To do this, you need TeX, a powerful, sophisticated typesetting
-program written by Donald Knuth.(1) (*note Printed Books-Footnotes::)
+program written by Donald Knuth.(1) (*note Printed Books-Footnote-1::)
 
   A Texinfo-based book is similar to any other typeset, printed work: it
 can have a title page, copyright page, table of contents, and preface,
@@ -743,17 +834,19 @@ as well as chapters, numbered or unnumbered sections and subsections,
 page headers, cross references, footnotes, and indices.
 
   You can use Texinfo to write a book without ever having the intention
-of converting it into on-line information.  You can use Texinfo for
+of converting it into online information.  You can use Texinfo for
 writing a printed novel, and even to write a printed memo, although
 this latter application is not recommended since electronic mail is so
 much easier.
 
   TeX is a general purpose typesetting program.  Texinfo provides a
-file called `texinfo.tex' that contains information (definitions or
-"macros") that TeX uses when it typesets a Texinfo file.
-(`texinfo.tex' tells TeX how to convert the Texinfo @-commands to TeX
-commands, which TeX can then process to create the typeset document.)
-`texinfo.tex' contains the specifications for printing a document.
+file `texinfo.tex' that contains information (definitions or "macros")
+that TeX uses when it typesets a Texinfo file.  (`texinfo.tex' tells
+TeX how to convert the Texinfo @-commands to TeX commands, which TeX
+can then process to create the typeset document.)  `texinfo.tex'
+contains the specifications for printing a document.  You can get the
+latest version of `texinfo.tex' from
+`ftp://ftp.gnu.org/gnu/texinfo.tex'.
 
   Most often, documents are printed on 8.5 inch by 11 inch pages (216mm
 by 280mm; this is the default size), but you can also print for 7 inch
@@ -772,22 +865,23 @@ light-hearted, young and cheery.
   TeX is freely distributable.  It is written in a superset of Pascal
 called WEB and can be compiled either in Pascal or (by using a
 conversion program that comes with the TeX distribution) in C.  (*Note
-TeX Mode: (xemacs)TeX Mode, for information about TeX.)
+TeX Mode: (emacs)TeX Mode, for information about TeX.)
 
   TeX is very powerful and has a great many features.  Because a
 Texinfo file must be able to present information both on a
 character-only terminal in Info form and in a typeset book, the
 formatting commands that Texinfo supports are necessarily limited.
 
-  *Note How to Obtain TeX: Obtaining TeX.
+  To get a copy of TeX, see *Note How to Obtain TeX: Obtaining TeX.
 
 \1f
 File: texinfo.info,  Node: Printed Books-Footnotes,  Up: Printed Books
 
-  (1) You can also use the `texi2roff' program if you do not have TeX;
-since Texinfo is designed for use with TeX, `texi2roff' is not
-described here.  `texi2roff' is not part of the standard GNU
-distribution.
+  (1) You can also use the `texi2roff' (ftp://tug.org/texi2roff.tar.gz)
+program if you do not have TeX; since Texinfo is designed for use with
+TeX, `texi2roff' is not described here.  `texi2roff' is not part of the
+standard GNU distribution and is not maintained or up-to-date with all
+the Texinfo features described in this manual.
 
 \1f
 File: texinfo.info,  Node: Formatting Commands,  Next: Conventions,  Prev: Printed Books,  Up: Overview
@@ -812,7 +906,7 @@ characters.  Similarly, you can print the output generated by TeX on a
 wide variety of printers.
 
   Depending on what they do or what arguments(1) (*note Formatting
-Commands-Footnotes::) they take, you need to write @-commands on lines
+Commands-Footnote-1::) they take, you need to write @-commands on lines
 of their own or as part of sentences:
 
    * Write a command such as `@noindent' at the beginning of a line as
@@ -832,11 +926,14 @@ of their own or as part of sentences:
      this example, between the braces.  (`@code' marks text as being
      code.)
 
-   * Write a command such as `@example' at the beginning of a line of
-     its own; write the body-text on following lines; and write the
-     matching `@end' command, `@end example' in this case, at the
-     beginning of a line of its own after the body-text. (`@example'
-     ... `@end example' indents and typesets body-text as an example.)
+   * Write a command such as `@example' on a line of its own; write the
+     body-text on following lines; and write the matching `@end'
+     command, `@end example' in this case, at the on a line of its own
+     after the body-text. (`@example' ... `@end example' indents and
+     typesets body-text as an example.)  It's usually ok to indent
+     environment commands like this, but in complicated and
+     hard-to-define circumstances the extra spaces cause extra space to
+     appear in the output, so beware.
 
 As a general rule, a command requires braces if it mingles among other
 text; but it does not need braces if it starts a line of its own.  The
@@ -853,14 +950,14 @@ exactly the same syntax.  (For details about @-command syntax, see
 File: texinfo.info,  Node: Formatting Commands-Footnotes,  Up: Formatting Commands
 
   (1) The word "argument" comes from the way it is used in mathematics
-and does not refer to a disputation between two people; it refers to the
+and does not refer to a dispute between two people; it refers to the
 information presented to the command.  According to the `Oxford English
 Dictionary', the word derives from the Latin for "to make clear,
 prove"; thus it came to mean `the evidence offered as proof', which is
 to say, `the information offered', which led to its mathematical
 meaning.  In its other thread of derivation, the word came to mean `to
 assert in a manner against which others may make counter assertions',
-which led to the meaning of `argument' as a disputation.
+which led to the meaning of `argument' as a dispute.
 
 \1f
 File: texinfo.info,  Node: Conventions,  Next: Comments,  Prev: Formatting Commands,  Up: Overview
@@ -868,37 +965,43 @@ File: texinfo.info,  Node: Conventions,  Next: Comments,  Prev: Formatting Comma
 General Syntactic Conventions
 =============================
 
-  All printable ASCII characters except `@', `{' and `}' can appear in
-a Texinfo file and stand for themselves.  `@' is the escape character
-which introduces commands.  `{' and `}' should be used only to surround
-arguments to certain commands.  To put one of these special characters
-into the document, put an `@' character in front of it, like this:
-`@@', `@{', and `@}'.
-
-  It is customary in TeX to use doubled single-quote characters to
-begin and end quotations: ` ` and ' ' (but without a space between the
-two single-quote characters).  This convention should be followed in
-Texinfo files.  TeX converts doubled single-quote characters to left-
-and right-hand doubled quotation marks and Info converts doubled
-single-quote characters to ASCII double-quotes: ` ` and ' ' to " .
-
-  Use three hyphens in a row, `---', for a dash--like this.  In TeX, a
-single or double hyphen produces a printed dash that is shorter than
-the usual typeset dash. Info reduces three hyphens to two for display
-on the screen.
-
-  To prevent a paragraph from being indented in the printed manual, put
-the command `@noindent' on a line by itself before the paragraph.
-
-  If you mark off a region of the Texinfo file with the `@iftex' and
-`@end iftex' commands, that region will appear only in the printed
-copy; in that region, you can use certain commands borrowed from plain
-TeX that you cannot use in Info.  Likewise, if you mark off a region
-with the `@ifinfo' and `@end ifinfo' commands, that region will appear
-only in the Info file; in that region, you can use Info commands that
-you cannot use in TeX.  Similarly for `@ifhtml ... @end ifhtml',
-`@ifnothtml ... @end ifnothtml', `@ifnotinfo ... @end ifnotinfo',
-`@ifnottex ... @end ifnottex', *Note Conditionals::.
+  This section describes the general conventions used in all Texinfo
+documents.
+
+   * All printable ASCII characters except `@', `{' and `}' can appear
+     in a Texinfo file and stand for themselves.  `@' is the escape
+     character which introduces commands.  `{' and `}' should be used
+     only to surround arguments to certain commands.  To put one of
+     these special characters into the document, put an `@' character
+     in front of it, like this: `@@', `@{', and `@}'.
+
+   * It is customary in TeX to use doubled single-quote characters to
+     begin and end quotations: ` ` and ' ' (but without a space between
+     the two single-quote characters).  This convention should be
+     followed in Texinfo files.  TeX converts doubled single-quote
+     characters to left- and right-hand doubled quotation marks and
+     Info converts doubled single-quote characters to ASCII
+     double-quotes: ` ` and ' ' to " .
+
+   * Use three hyphens in a row, `---', for a dash--like this.  In TeX,
+     a single or double hyphen produces a printed dash that is shorter
+     than the usual typeset dash. Info reduces three hyphens to two for
+     display on the screen.
+
+   * To prevent a paragraph from being indented in the printed manual,
+     put the command `@noindent' on a line by itself before the
+     paragraph.
+
+   * If you mark off a region of the Texinfo file with the `@iftex' and
+     `@end iftex' commands, that region will appear only in the printed
+     copy; in that region, you can use certain commands borrowed from
+     plain TeX that you cannot use in Info.  Likewise, if you mark off
+     a region with the `@ifinfo' and `@end ifinfo' commands, that
+     region will appear only in the Info file; in that region, you can
+     use Info commands that you cannot use in TeX.  Similarly for
+     `@ifhtml ... @end ifhtml', `@ifnothtml ... @end ifnothtml',
+     `@ifnotinfo ... @end ifnotinfo', `@ifnottex ... @end ifnottex'.
+     *Note Conditionals::.
 
      *Caution:* Do not use tabs in a Texinfo file!  TeX uses
      variable-width fonts, which means that it cannot predefine a tab
@@ -913,8 +1016,6 @@ you cannot use in TeX.  Similarly for `@ifhtml ... @end ifhtml',
      Also, you can run `untabify' in Emacs to convert tabs in a region
      to multiple spaces.
 
-     Don't use tabs.
-
 \1f
 File: texinfo.info,  Node: Comments,  Next: Minimum,  Prev: Conventions,  Up: Overview
 
@@ -924,14 +1025,14 @@ Comments
   You can write comments in a Texinfo file that will not appear in
 either the Info file or the printed manual by using the `@comment'
 command (which may be abbreviated to `@c').  Such comments are for the
-person who reads the Texinfo file.  All the text on a line that follows
-either `@comment' or `@c' is a comment; the rest of the line does not
-appear in either the Info file or the printed manual. (Often, you can
-write the `@comment' or `@c' in the middle of a line, and only the text
-that follows after the `@comment' or `@c' command does not appear; but
-some commands, such as `@settitle' and `@setfilename', work on a whole
-line.  You cannot use `@comment' or `@c' in a line beginning with such
-a command.)
+person who revises the Texinfo file.  All the text on a line that
+follows either `@comment' or `@c' is a comment; the rest of the line
+does not appear in either the Info file or the printed manual. (Often,
+you can write the `@comment' or `@c' in the middle of a line, and only
+the text that follows after the `@comment' or `@c' command does not
+appear; but some commands, such as `@settitle' and `@setfilename', work
+on a whole line.  You cannot use `@comment' or `@c' in a line beginning
+with such a command.)
 
   You can write long stretches of text that will not appear in either
 the Info file or the printed manual by using the `@ignore' and `@end
@@ -943,100 +1044,3 @@ two commands does not appear in the processed output.  You can use
 applies to the Texinfo source file of a document, but not to the Info
 or printed version of the document.
 
-\1f
-File: texinfo.info,  Node: Minimum,  Next: Six Parts,  Prev: Comments,  Up: Overview
-
-What a Texinfo File Must Have
-=============================
-
-  By convention, the names of Texinfo files end with one of the
-extensions `.texinfo', `.texi', or `.tex'.  The longer extension is
-preferred since it describes more clearly to a human reader the nature
-of the file.  The shorter extensions are for operating systems that
-cannot handle long file names.
-
-  In order to be made into a printed manual and an Info file, a Texinfo
-file *must* begin with lines like this:
-
-     \input texinfo
-     @setfilename INFO-FILE-NAME
-     @settitle NAME-OF-MANUAL
-
-The contents of the file follow this beginning, and then you *must* end
-a Texinfo file with a line like this:
-
-     @bye
-
-The `\input texinfo' line tells TeX to use the `texinfo.tex' file,
-which tells TeX how to translate the Texinfo @-commands into TeX
-typesetting commands.  (Note the use of the backslash, `\'; this is
-correct for TeX.)  The `@setfilename' line provides a name for the Info
-file and tells TeX to open auxiliary files.  The `@settitle' line
-specifies a title for the page headers (or footers) of the printed
-manual.
-
-  The `@bye' line at the end of the file on a line of its own tells the
-formatters that the file is ended and to stop formatting.
-
-  Usually, you will not use quite such a spare format, but will include
-mode setting and start-of-header and end-of-header lines at the
-beginning of a Texinfo file, like this:
-
-     \input texinfo   @c -*-texinfo-*-
-     @c %**start of header
-     @setfilename INFO-FILE-NAME
-     @settitle NAME-OF-MANUAL
-     @c %**end of header
-
-In the first line, `-*-texinfo-*-' causes Emacs to switch into Texinfo
-mode when you edit the file.
-
-  The `@c' lines which surround the `@setfilename' and `@settitle'
-lines are optional, but you need them in order to run TeX or Info on
-just part of the file.  (*Note Start of Header::, for more information.)
-
-  Furthermore, you will usually provide a Texinfo file with a title
-page, indices, and the like.  But the minimum, which can be useful for
-short documents, is just the three lines at the beginning and the one
-line at the end.
-
-\1f
-File: texinfo.info,  Node: Six Parts,  Next: Short Sample,  Prev: Minimum,  Up: Overview
-
-Six Parts of a Texinfo File
-===========================
-
-  Generally, a Texinfo file contains more than the minimal beginning
-and end--it usually contains six parts:
-
-1. Header
-     The "Header" names the file, tells TeX which definitions' file to
-     use, and performs other "housekeeping" tasks.
-
-2. Summary Description and Copyright
-     The "Summary Description and Copyright" segment describes the
-     document and contains the copyright notice and copying permissions
-     for the Info file.  The segment must be enclosed between `@ifinfo'
-     and `@end ifinfo' commands so that the formatters place it only in
-     the Info file.
-
-3. Title and Copyright
-     The "Title and Copyright" segment contains the title and copyright
-     pages and copying permissions for the printed manual.  The segment
-     must be enclosed between `@titlepage' and `@end titlepage'
-     commands.  The title and copyright page appear only in the printed
-     manual.
-
-4. `Top' Node and Master Menu
-     The "Master Menu" contains a complete menu of all the nodes in the
-     whole Info file.  It appears only in the Info file, in the `Top'
-     node.
-
-5. Body
-     The "Body" of the document may be structured like a traditional
-     book or encyclopedia or it may be free form.
-
-6. End
-     The "End" contains commands for printing indices and generating
-     the table of contents, and the `@bye' command on a line of its own.
-
index 1697d67..b309e1a 100644 (file)
@@ -1,22 +1,22 @@
-This is Info file ../info/texinfo.info, produced by Makeinfo version
-1.68 from the input file texinfo.texi.
+This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
 START-INFO-DIR-ENTRY
 * Texinfo: (texinfo).           The GNU documentation format.
-* install-info: (texinfo)Invoking install-info. Updating info/dir entries.
-* texi2dvi: (texinfo)Format with texi2dvi.      Printing Texinfo documentation.
-* texindex: (texinfo)Format with tex/texindex.  Sorting Texinfo index files.
+* install-info: (texinfo)Invoking install-info. Update info/dir entries.
+* texi2dvi: (texinfo)Format with texi2dvi.      Print Texinfo documents.
+* texindex: (texinfo)Format with tex/texindex.  Sort Texinfo index files.
 * makeinfo: (texinfo)makeinfo Preferred.        Translate Texinfo source.
 END-INFO-DIR-ENTRY
 
   This file documents Texinfo, a documentation system that can produce
-both on-line information and a printed manual from a single source file.
+both online information and a printed manual from a single source file.
 
-  Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98 Free Software
+  Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98, 99 Free Software
 Foundation, Inc.
 
-  This edition is for Texinfo version 3.12.
+  This edition is for Texinfo version 4.0, 28 September 1999.
 
   Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -33,7 +33,104 @@ versions, except that this permission notice may be stated in a
 translation approved by the Free Software Foundation.
 
 \1f
-File: texinfo.info,  Node: Short Sample,  Next: Acknowledgements,  Prev: Six Parts,  Up: Overview
+File: texinfo.info,  Node: Minimum,  Next: Six Parts,  Prev: Comments,  Up: Overview
+
+What a Texinfo File Must Have
+=============================
+
+  By convention, the names of Texinfo files end with one of the
+extensions `.texinfo', `.texi', `.txi', or `.tex'.  The longer
+extension is preferred since it describes more clearly to a human
+reader the nature of the file.  The shorter extensions are for
+operating systems that cannot handle long file names.
+
+  In order to be made into a printed manual and an Info file, a Texinfo
+file *must* begin with lines like this:
+
+     \input texinfo
+     @setfilename INFO-FILE-NAME
+     @settitle NAME-OF-MANUAL
+
+The contents of the file follow this beginning, and then you *must* end
+a Texinfo file with a line like this:
+
+     @bye
+
+The `\input texinfo' line tells TeX to use the `texinfo.tex' file,
+which tells TeX how to translate the Texinfo @-commands into TeX
+typesetting commands.  (Note the use of the backslash, `\'; this is
+correct for TeX.)  The `@setfilename' line provides a name for the Info
+file and tells TeX to open auxiliary files.  The `@settitle' line
+specifies a title for the page headers (or footers) of the printed
+manual.
+
+  The `@bye' line at the end of the file on a line of its own tells the
+formatters that the file is ended and to stop formatting.
+
+  Usually, you will not use quite such a spare format, but will include
+mode setting and start-of-header and end-of-header lines at the
+beginning of a Texinfo file, like this:
+
+     \input texinfo   @c -*-texinfo-*-
+     @c %**start of header
+     @setfilename INFO-FILE-NAME
+     @settitle NAME-OF-MANUAL
+     @c %**end of header
+
+In the first line, `-*-texinfo-*-' causes Emacs to switch into Texinfo
+mode when you edit the file.
+
+  The `@c' lines which surround the `@setfilename' and `@settitle'
+lines are optional, but you need them in order to run TeX or Info on
+just part of the file.  (*Note Start of Header::, for more information.)
+
+  Furthermore, you will usually provide a Texinfo file with a title
+page, indices, and the like.  But the minimum, which can be useful for
+short documents, is just the three lines at the beginning and the one
+line at the end.
+
+\1f
+File: texinfo.info,  Node: Six Parts,  Next: Short Sample,  Prev: Minimum,  Up: Overview
+
+Six Parts of a Texinfo File
+===========================
+
+  Generally, a Texinfo file contains more than the minimal beginning
+and end--it usually contains six parts:
+
+1. Header
+     The "Header" names the file, tells TeX which definitions' file to
+     use, and performs other "housekeeping" tasks.
+
+2. Summary Description and Copyright
+     The "Summary Description and Copyright" segment describes the
+     document and contains the copyright notice and copying permissions
+     for the Info file.  The segment must be enclosed between `@ifinfo'
+     and `@end ifinfo' commands so that the formatters place it only in
+     the Info file.
+
+3. Title and Copyright
+     The "Title and Copyright" segment contains the title and copyright
+     pages and copying permissions for the printed manual.  The segment
+     must be enclosed between `@titlepage' and `@end titlepage'
+     commands.  The title and copyright page appear only in the printed
+     manual.
+
+4. `Top' Node and Master Menu
+     The "Master Menu" contains a complete menu of all the nodes in the
+     whole Info file.  It appears only in the Info file, in the `Top'
+     node.
+
+5. Body
+     The "Body" of the document may be structured like a traditional
+     book or encyclopedia or it may be free form.
+
+6. End
+     The "End" contains commands for printing indices and generating
+     the table of contents, and the `@bye' command on a line of its own.
+
+\1f
+File: texinfo.info,  Node: Short Sample,  Next: Acknowledgements and History,  Prev: Six Parts,  Up: Overview
 
 A Short Sample Texinfo File
 ===========================
@@ -44,7 +141,7 @@ titlepage', look more intimidating than they are.  Most of the material
 is standard boilerplate; when you write a manual, simply insert the
 names for your own manual in this segment. (*Note Beginning a File::.)
 
-In the following, the sample text is *indented*; comments on it are
+  In the following, the sample text is _indented_; comments on it are
 not.  The complete file, without any comments, is shown in *Note Sample
 Texinfo File::.
 
@@ -59,9 +156,8 @@ file and the title used in the header.
      @c %**start of header
      @setfilename sample.info
      @settitle Sample Document
-     @c %**end of header
-     
      @setchapternewpage odd
+     @c %**end of header
 
 Part 2: Summary Description and Copyright
 -----------------------------------------
@@ -140,13 +236,11 @@ chapter containing an enumerated list.
 Part 6: The End of the Document
 -------------------------------
 
-The end segment contains commands both for generating an index in a node
-and unnumbered chapter of its own and for generating the table of
-contents; and it contains the `@bye' command that marks the end of the
-document.
+The end segment contains commands for generating an index in a node and
+unnumbered chapter of its own, (usually) for generating the table of
+contents, and the `@bye' command that marks the end of the document.
 
      @node    Concept Index,    ,  First Chapter, Top
-     @comment node-name,    next,  previous,      up
      @unnumbered Concept Index
      
      @printindex cp
@@ -160,6 +254,7 @@ The Results
   Here is what the contents of the first chapter of the sample look
 like:
 
+
      This is the contents of the first chapter.
 
      Here is a numbered list.
@@ -173,29 +268,44 @@ like:
      for a printed manual.
 
 \1f
-File: texinfo.info,  Node: Acknowledgements,  Prev: Short Sample,  Up: Overview
+File: texinfo.info,  Node: Acknowledgements and History,  Prev: Short Sample,  Up: Overview
 
-Acknowledgements
-================
+Acknowledgements and History
+============================
 
-  Richard M. Stallman wrote Edition 1.0 of this manual.
-Robert J. Chassell revised and extended it, starting with Edition 1.1.
-Karl Berry made updates for the Texinfo 3.8 and subsequent releases,
-starting with Edition 2.22.
+  Richard M. Stallman invented the Texinfo format, wrote the initial
+processors, and created Edition 1.0 of this manual.  Robert J. Chassell
+greatly revised and extended the manual, starting with Edition 1.1.
+Brian Fox was responsible for the standalone Texinfo distribution until
+version 3.8, and wrote the standalone `makeinfo' and `info'.  Karl
+Berry has made the updates since Texinfo 3.8 and subsequent releases,
+starting with Edition 2.22 of the manual.
 
   Our thanks go out to all who helped improve this work, particularly to
 Franc,ois Pinard and David D. Zuhn, who tirelessly recorded and
 reported mistakes and obscurities; our special thanks go to Melissa
 Weisshaus for her frequent and often tedious reviews of nearly similar
-editions.  Our mistakes are our own.
-
-  Please send suggestions and corrections to:
-
-     Internet address:
-         bug-texinfo@gnu.org
-
-Please include the manual's edition number and update date in your
-messages.
+editions.  The indefatigable Eli Zaretskii and Andreas Schwab have
+provided patches beyond counting.  Zack Weinberg did the impossible by
+implementing the macro syntax in `texinfo.tex'.  Dozens of others have
+contributed patches and suggestions, they are gratefully acknowledged
+in the `ChangeLog' file.  Our mistakes are our own.
+
+  A bit of history: in the 1970's at CMU, Brian Reid developed a program
+and format named Scribe to mark up documents for printing.  It used the
+`@' character to introduce commands as Texinfo does and strived to
+describe document contents rather than formatting.
+
+  Meanwhile, people at MIT developed another, not too dissimilar format
+called Bolio.  This then was converted to using TeX as its typesetting
+language: BoTeX.
+
+  BoTeX could only be used as a markup language for documents to be
+printed, not for online documents.  Richard Stallman (RMS) worked on
+both Bolio and BoTeX.  He also developed a nifty on-line help format
+called Info, and then combined BoTeX and Info to create Texinfo, a mark
+up language for text that is intended to be read both on line and as
+printed hard copy.
 
 \1f
 File: texinfo.info,  Node: Texinfo Mode,  Next: Beginning a File,  Prev: Overview,  Up: Top
@@ -232,7 +342,8 @@ File: texinfo.info,  Node: Texinfo Mode Overview,  Next: Emacs Editing,  Prev: T
 Texinfo Mode Overview
 =====================
 
-  Texinfo mode provides special features for working with Texinfo files:
+  Texinfo mode provides special features for working with Texinfo files.
+You can:
 
    * Insert frequently used @-commands.
 
@@ -277,17 +388,18 @@ such as appendices.  With this value for the page delimiter, you can
 jump from chapter title to chapter title with the `C-x ]'
 (`forward-page') and `C-x [' (`backward-page') commands and narrow to a
 chapter with the `C-x p' (`narrow-to-page') command.  (*Note Pages:
-(xemacs)Pages, for details about the page commands.)
+(emacs)Pages, for details about the page commands.)
 
   You may name a Texinfo file however you wish, but the convention is to
-end a Texinfo file name with one of the three extensions `.texinfo',
-`.texi', or `.tex'.  A longer extension is preferred, since it is
+end a Texinfo file name with one of the extensions `.texinfo', `.texi',
+`.txi', or `.tex'.  A longer extension is preferred, since it is
 explicit, but a shorter extension may be necessary for operating
 systems that limit the length of file names.  GNU Emacs automatically
-enters Texinfo mode when you visit a file with a `.texinfo' or  `.texi'
-extension.  Also, Emacs switches to Texinfo mode when you visit a file
-that has `-*-texinfo-*-' in its first line.  If ever you are in another
-mode and wish to switch to Texinfo mode, type `M-x texinfo-mode'.
+enters Texinfo mode when you visit a file with a `.texinfo', `.texi' or
+`.txi' extension.  Also, Emacs switches to Texinfo mode when you visit a
+file that has `-*-texinfo-*-' in its first line.  If ever you are in
+another mode and wish to switch to Texinfo mode, type `M-x
+texinfo-mode'.
 
   Like all other Emacs features, you can customize or enhance Texinfo
 mode as you wish.  In particular, the keybindings are very easy to
@@ -371,7 +483,7 @@ first letter of the @-command:
      however, more mnemonic; hence the two keybindings.  (Also, you can
      move out from between braces by typing `C-f'.)
 
-  To put a command such as `@code{...}' around an *existing* word,
+  To put a command such as `@code{...}' around an _existing_ word,
 position the cursor in front of the word and type `C-u 1 C-c C-c c'.
 This makes it easy to edit existing plain text.  The value of the
 prefix argument tells Emacs how many words following point to include
@@ -436,19 +548,16 @@ corresponding spot in the Texinfo file.
   If you call `texinfo-show-structure' with a prefix argument by typing
 `C-u C-c C-s', it will list not only those lines with the @-commands
 for `@chapter', `@section', and the like, but also the `@node' lines.
-(This is how the `texinfo-show-structure' command worked without an
-argument in the first version of Texinfo.  It was changed because
-`@node' lines clutter up the `*Occur*' buffer and are usually not
-needed.)  You can use `texinfo-show-structure' with a prefix argument
-to check whether the `Next', `Previous', and `Up' pointers of an
-`@node' line are correct.
+You can use `texinfo-show-structure' with a prefix argument to check
+whether the `Next', `Previous', and `Up' pointers of an `@node' line
+are correct.
 
   Often, when you are working on a manual, you will be interested only
 in the structure of the current chapter.  In this case, you can mark
 off the region of the buffer that you are interested in by using the
 `C-x n n' (`narrow-to-region') command and `texinfo-show-structure'
 will work on only that region.  To see the whole buffer again, use
-`C-x n w' (`widen').  (*Note Narrowing: (xemacs)Narrowing, for more
+`C-x n w' (`widen').  (*Note Narrowing: (emacs)Narrowing, for more
 information about the narrowing commands.)
 
   In addition to providing the `texinfo-show-structure' command,
@@ -456,7 +565,7 @@ Texinfo mode sets the value of the page delimiter variable to match the
 chapter-level @-commands.  This enables you to use the `C-x ]'
 (`forward-page') and `C-x [' (`backward-page') commands to move forward
 and backward by chapter, and to use the `C-x p' (`narrow-to-page')
-command to narrow to a chapter.  *Note Pages: (xemacs)Pages, for more
+command to narrow to a chapter.  *Note Pages: (emacs)Pages, for more
 information about the page commands.
 
 \1f
@@ -490,14 +599,14 @@ File: texinfo.info,  Node: Updating Commands,  Next: Updating Requirements,  Pre
 The Updating Commands
 ---------------------
 
-  You can use the updating commands
+  You can use the updating commands to:
 
-   * to insert or update the `Next', `Previous', and `Up' pointers of a
+   * insert or update the `Next', `Previous', and `Up' pointers of a
      node,
 
-   * to insert or update the menu for a section, and
+   * insert or update the menu for a section, and
 
-   * to create a master menu for a Texinfo source file.
+   * create a master menu for a Texinfo source file.
 
   You can also use the commands to update all the nodes and menus in a
 region or in a whole Texinfo file.
@@ -516,11 +625,11 @@ structuring command line; and you may interpose only an `@comment' line
 or an `@ifinfo' line.
 
   Commands which work on a whole buffer require that the `Top' node be
-followed by a node with an `@chapter' or equivalent-level command.
-Note that the menu updating commands will not create a main or master
-menu for a Texinfo file that has only `@chapter'-level nodes!  The menu
-updating commands only create menus *within* nodes for lower level
-nodes.  To create a menu of chapters, you must provide a `Top' node.
+followed by a node with an `@chapter' or equivalent-level command.  The
+menu updating commands will not create a main or master menu for a
+Texinfo file that has only `@chapter'-level nodes!  The menu updating
+commands only create menus _within_ nodes for lower level nodes.  To
+create a menu of chapters, you must provide a `Top' node.
 
   The menu updating commands remove menu entries that refer to other
 Info files since they do not refer to nodes within the current buffer.
@@ -560,7 +669,7 @@ menu in the whole Texinfo file.
      This updates all the nodes and menus completely and all at once.
 
   The other major updating commands do smaller jobs and are designed for
-the person  who updates nodes and menus as he or she writes a Texinfo
+the person who updates nodes and menus as he or she writes a Texinfo
 file.
 
   The commands are:
@@ -618,8 +727,8 @@ file.
 which menu descriptions are indented.  By default, the value is 32
 although it is often useful to reduce it to as low as 24.  You can set
 the variable with the `M-x edit-options' command (*note Editing
-Variable Values: (xemacs)Edit Options.) or with the `M-x set-variable'
-command (*note Examining and Setting Variables: (xemacs)Examining.).
+Variable Values: (emacs)Edit Options.) or with the `M-x set-variable'
+command (*note Examining and Setting Variables: (emacs)Examining.).
 
   Also, the `texinfo-indent-menu-description' command may be used to
 indent existing menu descriptions to a specified column.  Finally, if
@@ -661,7 +770,7 @@ In this example, `Comments' is the name of both the node and the
 section.  The next node is called `Minimum' and the previous node is
 called `Conventions'.  The `Comments' section is within the `Overview'
 node, which is specified by the `Up' pointer.  (Instead of an
-`@comment' line, you can write an `@ifinfo' line.)
+`@comment' line, you may also write an `@ifinfo' line.)
 
   If a file has a `Top' node, it must be called `top' or `Top' and be
 the first node in the file.
@@ -673,10 +782,10 @@ must have a `Top' node if you want a menu of chapters.
   Incidentally, the `makeinfo' command will create an Info file for a
 hierarchically organized Texinfo file that lacks `Next', `Previous' and
 `Up' pointers.  Thus, if you can be sure that your Texinfo file will be
-formatted with `makeinfo', you have no need for the `update node'
-commands.  (*Note Creating an Info File: Create an Info File, for more
-information about `makeinfo'.)  However, both `makeinfo' and the
-`texinfo-format-...' commands require that you insert menus in the file.
+formatted with `makeinfo', you have no need for the update node
+commands.  (*Note Creating an Info File::, for more information about
+`makeinfo'.)  However, both `makeinfo' and the `texinfo-format-...'
+commands require that you insert menus in the file.
 
 \1f
 File: texinfo.info,  Node: Other Updating Commands,  Prev: Updating Requirements,  Up: Updating Nodes and Menus
@@ -705,11 +814,11 @@ possesses several less frequently used updating commands:
 
           C-x h C-u M-x texinfo-insert-node-lines
 
-     (Note that this command inserts titles as node names in `@node'
-     lines; the `texinfo-start-menu-description' command (*note
-     Inserting Frequently Used Commands: Inserting.) inserts titles as
-     descriptions in menu entries, a different action.  However, in both
-     cases, you need to edit the inserted text.)
+     This command inserts titles as node names in `@node' lines; the
+     `texinfo-start-menu-description' command (*note Inserting
+     Frequently Used Commands: Inserting.) inserts titles as
+     descriptions in menu entries, a different action.  However, in
+     both cases, you need to edit the inserted text.
 
 `M-x texinfo-multiple-files-update'
      Update nodes and menus in a document built from several separate
@@ -785,10 +894,10 @@ an Info file:
 or
      M-x makeinfo-buffer
 
-  For TeX or the Info formatting commands to work, the file *must*
+  For TeX or the Info formatting commands to work, the file _must_
 include a line that has `@setfilename' in its header.
 
-  *Note Create an Info File::, for details about Info formatting.
+  *Note Creating an Info File::, for details about Info formatting.
 
 \1f
 File: texinfo.info,  Node: Printing,  Next: Texinfo Mode Summary,  Prev: Info Formatting,  Up: Texinfo Mode
@@ -802,7 +911,7 @@ print the file.  Optionally, you may also create indices.  To do this,
 you must run the `texindex' command after first running the `tex'
 typesetting command; and then you must run the `tex' command again.  Or
 else run the `texi2dvi' command which automatically creates indices as
-needed (*note Format with texi2dvi::.).
+needed (*note Format with texi2dvi::).
 
   Often, when you are writing a document, you want to typeset and print
 only part of a file to see what it will look like.  You can use the
@@ -836,13 +945,13 @@ only part of a file to see what it will look like.  You can use the
      `texinfo-tex-buffer' or `texinfo-tex-region'.
 
   For `texinfo-tex-region' or `texinfo-tex-buffer' to work, the file
-*must* start with a `\input texinfo' line and must include an
+_must_ start with a `\input texinfo' line and must include an
 `@settitle' line.  The file must end with `@bye' on a line by itself.
 (When you use `texinfo-tex-region', you must surround the `@settitle'
 line with start-of-header and end-of-header lines.)
 
-  *Note Format/Print Hardcopy::, for a description of the other TeX
-related commands, such as `tex-show-print-queue'.
+  *Note Hardcopy::, for a description of the other TeX related
+commands, such as `tex-show-print-queue'.
 
 \1f
 File: texinfo.info,  Node: Texinfo Mode Summary,  Prev: Printing,  Up: Texinfo Mode
@@ -969,8 +1078,8 @@ C-t' and then another control command: `C-r' for `texinfo-tex-region',
 Other Updating Commands
 -----------------------
 
-  The `other updating commands' do not have standard keybindings because
-they are rarely used.
+  The remaining updating commands do not have standard keybindings
+because they are rarely used.
 
      M-x texinfo-insert-node-lines
                      Insert missing `@node' lines in region.
@@ -1143,11 +1252,12 @@ or else like this:
 * setfilename::                 Tell Info the name of the Info file.
 * settitle::                    Create a title for the printed work.
 * setchapternewpage::           Start chapters on right-hand pages.
-* paragraphindent::             An option to specify paragraph indentation.
+* paragraphindent::             Specify paragraph indentation.
+* exampleindent::               Specify environment indentation.
 * End of Header::               Formatting a region requires this.
 
 \1f
-File: texinfo.info,  Node: First Line,  Next: Start of Header,  Prev: Header,  Up: Header
+File: texinfo.info,  Node: First Line,  Next: Start of Header,  Up: Header
 
 The First Line of a Texinfo File
 --------------------------------
@@ -1181,7 +1291,7 @@ Start of Header
 Follow the start-of-header line with `@setfilename' and `@settitle'
 lines and, optionally, with other command lines, such as `@smallbook'
 or `@footnotestyle'; and then by an end-of-header line (*note End of
-Header::.).
+Header::).
 
   With these lines, you can format part of a Texinfo file for Info or
 typeset part for printing.
@@ -1193,91 +1303,3 @@ typeset part for printing.
   The odd string of characters, `%**', is to ensure that no other
 comment is accidentally taken for a start-of-header line.
 
-\1f
-File: texinfo.info,  Node: setfilename,  Next: settitle,  Prev: Start of Header,  Up: Header
-
-`@setfilename'
---------------
-
-  In order to serve as the primary input file for either `makeinfo' or
-TeX, a Texinfo file must contain a line that looks like this:
-
-     @setfilename INFO-FILE-NAME
-
-  Write the `@setfilename' command at the beginning of a line and
-follow it on the same line by the Info file name.  Do not write anything
-else on the line; anything on the line after the command is considered
-part of the file name, including what would otherwise be a comment.
-
-  The `@setfilename' line specifies the name of the Info file to be
-generated.  This name should be different from the name of the Texinfo
-file.  There are two conventions for choosing the name: you can either
-remove the `.texi' extension from the input file name, or replace it
-with the `.info' extension.
-
-  Some operating systems cannot handle long file names.  You can run
-into a problem even when the file name you specify is itself short
-enough.  This occurs because the Info formatters split a long Info file
-into short indirect subfiles, and name them by appending `-1', `-2',
-..., `-10', `-11', and so on, to the original file name.  (*Note Tag
-Files and Split Files: Tag and Split Files.)  The subfile name
-`texinfo.info-10', for example, is too long for some systems; so the
-Info file name for this document is `texinfo' rather than
-`texinfo.info'.
-
-  The Info formatting commands ignore everything written before the
-`@setfilename' line, which is why the very first line of the file (the
-`\input' line) does not show up in the output.
-
-  The `@setfilename' line produces no output when you typeset a manual
-with TeX, but it nevertheless is essential: it opens the index,
-cross-reference, and other auxiliary files used by Texinfo, and also
-reads `texinfo.cnf' if that file is present on your system (*note
-Preparing to Use TeX: Preparing for TeX.).
-
-\1f
-File: texinfo.info,  Node: settitle,  Next: setchapternewpage,  Prev: setfilename,  Up: Header
-
-`@settitle'
------------
-
-  In order to be made into a printed manual, a Texinfo file must contain
-a line that looks like this:
-
-     @settitle TITLE
-
-  Write the `@settitle' command at the beginning of a line and follow
-it on the same line by the title.  This tells TeX the title to use in a
-header or footer.  Do not write anything else on the line; anything on
-the line after the command is considered part of the title, including a
-comment.
-
-  Conventionally, when TeX formats a Texinfo file for double-sided
-output, the title is printed in the left-hand (even-numbered) page
-headings and the current chapter title is printed in the right-hand
-(odd-numbered) page headings.  (TeX learns the title of each chapter
-from each `@chapter' command.)  Page footers are not printed.
-
-  Even if you are printing in a single-sided style, TeX looks for an
-`@settitle' command line, in case you include the manual title in the
-heading.
-
-  The `@settitle' command should precede everything that generates
-actual output in TeX.
-
-  Although the title in the `@settitle' command is usually the same as
-the title on the title page, it does not affect the title as it appears
-on the title page.  Thus, the two do not need not match exactly;  and
-the title in the `@settitle' command can be a shortened or expanded
-version of the title as it appears on the title page. (*Note
-`@titlepage': titlepage.)
-
-  TeX prints page headings only for that text that comes after the
-`@end titlepage' command in the Texinfo file, or that comes after an
-`@headings' command that turns on headings.  (*Note The `@headings'
-Command: headings on off, for more information.)
-
-  You may, if you wish, create your own, customized headings and
-footings.  *Note Page Headings: Headings, for a detailed discussion of
-this process.
-
index 7e2da86..75b5ce0 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/widget.info, produced by Makeinfo version
-1.68 from the input file widget.texi.
+This is ../info/widget.info, produced by makeinfo version 4.0 from
+widget.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -212,34 +212,34 @@ called "buttons".  The default commands for activating a button are:
    There are several different kind of buttons, all of which are
 present in the example:
 
-*The Option Field Tags.*
+_The Option Field Tags._
      When you invoke one of these buttons, you will be asked to choose
      between a number of different options.  This is how you edit an
      option field.  Option fields are created by the `menu-choice'
      widget.  In the example, `Choose' is an option field tag.
 
-*The `[INS]' and `[DEL]' buttons.*
+_The `[INS]' and `[DEL]' buttons._
      Activating these will insert or delete elements from a editable
      list.  The list is created by the `editable-list' widget.
 
-*Embedded Buttons.*
+_Embedded Buttons._
      The `_other work_' is an example of an embedded button. Embedded
      buttons are not associated with a fields, but can serve any
      purpose, such as implementing hypertext references.  They are
      usually created by the `link' widget.
 
-*The `[ ]' and `[X]' buttons.*
+_The `[ ]' and `[X]' buttons._
      Activating one of these will convert it to the other.  This is
      useful for implementing multiple-choice fields.  You can create it
      wit
 
-*The `( )' and `(*)' buttons.*
+_The `( )' and `(*)' buttons._
      Only one radio button in a `radio-button-choice' widget can be
      selected at any time.  When you invoke one of the unselected radio
      buttons, it will be selected and the previous selected radio
      button will become unselected.
 
-*The `[Apply Form]' `[Reset Form]' buttons.*
+_The `[Apply Form]' `[Reset Form]' buttons._
      These are explicit buttons made with the `push-button' widget.
      The main difference from the `link' widget is that the buttons are
      will be displayed as GUI buttons when possible.  enough.
@@ -259,11 +259,11 @@ Navigation
 buffer, plus you will have these additional commands:
 
 `<TAB>'
-      - Command: widget-forward &optional COUNT
+      - Command: widget-forward &optional count
           Move point COUNT buttons or editing fields forward.
 
 `<M-TAB>'
-      - Command: widget-backward &optional COUNT
+      - Command: widget-backward &optional count
           Move point COUNT buttons or editing fields backward.
 
 \1f
@@ -369,14 +369,14 @@ object.  This object can be queried and manipulated by other widget
 functions, until it is deleted with `widget-delete'.  After the widgets
 have been created, `widget-setup' must be called to enable them.
 
- - Function: widget-create TYPE [ KEYWORD ARGUMENT ]...
+ - Function: widget-create type [ keyword argument ]...
      Create and return a widget of type TYPE.  The syntax for the TYPE
      argument is described in *Note Basic Types::.
 
      The keyword arguments can be used to overwrite the keyword
      arguments that are part of TYPE.
 
- - Function: widget-delete WIDGET
+ - Function: widget-delete widget
      Delete WIDGET and remove it from the buffer.
 
  - Function: widget-setup
@@ -480,13 +480,13 @@ widget specific way.
      Text around %[ %] in the format.
 
      These can be
-    *nil*
+    _nil_
           No text is inserted.
 
-    *a string*
+    _a string_
           The string is inserted literally.
 
-    *a symbol*
+    _a symbol_
           The value of the symbol is expanded according to this table.
 
 `:doc'
@@ -545,7 +545,7 @@ widget specific way.
 
      The following predefined function can be used:
 
-      - Function: widget-children-validate WIDGET
+      - Function: widget-children-validate widget
           All the `:children' of WIDGET must be valid.
 
 `:tab-order'
@@ -800,7 +800,7 @@ arguments.
 widget after it has been created with the function
 `widget-radio-add-item'.
 
- - Function: widget-radio-add-item WIDGET TYPE
+ - Function: widget-radio-add-item widget type
      Add to `radio-button-choice' widget WIDGET a new radio button item
      of type TYPE.
 
@@ -1198,15 +1198,15 @@ Properties
    You can examine or set the value of a widget by using the widget
 object that was returned by `widget-create'.
 
- - Function: widget-value WIDGET
+ - Function: widget-value widget
      Return the current value contained in WIDGET.  It is an error to
      call this function on an uninitialized widget.
 
- - Function: widget-value-set WIDGET VALUE
+ - Function: widget-value-set widget value
      Set the value contained in WIDGET to VALUE.  It is an error to
      call this function with an invalid VALUE.
 
-   *Important:* You *must* call `widget-setup' after modifying the
+   *Important:* You _must_ call `widget-setup' after modifying the
 value of a widget before the user is allowed to edit the widget again.
 It is enough to call `widget-setup' once if you modify multiple
 widgets.  This is currently only necessary if the widget contains an
@@ -1217,22 +1217,22 @@ widget objects, for example a reference to the item being edited, it
 can be done with `widget-put' and `widget-get'.  The property names
 must begin with a `:'.
 
- - Function: widget-put WIDGET PROPERTY VALUE
+ - Function: widget-put widget property value
      In WIDGET set PROPERTY to VALUE.  PROPERTY should be a symbol,
      while VALUE can be anything.
 
- - Function: widget-get WIDGET PROPERTY
+ - Function: widget-get widget property
      In WIDGET return the value for PROPERTY.  PROPERTY should be a
      symbol, the value is what was last set by `widget-put' for
      PROPERTY.
 
- - Function: widget-member WIDGET PROPERTY
+ - Function: widget-member widget property
      Non-nil if WIDGET has a value (even nil) for property PROPERTY.
 
    Occasionally it can be useful to know which kind of widget you have,
 i.e. the name of the widget type you gave when the widget was created.
 
- - Function: widget-type WIDGET
+ - Function: widget-type widget
      Return the name of WIDGET, a symbol.
 
    Widgets can be in two states: active, which means they are
@@ -1278,7 +1278,7 @@ you to create a shorthand for more complex widgets, including specifying
 component widgets and default new default values for the keyword
 arguments.
 
- - Function: widget-define NAME CLASS DOC &rest ARGS
+ - Function: widget-define name class doc &rest args
      Define a new widget type named NAME from `class'.
 
      NAME and class should both be symbols, `class' should be one of
@@ -1312,10 +1312,10 @@ new widgets:
 
      The following predefined functions can be used here:
 
-      - Function: widget-types-convert-widget WIDGET
+      - Function: widget-types-convert-widget widget
           Convert `:args' as widget types in WIDGET.
 
-      - Function: widget-value-convert-widget WIDGET
+      - Function: widget-value-convert-widget widget
           Initialize `:value' from `:args' in WIDGET.
 
 `:value-to-internal'
@@ -1354,7 +1354,7 @@ new widgets:
 
      The following predefined function can be used here:
 
-      - Function: widget-children-value-delete WIDGET
+      - Function: widget-children-value-delete widget
           Delete all `:children' and `:buttons' in WIDGET.
 
 `:value-get'
@@ -1363,7 +1363,7 @@ new widgets:
 
      The following predefined function can be used here:
 
-      - Function: widget-value-value-get WIDGET
+      - Function: widget-value-value-get widget
           Return the `:value' property of WIDGET.
 
 `:format-handler'
@@ -1382,7 +1382,7 @@ new widgets:
 
      The following predefined function can be used here:
 
-      - Function: widget-parent-action WIDGET &optional EVENT
+      - Function: widget-parent-action widget &optional event
           Tell `:parent' of WIDGET to handle the `:action'.
           Optional EVENT is the event that triggered the action.
 
@@ -1450,12 +1450,12 @@ File: widget.info,  Node: Utilities,  Next: Widget Wishlist,  Prev: Widget Minor
 Utilities.
 ==========
 
- - Function: widget-prompt-value WIDGET PROMPT [ VALUE UNBOUND ]
+ - Function: widget-prompt-value widget prompt [ value unbound ]
      Prompt for a value matching WIDGET, using PROMPT.
      The current value is assumed to be VALUE, unless UNBOUND is
      non-nil.
 
- - Function: widget-get-sibling WIDGET
+ - Function: widget-get-sibling widget
      Get the item WIDGET is assumed to toggle.
      This is only meaningful for radio buttons or checkboxes in a list.
 
@@ -1514,39 +1514,40 @@ Wishlist
      symbol, it should pop up a menu.
 
 
+
 \1f
 Tag Table:
-Node: Top\7f227
-Node: Introduction\7f607
-Node: User Interface\7f4090
-Node: Programming Example\7f8985
-Node: Setting Up the Buffer\7f12302
-Node: Basic Types\7f14019
-Node: link\7f20064
-Node: url-link\7f20578
-Node: info-link\7f20890
-Node: push-button\7f21181
-Node: editable-field\7f21754
-Node: text\7f23093
-Node: menu-choice\7f23391
-Node: radio-button-choice\7f24256
-Node: item\7f25835
-Node: choice-item\7f26223
-Node: toggle\7f26721
-Node: checkbox\7f27446
-Node: checklist\7f27752
-Node: editable-list\7f29196
-Node: group\7f30378
-Node: Sexp Types\7f30665
-Node: constants\7f30978
-Node: generic\7f32057
-Node: atoms\7f32590
-Node: composite\7f34537
-Node: Widget Properties\7f37003
-Node: Defining New Widgets\7f40066
-Node: Widget Browser\7f45366
-Node: Widget Minor Mode\7f46224
-Node: Utilities\7f46781
-Node: Widget Wishlist\7f47262
+Node: Top\7f201
+Node: Introduction\7f581
+Node: User Interface\7f4064
+Node: Programming Example\7f8959
+Node: Setting Up the Buffer\7f12276
+Node: Basic Types\7f13993
+Node: link\7f20038
+Node: url-link\7f20552
+Node: info-link\7f20864
+Node: push-button\7f21155
+Node: editable-field\7f21728
+Node: text\7f23067
+Node: menu-choice\7f23365
+Node: radio-button-choice\7f24230
+Node: item\7f25809
+Node: choice-item\7f26197
+Node: toggle\7f26695
+Node: checkbox\7f27420
+Node: checklist\7f27726
+Node: editable-list\7f29170
+Node: group\7f30352
+Node: Sexp Types\7f30639
+Node: constants\7f30952
+Node: generic\7f32031
+Node: atoms\7f32564
+Node: composite\7f34511
+Node: Widget Properties\7f36977
+Node: Defining New Widgets\7f40040
+Node: Widget Browser\7f45340
+Node: Widget Minor Mode\7f46198
+Node: Utilities\7f46755
+Node: Widget Wishlist\7f47236
 \1f
 End Tag Table
index cf12847..981e994 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/xemacs-faq.info, produced by Makeinfo version
-1.68 from the input file xemacs-faq.texi.
+This is ../info/xemacs-faq.info, produced by makeinfo version 4.0 from
+xemacs-faq.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -8,241 +8,242 @@ END-INFO-DIR-ENTRY
 
 \1f
 Indirect:
-xemacs-faq.info-1: 221
-xemacs-faq.info-2: 48809
-xemacs-faq.info-3: 95901
-xemacs-faq.info-4: 145739
-xemacs-faq.info-5: 195532
+xemacs-faq.info-1: 195
+xemacs-faq.info-2: 48836
+xemacs-faq.info-3: 95929
+xemacs-faq.info-4: 145764
+xemacs-faq.info-5: 195594
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f221
-Node: Introduction\7f15614
-Node: Q1.0.1\7f19134
-Node: Q1.0.2\7f19670
-Node: Q1.0.3\7f20106
-Node: Q1.0.4\7f20364
-Node: Q1.0.5\7f21796
-Node: Q1.0.6\7f22485
-Node: Q1.0.7\7f23616
-Node: Q1.0.8\7f24015
-Node: Q1.0.9\7f24211
-Node: Q1.0.10\7f24489
-Node: Q1.0.11\7f25938
-Node: Q1.0.12\7f26395
-Node: Q1.0.13\7f26763
-Node: Q1.0.14\7f26998
-Node: Q1.1.1\7f27542
-Node: Q1.1.2\7f28737
-Node: Q1.1.3\7f29112
-Node: Q1.2.1\7f30060
-Node: Q1.2.2\7f31120
-Node: Q1.2.3\7f31550
-Node: Q1.3.1\7f32501
-Node: Q1.3.2\7f36419
-Node: Q1.3.3\7f37128
-Node: Q1.3.4\7f37370
-Node: Q1.3.5\7f38134
-Node: Q1.3.6\7f40549
-Node: Q1.3.7\7f42044
-Node: Q1.4.1\7f42979
-Node: Q1.4.2\7f43849
-Node: Q1.4.3\7f44190
-Node: Q1.4.4\7f44832
-Node: Q1.4.5\7f46372
-Node: Q1.4.6\7f46676
-Node: Q1.4.7\7f47684
-Node: Installation\7f48809
-Node: Q2.0.1\7f51217
-Node: Q2.0.2\7f52090
-Node: Q2.0.3\7f59300
-Node: Q2.0.4\7f60598
-Node: Q2.0.5\7f61187
-Node: Q2.0.6\7f61555
-Node: Q2.0.7\7f61936
-Node: Q2.0.8\7f62317
-Node: Q2.0.9\7f63892
-Node: Q2.0.10\7f65330
-Node: Q2.0.11\7f66174
-Node: Q2.0.12\7f67115
-Node: Q2.0.13\7f68638
-Node: Q2.0.14\7f69296
-Node: Q2.1.1\7f69864
-Node: Q2.1.2\7f72606
-Node: Q2.1.3\7f73783
-Node: Q2.1.4\7f75076
-Node: Q2.1.5\7f75875
-Node: Q2.1.6\7f76237
-Node: Q2.1.7\7f76714
-Node: Q2.1.8\7f77067
-Node: Q2.1.9\7f78583
-Node: Q2.1.10\7f79005
-Node: Q2.1.11\7f79762
-Node: Q2.1.12\7f80627
-Node: Q2.1.13\7f81582
-Node: Q2.1.14\7f82613
-Node: Q2.1.15\7f83721
-Node: Q2.1.16\7f89678
-Node: Q2.1.17\7f90356
-Node: Q2.1.18\7f90953
-Node: Q2.1.19\7f92750
-Node: Q2.1.20\7f93280
-Node: Q2.1.21\7f93662
-Node: Q2.1.22\7f93952
-Node: Q2.1.23\7f95249
-Node: Customization\7f95901
-Node: Q3.0.1\7f100795
-Node: Q3.0.2\7f101501
-Node: Q3.0.3\7f102065
-Node: Q3.0.4\7f102482
-Node: Q3.0.5\7f103315
-Node: Q3.0.6\7f104096
-Node: Q3.0.7\7f104676
-Node: Q3.0.8\7f105340
-Node: Q3.0.9\7f106186
-Node: Q3.1.1\7f106747
-Node: Q3.1.2\7f107484
-Node: Q3.1.3\7f107915
-Node: Q3.1.4\7f108500
-Node: Q3.1.5\7f109036
-Node: Q3.1.6\7f109420
-Node: Q3.1.7\7f110101
-Node: Q3.1.8\7f112325
-Node: Q3.2.1\7f112864
-Node: Q3.2.2\7f114272
-Node: Q3.2.3\7f115071
-Node: Q3.2.4\7f115673
-Node: Q3.2.5\7f116707
-Node: Q3.2.6\7f117174
-Node: Q3.3.1\7f118136
-Node: Q3.3.2\7f118529
-Node: Q3.3.3\7f119160
-Node: Q3.3.4\7f119541
-Node: Q3.3.5\7f120635
-Node: Q3.4.1\7f122129
-Node: Q3.4.2\7f122772
-Node: Q3.5.1\7f123284
-Node: Q3.5.2\7f124739
-Node: Q3.5.3\7f125157
-Node: Q3.5.4\7f125998
-Node: Q3.5.5\7f126830
-Node: Q3.5.6\7f127970
-Node: Q3.5.7\7f128960
-Node: Q3.5.8\7f130312
-Node: Q3.5.9\7f131059
-Node: Q3.5.10\7f131839
-Node: Q3.5.11\7f132472
-Node: Q3.6.1\7f133025
-Node: Q3.6.2\7f133765
-Node: Q3.6.3\7f134193
-Node: Q3.7.1\7f134693
-Node: Q3.7.2\7f135581
-Node: Q3.7.3\7f136240
-Node: Q3.7.4\7f136662
-Node: Q3.7.5\7f137005
-Node: Q3.7.6\7f137473
-Node: Q3.7.7\7f138188
-Node: Q3.7.8\7f139208
-Node: Q3.8.1\7f139627
-Node: Q3.8.2\7f140087
-Node: Q3.8.3\7f140550
-Node: Q3.8.4\7f141156
-Node: Q3.8.5\7f141875
-Node: Q3.9.1\7f142660
-Node: Q3.9.2\7f143600
-Node: Q3.9.3\7f144198
-Node: Q3.9.4\7f144860
-Node: Q3.10.1\7f145739
-Node: Q3.10.2\7f146557
-Node: Q3.10.3\7f147338
-Node: Q3.10.4\7f148066
-Node: Q3.10.5\7f148449
-Node: Subsystems\7f149459
-Node: Q4.0.1\7f151874
-Node: Q4.0.2\7f152399
-Node: Q4.0.3\7f152957
-Node: Q4.0.4\7f153278
-Node: Q4.0.5\7f153520
-Node: Q4.0.6\7f153751
-Node: Q4.0.7\7f154329
-Node: Q4.0.8\7f154654
-Node: Q4.0.9\7f155881
-Node: Q4.0.10\7f157919
-Node: Q4.0.11\7f158373
-Node: Q4.0.12\7f159223
-Node: Q4.1.1\7f160196
-Node: Q4.1.2\7f160599
-Node: Q4.1.3\7f160926
-Node: Q4.2.1\7f161235
-Node: Q4.2.2\7f161865
-Node: Q4.2.3\7f162105
-Node: Q4.2.4\7f162649
-Node: Q4.3.1\7f163302
-Node: Q4.3.2\7f163886
-Node: Q4.3.3\7f165602
-Node: Q4.3.4\7f165871
-Node: Q4.3.5\7f166560
-Node: Q4.4.1\7f167188
-Node: Q4.5.1\7f168695
-Node: Q4.6.1\7f169464
-Node: Q4.7.1\7f174724
-Node: Q4.7.2\7f175679
-Node: Q4.7.3\7f175976
-Node: Q4.7.4\7f176322
-Node: Q4.7.5\7f177206
-Node: Q4.7.6\7f178848
-Node: Miscellaneous\7f179397
-Node: Q5.0.1\7f182823
-Node: Q5.0.2\7f183557
-Node: Q5.0.3\7f184411
-Node: Q5.0.4\7f185113
-Node: Q5.0.5\7f186053
-Node: Q5.0.6\7f188033
-Node: Q5.0.7\7f188690
-Node: Q5.0.8\7f189295
-Node: Q5.0.9\7f189814
-Node: Q5.0.10\7f190328
-Node: Q5.0.11\7f190576
-Node: Q5.0.12\7f191137
-Node: Q5.0.13\7f192054
-Node: Q5.0.14\7f192738
-Node: Q5.0.15\7f193503
-Node: Q5.0.16\7f193804
-Node: Q5.0.17\7f194316
-Node: Q5.0.18\7f194581
-Node: Q5.0.19\7f195107
-Node: Q5.0.20\7f195532
-Node: Q5.1.1\7f196447
-Node: Q5.1.2\7f198516
-Node: Q5.1.3\7f199252
-Node: Q5.1.4\7f202646
-Node: Q5.1.5\7f203181
-Node: Q5.1.6\7f205275
-Node: Q5.1.7\7f206664
-Node: Q5.1.8\7f208265
-Node: Q5.1.9\7f208817
-Node: Q5.1.10\7f209702
-Node: Q5.1.11\7f210833
-Node: Q5.2.1\7f211379
-Node: Q5.2.2\7f211950
-Node: Q5.2.3\7f212367
-Node: Q5.2.4\7f212602
-Node: Q5.3.1\7f213512
-Node: Q5.3.2\7f214733
-Node: Q5.3.3\7f215509
-Node: Q5.3.4\7f215993
-Node: Q5.3.5\7f216660
-Node: Q5.3.6\7f217529
-Node: Q5.3.7\7f217774
-Node: Q5.3.8\7f219964
-Node: Q5.3.9\7f220211
-Node: Q5.3.10\7f221164
-Node: Q5.3.11\7f223359
-Node: Q5.3.12\7f224908
-Node: Current Events\7f226182
-Node: Q6.0.1\7f226839
-Node: Q6.0.2\7f227478
-Node: Q6.0.3\7f228552
-Node: Q6.0.4\7f228780
+Node: Top\7f195
+Node: Introduction\7f15648
+Node: Q1.0.1\7f19167
+Node: Q1.0.2\7f19703
+Node: Q1.0.3\7f20139
+Node: Q1.0.4\7f20397
+Node: Q1.0.5\7f21829
+Node: Q1.0.6\7f22518
+Node: Q1.0.7\7f23649
+Node: Q1.0.8\7f24048
+Node: Q1.0.9\7f24244
+Node: Q1.0.10\7f24522
+Node: Q1.0.11\7f25971
+Node: Q1.0.12\7f26428
+Node: Q1.0.13\7f26796
+Node: Q1.0.14\7f27031
+Node: Q1.1.1\7f27575
+Node: Q1.1.2\7f28770
+Node: Q1.1.3\7f29145
+Node: Q1.2.1\7f30096
+Node: Q1.2.2\7f31152
+Node: Q1.2.3\7f31586
+Node: Q1.3.1\7f32537
+Node: Q1.3.2\7f36455
+Node: Q1.3.3\7f37164
+Node: Q1.3.4\7f37405
+Node: Q1.3.5\7f38169
+Node: Q1.3.6\7f40584
+Node: Q1.3.7\7f42079
+Node: Q1.4.1\7f43014
+Node: Q1.4.2\7f43876
+Node: Q1.4.3\7f44217
+Node: Q1.4.4\7f44859
+Node: Q1.4.5\7f46399
+Node: Q1.4.6\7f46703
+Node: Q1.4.7\7f47711
+Node: Installation\7f48836
+Node: Q2.0.1\7f51242
+Node: Q2.0.2\7f52115
+Node: Q2.0.3\7f59318
+Node: Q2.0.4\7f60616
+Node: Q2.0.5\7f61208
+Node: Q2.0.6\7f61576
+Node: Q2.0.7\7f61957
+Node: Q2.0.8\7f62338
+Node: Q2.0.9\7f63916
+Node: Q2.0.10\7f65354
+Node: Q2.0.11\7f66198
+Node: Q2.0.12\7f67139
+Node: Q2.0.13\7f68662
+Node: Q2.0.14\7f69320
+Node: Q2.1.1\7f69888
+Node: Q2.1.2\7f72630
+Node: Q2.1.3\7f73807
+Node: Q2.1.4\7f75100
+Node: Q2.1.5\7f75899
+Node: Q2.1.6\7f76261
+Node: Q2.1.7\7f76738
+Node: Q2.1.8\7f77091
+Node: Q2.1.9\7f78607
+Node: Q2.1.10\7f79029
+Node: Q2.1.11\7f79786
+Node: Q2.1.12\7f80651
+Node: Q2.1.13\7f81606
+Node: Q2.1.14\7f82637
+Node: Q2.1.15\7f83748
+Node: Q2.1.16\7f89706
+Node: Q2.1.17\7f90384
+Node: Q2.1.18\7f90981
+Node: Q2.1.19\7f92778
+Node: Q2.1.20\7f93308
+Node: Q2.1.21\7f93690
+Node: Q2.1.22\7f93980
+Node: Q2.1.23\7f95277
+Node: Customization\7f95929
+Node: Q3.0.1\7f100816
+Node: Q3.0.2\7f101522
+Node: Q3.0.3\7f102086
+Node: Q3.0.4\7f102503
+Node: Q3.0.5\7f103336
+Node: Q3.0.6\7f104117
+Node: Q3.0.7\7f104697
+Node: Q3.0.8\7f105361
+Node: Q3.0.9\7f106207
+Node: Q3.1.1\7f106768
+Node: Q3.1.2\7f107505
+Node: Q3.1.3\7f107936
+Node: Q3.1.4\7f108521
+Node: Q3.1.5\7f109057
+Node: Q3.1.6\7f109441
+Node: Q3.1.7\7f110122
+Node: Q3.1.8\7f112346
+Node: Q3.2.1\7f112888
+Node: Q3.2.2\7f114296
+Node: Q3.2.3\7f115095
+Node: Q3.2.4\7f115697
+Node: Q3.2.5\7f116731
+Node: Q3.2.6\7f117198
+Node: Q3.3.1\7f118160
+Node: Q3.3.2\7f118553
+Node: Q3.3.3\7f119184
+Node: Q3.3.4\7f119565
+Node: Q3.3.5\7f120659
+Node: Q3.4.1\7f122153
+Node: Q3.4.2\7f122796
+Node: Q3.5.1\7f123308
+Node: Q3.5.2\7f124762
+Node: Q3.5.3\7f125180
+Node: Q3.5.4\7f126020
+Node: Q3.5.5\7f126852
+Node: Q3.5.6\7f127992
+Node: Q3.5.7\7f128982
+Node: Q3.5.8\7f130334
+Node: Q3.5.9\7f131081
+Node: Q3.5.10\7f131861
+Node: Q3.5.11\7f132497
+Node: Q3.6.1\7f133050
+Node: Q3.6.2\7f133790
+Node: Q3.6.3\7f134218
+Node: Q3.7.1\7f134718
+Node: Q3.7.2\7f135606
+Node: Q3.7.3\7f136265
+Node: Q3.7.4\7f136687
+Node: Q3.7.5\7f137030
+Node: Q3.7.6\7f137498
+Node: Q3.7.7\7f138213
+Node: Q3.7.8\7f139233
+Node: Q3.8.1\7f139652
+Node: Q3.8.2\7f140112
+Node: Q3.8.3\7f140575
+Node: Q3.8.4\7f141181
+Node: Q3.8.5\7f141900
+Node: Q3.9.1\7f142685
+Node: Q3.9.2\7f143625
+Node: Q3.9.3\7f144223
+Node: Q3.9.4\7f144885
+Node: Q3.10.1\7f145764
+Node: Q3.10.2\7f146582
+Node: Q3.10.3\7f147363
+Node: Q3.10.4\7f148091
+Node: Q3.10.5\7f148474
+Node: Subsystems\7f149484
+Node: Q4.0.1\7f151969
+Node: Q4.0.2\7f152494
+Node: Q4.0.3\7f153052
+Node: Q4.0.4\7f153373
+Node: Q4.0.5\7f153615
+Node: Q4.0.6\7f153846
+Node: Q4.0.7\7f154427
+Node: Q4.0.8\7f154752
+Node: Q4.0.9\7f155979
+Node: Q4.0.10\7f158017
+Node: Q4.0.11\7f158471
+Node: Q4.0.12\7f159321
+Node: Q4.1.1\7f160294
+Node: Q4.1.2\7f160697
+Node: Q4.1.3\7f161024
+Node: Q4.2.1\7f161333
+Node: Q4.2.2\7f161963
+Node: Q4.2.3\7f162203
+Node: Q4.2.4\7f162747
+Node: Q4.3.1\7f163400
+Node: Q4.3.2\7f163984
+Node: Q4.3.3\7f165700
+Node: Q4.3.4\7f165972
+Node: Q4.3.5\7f166649
+Node: Q4.4.1\7f167277
+Node: Q4.4.2\7f168777
+Node: Q4.5.1\7f169981
+Node: Q4.6.1\7f170750
+Node: Q4.7.1\7f176010
+Node: Q4.7.2\7f176965
+Node: Q4.7.3\7f177262
+Node: Q4.7.4\7f177608
+Node: Q4.7.5\7f178492
+Node: Q4.7.6\7f180134
+Node: Miscellaneous\7f180678
+Node: Q5.0.1\7f184102
+Node: Q5.0.2\7f184836
+Node: Q5.0.3\7f185690
+Node: Q5.0.4\7f186392
+Node: Q5.0.5\7f187331
+Node: Q5.0.6\7f189311
+Node: Q5.0.7\7f189968
+Node: Q5.0.8\7f190573
+Node: Q5.0.9\7f191092
+Node: Q5.0.10\7f191606
+Node: Q5.0.11\7f191854
+Node: Q5.0.12\7f192415
+Node: Q5.0.13\7f193332
+Node: Q5.0.14\7f194016
+Node: Q5.0.15\7f194781
+Node: Q5.0.16\7f195082
+Node: Q5.0.17\7f195594
+Node: Q5.0.18\7f195859
+Node: Q5.0.19\7f196385
+Node: Q5.0.20\7f196809
+Node: Q5.1.1\7f197724
+Node: Q5.1.2\7f199793
+Node: Q5.1.3\7f200529
+Node: Q5.1.4\7f203923
+Node: Q5.1.5\7f204458
+Node: Q5.1.6\7f206552
+Node: Q5.1.7\7f207941
+Node: Q5.1.8\7f209542
+Node: Q5.1.9\7f210094
+Node: Q5.1.10\7f210979
+Node: Q5.1.11\7f212110
+Node: Q5.2.1\7f212659
+Node: Q5.2.2\7f213230
+Node: Q5.2.3\7f213647
+Node: Q5.2.4\7f213882
+Node: Q5.3.1\7f214792
+Node: Q5.3.2\7f216013
+Node: Q5.3.3\7f216789
+Node: Q5.3.4\7f217273
+Node: Q5.3.5\7f217940
+Node: Q5.3.6\7f218809
+Node: Q5.3.7\7f219054
+Node: Q5.3.8\7f221244
+Node: Q5.3.9\7f221491
+Node: Q5.3.10\7f222444
+Node: Q5.3.11\7f224639
+Node: Q5.3.12\7f226188
+Node: Current Events\7f227462
+Node: Q6.0.1\7f228119
+Node: Q6.0.2\7f228758
+Node: Q6.0.3\7f229832
+Node: Q6.0.4\7f230060
 \1f
 End Tag Table
index 4b06ab8..4102ba3 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/xemacs-faq.info, produced by Makeinfo version
-1.68 from the input file xemacs-faq.texi.
+This is ../info/xemacs-faq.info, produced by makeinfo version 4.0 from
+xemacs-faq.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -42,7 +42,7 @@ archives.
 * Current Events::      What the Future Holds.
 
 
- -- The Detailed Node Listing --
+ --- The Detailed Node Listing ---
 
 Introduction, Policy, Credits
 
@@ -120,7 +120,7 @@ Trouble Shooting:
 * Q2.1.11::     Can't instantiate image error... in toolbar
 * Q2.1.12::     Regular Expression Problems on DEC OSF1.
 * Q2.1.13::     HP/UX 10.10 and `create_process' failure
-* Q2.1.14::     `C-g' doesn't work for me.  Is it broken?
+* Q2.1.14::     C-g doesn't work for me.  Is it broken?
 * Q2.1.15::     How to debug an XEmacs problem with a debugger.
 * Q2.1.16::     XEmacs crashes in `strcat' on HP/UX 10.
 * Q2.1.17::     `Marker does not point anywhere'.
@@ -176,9 +176,9 @@ The Keyboard:
 * Q3.5.1::      How can I bind complex functions (or macros) to keys?
 * Q3.5.2::      How can I stop down-arrow from adding empty lines to the bottom of my buffers?
 * Q3.5.3::      How do I bind C-. and C-; to scroll one line up and down?
-* Q3.5.4::      Globally binding `Delete'?
+* Q3.5.4::      Globally binding Delete?
 * Q3.5.5::      Scrolling one line at a time.
-* Q3.5.6::      How to map `Help' key alone on Sun type4 keyboard?
+* Q3.5.6::      How to map Help key alone on Sun type4 keyboard?
 * Q3.5.7::      How can you type in special characters in XEmacs?
 * Q3.5.8::      Why does `(global-set-key [delete-forward] 'delete-char)' complain?
 * Q3.5.9::      How do I make the Delete key delete forward?
@@ -198,7 +198,7 @@ The Mouse and Highlighting:
 * Q3.7.5::      Why does cut-and-paste not work between XEmacs and a cmdtool?
 * Q3.7.6::      How I can set XEmacs up so that it pastes where the text cursor is?
 * Q3.7.7::      How do I select a rectangular region?
-* Q3.7.8::      Why does `M-w' take so long?
+* Q3.7.8::      Why does M-w take so long?
 
 The Menubar and Toolbar:
 * Q3.8.1::      How do I get rid of the menu (or menubar)?
@@ -217,7 +217,7 @@ Text Selections:
 * Q3.10.1::     How can I turn off or change highlighted selections?
 * Q3.10.2::     How do I get that typing on an active region removes it?
 * Q3.10.3::     Can I turn off the highlight during isearch?
-* Q3.10.4::     How do I turn off highlighting after `C-x C-p' (mark-page)?
+* Q3.10.4::     How do I turn off highlighting after C-x C-p (mark-page)?
 * Q3.10.5::     The region disappears when I hit the end of buffer while scrolling.
 
 Major Subsystems
@@ -255,6 +255,7 @@ Other Mail & News:
 
 Sparcworks, EOS, and WorkShop:
 * Q4.4.1::      What is SPARCworks, EOS, and WorkShop
+* Q4.4.2::      How do I start the Sun Workshop support in XEmacs 21?
 
 Energize:
 * Q4.5.1::      What is/was Energize?
@@ -316,7 +317,7 @@ Miscellaneous:
 * Q5.3.1::      How do you make XEmacs indent CL if-clauses correctly?
 * Q5.3.2::      Fontifying hangs when editing a postscript file.
 * Q5.3.3::      How can I print WYSIWYG a font-locked buffer?
-* Q5.3.4::      Getting `M-x lpr' to work with postscript printer.
+* Q5.3.4::      Getting M-x lpr to work with postscript printer.
 * Q5.3.5::      How do I specify the paths that XEmacs uses for finding files?
 * Q5.3.6::      [This question intentionally left blank]
 * Q5.3.7::      Can I have the end of the buffer delimited in some way?
@@ -346,24 +347,25 @@ considering XEmacs for their own use, or has just obtained it and is
 wondering what to do next.  It is also useful as a reference to
 available resources.
 
-   The previous maintainer of the FAQ was Anthony Rossini <rossini@stat.sc.edu>, who started it, after getting tired of hearing JWZ complain
-about repeatedly having to answer questions.  Ben Wing <ben@666.com>
-and Chuck Thompson <cthomp@xemacs.org>, the principal authors of
-XEmacs, then took over and Ben did a massive update reorganizing the
-whole thing.  At which point Anthony took back over, but then had to
-give it up again.  Some of the other contributors to this FAQ are
-listed later in this document.
+   The previous maintainer of the FAQ was Anthony Rossini
+<rossini@stat.sc.edu>, who started it, after getting tired of hearing
+JWZ complain about repeatedly having to answer questions.  Ben Wing
+<ben@xemacs.org> and Chuck Thompson <cthomp@xemacs.org>, the principal
+authors of XEmacs, then took over and Ben did a massive update
+reorganizing the whole thing.  At which point Anthony took back over,
+but then had to give it up again.  Some of the other contributors to
+this FAQ are listed later in this document.
 
    The previous version was converted to hypertext format, and edited by
-Steven L. Baur <steve@altair.xemacs.org>.  It was converted back to
-texinfo by Hrvoje Niksic <hniksic@srce.hr>.
+Steven L. Baur <steve@xemacs.org>.  It was converted back to texinfo by
+Hrvoje Niksic <hniksic@xemacs.org>.
 
    The FAQ was then maintained by Andreas Kaempf <andreas@sccon.com>,
-who passed it on to Christian Nybo/ <faq@xemacs.org>, the current FAQ
+who passed it on to Christian Nyb/o <faq@xemacs.org>, the current FAQ
 maintainer.
 
    If you notice any errors or items which should be added or amended to
-this FAQ please send email to Christian Nybo/ <faq@xemacs.org>. Include
+this FAQ please send email to Christian Nyb/o <faq@xemacs.org>. Include
 `XEmacs FAQ' on the Subject: line.
 
 * Menu:
@@ -584,7 +586,8 @@ File: xemacs-faq.info,  Node: Q1.0.10,  Next: Q1.0.11,  Prev: Q1.0.9,  Up: Intro
 Q1.0.10: Is there a port of XEmacs to Microsoft ('95 or NT)?
 ------------------------------------------------------------
 
-   Thanks to efforts of many people, coordinated by David Hobley <davidh@wr.com.au> and Marc Paquette <marcpa@cam.org>, beta versions of
+   Thanks to efforts of many people, coordinated by David Hobley
+<davidh@wr.com.au> and Marc Paquette <marcpa@cam.org>, beta versions of
 XEmacs now run on 32-bit Windows platforms (NT and 95).  The current
 betas require having an X server to run XEmacs; however, a native NT/95
 port is in alpha, thanks to Jonathan Harris <jhar@tardis.ed.ac.uk>.
@@ -601,7 +604,9 @@ mail to <xemacs-nt-request@xemacs.org> to subscribe.
    Furthermore, Altrasoft is seeking corporate and government sponsors
 to help fund a fully native port of XEmacs to Windows 95 and NT using
 full-time, senior-level staff working under a professionally managed
-project structure.  See the Altrasoft web site (http://www.altrasoft.com/) for more details or contact Altrasoft directly at 1-888-ALTSOFT.
+project structure.  See the Altrasoft web site
+(http://www.altrasoft.com/) for more details or contact Altrasoft
+directly at 1-888-ALTSOFT.
 
    The closest existing port is "Win-Emacs", which is based on Lucid
 Emacs 19.6.  Available from `http://www.pearlsoft.com/'.
@@ -619,8 +624,8 @@ Q1.0.11: Is there a port of XEmacs to the Macintosh?
 but no patches have been submitted to the maintainers to get this in the
 mainstream distribution.
 
-   For the MacOS, there is a port of
-Emacs 18.59 (ftp://ftp.cs.cornell.edu/pub/parmet/).
+   For the MacOS, there is a port of Emacs 18.59
+(ftp://ftp.cs.cornell.edu/pub/parmet/).
 
 \1f
 File: xemacs-faq.info,  Node: Q1.0.12,  Next: Q1.0.13,  Prev: Q1.0.11,  Up: Introduction
@@ -671,7 +676,8 @@ purpose are defined as the 5th of the month through the 5th of the
 month.  Preexisting questions that have been changed are marked as such.
 Brand new questions are tagged.
 
-   All submissions are welcome.  E-mail submissions to Christian Nybo/ <faq@xemacs.org>.
+   All submissions are welcome.  E-mail submissions to Christian Nyb/o
+<faq@xemacs.org>.
 
    Please make sure that `XEmacs FAQ' appears on the Subject: line.  If
 you think you have a better way of answering a question, or think a
@@ -701,7 +707,7 @@ File: xemacs-faq.info,  Node: Q1.1.3,  Next: Q1.2.1,  Prev: Q1.1.2,  Up: Introdu
 Q1.1.3: How do I contribute to XEmacs itself?
 ---------------------------------------------
 
-   Ben Wing <ben@666.com> writes:
+   Ben Wing <ben@xemacs.org> writes:
 
      BTW if you have a wish list of things that you want added, you
      have to speak up about it!  More specifically, you can do the
@@ -738,9 +744,10 @@ developers responsible for the 19.16/20.x releases are:
 
    * Martin Buchholz <martin@xemacs.org>
 
-   * Steve Baur <steve@altair.xemacs.org>
+   * Steve Baur <steve@xemacs.org>
+
+   * Hrvoje Niksic <hniksic@xemacs.org>
 
-   * Hrvoje Niksic <hniksic@srce.hr>
 
    The developers responsible for the 19.14 release are:
 
@@ -749,9 +756,10 @@ developers responsible for the 19.16/20.x releases are:
      Chuck was Mr. XEmacs from 19.11 through 19.14, and is responsible
      for XEmacs becoming a widely distributed program over the Internet.
 
-   * Ben Wing <ben@666.com>
+   * Ben Wing <ben@xemacs.org>
+
 
-   * Jamie Zawinski <jwz@netscape.com>
+   * Jamie Zawinski <jwz@jwz.org>
 
      Jamie Zawinski was Mr. Lucid Emacs from 19.0 through 19.10, the
      last release actually named Lucid Emacs.  Richard Mlynarik was
@@ -773,10 +781,11 @@ this version of the FAQ (listed in alphabetical order):
 
    * SL Baur <steve@xemacs.org>
 
-   * Hrvoje Niksic <hniksic@srce.hr>
+   * Hrvoje Niksic <hniksic@xemacs.org>
 
    * Aki Vehtari <Aki.Vehtari@hut.fi>
 
+
 \1f
 File: xemacs-faq.info,  Node: Q1.2.3,  Next: Q1.3.1,  Prev: Q1.2.2,  Up: Introduction
 
@@ -834,7 +843,7 @@ in February 1998.  When compiled without MULE support, 20.4 is
 approximately as stable as 19.16, and probably faster (due to
 additional optimization work.)
 
-   As of XEmacs 20.3, version 20 is *the* supported version of XEmacs.
+   As of XEmacs 20.3, version 20 is _the_ supported version of XEmacs.
 This means that 19.16 will optionally receive stability fixes (if any),
 but that all the real development work will be done on the v20 tree.
 
@@ -879,7 +888,7 @@ for your convenience.
      characters.  If XEmacs was not compiled with MULE support, the
      range of this integer will always be 0 to 255 - eight bits, or one
      byte. (Integers outside this range are accepted but silently
-     truncated; however, you should most decidedly *not* rely on this,
+     truncated; however, you should most decidedly _not_ rely on this,
      because it will not work under XEmacs with MULE support.)  When
      MULE support is present, the range of character codes is much
      larger. (Currently, 19 bits are used.)
@@ -892,7 +901,7 @@ for your convenience.
      XEmacs.
 
      Individual characters are not often used in programs.  It is far
-     more common to work with *strings*, which are sequences composed of
+     more common to work with _strings_, which are sequences composed of
      characters.
 
 \1f
@@ -919,7 +928,7 @@ File: xemacs-faq.info,  Node: Q1.3.3,  Next: Q1.3.4,  Prev: Q1.3.2,  Up: Introdu
 Q1.3.3: How do I type non-ASCII characters?
 -------------------------------------------
 
-   See question 3.5.7 (*note Q3.5.7::.) in part 3 of this FAQ.
+   See question 3.5.7 (*note Q3.5.7::) in part 3 of this FAQ.
 
 \1f
 File: xemacs-faq.info,  Node: Q1.3.4,  Next: Q1.3.5,  Prev: Q1.3.3,  Up: Introduction
@@ -928,8 +937,8 @@ Q1.3.4: Can XEmacs messages come out in a different language?
 -------------------------------------------------------------
 
    The message-catalog support has mostly been written but doesn't
-currently work.  The first release of XEmacs 20 will *not* support it.
-However, menubar localization *does* work, even in 19.14.  To enable
+currently work.  The first release of XEmacs 20 will _not_ support it.
+However, menubar localization _does_ work, even in 19.14.  To enable
 it, add to your `Emacs' file entries like this:
 
      Emacs*XlwMenu.resourceLabels:                     True
@@ -1075,9 +1084,9 @@ directory called `sample.emacs'.  Copy this file from there to your
 home directory and rename it `.emacs'.  Then edit it to suit.
 
    Starting with 19.14, you may bring the `sample.emacs' into an XEmacs
-buffer by selecting `Help->Samples->Sample .emacs' from the menubar.
-To determine the location of the `etc' directory type the command `C-h
-v data-directory <RET>'.
+buffer by selecting `Help->Sample .emacs' from the menubar.  To
+determine the location of the `etc' directory type the command `C-h v
+data-directory <RET>'.
 
 \1f
 File: xemacs-faq.info,  Node: Q1.4.2,  Next: Q1.4.3,  Prev: Q1.4.1,  Up: Introduction
index 5f5d1e5..08629dc 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../info/xemacs-faq.info, produced by Makeinfo version
-1.68 from the input file xemacs-faq.texi.
+This is ../info/xemacs-faq.info, produced by makeinfo version 4.0 from
+xemacs-faq.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -47,7 +47,7 @@ Trouble Shooting:
 * Q2.1.11::     Can't instantiate image error... in toolbar
 * Q2.1.12::     Regular Expression Problems on DEC OSF1.
 * Q2.1.13::     HP/UX 10.10 and `create_process' failure
-* Q2.1.14::     `C-g' doesn't work for me.  Is it broken?
+* Q2.1.14::     C-g doesn't work for me.  Is it broken?
 * Q2.1.15::     How to debug an XEmacs problem with a debugger.
 * Q2.1.16::     XEmacs crashes in `strcat' on HP/UX 10.
 * Q2.1.17::     `Marker does not point anywhere'.
@@ -93,7 +93,7 @@ Q2.0.2: XEmacs is too big
    Although this entry has been written for XEmacs 19.13, most of it
 still stands true.
 
-   Steve Baur <steve@altair.xemacs.org> writes:
+   Steve Baur <steve@xemacs.org> writes:
 
      The 45MB of space required by the installation directories can be
      reduced dramatically if desired.  Gzip all the .el files.  Remove
@@ -180,15 +180,15 @@ still stands true.
 
      These are all Emacs Lisp source code and bytecompiled object code.
      You may safely gzip everything named *.el here.  You may remove
-     any package you don't use.  *Nothing bad will happen if you delete
-     a package that you do not use*.  You must be sure you do not use
+     any package you don't use.  _Nothing bad will happen if you delete
+     a package that you do not use_.  You must be sure you do not use
      it though, so be conservative at first.
 
      Possible candidates for deletion include w3 (newer versions exist,
      or you may just use Lynx or Netscape for web browsing), games,
      hyperbole, mh-e, hm-html-menus (better packages exist), vm, viper,
-     oobr, gnus (new versions exist), etc.  Ask yourself, *Do I ever
-     want to use this package?*  If the answer is no, then it is a
+     oobr, gnus (new versions exist), etc.  Ask yourself, _Do I ever
+     want to use this package?_  If the answer is no, then it is a
      candidate for removal.
 
      First, gzip all the .el files.  Then go about package by package
@@ -295,7 +295,7 @@ libc 5.2.18, XEmacs 20.0b20 is unable to open a tty device:
      Initialization error:
      Terminal type `xterm' undefined (or can't access database?)
 
-   Ben Wing <ben@666.com> writes:
+   Ben Wing <ben@xemacs.org> writes:
 
      Your ncurses configuration is messed up.  Your /usr/lib/terminfo
      is a bad pointer, perhaps to a CD-ROM that is not inserted.
@@ -351,14 +351,14 @@ ELF libraries are out of date.  You have the following options:
   3. Rebuild XEmacs yourself - any working ELF version of libc should be
      O.K.
 
-   Hrvoje Niksic <hniksic@srce.hr> writes:
+   Hrvoje Niksic <hniksic@xemacs.org> writes:
 
      Why not use a Perl one-liner for No. 2?
 
           perl -pi -e 's/_h_errno\0/h_errno\0\0/g' \
           /usr/local/bin/xemacs-19.14
 
-     NB: You *must* patch `/usr/local/bin/xemacs-19.14', and not
+     NB: You _must_ patch `/usr/local/bin/xemacs-19.14', and not
      `xemacs' because `xemacs' is a link to `xemacs-19.14'; the Perl
      `-i' option will cause unwanted side-effects if applied to a
      symbolic link.
@@ -409,8 +409,8 @@ PNG
 Compface
      `ftp://ftp.cs.indiana.edu/pub/faces/compface/'.  This library has
      been frozen for about 6 years, and is distributed without version
-     numbers.  *It should be compiled with the same options that X11 was
-     compiled with on your system*.  The version of this library at
+     numbers.  _It should be compiled with the same options that X11 was
+     compiled with on your system_.  The version of this library at
      XEmacs.org includes the `xbm2xface.pl' script, written by
      <stig@hackvan.com>, which may be useful when generating your own
      xface.
@@ -889,7 +889,7 @@ File: xemacs-faq.info,  Node: Q2.1.14,  Next: Q2.1.15,  Prev: Q2.1.13,  Up: Inst
 Q2.1.14: `C-g' doesn't work for me.  Is it broken?
 --------------------------------------------------
 
-   Ben Wing <ben@666.com> writes:
+   Ben Wing <ben@xemacs.org> writes:
 
      `C-g' does work for most people in most circumstances.  If it
      doesn't, there are only two explanations:
@@ -905,7 +905,7 @@ Q2.1.14: `C-g' doesn't work for me.  Is it broken?
 
    Morten Welinder <terra@diku.dk> writes:
 
-     On some (but *not* all) machines a hung XEmacs can be revived by
+     On some (but _not_ all) machines a hung XEmacs can be revived by
      `kill -FPE <pid>'.  This is a hack, of course, not a solution.
      This technique works on a Sun4 running 4.1.3_U1.  To see if it
      works for you, start another XEmacs and test with that first.  If
@@ -1033,6 +1033,7 @@ debugger.  Here are some hints:
      `gdbinit' files provided in the `src' directory.  Use the one
      corresponding to the configure options used when building XEmacs.
 
+
 \1f
 File: xemacs-faq.info,  Node: Q2.1.16,  Next: Q2.1.17,  Prev: Q2.1.15,  Up: Installation
 
@@ -1100,12 +1101,12 @@ Q2.1.18: 19.14 hangs on HP/UX 10.10.
      Apparently somebody has found the reason why there is this `poll:
      interrupted...' message for each event.  For some reason, libcurses
      reimplements a `select()' system call, in a highly broken fashion.
-     The fix is to add a -lc to the link line *before* the -lxcurses.
+     The fix is to add a -lc to the link line _before_ the -lxcurses.
      XEmacs will then use the right version of `select()'.
 
    Alain Fauconnet <af@biomath.jussieu.fr> writes:
 
-     The *real* solution is to *not* link -lcurses in!  I just changed
+     The _real_ solution is to _not_ link -lcurses in!  I just changed
      -lcurses to -ltermcap in the Makefile and it fixed:
 
        1. The `poll: interrupted system call' message.
@@ -1113,7 +1114,7 @@ Q2.1.18: 19.14 hangs on HP/UX 10.10.
        2. A more serious problem I had discovered in the meantime, that
           is the fact that subprocess handling was seriously broken:
           subprocesses e.g. started by AUC TeX for TeX compilation of a
-          buffer would *hang*.  Actually they would wait forever for
+          buffer would _hang_.  Actually they would wait forever for
           emacs to read the socket which connects stdout...
 
 \1f
index bb32bf7..5854c42 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/xemacs.info, produced by Makeinfo version
-1.68 from the input file xemacs.texi.
+This is ../info/xemacs.info, produced by makeinfo version 4.0 from
+xemacs/xemacs.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -31,367 +31,368 @@ translation approved by the author instead of in the original English.
 
 \1f
 Indirect:
-xemacs.info-1: 1372
-xemacs.info-2: 47958
-xemacs.info-3: 95918
-xemacs.info-4: 144030
-xemacs.info-5: 192248
-xemacs.info-6: 241615
-xemacs.info-7: 290442
-xemacs.info-8: 339995
-xemacs.info-9: 385290
-xemacs.info-10: 433122
-xemacs.info-11: 482303
-xemacs.info-12: 528200
-xemacs.info-13: 577026
-xemacs.info-14: 625173
-xemacs.info-15: 673936
-xemacs.info-16: 723464
-xemacs.info-17: 772031
-xemacs.info-18: 815954
-xemacs.info-19: 857130
-xemacs.info-20: 905126
-xemacs.info-21: 945846
+xemacs.info-1: 1350
+xemacs.info-2: 47938
+xemacs.info-3: 95895
+xemacs.info-4: 143994
+xemacs.info-5: 192193
+xemacs.info-6: 241558
+xemacs.info-7: 290374
+xemacs.info-8: 339917
+xemacs.info-9: 385196
+xemacs.info-10: 433020
+xemacs.info-11: 482190
+xemacs.info-12: 531339
+xemacs.info-13: 580163
+xemacs.info-14: 628304
+xemacs.info-15: 677058
+xemacs.info-16: 726583
+xemacs.info-17: 775144
+xemacs.info-18: 819062
+xemacs.info-19: 860225
+xemacs.info-20: 908221
+xemacs.info-21: 948941
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f1372
-Node: License\7f22524
-Node: Distrib\7f35806
-Node: Intro\7f37470
-Node: Frame\7f40341
-Node: Point\7f43613
-Node: Echo Area\7f45580
-Node: Mode Line\7f47958
-Node: XEmacs under X\7f52389
-Node: Keystrokes\7f55567
-Node: Intro to Keystrokes\7f56411
-Node: Representing Keystrokes\7f58514
-Node: Key Sequences\7f59871
-Node: String Key Sequences\7f63211
-Node: Meta Key\7f63594
-Node: Super and Hyper Keys\7f65067
-Node: Character Representation\7f71291
-Node: Commands\7f72311
-Node: Pull-down Menus\7f75160
-Node: File Menu\7f78509
-Node: Edit Menu\7f82331
-Node: Apps Menu\7f84716
-Node: Options Menu\7f85206
-Node: Buffers Menu\7f89186
-Node: Tools Menu\7f89493
-Node: Help Menu\7f89984
-Node: Menu Customization\7f90385
-Node: Entering Emacs\7f94615
-Node: Exiting\7f95918
-Node: Command Switches\7f99010
-Node: Startup Paths\7f108199
-Node: Basic\7f115775
-Node: Blank Lines\7f125258
-Node: Continuation Lines\7f126684
-Node: Position Info\7f128118
-Node: Arguments\7f131252
-Node: Undo\7f134389
-Node: Minibuffer\7f137336
-Node: Minibuffer File\7f139820
-Node: Minibuffer Edit\7f141457
-Node: Completion\7f144030
-Node: Repetition\7f150905
-Node: M-x\7f153697
-Node: Help\7f158791
-Node: Mark\7f168713
-Node: Setting Mark\7f170567
-Node: Using Region\7f173689
-Node: Marking Objects\7f174434
-Node: Mark Ring\7f176275
-Node: Mouse Selection\7f177991
-Node: Additional Mouse Operations\7f179999
-Node: Killing\7f184203
-Node: Yanking\7f189843
-Node: Kill Ring\7f190646
-Node: Appending Kills\7f192248
-Node: Earlier Kills\7f194285
-Node: Using X Selections\7f196898
-Node: X Clipboard Selection\7f198148
-Node: X Selection Commands\7f200325
-Node: X Cut Buffers\7f201411
-Node: Active Regions\7f202770
-Node: Accumulating Text\7f207350
-Node: Rectangles\7f210423
-Node: Registers\7f213942
-Node: RegPos\7f214977
-Node: RegText\7f215880
-Node: RegRect\7f216964
-Node: Display\7f217704
-Node: Scrolling\7f219199
-Node: Horizontal Scrolling\7f223342
-Node: Selective Display\7f224538
-Node: Display Vars\7f225757
-Node: Search\7f228435
-Node: Incremental Search\7f229628
-Node: Non-Incremental Search\7f238555
-Node: Word Search\7f239997
-Node: Regexp Search\7f241615
-Node: Regexps\7f243151
-Node: Search Case\7f253452
-Node: Replace\7f254233
-Node: Unconditional Replace\7f255181
-Node: Regexp Replace\7f256317
-Node: Replacement and Case\7f257252
-Node: Query Replace\7f258232
-Node: Other Repeating Search\7f261465
-Node: Fixit\7f262720
-Node: Kill Errors\7f263300
-Node: Transpose\7f264633
-Node: Fixing Case\7f267038
-Node: Spelling\7f267684
-Node: Files\7f269145
-Node: File Names\7f270453
-Node: Visiting\7f274791
-Node: Saving\7f281481
-Node: Backup\7f286404
-Node: Backup Names\7f287800
-Node: Backup Deletion\7f289283
-Node: Backup Copying\7f290442
-Node: Interlocking\7f292149
-Node: Reverting\7f296277
-Node: Auto Save\7f298190
-Node: Auto Save Files\7f299157
-Node: Auto Save Control\7f300998
-Node: Recover\7f302837
-Node: Version Control\7f303992
-Node: Concepts of VC\7f306030
-Node: Editing with VC\7f307640
-Node: Variables for Check-in/out\7f312896
-Node: Log Entries\7f314795
-Node: Change Logs and VC\7f315975
-Node: Old Versions\7f319243
-Node: VC Status\7f321247
-Node: Renaming and VC\7f322961
-Node: Snapshots\7f323642
-Node: Making Snapshots\7f324143
-Node: Snapshot Caveats\7f325437
-Node: Version Headers\7f327246
-Node: ListDir\7f329945
-Node: Comparing Files\7f331994
-Node: Dired\7f333527
-Node: Dired Enter\7f334198
-Node: Dired Edit\7f335023
-Node: Dired Deletion\7f336770
-Node: Dired Immed\7f339995
-Node: Misc File Ops\7f341271
-Node: Buffers\7f343760
-Node: Select Buffer\7f345920
-Node: List Buffers\7f347717
-Node: Misc Buffer\7f349463
-Node: Kill Buffer\7f351107
-Node: Several Buffers\7f352237
-Node: Windows\7f356103
-Node: Basic Window\7f356814
-Node: Split Window\7f358533
-Node: Other Window\7f360666
-Node: Pop Up Window\7f363096
-Node: Change Window\7f364603
-Node: Mule\7f367511
-Node: Mule Intro\7f368774
-Node: Language Environments\7f369790
-Node: Input Methods\7f371898
-Node: Select Input Method\7f375618
-Node: Coding Systems\7f377773
-Node: Recognize Coding\7f381961
-Node: Specify Coding\7f385290
-Node: Major Modes\7f390221
-Node: Choosing Modes\7f392443
-Node: Indentation\7f394833
-Node: Indentation Commands\7f396928
-Node: Tab Stops\7f399657
-Node: Just Spaces\7f401506
-Node: Text\7f402321
-Node: Text Mode\7f404304
-Node: Nroff Mode\7f406385
-Node: TeX Mode\7f408029
-Node: TeX Editing\7f410281
-Node: TeX Print\7f413716
-Node: Outline Mode\7f416936
-Node: Outline Format\7f418417
-Node: Outline Motion\7f421217
-Node: Outline Visibility\7f422770
-Node: Words\7f425691
-Node: Sentences\7f428638
-Node: Paragraphs\7f430834
-Node: Pages\7f433122
-Node: Filling\7f435722
-Node: Auto Fill\7f436293
-Node: Fill Commands\7f438441
-Node: Fill Prefix\7f440607
-Node: Case\7f442795
-Node: Programs\7f444823
-Node: Program Modes\7f447381
-Node: Lists\7f449613
-Node: Defuns\7f455453
-Node: Grinding\7f458106
-Node: Basic Indent\7f458734
-Node: Multi-line Indent\7f460755
-Node: Lisp Indent\7f462371
-Node: C Indent\7f465821
-Node: Matching\7f471061
-Node: Comments\7f472583
-Node: Balanced Editing\7f479035
-Node: Lisp Completion\7f480049
-Node: Documentation\7f481064
-Node: Change Log\7f482303
-Node: Tags\7f484881
-Node: Tag Syntax\7f486458
-Node: Create Tags Table\7f489832
-Node: Select Tags Table\7f495930
-Node: Find Tag\7f499672
-Node: Tags Search\7f502636
-Node: List Tags\7f506093
-Node: Fortran\7f507122
-Node: Fortran Motion\7f508198
-Node: Fortran Indent\7f509018
-Node: ForIndent Commands\7f509703
-Node: ForIndent Num\7f510848
-Node: ForIndent Conv\7f512122
-Node: ForIndent Vars\7f512898
-Node: Fortran Comments\7f514066
-Node: Fortran Columns\7f517665
-Node: Fortran Abbrev\7f519088
-Node: Asm Mode\7f519998
-Node: Running\7f520550
-Node: Compilation\7f521520
-Node: Lisp Modes\7f526371
-Node: Lisp Libraries\7f527645
-Node: Loading\7f528200
-Node: Compiling Libraries\7f532660
-Node: Mocklisp\7f535551
-Node: Lisp Eval\7f536228
-Node: Lisp Debug\7f539868
-Node: Lisp Interaction\7f545294
-Node: External Lisp\7f546649
-Node: Packages\7f548724
-Node: Package Terminology\7f549465
-Node: Using Packages\7f550823
-Node: Building Packages\7f559612
-Node: Abbrevs\7f562134
-Node: Defining Abbrevs\7f564334
-Node: Expanding Abbrevs\7f566781
-Node: Editing Abbrevs\7f569483
-Node: Saving Abbrevs\7f571351
-Node: Dynamic Abbrevs\7f573291
-Node: Picture\7f574593
-Node: Basic Picture\7f577026
-Node: Insert in Picture\7f579313
-Node: Tabs in Picture\7f580735
-Node: Rectangles in Picture\7f582256
-Node: Sending Mail\7f584165
-Node: Mail Format\7f585876
-Node: Mail Headers\7f587226
-Node: Mail Mode\7f593636
-Node: Reading Mail\7f597249
-Node: Calendar/Diary\7f598824
-Node: Calendar Motion\7f600496
-Node: Calendar Unit Motion\7f601379
-Node: Move to Beginning or End\7f603702
-Node: Specified Dates\7f604835
-Node: Scroll Calendar\7f605724
-Node: Mark and Region\7f607515
-Node: General Calendar\7f609422
-Node: LaTeX Calendar\7f611030
-Node: Holidays\7f613044
-Node: Sunrise/Sunset\7f616147
-Node: Lunar Phases\7f619190
-Node: Other Calendars\7f620575
-Node: Calendar Systems\7f622062
-Node: To Other Calendar\7f625173
-Node: From Other Calendar\7f627164
-Node: Mayan Calendar\7f629470
-Node: Diary\7f632666
-Node: Diary Commands\7f634416
-Node: Format of Diary File\7f637725
-Node: Date Formats\7f640595
-Node: Adding to Diary\7f643169
-Node: Special Diary Entries\7f644800
-Node: Calendar Customization\7f650140
-Node: Calendar Customizing\7f651002
-Node: Holiday Customizing\7f654222
-Node: Date Display Format\7f660690
-Node: Time Display Format\7f661648
-Node: Daylight Savings\7f662786
-Node: Diary Customizing\7f665974
-Node: Hebrew/Islamic Entries\7f670596
-Node: Fancy Diary Display\7f673936
-Node: Included Diary Files\7f675833
-Node: Sexp Diary Entries\7f676814
-Node: Appt Customizing\7f681904
-Node: Sorting\7f682950
-Node: Shell\7f687756
-Node: Single Shell\7f689049
-Node: Interactive Shell\7f690648
-Node: Shell Mode\7f694413
-Node: Terminal emulator\7f696904
-Node: Term Mode\7f699214
-Node: Paging in Term\7f700128
-Node: Narrowing\7f700926
-Node: Hardcopy\7f702876
-Node: Recursive Edit\7f703848
-Node: Dissociated Press\7f706835
-Node: CONX\7f709398
-Node: Amusements\7f710422
-Node: Emulation\7f710902
-Node: Customization\7f712746
-Node: Minor Modes\7f714470
-Node: Variables\7f716102
-Node: Examining\7f718060
-Node: Easy Customization\7f719521
-Node: Customization Groups\7f720535
-Node: Changing an Option\7f723464
-Node: Face Customization\7f729720
-Node: Specific Customization\7f731485
-Node: Edit Options\7f734092
-Node: Locals\7f735676
-Node: File Variables\7f738855
-Node: Keyboard Macros\7f743382
-Node: Basic Kbd Macro\7f745553
-Node: Save Kbd Macro\7f747485
-Node: Kbd Macro Query\7f749157
-Node: Key Bindings\7f751099
-Node: Keymaps\7f751973
-Node: Rebinding\7f755823
-Node: Interactive Rebinding\7f756519
-Node: Programmatic Rebinding\7f758711
-Node: Key Bindings Using Strings\7f761518
-Node: Disabling\7f763124
-Node: Syntax\7f764896
-Node: Syntax Entry\7f765777
-Node: Syntax Change\7f769861
-Node: Init File\7f772031
-Node: Init Syntax\7f773539
-Node: Init Examples\7f775892
-Node: Terminal Init\7f780083
-Node: Audible Bell\7f781793
-Node: Faces\7f785224
-Node: X Resources\7f790061
-Node: Geometry Resources\7f791682
-Node: Iconic Resources\7f794130
-Node: Resource List\7f794602
-Node: Face Resources\7f801109
-Node: Widgets\7f804786
-Node: Menubar Resources\7f805725
-Node: Quitting\7f806658
-Node: Lossage\7f809637
-Node: Stuck Recursive\7f810280
-Node: Screen Garbled\7f810986
-Node: Text Garbled\7f812120
-Node: Unasked-for Search\7f812759
-Node: Emergency Escape\7f813544
-Node: Total Frustration\7f815323
-Node: Bugs\7f815954
-Node: Glossary\7f825489
-Node: Manifesto\7f857130
-Node: Key Index\7f880606
-Node: Command Index\7f905126
-Node: Variable Index\7f945846
-Node: Concept Index\7f961797
+Node: Top\7f1350
+Node: License\7f22509
+Node: Distrib\7f35791
+Node: Intro\7f37455
+Node: Frame\7f40326
+Node: Point\7f43594
+Node: Echo Area\7f45561
+Node: Mode Line\7f47938
+Node: XEmacs under X\7f52369
+Node: Keystrokes\7f55546
+Node: Intro to Keystrokes\7f56390
+Node: Representing Keystrokes\7f58493
+Node: Key Sequences\7f59850
+Node: String Key Sequences\7f63190
+Node: Meta Key\7f63573
+Node: Super and Hyper Keys\7f65046
+Node: Character Representation\7f71270
+Node: Commands\7f72290
+Node: Pull-down Menus\7f75139
+Node: File Menu\7f78488
+Node: Edit Menu\7f82310
+Node: Apps Menu\7f84693
+Node: Options Menu\7f85183
+Node: Buffers Menu\7f89163
+Node: Tools Menu\7f89470
+Node: Help Menu\7f89961
+Node: Menu Customization\7f90362
+Node: Entering Emacs\7f94592
+Node: Exiting\7f95895
+Node: Command Switches\7f98986
+Node: Startup Paths\7f108173
+Node: Basic\7f115748
+Node: Blank Lines\7f125226
+Node: Continuation Lines\7f126652
+Node: Position Info\7f128084
+Node: Arguments\7f131217
+Node: Undo\7f134354
+Node: Minibuffer\7f137301
+Node: Minibuffer File\7f139785
+Node: Minibuffer Edit\7f141421
+Node: Completion\7f143994
+Node: Repetition\7f150869
+Node: M-x\7f153661
+Node: Help\7f158755
+Node: Mark\7f168674
+Node: Setting Mark\7f170528
+Node: Using Region\7f173650
+Node: Marking Objects\7f174387
+Node: Mark Ring\7f176225
+Node: Mouse Selection\7f177941
+Node: Additional Mouse Operations\7f179948
+Node: Killing\7f184152
+Node: Yanking\7f189788
+Node: Kill Ring\7f190591
+Node: Appending Kills\7f192193
+Node: Earlier Kills\7f194230
+Node: Using X Selections\7f196843
+Node: X Clipboard Selection\7f198093
+Node: X Selection Commands\7f200270
+Node: X Cut Buffers\7f201356
+Node: Active Regions\7f202715
+Node: Accumulating Text\7f207295
+Node: Rectangles\7f210368
+Node: Registers\7f213887
+Node: RegPos\7f214921
+Node: RegText\7f215824
+Node: RegRect\7f216908
+Node: Display\7f217648
+Node: Scrolling\7f219143
+Node: Horizontal Scrolling\7f223286
+Node: Selective Display\7f224481
+Node: Display Vars\7f225700
+Node: Search\7f228378
+Node: Incremental Search\7f229571
+Node: Non-Incremental Search\7f238498
+Node: Word Search\7f239940
+Node: Regexp Search\7f241558
+Node: Regexps\7f243094
+Node: Search Case\7f253395
+Node: Replace\7f254176
+Node: Unconditional Replace\7f255124
+Node: Regexp Replace\7f256259
+Node: Replacement and Case\7f257194
+Node: Query Replace\7f258174
+Node: Other Repeating Search\7f261401
+Node: Fixit\7f262656
+Node: Kill Errors\7f263236
+Node: Transpose\7f264569
+Node: Fixing Case\7f266973
+Node: Spelling\7f267619
+Node: Files\7f269080
+Node: File Names\7f270390
+Node: Visiting\7f274727
+Node: Saving\7f281413
+Node: Backup\7f286336
+Node: Backup Names\7f287732
+Node: Backup Deletion\7f289215
+Node: Backup Copying\7f290374
+Node: Interlocking\7f292080
+Node: Reverting\7f296208
+Node: Auto Save\7f298120
+Node: Auto Save Files\7f299087
+Node: Auto Save Control\7f300928
+Node: Recover\7f302766
+Node: Version Control\7f303921
+Node: Concepts of VC\7f305959
+Node: Editing with VC\7f307569
+Node: Variables for Check-in/out\7f312825
+Node: Log Entries\7f314724
+Node: Change Logs and VC\7f315904
+Node: Old Versions\7f319171
+Node: VC Status\7f321174
+Node: Renaming and VC\7f322888
+Node: Snapshots\7f323567
+Node: Making Snapshots\7f324068
+Node: Snapshot Caveats\7f325361
+Node: Version Headers\7f327170
+Node: ListDir\7f329869
+Node: Comparing Files\7f331918
+Node: Dired\7f333451
+Node: Dired Enter\7f334122
+Node: Dired Edit\7f334947
+Node: Dired Deletion\7f336694
+Node: Dired Immed\7f339917
+Node: Misc File Ops\7f341193
+Node: Buffers\7f343681
+Node: Select Buffer\7f345839
+Node: List Buffers\7f347634
+Node: Misc Buffer\7f349379
+Node: Kill Buffer\7f351022
+Node: Several Buffers\7f352152
+Node: Windows\7f356018
+Node: Basic Window\7f356729
+Node: Split Window\7f358448
+Node: Other Window\7f360581
+Node: Pop Up Window\7f363010
+Node: Change Window\7f364515
+Node: Mule\7f367423
+Node: Mule Intro\7f368686
+Node: Language Environments\7f369702
+Node: Input Methods\7f371809
+Node: Select Input Method\7f375529
+Node: Coding Systems\7f377684
+Node: Recognize Coding\7f381870
+Node: Specify Coding\7f385196
+Node: Major Modes\7f390127
+Node: Choosing Modes\7f392346
+Node: Indentation\7f394736
+Node: Indentation Commands\7f396831
+Node: Tab Stops\7f399560
+Node: Just Spaces\7f401409
+Node: Text\7f402224
+Node: Text Mode\7f404207
+Node: Nroff Mode\7f406286
+Node: TeX Mode\7f407929
+Node: TeX Editing\7f410181
+Node: TeX Print\7f413615
+Node: Outline Mode\7f416834
+Node: Outline Format\7f418315
+Node: Outline Motion\7f421115
+Node: Outline Visibility\7f422668
+Node: Words\7f425589
+Node: Sentences\7f428536
+Node: Paragraphs\7f430732
+Node: Pages\7f433020
+Node: Filling\7f435620
+Node: Auto Fill\7f436191
+Node: Fill Commands\7f438338
+Node: Fill Prefix\7f440503
+Node: Case\7f442691
+Node: Programs\7f444719
+Node: Program Modes\7f447268
+Node: Lists\7f449500
+Node: Defuns\7f455340
+Node: Grinding\7f457993
+Node: Basic Indent\7f458621
+Node: Multi-line Indent\7f460642
+Node: Lisp Indent\7f462258
+Node: C Indent\7f465708
+Node: Matching\7f470948
+Node: Comments\7f472470
+Node: Balanced Editing\7f478922
+Node: Lisp Completion\7f479936
+Node: Documentation\7f480951
+Node: Change Log\7f482190
+Node: Tags\7f484768
+Node: Tag Syntax\7f486417
+Node: Create Tags Table\7f490361
+Node: Etags Regexps\7f494421
+Node: Select Tags Table\7f499079
+Node: Find Tag\7f502817
+Node: Tags Search\7f505781
+Node: List Tags\7f509237
+Node: Fortran\7f510266
+Node: Fortran Motion\7f511342
+Node: Fortran Indent\7f512162
+Node: ForIndent Commands\7f512847
+Node: ForIndent Num\7f513992
+Node: ForIndent Conv\7f515266
+Node: ForIndent Vars\7f516042
+Node: Fortran Comments\7f517210
+Node: Fortran Columns\7f520808
+Node: Fortran Abbrev\7f522231
+Node: Asm Mode\7f523140
+Node: Running\7f523692
+Node: Compilation\7f524662
+Node: Lisp Modes\7f529512
+Node: Lisp Libraries\7f530785
+Node: Loading\7f531339
+Node: Compiling Libraries\7f535799
+Node: Mocklisp\7f538690
+Node: Lisp Eval\7f539367
+Node: Lisp Debug\7f543007
+Node: Lisp Interaction\7f548432
+Node: External Lisp\7f549787
+Node: Packages\7f551861
+Node: Package Terminology\7f552602
+Node: Using Packages\7f553960
+Node: Building Packages\7f562749
+Node: Abbrevs\7f565271
+Node: Defining Abbrevs\7f567471
+Node: Expanding Abbrevs\7f569918
+Node: Editing Abbrevs\7f572620
+Node: Saving Abbrevs\7f574488
+Node: Dynamic Abbrevs\7f576428
+Node: Picture\7f577730
+Node: Basic Picture\7f580163
+Node: Insert in Picture\7f582448
+Node: Tabs in Picture\7f583870
+Node: Rectangles in Picture\7f585391
+Node: Sending Mail\7f587299
+Node: Mail Format\7f589010
+Node: Mail Headers\7f590360
+Node: Mail Mode\7f596770
+Node: Reading Mail\7f600383
+Node: Calendar/Diary\7f601958
+Node: Calendar Motion\7f603630
+Node: Calendar Unit Motion\7f604513
+Node: Move to Beginning or End\7f606836
+Node: Specified Dates\7f607969
+Node: Scroll Calendar\7f608857
+Node: Mark and Region\7f610648
+Node: General Calendar\7f612554
+Node: LaTeX Calendar\7f614162
+Node: Holidays\7f616176
+Node: Sunrise/Sunset\7f619278
+Node: Lunar Phases\7f622321
+Node: Other Calendars\7f623706
+Node: Calendar Systems\7f625193
+Node: To Other Calendar\7f628304
+Node: From Other Calendar\7f630295
+Node: Mayan Calendar\7f632600
+Node: Diary\7f635795
+Node: Diary Commands\7f637544
+Node: Format of Diary File\7f640850
+Node: Date Formats\7f643720
+Node: Adding to Diary\7f646294
+Node: Special Diary Entries\7f647925
+Node: Calendar Customization\7f653264
+Node: Calendar Customizing\7f654126
+Node: Holiday Customizing\7f657345
+Node: Date Display Format\7f663813
+Node: Time Display Format\7f664771
+Node: Daylight Savings\7f665909
+Node: Diary Customizing\7f669097
+Node: Hebrew/Islamic Entries\7f673718
+Node: Fancy Diary Display\7f677058
+Node: Included Diary Files\7f678955
+Node: Sexp Diary Entries\7f679936
+Node: Appt Customizing\7f685026
+Node: Sorting\7f686072
+Node: Shell\7f690878
+Node: Single Shell\7f692171
+Node: Interactive Shell\7f693770
+Node: Shell Mode\7f697535
+Node: Terminal emulator\7f700026
+Node: Term Mode\7f702335
+Node: Paging in Term\7f703249
+Node: Narrowing\7f704047
+Node: Hardcopy\7f705997
+Node: Recursive Edit\7f706969
+Node: Dissociated Press\7f709956
+Node: CONX\7f712519
+Node: Amusements\7f713543
+Node: Emulation\7f714023
+Node: Customization\7f715867
+Node: Minor Modes\7f717591
+Node: Variables\7f719223
+Node: Examining\7f721179
+Node: Easy Customization\7f722640
+Node: Customization Groups\7f723654
+Node: Changing an Option\7f726583
+Node: Face Customization\7f732839
+Node: Specific Customization\7f734603
+Node: Edit Options\7f737210
+Node: Locals\7f738794
+Node: File Variables\7f741973
+Node: Keyboard Macros\7f746499
+Node: Basic Kbd Macro\7f748670
+Node: Save Kbd Macro\7f750602
+Node: Kbd Macro Query\7f752271
+Node: Key Bindings\7f754213
+Node: Keymaps\7f755087
+Node: Rebinding\7f758937
+Node: Interactive Rebinding\7f759633
+Node: Programmatic Rebinding\7f761825
+Node: Key Bindings Using Strings\7f764632
+Node: Disabling\7f766238
+Node: Syntax\7f768010
+Node: Syntax Entry\7f768891
+Node: Syntax Change\7f772975
+Node: Init File\7f775144
+Node: Init Syntax\7f776649
+Node: Init Examples\7f779001
+Node: Terminal Init\7f783191
+Node: Audible Bell\7f784901
+Node: Faces\7f788332
+Node: X Resources\7f793169
+Node: Geometry Resources\7f794790
+Node: Iconic Resources\7f797238
+Node: Resource List\7f797710
+Node: Face Resources\7f804217
+Node: Widgets\7f807894
+Node: Menubar Resources\7f808833
+Node: Quitting\7f809766
+Node: Lossage\7f812744
+Node: Stuck Recursive\7f813388
+Node: Screen Garbled\7f814094
+Node: Text Garbled\7f815228
+Node: Unasked-for Search\7f815867
+Node: Emergency Escape\7f816652
+Node: Total Frustration\7f818431
+Node: Bugs\7f819062
+Node: Glossary\7f828596
+Node: Manifesto\7f860225
+Node: Key Index\7f883701
+Node: Command Index\7f908221
+Node: Variable Index\7f948941
+Node: Concept Index\7f964892
 \1f
 End Tag Table
index e3b1285..0055d09 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/xemacs.info, produced by Makeinfo version
-1.68 from the input file xemacs.texi.
+This is ../info/xemacs.info, produced by makeinfo version 4.0 from
+xemacs/xemacs.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -79,7 +79,7 @@ Fundamental Editing Commands
 * Help::        Commands for asking XEmacs about its commands.
 
 Important Text-Changing Commands
-* Mark::        The mark: how to delimit a "region" of text.
+* Mark::        The mark: how to delimit a ``region'' of text.
 * Mouse Selection::
                 Selecting text with the mouse.
 * Additional Mouse Operations::
@@ -139,7 +139,7 @@ Recovery from Problems.
 Here are some other nodes which are really inferiors of the ones
 already listed, mentioned here so you can get to them in one step:
 
- -- The Detailed Node Listing --
+ --- The Detailed Node Listing ---
 
 The Organization of the Frame
 
@@ -257,7 +257,7 @@ File Handling
 * Version Control::  Version control systems (RCS and SCCS).
 * ListDir::          Listing the contents of a file directory.
 * Comparing Files::  Finding where two files differ.
-* Dired::            "Editing" a directory to delete, rename, etc.
+* Dired::            ``Editing'' a directory to delete, rename, etc.
                      the files in it.
 * Misc File Ops::    Other things you can do on files.
 
@@ -534,7 +534,7 @@ Dealing with XEmacs Trouble
 * Screen Garbled::     Garbage on the screen.
 * Text Garbled::       Garbage in the text.
 * Unasked-for Search:: Spontaneous entry to incremental search.
-* Emergency Escape::   Emergency escape--
+* Emergency Escape::   Emergency escape---
                         What to do if XEmacs stops responding.
 * Total Frustration::  When you are at your wits' end.
 
@@ -880,9 +880,9 @@ commands relevant to a topic.  *Note Help::.
    "Customizable" means you can change the definitions of XEmacs
 commands.  For example, if you use a programming language in which
 comments start with `<**' and end with `**>', you can tell the XEmacs
-comment manipulation commands to use those strings (*note Comments::.).
-Another sort of customization is rearrangement of the command set.
-For example, you can set up the four basic cursor motion commands (up,
+comment manipulation commands to use those strings (*note Comments::).
+Another sort of customization is rearrangement of the command set.  For
+example, you can set up the four basic cursor motion commands (up,
 down, left and right) on keys in a diamond pattern on the keyboard if
 you prefer.  *Note Customization::.
 
@@ -927,24 +927,24 @@ Window
      look at two buffers a the same time.
 
    * Below each text window's last line is a "mode line" (*note Mode
-     Line::.), which describes what is going on in that window.  The
+     Line::), which describes what is going on in that window.  The
      mode line is in inverse video if the terminal supports that.  If
      there are several XEmacs windows in one frame, each window has its
      own mode line.
 
    * At the bottom of each XEmacs frame is the "echo area" or
-     "minibuffer window"(*note Echo Area::.).  It is used by XEmacs to
+     "minibuffer window"(*note Echo Area::).  It is used by XEmacs to
      exchange information with the user.  There is only one echo area
      per XEmacs frame.
 
    * If you are running XEmacs under the X Window System, a menu bar at
      the top of the frame makes shortcuts to several of the commands
-     available (*note Pull-down Menus::.).
+     available (*note Pull-down Menus::).
 
    You can subdivide the XEmacs frame into multiple text windows, and
-use each window for a different file (*note Windows::.).  Multiple
-XEmacs windows are tiled vertically on the XEmacs frame.  The upper
-XEmacs window is separated from the lower window by its mode line.
+use each window for a different file (*note Windows::).  Multiple XEmacs
+windows are tiled vertically on the XEmacs frame.  The upper XEmacs
+window is separated from the lower window by its mode line.
 
    When there are multiple, tiled XEmacs windows on a single XEmacs
 frame, the XEmacs window receiving input from the keyboard has the
@@ -1028,7 +1028,7 @@ The Echo Area
      as you type it.  This behavior is designed to give confident users
      fast response, while giving hesitant users maximum feedback.  You
      can change this behavior by setting a variable (*note Display
-     Vars::.).
+     Vars::).
 
    *   If you issue a command that cannot be executed, XEmacs may print
      an "error message" in the echo area.  Error messages are
index 81da987..40909ac 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/xemacs.info, produced by Makeinfo version
-1.68 from the input file xemacs.texi.
+This is ../info/xemacs.info, produced by makeinfo version 4.0 from
+xemacs/xemacs.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -135,7 +135,7 @@ manual for information on manipulating X windows.
 
    When you are working under X, each X window (that is, each XEmacs
 frame) has a menu bar for mouse-controlled operations (*note Pull-down
-Menus::.).
+Menus::).
 
    XEmacs under X is also a multi-frame XEmacs.  You can use the New
 Frame menu item from the File menu to create a new XEmacs frame in a
@@ -826,7 +826,7 @@ Clear menu items.  When you select a menu item, Emacs executes the
 equivalent command.  Most commands on the Edit menu work on a block of
 text, the X selection.  They appear faded until you select a block of
 text (activate a region) with the mouse.  *Note Using X Selections::,
-*note Killing::., and *note Yanking::. for more information.
+*note Killing::, and *note Yanking:: for more information.
 
 Undo
      Undoes the previous command.  Undo is equivalent to the Emacs
@@ -1021,12 +1021,12 @@ Customizing XEmacs Menus
 menu items and disabling or enabling existing menu items.
 
    The following functions are available:
-`add-menu: (MENU-PATH MENU-NAME MENU-ITEMS &OPTIONAL BEFORE)'
+`add-menu: (MENU-PATH MENU-NAME MENU-ITEMS &optional BEFORE)'
      Add a menu to the menu bar or one of its submenus.
 
-`add-menu-item: (MENU-PATH ITEM-NAME FUNCTION ENABLED-P
-     &optional before)' Add a menu item to a menu, creating the menu
-     first if necessary.
+`add-menu-item: (MENU-PATH ITEM-NAME FUNCTION'
+     ENABLED-P &optional BEFORE) Add a menu item to a menu, creating
+     the menu first if necessary.
 
 `delete-menu-item: (PATH)'
      Remove the menu item defined by PATH from the menu hierarchy.
index e663385..af47a05 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/xemacs.info, produced by Makeinfo version
-1.68 from the input file xemacs.texi.
+This is ../info/xemacs.info, produced by makeinfo version 4.0 from
+xemacs/xemacs.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -91,7 +91,7 @@ normally `C-z' and `C-c'.)  This Unix feature is turned off while you
 are in Emacs. The meanings of `C-z' and `C-x C-c' as keys in Emacs were
 inspired by the standard Berkeley Unix meanings of `C-z' and `C-c', but
 that is their only relationship with Unix.  You could customize these
-keys to do anything (*note Keymaps::.).
+keys to do anything (*note Keymaps::).
 
 \1f
 File: xemacs.info,  Node: Command Switches,  Next: Startup Paths,  Prev: Exiting,  Up: Top
@@ -221,7 +221,7 @@ order in which they appear in this table.
 
 `-debug-paths'
      Displays information on how XEmacs constructs the various paths
-     into its hierarchy on startup.  (See also *note Startup Paths::..)
+     into its hierarchy on startup.  (See also *note Startup Paths::.)
 
 `-unmapped'
      Do not map the initial frame.  This is useful if you want to start
@@ -269,7 +269,7 @@ normal processing of the other arguments by setting this variable.
      xemacs *.c
 
 passes each `.c' file as a separate argument to Emacs, so that Emacs
-visits each file (*note Visiting::.).
+visits each file (*note Visiting::).
 
    Here is an advanced example that assumes you have a Lisp program file
 called `hack-c-program.el' which, when loaded, performs some useful
@@ -478,7 +478,7 @@ directly under `<root>', because that is where they are in the XEmacs
 tarball.
 
    If XEmacs runs with the `-debug-paths' option (*note Command
-Switches::.), it will print the values of these variables, hopefully
+Switches::), it will print the values of these variables, hopefully
 aiding in debugging any problems which come up.
 
 `lisp-directory'
@@ -546,7 +546,7 @@ Inserting Text
 
    To insert printing characters into the text you are editing, just
 type them.  This inserts the characters into the buffer at the cursor
-(that is, at "point"; *note Point::.).  The cursor moves forward.  Any
+(that is, at "point"; *note Point::).  The cursor moves forward.  Any
 characters after the cursor move forward too.  If the text in the buffer
 is `FOOBAR', with the cursor before the `B', and you type `XX', the
 result is `FOOXXBAR', with the cursor still before the `B'.
@@ -586,7 +586,7 @@ above 200 octal, you must "quote" it by typing the character
      with the specified character code.
 
 A numeric argument to `C-q' specifies how many copies of the quoted
-character should be inserted (*note Arguments::.).
+character should be inserted (*note Arguments::).
 
    If you prefer to have text characters replace (overwrite) existing
 text instead of moving it to the right, you can enable Overwrite mode, a
@@ -596,7 +596,7 @@ Changing the Location of Point
 ==============================
 
    To do more than insert characters, you have to know how to move point
-(*note Point::.).  Here are a few of the available commands.
+(*note Point::).  Here are a few of the available commands.
 
    NOTE: Many of the following commands have two versions, one that uses
 the function keys (e.g. <LEFT> or <END>) and one that doesn't.  The
@@ -744,7 +744,7 @@ from Emacs, type:
 
 The file name is given as an "argument" to the command `C-x C-f'
 (`find-file').  The command uses the "minibuffer" to read the argument.
-You have to type <RET> to terminate the argument (*note Minibuffer::.).
+You have to type <RET> to terminate the argument (*note Minibuffer::).
 
    You can also use the Open... menu item from the File menu, then type
 the name of the file to the prompt.
@@ -765,7 +765,7 @@ which you can insert the text you want to put in the file.  When you
 save the buffer with `C-x C-s', or by choosing Save Buffer from the
 File menu, the file is created.
 
-   To learn more about using files, *note Files::..
+   To learn more about using files, *note Files::.
 
 Help
 ====
@@ -832,8 +832,8 @@ Continuation Lines
 curved arrow at the extreme right margin of all but the last line.  The
 curved arrow indicates that the following screen line is not really a
 distinct line in the text, but just the "continuation" of a line too
-long to fit the frame.  You can use Auto Fill mode (*note Filling::.)
-to have Emacs insert newlines automatically when a line gets too long.
+long to fit the frame.  You can use Auto Fill mode (*note Filling::) to
+have Emacs insert newlines automatically when a line gets too long.
 
    Instead of continuation, long lines can be displayed by "truncation".
 This means that all the characters that do not fit in the width of the
@@ -844,7 +844,7 @@ of the curved arrow inform you that truncation is in effect.
    To turn off continuation for a particular buffer, set the variable
 `truncate-lines' to non-`nil' in that buffer.  Truncation instead of
 continuation also happens whenever horizontal scrolling is in use, and
-optionally whenever side-by-side windows are in use (*note Windows::.).
+optionally whenever side-by-side windows are in use (*note Windows::).
 Altering the value of `truncate-lines' makes it local to the current
 buffer; until that time, the default value is in effect.  The default
 is initially `nil'.  *Note Locals::.
@@ -888,7 +888,7 @@ information, it is not displayed all the time.
      current page.
 
    * `M-=' (`count-lines-region') prints the number of lines in the
-     region (*note Mark::.).
+     region (*note Mark::).
 
    The command `C-x =' (`what-cursor-position') provides information
 about point and about the column the cursor is in.  It prints a line in
@@ -1127,7 +1127,7 @@ where `Find File: ' is the prompt.  Typing `buffer.c' specifies the file
 `..'; thus, if you type `../lisp/simple.el', the file that you visit
 will be the one named
 `/u2/emacs/lisp/simple.el'.  Alternatively, you can use  `M-<DEL>' to
-kill directory names you don't want (*note Words::.).
+kill directory names you don't want (*note Words::).
 
    You can also type an absolute file name, one starting with a slash
 or a tilde, ignoring the default directory.  For example, to find the
index 32d87d6..66ed5a7 100644 (file)
@@ -1,5 +1,5 @@
-This is Info file ../../info/xemacs.info, produced by Makeinfo version
-1.68 from the input file xemacs.texi.
+This is ../info/xemacs.info, produced by makeinfo version 4.0 from
+xemacs/xemacs.texi.
 
 INFO-DIR-SECTION XEmacs Editor
 START-INFO-DIR-ENTRY
@@ -570,7 +570,7 @@ you are looking for commands for killing backwards and `C-h a
 kill-backwards <RET>' doesn't reveal any commands, don't give up.  Try
 just `kill', or just `backwards', or just `back'.  Be persistent.
 Pretend you are playing Adventure.  Also note that you can use a
-regular expression as the argument (*note Regexps::.).
+regular expression as the argument (*note Regexps::).
 
    Here is a set of arguments to give to `C-h a' that covers many
 classes of Emacs commands, since there are strong conventions for naming
@@ -611,9 +611,9 @@ normally describes all the commands that are changed in this mode.
 present information about the current Emacs mode that is not covered by
 `C-h m'.  `C-h b' displays a list of all key bindings currently in
 effect, with the local bindings of the current major mode first,
-followed by the global bindings (*note Key Bindings::.).  `C-h s'
+followed by the global bindings (*note Key Bindings::).  `C-h s'
 displays the contents of the syntax table with explanations of each
-character's syntax (*note Syntax::.).
+character's syntax (*note Syntax::).
 
    The other `C-h' options display various files of useful information.
 `C-h C-w' (`describe-no-warranty') displays details on the complete
@@ -751,23 +751,23 @@ Operating on the Region
 
    Once you have created an active region, you can do many things to
 the text in it:
-   * Kill it with `C-w' (*note Killing::.).
+   * Kill it with `C-w' (*note Killing::).
 
-   * Save it in a register with `C-x r s' (*note Registers::.).
+   * Save it in a register with `C-x r s' (*note Registers::).
 
-   * Save it in a buffer or a file (*note Accumulating Text::.).
+   * Save it in a buffer or a file (*note Accumulating Text::).
 
    * Convert case with `C-x C-l' or `C-x C-u'
-     (*note Case::.).
+     (*note Case::).
 
    * Evaluate it as Lisp code with `M-x eval-region' (*note Lisp
-     Eval::.).
+     Eval::).
 
-   * Fill it as text with `M-q' (*note Filling::.).
+   * Fill it as text with `M-q' (*note Filling::).
 
-   * Print hardcopy with `M-x print-region' (*note Hardcopy::.).
+   * Print hardcopy with `M-x print-region' (*note Hardcopy::).
 
-   * Indent it with `C-x <TAB>' or `C-M-\' (*note Indentation::.).
+   * Indent it with `C-x <TAB>' or `C-M-\' (*note Indentation::).
 
 \1f
 File: xemacs.info,  Node: Marking Objects,  Next: Mark Ring,  Prev: Using Region,  Up: Mark
@@ -805,12 +805,12 @@ These characters sometimes save you some typing.
 thus delimit an object in the buffer.  `M-h' (`mark-paragraph') moves
 point to the beginning of the paragraph that surrounds or follows
 point, and puts the mark at the end of that paragraph (*note
-Paragraphs::.).  You can then indent, case-convert, or kill the whole
+Paragraphs::).  You can then indent, case-convert, or kill the whole
 paragraph.  In the same fashion, `C-M-h' (`mark-defun') puts point
 before and the mark after the current or following defun (*note
-Defuns::.).  `C-x C-p' (`mark-page') puts point before the current page
+Defuns::).  `C-x C-p' (`mark-page') puts point before the current page
 (or the next or previous, depending on the argument), and mark at the
-end (*note Pages::.).  The mark goes after the terminating page
+end (*note Pages::).  The mark goes after the terminating page
 delimiter (to include it), while point goes after the preceding page
 delimiter (to exclude it).  Finally, `C-x h' (`mark-whole-buffer') sets
 up the entire buffer as the region by putting point at the beginning
@@ -895,7 +895,7 @@ whole lines.
         The selected region of text is highlighted.
 
    Once a region of text is selected, it becomes the primary X selection
-(*note Using X Selections::.) as well as the Emacs selected region. You
+(*note Using X Selections::) as well as the Emacs selected region. You
 can paste it into other X applications and use the options from the
 Edit pull-down menu on it.  Since it is also the Emacs region, you can
 use Emacs region commands on it.
@@ -1028,7 +1028,7 @@ distinction is made only for erasing text in the buffer.)
    The commands' names and individual descriptions use the words `kill'
 and `delete' to indicate what they do.  If you perform a kill or delete
 command by mistake, use the `C-x u' (`undo') command to undo it (*note
-Undo::.). The delete commands include `C-d' (`delete-char') and <DEL>
+Undo::). The delete commands include `C-d' (`delete-char') and <DEL>
 (`delete-backward-char'), which delete only one character at a time,
 and those commands that delete only spaces or newlines.  Commands that
 can destroy significant amounts of nontrivial data usually kill.
@@ -1149,8 +1149,8 @@ numeric argument acts as a repeat count.  A negative argument means to
 search backward and kill text before point.
 
    Other syntactic units can be killed: words, with `M-<DEL>' and `M-d'
-(*note Words::.); sexps, with `C-M-k' (*note Lists::.); and sentences,
-with `C-x <DEL>' and `M-k' (*note Sentences::.).
+(*note Words::); sexps, with `C-M-k' (*note Lists::); and sentences,
+with `C-x <DEL>' and `M-k' (*note Sentences::).
 
 \1f
 File: xemacs.info,  Node: Yanking,  Next: Using X Selections,  Prev: Killing,  Up: Top
index a969b0c..83ebc43 100644 (file)
@@ -1,3 +1,42 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
+1999-11-20  Martin Buchholz  <martin@xemacs.org>
+
+       * process-gnu-depends.sh: Deleted.  Obsolete.
+       * process-depends.sh: Deleted.  Obsolete.
+
+1999-11-20  Jan Vroonhof  <jan@xemacs.org>
+
+       * Makefile.in.in (instvardir): Added. From
+       Jeff Miller <jmiller@smart.net>
+
+1999-11-19  Martin Buchholz  <martin@xemacs.org>
+
+       * etags.c: Upgrade to pot etags version 13.33.
+       Make `etags --version' print out `XEmacs', not `GNU Emacs'
+
+1999-11-17  Martin Buchholz  <martin@xemacs.org>
+
+       * etags.c (canonicalize_filename): Typo fix
+
+1999-11-05  Martin Buchholz  <martin@xemacs.org>
+
+       * etags.c:
+       * ../etc/etags.1:
+       * ../etc/NEWS:
+       Upgrade to etags version 13.32.
+       etags.c has warnings removed, in addition.
+
+1999-11-15  Martin Buchholz  <martin@xemacs.org>
+
+       * gnuserv.c (ipc_spawn_watchdog): Use pid_t instead of int.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
        * Makefile.in.in (cppflags): Add -I$(top_srcdir)/src.
 
 1999-04-29  Andy Piper  <andy@xemacs.org>
-       
-       * make-docfile.c: build fixes for mingw32.      
+
+       * make-docfile.c: build fixes for mingw32.
        * movemail.c: ditto.
        * run.c: ditto.
        * yow.c: ditto.
        * profile.c: ditto.
        (gettimeofday): new function copied from nt.c.
-       
+
        * fakemail.c (make_file_preface): make buildable under windows.
 
        * Makefile.in.in: fix some build targets for when we are building
 
        * pop.c: mess with includes so that it builds under native NT.
        From Fabrice Popineau <popineau@ese-metz.fr>
-       
+
 1998-12-16  Andy Piper  <andy@xemacs.org>
 
        * XEmacs 21.2.6 is released
@@ -380,7 +419,7 @@ Wed Apr 22 12:59:35 1998  Andy Piper  <andyp@parallax.co.uk>
 1998-04-19  Jan Vroonhof  <vroonhof@math.ethz.ch>
 
        * gnuclient.c (main): Read eval from from stdin if just "-batch"
-       is given. 
+       is given.
        * gnudoit: Support this.
        * gnuserv.1: Document this behavior.
 
@@ -452,13 +491,13 @@ Tue Feb 17 12:50:37 1998  Andy Piper  <andyp@parallax.co.uk>
 
 1998-01-13  Martin Buchholz  <martin@xemacs.org>
 
-       * lib-src/add-little-package.sh: 
-       * lib-src/add-big-package.sh: 
+       * lib-src/add-little-package.sh:
+       * lib-src/add-big-package.sh:
        Use proper paranoid quoting for sh variables.
        -batch implies -q.
 
 Thu Jan 08 09:42:36 1998    <andyp@parallax.co.uk>
-       
+
        * gnuserv.h: only set UNIX_DOMAIN_SOCKETS if HAVE_SYS_UN_H is
        set.
 
@@ -602,7 +641,7 @@ Thu Jan 08 09:42:36 1998    <andyp@parallax.co.uk>
        missing a variable called "configuration. This messed up archilibdir.
 
        * Added highlighting to text suggesting to do "make gzip-el" in top
-       level Makefile.in.  Added code to do make maybe-blessmail after a 
+       level Makefile.in.  Added code to do make maybe-blessmail after a
        make install is done.
 
 1997-08-07  Jan Vroonhof  <vroonhof@math.ethz.ch>
@@ -670,7 +709,7 @@ Thu Jan 08 09:42:36 1998    <andyp@parallax.co.uk>
 
        * Makefile.in.in (INSTALLABLE_SCRIPTS): Readd Gnuattach.
        From Hrvoje Niksic <hniksic@srce.hr>
-       
+
 1997-06-13  Steven L Baur  <steve@altair.xemacs.org>
 
        * update-elc.sh (mule_p): Ignore lisp/language when building
index 9fa565b..9c1b864 100644 (file)
@@ -54,6 +54,7 @@ bindir=@bindir@
 libdir=@libdir@
 srcdir=@srcdir@
 datadir=@datadir@
+instvardir=@instvardir@
 top_srcdir=@top_srcdir@
 archlibdir=@archlibdir@
 configuration=@configuration@
index 7c8e3e0..da186ab 100755 (executable)
@@ -2,8 +2,8 @@
 # add-big-package.sh --- Add multiple file package to Package Lisp Hierarchy
 # Copyright (C) 1997 Free Software Foundation, Inc.
 
-# Author:      SL Baur <steve@altair.xemacs.org>
-# Maintainer:  SL Baur <steve@altair.xemacs.org>
+# Author:      SL Baur <steve@xemacs.org>
+# Maintainer:  SL Baur <steve@xemacs.org>
 # Keywords:    packages internal
 
 # This file is part of XEmacs.
index 3a1cdc1..c3e3de9 100644 (file)
@@ -1,6 +1,6 @@
 ;;; Do not edit this file!
 ;;; This file was automatically generated, by the config.values.sh script,
-;;; from configure, which was itself automatically generated from configure.in
+;;; from configure, which was itself automatically generated from configure.in.
 ;;;
 ;;; See lisp/util/config.el for details on how this file is used.
 ;;;
@@ -93,6 +93,7 @@ dynodump_arch "@dynodump_arch@"
 etcdir "@etcdir@"
 exec_prefix "@exec_prefix@"
 extra_objs "@extra_objs@"
+have_esd_config "@have_esd_config@"
 includedir "@includedir@"
 infodir "@infodir@"
 infopath "@infopath@"
index d755d0c..fc22128 100644 (file)
@@ -47,7 +47,7 @@ exec < ./configure > "lib-src/config.values.in"
 cat <<\EOF
 ;;; Do not edit this file!
 ;;; This file was automatically generated, by the config.values.sh script,
-;;; from configure, which was itself automatically generated from configure.in
+;;; from configure, which was itself automatically generated from configure.in.
 ;;;
 ;;; See lisp/util/config.el for details on how this file is used.
 ;;;
index e9ce59f..5f2223a 100644 (file)
@@ -1,5 +1,5 @@
 /* Tags file maker to go with GNU Emacs
-   Copyright (C) 1984, 87, 88, 89, 93, 94, 95, 98
+   Copyright (C) 1984, 87, 88, 89, 93, 94, 95, 98, 99
    Free Software Foundation, Inc. and Ken Arnold
 
 This file is not considered part of GNU Emacs.
@@ -28,18 +28,31 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  *     Francesco Potorti` reorganised C and C++ based on work by Joe Wells.
  *     Regexp tags by Tom Tromey.
  *
- *     Francesco Potorti` (F.Potorti@cnuce.cnr.it) is the current maintainer.
+ *     Francesco Potorti` (pot@gnu.org) is the current maintainer.
+ *     Ansified by Martin Buchholz, 19991105.
  */
 
-char pot_etags_version[] = "@(#) pot revision number is 13.7";
+char pot_etags_version[] = "@(#) pot revision number is 13.33";
 
 #define        TRUE    1
 #define        FALSE   0
 
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE           /* enables some compiler checks on GNU */
+#endif
 #ifndef DEBUG
 # define DEBUG FALSE
 #endif
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+  /* On some systems, Emacs defines static as nothing for the sake
+     of unexec.  We don't want that here since we don't use unexec. */
+# undef static
+# define ETAGS_REGEXPS         /* use the regexp features */
+# define LONG_OPTIONS          /* accept long options */
+#endif /* HAVE_CONFIG_H */
+
 #ifdef MSDOS
 # include <fcntl.h>
 # include <sys/param.h>
@@ -60,19 +73,12 @@ char pot_etags_version[] = "@(#) pot revision number is 13.7";
 #   undef HAVE_NTGUI
 # else
 #   define DOS_NT
-#   define HAVE_GETCWD
 # endif /* not HAVE_CONFIG_H */
+# ifndef HAVE_GETCWD
+#   define HAVE_GETCWD
+# endif /* undef HAVE_GETCWD */
 #endif /* WINDOWSNT */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-  /* On some systems, Emacs defines static as nothing for the sake
-     of unexec.  We don't want that here since we don't use unexec. */
-# undef static
-# define ETAGS_REGEXPS         /* use the regexp features */
-# define LONG_OPTIONS          /* accept long options */
-#endif /* HAVE_CONFIG_H */
-
 #if !defined (WINDOWSNT) && defined (STDC_HEADERS)
 #include <stdlib.h>
 #include <string.h>
@@ -176,7 +182,6 @@ typedef void Lang_function ();
 typedef struct
 {
   char *suffix;
-  int sufflen;
   char *command;               /* Takes one arg and decompresses to stdout */
 } compressor;
 
@@ -190,83 +195,6 @@ typedef struct
 
 extern char *getenv ();
 
-/* Many compilers barf on this:
-       Lang_function Asm_labels;
-   so let's write it this way */
-void Asm_labels ();
-void C_entries ();
-void default_C_entries ();
-void plain_C_entries ();
-void Cjava_entries ();
-void Cobol_paragraphs ();
-void Cplusplus_entries ();
-void Cstar_entries ();
-void Erlang_functions ();
-void Fortran_functions ();
-void Yacc_entries ();
-void Lisp_functions ();
-void Pascal_functions ();
-void Perl_functions ();
-void Postscript_functions ();
-void Prolog_functions ();
-void Python_functions ();
-void Scheme_functions ();
-void TeX_functions ();
-void just_read_file ();
-
-compressor *get_compressor_from_suffix ();
-language *get_language_from_name ();
-language *get_language_from_interpreter ();
-language *get_language_from_suffix ();
-int total_size_of_entries ();
-long readline (), readline_internal ();
-#ifdef ETAGS_REGEXPS
-void analyse_regex ();
-void add_regex ();
-void free_patterns ();
-#endif /* ETAGS_REGEXPS */
-void error ();
-void suggest_asking_for_help ();
-void fatal (), pfatal ();
-void add_node ();
-
-void init ();
-void initbuffer ();
-void find_entries ();
-void free_tree ();
-void pfnote (), new_pfnote ();
-void process_file ();
-void put_entries ();
-void takeprec ();
-
-char *concat ();
-char *skip_spaces (), *skip_non_spaces ();
-char *savenstr (), *savestr ();
-char *etags_strchr (), *etags_strrchr ();
-char *etags_getcwd ();
-char *relative_filename (), *absolute_filename (), *absolute_dirname ();
-bool filename_is_absolute ();
-void canonicalize_filename ();
-void grow_linebuffer ();
-long *xmalloc (), *xrealloc ();
-
-\f
-char searchar = '/';           /* use /.../ searches */
-
-char *tagfile;                 /* output file */
-char *progname;                        /* name this program was invoked with */
-char *cwd;                     /* current working directory */
-char *tagfiledir;              /* directory of tagfile */
-FILE *tagf;                    /* ioptr for tags file */
-
-char *curfile;                 /* current input file name */
-language *curlang;             /* current language */
-
-int lineno;                    /* line number of current line */
-long charno;                   /* current character number */
-long linecharno;               /* charno of start of current line */
-char *dbp;                     /* pointer to start of current tag */
-
 typedef struct node_st
 {                              /* sorting structure            */
   char *name;                  /* function or type name        */
@@ -279,8 +207,6 @@ typedef struct node_st
   struct node_st *left, *right;        /* left and right sons          */
 } node;
 
-node *head;                    /* the head of the binary tree of tags */
-
 /*
  * A `linebuffer' is a structure which holds a line of text.
  * `readline_internal' reads a line from a stream into a linebuffer
@@ -295,6 +221,97 @@ typedef struct
   char *buffer;
 } linebuffer;
 
+/* Many compilers barf on this:
+       Lang_function Ada_funcs;
+   so let's write it this way */
+void Ada_funcs (FILE *inf);
+void Asm_labels (FILE *inf);
+void C_entries (int c_ext, FILE *inf);
+void default_C_entries (FILE *inf);
+void plain_C_entries (FILE *inf);
+void Cjava_entries (FILE *inf);
+void Cobol_paragraphs (FILE *inf);
+void Cplusplus_entries (FILE *inf);
+void Cstar_entries (FILE *inf);
+void Erlang_functions (FILE *inf);
+void Fortran_functions (FILE *inf);
+void Yacc_entries (FILE *inf);
+void Lisp_functions (FILE *inf);
+void Pascal_functions (FILE *inf);
+void Perl_functions (FILE *inf);
+void Postscript_functions (FILE *inf);
+void Prolog_functions (FILE *inf);
+void Python_functions (FILE *inf);
+void Scheme_functions (FILE *inf);
+void TeX_functions (FILE *inf);
+void just_read_file (FILE *inf);
+
+compressor *get_compressor_from_suffix (char *file, char **extptr);
+language *get_language_from_name (char *name);
+language *get_language_from_interpreter (char *interpreter);
+language *get_language_from_suffix (char *file);
+int total_size_of_entries (register node *np);
+long readline (linebuffer *lbp, FILE *stream);
+long readline_internal (linebuffer *lbp, register FILE *stream);
+void get_tag (register char *bp);
+
+#ifdef ETAGS_REGEXPS
+void analyse_regex (char *regex_arg, bool ignore_case);
+void add_regex (char *regexp_pattern, bool ignore_case, language *lan);
+void free_patterns (void);
+#endif /* ETAGS_REGEXPS */
+void error (const char *s1, const char *s2);
+void suggest_asking_for_help (void);
+void fatal (char *s1, char *s2);
+void pfatal (char *s1);
+void add_node (node *np, node **cur_node_p);
+
+void init (void);
+void initbuffer (linebuffer *lbp);
+void find_entries (char *file, FILE *inf);
+void free_tree (register node *np);
+void pfnote (char *name, bool is_func, char *linestart, int linelen, int lno, long int cno);
+void new_pfnote (char *name, int namelen, bool is_func, char *linestart, int linelen, int lno, long int cno);
+void process_file (char *file);
+void put_entries (register node *np);
+void takeprec (void);
+
+char *concat (char *s1, char *s2, char *s3);
+char *skip_spaces (char *cp);
+char *skip_non_spaces (char *cp);
+char *savenstr (char *cp, int len);
+char *savestr (char *cp);
+char *etags_strchr (char *sp, char c);
+char *etags_strrchr (char *sp, char c);
+char *etags_getcwd (void);
+char *relative_filename (char *file, char *dir);
+char *absolute_filename (char *file, char *dir);
+char *absolute_dirname (char *file, char *dir);
+bool filename_is_absolute (char *fn);
+void canonicalize_filename (register char *fn);
+void grow_linebuffer (linebuffer *lbp, int toksize);
+long *xmalloc (unsigned int size);
+long *xrealloc (char *ptr, unsigned int size);
+
+\f
+char searchar = '/';           /* use /.../ searches */
+
+char *tagfile;                 /* output file */
+char *progname;                        /* name this program was invoked with */
+char *cwd;                     /* current working directory */
+char *tagfiledir;              /* directory of tagfile */
+FILE *tagf;                    /* ioptr for tags file */
+
+char *curfile;                 /* current input file name */
+language *curlang;             /* current language */
+
+int lineno;                    /* line number of current line */
+long charno;                   /* current character number */
+long linecharno;               /* charno of start of current line */
+char *dbp;                     /* pointer to start of current tag */
+
+node *head;                    /* the head of the binary tree of tags */
+
 linebuffer lb;                 /* the current line */
 linebuffer token_name;         /* used by C_entries as a temporary area */
 struct
@@ -319,13 +336,14 @@ char
 
 bool append_to_tagfile;                /* -a: append to tags */
 /* The following four default to TRUE for etags, but to FALSE for ctags.  */
-bool typedefs;                 /* -t: create tags for C typedefs */
+bool typedefs;                 /* -t: create tags for C and Ada typedefs */
 bool typedefs_and_cplusplus;   /* -T: create tags for C typedefs, level */
                                /* 0 struct/enum/union decls, and C++ */
                                /* member functions. */
 bool constantypedefs;          /* -d: create tags for C #define, enum */
                                /* constants and variables. */
                                /* -D: opposite of -d.  Default under ctags. */
+bool declarations;             /* --declarations: tag them and extern in C&Co*/
 bool globals;                  /* create tags for global variables */
 bool members;                  /* create tags for C member variables */
 bool update;                   /* -u: update tags */
@@ -334,37 +352,41 @@ bool no_warnings;         /* -w: suppress warnings */
 bool cxref_style;              /* -x: create cxref style output */
 bool cplusplus;                        /* .[hc] means C++, not C */
 bool noindentypedefs;          /* -I: ignore indentation in C */
+bool packages_only;            /* --packages-only: in Ada, only tag packages*/
 
 #ifdef LONG_OPTIONS
 struct option longopts[] =
 {
-  { "append",                  no_argument,       NULL,     'a'   },
-  { "backward-search",         no_argument,       NULL,     'B'   },
-  { "c++",                     no_argument,       NULL,     'C'   },
-  { "cxref",                   no_argument,       NULL,     'x'   },
-  { "defines",                 no_argument,       NULL,     'd'   },
-  { "no-defines",              no_argument,       NULL,     'D'   },
-  { "globals",                 no_argument,       &globals, TRUE  },
-  { "no-globals",              no_argument,       &globals, FALSE },
-  { "help",                    no_argument,       NULL,     'h'   },
-  { "help",                    no_argument,       NULL,     'H'   },
-  { "ignore-indentation",      no_argument,       NULL,     'I'   },
-  { "include",                 required_argument, NULL,     'i'   },
-  { "language",                 required_argument, NULL,     'l'   },
-  { "members",                 no_argument,       &members, TRUE  },
-  { "no-members",              no_argument,       &members, FALSE },
-  { "no-warn",                 no_argument,       NULL,     'w'   },
-  { "output",                  required_argument, NULL,     'o'   },
-#ifdef ETAGS_REGEXPS  
-  { "regex",                   required_argument, NULL,     'r'   },
-  { "no-regex",                        no_argument,       NULL,     'R'   },
-#endif /* ETAGS_REGEXPS */  
-  { "typedefs",                        no_argument,       NULL,     't'   },
-  { "typedefs-and-c++",                no_argument,       NULL,     'T'   },
-  { "update",                  no_argument,       NULL,     'u'   },
-  { "version",                 no_argument,       NULL,     'V'   },
-  { "vgrind",                  no_argument,       NULL,     'v'   },
-  { 0 }
+  { "packages-only",      no_argument,      &packages_only, TRUE  },
+  { "append",            no_argument,       NULL,           'a'   },
+  { "backward-search",   no_argument,       NULL,           'B'   },
+  { "c++",               no_argument,       NULL,           'C'   },
+  { "cxref",             no_argument,       NULL,           'x'   },
+  { "defines",           no_argument,       NULL,           'd'   },
+  { "declarations",      no_argument,       &declarations,  TRUE  },
+  { "no-defines",        no_argument,       NULL,           'D'   },
+  { "globals",           no_argument,       &globals,       TRUE  },
+  { "no-globals",        no_argument,       &globals,       FALSE },
+  { "help",              no_argument,       NULL,           'h'   },
+  { "help",              no_argument,       NULL,           'H'   },
+  { "ignore-indentation", no_argument,      NULL,           'I'   },
+  { "include",           required_argument, NULL,           'i'   },
+  { "language",           required_argument, NULL,                  'l'   },
+  { "members",           no_argument,       &members,       TRUE  },
+  { "no-members",        no_argument,       &members,       FALSE },
+  { "no-warn",           no_argument,       NULL,           'w'   },
+  { "output",            required_argument, NULL,           'o'   },
+#ifdef ETAGS_REGEXPS
+  { "regex",             required_argument, NULL,           'r'   },
+  { "no-regex",                  no_argument,       NULL,           'R'   },
+  { "ignore-case-regex",  required_argument, NULL,          'c'   },
+#endif /* ETAGS_REGEXPS */
+  { "typedefs",                  no_argument,       NULL,           't'   },
+  { "typedefs-and-c++",          no_argument,       NULL,           'T'   },
+  { "update",            no_argument,       NULL,           'u'   },
+  { "version",           no_argument,       NULL,           'V'   },
+  { "vgrind",            no_argument,       NULL,           'v'   },
+  { NULL }
 };
 #endif /* LONG_OPTIONS */
 
@@ -382,17 +404,22 @@ typedef struct pattern
   bool error_signaled;
 } pattern;
 
-/* Array of all regexps. */
+/* List of all regexps. */
 pattern *p_head = NULL;
+
+/* How many characters in the character set.  (From regex.c.)  */
+#define CHAR_SET_SIZE 256
+/* Translation table for case-insensitive matching. */
+char lc_trans[CHAR_SET_SIZE];
 #endif /* ETAGS_REGEXPS */
 
 compressor compressors[] =
 {
-  { "z", 1, "gzip -d -c"},
-  { "Z", 1, "gzip -d -c"},
-  { "gz", 2, "gzip -d -c"},
-  { "GZ", 2, "gzip -d -c"},
-  { "bz2", 3, "bzip2 -d -c" },
+  { "z", "gzip -d -c"},
+  { "Z", "gzip -d -c"},
+  { "gz", "gzip -d -c"},
+  { "GZ", "gzip -d -c"},
+  { "bz2", "bzip2 -d -c" },
   { NULL }
 };
 
@@ -403,6 +430,10 @@ compressor compressors[] =
 /* Non-NULL if language fixed. */
 language *forced_lang = NULL;
 
+/* Ada code */
+char *Ada_suffixes [] =
+  { "ads", "adb", "ada", NULL };
+
 /* Assembly code */
 char *Asm_suffixes [] = { "a", /* Unix assembler */
                          "asm", /* Microcontroller assembly */
@@ -459,7 +490,7 @@ char *plain_C_suffixes [] =
      NULL };
 
 char *Postscript_suffixes [] =
-  { "ps", NULL };
+  { "ps", "psw", NULL };       /* .psw is for PSWrap */
 
 char *Prolog_suffixes [] =
   { "prolog", NULL };
@@ -486,6 +517,7 @@ char *Yacc_suffixes [] =
 
 language lang_names [] =
 {
+  { "ada",     Ada_funcs,           Ada_suffixes,         NULL              },
   { "asm",     Asm_labels,          Asm_suffixes,         NULL              },
   { "c",       default_C_entries,   default_C_suffixes,   NULL              },
   { "c++",     Cplusplus_entries,   Cplusplus_suffixes,   NULL              },
@@ -509,7 +541,7 @@ language lang_names [] =
   { NULL, NULL }                /* end of list */
 };
 \f
-void
+static void
 print_language_names ()
 {
   language *lang;
@@ -534,20 +566,26 @@ Fortran is tried first; if no tags are found, C is tried next.\n\
 Compressed files are supported using gzip and bzip2.");
 }
 
+#ifdef XEMACS
+# define EMACS_NAME "XEmacs"
+#else
+# define EMACS_NAME "GNU Emacs"
+#endif
+
 #ifndef VERSION
 # define VERSION "20"
 #endif
-void
+static void
 print_version ()
 {
-  printf ("%s (GNU Emacs %s)\n", (CTAGS) ? "ctags" : "etags", VERSION);
-  puts ("Copyright (C) 1996 Free Software Foundation, Inc. and Ken Arnold");
+  printf ("%s (" EMACS_NAME " %s)\n", (CTAGS) ? "ctags" : "etags", VERSION);
+  puts ("Copyright (C) 1999 Free Software Foundation, Inc. and Ken Arnold");
   puts ("This program is distributed under the same terms as Emacs");
 
   exit (GOOD);
 }
 
-void
+static void
 print_help ()
 {
   printf ("Usage: %s [options] [[regex-option ...] file-name] ...\n\
@@ -568,6 +606,9 @@ Relative ones are stored relative to the output file's directory.");
   puts ("-a, --append\n\
         Append tag entries to existing tags file.");
 
+  puts ("--packages-only\n\
+        For Ada files, only generate tags for packages .");
+
   if (CTAGS)
     puts ("-B, --backward-search\n\
         Write the search commands for the tag entries using '?', the\n\
@@ -576,6 +617,14 @@ Relative ones are stored relative to the output file's directory.");
   puts ("-C, --c++\n\
         Treat files whose name suffix defaults to C language as C++ files.");
 
+  puts ("--declarations\n\
+       In C and derived languages, create tags for function declarations,");
+  if (CTAGS)
+    puts ("\tand create tags for extern variables if --globals is used.");
+  else
+    puts
+      ("\tand create tags for extern variables unless --no-globals is used.");
+
   if (CTAGS)
     puts ("-d, --defines\n\
         Create tag entries for C #define constants and enum constants, too.");
@@ -607,12 +656,15 @@ Relative ones are stored relative to the output file's directory.");
 
 #ifdef ETAGS_REGEXPS
   puts ("-r /REGEXP/, --regex=/REGEXP/ or --regex=@regexfile\n\
-        Make a tag for each line matching pattern REGEXP in the\n\
-       following files.  regexfile is a file containing one REGEXP\n\
-       per line.  REGEXP is anchored (as if preceded by ^).\n\
-       The form /REGEXP/NAME/ creates a named tag.  For example Tcl\n\
-       named tags can be created with:\n\
+        Make a tag for each line matching pattern REGEXP in the following\n\
+       files.  {LANGUAGE}/REGEXP/ uses REGEXP for LANGUAGE files only.\n\
+       regexfile is a file containing one REGEXP per line.\n\
+       REGEXP is anchored (as if preceded by ^).\n\
+       The form /REGEXP/NAME/ creates a named tag.\n\
+       For example Tcl named tags can be created with:\n\
        --regex=/proc[ \\t]+\\([^ \\t]+\\)/\\1/.");
+  puts ("-c /REGEXP/, --ignore-case-regex=/REGEXP/ or --ignore-case-regex=@regexfile\n\
+        Like -r, --regex but ignore case when matching expressions.");
   puts ("-R, --no-regex\n\
         Don't create tags from regexps for the following files.");
 #endif /* ETAGS_REGEXPS */
@@ -627,7 +679,7 @@ Relative ones are stored relative to the output file's directory.");
   if (CTAGS)
     {
       puts ("-t, --typedefs\n\
-        Generate tag entries for C typedefs.");
+        Generate tag entries for C and Ada typedefs.");
       puts ("-T, --typedefs-and-c++\n\
         Generate tag entries for C typedefs, C struct/enum/union tags,\n\
         and C++ member functions.");
@@ -660,7 +712,7 @@ Relative ones are stored relative to the output file's directory.");
   print_language_names ();
 
   puts ("");
-  puts ("Report bugs to bug-gnu-emacs@prep.ai.mit.edu");
+  puts ("Report bugs to bug-gnu-emacs@gnu.org");
 
   exit (GOOD);
 }
@@ -670,7 +722,8 @@ enum argument_type
 {
   at_language,
   at_regexp,
-  at_filename
+  at_filename,
+  at_icregexp
 };
 
 /* This structure helps us allow mixing of --lang and file names. */
@@ -839,12 +892,15 @@ main (argc, argv)
 #ifdef ETAGS_REGEXPS
   /* Set syntax for regular expression routines. */
   re_set_syntax (RE_SYNTAX_EMACS | RE_INTERVALS);
+  /* Translation table for case-insensitive search. */
+  for (i = 0; i < CHAR_SET_SIZE; i++)
+    lc_trans[i] = lowcase (i);
 #endif /* ETAGS_REGEXPS */
 
   /*
    * If etags, always find typedefs and structure tags.  Why not?
    * Also default is to find macro constants, enum constants and
-   * global variables. 
+   * global variables.
    */
   if (!CTAGS)
     {
@@ -859,7 +915,7 @@ main (argc, argv)
       char *optstring;
 
 #ifdef ETAGS_REGEXPS
-      optstring = "-aCdDf:Il:o:r:RStTi:BuvxwVhH";
+      optstring = "-aCdDf:Il:o:r:c:RStTi:BuvxwVhH";
 #else
       optstring = "-aCdDf:Il:o:StTi:BuvxwVhH";
 #endif /* ETAGS_REGEXPS */
@@ -896,7 +952,7 @@ main (argc, argv)
        case 'o':
          if (tagfile)
            {
-             error ("-%c option may only be given once.", opt);
+             error ("-o option may only be given once.", (char *)NULL);
              suggest_asking_for_help ();
            }
          tagfile = optarg;
@@ -927,6 +983,11 @@ main (argc, argv)
          argbuffer[current_arg].what = NULL;
          ++current_arg;
          break;
+        case 'c':
+         argbuffer[current_arg].arg_type = at_icregexp;
+         argbuffer[current_arg].what = optarg;
+         ++current_arg;
+         break;
 #endif /* ETAGS_REGEXPS */
        case 'V':
          print_version ();
@@ -969,7 +1030,7 @@ main (argc, argv)
 
   if (nincluded_files == 0 && file_count == 0)
     {
-      error ("no input files specified.", 0);
+      error ("no input files specified.", (char *)NULL);
       suggest_asking_for_help ();
     }
 
@@ -1025,7 +1086,10 @@ main (argc, argv)
          break;
 #ifdef ETAGS_REGEXPS
        case at_regexp:
-         analyse_regex (argbuffer[i].what);
+         analyse_regex (argbuffer[i].what, FALSE);
+         break;
+       case at_icregexp:
+         analyse_regex (argbuffer[i].what, TRUE);
          break;
 #endif
        case at_filename:
@@ -1117,23 +1181,43 @@ main (argc, argv)
 
 
 /*
- * Return a compressor given the file name.
+ * Return a compressor given the file name.  If EXTPTR is non-zero,
+ * return a pointer into FILE where the compressor-specific
+ * extension begins.  If no compressor is found, NULL is returned
+ * and EXTPTR is not significant.
  * Idea by Vladimir Alexiev <vladimir@cs.ualberta.ca>
  */
 compressor *
-get_compressor_from_suffix (file)
+get_compressor_from_suffix (file, extptr)
      char *file;
+     char **extptr;
 {
   compressor *compr;
-  char *suffix;
+  char *slash, *suffix;
 
+  /* This relies on FN to be after canonicalize_filename,
+     so we don't need to consider backslashes on DOS_NT.  */
+  slash = etags_strrchr (file, '/');
   suffix = etags_strrchr (file, '.');
-  if (suffix == NULL)
+  if (suffix == NULL || suffix < slash)
     return NULL;
+  if (extptr != NULL)
+    *extptr = suffix;
   suffix += 1;
-  for (compr = compressors; compr->suffix != NULL; compr++)
-    if (streq (compr->suffix, suffix))
-      return compr;
+  /* Let those poor souls who live with DOS 8+3 file name limits get
+     some solace by treating foo.cgz as if it were foo.c.gz, etc.
+     Only the first do loop is run if not MSDOS */
+  do
+    {
+      for (compr = compressors; compr->suffix != NULL; compr++)
+       if (streq (compr->suffix, suffix))
+         return compr;
+#ifndef MSDOS
+      break;
+#endif
+      if (extptr != NULL)
+       *extptr = ++suffix;
+    } while (*suffix != '\0');
   return NULL;
 }
 
@@ -1220,7 +1304,8 @@ process_file (file)
   FILE *inf;
   compressor *compr;
   char *compressed_name, *uncompressed_name;
-  char *real_name;
+  char *ext, *real_name;
+
 
   canonicalize_filename (file);
   if (streq (file, tagfile) && !streq (tagfile, "-"))
@@ -1228,7 +1313,7 @@ process_file (file)
       error ("skipping inclusion of %s in self.", file);
       return;
     }
-  if ((compr = get_compressor_from_suffix (file)) == NULL)
+  if ((compr = get_compressor_from_suffix (file, &ext)) == NULL)
     {
       compressed_name = NULL;
       real_name = uncompressed_name = savestr (file);
@@ -1236,8 +1321,29 @@ process_file (file)
   else
     {
       real_name = compressed_name = savestr (file);
-      uncompressed_name = savenstr (file, strlen(file) - compr->sufflen - 1);
+      uncompressed_name = savenstr (file, ext - file);
     }
+
+  /* If the canonicalised uncompressed name has already be dealt with,
+     skip it silently, else add it to the list. */
+  {
+    typedef struct processed_file
+    {
+      char *filename;
+      struct processed_file *next;
+    } processed_file;
+    static processed_file *pf_head = NULL;
+    register processed_file *fnp;
+
+    for (fnp = pf_head; fnp != NULL; fnp = fnp->next)
+      if (streq (uncompressed_name, fnp->filename))
+       goto exit;
+    fnp = pf_head;
+    pf_head = xnew (1, struct processed_file);
+    pf_head->filename = savestr (uncompressed_name);
+    pf_head->next = fnp;
+  }
+
   if (stat (real_name, &stat_buf) != 0)
     {
       /* Reset real_name and try with a different name. */
@@ -1253,7 +1359,25 @@ process_file (file)
            {
              compressed_name = concat (file, ".", compr->suffix);
              if (stat (compressed_name, &stat_buf) != 0)
-               free (compressed_name);
+               {
+#ifdef MSDOS
+                 char *suf = compressed_name + strlen (file);
+                 size_t suflen = strlen (compr->suffix) + 1;
+                 for ( ; suf[1]; suf++, suflen--)
+                   {
+                     memmove (suf, suf + 1, suflen);
+                     if (stat (compressed_name, &stat_buf) == 0)
+                       {
+                         real_name = compressed_name;
+                         break;
+                       }
+                   }
+                 if (real_name != NULL)
+                   break;
+#endif
+                 free (compressed_name);
+                 compressed_name = NULL;
+               }
              else
                {
                  real_name = compressed_name;
@@ -1279,7 +1403,7 @@ process_file (file)
       inf = popen (cmd, "r");
       free (cmd);
     }
-  else 
+  else
     inf = fopen (real_name, "r");
   if (inf == NULL)
     {
@@ -1543,7 +1667,7 @@ new_pfnote (name, namelen, is_func, linestart, linelen, lno, cno)
            named = FALSE;      /* use unnamed tag */
        }
     }
-  
+
   if (named)
     name = savenstr (name, namelen);
   else
@@ -1705,7 +1829,7 @@ put_entries (np)
 }
 
 /* Length of a number's decimal representation. */
-int
+static int
 number_len (num)
      long num;
 {
@@ -1757,7 +1881,7 @@ enum sym_type
   st_C_ignore,
   st_C_javastruct,
   st_C_operator,
-  st_C_struct, st_C_enum, st_C_define, st_C_typedef, st_C_typespec
+  st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef, st_C_typespec
 };
 
 /* Feed stuff between (but not including) %[ and %] lines to:
@@ -1765,6 +1889,11 @@ enum sym_type
 %[
 struct C_stab_entry { char *name; int c_ext; enum sym_type type; }
 %%
+if,            0,      st_C_ignore
+for,           0,      st_C_ignore
+while,         0,      st_C_ignore
+switch,                0,      st_C_ignore
+return,                0,      st_C_ignore
 @interface,    0,      st_C_objprot
 @protocol,     0,      st_C_objprot
 @implementation,0,     st_C_objimpl
@@ -1780,6 +1909,7 @@ namespace,        C_PLPL, st_C_struct
 domain,        C_STAR, st_C_struct
 union,         0,      st_C_struct
 struct,        0,      st_C_struct
+extern,        0,      st_C_extern
 enum,          0,      st_C_enum
 typedef,       0,      st_C_typedef
 define,        0,      st_C_define
@@ -1795,7 +1925,6 @@ signed,   0,      st_C_typespec
 unsigned,      0,      st_C_typespec
 auto,          0,      st_C_typespec
 void,          0,      st_C_typespec
-extern,        0,      st_C_typespec
 static,        0,      st_C_typespec
 const,         0,      st_C_typespec
 volatile,      0,      st_C_typespec
@@ -1814,113 +1943,152 @@ PSEUDO,               0,      st_C_gnumacro
 %]
 and replace lines between %< and %> with its output. */
 /*%<*/
-/* C code produced by gperf version 2.5 (GNU C++ version) */
+/* C code produced by gperf version 2.7.1 (19981006 egcs) */
 /* Command-line: gperf -c -k 1,3 -o -p -r -t  */
 struct C_stab_entry { char *name; int c_ext; enum sym_type type; };
 
-#define TOTAL_KEYWORDS 41
-#define MIN_WORD_LENGTH 3
+#define TOTAL_KEYWORDS 46
+#define MIN_WORD_LENGTH 2
 #define MAX_WORD_LENGTH 15
-#define MIN_HASH_VALUE 20
-#define MAX_HASH_VALUE 136
-/* maximum key range = 117, duplicates = 0 */
+#define MIN_HASH_VALUE 13
+#define MAX_HASH_VALUE 123
+/* maximum key range = 111, duplicates = 0 */
 
+#ifdef __GNUC__
+__inline
+#endif
 static unsigned int
 hash (str, len)
-     register char *str;
-     register int unsigned len;
+     register const char *str;
+     register unsigned int len;
 {
   static unsigned char asso_values[] =
     {
-     137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-     137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-     137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-     137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-     137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-     137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-     137, 137, 137, 137,  58, 137, 137, 137,  38,  37,
-      45, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-      62, 137, 137,  14,  16, 137, 137, 137, 137, 137,
-     137, 137, 137, 137, 137, 137, 137,  26,  16,  51,
-      18,  61,   5,  19, 137,  23, 137, 137,  32,  63,
-      54,  10,  26, 137,  24,  42,  30,  18,  46, 137,
-     137, 137, 137, 137, 137, 137, 137, 137,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124,   3, 124, 124, 124,  43,   6,
+       11, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+       11, 124, 124,  58,   7, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124,  57,   7,  42,
+        4,  14,  52,   0, 124,  53, 124, 124,  29,  11,
+        6,  35,  32, 124,  29,  34,  59,  58,  51,  24,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+      124, 124, 124, 124, 124, 124
     };
-  return len + asso_values[str[2]] + asso_values[str[0]];
+  register int hval = len;
+
+  switch (hval)
+    {
+      default:
+      case 3:
+        hval += asso_values[(unsigned char)str[2]];
+      case 2:
+      case 1:
+        hval += asso_values[(unsigned char)str[0]];
+        break;
+    }
+  return hval;
 }
 
-struct C_stab_entry *
+#ifdef __GNUC__
+__inline
+#endif
+static struct C_stab_entry *
 in_word_set (str, len)
-     register char *str;
+     register const char *str;
      register unsigned int len;
 {
   static struct C_stab_entry wordlist[] =
     {
-      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"",}, {"",}, 
-      {"float",        0,      st_C_typespec},
-      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"define",       0,      st_C_define},
-      {"bool",                 C_PLPL, st_C_typespec},
-      {"",}, {"",}, {"",}, 
-      {"friend",               C_PLPL, st_C_ignore},
-      {"SYSCALL",      0,      st_C_gnumacro},
-      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"double",       0,      st_C_typespec},
-      {"",}, {"",}, {"",}, 
-      {"union",        0,      st_C_struct},
-      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"import",               C_JAVA, st_C_ignore},
-      {"int",          0,      st_C_typespec},
-      {"short",        0,      st_C_typespec},
-      {"ENTRY",                0,      st_C_gnumacro},
-      {"implements",           C_JAVA, st_C_javastruct},
-      {"auto",         0,      st_C_typespec},
-      {"",}, 
-      {"interface",    C_JAVA, st_C_struct},
-      {"typedef",      0,      st_C_typedef},
-      {"typename",     C_PLPL, st_C_typespec},
-      {"",}, {"",}, 
-      {"signed",       0,      st_C_typespec},
-      {"unsigned",     0,      st_C_typespec},
-      {"",}, {"",}, {"",}, 
-      {"struct",       0,      st_C_struct},
-      {"void",         0,      st_C_typespec},
-      {"static",       0,      st_C_typespec},
-      {"",}, {"",}, {"",}, {"",}, 
-      {"operator",     C_PLPL, st_C_operator},
-      {"",}, 
-      {"char",         0,      st_C_typespec},
-      {"class",        C_PLPL, st_C_struct},
-      {"enum",         0,      st_C_enum},
-      {"package",      C_JAVA, st_C_ignore},
-      {"",}, 
-      {"volatile",     0,      st_C_typespec},
-      {"domain",       C_STAR, st_C_struct},
-      {"DEFUN",                0,      st_C_gnumacro},
-      {"",}, 
-      {"long",         0,      st_C_typespec},
-      {"@protocol",    0,      st_C_objprot},
-      {"",}, {"",}, {"",}, 
-      {"explicit",     C_PLPL, st_C_typespec},
-      {"",}, 
-      {"extern",       0,      st_C_typespec},
-      {"extends",      C_JAVA, st_C_javastruct},
-      {"",}, 
-      {"mutable",      C_PLPL, st_C_typespec},
-      {"",}, {"",}, {"",}, {"",}, 
-      {"PSEUDO",               0,      st_C_gnumacro},
-      {"",}, {"",}, {"",}, {"",}, 
-      {"const",        0,      st_C_typespec},
-      {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"@end",                 0,      st_C_objend},
-      {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"@interface",   0,      st_C_objprot},
-      {"",}, {"",}, {"",}, 
-      {"namespace",    C_PLPL, st_C_struct},
-      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-      {"@implementation", 0,   st_C_objimpl},
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {""}, {""}, {""}, {""},
+      {"@end",         0,      st_C_objend},
+      {""}, {""}, {""}, {""},
+      {"ENTRY",                0,      st_C_gnumacro},
+      {"@interface",   0,      st_C_objprot},
+      {""},
+      {"domain",       C_STAR, st_C_struct},
+      {""},
+      {"PSEUDO",               0,      st_C_gnumacro},
+      {""}, {""},
+      {"namespace",    C_PLPL, st_C_struct},
+      {""}, {""},
+      {"@implementation",0,    st_C_objimpl},
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {"long",         0,      st_C_typespec},
+      {"signed",       0,      st_C_typespec},
+      {"@protocol",    0,      st_C_objprot},
+      {""}, {""}, {""}, {""},
+      {"bool",         C_PLPL, st_C_typespec},
+      {""}, {""}, {""}, {""}, {""}, {""},
+      {"const",        0,      st_C_typespec},
+      {"explicit",     C_PLPL, st_C_typespec},
+      {"if",           0,      st_C_ignore},
+      {""},
+      {"operator",     C_PLPL, st_C_operator},
+      {""},
+      {"DEFUN",                0,      st_C_gnumacro},
+      {""}, {""},
+      {"define",       0,      st_C_define},
+      {""}, {""}, {""}, {""}, {""},
+      {"double",       0,      st_C_typespec},
+      {"struct",       0,      st_C_struct},
+      {""}, {""}, {""}, {""},
+      {"short",        0,      st_C_typespec},
+      {""},
+      {"enum",         0,      st_C_enum},
+      {"mutable",      C_PLPL, st_C_typespec},
+      {""},
+      {"extern",       0,      st_C_extern},
+      {"extends",      C_JAVA, st_C_javastruct},
+      {"package",      C_JAVA, st_C_ignore},
+      {"while",                0,      st_C_ignore},
+      {""},
+      {"for",          0,      st_C_ignore},
+      {""}, {""}, {""},
+      {"volatile",     0,      st_C_typespec},
+      {""}, {""},
+      {"import",               C_JAVA, st_C_ignore},
+      {"float",        0,      st_C_typespec},
+      {"switch",               0,      st_C_ignore},
+      {"return",               0,      st_C_ignore},
+      {"implements",   C_JAVA, st_C_javastruct},
+      {""},
+      {"static",       0,      st_C_typespec},
+      {"typedef",      0,      st_C_typedef},
+      {"typename",     C_PLPL, st_C_typespec},
+      {"unsigned",     0,      st_C_typespec},
+      {""}, {""},
+      {"char",         0,      st_C_typespec},
+      {"class",        C_PLPL, st_C_struct},
+      {""}, {""}, {""},
+      {"void",         0,      st_C_typespec},
+      {""}, {""},
+      {"friend",               C_PLPL, st_C_ignore},
+      {""}, {""}, {""},
+      {"int",          0,      st_C_typespec},
+      {"union",        0,      st_C_struct},
+      {""}, {""}, {""},
+      {"auto",         0,      st_C_typespec},
+      {"interface",    C_JAVA, st_C_struct},
+      {""},
+      {"SYSCALL",      0,      st_C_gnumacro}
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -1929,9 +2097,9 @@ in_word_set (str, len)
 
       if (key <= MAX_HASH_VALUE && key >= 0)
         {
-          register char *s = wordlist[key].name;
+          register const char *s = wordlist[key].name;
 
-          if (*s == *str && !strncmp (str + 1, s + 1, len - 1))
+          if (*str == *s && !strncmp (str + 1, s + 1, len - 1))
             return &wordlist[key];
         }
     }
@@ -1939,7 +2107,7 @@ in_word_set (str, len)
 }
 /*%>*/
 
-enum sym_type
+static enum sym_type
 C_symtype (str, len, c_ext)
      char *str;
      int len;
@@ -1968,6 +2136,7 @@ enum
   vignore                      /* var-like: ignore until ';' */
 } fvdef;
 
+bool fvextern;                 /* func or var: extern keyword seen; */
 
  /*
   * typedefs are recognized using a simple finite automaton.
@@ -1976,7 +2145,8 @@ enum
 enum
 {
   tnone,                       /* nothing seen */
-  ttypedseen,                  /* typedef keyword seen */
+  tkeyseen,                    /* typedef keyword seen */
+  ttypeseen,                   /* defined type seen */
   tinbody,                     /* inside typedef body */
   tend,                                /* just before typedef tag */
   tignore                      /* junk after typedef tag */
@@ -2093,7 +2263,7 @@ int methodlen;
  *     next_token_is_func      IN OUT
  */
 
-bool
+static bool
 consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
      register char *str;       /* IN: token pointer */
      register int len;         /* IN: token length */
@@ -2149,20 +2319,20 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
       if (toktype == st_C_typedef)
        {
          if (typedefs)
-           typdef = ttypedseen;
+           typdef = tkeyseen;
+         fvextern = FALSE;
          fvdef = fvnone;
          return FALSE;
        }
       break;
-    case ttypedseen:
+    case tkeyseen:
       switch (toktype)
        {
        case st_none:
        case st_C_typespec:
-         typdef = tend;
-         break;
        case st_C_struct:
        case st_C_enum:
+         typdef = ttypeseen;
          break;
        }
       /* Do not return here, so the structdef stuff has a chance. */
@@ -2196,7 +2366,7 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
       return FALSE;
     case st_C_struct:
     case st_C_enum:
-      if (typdef == ttypedseen
+      if (typdef == tkeyseen
          || (typedefs_and_cplusplus && cblev == 0 && structdef == snone))
        {
          structdef = skeyseen;
@@ -2217,16 +2387,14 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
       return TRUE;
     }
 
-  /* Avoid entering fvdef stuff if typdef is going on. */
   if (typdef != tnone)
-    {
-      definedef = dnone;
-      return FALSE;
-    }
+    definedef = dnone;
 
   /* Detect GNU macros.
 
-     DEFUN note for writers of emacs C code:
+     Writers of emacs code are recommended to put the
+     first two args of a DEFUN on the same line.
+
       The DEFUN macro, used in emacs C source code, has a first arg
      that is a string (the lisp function name), and a second arg that
      is a C function name.  Since etags skips strings, the second arg
@@ -2236,8 +2404,7 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
      removing the initial 'F' character and substituting '-' for '_'.
      Anyway, this assumes that the conventions of naming lisp
      functions will never change.  Currently, this method is not
-     implemented, so writers of emacs code are recommended to put the
-     first two args of a DEFUN on the same line. */
+     implemented. */
   if (definedef == dnone && toktype == st_C_gnumacro)
     {
       next_token_is_func = TRUE;
@@ -2326,11 +2493,15 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
   /* A function, variable or enum constant? */
   switch (toktype)
     {
+    case st_C_extern:
+      fvextern = TRUE;
+      /* FALLTHRU */
     case st_C_typespec:
-      if (fvdef != finlist && fvdef != fignore  && fvdef != vignore)
-        fvdef = fvnone;                /* should be useless */
+      if (fvdef != finlist && fvdef != fignore && fvdef != vignore)
+       fvdef = fvnone;         /* should be useless */
       return FALSE;
     case st_C_ignore:
+      fvextern = FALSE;
       fvdef = vignore;
       return FALSE;
     case st_C_operator:
@@ -2338,6 +2509,12 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
       *is_func_or_var = TRUE;
       return TRUE;
     case st_none:
+      if ((c_ext & C_PLPL) && strneq (str+len-10, "::operator", 10))
+       {
+         fvdef = foperator;
+         *is_func_or_var = TRUE;
+         return TRUE;
+       }
       if (constantypedefs && structdef == sinbody && structtype == st_C_enum)
        return TRUE;
       if (fvdef == fvnone)
@@ -2346,6 +2523,7 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
          *is_func_or_var = TRUE;
          return TRUE;
        }
+      break;
     }
 
   return FALSE;
@@ -2355,7 +2533,7 @@ consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
  * C_entries ()
  *     This routine finds functions, variables, typedefs,
  *     #define's, enum constants and struct/union/enum definitions in
- *     #C syntax and adds them to the list.
+ *     C syntax and adds them to the list.
  */
 #define current_lb_is_new (newndx == curndx)
 #define switch_line_buffers() (curndx = 1 - curndx)
@@ -2390,7 +2568,7 @@ do {                                                                      \
 } while (0)
 
 
-void
+static void
 make_C_tag (isfun)
      bool isfun;
 {
@@ -2434,7 +2612,7 @@ C_entries (c_ext, inf)
   int cblev;                   /* current curly brace level */
   int parlev;                  /* current parenthesis level */
   bool incomm, inquote, inchar, quotednl, midtoken;
-  bool cplpl, cjava;
+  bool purec, cplpl, cjava;
   token savetok;               /* token saved during preprocessor handling */
 
 
@@ -2445,13 +2623,14 @@ C_entries (c_ext, inf)
   lp = curlb.buffer;
   *lp = 0;
 
-  fvdef = fvnone; typdef = tnone; structdef = snone;
-  definedef = dnone; objdef = onone;
+  fvdef = fvnone; fvextern = FALSE; typdef = tnone;
+  structdef = snone; definedef = dnone; objdef = onone;
   next_token_is_func = yacc_rules = FALSE;
   midtoken = inquote = inchar = incomm = quotednl = FALSE;
   tok.valid = savetok.valid = FALSE;
   cblev = 0;
   parlev = 0;
+  purec = !(c_ext & ~YACC);    /* no extensions (apart from possibly yacc) */
   cplpl = (c_ext & C_PLPL) == C_PLPL;
   cjava = (c_ext & C_JAVA) == C_JAVA;
   if (cjava)
@@ -2530,12 +2709,18 @@ C_entries (c_ext, inf)
          case '"':
            inquote = TRUE;
            if (fvdef != finlist && fvdef != fignore && fvdef !=vignore)
-             fvdef = fvnone;
+             {
+               fvextern = FALSE;
+               fvdef = fvnone;
+             }
            continue;
          case '\'':
            inchar = TRUE;
            if (fvdef != finlist && fvdef != fignore && fvdef !=vignore)
-             fvdef = fvnone;
+             {
+               fvextern = FALSE;
+               fvdef = fvnone;
+             }
            continue;
          case '/':
            if (*lp == '*')
@@ -2556,7 +2741,7 @@ C_entries (c_ext, inf)
              {
                /* entering or exiting rules section in yacc file */
                lp++;
-               definedef = dnone; fvdef = fvnone;
+               definedef = dnone; fvdef = fvnone; fvextern = FALSE;
                typdef = tnone; structdef = snone;
                next_token_is_func = FALSE;
                midtoken = inquote = inchar = incomm = quotednl = FALSE;
@@ -2598,7 +2783,7 @@ C_entries (c_ext, inf)
       if ((definedef != dnone
           || (cblev == 0 && structdef != scolonseen)
           || (cblev == 1 && cplpl && structdef == sinbody)
-          || (structdef == sinbody && structtype == st_C_enum))
+          || (structdef == sinbody && purec))
          && typdef != tignore
          && definedef != dignorerest
          && fvdef != finlist)
@@ -2607,42 +2792,46 @@ C_entries (c_ext, inf)
            {
              if (endtoken (c))
                {
-                 if (c == ':' && cplpl && *lp == ':' && begtoken(*(lp + 1)))
+                 bool funorvar = FALSE;
+
+                 if (c == ':' && cplpl && *lp == ':' && begtoken (lp[1]))
                    {
                      /*
                       * This handles :: in the middle, but not at the
-                      * beginning of an identifier.
+                      * beginning of an identifier.  Also, space-separated
+                      * :: is not recognised.
                       */
                      lp += 2;
-                     toklen += 3;
+                     toklen += 2;
+                     c = lp[-1];
+                     goto intok;
                    }
                  else
                    {
-                     bool funorvar = FALSE;
-
                      if (yacc_rules
                          || consider_token (newlb.buffer + tokoff, toklen, c,
                                             c_ext, cblev, parlev, &funorvar))
                        {
+                         if (fvdef == foperator)
+                           {
+                             char *oldlp = lp;
+                             lp = skip_spaces (lp-1);
+                             if (*lp != '\0')
+                               lp += 1;
+                             while (*lp != '\0'
+                                    && !isspace (*lp) && *lp != '(')
+                               lp += 1;
+                             c = *lp++;
+                             toklen += lp - oldlp;
+                           }
                          tok.named = FALSE;
-                         if (structdef == sinbody
+                         if (!purec
+                             && funorvar
                              && definedef == dnone
-                             && funorvar)
+                             && structdef == sinbody)
                            /* function or var defined in C++ class body */
                            {
-                             int len;
-                             if (fvdef == foperator)
-                               {
-                                 char *oldlp = lp;
-                                 lp = skip_spaces (lp-1);
-                                 while (*lp != '\0'
-                                        && !isspace (*lp) && *lp != '(')
-                                   lp += 1;
-                                 c = *lp++;
-                                 toklen += lp - oldlp;
-                               }
-
-                             len = strlen (structtag) + qlen + toklen;
+                             int len = strlen (structtag) + qlen + toklen;
                              grow_linebuffer (&token_name, len + 1);
                              strcpy (token_name.buffer, structtag);
                              strcat (token_name.buffer, qualifier);
@@ -2677,11 +2866,15 @@ C_entries (c_ext, inf)
                                       newlb.buffer + tokoff, toklen);
                              token_name.buffer[toklen] = '\0';
                              token_name.len = toklen;
-                             /* Name macros. */
+                             /* Name macros and members. */
                              tok.named = (structdef == stagseen
+                                          || typdef == ttypeseen
                                           || typdef == tend
                                           || (funorvar
-                                              && definedef == dignorerest));
+                                              && definedef == dignorerest)
+                                          || (funorvar
+                                              && definedef == dnone
+                                              && structdef == sinbody));
                            }
                          tok.lineno = lineno;
                          tok.linelen = tokoff + toklen + 1;
@@ -2706,6 +2899,7 @@ C_entries (c_ext, inf)
                    }
                } /* if (endtoken (c)) */
              else if (intoken (c))
+               intok:
                {
                  toklen++;
                  continue;
@@ -2781,6 +2975,7 @@ C_entries (c_ext, inf)
                  }
                break;
              case fstartlist:
+               fvextern = FALSE;
                fvdef = fvnone;
                break;
              }
@@ -2802,10 +2997,19 @@ C_entries (c_ext, inf)
            case fignore:
              break;
            case fvnameseen:
-             if ((globals && cblev == 0) || (members && cblev == 1))
+             if ((members && cblev == 1)
+                 || (globals && cblev == 0 && (!fvextern || declarations)))
                make_C_tag (FALSE); /* a variable */
+             fvextern = FALSE;
+             fvdef = fvnone;
+             tok.valid = FALSE;
+             break;
+           case flistseen:
+             if (declarations && (cblev == 0 || cblev == 1))
+               make_C_tag (TRUE); /* a function declaration */
              /* FALLTHRU */
            default:
+             fvextern = FALSE;
              fvdef = fvnone;
              /* The following instruction invalidates the token.
                 Probably the token should be invalidated in all
@@ -2834,7 +3038,8 @@ C_entries (c_ext, inf)
            case vignore:
              break;
            case fvnameseen:
-             if ((globals && cblev == 0) || (members && cblev == 1))
+             if ((members && cblev == 1)
+                 || (globals && cblev == 0 && (!fvextern || declarations)))
                make_C_tag (FALSE); /* a variable */
              break;
            default:
@@ -2860,7 +3065,8 @@ C_entries (c_ext, inf)
            case vignore:
              break;
            case fvnameseen:
-             if ((globals && cblev == 0) || (members && cblev == 1))
+             if ((members && cblev == 1)
+                 || (globals && cblev == 0 && (!fvextern || declarations)))
                make_C_tag (FALSE); /* a variable */
              /* FALLTHRU */
            default:
@@ -2876,23 +3082,19 @@ C_entries (c_ext, inf)
            objdef = oparenseen;
          switch (fvdef)
            {
-           case fvnone:
-             switch (typdef)
-               {
-               case ttypedseen:
-               case tend:
-                 if (tok.valid && *lp != '*')
-                   {
-                     /* This handles constructs like:
-                        typedef void OperatorFun (int fun); */
-                     make_C_tag (FALSE);
-                     typdef = tignore;
-                   }
-                 break;
-               } /* switch (typdef) */
-             break;
-           case foperator:     /* operator() is not handled */
            case fvnameseen:
+             if (typdef == ttypeseen
+                 && tok.valid
+                 && *lp != '*'
+                 && structdef != sinbody)
+               {
+                 /* This handles constructs like:
+                    typedef void OperatorFun (int fun); */
+                 make_C_tag (FALSE);
+                 typdef = tignore;
+               }
+             /* FALLTHRU */
+           case foperator:
              fvdef = fstartlist;
              break;
            case flistseen:
@@ -2918,7 +3120,7 @@ C_entries (c_ext, inf)
                  fvdef = flistseen;
                  break;
                }
-             if (cblev == 0 && typdef == tend)
+             if (cblev == 0 && (typdef == tend))
                {
                  typdef = tignore;
                  make_C_tag (FALSE); /* a typedef */
@@ -2930,7 +3132,7 @@ C_entries (c_ext, inf)
        case '{':
          if (definedef != dnone)
            break;
-         if (typdef == ttypedseen)
+         if (typdef == ttypeseen)
            typdef = tinbody;
          switch (structdef)
            {
@@ -3015,7 +3217,8 @@ C_entries (c_ext, inf)
            case vignore:
              break;
            case fvnameseen:
-             if ((globals && cblev == 0) || (members && cblev == 1))
+             if ((members && cblev == 1)
+                 || (globals && cblev == 0 && (!fvextern || declarations)))
                make_C_tag (FALSE); /* a variable */
              /* FALLTHRU */
            default:
@@ -3114,7 +3317,7 @@ Yacc_entries (inf)
   C_entries (YACC, inf);
 }
 \f
-/* A useful macro. */  
+/* A useful macro. */
 #define LOOP_ON_INPUT_LINES(file_pointer, line_buffer, char_pointer)   \
   for (lineno = charno = 0;    /* loop initialization */               \
        !feof (file_pointer)    /* loop test */                         \
@@ -3142,15 +3345,15 @@ just_read_file (inf)
 \f
 /* Fortran parsing */
 
-bool
+static bool
 tail (cp)
      char *cp;
 {
   register int len = 0;
 
-  while (*cp && lowcase(*cp) == lowcase(dbp[len]))
+  while (*cp != '\0' && lowcase (*cp) == lowcase (dbp[len]))
     cp++, len++;
-  if (*cp == '\0' && !intoken(dbp[len]))
+  if (*cp == '\0' && !intoken (dbp[len]))
     {
       dbp += len;
       return TRUE;
@@ -3181,7 +3384,7 @@ takeprec ()
   while (isdigit (*dbp));
 }
 
-void
+static void
 getit (inf)
      FILE *inf;
 {
@@ -3199,11 +3402,9 @@ getit (inf)
       dbp += 6;
       dbp = skip_spaces (dbp);
     }
-  if (!isalpha (*dbp)
-      && *dbp != '_'
-      && *dbp != '$')
+  if (!isalpha (*dbp) && *dbp != '_' && *dbp != '$')
     return;
-  for (cp = dbp + 1; *cp && intoken (*cp); cp++)
+  for (cp = dbp + 1; *cp != '\0' && intoken (*cp); cp++)
     continue;
   pfnote (savenstr (dbp, cp-dbp), TRUE,
          lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
@@ -3268,10 +3469,6 @@ Fortran_functions (inf)
          if (tail ("entry"))
            getit (inf);
          continue;
-       case 'p':
-         if (tail ("program") || tail ("procedure"))
-           getit (inf);
-         continue;
        case 'b':
          if (tail ("blockdata") || tail ("block data"))
            {
@@ -3288,6 +3485,171 @@ Fortran_functions (inf)
 }
 \f
 /*
+ * Philippe Waroquiers <philippe.waroquiers@eurocontrol.be>, 1998-04-24
+ * Ada parsing
+ */
+/* Once we are positioned after an "interesting" keyword, let's get
+   the real tag value necessary. */
+static void
+adagetit (inf, name_qualifier)
+     FILE *inf;
+     char *name_qualifier;
+{
+  register char *cp;
+  char *name;
+  char c;
+
+  while (!feof (inf))
+    {
+      dbp = skip_spaces (dbp);
+      if (*dbp == '\0'
+         || (dbp[0] == '-' && dbp[1] == '-'))
+       {
+         lineno++;
+         linecharno = charno;
+         charno += readline (&lb, inf);
+         dbp = lb.buffer;
+       }
+      switch (*dbp)
+        {
+        case 'b':
+        case 'B':
+          if (tail ("body"))
+            {
+              /* Skipping body of   procedure body   or   package body or ....
+                resetting qualifier to body instead of spec. */
+              name_qualifier = "/b";
+              continue;
+            }
+          break;
+        case 't':
+        case 'T':
+          /* Skipping type of   task type   or   protected type ... */
+          if (tail ("type"))
+            continue;
+          break;
+        }
+      if (*dbp == '"')
+       {
+         dbp += 1;
+         for (cp = dbp; *cp != '\0' && *cp != '"'; cp++)
+           continue;
+       }
+      else
+       {
+         dbp = skip_spaces (dbp);
+         for (cp = dbp;
+              (*cp != '\0'
+               && (isalpha (*cp) || isdigit (*cp) || *cp == '_' || *cp == '.'));
+              cp++)
+           continue;
+         if (cp == dbp)
+           return;
+       }
+      c = *cp;
+      *cp = '\0';
+      name = concat (dbp, name_qualifier, "");
+      *cp = c;
+      pfnote (name, TRUE, lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
+      if (c == '"')
+       dbp = cp + 1;
+      return;
+    }
+}
+
+void
+Ada_funcs (inf)
+     FILE *inf;
+{
+  bool inquote = FALSE;
+
+  LOOP_ON_INPUT_LINES (inf, lb, dbp)
+    {
+      while (*dbp != '\0')
+       {
+         /* Skip a string i.e. "abcd". */
+         if (inquote || (*dbp == '"'))
+           {
+             dbp = etags_strchr ((inquote) ? dbp : dbp+1, '"');
+             if (dbp != NULL)
+               {
+                 inquote = FALSE;
+                 dbp += 1;
+                 continue;     /* advance char */
+               }
+             else
+               {
+                 inquote = TRUE;
+                 break;        /* advance line */
+               }
+           }
+
+         /* Skip comments. */
+         if (dbp[0] == '-' && dbp[1] == '-')
+           break;              /* advance line */
+
+         /* Skip character enclosed in single quote i.e. 'a'
+            and skip single quote starting an attribute i.e. 'Image. */
+         if (*dbp == '\'')
+           {
+             dbp++ ;
+             if (*dbp != '\0')
+               dbp++;
+             continue;
+           }
+
+         /* Search for beginning of a token.  */
+         if (!begtoken (*dbp))
+           {
+             dbp++;
+             continue;         /* advance char */
+           }
+
+         /* We are at the beginning of a token. */
+         switch (*dbp)
+           {
+           case 'f':
+           case 'F':
+             if (!packages_only && tail ("function"))
+               adagetit (inf, "/f");
+             else
+               break;          /* from switch */
+             continue;         /* advance char */
+           case 'p':
+           case 'P':
+             if (!packages_only && tail ("procedure"))
+               adagetit (inf, "/p");
+             else if (tail ("package"))
+               adagetit (inf, "/s");
+             else if (tail ("protected")) /* protected type */
+               adagetit (inf, "/t");
+             else
+               break;          /* from switch */
+             continue;         /* advance char */
+           case 't':
+           case 'T':
+             if (!packages_only && tail ("task"))
+               adagetit (inf, "/k");
+             else if (typedefs && !packages_only && tail ("type"))
+               {
+                 adagetit (inf, "/t");
+                 while (*dbp != '\0')
+                   dbp += 1;
+               }
+             else
+               break;          /* from switch */
+             continue;         /* advance char */
+           }
+
+         /* Look for the end of the token. */
+         while (!endtoken (*dbp))
+           dbp++;
+
+       } /* advance char */
+    } /* advance line */
+}
+\f
+/*
  * Bob Weiner, Motorola Inc., 4/3/94
  * Unix and microcontroller assembly tag handling
  * look for '^[a-zA-Z_.$][a-zA_Z0-9_.$]*[: ^I^J]'
@@ -3311,7 +3673,7 @@ Asm_labels (inf)
          if (*cp == ':' || isspace (*cp))
            {
              /* Found end of label, so copy it and add it to the table. */
-             pfnote ((CTAGS) ? savenstr(lb.buffer, cp-lb.buffer) : NULL, TRUE,
+             pfnote (savenstr(lb.buffer, cp-lb.buffer), TRUE,
                      lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
            }
        }
@@ -3345,7 +3707,7 @@ Perl_functions (inf)
                cp++;
              pfnote (savenstr (sp, cp-sp), TRUE,
                      lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
-           }         
+           }
        }
        else if (globals                /* only if tagging global vars is enabled */
                && ((cp = lb.buffer,
@@ -3377,7 +3739,7 @@ Perl_functions (inf)
              while (*cp != '\0' && *cp != ';' && *cp != '=' &&  *cp != ')')
                cp++;
            }
+
          /* Perhaps I should back cp up one character, so the TAGS table
             doesn't mention (and so depend upon) the following char. */
          pfnote ((CTAGS) ? savenstr (lb.buffer, cp-lb.buffer) : varname,
@@ -3498,8 +3860,8 @@ Pascal_functions (inf)
   inparms = FALSE;             /* found '(' after "proc"            */
   verify_tag = FALSE;          /* check if "extern" is ahead        */
 
-  
-  while (!feof (inf))          /* long main loop to get next char */  
+
+  while (!feof (inf))          /* long main loop to get next char */
     {
       c = *dbp++;
       if (c == '\0')           /* if end of line */
@@ -3640,7 +4002,7 @@ Pascal_functions (inf)
  * lisp tag functions
  *  look for (def or (DEF, quote or QUOTE
  */
-int
+static int
 L_isdef (strp)
      register char *strp;
 {
@@ -3649,7 +4011,7 @@ L_isdef (strp)
          && (strp[3] == 'f' || strp[3] == 'F'));
 }
 
-int
+static int
 L_isquote (strp)
      register char *strp;
 {
@@ -3661,7 +4023,7 @@ L_isquote (strp)
          && isspace (*++strp));
 }
 
-void
+static void
 L_getit ()
 {
   register char *cp;
@@ -3678,7 +4040,7 @@ L_getit ()
   }
 
   for (cp = dbp /*+1*/;
-       *cp != '\0' && *cp != '(' && *cp != ' ' && *cp != ')';
+       *cp != '\0' && *cp != '(' && !isspace(*cp) && *cp != ')';
        cp++)
     continue;
   if (cp == dbp)
@@ -3731,8 +4093,10 @@ Lisp_functions (inf)
  * Postscript tag functions
  * Just look for lines where the first character is '/'
  * Richard Mlynarik <mly@adoc.xerox.com>
+ * Also look at "defineps" for PSWrap
+ * suggested by Masatake YAMATO <masata-y@is.aist-nara.ac.jp>
  */
-void 
+void
 Postscript_functions (inf)
      FILE *inf;
 {
@@ -3746,9 +4110,15 @@ Postscript_functions (inf)
               *ep != '\0' && *ep != ' ' && *ep != '{';
               ep++)
            continue;
-         pfnote ((CTAGS) ? savenstr (bp, ep-bp) : NULL, TRUE,
+         pfnote (savenstr (bp, ep-bp), TRUE,
                  lb.buffer, ep - lb.buffer + 1, lineno, linecharno);
        }
+      else if (strneq (bp, "defineps", 8))
+       {
+         bp = skip_non_spaces (bp);
+         bp = skip_spaces (bp);
+         get_tag (bp);
+       }
     }
 }
 
@@ -3761,54 +4131,38 @@ Postscript_functions (inf)
  * look for (set! xyzzy
  */
 
-void get_scheme ();
-
 void
 Scheme_functions (inf)
      FILE *inf;
 {
-  LOOP_ON_INPUT_LINES (inf, lb, dbp)
+  register char *bp;
+
+  LOOP_ON_INPUT_LINES (inf, lb, bp)
     {
-      if (dbp[0] == '('
-         && (dbp[1] == 'D' || dbp[1] == 'd')
-         && (dbp[2] == 'E' || dbp[2] == 'e')
-         && (dbp[3] == 'F' || dbp[3] == 'f'))
+      if (bp[0] == '('
+         && (bp[1] == 'D' || bp[1] == 'd')
+         && (bp[2] == 'E' || bp[2] == 'e')
+         && (bp[3] == 'F' || bp[3] == 'f'))
        {
-         dbp = skip_non_spaces (dbp);
+         bp = skip_non_spaces (bp);
          /* Skip over open parens and white space */
-         while (isspace (*dbp) || *dbp == '(')
-           dbp++;
-         get_scheme ();
+         while (isspace (*bp) || *bp == '(')
+           bp++;
+         get_tag (bp);
        }
-      if (dbp[0] == '('
-         && (dbp[1] == 'S' || dbp[1] == 's')
-         && (dbp[2] == 'E' || dbp[2] == 'e')
-         && (dbp[3] == 'T' || dbp[3] == 't')
-         && (dbp[4] == '!' || dbp[4] == '!')
-         && (isspace (dbp[5])))
+      if (bp[0] == '('
+         && (bp[1] == 'S' || bp[1] == 's')
+         && (bp[2] == 'E' || bp[2] == 'e')
+         && (bp[3] == 'T' || bp[3] == 't')
+         && (bp[4] == '!' || bp[4] == '!')
+         && (isspace (bp[5])))
        {
-         dbp = skip_non_spaces (dbp);
-         dbp = skip_spaces (dbp);
-         get_scheme ();
+         bp = skip_non_spaces (bp);
+         bp = skip_spaces (bp);
+         get_tag (bp);
        }
     }
 }
-
-void
-get_scheme ()
-{
-  register char *cp;
-
-  if (*dbp == '\0')
-    return;
-  /* Go till you get to white space or a syntactic break */
-  for (cp = dbp + 1;
-       *cp != '\0' && *cp != '(' && *cp != ')' && !isspace (*cp);
-       cp++)
-    continue;
-  pfnote (savenstr (dbp, cp-dbp), TRUE,
-         lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
-}
 \f
 /* Find tags in TeX and LaTeX input files.  */
 
@@ -3830,9 +4184,9 @@ char *TEX_defenv = "\
 :chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
 :part:appendix:entry:index";
 
-void TEX_mode ();
-struct TEX_tabent *TEX_decode_env ();
-int TEX_Token ();
+void TEX_mode (FILE *inf);
+struct TEX_tabent *TEX_decode_env (char *evarname, char *defenv);
+int TEX_Token (char *cp);
 
 char TEX_esc = '\\';
 char TEX_opgrp = '{';
@@ -3996,11 +4350,11 @@ TEX_Token (cp)
  * Prolog support (rewritten) by Anders Lindgren, Mar. 96
  *
  * Assumes that the predicate starts at column 0.
- * Only the first clause of a predicate is added. 
+ * Only the first clause of a predicate is added.
  */
-int prolog_pred ();
-void prolog_skip_comment ();
-int prolog_atom ();
+int prolog_pred (char *s, char *last);
+void prolog_skip_comment (linebuffer *plb, FILE *inf);
+int prolog_atom (char *s, int pos);
 
 void
 Prolog_functions (inf)
@@ -4091,8 +4445,7 @@ prolog_pred (s, last)
          || len != (int)strlen (last)
          || !strneq (s, last, len))
        {
-         pfnote ((CTAGS) ? savenstr (s, len) : NULL, TRUE,
-                 s, pos, lineno, linecharno);
+         pfnote (savenstr (s, len), TRUE, s, pos, lineno, linecharno);
          return len;
        }
     }
@@ -4131,7 +4484,7 @@ prolog_atom (s, pos)
     {
       pos++;
 
-      while (1) 
+      while (1)
        {
          if (s[pos] == '\'')
            {
@@ -4158,16 +4511,16 @@ prolog_atom (s, pos)
     return -1;
 }
 \f
-/* 
+/*
  * Support for Erlang  --  Anders Lindgren, Feb 1996.
  *
  * Generates tags for functions, defines, and records.
  *
  * Assumes that Erlang functions start at column 0.
  */
-int erlang_func ();
-void erlang_attribute ();
-int erlang_atom ();
+int erlang_func (char *s, char *last);
+void erlang_attribute (char *s);
+int erlang_atom (char *s, int pos);
 
 void
 Erlang_functions (inf)
@@ -4198,7 +4551,7 @@ Erlang_functions (inf)
        }
       else if ((len = erlang_func (cp, last)) > 0)
        {
-         /* 
+         /*
           * Function.  Store the function name so that we only
           * generates a tag for the first clause.
           */
@@ -4245,8 +4598,7 @@ erlang_func (s, last)
          || len != (int)strlen (last)
          || !strneq (s, last, len)))
        {
-         pfnote ((CTAGS) ? savenstr (s, len) : NULL, TRUE,
-                 s, pos, lineno, linecharno);
+         pfnote (savenstr (s, len), TRUE, s, pos, lineno, linecharno);
          return len;
        }
 
@@ -4255,7 +4607,7 @@ erlang_func (s, last)
 
 
 /*
- * Handle attributes.  Currently, tags are generated for defines 
+ * Handle attributes.  Currently, tags are generated for defines
  * and records.
  *
  * They are on the form:
@@ -4273,12 +4625,12 @@ erlang_attribute (s)
   if (strneq (s, "-define", 7) || strneq (s, "-record", 7))
     {
       pos = skip_spaces (s + 7) - s;
-      if (s[pos++] == '(') 
+      if (s[pos++] == '(')
        {
          pos = skip_spaces (s + pos) - s;
          len = erlang_atom (s, pos);
          if (len != 0)
-           pfnote ((CTAGS) ? savenstr (& s[pos], len) : NULL, TRUE,
+           pfnote (savenstr (& s[pos], len), TRUE,
                    s, pos + len, lineno, linecharno);
        }
     }
@@ -4311,7 +4663,7 @@ erlang_atom (s, pos)
     {
       pos++;
 
-      while (1) 
+      while (1)
        {
          if (s[pos] == '\'')
            {
@@ -4344,7 +4696,7 @@ erlang_atom (s, pos)
    an unquoted separator.  Also turns "\t" into a Tab character.
    Returns pointer to terminating separator.  Works in place.  Null
    terminates name string. */
-char *
+static char *
 scan_separators (name)
      char *name;
 {
@@ -4384,8 +4736,9 @@ scan_separators (name)
 /* Look at the argument of --regex or --no-regex and do the right
    thing.  Same for each line of a regexp file. */
 void
-analyse_regex (regex_arg)
+analyse_regex (regex_arg, ignore_case)
      char *regex_arg;
+     bool ignore_case;
 {
   if (regex_arg == NULL)
     free_patterns ();          /* --no-regex: remove existing regexps */
@@ -4416,7 +4769,7 @@ analyse_regex (regex_arg)
          }
        initbuffer (&regexbuf);
        while (readline_internal (&regexbuf, regexfp) > 0)
-         analyse_regex (regexbuf.buffer);
+         analyse_regex (regexbuf.buffer, ignore_case);
        free (regexbuf.buffer);
        fclose (regexfp);
       }
@@ -4439,13 +4792,13 @@ analyse_regex (regex_arg)
        lang = get_language_from_name (lang_name);
        if (lang == NULL)
          return;
-       add_regex (cp + 1, lang);
+       add_regex (cp + 1, ignore_case, lang);
       }
       break;
 
       /* Regexp to be used for any language. */
     default:
-      add_regex (regex_arg, NULL);
+      add_regex (regex_arg, ignore_case, NULL);
       break;
     }
 }
@@ -4453,8 +4806,9 @@ analyse_regex (regex_arg)
 /* Turn a name, which is an ed-style (but Emacs syntax) regular
    expression, into a real regular expression by compiling it. */
 void
-add_regex (regexp_pattern, lang)
+add_regex (regexp_pattern, ignore_case, lang)
      char *regexp_pattern;
+     bool ignore_case;
      language *lang;
 {
   char *name;
@@ -4477,7 +4831,8 @@ add_regex (regexp_pattern, lang)
   (void) scan_separators (name);
 
   patbuf = xnew (1, struct re_pattern_buffer);
-  patbuf->translate = NULL;
+  /* Translation table to fold case if appropriate. */
+  patbuf->translate = (ignore_case) ? lc_trans : NULL;
   patbuf->fastmap = NULL;
   patbuf->buffer = NULL;
   patbuf->allocated = 0;
@@ -4503,7 +4858,7 @@ add_regex (regexp_pattern, lang)
  * Do the substitutions indicated by the regular expression and
  * arguments.
  */
-char *
+static char *
 substitute (in, out, regs)
      char *in, *out;
      struct re_registers *regs;
@@ -4567,6 +4922,23 @@ free_patterns ()
   return;
 }
 \f
+void
+get_tag (bp)
+     register char *bp;
+{
+  register char *cp;
+
+  if (*bp == '\0')
+    return;
+  /* Go till you get to white space or a syntactic break */
+  for (cp = bp + 1;
+       *cp != '\0' && *cp != '(' && *cp != ')' && !isspace (*cp);
+       cp++)
+    continue;
+  pfnote (savenstr (bp, cp-bp), TRUE,
+         lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
+}
+
 #endif /* ETAGS_REGEXPS */
 /* Initialize a linebuffer for use */
 void
@@ -4704,7 +5076,7 @@ readline (lbp, stream)
          }
       }
 #endif /* ETAGS_REGEXPS */
-  
+
   return result;
 }
 \f
@@ -4830,7 +5202,7 @@ suggest_asking_for_help ()
 /* Print error message.  `s1' is printf control string, `s2' is arg for it. */
 void
 error (s1, s2)
-     char *s1, *s2;
+     const char *s1, *s2;
 {
   fprintf (stderr, "%s: ", progname);
   fprintf (stderr, s1, s2);
@@ -4919,6 +5291,10 @@ relative_filename (file, dir)
   while (*fp++ == *dp++)
     continue;
   fp--, dp--;                  /* back to the first differing char */
+#ifdef DOS_NT
+  if (fp == afn && afn[0] != '/') /* cannot build a relative name */
+    return afn;
+#endif
   do                           /* look at the equal chars until '/' */
     fp--, dp--;
   while (*fp != '/');
@@ -4993,7 +5369,7 @@ absolute_filename (file, dir)
 
       slashp = etags_strchr (slashp + 1, '/');
     }
-  
+
   if (res[0] == '\0')
     return savestr ("/");
   else
@@ -5041,6 +5417,10 @@ canonicalize_filename (fn)
      register char *fn;
 {
 #ifdef DOS_NT
+  /* Canonicalize drive letter case.  */
+  if (islower (fn[0]))
+    fn[0] = toupper (fn[0]);
+  /* Convert backslashes to slashes.  */
   for (; *fn != '\0'; fn++)
     if (*fn == '\\')
       *fn = '/';
index 8400550..6b1364e 100644 (file)
@@ -73,7 +73,7 @@ main ()
 #ifdef SYSV_IPC
 
 int ipc_qid = 0;               /* ipc message queue id */
-int ipc_wpid = 0;              /* watchdog task pid */
+pid_t ipc_wpid = 0;            /* watchdog task pid */
 
 
 /*
@@ -111,7 +111,7 @@ ipc_spawn_watchdog (void)
 {
   if ((ipc_wpid = fork ()) == 0)
     { /* child process */
-      int ppid = getppid ();   /* parent's process id */
+      pid_t ppid = getppid (); /* parent's process id */
 
       setpgrp();               /* gnu kills process group on exit */
 
index 9d1563a..c1eb776 100755 (executable)
@@ -2,8 +2,8 @@
 ### gzip-el.sh --- compress superfluous installed source lisp
 
 # Author:      Jeff Miller <jmiller@smart.net>
-# Author:      Hrvoje Niksic <hniksic@srce.hr>
-# Maintainer:  Steve Baur <steve@altair.xemacs.org>
+# Author:      Hrvoje Niksic <hniksic@xemacs.org>
+# Maintainer:  Steve Baur <steve@xemacs.org>
 # Created:     13 Feb 1997
 # Version:     1.0
 # Keywords:    internal
index ee56e65..9eb1ffe 100644 (file)
@@ -58,6 +58,7 @@ REAL="$EMACS_DIR/`basename $EMACS`"
 echo "Rebuilding autoloads in $CANON_PWD"
 echo "          with $REAL..."
 
+#### echon really sucks!
 if [ "`uname -r | sed 's/\(.\).*/\1/'`" -gt 4 ]; then
   echon()
   {
index 9a3c4fc..d3b49d9 100644 (file)
@@ -1,3 +1,35 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
+1999-11-18  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * minibuf.el (read-coding-system): Accept symbol and
+       coding-system object as a default-coding-system.
+
+1999-11-16  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * minibuf.el (read-coding-system): Accept symbol as
+       a default-coding-system.
+
+1999-10-06  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * apropos.el (apropos-documentation): Use insert instead
+       of princ.
+
+1999-11-07  William M. Perry  <wmperry@aventail.com>
+
+       * gpm.el: New gpm-minor-mode to turn GPM mouse support on & off
+         for the linux console.
+
+       * mouse.el (mouse-consolidated-yank): Allow the mouse-yanking
+         stuff to work when you are not on a window system, since the GPM
+         mouse support now allows pasting from outside of XEmacs.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
index 9fcddb2..d76b533 100644 (file)
@@ -4,7 +4,7 @@
 
 ;; Keywords: extensions
 ;; Version: 2.4
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 
 ;; This file is part of XEmacs.
 
@@ -25,8 +25,8 @@
 
 ;;; Synched up with: Not in FSF.
 
-;; Original code: Jamie Zawinski <jwz@netscape.com>
-;; Text: Ben Wing <ben@xemacs.org>, Jamie Zawinski <jwz@netscape.com>
+;; Original code: Jamie Zawinski <jwz@jwz.org>
+;; Text: Ben Wing <ben@xemacs.org>, Jamie Zawinski <jwz@jwz.org>
 ;; Hard: Amiga 1000, Progressive Peripherals Frame Grabber.
 ;; Soft: FG 2.0, DigiPaint 3.0, pbmplus (dec 91), xv 3.0.
 ;; Modified for 19.11 by Eduardo Pelegri-Llopart <pelegri@eng.sun.com>
@@ -35,7 +35,7 @@
 ;; 19.13 and 19.14 updating done by Chuck Thompson.
 ;; 19.15 and 20.0 updating done by Steve Baur and Martin Buchholz.
 
-;; Completely rewritten for 20.3 by Hrvoje Niksic <hniksic@srce.hr>.
+;; Completely rewritten for 20.3 by Hrvoje Niksic <hniksic@xemacs.org>.
 ;; The original had no version numbers; I numbered the rewrite as 2.0.
 
 ;; Many things in this file are to gag.  Ideally, we should just use
 (defvar xemacs-hackers
   '((ajc      "Andrew Cosgriff"   "ajc@bing.wattle.id.au")
     (baw      "Barry Warsaw"      "bwarsaw@python.org")
-    (bw       "Bob Weiner"        "weiner@altrasoft.com")
+    (bw       "Bob Weiner"        "weiner@beopen.com")
     (chr      "Christian Nybø"    "chr@mediascience.no")
     (cthomp   "Chuck Thompson"    "cthomp@xemacs.org")
     (dmoore   "David Moore"       "dmoore@ucsd.edu")
     (dkindred "Darrell Kindred"          "dkindred@cmu.edu")
     (dv       "Didier Verna"      "verna@inf.enst.fr")
-    (hniksic  "Hrvoje Niksic"     "hniksic@srce.hr")
+    (hniksic  "Hrvoje Niksic"     "hniksic@xemacs.org")
     (jareth   "Jareth Hein"       "jareth@camelot.co.jp")
     (jason    "Jason Mastaler"   "jason@xemacs.org")
     (jens     "Jens Lautenbacher" "jens@lemcbed.lem.uni-karlsruhe.de")
     (jmiller  "Jeff Miller"       "jmiller@smart.net")
     (juhp     "Jens-Ulrik Holger Petersen" "petersen@kurims.kyoto-u.ac.jp")
-    (jwz      "Jamie Zawinski"    "jwz@netscape.com")
+    (jwz      "Jamie Zawinski"    "jwz@jwz.org")
     (kazz     "IENAGA Kazuyuki"   "ienaga@jsys.co.jp")
     (kyle     "Kyle Jones"        "kyle_jones@wonderworks.com")
     (larsi    "Lars Magne Ingebrigtsen" "larsi@gnus.org")
 ;; It is preferred to a simple string, because it makes maintenance
 ;; easier.  Please add new URLs to this list.
 (defvar about-url-alist
-  '((ajc       . "http://www-personal.monash.edu.au/~ajc/")
-    (altrasoft . "http://www.altrasoft.com/")
-    (ben       . "http://www.666.com/ben/")
+  '((ajc        . "http://www-personal.monash.edu.au/~ajc/")
+    (beopen     . "http://www.beopen.com/")
+    (ben        . "http://www.666.com/ben/")
     (ben-xemacs . "http://www.666.com/xemacs/")
-    (baw       . "http://www.python.org/~bwarsaw/")
-    (cc-mode   . "http://www.python.org/ftp/emacs/")
-    (chr       . "http://www.xemacs.org/faq/")
-    (dkindred  . "http://www.cs.cmu.edu/People/dkindred/me.html")
-    (dmoore    . "http://oj.egbt.org/dmoore/")
-    (jason     . "http://www.mastaler.com/")
-    (juhp      . "http://www.kurims.kyoto-u.ac.jp/~petersen/")
-    (jwz       . "http://people.netscape.com/jwz/")
-    (kazz      . "http://www.imasy.or.jp/~kazz/")
-    (kyle      . "http://www.wonderworks.com/kyle/")
-    (larsi     . "http://www.ifi.uio.no/~larsi/")
-    (marcpa    . "http://www.positron911.com/products/power.htm")
-    (ograf     . "http://www.fga.de/~ograf/")
-    (pez       . "http://www.dwwc.com/")
-    (piper     . "http://www.xemacs.freeserve.co.uk/")
-    (vin       . "http://www.upa.org/")
-    (stigb     . "http://www.tihlde.hist.no/~stigb/")
-    (wget      . "ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/")
-    (xemacs    . "http://www.xemacs.org/"))
+    (baw        . "http://www.python.org/~bwarsaw/")
+    (cc-mode    . "http://www.python.org/ftp/emacs/")
+    (chr        . "http://www.xemacs.org/faq/")
+    (dkindred   . "http://www.cs.cmu.edu/People/dkindred/me.html")
+    (dmoore     . "http://oj.egbt.org/dmoore/")
+    (jason      . "http://www.mastaler.com/")
+    (juhp       . "http://www.kurims.kyoto-u.ac.jp/~petersen/")
+    (jwz        . "http://www.jwz.org/")
+    (kazz       . "http://www.imasy.or.jp/~kazz/")
+    (kyle       . "http://www.wonderworks.com/kyle/")
+    (larsi      . "http://www.ifi.uio.no/~larsi/")
+    (marcpa     . "http://www.positron911.com/products/power.htm")
+    (ograf      . "http://www.fga.de/~ograf/")
+    (pez        . "http://www.dwwc.com/")
+    (piper      . "http://www.xemacs.freeserve.co.uk/")
+    (vin        . "http://www.upa.org/")
+    (stigb      . "http://www.tihlde.hist.no/~stigb/")
+    (wget       . "ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/")
+    (xemacs     . "http://www.xemacs.org/"))
   "Some of the more important URLs.")
 
 (defvar about-left-margin 3)
@@ -717,12 +717,12 @@ MS Windows operating systems.\n"))
      (widget-insert "\
 Author of the Hyperbole everyday information management hypertext
 system and the OO-Browser multi-language code browser.  He also
-designed the Altrasoft InfoDock integrated development environment
+designed the BeOpen InfoDock integrated development environment
 for software engineers.  It runs atop XEmacs and is available from
-his firm, Altrasoft, which offers distributions, custom development,
+his firm, BeOpen, which offers distributions, custom development,
 support, and training packages for corporate users of XEmacs, GNU
 Emacs and InfoDock.  See ")
-     (about-url-link 'altrasoft "Visit Altrasoft WWW page")
+     (about-url-link 'beopen "Visit BeOpen WWW page")
      (widget-insert ".
 
 His interests include user interfaces, information management,
@@ -1063,9 +1063,9 @@ to cygwin under MS-Windows.\n")
     (about-show-linked-info 'bw "\
 Author of the Hyperbole everyday information management hypertext
 system and the OO-Browser multi-language code browser.  He also
-designed the Altrasoft InfoDock integrated development environment
+designed the BeOpen InfoDock integrated development environment
 for software engineers.  It runs atop XEmacs and is available from
-his firm, Altrasoft, which offers custom development and support packages
+his firm, BeOpen, which offers custom development and support packages
 for corporate users of XEmacs, GNU Emacs and InfoDock.  His interests
 include user interfaces, information management, CASE tools,
 communications and enterprise integration.\n")
index 5839194..f324ab0 100644 (file)
@@ -4,7 +4,7 @@
 
 ;; Author: Joe Wells <jbw@bigbird.bu.edu>
 ;; Rewritten: Daniel.Pfeiffer@Informatik.START.dbp.de, fax (+49 69) 7588-2389
-;; Maintainer: SL Baur <steve@altair.xemacs.org>
+;; Maintainer: SL Baur <steve@xemacs.org>
 ;; Keywords: help
 
 ;; This file is part of XEmacs.
@@ -377,7 +377,7 @@ Returns list of symbols and documentation found."
 
 (defun apropos-documentation-check-doc-file ()
   (let (type symbol (sepa 2) sepb beg end)
-    (princ ?\^_)
+    (insert ?\^_)
     (backward-char)
     (insert-file-contents (concat doc-directory internal-doc-file-name))
     (forward-char)
index 01510e5..eceb685 100644 (file)
@@ -572,7 +572,9 @@ If VARIABLE has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value." t nil)
+`:prompt-value' property of that widget will be used for reading the value.
+
+If given a prefix (or a COMMENT argument), also prompt for a comment." t nil)
 
 (autoload 'customize-set-variable "cus-edit" "\
 Set the default for VARIABLE to VALUE.  VALUE is a Lisp object.
@@ -587,7 +589,9 @@ If VARIABLE has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value. " t nil)
+`:prompt-value' property of that widget will be used for reading the value.
+
+If given a prefix (or a COMMENT argument), also prompt for a comment." t nil)
 
 (autoload 'customize-save-variable "cus-edit" "\
 Set the default for VARIABLE to VALUE, and save it for future sessions.
@@ -601,7 +605,9 @@ If VARIABLE has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value. " t nil)
+`:prompt-value' property of that widget will be used for reading the value.
+
+If given a prefix (or a COMMENT argument), also prompt for a comment." t nil)
 
 (autoload 'customize "cus-edit" "\
 Select a customization buffer which you can use to set user options.
@@ -698,7 +704,7 @@ The format is suitable for use with `easy-menu-define'." nil nil)
 
 ;;;***
 \f
-;;;### (autoloads (custom-set-faces custom-set-face-update-spec custom-declare-face) "cus-face" "lisp/cus-face.el")
+;;;### (autoloads (custom-reset-faces custom-theme-reset-faces custom-theme-face-value custom-theme-set-faces custom-set-faces custom-set-face-update-spec custom-declare-face) "cus-face" "lisp/cus-face.el")
 
 (autoload 'custom-declare-face "cus-face" "\
 Like `defface', but FACE is evaluated as a normal argument." nil nil)
@@ -709,15 +715,35 @@ Customize the FACE for display types matching DISPLAY, merging
 
 (autoload 'custom-set-faces "cus-face" "\
 Initialize faces according to user preferences.
+This asociates the setting with the USER theme.
 The arguments should be a list where each entry has the form:
 
-  (FACE SPEC [NOW])
+  (FACE SPEC [NOW [COMMENT]])
 
 SPEC will be stored as the saved value for FACE.  If NOW is present
 and non-nil, FACE will also be created according to SPEC.
+COMMENT is a string comment about FACE.
 
 See `defface' for the format of SPEC." nil nil)
 
+(autoload 'custom-theme-set-faces "cus-face" "\
+Initialize faces according to settings specified by args.
+Records the settings as belonging to THEME.
+
+See `custom-set-faces' for a description of the arguments ARGS." nil nil)
+
+(autoload 'custom-theme-face-value "cus-face" "\
+Return spec of FACE in THEME if the THEME modifies the
+FACE.  Nil otherwise." nil nil)
+
+(autoload 'custom-theme-reset-faces "cus-face" nil nil nil)
+
+(autoload 'custom-reset-faces "cus-face" "\
+Reset the value of the face to values previously defined.
+Assosiate this setting with the 'user' theme.
+
+ARGS is defined as for `custom-theme-reset-faces'" nil nil)
+
 ;;;***
 \f
 ;;;### (autoloads (disassemble) "disass" "lisp/disass.el")
@@ -1057,11 +1083,11 @@ This can take a while for large buffers." t nil)
 
 ;;;***
 \f
-;;;### (autoloads (mswindows-font-menu-weight-constructor font-menu-size-constructor font-menu-family-constructor reset-device-font-menus) "font-menu" "lisp/font-menu.el")
+;;;### (autoloads (font-menu-weight-constructor font-menu-size-constructor font-menu-family-constructor reset-device-font-menus) "font-menu" "lisp/font-menu.el")
 
-(defcustom font-menu-ignore-scaled-fonts nil "*If non-nil, then the font menu will try to show only bitmap fonts." :type 'boolean :group 'x)
+(defcustom font-menu-ignore-scaled-fonts nil "*If non-nil, then the font menu will try to show only bitmap fonts." :type 'boolean :group 'font-menu)
 
-(defcustom font-menu-this-frame-only-p nil "*If non-nil, then changing the default font from the font menu will only\naffect one frame instead of all frames." :type 'boolean :group 'x)
+(defcustom font-menu-this-frame-only-p nil "*If non-nil, then changing the default font from the font menu will only\naffect one frame instead of all frames." :type 'boolean :group 'font-menu)
 
 (fset 'install-font-menus 'reset-device-font-menus)
 
@@ -1077,7 +1103,7 @@ or if you change your font path, you can call this to re-initialize the menus."
 
 (autoload 'font-menu-size-constructor "font-menu" nil nil nil)
 
-(autoload 'mswindows-font-menu-weight-constructor "font-menu" nil nil nil)
+(autoload 'font-menu-weight-constructor "font-menu" nil nil nil)
 
 ;;;***
 \f
@@ -1262,7 +1288,7 @@ If you don't like the lazy invocation of this function, you can add it to
 when they are selected for the first time.  If you add fonts to your system, 
 or if you change your font path, you can call this to re-initialize the menus." nil nil)
 
-(defun* mswindows-font-menu-font-data (face dcache) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match mswindows-font-regexp name) (setq family (capitalize (match-string 1 name))) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match mswindows-font-regexp truename)) (setq family (capitalize (match-string 1 truename))) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from font-menu-font-data (make-vector 5 nil))) (when (string-match mswindows-font-regexp name) (setq weight (capitalize (match-string 2 name))) (setq size (string-to-int (match-string 4 name)))) (when (string-match mswindows-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (capitalize (match-string 2 truename)))) (when (not (member size (aref entry 2))) (setq size (string-to-int (match-string 4 truename)))) (setq slant (capitalize (match-string 5 truename)))) (vector entry family size weight slant)))
+(defun* mswindows-font-menu-font-data (face dcache) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match mswindows-font-regexp name) (setq family (match-string 1 name)) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match mswindows-font-regexp truename)) (setq family (match-string 1 truename)) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from mswindows-font-menu-font-data (make-vector 5 nil))) (when (string-match mswindows-font-regexp name) (setq weight (match-string 2 name)) (setq size (string-to-int (match-string 4 name)))) (when (string-match mswindows-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (match-string 2 truename))) (when (not (member size (aref entry 2))) (setq size (string-to-int (match-string 4 truename)))) (setq slant (match-string 5 truename))) (vector entry family size weight slant)))
 
 ;;;***
 \f
@@ -1335,6 +1361,8 @@ recent to least recent -- in other words, the version names don't have to
 be lexically ordered.  It is debatable if it makes sense to have more than
 one version of a package available.")
 
+(defcustom package-get-download-sites '(("xemacs.org" "ftp.xemacs.org" "pub/xemacs/packages") ("cso.uiuc.edu" "ftp.cso.uiuc.edu" "pub/packages/xemacs/packages") ("unicamp.br" "ftp.unicamp.br" "pub/xemacs/packages") ("sunsite.cnlab-switch.ch" "sunsite.cnlab-switch.ch" "mirror/xemacs/packages") ("tu-darmstadt.de" "ftp.tu-darmstadt.de" "pub/editors/xemacs/packages") ("sunsite.auc.dk" "sunsite.auc.dk" "pub/emacs/xemacs/packages") ("pasteur.fr" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("cenatls.cena.dgac.fr" "ftp.cenatls.cena.dgac.fr" "pub/Emacs/xemacs/packages") ("kfki.hu" "ftp.kfki.hu" "pub/packages/xemacs/packages") ("uniroma2.it" "ftp.uniroma2.it" "unix/misc/dist/XEMACS/packages") ("icm.edu.pl" "ftp.icm.edu.pl" "pub/unix/editors/xemacs/packages") ("sunet.se" "ftp.sunet.se" "pub/gnu/xemacs/packages") ("doc.ic.ac.uk" "sunsite.doc.ic.ac.uk" "packages/xemacs/packages") ("srcc.msu.su" "ftp1.srcc.msu.su" "mirror/ftp.xemacs.org/packages") ("usyd.edu.au" "ftp.usyd.edu.au" "pub/Xemacs/packages") ("netlab.is.tsukuba.ac.jp" "ftp.netlab.is.tsukuba.ac.jp" "pub/GNU/xemacs/packages") ("jaist.ac.jp" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages") ("ring.aist.go.jp" "ring.aist.go.jp" "pub/text/xemacs/packages") ("ring.asahi-net.or.jp" "ring.asahi-net.or.jp" "pub/text/xemacs/packages") ("SunSITE.sut.ac.jp" "SunSITE.sut.ac.jp" "pub/archives/packages/xemacs/packages") ("dti.ad.jp" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") ("kreonet.re.kr" "ftp.kreonet.re.kr" "pub/tools/emacs/xemacs/packages")) "*List of remote sites available for downloading packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site.  SITE-NAME\nis the internet address of the download site.  DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Package download sites" :type '(repeat (list hostname directory)) :group 'package-get)
+
 (autoload 'package-get-download-menu "package-get" "\
 Build the `Add Download Site' menu." nil nil)
 
@@ -1512,29 +1540,38 @@ they are not defaultly assigned to keys." t nil)
 
 ;;;***
 \f
-;;;### (autoloads (clear-rectangle string-rectangle open-rectangle insert-rectangle yank-rectangle kill-rectangle extract-rectangle delete-extract-rectangle delete-rectangle) "rect" "lisp/rect.el")
+;;;### (autoloads (clear-rectangle string-rectangle open-rectangle insert-rectangle yank-rectangle extract-rectangle delete-extract-rectangle delete-rectangle kill-rectangle) "rect" "lisp/rect.el")
+
+(defvar killed-rectangle nil "\
+Rectangle for `yank-rectangle' to insert.")
+
+(autoload 'kill-rectangle "rect" "\
+Delete the region-rectangle and save it as the last killed one.
+You might prefer to use `delete-extract-rectangle' from a program.
+
+When called from a program, the rectangle's corners are START and END.
+With a prefix (or FILL) argument, also fill lines where nothing has to be
+deleted." t nil)
 
 (autoload 'delete-rectangle "rect" "\
-Delete (don't save) text in rectangle with point and mark as corners.
+Delete the text in the region-rectangle without saving it.
 The same range of columns is deleted in each line starting with the line
-where the region begins and ending with the line where the region ends." t nil)
+where the region begins and ending with the line where the region ends.
+
+When called from a program, the rectangle's corners are START and END.
+With a prefix (or FILL) argument, also fill lines where nothing has to be
+deleted." t nil)
 
 (autoload 'delete-extract-rectangle "rect" "\
-Delete contents of rectangle and return it as a list of strings.
-Arguments START and END are the corners of the rectangle.
-The value is list of strings, one for each line of the rectangle." nil nil)
+Delete the contents of the rectangle with corners at START and END, and
+return it as a list of strings, one for each line of the rectangle.
 
-(autoload 'extract-rectangle "rect" "\
-Return contents of rectangle with corners at START and END.
-Value is list of strings, one for each line of the rectangle." nil nil)
+With an optional FILL argument, also fill lines where nothing has to be
+deleted." nil nil)
 
-(defvar killed-rectangle nil "\
-Rectangle for yank-rectangle to insert.")
-
-(autoload 'kill-rectangle "rect" "\
-Delete rectangle with corners at point and mark; save as last killed one.
-Calling from program, supply two args START and END, buffer positions.
-But in programs you might prefer to use `delete-extract-rectangle'." t nil)
+(autoload 'extract-rectangle "rect" "\
+Return the contents of the rectangle with corners at START and END,
+as a list of strings, one for each line of the rectangle." nil nil)
 
 (autoload 'yank-rectangle "rect" "\
 Yank the last killed rectangle with upper left corner at point." t nil)
@@ -1548,21 +1585,26 @@ After this command, the mark is at the upper left corner
 and point is at the lower right corner." nil nil)
 
 (autoload 'open-rectangle "rect" "\
-Blank out rectangle with corners at point and mark, shifting text right.
-The text previously in the region is not overwritten by the blanks,
-but instead winds up to the right of the rectangle." t nil)
+Blank out the region-rectangle, shifting text right.
+
+When called from a program, the rectangle's corners are START and END.
+With a prefix (or FILL) argument, fill with blanks even if there is no text
+on the right side of the rectangle." t nil)
 
 (autoload 'string-rectangle "rect" "\
 Insert STRING on each line of the region-rectangle, shifting text right.
-The left edge of the rectangle specifies the column for insertion.
-This command does not delete or overwrite any existing text.
+The left edge of the rectangle specifies the column for insertion. This
+command does not delete or overwrite any existing text.
 
-Called from a program, takes three args; START, END and STRING." t nil)
+When called from a program, the rectangle's corners are START and END." t nil)
 
 (autoload 'clear-rectangle "rect" "\
-Blank out rectangle with corners at point and mark.
-The text previously in the region is overwritten by the blanks.
-When called from a program, requires two args which specify the corners." t nil)
+Blank out the region-rectangle.
+The text previously in the region is overwritten with blanks.
+
+When called from a program, the rectangle's corners are START and END.
+With a prefix (or FILL) argument, also fill with blanks the parts of the
+rectangle which were empty." t nil)
 
 ;;;***
 \f
@@ -1767,7 +1809,7 @@ If you don't like the lazy invocation of this function, you can add it to
 when they are selected for the first time.  If you add fonts to your system, 
 or if you change your font path, you can call this to re-initialize the menus." nil nil)
 
-(defun* x-font-menu-font-data (face dcache) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match x-font-regexp-foundry-and-family name) (setq family (capitalize (match-string 1 name))) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match x-font-regexp-foundry-and-family truename)) (setq family (capitalize (match-string 1 truename))) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from font-menu-font-data (make-vector 5 nil))) (when (string-match x-font-regexp name) (setq weight (capitalize (match-string 1 name))) (setq size (string-to-int (match-string 6 name)))) (when (string-match x-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (capitalize (match-string 1 truename)))) (when (not (member size (aref entry 2))) (setq size (string-to-int (match-string 6 truename)))) (setq slant (capitalize (match-string 2 truename)))) (vector entry family size weight slant)))
+(defun* x-font-menu-font-data (face dcache) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match x-font-regexp-foundry-and-family name) (setq family (capitalize (match-string 1 name))) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match x-font-regexp-foundry-and-family truename)) (setq family (capitalize (match-string 1 truename))) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from x-font-menu-font-data (make-vector 5 nil))) (when (string-match x-font-regexp name) (setq weight (capitalize (match-string 1 name))) (setq size (string-to-int (match-string 6 name)))) (when (string-match x-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (capitalize (match-string 1 truename)))) (when (not (member size (aref entry 2))) (setq size (string-to-int (match-string 6 truename)))) (setq slant (capitalize (match-string 2 truename)))) (vector entry family size weight slant)))
 
 ;;;***
 \f
index bbda85d..ec7fdae 100644 (file)
@@ -79,7 +79,7 @@
 ;;; Acknowledgement:
 
 ;; This code is loosely derived from autosave-in-tmp.el by Jamie
-;; Zawinski <jwz@netscape.com> (the version I had was last modified 22
+;; Zawinski <jwz@jwz.org> (the version I had was last modified 22
 ;; dec 90 jwz) and code submitted to ange-ftp-lovers on Sun, 5 Apr
 ;; 92 23:20:47 EDT by drw@BOURBAKI.MIT.EDU (Dale R. Worley).
 ;; auto-save.el tries to cover the functionality of those two
index 1232603..38def61 100644 (file)
@@ -44,7 +44,7 @@
 ;;     (b) ",.foo" is the same as ". ,foo"
 ;;     (c) because RMS isn't interested in using this version of backquote.el
 ;;
-;; wing@666.com; added ,. support back in:
+;; ben@xemacs.org added ,. support back in:
 ;;     (a) yes, it is in CLtl2.  Read closely on page 529.
 ;;     (b) RMS in 19.30 adds C support for ,. even if it's not really
 ;;         handled.
index 95e7cb4..9d34537 100644 (file)
@@ -2,7 +2,7 @@
 
 ;;; Copyright (c) 1991, 1994 Free Software Foundation, Inc.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;;     Hallvard Furuseth <hbf@ulrik.uio.no>
 ;; Keywords: internal
 
index 95d8c31..f146c69 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1992, 1997 Free Software Foundation, Inc.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;; Author: Hallvard Furuseth <hbf@ulrik.uio.no>
 ;; Maintainer: XEmacs Development Team
 ;; Keywords: internal, dumped
index 1ce8d27..727ba8a 100644 (file)
@@ -3,7 +3,7 @@
 ;;; Copyright (C) 1985-1987, 1991-1994 Free Software Foundation, Inc.
 ;;; Copyright (C) 1996 Ben Wing.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;;     Hallvard Furuseth <hbf@ulrik.uio.no>
 ;; Keywords: internal
 
index 9596ff7..59c1567 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1998 by Free Software Foundation, Inc.
 
-;; Author: SL Baur <steve@altair.xemacs.org>
+;; Author: SL Baur <steve@xemacs.org>
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
index 8a05073..cf9fa27 100644 (file)
@@ -4,8 +4,8 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>, then
 ;;         Richard Stallman <rms@gnu.ai.mit.edu>, then
-;;         Hrvoje Niksic <hniksic@srce.hr>       (rewritten for XEmacs)
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;;         Hrvoje Niksic <hniksic@xemacs.org>       (rewritten for XEmacs)
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
index 4db1128..897dd49 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: help, faces
 ;; Version: 1.9960-x
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
index 18f2d38..36e2d32 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: help, faces
 ;; Version: 1.9960-x
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
index 28bef12..67796a8 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1997 by Free Software Foundation, Inc.
 
-;; Author: Steven L Baur <steve@altair.xemacs.org>
+;; Author: Steven L Baur <steve@xemacs.org>
 ;; Keywords: internal, help, faces
 
 ;; This file is part of XEmacs.
index 54b38b3..a5b0c03 100644 (file)
@@ -15,7 +15,7 @@
 (custom-add-loads 'menu '("menubar-items"))
 (custom-add-loads 'minibuffer '("simple" "minibuf"))
 (custom-add-loads 'log-message '("simple"))
-(custom-add-loads 'environment '("frame" "keydefs" "minibuf" "modeline" "window-xemacs" "menubar" "x-init" "toolbar-items" "cus-edit" "gnuserv" "sound"))
+(custom-add-loads 'environment '("frame" "keydefs" "minibuf" "modeline" "window-xemacs" "menubar" "gutter-items" "x-init" "toolbar-items" "cus-edit" "gnuserv" "sound"))
 (custom-add-loads 'sound '("sound"))
 (custom-add-loads 'pui '("package-ui"))
 (custom-add-loads 'terminals '("gnuserv"))
 (custom-add-loads 'widget-button '("wid-edit"))
 (custom-add-loads 'paren-blinking '("simple"))
 (custom-add-loads 'find-file '("files"))
-(custom-add-loads 'font-menu '("x-font-menu"))
+(custom-add-loads 'font-menu '("font-menu"))
 (custom-add-loads 'files '("files"))
 (custom-add-loads 'build '("build-report"))
 (custom-add-loads 'font-lock '("font-lock"))
 (custom-add-loads 'external '("process" "cus-edit"))
 (custom-add-loads 'development '("process" "lisp-mode" "cus-edit"))
 (custom-add-loads 'gnuserv '("gnuserv"))
+(custom-add-loads 'gutter '("gutter-items"))
 (custom-add-loads 'fill-comments '("simple"))
 (custom-add-loads 'windows '("window" "window-xemacs"))
 (custom-add-loads 'widget-faces '("wid-edit"))
 (custom-add-loads 'languages '("lisp-mode" "cus-edit" "font-lock"))
 (custom-add-loads 'fill '("simple" "fill"))
 (custom-add-loads 'custom-magic-faces '("cus-edit"))
-(custom-add-loads 'display '("toolbar" "scrollbar" "auto-show"))
+(custom-add-loads 'display '("toolbar" "scrollbar" "gutter-items" "auto-show"))
 (custom-add-loads 'faces '("faces" "cus-edit" "font-lock" "font" "hyper-apropos" "info" "wid-edit"))
 (custom-add-loads 'emacs '("faces" "help" "files" "cus-edit" "package-get"))
 (custom-add-loads 'processes '("process" "gnuserv"))
 (custom-add-loads 'isearch '("isearch-mode"))
 (custom-add-loads 'font-lock-faces '("font-lock"))
 (custom-add-loads 'modeline '("modeline"))
-(custom-add-loads 'editing '("simple" "abbrev" "fill" "mouse" "dragdrop" "cus-edit"))
+(custom-add-loads 'editing '("simple" "abbrev" "fill" "mouse" "cus-edit" "dragdrop"))
 (custom-add-loads 'matching '("simple" "isearch-mode" "hyper-apropos"))
 (custom-add-loads 'i18n '("cus-edit"))
 (custom-add-loads 'info '("toolbar-items" "info"))
-(custom-add-loads 'x '("x-faces" "x-font-menu"))
+(custom-add-loads 'x '("x-faces" "font-menu"))
+(custom-add-loads 'buffers-tab '("gutter-items"))
 
 ;;; custom-load.el ends here
index b27b551..316e925 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: help, faces, dumped
 ;; Version: 1.9960-x
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
index 9992f07..60bef2c 100644 (file)
@@ -3,8 +3,8 @@
 ;;; Copyright (C) 1986, 1991-1994 Free Software Foundation, Inc.
 
 ;; Author: Doug Cutting <doug@csli.stanford.edu>
-;;     Jamie Zawinski <jwz@netscape.com>
-;; Maintainer: Jamie Zawinski <jwz@netscape.com>
+;;     Jamie Zawinski <jwz@jwz.org>
+;; Maintainer: XEmacs Development Team
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
index 00180d6..f727c19 100644 (file)
@@ -52,7 +52,7 @@
 ;; Kyle Jones <kyle_jones@wonderworks.com>
 ;;   added "Exact match, then inexact" code
 ;;   added support for include directive.
-;; Hrvoje Niksic <hniksic@srce.hr>
+;; Hrvoje Niksic <hniksic@xemacs.org>
 ;;   various changes.
 
 \f
index 90fe697..265ce26 100644 (file)
@@ -31,7 +31,7 @@
 ;; This file is dumped with XEmacs.
 
 ;; face implementation #1 (used Lisp vectors and parallel C vectors;
-;; FSFmacs still uses this) authored by Jamie Zawinski <jwz@netscape.com>
+;; FSFmacs still uses this) authored by Jamie Zawinski <jwz@jwz.org>
 ;; pre Lucid-Emacs 19.0.
 
 ;; face implementation #2 (used one face object per frame per face)
index 748cba4..181bcc8 100644 (file)
@@ -33,7 +33,7 @@
 
 ;; 97/3/14 Jareth Hein (jhod@po.iijnet.or.jp) added functions for kinsoku (asian text
 ;; line break processing)
-;; 97/06/11 Steve Baur (steve@altair.xemacs.org) converted broken
+;; 97/06/11 Steve Baur (steve@xemacs.org) converted broken
 ;;  following-char/preceding-char calls to char-after/char-before.
 
 ;;; Code:
index d71c4fa..aba0a22 100644 (file)
@@ -4,7 +4,7 @@
 ;; Copyright (C) 1995 Amdahl Corporation.
 ;; Copyright (C) 1996 Ben Wing.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>, for the LISPM Preservation Society.
+;; Author: Jamie Zawinski <jwz@jwz.org>, for the LISPM Preservation Society.
 ;; Minimally merged with FSF 19.34 by Barry Warsaw <bwarsaw@python.org>
 ;; Then (partially) synched with FSF 19.30, leading to:
 ;; Next Author: RMS
index ee47e85..8da403c 100644 (file)
@@ -3,9 +3,9 @@
 
 ;; Version: 3.11
 ;; Author: Andy Norman (ange@hplb.hpl.hp.com), originally based on server.el
-;;         Hrvoje Niksic <hniksic@srce.hr>
+;;         Hrvoje Niksic <hniksic@xemacs.org>
 ;; Maintainer: Jan Vroonhof <vroonhof@math.ethz.ch>,
-;;             Hrvoje Niksic <hniksic@srce.hr>
+;;             Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: environment, processes, terminals
 
 ;; This file is part of XEmacs.
@@ -73,7 +73,7 @@
 ;; Jan Vroonhof
 ;;     Customized.
 ;;
-;; Hrvoje Niksic <hniksic@srce.hr> May/1997
+;; Hrvoje Niksic <hniksic@xemacs.org> May/1997
 ;;     Completely rewritten.  Now uses `defstruct' and other CL stuff
 ;;     to define clients cleanly.  Many thanks to Dave Gillespie!
 ;;
index abe3bfc..d482b53 100644 (file)
@@ -305,8 +305,8 @@ otherwise it is killed."
   "Return the command invoked by KEY.
 Like `key-binding', but handles menu events and toolbar presses correctly.
 KEY is any value returned by `next-command-event'.
-MENU-FLAG is a symbol that should be set to T if KEY is a menu event,
- or NIL otherwise"
+MENU-FLAG is a symbol that should be set to t if KEY is a menu event,
+ or nil otherwise"
   (let (defn)
     (and menu-flag (set menu-flag nil))
     ;; If the key typed was really a menu selection, grab the form out
index 1e34bfa..b735091 100644 (file)
@@ -60,7 +60,7 @@
 
 ;; ### The maintainer is supposed to be stig, but I haven't seen him
 ;; around for ages.  The real maintainer for the moment is Hrvoje
-;; Niksic <hniksic@srce.hr>.
+;; Niksic <hniksic@xemacs.org>.
 
 ;;; Code:
 
index 50bd40a..dbfe12f 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1992, 1997 Free Software Foundation, Inc.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;; Created: 19-aug-92
 ;; Maintainer: XEmacs Development Team
 ;; Keywords: internal, dumped
index 76feeb2..ab1aa09 100644 (file)
@@ -6,7 +6,7 @@
 ;; Maintainer: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Created: 14 Jul 1992
 ;; Keywords: docs, maint
-;; X-Modified-by: Bob Weiner <weiner@altrasoft.com>, 4/14/95, to support
+;; X-Modified-by: Bob Weiner <weiner@beopen.com>, 4/14/95, to support
 ;;  InfoDock headers.
 ;; X-Bogus-Bureaucratic-Cruft: Gruad will get you if you don't watch out!
 
index e6c0cf8..3b77495 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1985, 1986, 1992-1995, 1997 Free Software Foundation, Inc.
 
 ;; Author: Unknown
-;; Maintainer: Steven L Baur <steve@altair.xemacs.org>
+;; Maintainer: Steven L Baur <steve@xemacs.org>
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
index 4f4f403..0750bc8 100644 (file)
@@ -1108,7 +1108,7 @@ returns a whole bunch of info about a buffer."
   'sort-buffers-menu-by-mode-then-alphabetically
   "*If non-nil, a function to sort the list of buffers in the buffers menu.
 It will be passed two arguments (two buffers to compare) and should return
-T if the first is \"less\" than the second.  One possible value is
+t if the first is \"less\" than the second.  One possible value is
 `sort-buffers-menu-alphabetically'; another is
 `sort-buffers-menu-by-mode-then-alphabetically'."
   :type '(choice (const :tag "None" nil)
index 0061576..d567f42 100644 (file)
@@ -2116,9 +2116,15 @@ On mswindows devices, this uses `mswindows-color-list'."
 (defun read-coding-system (prompt &optional default-coding-system)
   "Read a coding-system (or nil) from the minibuffer.
 Prompting with string PROMPT.
-If the user enters null input, return second argument DEFAULT-CODING-SYSTEM."
+If the user enters null input, return second argument DEFAULT-CODING-SYSTEM.
+DEFAULT-CODING-SYSTEM can be a string, symbol, or coding-system object."
   (intern (completing-read prompt obarray 'find-coding-system t nil nil 
-                          default-coding-system)))
+                          (cond ((symbolp default-coding-system)
+                                 (symbol-name default-coding-system))
+                                ((coding-system-p default-coding-system)
+                                 (symbol-name (coding-system-name default-coding-system)))
+                                (t
+                                 default-coding-system)))))
 
 (defun read-non-nil-coding-system (prompt)
   "Read a non-nil coding-system from the minibuffer.
index 0afebb8..4a0a22c 100644 (file)
@@ -88,7 +88,9 @@ If set to `symbol', double-click will always attempt to highlight a
 the X cutbuffer.  A mark is pushed, so that the inserted text lies
 between point and mark."
   (interactive)
-  (if (not (console-on-window-system-p))
+  (if (and (not (console-on-window-system-p))
+          (and (featurep 'gpm)
+               (not gpm-minor-mode)))
       (yank)
     (push-mark)
     (if (region-active-p)
index deb9efc..31bc242 100644 (file)
@@ -29,7 +29,7 @@
 ;; type of char table.  Some function names / arguments should be
 ;; parallel with syntax tables.
 
-;; Written by Ben Wing <wing@666.com>.  The initialization code
+;; Written by Ben Wing <ben@xemacs.org>.  The initialization code
 ;; at the end of this file comes from Mule.
 ;; Some bugfixes by Jareth Hein <jhod@po.iijnet.or.jp>
 
index b0c44cd..ae0a188 100644 (file)
 
 ;;;###autoload
 (defun ccl-program-p (obj)
-  "T if OBJECT is a valid CCL compiled code."
+  "Return t if OBJECT is a valid CCL compiled code."
   (and (vectorp obj)
        (let ((i 0) (len (length obj)) (flag t))
         (if (> len 1)
index dd51dc7..e889207 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1997 by Free Software Foundation, Inc.
 
-;; Author: SL Baur <steve@altair.xemacs.org>
+;; Author: SL Baur <steve@xemacs.org>
 ;; Keywords: help, internal, mule
 
 ;; This file is part of XEmacs.
index 8bb351c..b67f7e7 100644 (file)
@@ -1,6 +1,6 @@
 ;;; mule-x-init.el --- initialization code for X Windows under MULE
 ;; Copyright (C) 1994 Free Software Foundation, Inc.
-;; Copyright (C) 1996 Ben Wing <wing@666.com>
+;; Copyright (C) 1996 Ben Wing <ben@xemacs.org>
 
 ;; Author: various
 ;; Keywords: mule X11
index d5603ec..aff6025 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1997 by Free Software Foundation, Inc.
 
-;; Author: SL Baur <steve@altair.xemacs.org>
+;; Author: SL Baur <steve@xemacs.org>
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
index a3f3eba..0b70110 100644 (file)
@@ -225,7 +225,7 @@ variable actually used to specify package download sites."
   :group 'package-get)
 
 (defcustom package-get-remove-copy t
-  "*After copying and installing a package, if this is T, then remove the
+  "*After copying and installing a package, if this is t, then remove the
 copy.  Otherwise, keep it around."
   :type 'boolean
   :group 'package-get)
index 4a9aa2c..e3be100 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1998 by Free Software Foundation, Inc.
 
-;; Author: SL Baur <steve@altair.xemacs.org>
+;; Author: SL Baur <steve@xemacs.org>
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
index de7a272..2d1eaf3 100644 (file)
@@ -2,8 +2,8 @@
 
 ;; Copyright (C) 1997 Free Software Foundation, Inc.
 
-;; Author: Steven L Baur <steve@altair.xemacs.org>
-;; Maintainer: Steven L Baur <steve@altair.xemacs.org>
+;; Author: Steven L Baur <steve@xemacs.org>
+;; Maintainer: Steven L Baur <steve@xemacs.org>
 ;; Keywords: internal, lisp, dumped
 
 ;; This file is part of XEmacs.
index 34bcde7..6fa92b3 100644 (file)
@@ -62,7 +62,7 @@
 ;; Mule-2.3, and could probably use some feature additions (like additional wrap
 ;; styles, etc)
 
-;; 97/06/11 Steve Baur (steve@altair.xemacs.org) Convert use of
+;; 97/06/11 Steve Baur (steve@xemacs.org) Convert use of
 ;;  (preceding|following)-char to char-(after|before).
 
 ;;; Code:
@@ -670,7 +670,7 @@ BUFFER defaults to the current buffer."
       cnt)))
 
 ;;; Modified by Bob Weiner, 8/24/95, to print narrowed line number also.
-;;; Expanded by Bob Weiner, Altrasoft, on 02/12/1997
+;;; Expanded by Bob Weiner, BeOpen, on 02/12/1997
 (defun what-line ()
   "Print the following variants of the line number of point:
      Region line     - displayed line within the active region
index 0fa8cc4..f54ed0d 100644 (file)
@@ -1,7 +1,7 @@
 ;;; site-load.el --- Template file for site-wide XEmacs customization
 ;; Copyright (C) 1997 Free Software Foundation, Inc.
 
-;; Author: Steven L. Baur <steve@altair.xemacs.org>
+;; Author: Steven L. Baur <steve@xemacs.org>
 ;; Keywords: internal
 
 ;; This file is part of XEmacs.
index e08bbbc..0e1baeb 100644 (file)
@@ -4,7 +4,7 @@
 ;; Copyright (C) 1995 Amdahl Corporation.
 ;; Copyright (C) 1995 Ben Wing.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;; Maintainer: XEmacs Development Team
 ;; Keywords: extensions, wp, faces, dumped
 
index 48deb50..24ec4e3 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1998 by Free Software Foundation, Inc.
 
-;; Author: SL Baur <steve@altair.xemacs.org>
+;; Author: SL Baur <steve@xemacs.org>
 ;;  Michael Sperber [Mr. Preprocessor] <sperber@Informatik.Uni-Tuebingen.De>
 ;; Keywords: internal, dumped
 
index 270135f..b8eb856 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: extensions
 ;; Version: 1.9960-x
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
index 0586999..6f00faa 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Keywords: help, extensions, faces, hypermedia, dumped
 ;; Version: 1.9960-x
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
index 1500277..40df8e6 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1992, 1993, 1997 Free Software Foundation, Inc.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;; Maintainer: XEmacs Development Team
 ;; Rewritten by Martin Buchholz far too many times.
 ;;
@@ -73,7 +73,7 @@
 ;; work, depending on what system and keyboard you are using.  If it
 ;; doesn't, you'll have to read the man page for xmodmap.  You might want
 ;; to get the "xkeycaps" program from
-;; <URL:http://people.netscape.com/jwz/xkeycaps/>,
+;; <URL:http://www.jwz.org/xkeycaps/>,
 ;; which is a graphical front end to xmodmap
 ;; that hides xmodmap's arcane syntax from you.
 
index 46677cf..491d2c8 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1992-4, 1997 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996 Ben Wing.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;; Maintainer: XEmacs Development Team
 ;; Keywords: extensions, internal, dumped
 
index 8dffa39..54f4c66 100644 (file)
@@ -4,7 +4,7 @@
 ;; Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
 ;; Copyright (C) 1997 Sun Microsystems
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;; Restructured by: Jonathan Stigelman <Stig@hackvan.com>
 ;; Mule-ized by: Martin Buchholz
 ;; More restructuring for MS-Windows by Andy Piper <andy@xemacs.org>
index 38788ce..94457d4 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1992, 1993, 1997 Free Software Foundation, Inc.
 
-;; Author: Jamie Zawinski <jwz@netscape.com>
+;; Author: Jamie Zawinski <jwz@jwz.org>
 ;; Created: 15-jun-92
 ;; Maintainer: XEmacs Development Team
 ;; Keywords: extensions, internal, dumped
index 807f075..fc91207 100644 (file)
@@ -1,3 +1,15 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
+1999-11-26  Martin Buchholz  <martin@xemacs.org>
+
+       * xlwtabs.c: Remove unused variables.  Fix warnings.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
index e58d6fa..99918c7 100644 (file)
@@ -598,73 +598,75 @@ static    Boolean
 TabsSetValues(Widget current, Widget request, Widget new,
        ArgList args, Cardinal *num_args)
 {
-       TabsWidget curtw = (TabsWidget) current ;
-       TabsWidget tw = (TabsWidget) new ;
-       Boolean needRedraw = False ;
-       Widget  *childP ;
-       int     i ;
-
-
-       if( tw->tabs.font != curtw->tabs.font  ||
-           tw->tabs.internalWidth != curtw->tabs.internalWidth ||
-           tw->tabs.internalHeight != curtw->tabs.internalHeight )
-       {
-         tw->tabs.tab_height = 2 * tw->tabs.internalHeight + SHADWID ;
+  TabsWidget curtw = (TabsWidget) current ;
+  TabsWidget tw = (TabsWidget) new ;
+  Boolean      needRedraw = False ;
+  Widget       *childP ;
+  int  i ;
 
-         if( tw->tabs.font != NULL )
-           tw->tabs.tab_height += tw->tabs.font->max_bounds.ascent +
-                                  tw->tabs.font->max_bounds.descent ;
 
-         /* Tab size has changed.  Resize all tabs and request a new size */
-         for(i=0, childP=tw->composite.children;
-               i < tw->composite.num_children;
-               ++i, ++childP)
-           if( XtIsManaged(*childP) )
-             TabWidth(*childP) ;
-         PreferredSize(tw, &tw->core.width, &tw->core.height, NULL,NULL) ;
-         needRedraw = True ;
-         tw->tabs.needs_layout = True ;
-       }
+  if( tw->tabs.font != curtw->tabs.font  ||
+      tw->tabs.internalWidth != curtw->tabs.internalWidth ||
+      tw->tabs.internalHeight != curtw->tabs.internalHeight )
+    {
+      tw->tabs.tab_height = 2 * tw->tabs.internalHeight + SHADWID ;
+
+      if( tw->tabs.font != NULL )
+       tw->tabs.tab_height += tw->tabs.font->max_bounds.ascent +
+         tw->tabs.font->max_bounds.descent ;
+
+      /* Tab size has changed.  Resize all tabs and request a new size */
+      for(i=0, childP=tw->composite.children;
+         i < tw->composite.num_children;
+         ++i, ++childP)
+       if( XtIsManaged(*childP) )
+         TabWidth(*childP) ;
+      PreferredSize(tw, &tw->core.width, &tw->core.height, NULL,NULL) ;
+      needRedraw = True ;
+      tw->tabs.needs_layout = True ;
+    }
 
-       /* TODO: if any color changes, need to recompute GCs and redraw */
+  /* TODO: if any color changes, need to recompute GCs and redraw */
 
-       if( tw->core.background_pixel != curtw->core.background_pixel ||
-           tw->core.background_pixmap != curtw->core.background_pixmap )
-         if( XtIsRealized(new) )
-         {
-           TabsFreeGCs(tw) ;
-           TabsAllocGCs(tw) ;
-           needRedraw = True ;
-         }
+  if( tw->core.background_pixel != curtw->core.background_pixel ||
+      tw->core.background_pixmap != curtw->core.background_pixmap )
+    if( XtIsRealized(new) )
+      {
+       TabsFreeGCs(tw) ;
+       TabsAllocGCs(tw) ;
+       needRedraw = True ;
+      }
 
-       if( tw->core.sensitive != curtw->core.sensitive )
-         needRedraw = True ;
+  if( tw->core.sensitive != curtw->core.sensitive )
+    needRedraw = True ;
 
-       /* If top widget changes, need to change stacking order, redraw tabs.
-        * Window system will handle the redraws.
-        */
+  /* If top widget changes, need to change stacking order, redraw tabs.
+   * Window system will handle the redraws.
+   */
 
-       if( tw->tabs.topWidget != curtw->tabs.topWidget )
-         if( XtIsRealized(tw->tabs.topWidget) )
-         {
-           Widget              w = tw->tabs.topWidget ;
-           TabsConstraints     tab = (TabsConstraints) w->core.constraints ;
+  if( tw->tabs.topWidget != curtw->tabs.topWidget )
+    {
+      if( XtIsRealized(tw->tabs.topWidget) )
+       {
+         Widget                w = tw->tabs.topWidget ;
+         TabsConstraints       tab = (TabsConstraints) w->core.constraints ;
 
-           XRaiseWindow(XtDisplay(w), XtWindow(w)) ;
+         XRaiseWindow(XtDisplay(w), XtWindow(w)) ;
 #ifdef NEED_MOTIF
-           XtVaSetValues(curtw->tabs.topWidget, XmNtraversalOn, False, 0) ;
-           XtVaSetValues(w, XmNtraversalOn, True, 0) ;
+         XtVaSetValues(curtw->tabs.topWidget, XmNtraversalOn, False, 0) ;
+         XtVaSetValues(w, XmNtraversalOn, True, 0) ;
 #endif
 
-           if( tab->tabs.row != tw->tabs.numRows-1 )
-             TabsShuffleRows(tw) ;
+         if( tab->tabs.row != tw->tabs.numRows-1 )
+           TabsShuffleRows(tw) ;
 
-           needRedraw = True ;
-         }
-         else
-           tw->tabs.needs_layout = True ;
+         needRedraw = True ;
+       }
+      else
+       tw->tabs.needs_layout = True ;
+    }
 
-       return needRedraw ;
+  return needRedraw ;
 }
 
 
@@ -1060,7 +1062,6 @@ TabsPage(Widget w, XEvent *event, String *params, Cardinal *num_params)
        Widget          newtop ;
        Widget          *childP ;
        int             idx ;
-       int             i ;
        int             nc = tw->composite.num_children ;
 
        if( nc <= 0 )
@@ -1124,7 +1125,6 @@ TabsHighlight(Widget w, XEvent *event, String *params, Cardinal *num_params)
        Widget          newhl ;
        Widget          *childP ;
        int             idx ;
-       int             i ;
        int             nc = tw->composite.num_children ;
 
        if( nc <= 0 )
@@ -1271,8 +1271,6 @@ void
 XawTabsSetHighlight(Widget t, Widget w)
 {
        TabsWidget      tw = (TabsWidget)t ;
-       TabsConstraints tab ;
-       Widget          oldtop = tw->tabs.topWidget ;
 
        if( !XtIsSubclass(t, tabsWidgetClass) )
          return ;
index 47d4e7e..7f276b8 100644 (file)
@@ -1,3 +1,78 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
+1999-11-26  Martin Buchholz  <martin@xemacs.org>
+
+       * internals.texi (Lstream Functions):
+       * internals.texi (Lstream Methods):
+       Types have changed to size_t and ssize_t.  Document them.
+
+1999-08-12     Gunnar Evermann  <ge204@eng.cam.ac.uk>
+
+       * xemacs-faq.texi (Q4.4.2): added FAQ about Sun Workshop on
+       XEmacs 21
+
+1999-11-15  Martin Buchholz  <martin@xemacs.org>
+
+       * xemacs/programs.texi: Upgrade to etags Version 13.32
+       
+       * Makefile:
+       - Make sure the default target is `info' instead of cl.info.
+       - Use $(INFODIR) consistently where appropriate.
+       - Remove makeinfo-1.68 warning.  (Usually only maintainer rebuilds info).
+       - Comment out unused macros: EMACS EMACSFLAGS
+       - Replace `-rm -f' with `rm -f', XPG4 guarantees exit code == 0.
+       - Get dependencies up to date.
+
+       * internals/Makefile:
+       * xemacs/Makefile:
+       * lispref/Makefile:
+       * new-users-guide/Makefile:
+       * lispref/index.perm:
+       * lispref/index.unperm:
+       * lispref/permute-index:
+       * internals/index.perm:
+       * internals/index.unperm:
+       Remove these Makefiles.
+       Include all functionality in man/Makefile.
+       Support only non-permuted indexes for simplicity.
+
+       * emodules.texi:
+       - TeX doesn't tolerate `_' in variable names; use `-' instead.
+
+       * lispref/commands.texi:
+       * lispref/display.texi:
+       * lispref/faces.texi:
+       * lispref/functions.texi:
+       * lispref/keymaps.texi:
+       * lispref/lists.texi:
+       * lispref/modes.texi:
+       * lispref/objects.texi:
+       * lispref/os.texi:
+       * lispref/sequences.texi:
+       * lispref/strings.texi:
+       * lispref/text.texi:
+       * new-users-guide/custom1.texi:
+       * xemacs/custom.texi:
+       * xemacs/menus.texi:
+       - Make sources compatible with makeinfo 4.0 *and* 3.12.
+       - Replace @sc{ASCII} with @sc{ascii}, etc...
+       - Replace @var{(foo)} with (@var{foo}), etc...
+
+       * info-stnd.texi: Remove.  Who cares about the standalone info reader?
+
+       * texinfo.tex:
+       * texinfo.texi:
+       * info.texi:
+       * standards.texi:
+       * make-stds.texi:
+       Import FSF-maintained files from texinfo-4.0.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
 
 1999-08-23  Stephane Epardaud  <stephane@lunatech.com>
 
-       * internals/internals.texi (Garbage Collection - Step by Step): 
+       * internals/internals.texi (Garbage Collection - Step by Step):
        just added some dots to shut up compile warnings.
 
 1999-08-19  Matthias Neubauer  <neubauer@informatik.uni-tuebingen.de>
index 7ede490..a270d5a 100644 (file)
 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
-# Avoid trouble on systems where the "SHELL" variable might be
-# inherited from the environment.
-SHELL = /bin/sh
-
-EMACS = ../src/xemacs
-EMACSFLAGS = -batch -q -no-site-file 
-
-# NOTE:  You *must* have makeinfo-1.68 or later to rebuild the
-# info tree.
+SHELL    = /bin/sh
 MAKEINFO = makeinfo
 TEXI2DVI = texi2dvi
 
@@ -36,6 +28,8 @@ TEXI2DVI = texi2dvi
 
 RECURSIVE_MAKE = $(MAKE) $(MFLAGS) MAKEINFO='$(MAKEINFO)' TEXI2DVI='$(TEXI2DVI)'
 
+all : info
+
 # Ughhh!  The things we do to have portable makefiles...
 
 INFODIR = ../info
@@ -46,11 +40,15 @@ info_files = \
        $(INFODIR)/emodules.info \
        $(INFODIR)/external-widget.info \
        $(INFODIR)/info.info \
+       $(INFODIR)/lispref.info \
+       $(INFODIR)/internals.info \
+       $(INFODIR)/new-users-guide.info \
        $(INFODIR)/standards.info \
        $(INFODIR)/term.info \
        $(INFODIR)/termcap.info \
        $(INFODIR)/texinfo.info \
        $(INFODIR)/widget.info \
+       $(INFODIR)/xemacs.info \
        $(INFODIR)/xemacs-faq.info
 
 dvi_files = \
@@ -59,103 +57,244 @@ dvi_files = \
        emodules.dvi \
        external-widget.dvi \
        info.dvi \
+       lispref.dvi \
+       internals.dvi \
+       new-users-guide.dvi \
        standards.dvi \
        term.dvi \
        termcap.dvi \
        texinfo.dvi \
        widget.dvi \
+       xemacs.dvi \
        xemacs-faq.dvi
 
-../info/cl.info : cl.texi
-       -$(MAKEINFO) cl.texi -o ../info/cl.info
-
-../info/custom.info : custom.texi
-       -$(MAKEINFO) custom.texi -o ../info/custom.info
-
-../info/emodules.info : emodules.texi
-       -$(MAKEINFO) emodules.texi -o ../info/emodules.info
-
-../info/external-widget.info : external-widget.texi
-       -$(MAKEINFO) external-widget.texi -o ../info/external-widget.info
-
-../info/info.info : info.texi
-       -$(MAKEINFO) info.texi -o ../info/info.info
-
-../info/standards.info : standards.texi
-       -$(MAKEINFO) standards.texi -o ../info/standards.info
-
-../info/term.info : term.texi
-       -$(MAKEINFO) term.texi -o ../info/term.info
-
-../info/termcap.info : termcap.texi
-       -$(MAKEINFO) termcap.texi -o ../info/termcap.info
-
-../info/texinfo.info : texinfo.texi
-       -$(MAKEINFO) texinfo.texi -o ../info/texinfo.info
-
-../info/widget.info : widget.texi
-       -$(MAKEINFO) widget.texi -o ../info/widget.info
-
-../info/xemacs-faq.info : xemacs-faq.texi
-       -$(MAKEINFO) xemacs-faq.texi -o ../info/xemacs-faq.info
-
-
-# ../info/w3.info : w3.texi
-#      -$(MAKEINFO) w3.texi -o ../info/w3.info
-
-# ../info/vm.info : vm.texi
+xemacs-srcs = \
+       xemacs/abbrevs.texi \
+       xemacs/basic.texi \
+       xemacs/buffers.texi \
+       xemacs/building.texi \
+       xemacs/calendar.texi \
+       xemacs/cmdargs.texi \
+       xemacs/custom.texi \
+       xemacs/display.texi \
+       xemacs/entering.texi \
+       xemacs/files.texi \
+       xemacs/fixit.texi \
+       xemacs/frame.texi \
+       xemacs/glossary.texi \
+       xemacs/gnu.texi \
+       xemacs/help.texi \
+       xemacs/indent.texi \
+       xemacs/keystrokes.texi \
+       xemacs/killing.texi \
+       xemacs/m-x.texi \
+       xemacs/major.texi \
+       xemacs/mark.texi \
+       xemacs/menus.texi \
+       xemacs/mini.texi \
+       xemacs/misc.texi \
+       xemacs/mouse.texi \
+       xemacs/mule.texi \
+       xemacs/new.texi \
+       xemacs/packages.texi \
+       xemacs/picture.texi \
+       xemacs/programs.texi \
+       xemacs/reading.texi \
+       xemacs/regs.texi \
+       xemacs/search.texi \
+       xemacs/sending.texi \
+       xemacs/startup.texi \
+       xemacs/text.texi \
+       xemacs/trouble.texi \
+       xemacs/undo.texi \
+       xemacs/windows.texi \
+       xemacs/xemacs.texi
+
+lispref-srcs = \
+       lispref/abbrevs.texi \
+       lispref/annotations.texi \
+       lispref/back.texi \
+       lispref/backups.texi \
+       lispref/buffers.texi \
+       lispref/building.texi \
+       lispref/commands.texi \
+       lispref/compile.texi \
+       lispref/consoles-devices.texi \
+       lispref/control.texi \
+       lispref/customize.texi \
+       lispref/databases.texi \
+       lispref/debugging.texi \
+       lispref/dialog.texi \
+       lispref/display.texi \
+       lispref/dragndrop.texi \
+       lispref/edebug-inc.texi \
+       lispref/edebug.texi \
+       lispref/errors.texi \
+       lispref/eval.texi \
+       lispref/extents.texi \
+       lispref/faces.texi \
+       lispref/files.texi \
+       lispref/frames.texi \
+       lispref/functions.texi \
+       lispref/glyphs.texi \
+       lispref/hash-tables.texi \
+       lispref/help.texi \
+       lispref/hooks.texi \
+       lispref/index.texi \
+       lispref/internationalization.texi \
+       lispref/intro.texi \
+       lispref/keymaps.texi \
+       lispref/ldap.texi \
+       lispref/lispref.texi \
+       lispref/lists.texi \
+       lispref/loading.texi \
+       lispref/locals.texi \
+       lispref/macros.texi \
+       lispref/maps.texi \
+       lispref/markers.texi \
+       lispref/menus.texi \
+       lispref/minibuf.texi \
+       lispref/modes.texi \
+       lispref/mouse.texi \
+       lispref/mule.texi \
+       lispref/numbers.texi \
+       lispref/objects.texi \
+       lispref/os.texi \
+       lispref/positions.texi \
+       lispref/processes.texi \
+       lispref/range-tables.texi \
+       lispref/scrollbars.texi \
+       lispref/searching.texi \
+       lispref/sequences.texi \
+       lispref/specifiers.texi \
+       lispref/streams.texi \
+       lispref/strings.texi \
+       lispref/symbols.texi \
+       lispref/syntax.texi \
+       lispref/text.texi \
+       lispref/tips.texi \
+       lispref/toolbar.texi \
+       lispref/tooltalk.texi \
+       lispref/variables.texi \
+       lispref/windows.texi \
+       lispref/x-windows.texi
+
+internals-srcs = \
+       internals/internals.texi
+
+new-users-guide-srcs = \
+       new-users-guide/custom1.texi \
+       new-users-guide/custom2.texi \
+       new-users-guide/edit.texi \
+       new-users-guide/enter.texi \
+       new-users-guide/files.texi \
+       new-users-guide/help.texi \
+       new-users-guide/modes.texi \
+       new-users-guide/new-users-guide.texi \
+       new-users-guide/region.texi \
+       new-users-guide/search.texi \
+       new-users-guide/xmenu.texi
+
+$(INFODIR)/cl.info : cl.texi
+       $(MAKEINFO) -o $(INFODIR)/cl.info cl.texi
+
+$(INFODIR)/custom.info : custom.texi
+       $(MAKEINFO) -o $(INFODIR)/custom.info custom.texi
+
+$(INFODIR)/emodules.info : emodules.texi
+       $(MAKEINFO) -o $(INFODIR)/emodules.info emodules.texi
+
+$(INFODIR)/external-widget.info : external-widget.texi
+       $(MAKEINFO) -o $(INFODIR)/external-widget.info external-widget.texi
+
+$(INFODIR)/info.info : info.texi
+       $(MAKEINFO) -o $(INFODIR)/info.info info.texi
+
+$(INFODIR)/standards.info : standards.texi
+       $(MAKEINFO) -o $(INFODIR)/standards.info standards.texi
+
+$(INFODIR)/term.info : term.texi
+       $(MAKEINFO) -o $(INFODIR)/term.info term.texi
+
+$(INFODIR)/termcap.info : termcap.texi
+       $(MAKEINFO) -o $(INFODIR)/termcap.info termcap.texi
+
+$(INFODIR)/texinfo.info : texinfo.texi
+       $(MAKEINFO) -o $(INFODIR)/texinfo.info texinfo.texi
+
+$(INFODIR)/widget.info : widget.texi
+       $(MAKEINFO) -o $(INFODIR)/widget.info widget.texi
+
+$(INFODIR)/xemacs-faq.info : xemacs-faq.texi
+       $(MAKEINFO) -o $(INFODIR)/xemacs-faq.info xemacs-faq.texi
+
+# Manuals with their own subdirectory
+$(INFODIR)/xemacs.info : $(xemacs-srcs)
+       $(MAKEINFO) -P xemacs -o $(INFODIR)/xemacs.info xemacs/xemacs.texi
+
+$(INFODIR)/lispref.info : $(lispref-srcs)
+       $(MAKEINFO) -P lispref -o $(INFODIR)/lispref.info lispref/lispref.texi
+
+$(INFODIR)/internals.info : $(internals-srcs)
+       $(MAKEINFO) -P internals -o $(INFODIR)/internals.info internals/internals.texi
+
+$(INFODIR)/new-users-guide.info : $(new-users-guide-srcs)
+       $(MAKEINFO) -P new-users-guide -o $(INFODIR)/new-users-guide.info new-users-guide/new-users-guide.texi
+
+# $(INFODIR)/w3.info : w3.texi
+#      $(MAKEINFO) -o $(INFODIR)/w3.info w3.texi
+
+# EMACS = ../src/xemacs
+# EMACSFLAGS = -batch -q -no-site-file
+
+# $(INFODIR)/vm.info : vm.texi
 #      -$(EMACS) $(EMACSFLAGS) -insert vm.texi -l texinfmt \
 #              -f texinfo-format-buffer -f save-buffer
-#      -mv vm.info* ../info
+#      -mv vm.info* $(INFODIR)/.
 
-# special = # ../info/w3.info ../info/vm.info ../info/texinfo.info
+# special = # $(INFODIR)/vm.info $(INFODIR)/texinfo.info
 
-all: info
+xemacs : $(INFODIR)/xemacs.info
+lispref : $(INFODIR)/lispref.info
+internals : $(INFODIR)/internals.info
+new-users-guide.info : $(INFODIR)/new-users-guide.info
 
-# Subdirectories to make recursively.
-SUBDIR = xemacs lispref new-users-guide internals
-.PHONY: $(SUBDIR)
+.PHONY : xemacs lispref internals new-users-guide info dvi
 
 info : $(info_files)
-       -for d in $(SUBDIR) ; do (cd ./$$d && $(RECURSIVE_MAKE) $@) ; done
-
-.PHONY: info dvi
 
-xemacs: FRC.xemacs
-       -cd ./$@ && $(RECURSIVE_MAKE)
-lispref: FRC.lispref
-       -cd ./$@ && $(RECURSIVE_MAKE)
-new-users-guide: FRC.new-users-guide
-       -cd ./$@ && $(RECURSIVE_MAKE)
-internals: FRC.internals
-       -cd ./$@ && $(RECURSIVE_MAKE)
 # tm: FRC.tm
-#      -cd ./$@ && $(RECURSIVE_MAKE)
+#      cd ./tm && $(RECURSIVE_MAKE)
 # gnats: FRC.gnats
-#      -cd ./$@ && $(RECURSIVE_MAKE)
+#      cd ./gnats && $(RECURSIVE_MAKE)
 # FRC.xemacs FRC.lispref FRC.new-users-guide FRC.internals FRC.tm FRC.gnats:
-FRC.info FRC.dvi FRC.xemacs FRC.lispref FRC.new-users-guide FRC.internals:
 
+.PHONY: info dvi
 
 .texi.dvi:
-       $(TEXI2DVI) $<
+       -$(TEXI2DVI) $<
 
-dvi : $(dvi_files)
-       -for d in $(SUBDIR) ; do (cd ./$${d} && $(RECURSIVE_MAKE) $@) ; done
+xemacs.dvi : $(xemacs-srcs)
+       $(TEXI2DVI) -I xemacs xemacs/xemacs.texi
+
+lispref.dvi : $(lispref-srcs)
+       $(TEXI2DVI) -I lispref lispref/lispref.texi
 
+internals.dvi : $(internals-srcs)
+       $(TEXI2DVI) -I internals internals/internals.texi
+
+new-users-guide.dvi : $(new-users-guide-srcs)
+       $(TEXI2DVI) -I new-users-guide new-users-guide/new-users-guide.texi
+
+dvi : $(dvi_files)
 
 .PHONY: mostlyclean clean distclean realclean extraclean
 mostlyclean:
-       -for d in $(SUBDIR) ; do (cd ./$${d} && $(RECURSIVE_MAKE) $@) ; done
-       rm -f *.toc *.aux *.log *.op \
-             *.cp *.cps *.fn *.fns *.ky *.kys *.pg *.pgs *.vr *.vrs *.tp *.tps
+       rm -f *.toc *.aux *.log *.op *.cp *.cps *.fn *.fns
+       rm -f *.ky *.kys *.pg *.pgs *.tp *.tps *.vr *.vrs
 clean: mostlyclean
-       -for d in $(SUBDIR) ; do (cd ./$${d} && $(RECURSIVE_MAKE) $@) ; done
-       rm -f *.o core *.dvi
+       rm -f core *.dvi
 distclean: clean
-       -for d in $(SUBDIR) ; do (cd ./$${d} && $(RECURSIVE_MAKE) $@) ; done
 realclean: distclean
-       -for d in $(SUBDIR) ; do (cd ./$${d} && $(RECURSIVE_MAKE) $@) ; done
 extraclean: distclean
-       -for d in $(SUBDIR) ; do (cd ./$${d} && $(RECURSIVE_MAKE) $@) ; done
-       -rm -f *~ \#*
+       rm -f *~ \#* */*~ */\#*
index f6afa99..3ec9d63 100644 (file)
 @ifset XEMACS
 @set emacs XEmacs
 @clear EMACS
-@set HAVE_EMACS
+@set HAVE-EMACS
 @end ifset
 
 @ifset EMACS
 @set emacs Emacs
 @clear XEMACS
-@set HAVE_EMACS
+@set HAVE-EMACS
 @end ifset
 
-@ifclear HAVE_EMACS
+@ifclear HAVE-EMACS
 @set XEMACS
 @set emacs XEmacs
 @end ifclear
index def560e..fea0d0d 100644 (file)
@@ -1,9 +1,9 @@
 \input texinfo    @c -*-texinfo-*-
-@comment %**start of header 
+@comment %**start of header
 @setfilename ../info/info.info
-@settitle Info 1.0
-@comment %**end of header 
-@comment $Id: info.texi,v 1.4 1998/06/30 06:35:28 steve Exp $
+@settitle Info
+@comment %**end of header
+@comment $Id: info.texi,v 1.11 1999/04/19 21:37:23 karl Exp $
 
 @dircategory Texinfo documentation system
 @direntry
 @end direntry
 
 @ifinfo
-This file describes how to use Info, 
-the on-line, menu-driven GNU documentation system.
+This file describes how to use Info, the on-line, menu-driven GNU
+documentation system.
 
-Copyright (C) 1989, 92, 96, 97 Free Software Foundation, Inc.
+Copyright (C) 1989, 92, 96, 97, 98, 99 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -44,10 +44,9 @@ by the Free Software Foundation.
 @author Brian Fox
 @page
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1989, 1992, 1993, 1996, 1997 Free Software
+Copyright @copyright{} 1989, 92, 93, 96, 97, 98, 99 Free Software
 Foundation, Inc.
 @sp 2
-
 Published by the Free Software Foundation @*
 59 Temple Place - Suite 330 @*
 Boston, MA 02111-1307, USA.
@@ -67,31 +66,20 @@ except that this permission notice may be stated in a translation approved
 by the Free Software Foundation.
 @end titlepage
 
-@ifinfo
-@node Top, Getting Started, , (dir)
+@ifnottex
+@node Top
 @top Info: An Introduction
 
 Info is a program for reading documentation, which you are using now.
 
 To learn how to use Info, type the command @kbd{h}.  It brings you
 to a programmed instruction sequence.
-
-@c Need to make sure that `Info-help' goes to the right node, 
-@c which is the first node of the first chapter. (It should.) 
-@c   (Info-find-node "info"
-@c                (if (< (window-height) 23)
-@c                    "Help-Small-Screen"
-@c                  "Help")))
-
-To learn advanced Info commands, type @kbd{n} twice.  This brings you to
-@cite{Info for Experts}, skipping over the `Getting Started' chapter.
-@end ifinfo
+@end ifnottex
 
 @menu
 * Getting Started::             Getting started using an Info reader.
 * Advanced Info::               Advanced commands within Info.
-* Create an Info File::         How to make your own Info file.
-* The Standalone Info Program: (info-stnd.info).
+* Creating an Info File::       How to make your own Info file.
 @end menu
 
 @node Getting Started, Advanced Info, Top, Top
@@ -101,7 +89,7 @@ To learn advanced Info commands, type @kbd{n} twice.  This brings you to
 This first part of the Info manual describes how to get around inside
 of Info.  The second part of the manual describes various advanced
 Info commands, and how to write an Info as distinct from a Texinfo
-file.  The third part is about how to generate Info files from 
+file.  The third part is about how to generate Info files from
 Texinfo files.
 
 @iftex
@@ -110,7 +98,7 @@ try Info commands while reading about them.  Reading it on paper is less
 effective, since you must take it on faith that the commands described
 really do what the manual says.  By all means go through this manual now
 that you have it; but please try going through the on-line version as
-well.  
+well.
 
 There are two ways of looking at the online version of this manual:
 
@@ -340,7 +328,7 @@ Info can interpret it.  The beginning of a menu is always identified
 by a line which starts with @samp{* Menu:}.  A node contains a menu if and
 only if it has a line in it which starts that way.  The only menu you
 can use at any moment is the one in the node you are in.  To use a
-menu in any other node, you must move to that node first. 
+menu in any other node, you must move to that node first.
 
   After the start of the menu, each line that starts with a @samp{*}
 identifies one subtopic.  The line usually contains a brief name
@@ -427,16 +415,14 @@ what you have entered.
 not need to type the argument: you just type a Return, and it stands for
 the subtopic of the line you are on.
 
-Here is a menu to give you a chance to practice.
-
-* Menu:    The menu starts here.
-
-This menu gives you three ways of going to one place, Help-FOO.
-
-* Foo:  Help-FOO.       A node you can visit for fun.@*
-* Bar:  Help-FOO.       Strange!  two ways to get to the same place.@*
-* Help-FOO::            And yet another!@*
+Here is a menu to give you a chance to practice.  This menu gives you
+three ways of going to one place, Help-FOO:
 
+@menu
+* Foo:  Help-FOO.       A node you can visit for fun.
+* Bar:  Help-FOO.       Strange!  two ways to get to the same place.
+* Help-FOO::            And yet another!
+@end menu
 
 >>  Now type just an @kbd{m} and see what happens:
 
@@ -559,17 +545,16 @@ to cancel the @samp{f}.
 @c It is an accident of the menu updating command.
 
 @node Help-Cross,  ,  , Help-Adv
-@comment  node-name,  next,  previous,  up
-@unnumberedsubsec The node reached by the cross reference in Info
+@subsection The node reached by the cross reference in Info
 
   This is the node reached by the cross reference named @samp{Cross}.
 
   While this node is specifically intended to be reached by a cross
-reference, most cross references lead to nodes that ``belong''
-someplace else far away in the structure of Info.  So you cannot expect
-the footnote to have a @samp{Next}, @samp{Previous} or @samp{Up} pointing back to
-where you came from.  In general, the @kbd{l} (el) command is the only
-way to get back there.
+reference, most cross references lead to nodes that ``belong'' someplace
+else far away in the structure of Info.  So you cannot expect the
+footnote to have a @samp{Next}, @samp{Previous} or @samp{Up} pointing
+back to where you came from.  In general, the @kbd{l} (el) command is
+the only way to get back there.
 
 >> Type @kbd{l} to return to the node where the cross reference was.
 
@@ -590,15 +575,15 @@ manner.
    @samp{mInfo} and Return, to get to the node about Info and
    see what other help is available.
 
-@node Advanced Info, Create an Info File, Getting Started, Top
-@comment  node-name,  next,  previous,  up
+
+@node Advanced Info
 @chapter Info for Experts
 
 This chapter describes various advanced Info commands, and how to write
 an Info as distinct from a Texinfo file.  (However, in most cases, writing a
 Texinfo file is better, since you can use it @emph{both} to generate an
 Info file and to make a printed manual.  @xref{Top,, Overview of
-Texinfo, texinfo, Texinfo: The GNU Documentation Format}.)
+Texinfo, texinfo, Texinfo}.)
 
 @menu
 * Expert::               Advanced Info commands: g, s, e, and 1 - 5.
@@ -639,12 +624,12 @@ type @kbd{s} followed by the string to search for, terminated by
 @key{RET}.  To search for the same string again, just @kbd{s} followed
 by @key{RET} will do.  The file's nodes are scanned in the order
 they are in in the file, which has no necessary relationship to the
-order that they may be in in the tree structure of menus and @samp{next} pointers.
-But normally the two orders are not very different.  In any case,
-you can always do a @kbd{b} to find out what node you have reached, if
-the header is not visible (this can happen, because @kbd{s} puts your
-cursor at the occurrence of the string, not at the beginning of the
-node).
+order that they may be in in the tree structure of menus and @samp{next}
+pointers.  But normally the two orders are not very different.  In any
+case, you can always do a @kbd{b} to find out what node you have
+reached, if the header is not visible (this can happen, because @kbd{s}
+puts your cursor at the occurrence of the string, not at the beginning
+of the node).
 
 If you grudge the system each character of type-in it requires, you
 might like to use the commands @kbd{1}, @kbd{2}, @kbd{3}, @kbd{4}, ...
@@ -652,9 +637,9 @@ might like to use the commands @kbd{1}, @kbd{2}, @kbd{3}, @kbd{4}, ...
 argument.  @kbd{1} goes through the first item in the current node's
 menu; @kbd{2} goes through the second item, etc.
 
-If you display supports multiple fonts, and you are using Emacs' Info
+If your display supports multiple fonts, and you are using Emacs' Info
 mode to read Info files, the @samp{*} for the fifth menu item is
-underlines, and so is the @samp{*} for the ninth item; these underlines
+underlined, and so is the @samp{*} for the ninth item; these underlines
 make it easy to see at a glance which number to use for an item.
 
 On ordinary terminals, you won't have underlining.  If you need to
@@ -678,12 +663,12 @@ Create some nodes, in some file, to document that topic.
 Put that topic in the menu in the directory.  @xref{Menus, Menu}.
 @end enumerate
 
-Usually, the way to create the nodes is with Texinfo @pxref{Top,, Overview of
-Texinfo, texinfo, Texinfo: The GNU Documentation Format}); this has the
-advantage that you can also make a printed manual from them.  However,
-if you want to edit an Info file, here is how.
+Usually, the way to create the nodes is with Texinfo (@pxref{Top,,
+Overview of Texinfo, texinfo, Texinfo}); this has the advantage that you
+can also make a printed manual from them.  However, if you want to edit
+an Info file, here is how.
 
-  The new node can live in an existing documentation file, or in a new
+The new node can live in an existing documentation file, or in a new
 one.  It must have a @key{^_} character before it (invisible to the
 user; this node has one but you cannot see it), and it ends with either
 a @key{^_}, a @key{^L}, or the end of file.  Note: If you put in a
@@ -693,12 +678,12 @@ Also, a nicer way to make a node boundary be a page boundary as well
 is to put a @key{^L} @emph{right after} the @key{^_}.
 
   The @key{^_} starting a node must be followed by a newline or a
-@key{^L} newline, after which comes the node's header line.  The
-header line must give the node's name (by which Info finds it),
-and state the names of the @samp{Next}, @samp{Previous}, and @samp{Up} nodes (if
-there are any).  As you can see, this node's @samp{Up} node is the node
-@samp{Top}, which points at all the documentation for Info.  The @samp{Next}
-node is @samp{Menus}.
+@key{^L} newline, after which comes the node's header line.  The header
+line must give the node's name (by which Info finds it), and state the
+names of the @samp{Next}, @samp{Previous}, and @samp{Up} nodes (if there
+are any).  As you can see, this node's @samp{Up} node is the node
+@samp{Top}, which points at all the documentation for Info.  The
+@samp{Next} node is @samp{Menus}.
 
   The keywords @dfn{Node}, @dfn{Previous}, @dfn{Up}, and @dfn{Next},
 may appear in any order, anywhere in the header line, but the
@@ -728,10 +713,10 @@ node @kbd{*} is to make it possible to make old-fashioned,
 unstructured files into nodes of the tree.
 
   The @samp{Node:} name, in which a node states its own name, must not
-contain a filename, since Info when searching for a node does not
-expect one to be there.  The @samp{Next}, @samp{Previous} and @samp{Up} names may
-contain them.  In this node, since the @samp{Up} node is in the same file,
-it was not necessary to use one.
+contain a filename, since Info when searching for a node does not expect
+one to be there.  The @samp{Next}, @samp{Previous} and @samp{Up} names
+may contain them.  In this node, since the @samp{Up} node is in the same
+file, it was not necessary to use one.
 
   Note that the nodes in this file have a file name in the header
 line.  The file names are ignored by Info, but they serve as comments
@@ -741,7 +726,7 @@ to help identify the node for the user.
 @comment  node-name,  next,  previous,  up
 @section How to Create Menus
 
-  Any node in the Info hierarchy may have a @dfn{menu}---a list of subnodes. 
+  Any node in the Info hierarchy may have a @dfn{menu}---a list of subnodes.
 The @kbd{m} command searches the current node's menu for the topic which it
 reads from the terminal.
 
@@ -766,11 +751,11 @@ short abbreviations.  In a long menu, it is a good idea to capitalize
 the beginning of each item name which is the minimum acceptable
 abbreviation for it (a long menu is more than 5 or so entries).
 
-  The nodes listed in a node's menu are called its ``subnodes'', and
-it is their ``superior''.  They should each have an @samp{Up:} pointing at
-the superior.  It is often useful to arrange all or most of the
-subnodes in a sequence of @samp{Next} and @samp{Previous} pointers so that someone who
-wants to see them all need not keep revisiting the Menu.
+  The nodes listed in a node's menu are called its ``subnodes'', and it
+is their ``superior''.  They should each have an @samp{Up:} pointing at
+the superior.  It is often useful to arrange all or most of the subnodes
+in a sequence of @samp{Next} and @samp{Previous} pointers so that
+someone who wants to see them all need not keep revisiting the Menu.
 
   The Info Directory is simply the menu of the node @samp{(dir)Top}---that
 is, node @samp{Top} in file @file{.../info/dir}.  You can put new entries
@@ -816,7 +801,7 @@ They are just examples.  The places they ``lead to'' do not really exist!
 
   You can speed up the access to nodes of a large Info file by giving
 it a tag table.  Unlike the tag table for a program, the tag table for
-an Info file lives inside the file itself and is used 
+an Info file lives inside the file itself and is used
 automatically whenever Info reads in the file.
 
   To make a tag table, go to a node in the file using Emacs Info mode and type
@@ -847,24 +832,24 @@ the beginning of the node's header (ending just after the node name),
 a Delete character, and the character position in the file of the
 beginning of the node.
 
+
 @node Checking, Emacs Info Variables, Tags, Advanced Info
-@comment  node-name,  next,  previous,  up
 @section Checking an Info File
 
-  When creating an Info file, it is easy to forget the name of a node
-when you are making a pointer to it from another node.  If you put in
-the wrong name for a node, this is not detected until someone
-tries to go through the pointer using Info.  Verification of the Info
-file is an automatic process which checks all pointers to nodes and
-reports any pointers which are invalid.  Every @samp{Next}, @samp{Previous}, and
+When creating an Info file, it is easy to forget the name of a node when
+you are making a pointer to it from another node.  If you put in the
+wrong name for a node, this is not detected until someone tries to go
+through the pointer using Info.  Verification of the Info file is an
+automatic process which checks all pointers to nodes and reports any
+pointers which are invalid.  Every @samp{Next}, @samp{Previous}, and
 @samp{Up} is checked, as is every menu item and every cross reference.  In
-addition, any @samp{Next} which does not have a @samp{Previous} pointing back is
-reported.  Only pointers within the file are checked, because checking
-pointers to other files would be terribly slow.  But those are usually
-few.
+addition, any @samp{Next} which does not have a @samp{Previous} pointing
+back is reported.  Only pointers within the file are checked, because
+checking pointers to other files would be terribly slow.  But those are
+usually few.
 
-  To check an Info file, do @kbd{M-x Info-validate} while looking at
-any node of the file with Emacs Info mode.
+To check an Info file, do @kbd{M-x Info-validate} while looking at any
+node of the file with Emacs Info mode.
 
 @node Emacs Info Variables, , Checking, Advanced Info
 @section Emacs Info-mode Variables
@@ -894,18 +879,17 @@ The standard directory for Info documentation files.  Only used when the
 function @code{Info-directory} is called.
 @end vtable
 
-@node Create an Info File,  , Advanced Info, Top
-@comment  node-name,  next,  previous,  up
-@chapter Creating an Info File from a Makeinfo file
 
-@code{makeinfo} is a utility that converts a Texinfo file into an Info
-file; @code{texinfo-format-region} and @code{texinfo-format-buffer} are
-GNU Emacs functions that do the same.
+@node Creating an Info File
+@chapter Creating an Info File
+
+@xref{Top,, Overview of Texinfo, texinfo, Texinfo}, to learn how to
+write a Texinfo file.
 
-@xref{Create an Info File, , Creating an Info File, texinfo, the Texinfo
-Manual}, to learn how to create an Info file from a Texinfo file.
+@xref{Creating an Info File,,, texinfo, Texinfo}, to learn how to create
+an Info file from a Texinfo file.
 
-@xref{Top,, Overview of Texinfo, texinfo, Texinfo: The GNU Documentation
-Format}, to learn how to write a Texinfo file.
+@xref{Installing an Info File,,, texinfo, Texinfo}, to learn how to
+install an Info file after you have created one.
 
 @bye
index f6eb892..1a85269 100644 (file)
@@ -7506,18 +7506,18 @@ argument is evaluated more than once.
 Function equivalents of the above macros.
 @end deftypefun
 
-@deftypefun int Lstream_read (Lstream *@var{stream}, void *@var{data}, int @var{size})
+@deftypefun ssize_t Lstream_read (Lstream *@var{stream}, void *@var{data}, size_t @var{size})
 Read @var{size} bytes of @var{data} from the stream.  Return the number
 of bytes read.  0 means EOF. -1 means an error occurred and no bytes
 were read.
 @end deftypefun
 
-@deftypefun int Lstream_write (Lstream *@var{stream}, void *@var{data}, int @var{size})
+@deftypefun ssize_t Lstream_write (Lstream *@var{stream}, void *@var{data}, size_t @var{size})
 Write @var{size} bytes of @var{data} to the stream.  Return the number
 of bytes written.  -1 means an error occurred and no bytes were written.
 @end deftypefun
 
-@deftypefun void Lstream_unread (Lstream *@var{stream}, void *@var{data}, int @var{size})
+@deftypefun void Lstream_unread (Lstream *@var{stream}, void *@var{data}, size_t @var{size})
 Push back @var{size} bytes of @var{data} onto the input queue.  The next
 call to @code{Lstream_read()} with the same size will read the same
 bytes back.  Note that this will be the case even if there is other
@@ -7542,7 +7542,7 @@ Rewind the stream to the beginning.
 @node Lstream Methods
 @section Lstream Methods
 
-@deftypefn {Lstream Method} int reader (Lstream *@var{stream}, unsigned char *@var{data}, int @var{size})
+@deftypefn {Lstream Method} ssize_t reader (Lstream *@var{stream}, unsigned char *@var{data}, size_t @var{size})
 Read some data from the stream's end and store it into @var{data}, which
 can hold @var{size} bytes.  Return the number of bytes read.  A return
 value of 0 means no bytes can be read at this time.  This may be because
@@ -7559,7 +7559,7 @@ calls @code{Lstream_read()} with a very small size.
 This function can be @code{NULL} if the stream is output-only.
 @end deftypefn
 
-@deftypefn {Lstream Method} int writer (Lstream *@var{stream}, CONST unsigned char *@var{data}, int @var{size})
+@deftypefn {Lstream Method} ssize_t writer (Lstream *@var{stream}, CONST unsigned char *@var{data}, size_t @var{size})
 Send some data to the stream's end.  Data to be sent is in @var{data}
 and is @var{size} bytes.  Return the number of bytes sent.  This
 function can send and return fewer bytes than is passed in; in that
index 49b599c..9fc3616 100644 (file)
@@ -874,7 +874,7 @@ The contents of each event are as follows:
 @item channel
 @item timestamp
 @item key
-  Which key was pressed.  This is an integer (in the printing @sc{ASCII}
+  Which key was pressed.  This is an integer (in the printing @sc{ascii}
 range: >32 and <127) or a symbol such as @code{left} or @code{right}.
 Note that many physical keys are actually treated as two separate keys,
 depending on whether the shift key is pressed; for example, the ``a''
@@ -1252,7 +1252,7 @@ This function returns the device that the given event occurred on.
 
 @defun event-key event
 This function returns the Keysym of the given key-press event.
-This will be the @sc{ASCII} code of a printing character, or a symbol.
+This will be the @sc{ascii} code of a printing character, or a symbol.
 @end defun
 
 @defun event-button event
@@ -1450,10 +1450,10 @@ that is safe.
 
 XEmacs provides some auxiliary functions for converting between events
 and other ways of representing keys.  These are useful when working with
-@sc{ASCII} strings and with keymaps.
+@sc{ascii} strings and with keymaps.
 
 @defun character-to-event ch &optional event device
-This function converts a numeric @sc{ASCII} value to an event structure,
+This function converts a numeric @sc{ascii} value to an event structure,
 replete with modifier bits.  @var{ch} is the character to convert, and
 @var{event} is the event object to fill in.  This function contains
 knowledge about what the codes ``mean'' -- for example, the number 9 is
@@ -1474,19 +1474,19 @@ high bit as meta.
 
 Beware that @code{character-to-event} and @code{event-to-character} are
 not strictly inverse functions, since events contain much more
-information than the @sc{ASCII} character set can encode.
+information than the @sc{ascii} character set can encode.
 @end defun
 
 @defun event-to-character event &optional allow-extra-modifiers allow-meta allow-non-ascii
-This function returns the closest @sc{ASCII} approximation to
+This function returns the closest @sc{ascii} approximation to
 @var{event}.  If the event isn't a keypress, this returns @code{nil}.
 
 If @var{allow-extra-modifiers} is non-@code{nil}, then this is lenient
 in its translation; it will ignore modifier keys other than
 @key{control} and @key{meta}, and will ignore the @key{shift} modifier
-on those characters which have no shifted @sc{ASCII} equivalent
+on those characters which have no shifted @sc{ascii} equivalent
 (@key{Control-Shift-A} for example, will be mapped to the same
-@sc{ASCII} code as @key{Control-A}).
+@sc{ascii} code as @key{Control-A}).
 
 If @var{allow-meta} is non-@code{nil}, then the @key{Meta} modifier will
 be represented by turning on the high bit of the byte returned;
@@ -1497,7 +1497,7 @@ If @var{allow-non-ascii} is non-@code{nil}, then characters which are
 present in the prevailing character set (@pxref{Keymaps, variable
 @code{character-set-property}}) will be returned as their code in that
 character set, instead of the return value being restricted to
-@sc{ASCII}.
+@sc{ascii}.
 
 Note that specifying both @var{allow-meta} and @var{allow-non-ascii} is
 ambiguous, as both use the high bit; @key{M-x} and @key{oslash} will be
@@ -1506,7 +1506,7 @@ indistinguishable.
 
 @defun events-to-keys events &optional no-mice
 Given a vector of event objects, this function returns a vector of key
-descriptors, or a string (if they all fit in the @sc{ASCII} range).
+descriptors, or a string (if they all fit in the @sc{ascii} range).
 Optional arg @var{no-mice} means that button events are not allowed.
 @end defun
 
@@ -1656,7 +1656,7 @@ press the right-arrow function key:
 @defun read-char
 This function reads and returns a character of command input.  If a
 mouse click is detected, an error is signalled.  The character typed is
-returned as an @sc{ASCII} value.  This function is retained for
+returned as an @sc{ascii} value.  This function is retained for
 compatibility with Emacs 18, and is most likely the wrong thing for you
 to be using: consider using @code{next-command-event} instead.
 @end defun
@@ -1803,8 +1803,8 @@ value of @code{last-command-event}.
 
 @defvar last-input-char
 If the value of @code{last-input-event} is a keyboard event, then this
-is the nearest @sc{ASCII} equivalent to it.  Remember that there is
-@emph{not} a 1:1 mapping between keyboard events and @sc{ASCII}
+is the nearest @sc{ascii} equivalent to it.  Remember that there is
+@emph{not} a 1:1 mapping between keyboard events and @sc{ascii}
 characters: the set of keyboard events is much larger, so writing code
 that examines this variable to determine what key has been typed is bad
 practice, unless you are certain that it will be one of a small set of
index 3d1e992..1517f0f 100644 (file)
@@ -874,13 +874,13 @@ Character code 10 is a newline.
 All other codes in the range 0 through 31, and code 127, display in one
 of two ways according to the value of @code{ctl-arrow}.  If it is
 non-@code{nil}, these codes map to sequences of two glyphs, where the
-first glyph is the @sc{ASCII} code for @samp{^}.  (A display table can
+first glyph is the @sc{ascii} code for @samp{^}.  (A display table can
 specify a glyph to use instead of @samp{^}.)  Otherwise, these codes map
 just like the codes in the range 128 to 255.
 
 @item
 Character codes 128 through 255 map to sequences of four glyphs, where
-the first glyph is the @sc{ASCII} code for @samp{\}, and the others are
+the first glyph is the @sc{ascii} code for @samp{\}, and the others are
 digit characters representing the code in octal.  (A display table can
 specify a glyph to use instead of @samp{\}.)
 @end itemize
@@ -921,7 +921,7 @@ stops used by the command @code{tab-to-tab-stop}.  @xref{Indent Tabs}.
 @cindex display table
 You can use the @dfn{display table} feature to control how all 256
 possible character codes display on the screen.  This is useful for
-displaying European languages that have letters not in the @sc{ASCII}
+displaying European languages that have letters not in the @sc{ascii}
 character set.
 
 The display table maps each character code into a sequence of
@@ -1040,9 +1040,9 @@ set, you can arrange to use that character set as follows:
 @end example
 
 If you are editing buffers written in the ISO Latin 1 character set and
-your terminal doesn't handle anything but @sc{ASCII}, you can load the
+your terminal doesn't handle anything but @sc{ascii}, you can load the
 file @file{iso-ascii} to set up a display table that displays the other
-ISO characters as explanatory sequences of @sc{ASCII} characters.  For
+ISO characters as explanatory sequences of @sc{ascii} characters.  For
 example, the character ``o with umlaut'' displays as @samp{@{"o@}}.
 
 Some European countries have terminals that don't support ISO Latin 1
index 09a0bc4..8a6b0ae 100644 (file)
@@ -672,7 +672,7 @@ result.
 @end defun
 
 @defun color-rgb-components color &optional domain
-This function returns the @sc{RGB} components of the @var{color} in the
+This function returns the @sc{rgb} components of the @var{color} in the
 specified @var{domain}, if any.  @var{color} should be a color specifier
 object and @var{domain} is normally a window and defaults to the
 selected window if omitted.  This is equivalent to using
index e1aa70b..63b964a 100644 (file)
@@ -716,7 +716,7 @@ length of @var{sequence}.
 Return the list of results."
   ;; @r{If no list is exhausted,}
   (if (not (memq 'nil args))              
-      ;; @r{apply function to @sc{CAR}s.}
+      ;; @r{apply function to @sc{car}s.}
       (cons (apply f (mapcar 'car args))  
             (apply 'mapcar* f             
                    ;; @r{Recurse for rest of elements.}
index 0896fce..93f6309 100644 (file)
@@ -471,7 +471,7 @@ which you are criticizing.
 @end ifinfo
 
 This manual was originally written for FSF Emacs 19 and was updated by
-Ben Wing (wing@@666.com) for Lucid Emacs 19.10 and later for XEmacs
+Ben Wing (ben@@xemacs.org) for Lucid Emacs 19.10 and later for XEmacs
 19.12, 19.13, 19.14, and 20.0.  It was further updated by the XEmacs
 Development Team for 19.15 and 20.1.  Please send comments and
 corrections relating to XEmacs-specific portions of this manual to
index 3fd15ff..e7ea2a7 100644 (file)
@@ -235,7 +235,7 @@ if it has none.
 @section Key Sequences
 @cindex key sequences
 
-  Contrary to popular belief, the world is not @sc{ASCII}.  When running
+  Contrary to popular belief, the world is not @sc{ascii}.  When running
 under a window manager, XEmacs can tell the difference between, for
 example, the keystrokes @kbd{control-h}, @kbd{control-shift-h}, and
 @kbd{backspace}.  You can, in fact, bind different commands to each of
@@ -246,8 +246,8 @@ keysym and some set of modifiers (such as @key{CONTROL} and @key{META}).
 A @dfn{keysym} is what is printed on the keys on your keyboard.
 
   A keysym may be represented by a symbol, or (if and only if it is
-equivalent to an @sc{ASCII} character in the range 32 - 255) by a
-character or its equivalent @sc{ASCII} code.  The @kbd{A} key may be
+equivalent to an @sc{ascii} character in the range 32 - 255) by a
+character or its equivalent @sc{ascii} code.  The @kbd{A} key may be
 represented by the symbol @code{A}, the character @code{?A}, or by the
 number 65.  The @kbd{break} key may be represented only by the symbol
 @code{break}.
@@ -262,12 +262,12 @@ keystroke may also be represented by an event object, as returned by the
 @code{next-command-event} and @code{read-key-sequence} functions.
 
   Note that in this context, the keystroke @kbd{control-b} is @emph{not}
-represented by the number 2 (the @sc{ASCII} code for @samp{^B}) or the
+represented by the number 2 (the @sc{ascii} code for @samp{^B}) or the
 character @code{?\^B}.  See below.
 
   The @key{SHIFT} modifier is somewhat of a special case.  You should
 not (and cannot) use @code{(meta shift a)} to mean @code{(meta A)},
-since for characters that have @sc{ASCII} equivalents, the state of the
+since for characters that have @sc{ascii} equivalents, the state of the
 shift key is implicit in the keysym (@samp{a} vs. @samp{A}).  You also
 cannot say @code{(shift =)} to mean @code{+}, as that sort of thing
 varies from keyboard to keyboard.  The @key{SHIFT} modifier is for use
@@ -311,8 +311,8 @@ so be careful.
 
   For backward compatibility, a key sequence may also be represented by
 a string.  In this case, it represents the key sequence(s) that would
-produce that sequence of @sc{ASCII} characters in a purely @sc{ASCII}
-world.  For example, a string containing the @sc{ASCII} backspace
+produce that sequence of @sc{ascii} characters in a purely @sc{ascii}
+world.  For example, a string containing the @sc{ascii} backspace
 character, @code{"\^H"}, would represent two key sequences:
 @code{(control h)} and @code{backspace}.  Binding a command to this will
 actually bind both of those key sequences.  Likewise for the following
@@ -342,7 +342,7 @@ it is possible to redefine only one of those sequences like so:
 @end example
 
   Of course, all of this applies only when running under a window
-system.  If you're talking to XEmacs through a @sc{TTY} connection, you
+system.  If you're talking to XEmacs through a @sc{tty} connection, you
 don't get any of these features.
 
 @defun event-matches-key-specifier-p event key-specifier
@@ -973,14 +973,14 @@ This variable is the meta-prefix character code.  It is used when
 translating a two-character sequence to a meta character so it can be
 looked up in a keymap.  For useful results, the value should be a prefix
 event (@pxref{Prefix Keys}).  The default value is @code{?\^[} (integer
-27), which is the @sc{ASCII} character usually produced by the @key{ESC}
+27), which is the @sc{ascii} character usually produced by the @key{ESC}
 key.
 
   As long as the value of @code{meta-prefix-char} remains @code{?\^[},
 key lookup translates @kbd{@key{ESC} b} into @kbd{M-b}, which is
 normally defined as the @code{backward-word} command.  However, if you
 set @code{meta-prefix-char} to @code{?\^X} (i.e. the keystroke
-@kbd{C-x}) or its equivalent @sc{ASCII} code @code{24}, then XEmacs will
+@kbd{C-x}) or its equivalent @sc{ascii} code @code{24}, then XEmacs will
 translate @kbd{C-x b} (whose standard binding is the
 @code{switch-to-buffer} command) into @kbd{M-b}.
 
@@ -1503,7 +1503,7 @@ If @var{firstonly} is @code{non-ascii}, then the value is a single
 string representing the first key sequence found, rather than a list of
 all possible key sequences.  If @var{firstonly} is @code{t}, then the
 value is the first key sequence, except that key sequences consisting
-entirely of @sc{ASCII} characters (or meta variants of @sc{ASCII}
+entirely of @sc{ascii} characters (or meta variants of @sc{ascii}
 characters) are preferred to all other key sequences.
 @end ignore
 
@@ -1546,13 +1546,13 @@ displays it in a window.
 If @var{prefix} is non-@code{nil}, it should be a prefix key; then the
 listing includes only keys that start with @var{prefix}.
 
-When several characters with consecutive @sc{ASCII} codes have the
+When several characters with consecutive @sc{ascii} codes have the
 same definition, they are shown together, as
 @samp{@var{firstchar}..@var{lastchar}}.  In this instance, you need to
-know the @sc{ASCII} codes to understand which characters this means.
+know the @sc{ascii} codes to understand which characters this means.
 For example, in the default global map, the characters @samp{@key{SPC}
-..@: ~} are described by a single line.  @key{SPC} is @sc{ASCII} 32,
-@kbd{~} is @sc{ASCII} 126, and the characters between them include all
+..@: ~} are described by a single line.  @key{SPC} is @sc{ascii} 32,
+@kbd{~} is @sc{ascii} 126, and the characters between them include all
 the normal printing characters, (e.g., letters, digits, punctuation,
 etc.@:); all these characters are bound to @code{self-insert-command}.
 
index a24a43c..2024291 100644 (file)
@@ -1,4 +1,4 @@
-\input ../texinfo  @c -*-texinfo-*-
+\input texinfo  @c -*-texinfo-*-
 @c %**start of header
 @setfilename ../../info/lispref.info
 @c @smallbook
index be8bc92..1abd504 100644 (file)
@@ -1628,7 +1628,7 @@ This function returns @code{t} if @var{prop} has a value specified in
 In the following functions, if optional arg @var{nil-means-not-present}
 is non-@code{nil}, then a property with a @code{nil} value is ignored or
 removed.  This feature is a virus that has infected old Lisp
-implementations (and thus E-Lisp, due to @sc{RMS}'s enamorment with old
+implementations (and thus E-Lisp, due to @sc{rms}'s enamorment with old
 Lisps), but should not be used except for backward compatibility.
 
 @defun plists-eq a b &optional nil-means-not-present
@@ -1682,7 +1682,7 @@ This function returns @code{t} if @var{prop} has a value specified in
 In the following functions, if optional arg @var{nil-means-not-present}
 is non-@code{nil}, then a property with a @code{nil} value is ignored or
 removed.  This feature is a virus that has infected old Lisp
-implementations (and thus E-Lisp, due to @sc{RMS}'s enamorment with old
+implementations (and thus E-Lisp, due to @sc{rms}'s enamorment with old
 Lisps), but should not be used except for backward compatibility.
 
 @defun lax-plists-eq a b &optional nil-means-not-present
index 0a05e5f..332a960 100644 (file)
@@ -330,7 +330,7 @@ correspondingly more complicated.  Here are excerpts from
 @group
       ;; @r{Set syntax of chars up to 0 to class of chars that are}
       ;;   @r{part of symbol names but not words.}
-      ;;   @r{(The number 0 is @code{48} in the @sc{ASCII} character set.)}
+      ;;   @r{(The number 0 is @code{48} in the @sc{ascii} character set.)}
       (while (< i ?0) 
         (modify-syntax-entry i "_   " emacs-lisp-mode-syntax-table)
         (setq i (1+ i)))
index 8b68361..a809171 100644 (file)
@@ -343,7 +343,7 @@ number whose value is 1500.  They are all equivalent.
 
 @node Character Type
 @subsection Character Type
-@cindex @sc{ASCII} character codes
+@cindex @sc{ascii} character codes
 @cindex char-int confoundance disease
 
   In XEmacs version 19, and in all versions of FSF GNU Emacs, a
@@ -352,7 +352,7 @@ This is yet another holdover from XEmacs Lisp's derivation from
 vintage-1980 Lisps; modern versions of Lisp consider this equivalence
 a bad idea, and have separate character types.  In XEmacs version 20,
 the modern convention is followed, and characters are their own
-primitive types. (This change was necessary in order for @sc{MULE},
+primitive types. (This change was necessary in order for @sc{mule},
 i.e. Asian-language, support to be correctly implemented.)
 
   Even in XEmacs version 20, remnants of the equivalence between
@@ -370,21 +370,21 @@ with the distinction between characters and integers in mind.
 
   Every character has an equivalent integer, called the @dfn{character
 code}.  For example, the character @kbd{A} is represented as the
-@w{integer 65}, following the standard @sc{ASCII} representation of
-characters.  If XEmacs was not compiled with @sc{MULE} support, the
+@w{integer 65}, following the standard @sc{ascii} representation of
+characters.  If XEmacs was not compiled with @sc{mule} support, the
 range of this integer will always be 0 to 255 -- eight bits, or one
 byte. (Integers outside this range are accepted but silently truncated;
 however, you should most decidedly @emph{not} rely on this, because it
-will not work under XEmacs with @sc{MULE} support.)  When @sc{MULE}
+will not work under XEmacs with @sc{mule} support.)  When @sc{mule}
 support is present, the range of character codes is much
 larger. (Currently, 19 bits are used.)
 
   FSF GNU Emacs uses kludgy character codes above 255 to represent
-keyboard input of @sc{ASCII} characters in combination with certain
+keyboard input of @sc{ascii} characters in combination with certain
 modifiers.  XEmacs does not use this (a more general mechanism is
-used that does not distinguish between @sc{ASCII} keys and other
+used that does not distinguish between @sc{ascii} keys and other
 keys), so you will never find character codes above 255 in a
-non-@sc{MULE} XEmacs.
+non-@sc{mule} XEmacs.
 
   Individual characters are not often used in programs.  It is far more
 common to work with @emph{strings}, which are sequences composed of
@@ -506,15 +506,15 @@ with character code 193, or 128 plus 65.  You should @emph{not} use this
 syntax in your programs.  It is a holdover of yet another confoundance
 disease from earlier Emacsen. (This was used to represent keyboard input
 with the @key{META} key set, thus the @samp{M}; however, it conflicts
-with the legitimate @sc{ISO}-8859-1 interpretation of the character code.
+with the legitimate @sc{iso}-8859-1 interpretation of the character code.
 For example, character code 193 is a lowercase @samp{a} with an acute
-accent, in @sc{ISO}-8859-1.)
+accent, in @sc{iso}-8859-1.)
 
 @ignore @c None of this crap applies to XEmacs.
   For use in strings and buffers, you are limited to the control
-characters that exist in @sc{ASCII}, but for keyboard input purposes,
+characters that exist in @sc{ascii}, but for keyboard input purposes,
 you can turn any character into a control character with @samp{C-}.  The
-character codes for these non-@sc{ASCII} control characters include the
+character codes for these non-@sc{ascii} control characters include the
 @iftex
 $2^{26}$
 @end iftex
@@ -617,9 +617,9 @@ bit values are 2**22 for alt, 2**23 for super and 2**24 for hyper.
 followed by a backslash and the character code in octal (up to three
 octal digits); thus, @samp{?\101} for the character @kbd{A},
 @samp{?\001} for the character @kbd{C-a}, and @code{?\002} for the
-character @kbd{C-b}.  Although this syntax can represent any @sc{ASCII}
+character @kbd{C-b}.  Although this syntax can represent any @sc{ascii}
 character, it is preferred only when the precise octal value is more
-important than the @sc{ASCII} representation.
+important than the @sc{ascii} representation.
 
 @example
 @group
@@ -1521,7 +1521,7 @@ Normally, there is only one device object, but there may be more
 than one if XEmacs is being run on a multi-headed display (e.g. an
 X server with attached color and mono screens) or if XEmacs is
 simultaneously driving frames attached to different consoles, e.g.
-an X display and a @sc{TTY} connection.
+an X display and a @sc{tty} connection.
 
   Devices do not have a read syntax.  They print in hash notation,
 giving the device's type, connection name, and a unique number assigned
@@ -1544,13 +1544,13 @@ related to devices.
 (i.e. displays on which frames exist) are connected.  Normally, there is
 only one console object, but there may be more than one if XEmacs is
 simultaneously driving frames attached to different X servers and/or
-@sc{TTY} connections. (XEmacs is capable of driving multiple X and
-@sc{TTY} connections at the same time, and provides a robust mechanism
+@sc{tty} connections. (XEmacs is capable of driving multiple X and
+@sc{tty} connections at the same time, and provides a robust mechanism
 for handling the differing display capabilities of such heterogeneous
 environments.  A buffer with embedded glyphs and multiple fonts and
 colors, for example, will display reasonably if it simultaneously
 appears on a frame on a color X display, a frame on a mono X display,
-and a frame on a @sc{TTY} connection.)
+and a frame on a @sc{tty} connection.)
 
   Consoles do not have a read syntax.  They print in hash notation,
 giving the console's type, connection name, and a unique number assigned
index b79830b..afe40ac 100644 (file)
@@ -1602,7 +1602,7 @@ entries and DEC terminal concentrators, see @file{emacs/etc/TERMS}.
 @code{C-s} and @kbd{C-q} for flow control.  Therefore, the choice of
 @kbd{C-s} and @kbd{C-q} as command characters was uncontroversial.
 XEmacs, for economy of keystrokes and portability, used nearly all the
-@sc{ASCII} control characters, with mnemonic meanings when possible;
+@sc{ascii} control characters, with mnemonic meanings when possible;
 thus, @kbd{C-s} for search and @kbd{C-q} for quote.
 
   Later, some terminals were introduced which required these characters
index 54b2d95..fd7f170 100644 (file)
@@ -264,7 +264,7 @@ strings for such applications, for four reasons:
 @item
 They usually occupy one-fourth the space of a vector of the same
 elements.  (This is one-eighth the space for 64-bit machines such as the
-DEC Alpha, and may also be different when @sc{MULE} support is compiled
+DEC Alpha, and may also be different when @sc{mule} support is compiled
 into XEmacs.)
 
 @item
index 95da8ee..260509c 100644 (file)
@@ -45,8 +45,8 @@ determined only by how it is used.  @xref{Character Type}.
   The length of a string (like any array) is fixed and independent of
 the string contents, and cannot be altered.  Strings in Lisp are
 @emph{not} terminated by a distinguished character code.  (By contrast,
-strings in C are terminated by a character with @sc{ASCII} code 0.)
-This means that any character, including the null character (@sc{ASCII}
+strings in C are terminated by a character with @sc{ascii} code 0.)
+This means that any character, including the null character (@sc{ascii}
 code 0), is a valid element of a string.@refill
 
   Since strings are considered arrays, you can operate on them with the
@@ -321,15 +321,15 @@ the range 0 - 255 map to characters as follows:
 @item 0 - 31
 Control set 0
 @item 32 - 127
-@sc{ASCII}
+@sc{ascii}
 @item 128 - 159
 Control set 1
 @item 160 - 255
 Right half of ISO-8859-1
 @end table
 
-If support for @sc{MULE} does not exist, these are the only valid
-character values.  When @sc{MULE} support exists, the values assigned to
+If support for @sc{mule} does not exist, these are the only valid
+character values.  When @sc{mule} support exists, the values assigned to
 other characters may vary depending on the particular version of XEmacs,
 the order in which character sets were loaded, etc., and you should not
 depend on them.
@@ -427,9 +427,9 @@ function returns @code{t}.  If the lesser character is the one from
 @var{string2}, then @var{string1} is greater, and this function returns
 @code{nil}.  If the two strings match entirely, the value is @code{nil}.
 
-Pairs of characters are compared by their @sc{ASCII} codes.  Keep in
+Pairs of characters are compared by their @sc{ascii} codes.  Keep in
 mind that lower case letters have higher numeric values in the
-@sc{ASCII} character set than their upper case counterparts; numbers and
+@sc{ascii} character set than their upper case counterparts; numbers and
 many punctuation characters have a lower numeric value than upper case
 letters.
 
@@ -515,7 +515,7 @@ of 1.  (@xref{Creating Strings}.)  This conversion can also be done with
   This function returns the first character in @var{string}.  If the
 string is empty, the function returns 0. (Under XEmacs 19, the value is
 also 0 when the first character of @var{string} is the null character,
-@sc{ASCII} code 0.)
+@sc{ascii} code 0.)
 
 @example
 (string-to-char "ABC")
@@ -910,7 +910,7 @@ characters (the letters @samp{A} through @samp{Z} and @samp{a} through
 modify the strings that are passed to them as arguments.
 
   The examples below use the characters @samp{X} and @samp{x} which have
-@sc{ASCII} codes 88 and 120 respectively.
+@sc{ascii} codes 88 and 120 respectively.
 
 @defun downcase string-or-char
 This function converts a character or a string to lower case.
@@ -995,7 +995,7 @@ table}.  A case table specifies the mapping between upper case and lower
 case letters.  It affects both the string and character case conversion
 functions (see the previous section) and those that apply to text in the
 buffer (@pxref{Case Changes}).  You need a case table if you are using a
-language which has letters other than the standard @sc{ASCII} letters.
+language which has letters other than the standard @sc{ascii} letters.
 
   A case table is a list of this form:
 
@@ -1022,7 +1022,7 @@ the same canonical equivalent character.
 
   The element @var{equivalences} is a map that cyclicly permutes each
 equivalence class (of characters with the same canonical equivalent).
-(For ordinary @sc{ASCII}, this would map @samp{a} into @samp{A} and
+(For ordinary @sc{ascii}, this would map @samp{a} into @samp{A} and
 @samp{A} into @samp{a}, and likewise for each set of equivalent
 characters.)
 
@@ -1063,7 +1063,7 @@ This sets the current buffer's case table to @var{table}.
 @end defun
 
   The following three functions are convenient subroutines for packages
-that define non-@sc{ASCII} character sets.  They modify a string
+that define non-@sc{ascii} character sets.  They modify a string
 @var{downcase-table} provided as an argument; this should be a string to
 be used as the @var{downcase} part of a case table.  They also modify
 the standard syntax table.  @xref{Syntax Tables}.
@@ -1109,7 +1109,7 @@ Note that char tables as a primitive type, and all of the functions in
 this section, exist only in XEmacs 20.  In XEmacs 19, char tables are
 generally implemented using a vector of 256 elements.
 
-When @sc{MULE} support exists, the types of ranges that can be assigned
+When @sc{mule} support exists, the types of ranges that can be assigned
 values are
 
 @itemize @bullet
@@ -1123,7 +1123,7 @@ a single row in a two-octet charset
 a single character
 @end itemize
 
-When @sc{MULE} support is not present, the types of ranges that can be
+When @sc{mule} support is not present, the types of ranges that can be
 assigned values are
 
 @itemize @bullet
@@ -1154,7 +1154,7 @@ Used for category tables, which specify the regexp categories
 that a character is in.  The valid values are @code{nil} or a
 bit vector of 95 elements.  Higher-level Lisp functions are
 provided for working with category tables.  Currently categories
-and category tables only exist when @sc{MULE} support is present.
+and category tables only exist when @sc{mule} support is present.
 @item char
 A generalized char table, for mapping from one character to
 another.  Used for case tables, syntax matching tables,
@@ -1203,10 +1203,10 @@ one of the following:
 @item
 @code{t} (all characters are affected)
 @item
-A charset (only allowed when @sc{MULE} support is present)
+A charset (only allowed when @sc{mule} support is present)
 @item
 A vector of two elements: a two-octet charset and a row number
-(only allowed when @sc{MULE} support is present)
+(only allowed when @sc{mule} support is present)
 @item
 A single character
 @end itemize
index 1f743a5..1fdb63f 100644 (file)
@@ -1478,7 +1478,7 @@ comparing the first characters of each, the second characters of each,
 and so on.  If a mismatch is found, it means that the sort keys are
 unequal; the sort key whose character is less at the point of first
 mismatch is the lesser sort key.  The individual characters are compared
-according to their numerical values.  Since Emacs uses the @sc{ASCII}
+according to their numerical values.  Since Emacs uses the @sc{ascii}
 character set, the ordering in that set determines alphabetical order.
 @c version 19 change
 
index b3b88da..c7c71ad 100644 (file)
@@ -21,6 +21,8 @@ chapter
 @end ifclear
 @end iftex
 describes conventions for writing the Makefiles for GNU programs.
+Using Automake will help you write a Makefile that follows these
+conventions.
 
 @menu
 * Makefile Basics::            General Conventions for Makefiles
@@ -28,6 +30,8 @@ describes conventions for writing the Makefiles for GNU programs.
 * Command Variables::          Variables for Specifying Commands
 * Directory Variables::                Variables for Installation Directories
 * Standard Targets::           Standard Targets for Users
+* Install Command Categories::  Three categories of commands in the `install'
+                                  rule: normal, pre-install and post-install.
 @end menu
 
 @node Makefile Basics
@@ -65,9 +69,10 @@ part of the make or @file{$(srcdir)/} if the file is an unchanging part
 of the source code.  Without one of these prefixes, the current search
 path is used.
 
-The distinction between @file{./} and @file{$(srcdir)/} is important
-when using the @samp{--srcdir} option to @file{configure}.  A rule of
-the form:
+The distinction between @file{./} (the @dfn{build directory}) and
+@file{$(srcdir)/} (the @dfn{source directory}) is important because
+users can build in a separate directory using the @samp{--srcdir} option
+to @file{configure}.  A rule of the form:
 
 @smallexample
 foo.1 : foo.man sedscript
@@ -75,9 +80,8 @@ foo.1 : foo.man sedscript
 @end smallexample
 
 @noindent
-will fail when the current directory is not the source directory,
-because @file{foo.man} and @file{sedscript} are not in the current
-directory.
+will fail when the build directory is not the source directory, because
+@file{foo.man} and @file{sedscript} are in the the source directory.
 
 When using GNU @code{make}, relying on @samp{VPATH} to find the source
 file will work in the case where there is a single dependency file,
@@ -109,6 +113,18 @@ foo.1 : foo.man sedscript
         sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@@
 @end smallexample
 
+GNU distributions usually contain some files which are not source
+files---for example, Info files, and the output from Autoconf, Automake,
+Bison or Flex.  Since these files normally appear in the source
+directory, they should always appear in the source directory, not in the
+build directory.  So Makefile rules to update them should put the
+updated files in the source directory.
+
+However, if a file does not appear in the distribution, then the
+Makefile should not put it in the source directory, because building a
+program in ordinary circumstances should not modify the source directory
+in any way.
+
 Try to make the build and installation targets, at least (and all their
 subtargets) work correctly with a parallel @code{make}.
 
@@ -122,11 +138,17 @@ special features of @code{ksh} or @code{bash}.
 The @code{configure} script and the Makefile rules for building and
 installation should not use any utilities directly except these:
 
+@c dd find
+@c gunzip gzip md5sum
+@c mkfifo mknod tee uname 
+
 @example
-cat cmp cp echo egrep expr false grep
-ln mkdir mv pwd rm rmdir sed test touch true
+cat cmp cp diff echo egrep expr false grep install-info
+ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true
 @end example
 
+The compression program @code{gzip} can be used in the @code{dist} rule.
+
 Stick to the generally supported options for these programs.  For
 example, don't use @samp{mkdir -p}, convenient as it may be, because
 most systems don't support it.
@@ -140,26 +162,33 @@ user can substitute alternatives.  Here are some of the programs we
 mean:
 
 @example
-ar bison cc flex install ld lex
+ar bison cc flex install ld ldconfig lex
 make makeinfo ranlib texi2dvi yacc
 @end example
 
-Use the following @code{make} variables:
+Use the following @code{make} variables to run those programs:
 
 @example
-$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LEX)
+$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
 $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
 @end example
 
-When you use @code{ranlib}, you should make sure nothing bad happens if
-the system does not have @code{ranlib}.  Arrange to ignore an error
-from that command, and print a message before the command to tell the
-user that failure of the @code{ranlib} command does not mean a problem.
-(The Autoconf @samp{AC_PROG_RANLIB} macro can help with this.)
+When you use @code{ranlib} or @code{ldconfig}, you should make sure
+nothing bad happens if the system does not have the program in question.
+Arrange to ignore an error from that command, and print a message before
+the command to tell the user that failure of this command does not mean
+a problem.  (The Autoconf @samp{AC_PROG_RANLIB} macro can help with
+this.)
 
 If you use symbolic links, you should implement a fallback for systems
 that don't have symbolic links.
 
+Additional utilities that can be used via Make variables are:
+
+@example
+chgrp chmod chown mknod
+@end example
+
 It is ok to use other utilities in Makefile portions (or scripts)
 intended only for particular systems where you know those utilities
 exist.
@@ -182,11 +211,12 @@ don't need to replace them with other programs.
 Each program-name variable should come with an options variable that is
 used to supply options to the program.  Append @samp{FLAGS} to the
 program-name variable name to get the options variable name---for
-example, @code{BISONFLAGS}.  (The name @code{CFLAGS} is an exception to
-this rule, but we keep it because it is standard.)  Use @code{CPPFLAGS}
-in any compilation command that runs the preprocessor, and use
-@code{LDFLAGS} in any compilation command that does linking as well as
-in any direct use of @code{ld}.
+example, @code{BISONFLAGS}.  (The names @code{CFLAGS} for the C
+compiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are
+exceptions to this rule, but we keep them because they are standard.)
+Use @code{CPPFLAGS} in any compilation command that runs the
+preprocessor, and use @code{LDFLAGS} in any compilation command that
+does linking as well as in any direct use of @code{ld}.
 
 If there are C compiler options that @emph{must} be used for proper
 compilation of certain files, do not include them in @code{CFLAGS}.
@@ -212,6 +242,9 @@ Put @code{CFLAGS} last in the compilation command, after other variables
 containing compiler options, so the user can use @code{CFLAGS} to
 override the others.
 
+@code{CFLAGS} should be used in every invocation of the C compiler,
+both those which do compilation and those which do linking.
+
 Every Makefile should define the variable @code{INSTALL}, which is the
 basic command for installing a file into the system.
 
@@ -226,6 +259,18 @@ $(INSTALL_PROGRAM) foo $(bindir)/foo
 $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
 @end example
 
+Optionally, you may prepend the value of @code{DESTDIR} to the target
+filename.  Doing this allows the installer to create a snapshot of the
+installation to be copied onto the real target filesystem later.  Do not
+set the value of @code{DESTDIR} in your Makefile, and do not include it
+in any installed files.  With support for @code{DESTDIR}, the above
+examples become:
+
+@example
+$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
+$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
+@end example
+
 @noindent
 Always use a file name, not a directory name, as the second argument of
 the installation commands.  Use a separate command for each file to be
@@ -252,6 +297,10 @@ When building the complete GNU system, the prefix will be empty and
 @file{/usr} will be a symbolic link to @file{/}.
 (If you are using Autoconf, write it as @samp{@@prefix@@}.)
 
+Running @samp{make install} with a different value of @code{prefix}
+from the one used to build the program should @var{not} recompile
+the program.
+
 @item exec_prefix
 A prefix used in constructing the default values of some of the
 variables listed below.  The default value of @code{exec_prefix} should
@@ -261,6 +310,10 @@ be @code{$(prefix)}.
 Generally, @code{$(exec_prefix)} is used for directories that contain
 machine-specific files (such as executables and subroutine libraries),
 while @code{$(prefix)} is used directly for other directories.
+
+Running @samp{make install} with a different value of @code{exec_prefix}
+from the one used to build the program should @var{not} recompile the
+program.
 @end table
 
 Executable programs are installed in one of the following directories.
@@ -328,14 +381,11 @@ files.  This directory should normally be @file{/usr/local/etc}, but
 write it as @file{$(prefix)/etc}.
 (If you are using Autoconf, write it as @samp{@@sysconfdir@@}.)
 
-@c rewritten to avoid overfull hbox --tower
-Do not install executables
-@c here
-in this directory (they probably
-belong in @file{$(libexecdir)} or @file{$(sbindir)}).  Also do not
-install files that are modified in the normal course of their use
-(programs whose purpose is to change the configuration of the system
-excluded).  Those probably belong in @file{$(localstatedir)}.
+Do not install executables here in this directory (they probably belong
+in @file{$(libexecdir)} or @file{$(sbindir)}).  Also do not install
+files that are modified in the normal course of their use (programs
+whose purpose is to change the configuration of the system excluded).
+Those probably belong in @file{$(localstatedir)}.
 
 @item sharedstatedir
 The directory for installing architecture-independent data files which
@@ -366,6 +416,20 @@ default, it should be @file{/usr/local/info}, but it should be written
 as @file{$(prefix)/info}.
 (If you are using Autoconf, write it as @samp{@@infodir@@}.)
 
+@item lispdir
+The directory for installing any Emacs Lisp files in this package.  By
+default, it should be @file{/usr/local/share/emacs/site-lisp}, but it
+should be written as @file{$(prefix)/share/emacs/site-lisp}.
+
+If you are using Autoconf, write the default as @samp{@@lispdir@@}.
+In order to make @samp{@@lispdir@@} work, you need the following lines
+in your @file{configure.in} file:
+
+@example
+lispdir='$@{datadir@}/emacs/site-lisp'
+AC_SUBST(lispdir)
+@end example
+
 @item includedir
 @c rewritten to avoid overfull hbox --roland
 The directory for installing header files to be included by user
@@ -374,7 +438,7 @@ should normally be @file{/usr/local/include}, but write it as
 @file{$(prefix)/include}.
 (If you are using Autoconf, write it as @samp{@@includedir@@}.)
 
-Most compilers other than GCC do not look for header files in
+Most compilers other than GCC do not look for header files in directory
 @file{/usr/local/include}.  So installing the header files this way is
 only useful with GCC.  Sometimes this is not a problem because some
 libraries are only really intended to work with GCC.  But some libraries
@@ -526,11 +590,12 @@ Here is a sample rule to install an Info file:
 @comment This example has been carefully formatted for the Make manual.
 @comment Please do not reformat it without talking to roland@gnu.ai.mit.edu.
 @smallexample
-$(infodir)/foo.info: foo.info
+$(DESTDIR)$(infodir)/foo.info: foo.info
+        $(POST_INSTALL)
 # There may be a newer info file in . than in srcdir.
         -if test -f foo.info; then d=.; \
          else d=$(srcdir); fi; \
-        $(INSTALL_DATA) $$d/foo.info $@@; \
+        $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@@; \
 # Run install-info only if it exists.
 # Use `if' instead of just prepending `-' to the
 # line so we notice real errors from install-info.
@@ -538,22 +603,29 @@ $(infodir)/foo.info: foo.info
 # fail gracefully when there is an unknown command.
         if $(SHELL) -c 'install-info --version' \
            >/dev/null 2>&1; then \
-          install-info --dir-file=$(infodir)/dir \
-                       $(infodir)/foo.info; \
+          install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+                       $(DESTDIR)$(infodir)/foo.info; \
         else true; fi
 @end smallexample
 
+When writing the @code{install} target, you must classify all the
+commands into three categories: normal ones, @dfn{pre-installation}
+commands and @dfn{post-installation} commands.  @xref{Install Command
+Categories}.
+
 @item uninstall
-Delete all the installed files that the @samp{install} target would
-create (but not the noninstalled files such as @samp{make all} would
-create).
+Delete all the installed files---the copies that the @samp{install}
+target creates.
 
 This rule should not modify the directories where compilation is done,
 only the directories where files are installed.
 
+The uninstallation commands are divided into three categories, just like
+the installation commands.  @xref{Install Command Categories}.
+
 @item install-strip
 Like @code{install}, but strip the executable files while installing
-them.  The definition of this target can be very simple:
+them.  In many cases, the definition of this target can be very simple:
 
 @smallexample
 install-strip:
@@ -638,6 +710,12 @@ You must define the variable @code{MAKEINFO} in the Makefile.  It should
 run the @code{makeinfo} program, which is part of the Texinfo
 distribution.
 
+Normally a GNU distribution comes with Info files, and that means the
+Info files are present in the source directory.  Therefore, the Make
+rule for an info file should update it in the source directory.  When
+users build the package, ordinarily Make will not update the Info files
+because they will already be up to date.
+
 @item dvi
 Generate DVI files for all Texinfo documentation.
 For example:
@@ -669,7 +747,7 @@ The easiest way to do this is to create a subdirectory appropriately
 named, use @code{ln} or @code{cp} to install the proper files in it, and
 then @code{tar} that subdirectory.
 
-Compress the tar file with @code{gzip}.  For example, the actual
+Compress the tar file file with @code{gzip}.  For example, the actual
 distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}.
 
 The @code{dist} target should explicitly depend on all non-source files
@@ -720,3 +798,119 @@ installdirs: mkinstalldirs
 This rule should not modify the directories where compilation is done.
 It should do nothing but create installation directories.
 @end table
+
+@node Install Command Categories
+@section Install Command Categories
+
+@cindex pre-installation commands
+@cindex post-installation commands
+When writing the @code{install} target, you must classify all the
+commands into three categories: normal ones, @dfn{pre-installation}
+commands and @dfn{post-installation} commands.
+
+Normal commands move files into their proper places, and set their
+modes.  They may not alter any files except the ones that come entirely
+from the package they belong to.
+
+Pre-installation and post-installation commands may alter other files;
+in particular, they can edit global configuration files or data bases.
+
+Pre-installation commands are typically executed before the normal
+commands, and post-installation commands are typically run after the
+normal commands.
+
+The most common use for a post-installation command is to run
+@code{install-info}.  This cannot be done with a normal command, since
+it alters a file (the Info directory) which does not come entirely and
+solely from the package being installed.  It is a post-installation
+command because it needs to be done after the normal command which
+installs the package's Info files.
+
+Most programs don't need any pre-installation commands, but we have the
+feature just in case it is needed.
+
+To classify the commands in the @code{install} rule into these three
+categories, insert @dfn{category lines} among them.  A category line
+specifies the category for the commands that follow.
+
+A category line consists of a tab and a reference to a special Make
+variable, plus an optional comment at the end.  There are three
+variables you can use, one for each category; the variable name
+specifies the category.  Category lines are no-ops in ordinary execution
+because these three Make variables are normally undefined (and you
+@emph{should not} define them in the makefile).
+
+Here are the three possible category lines, each with a comment that
+explains what it means:
+
+@smallexample
+        $(PRE_INSTALL)     # @r{Pre-install commands follow.}
+        $(POST_INSTALL)    # @r{Post-install commands follow.}
+        $(NORMAL_INSTALL)  # @r{Normal commands follow.}
+@end smallexample
+
+If you don't use a category line at the beginning of the @code{install}
+rule, all the commands are classified as normal until the first category
+line.  If you don't use any category lines, all the commands are
+classified as normal.
+
+These are the category lines for @code{uninstall}:
+
+@smallexample
+        $(PRE_UNINSTALL)     # @r{Pre-uninstall commands follow.}
+        $(POST_UNINSTALL)    # @r{Post-uninstall commands follow.}
+        $(NORMAL_UNINSTALL)  # @r{Normal commands follow.}
+@end smallexample
+
+Typically, a pre-uninstall command would be used for deleting entries
+from the Info directory.
+
+If the @code{install} or @code{uninstall} target has any dependencies
+which act as subroutines of installation, then you should start
+@emph{each} dependency's commands with a category line, and start the
+main target's commands with a category line also.  This way, you can
+ensure that each command is placed in the right category regardless of
+which of the dependencies actually run.
+
+Pre-installation and post-installation commands should not run any
+programs except for these:
+
+@example
+[ basename bash cat chgrp chmod chown cmp cp dd diff echo
+egrep expand expr false fgrep find getopt grep gunzip gzip
+hostname install install-info kill ldconfig ln ls md5sum
+mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
+test touch true uname xargs yes
+@end example
+
+@cindex binary packages
+The reason for distinguishing the commands in this way is for the sake
+of making binary packages.  Typically a binary package contains all the
+executables and other files that need to be installed, and has its own
+method of installing them---so it does not need to run the normal
+installation commands.  But installing the binary package does need to
+execute the pre-installation and post-installation commands.
+
+Programs to build binary packages work by extracting the
+pre-installation and post-installation commands.  Here is one way of
+extracting the pre-installation commands:
+
+@smallexample
+make -n install -o all \
+      PRE_INSTALL=pre-install \
+      POST_INSTALL=post-install \
+      NORMAL_INSTALL=normal-install \
+  | gawk -f pre-install.awk
+@end smallexample
+
+@noindent
+where the file @file{pre-install.awk} could contain this:
+
+@smallexample
+$0 ~ /^\t[ \t]*(normal_install|post_install)[ \t]*$/ @{on = 0@}
+on @{print $0@}
+$0 ~ /^\t[ \t]*pre_install[ \t]*$/ @{on = 1@}
+@end smallexample
+
+The resulting file of pre-installation commands is executed as a shell
+script as part of installing the binary package.
index a5da258..f60c940 100644 (file)
@@ -168,8 +168,8 @@ Menus}.
 @enumerate
 
 @item
-add-menu-item: @var{(menu-name item-name function enabled-p
-&optional before)}
+add-menu-item: (@var{menu-name} @var{item-name} @var{function} @var{enabled-p}
+&optional @var{before})
 
 This function will add a menu item to a menu, creating the menu first if
 necessary. If the named item already exists, the menu will remain
@@ -260,7 +260,7 @@ submenus: @b{Copy File}, @b{Delete File} and @b{Rename File}.
 @findex delete-menu-item
 @cindex deleting menu items
 @item
-delete-menu-item: @var{(menu-path)}
+delete-menu-item: (@var{menu-path})
 This function will remove the menu item defined by @var{menu-name} from
 the menu hierarchy. Look at the following examples and the comments just
 above them which specify what the examples do.
@@ -286,7 +286,7 @@ above them which specify what the examples do.
 @findex disable-menu-item
 @cindex disabling menu items
 @item
-disable-menu-item: @var{(menu-name)}
+disable-menu-item: (@var{menu-name})
 Disables the specified menu item. The following example 
 
 @example
@@ -301,7 +301,7 @@ be selected.
 @findex enable-menu-item
 @cindex enabling menu items
 @item
-enable-menu-item: @var{(menu-name)}
+enable-menu-item: (@var{menu-name})
 Enables the specified previously disabled menu item. 
 
 @example
@@ -315,7 +315,7 @@ earlier command.
 @findex relabel-menu-items
 @cindex relabelling menu items
 @item
-relabel-menu-item: @var{(menu-name new-name)}
+relabel-menu-item: (@var{menu-name} @var{new-name})
 Change the string of the menu item specified by @var{menu-name} to
 @var{new-name}. 
 
index 4d984b7..3bed4da 100644 (file)
@@ -1,4 +1,4 @@
-\input ../texinfo  @c -*-texinfo-*-
+\input texinfo  @c -*-texinfo-*-
 @setfilename ../../info/new-users-guide.info
 @comment  node-name,  next,  previous,  up
 
index 222c11f..7889e30 100644 (file)
@@ -2,8 +2,8 @@
 @c %**start of header
 @setfilename ../info/standards.info
 @settitle GNU Coding Standards
-@c UPDATE THIS DATE WHENEVER YOU MAKE CHANGES!
-@set lastupdate 17 May 1996
+@c This date is automagically updated when you save this file:
+@set lastupdate June 24, 1999
 @c %**end of header
 
 @ifinfo
@@ -28,7 +28,7 @@ END-INFO-DIR-ENTRY
 
 @ifinfo
 GNU Coding Standards
-Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -59,7 +59,7 @@ by the Free Software Foundation.
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -84,13 +84,14 @@ Last updated @value{lastupdate}.
 @end ifinfo
 
 @menu
-* Preface::                    About the GNU Coding Standards
-* Intellectual Property::       Keeping Free Software Free
-* Design Advice::               General Program Design
-* Program Behavior::            Program Behavior for All Programs
-* Writing C::                   Making The Best Use of C
-* Documentation::              Documenting Programs
-* Managing Releases::           The Release Process
+* Preface::                 About the GNU Coding Standards
+* Legal Issues::            Keeping Free Software Free
+* Design Advice::           General Program Design
+* Program Behavior::        Program Behavior for All Programs
+* Writing C::               Making The Best Use of C
+* Documentation::           Documenting Programs
+* Managing Releases::       The Release Process
+* References::              References to Non-Free Software or Documentation
 @end menu
 
 @node Preface
@@ -104,8 +105,8 @@ programs written in C, but many of the rules and principles are useful
 even if you write in another programming language.  The rules often
 state reasons for writing in a certain way.
 
-Corrections or suggestions regarding this document should be sent to
-@code{gnu@@prep.ai.mit.edu}.  If you make a suggestion, please include a
+Corrections or suggestions for this document should be sent to
+@email{gnu@@gnu.org}.  If you make a suggestion, please include a
 suggested new wording for it; our time is limited.  We prefer a context
 diff to the @file{standards.texi} or @file{make-stds.texi} files, but if
 you don't have those files, please mail your suggestion anyway.
@@ -113,15 +114,15 @@ you don't have those files, please mail your suggestion anyway.
 This release of the GNU Coding Standards was last updated
 @value{lastupdate}.
 
-@node Intellectual Property
+@node Legal Issues
 @chapter Keeping Free Software Free
 
 This @value{CHAPTER} discusses how you can make sure that GNU software
 remains unencumbered.
 
 @menu
-* Reading Non-Free Code::      Referring to Proprietary Programs
-* Contributions::              Accepting Contributions
+* Reading Non-Free Code::       Referring to Proprietary Programs
+* Contributions::               Accepting Contributions
 @end menu
 
 @node Reading Non-Free Code
@@ -161,37 +162,47 @@ to free memory, or use a new GNU facility such as obstacks.
 @node Contributions
 @section Accepting Contributions
 
-If someone else sends you a piece of code to add to the program you are
-working on, we need legal papers to use it---the same sort of legal
-papers we will need to get from you.  @emph{Each} significant
-contributor to a program must sign some sort of legal papers in order
-for us to have clear title to the program.  The main author alone is not
+If the program you are working on is copyrighted by the Free Software
+Foundation, then when someone else sends you a piece of code to add to
+the program, we need legal papers to use it---just as we asked you to
+sign papers initially.  @emph{Each} person who makes a nontrivial
+contribution to a program must sign some sort of legal papers in order
+for us to have clear title to the program; the main author alone is not
 enough.
 
-So, before adding in any contributions from other people, tell us
-so we can arrange to get the papers.  Then wait until we tell you
+So, before adding in any contributions from other people, please tell
+us, so we can arrange to get the papers.  Then wait until we tell you
 that we have received the signed papers, before you actually use the
 contribution.
 
 This applies both before you release the program and afterward.  If
 you receive diffs to fix a bug, and they make significant changes, we
-need legal papers for it.
+need legal papers for that change.
+
+This also applies to comments and documentation files.  For copyright
+law, comments and code are just text.  Copyright applies to all kinds of
+text, so we need legal papers for all kinds.
+
+We know it is frustrating to ask for legal papers; it's frustrating for
+us as well.  But if you don't wait, you are going out on a limb---for
+example, what if the contributor's employer won't sign a disclaimer?
+You might have to take that code out again!
 
 You don't need papers for changes of a few lines here or there, since
 they are not significant for copyright purposes.  Also, you don't need
 papers if all you get from the suggestion is some ideas, not actual code
-which you use.  For example, if you write a different solution to the
-problem, you don't need to get papers.
-
-We know this is frustrating; it's frustrating for us as well.  But if
-you don't wait, you are going out on a limb---for example, what if the
-contributor's employer won't sign a disclaimer?  You might have to take
-that code out again!
+which you use.  For example, if someone send you one implementation, but
+you write a different implementation of the same idea, you don't need to
+get papers.
 
 The very worst thing is if you forget to tell us about the other
 contributor.  We could be very embarrassed in court some day as a
 result.
 
+We have more detailed advice for maintainers of programs; if you have
+reached the stage of actually maintaining a program for GNU (whether
+released or not), please ask us for a copy.
+
 @node Design Advice
 @chapter General Program Design
 
@@ -199,10 +210,10 @@ This @value{CHAPTER} discusses some of the issues you should take into
 account when designing your program.
 
 @menu
-* Compatibility::              Compatibility with other implementations
-* Using Extensions::           Using non-standard features
+* Compatibility::               Compatibility with other implementations
+* Using Extensions::            Using non-standard features
 * ANSI C::                      Using ANSI C features
-* Source Language::            Using languages other than C
+* Source Language::             Using languages other than C
 @end menu
 
 @node Compatibility
@@ -211,20 +222,20 @@ account when designing your program.
 With occasional exceptions, utility programs and libraries for GNU
 should be upward compatible with those in Berkeley Unix, and upward
 compatible with @sc{ansi} C if @sc{ansi} C specifies their behavior, and
-upward compatible with @sc{POSIX} if @sc{POSIX} specifies their
+upward compatible with @sc{posix} if @sc{posix} specifies their
 behavior.
 
 When these standards conflict, it is useful to offer compatibility
 modes for each of them.
 
-@sc{ansi} C and @sc{POSIX} prohibit many kinds of extensions.  Feel free
+@sc{ansi} C and @sc{posix} prohibit many kinds of extensions.  Feel free
 to make the extensions anyway, and include a @samp{--ansi},
 @samp{--posix}, or @samp{--compatible} option to turn them off.
 However, if the extension has a significant chance of breaking any real
 programs or scripts, then it is not really upward compatible.  Try to
 redesign its interface.
 
-Many GNU programs suppress extensions that conflict with POSIX if the
+Many GNU programs suppress extensions that conflict with @sc{posix} if the
 environment variable @code{POSIXLY_CORRECT} is defined (even if it is
 defined with a null value).  Please make your program recognize this
 variable if appropriate.
@@ -236,9 +247,6 @@ completely with something totally different and better.  (For example,
 feature as well.  (There is a free @code{vi} clone, so we offer it.)
 
 Additional useful features not in Berkeley Unix are welcome.
-Additional programs with no counterpart in Unix may be useful,
-but our first priority is usually to duplicate what Unix already
-has.
 
 @node Using Extensions
 @section Using Non-standard Features
@@ -282,9 +290,16 @@ non-@sc{ansi} compilers).  And if a program is already written in
 @sc{ansi} C, there's no need to convert it to support non-@sc{ansi}
 compilers.
 
+If you don't know non-@sc{ansi} C, there's no need to learn it; just
+write in @sc{ansi} C.
+
 However, it is easy to support non-@sc{ansi} compilers in most programs,
-so you might still consider doing so when you write a program.  Instead
-of writing function definitions in @sc{ansi} prototype form,
+so you might still consider doing so when you write a program.  And if a
+program you are maintaining has such support, you should try to keep it
+working.
+
+To support pre-@sc{ansi} C, instead of writing function definitions in
+@sc{ansi} prototype form,
 
 @example
 int
@@ -311,11 +326,22 @@ int foo (int, int);
 
 You need such a declaration anyway, in a header file, to get the benefit
 of @sc{ansi} C prototypes in all the files where the function is called.
-And once you have it, you lose nothing by writing the function
-definition in the pre-@sc{ansi} style.
-
-If you don't know non-@sc{ansi} C, there's no need to learn it; just
-write in @sc{ansi} C.
+And once you have the declaration, you normally lose nothing by writing
+the function definition in the pre-@sc{ansi} style.
+
+This technique does not work for integer types narrower than @code{int}.
+If you think of an argument as being of a type narrower than @code{int},
+declare it as @code{int} instead.
+
+There are a few special cases where this technique is hard to use.  For
+example, if a function argument needs to hold the system type
+@code{dev_t}, you run into trouble, because @code{dev_t} is shorter than
+@code{int} on some machines; but you cannot use @code{int} instead,
+because @code{dev_t} is wider than @code{int} on some machines.  There
+is no type you can safely use on all machines in a non-@sc{ansi}
+definition.  The only way to support non-@sc{ansi} C and pass such an
+argument is to check the width of @code{dev_t} using Autoconf and choose
+the argument type accordingly.  This may not be worth the trouble.
 
 @node Source Language
 @section Using Languages Other Than C
@@ -323,13 +349,16 @@ write in @sc{ansi} C.
 Using a language other than C is like using a non-standard feature: it
 will cause trouble for users.  Even if GCC supports the other language,
 users may find it inconvenient to have to install the compiler for that
-other language in order to build your program.  So please write in C.
+other language in order to build your program.  For example, if you
+write your program in C++, people will have to install the C++ compiler
+in order to compile your program.  Thus, it is better if you write in C.
 
-There are three exceptions for this rule:
+But there are three situations when there is no disadvantage in using
+some other language:
 
 @itemize @bullet
 @item
-It is okay to use a special language if the same program contains an
+It is okay to use another language if your program contains an
 interpreter for that language.
 
 For example, if your program links with GUILE, it is ok to write part of
@@ -343,10 +372,14 @@ This is okay because the only people who want to build the tool will be
 those who have installed the other language anyway.
 
 @item
-If an application is not of extremely widespread interest, then perhaps
+If an application is of interest to a narrow community, then perhaps
 it's not important if the application is inconvenient to install.
 @end itemize
 
+C has one other advantage over C++ and other compiled languages: more
+people know C, so more people will find it easy to read and modify the
+program if it is written in C.
+
 @node Program Behavior
 @chapter Program Behavior for All Programs
 
@@ -355,10 +388,11 @@ describes general standards for error messages, the command line interface,
 and how libraries should behave.
 
 @menu
-* Semantics::                  Writing robust programs
-* Libraries::                  Library behavior
-* Errors::                     Formatting error messages
-* User Interfaces::            Standards for command line interfaces
+* Semantics::                   Writing robust programs
+* Libraries::                   Library behavior
+* Errors::                      Formatting error messages
+* User Interfaces::             Standards for command line interfaces
+* Option Table::                Table of long options.
 * Memory Usage::                When and how to care about memory needs
 @end menu
 
@@ -371,9 +405,13 @@ all data structures dynamically.  In most Unix utilities, ``long lines
 are silently truncated''.  This is not acceptable in a GNU utility.
 
 Utilities reading files should not drop NUL characters, or any other
-nonprinting characters @emph{including those with codes above 0177}.  The
-only sensible exceptions would be utilities specifically intended for
-interface to certain types of printers that can't handle those characters.
+nonprinting characters @emph{including those with codes above 0177}.
+The only sensible exceptions would be utilities specifically intended
+for interface to certain types of terminals or printers
+that can't handle those characters.
+Whenever possible, try to make programs work properly with
+sequences of bytes that represent multibyte characters, using encodings
+such as UTF-8 and others.
 
 Check every system call for an error return, unless you know you wish to
 ignore errors.  Include the system error text (from @code{perror} or
@@ -415,11 +453,18 @@ Try to avoid low-level interfaces to obscure Unix data structures (such
 as file directories, utmp, or the layout of kernel memory), since these
 are less likely to work compatibly.  If you need to find all the files
 in a directory, use @code{readdir} or some other high-level interface.
-These will be supported compatibly by GNU.
+These are supported compatibly by GNU.
 
-By default, the GNU system will provide the signal handling functions of
-@sc{BSD} and of @sc{POSIX}.  So GNU software should be written to use
-these.
+The preferred signal handling facilities are the BSD variant of
+@code{signal}, and the @sc{posix} @code{sigaction} function; the
+alternative USG @code{signal} interface is an inferior design.
+
+Nowadays, using the @sc{posix} signal functions may be the easiest way
+to make a program portable.  If you use @code{signal}, then on GNU/Linux
+systems running GNU libc version 1, you should include
+@file{bsd/signal.h} instead of @file{signal.h}, so as to get BSD
+behavior.  It is up to you whether to support systems where
+@code{signal} has only the USG behavior, or give up on them.
 
 In error checks that detect ``impossible'' conditions, just abort.
 There is usually no point in printing any message.  These checks
@@ -477,6 +522,20 @@ Error messages from compilers should look like this:
 @var{source-file-name}:@var{lineno}: @var{message}
 @end example
 
+@noindent
+If you want to mention the column number, use this format:
+
+@example
+@var{source-file-name}:@var{lineno}:@var{column}: @var{message}
+@end example
+
+@noindent
+Line numbers should start from 1 at the beginning of the file, and
+column numbers should start from 1 at the beginning of the line.  (Both
+of these conventions are chosen for compatibility.)  Calculate column
+numbers assuming that space and all ASCII printing characters have
+equal width, and assuming tab stops every 8 columns.
+
 Error messages from other noninteractive programs should look like this:
 
 @example
@@ -493,6 +552,12 @@ when there is an appropriate source file, or like this:
 @noindent
 when there is no relevant source file.
 
+If you want to mention the column number, use this format:
+
+@example
+@var{program}:@var{source-file-name}:@var{lineno}:@var{column}: @var{message}
+@end example
+
 In an interactive program (one that is reading commands from a
 terminal), it is better not to include the program name in an error
 message.  The place to indicate which program is running is in the
@@ -520,8 +585,10 @@ to select among the alternate behaviors.
 
 Likewise, please don't make the behavior of the program depend on the
 type of output device it is used with.  Device independence is an
-important principle of the system's design; do not compromise it
-merely to save someone from typing an option now and then.
+important principle of the system's design; do not compromise it merely
+to save someone from typing an option now and then.  (Variation in error
+message syntax when using a terminal is ok, because that is a side issue
+that people do not depend on.)
 
 If you think one behavior is most useful when the output is to a
 terminal, and another is most useful when the output is a file or a
@@ -537,11 +604,11 @@ output device type.  For example, we provide a @code{dir} program much
 like @code{ls} except that its default output format is always
 multi-column format.
 
-It is a good idea to follow the @sc{POSIX} guidelines for the
+It is a good idea to follow the @sc{posix} guidelines for the
 command-line options of a program.  The easiest way to do this is to use
 @code{getopt} to parse them.  Note that the GNU version of @code{getopt}
 will normally permit options anywhere among the arguments unless the
-special argument @samp{--} is used.  This is not what @sc{POSIX}
+special argument @samp{--} is used.  This is not what @sc{posix}
 specifies; it is a GNU extension.
 
 Please define long-named options that are equivalent to the
@@ -554,26 +621,119 @@ consistent from program to program.  For example, users should be able
 to expect the ``verbose'' option of any GNU program which has one, to be
 spelled precisely @samp{--verbose}.  To achieve this uniformity, look at
 the table of common long-option names when you choose the option names
-for your program.  The table appears below.
-
-If you use names not already in the table, please send
-@samp{gnu@@prep.ai.mit.edu} a list of them, with their meanings, so we
-can update the table.
-
-It is usually a good idea for file names given as ordinary arguments
-to be input files only; any output files would be specified using
-options (preferably @samp{-o}).  Even if you allow an output file name
-as an ordinary argument for compatibility, try to provide a suitable
-option as well.  This will lead to more consistency among GNU
-utilities, so that there are fewer idiosyncracies for users to
-remember.
-
-Programs should support an option @samp{--version} which prints the
-program's version number on standard output and exits successfully, and
-an option @samp{--help} which prints option usage information on
-standard output and exits successfully.  These options should inhibit
-the normal function of the command; they should do nothing except print
-the requested information.
+for your program (@pxref{Option Table}).
+
+It is usually a good idea for file names given as ordinary arguments to
+be input files only; any output files would be specified using options
+(preferably @samp{-o} or @samp{--output}).  Even if you allow an output
+file name as an ordinary argument for compatibility, try to provide an
+option as another way to specify it.  This will lead to more consistency
+among GNU utilities, and fewer idiosyncracies for users to remember.
+
+All programs should support two standard options: @samp{--version}
+and @samp{--help}.
+
+@table @code
+@item --version
+This option should direct the program to print information about its name,
+version, origin and legal status, all on standard output, and then exit
+successfully.  Other options and arguments should be ignored once this
+is seen, and the program should not perform its normal function.
+
+The first line is meant to be easy for a program to parse; the version
+number proper starts after the last space.  In addition, it contains
+the canonical name for this program, in this format:
+
+@example
+GNU Emacs 19.30
+@end example
+
+@noindent
+The program's name should be a constant string; @emph{don't} compute it
+from @code{argv[0]}.  The idea is to state the standard or canonical
+name for the program, not its file name.  There are other ways to find
+out the precise file name where a command is found in @code{PATH}.
+
+If the program is a subsidiary part of a larger package, mention the
+package name in parentheses, like this:
+
+@example
+emacsserver (GNU Emacs) 19.30
+@end example
+
+@noindent
+If the package has a version number which is different from this
+program's version number, you can mention the package version number
+just before the close-parenthesis.
+
+If you @strong{need} to mention the version numbers of libraries which
+are distributed separately from the package which contains this program,
+you can do so by printing an additional line of version info for each
+library you want to mention.  Use the same format for these lines as for
+the first line.
+
+Please do not mention all of the libraries that the program uses ``just
+for completeness''---that would produce a lot of unhelpful clutter.
+Please mention library version numbers only if you find in practice that
+they are very important to you in debugging.
+
+The following line, after the version number line or lines, should be a
+copyright notice.  If more than one copyright notice is called for, put
+each on a separate line.
+
+Next should follow a brief statement that the program is free software,
+and that users are free to copy and change it on certain conditions.  If
+the program is covered by the GNU GPL, say so here.  Also mention that
+there is no warranty, to the extent permitted by law.
+
+It is ok to finish the output with a list of the major authors of the
+program, as a way of giving credit.
+
+Here's an example of output that follows these rules:
+
+@smallexample
+GNU Emacs 19.34.5
+Copyright (C) 1996 Free Software Foundation, Inc.
+GNU Emacs comes with NO WARRANTY,
+to the extent permitted by law.
+You may redistribute copies of GNU Emacs
+under the terms of the GNU General Public License.
+For more information about these matters,
+see the files named COPYING.
+@end smallexample
+
+You should adapt this to your program, of course, filling in the proper
+year, copyright holder, name of program, and the references to
+distribution terms, and changing the rest of the wording as necessary.
+
+This copyright notice only needs to mention the most recent year in
+which changes were made---there's no need to list the years for previous
+versions' changes.  You don't have to mention the name of the program in
+these notices, if that is inconvenient, since it appeared in the first
+line.
+
+@item --help
+This option should output brief documentation for how to invoke the
+program, on standard output, then exit successfully.  Other options and
+arguments should be ignored once this is seen, and the program should
+not perform its normal function.
+
+Near the end of the @samp{--help} option's output there should be a line
+that says where to mail bug reports.  It should have this format:
+
+@example
+Report bugs to @var{mailing-address}.
+@end example
+@end table
+
+@node Option Table
+@section Table of Long Options
+
+Here is a table of long options used by GNU programs.  It is surely
+incomplete, but we aim to list all the options that a new program might
+want to be compatible with.  If you use names not already in the table,
+please send @email{gnu@@gnu.org} a list of them, with their
+meanings, so we can update the table.
 
 @c Please leave newlines between items in this table; it's much easier
 @c to update when it isn't completely squashed together and unreadable.
@@ -581,10 +741,7 @@ the requested information.
 @c a semicolon between the lists of the programs that use them, not a
 @c period.   --friedman
 
-Here is the table of long options used by GNU programs.
-
 @table @samp
-
 @item after-date
 @samp{-N} in @code{tar}.
 
@@ -635,6 +792,9 @@ and @code{unexpand}.
 @item avoid-wraps
 @samp{-n} in @code{wdiff}.
 
+@item background
+For server programs, run in the background.
+
 @item backward-search
 @samp{-B} in @code{ctags}.
 
@@ -759,6 +919,9 @@ Used in @code{tar} and @code{cpio}.
 @item dereference-args
 @samp{-D} in @code{du}.
 
+@item device
+Specify an I/O device (special file name).
+
 @item diacritics
 @samp{-d} in @code{recode}.
 
@@ -891,6 +1054,11 @@ Used in @code{makeinfo}.
 @item force-prefix
 @samp{-F} in @code{shar}.
 
+@item foreground
+For server programs, run in the foreground;
+in other words, don't do anything special to run the server
+in the background.
+
 @item format
 Used in @code{ls}, @code{time}, and @code{ptx}.
 
@@ -1070,7 +1238,7 @@ Used in @code{su}.
 @item machine
 No listing of which programs already use this;
 someone should check to
-see if any actually do and tell @code{gnu@@prep.ai.mit.edu}.
+see if any actually do, and tell @email{gnu@@gnu.org}.
 
 @item macro-name
 @samp{-M} in @code{ptx}.
@@ -1195,6 +1363,9 @@ Used in @code{makeinfo}.
 @item no-validate
 Used in @code{makeinfo}.
 
+@item no-wait
+Used in @code{emacsclient}.
+
 @item no-warn
 Used in various programs to inhibit warnings.
 
@@ -1246,6 +1417,10 @@ Used in GDB.
 @item only-time
 @samp{-F} in @code{gprof}.
 
+@item options
+@samp{-o} in @code{getopt}, @code{fdlist}, @code{fdmount},
+@code{fdmountd}, and @code{fdumount}.
+
 @item output
 In various programs, specify the output file name.
 
@@ -1330,6 +1505,9 @@ Used in @code{tar} and @code{cp}.
 @item prompt
 @samp{-p} in @code{ed}.
 
+@item proxy
+Specify an HTTP proxy.
+
 @item query-user
 @samp{-X} in @code{shar}.
 
@@ -1337,9 +1515,9 @@ Used in @code{tar} and @code{cp}.
 @samp{-q} in Make.
 
 @item quiet
-Used in many programs to inhibit the usual output.  @strong{Please
-note:} every program accepting @samp{--quiet} should accept
-@samp{--silent} as a synonym.
+Used in many programs to inhibit the usual output.  @strong{Note:} every
+program accepting @samp{--quiet} should accept @samp{--silent} as a
+synonym.
 
 @item quiet-unshar
 @samp{-Q} in @code{shar}
@@ -1452,12 +1630,18 @@ Used by @code{recode} to chose files or pipes for sequencing passes.
 
 @item silent
 Used in many programs to inhibit the usual output.
-@strong{Please note:} every program accepting
+@strong{Note:} every program accepting
 @samp{--silent} should accept @samp{--quiet} as a synonym.
 
 @item size
 @samp{-s} in @code{ls}.
 
+@item socket
+Specify a file descriptor for a network server to use for its socket,
+instead of opening and binding a new socket.  This provides a way to
+run, in a nonpriveledged process, a server that normally needs a
+reserved port number.
+
 @item sort
 Used in @code{ls}.
 
@@ -1556,6 +1740,9 @@ Used in GDB and @code{objdump}.
 @item time
 Used in @code{ls} and @code{touch}.
 
+@item timeout
+Specify how long to wait before giving up on some operation.
+
 @item to-stdout
 @samp{-O} in @code{tar}.
 
@@ -1672,14 +1859,15 @@ This @value{CHAPTER} provides advice on how best to use the C language
 when writing GNU software.
 
 @menu
-* Formatting::                 Formatting Your Source Code
-* Comments::                   Commenting Your Work
-* Syntactic Conventions::      Clean Use of C Constructs
-* Names::                      Naming Variables and Functions
-* System Portability::         Portability between different operating systems
+* Formatting::                  Formatting Your Source Code
+* Comments::                    Commenting Your Work
+* Syntactic Conventions::       Clean Use of C Constructs
+* Names::                       Naming Variables and Functions
+* System Portability::          Portability between different operating systems
 * CPU Portability::             Supporting the range of CPU types
 * System Functions::            Portability and ``standard'' library functions
 * Internationalization::        Techniques for internationalization
+* Mmap::                        How you can safely use @code{mmap}.
 @end menu
 
 @node Formatting
@@ -1808,6 +1996,13 @@ page.  The formfeeds should appear alone on lines by themselves.
 Every program should start with a comment saying briefly what it is for.
 Example: @samp{fmt - filter for simple filling of text}.
 
+Please write the comments in a GNU program in English, because English
+is the one language that nearly all programmers in all countries can
+read.  If you do not write English well, please write comments in
+English as well as you can, then ask other people to help rewrite them.
+If you can't write comments in English, please find someone to work with
+you and translate your comments into English.
+
 Please put a comment on each function saying what the function does,
 what sorts of arguments it gets, and what the possible values of
 arguments mean and are used for.  It is not necessary to duplicate in
@@ -1862,6 +2057,11 @@ its sense}.  @samp{#else} should have a comment describing the condition
   @dots{}
 #endif /* not foo */
 @end group
+@group
+#ifdef foo
+  @dots{}
+#endif /* foo */
+@end group
 @end example
 
 @noindent
@@ -1875,9 +2075,13 @@ but, by contrast, write the comments this way for a @samp{#ifndef}:
   @dots{}
 #endif /* foo */
 @end group
+@group
+#ifndef foo
+  @dots{}
+#endif /* not foo */
+@end group
 @end example
 
-
 @node Syntactic Conventions
 @section Clean Use of C Constructs
 
@@ -2005,9 +2209,22 @@ Don't make the program ugly to placate @code{lint}.  Please don't insert any
 casts to @code{void}.  Zero without a cast is perfectly fine as a null
 pointer constant, except when calling a varargs function.
 
-@node  Names
+@node Names
 @section Naming Variables and Functions
 
+The names of global variables and functions in a program serve as
+comments of a sort.  So don't choose terse names---instead, look for
+names that give useful information about the meaning of the variable or
+function.  In a GNU program, names should be English, like other
+comments.
+
+Local variable names can be shorter, because they are used only within
+one context, where (presumably) comments explain their purpose.
+
+Try to limit your use of abbreviations in symbol names.  It is ok to
+make a few abbreviations, explain what they mean, and then use them
+frequently, but don't use lots of obscure abbreviations.
+
 Please use underscores to separate words in a name, so that the Emacs
 word commands can be useful within them.  Stick to lower case; reserve
 upper case for macros and @code{enum} constants, and for name-prefixes
@@ -2033,10 +2250,10 @@ When you want to define names with constant integer values, use
 constants.
 
 Use file names of 14 characters or less, to avoid creating gratuitous
-problems on older System V systems.  You can use the program @code{doschk} to test for
-this.  @code{doschk} also tests for potential name conflicts if the
-files were loaded onto an MS-DOS file system---something you may or may
-not care about.
+problems on older System V systems.  You can use the program
+@code{doschk} to test for this.  @code{doschk} also tests for potential
+name conflicts if the files were loaded onto an MS-DOS file
+system---something you may or may not care about.
 
 @node System Portability
 @section Portability between System Types
@@ -2066,14 +2283,10 @@ Avoid using the format of semi-internal data bases (e.g., directories)
 when there is a higher-level alternative (@code{readdir}).
 
 As for systems that are not like Unix, such as MSDOS, Windows, the
-Macintosh, VMS, and MVS, supporting them is usually so much work that it
-is better if you don't.
-
-The planned GNU kernel is not finished yet, but you can tell which
-facilities it will provide by looking at the GNU C Library Manual.  The
-GNU kernel is based on Mach, so the features of Mach will also be
-available.  However, if you use Mach features, you'll probably have
-trouble debugging your program today.
+Macintosh, VMS, and MVS, supporting them is often a lot of work.  When
+that is the case, it is better to spend your time adding features that
+will be useful on GNU and GNU/Linux, rather than on supporting other
+incompatible systems.
 
 @node CPU Portability
 @section Portability between @sc{cpu}s
@@ -2111,7 +2324,7 @@ that pass their arguments along to @code{printf} and friends:
 @example
 error (s, a1, a2, a3)
      char *s;
-     int a1, a2, a3;
+     char *a1, *a2, *a3;
 @{
   fprintf (stderr, "error: ");
   fprintf (stderr, s, a1, a2, a3);
@@ -2119,16 +2332,18 @@ error (s, a1, a2, a3)
 @end example
 
 @noindent
-In practice, this works on all machines, and it is much simpler than any
-``correct'' alternative.  Be sure @emph{not} to use a prototype
-for such functions.
+In practice, this works on all machines, since a pointer is generally
+the widest possible kind of argument, and it is much simpler than any
+``correct'' alternative.  Be sure @emph{not} to use a prototype for such
+functions.
 
 However, avoid casting pointers to integers unless you really need to.
-These assumptions really reduce portability, and in most programs they
-are easy to avoid.  In the cases where casting pointers to integers is
-essential---such as, a Lisp interpreter which stores type information as
-well as an address in one word---it is ok to do so, but you'll have to
-make explicit provisions to handle different word sizes.
+Outside of special situations, such casts greatly reduce portability,
+and in most programs they are easy to avoid.  In the cases where casting
+pointers to integers is essential---such as, a Lisp interpreter which
+stores type information as well as an address in one word---it is ok to
+do it, but you'll have to make explicit provisions to handle different
+word sizes.
 
 @node System Functions
 @section Calling System Functions
@@ -2145,6 +2360,11 @@ Don't use the value of @code{sprintf}.  It returns the number of
 characters written on some systems, but not on all systems.
 
 @item
+@code{main} should be declared to return type @code{int}.  It should
+terminate either by calling @code{exit} or by returning the integer
+status code; make sure it cannot ever return an undefined value.
+
+@item
 Don't declare system functions explicitly.
 
 Almost any declaration for a system function is wrong on some system.
@@ -2275,13 +2495,18 @@ translations for this package from the translations for other packages.
 Normally, the text domain name should be the same as the name of the
 package---for example, @samp{fileutils} for the GNU file utilities.
 
-To enable gettext to work, avoid writing code that makes assumptions
-about the structure of words.  Don't construct words from parts.  Here
-is an example of what not to do:
+To enable gettext to work well, avoid writing code that makes
+assumptions about the structure of words or sentences.  When you want
+the precise text of a sentence to vary depending on the data, use two or
+more alternative string constants each containing a complete sentences,
+rather than inserting conditionalized words or phrases into a single
+sentence framework.
+
+Here is an example of what not to do:
 
 @example
-prinf ("%d file%s processed", nfiles,
-       nfiles > 1 ? "s" : "");
+printf ("%d file%s processed", nfiles,
+        nfiles != 1 ? "s" : "");
 @end example
 
 @noindent
@@ -2289,8 +2514,8 @@ The problem with that example is that it assumes that plurals are made
 by adding `s'.  If you apply gettext to the format string, like this,
 
 @example
-prinf (gettext ("%d file%s processed"), nfiles,
-       nfiles > 1 ? "s" : "");
+printf (gettext ("%d file%s processed"), nfiles,
+        nfiles != 1 ? "s" : "");
 @end example
 
 @noindent
@@ -2298,9 +2523,9 @@ the message can use different words, but it will still be forced to use
 `s' for the plural.  Here is a better way:
 
 @example
-prinf ((nfiles > 1 ? "%d files processed"
-        : "%d file processed"),
-       nfiles);
+printf ((nfiles != 1 ? "%d files processed"
+         : "%d file processed"),
+        nfiles);
 @end example
 
 @noindent
@@ -2308,14 +2533,52 @@ This way, you can apply gettext to each of the two strings
 independently:
 
 @example
-prinf ((nfiles > 1 ? gettext ("%d files processed")
-        : gettext ("%d file processed")),
-       nfiles);
+printf ((nfiles != 1 ? gettext ("%d files processed")
+         : gettext ("%d file processed")),
+        nfiles);
+@end example
+
+@noindent
+This can be any method of forming the plural of the word for ``file'', and
+also handles languages that require agreement in the word for
+``processed''.
+
+A similar problem appears at the level of sentence structure with this
+code:
+
+@example
+printf ("#  Implicit rule search has%s been done.\n",
+        f->tried_implicit ? "" : " not");
 @end example
 
 @noindent
-This can handle any language, no matter how it forms the plural of the
-word for ``file.''
+Adding @code{gettext} calls to this code cannot give correct results for
+all languages, because negation in some languages requires adding words
+at more than one place in the sentence.  By contrast, adding
+@code{gettext} calls does the job straightfowardly if the code starts
+out like this:
+
+@example
+printf (f->tried_implicit
+        ? "#  Implicit rule search has been done.\n",
+        : "#  Implicit rule search has not been done.\n");
+@end example
+
+@node Mmap
+@section Mmap
+
+Don't assume that @code{mmap} either works on all files or fails
+for all files.  It may work on some files and fail on others.
+
+The proper way to use @code{mmap} is to try it on the specific file for
+which you want to use it---and if @code{mmap} doesn't work, fall back on
+doing the job in another way using @code{read} and @code{write}.
+
+The reason this precaution is needed is that the GNU kernel (the HURD)
+provides a user-extensible file system, in which there can be many
+different kinds of ``ordinary files.''  Many of them support
+@code{mmap}, but some do not.  It is important to make programs handle
+all these kinds of files.
 
 @node Documentation
 @chapter Documenting Programs
@@ -2323,8 +2586,9 @@ word for ``file.''
 @menu
 * GNU Manuals::                 Writing proper manuals.
 * Manual Structure Details::    Specific structure conventions.
+* License for Manuals::         Writing the distribution terms for a manual.
 * NEWS File::                   NEWS files supplement manuals.
-* Change Logs::                        Recording Changes
+* Change Logs::                 Recording Changes
 * Man Pages::                   Man pages are secondary.
 * Reading other Manuals::       How far you can go in learning
                                 from other manuals.
@@ -2334,21 +2598,54 @@ word for ``file.''
 @section GNU Manuals
 
 The preferred way to document part of the GNU system is to write a
-manual in the Texinfo formatting language.  See the Texinfo manual,
-either the hardcopy, or the on-line version available through
-@code{info} or the Emacs Info subsystem (@kbd{C-h i}).
-
-The manual should document all of the program's command-line options and
-all of its commands.  It should give examples of their use.  But don't
-organize the manual as a list of features.  Instead, organize it
-logically, by subtopics.  Address the goals that a user will have in
-mind, and explain how to accomplish them.
+manual in the Texinfo formatting language.  This makes it possible to
+produce a good quality formatted book, using @TeX{}, and to generate an
+Info file.  It is also possible to generate HTML output from Texinfo
+source.  See the Texinfo manual, either the hardcopy, or the on-line
+version available through @code{info} or the Emacs Info subsystem
+(@kbd{C-h i}).
+
+Programmers often find it most natural to structure the documentation
+following the structure of the implementation, which they know.  But
+this structure is not necessarily good for explaining how to use the
+program; it may be irrelevant and confusing for a user.
+
+At every level, from the sentences in a paragraph to the grouping of
+topics into separate manuals, the right way to structure documentation
+is according to the concepts and questions that a user will have in mind
+when reading it.  Sometimes this structure of ideas matches the
+structure of the implementation of the software being documented---but
+often they are different.  Often the most important part of learning to
+write good documentation is learning to notice when you are structuring
+the documentation like the implementation, and think about better
+alternatives.
+
+For example, each program in the GNU system probably ought to be
+documented in one manual; but this does not mean each program should
+have its own manual.  That would be following the structure of the
+implementation, rather than the structure that helps the user
+understand.
+
+Instead, each manual should cover a coherent @emph{topic}.  For example,
+instead of a manual for @code{diff} and a manual for @code{diff3}, we
+have one manual for ``comparison of files'' which covers both of those
+programs, as well as @code{cmp}.  By documenting these programs
+together, we can make the whole subject clearer.
+
+The manual which discusses a program should document all of the
+program's command-line options and all of its commands.  It should give
+examples of their use.  But don't organize the manual as a list of
+features.  Instead, organize it logically, by subtopics.  Address the
+questions that a user will ask when thinking about the job that the
+program does.
 
 In general, a GNU manual should serve both as tutorial and reference.
 It should be set up for convenient access to each topic through Info,
 and for reading straight through (appendixes aside).  A GNU manual
 should give a good introduction to a beginner reading through from the
 start, and should also provide all the details that hackers want.
+The Bison manual is a good example of this---please take a look at it
+to see what we mean.
 
 That is not as hard as it first sounds.  Arrange each chapter as a
 logical breakdown of its topic, but order the sections, and write their
@@ -2363,29 +2660,38 @@ the framework for a beginner to understand the rest of the manual.  The
 Bison manual provides a good example of how to do this.
 
 Don't use Unix man pages as a model for how to write GNU documentation;
-they are a bad example to follow.
+most of them are terse, badly structured, and give inadequate
+explanation of the underlying concepts.  (There are, of course
+exceptions.)  Also Unix man pages use a particular format which is
+different from what we use in GNU manuals.
+
+Please include an email address in the manual for where to report
+bugs @emph{in the manual}.
 
 Please do not use the term ``pathname'' that is used in Unix
 documentation; use ``file name'' (two words) instead.  We use the term
-``path'' only for search paths, which are lists of file names.
+``path'' only for search paths, which are lists of directory names.
+
+Please do not use the term ``illegal'' to refer to erroneous input to a
+computer program.  Please use ``invalid'' for this, and reserve the term
+``illegal'' for violations of law.
 
 @node Manual Structure Details
 @section Manual Structure Details
 
-The title page of the manual should state the version of the program
-to which the manual applies.  The Top node of the manual should also
-contain this information.  If the manual is changing more frequently
-than or independent of the program, also state a version number for
-the manual in both of these places.
-
-The manual should have a node named @samp{@var{program} Invocation} or
-@samp{Invoking @var{program}}, where @var{program} stands for the name
-of the program being described, as you would type it in the shell to run
-the program.  This node (together with its subnodes, if any) should
-describe the program's command line arguments and how to run it (the
-sort of information people would look in a man page for).  Start with an
-@samp{@@example} containing a template for all the options and arguments
-that the program uses.
+The title page of the manual should state the version of the programs or
+packages documented in the manual.  The Top node of the manual should
+also contain this information.  If the manual is changing more
+frequently than or independent of the program, also state a version
+number for the manual in both of these places.
+
+Each program documented in the manual should have a node named
+@samp{@var{program} Invocation} or @samp{Invoking @var{program}}.  This
+node (together with its subnodes, if any) should describe the program's
+command line arguments and how to run it (the sort of information people
+would look in a man page for).  Start with an @samp{@@example}
+containing a template for all the options and arguments that the program
+uses.
 
 Alternatively, put a menu item in some menu whose item name fits one of
 the above patterns.  This identifies the node which that item points to
@@ -2397,6 +2703,18 @@ quickly reading just this part of its manual.
 If one manual describes several programs, it should have such a node for
 each program described.
 
+@node License for Manuals
+@section License for Manuals
+
+If the manual contains a copy of the GNU GPL or GNU LGPL, or if it
+contains chapters that make political or personal statements, please
+copy the distribution terms of the GNU Emacs Manual, and adapt it by
+modifying appropriately the list of special chapters that may not be
+modified or deleted.
+
+If the manual does not contain any such chapters, then imitate the
+simpler distribution terms of the Texinfo manual.
+
 @node NEWS File
 @section The NEWS File
 
@@ -2418,18 +2736,46 @@ Keep a change log to describe all the changes made to program source
 files.  The purpose of this is so that people investigating bugs in the
 future will know about the changes that might have introduced the bug.
 Often a new bug can be found by looking at what was recently changed.
-More importantly, change logs can help eliminate conceptual
-inconsistencies between different parts of a program; they can give you
-a history of how the conflicting concepts arose.
+More importantly, change logs can help you eliminate conceptual
+inconsistencies between different parts of a program, by giving you a
+history of how the conflicting concepts arose and who they came from.
+
+@menu
+* Change Log Concepts::         
+* Style of Change Logs::        
+* Simple Changes::              
+* Conditional Changes::         
+@end menu
+
+@node Change Log Concepts
+@subsection Change Log Concepts
 
-A change log file is normally called @file{ChangeLog} and covers an
+You can think of the change log as a conceptual ``undo list'' which
+explains how earlier versions were different from the current version.
+People can see the current version; they don't need the change log
+to tell them what is in it.  What they want from a change log is a
+clear explanation of how the earlier version differed.
+
+The change log file is normally called @file{ChangeLog} and covers an
 entire directory.  Each directory can have its own change log, or a
 directory can use the change log of its parent directory--it's up to
 you.
 
 Another alternative is to record change log information with a version
 control system such as RCS or CVS.  This can be converted automatically
-to a @file{ChangeLog} file.
+to a @file{ChangeLog} file using @code{rcs2log}; in Emacs, the command
+@kbd{C-x v a} (@code{vc-update-change-log}) does the job.
+
+There's no need to describe the full purpose of the changes or how they
+work together.  If you think that a change calls for explanation, you're
+probably right.  Please do explain it---but please put the explanation
+in comments in the code, where people will see it whenever they see the
+code.  For example, ``New function'' is enough for the change log when
+you add a function, because there should be a comment before the
+function definition to explain what it does.
+
+However, sometimes it is useful to write one line to describe the
+overall purpose of a batch of changes.
 
 The easiest way to add an entry to @file{ChangeLog} is with the Emacs
 command @kbd{M-x add-change-log-entry}.  An entry should have an
@@ -2437,12 +2783,10 @@ asterisk, the name of the changed file, and then in parentheses the name
 of the changed functions, variables or whatever, followed by a colon.
 Then describe the changes you made to that function or variable.
 
-Separate unrelated entries with blank lines.  When two entries
-represent parts of the same change, so that they work together, then
-don't put blank lines between them.  Then you can omit the file name
-and the asterisk when successive entries are in the same file.
+@node Style of Change Logs
+@subsection Style of Change Logs
 
-Here are some examples:
+Here are some examples of change log entries:
 
 @example
 * register.el (insert-register): Return nil.
@@ -2461,44 +2805,87 @@ Restart the tex shell if process is gone or stopped.
 
 It's important to name the changed function or variable in full.  Don't
 abbreviate function or variable names, and don't combine them.
-Subsequent maintainers will often
-search for a function name to find all the change log entries that
-pertain to it; if you abbreviate the name, they won't find it when they
-search.  For example, some people are tempted to abbreviate groups of
-function names by writing @samp{* register.el
-(@{insert,jump-to@}-register)}; this is not a good idea, since searching
-for @code{jump-to-register} or @code{insert-register} would not find the
-entry.
+Subsequent maintainers will often search for a function name to find all
+the change log entries that pertain to it; if you abbreviate the name,
+they won't find it when they search.
 
-There's no need to describe the full purpose of the changes or how they
-work together.  It is better to put such explanations in comments in the
-code.  That's why just ``New function'' is enough; there is a comment
-with the function in the source to explain what it does.
+For example, some people are tempted to abbreviate groups of function
+names by writing @samp{* register.el (@{insert,jump-to@}-register)};
+this is not a good idea, since searching for @code{jump-to-register} or
+@code{insert-register} would not find that entry.
 
-However, sometimes it is useful to write one line to describe the
-overall purpose of a large batch of changes.
+Separate unrelated change log entries with blank lines.  When two
+entries represent parts of the same change, so that they work together,
+then don't put blank lines between them.  Then you can omit the file
+name and the asterisk when successive entries are in the same file.
 
-You can think of the change log as a conceptual ``undo list'' which
-explains how earlier versions were different from the current version.
-People can see the current version; they don't need the change log
-to tell them what is in it.  What they want from a change log is a
-clear explanation of how the earlier version differed.
+@node Simple Changes
+@subsection Simple Changes
+
+Certain simple kinds of changes don't need much detail in the change
+log.
 
-When you change the calling sequence of a function in a simple
-fashion, and you change all the callers of the function, there is no
-need to make individual entries for all the callers.  Just write in
+When you change the calling sequence of a function in a simple fashion,
+and you change all the callers of the function, there is no need to make
+individual entries for all the callers that you changed.  Just write in
 the entry for the function being called, ``All callers changed.''
 
+@example
+* keyboard.c (Fcommand_execute): New arg SPECIAL.
+All callers changed.
+@end example
+
 When you change just comments or doc strings, it is enough to write an
-entry for the file, without mentioning the functions.  Write just,
-``Doc fix.''
+entry for the file, without mentioning the functions.  Just ``Doc
+fixes'' is enough for the change log.
 
 There's no need to make change log entries for documentation files.
 This is because documentation is not susceptible to bugs that are hard
 to fix.  Documentation does not consist of parts that must interact in a
 precisely engineered fashion.  To correct an error, you need not know
-the history of the erroneous passage; it is enough to compare the
-passage with the way the program actually works.
+the history of the erroneous passage; it is enough to compare what the
+documentation says with the way the program actually works.
+
+@node Conditional Changes
+@subsection Conditional Changes
+
+C programs often contain compile-time @code{#if} conditionals.  Many
+changes are conditional; sometimes you add a new definition which is
+entirely contained in a conditional.  It is very useful to indicate in
+the change log the conditions for which the change applies.
+
+Our convention for indicating conditional changes is to use square
+brackets around the name of the condition.
+
+Here is a simple example, describing a change which is conditional but
+does not have a function or entity name associated with it:
+
+@example
+* xterm.c [SOLARIS2]: Include string.h.
+@end example
+
+Here is an entry describing a new definition which is entirely
+conditional.  This new definition for the macro @code{FRAME_WINDOW_P} is
+used only when @code{HAVE_X_WINDOWS} is defined:
+
+@example
+* frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
+@end example
+
+Here is an entry for a change within the function @code{init_display},
+whose definition as a whole is unconditional, but the changes themselves
+are contained in a @samp{#ifdef HAVE_LIBNCURSES} conditional:
+
+@example
+* dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
+@end example
+
+Here is an entry for a change that takes affect only when
+a certain macro is @emph{not} defined:
+
+@example
+(gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
+@end example
 
 @node Man Pages
 @section Man Pages
@@ -2558,9 +2945,9 @@ makes it easy to include your package into the larger framework of
 all GNU software.
 
 @menu
-* Configuration::              How Configuration Should Work
+* Configuration::               How Configuration Should Work
 * Makefile Conventions::       Makefile Conventions
-* Releases::                   Making Releases
+* Releases::                    Making Releases
 @end menu
 
 @node Configuration
@@ -2633,7 +3020,7 @@ The @code{configure} script needs to be able to decode all plausible
 alternatives for how to describe a machine.  Thus, @samp{sun3-sunos4.1}
 would be a valid alias.  For many programs, @samp{vax-dec-ultrix} would
 be an alias for @samp{vax-dec-bsd}, simply because the differences
-between Ultrix and @sc{BSD} are rarely noticeable, but a few programs
+between Ultrix and BSD are rarely noticeable, but a few programs
 might need to distinguish them.
 @c Real 4.4BSD now runs on some Suns.
 
@@ -2665,9 +3052,12 @@ to work with @var{package}.
 @c  Giving an optional @var{parameter} of
 @c @samp{no} should omit @var{package}, if it is used by default.
 
-Possible values of @var{package} include @samp{x}, @samp{x-toolkit},
-@samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc}, and
-@samp{gdb}.
+Possible values of @var{package} include 
+@samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc},
+@samp{gdb},
+@samp{x}, 
+and
+@samp{x-toolkit}.
 
 Do not use a @samp{--with} option to specify the file name to use to
 find certain files.  That is outside the scope of what @samp{--with}
@@ -2734,9 +3124,9 @@ ignore most of its arguments.
 @node Releases
 @section Making Releases
 
-Package the distribution of Foo version 69.96 in a gzipped tar file
-named @file{foo-69.96.tar.gz}.  It should unpack into a subdirectory
-named @file{foo-69.96}.
+Package the distribution of @code{Foo version 69.96} up in a gzipped tar
+file with the name @file{foo-69.96.tar.gz}.  It should unpack into a
+subdirectory named @file{foo-69.96}.
 
 Building and installing the program should never modify any of the files
 contained in the distribution.  This means that all the files that form
@@ -2745,6 +3135,21 @@ files} and @dfn{non-source files}.  Source files are written by humans
 and never changed automatically; non-source files are produced from
 source files by programs under the control of the Makefile.
 
+The distribution should contain a file named @file{README} which gives
+the name of the package, and a general description of what it does.  It
+is also good to explain the purpose of each of the first-level
+subdirectories in the package, if there are any.  The @file{README} file
+should either state the version number of the package, or refer to where
+in the package it can be found.
+
+The @file{README} file should refer to the file @file{INSTALL}, which
+should contain an explanation of the installation procedure.
+
+The @file{README} file should also refer to the file which contains the
+copying conditions.  The GNU GPL, if used, should be in a file called
+@file{COPYING}.  If the GNU LGPL is used, it should be in a file called
+@file{COPYING.LIB}.
+
 Naturally, all the source files must be in the distribution.  It is okay
 to include non-source files in the distribution, provided they are
 up-to-date and machine-independent, so that building the distribution
@@ -2769,7 +3174,7 @@ Make sure that all the files in the distribution are world-readable.
 Make sure that no file name in the distribution is more than 14
 characters long.  Likewise, no file created by building the program
 should have a name longer than 14 characters.  The reason for this is
-that some systems adhere to a foolish interpretation of the POSIX
+that some systems adhere to a foolish interpretation of the @sc{posix}
 standard, and refuse to open a longer name, rather than truncating as
 they did in the past.
 
@@ -2797,6 +3202,31 @@ Leaving them out would make the distribution file a little smaller at
 the expense of possible inconvenience to a user who doesn't know what
 other files to get.
 
+@node References
+@chapter References to Non-Free Software and Documentation
+
+A GNU program should not recommend use of any non-free program.  We
+can't stop some people from writing proprietary programs, or stop other
+people from using them.  But we can and should avoid helping to
+advertise them to new customers.
+
+Sometimes it is important to mention how to build your package on top of
+some non-free operating system or other non-free base package.  In such
+cases, please mention the name of the non-free package or system in the
+briefest possible way.  Don't include any references for where to find
+more information about the proprietary program.  The goal should be that
+people already using the proprietary program will get the advice they
+need about how to use your free program, while people who don't already
+use the proprietary program will not see anything to encourage them to
+take an interest in it.
+
+Likewise, a GNU package should not refer the user to any non-free
+documentation for free software.  The need for free documentation to go
+with free software is now a major focus of the GNU project; to show that
+we are serious about the need for free documentation, we must not
+undermine our position by recommending use of documentation that isn't
+free.
+
 @contents
 
 @bye
index 3ce4715..c49af9f 100644 (file)
@@ -1,7 +1,11 @@
 % texinfo.tex -- TeX macros to handle Texinfo files.
-% $Id: texinfo.tex,v 2.227 1998/02/25 22:54:34 karl Exp $
 %
-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98
+% 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}
+%
+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
 % Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software; you can redistribute it and/or
 %
 % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:
-% ftp://ftp.cs.umb.edu/pub/tex/texinfo.tex
-% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-% 
-% Send bug reports to bug-texinfo@gnu.org.
-% Please include a precise test case in each bug report,
-% including a complete document with which we can reproduce the problem.
-% 
-% Texinfo macros (with @macro) are *not* supported by texinfo.tex.  You
-% have to run makeinfo -E to expand macros first; the texi2dvi script
-% does this.
-
-
-% Make it possible to create a .fmt file just by loading this file:
-% if the underlying format is not loaded, start by loading it now.
-% Added by gildea November 1993.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%   ftp://ftp.gnu.org/gnu/texinfo.tex
+%   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+%   ftp://texinfo.org/tex/texinfo.tex
+%   ftp://us.ctan.org/macros/texinfo/texinfo.tex
+%   (and all CTAN mirrors, finger ctan@us.ctan.org for a list).
+%   /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+% The texinfo.tex in any given Texinfo distribution could well be out
+% of date, so if that's what you're using, please check.
+% Texinfo has a small home page at http://texinfo.org/.
+%
+% Send bug reports to bug-texinfo@gnu.org.  Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem.  Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution.  For a simple
+% manual foo.texi, however, you can get away with this:
+%   tex foo.texi
+%   texindex foo.??
+%   tex foo.texi
+%   tex foo.texi
+%   dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
+% The extra runs of TeX get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages.  You can get
+% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
 
-% This automatically updates the version number based on RCS.
-\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision: 2.227 $
-\message{Loading texinfo package [Version \texinfoversion]:}
+\message{Loading texinfo [version \texinfoversion]:}
 
 % If in a .fmt file, print the version number
 % and turn on active characters that we couldn't do earlier because
 % they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}\message{}
+\everyjob{\message{[Texinfo version \texinfoversion]}%
   \catcode`+=\active \catcode`\_=\active}
 
 % Save some parts of plain tex whose names we will redefine.
-
 \let\ptexb=\b
 \let\ptexbullet=\bullet
 \let\ptexc=\c
 \let\ptexstar=\*
 \let\ptext=\t
 
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
+% We never want plain's outer \+ definition in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
 
 \message{Basics,}
 \chardef\other=12
 % starts a new line in the output.
 \newlinechar = `^^J
 
-% Set up fixed words for English.
-\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
-\def\putwordInfo{Info}%
-\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
-\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
-\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
-\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
-\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
-\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
-\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
-\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
-\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+\ifx\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\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
+\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
+\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
 
 % Ignore a token.
 %
 % since that produces some useless output on the terminal.
 %
 \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\ifx\eTeXversion\undefined
 \def\loggingall{\tracingcommands2 \tracingstats2
    \tracingpages1 \tracingoutput1 \tracinglostchars1
    \tracingmacros2 \tracingparagraphs1 \tracingrestores1
    \showboxbreadth\maxdimen\showboxdepth\maxdimen
 }%
+\else
+\def\loggingall{\tracingcommands3 \tracingstats2
+   \tracingpages1 \tracingoutput1 \tracinglostchars1
+   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+   \tracingscantokens1 \tracingassigns1 \tracingifs1
+   \tracinggroups1 \tracingnesting2
+   \showboxbreadth\maxdimen\showboxdepth\maxdimen
+}%
+\fi
 
 % For @cropmarks command.
 % Do @cropmarks to get crop marks.
-% 
+%
 \newif\ifcropmarks
 \let\cropmarks = \cropmarkstrue
 %
 % Dimensions to add cropmarks at corners.
 % Added by P. A. MacKay, 12 Nov. 1986
 %
-\newdimen\cornerlong \newdimen\cornerthick
-\newdimen\topandbottommargin
-\newdimen\outerhsize \newdimen\outervsize
-\cornerlong=1pc\cornerthick=.3pt        % These set size of cropmarks
-\outerhsize=7in
-%\outervsize=9.5in
-% Alternative @smallbook page size is 9.25in
-\outervsize=9.25in
-\topandbottommargin=.75in
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong  \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
 
 % Main output routine.
 \chardef\PAGE = 255
     \shipout\vbox{%
       \ifcropmarks \vbox to \outervsize\bgroup
         \hsize = \outerhsize
-        \line{\ewtop\hfil\ewtop}%
-        \nointerlineskip
-        \line{%
-          \vbox{\moveleft\cornerthick\nstop}%
-          \hfill
-          \vbox{\moveright\cornerthick\nstop}%
-        }%
+        \vskip-\topandbottommargin
+        \vtop to0pt{%
+          \line{\ewtop\hfil\ewtop}%
+          \nointerlineskip
+          \line{%
+            \vbox{\moveleft\cornerthick\nstop}%
+            \hfill
+            \vbox{\moveright\cornerthick\nstop}%
+          }%
+          \vss}%
         \vskip\topandbottommargin
         \line\bgroup
           \hfil % center the page within the outer (page) hsize.
         \unvbox\footlinebox
       \fi
       %
+      \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
+      %
       \ifcropmarks
           \egroup % end of \vbox\bgroup
         \hfil\egroup % end of (centering) \line\bgroup
         \vskip\topandbottommargin plus1fill minus1fill
         \boxmaxdepth = \cornerthick
-        \line{%
-          \vbox{\moveleft\cornerthick\nsbot}%
-          \hfill
-          \vbox{\moveright\cornerthick\nsbot}%
+        \vbox to0pt{\vss
+          \line{%
+            \vbox{\moveleft\cornerthick\nsbot}%
+            \hfill
+            \vbox{\moveright\cornerthick\nsbot}%
+          }%
+          \nointerlineskip
+          \line{\ewbot\hfil\ewbot}%
         }%
-        \nointerlineskip
-        \line{\ewbot\hfil\ewbot}%
       \egroup % \vbox from first cropmarks clause
       \fi
     }% end of \shipout\vbox
 %% Call \inENV within environments (after a \begingroup)
 \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
 \def\ENVcheck{%
-\ifENV\errmessage{Still within an environment.  Type Return to continue.}
+\ifENV\errmessage{Still within an environment; press RETURN to continue}
 \endgroup\fi} % This is not perfect, but it should reduce lossage
 
 % @begin foo  is the same as @foo, for now.
-\newhelp\EMsimple{Type <Return> to continue.}
+\newhelp\EMsimple{Press RETURN to continue.}
 
 \outer\def\begin{\parsearg\beginxxx}
 
 
 % @@ prints an @
 % Kludge this until the fonts are right (grr).
-\def\@{{\tt \char '100}}
+\def\@{{\tt\char64}}
 
 % This is turned off because it was never documented
 % and you can use @w{...} around a quote to suppress ligatures.
 %\def\'{{'}}
 
 % Used to generate quoted braces.
-\def\mylbrace {{\tt \char '173}}
-\def\myrbrace {{\tt \char '175}}
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
 \let\{=\mylbrace
 \let\}=\myrbrace
 \begingroup
   \fi\fi
 }
 
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
 % @: forces normal size whitespace following.
 \def\:{\spacefactor=1000 }
 
@@ -538,41 +594,47 @@ where each line of input produces a line of output.}
 %% 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\penalty 10000
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
 %\prevdepth=-1000pt
 %}}
 
 \def\needx#1{%
-  % Go into vertical mode, so we don't make a big box in the middle of a
+  % Ensure vertical mode, so we don't make a big box in the middle of a
   % paragraph.
   \par
   %
-  % Don't add any leading before our big empty box, but allow a page
-  % break, since the best break might be right here.
-  \allowbreak
-  \nointerlineskip
-  \vtop to #1\mil{\vfil}%
-  %
-  % TeX does not even consider page breaks if a penalty added to the
-  % main vertical list is 10000 or more.  But in order to see if the
-  % empty box we just added fits on the page, we must make it consider
-  % page breaks.  On the other hand, we don't want to actually break the
-  % page after the empty box.  So we use a penalty of 9999.
-  %
-  % There is an extremely small chance that TeX will actually break the
-  % page at this \penalty, if there are no other feasible breakpoints in
-  % sight.  (If the user is using lots of big @group commands, which
-  % almost-but-not-quite fill up a page, TeX will have a hard time doing
-  % good page breaking, for example.)  However, I could not construct an
-  % example where a page broke at this \penalty; if it happens in a real
-  % document, then we can reconsider our strategy.
-  \penalty9999
-  %
-  % Back up by the size of the box, whether we did a page break or not.
-  \kern -#1\mil
-  %
-  % Do not allow a page break right after this kern.
-  \nobreak
+  % If the @need value is less than one line space, it's useless.
+  \dimen0 = #1\mil
+  \dimen2 = \ht\strutbox
+  \advance\dimen2 by \dp\strutbox
+  \ifdim\dimen0 > \dimen2
+    %
+    % Do a \strut just to make the height of this box be normal, so the
+    % normal leading is inserted relative to the preceding line.
+    % And a page break here is fine.
+    \vtop to #1\mil{\strut\vfil}%
+    %
+    % TeX does not even consider page breaks if a penalty added to the
+    % main vertical list is 10000 or more.  But in order to see if the
+    % empty box we just added fits on the page, we must make it consider
+    % page breaks.  On the other hand, we don't want to actually break the
+    % page after the empty box.  So we use a penalty of 9999.
+    %
+    % There is an extremely small chance that TeX will actually break the
+    % page at this \penalty, if there are no other feasible breakpoints in
+    % sight.  (If the user is using lots of big @group commands, which
+    % almost-but-not-quite fill up a page, TeX will have a hard time doing
+    % good page breaking, for example.)  However, I could not construct an
+    % example where a page broke at this \penalty; if it happens in a real
+    % document, then we can reconsider our strategy.
+    \penalty9999
+    %
+    % Back up by the size of the box, whether we did a page break or not.
+    \kern -#1\mil
+    %
+    % Do not allow a page break right after this kern.
+    \nobreak
+  \fi
 }
 
 % @br   forces paragraph break
@@ -583,15 +645,19 @@ where each line of input produces a line of output.}
 % We do .5em per period so that it has the same spacing in a typewriter
 % font as three actual period characters.
 %
-\def\dots{\hbox to 1.5em{%
-  \hskip 0pt plus 0.25fil minus 0.25fil
-  .\hss.\hss.%
-  \hskip 0pt plus 0.5fil minus 0.5fil
-}}
+\def\dots{%
+  \leavevmode
+  \hbox to 1.5em{%
+    \hskip 0pt plus 0.25fil minus 0.25fil
+    .\hss.\hss.%
+    \hskip 0pt plus 0.5fil minus 0.5fil
+  }%
+}
 
 % @enddots{} is an end-of-sentence ellipsis.
-% 
+%
 \def\enddots{%
+  \leavevmode
   \hbox to 2em{%
     \hskip 0pt plus 0.25fil minus 0.25fil
     .\hss.\hss.\hss.%
@@ -602,7 +668,7 @@ where each line of input produces a line of output.}
 
 
 % @page    forces the start of a new page
-
+%
 \def\page{\par\vfill\supereject}
 
 % @exdent text....
@@ -669,420 +735,295 @@ where each line of input produces a line of output.}
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
 
-\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
-\parsearg \commentxxx}
-
-\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
 
 \let\c=\comment
 
-% @paragraphindent  is defined for the Info formatting commands only.
-\let\paragraphindent=\comment
-
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
-\let\chapter=\relax
-\let\unnumbered=\relax
-\let\top=\relax
-\let\unnumberedsec=\relax
-\let\unnumberedsection=\relax
-\let\unnumberedsubsec=\relax
-\let\unnumberedsubsection=\relax
-\let\unnumberedsubsubsec=\relax
-\let\unnumberedsubsubsection=\relax
-\let\section=\relax
-\let\subsec=\relax
-\let\subsubsec=\relax
-\let\subsection=\relax
-\let\subsubsection=\relax
-\let\appendix=\relax
-\let\appendixsec=\relax
-\let\appendixsection=\relax
-\let\appendixsubsec=\relax
-\let\appendixsubsection=\relax
-\let\appendixsubsubsec=\relax
-\let\appendixsubsubsection=\relax
-\let\contents=\relax
-\let\smallbook=\relax
-\let\titlepage=\relax
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% We cannot implement @paragraphindent asis, though.
+% 
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\def\paragraphindent{\parsearg\doparagraphindent}
+\def\doparagraphindent#1{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \defaultparindent = 0pt
+    \else
+      \defaultparindent = #1em
+    \fi
+  \fi
+  \parindent = \defaultparindent
 }
 
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-\def\ignoremorecommands{%
-  \let\defcodeindex = \relax
-  \let\defcv = \relax
-  \let\deffn = \relax
-  \let\deffnx = \relax
-  \let\defindex = \relax
-  \let\defivar = \relax
-  \let\defmac = \relax
-  \let\defmethod = \relax
-  \let\defop = \relax
-  \let\defopt = \relax
-  \let\defspec = \relax
-  \let\deftp = \relax
-  \let\deftypefn = \relax
-  \let\deftypefun = \relax
-  \let\deftypevar = \relax
-  \let\deftypevr = \relax
-  \let\defun = \relax
-  \let\defvar = \relax
-  \let\defvr = \relax
-  \let\ref = \relax
-  \let\xref = \relax
-  \let\printindex = \relax
-  \let\pxref = \relax
-  \let\settitle = \relax
-  \let\setchapternewpage = \relax
-  \let\setchapterstyle = \relax
-  \let\everyheading = \relax
-  \let\evenheading = \relax
-  \let\oddheading = \relax
-  \let\everyfooting = \relax
-  \let\evenfooting = \relax
-  \let\oddfooting = \relax
-  \let\headings = \relax
-  \let\include = \relax
-  \let\lowersections = \relax
-  \let\down = \relax
-  \let\raisesections = \relax
-  \let\up = \relax
-  \let\set = \relax
-  \let\clear = \relax
-  \let\item = \relax
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\def\exampleindent{\parsearg\doexampleindent}
+\def\doexampleindent#1{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \lispnarrowing = 0pt
+    \else
+      \lispnarrowing = #1em
+    \fi
+  \fi
 }
 
-% Ignore @ignore ... @end ignore.
+% @asis just yields its argument.  Used with @table, for example.
 %
-\def\ignore{\doignore{ignore}}
+\def\asis#1{#1}
 
-% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
+% @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.
 %
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\html{\doignore{html}}
-\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% Also ignore @macro ... @end macro.  The user must run texi2dvi,
-% which runs makeinfo to do macro expansion.  Ignore @unmacro, too.
-\def\macro{\doignore{macro}}
-\let\unmacro = \comment
+% This isn't quite enough for @math to work properly in indices, but it
+% seems unlikely it will ever be needed there.
+%
+\let\implicitmath = $
+\def\math#1{\implicitmath #1\implicitmath}
 
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{\implicitmath\ptexbullet\implicitmath}
+\def\minus{\implicitmath-\implicitmath}
 
-% @dircategory CATEGORY  -- specify a category of the dir file
-% which this file should belong to.  Ignore this in TeX.
-\let\dircategory = \comment
+% @refill is a no-op.
+\let\refill=\relax
 
-% Ignore text until a line `@end #1'.
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
 %
-\def\doignore#1{\begingroup
-  % Don't complain about control sequences we have declared \outer.
-  \ignoresections
-  %
-  % Define a command to swallow text until we reach `@end #1'.
-  \long\def\doignoretext##1\end #1{\enddoignore}%
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \catcode32 = 10
-  %
-  % Ignore braces, too, so mismatched braces don't cause trouble.
-  \catcode`\{ = 9
-  \catcode`\} = 9
-  %
-  % And now expand that command.
-  \doignoretext
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% 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{%
+   \iflinks
+     \readauxfile
+   \fi % \openindices needs to do some work in any case.
+   \openindices
+   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+   %
+   % If texinfo.cnf is present on the system, read it.
+   % Useful for site-wide @afourpaper, etc.
+   % Just to be on the safe side, close the input stream before the \input.
+   \openin 1 texinfo.cnf
+   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
+   \closein1
+   \temp
+   %
+   \comment % Ignore the actual filename.
 }
 
-% What we do to finish off ignored text.
+% Called from \setfilename.
 %
-\def\enddoignore{\endgroup\ignorespaces}%
+\def\openindices{%
+  \newindex{cp}%
+  \newcodeindex{fn}%
+  \newcodeindex{vr}%
+  \newcodeindex{tp}%
+  \newcodeindex{ky}%
+  \newcodeindex{pg}%
+}
 
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
-  \ifwarnedobs\relax\else
-  % We need to warn folks that they may have trouble with TeX 3.0.
-  % This uses \immediate\write16 rather than \message to get newlines.
-    \immediate\write16{}
-    \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
-    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-    \immediate\write16{If you are running another version of TeX, relax.}
-    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-    \immediate\write16{  Then upgrade your TeX installation if you can.}
-    \immediate\write16{  (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
-    \immediate\write16{If you are stuck with version 3.0, run the}
-    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
-    \immediate\write16{  to use a workaround.}
-    \immediate\write16{}
-    \global\warnedobstrue
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+\ifx\pdfoutput\undefined
+  \pdffalse
+  \let\pdfmkdest = \gobble
+  \let\pdfurl = \gobble
+  \let\endlink = \relax
+  \let\linkcolor = \relax
+  \let\pdfmakeoutlines = \relax
+\else
+  \pdftrue
+  \pdfoutput = 1
+  \input pdfcolor
+  \def\dopdfimage#1#2#3{%
+    \def\imagewidth{#2}%
+    \def\imageheight{#3}%
+    \ifnum\pdftexversion < 14
+      \pdfimage
+    \else
+      \pdfximage
     \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
-  \obstexwarn
-  % We must actually expand the ignored text to look for the @end
-  % command, so that nested ignore constructs work.  Thus, we put the
-  % text into a \vbox and then do nothing with the result.  To minimize
-  % the change of memory overflow, we follow the approach outlined on
-  % page 401 of the TeXbook: make the current font be a dummy font.
-  %
-  \setbox0 = \vbox\bgroup
-    % Don't complain about control sequences we have declared \outer.
-    \ignoresections
-    %
-    % Define `@end #1' to end the box, which will in turn undefine the
-    % @end command again.
-    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-    %
-    % We are going to be parsing Texinfo commands.  Most cause no
-    % trouble when they are used incorrectly, but some commands do
-    % complicated argument parsing or otherwise get confused, so we
-    % undefine them.
-    %
-    % We can't do anything about stray @-signs, unfortunately;
-    % they'll produce `undefined control sequence' errors.
-    \ignoremorecommands
-    %
-    % Set the current font to be \nullfont, a TeX primitive, and define
-    % all the font commands to also use \nullfont.  We don't use
-    % dummy.tfm, as suggested in the TeXbook, because not all sites
-    % might have that installed.  Therefore, math mode will still
-    % produce output, but that should be an extremely small amount of
-    % stuff compared to the main input.
-    %
-    \nullfont
-    \let\tenrm = \nullfont  \let\tenit = \nullfont  \let\tensl = \nullfont
-    \let\tenbf = \nullfont  \let\tentt = \nullfont  \let\smallcaps = \nullfont
-    \let\tensf = \nullfont
-    % Similarly for index fonts (mostly for their use in
-    % smallexample)
-    \let\indrm = \nullfont  \let\indit = \nullfont  \let\indsl = \nullfont
-    \let\indbf = \nullfont  \let\indtt = \nullfont  \let\indsc = \nullfont
-    \let\indsf = \nullfont
-    %
-    % Don't complain when characters are missing from the fonts.
-    \tracinglostchars = 0
-    %
-    % Don't bother to do space factor calculations.
-    \frenchspacing
-    %
-    % Don't report underfull hboxes.
-    \hbadness = 10000
-    %
-    % Do minimal line-breaking.
-    \pretolerance = 10000
-    %
-    % Do not execute instructions in @tex
-    \def\tex{\doignore{tex}}%
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.  Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
-%
-\def\set{\begingroup\catcode` =10
-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-  \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
-  \def\temp{#2}%
-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-  \fi
-  \endgroup
-}
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-%
-\def\value{\begingroup
-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-  \valuexxx}
-\def\valuexxx#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    {\{No value for ``#1''\}}%
-  \else
-    \csname SET#1\endcsname
-  \fi
-\endgroup}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifsetfail
-  \else
-    \expandafter\ifsetsucceed
-  \fi
-}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-\def\ifclear{\parsearg\ifclearxxx}
-\def\ifclearxxx #1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \expandafter\ifclearsucceed
-  \else
-    \expandafter\ifclearfail
-  \fi
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
-% following, through the first @end iftex (etc.).  Make `@end iftex'
-% (etc.) valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group).  So we must
-% define \Eiftex to redefine itself to be its previous value.  (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
-%
-\def\conditionalsucceed#1{%
-  \edef\temp{%
-    % Remember the current value of \E#1.
-    \let\nece{prevE#1} = \nece{E#1}%
-    %
-    % At the `@end #1', redefine \E#1 to be its previous value.
-    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-  }%
-  \temp
-}
-
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-
-% @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.
-%
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
-%
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
-
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-\def\donoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\setref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\unnumbnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\appendixnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% @setfilename is done at the beginning of every texinfo file.
-% 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{%
-   \readauxfile
-   \opencontents
-   \openindices
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   % Just to be on the safe side, close the input stream before the \input.
-   \openin 1 texinfo.cnf
-   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-   \closein1
-   \temp
-   %
-   \comment % Ignore the actual filename.
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
-% \def\macroxxx#1#2 \end macro{%
-% \expandafter\gdef\macrotemp#1{#2}%
-% \endgroup}
-
-%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
-%\def\linemacroxxx#1#2 \end linemacro{%
-%\let\parsearg=\relax
-%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
-%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
-%\expandafter\gdef\macrotempx#1{#2}%
-%\endgroup}
-
-%\def\butfirst#1{}
+      \ifx\empty\imagewidth\else width \imagewidth \fi
+      \ifx\empty\imageheight\else height \imageheight \fi
+      {#1.pdf}%
+    \ifnum\pdftexversion < 14 \else
+      \pdfrefximage \pdflastximage
+    \fi}
+  \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
+  \def\pdfmkpgn#1{#1@}
+  \let\linkcolor = \Cyan
+  \def\endlink{\Black\pdfendlink}
+  % Adding outlines to PDF; macros for calculating structure of outlines
+  % come from Petr Olsak
+  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+    \else \csname#1\endcsname \fi}
+  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+    \advance\tempnum by1
+    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+  \def\pdfmakeoutlines{{%
+    \openin 1 \jobname.toc
+    \ifeof 1\else\bgroup
+      \closein 1 
+      \indexnofonts
+      \def\tt{}
+      % thanh's hack / proper braces in bookmarks  
+      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+      %
+      \def\chapentry ##1##2##3{}
+      \def\unnumbchapentry ##1##2{}
+      \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
+      \def\unnumbsecentry ##1##2{}
+      \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
+      \def\unnumbsubsecentry ##1##2{}
+      \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
+      \def\unnumbsubsubsecentry ##1##2{}
+      \input \jobname.toc
+      \def\chapentry ##1##2##3{%
+        \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+      \def\unnumbchapentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \def\secentry ##1##2##3##4{%
+        \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
+      \def\unnumbsecentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \def\subsecentry ##1##2##3##4##5{%
+        \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
+      \def\unnumbsubsecentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \def\subsubsecentry ##1##2##3##4##5##6{%
+        \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
+      \def\unnumbsubsubsecentry ##1##2{%
+        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+      \input \jobname.toc
+    \egroup\fi
+  }}
+  \def\makelinks #1,{%
+    \def\params{#1}\def\E{END}%
+    \ifx\params\E
+      \let\nextmakelinks=\relax
+    \else
+      \let\nextmakelinks=\makelinks
+      \ifnum\lnkcount>0,\fi
+      \picknum{#1}%
+      \startlink attr{/Border [0 0 0]} 
+        goto name{\pdfmkpgn{\the\pgn}}%
+      \linkcolor #1%
+      \advance\lnkcount by 1%
+      \endlink
+    \fi
+    \nextmakelinks
+  }
+  \def\picknum#1{\expandafter\pn#1}
+  \def\pn#1{%
+    \def\p{#1}%
+    \ifx\p\lbrace
+      \let\nextpn=\ppn
+    \else
+      \let\nextpn=\ppnn
+      \def\first{#1}
+    \fi
+    \nextpn
+  }
+  \def\ppn#1{\pgn=#1\gobble}
+  \def\ppnn{\pgn=\first}
+  \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+    \ifx\PP\D\let\nextsp\relax
+    \else\let\nextsp\skipspaces
+      \ifx\p\space\else\addtokens{\filename}{\PP}%
+        \advance\filenamelength by 1
+      \fi
+    \fi
+    \nextsp}
+  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+  \ifnum\pdftexversion < 14
+    \let \startlink \pdfannotlink
+  \else
+    \let \startlink \pdfstartlink
+  \fi
+  \def\pdfurl#1{%
+    \begingroup
+      \normalturnoffactive\def\@{@}%
+      \leavevmode\Red
+      \startlink attr{/Border [0 0 0]}%
+        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+        % #1
+    \endgroup}
+  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+  \def\maketoks{%
+    \expandafter\poptoks\the\toksA|ENDTOKS|
+    \ifx\first0\adn0
+    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 
+    \else
+      \ifnum0=\countA\else\makelink\fi
+      \ifx\first.\let\next=\done\else
+        \let\next=\maketoks
+        \addtokens{\toksB}{\the\toksD}
+        \ifx\first,\addtokens{\toksB}{\space}\fi
+      \fi
+    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+    \next}
+  \def\makelink{\addtokens{\toksB}%
+    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+  \def\pdflink#1{%
+    \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
+    \linkcolor #1\endlink}
+  \def\mkpgn#1{#1@} 
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\fi % \ifx\pdfoutput
 
 
 \message{fonts,}
-
 % Font-change commands.
 
-% Texinfo supports the sans serif font style, which plain TeX does not.
+% 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.
 \newfam\sffam
 \def\sf{\fam=\sffam \tensf}
@@ -1148,22 +1089,17 @@ where each line of input produces a line of output.}
 \setfont\deftt\ttshape{10}{\magstep1}
 \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
 
-% Fonts for indices and small examples (9pt).
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett\ttshape{9}{1000}
-\setfont\indrm\rmshape{9}{1000}
-\setfont\indit\slshape{9}{1000}
-\let\indsl=\indit
-\let\indtt=\ninett
-\let\indttsl=\ninett
-\let\indsf=\indrm
-\let\indbf=\indrm
-\setfont\indsc\scshape{10}{900}
-\font\indi=cmmi9
-\font\indsy=cmsy9
+% Fonts for indices, footnotes, small examples (9pt).
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
 
 % Fonts for title page:
 \setfont\titlerm\rmbshape{12}{\magstep3}
@@ -1277,11 +1213,12 @@ where each line of input produces a line of output.}
   \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
   \resetmathfonts \setleading{15pt}}
 \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\indexfonts{%
-  \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
-  \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-  \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
-  \resetmathfonts \setleading{12pt}}
+\def\smallfonts{%
+  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+  \let\tenttsl=\smallttsl
+  \resetmathfonts \setleading{11pt}}
 
 % Set up the default fonts, so we can use them for creating boxes.
 %
@@ -1305,13 +1242,14 @@ where each line of input produces a line of output.}
 % \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\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
 
 \let\i=\smartitalic
-\let\var=\smartitalic
-\let\dfn=\smartitalic
+\let\var=\smartslanted
+\let\dfn=\smartslanted
 \let\emph=\smartitalic
-\let\cite=\smartitalic
+\let\cite=\smartslanted
 
 \def\b#1{{\bf #1}}
 \let\strong=\b
@@ -1329,9 +1267,9 @@ where each line of input produces a line of output.}
 }
 \let\ttfont=\t
 \def\samp#1{`\tclose{#1}'\null}
-\setfont\smallrm\rmshape{8}{1000}
-\font\smallsy=cmsy9
-\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
+\setfont\keyrm\rmshape{8}{1000}
+\font\keysy=cmsy9
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
   \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
     \vbox{\hrule\kern-0.4pt
      \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
@@ -1341,7 +1279,9 @@ where each line of input produces a line of output.}
 %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
 \def\ctrl #1{{\tt \rawbackslash \hat}#1}
 
+% @file, @option are the same as @samp.
 \let\file=\samp
+\let\option=\samp
 
 % @code is a modification of @t,
 % which makes spaces the same size as normal in the surrounding text.
@@ -1376,20 +1316,18 @@ where each line of input produces a line of output.}
 % and arrange explicitly to hyphenate at a dash.
 %  -- rms.
 {
-\catcode`\-=\active
-\catcode`\_=\active
-\catcode`\|=\active
-\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
-% The following is used by \doprintindex to insure that long function names
-% wrap around.  It is necessary for - and _ to be active before the index is
-% read from the file, as \entry parses the arguments long before \code is
-% ever called.  -- mycroft
-% _ is always active; and it shouldn't be \let = to an _ that is a
-% subscript character anyway. Then, @cindex @samp{_} (for example)
-% fails.  --karl
-\global\def\indexbreaks{%
-  \catcode`\-=\active \let-\realdash
-}
+  \catcode`\-=\active
+  \catcode`\_=\active
+  %
+  \global\def\code{\begingroup
+    \catcode`\-=\active \let-\codedash
+    \catcode`\_=\active \let_\codeunder
+    \codex
+  }
+  %
+  % If we end up with any active - characters when handling the index,
+  % just treat them as a normal -.
+  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
 }
 
 \def\realdash{-}
@@ -1430,27 +1368,55 @@ where each line of input produces a line of output.}
 \else{\tclose{\kbdfont\look}}\fi
 \else{\tclose{\kbdfont\look}}\fi}
 
-% @url.  Quotes do not seem necessary, so use \code.
+% For @url, @env, @command quotes seem unnecessary, so use \code.
 \let\url=\code
-
-% @uref (abbreviation for `urlref') takes an optional second argument
-% specifying the text to display.  First (mandatory) arg is the url.
-% Perhaps eventually put in a hypertex \special here.
-% 
-\def\uref#1{\urefxxx #1,,\finish}
-\def\urefxxx#1,#2,#3\finish{%
-  \setbox0 = \hbox{\ignorespaces #2}%
+\let\env=\code
+\let\command=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+  \unsepspaces
+  \pdfurl{#1}%
+  \setbox0 = \hbox{\ignorespaces #3}%
   \ifdim\wd0 > 0pt
-    \unhbox0\ (\code{#1})%
+    \unhbox0 % third arg given, show only that
   \else
-    \code{#1}%
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0 > 0pt
+      \ifpdf
+        \unhbox0             % PDF: 2nd arg given, show only it
+      \else
+        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+      \fi
+    \else
+      \code{#1}% only url given, so show it
+    \fi
   \fi
-}
+  \endlink
+\endgroup}
 
-% rms does not like the angle brackets --karl, 17may97.
-% So now @email is just like @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}
-\let\email=\uref
+\ifpdf
+  \def\email#1{\doemail#1,,\finish}
+  \def\doemail#1,#2,#3\finish{\begingroup
+    \unsepspaces
+    \pdfurl{mailto:#1}%
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+    \endlink
+  \endgroup}
+\else
+  \let\email=\uref
+\fi
 
 % Check if we are currently using a typewriter font.  Since all the
 % Computer Modern typewriter fonts have zero interword stretch (and
@@ -1460,8 +1426,7 @@ where each line of input produces a line of output.}
 \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
 
 % Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of
-% @dmn{}pt.
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
 %
 \def\dmn#1{\thinspace #1}
 
@@ -1472,11 +1437,14 @@ where each line of input produces a line of output.}
 % 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
-% Use of \lowercase was suggested.
 \def\sc#1{{\smallcaps#1}}       % smallcaps font
 \def\ii#1{{\it #1}}             % italic font
 
+% @acronym downcases the argument and prints in smallcaps.
+\def\acronym#1{{\smallcaps \lowercase{#1}}}
+
 % @pounds{} is a sterling sign.
 \def\pounds{{\it\$}}
 
@@ -1490,15 +1458,20 @@ where each line of input produces a line of output.}
 \newif\ifseenauthor
 \newif\iffinishedtitlepage
 
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
 \def\shorttitlepage{\parsearg\shorttitlepagezzz}
 \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
         \endgroup\page\hbox{}\page}
 
 \def\titlepage{\begingroup \parindent=0pt \textfonts
    \let\subtitlerm=\tenrm
-% I deinstalled the following change because \cmr12 is undefined.
-% This change was not in the ChangeLog anyway.  --rms.
-%   \let\subtitlerm=\cmr12
    \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
    %
    \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
@@ -1547,6 +1520,23 @@ where each line of input produces a line of output.}
    % after the title page, which we certainly don't want.
    \oldpage
    \endgroup
+   %
+   % If they want short, they certainly want long too.
+   \ifsetshortcontentsaftertitlepage
+     \shortcontents
+     \contents
+     \global\let\shortcontents = \relax
+     \global\let\contents = \relax
+   \fi
+   %
+   \ifsetcontentsaftertitlepage
+     \contents
+     \global\let\contents = \relax
+     \global\let\shortcontents = \relax
+   \fi
+   %
+   \ifpdf \pdfmakepagedesttrue \fi
+   %
    \HEADINGSon
 }
 
@@ -1560,10 +1550,10 @@ where each line of input produces a line of output.}
 
 \let\thispage=\folio
 
-\newtoks \evenheadline    % Token sequence for heading line of even pages
-\newtoks \oddheadline     % Token sequence for heading line of odd pages
-\newtoks \evenfootline    % Token sequence for footing line of even pages
-\newtoks \oddfootline     % Token sequence for footing line of odd pages
+\newtoks\evenheadline    % headline on even pages
+\newtoks\oddheadline     % headline on odd pages
+\newtoks\evenfootline    % footline on even pages
+\newtoks\oddfootline     % footline on odd pages
 
 % Now make Tex use those variables
 \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
@@ -1681,39 +1671,23 @@ where each line of input produces a line of output.}
 
 % Subroutines used in generating headings
 % Produces Day Month Year style of output.
-\def\today{\number\day\space
-\ifcase\month\or
-January\or February\or March\or April\or May\or June\or
-July\or August\or September\or October\or November\or December\fi
-\space\number\year}
-
-% Use this if you want the Month Day, Year style of output.
-%\def\today{\ifcase\month\or
-%January\or February\or March\or April\or May\or June\or
-%July\or August\or September\or October\or November\or December\fi
-%\space\number\day, \number\year}
-
-% @settitle line...  specifies the title of the document, for headings
-% It generates no output of its own
-
-\def\thistitle{No Title}
+\def\today{%
+  \number\day\space
+  \ifcase\month
+  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+  \fi
+  \space\number\year}
+
+% @settitle line...  specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
 \def\settitle{\parsearg\settitlezzz}
 \def\settitlezzz #1{\gdef\thistitle{#1}}
 
 
 \message{tables,}
-
-% @tabs -- simple alignment
-
-% These don't work.  For one thing, \+ is defined as outer.
-% So these macros cannot even be defined.
-
-%\def\tabs{\parsearg\tabszzz}
-%\def\tabszzz #1{\settabs\+#1\cr}
-%\def\tabline{\parsearg\tablinezzz}
-%\def\tablinezzz #1{\+#1\cr}
-%\def\&{&}
-
 % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
 
 % default indentation of table text
@@ -1757,11 +1731,6 @@ July\or August\or September\or October\or November\or December\fi
   \itemindex{#1}%
   \nobreak % This prevents a break before @itemx.
   %
-  % Be sure we are not still in the middle of a paragraph.
-  %{\parskip = 0in
-  %\par
-  %}%
-  %
   % If the item text does not fit in the space we have, put it on a line
   % by itself, and do not allow a page break either before or after that
   % line.  We do not start a paragraph here because then if the next
@@ -1790,13 +1759,17 @@ July\or August\or September\or October\or November\or December\fi
     \itemxneedsnegativevskipfalse
   \else
     % The item text fits into the space.  Start a paragraph, so that the
-    % following text (if any) will end up on the same line.  Since that
-    % text will be indented by \tableindent, we make the item text be in
-    % a zero-width box.
+    % following text (if any) will end up on the same line.
     \noindent
-    \rlap{\hskip -\tableindent\box0}\ignorespaces%
-    \endgroup%
-    \itemxneedsnegativevskiptrue%
+    % Do this with kerns and \unhbox so that if there is a footnote in
+    % the item text, it can migrate to the main vertical list and
+    % eventually be printed.
+    \nobreak\kern-\tableindent
+    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+    \unhbox0
+    \nobreak\kern\dimen0
+    \endgroup
+    \itemxneedsnegativevskiptrue
   \fi
 }
 
@@ -1807,9 +1780,10 @@ July\or August\or September\or October\or November\or December\fi
 \def\xitem{\errmessage{@xitem while not in a table}}
 \def\xitemx{\errmessage{@xitemx while not in a table}}
 
-%% Contains a kludge to get @end[description] to work
+% Contains a kludge to get @end[description] to work.
 \def\description{\tablez{\dontindex}{1}{}{}{}{}}
 
+% @table, @ftable, @vtable.
 \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
 {\obeylines\obeyspaces%
 \gdef\tablex #1^^M{%
@@ -1869,7 +1843,7 @@ July\or August\or September\or October\or November\or December\fi
 \def\itemize{\parsearg\itemizezzz}
 
 \def\itemizezzz #1{%
-  \begingroup % ended by the @end itemsize
+  \begingroup % ended by the @end itemize
   \itemizey {#1}{\Eitemize}
 }
 
@@ -2082,46 +2056,60 @@ July\or August\or September\or October\or November\or December\fi
 \multitablelinespace=0pt
 
 % Macros used to set up halign preamble:
-% 
+%
 \let\endsetuptable\relax
 \def\xendsetuptable{\endsetuptable}
 \let\columnfractions\relax
 \def\xcolumnfractions{\columnfractions}
 \newif\ifsetpercent
 
-% 2/1/96, to allow fractions to be given with more than one digit.
-\def\pickupwholefraction#1 {\global\advance\colcount by1 %
-\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
-\setuptable}
+% #1 is the part of the @columnfraction before the decimal point, which
+% is presumably either 0 or the empty string (but we don't check, we
+% just throw it away).  #2 is the decimal part, which we use as the
+% percent of \hsize for this column.
+\def\pickupwholefraction#1.#2 {%
+  \global\advance\colcount by 1
+  \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
+  \setuptable
+}
 
 \newcount\colcount
-\def\setuptable#1{\def\firstarg{#1}%
-\ifx\firstarg\xendsetuptable\let\go\relax%
-\else
-  \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
+\def\setuptable#1{%
+  \def\firstarg{#1}%
+  \ifx\firstarg\xendsetuptable
+    \let\go = \relax
   \else
-    \ifsetpercent
-       \let\go\pickupwholefraction   % In this case arg of setuptable
-                                     % is the decimal point before the
-                                     % number given in percent of hsize.
-                                     % We don't need this so we don't use it.
+    \ifx\firstarg\xcolumnfractions
+      \global\setpercenttrue
+    \else
+      \ifsetpercent
+         \let\go\pickupwholefraction
+      \else
+         \global\advance\colcount by 1
+         \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
+                            % typically that is always in the input, anyway.
+         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+      \fi
+    \fi
+    \ifx\go\pickupwholefraction
+      % Put the argument back for the \pickupwholefraction call, so
+      % we'll always have a period there to be parsed.
+      \def\go{\pickupwholefraction#1}%
     \else
-       \global\advance\colcount by1
-       \setbox0=\hbox{#1 }% Add a normal word space as a separator;
-                          % typically that is always in the input, anyway.
-       \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+      \let\go = \setuptable
     \fi%
-  \fi%
-\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
-\fi\go}
+  \fi
+  \go
+}
 
-% multitable syntax
-\def\tab{&\hskip1sp\relax} % 2/2/96
-                           % tiny skip here makes sure this column space is
-                           % maintained, even if it is never used.
+% This used to have \hskip1sp.  But then the space in a template line is
+% not enough.  That is bad.  So let's go back to just & until we
+% encounter the problem it was intended to solve again.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{&}
 
 % @multitable ... @end multitable definitions:
-
+%
 \def\multitable{\parsearg\dotable}
 \def\dotable#1{\bgroup
   \vskip\parskip
@@ -2160,15 +2148,15 @@ July\or August\or September\or October\or November\or December\fi
   % In order to keep entries from bumping into each other
   % we will add a \leftskip of \multitablecolspace to all columns after
   % the first one.
-  % 
+  %
   % If a template has been used, we will add \multitablecolspace
   % to the width of each template entry.
-  % 
+  %
   % If the user has set preamble in terms of percent of \hsize we will
   % use that dimension as the width of the column, and the \leftskip
   % will keep entries from bumping into each other.  Table will start at
   % left margin and final column will justify at right margin.
-  % 
+  %
   % Make sure we don't inherit \rightskip from the outer environment.
   \rightskip=0pt
   \ifnum\colcount=1
@@ -2199,15 +2187,18 @@ July\or August\or September\or October\or November\or December\fi
 % If so, do nothing. If not, give it an appropriate dimension based on
 % current baselineskip.
 \ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
 %% strut to put in table in case some entry doesn't have descenders,
 %% to keep lines equally spaced
 \let\multistrut = \strut
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%%        If so, set to same dimension as multitablelinespace.
 \else
+%% 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.
 \ifdim\multitableparskip>\multitablelinespace
 \global\multitableparskip=\multitablelinespace
 \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
@@ -2220,6 +2211,356 @@ width0pt\relax} \fi
 \fi}
 
 
+\message{conditionals,}
+% Prevent errors for section commands.
+% Used in @ignore and in failing conditionals.
+\def\ignoresections{%
+  \let\chapter=\relax
+  \let\unnumbered=\relax
+  \let\top=\relax
+  \let\unnumberedsec=\relax
+  \let\unnumberedsection=\relax
+  \let\unnumberedsubsec=\relax
+  \let\unnumberedsubsection=\relax
+  \let\unnumberedsubsubsec=\relax
+  \let\unnumberedsubsubsection=\relax
+  \let\section=\relax
+  \let\subsec=\relax
+  \let\subsubsec=\relax
+  \let\subsection=\relax
+  \let\subsubsection=\relax
+  \let\appendix=\relax
+  \let\appendixsec=\relax
+  \let\appendixsection=\relax
+  \let\appendixsubsec=\relax
+  \let\appendixsubsection=\relax
+  \let\appendixsubsubsec=\relax
+  \let\appendixsubsubsection=\relax
+  \let\contents=\relax
+  \let\smallbook=\relax
+  \let\titlepage=\relax
+}
+
+% Used in nested conditionals, where we have to parse the Texinfo source
+% and so want to turn off most commands, in case they are used
+% incorrectly.
+%
+\def\ignoremorecommands{%
+  \let\defcodeindex = \relax
+  \let\defcv = \relax
+  \let\deffn = \relax
+  \let\deffnx = \relax
+  \let\defindex = \relax
+  \let\defivar = \relax
+  \let\defmac = \relax
+  \let\defmethod = \relax
+  \let\defop = \relax
+  \let\defopt = \relax
+  \let\defspec = \relax
+  \let\deftp = \relax
+  \let\deftypefn = \relax
+  \let\deftypefun = \relax
+  \let\deftypeivar = \relax
+  \let\deftypeop = \relax
+  \let\deftypevar = \relax
+  \let\deftypevr = \relax
+  \let\defun = \relax
+  \let\defvar = \relax
+  \let\defvr = \relax
+  \let\ref = \relax
+  \let\xref = \relax
+  \let\printindex = \relax
+  \let\pxref = \relax
+  \let\settitle = \relax
+  \let\setchapternewpage = \relax
+  \let\setchapterstyle = \relax
+  \let\everyheading = \relax
+  \let\evenheading = \relax
+  \let\oddheading = \relax
+  \let\everyfooting = \relax
+  \let\evenfooting = \relax
+  \let\oddfooting = \relax
+  \let\headings = \relax
+  \let\include = \relax
+  \let\lowersections = \relax
+  \let\down = \relax
+  \let\raisesections = \relax
+  \let\up = \relax
+  \let\set = \relax
+  \let\clear = \relax
+  \let\item = \relax
+}
+
+% Ignore @ignore ... @end ignore.
+%
+\def\ignore{\doignore{ignore}}
+
+% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
+%
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\html{\doignore{html}}
+\def\menu{\doignore{menu}}
+\def\direntry{\doignore{direntry}}
+
+% @dircategory CATEGORY  -- specify a category of the dir file
+% which this file should belong to.  Ignore this in TeX.
+\let\dircategory = \comment
+
+% Ignore text until a line `@end #1'.
+%
+\def\doignore#1{\begingroup
+  % Don't complain about control sequences we have declared \outer.
+  \ignoresections
+  %
+  % Define a command to swallow text until we reach `@end #1'.
+  % This @ is a catcode 12 token (that is the normal catcode of @ in
+  % this texinfo.tex file).  We change the catcode of @ below to match.
+  \long\def\doignoretext##1@end #1{\enddoignore}%
+  %
+  % Make sure that spaces turn into tokens that match what \doignoretext wants.
+  \catcode32 = 10
+  %
+  % Ignore braces, too, so mismatched braces don't cause trouble.
+  \catcode`\{ = 9
+  \catcode`\} = 9
+  %
+  % We must not have @c interpreted as a control sequence.
+  \catcode`\@ = 12
+  %
+  % Make the letter c a comment character so that the rest of the line
+  % will be ignored. This way, the document can have (for example)
+  %   @c @end ifinfo
+  % and the @end ifinfo will be properly ignored.
+  % (We've just changed @ to catcode 12.)
+  \catcode`\c = 14
+  %
+  % And now expand that command.
+  \doignoretext
+}
+
+% What we do to finish off ignored text.
+%
+\def\enddoignore{\endgroup\ignorespaces}%
+
+\newif\ifwarnedobs\warnedobsfalse
+\def\obstexwarn{%
+  \ifwarnedobs\relax\else
+  % We need to warn folks that they may have trouble with TeX 3.0.
+  % This uses \immediate\write16 rather than \message to get newlines.
+    \immediate\write16{}
+    \immediate\write16{WARNING: for users of Unix TeX 3.0!}
+    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
+    \immediate\write16{If you are running another version of TeX, relax.}
+    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+    \immediate\write16{  Then upgrade your TeX installation if you can.}
+    \immediate\write16{  (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
+    \immediate\write16{If you are stuck with version 3.0, run the}
+    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
+    \immediate\write16{  to use a workaround.}
+    \immediate\write16{}
+    \global\warnedobstrue
+    \fi
+}
+
+% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
+% workaround (which requires the file ``dummy.tfm'' to be installed),
+% uncomment the following line:
+%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
+
+% Ignore text, except that we keep track of conditional commands for
+% purposes of nesting, up to an `@end #1' command.
+%
+\def\nestedignore#1{%
+  \obstexwarn
+  % We must actually expand the ignored text to look for the @end
+  % command, so that nested ignore constructs work.  Thus, we put the
+  % text into a \vbox and then do nothing with the result.  To minimize
+  % the change of memory overflow, we follow the approach outlined on
+  % page 401 of the TeXbook: make the current font be a dummy font.
+  %
+  \setbox0 = \vbox\bgroup
+    % Don't complain about control sequences we have declared \outer.
+    \ignoresections
+    %
+    % Define `@end #1' to end the box, which will in turn undefine the
+    % @end command again.
+    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
+    %
+    % We are going to be parsing Texinfo commands.  Most cause no
+    % trouble when they are used incorrectly, but some commands do
+    % complicated argument parsing or otherwise get confused, so we
+    % undefine them.
+    %
+    % We can't do anything about stray @-signs, unfortunately;
+    % they'll produce `undefined control sequence' errors.
+    \ignoremorecommands
+    %
+    % Set the current font to be \nullfont, a TeX primitive, and define
+    % all the font commands to also use \nullfont.  We don't use
+    % dummy.tfm, as suggested in the TeXbook, because not all sites
+    % might have that installed.  Therefore, math mode will still
+    % produce output, but that should be an extremely small amount of
+    % stuff compared to the main input.
+    %
+    \nullfont
+    \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
+    \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
+    \let\tensf=\nullfont
+    % Similarly for index fonts (mostly for their use in smallexample).
+    \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
+    \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
+    \let\smallsf=\nullfont
+    %
+    % Don't complain when characters are missing from the fonts.
+    \tracinglostchars = 0
+    %
+    % Don't bother to do space factor calculations.
+    \frenchspacing
+    %
+    % Don't report underfull hboxes.
+    \hbadness = 10000
+    %
+    % Do minimal line-breaking.
+    \pretolerance = 10000
+    %
+    % Do not execute instructions in @tex
+    \def\tex{\doignore{tex}}%
+    % Do not execute macro definitions.
+    % `c' is a comment character, so the word `macro' will get cut off.
+    \def\macro{\doignore{ma}}%
+}
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.  Make sure the catcode of space is correct to avoid
+% losing inside @example, for instance.
+%
+\def\set{\begingroup\catcode` =10
+  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
+  \parsearg\setxxx}
+\def\setxxx#1{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+  \def\temp{#2}%
+  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+  \fi
+  \endgroup
+}
+% Can't use \xdef to pre-expand #2 and save some time, since \temp or
+% \next or other control sequences that we've defined might get us into
+% an infinite loop. Consider `@set foo @cite{bar}'.
+\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\def\clear{\parsearg\clearxxx}
+\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
+
+% @value{foo} gets the text saved in variable foo.
+{
+  \catcode`\_ = \active
+  %
+  % We might end up with active _ or - characters in the argument if
+  % we're called from @code, as @code{@value{foo-bar_}}.  So \let any
+  % such active characters to their normal equivalents.
+  \gdef\value{\begingroup
+    \catcode`\-=12 \catcode`\_=12
+    \indexbreaks \let_\normalunderscore
+    \valuexxx}
+}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we \let\value to this in \indexdummies).  Ones
+% whose names contain - or _ still won't work, but we can't do anything
+% about that.  The command has to be fully expandable, since the result
+% winds up in the index file.  This means that if the variable's value
+% contains other Texinfo commands, it's almost certain it will fail
+% (although perhaps we could fix that with sufficient work to do a
+% one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    {[No value for ``#1'']}%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+\def\ifset{\parsearg\ifsetxxx}
+\def\ifsetxxx #1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    \expandafter\ifsetfail
+  \else
+    \expandafter\ifsetsucceed
+  \fi
+}
+\def\ifsetsucceed{\conditionalsucceed{ifset}}
+\def\ifsetfail{\nestedignore{ifset}}
+\defineunmatchedend{ifset}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+\def\ifclear{\parsearg\ifclearxxx}
+\def\ifclearxxx #1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    \expandafter\ifclearsucceed
+  \else
+    \expandafter\ifclearfail
+  \fi
+}
+\def\ifclearsucceed{\conditionalsucceed{ifclear}}
+\def\ifclearfail{\nestedignore{ifclear}}
+\defineunmatchedend{ifclear}
+
+% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
+% following, through the first @end iftex (etc.).  Make `@end iftex'
+% (etc.) valid only after an @iftex.
+%
+\def\iftex{\conditionalsucceed{iftex}}
+\def\ifnothtml{\conditionalsucceed{ifnothtml}}
+\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
+\defineunmatchedend{iftex}
+\defineunmatchedend{ifnothtml}
+\defineunmatchedend{ifnotinfo}
+
+% We can't just want to start a group at @iftex (for example) and end it
+% at @end iftex, since then @set commands inside the conditional have no
+% effect (they'd get reverted at the end of the group).  So we must
+% define \Eiftex to redefine itself to be its previous value.  (We can't
+% just define it to fail again with an ``unmatched end'' error, since
+% the @ifset might be nested.)
+%
+\def\conditionalsucceed#1{%
+  \edef\temp{%
+    % Remember the current value of \E#1.
+    \let\nece{prevE#1} = \nece{E#1}%
+    %
+    % At the `@end #1', redefine \E#1 to be its previous value.
+    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
+  }%
+  \temp
+}
+
+% We need to expand lots of \csname's, but we don't want to expand the
+% control sequences after we've constructed them.
+%
+\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
 \message{indexing,}
 % Index generation facilities
 
@@ -2235,12 +2576,14 @@ width0pt\relax} \fi
 % the file that accumulates this index.  The file's extension is foo.
 % The name of an index should be no more than 2 characters long
 % for the sake of vms.
-
-\def\newindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#1}}
+%
+\def\newindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
+    \noexpand\doindex{#1}}
 }
 
 % @defindex foo  ==  \newindex{foo}
@@ -2249,31 +2592,37 @@ width0pt\relax} \fi
 
 % Define @defcodeindex, like @defindex except put all entries in @code.
 
-\def\newcodeindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#1}}
+\def\newcodeindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%
+    \noexpand\docodeindex{#1}}
 }
 
 \def\defcodeindex{\parsearg\newcodeindex}
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
-\def\synindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#2}}%
+% The \closeout helps reduce unnecessary open files; the limit on the
+% Acorn RISC OS is a mere 16 files.
+\def\synindex#1 #2 {%
+  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+  \expandafter\closeout\csname#1indfile\endcsname
+  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+    \noexpand\doindex{#2}}%
 }
 
 % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.
-\def\syncodeindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#2}}%
+\def\syncodeindex#1 #2 {%
+  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+  \expandafter\closeout\csname#1indfile\endcsname
+  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+    \noexpand\docodeindex{#2}}%
 }
 
 % Define \doindex, the driver for all \fooindex macros.
@@ -2294,6 +2643,7 @@ width0pt\relax} \fi
 \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
 
 \def\indexdummies{%
+\def\ { }%
 % Take care of the plain tex accent commands.
 \def\"{\realbackslash "}%
 \def\`{\realbackslash `}%
@@ -2323,8 +2673,11 @@ width0pt\relax} \fi
 % (Must be a way to avoid doing expansion at all, and thus not have to
 % laboriously list every single command here.)
 \def\@{@}% will be @@ when we switch to @ as escape char.
-%\let\{ = \lbracecmd
-%\let\} = \rbracecmd
+% Need these in case \tex is in effect and \{ is a \delimiter again.
+% But can't use \lbracecmd and \rbracecmd because texindex assumes
+% braces and backslashes are used only as delimiters.  
+\let\{ = \mylbrace
+\let\} = \myrbrace
 \def\_{{\realbackslash _}}%
 \def\w{\realbackslash w }%
 \def\bf{\realbackslash bf }%
@@ -2335,7 +2688,6 @@ width0pt\relax} \fi
 \def\gtr{\realbackslash gtr}%
 \def\less{\realbackslash less}%
 \def\hat{\realbackslash hat}%
-%\def\char{\realbackslash char}%
 \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots }%
 \def\result{\realbackslash result}%
@@ -2347,6 +2699,11 @@ width0pt\relax} \fi
 \def\copyright{\realbackslash copyright}%
 \def\tclose##1{\realbackslash tclose {##1}}%
 \def\code##1{\realbackslash code {##1}}%
+\def\uref##1{\realbackslash uref {##1}}%
+\def\url##1{\realbackslash url {##1}}%
+\def\env##1{\realbackslash env {##1}}%
+\def\command##1{\realbackslash command {##1}}%
+\def\option##1{\realbackslash option {##1}}%
 \def\dotless##1{\realbackslash dotless {##1}}%
 \def\samp##1{\realbackslash samp {##1}}%
 \def\,##1{\realbackslash ,{##1}}%
@@ -2362,8 +2719,16 @@ width0pt\relax} \fi
 \def\kbd##1{\realbackslash kbd {##1}}%
 \def\dfn##1{\realbackslash dfn {##1}}%
 \def\emph##1{\realbackslash emph {##1}}%
-\def\value##1{\realbackslash value {##1}}%
+\def\acronym##1{\realbackslash acronym {##1}}%
+%
+% Handle some cases of @value -- where the variable name does not
+% contain - or _, and the value does not contain any
+% (non-fully-expandable) commands.
+\let\value = \expandablevalue
+%
 \unsepspaces
+% Turn off macro expansion
+\turnoffmacros
 }
 
 % If an index command is used in an @example environment, any spaces
@@ -2420,6 +2785,12 @@ width0pt\relax} \fi
 %\let\tt=\indexdummyfont
 \let\tclose=\indexdummyfont
 \let\code=\indexdummyfont
+\let\url=\indexdummyfont
+\let\uref=\indexdummyfont
+\let\env=\indexdummyfont
+\let\acronym=\indexdummyfont
+\let\command=\indexdummyfont
+\let\option=\indexdummyfont
 \let\file=\indexdummyfont
 \let\samp=\indexdummyfont
 \let\kbd=\indexdummyfont
@@ -2435,14 +2806,24 @@ width0pt\relax} \fi
 % so we do not become unable to do a definition.
 
 {\catcode`\@=0 \catcode`\\=\other
-@gdef@realbackslash{\}}
+ @gdef@realbackslash{\}}
 
 \let\indexbackslash=0  %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
-\let\SETmarginindex=\relax %initialize!
-% workhorse for all \fooindexes
-% #1 is name of index, #2 is stuff to put there
-\def\doind #1#2{%
+% For \ifx comparisons.
+\def\emptymacro{\empty}
+
+% Most index entries go through here, but \dosubind is the general case.
+%
+\def\doind#1#2{\dosubind{#1}{#2}\empty}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% \empty if called from \doind, as we usually are.  The main exception
+% is with defuns, which call us directly.
+%
+\def\dosubind#1#2#3{%
   % Put the index entry in the margin if desired.
   \ifx\SETmarginindex\relax\else
     \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
@@ -2453,48 +2834,75 @@ width0pt\relax} \fi
       \indexdummies % Must do this here, since \bf, etc expand at this stage
       \escapechar=`\\
       {%
-        \let\folio=0% We will expand all macros now EXCEPT \folio.
+        \let\folio = 0% We will expand all macros now EXCEPT \folio.
         \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
         % so it will be output as is; and it will print as backslash.
         %
-        % First process the index-string with all font commands turned off
-        % to get the string to sort by.
-        {\indexnofonts \xdef\indexsorttmp{#2}}%
+        \def\thirdarg{#3}%
+        %
+        % If third arg is present, precede it with space in sort key.
+        \ifx\thirdarg\emptymacro
+          \let\subentry = \empty
+        \else
+          \def\subentry{ #3}%
+        \fi
+        %
+        % First process the index entry with all font commands turned
+        % off to get the string to sort by.
+        {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
         %
-        % Now produce the complete index entry, with both the sort key and the
-        % original text, including any font commands.
+        % Now the real index entry with the fonts.
         \toks0 = {#2}%
+        %
+        % If third (subentry) arg is present, add it to the index
+        % string.  And include a space.
+        \ifx\thirdarg\emptymacro \else
+          \toks0 = \expandafter{\the\toks0 \space #3}%
+        \fi
+        %
+        % Set up the complete index entry, with both the sort key
+        % and the original text, including any font commands.  We write
+        % three arguments to \entry to the .?? file, texindex reduces to
+        % two when writing the .??s sorted result.
         \edef\temp{%
           \write\csname#1indfile\endcsname{%
             \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
         }%
-        \temp
+        %
+        % If a skip is the last thing on the list now, preserve it
+        % by backing up by \lastskip, doing the \write, then inserting
+        % the skip again.  Otherwise, the whatsit generated by the
+        % \write will make \lastskip zero.  The result is that sequences
+        % like this:
+        % @end defun
+        % @tindex whatever
+        % @defun ...
+        % will have extra space inserted, because the \medbreak in the
+        % start of the @defun won't see the skip inserted by the @end of
+        % the previous defun.
+        %
+        % But don't do any of this if we're not in vertical mode.  We
+        % don't want to do a \vskip and prematurely end a paragraph.
+        %
+        % Avoid page breaks due to these extra skips, too.
+        %
+        \iflinks
+          \ifvmode
+            \skip0 = \lastskip
+            \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
+          \fi
+          %
+          \temp % do the write
+          %
+          %
+          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
+        \fi
       }%
     }%
     \penalty\count255
   }%
 }
 
-\def\dosubind #1#2#3{%
-{\count10=\lastpenalty %
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\escapechar=`\\%
-{\let\folio=0%
-\def\rawbackslashxx{\indexbackslash}%
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2 #3}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
-\temp }%
-}\penalty\count10}}
-
 % The index entry written in the file actually looks like
 %  \entry {sortstring}{page}{topic}
 % or
@@ -2534,7 +2942,7 @@ width0pt\relax} \fi
 \def\doprintindex#1{\begingroup
   \dobreak \chapheadingskip{10000}%
   %
-  \indexfonts \rm
+  \smallfonts \rm
   \tolerance = 9500
   \indexbreaks
   %
@@ -2550,7 +2958,7 @@ width0pt\relax} \fi
     % and it loses the chapter title and the aux file entries for the
     % index.  The easiest way to prevent this problem is to make sure
     % there is some text.
-    (Index is nonexistent)
+    \putwordIndexNonexistent
   \else
     %
     % If the index file exists but is empty, then \openin leaves \ifeof
@@ -2558,7 +2966,7 @@ width0pt\relax} \fi
     % it can discover if there is anything in it.
     \read 1 to \temp
     \ifeof 1
-      (Index is empty)
+      \putwordIndexIsEmpty
     \else
       % Index files are almost Texinfo source, but we use \ as the escape
       % character.  It would be better to use @, but that's too big a change
@@ -2577,21 +2985,35 @@ width0pt\relax} \fi
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
 
-% Same as \bigskipamount except no shrink.
-% \balancecolumns gets confused if there is any shrink.
-\newskip\initialskipamount \initialskipamount 12pt plus4pt
-
-\def\initial #1{%
-{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-\ifdim\lastskip<\initialskipamount
-\removelastskip \penalty-200 \vskip \initialskipamount\fi
-\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
+\def\initial#1{{%
+  % Some minor font changes for the special characters.
+  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+  %
+  % Remove any glue we may have, we'll be inserting our own.
+  \removelastskip
+  %
+  % We like breaks before the index initials, so insert a bonus.
+  \penalty -300
+  %
+  % Typeset the initial.  Making this add up to a whole number of
+  % baselineskips increases the chance of the dots lining up from column
+  % to column.  It still won't often be perfect, because of the stretch
+  % we need before each entry, but it's better.
+  %
+  % No shrink because it confuses \balancecolumns.
+  \vskip 1.67\baselineskip plus .5\baselineskip
+  \leftline{\secbf #1}%
+  \vskip .33\baselineskip plus .1\baselineskip
+  %
+  % Do our best not to break after the initial.
+  \nobreak
+}}
 
 % This typesets a paragraph consisting of #1, dot leaders, and then #2
 % flush to the right margin.  It is used for index and table of contents
 % entries.  The paragraph is indented by \leftskip.
 %
-\def\entry #1#2{\begingroup
+\def\entry#1#2{\begingroup
   %
   % Start a new paragraph if necessary, so our assignments below can't
   % affect previous text.
@@ -2614,12 +3036,15 @@ width0pt\relax} \fi
   %
   % \hangafter is reset to 1 (which is the value we want) at the start
   % of each paragraph, so we need not do anything with that.
-  \hangindent=2em
+  \hangindent = 2em
   %
   % When the entry text needs to be broken, just fill out the first line
   % with blank space.
   \rightskip = 0pt plus1fil
   %
+  % A bit of stretch before each entry for the benefit of balancing columns.
+  \vskip 0pt plus1pt
+  %
   % Start a ``paragraph'' for the index entry so the line breaking
   % parameters we've set above will have an effect.
   \noindent
@@ -2644,7 +3069,11 @@ width0pt\relax} \fi
     % The `\ ' here is removed by the implicit \unskip that TeX does as
     % part of (the primitive) \par.  Without it, a spurious underfull
     % \hbox ensues.
-    \ #2% The page number ends the paragraph.
+    \ifpdf
+      \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+    \else
+      \ #2% The page number ends the paragraph.
+    \fi
   \fi%
   \par
 \endgroup}
@@ -2673,24 +3102,26 @@ width0pt\relax} \fi
 
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
   % Grab any single-column material above us.
-  \output = {\global\setbox\partialpage = \vbox{%
-    % 
+  \output = {%
+    %
     % Here is a possibility not foreseen in manmac: if we accumulate a
     % whole lot of material, we might end up calling this \output
     % routine twice in a row (see the doublecol-lose test, which is
     % essentially a couple of indexes with @setchapternewpage off).  In
-    % that case, we must prevent the second \partialpage from
-    % simply overwriting the first, causing us to lose the page.
-    % This will preserve it until a real output routine can ship it
-    % out.  Generally, \partialpage will be empty when this runs and
-    % this will be a no-op.
-    \unvbox\partialpage
+    % that case we just ship out what is in \partialpage with the normal
+    % output routine.  Generally, \partialpage will be empty when this
+    % runs and this will be a no-op.  See the indexspread.tex test case.
+    \ifvoid\partialpage \else
+      \onepageout{\pagecontents\partialpage}%
+    \fi
     %
-    % Unvbox the main output page.
-    \unvbox255
-    \kern-\topskip \kern\baselineskip
-  }}%
-  \eject
+    \global\setbox\partialpage = \vbox{%
+      % Unvbox the main output page.
+      \unvbox\PAGE
+      \kern-\topskip \kern\baselineskip
+    }%
+  }%
+  \eject % run that output routine to set \partialpage
   %
   % Use the double-column output routine for subsequent pages.
   \output = {\doublecolumnout}%
@@ -2718,14 +3149,21 @@ width0pt\relax} \fi
   %
   % Double the \vsize as well.  (We don't need a separate register here,
   % since nobody clobbers \vsize.)
+  \advance\vsize by -\ht\partialpage
   \vsize = 2\vsize
 }
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
 \def\doublecolumnout{%
   \splittopskip=\topskip \splitmaxdepth=\maxdepth
   % Get the available space for the double columns -- the normal
   % (undoubled) page height minus any material left over from the
   % previous page.
-  \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
+  \dimen@ = \vsize
+  \divide\dimen@ by 2
+  %
   % box0 will be the left-hand column, box2 the right.
   \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
   \onepageout\pagesofar
@@ -2734,42 +3172,67 @@ width0pt\relax} \fi
 }
 \def\pagesofar{%
   % Re-output the contents of the output page -- any previous material,
-  % followed by the two boxes we just split.
+  % followed by the two boxes we just split, in box0 and box2.
   \unvbox\partialpage
+  %
   \hsize = \doublecolumnhsize
-  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
+  \wd0=\hsize \wd2=\hsize
+  \hbox to\pagewidth{\box0\hfil\box2}%
 }
 \def\enddoublecolumns{%
-  \output = {\balancecolumns}\eject % split what we have
+  \output = {%
+    % Split the last of the double-column material.  Leave it on the
+    % current page, no automatic page break.
+    \balancecolumns
+    %
+    % If we end up splitting too much material for the current page,
+    % though, there will be another page break right after this \output
+    % invocation ends.  Having called \balancecolumns once, we do not
+    % want to call it again.  Therefore, reset \output to its normal
+    % definition right away.  (We hope \balancecolumns will never be
+    % called on to balance too much material, but if it is, this makes
+    % the output somewhat more palatable.)
+    \global\output = {\onepageout{\pagecontents\PAGE}}%
+  }%
+  \eject
   \endgroup % started in \begindoublecolumns
   %
-  % Back to normal single-column typesetting, but take account of the
-  % fact that we just accumulated some stuff on the output page.
+  % \pagegoal was set to the doubled \vsize above, since we restarted
+  % the current page.  We're now back to normal single-column
+  % typesetting, so reset \pagegoal to the normal \vsize (after the
+  % \endgroup where \vsize got restored).
   \pagegoal = \vsize
 }
 \def\balancecolumns{%
   % Called at the end of the double column material.
-  \setbox0 = \vbox{\unvbox255}%
+  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
   \dimen@ = \ht0
   \advance\dimen@ by \topskip
   \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2
+  \divide\dimen@ by 2 % target to split to
+  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
   \splittopskip = \topskip
   % Loop until we get a decent breakpoint.
-  {\vbadness=10000 \loop
-    \global\setbox3=\copy0
-    \global\setbox1=\vsplit3 to\dimen@
-    \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt
-   \repeat}%
+  {%
+    \vbadness = 10000
+    \loop
+      \global\setbox3 = \copy0
+      \global\setbox1 = \vsplit3 to \dimen@
+    \ifdim\ht3>\dimen@
+      \global\advance\dimen@ by 1pt
+    \repeat
+  }%
+  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
   \setbox0=\vbox to\dimen@{\unvbox1}%
   \setbox2=\vbox to\dimen@{\unvbox3}%
+  %
   \pagesofar
 }
 \catcode`\@ = \other
 
 
 \message{sectioning,}
-% Define chapters, sections, etc.
+% Chapters, sections, etc.
 
 \newcount\chapno
 \newcount\secno        \secno=0
@@ -2778,58 +3241,48 @@ width0pt\relax} \fi
 
 % This counter is funny since it counts through charcodes of letters A, B, ...
 \newcount\appendixno  \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-\newwrite\contentsfile
-% This is called from \setfilename.
-\def\opencontents{\openout\contentsfile = \jobname.toc }
+% \def\appendixletter{\char\the\appendixno}
+% We do the following for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+\def\appendixletter{%
+  \ifnum\appendixno=`A A%
+  \else\ifnum\appendixno=`B B%
+  \else\ifnum\appendixno=`C C%
+  \else\ifnum\appendixno=`D D%
+  \else\ifnum\appendixno=`E E%
+  \else\ifnum\appendixno=`F F%
+  \else\ifnum\appendixno=`G G%
+  \else\ifnum\appendixno=`H H%
+  \else\ifnum\appendixno=`I I%
+  \else\ifnum\appendixno=`J J%
+  \else\ifnum\appendixno=`K K%
+  \else\ifnum\appendixno=`L L%
+  \else\ifnum\appendixno=`M M%
+  \else\ifnum\appendixno=`N N%
+  \else\ifnum\appendixno=`O O%
+  \else\ifnum\appendixno=`P P%
+  \else\ifnum\appendixno=`Q Q%
+  \else\ifnum\appendixno=`R R%
+  \else\ifnum\appendixno=`S S%
+  \else\ifnum\appendixno=`T T%
+  \else\ifnum\appendixno=`U U%
+  \else\ifnum\appendixno=`V V%
+  \else\ifnum\appendixno=`W W%
+  \else\ifnum\appendixno=`X X%
+  \else\ifnum\appendixno=`Y Y%
+  \else\ifnum\appendixno=`Z Z%
+  % The \the is necessary, despite appearances, because \appendixletter is
+  % expanded while writing the .toc file.  \char\appendixno is not
+  % expandable, thus it is written literally, thus all appendixes come out
+  % with the same letter (or @) in the toc without it.
+  \else\char\the\appendixno
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
 
 % Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it.  @section does likewise
-
-\def\thischapter{} \def\thissection{}
-\def\seccheck#1{\ifnum \pageno<0
-  \errmessage{@#1 not allowed after generating table of contents}%
-\fi}
-
-\def\chapternofonts{%
-  \let\rawbackslash=\relax
-  \let\frenchspacing=\relax
-  \def\result{\realbackslash result}%
-  \def\equiv{\realbackslash equiv}%
-  \def\expansion{\realbackslash expansion}%
-  \def\print{\realbackslash print}%
-  \def\TeX{\realbackslash TeX}%
-  \def\dots{\realbackslash dots}%
-  \def\result{\realbackslash result}%
-  \def\equiv{\realbackslash equiv}%
-  \def\expansion{\realbackslash expansion}%
-  \def\print{\realbackslash print}%
-  \def\error{\realbackslash error}%
-  \def\point{\realbackslash point}%
-  \def\copyright{\realbackslash copyright}%
-  \def\tt{\realbackslash tt}%
-  \def\bf{\realbackslash bf}%
-  \def\w{\realbackslash w}%
-  \def\less{\realbackslash less}%
-  \def\gtr{\realbackslash gtr}%
-  \def\hat{\realbackslash hat}%
-  \def\char{\realbackslash char}%
-  \def\tclose##1{\realbackslash tclose{##1}}%
-  \def\code##1{\realbackslash code{##1}}%
-  \def\samp##1{\realbackslash samp{##1}}%
-  \def\r##1{\realbackslash r{##1}}%
-  \def\b##1{\realbackslash b{##1}}%
-  \def\key##1{\realbackslash key{##1}}%
-  \def\file##1{\realbackslash file{##1}}%
-  \def\kbd##1{\realbackslash kbd{##1}}%
-  % These are redefined because @smartitalic wouldn't work inside xdef.
-  \def\i##1{\realbackslash i{##1}}%
-  \def\cite##1{\realbackslash cite{##1}}%
-  \def\var##1{\realbackslash var{##1}}%
-  \def\emph##1{\realbackslash emph{##1}}%
-  \def\dfn##1{\realbackslash dfn{##1}}%
-}
+% page headings and footings can use it.  @section does likewise.
+\def\thischapter{}
+\def\thissection{}
 
 \newcount\absseclevel % used to calculate proper heading level
 \newcount\secbase\secbase=0 % @raise/lowersections modify this count
@@ -2901,59 +3354,59 @@ width0pt\relax} \fi
 \fi
 }
 
-
+% @chapter, @appendix, @unnumbered.
 \def\thischaptername{No Chapter Title}
 \outer\def\chapter{\parsearg\chapteryyy}
 \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{\seccheck{chapter}%
+\def\chapterzzz #1{%
 \secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
+\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
 \chapmacro {#1}{\the\chapno}%
 \gdef\thissection{#1}%
 \gdef\thischaptername{#1}%
 % We don't substitute the actual chapter name into \thischapter
 % because we don't want its macros evaluated now.
 \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\donoderef %
+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+                                  {\the\chapno}}}%
+\temp
+\donoderef
 \global\let\section = \numberedsec
 \global\let\subsection = \numberedsubsec
 \global\let\subsubsection = \numberedsubsubsec
-}}
+}
 
 \outer\def\appendix{\parsearg\appendixyyy}
 \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{\seccheck{appendix}%
+\def\appendixzzz #1{%
 \secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
+\global\advance \appendixno by 1
+\message{\putwordAppendix\space \appendixletter}%
 \chapmacro {#1}{\putwordAppendix{} \appendixletter}%
 \gdef\thissection{#1}%
 \gdef\thischaptername{#1}%
 \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash chapentry{\the\toks0}%
-  {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\appendixnoderef %
+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+                       {\putwordAppendix{} \appendixletter}}}%
+\temp
+\appendixnoderef
 \global\let\section = \appendixsec
 \global\let\subsection = \appendixsubsec
 \global\let\subsubsection = \appendixsubsubsec
-}}
+}
 
 % @centerchap is like @unnumbered, but the heading is centered.
 \outer\def\centerchap{\parsearg\centerchapyyy}
 \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
 
+% @top is like @unnumbered.
 \outer\def\top{\parsearg\unnumberedyyy}
+
 \outer\def\unnumbered{\parsearg\unnumberedyyy}
 \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{\seccheck{unnumbered}%
+\def\unnumberedzzz #1{%
 \secno=0 \subsecno=0 \subsubsecno=0
 %
 % This used to be simply \message{#1}, but TeX fully expands the
@@ -2965,155 +3418,139 @@ width0pt\relax} \fi
 % Anyway, we don't want the fully-expanded definition of @cite to appear
 % as a result of the \message, we just want `@cite' itself.  We use
 % \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of the <toks register>.
+% simply yielding the contents of <toks register>.  (We also do this for
+% the toc entries.)
 \toks0 = {#1}\message{(\the\toks0)}%
 %
 \unnumbchapmacro {#1}%
 \gdef\thischapter{#1}\gdef\thissection{#1}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\unnumbnoderef %
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
+\temp
+\unnumbnoderef
 \global\let\section = \unnumberedsec
 \global\let\subsection = \unnumberedsubsec
 \global\let\subsubsection = \unnumberedsubsubsec
-}}
+}
 
+% Sections.
 \outer\def\numberedsec{\parsearg\secyyy}
 \def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{\seccheck{section}%
+\def\seczzz #1{%
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash secentry %
-{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+                                  {\the\chapno}{\the\secno}}}%
+\temp
+\donoderef
+\nobreak
+}
 
 \outer\def\appendixsection{\parsearg\appendixsecyyy}
 \outer\def\appendixsec{\parsearg\appendixsecyyy}
 \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{\seccheck{appendixsection}%
+\def\appendixsectionzzz #1{%
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash secentry %
-{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+                                  {\appendixletter}{\the\secno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
 
 \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
 \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
+\def\unnumberedseczzz #1{%
 \plainsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
 
+% Subsections.
 \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
 \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{\seccheck{subsection}%
+\def\numberedsubseczzz #1{%
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash subsecentry %
-{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+                                    {\the\chapno}{\the\secno}{\the\subsecno}}}%
+\temp
+\donoderef
+\nobreak
+}
 
 \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
 \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
+\def\appendixsubseczzz #1{%
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash subsecentry %
-{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+                                {\appendixletter}{\the\secno}{\the\subsecno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
 
 \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
 \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
+\def\unnumberedsubseczzz #1{%
 \plainsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
+                                    {\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
 
+% Subsubsections.
 \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
 \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
+\def\numberedsubsubseczzz #1{%
 \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
 \subsubsecheading {#1}
   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash subsubsecentry{\the\toks0}
-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
-  {\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+\temp
+\donoderef
+\nobreak
+}
 
 \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
 \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
+\def\appendixsubsubseczzz #1{%
 \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
 \subsubsecheading {#1}
   {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
-  {\appendixletter}
-  {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+\temp
+\appendixnoderef
+\nobreak
+}
 
 \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
 \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
+\def\unnumberedsubsubseczzz #1{%
 \plainsubsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
 \toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
+                                    {\the\toks0}}}%
+\temp
+\unnumbnoderef
+\nobreak
+}
 
 % These are variants which are not "outer", so they can appear in @ifinfo.
 % Actually, they should now be obsolete; ordinary section commands should work.
@@ -3142,8 +3579,7 @@ width0pt\relax} \fi
 
 % Define @majorheading, @heading and @subheading
 
-% NOTE on use of \vbox for chapter headings, section headings, and
-% such:
+% NOTE on use of \vbox for chapter headings, section headings, and such:
 %       1) We use \vbox rather than the earlier \line to permit
 %          overlong headings to fold.
 %       2) \hyphenpenalty is set to 10000 because hyphenation in a
@@ -3190,12 +3626,12 @@ width0pt\relax} \fi
 
 \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
 
-\def\CHAPPAGoff{
+\def\CHAPPAGoff{%
 \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chapbreak
 \global\let\pagealignmacro=\chappager}
 
-\def\CHAPPAGon{
+\def\CHAPPAGon{%
 \global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chappager
 \global\let\pagealignmacro=\chappager
@@ -3249,7 +3685,7 @@ width0pt\relax} \fi
 \def\unnchfopen #1{%
 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                        \parindent=0pt\raggedright
-                       \rm #1\hfill}}\bigskip \par\penalty 10000 %
+                       \rm #1\hfill}}\bigskip \par\nobreak
 }
 
 \def\chfopen #1#2{\chapoddpage {\chapfonts
@@ -3260,7 +3696,7 @@ width0pt\relax} \fi
 \def\centerchfopen #1{%
 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                        \parindent=0pt
-                       \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
+                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
 }
 
 \def\CHAPFopen{
@@ -3313,24 +3749,45 @@ width0pt\relax} \fi
 }
 
 
-\message{toc printing,}
-% Finish up the main text and prepare to read what we've written
-% to \contentsfile.
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.  We supply {\folio} at the end of the
+% argument, which will end up as the last argument to the \...entry macro.
+%
+% We open the .toc file here instead of at @setfilename or any other
+% given time so that @contents can be put in the document anywhere.
+%
+\newif\iftocfileopened
+\def\writetocentry#1{%
+  \iftocfileopened\else
+    \immediate\openout\tocfile = \jobname.toc
+    \global\tocfileopenedtrue
+  \fi
+  \iflinks \write\tocfile{#1{\folio}}\fi
+}
 
 \newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Finish up the main text and prepare to read what we've written
+% to \tocfile.
+%
 \def\startcontents#1{%
    % If @setchapternewpage on, and @headings double, the contents should
    % start on an odd page, unlike chapters.  Thus, we maintain
    % \contentsalignmacro in parallel with \pagealignmacro.
    % From: Torbjorn Granlund <tege@matematik.su.se>
    \contentsalignmacro
-   \immediate\closeout \contentsfile
-   \ifnum \pageno>0
-      \pageno = -1              % Request roman numbered pages.
-   \fi
+   \immediate\closeout\tocfile
+   %
    % Don't need to put `Contents' or `Short Contents' in the headline.
    % It is abundantly clear what they are.
    \unnumbchapmacro{#1}\def\thischapter{}%
+   \savepageno = \pageno
    \begingroup                  % Set up to handle contents files properly.
       \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
       % We can't do this, because then an actual ^ in a section
@@ -3338,20 +3795,31 @@ width0pt\relax} \fi
       %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
       \raggedbottom             % Worry more about breakpoints than the bottom.
       \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+      %
+      % Roman numerals for page numbers.
+      \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
 }
 
 
 % Normal (long) toc.
-\outer\def\contents{%
-   \startcontents{\putwordTableofContents}%
-      \input \jobname.toc
+\def\contents{%
+   \startcontents{\putwordTOC}%
+     \openin 1 \jobname.toc
+     \ifeof 1 \else
+       \closein 1
+       \input \jobname.toc
+     \fi
+     \vfill \eject
+     \contentsalignmacro % in case @setchapternewpage odd is in effect
+     \pdfmakeoutlines
    \endgroup
-   \vfill \eject
+   \lastnegativepageno = \pageno
+   \pageno = \savepageno
 }
 
 % And just the chapters.
-\outer\def\summarycontents{%
-   \startcontents{\putwordShortContents}%
+\def\summarycontents{%
+   \startcontents{\putwordShortTOC}%
       %
       \let\chapentry = \shortchapentry
       \let\unnumbchapentry = \shortunnumberedentry
@@ -3367,12 +3835,23 @@ width0pt\relax} \fi
       \def\unnumbsubsecentry ##1##2{}
       \def\subsubsecentry ##1##2##3##4##5##6{}
       \def\unnumbsubsubsecentry ##1##2{}
-      \input \jobname.toc
+      \openin 1 \jobname.toc
+      \ifeof 1 \else
+        \closein 1
+        \input \jobname.toc
+      \fi
+     \vfill \eject
+     \contentsalignmacro % in case @setchapternewpage odd is in effect
    \endgroup
-   \vfill \eject
+   \lastnegativepageno = \pageno
+   \pageno = \savepageno
 }
 \let\shortcontents = \summarycontents
 
+\ifpdf
+  \pdfcatalog{/PageMode /UseOutlines}%
+\fi
+
 % These macros generate individual entries in the table of contents.
 % The first argument is the chapter or section name.
 % The last argument is the page number.
@@ -3383,7 +3862,7 @@ width0pt\relax} \fi
 
 % See comments in \dochapentry re vbox and related settings
 \def\shortchapentry#1#2#3{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
 }
 
 % Typeset the label for a chapter or appendix for the short contents.
@@ -3391,10 +3870,14 @@ width0pt\relax} \fi
 % We could simplify the code here by writing out an \appendixentry
 % command in the toc file for appendices, instead of using \chapentry
 % for both, but it doesn't seem worth it.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
-
+%
+\newdimen\shortappendixwidth
+%
 \def\shortchaplabel#1{%
+  % Compute width of word "Appendix", may change with language.
+  \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
+  \shortappendixwidth = \wd0
+  %
   % We typeset #1 in a box of constant width, regardless of the text of
   % #1, so the chapter titles will come out aligned.
   \setbox0 = \hbox{#1}%
@@ -3409,7 +3892,7 @@ width0pt\relax} \fi
 }
 
 \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
+\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
 
 % Sections.
 \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
@@ -3436,24 +3919,24 @@ width0pt\relax} \fi
    \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    \begingroup
      \chapentryfonts
-     \tocentry{#1}{\dopageno{#2}}%
+     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    \endgroup
    \nobreak\vskip .25\baselineskip plus.1\baselineskip
 }
 
 \def\dosecentry#1#2{\begingroup
   \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
 \def\dosubsecentry#1#2{\begingroup
   \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
 \def\dosubsubsecentry#1#2{\begingroup
   \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno{#2}}%
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
 % Final typesetting of a toc entry; we use the same \entry macro as for
@@ -3481,6 +3964,7 @@ width0pt\relax} \fi
 
 
 \message{environments,}
+% @foo ... @end foo.
 
 % Since these characters are used in examples, it should be an even number of
 % \tt widths. Each \tt character is 1en, so two makes it 1em.
@@ -3553,6 +4037,7 @@ width0pt\relax} \fi
   \let\!=\ptexexclam
   \let\i=\ptexi
   \let\{=\ptexlbrace
+  \let\+=\tabalign
   \let\}=\ptexrbrace
   \let\*=\ptexstar
   \let\t=\ptext
@@ -3604,8 +4089,8 @@ width0pt\relax} \fi
 % \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
 \let\nonarrowing=\relax
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \cartouche: draw rectangle w/rounded corners around argument
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
 \font\circle=lcircle10
 \newdimen\circthick
 \newdimen\cartouter\newdimen\cartinner
@@ -3632,9 +4117,9 @@ width0pt\relax} \fi
         \cartinner=\hsize \advance\cartinner by-\lskip
                           \advance\cartinner by-\rskip
         \cartouter=\hsize
-        \advance\cartouter by 18pt % allow for 3pt kerns on either
+        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
 %                                    side, and for 6pt waste from
-%                                    each corner char
+%                                    each corner char, and rule thickness
         \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
         % Flag to tell @lisp, etc., not to narrow margin.
         \let\nonarrowing=\comment
@@ -3688,49 +4173,52 @@ width0pt\relax} \fi
   \fi
 }
 
-% To ending an @example-like environment, we first end the paragraph
-% (via \afterenvbreak's vertical glue), and then the group.  That way we
-% keep the zero \parskip that the environments set -- \parskip glue
-% will be inserted at the beginning of the next paragraph in the
-% document, after the environment.
+% Define the \E... control sequence only if we are inside the particular
+% environment, so the error checking in \end will work.
 %
-\def\nonfillfinish{\afterenvbreak\endgroup}%
+% To end an @example-like environment, we first end the paragraph (via
+% \afterenvbreak's vertical glue), and then the group.  That way we keep
+% the zero \parskip that the environments set -- \parskip glue will be
+% inserted at the beginning of the next paragraph in the document, after
+% the environment.
+%
+\def\nonfillfinish{\afterenvbreak\endgroup}
 
+% @lisp: indented, narrowed, typewriter font.
 \def\lisp{\begingroup
   \nonfillstart
   \let\Elisp = \nonfillfinish
   \tt
-  % Make @kbd do something special, if requested.
-  \let\kbdfont\kbdexamplefont
-  \rawbackslash % have \ input char produce \ char from current font
-  \gobble
+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+  \gobble       % eat return
 }
 
-% Define the \E... control sequence only if we are inside the
-% environment, so the error checking in \end will work.
-%
-% We must call \lisp last in the definition, since it reads the
-% return following the @example (or whatever) command.
-%
+% @example: Same as @lisp.
 \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
 
-% @smallexample and @smalllisp.  This is not used unless the @smallbook
-% command is given.  Originally contributed by Pavel@xerox.
+% @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.
+%
+% This actually allows (for example) @end display inside an
+% @smalldisplay.  Too bad, but makeinfo will catch the error anyway.
 %
+\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
+\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
+\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
+\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
+
+% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
+% Originally contributed by Pavel@xerox.
 \def\smalllispx{\begingroup
-  \nonfillstart
-  \let\Esmalllisp = \nonfillfinish
-  \let\Esmallexample = \nonfillfinish
-  %
-  % Smaller fonts for small examples.
-  \indexfonts \tt
-  \rawbackslash % make \ output the \ character from the current font (tt)
-  \gobble
+  \def\Esmalllisp{\nonfillfinish\endgroup}%
+  \def\Esmallexample{\nonfillfinish\endgroup}%
+  \smallfonts
+  \lisp
 }
 
-% This is @display; same as @lisp except use roman font.
+% @display: same as @lisp except keep current font.
 %
 \def\display{\begingroup
   \nonfillstart
@@ -3738,7 +4226,15 @@ width0pt\relax} \fi
   \gobble
 }
 
-% This is @format; same as @display except don't narrow margins.
+% @smalldisplay (when @smallbook): @display plus smaller fonts.
+%
+\def\smalldisplayx{\begingroup
+  \def\Esmalldisplay{\nonfillfinish\endgroup}%
+  \smallfonts \rm
+  \display
+}
+
+% @format: same as @display except don't narrow margins.
 %
 \def\format{\begingroup
   \let\nonarrowing = t
@@ -3747,20 +4243,27 @@ width0pt\relax} \fi
   \gobble
 }
 
-% @flushleft (same as @format) and @flushright.
+% @smallformat (when @smallbook): @format plus smaller fonts.
 %
-\def\flushleft{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushleft = \nonfillfinish
-  \gobble
+\def\smallformatx{\begingroup
+  \def\Esmallformat{\nonfillfinish\endgroup}%
+  \smallfonts \rm
+  \format
 }
+
+% @flushleft (same as @format).
+%
+\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
+
+% @flushright.
+%
 \def\flushright{\begingroup
   \let\nonarrowing = t
   \nonfillstart
   \let\Eflushright = \nonfillfinish
   \advance\leftskip by 0pt plus 1fill
-  \gobble}
+  \gobble
+}
 
 % @quotation does normal linebreaking (hence we can't use \nonfillstart)
 % and narrows the margins.
@@ -3783,9 +4286,11 @@ width0pt\relax} \fi
   \fi
 }
 
+
 \message{defuns,}
-% Define formatter for defuns
-% First, allow user to change definition object font (\df) internally
+% @defun etc.
+
+% Allow user to change definition object font (\df) internally
 \def\setdeffont #1 {\csname DEF#1\endcsname}
 
 \newskip\defbodyindent \defbodyindent=.4in
@@ -3839,10 +4344,16 @@ width0pt\relax} \fi
 %% contained text.  This is especially needed for [ and ]
 \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
 \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\def\ampnr{\&}
+\let\ampnr = \&
 \def\lbrb{{\bf\char`\[}}
 \def\rbrb{{\bf\char`\]}}
 
+% Active &'s sneak into the index arguments, so make sure it's defined.
+{
+  \catcode`& = 13
+  \global\let& = \ampnr
+}
+
 % First, defname, which formats the header line itself.
 % #1 should be the function name.
 % #2 should be the type of definition, such as "Function".
@@ -3852,20 +4363,18 @@ width0pt\relax} \fi
 % outside the @def...
 \dimen2=\leftskip
 \advance\dimen2 by -\defbodyindent
-\dimen3=\rightskip
-\advance\dimen3 by -\defbodyindent
-\noindent        %
+\noindent
 \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
 \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
 \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1     %
+\parshape 2 0in \dimen0 \defargsindent \dimen1
 % Now output arg 2 ("Function" or some such)
 % ending at \deftypemargin from the right margin,
 % but stuck inside a box of width 0 so it does not interfere with linebreaking
 {% Adjust \hsize to exclude the ambient margins,
 % so that \rightline will obey them.
-\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
-\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
+\advance \hsize by -\dimen2
+\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
 % Make all lines underfull and no complaints:
 \tolerance=10000 \hbadness=10000
 \advance\leftskip by -\defbodyindent
@@ -3886,23 +4395,62 @@ width0pt\relax} \fi
 \def#1{\endgraf\endgroup\medbreak}%
 \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup %
 \catcode 61=\active % 61 is `='
 \obeylines\activeparens\spacesplit#3}
 
-\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
+% #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.
+%
+\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 \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
 
+% Used for @deftypemethod and @deftypeivar.
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence for consecutive fns (which we define).
+% #3 is the control sequence to call to resume processing.
+% #4, delimited by a space, is the class name.
+% #5 is the method's return type.
+%
+\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
+  \medbreak
+  \def#1{\endgraf\endgroup\medbreak}%
+  \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
+  \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
+
+% Used for @deftypeop.  The change from \deftypemethparsebody is an
+% extra argument at the beginning which is the `category', instead of it
+% being the hardwired string `Method' or `Instance Variable'.  We have
+% to account for this both in the \...x definition and in parsing the
+% input at hand.  Thus also need a control sequence (passed as #5) for
+% the \E... definition to assign the category name to.
+% 
+\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
+  \medbreak
+  \def#1{\endgraf\endgroup\medbreak}%
+  \def#2##1 ##2 ##3 {%
+    \def#4{##1}%
+    \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
+  \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
+
 \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
 \medbreak %
 % Define the end token that this defining construct specifies
@@ -3911,7 +4459,7 @@ width0pt\relax} \fi
 \def#2##1 ##2 {\def#4{##1}%
 \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
 
@@ -3926,7 +4474,7 @@ width0pt\relax} \fi
 \def#1{\endgraf\endgroup\medbreak}%
 \def#2{\begingroup\obeylines\spacesplit#3}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup %
 \catcode 61=\active %
@@ -3943,7 +4491,7 @@ width0pt\relax} \fi
   \def#1{\endgraf\endgroup\medbreak}%
   \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
   \parindent=0in
-  \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+  \advance\leftskip by \defbodyindent
   \exdentamount=\defbodyindent
   \begingroup\obeylines
 }
@@ -3988,7 +4536,7 @@ width0pt\relax} \fi
 \def#2##1 ##2 {\def#4{##1}%
 \begingroup\obeylines\spacesplit{#3{##2}}}%
 \parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\advance\leftskip by \defbodyindent
 \exdentamount=\defbodyindent
 \begingroup\obeylines\spacesplit{#3{#5}}}
 
@@ -4012,16 +4560,17 @@ width0pt\relax} \fi
 % First, define the processing that is wanted for arguments of \defun
 % Use this to expand the args and terminate the paragraph they make up
 
-\def\defunargs #1{\functionparens \sl
+\def\defunargs#1{\functionparens \sl
 % Expand, preventing hyphenation at `-' chars.
 % Note that groups don't affect changes in \hyphenchar.
-\hyphenchar\tensl=0
+% Set the font temporarily and use \font in case \setfont made \tensl a macro.
+{\tensl\hyphenchar\font=0}%
 #1%
-\hyphenchar\tensl=45
+{\tensl\hyphenchar\font=45}%
 \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
 \interlinepenalty=10000
 \advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+\endgraf\nobreak\vskip -\parskip\nobreak
 }
 
 \def\deftypefunargs #1{%
@@ -4032,7 +4581,7 @@ width0pt\relax} \fi
 \tclose{#1}% avoid \code because of side effects on active chars
 \interlinepenalty=10000
 \advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+\endgraf\nobreak\vskip -\parskip\nobreak
 }
 
 % Do complete processing of one @defun or @defunx line already parsed.
@@ -4051,7 +4600,7 @@ width0pt\relax} \fi
 \def\defun{\defparsebody\Edefun\defunx\defunheader}
 
 \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Function}%
+\begingroup\defname {#1}{\putwordDeffunc}%
 \defunargs {#2}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
@@ -4065,7 +4614,7 @@ width0pt\relax} \fi
 % #1 is the data type, #2 the name, #3 the args.
 \def\deftypefunheaderx #1#2 #3\relax{%
 \doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
 \deftypefunargs {#3}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
@@ -4096,7 +4645,7 @@ width0pt\relax} \fi
 \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
 
 \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Macro}%
+\begingroup\defname {#1}{\putwordDefmac}%
 \defunargs {#2}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
@@ -4106,53 +4655,77 @@ width0pt\relax} \fi
 \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
 
 \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Special Form}%
+\begingroup\defname {#1}{\putwordDefspec}%
 \defunargs {#2}\endgroup %
 \catcode 61=\other % Turn off change made in \defparsebody
 }
 
-% This definition is run if you use @defunx
-% anywhere other than immediately after a @defun or @defunx.
-
-\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
-\def\defunx #1 {\errmessage{@defunx in invalid context}}
-\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
-\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
-\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
-
-% @defmethod, and so on
-
-% @defop {Funny Method} foo-class frobnicate argument
-
+% @defop CATEGORY CLASS OPERATION ARG...
+%
 \def\defop #1 {\def\defoptype{#1}%
 \defopparsebody\Edefop\defopx\defopheader\defoptype}
-
-\def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype{} on #1}%
+%
+\def\defopheader#1#2#3{%
+\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
+\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
 \defunargs {#3}\endgroup %
 }
 
-% @deftypemethod foo-class return-type foo-method args
+% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
+%
+\def\deftypeop #1 {\def\deftypeopcategory{#1}%
+  \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
+                       \deftypeopcategory}
+%
+% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
+\def\deftypeopheader#1#2#3#4{%
+  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+  \begingroup
+    \defname{\defheaderxcond#2\relax$$$#3}
+            {\deftypeopcategory\ \putwordon\ \code{#1}}%
+    \deftypefunargs{#4}%
+  \endgroup
+}
+
+% @deftypemethod CLASS TYPE METHOD ARG...
 %
 \def\deftypemethod{%
-  \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
+  \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
 %
 % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
 \def\deftypemethodheader#1#2#3#4{%
-  \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
+  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+  \begingroup
+    \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
+    \deftypefunargs{#4}%
+  \endgroup
 }
 
-% @defmethod == @defop Method
+% @deftypeivar CLASS TYPE VARNAME
+%
+\def\deftypeivar{%
+  \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
+%
+% #1 is the class name, #2 the data type, #3 the variable name.
+\def\deftypeivarheader#1#2#3{%
+  \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
+  \begingroup
+    \defname{#3}{\putwordInstanceVariableof\ \code{#1}}%
+    \defvarargs{#3}%
+  \endgroup
+}
 
+% @defmethod == @defop Method
+%
 \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-
-\def\defmethodheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% entry in function index
-\begingroup\defname {#2}{Method on #1}%
-\defunargs {#3}\endgroup %
+%
+% #1 is the class name, #2 the method name, #3 the args.
+\def\defmethodheader#1#2#3{%
+  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
+  \begingroup
+    \defname{#2}{\putwordMethodon\ \code{#1}}%
+    \defunargs{#3}%
+  \endgroup
 }
 
 % @defcv {Class Option} foo-class foo-flag
@@ -4161,37 +4734,30 @@ width0pt\relax} \fi
 \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
 
 \def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype{} of #1}%
+\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
+\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
 \defvarargs {#3}\endgroup %
 }
 
-% @defivar == @defcv {Instance Variable}
-
+% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
+%
 \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-
-\def\defivarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{Instance Variable of #1}%
-\defvarargs {#3}\endgroup %
+%
+\def\defivarheader#1#2#3{%
+  \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
+  \begingroup
+    \defname{#2}{\putwordInstanceVariableof\ #1}%
+    \defvarargs{#3}%
+  \endgroup
 }
 
-% These definitions are run if you use @defmethodx, etc.,
-% anywhere other than immediately after a @defmethod, etc.
-
-\def\defopx #1 {\errmessage{@defopx in invalid context}}
-\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
-\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
-\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
-
-% Now @defvar
-
+% @defvar
 % First, define the processing that is wanted for arguments of @defvar.
 % This is actually simple: just print them in roman.
 % This must expand the args and terminate the paragraph they make up
 \def\defvarargs #1{\normalparens #1%
 \interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
+\endgraf\nobreak\vskip -\parskip\nobreak}
 
 % @defvr Counter foo-count
 
@@ -4205,7 +4771,7 @@ width0pt\relax} \fi
 \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
 
 \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{Variable}%
+\begingroup\defname {#1}{\putwordDefvar}%
 \defvarargs {#2}\endgroup %
 }
 
@@ -4214,7 +4780,7 @@ width0pt\relax} \fi
 \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
 
 \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{User Option}%
+\begingroup\defname {#1}{\putwordDefopt}%
 \defvarargs {#2}\endgroup %
 }
 
@@ -4226,9 +4792,9 @@ width0pt\relax} \fi
 % is actually part of the data type, which should not be put into the index.
 \def\deftypevarheader #1#2{%
 \dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
 \interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgraf\nobreak\vskip -\parskip\nobreak
 \endgroup}
 \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
 
@@ -4239,18 +4805,9 @@ width0pt\relax} \fi
 \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
 \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
 \interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgraf\nobreak\vskip -\parskip\nobreak
 \endgroup}
 
-% This definition is run if you use @defvarx
-% anywhere other than immediately after a @defvar or @defvarx.
-
-\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
-\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
-
 % Now define @deftp
 % Args are printed in bold, a slight difference from @defvar.
 
@@ -4263,51 +4820,394 @@ width0pt\relax} \fi
 \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
 \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
 
-% This definition is run if you use @deftpx, etc
-% anywhere other than immediately after a @deftp, etc.
+% These definitions are used if you use @defunx (etc.)
+% anywhere other than immediately after a @defun or @defunx.
+% 
+\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
+\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
+\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
+\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
+\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
+\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
+\def\defopx#1 {\errmessage{@defopx in invalid context}}
+\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
+\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
+\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
+\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
+\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
+\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
+\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
+\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
+\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
+\def\defunx#1 {\errmessage{@defunx in invalid context}}
+\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
+\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+ \newwrite\macscribble
+ \def\scanmacro#1{%
+   \begingroup \newlinechar`\^^M
+   % Undo catcode changes of \startcontents and \doprintindex
+   \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+   % Append \endinput to make sure that TeX does not see the ending newline.
+   \toks0={#1\endinput}%
+   \immediate\openout\macscribble=\jobname.tmp
+   \immediate\write\macscribble{\the\toks0}%
+   \immediate\closeout\macscribble
+   \let\xeatspaces\eatspaces
+   \input \jobname.tmp
+   \endgroup
+}
+\else
+\def\scanmacro#1{%
+\begingroup \newlinechar`\^^M
+% Undo catcode changes of \startcontents and \doprintindex
+\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
+\fi
+
+\newcount\paramno   % Count of parameters
+\newtoks\macname    % Macro name
+\newif\ifrecursive  % Is it recursive?
+\def\macrolist{}    % List of all defined macros in the form
+                    % \do\macro1\do\macro2...
+
+% Utility routines.
+% Thisdoes \let #1 = #2, except with \csnames.
+\def\cslet#1#2{%
+\expandafter\expandafter
+\expandafter\let
+\expandafter\expandafter
+\csname#1\endcsname
+\csname#2\endcsname}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=12\catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% 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 \.
+
+% 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
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\macrobodyctxt{%
+  \catcode`\~=12
+  \catcode`\^=12
+  \catcode`\_=12
+  \catcode`\|=12
+  \catcode`\<=12
+  \catcode`\>=12
+  \catcode`\+=12
+  \catcode`\{=12
+  \catcode`\}=12
+  \catcode`\@=12
+  \catcode`\^^M=12
+  \usembodybackslash}
+
+\def\macroargctxt{%
+  \catcode`\~=12
+  \catcode`\^=12
+  \catcode`\_=12
+  \catcode`\|=12
+  \catcode`\<=12
+  \catcode`\>=12
+  \catcode`\+=12
+  \catcode`\@=12
+  \catcode`\\=12}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+  \getargs{#1}%           now \macname is the macname and \argl the arglist
+  \ifx\argl\empty       % no arguments
+     \paramno=0%
+  \else
+     \expandafter\parsemargdef \argl;%
+  \fi
+  \if1\csname ismacro.\the\macname\endcsname
+     \message{Warning: redefining \the\macname}%
+  \else
+     \expandafter\ifx\csname \the\macname\endcsname \relax
+     \else \errmessage{The name \the\macname\space is reserved}\fi
+     \global\cslet{macsave.\the\macname}{\the\macname}%
+     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+     % Add the macroname to \macrolist
+     \toks0 = \expandafter{\macrolist\do}%
+     \xdef\macrolist{\the\toks0
+       \expandafter\noexpand\csname\the\macname\endcsname}%
+  \fi
+  \begingroup \macrobodyctxt
+  \ifrecursive \expandafter\parsermacbody
+  \else \expandafter\parsemacbody
+  \fi}
+
+\def\unmacro{\parsearg\unmacroxxx}
+\def\unmacroxxx#1{%
+  \if1\csname ismacro.#1\endcsname
+    \global\cslet{#1}{macsave.#1}%
+    \global\expandafter\let \csname ismacro.#1\endcsname=0%
+    % Remove the macro name from \macrolist
+    \begingroup
+      \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
+      \def\do##1{%
+        \def\tempb{##1}%
+        \ifx\tempa\tempb
+          % remove this
+        \else
+          \toks0 = \expandafter{\newmacrolist\do}%
+          \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
+        \fi}%
+      \def\newmacrolist{}%
+      % Execute macro list to define \newmacrolist
+      \macrolist
+      \global\let\macrolist\newmacrolist
+    \endgroup
+  \else
+    \errmessage{Macro #1 not defined}%
+  \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% 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.
+% 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
+% 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,;,}
+\def\parsemargdefxxx#1,{%
+  \if#1;\let\next=\relax
+  \else \let\next=\parsemargdefxxx
+    \advance\paramno by 1%
+    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+        {\xeatspaces{\hash\the\paramno}}%
+    \edef\paramlist{\paramlist\hash\the\paramno,}%
+  \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, 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
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\scanmacro{\temp}}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \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}}%
+    \fi
+  \else
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+        \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}%
+    \fi
+  \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {.  If so it reads up to the closing }, if not, it reads the whole
+% line.  Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+  \ifx\nchar\bgroup\else
+    \expandafter\parsearg
+  \fi \next}
+
+% We mant to disable all macros during \shipout so that they are not
+% expanded by \write.
+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+  \edef\next{\macrolist}\expandafter\endgroup\next}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign.  Just make them active and then expand them all to nothing.
+\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{\ignoreactivespaces
+\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
+           \expandafter\noexpand\csname#2\endcsname}%
+\expandafter\endgroup\next}
 
-\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
 
+\message{cross references,}
+% @xref etc.
 
-\message{cross reference,}
-% Define cross-reference macros
-\newwrite \auxfile
+\newwrite\auxfile
 
-\newif\ifhavexrefs  % True if xref values are known.
+\newif\ifhavexrefs    % True if xref values are known.
 \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
 
-% @inforef is simple.
+% @inforef is relatively simple.
 \def\inforef #1{\inforefzzz #1,,,,**}
 \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
   node \samp{\ignorespaces#1{}}}
 
-% \setref{foo} defines a cross-reference point named foo.
+% @node's job is to define \lastnode.
+\def\node{\ENVcheck\parsearg\nodezzz}
+\def\nodezzz#1{\nodexxx [#1,]}
+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+\let\nwnode=\node
+\let\lastnode=\relax
 
-\def\setref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ysectionnumberandtype}}
+% The sectioning commands (@chapter, etc.) call these.
+\def\donoderef{%
+  \ifx\lastnode\relax\else
+    \expandafter\expandafter\expandafter\setref{\lastnode}%
+      {Ysectionnumberandtype}%
+    \global\let\lastnode=\relax
+  \fi
+}
+\def\unnumbnoderef{%
+  \ifx\lastnode\relax\else
+    \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
+    \global\let\lastnode=\relax
+  \fi
+}
+\def\appendixnoderef{%
+  \ifx\lastnode\relax\else
+    \expandafter\expandafter\expandafter\setref{\lastnode}%
+      {Yappendixletterandtype}%
+    \global\let\lastnode=\relax
+  \fi
+}
 
-\def\unnumbsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ynothing}}
 
-\def\appendixsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Yappendixletterandtype}}
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
+% NAME-title, NAME-pg, and NAME-SNT.  Called from \foonoderef.  We have
+% to set \indexdummies so commands such as @code in a section title
+% aren't expanded.  It would be nicer not to expand the titles in the
+% first place, but there's so many layers that that is hard to do.
+%
+\def\setref#1#2{{%
+  \indexdummies
+  \pdfmkdest{#1}%
+  \dosetq{#1-title}{Ytitle}%
+  \dosetq{#1-pg}{Ypagenumber}%
+  \dosetq{#1-snt}{#2}%
+}}
 
-% \xref, \pxref, and \ref generate cross-references to specified points.
-% For \xrefX, #1 is the node name, #2 the name of the Info
-% cross-reference, #3 the printed node name, #4 the name of the Info
-% file, #5 the name of the printed manual.  All but the node name can be
-% omitted.
+% @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
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual.  All but the node name can be omitted.
 %
 \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
 \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
 \def\ref#1{\xrefX[#1,,,,,,,]}
 \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+  \unsepspaces
   \def\printedmanual{\ignorespaces #5}%
   \def\printednodename{\ignorespaces #3}%
   \setbox1=\hbox{\printedmanual}%
@@ -4320,7 +5220,7 @@ width0pt\relax} \fi
     \else
       % Use the actual chapter/section title appear inside
       % the square brackets.  Use the real section title if we have it.
-      \ifdim \wd1>0pt%
+      \ifdim \wd1 > 0pt
         % It is in another manual, so we don't have it.
         \def\printednodename{\ignorespaces #1}%
       \else
@@ -4341,27 +5241,54 @@ width0pt\relax} \fi
   % are best written with fairly long node names, containing hyphens, this
   % is a loss.  Therefore, we give the text of the node name again, so it
   % is as if TeX is seeing it for the first time.
+  \ifpdf
+    \leavevmode
+    \getfilename{#4}%
+    \ifnum\filenamelength>0
+      \startlink attr{/Border [0 0 0]}%
+        goto file{\the\filename.pdf} name{#1@}%
+    \else
+      \startlink attr{/Border [0 0 0]}%
+        goto name{#1@}%
+    \fi
+    \linkcolor
+  \fi
+  %
   \ifdim \wd1 > 0pt
-    \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
+    \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
   \else
     % _ (for example) has to be the character _ for the purposes of the
     % control sequence corresponding to the node, but it has to expand
     % into the usual \leavevmode...\vrule stuff for purposes of
     % printing. So we \turnoffactive for the \refx-snt, back on for the
     % printing, back off for the \refx-pg.
-    {\turnoffactive \refx{#1-snt}{}}%
-    \space [\printednodename],\space
+    {\normalturnoffactive
+     % Only output a following space if the -snt ref is nonempty; for
+     % @unnumbered and @anchor, it won't be.
+     \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+     \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+    }%
+    % [mynode],
+    [\printednodename],\space
+    % page 3
     \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
   \fi
+  \endlink
 \endgroup}
 
 % \dosetq is the interface for calls from other macros
 
-% Use \turnoffactive so that punctuation chars such as underscore
-% work in node names.
-\def\dosetq #1#2{{\let\folio=0 \turnoffactive
-\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
-\next}}
+% Use \normalturnoffactive so that punctuation chars such as underscore
+% and backslash work in node names.  (\turnoffactive doesn't do \.)
+\def\dosetq#1#2{%
+  {\let\folio=0%
+   \normalturnoffactive
+   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
+   \iflinks
+     \next
+   \fi
+  }%
+}
 
 % \internalsetq {foo}{page} expands into
 % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
@@ -4413,12 +5340,14 @@ width0pt\relax} \fi
   \expandafter\ifx\csname X#1\endcsname\relax
     % If not defined, say something at least.
     \angleleft un\-de\-fined\angleright
-    \ifhavexrefs
-      \message{\linenumber Undefined cross reference `#1'.}%
-    \else
-      \ifwarnedxrefs\else
-        \global\warnedxrefstrue
-        \message{Cross reference values unknown; you must run TeX again.}%
+    \iflinks
+      \ifhavexrefs
+        \message{\linenumber Undefined cross reference `#1'.}%
+      \else
+        \ifwarnedxrefs\else
+          \global\warnedxrefstrue
+          \message{Cross reference values unknown; you must run TeX again.}%
+        \fi
       \fi
     \fi
   \else
@@ -4429,7 +5358,7 @@ width0pt\relax} \fi
 }
 
 % This is the macro invoked by entries in the aux file.
-% 
+%
 \def\xrdef#1{\begingroup
   % Reenable \ as an escape while reading the second argument.
   \catcode`\\ = 0
@@ -4492,8 +5421,7 @@ width0pt\relax} \fi
   \catcode`\$=\other
   \catcode`\#=\other
   \catcode`\&=\other
-  % `\+ does not work, so use 43.
-  \catcode43=\other
+  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
   % Make the characters 128-255 be printing characters
   {%
     \count 1=128
@@ -4582,6 +5510,8 @@ width0pt\relax} \fi
   \xspaceskip\z@skip
   \parindent\defaultparindent
   %
+  \smallfonts \rm
+  %
   % Hang the footnote text off the number.
   \hang
   \textindent{\thisfootno}%
@@ -4596,7 +5526,7 @@ width0pt\relax} \fi
   \else\let\next\f@t\fi \next}
 \def\f@@t{\bgroup\aftergroup\@foot\let\next}
 \def\f@t#1{#1\@foot}
-\def\@foot{\strut\egroup}
+\def\@foot{\strut\par\egroup}
 
 }%end \catcode `\@=11
 
@@ -4655,23 +5585,25 @@ width0pt\relax} \fi
 
 % @image.  We use the macros from epsf.tex to support this.
 % If epsf.tex is not installed and @image is used, we complain.
-% 
+%
 % Check for and read epsf.tex up front.  If we read it only at @image
 % time, we might be inside a group, and then its definitions would get
 % undone and the next image would fail.
 \openin 1 = epsf.tex
 \ifeof 1 \else
   \closein 1
-  \def\epsfannounce{\toks0 = }% do not bother showing banner
+  % Do not bother showing banner with post-v2.7 epsf.tex (available in
+  % doc/epsf.tex until it shows up on ctan).
+  \def\epsfannounce{\toks0 = }%
   \input epsf.tex
 \fi
 %
+% We will only complain once about lack of epsf.tex.
 \newif\ifwarnednoepsf
 \newhelp\noepsfhelp{epsf.tex must be installed for images to
   work.  It is also included in the Texinfo distribution, or you can get
-  it from ftp://ftp.tug.org/tex/epsf.tex.}
+  it from ftp://tug.org/tex/epsf.tex.}
 %
-% Only complain once about lack of epsf.tex.
 \def\image#1{%
   \ifx\epsfbox\undefined
     \ifwarnednoepsf \else
@@ -4689,42 +5621,79 @@ width0pt\relax} \fi
 % #2 is (optional) width, #3 is (optional) height.
 % #4 is just the usual extra ignored arg for parsing this stuff.
 \def\imagexxx#1,#2,#3,#4\finish{%
-  % \epsfbox itself resets \epsf?size at each figure.
-  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-  \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-  \epsfbox{#1.eps}%
+  \ifpdf
+    \centerline{\dopdfimage{#1}{#2}{#3}}%
+  \else
+    % \epsfbox itself resets \epsf?size at each figure.
+    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+    \begingroup
+      \catcode`\^^M = 5 % in case we're inside an example
+      % If the image is by itself, center it.
+      \ifvmode
+        \nobreak\bigskip
+        % Usually we'll have text after the image which will insert
+        % \parskip glue, so insert it here too to equalize the space
+        % above and below. 
+        \nobreak\vskip\parskip
+        \nobreak
+        \centerline{\epsfbox{#1.eps}}%
+        \bigbreak
+      \else
+        % In the middle of a paragraph, no extra space.
+        \epsfbox{#1.eps}%
+      \fi
+    \endgroup
+  \fi
 }
 
-% End of control word definitions.
-
 
-\message{and turning on texinfo input format.}
+\message{localization,}
+% and i18n.
 
-\def\openindices{%
-   \newindex{cp}%
-   \newcodeindex{fn}%
-   \newcodeindex{vr}%
-   \newcodeindex{tp}%
-   \newcodeindex{ky}%
-   \newcodeindex{pg}%
+% @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.
+%
+\def\documentlanguage{\parsearg\dodocumentlanguage}
+\def\dodocumentlanguage#1{%
+  \tex % read txi-??.tex file in plain TeX.
+  % Read the file if it exists.
+  \openin 1 txi-#1.tex
+  \ifeof1
+    \errhelp = \nolanghelp
+    \errmessage{Cannot read language file txi-#1.tex}%
+    \let\temp = \relax
+  \else
+    \def\temp{\input txi-#1.tex }%
+  \fi
+  \temp
+  \endgroup
 }
+\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.}
+
 
-% Set some numeric style parameters, for 8.5 x 11 format.
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
 
-\hsize = 6in
-\hoffset = .25in
+
+% Page size parameters.
+%
 \newdimen\defaultparindent \defaultparindent = 15pt
-\parindent = \defaultparindent
-\parskip 3pt plus 2pt minus 1pt
-\setleading{13.2pt}
-\advance\topskip by 1.2cm
 
 \chapheadingskip = 15pt plus 4pt minus 2pt
 \secheadingskip = 12pt plus 3pt minus 2pt
 \subsecheadingskip = 9pt plus 2pt minus 2pt
 
 % Prevent underfull vbox error messages.
-\vbadness=10000
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
 
 % Following George Bush, just get rid of widows and orphans.
 \widowpenalty=10000
@@ -4733,101 +5702,125 @@ width0pt\relax} \fi
 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're
 % using an old version of TeX, don't do anything.  We want the amount of
 % stretch added to depend on the line length, hence the dependence on
-% \hsize.  This makes it come to about 9pt for the 8.5x11 format.
+% \hsize.  We call this whenever the paper size is set.
 %
-\ifx\emergencystretch\thisisundefined
-  % Allow us to assign to \emergencystretch anyway.
-  \def\emergencystretch{\dimen0}%
-\else
-  \emergencystretch = \hsize
-  \divide\emergencystretch by 45
-\fi
+\def\setemergencystretch{%
+  \ifx\emergencystretch\thisisundefined
+    % Allow us to assign to \emergencystretch anyway.
+    \def\emergencystretch{\dimen0}%
+  \else
+    \emergencystretch = .15\hsize
+  \fi
+}
 
-% Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)
-\def\smallbook{
-  \global\chapheadingskip = 15pt plus 4pt minus 2pt
-  \global\secheadingskip = 12pt plus 3pt minus 2pt
-  \global\subsecheadingskip = 9pt plus 2pt minus 2pt
+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
+% 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can
+% set \parskip and call \setleading for \baselineskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6{%
+  \voffset = #3\relax
+  \topskip = #6\relax
+  \splittopskip = \topskip
   %
-  \global\lispnarrowing = 0.3in
-  \setleading{12pt}
-  \advance\topskip by -1cm
-  \global\parskip 2pt plus 1pt
-  \global\hsize = 5in
-  \global\vsize=7.5in
-  \global\tolerance=700
-  \global\hfuzz=1pt
-  \global\contentsrightmargin=0pt
-  \global\deftypemargin=0pt
-  \global\defbodyindent=.5cm
+  \vsize = #1\relax
+  \advance\vsize by \topskip
+  \outervsize = \vsize
+  \advance\outervsize by 2\topandbottommargin
+  \pageheight = \vsize
   %
-  \global\pagewidth=\hsize
-  \global\pageheight=\vsize
+  \hsize = #2\relax
+  \outerhsize = \hsize
+  \advance\outerhsize by 0.5in
+  \pagewidth = \hsize
   %
-  \global\let\smalllisp=\smalllispx
-  \global\let\smallexample=\smalllispx
-  \global\def\Esmallexample{\Esmalllisp}
+  \normaloffset = #4\relax
+  \bindingoffset = #5\relax
+  %
+  \parindent = \defaultparindent
+  \setemergencystretch
 }
 
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{13.2pt}%
+  %
+  % If page is nothing but text, make it come out even.
+  \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+\def\smallbook{{\globaldefs = 1
+  \parskip = 2pt plus 1pt
+  \setleading{12pt}%
+  %
+  \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+  %
+  \lispnarrowing = 0.3in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \deftypemargin = 0pt
+  \defbodyindent = .5cm
+  %
+  \let\smalldisplay = \smalldisplayx
+  \let\smallexample = \smalllispx
+  \let\smallformat = \smallformatx
+  \let\smalllisp = \smalllispx
+}}
+
 % Use @afourpaper to print on European A4 paper.
-\def\afourpaper{
-\global\tolerance=700
-\global\hfuzz=1pt
-\setleading{12pt}
-\global\parskip 15pt plus 1pt
-
-\global\vsize= 53\baselineskip
-\advance\vsize by \topskip
-%\global\hsize=   5.85in     % A4 wide 10pt
-\global\hsize=  6.5in
-\global\outerhsize=\hsize
-\global\advance\outerhsize by 0.5in
-\global\outervsize=\vsize
-\global\advance\outervsize by 0.6in
-
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-}
-
-\bindingoffset=0pt
-\normaloffset=\hoffset
-\pagewidth=\hsize
-\pageheight=\vsize
-
-% Allow control of the text dimensions.  Parameters in order: textheight;
-% textwidth; voffset; hoffset; binding offset; topskip.
-% All require a dimension;
-% header is additional; added length extends the bottom of the page.
-
-\def\changepagesizes#1#2#3#4#5#6{
- \global\vsize= #1
- \global\topskip= #6
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
- \global\outerhsize=\hsize
- \global\advance\outerhsize by 0.5in
- \global\outervsize=\vsize
- \global\advance\outervsize by 0.6in
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- \global\normaloffset= #4
- \global\bindingoffset= #5}
+\def\afourpaper{{\globaldefs = 1
+  \setleading{12pt}%
+  \parskip = 3pt plus 2pt minus 1pt
+  %
+  \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
+  %
+  \tolerance = 700
+  \hfuzz = 1pt
+}}
 
 % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
 % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex
-        {\global\tolerance=700
-        \global\hfuzz=1pt
-        \setleading{12pt}
-        \global\parskip 15pt plus 1pt
-        \advance\baselineskip by 1.6pt
-        \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
-        }
+\def\afourlatex{{\globaldefs = 1
+  \setleading{13.6pt}%
+  %
+  \afourpaper
+  \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+  %
+  \globaldefs = 0
+}}
 
 % Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{\afourpaper
-\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
+\def\afourwide{%
+  \afourpaper
+  \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
+  %
+  \globaldefs = 0
+}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\def\pagesizes{\parsearg\pagesizesxxx}
+\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+  \globaldefs = 1
+  %
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{13.2pt}%
+  %
+  \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
 
 % Define macros to output various characters with catcode for normal text.
 \catcode`\"=\other
@@ -4838,6 +5831,7 @@ width0pt\relax} \fi
 \catcode`\<=\other
 \catcode`\>=\other
 \catcode`\+=\other
+\catcode`\$=\other
 \def\normaldoublequote{"}
 \def\normaltilde{~}
 \def\normalcaret{^}
@@ -4846,6 +5840,7 @@ width0pt\relax} \fi
 \def\normalless{<}
 \def\normalgreater{>}
 \def\normalplus{+}
+\def\normaldollar{$}
 
 % 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,
@@ -4856,7 +5851,13 @@ width0pt\relax} \fi
 % interword stretch (and shrink), and it is reasonable to expect all
 % typewriter fonts to have this, we can check that font parameter.
 %
-\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font.  Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts.  But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
 
 % Turn off all special characters except @
 % (and those which the user can use as if they were ordinary).
@@ -4864,10 +5865,10 @@ width0pt\relax} \fi
 % use math or other variants that look better in normal text.
 
 \catcode`\"=\active
-\def\activedoublequote{{\tt \char '042}}
+\def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
 \catcode`\~=\active
-\def~{{\tt \char '176}}
+\def~{{\tt\char126}}
 \chardef\hat=`\^
 \catcode`\^=\active
 \def^{{\tt \hat}}
@@ -4878,7 +5879,7 @@ width0pt\relax} \fi
 \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
 
 \catcode`\|=\active
-\def|{{\tt \char '174}}
+\def|{{\tt\char124}}
 \chardef \less=`\<
 \catcode`\<=\active
 \def<{{\tt \less}}
@@ -4887,6 +5888,8 @@ width0pt\relax} \fi
 \def>{{\tt \gtr}}
 \catcode`\+=\active
 \def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}
 %\catcode 27=\active
 %\def^^[{$\diamondsuit$}
 
@@ -4917,9 +5920,6 @@ width0pt\relax} \fi
 % \normalbackslash outputs one backslash in fixed width font.
 \def\normalbackslash{{\tt\rawbackslashxx}}
 
-% Say @foo, not \foo, in error messages.
-\escapechar=`\@
-
 % \catcode 17=0   % Define control-q
 \catcode`\\=\active
 
@@ -4933,7 +5933,8 @@ width0pt\relax} \fi
 @let|=@normalverticalbar
 @let<=@normalless
 @let>=@normalgreater
-@let+=@normalplus}
+@let+=@normalplus
+@let$=@normaldollar}
 
 @def@normalturnoffactive{@let"=@normaldoublequote
 @let\=@normalbackslash
@@ -4943,7 +5944,8 @@ width0pt\relax} \fi
 @let|=@normalverticalbar
 @let<=@normalless
 @let>=@normalgreater
-@let+=@normalplus}
+@let+=@normalplus
+@let$=@normaldollar}
 
 % Make _ and + \other characters, temporarily.
 % This is canceled by @fixbackslash.
@@ -4962,16 +5964,29 @@ width0pt\relax} \fi
 % Also back turn on active characters that might appear in the input
 % file name, in case not using a pre-dumped format.
 %
-@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
-  @catcode`+=@active @catcode`@_=@active}
+@gdef@fixbackslash{%
+  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @catcode`+=@active
+  @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
 
-%% These look ok in all fonts, so just make them not special.  The @rm below
-%% makes sure that the current font starts out as the newly loaded cmr10
-@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
+% These look ok in all fonts, so just make them not special.  
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
 
+@c Set initial fonts.
 @textfonts
 @rm
 
+
 @c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
 @c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
 @c End:
index 4690a34..2afcb58 100644 (file)
@@ -1,15 +1,14 @@
 \input texinfo.tex    @c -*-texinfo-*-
-@c $Id: texinfo.txi,v 1.50 1998/02/27 21:21:34 karl Exp $
+@c $Id: texinfo.txi,v 1.162 1999/09/28 19:38:01 karl Exp $
 @c %**start of header
 
 @c All text is ignored before the setfilename.
 @setfilename ../info/texinfo.info
-@settitle Texinfo @value{edition}
 
-@c Edition number is now the same as the Texinfo distribution version number.
-@set edition 3.12
-@set update-month February 1998
-@set update-date 27 @value{update-month}
+@set UPDATED 28 September 1999
+@set EDITION 4.0
+@set VERSION 4.0
+@settitle Texinfo @value{VERSION}
 
 @c Define a new index for options.
 @defcodeindex op
 @footnotestyle separate
 @paragraphindent 2
 @finalout
-@comment %**end of header
 
-@c Before release, run C-u C-c C-u C-a (texinfo-all-menus-update with a
-@c prefix arg).  This updates the node pointers, which texinfmt.el needs.
+@comment %**end of header
 
 @dircategory Texinfo documentation system
 @direntry
 * Texinfo: (texinfo).           The GNU documentation format.
-* install-info: (texinfo)Invoking install-info. Updating info/dir entries.
-* texi2dvi: (texinfo)Format with texi2dvi.      Printing Texinfo documentation.
-* texindex: (texinfo)Format with tex/texindex.  Sorting Texinfo index files.
+* install-info: (texinfo)Invoking install-info. Update info/dir entries.
+* texi2dvi: (texinfo)Format with texi2dvi.      Print Texinfo documents.
+* texindex: (texinfo)Format with tex/texindex.  Sort Texinfo index files.
 * makeinfo: (texinfo)makeinfo Preferred.        Translate Texinfo source.
 @end direntry
 
+@c Before release, run C-u C-c C-u C-a (texinfo-all-menus-update with a
+@c prefix arg).  This updates the node pointers, which texinfmt.el needs.
+
 @c Set smallbook if printing in smallbook format so the example of the
 @c smallbook font is actually written using smallbook; in bigbook, a kludge
 @c is used for TeX output.  Do this through the -t option to texi2dvi,
 @c set smallbook
 @c @@clear smallbook
 
+@c If you like blank pages.  Can add through texi2dvi -t.
+@c setchapternewpage odd
+
 @c Currently undocumented command, 5 December 1993:
 @c nwnode          (Same as node, but no warnings; for `makeinfo'.)
 
 @ifinfo
 This file documents Texinfo, a documentation system that can produce
-both on-line information and a printed manual from a single source file.
+both online information and a printed manual from a single source file.
 
-Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98
+Copyright (C) 1988, 90, 91, 92, 93, 95, 96, 97, 98, 99
 Free Software Foundation, Inc.
 
-This edition is for Texinfo version @value{edition}.
+This edition is for Texinfo version @value{VERSION}, @value{UPDATED}.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -78,7 +81,6 @@ except that this permission notice may be stated in a translation approved
 by the Free Software Foundation.
 @end ifinfo
 
-@setchapternewpage odd
 
 @shorttitlepage Texinfo
 
@@ -86,25 +88,27 @@ by the Free Software Foundation.
 @c use the new format for titles
 @title Texinfo
 @subtitle The GNU Documentation Format
-@subtitle for Texinfo version @value{edition}
-@subtitle @value{update-month}
+@subtitle for Texinfo version @value{VERSION}, @value{UPDATED}
 
-@author Robert J.@: Chassell
-@author Richard M.@: Stallman
+@author Robert J. Chassell
+@author Richard M. Stallman
 
 @c Include the Distribution inside the titlepage so
 @c that headings are turned off.
 
 @page
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1988, 90, 91, 92, 93, 95, 96, 97, 98
+Copyright @copyright{} 1988, 90, 91, 92, 93, 95, 96, 97, 98, 99
 Free Software Foundation, Inc.
 
+This manual is for Texinfo version @value{VERSION}, @value{UPDATED}.
+
 Published by the Free Software Foundation @*
 59 Temple Place Suite 330 @*
 Boston, MA 02111-1307 @*
 USA @*
-ISBN 1-882114-65-5
+ISBN 1-882114-67-1 @c for version 4.0, September 1999.
+@c ISBN 1-882114-65-5 @c for version 3.12, March 1998.
 @c ISBN 1-882114-63-9 is for edition 2.20 of 28 February 1995
 @c ISBN 1-882114-64-7 is for edition 2.24 of November 1996.
 
@@ -125,65 +129,22 @@ by the Free Software Foundation.
 Cover art by Etienne Suvasa.
 @end titlepage
 
-@ifinfo
-@node Top, Copying, (dir), (dir)
+@summarycontents
+@contents
+
+@ifnottex
+@node Top
 @top Texinfo
 
 Texinfo is a documentation system that uses a single source file to
-produce both on-line information and printed output.@refill
+produce both online information and printed output.
 
 The first part of this master menu lists the major nodes in this Info
 document, including the @@-command and concept indices.  The rest of
-the menu lists all the lower level nodes in the document.@refill
-
-This is Edition @value{edition} of the Texinfo documentation,
-@w{@value{update-date}}.
-@end ifinfo
+the menu lists all the lower level nodes in the document.
 
-@c Here is a spare copy of the chapter menu entry descriptions,
-@c in case they are accidently deleted
-@ignore
-Your rights.
-Texinfo in brief.
-How to use Texinfo mode.
-What is at the beginning of a Texinfo file?
-What is at the end of a Texinfo file?
-How to create chapters, sections, subsections,
-  appendices, and other parts.
-How to provide structure for a document.
-How to write nodes.
-How to write menus.
-How to write cross references.
-How to mark words and phrases as code,
-  keyboard input, meta-syntactic
-  variables, and the like.
-How to write quotations, examples, etc.
-How to write lists and tables.
-How to create indices.
-How to insert @@-signs, braces, etc.
-How to indicate results of evaluation,
-  expansion of macros, errors, etc.
-How to force and prevent line and page breaks.
-How to describe functions and the like in a uniform manner.
-How to write footnotes.
-How to specify text for either @TeX{} or Info.
-How to print hardcopy.
-How to create an Info file.
-How to install an Info file
-A list of all the Texinfo @@-commands.
-Hints on how to write a Texinfo document.
-A sample Texinfo file to look at.
-Tell readers they have the right to copy
-  and distribute.
-How to incorporate other Texinfo files.
-How to write page headings and footings.
-How to find formatting mistakes.
-All about paragraph refilling.
-A description of @@-Command syntax.
-Texinfo second edition features.
-A menu containing commands and variables.
-A menu covering many topics.
-@end ignore
+This is Edition @value{VERSION} of the Texinfo manual, updated @value{UPDATED}.
+@end ifnottex
 
 @menu
 * Copying::                     Your rights.
@@ -206,13 +167,12 @@ A menu covering many topics.
 * Breaks::                      How to force and prevent line and page breaks.
 * Definition Commands::         How to describe functions and the like
                                   in a uniform manner.
-* Footnotes::                   How to write footnotes.
 * Conditionals::                How to specify text for either @TeX{} or Info.
-* Macros::                      Defining new Texinfo commands.
-* Format/Print Hardcopy::       How to convert a Texinfo file to a file
+* Internationalization::        
+* Defining New Texinfo Commands::  
+* Hardcopy::                    How to convert a Texinfo file to a file
                                   for printing and how to print that file.
-* Create an Info File::         Convert a Texinfo file into an Info file.
-* Install an Info File::        Make an Info file accessible to users.
+* Creating and Installing Info Files::  
 * Command List::                All the Texinfo @@-commands.
 * Tips::                        Hints on how to write a Texinfo document.
 * Sample Texinfo File::         A sample Texinfo file to look at.
@@ -233,18 +193,17 @@ A menu covering many topics.
 
 Overview of Texinfo
 
-* Using Texinfo::               Create a conventional printed book
-                                  or an Info file.
+* Reporting Bugs::              Submitting effective bug reports.
+* Using Texinfo::               Create printed or online output.
 * Info Files::                  What is an Info file?
 * Printed Books::               Characteristics of a printed book or manual.
 * Formatting Commands::         @@-commands are used for formatting.
 * Conventions::                 General rules for writing a Texinfo file.
-* Comments::                    How to write comments and mark regions that
-                                  the formatting commands will ignore.
+* Comments::                    Writing comments and ignored text in general.
 * Minimum::                     What a Texinfo file must have.
 * Six Parts::                   Usually, a Texinfo file has six parts.
 * Short Sample::                A short sample Texinfo file.
-* Acknowledgements::            
+* Acknowledgements and History::  Contributors and genesis.
 
 Using Texinfo Mode
 
@@ -285,7 +244,8 @@ The Texinfo File Header
 * setfilename::                 Tell Info the name of the Info file.
 * settitle::                    Create a title for the printed work.
 * setchapternewpage::           Start chapters on right-hand pages.
-* paragraphindent::             An option to specify paragraph indentation.
+* paragraphindent::             Specify paragraph indentation.
+* exampleindent::               Specify environment indentation.
 * End of Header::               Formatting a region requires this.
 
 The Title and Copyright Pages
@@ -334,8 +294,9 @@ Nodes
 * Two Paths::                   Different commands to structure
                                   Info output and printed output.
 * Node Menu Illustration::      A diagram, and sample nodes and menus.
-* node::                        How to write a node, in detail.
-* makeinfo Pointer Creation::   How to create node pointers with @code{makeinfo}.
+* node::                        Creating nodes, in detail.
+* makeinfo Pointer Creation::   Letting makeinfo determine node pointers.
+* anchor::                      Defining arbitrary cross-reference targets.
 
 The @code{@@node} Command
 
@@ -384,23 +345,26 @@ Marking Words and Phrases
 Indicating Definitions, Commands, etc.
 
 * Useful Highlighting::         Highlighting provides useful information.
-* code::                        How to indicate code.
-* kbd::                         How to show keyboard input.
-* key::                         How to specify keys.
-* samp::                        How to show a literal sequence of characters.
-* var::                         How to indicate a metasyntactic variable.
-* file::                        How to indicate the name of a file.
-* dfn::                         How to specify a definition.
-* cite::                        How to refer to a book that is not in Info.
-* url::                         How to indicate a world wide web reference.
-* email::                       How to indicate an electronic mail address.
+* code::                        Indicating program code.
+* kbd::                         Showing keyboard input.
+* key::                         Specifying keys.
+* samp::                        Showing a literal sequence of characters.
+* var::                         Indicating metasyntactic variables.
+* env::                         Indicating environment variables.
+* file::                        Indicating file names.
+* command::                     Indicating command names.
+* option::                      Indicating option names.
+* dfn::                         Specifying definitions.
+* cite::                        Referring to books not in the  Info system.
+* acronym::                     Indicating acronyms.
+* url::                         Indicating a World Wide Web reference.
+* email::                       Indicating an electronic mail address.
 
 Emphasizing Text
 
 * emph & strong::               How to emphasize text in Texinfo.
 * Smallcaps::                   How to use the small caps font.
 * Fonts::                       Various font commands for printed output.
-* Customized Highlighting::     How to define highlighting commands.
 
 Quotations and Examples
 
@@ -409,8 +373,8 @@ Quotations and Examples
 * quotation::                   How to write a quotation.
 * example::                     How to write an example in a fixed-width font.
 * noindent::                    How to prevent paragraph indentation.
-* Lisp Example::                How to illustrate Lisp code.
-* smallexample & smalllisp::    Forms for the @code{@@smallbook} option.
+* lisp::                        How to illustrate Lisp code.
+* small::                       Forms for @code{@@smallbook}.
 * display::                     How to write an example in the current font.
 * format::                      How to write an example that does not narrow
                                   the margins.
@@ -437,7 +401,7 @@ Multi-column Tables
 * Multitable Column Widths::    Defining multitable column widths.
 * Multitable Rows::             Defining multitable rows, with examples.
 
-Creating Indices
+Indices
 
 * Index Entries::               Choose different words for index entries.
 * Predefined Indices::          Use different indices for different kinds
@@ -467,6 +431,7 @@ Special Insertions
 * math::                        How to format a mathematical expression.
 * Glyphs::                      How to indicate results of evaluation,
                                   expansion of macros, errors, etc.
+* Footnotes::                   How to include footnotes.
 * Images::                      How to include graphics.
 
 Inserting @@ and Braces
@@ -503,12 +468,17 @@ Glyphs for Examples
 
 Glyphs Summary
 
-* result::                      
-* expansion::                   
-* Print Glyph::                 
-* Error Glyph::                 
-* Equivalence::                 
-* Point Glyph::                 
+* result::
+* expansion::
+* Print Glyph::
+* Error Glyph::
+* Equivalence::
+* Point Glyph::
+
+Footnotes
+
+* Footnote Commands::           How to write a footnote in Texinfo.
+* Footnote Styles::             Controlling how footnotes appear in Info.
 
 Making and Preventing Breaks
 
@@ -540,11 +510,6 @@ The Definition Commands
 * Abstract Objects::            Commands for object-oriented programming.
 * Data Types::                  The definition command for data types.
 
-Footnotes
-
-* Footnote Commands::           How to write a footnote in Texinfo.
-* Footnote Styles::             Controlling how footnotes appear in Info.
-
 Conditionally Visible Text
 
 * Conditional Commands::        Specifying text for HTML, Info, or @TeX{}.
@@ -557,30 +522,45 @@ Conditionally Visible Text
 @code{@@set}, @code{@@clear}, and @code{@@value}
 
 * ifset ifclear::               Format a region if a flag is set.
-* value::                       Replace a flag with a string.
+* set value::                   Expand a flag variable to a string.
 * value Example::               An easy way to update edition information.
 
-Macros: Defining New Texinfo Commands
+Internationalization
+
+* documentlanguage::            Declaring the current language.
+* documentencoding::            Declaring the input encoding.
 
-* Defining Macros::             Both defining and undefining new commands.
+Defining New Texinfo Commands
+
+* Defining Macros::             Defining and undefining new commands.
 * Invoking Macros::             Using a macro, once you've defined it.
+* Macro Details::               Beyond basic macro usage.
+* alias::                       Command aliases.
+* definfoenclose::              Customized highlighting.
 
-Format and Print Hardcopy
+Formatting and Printing Hardcopy
 
 * Use TeX::                     Use @TeX{} to format for hardcopy.
-* Format with tex/texindex::    How to format in a shell.
-* Format with texi2dvi::        A simpler way to use the shell.
+* Format with tex/texindex::    How to format with explicit shell commands.
+* Format with texi2dvi::        A simpler way to format.
 * Print with lpr::              How to print.
 * Within Emacs::                How to format and print from an Emacs shell.
 * Texinfo Mode Printing::       How to format and print in Texinfo mode.
 * Compile-Command::             How to print using Emacs's compile command.
 * Requirements Summary::        @TeX{} formatting requirements summary.
-* Preparing for TeX::           What you need to do to use @TeX{}.
+* Preparing for TeX::           What to do before you use @TeX{}.
 * Overfull hboxes::             What are and what to do with overfull hboxes.
 * smallbook::                   How to print small format books and manuals.
 * A4 Paper::                    How to print on European A4 paper.
+* pagesizes::                   How to print with customized page sizes.
 * Cropmarks and Magnification::  How to print marks to indicate the size
                                 of pages and how to print scaled up output.
+* PDF Output::                  Portable Document Format output.
+
+Creating and Installing Info Files
+
+* Creating an Info File::       
+* Install an Info File::        
 
 Creating an Info File
 
@@ -595,10 +575,11 @@ Creating an Info File
 * Batch Formatting::            How to format for Info in Emacs Batch mode.
 * Tag and Split Files::         How tagged and split files help Info
                                   to run better.
+* makeinfo html::               Generating HTML output.
 
 Installing an Info File
 
-* Directory file::              The top level menu for all Info files.
+* Directory File::              The top level menu for all Info files.
 * New Info File::               Listing a new info file.
 * Other Info Directories::      How to specify Info files that are
                                   located in other directories.
@@ -645,16 +626,19 @@ Finding Badly Referenced Nodes
 * Unsplit::                     How to create an unsplit file.
 * Tagifying::                   How to tagify a file.
 * Splitting::                   How to split a file manually.
-
-How to Obtain @TeX{}
-
-@c * New Texinfo Mode Commands::   The updating commands are especially useful.
-@c * New Commands::                Many newly described @@-commands.
 @end detailmenu
 @end menu
 
-@node Copying, Overview, Top, Top
-@comment  node-name, next, previous,  up
+@c Reward readers for getting to the end of the menu :).
+@c Contributed by Arnold Robbins.
+@quotation
+Documentation is like sex: when it is good, it is very, very good; and
+when it is bad, it is better than nothing.
+---Dick Brandon
+@end quotation
+
+
+@node Copying
 @unnumbered Texinfo Copying Conditions
 @cindex Copying conditions
 @cindex Conditions for copying Texinfo
@@ -690,100 +674,171 @@ their recipients to know that what they have is not what we distributed,
 so that any problems introduced by others will not reflect on our
 reputation.@refill
 
-  The precise conditions of the licenses for the programs currently
+The precise conditions of the licenses for the programs currently
 being distributed that relate to Texinfo are found in the General Public
-Licenses that accompany them.@refill
+Licenses that accompany them.
 
-@node Overview, Texinfo Mode, Copying, Top
-@comment  node-name,  next,  previous,  up
+
+@node Overview
 @chapter Overview of Texinfo
 @cindex Overview of Texinfo
 @cindex Texinfo overview
 
-@dfn{Texinfo}@footnote{Note that the first syllable of ``Texinfo'' is
-pronounced like ``speck'', not ``hex''.  This odd pronunciation is
-derived from, but is not the same as, the pronunciation of @TeX{}.  In
-the word @TeX{}, the @samp{X} is actually the Greek letter ``chi''
-rather than the English letter ``ex''.  Pronounce @TeX{} as if the
-@samp{X} were the last sound in the name `Bach'; but pronounce Texinfo
-as if the @samp{x} were a `k'.  Spell ``Texinfo'' with a capital ``T''
-and write the other letters in lower case.}
-is a documentation system that uses a single source file to produce both
-on-line information and printed output.  This means that instead of
-writing two different documents, one for the on-line help or other on-line
-information and the other for a typeset manual or other printed work, you
-need write only one document.  When the work is revised, you need revise
-only one document.  (You can read the on-line information, known as an
-@dfn{Info file}, with an Info documentation-reading program.)@refill
+@dfn{Texinfo}@footnote{The first syllable of ``Texinfo'' is pronounced
+like ``speck'', not ``hex''.  This odd pronunciation is derived from,
+but is not the same as, the pronunciation of @TeX{}.  In the word
+@TeX{}, the @samp{X} is actually the Greek letter ``chi'' rather than
+the English letter ``ex''.  Pronounce @TeX{} as if the @samp{X} were the
+last sound in the name `Bach'; but pronounce Texinfo as if the @samp{x}
+were a `k'.  Spell ``Texinfo'' with a capital ``T'' and the other
+letters in lower case.}  is a documentation system that uses a single
+source file to produce both online information and printed output.  This
+means that instead of writing two different documents, one for the
+online information and the other for a printed work, you need write only
+one document.  Therefore, when the work is revised, you need revise only
+that one document.
 
 @menu
-* Using Texinfo::               Create a conventional printed book
-                                  or an Info file.
+* Reporting Bugs::              Submitting effective bug reports.
+* Using Texinfo::               Create printed or online output.
 * Info Files::                  What is an Info file?
 * Printed Books::               Characteristics of a printed book or manual.
 * Formatting Commands::         @@-commands are used for formatting.
 * Conventions::                 General rules for writing a Texinfo file.
-* Comments::                    How to write comments and mark regions that
-                                  the formatting commands will ignore.
+* Comments::                    Writing comments and ignored text in general.
 * Minimum::                     What a Texinfo file must have.
 * Six Parts::                   Usually, a Texinfo file has six parts.
 * Short Sample::                A short sample Texinfo file.
-* Acknowledgements::            
+* Acknowledgements and History::  Contributors and genesis.
 @end menu
 
-@node Using Texinfo, Info Files, Overview, Overview
-@ifinfo
-@heading Using Texinfo
-@end ifinfo
+
+@node Reporting Bugs
+@section Reporting Bugs
+
+@cindex Bugs, reporting
+@cindex Suggestions for Texinfo, making
+@cindex Reporting bugs
+We welcome bug reports or suggestions for the Texinfo system, both
+programs and documentation.  Please email them to
+@email{bug-texinfo@@gnu.org}.  You can get the latest version of Texinfo
+from @uref{ftp://ftp.gnu.org/gnu/texinfo/} and its mirrors worldwide.
+
+@cindex Checklist for bug reports
+For bug reports, please include enough information for the maintainers
+to reproduce the problem.  Generally speaking, that means:
+
+@itemize @bullet
+@item the version number of Texinfo and the program(s) or manual(s) involved.
+@item hardware, operating system, and compiler versions.
+@item any unusual options you gave to @command{configure}.
+@item the contents of any input files necessary to reproduce the bug.
+@item a description of the problem and samples of any erroneous output.
+@item anything else that you think would be helpful.
+@end itemize
+
+When in doubt whether something is needed or not, include it.  It's
+better to include too much than to leave out something important.
+
+Patches are most welcome; if possible, please make them with
+@samp{@w{diff -c}} (@pxref{Top,, Overview, diffutils, Comparing and
+Merging Files}) and include @file{ChangeLog} entries (@pxref{Change
+Log,,, emacs, The GNU Emacs Manual}).
+
+When sending email, please do not encode or split the messages in any
+way if possible; it's much easier to deal with one plain text message,
+however large, than many small ones.
+@uref{ftp://ftp.gnu.org/gnu/sharutils/, GNU shar} is a convenient way of
+packaging multiple and/or binary files for email.
+
+
+@node Using Texinfo
+@section Using Texinfo
+
+@cindex Using Texinfo in general
+@cindex Texinfo, introduction to
+@cindex Introduction to Texinfo
 
 Using Texinfo, you can create a printed document with the normal
-features of a book, including chapters, sections, cross references,
-and indices.  From the same Texinfo source file, you can create a
-menu-driven, on-line Info file with nodes, menus, cross references,
-and indices.  You can, if you wish, make the chapters and sections of
-the printed document correspond to the nodes of the on-line
-information; and you use the same cross references and indices for
-both the Info file and the printed work.  @cite{The GNU
-Emacs Manual} is a good example of a Texinfo file, as is this manual.@refill
+features of a book, including chapters, sections, cross references, and
+indices.  From the same Texinfo source file, you can create a
+menu-driven, online Info file with nodes, menus, cross references, and
+indices.  You can also create from that same source file an HTML output
+file suitable for use with a web browser.  @cite{The GNU Emacs Manual}
+is a good example of a Texinfo file, as is this manual.
 
 To make a printed document, you process a Texinfo source file with the
-@TeX{} typesetting program.  This creates a DVI file that you can
-typeset and print as a book or report.  (Note that the Texinfo language
-is completely different from @TeX{}'s usual language, plain @TeX{}.)  If
-you do not have @TeX{}, but do have @code{troff} or @code{nroff}, you
-can use the @code{texi2roff} program instead.@refill
-
-To make an Info file, you process a Texinfo source file with the
-@code{makeinfo} utility or Emacs's @code{texinfo-format-buffer} command;
-this creates an Info file that you can install on-line.@refill
-
-@TeX{} and @code{texi2roff} work with many types of printers; similarly,
-Info works with almost every type of computer terminal.  This power
-makes Texinfo a general purpose system, but brings with it a constraint,
-which is that a Texinfo file may contain only the customary
-``typewriter'' characters (letters, numbers, spaces, and punctuation
-marks) but no special graphics.@refill
-
-A Texinfo file is a plain @sc{ascii} file containing text and
+@TeX{} typesetting program (but the Texinfo language is very different
+from @TeX{}'s usual language, plain @TeX{}).  This creates a DVI file
+that you can typeset and print as a book or report (@pxref{Hardcopy}).
+
+@pindex makeinfo
+To output an Info file, process your Texinfo source with the
+@code{makeinfo} utility or Emacs's @code{texinfo-format-buffer} command.
+You can install the result in your Info tree (@pxref{Install an Info
+File}).
+
+To output an HTML file, process your Texinfo source with @code{makeinfo}
+using the @samp{--html} option.  You can (for example) install the
+result on your web site.
+
+@cindex Output formats, supporting more
+@cindex Docbook output format
+@cindex SGML-tools output format
+If you are a programmer and would like to contribute to the GNU project
+by implementing additional output formats for Texinfo, that would be
+excellent.  But please do not write a separate translator texi2foo for
+your favorite format foo!  That is the hard way to do the job, and makes
+extra work in subsequent maintenance, since the Texinfo language is
+continually being enhanced and updated.  Instead, the best approach is
+modify @code{makeinfo} to generate the new format, as it does now for
+Info and HTML.
+
+@TeX{} works with virtually all printers; Info works with virtually all
+computer terminals; the HTML output works with virtually all web
+browsers.  Thus Texinfo can be used by almost any computer user.
+
+@cindex Source file
+A Texinfo source file is a plain @sc{ascii} file containing text and
 @dfn{@@-commands} (words preceded by an @samp{@@}) that tell the
-typesetting and formatting programs what to do.  You may edit a
-Texinfo file with any text editor; but it is especially convenient to
-use GNU Emacs since that editor has a special mode, called Texinfo
-mode, that provides various Texinfo-related features.  (@xref{Texinfo
-Mode}.)@refill
-
-Before writing a Texinfo source file, you should become familiar with
-the Info documentation reading program and learn about nodes,
-menus, cross references, and the rest.  (@inforef{Top, info, info},
-for more information.)@refill
+typesetting and formatting programs what to do.  You may edit a Texinfo
+file with any text editor; but it is especially convenient to use GNU
+Emacs since that editor has a special mode, called Texinfo mode, that
+provides various Texinfo-related features.  (@xref{Texinfo Mode}.)
 
-You can use Texinfo to create both on-line help and printed manuals;
-moreover, Texinfo is freely redistributable.  For these reasons, Texinfo
-is the format in which documentation for GNU utilities and libraries is
-written.@refill
+Before writing a Texinfo source file, you should learn about nodes,
+menus, cross references, and the rest, for example by reading this
+manual.
 
-@node Info Files, Printed Books, Using Texinfo, Overview
-@comment  node-name,  next,  previous,  up
+You can use Texinfo to create both online help and printed manuals;
+moreover, Texinfo is freely redistributable.  For these reasons, Texinfo
+is the official documentation format of the GNU project.  More
+information is available at the @uref{http://www.gnu.org/doc/, GNU
+documentation web page}.
+
+@cindex Man page output, not supported
+From time to time, proposals are made to generate traditional Unix man
+pages from Texinfo source.  This is not likely to ever be supported,
+because man pages have a very strict conventional format.  Merely
+enhancing @command{makeinfo} to output troff format would be
+insufficient.  Generating a good man page therefore requires a
+completely different source than the typical Texinfo applications of
+generating a good user manual or a good reference manual.  This makes
+generating man pages incompatible with the Texinfo design goal of not
+having to document the same information in different ways for different
+output formats.  You might as well just write the man page directly.
+
+@pindex help2man 
+@cindex O'Dea, Brendan
+If you wish to support man pages, the program @command{help2man} may be
+useful; it generates a traditional man page from the @samp{--help}
+output of a program.  In fact, this is currently used to generate man
+pages for the Texinfo programs themselves.  It is free software written
+by Brendan O'Dea, available from
+@uref{http://www.ozemail.com.au/~bod/help2man.tar.gz}.
+
+
+@node Info Files
 @section Info files
 @cindex Info files
 
@@ -870,8 +925,20 @@ The @file{dir} file in the @file{info} directory serves as the
 departure point for the whole Info system.  From it, you can reach the
 `Top' nodes of each of the documents in a complete Info system.@refill
 
-@node Printed Books, Formatting Commands, Info Files, Overview
-@comment  node-name,  next,  previous,  up
+@cindex URI syntax for Info
+If you wish to refer to an Info file in a URI, you can use the
+(unofficial) syntax exemplified in the following.  This works with
+Emacs/W3, for example:
+@example
+info:///usr/info/emacs#Dissociated%20Press
+info:emacs#Dissociated%20Press
+info://localhost/usr/info/emacs#Dissociated%20Press
+@end example
+
+The @command{info} program itself does not follow URI's of any kind.
+
+
+@node Printed Books
 @section Printed Books
 @cindex Printed book and manual characteristics
 @cindex Manual characteristics, printed
@@ -883,9 +950,12 @@ departure point for the whole Info system.  From it, you can reach the
 A Texinfo file can be formatted and typeset as a printed book or manual.
 To do this, you need @TeX{}, a powerful, sophisticated typesetting
 program written by Donald Knuth.@footnote{You can also use the
-@code{texi2roff} program if you do not have @TeX{}; since Texinfo is
-designed for use with @TeX{}, @code{texi2roff} is not described here.
-@code{texi2roff} is not part of the standard GNU distribution.}
+@pindex texi2roff@r{, unsupported software}
+@uref{ftp://tug.org/texi2roff.tar.gz, @code{texi2roff}} program if you
+do not have @TeX{}; since Texinfo is designed for use with @TeX{},
+@code{texi2roff} is not described here.  @code{texi2roff} is not part of
+the standard GNU distribution and is not maintained or up-to-date with
+all the Texinfo features described in this manual.}
 
 A Texinfo-based book is similar to any other typeset, printed work: it
 can have a title page, copyright page, table of contents, and preface,
@@ -893,18 +963,19 @@ as well as chapters, numbered or unnumbered sections and subsections,
 page headers, cross references, footnotes, and indices.@refill
 
 You can use Texinfo to write a book without ever having the intention
-of converting it into on-line information.  You can use Texinfo for
+of converting it into online information.  You can use Texinfo for
 writing a printed novel, and even to write a printed memo, although
 this latter application is not recommended since electronic mail is so
 much easier.@refill
 
 @TeX{} is a general purpose typesetting program.  Texinfo provides a
-file called @file{texinfo.tex} that contains information (definitions or
+file @file{texinfo.tex} that contains information (definitions or
 @dfn{macros}) that @TeX{} uses when it typesets a Texinfo file.
 (@file{texinfo.tex} tells @TeX{} how to convert the Texinfo @@-commands
 to @TeX{} commands, which @TeX{} can then process to create the typeset
 document.)  @file{texinfo.tex} contains the specifications for printing
-a document.@refill
+a document.  You can get the latest version of @file{texinfo.tex} from
+@uref{ftp://ftp.gnu.org/gnu/texinfo.tex}.
 
 Most often, documents are printed on 8.5 inch by 11 inch
 pages (216@dmn{mm} by 280@dmn{mm}; this is the default size), but you
@@ -924,7 +995,7 @@ light-hearted, young and cheery.@refill
 @TeX{} is freely distributable.  It is written in a superset of Pascal
 called WEB and can be compiled either in Pascal or (by using a
 conversion program that comes with the @TeX{} distribution) in C.
-(@xref{TeX Mode, ,@TeX{} Mode, xemacs, XEmacs User's Manual}, for information
+(@xref{TeX Mode, ,@TeX{} Mode, emacs, The GNU Emacs Manual}, for information
 about @TeX{}.)@refill
 
 @TeX{} is very powerful and has a great many features.  Because a
@@ -933,7 +1004,8 @@ character-only terminal in Info form and in a typeset book, the
 formatting commands that Texinfo supports are necessarily
 limited.@refill
 
-@xref{Obtaining TeX, , How to Obtain @TeX{}}.
+To get a copy of @TeX{}, see
+@ref{Obtaining TeX, , How to Obtain @TeX{}}.
 
 
 @node Formatting Commands, Conventions, Printed Books, Overview
@@ -963,17 +1035,17 @@ numeric characters.  Similarly, you can print the output generated by
 @TeX{} on a wide variety of printers.@refill
 
 Depending on what they do or what arguments@footnote{The word
-@dfn{argument} comes from the way it is used in mathematics and does
-not refer to a disputation between two people; it refers to the
-information presented to the command.  According to the @cite{Oxford
-English Dictionary}, the word derives from the Latin for @dfn{to make
-clear, prove}; thus it came to mean `the evidence offered as proof',
-which is to say, `the information offered', which led to its
-mathematical meaning.  In its other thread of derivation, the word
-came to mean `to assert in a manner against which others may make
-counter assertions', which led to the meaning of `argument' as a
-disputation.} they take, you need to write @@-commands on lines of
-their own or as part of sentences:@refill
+@dfn{argument} comes from the way it is used in mathematics and does not
+refer to a dispute between two people; it refers to the information
+presented to the command.  According to the @cite{Oxford English
+Dictionary}, the word derives from the Latin for @dfn{to make clear,
+prove}; thus it came to mean `the evidence offered as proof', which is
+to say, `the information offered', which led to its mathematical
+meaning.  In its other thread of derivation, the word came to mean `to
+assert in a manner against which others may make counter assertions',
+which led to the meaning of `argument' as a dispute.} they take, you
+need to write @@-commands on lines of their own or as part of
+sentences:
 
 @itemize @bullet
 @item
@@ -998,12 +1070,14 @@ wish (but usually within a sentence) with its argument,
 marks text as being code.)@refill
 
 @item
-Write a command such as @code{@@example} at the beginning of a line of
-its own; write the body-text on following lines; and write the matching
-@code{@@end} command, @code{@@end example} in this case, at the
-beginning of a line of its own after the body-text. (@code{@@example}
-@dots{} @code{@@end example} indents and typesets body-text as an
-example.)@refill
+Write a command such as @code{@@example} on a line of its own; write the
+body-text on following lines; and write the matching @code{@@end}
+command, @code{@@end example} in this case, at the on a line of its own
+after the body-text. (@code{@@example} @dots{} @code{@@end example}
+indents and typesets body-text as an example.)  It's usually ok to
+indent environment commands like this, but in complicated and
+hard-to-define circumstances the extra spaces cause extra space to
+appear in the output, so beware.
 @end itemize
 
 @noindent
@@ -1026,6 +1100,10 @@ syntax, see @ref{Command Syntax, , @@-Command Syntax}.)@refill
 @cindex Syntactic conventions
 @cindex Conventions, syntactic
 
+This section describes the general conventions used in all Texinfo documents.
+
+@itemize @bullet
+@item
 All printable @sc{ascii} characters except @samp{@@}, @samp{@{} and
 @samp{@}} can appear in a Texinfo file and stand for themselves.
 @samp{@@} is the escape character which introduces commands.
@@ -1034,6 +1112,7 @@ certain commands.  To put one of these special characters into the
 document, put an @samp{@@} character in front of it, like this:
 @samp{@@@@}, @samp{@@@{}, and @samp{@@@}}.@refill
 
+@item
 @ifinfo
 It is customary in @TeX{} to use doubled single-quote characters to
 begin and end quotations: ` ` and ' ' (but without a space between the
@@ -1044,23 +1123,26 @@ single-quote characters to @sc{ascii} double-quotes: ` ` and ' ' to " .@refill
 @end ifinfo
 @iftex
 It is customary in @TeX{} to use doubled single-quote characters to
-begin and end quotations: @w{@tt{ `` }} and @w{@tt{ '' }}.  This
+begin and end quotations: @w{@t{ `` }} and @w{@t{ '' }}.  This
 convention should be followed in Texinfo files.  @TeX{} converts
 doubled single-quote characters to left- and right-hand doubled
 quotation marks, ``like this'', and Info converts doubled single-quote
-characters to @sc{ascii} double-quotes: @w{@tt{ `` }} and
-@w{@tt{ '' }} to @w{@tt{ " }}.@refill
+characters to @sc{ascii} double-quotes: @w{@t{ `` }} and
+@w{@t{ '' }} to @w{@t{ " }}.@refill
 @end iftex
 
+@item
 Use three hyphens in a row, @samp{---}, for a dash---like this.  In
 @TeX{}, a single or double hyphen produces a printed dash that is
 shorter than the usual typeset dash. Info reduces three hyphens to two
 for display on the screen.
 
+@item
 To prevent a paragraph from being indented in the printed manual, put
 the command @code{@@noindent} on a line by itself before the
 paragraph.@refill
 
+@item
 If you mark off a region of the Texinfo file with the @code{@@iftex}
 and @w{@code{@@end iftex}} commands, that region will appear only in
 the printed copy; in that region, you can use certain commands
@@ -1071,8 +1153,9 @@ region, you can use Info commands that you cannot use in @TeX{}.
 Similarly for @code{@@ifhtml @dots{} @@end ifhtml},
 @code{@@ifnothtml @dots{} @@end ifnothtml},
 @code{@@ifnotinfo @dots{} @@end ifnotinfo},
-@code{@@ifnottex @dots{} @@end ifnottex},
+@code{@@ifnottex @dots{} @@end ifnottex}.
 @xref{Conditionals}.
+@end itemize
 
 @cindex Tabs; don't use!
 @quotation
@@ -1090,9 +1173,6 @@ spaces when you press the @key{TAB} key.@refill
 @noindent
 Also, you can run @code{untabify} in Emacs to convert tabs in a region
 to multiple spaces.@refill
-
-@noindent
-Don't use tabs.
 @end quotation
 
 @node Comments, Minimum, Conventions, Overview
@@ -1102,7 +1182,7 @@ Don't use tabs.
 You can write comments in a Texinfo file that will not appear in
 either the Info file or the printed manual by using the
 @code{@@comment} command (which may be abbreviated to @code{@@c}).
-Such comments are for the person who reads the Texinfo file.  All the
+Such comments are for the person who revises the Texinfo file.  All the
 text on a line that follows either @code{@@comment} or @code{@@c} is a
 comment; the rest of the line does not appear in either the Info file
 or the printed manual. (Often, you can write the @code{@@comment} or
@@ -1148,9 +1228,9 @@ within ignored text.
 @cindex Texinfo file minimum
 
 By convention, the names of Texinfo files end with one of the
-extensions @file{.texinfo}, @file{.texi}, or @file{.tex}.  The longer
-extension is preferred since it describes more clearly to a human
-reader the nature of the file.  The shorter extensions are for
+extensions @file{.texinfo}, @file{.texi}, @file{.txi}, or @file{.tex}.
+The longer extension is preferred since it describes more clearly to a
+human reader the nature of the file.  The shorter extensions are for
 operating systems that cannot handle long file names.@refill
 
 In order to be made into a printed manual and an Info file, a Texinfo
@@ -1252,8 +1332,7 @@ the table of contents, and the @code{@@bye} command on a line of its
 own.@refill
 @end table
 
-@node Short Sample, Acknowledgements, Six Parts, Overview
-@comment  node-name,  next,  previous,  up
+@node Short Sample
 @section A Short Sample Texinfo File
 @cindex Sample Texinfo file
 
@@ -1264,7 +1343,6 @@ the material is standard boilerplate; when you write a manual, simply
 insert the names for your own manual in this segment. (@xref{Beginning a
 File}.)@refill
 
-@noindent
 In the following, the sample text is @emph{indented}; comments on it are
 not.  The complete file, without any comments, is shown in
 @ref{Sample Texinfo File}.
@@ -1282,9 +1360,8 @@ name of the Info file and the title used in the header.
 @@c %**start of header
 @@setfilename sample.info
 @@settitle Sample Document
-@@c %**end of header
-
 @@setchapternewpage odd
+@@c %**end of header
 @end group
 @end example
 
@@ -1393,15 +1470,14 @@ manual.
 @subheading Part 6: The End of the Document
 
 @noindent
-The end segment contains commands both for generating an index in a node
-and unnumbered chapter of its own and for generating the table of
-contents; and it contains the @code{@@bye} command that marks the end of
-the document.@refill
+The end segment contains commands for generating an index in a node and
+unnumbered chapter of its own, (usually) for generating the table of
+contents, and the @code{@@bye} command that marks the end of the
+document.@refill
 
 @example
 @group
 @@node    Concept Index,    ,  First Chapter, Top
-@@comment node-name,    next,  previous,      up
 @@unnumbered Concept Index
 @end group
 
@@ -1438,41 +1514,61 @@ an Info file; and @TeX{} typesets it for a printed
 manual.
 @end quotation
 
-@node Acknowledgements,  , Short Sample, Overview
-@comment  node-name,  next,  previous,  up
-@section Acknowledgements
+
+@node Acknowledgements and History
+@section Acknowledgements and History
 
 @cindex Stallman, Richard M.
 @cindex Chassell, Robert J.
 @cindex Berry, Karl
-Richard M.@: Stallman wrote Edition 1.0 of this manual.  @w{Robert J.@:
-Chassell} revised and extended it, starting with Edition 1.1.  Karl
-Berry made updates for the Texinfo 3.8 and subsequent releases, starting
-with Edition 2.22.
+Richard M.@: Stallman invented the Texinfo format, wrote the initial
+processors, and created Edition 1.0 of this manual.  @w{Robert J.@:
+Chassell} greatly revised and extended the manual, starting with Edition
+1.1.  Brian Fox was responsible for the standalone Texinfo distribution
+until version 3.8, and wrote the standalone @command{makeinfo} and
+@command{info}.  Karl Berry has made the updates since Texinfo 3.8 and
+subsequent releases, starting with Edition 2.22 of the manual.
 
 @cindex Pinard, Fran@,{c}ois
 @cindex Zuhn, David D.
 @cindex Weisshaus, Melissa
+@cindex Zaretskii, Eli
+@cindex Schwab, Andreas
+@cindex Weinberg, Zack
 Our thanks go out to all who helped improve this work, particularly to
 Fran@,{c}ois Pinard and @w{David D.@: Zuhn}, who tirelessly recorded and
 reported mistakes and obscurities; our special thanks go to Melissa
 Weisshaus for her frequent and often tedious reviews of nearly similar
-editions.  Our mistakes are our own.
-
-Please send suggestions and corrections to:
-
-@example
-@group
-@r{Internet address:}
-    bug-texinfo@@gnu.org
-@end group
-@end example
-
-@noindent
-Please include the manual's edition number and update date in your messages.
-
-@node Texinfo Mode, Beginning a File, Overview, Top
-@comment  node-name,  next,  previous,  up
+editions.  The indefatigable Eli Zaretskii and Andreas Schwab have
+provided patches beyond counting.  Zack Weinberg did the impossible by
+implementing the macro syntax in @file{texinfo.tex}.  Dozens of others
+have contributed patches and suggestions, they are gratefully
+acknowledged in the @file{ChangeLog} file.  Our mistakes are our own.
+
+@cindex Scribe
+@cindex Reid, Brian
+@cindex History of Texinfo
+A bit of history: in the 1970's at CMU, Brian Reid developed a program
+and format named Scribe to mark up documents for printing.  It used the
+@code{@@} character to introduce commands as Texinfo does and strived to
+describe document contents rather than formatting.
+
+@cindex Bolio
+@cindex Bo@TeX{}
+Meanwhile, people at MIT developed another, not too dissimilar format
+called Bolio.  This then was converted to using @TeX{} as its typesetting
+language: Bo@TeX{}.
+
+Bo@TeX{} could only be used as a markup language for documents to be
+printed, not for online documents.  Richard Stallman (RMS) worked on
+both Bolio and Bo@TeX{}.  He also developed a nifty on-line help format
+called Info, and then combined Bo@TeX{} and Info to create Texinfo, a
+mark up language for text that is intended to be read both on line and
+as printed hard copy.
+
+
+
+@node Texinfo Mode
 @chapter Using Texinfo Mode
 @cindex Texinfo mode
 @cindex Mode, using Texinfo
@@ -1509,7 +1605,8 @@ detail.@refill
 @end ifinfo
 
 Texinfo mode provides special features for working with Texinfo
-files:@refill
+files.
+You can:@refill
 
 @itemize @bullet
 @item
@@ -1561,16 +1658,16 @@ equivalents, such as appendices.  With this value for the page
 delimiter, you can jump from chapter title to chapter title with the
 @kbd{C-x ]} (@code{forward-page}) and @kbd{C-x [}
 (@code{backward-page}) commands and narrow to a chapter with the
-@kbd{C-x p} (@code{narrow-to-page}) command.  (@xref{Pages, , , xemacs,
-XEmacs User's Manual}, for details about the page commands.)@refill
+@kbd{C-x p} (@code{narrow-to-page}) command.  (@xref{Pages, , ,emacs,
+The GNU Emacs Manual}, for details about the page commands.)@refill
 
 You may name a Texinfo file however you wish, but the convention is to
-end a Texinfo file name with one of the three extensions
-@file{.texinfo}, @file{.texi}, or @file{.tex}.  A longer extension is
-preferred, since it is explicit, but a shorter extension may be
-necessary for operating systems that limit the length of file names.
-GNU Emacs automatically enters Texinfo mode when you visit a file with
-a @file{.texinfo} or  @file{.texi}
+end a Texinfo file name with one of the extensions
+@file{.texinfo}, @file{.texi}, @file{.txi}, or @file{.tex}.  A longer
+extension is preferred, since it is explicit, but a shorter extension
+may be necessary for operating systems that limit the length of file
+names.  GNU Emacs automatically enters Texinfo mode when you visit a
+file with a @file{.texinfo}, @file{.texi} or @file{.txi}
 extension.  Also, Emacs switches to Texinfo mode
 when you visit a
 file that has @samp{-*-texinfo-*-} in its first line.  If ever you are
@@ -1762,14 +1859,10 @@ cursor in the @file{*Occur*} buffer.@refill
 
 If you call @code{texinfo-show-structure} with a prefix argument by
 typing @w{@kbd{C-u C-c C-s}}, it will list not only those lines with the
-@@-commands for @code{@@chapter}, @code{@@section}, and the like,
-but also the @code{@@node} lines.  (This is how the
-@code{texinfo-show-structure} command worked without an argument in
-the first version of Texinfo.  It was changed because @code{@@node}
-lines clutter up the @samp{*Occur*} buffer and are usually not
-needed.)  You can use @code{texinfo-show-structure} with a prefix
-argument to check whether the `Next', `Previous', and `Up' pointers of
-an @code{@@node} line are correct.@refill
+@@-commands for @code{@@chapter}, @code{@@section}, and the like, but
+also the @code{@@node} lines.  You can use @code{texinfo-show-structure}
+with a prefix argument to check whether the `Next', `Previous', and `Up'
+pointers of an @code{@@node} line are correct.
 
 Often, when you are working on a manual, you will be interested only
 in the structure of the current chapter.  In this case, you can mark
@@ -1777,7 +1870,7 @@ off the region of the buffer that you are interested in by using the
 @kbd{C-x n n} (@code{narrow-to-region}) command and
 @code{texinfo-show-structure} will work on only that region.  To see
 the whole buffer again, use @w{@kbd{C-x n w}} (@code{widen}).
-(@xref{Narrowing, , , xemacs, XEmacs User's Manual}, for more
+(@xref{Narrowing, , , emacs, The GNU Emacs Manual}, for more
 information about the narrowing commands.)@refill
 
 @vindex page-delimiter
@@ -1788,7 +1881,7 @@ the chapter-level @@-commands.  This enables you to use the @kbd{C-x
 ]} (@code{forward-page}) and @kbd{C-x [} (@code{backward-page})
 commands to move forward and backward by chapter, and to use the
 @kbd{C-x p} (@code{narrow-to-page}) command to narrow to a chapter.
-@xref{Pages, , , xemacs, XEmacs User's Manual}, for more information
+@xref{Pages, , , emacs, The GNU Emacs Manual}, for more information
 about the page commands.@refill
 
 @node Updating Nodes and Menus, Info Formatting, Showing the Structure, Texinfo Mode
@@ -1823,18 +1916,18 @@ node pointers by hand, which is a tedious task.@refill
 @subheading The Updating Commands
 @end ifinfo
 
-You can use the updating commands@refill
+You can use the updating commands to:@refill
 
 @itemize @bullet
 @item
-to insert or update the `Next', `Previous', and `Up' pointers of a
+insert or update the `Next', `Previous', and `Up' pointers of a
 node,@refill
 
 @item
-to insert or update the menu for a section, and@refill
+insert or update the menu for a section, and@refill
 
 @item
-to create a master menu for a Texinfo source file.@refill
+create a master menu for a Texinfo source file.@refill
 @end itemize
 
 You can also use the commands to update all the nodes and menus in a
@@ -1856,11 +1949,11 @@ interpose only an @code{@@comment} line or an @code{@@ifinfo} line.
 
 Commands which work on a whole buffer require that the `Top' node be
 followed by a node with an @code{@@chapter} or equivalent-level command.
-Note that the menu updating commands will not create a main or master
-menu for a Texinfo file that has only @code{@@chapter}-level nodes!  The
-menu updating commands only create menus @emph{within} nodes for lower level
+The menu updating commands will not create a main or master menu for a
+Texinfo file that has only @code{@@chapter}-level nodes!  The menu
+updating commands only create menus @emph{within} nodes for lower level
 nodes.  To create a menu of chapters, you must provide a `Top'
-node.@refill
+node.
 
 The menu updating commands remove menu entries that refer to other Info
 files since they do not refer to nodes within the current buffer.  This
@@ -1906,7 +1999,7 @@ This updates all the nodes and menus completely and all at once.@refill
 @end table
 
 The other major updating commands do smaller jobs and are designed for
-the person  who updates nodes and menus as he or she writes a Texinfo
+the person who updates nodes and menus as he or she writes a Texinfo
 file.@refill
 
 @need 1000
@@ -1975,9 +2068,10 @@ The @code{texinfo-column-for-description} variable specifies the
 column to which menu descriptions are indented.  By default, the value
 is 32 although it is often useful to reduce it to as low as 24.  You
 can set the variable with the @kbd{M-x edit-options} command
-(@pxref{Edit Options, , Editing Variable Values, xemacs, XEmacs User's
-Manual}) or with the @kbd{M-x set-variable} command (@pxref{Examining, ,
-Examining and Setting Variables, xemacs, XEmacs User's Manual}).@refill
+(@pxref{Edit Options, , Editing Variable Values, emacs, The GNU Emacs
+Manual}) or with the @kbd{M-x set-variable} command (@pxref{Examining,
+, Examining and Setting Variables, emacs, The GNU Emacs
+Manual}).@refill
 
 Also, the @code{texinfo-indent-menu-description} command may be used to
 indent existing menu descriptions to a specified column.  Finally, if
@@ -2030,7 +2124,7 @@ In this example, `Comments' is the name of both the node and the
 section.  The next node is called `Minimum' and the previous node is
 called `Conventions'.  The `Comments' section is within the `Overview'
 node, which is specified by the `Up' pointer.  (Instead of an
-@code{@@comment} line, you can write an @code{@@ifinfo} line.)@refill
+@code{@@comment} line, you may also write an @code{@@ifinfo} line.)@refill
 
 If a file has a `Top' node, it must be called @samp{top} or @samp{Top}
 and be the first node in the file.@refill
@@ -2039,14 +2133,14 @@ The menu updating commands create a menu of sections within a chapter,
 a menu of subsections within a section, and so on.  This means that
 you must have a `Top' node if you want a menu of chapters.@refill
 
-Incidentally, the @code{makeinfo} command will create an Info file for
-a hierarchically organized Texinfo file that lacks `Next', `Previous'
-and `Up' pointers.  Thus, if you can be sure that your Texinfo file
-will be formatted with @code{makeinfo}, you have no need for the
-`update node' commands.  (@xref{Create an Info File, , Creating an
-Info File}, for more information about @code{makeinfo}.)  However,
-both @code{makeinfo} and the @code{texinfo-format-@dots{}} commands
-require that you insert menus in the file.@refill
+Incidentally, the @code{makeinfo} command will create an Info file for a
+hierarchically organized Texinfo file that lacks `Next', `Previous' and
+`Up' pointers.  Thus, if you can be sure that your Texinfo file will be
+formatted with @code{makeinfo}, you have no need for the update node
+commands.  (@xref{Creating an Info File}, for more information about
+@code{makeinfo}.)  However, both @code{makeinfo} and the
+@code{texinfo-format-@dots{}} commands require that you insert menus in
+the file.
 
 @node Other Updating Commands,  , Updating Requirements, Updating Nodes and Menus
 @comment  node-name,  next,  previous,  up
@@ -2077,11 +2171,11 @@ For example, the following marks a whole buffer as a region and inserts
 C-x h C-u M-x texinfo-insert-node-lines
 @end example
 
-(Note that this command inserts titles as node names in @code{@@node}
-lines; the @code{texinfo-start-menu-description} command
-(@pxref{Inserting, Inserting Frequently Used Commands}) inserts titles
-as descriptions in menu entries, a different action.  However, in both
-cases, you need to edit the inserted text.)@refill
+This command inserts titles as node names in @code{@@node} lines; the
+@code{texinfo-start-menu-description} command (@pxref{Inserting,
+Inserting Frequently Used Commands}) inserts titles as descriptions in
+menu entries, a different action.  However, in both cases, you need to
+edit the inserted text.
 
 @item M-x texinfo-multiple-files-update
 @findex texinfo-multiple-files-update @r{(in brief)}
@@ -2181,7 +2275,7 @@ M-x makeinfo-buffer
 For @TeX{} or the Info formatting commands to work, the file @emph{must}
 include a line that has @code{@@setfilename} in its header.@refill
 
-@xref{Create an Info File}, for details about Info formatting.@refill
+@xref{Creating an Info File}, for details about Info formatting.@refill
 
 @node Printing, Texinfo Mode Summary, Info Formatting, Texinfo Mode
 @comment node-name,  next,  previous,  up
@@ -2244,7 +2338,7 @@ on a line by itself.  (When you use @code{texinfo-tex-region}, you must
 surround the @code{@@settitle} line with start-of-header and
 end-of-header lines.)@refill
 
-@xref{Format/Print Hardcopy}, for a description of the other @TeX{} related
+@xref{Hardcopy}, for a description of the other @TeX{} related
 commands, such as @code{tex-show-print-queue}.@refill
 
 @node Texinfo Mode Summary,  , Printing, Texinfo Mode
@@ -2296,6 +2390,7 @@ C-c C-s         @r{List all the headings.}
 The @code{texinfo-master-menu} command creates a master menu; and can
 be used to update every node and menu in a file as well.@refill
 
+@c Probably should use @tables in this section.
 @example
 @group
 C-c C-u m
@@ -2397,7 +2492,7 @@ C-c C-t C-l     @r{Recenter the output buffer.}
 
 @subheading Other Updating Commands
 
-The `other updating commands' do not have standard keybindings because
+The remaining updating commands do not have standard keybindings because
 they are rarely used.
 
 @example
@@ -2608,12 +2703,13 @@ or else like this:
 * setfilename::                 Tell Info the name of the Info file.
 * settitle::                    Create a title for the printed work.
 * setchapternewpage::           Start chapters on right-hand pages.
-* paragraphindent::             An option to specify paragraph indentation.
+* paragraphindent::             Specify paragraph indentation.
+* exampleindent::               Specify environment indentation.
 * End of Header::               Formatting a region requires this.
 @end menu
 
-@node First Line, Start of Header, Header, Header
-@comment  node-name,  next,  previous,  up
+
+@node First Line
 @subsection The First Line of a Texinfo File
 @cindex First line of a Texinfo file
 @cindex Beginning line of a Texinfo file
@@ -2668,8 +2764,7 @@ A start-of-header line looks like this:@refill
 The odd string of characters, @samp{%**}, is to ensure that no other
 comment is accidentally taken for a start-of-header line.@refill
 
-@node setfilename, settitle, Start of Header, Header
-@comment  node-name,  next,  previous,  up
+@node setfilename
 @subsection @code{@@setfilename}
 @cindex Info file requires @code{@@setfilename}
 @findex setfilename
@@ -2687,11 +2782,13 @@ else on the line; anything on the line after the command is considered
 part of the file name, including what would otherwise be a
 comment.
 
-The @code{@@setfilename} line specifies the name of the Info file to be
-generated.  This name should be different from the name of the Texinfo
-file.  There are two conventions for choosing the name: you can either
-remove the @samp{.texi} extension from the input file name, or replace
-it with the @samp{.info} extension.
+The @code{@@setfilename} line specifies the name of the output file to
+be generated.  This name should be different from the name of the
+Texinfo file.  There are two conventions for choosing the name: you can
+either remove the extension (such as @samp{.texi}) from the input file
+name, or replace it with the @samp{.info} extension.  When producing
+HTML output, @code{makeinfo} will replace any extension with
+@samp{html}, or add @samp{.html} if the given name has no extension.
 
 Some operating systems cannot handle long file names.  You can run into
 a problem even when the file name you specify is itself short enough.
@@ -2701,19 +2798,24 @@ short indirect subfiles, and name them by appending @samp{-1},
 file name.  (@xref{Tag and Split Files, , Tag Files and Split Files}.)
 The subfile name @file{texinfo.info-10}, for example, is too long for
 some systems; so the Info file name for this document is @file{texinfo}
-rather than @file{texinfo.info}.
+rather than @file{texinfo.info}.  When @code{makeinfo} is running on
+operating systems such as MS-DOS which impose grave limits on file
+names, it will sometimes remove some characters from the original file
+name to leave enough space for the subfile suffix, thus producing files
+named @file{texin-10}, @file{gcc.i12}, etc.
 
 @cindex Ignored before @code{@@setfilename}
+@cindex @samp{\input} source line ignored
 The Info formatting commands ignore everything written before the
 @code{@@setfilename} line, which is why the very first line of
 the file (the @code{\input} line) does not show up in the output.
 
 @pindex texinfo.cnf
 The @code{@@setfilename} line produces no output when you typeset a
-manual with @TeX{}, but it nevertheless is essential: it opens the
+manual with @TeX{}, but it is nevertheless essential: it opens the
 index, cross-reference, and other auxiliary files used by Texinfo, and
 also reads @file{texinfo.cnf} if that file is present on your system
-(@pxref{Preparing for TeX,, Preparing to Use @TeX{}}).
+(@pxref{Preparing for TeX,, Preparing for @TeX{}}).
 
 
 @node settitle, setchapternewpage, setfilename, Header
@@ -2765,15 +2867,15 @@ You may, if you wish, create your own, customized headings and
 footings.  @xref{Headings, , Page Headings}, for a detailed discussion
 of this process.@refill
 
-@node setchapternewpage, paragraphindent, settitle, Header
-@comment  node-name,  next,  previous,  up
+
+@node setchapternewpage
 @subsection @code{@@setchapternewpage}
 @cindex Starting chapters
 @cindex Pages, starting odd
 @findex setchapternewpage
 
-In a book or a manual, text is usually printed on both sides of the
-paper, chapters start on right-hand pages, and right-hand pages have
+In an officially bound book, text is usually printed on both sides of
+the paper, chapters start on right-hand pages, and right-hand pages have
 odd numbers.  But in short reports, text often is printed only on one
 side of the paper.  Also in short reports, chapters sometimes do not
 start on new pages, but are printed on the same page as the end of the
@@ -2781,7 +2883,7 @@ preceding chapter, after a small amount of vertical whitespace.@refill
 
 You can use the @code{@@setchapternewpage} command with various
 arguments to specify how @TeX{} should start chapters and whether it
-should typeset pages for printing on one or both sides of the paper
+should format headers for printing on one or both sides of the paper
 (single-sided or double-sided printing).@refill
 
 Write the @code{@@setchapternewpage} command at the beginning of a
@@ -2798,17 +2900,7 @@ You can specify one of three alternatives with the
 @code{@@setchapternewpage} command:@refill
 
 @table @asis
-@ignore
-@item No @code{@@setchapternewpage} command
-If the Texinfo file does not contain an @code{@@setchapternewpage}
-command before the @code{@@titlepage} command, @TeX{} automatically
-begins chapters on new pages and prints headings in the standard
-format for single-sided printing.  This is the conventional format for
-single-sided printing.@refill
 
-The result is exactly the same as when you write
-@code{@@setchapternewpage on}.@refill
-@end ignore
 @item @code{@@setchapternewpage off}
 Cause @TeX{} to typeset a new chapter on the same page as the last
 chapter, after skipping some vertical whitespace.  Also, cause @TeX{} to
@@ -2817,9 +2909,9 @@ headers format with the @code{@@headings double} command; see
 @ref{headings on off, , The @code{@@headings} Command}.)@refill
 
 @item @code{@@setchapternewpage on}
-Cause @TeX{} to start new chapters on new pages and to typeset page
+Cause @TeX{} to start new chapters on new pages and to format page
 headers for single-sided printing.  This is the form most often
-used for short reports.@refill
+used for short reports or personal printing.
 
 This alternative is the default.@refill
 
@@ -2829,13 +2921,11 @@ Cause @TeX{} to start new chapters on new, odd-numbered pages
 the form most often used for books and manuals.@refill
 @end table
 
-@noindent
 Texinfo does not have an @code{@@setchapternewpage even} command.@refill
 
-@noindent
-(You can countermand or modify an @code{@@setchapternewpage} command
-with an @code{@@headings} command.  @xref{headings on off, , The
-@code{@@headings} Command}.)@refill
+You can countermand or modify the effect on headers of an
+@code{@@setchapternewpage} command with an @code{@@headings} command.
+@xref{headings on off, , The @code{@@headings} Command}.@refill
 
 At the beginning of a manual or book, pages are not numbered---for
 example, the title and copyright pages of a book are not numbered.
@@ -2845,62 +2935,100 @@ numerals and not in sequence with the rest of the document.@refill
 Since an Info file does not have pages, the @code{@@setchapternewpage}
 command has no effect on it.@refill
 
-Usually, you do not write an @code{@@setchapternewpage} command for
-single-sided printing, but accept the default which is to typeset for
-single-sided printing and to start new chapters on new pages.  Usually,
-you write an @code{@@setchapternewpage odd} command for double-sided
-printing.@refill
+We recommend not including any @code{@@setchapternewpage} command in
+your manual sources at all, since the desired output is not intrinsic to
+the document.  Instead, if you don't want the default option (no blank
+pages, same headers on all pages) use the @option{--texinfo} option to
+@command{texi2dvi} to specify the output you want.
 
-@node paragraphindent, End of Header, setchapternewpage, Header
-@comment  node-name,  next,  previous,  up
+
+
+@node paragraphindent
 @subsection Paragraph Indenting
 @cindex Indenting paragraphs
 @cindex Paragraph indentation
 @findex paragraphindent
 
-The Info formatting commands may insert spaces at the beginning of the
-first line of each paragraph, thereby indenting that paragraph.  You
-can use the @code{@@paragraphindent} command to specify the
-indentation.  Write an @code{@@paragraphindent} command at the
-beginning of a line followed by either @samp{asis} or a number.  The
-template is:@refill
+The Texinfo processors may insert whitespace at the beginning of the
+first line of each paragraph, thereby indenting that paragraph.  You can
+use the @code{@@paragraphindent} command to specify this indentation.
+Write an @code{@@paragraphindent} command at the beginning of a line
+followed by either @samp{asis} or a number:
 
 @example
 @@paragraphindent @var{indent}
 @end example
 
-The Info formatting commands indent according to the value of
-@var{indent}:@refill
+The indentation is according to the value of @var{indent}:
 
-@itemize @bullet
-@item
-If the value of @var{indent} is @samp{asis}, the Info formatting
-commands do not change the existing indentation.@refill
+@table @asis
+@item @code{asis}
+Do not change the existing indentation (not implemented in @TeX{}).
 
-@item
-If the value of @var{indent} is zero, the Info formatting commands delete
-existing indentation.@refill
+@item 0
+Omit all indentation.
 
-@item
-If the value of @var{indent} is greater than zero, the Info formatting
-commands indent the paragraph by that number of spaces.@refill
-@end itemize
+@item @var{n}
+Indent by @var{n} space characters in Info output, by @var{n} ems in
+@TeX{}.
+
+@end table
 
-The default value of @var{indent} is @samp{asis}.@refill
+The default value of @var{indent} is @samp{asis}.
+@code{@@paragraphindent} is ignored for HTML output.
 
 Write the @code{@@paragraphindent} command before or shortly after the
 end-of-header line at the beginning of a Texinfo file.  (If you write
 the command between the start-of-header and end-of-header lines, the
-region formatting commands indent paragraphs as specified.)@refill
+region formatting commands indent paragraphs as specified.)
 
 A peculiarity of the @code{texinfo-format-buffer} and
 @code{texinfo-format-region} commands is that they do not indent (nor
 fill) paragraphs that contain @code{@@w} or @code{@@*} commands.
-@xref{Refilling Paragraphs}, for a detailed description of what goes
-on.@refill
+@xref{Refilling Paragraphs}, for further information.
 
-@node End of Header,  , paragraphindent, Header
-@comment  node-name,  next,  previous,  up
+
+@node exampleindent
+@subsection @code{@@exampleindent}: Environment Indenting
+@cindex Indenting environments
+@cindex Environment indentation
+@cindex Example indentation
+@findex exampleindent
+
+The Texinfo processors indent each line of @code{@@example} and similar
+environments.  You can use the @code{@@exampleindent} command to specify
+this indentation.  Write an @code{@@exampleindent} command at the
+beginning of a line followed by either @samp{asis} or a number:
+
+@example
+@@exampleindent @var{indent}
+@end example
+
+The indentation is according to the value of @var{indent}:
+
+@table @asis
+@item @code{asis}
+Do not change the existing indentation (not implemented in @TeX{}).
+
+@item 0
+Omit all indentation.
+
+@item @var{n}
+Indent environments by @var{n} space characters in Info output, by
+@var{n} ems in @TeX{}.
+
+@end table
+
+The default value of @var{indent} is 5.  @code{@@exampleindent} is
+ignored for HTML output.
+
+Write the @code{@@exampleindent} command before or shortly after the
+end-of-header line at the beginning of a Texinfo file.  (If you write
+the command between the start-of-header and end-of-header lines, the
+region formatting commands indent examples as specified.)
+
+
+@node End of Header
 @subsection End of Header
 @cindex End of header line
 
@@ -2930,8 +3058,8 @@ variables that you can change.@refill
 @xref{Start of Header}.
 @end iftex
 
-@node Info Summary and Permissions, Titlepage & Copyright Page, Header, Beginning a File
-@comment  node-name,  next,  previous,  up
+
+@node Info Summary and Permissions
 @section Summary and Copying Permissions for Info
 
 The title page and the copyright page appear only in the printed copy of
@@ -2958,8 +3086,8 @@ node.  This mean that a reader does @emph{not} see this text when
 reading the file using Info, except when using the advanced Info command
 @kbd{g *}.
 
-@node Titlepage & Copyright Page, The Top Node, Info Summary and Permissions, Beginning a File
-@comment  node-name,  next,  previous,  up
+
+@node Titlepage & Copyright Page
 @section The Title and Copyright Pages
 
 A manual's name and author are usually printed on a title page.
@@ -2973,6 +3101,12 @@ obscure @TeX{} typesetting commands that cannot be used in an Info file.
 In addition, this part of the beginning of a Texinfo file contains the text
 of the copying permissions that will appear in the printed manual.@refill
 
+@cindex Titlepage, for plain text
+You may wish to include titlepage-like information for plain text
+output.  Simply place any such leading material between @code{@@ifinfo}
+and @code{@@end ifinfo}; @command{makeinfo} includes this in its plain
+text output.  It will not show up in the Info readers.
+
 @xref{Titlepage Permissions, , Titlepage Copying Permissions}, for the
 standard text for the copyright permissions.@refill
 
@@ -2990,6 +3124,7 @@ standard text for the copyright permissions.@refill
                                   and double or single sided printing.
 @end menu
 
+
 @node titlepage, titlefont center sp, Titlepage & Copyright Page, Titlepage & Copyright Page
 @comment  node-name,  next,  previous,  up
 @subsection @code{@@titlepage}
@@ -3002,53 +3137,57 @@ with @code{@@titlepage} on a line by itself and end it with
 
 The @code{@@end titlepage} command starts a new page and turns on page
 numbering.  (@xref{Headings, , Page Headings}, for details about how to
-generate page headings.)  All the material that you want to
-appear on unnumbered pages should be put between the
-@code{@@titlepage} and @code{@@end titlepage} commands.  By using the
-@code{@@page} command you can force a page break within the region
-delineated by the @code{@@titlepage} and @code{@@end titlepage}
-commands and thereby create more than one unnumbered page.  This is
-how the copyright page is produced.  (The @code{@@titlepage} command
-might perhaps have been better named the
-@code{@@titleandadditionalpages} command, but that would have been
-rather long!)@refill
-
-@c !!! append refill to footnote when makeinfo can handle it.
+generate page headings.)  All the material that you want to appear on
+unnumbered pages should be put between the @code{@@titlepage} and
+@code{@@end titlepage} commands.  You can force the table of contents to
+appear there with the @code{@@setcontentsaftertitlepage} command
+(@pxref{Contents}).
+
+@findex page@r{, within @code{@@titlepage}}
+By using the @code{@@page} command you can force a page break within the
+region delineated by the @code{@@titlepage} and @code{@@end titlepage}
+commands and thereby create more than one unnumbered page.  This is how
+the copyright page is produced.  (The @code{@@titlepage} command might
+perhaps have been better named the @code{@@titleandadditionalpages}
+command, but that would have been rather long!)
+
 When you write a manual about a computer program, you should write the
-version of the program to which the manual applies on the title
-page.  If the manual changes more frequently than the program or is
-independent of it, you should also include an edition
-number@footnote{We have found that it is helpful to refer to versions
-of manuals as `editions' and versions of programs as `versions';
-otherwise, we find we are liable to confuse each other in conversation
-by referring to both the documentation and the software with the same
-words.} for the manual.  This helps readers keep track of which manual
-is for which version of the program.  (The `Top' node
-should also contain this information; see @ref{makeinfo top, ,
-@code{@@top}}.)@refill
+version of the program to which the manual applies on the title page.
+If the manual changes more frequently than the program or is independent
+of it, you should also include an edition number@footnote{We have found
+that it is helpful to refer to versions of manuals as `editions' and
+versions of programs as `versions'; otherwise, we find we are liable to
+confuse each other in conversation by referring to both the
+documentation and the software with the same words.} for the manual.
+This helps readers keep track of which manual is for which version of
+the program.  (The `Top' node should also contain this information; see
+@ref{makeinfo top, , @code{@@top}}.)
 
 Texinfo provides two main methods for creating a title page.  One method
 uses the @code{@@titlefont}, @code{@@sp}, and @code{@@center} commands
 to generate a title page in which the words on the page are
-centered.@refill
+centered.
 
 The second method uses the @code{@@title}, @code{@@subtitle}, and
 @code{@@author} commands to create a title page with black rules under
 the title and author lines and the subtitle text set flush to the
 right hand side of the page.  With this method, you do not specify any
 of the actual formatting of the title page.  You specify the text
-you want, and Texinfo does the formatting.  You may use either
-method.@refill
+you want, and Texinfo does the formatting.
+
+You may use either method, or you may combine them; see the examples in
+the sections below.
 
 @findex shorttitlepage
-For extremely simple applications, Texinfo also provides a command
-@code{@@shorttitlepage} which takes a single argument as the title.
-The argument is typeset on a page by itself and followed by a blank
-page.
+@cindex Bastard title page
+@cindex Title page, bastard
+For extremely simple applications, and for the bastard title page in
+traditional book front matter, Texinfo also provides a command
+@code{@@shorttitlepage} which takes a single argument as the title.  The
+argument is typeset on a page by itself and followed by a blank page.
 
 
-@node titlefont center sp, title subtitle author, titlepage, Titlepage & Copyright Page
-@comment  node-name,  next,  previous,  up
+@node titlefont center sp
 @subsection @code{@@titlefont}, @code{@@center}, and @code{@@sp}
 @findex titlefont
 @findex center
@@ -3059,7 +3198,8 @@ commands to create a title page for a printed document.  (This is the
 first of the two methods for creating a title page in Texinfo.)@refill
 
 Use the @code{@@titlefont} command to select a large font suitable for
-the title itself.@refill
+the title itself.  You can use @code{@@titlefont} more than once if you
+have an especially long title.
 
 @need 700
 For example:
@@ -3106,10 +3246,10 @@ A template for this method looks like this:@refill
 @end group
 @end example
 
-The spacing of the example fits an 8 1/2 by 11 inch manual.@refill
+The spacing of the example fits an 8.5 by 11 inch manual.@refill
 
-@node title subtitle author, Copyright & Permissions, titlefont center sp, Titlepage & Copyright Page
-@comment  node-name,  next,  previous,  up
+
+@node title subtitle author
 @subsection @code{@@title}, @code{@@subtitle}, and @code{@@author}
 @findex title
 @findex subtitle
@@ -3118,9 +3258,8 @@ The spacing of the example fits an 8 1/2 by 11 inch manual.@refill
 You can use the @code{@@title}, @code{@@subtitle}, and @code{@@author}
 commands to create a title page in which the vertical and horizontal
 spacing is done for you automatically.  This contrasts with the method
-described in
-the previous section, in which the @code{@@sp} command is needed to
-adjust vertical spacing.@refill
+described in the previous section, in which the @code{@@sp} command is
+needed to adjust vertical spacing.
 
 Write the @code{@@title}, @code{@@subtitle}, or @code{@@author}
 commands at the beginning of a line followed by the title, subtitle,
@@ -3128,7 +3267,11 @@ or author.@refill
 
 The @code{@@title} command produces a line in which the title is set
 flush to the left-hand side of the page in a larger than normal font.
-The title is underlined with a black rule.@refill
+The title is underlined with a black rule.  Only a single line is
+allowed; the @code{@@*} command may not be used to break the title into
+two lines.  To handle very long titles, you may find it profitable to
+use both @code{@@title} and @code{@@titlefont}; see the final example in
+this section.
 
 The @code{@@subtitle} command sets subtitles in a normal-sized font
 flush to the right-hand side of the page.@refill
@@ -3178,29 +3321,28 @@ A template for this method looks like this:@refill
 @end group
 @end example
 
-@ifinfo
-@noindent
-Contrast this form with the form of a title page written using the
-@code{@@sp}, @code{@@center}, and @code{@@titlefont} commands:@refill
+You may also combine the @code{@@titlefont} method described in the
+previous section and @code{@@title} method described in this one.  This
+may be useful if you have a very long title.  Here is a real-life example:
 
 @example
+@group
 @@titlepage
-@@sp 10
-@@center @@titlefont@{Name of Manual When Printed@}
-@@sp 2
-@@center Subtitle, If Any
+@@titlefont@{GNU Software@}
 @@sp 1
-@@center Second subtitle
-@@sp 2
-@@center Author
-@@page
-@dots{}
-@@end titlepage
+@@title for MS-Windows and MS-DOS
+@@subtitle Edition @@value@{edition@} for Release @@value@{cd-edition@}
+@@author by Daniel Hagerty, Melissa Weisshaus
+@@author and Eli Zaretskii
+@end group
 @end example
-@end ifinfo
 
-@node Copyright & Permissions, end titlepage, title subtitle author, Titlepage & Copyright Page
-@comment  node-name,  next,  previous,  up
+@noindent
+(The use of @code{@@value} here is explained in @ref{value
+Example,,@code{@@value} Example}.)
+
+
+@node Copyright & Permissions
 @subsection Copyright Page and Permissions
 @cindex Copyright page
 @cindex Printed permissions
@@ -3247,19 +3389,17 @@ Copyright @copyright{} @var{year} @var{copyright-owner}
 @end example
 
 It is customary to put information on how to get a manual after the
-copyright notice, followed by the copying permissions for the
-manual.@refill
+copyright notice, followed by the copying permissions for the manual.
 
-Note that permissions must be given here as well as in the summary
-segment within @code{@@ifinfo} and @code{@@end ifinfo} that
-immediately follows the header since this text appears only in the
-printed manual and the @samp{ifinfo} text appears only in the Info
-file.@refill
+Permissions must be given here as well as in the summary segment within
+@code{@@ifinfo} and @code{@@end ifinfo} that immediately follows the
+header since this text appears only in the printed manual and the
+@samp{ifinfo} text appears only in the Info file.
 
 @xref{Sample Permissions}, for the standard text.@refill
 
-@node end titlepage, headings on off, Copyright & Permissions, Titlepage & Copyright Page
-@comment  node-name,  next,  previous,  up
+
+@node end titlepage
 @subsection Heading Generation
 @findex end titlepage
 @cindex Headings, page, begin to appear
@@ -3326,6 +3466,7 @@ Turn on page headings appropriate for single-sided printing.
 @refill
 
 @item @@headings double
+@itemx @@headings on
 Turn on page headings appropriate for double-sided printing.  The two
 commands, @code{@@headings on} and @code{@@headings double}, are
 synonymous.@refill
@@ -3364,8 +3505,8 @@ headings.@refill
 You can also specify your own style of page heading and footing.
 @xref{Headings, , Page Headings}, for more information.@refill
 
-@node The Top Node, Software Copying Permissions, Titlepage & Copyright Page, Beginning a File
-@comment  node-name,  next,  previous,  up
+
+@node The Top Node
 @section The `Top' Node and Master Menu
 @cindex @samp{@r{Top}} node
 @cindex Master menu
@@ -3392,10 +3533,9 @@ strictly speaking, you are not required to enclose these parts between
 * Master Menu Parts::           A master menu has three or more parts.
 @end menu
 
-@node Title of Top Node, Master Menu Parts, The Top Node, The Top Node
-@ifinfo
-@subheading `Top' Node Title
-@end ifinfo
+
+@node Title of Top Node
+@subsection `Top' Node Title
 
 Sometimes, you will want to place an @code{@@top} sectioning command
 line containing the title of the document immediately after the
@@ -3411,7 +3551,7 @@ version information.  It looks like this:@refill
 @dots{}
 @@end titlepage
 
-@@ifinfo
+@@ifnottex
 @@node Top, Copying, , (dir)
 @@top Texinfo
 
@@ -3421,7 +3561,7 @@ Texinfo is a documentation system@dots{}
 @group
 This is edition@dots{}
 @dots{}
-@@end ifinfo
+@@end ifnottex
 @end group
 
 @group
@@ -3558,10 +3698,10 @@ Usually, an introduction is put in an @code{@@unnumbered} section.
 @cindex File ending
 @findex bye
 
-The end of a Texinfo file should include the commands that create
-indices and generate detailed and summary tables of contents.
-And it must include the @code{@@bye} command that marks the last line
-processed by @TeX{}.@refill
+The end of a Texinfo file should include commands to create indices and
+(usually) to generate detailed and summary tables of contents.  And it
+must include the @code{@@bye} command that marks the last line processed
+by @TeX{}.@refill
 
 @need 700
 For example:
@@ -3601,7 +3741,7 @@ accumulated.  To generate an index, you must include the
 @code{@@printindex} command at the place in the document where you
 want the index to appear.  Also, as part of the process of creating a
 printed manual, you must run a program called @code{texindex}
-(@pxref{Format/Print Hardcopy}) to sort the raw data to produce a sorted
+(@pxref{Hardcopy}) to sort the raw data to produce a sorted
 index file.  The sorted index file is what is actually used to
 print the index.@refill
 
@@ -3661,52 +3801,35 @@ For example:
 
 @@printindex cp
 @end group
-
-@group
-@@summarycontents
-@@contents
-@@bye
-@end group
 @end smallexample
 
 @noindent
-(Readers often prefer that the concept index come last in a book,
-since that makes it easiest to find.)@refill
+Readers often prefer that the concept index come last in a book,
+since that makes it easiest to find.  Having just one index helps
+readers also, since then they have only one place to look
+(@pxref{synindex}).
 
-@ignore
-@c TeX can do sorting, just not conveniently enough to handle sorting
-@c Texinfo indexes. --karl, 5may97.
-In @TeX{}, the @code{@@printindex} command needs a sorted index file
-to work from.  @TeX{} does not know how to do sorting; this is a
-deficiency.  @TeX{} writes output files of raw index data; use the
-@code{texindex} program to convert these files to sorted index files.
-(@xref{Format/Print Hardcopy}, for more information.)@refill
-@end ignore
 
-
-@node Contents, File End, Printing Indices & Menus, Ending a File
-@comment  node-name,  next,  previous,  up
+@node Contents
 @section Generating a Table of Contents
 @cindex Table of contents
 @cindex Contents, Table of
+@cindex Short table of contents
 @findex contents
 @findex summarycontents
 @findex shortcontents
 
 The @code{@@chapter}, @code{@@section}, and other structuring commands
 supply the information to make up a table of contents, but they do not
-cause an actual table to appear in the manual.  To do this, you must
-use the @code{@@contents} and @code{@@summarycontents}
-commands:@refill
+cause an actual table to appear in the manual.  To do this, you must use
+the @code{@@contents} and/or @code{@@summarycontents} command(s).
 
 @table @code
 @item @@contents
 Generate a table of contents in a printed manual, including all
 chapters, sections, subsections, etc., as well as appendices and
 unnumbered chapters.  (Headings generated by the @code{@@heading}
-series of commands do not appear in the table of contents.)  The
-@code{@@contents} command should be written on a line by
-itself.@refill
+series of commands do not appear in the table of contents.)
 
 @item @@shortcontents
 @itemx @@summarycontents
@@ -3718,42 +3841,55 @@ chapters (and appendices and unnumbered chapters).  Omit sections, subsections
 and subsubsections.  Only a long manual needs a short table
 of contents in addition to the full table of contents.@refill
 
-Write the @code{@@shortcontents} command on a line by itself right
-@emph{before} the @code{@@contents} command.@refill
 @end table
 
-The table of contents commands automatically generate a chapter-like
-heading at the top of the first table of contents page.  Write the table
-of contents commands at the very end of a Texinfo file, just before the
-@code{@@bye} command, following any index sections---anything in the
-Texinfo file after the table of contents commands will be omitted from
-the table of contents.@refill
-
-When you print a manual with a table of contents, the table of
-contents are printed last and numbered with roman numerals.  You need
-to place those pages in their proper place, after the title page,
-yourself.  (This is the only collating you need to do for a printed
-manual.  The table of contents is printed last because it is generated
-after the rest of the manual is typeset.)@refill
-
-@need 700
-Here is an example of where to write table of contents commands:@refill
-
-@example
-@group
-@var{indices}@dots{}
-@@shortcontents
-@@contents
-@@bye
-@end group
-@end example
+Both contents commands should be written on a line by themselves.
+The contents commands automatically generate a chapter-like heading at
+the top of the first table of contents page, so don't include any
+sectioning command such as @code{@@unnumbered} before them.
 
 Since an Info file uses menus instead of tables of contents, the Info
-formatting commands ignore the @code{@@contents} and
-@code{@@shortcontents} commands.@refill
-
-@node File End,  , Contents, Ending a File
-@comment  node-name,  next,  previous,  up
+formatting commands ignore the contents commands.  But the contents are
+included in plain text output (generated by @code{makeinfo --no-headers}).
+
+The contents commands can be placed either at the very end of the file,
+after any indices (see the previous section) and just before the
+@code{@@bye} (see the next section), or near the beginning of the file,
+after the @code{@@end titlepage} (@pxref{titlepage}).  The advantage to
+the former is that then the contents output is always up to date,
+because it reflects the processing just done.  The advantage to the
+latter is that the contents are printed in the proper place, thus you do
+not need to rearrange the DVI file with @command{dviselect} or shuffle
+paper.  However, contents commands at the beginning of the document are
+ignored when outputting to standard output.
+
+@findex setcontentsaftertitlepage
+@findex setshortcontentsaftertitlepage
+@cindex Contents, after title page
+@cindex Table of contents, after title page
+As an author, you can put the contents commands wherever you prefer.
+But if you are a user simply printing a manual, you may wish to print
+the contents after the title page even if the author put the contents
+commands at the end of the document (as is the case in most existing
+Texinfo documents).  You can do this by specifying
+@code{@@setcontentsaftertitlepage} and/or
+@code{@@setshortcontentsaftertitlepage}.  The first prints only the main
+contents after the @code{@@end titlepage}; the second prints both the
+short contents and the main contents.  In either case, any subsequent
+@code{@@contents} or @code{@@shortcontents} is ignored (unless no
+@code{@@end titlepage} is ever encountered).
+
+You need to include the @code{@@set@dots{}contentsaftertitlepage}
+commands early in the document (just after @code{@@setfilename}, for
+example).  Or, if you're using @command{texi2dvi} (@pxref{Format with
+texi2dvi}), you can use its @option{--texinfo} option to specify this
+without altering the source file at all.  For example:
+@example
+texi2dvi --texinfo=@@setshortcontentsaftertitlepage foo.texi
+@end example
+
+
+@node File End
 @section @code{@@bye} File Ending
 @findex bye
 
@@ -3768,8 +3904,8 @@ manual; it is as if text after @code{@@bye} were within @code{@@ignore}
 with a local variables list.  @xref{Compile-Command, , Using Local
 Variables and the Compile Command}, for more information.@refill
 
-@node Structuring, Nodes, Ending a File, Top
-@comment  node-name,  next,  previous,  up
+
+@node Structuring
 @chapter Chapter Structuring
 @cindex Chapter structuring
 @cindex Structuring of chapters
@@ -3808,8 +3944,8 @@ heading at the top of each node---but you don't need to.@refill
 * Raise/lower sections::        How to change commands' hierarchical level.
 @end menu
 
-@node Tree Structuring, Structuring Command Types, Structuring, Structuring
-@comment  node-name,  next,  previous,  up
+
+@node Tree Structuring
 @section Tree Structure of Sections
 @cindex Tree structuring
 
@@ -3852,9 +3988,9 @@ The chapter structuring commands are described in the sections that
 follow; the @code{@@node} and @code{@@menu} commands are described in
 following chapters. (@xref{Nodes}, and see @ref{Menus}.)@refill
 
-@node Structuring Command Types, makeinfo top, Tree Structuring, Structuring
-@comment  node-name,  next,  previous,  up
-@section Types of Structuring Commands
+
+@node Structuring Command Types
+@section Structuring Command Types
 
 The chapter structuring commands fall into four groups or series, each
 of which contains structuring commands corresponding to the
@@ -3899,119 +4035,43 @@ start new pages in the printed manual; the @code{@@heading} commands
 do not.@refill
 @end itemize
 
-@need 1000
 Here are the four groups of chapter structuring commands:@refill
 
-@c Slightly different formatting for regular sized books and smallbooks.
-@ifset smallbook
-@sp 1
-@tex
-{\let\rm=\indrm \let\tt=\indtt
-\halign{\hskip\itemindent#\hfil&  \hskip.5em#\hfil&  \hskip.5em#\hfil&
-\hskip.5em#\hfil\cr
-
-& & &                                                \rm No new pages\cr
-\rm Numbered&    \rm Unnumbered&  \rm Lettered and numbered& \rm Unnumbered\cr
-\rm In contents&  \rm In contents&  \rm In contents&  \rm Not in contents\cr
-
-& & & \cr
- &              \tt  @@top&            &               \tt @@majorheading\cr
-\tt @@chapter& \tt @@unnumbered&    \tt @@appendix&     \tt @@chapheading\cr
-\tt @@section&   \tt @@unnumberedsec&   \tt @@appendixsec&   \tt @@heading\cr
-\tt @@subsection&\tt @@unnumberedsubsec&\tt @@appendixsubsec&
-\tt @@subheading\cr
-\tt @@subsubsection& \tt @@unnumberedsubsubsec& \tt @@appendixsubsubsec&
-\tt @@subsubheading\cr}}
-@end tex
-@end ifset
-@ifclear smallbook
-@sp 1
-@tex
-\vbox{
-\halign{\hskip\itemindent\hskip.5em#\hfil&  \hskip.5em#\hfil&
-\hskip.5em#\hfil& \hskip.5em #\hfil\cr
-
-& & & \cr
-& & &                                                \rm No new pages\cr
-\rm Numbered&    \rm Unnumbered&  \rm Lettered and numbered& \rm Unnumbered\cr
-\rm In contents&  \rm In contents&  \rm In contents&  \rm Not in contents\cr
-
-& & & \cr
- &              \tt  @@top&            &               \tt @@majorheading\cr
-\tt @@chapter& \tt @@unnumbered&    \tt @@appendix&     \tt @@chapheading\cr
-\tt @@section&   \tt @@unnumberedsec&   \tt @@appendixsec&   \tt @@heading\cr
-\tt @@subsection&\tt @@unnumberedsubsec&\tt @@appendixsubsec&
-\tt @@subheading\cr
-\tt @@subsubsection& \tt @@unnumberedsubsubsec& \tt @@appendixsubsubsec&
-\tt @@subsubheading\cr}}
-@end tex
-@end ifclear
-@ifinfo
-@example
-@group
-                                                       @r{No new pages}
-@r{Numbered}       @r{Unnumbered}       @r{Lettered and numbered}  @r{Unnumbered}
-@r{In contents}    @r{In contents}          @r{In contents}        @r{Not in contents}
-
-               @@top                                    @@majorheading
-@@chapter       @@unnumbered          @@appendix          @@chapheading
-@@section       @@unnumberedsec       @@appendixsec       @@heading
-@@subsection    @@unnumberedsubsec    @@appendixsubsec    @@subheading
-@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading
-@end group
-@end example
-@end ifinfo
+@multitable @columnfractions .19 .30 .29 .22
+
+@item              @tab              @tab                @tab No new page
+@item Numbered     @tab Unnumbered   @tab Lettered and numbered
+                                                         @tab Unnumbered
+@item In contents  @tab In contents  @tab In contents    @tab Not in contents
+@item                 @tab @code{@@top}                 @tab
+                                                          @tab @code{@@majorheading}
+@item @code{@@chapter}       @tab @code{@@unnumbered}          @tab @code{@@appendix}
+                                                          @tab @code{@@chapheading}
+@item @code{@@section}       @tab @code{@@unnumberedsec}       @tab @code{@@appendixsec}
+                                                          @tab @code{@@heading}
+@item @code{@@subsection}    @tab @code{@@unnumberedsubsec}    @tab @code{@@appendixsubsec}
+                                                          @tab @code{@@subheading}
+@item @code{@@subsubsection} @tab @code{@@unnumberedsubsubsec} @tab @code{@@appendixsubsubsec}
+                                                          @tab @code{@@subsubheading}
+@end multitable
 
-@c Cannot line up columns properly inside of an example because of roman
-@c proportional fonts.
-@ignore
-@ifset smallbook
-@iftex
-@smallexample
-@group
-                                                       @r{No new pages}
-@r{Numbered}      @r{Unnumbered}       @r{Lettered and numbered}  @r{Unnumbered}
-@r{In contents}      @r{In contents}           @r{In contents}         @r{Not in contents}
-
-               @@top                                    @@majorheading
-@@chapter       @@unnumbered          @@appendix          @@chapheading
-@@section       @@unnumberedsec       @@appendixsec       @@heading
-@@subsection    @@unnumberedsubsec    @@appendixsubsec    @@subheading
-@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading
-@end group
-@end smallexample
-@end iftex
-@end ifset
-@ifclear smallbook
-@iftex
-@smallexample
-@group
-                                                      @r{No new pages}
-@r{Numbered}      @r{Unnumbered}       @r{Lettered and numbered}  @r{Unnumbered}
-@r{In contents}      @r{In contents}           @r{In contents}         @r{Not in contents}
-
-               @@top                                    @@majorheading
-@@chapter       @@unnumbered          @@appendix          @@chapheading
-@@section       @@unnumberedsec       @@appendixsec       @@heading
-@@subsection    @@unnumberedsubsec    @@appendixsubsec    @@subheading
-@@subsubsection @@unnumberedsubsubsec @@appendixsubsubsec @@subsubheading
-@end group
-@end smallexample
-@end iftex
-@end ignore
 
-@node makeinfo top, chapter, Structuring Command Types, Structuring
-@comment  node-name,  next,  previous,  up
+@node makeinfo top
 @section @code{@@top}
 
 The @code{@@top} command is a special sectioning command that you use
 only after an @samp{@@node Top} line at the beginning of a Texinfo file.
-The @code{@@top} command tells the @code{makeinfo} formatter
-which node is the `Top'
-node.  It has the same typesetting effect as @code{@@unnumbered}
-(@pxref{unnumbered & appendix, , @code{@@unnumbered}, @code{@@appendix}}).
-For detailed information, see
-@ref{makeinfo top command, , The @code{@@top} Command}.@refill
+The @code{@@top} command tells the @code{makeinfo} formatter which node
+is the `Top' node, so it can use it as the root of the node tree if your
+manual uses implicit pointers.  It has the same typesetting effect as
+@code{@@unnumbered} (@pxref{unnumbered & appendix, , @code{@@unnumbered}
+and @code{@@appendix}}).  For detailed information, see @ref{makeinfo
+top command, , The @code{@@top} Command}.
+
+The @code{@@top} node and its menu (if any) is conventionally wrapped in
+an @code{@@ifnottex} conditional so that it will appear only in Info and
+HTML output, not @TeX{}.
+
 
 @node chapter, unnumbered & appendix, makeinfo top, Structuring
 @comment  node-name,  next,  previous,  up
@@ -4049,9 +4109,8 @@ This kind of stylistic choice is not usually offered by Texinfo.
 @c but the Hacker's Dictionary wanted it ...
 
 
-@node unnumbered & appendix, majorheading & chapheading, chapter, Structuring
-@comment  node-name,  next,  previous,  up
-@section @code{@@unnumbered}, @code{@@appendix}
+@node unnumbered & appendix
+@section @code{@@unnumbered} and @code{@@appendix}
 @findex unnumbered
 @findex appendix
 
@@ -4346,12 +4405,11 @@ An attempt to raise above `chapters' reproduces chapter commands; an
 attempt to lower below `subsubsections' reproduces subsubsection
 commands.
 
-@node Nodes, Menus, Structuring, Top
-@comment  node-name,  next,  previous,  up
+@node Nodes
 @chapter Nodes
 
 @dfn{Nodes} are the primary segments of a Texinfo file.  They do not
-themselves impose a hierarchic or any other kind of structure on a file.
+themselves impose a hierarchical or any other kind of structure on a file.
 Nodes contain @dfn{node pointers} that name other nodes, and can contain
 @dfn{menus} which are lists of nodes.  In Info, the movement commands
 can carry you to a pointed-to node or to a node listed in a menu.  Node
@@ -4363,17 +4421,17 @@ books.@refill
 * Two Paths::                   Different commands to structure
                                   Info output and printed output.
 * Node Menu Illustration::      A diagram, and sample nodes and menus.
-* node::                        How to write a node, in detail.
-* makeinfo Pointer Creation::   How to create node pointers with @code{makeinfo}.
+* node::                        Creating nodes, in detail.
+* makeinfo Pointer Creation::   Letting makeinfo determine node pointers.
+* anchor::                      Defining arbitrary cross-reference targets.
 @end menu
 
-@node Two Paths, Node Menu Illustration, Nodes, Nodes
-@ifinfo
-@heading Two Paths
-@end ifinfo
+
+@node Two Paths
+@section Two Paths
 
 The node and menu commands and the chapter structuring commands are
-independent of each other:
+technically independent of each other:
 
 @itemize @bullet
 @item
@@ -4390,26 +4448,26 @@ information for cross references; they do nothing else.@refill
 
 You can use node pointers and menus to structure an Info file any way
 you want; and you can write a Texinfo file so that its Info output has a
-different structure than its printed output.  However, most Texinfo
-files are written such that the structure for the Info output
-corresponds to the structure for the printed output.  It is not
-convenient to do otherwise.@refill
+different structure than its printed output.  However, virtually all
+Texinfo files are written such that the structure for the Info output
+corresponds to the structure for the printed output.  It is neither
+convenient nor understandable to the reader to do otherwise.@refill
 
 Generally, printed output is structured in a tree-like hierarchy in
 which the chapters are the major limbs from which the sections branch
 out.  Similarly, node pointers and menus are organized to create a
 matching structure in the Info output.@refill
 
-@node Node Menu Illustration, node, Two Paths, Nodes
-@comment  node-name,  next,  previous,  up
+
+@node Node Menu Illustration
 @section Node and Menu Illustration
 
 Here is a copy of the diagram shown earlier that illustrates a Texinfo
 file with three chapters, each of which contains two sections.@refill
 
-Note that the ``root'' is at the top of the diagram and the ``leaves''
-are at the bottom.  This is how such a diagram is drawn conventionally;
-it illustrates an upside-down tree.  For this reason, the root node is
+The ``root'' is at the top of the diagram and the ``leaves'' are at the
+bottom.  This is how such a diagram is drawn conventionally; it
+illustrates an upside-down tree.  For this reason, the root node is
 called the `Top' node, and `Up' node pointers carry you closer to the
 root.@refill
 
@@ -4425,35 +4483,36 @@ root.@refill
     |        |         |        |         |        |
  Section  Section   Section  Section   Section  Section
    1.1      1.2       2.1      2.2       3.1      3.2
-
 @end group
 @end example
 
-Write the beginning of the node for Chapter 2 like this:@refill
+The fully-written command to start Chapter 2 would be this:
 
 @example
 @group
-@@node     Chapter 2,  Chapter 3, Chapter 1, top
+@@node     Chapter 2,  Chapter 3, Chapter 1, Top
 @@comment  node-name,  next,      previous,  up
 @end group
 @end example
 
 @noindent
-This @code{@@node} line says that the name of this node is ``Chapter 2'', the
-name of the `Next' node is ``Chapter 3'', the name of the `Previous'
-node is ``Chapter 1'', and the name of the `Up' node is ``Top''.
+This @code{@@node} line says that the name of this node is ``Chapter
+2'', the name of the `Next' node is ``Chapter 3'', the name of the
+`Previous' node is ``Chapter 1'', and the name of the `Up' node is
+``Top''.  You can omit writing out these node names if your document is
+hierarchically organized (@pxref{makeinfo Pointer Creation}), but the
+pointer relationships still obtain.
 
 @quotation
 @strong{Please Note:} `Next' refers to the next node at the same
 hierarchical level in the manual, not necessarily to the next node
 within the Texinfo file.  In the Texinfo file, the subsequent node may
-be at a lower level---a section-level node may follow a chapter-level
-node, and a subsection-level node may follow a section-level node.
-`Next' and `Previous' refer to nodes at the @emph{same} hierarchical
-level.  (The `Top' node contains the exception to this rule.  Since the
-`Top' node is the only node at that level, `Next' refers to the first
-following node, which is almost always a chapter or chapter-level
-node.)@refill
+be at a lower level---a section-level node most often follows a
+chapter-level node, for example.  `Next' and `Previous' refer to nodes
+at the @emph{same} hierarchical level.  (The `Top' node contains the
+exception to this rule.  Since the `Top' node is the only node at that
+level, `Next' refers to the first following node, which is almost always
+a chapter or chapter-level node.)@refill
 @end quotation
 
 To go to Sections 2.1 and 2.2 using Info, you need a menu inside Chapter
@@ -4506,11 +4565,13 @@ line, an @code{@@chapter} line, and then by indexing lines.@refill
 @end group
 @end example
 
-@node node, makeinfo Pointer Creation, Node Menu Illustration, Nodes
-@comment  node-name,  next,  previous,  up
+
+@node node
 @section The @code{@@node} Command
 
 @cindex Node, defined
+@findex node
+
 A @dfn{node} is a segment of text that begins at an @code{@@node}
 command and continues until the next @code{@@node} command.  The
 definition of node is different from that for chapter or section.  A
@@ -4525,19 +4586,23 @@ several nodes, one for each section, subsection, and
 subsubsection.@refill
 
 To create a node, write an @code{@@node} command at the beginning of a
-line, and follow it with four arguments, separated by commas, on the
-rest of the same line.  These arguments are the name of the node, and
-the names of the `Next', `Previous', and `Up' pointers, in that order.
-You may insert spaces before each pointer if you wish; the spaces are
-ignored.  You must write the name of the node, and the names of the
-`Next', `Previous', and `Up' pointers, all on the same line.  Otherwise,
+line, and follow it with up to four arguments, separated by commas, on
+the rest of the same line.  The first argument is required; it is the
+name of this node.  The subsequent arguments are the names of the
+`Next', `Previous', and `Up' pointers, in that order, and may be omitted
+if your Texinfo document is hierarchically organized (@pxref{makeinfo
+Pointer Creation}).
+
+You may insert spaces before each name if you wish; the spaces are
+ignored.  You must write the name of the node and the names of the
+`Next', `Previous', and `Up' pointers all on the same line.  Otherwise,
 the formatters fail.  (@inforef{Top, info, info}, for more information
-about nodes in Info.)@refill
+about nodes in Info.)
 
 Usually, you write one of the chapter-structuring command lines
 immediately after an @code{@@node} line---for example, an
 @code{@@section} or @code{@@subsection} line.  (@xref{Structuring
-Command Types, , Types of Structuring Commands}.)@refill
+Command Types}.)
 
 @quotation
 @strong{Please note:} The GNU Emacs Texinfo mode updating commands work
@@ -4549,8 +4614,8 @@ structuring lines.  @xref{Updating Requirements}.@refill
 references.  For this reason, you must write @code{@@node} lines in a
 Texinfo file that you intend to format for printing, even if you do not
 intend to format it for Info.  (Cross references, such as the one at the
-end of this sentence, are made with @code{@@xref} and its related
-commands; see @ref{Cross References}.)@refill
+end of this sentence, are made with @code{@@xref} and related commands;
+see @ref{Cross References}.)@refill
 
 @menu
 * Node Names::                  How to choose node and pointer names.
@@ -4562,11 +4627,11 @@ commands; see @ref{Cross References}.)@refill
 * Top Node Summary::            Write a brief description for readers.
 @end menu
 
-@node Node Names, Writing a Node, node, node
-@ifinfo
-@subheading Choosing Node and Pointer Names
-@end ifinfo
 
+@node Node Names
+@subsection Choosing Node and Pointer Names
+
+@cindex Node names, choosing
 The name of a node identifies the node.  The pointers enable
 you to reach other nodes and consist of the names of those nodes.@refill
 
@@ -4586,8 +4651,14 @@ Also, it is helpful to include a brief description of the manual in the
 `Top' node.  @xref{First Node}, for information on how to write the
 first node of a Texinfo file.@refill
 
-@node Writing a Node, Node Line Tips, Node Names, node
-@comment  node-name,  next,  previous,  up
+Even when you explicitly specify all pointers, that does not mean you
+can write the nodes in the Texinfo source file in an arbitrary order!
+Because @TeX{} processes the file sequentially, irrespective of node
+pointers, you must write the nodes in the order you wish them to appear
+in the printed output.
+
+
+@node Writing a Node
 @subsection How to Write an @code{@@node} Line
 @cindex Writing an @code{@@node} line
 @cindex @code{@@node} line writing
@@ -4615,8 +4686,8 @@ their proper order.  The comment line helps you keep track of which
 arguments are for which pointers.  This comment line is especially useful
 if you are not familiar with Texinfo.@refill
 
-The template for a node line with `Next', `Previous', and `Up' pointers
-looks like this:@refill
+The template for a fully-written-out node line with `Next', `Previous',
+and `Up' pointers looks like this:@refill
 
 @example
 @@node @var{node-name}, @var{next}, @var{previous}, @var{up}
@@ -4624,22 +4695,21 @@ looks like this:@refill
 
 If you wish, you can ignore @code{@@node} lines altogether in your first
 draft and then use the @code{texinfo-insert-node-lines} command to
-create @code{@@node} lines for you.  However, we do not
-recommend this practice.  It is better to name the node itself
-at the same time that you
-write a segment so you can easily make cross references.  A large number
-of cross references are an especially important feature of a good Info
-file.@refill
+create @code{@@node} lines for you.  However, we do not recommend this
+practice.  It is better to name the node itself at the same time that
+you write a segment so you can easily make cross references.  A large
+number of cross references are an especially important feature of a good
+Info file.
 
 After you have inserted an @code{@@node} line, you should immediately
 write an @@-command for the chapter or section and insert its name.
 Next (and this is important!), put in several index entries.  Usually,
 you will find at least two and often as many as four or five ways of
 referring to the node in the index.  Use them all.  This will make it
-much easier for people to find the node.@refill
+much easier for people to find the node.
 
-@node Node Line Tips, Node Line Requirements, Writing a Node, node
-@comment  node-name,  next,  previous,  up
+
+@node Node Line Tips
 @subsection @code{@@node} Line Tips
 
 Here are three suggestions:
@@ -4663,8 +4733,8 @@ section or chapter titles---initial and significant words are
 capitalized; others are not.@refill
 @end itemize
 
+
 @node Node Line Requirements, First Node, Node Line Tips, node
-@comment  node-name,  next,  previous,  up
 @subsection @code{@@node} Line Requirements
 
 @cindex Node line requirements
@@ -4672,7 +4742,7 @@ Here are several requirements for @code{@@node} lines:
 
 @itemize @bullet
 @cindex Unique nodename requirement
-@cindex Nodename must be unique
+@cindex Node name must be unique
 @item
 All the node names for a single Info file must be unique.@refill
 
@@ -4688,13 +4758,15 @@ different.@refill
 A pointer name must be the name of a node.@refill
 
 The node to which a pointer points may come before or after the
-node containing the pointer.@refill
+node containing the pointer.
 
-@cindex @@-command in nodename
-@cindex Nodename, cannot contain
+@cindex @@-commands in nodename
+@cindex Node name, should not contain @@-commands
 @item
-You cannot use any of the Texinfo @@-commands in a node name;
-@w{@@-commands} confuse Info.@refill
+@w{@@-commands} used in node names generally confuse Info, so you should
+avoid them.  For a few rare cases when this is useful, Texinfo has
+limited support for using @w{@@-commands} in node names; see
+@ref{Pointer Validation}.
 
 @need 750
 Thus, the beginning of the section called @code{@@chapter} looks like
@@ -4709,11 +4781,15 @@ this:@refill
 @end group
 @end smallexample
 
-@cindex Comma in nodename
-@cindex Apostrophe in nodename
 @item
-You cannot use commas or apostrophes within a node name; these
-confuse @TeX{} or the Info formatters.@refill
+@cindex Apostrophe in nodename
+@cindex Colon in nodename
+@cindex Comma in nodename
+@cindex Period in nodename
+@cindex Characters, invalid in node name
+@cindex Invalid characters in node names
+Unfortunately, you cannot use periods, commas, colons or apostrophes
+within a node name; these confuse @TeX{} or the Info formatters.@refill
 
 @need 700
 For example, the following is a section title:
@@ -4832,69 +4908,100 @@ include an edition number for the manual.  (The title page should also
 contain this information: see @ref{titlepage, ,
 @code{@@titlepage}}.)@refill
 
-@node makeinfo Pointer Creation,  , node, Nodes
+@node makeinfo Pointer Creation
 @section Creating Pointers with @code{makeinfo}
 @cindex Creating pointers with @code{makeinfo}
 @cindex Pointer creation with @code{makeinfo}
 @cindex Automatic pointer creation with @code{makeinfo}
 
-The @code{makeinfo} program has a feature for automatically creating
-node pointers for a hierarchically organized file that lacks
-them.@refill
+The @code{makeinfo} program has a feature for automatically defining
+node pointers for a hierarchically organized file.
 
 When you take advantage of this feature, you do not need to write the
 `Next', `Previous', and `Up' pointers after the name of a node.
 However, you must write a sectioning command, such as @code{@@chapter}
 or @code{@@section}, on the line immediately following each truncated
-@code{@@node} line.  You cannot write a comment line after a node
-line; the section line must follow it immediately.@refill
+@code{@@node} line (except that comment lines may intervene).
 
-In addition, you must follow the `Top' @code{@@node} line with a line beginning
-with @code{@@top} to mark the `Top' node in the file. @xref{makeinfo
-top, , @code{@@top}}.
+In addition, you must follow the `Top' @code{@@node} line with a line
+beginning with @code{@@top} to mark the `Top' node in the
+file.  @xref{makeinfo top, , @code{@@top}}.
 
 Finally, you must write the name of each node (except for the `Top'
 node) in a menu that is one or more hierarchical levels above the
-node's hierarchical level.@refill
+node's hierarchical level.
+
+This node pointer insertion feature in @code{makeinfo} relieves you from
+the need to update menus and pointers manually or with Texinfo mode
+commands.  (@xref{Updating Nodes and Menus}.)
+
+
+@node anchor
+@section @code{@@anchor}: Defining Arbitrary Cross-reference Targets
+
+@findex anchor
+@cindex Anchors
+@cindex Cross-reference targets, arbitrary
+@cindex Targets for cross-references, arbitrary
+
+An @dfn{anchor} is a position in your document, labeled so that
+cross-references can refer to it, just as they can to nodes.  You create
+an anchor with the @code{@@anchor} command, and give the label as a
+normal brace-delimited argument.  For example:
+
+@example
+This marks the @@anchor@{x-spot@}spot.
+@dots{}
+@@xref@{x-spot,,the spot@}.
+@end example
+
+@noindent produces:
+
+@example
+This marks the spot.
+@dots{}
+See [the spot], page 1.
+@end example
+
+As you can see, the @code{@@anchor} command itself produces no output.
+This example defines an anchor `x-spot' just before the word `spot'.
+You can refer to it later with an @code{@@xref} or other cross-reference
+command, as shown.  @xref{Cross References}, for details on the
+cross-reference commands.
+
+It is best to put @code{@@anchor} commands just before the position you
+wish to refer to; that way, the reader's eye is led on to the correct
+text when they jump to the anchor.  You can put the @code{@@anchor}
+command on a line by itself if that helps readability of the source.
+Spaces are always ignored after @code{@@anchor}.
+
+Anchor names and node names may not conflict.  Anchors and nodes are
+given similar treatment in some ways; for example, the @code{goto-node}
+command in standalone Info takes either an anchor name or a node name as
+an argument.  (@xref{goto-node,,,info-stnd,GNU Info}.)
 
-This node pointer insertion feature in @code{makeinfo} is an
-alternative to the menu and pointer creation and update commands in
-Texinfo mode.  (@xref{Updating Nodes and Menus}.)  It is especially
-helpful to people who do not use GNU Emacs for writing Texinfo
-documents.@refill
 
-@node Menus, Cross References, Nodes, Top
-@comment  node-name,  next,  previous,          up
+@node Menus
 @chapter Menus
 @cindex Menus
 @findex menu
 
-@dfn{Menus} contain pointers to subordinate
-nodes.@footnote{Menus can carry you to any node, regardless
-of the hierarchical structure; even to nodes in a different
-Info file.  However, the GNU Emacs Texinfo mode updating
-commands work only to create menus of subordinate nodes.
-Conventionally, cross references are used to refer to other
-nodes.} In Info, you use menus to go to such nodes.  Menus
-have no effect in printed manuals and do not appear in
-them.@refill
+@dfn{Menus} contain pointers to subordinate nodes.@footnote{Menus can
+carry you to any node, regardless of the hierarchical structure; even to
+nodes in a different Info file.  However, the GNU Emacs Texinfo mode
+updating commands work only to create menus of subordinate nodes.
+Conventionally, cross references are used to refer to other nodes.} In
+Info, you use menus to go to such nodes.  Menus have no effect in
+printed manuals and do not appear in them.
 
 By convention, a menu is put at the end of a node since a reader who
-uses the menu may not see text that follows it.@refill
-
-@ifinfo
-A node that has a menu should @emph{not} contain much text.  If you
-have a lot of text and a menu, move most of the text into a new
-subnode---all but a few lines.@refill
-@end ifinfo
-@iftex
-@emph{A node that has a menu should not contain much text.} If you
-have a lot of text and a menu, move most of the text into a new
-subnode---all but a few lines.  Otherwise, a reader with a terminal
-that displays only a few lines may miss the menu and its associated
-text.  As a practical matter, you should locate a menu within 20 lines
-of the beginning of the node.@refill
-@end iftex
+uses the menu may not see text that follows it.  Furthermore, a node
+that has a menu should not contain much text. If you have a lot of text
+and a menu, move most of the text into a new subnode---all but a few
+lines.  Otherwise, a reader with a terminal that displays only a few
+lines may miss the menu and its associated text.  As a practical matter,
+you should locate a menu within 20 lines of the beginning of the
+node.
 
 @menu
 * Menu Location::               Put a menu in a short node.
@@ -4905,6 +5012,7 @@ of the beginning of the node.@refill
 * Other Info Files::            How to refer to a different Info file.
 @end menu
 
+
 @node Menu Location, Writing a Menu, Menus, Menus
 @ifinfo
 @heading Menus Need Short Nodes
@@ -4914,14 +5022,6 @@ of the beginning of the node.@refill
 @cindex Nodes for menus are short
 @cindex Short nodes for menus
 
-@ifinfo
-A reader can easily see a menu that is close to the beginning of the
-node.  The node should be short.  As a practical matter, you should
-locate a menu within 20 lines of the beginning of the node.
-Otherwise, a reader with a terminal that displays only a few lines may
-miss the menu and its associated text.@refill
-@end ifinfo
-
 The short text before a menu may look awkward in a printed manual.  To
 avoid this, you can write a menu near the beginning of its node and
 follow the menu by an @code{@@node} line, and then an @code{@@heading}
@@ -4953,7 +5053,8 @@ For example, the preceding two paragraphs follow an Info-only menu,
 
 The Texinfo file for this document contains more than a dozen
 examples of this procedure.  One is at the beginning of this chapter;
-another is at the beginning of the ``Cross References'' chapter.@refill
+another is at the beginning of @ref{Cross References}. @refill
+
 
 @node Writing a Menu, Menu Parts, Menu Location, Menus
 @section Writing a Menu
@@ -4979,14 +5080,16 @@ Larger Units of Text
 @end group
 @end example
 
-In a menu, every line that begins with an @w{@samp{* }} is a
-@dfn{menu entry}.  (Note the space after the asterisk.)  A
-line that does not start with an @w{@samp{* }} may also
-appear in a menu.  Such a line is not a menu entry but is a
-menu comment line that appears in the Info file.  In
-the example above, the line @samp{Larger Units of Text} is a
-menu comment line; the two lines starting with @w{@samp{* }}
-are menu entries.
+In a menu, every line that begins with an @w{@samp{* }} is a @dfn{menu
+entry}.  (Note the space after the asterisk.)  A line that does not
+start with an @w{@samp{* }} may also appear in a menu.  Such a line is
+not a menu entry but is a menu comment line that appears in the Info
+file.  In the example above, the line @samp{Larger Units of Text} is a
+menu comment line; the two lines starting with @w{@samp{* }} are menu
+@cindex Spaces, in menus
+entries.  Space characters in a menu are preserved as-is; this allows
+you to format the menu as you wish.
+
 
 @node Menu Parts, Less Cluttered Menu Entry, Writing a Menu, Menus
 @section The Parts of a Menu
@@ -5195,20 +5298,20 @@ For example:
 not a Texinfo file, but a menu entry looks the same in both types of
 file.)@refill
 
-Note that the GNU Emacs Texinfo mode menu updating commands only work
-with nodes within the current buffer, so you cannot use them to create
-menus that refer to other files.  You must write such menus by hand.@refill
+The GNU Emacs Texinfo mode menu updating commands only work with nodes
+within the current buffer, so you cannot use them to create menus that
+refer to other files.  You must write such menus by hand.
 
-@node Cross References, Marking Text, Menus, Top
-@comment  node-name,  next,  previous,  up
+
+@node Cross References
 @chapter Cross References
 @cindex Making cross references
 @cindex Cross references
 @cindex References
 
 @dfn{Cross references} are used to refer the reader to other parts of the
-same or different Texinfo files.  In Texinfo, nodes are the
-places to which cross references can refer.@refill
+same or different Texinfo files.  In Texinfo, nodes and anchors are the
+places to which cross references can refer.
 
 @menu
 * References::                  What cross references are for.
@@ -5234,7 +5337,7 @@ it.@refill
 
 However, in any document, some information will be too detailed for
 the current context, or incidental to it; use cross references to
-provide access to such information.  Also, an on-line help system or a
+provide access to such information.  Also, an online help system or a
 reference manual is not like a novel; few read such documents in
 sequence from beginning to end.  Instead, people look up what they
 need.  For this reason, such creations should contain many cross
@@ -5249,15 +5352,16 @@ In Info, a cross reference results in an entry that you can follow using
 the Info @samp{f} command.  (@inforef{Help-Adv, Some advanced Info
 commands, info}.)@refill
 
-The various cross reference commands use nodes to define cross
-reference locations.  This is evident in Info, in which a cross
-reference takes you to the specified node.  @TeX{} also uses nodes to
-define cross reference locations, but the action is less obvious.  When
-@TeX{} generates a DVI file, it records nodes' page numbers and
-uses the page numbers in making references.  Thus, if you are writing
-a manual that will only be printed, and will not be used on-line, you
-must nonetheless write @code{@@node} lines to name the places to which
-you make cross references.@refill
+The various cross reference commands use nodes (or anchors,
+@pxref{anchor,,@code{@@anchor}}) to define cross reference locations.
+This is evident in Info, in which a cross reference takes you to the
+specified location.  @TeX{} also uses nodes to define cross reference
+locations, but the action is less obvious.  When @TeX{} generates a DVI
+file, it records each node's page number and uses the page numbers in making
+references.  Thus, if you are writing a manual that will only be
+printed, and will not be used online, you must nonetheless write
+@code{@@node} lines to name the places to which you make cross
+references.@refill
 
 @need 800
 @node Cross Reference Commands, Cross Reference Parts, References, Cross References
@@ -5358,7 +5462,7 @@ The five possible arguments for a cross reference are:@refill
 
 @enumerate
 @item
-The node name (required).  This is the node to which the
+The node or anchor name (required).  This is the location to which the
 cross reference takes you.  In a printed document, the location of the
 node provides the page reference only for references within the same
 document.@refill
@@ -5448,16 +5552,16 @@ or like this
 @noindent
 In @TeX{}, a cross reference looks like this:
 
-@example
+@quotation
 See Section @var{section-number} [@var{node-name}], page @var{page}.
-@end example
+@end quotation
 
 @noindent
 or like this
 
-@example
+@quotation
 See Section @var{section-number} [@var{title-or-topic}], page @var{page}.
-@end example
+@end quotation
 
 The @code{@@xref} command does not generate a period or comma to end
 the cross reference in either the Info file or the printed output.
@@ -5535,6 +5639,9 @@ which produces
 *Note Tropical Storms::, for more info.
 @end example
 
+@noindent
+and
+
 @quotation
 See Section 3.1 [Tropical Storms], page 24, for more info.
 @end quotation
@@ -5582,7 +5689,7 @@ See Section 5.2 [Electrical Effects], page 57.
 
 @noindent
 (Note that in the preceding example the closing brace is followed by a
-period; and that the node name is printed, not the cross reference name.)@refill
+period; and that the node name is printed, not the cross reference name.)
 
 You can write a clause after the cross reference, like this:@refill
 
@@ -5624,7 +5731,7 @@ within a title or other section will divide it into two arguments.  In
 a reference, you need to write a title such as ``Clouds, Mist, and
 Fog'' without the commas.@refill
 
-Also, remember to write a comma or period after the closing brace of a
+Also, remember to write a comma or period after the closing brace of an
 @code{@@xref} to terminate the cross reference.  In the following
 examples, a clause follows a terminating comma.@refill
 
@@ -5874,6 +5981,7 @@ This makes it useful as the last part of a sentence.@refill
 @noindent
 For example,
 
+@cindex Hurricanes
 @example
 For more information, see @@ref@{Hurricanes@}.
 @end example
@@ -5882,7 +5990,7 @@ For more information, see @@ref@{Hurricanes@}.
 produces
 
 @example
-For more information, see *Note Hurricanes.
+For more information, see *Note Hurricanes::.
 @end example
 
 @noindent
@@ -5901,6 +6009,7 @@ both the printed and the Info format.@refill
 @noindent
 For example,
 
+@cindex Sea surges
 @example
 @group
 Sea surges are described in @@ref@{Hurricanes@}.
@@ -5924,12 +6033,13 @@ Sea surges are described in *Note Hurricanes::.
 @end example
 
 @quotation
-@strong{Caution:} You @emph{must} write a period or comma immediately
-after an @code{@@ref} command with two or more arguments.  Otherwise,
-Info will not find the end of the cross reference entry and its
-attempt to follow the cross reference will fail.  As a general rule,
-you should write a period or comma after every @code{@@ref} command.
-This looks best in both the printed and the Info output.@refill
+@strong{Caution:} You @emph{must} write a period, comma, or right
+parenthesis immediately after an @code{@@ref} command with two or more
+arguments.  Otherwise, Info will not find the end of the cross reference
+entry and its attempt to follow the cross reference will fail.  As a
+general rule, you should write a period or comma after every
+@code{@@ref} command.  This looks best in both the printed and the Info
+output.@refill
 @end quotation
 
 @node pxref, inforef, ref, Cross References
@@ -5974,6 +6084,7 @@ of the output and not the other.@refill
 With one argument, a parenthetical cross reference looks like
 this:@refill
 
+@cindex Flooding
 @example
 @dots{} storms cause flooding (@@pxref@{Hurricanes@}) @dots{}
 @end example
@@ -6129,68 +6240,113 @@ refer to printed works for which no Info form exists.  @xref{cite, ,
 @code{@@cite}}.@refill
 
 
-@node uref,  , inforef, Cross References
-@section @code{@@uref@{@var{url}[, @var{displayed-text}]@}}
+@node uref
+@section @code{@@uref@{@var{url}[, @var{text}][, @var{replacement}]@}}
 @findex uref
 @cindex Uniform resource locator, referring to
 @cindex URL, referring to
 
-@code{@@uref} produces a reference to a uniform resource locator (URL).
-It takes one mandatory argument, the URL, and one optional argument, the
-text to display (the default is the URL itself).  In HTML output,
-@code{@@uref} produces a link you can follow.  For example:
+@cindex @code{href}, producing HTML
+@code{@@uref} produces a reference to a uniform resource locator (url).
+It takes one mandatory argument, the url, and two optional arguments
+which control the text that is displayed.  In HTML output, @code{@@uref}
+produces a link you can follow.
+
+The second argument, if specified, is the text to display (the default
+is the url itself); in Info and DVI output, but not in HTML output, the
+url is also output.
+
+@cindex Man page, reference to
+The third argument, on the other hand, if specified is also the text to
+display, but the url is @emph{not} output in any format.  This is useful
+when the text is already sufficiently referential, as in a man page.  If
+the third argument is given, the second argument is ignored.
+
+The simple one argument form, where the url is both the target and the
+text of the link:
 
 @example
-The official GNU ftp site is
-@@uref@{ftp://ftp.gnu.ai.mit.edu/pub/gnu@}
+The official GNU ftp site is @@uref@{ftp://ftp.gnu.org/gnu@}.
 @end example
 
-@noindent
-produces (in text):
+@noindent produces:
 @display
-The official GNU ftp site is
-@uref{ftp://ftp.gnu.ai.mit.edu/pub/gnu}
+The official GNU ftp site is @uref{ftp://ftp.gnu.org/gnu}.
 @end display
 
-@noindent
-whereas
+
+An example of the two-argument form:
 @example
-The official
-@@uref@{ftp://ftp.gnu.ai.mit.edu/pub/gnu,
-  GNU ftp site@} holds programs and texts.
+The official @@uref@{ftp://ftp.gnu.org/gnu, GNU ftp site@} holds
+programs and texts.
 @end example
 
-@noindent
-produces (in text):
+@noindent produces:
 @display
-The official @uref{ftp://ftp.gnu.ai.mit.edu/pub/gnu, GNU ftp site} holds
+The official @uref{ftp://ftp.gnu.org/gnu, GNU ftp site} holds
 programs and texts.
 @end display
 
-@noindent
-and (in HTML):
+@noindent that is, the Info output is this:
 @example
-The official <A HREF="ftp://ftp.gnu.ai.mit.edu/pub/gnu">GNU ftp
-site</A> holds programs and texts.
+The official GNU ftp site (ftp://ftp.gnu.org/gnu) holds
+programs and texts.
 @end example
 
-To merely indicate a URL, use @code{@@url} (@pxref{url, @code{@@url}}).
+@noindent and the HTML output is this:
+@example
+The official <a href="ftp://ftp.gnu.org/gnu">GNU ftp site</a> holds
+programs and texts.
+@end example
 
 
-@node Marking Text, Quotations and Examples, Cross References, Top
-@comment  node-name,  next,  previous,  up
+An example of the three-argument form:
+@example
+The @@uref@{http://example.org/man.cgi/1/ls,,ls(1)@} program @dots{}
+@end example
+
+@noindent produces:
+@display
+The @uref{http://example.org/man.cgi/1/ls,,ls(1)} program @dots{}
+@end display
+
+@noindent but with HTML:
+@example
+The <a href="http://example.org/man.cgi/1/ls">ls(1)</a> program @dots{}
+@end example
+
+To merely indicate a url without creating a link people can follow, use
+@code{@@url} (@pxref{url, @code{@@url}}).
+
+
+Some people prefer to display url's in the unambiguous format:
+
+@display
+<URL:http://@var{host}/@var{path}>
+@end display
+
+@noindent
+@cindex <URL: convention, not used
+You can use this form in the input file if you wish.  We feel it's not
+necessary to clutter up the output with the extra @samp{<URL:} and
+@samp{>}, since any software that tries to detect url's in text already
+has to detect them without the @samp{<URL:} to be useful.
+
+
+@node Marking Text
 @chapter Marking Words and Phrases
 @cindex Paragraph, marking text within
 @cindex Marking words and phrases
 @cindex Words and phrases, marking them
 @cindex Marking text within a paragraph
+@cindex Text, marking up
 
 In Texinfo, you can mark words and phrases in a variety of ways.
 The Texinfo formatters use this information to determine how to
 highlight the text.
 You can specify, for example, whether a word or phrase is a
 defining occurrence, a metasyntactic variable, or a symbol used in a
-program.  Also, you can emphasize text.@refill
+program.  Also, you can emphasize text, in several different ways.
 
 @menu
 * Indicating::                  How to indicate definitions, files, etc.
@@ -6215,7 +6371,7 @@ For example, in a printed manual,
 code is usually illustrated in a typewriter font;
 @code{@@code} tells @TeX{} to typeset this text in this font.  But it
 would be easy to change the way @TeX{} highlights code to use another
-font, and this change would not effect how keystroke examples are
+font, and this change would not affect how keystroke examples are
 highlighted.  If straight typesetting commands were used in the body
 of the file and you wanted to make a change, you would need to check
 every single occurrence to make sure that you were changing code and
@@ -6223,24 +6379,29 @@ not something else that should not be changed.@refill
 
 @menu
 * Useful Highlighting::         Highlighting provides useful information.
-* code::                        How to indicate code.
-* kbd::                         How to show keyboard input.
-* key::                         How to specify keys.
-* samp::                        How to show a literal sequence of characters.
-* var::                         How to indicate a metasyntactic variable.
-* file::                        How to indicate the name of a file.
-* dfn::                         How to specify a definition.
-* cite::                        How to refer to a book that is not in Info.
-* url::                         How to indicate a world wide web reference.
-* email::                       How to indicate an electronic mail address.
+* code::                        Indicating program code.
+* kbd::                         Showing keyboard input.
+* key::                         Specifying keys.
+* samp::                        Showing a literal sequence of characters.
+* var::                         Indicating metasyntactic variables.
+* env::                         Indicating environment variables.
+* file::                        Indicating file names.
+* command::                     Indicating command names.
+* option::                      Indicating option names.
+* dfn::                         Specifying definitions.
+* cite::                        Referring to books not in the  Info system.
+* acronym::                     Indicating acronyms.
+* url::                         Indicating a World Wide Web reference.
+* email::                       Indicating an electronic mail address.
 @end menu
 
+
 @node Useful Highlighting, code, Indicating, Indicating
 @ifinfo
 @subheading Highlighting Commands are Useful
 @end ifinfo
 
-The highlighting commands can be used to generate useful information
+The highlighting commands can be used to extract useful information
 from the file, such as lists of functions or file names.  It is
 possible, for example, to write a program in Emacs Lisp (or a keyboard
 macro) to insert an index entry after every paragraph that contains
@@ -6266,14 +6427,17 @@ Indicate text that is a literal example of a sequence of characters.@refill
 @item @@var@{@var{metasyntactic-variable}@}
 Indicate a metasyntactic variable.@refill
 
-@item @@url@{@var{uniform-resource-locator}@}
-Indicate a uniform resource locator for the World Wide Web.
+@item @@env@{@var{environment-variable}@}
+Indicate an environment variable.@refill
 
 @item @@file@{@var{file-name}@}
 Indicate the name of a file.@refill
 
-@item @@email@{@var{email-address}[, @var{displayed-text}]@}
-Indicate an electronic mail address.
+@item @@command@{@var{command-name}@}
+Indicate the name of a command.@refill
+
+@item @@option@{@var{option}@}
+Indicate a command-line option.@refill
 
 @item @@dfn@{@var{term}@}
 Indicate the introductory or defining use of a term.@refill
@@ -6281,43 +6445,44 @@ Indicate the introductory or defining use of a term.@refill
 @item @@cite@{@var{reference}@}
 Indicate the name of a book.@refill
 
+@item @@acronym@{@var{acronym}@}
+Indicate an acronym.@refill
+
+@item @@url@{@var{uniform-resource-locator}@}
+Indicate a uniform resource locator for the World Wide Web.
+
+@item @@email@{@var{email-address}[, @var{displayed-text}]@}
+Indicate an electronic mail address.
+
 @ignore
 @item @@ctrl@{@var{ctrl-char}@}
 Use for an @sc{ascii} control character.@refill
 @end ignore
 @end table
 
-@node code, kbd, Useful Highlighting, Indicating
-@comment  node-name,  next,  previous,  up
+
+@node code
 @subsection @code{@@code}@{@var{sample-code}@}
 @findex code
 
+@cindex Syntactic tokens, indicating
 Use the @code{@@code} command to indicate text that is a piece of a
 program and which consists of entire syntactic tokens.  Enclose the
-text in braces.@refill
+text in braces.
 
+@cindex Expressions in a program, indicating
+@cindex Keywords, indicating
+@cindex Reserved words, indicating
 Thus, you should use @code{@@code} for an expression in a program, for
 the name of a variable or function used in a program, or for a
-keyword.  Also, you should use @code{@@code} for the name of a
-program, such as @code{diff}, that is a name used in the machine. (You
-should write the name of a program in the ordinary text font if you
-regard it as a new English word, such as `Emacs' or `Bison'.)@refill
-
-Use @code{@@code} for environment variables such as @code{TEXINPUTS},
-and other variables.@refill
-
-Use @code{@@code} for command names in command languages that
-resemble programming languages, such as Texinfo or the shell.
-For example, @code{@@code} and @code{@@samp} are produced by writing
-@samp{@@code@{@@@@code@}} and @samp{@@code@{@@@@samp@}} in the Texinfo
-source, respectively.@refill
-
-Note, however, that you should not use @code{@@code} for shell options
-such as @samp{-c} when such options stand alone. (Use @code{@@samp}.)
-Also, an entire shell command often looks better if written using
-@code{@@samp} rather than @code{@@code}.  In this case, the rule is to
-choose the more pleasing format.@refill
+keyword in a programming language.
+
+Use @code{@@code} for command names in languages that resemble
+programming languages, such as Texinfo.  For example, @code{@@code} and
+@code{@@samp} are produced by writing @samp{@@code@{@@@@code@}} and
+@samp{@@code@{@@@@samp@}} in the Texinfo source, respectively.
 
+@cindex Case, not altering in @code{@@code}
 It is incorrect to alter the case of a word inside an @code{@@code}
 command when it appears at the beginning of a sentence.  Most computer
 languages are case sensitive.  In C, for example, @code{Printf} is
@@ -6325,24 +6490,8 @@ different from the identifier @code{printf}, and most likely is a
 misspelling of it.  Even in languages which are not case sensitive, it
 is confusing to a human reader to see identifiers spelled in different
 ways.  Pick one spelling and always use that.  If you do not want to
-start a sentence with a command written all in lower case, you should
-rearrange the sentence.@refill
-
-Do not use the @code{@@code} command for a string of characters shorter
-than a syntactic token.  If you are writing about @samp{TEXINPU}, which
-is just a part of the name for the @code{TEXINPUTS} environment
-variable, you should use @code{@@samp}.@refill
-
-In particular, you should not use the @code{@@code} command when writing
-about the characters used in a token; do not, for example, use
-@code{@@code} when you are explaining what letters or printable symbols
-can be used in the names of functions.  (Use @code{@@samp}.)  Also, you
-should not use @code{@@code} to mark text that is considered input to
-programs unless the input is written in a language that is like a
-programming language.  For example, you should not use @code{@@code} for
-the keystroke commands of GNU Emacs (use @code{@@kbd} instead) although
-you may use @code{@@code} for the names of the Emacs Lisp functions that
-the keystroke commands invoke.@refill
+start a sentence with a command name written all in lower case, you
+should rearrange the sentence.
 
 In the printed manual, @code{@@code} causes @TeX{} to typeset the
 argument in a typewriter face.  In the Info file, it causes the Info
@@ -6352,30 +6501,73 @@ formatting commands to use single quotation marks around the text.
 For example,
 
 @example
-Use @@code@{diff@} to compare two files.
+The function returns @@code@{nil@}.
 @end example
 
 @noindent
-produces this in the printed manual:@refill
+produces this in the printed manual:
 
 @quotation
-Use @code{diff} to compare two files.
+The function returns @code{nil}.
 @end quotation
-@iftex
 
+@iftex
 @noindent
-and this in the Info file:@refill
-
+and this in the Info file:
 @example
-Use `diff' to compare two files.
+The function returns `nil'.
 @end example
 @end iftex
 
+Here are some cases for which it is preferable not to use @code{@@code}:
+
+@itemize @bullet
+@item
+For shell command names such as @command{ls} (use @code{@@command}).
+
+@item
+For shell options such as @samp{-c} when such options stand alone (use
+@code{@@option}).
+
+@item
+Also, an entire shell command often looks better if written using
+@code{@@samp} rather than @code{@@code}.  In this case, the rule is to
+choose the more pleasing format.
+
+@item
+For environment variable such as @env{TEXINPUTS} (use @code{@@env}).
+
+@item
+For a string of characters shorter than a syntactic token.  For example,
+if you are writing about @samp{goto-ch}, which is just a part of the
+name for the @code{goto-char} Emacs Lisp function, you should use
+@code{@@samp}.
+
+@item
+In general, when writing about the characters used in a token; for
+example, do not use @code{@@code} when you are explaining what letters
+or printable symbols can be used in the names of functions.  (Use
+@code{@@samp}.)  Also, you should not use @code{@@code} to mark text
+that is considered input to programs unless the input is written in a
+language that is like a programming language.  For example, you should
+not use @code{@@code} for the keystroke commands of GNU Emacs (use
+@code{@@kbd} instead) although you may use @code{@@code} for the names
+of the Emacs Lisp functions that the keystroke commands invoke.
+
+@end itemize
+
+Since @code{@@command}, @code{@@option}, and @code{@@env} were
+introduced relatively recently, it is acceptable to use @code{@@code} or
+@code{@@samp} for command names, options, and environment variables.
+The new commands allow you to express the markup more precisely, but
+there is no real harm in using the older commands, and of course the
+long-standing manuals do so.
+
 
-@node kbd, key, code, Indicating
+@node kbd
 @subsection @code{@@kbd}@{@var{keyboard-characters}@}
 @findex kbd
-@cindex keyboard input
+@cindex Keyboard input
 
 Use the @code{@@kbd} command for characters of input to be typed by
 users.  For example, to refer to the characters @kbd{M-a},
@@ -6414,7 +6606,7 @@ Always use the same font for @code{@@kbd} as @code{@@code}.
 @item example
 Use the distinguishing font for @code{@@kbd} only in @code{@@example}
 and similar environments.
-@item example
+@item distinct
 (the default) Always use the distinguishing font for @code{@@kbd}.
 @end table
 
@@ -6548,9 +6740,7 @@ To match @samp{foo} at the end of the line, use the regexp
 
 Any time you are referring to single characters, you should use
 @code{@@samp} unless @code{@@kbd} or @code{@@key} is more appropriate.
-Use @code{@@samp} for the names of command-line options (except in an
-@code{@@table}, where @code{@@code} seems to read more easily).  Also,
-you may use @code{@@samp} for entire statements in C and for entire
+Also, you may use @code{@@samp} for entire statements in C and for entire
 shell commands---in this case, @code{@@samp} often looks better than
 @code{@@code}.  Basically, @code{@@samp} is a catchall for whatever is
 not covered by @code{@@code}, @code{@@kbd}, or @code{@@key}.@refill
@@ -6578,8 +6768,8 @@ In English, the vowels are @samp{a}, @samp{e},
 @samp{y}.
 @end quotation
 
-@node var, file, samp, Indicating
-@comment  node-name,  next,  previous,  up
+
+@node var
 @subsection @code{@@var}@{@var{metasyntactic-variable}@}
 @findex var
 
@@ -6591,26 +6781,30 @@ to that function.@refill
 
 Do not use @code{@@var} for the names of particular variables in
 programming languages.  These are specific names from a program, so
-@code{@@code} is correct for them.  For example, the Emacs Lisp variable
-@code{texinfo-tex-command} is not a metasyntactic variable; it is
-properly formatted using @code{@@code}.@refill
+@code{@@code} is correct for them (@pxref{code}).  For example, the
+Emacs Lisp variable @code{texinfo-tex-command} is not a metasyntactic
+variable; it is properly formatted using @code{@@code}.
+
+Do not use @code{@@var} for environment variables either; @code{@@env}
+is correct for them (see the next section).
 
-The effect of @code{@@var} in the Info file is to change the case of
-the argument to all upper case; in the printed manual, to italicize it.
+The effect of @code{@@var} in the Info file is to change the case of the
+argument to all upper case.  In the printed manual and HTML output, the
+argument is printed in slanted type.  
 
 @need 700
 For example,
 
 @example
 To delete file @@var@{filename@},
-type @@code@{rm @@var@{filename@}@}.
+type @@samp@{rm @@var@{filename@}@}.
 @end example
 
 @noindent
 produces
 
 @quotation
-To delete file @var{filename}, type @code{rm @var{filename}}.
+To delete file @var{filename}, type @samp{rm @var{filename}}.
 @end quotation
 
 @noindent
@@ -6650,11 +6844,32 @@ angle brackets, for example:@refill
 
 @noindent
 However, that is not the style that Texinfo uses.  (You can, of
-course, modify the sources to @TeX{} and the Info formatting commands
+course, modify the sources to @file{texinfo.tex} and the Info formatting commands
 to output the @code{<@dots{}>} format if you wish.)@refill
 
-@node file, dfn, var, Indicating
-@comment  node-name,  next,  previous,  up
+
+@node env
+@subsection @code{@@env}@{@var{environment-variable}@}
+@findex env
+
+Use the @code{@@env} command to indicate environment variables, as used
+by many operating systems, including GNU.  Do not use it for
+metasyntactic variables; use @code{@@var} instead (see the previous
+section).
+
+@code{@@env} is equivalent to @code{@@code} in its effects.
+For example:
+
+@example
+The @@env@{PATH@} environment variable sets the search path for commands.
+@end example
+@noindent produces
+@quotation
+The @env{PATH} environment variable sets the search path for commands.
+@end quotation
+
+
+@node file
 @subsection @code{@@file}@{@var{file-name}@}
 @findex file
 
@@ -6679,7 +6894,58 @@ The @file{.el} files are in
 the @file{/usr/local/emacs/lisp} directory.
 @end quotation
 
-@node dfn, cite, file, Indicating
+
+@node command
+@subsection @code{@@command}@{@var{command-name}@}
+@findex command
+@cindex Command names, indicating
+@cindex Program names, indicating
+
+Use the @code{@@command} command to indicate command names, such as
+@command{ls} or @command{cc}.
+
+@code{@@command} is equivalent to @code{@@code} in its effects.
+For example:
+
+@example
+The command @@command@{ls@} lists directory contents.
+@end example
+@noindent produces
+@quotation
+The command @command{ls} lists directory contents.
+@end quotation
+
+You should write the name of a program in the ordinary text font, rather
+than using @code{@@command}, if you regard it as a new English word,
+such as `Emacs' or `Bison'.
+
+When writing an entire shell command invocation, as in @samp{ls -l},
+you should use either @code{@@samp} or @code{@@code} at your discretion.
+
+
+@node option
+@subsection @code{@@option}@{@var{option-name}@}
+@findex option
+
+Use the @code{@@option} command to indicate a command-line option; for
+example, @option{-l} or @option{--version} or
+@option{--output=@var{filename}}.
+
+@code{@@option} is equivalent to @code{@@samp} in its effects.
+For example:
+
+@example
+The option @@option@{-l@} produces a long listing.
+@end example
+@noindent produces
+@quotation
+The option @option{-l} produces a long listing.
+@end quotation
+
+In tables, putting options inside @code{@@code} produces a
+more pleasing effect.
+
+@node dfn
 @comment  node-name,  next,  previous,  up
 @subsection @code{@@dfn}@{@var{term}@}
 @findex dfn
@@ -6708,18 +6974,18 @@ term should be a definition of the term.  The sentence does not need
 to say explicitly that it is a definition, but it should contain the
 information of a definition---it should make the meaning clear.
 
-@node cite, url, dfn, Indicating
-@comment  node-name,  next,  previous,  up
+@node cite
 @subsection @code{@@cite}@{@var{reference}@}
 @findex cite
 
 Use the @code{@@cite} command for the name of a book that lacks a
-companion Info file. The command produces italics in the printed
-manual, and quotation marks in the Info file.@refill
+companion Info file.  The command produces italics in the printed
+manual, and quotation marks in the Info file.
 
-(If a book is written in Texinfo, it is better to use a cross reference
+If a book is written in Texinfo, it is better to use a cross reference
 command since a reader can easily follow such a reference in Info.
-@xref{xref, , @code{@@xref}}.)@refill
+@xref{xref, , @code{@@xref}}.
+
 
 @ignore
 @c node ctrl, , cite, Indicating
@@ -6771,27 +7037,50 @@ identify that control character: an uparrow followed by the character
 @end ignore
 
 
-@node url, email, cite, Indicating
+@node acronym
+@subsection @code{@@acronym}@{@var{acronym}@}
+@findex acronym
+
+@cindex NASA, as acronym
+@cindex F.B.I., as acronym
+@cindex Abbreviations, tagging
+@cindex Acronyms, tagging
+Use the @code{@@acronym} command for abbreviations written in all
+capital letters, such as `@acronym{NASA}'.  The abbreviation is given as
+the single argument in braces, as in @samp{@@acronym@{NASA@}}.  As
+a matter of style, or for particular abbreviations, you may prefer to
+use periods, as in @samp{@@acronym@{F.B.I.@}}.
+
+In @TeX{} and HTML, the argument is printed in a slightly smaller font
+size.  In Info or plain text output, this command changes nothing.
+
+
+@node url
 @subsection @code{@@url}@{@var{uniform-resource-locator}@}
 @findex url
 @cindex Uniform resource locator, indicating
 @cindex URL, indicating
 
-Use the @code{@@url} to indicate a uniform resource locator on the World
-Wide Web.  This is analogous to @code{@@file}, @code{@@var}, etc., and
-is purely for markup purposes.  It does not produce a link you can
-follow in HTML output (the @code{@@uref} command does, @pxref{uref,,
-@code{@@uref}}).  It is useful for example URL's which do not actually
-exist.  For example:
+Use the @code{@@url} command to indicate a uniform resource locator on
+the World Wide Web.  This is analogous to @code{@@file}, @code{@@var},
+etc., and is purely for markup purposes.  It does not produce a link you
+can follow in HTML output (use the @code{@@uref} command for that,
+@pxref{uref,, @code{@@uref}}).  It is useful for url's which do
+not actually exist.  For example:
 
 @c Two lines because one is too long for smallbook format.
 @example
-For example, the url might be
-@@url@{http://host.domain.org/path@}.
+For example, the url might be @@url@{http://example.org/path@}.
 @end example
 
+@noindent which produces:
+
+@display
+For example, the url might be @url{http://example.org/path}.
+@end display
 
-@node email,  , url, Indicating
+
+@node email
 @subsection @code{@@email}@{@var{email-address}[, @var{displayed-text}]@}
 @findex email
 
@@ -6809,12 +7098,11 @@ For example:
 Send bug reports to @@email@{bug-texinfo@@@@gnu.org@}.
 Send suggestions to the @@email@{bug-texinfo@@@@gnu.org, same place@}.
 @end example
-@noindent
-produces
-@example
+@noindent produces
+@display
 Send bug reports to @email{bug-texinfo@@gnu.org}.
 Send suggestions to the @email{bug-texinfo@@gnu.org, same place}.
-@end example
+@end display
 
 
 @node Emphasis,  , Indicating, Marking Text
@@ -6828,27 +7116,24 @@ Most often, this is the best way to mark words.
 However, sometimes you will want to emphasize text without indicating a
 category.  Texinfo has two commands to do this.  Also, Texinfo has
 several commands that specify the font in which @TeX{} will typeset
-text.  These commands have no affect on Info and only one of them,
+text.  These commands have no effect on Info and only one of them,
 the @code{@@r} command, has any regular use.@refill
 
 @menu
 * emph & strong::               How to emphasize text in Texinfo.
 * Smallcaps::                   How to use the small caps font.
 * Fonts::                       Various font commands for printed output.
-* Customized Highlighting::     How to define highlighting commands.
 @end menu
 
-@node emph & strong, Smallcaps, Emphasis, Emphasis
-@comment  node-name,  next,  previous,  up
+@node emph & strong
 @subsection @code{@@emph}@{@var{text}@} and @code{@@strong}@{@var{text}@}
 @cindex Emphasizing text, font for
 @findex emph
 @findex strong
 
 The @code{@@emph} and @code{@@strong} commands are for emphasis;
-@code{@@strong} is stronger.  In printed output, @code{@@emph}
-produces @emph{italics} and @code{@@strong} produces
-@strong{bold}.@refill
+@code{@@strong} is stronger.  In printed output, @code{@@emph} produces
+@emph{italics} and @code{@@strong} produces @strong{bold}.
 
 @need 800
 For example,
@@ -6867,7 +7152,7 @@ files in the directory.
 produces the following in printed output:
 
 @quotation
-@strong{Caution}: @code{rm * .[^.]*} removes @emph{all}
+@strong{Caution}: @samp{rm * .[^.]*} removes @emph{all}
 files in the directory.
 @end quotation
 
@@ -6880,7 +7165,7 @@ produces:
 @end ifinfo
 
 @example
-     *Caution*: `rm * .[^.]*' removes *all*
+     *Caution*: `rm * .[^.]*' removes _all_
      files in the directory.
 @end example
 
@@ -6888,31 +7173,25 @@ The @code{@@strong} command is seldom used except to mark what is, in
 effect, a typographical element, such as the word `Caution' in the
 preceding example.
 
-In the Info file, both @code{@@emph} and @code{@@strong} put asterisks
-around the text.@refill
+In the Info output, @code{@@emph} surrounds the text with underscores
+(@samp{_}), and @code{@@strong} puts asterisks around the text.
 
 @quotation
-@strong{Caution:} Do not use @code{@@emph} or @code{@@strong} with the
-word @samp{Note}; Info will mistake the combination for a cross
-reference.  Use a phrase such as @strong{Please note} or
-@strong{Caution} instead.@refill
+@strong{Caution:} Do not use @code{@@strong} with the word @samp{Note};
+Info will mistake the combination for a cross reference.  Use a phrase
+such as @strong{Please note} or @strong{Caution} instead.
 @end quotation
 
-@node Smallcaps, Fonts, emph & strong, Emphasis
+
+@node Smallcaps
 @subsection @code{@@sc}@{@var{text}@}: The Small Caps Font
 @cindex Small caps font
 @findex sc @r{(small caps font)}
 
-@iftex
-Use the @samp{@@sc} command to set text in the printed output in @sc{a
-small caps font} and set text in the Info file in upper case letters.@refill
-@end iftex
-@ifinfo
-Use the @samp{@@sc} command to set text in the printed output in a
-small caps font and set text in the Info file in upper case letters.@refill
-@end ifinfo
-
-Write the text between braces in lower case, like this:@refill
+Use the @samp{@@sc} command to set text in the printed and the HTML
+output in @sc{a small caps font} and set text in the Info file in upper
+case letters.  Write the text you want to be in small caps (where
+possible) between braces in lower case, like this:
 
 @example
 The @@sc@{acm@} and @@sc@{ieee@} are technical societies.
@@ -6927,32 +7206,28 @@ The @sc{acm} and @sc{ieee} are technical societies.
 
 @TeX{} typesets the small caps font in a manner that prevents the
 letters from `jumping out at you on the page'.  This makes small caps
-text easier to read than text in all upper case.  The Info formatting
-commands set all small caps text in upper case.@refill
+text easier to read than text in all upper case---but it's usually
+better to use regular mixed case anyway.  The Info formatting commands
+set all small caps text in upper case.  In HTML, the text is upper-cased
+and a smaller font is used to render it.
 
-@ifinfo
-If the text between the braces of an @code{@@sc} command is upper case,
-@TeX{} typesets in full-size capitals.  Use full-size capitals
-sparingly.@refill
-@end ifinfo
-@iftex
-If the text between the braces of an @code{@@sc} command is upper case,
-@TeX{} typesets in @sc{FULL-SIZE CAPITALS}.  Use full-size capitals
-sparingly.@refill
-@end iftex
+If the text between the braces of an @code{@@sc} command is uppercase,
+@TeX{} typesets in FULL-SIZE CAPITALS.  Use full-size capitals
+sparingly, if ever, and since it's redundant to mark all-uppercase text
+with @code{@@sc}, @command{makeinfo} warns about such usage.
 
 You may also use the small caps font for a jargon word such as
-@sc{ato} (a @sc{nasa} word meaning `abort to orbit').@refill
+@sc{ato} (a @sc{nasa} word meaning `abort to orbit').
 
 There are subtleties to using the small caps font with a jargon word
 such as @sc{cdr}, a word used in Lisp programming.  In this case, you
 should use the small caps font when the word refers to the second and
 subsequent elements of a list (the @sc{cdr} of the list), but you
 should use @samp{@@code} when the word refers to the Lisp function of
-the same spelling.@refill
+the same spelling.
 
-@node Fonts, Customized Highlighting, Smallcaps, Emphasis
-@comment node-name,  next,  previous,  up
+
+@node Fonts
 @subsection Fonts for Printing, Not Info
 @cindex Fonts for printing, not for Info
 @findex i @r{(italic font)}
@@ -6996,191 +7271,78 @@ If possible, you should avoid using the other three font commands.  If
 you need to use one, it probably indicates a gap in the Texinfo
 language.@refill
 
-@node Customized Highlighting,  , Fonts, Emphasis
-@comment node-name,  next,  previous,  up
-@subsection Customized Highlighting
-@cindex Highlighting, customized
-@cindex Customized highlighting
-
-@c I think this whole section is obsolete with the advent of macros
-@c --karl, 15sep96.
-You can use regular @TeX{} commands inside of @code{@@iftex} @dots{}
-@code{@@end iftex} to create your own customized highlighting commands
-for Texinfo.  The easiest way to do this is to equate your customized
-commands with pre-existing commands, such as those for italics.  Such
-new commands work only with @TeX{}.@refill
+@node Quotations and Examples
+@chapter Quotations and Examples
 
-@findex definfoenclose
-@cindex Enclosure command for Info
-You can use the @code{@@definfoenclose} command inside of
-@code{@@ifinfo} @dots{} @code{@@end ifinfo} to define commands for Info
-with the same names as new commands for @TeX{}.
-@code{@@definfoenclose} creates new commands for Info that mark text by
-enclosing it in strings that precede and follow the text.
-@footnote{Currently, @code{@@definfoenclose} works only with
-@code{texinfo-format-buffer} and @code{texinfo-format-region}, not with
-@code{makeinfo}.}@refill
+Quotations and examples are blocks of text consisting of one or more
+whole paragraphs that are set off from the bulk of the text and
+treated differently.  They are usually indented.@refill
 
-Here is how to create a new @@-command called @code{@@phoo} that causes
-@TeX{} to typeset its argument in italics and causes Info to display the
-argument between @samp{//} and @samp{\\}.@refill
+In Texinfo, you always begin a quotation or example by writing an
+@@-command at the beginning of a line by itself, and end it by writing
+an @code{@@end} command that is also at the beginning of a line by
+itself.  For instance, you begin an example by writing @code{@@example}
+by itself at the beginning of a line and end the example by writing
+@code{@@end example} on a line by itself, at the beginning of that
+line.@refill
+@findex end
 
-@need 1300
-For @TeX{}, write the following to equate the @code{@@phoo} command with
-the existing @code{@@i} italics command:@refill
+@menu
+* Block Enclosing Commands::    Use different constructs for
+                                  different purposes.
+* quotation::                   How to write a quotation.
+* example::                     How to write an example in a fixed-width font.
+* noindent::                    How to prevent paragraph indentation.
+* lisp::                        How to illustrate Lisp code.
+* small::                       Forms for @code{@@smallbook}.
+* display::                     How to write an example in the current font.
+* format::                      How to write an example that does not narrow
+                                  the margins.
+* exdent::                      How to undo the indentation of a line.
+* flushleft & flushright::      How to push text flushleft or flushright.
+* cartouche::                   How to draw cartouches around examples.
+@end menu
 
-@example
-@group
-@@iftex
-@@global@@let@@phoo=@@i
-@@end iftex
-@end group
-@end example
+@node Block Enclosing Commands
+@section Block Enclosing Commands
 
-@noindent
-This defines @code{@@phoo} as a command that causes @TeX{} to typeset
-the argument to @code{@@phoo} in italics.  @code{@@global@@let} tells
-@TeX{} to equate the next argument with the argument that follows the
-equals sign.
+Here are commands for quotations and examples, explained further in the
+following sections:
 
-@need 1300
-For Info, write the following to tell the Info formatters to enclose the
-argument between @samp{//} and @samp{\\}:
+@table @code
+@item @@quotation
+Indicate text that is quoted. The text is filled, indented, and
+printed in a roman font by default.@refill
 
-@example
-@group
-@@ifinfo
-@@definfoenclose phoo, //, \\
-@@end ifinfo
-@end group
-@end example
+@item @@example
+Illustrate code, commands, and the like. The text is printed
+in a fixed-width font, and indented but not filled.@refill
 
-@noindent
-Write the @code{@@definfoenclose} command on a line and follow it with
-three arguments separated by commas (commas are used as separators in an
-@code{@@node} line in the same way).@refill
+@item @@smallexample
+Same as @code{@@example}, except that in @TeX{} this command typesets
+text in a smaller font for the @code{@@smallbook} format than for the
+default 8.5 by 11 inch format.
 
-@itemize @bullet
-@item
-The first argument to @code{@@definfoenclose} is the @@-command name
-@strong{without} the @samp{@@};
+@item @@lisp
+Like @code{@@example}, but specifically for illustrating Lisp code. The
+text is printed in a fixed-width font, and indented but not filled.
 
-@item
-the second argument is the Info start delimiter string; and,
-
-@item
-the third argument is the Info end delimiter string.
-@end itemize
-
-@noindent
-The latter two arguments enclose the highlighted text in the Info file.
-A delimiter string may contain spaces.  Neither the start nor end
-delimiter is required.  However, if you do not provide a start
-delimiter, you must follow the command name with two commas in a row;
-otherwise, the Info formatting commands will misinterpret the end
-delimiter string as a start delimiter string.@refill
-
-After you have defined @code{@@phoo} both for @TeX{} and for Info, you
-can then write @code{@@phoo@{bar@}} to see @samp{//bar\\}
-in Info and see
-@ifinfo
-@samp{bar} in italics in printed output.
-@end ifinfo
-@iftex
-@i{bar} in italics in printed output.
-@end iftex
-
-Note that each definition applies to its own formatter: one for @TeX{},
-the other for Info.
-
-@need 1200
-Here is another example:
-
-@example
-@group
-@@ifinfo
-@@definfoenclose headword, , :
-@@end ifinfo
-@@iftex
-@@global@@let@@headword=@@b
-@@end iftex
-@end group
-@end example
-
-@noindent
-This defines @code{@@headword} as an Info formatting command that
-inserts nothing before and a colon after the argument and as a @TeX{}
-formatting command to typeset its argument in bold.
-
-@node Quotations and Examples, Lists and Tables, Marking Text, Top
-@comment  node-name,  next,  previous,  up
-@chapter Quotations and Examples
-
-Quotations and examples are blocks of text consisting of one or more
-whole paragraphs that are set off from the bulk of the text and
-treated differently.  They are usually indented.@refill
-
-In Texinfo, you always begin a quotation or example by writing an
-@@-command at the beginning of a line by itself, and end it by writing
-an @code{@@end} command that is also at the beginning of a line by
-itself.  For instance, you begin an example by writing @code{@@example}
-by itself at the beginning of a line and end the example by writing
-@code{@@end example} on a line by itself, at the beginning of that
-line.@refill
-@findex end
-
-@menu
-* Block Enclosing Commands::    Use different constructs for
-                                  different purposes.
-* quotation::                   How to write a quotation.
-* example::                     How to write an example in a fixed-width font.
-* noindent::                    How to prevent paragraph indentation.
-* Lisp Example::                How to illustrate Lisp code.
-* smallexample & smalllisp::    Forms for the @code{@@smallbook} option.
-* display::                     How to write an example in the current font.
-* format::                      How to write an example that does not narrow
-                                  the margins.
-* exdent::                      How to undo the indentation of a line.
-* flushleft & flushright::      How to push text flushleft or flushright.
-* cartouche::                   How to draw cartouches around examples.
-@end menu
-
-@node Block Enclosing Commands, quotation, Quotations and Examples, Quotations and Examples
-@section The Block Enclosing Commands
-
-Here are commands for quotations and examples:@refill
-
-@table @code
-@item @@quotation
-Indicate text that is quoted. The text is filled, indented, and
-printed in a roman font by default.@refill
-
-@item @@example
-Illustrate code, commands, and the like. The text is printed
-in a fixed-width font, and indented but not filled.@refill
-
-@item @@lisp
-Illustrate Lisp code. The text is printed in a fixed-width font,
-and indented but not filled.@refill
-
-@item @@smallexample
-Illustrate code, commands, and the like.  Similar to
-@code{@@example}, except that in @TeX{} this command typesets text in
-a smaller font for the smaller @code{@@smallbook} format than for the
-8.5 by 11 inch format.@refill
-
-@item @@smalllisp
-Illustrate Lisp code.  Similar to @code{@@lisp}, except that
-in @TeX{} this command typesets text in a smaller font for the smaller
-@code{@@smallbook} format than for the 8.5 by 11 inch format.@refill
+@item @@smalllisp
+Is to @code{@@lisp} as @code{@@smallexample} is to @code{@@example}.
 
 @item @@display
 Display illustrative text.  The text is indented but not filled, and
-no font is specified (so, by default, the font is roman).@refill
+no font is selected (so, by default, the font is roman).@refill
+
+@item @@smalldisplay
+Is to @code{@@display} as @code{@@smallexample} is to @code{@@example}.
 
 @item @@format
-Print illustrative text.  The text is not indented and not filled
-and no font is specified (so, by default, the font is roman).@refill
+Like @code{@@display} (the text is not filled and no font is selected),
+but the text is not indented.
+
+@item @@smallformat
+Is to @code{@@format} as @code{@@smallexample} is to @code{@@example}.
 @end table
 
 The @code{@@exdent} command is used within the above constructs to
@@ -7195,18 +7357,16 @@ paragraph.@refill
 
 You can use the @code{@@cartouche} command within one of the above
 constructs to highlight the example or quotation by drawing a box with
-rounded corners around it.  (The @code{@@cartouche} command affects
-only the printed manual; it has no effect in the Info file; see
-@ref{cartouche, , Drawing Cartouches Around Examples}.)@refill
+rounded corners around it.  @xref{cartouche, , Drawing Cartouches Around
+Examples}.
 
-@node quotation, example, Block Enclosing Commands, Quotations and Examples
-@comment  node-name,  next,  previous,  up
+
+@node quotation
 @section @code{@@quotation}
 @cindex Quotations
 @findex quotation
 
-The text of a quotation is
-processed normally except that:@refill
+The text of a quotation is processed normally except that:
 
 @itemize @bullet
 @item
@@ -7248,8 +7408,8 @@ produces
 This is a foo.
 @end quotation
 
-@node example, noindent, quotation, Quotations and Examples
-@comment  node-name,  next,  previous,  up
+
+@node example
 @section @code{@@example}
 @cindex Examples, formatting them
 @cindex Formatting examples
@@ -7275,10 +7435,9 @@ obtained by indenting each line with five spaces.
 @end example
 
 Write an @code{@@example} command at the beginning of a line by itself.
-This line will disappear from the output.  Mark the end of the example
+Mark the end of the example
 with an @code{@@end example} command, also written at the beginning of a
-line by itself.  The @code{@@end example} will disappear from the
-output.@refill
+line by itself.@refill
 
 @need 700
 For example,
@@ -7296,12 +7455,14 @@ produces
 mv foo bar
 @end example
 
-Since the lines containing @code{@@example} and @code{@@end example}
-will disappear, you should put a blank line before the
-@code{@@example} and another blank line after the @code{@@end
-example}.  (Remember that blank lines between the beginning
+The lines containing @code{@@example} and @code{@@end example}
+will disappear from the output.
+To make the output look good,
+you should put a blank line before the
+@code{@@example} and another blank line after the @code{@@end example}.
+Note that blank lines inside the beginning
 @code{@@example} and the ending @code{@@end example} will appear in
-the output.)@refill
+the output.@refill
 
 @quotation
 @strong{Caution:} Do not use tabs in the lines of an example (or anywhere
@@ -7312,7 +7473,7 @@ convert tabs in a region to multiple spaces.)@refill
 @end quotation
 
 Examples are often, logically speaking, ``in the middle'' of a
-paragraph, and the text continues after an example should not be
+paragraph, and the text that continues after an example should not be
 indented.  The @code{@@noindent} command prevents a piece of text from
 being indented as if it were a new paragraph.
 @ifinfo
@@ -7323,8 +7484,8 @@ being indented as if it were a new paragraph.
 embedded within sentences, not set off from preceding and following
 text.  @xref{code, , @code{@@code}}.)
 
-@node noindent, Lisp Example, example, Quotations and Examples
-@comment  node-name,  next,  previous,  up
+
+@node noindent
 @section @code{@@noindent}
 @findex noindent
 
@@ -7381,11 +7542,11 @@ Do not put braces after an @code{@@noindent} command; they are not
 necessary, since @code{@@noindent} is a command used outside of
 paragraphs (@pxref{Command Syntax}).@refill
 
-@node Lisp Example, smallexample & smalllisp, noindent, Quotations and Examples
-@comment  node-name,  next,  previous,  up
+
+@node lisp
 @section @code{@@lisp}
-@cindex Lisp example
 @findex lisp
+@cindex Lisp example
 
 The @code{@@lisp} command is used for Lisp code.  It is synonymous
 with the @code{@@example} command.
@@ -7400,44 +7561,43 @@ regarding the nature of the example.  This is useful, for example, if
 you write a function that evaluates only and all the Lisp code in a
 Texinfo file.  Then you can use the Texinfo file as a Lisp
 library.@footnote{It would be straightforward to extend Texinfo to work
-in a similar fashion for C, Fortran, or other languages.}@refill
+in a similar fashion for C, Fortran, or other languages.}
 
 Mark the end of @code{@@lisp} with @code{@@end lisp} on a line by
 itself.@refill
 
-@node smallexample & smalllisp, display, Lisp Example, Quotations and Examples
-@comment  node-name,  next,  previous,  up
-@section @code{@@smallexample} and @code{@@smalllisp}
+
+@node small
+@section @code{@@small@dots{}} Block Commands
 @cindex Small book example
 @cindex Example for a small book
 @cindex Lisp example for a small book
+@findex smalldisplay
 @findex smallexample
+@findex smallformat
 @findex smalllisp
 
 In addition to the regular @code{@@example} and @code{@@lisp} commands,
-Texinfo has two other ``example-style'' commands.  These are the
-@code{@@smallexample} and @code{@@smalllisp} commands.  Both these
-commands are designed for use with the @code{@@smallbook} command that
-causes @TeX{} to produce a printed manual in a 7 by 9.25 inch format
-rather than the regular 8.5 by 11 inch format.@refill
-
-In @TeX{}, the @code{@@smallexample} and @code{@@smalllisp} commands
-typeset text in a smaller font for the smaller @code{@@smallbook}
-format than for the 8.5 by 11 inch format.  Consequently, many examples
-containing long lines fit in a narrower, @code{@@smallbook} page
-without needing to be shortened.  Both commands typeset in the normal
-font size when you format for the 8.5 by 11 inch size; indeed,
-in this situation, the @code{@@smallexample} and @code{@@smalllisp}
-commands are defined to be the @code{@@example} and @code{@@lisp}
-commands.@refill
-
-In Info, the @code{@@smallexample} and @code{@@smalllisp} commands are
-equivalent to the @code{@@example} and @code{@@lisp} commands, and work
-exactly the same.@refill
-
-Mark the end of @code{@@smallexample} or @code{@@smalllisp} with
-@code{@@end smallexample} or @code{@@end smalllisp},
-respectively.@refill
+Texinfo has ``small'' example-style commands.  These are
+@code{@@smalldisplay}, @code{@@smallexample}, @code{@@smallformat}, and
+@code{@@smalllisp}.  All of these commands are designed for use with the
+@code{@@smallbook} command (which causes @TeX{} to format a printed book for
+a 7 by 9.25 inch trim size rather than the default 8.5 by 11 inch size).
+
+In @TeX{}, the @code{@@small@dots{}} commands typeset text in a smaller
+font for the smaller @code{@@smallbook} format than for the 8.5 by 11
+inch format.  Consequently, many examples containing long lines fit in a
+narrower, @code{@@smallbook} page without needing to be shortened.  Both
+commands typeset in the normal font size when you format for the 8.5 by
+11 inch size.  Indeed, in this situation, the @code{@@small@dots{}}
+commands are equivalent to their non-small versions.
+
+In Info, the @code{@@small@dots{}} commands are also equivalent to their
+non-small companion commands.
+
+Mark the end of an @code{@@small@dots{}} block with a corresponding
+@code{@@end small@dots{}}.  For example, pair @code{@@smallexample} with
+@code{@@end smallexample}.
 
 @iftex
 Here is an example written in the small font used by the
@@ -7448,7 +7608,7 @@ Here is an example written in the small font used by the
 @tex
 % Remove extra vskip; this is a kludge to counter the effect of display
 \vskip-3\baselineskip
-{\ninett
+{\smalltt
 \dots{} to make sure that you have the freedom to
 distribute copies of free software (and charge for
 this service if you wish), that you receive source
@@ -7478,21 +7638,21 @@ this text appears in a smaller font.
 @end smallexample
 @end ifinfo
 
-The @code{@@smallexample} and @code{@@smalllisp} commands make it
-easier to prepare smaller format manuals without forcing you to edit
-examples by hand to fit them onto narrower pages.@refill
+The @code{@@small@dots{}} commands make it easier to prepare smaller
+format manuals without forcing you to edit examples by hand to fit them
+onto narrower pages.@refill
 
-As a general rule, a printed document looks better if you write all the
-examples in a chapter consistently in @code{@@example} or in
-@code{@@smallexample}.  Only occasionally should you mix the two
-formats.@refill
+As a general rule, a printed document looks better if you use only one
+of (for example) @code{@@example} or in @code{@@smallexample}
+consistently within a chapter.  Only occasionally should you mix the two
+formats.
 
 @xref{smallbook, , Printing ``Small'' Books}, for more information
 about the @code{@@smallbook} command.@refill
 
-@node display, format, smallexample & smalllisp, Quotations and Examples
-@comment  node-name,  next,  previous,  up
-@section @code{@@display}
+
+@node display
+@section @code{@@display} and @code{@@smalldisplay}
 @cindex Display formatting
 @findex display
 
@@ -7510,9 +7670,14 @@ and an @code{@@end display} command.  The @code{@@display} command
 indents the text, but does not fill it.
 @end display
 
-@node format, exdent, display, Quotations and Examples
-@comment  node-name,  next,  previous,  up
-@section @code{@@format}
+@findex smalldisplay
+Texinfo also provides a command @code{@@smalldisplay}, which is like
+@code{@@display} but uses a smaller font in @code{@@smallbook} format.
+@xref{small}.
+
+
+@node format
+@section @code{@@format} and @code{@@smallformat}
 @findex format
 
 The @code{@@format} command is similar to @code{@@example} except
@@ -7526,7 +7691,14 @@ from this example,
 the @code{@@format} command does not fill the text.
 @end format
 
-@node exdent, flushleft & flushright, format, Quotations and Examples
+@findex smallformat
+Texinfo also provides a command @code{@@smallformat}, which is like
+@code{@@format} but uses a smaller font in @code{@@smallbook} format.
+@xref{small}.
+
+
+
+@node exdent
 @section @code{@@exdent}: Undoing a Line's Indentation
 @cindex Indentation undoing
 @findex exdent
@@ -7636,8 +7808,8 @@ further highlight an example or quotation.  For instance, you could
 write a manual in which one type of example is surrounded by a cartouche
 for emphasis.@refill
 
-The @code{@@cartouche} command affects only the printed manual; it has
-no effect in the Info file.@refill
+@code{@@cartouche} affects only the printed manual; it has no effect in
+other output files.
 
 @need 1500
 For example,
@@ -7689,8 +7861,8 @@ the first column; multi-column tables are also supported.
 * Multi-column Tables::         How to construct generalized tables.
 @end menu
 
-@ifinfo
 @node Introducing Lists, itemize, Lists and Tables, Lists and Tables
+@ifinfo
 @heading Introducing Lists
 @end ifinfo
 
@@ -7759,12 +7931,12 @@ Enumerated lists, using numbers or letters.
 @item @@table
 @itemx @@ftable
 @itemx @@vtable
-Two-column tables with indexing.
+Two-column tables, optionally with indexing.
 @end table
 
-@node itemize, enumerate, Introducing Lists, Lists and Tables
-@comment  node-name,  next,  previous,  up
-@section Making an Itemized List
+
+@node itemize
+@section @code{@@itemize}: Making an Itemized List
 @cindex Itemization
 @findex itemize
 
@@ -7772,23 +7944,26 @@ The @code{@@itemize} command produces sequences of indented
 paragraphs, with a bullet or other mark inside the left margin
 at the beginning of each paragraph for which such a mark is desired.@refill
 
+@cindex @code{@@w}, for blank items
 Begin an itemized list by writing @code{@@itemize} at the beginning of
 a line.  Follow the command, on the same line, with a character or a
 Texinfo command that generates a mark.  Usually, you will write
 @code{@@bullet} after @code{@@itemize}, but you can use
-@code{@@minus}, or any character or any special symbol that results in
-a single character in the Info file.  (When you write @code{@@bullet}
-or @code{@@minus} after an @code{@@itemize} command, you may omit the
-@samp{@{@}}.)@refill
+@code{@@minus}, or any command or character that results in a single
+character in the Info file.  If you don't want any mark at all, use
+@code{@@w}.  (When you write the mark command such as
+@code{@@bullet} after an @code{@@itemize} command, you may omit the
+@samp{@{@}}.)  If you don't specify a mark command, the default is
+@code{@@bullet}.
 
 Write the text of the indented paragraphs themselves after the
 @code{@@itemize}, up to another line that says @code{@@end
 itemize}.@refill
 
-Before each paragraph for which a mark in the margin is desired, write
-a line that says just @code{@@item}.  Do not write any other text on this
-line.@refill
 @findex item
+Before each paragraph for which a mark in the margin is desired, write a
+line that says just @code{@@item}.  It is ok to have text following the
+@code{@@item}.
 
 Usually, you should put a blank line before an @code{@@item}.  This
 puts a blank line in the Info file. (@TeX{} inserts the proper
@@ -7796,8 +7971,8 @@ interline whitespace in either case.)  Except when the entries are
 very brief, these blank lines make the list look better.@refill
 
 Here is an example of the use of @code{@@itemize}, followed by the
-output it produces.  Note that @code{@@bullet} produces an @samp{*} in
-Info and a round dot in @TeX{}.@refill
+output it produces.  @code{@@bullet} produces an @samp{*} in Info and a
+round dot in @TeX{}.
 
 @example
 @group
@@ -7870,9 +8045,9 @@ Second outer item.
 @end itemize
 @end quotation
 
-@node enumerate, Two-column Tables, itemize, Lists and Tables
-@comment  node-name,  next,  previous,  up
-@section Making a Numbered or Lettered List
+
+@node enumerate
+@section @code{@@enumerate}: Making a Numbered or Lettered List
 @cindex Enumeration
 @findex enumerate
 
@@ -7886,18 +8061,18 @@ letter as an option.  Without an argument, @code{@@enumerate} starts the
 list with the number @samp{1}.  With a numeric argument, such as
 @samp{3}, the command starts the list with that number.  With an upper
 or lower case letter, such as @samp{a} or @samp{A}, the command starts
-the list with that letter.@refill
+the list with that letter.
 
 Write the text of the enumerated list in the same way you write an
 itemized list: put @code{@@item} on a line of its own before the start
 of each paragraph that you want enumerated.  Do not write any other text
-on the line beginning with @code{@@item}.@refill
+on the line beginning with @code{@@item}.
 
 You should put a blank line between entries in the list.
-This generally makes it easier to read the Info file.@refill
+This generally makes it easier to read the Info file.
 
 @need 1500
-Here is an example of @code{@@enumerate} without an argument:@refill
+Here is an example of @code{@@enumerate} without an argument:
 
 @example
 @group
@@ -8004,8 +8179,8 @@ exhibits, and command-line option summaries.
 * itemx::                       How to put more entries in the first column.
 @end menu
 
-@ifinfo
 @node table, ftable vtable, Two-column Tables, Two-column Tables
+@ifinfo
 @subheading Using the @code{@@table} Command
 
 Use the @code{@@table} command to produce two-column tables.@refill
@@ -8034,6 +8209,7 @@ commands output the first column entries without added highlighting
 listed here.  However, you can only use commands that normally take
 arguments in braces.)@refill
 
+@findex item
 Begin each table entry with an @code{@@item} command at the beginning
 of a line.  Write the first column text on the same line as the
 @code{@@item} command.  Write the second column text on the line
@@ -8041,8 +8217,7 @@ following the @code{@@item} line and on subsequent lines.  (You do not
 need to type anything for an empty second column entry.)  You may
 write as many lines of supporting text as you wish, even several
 paragraphs.  But only text on the same line as the @code{@@item} will
-be placed in the first column.@refill
-@findex item
+be placed in the first column, including any footnote.
 
 Normally, you should put a blank line before an @code{@@item} line.
 This puts a blank like in the Info file.  Except when the entries are
@@ -8080,8 +8255,8 @@ If you want to list two or more named items with a single block of
 text, use the @code{@@itemx} command.  (@xref{itemx, ,
 @code{@@itemx}}.)@refill
 
-@node ftable vtable, itemx, table, Two-column Tables
-@comment  node-name,  next,  previous,  up
+
+@node ftable vtable
 @subsection @code{@@ftable} and @code{@@vtable}
 @cindex Tables with indexes
 @cindex Indexing table entries automatically
@@ -8095,8 +8270,8 @@ functions and @code{@@vtable} automatically enters each of the items in
 the first column of the table into the index of variables.  This
 simplifies the task of creating indices.  Only the items on the same
 line as the @code{@@item} commands are indexed, and they are indexed in
-exactly the form that they appear on that line.  @xref{Indices, ,
-Creating Indices}, for more information about indices.@refill
+exactly the form that they appear on that line.  @xref{Indices},
+for more information about indices.@refill
 
 Begin a two-column table using @code{@@ftable} or @code{@@vtable} by
 writing the @@-command at the beginning of a line, followed on the same
@@ -8107,8 +8282,7 @@ itself.
 
 See the example for @code{@@table} in the previous section.
 
-@node itemx,  , ftable vtable, Two-column Tables
-@comment  node-name,  next,  previous,  up
+@node itemx
 @subsection @code{@@itemx}
 @cindex Two named items for @code{@@table}
 @findex itemx
@@ -8120,7 +8294,6 @@ line of its own.  Use @code{@@itemx} for all but the first entry;
 @code{@@itemx} command works exactly like @code{@@item} except that it
 does not generate extra vertical space above the first column text.
 
-@need 1000
 For example,
 
 @example
@@ -8169,7 +8342,7 @@ multitable} completes the table.  Details in the sections below.
 * Multitable Rows::             Defining multitable rows, with examples.
 @end menu
 
-@node Multitable Column Widths, Multitable Rows, Multi-column Tables, Multi-column Tables
+@node Multitable Column Widths
 @subsection Multitable Column Widths
 @cindex Multitable column widths
 @cindex Column widths, defining for multitables
@@ -8192,10 +8365,9 @@ To specify column widths as fractions of the line length, write
 @@multitable @@columnfractions .33 .33 .33
 @end example
 
-@noindent
-The fractions need not add up exactly to 1.0, as these do
+@noindent The fractions need not add up exactly to 1.0, as these do
 not.  This allows you to produce tables that do not need the full line
-length.
+length.  You can use a leading zero if you wish.
 
 @item
 @cindex Prototype row, column widths defined by
@@ -8225,7 +8397,7 @@ particularly likely to be useful.
 @cindex Rows, of a multitable
 
 @findex item
-@cindex tab
+@findex tab
 After the @code{@@multitable} command defining the column widths (see
 the previous section), you begin each row in the body of a multitable
 with @code{@@item}, and separate the column entries with @code{@@tab}.
@@ -8234,7 +8406,7 @@ input lines in your source file as necessary.
 
 Here is a complete example of a multi-column table (the text is from
 @cite{The GNU Emacs Manual}, @pxref{Split Window,, Splitting Windows,
-xemacs, XEmacs User's Manual}):
+emacs, The GNU Emacs Manual}):
 
 @example
 @@multitable @@columnfractions .15 .45 .4
@@ -8254,8 +8426,7 @@ split that window.
 @@end multitable
 @end example
 
-@noindent
-produces:
+@noindent produces:
 
 @multitable @columnfractions .15 .45 .4
 @item Key @tab Command @tab Description
@@ -8276,9 +8447,8 @@ split that window.
 
 @node Indices, Insertions, Lists and Tables, Top
 @comment node-name,  next,  previous,  up
-@chapter Creating Indices
+@chapter Indices
 @cindex Indices
-@cindex Creating indices
 
 Using Texinfo, you can generate indices without having to sort and
 collate entries manually.  In an index, the entries are listed in
@@ -8414,17 +8584,6 @@ command; that would be a spelling error.
 
 Whichever case convention you use, please use it consistently!
 
-@ignore
-Concept index entries consist of English text.  The usual convention
-is to capitalize the first word of each such index entry, unless that
-word is the name of a function, variable, or other such entity that
-should not be capitalized.  However, if your concept index entries are
-consistently short (one or two words each) it may look better for each
-regular entry to start with a lower case letter, aside from proper
-names and acronyms that always call for upper case letters.  Whichever
-convention you adapt, please be consistent!
-@end ignore
-
 Entries in indices other than the concept index are symbol names in
 programming languages, or program names; these names are usually
 case-sensitive, so use upper and lower case as required for them.
@@ -8469,24 +8628,11 @@ Make an entry in the data type index for @var{data type}.@refill
 
 @quotation
 @strong{Caution:} Do not use a colon in an index entry.  In Info, a
-colon separates the menu entry name from the node name.  An extra
-colon confuses Info.
-@xref{Menu Parts, , The Parts of a Menu},
-for more information about the structure of a menu entry.@refill
+colon separates the menu entry name from the node name, so a colon in
+the entry itself confuses Info.  @xref{Menu Parts, , The Parts of a
+Menu}, for more information about the structure of a menu entry.
 @end quotation
 
-If you write several identical index entries in different places in a
-Texinfo file, the index in the printed manual will list all the pages to
-which those entries refer.  However, the index in the Info file will
-list @strong{only} the node that references the @strong{first} of those
-index entries.  Therefore, it is best to write indices in which each
-entry refers to only one place in the Texinfo file.  Fortunately, this
-constraint is a feature rather than a loss since it means that the index
-will be easy to use.  Otherwise, you could create an index that lists
-several pages for one entry and your reader would not know to which page
-to turn.  If you have two identical entries for one topic, change the
-topics slightly, or qualify them to indicate the difference.@refill
-
 You are not actually required to use the predefined indices for their
 canonical purposes.  For example, suppose you wish to index some C
 preprocessor macros.  You could put them in the function index along
@@ -8678,8 +8824,7 @@ You should define new indices within or right after the end-of-header
 line of a Texinfo file, before any @code{@@synindex} or
 @code{@@syncodeindex} commands (@pxref{Header}).@refill
 
-@node Insertions, Breaks, Indices, Top
-@comment  node-name,  next,  previous,  up
+@node Insertions
 @chapter Special Insertions
 @cindex Inserting special characters and symbols
 @cindex Special insertions
@@ -8692,12 +8837,17 @@ elements that do not correspond to simple characters you can type.
 These are:
 
 @itemize @bullet
-@item Braces, @samp{@@} and periods.
+@item Braces and @samp{@@}.
 @item Whitespace within and around a sentence.
 @item Accents.
 @item Dots and bullets.
 @item The @TeX{} logo and the copyright symbol.
+@item The pounds currency symbol.
+@item The minus sign.
 @item Mathematical expressions.
+@item Glyphs for evaluation, macros, errors, etc.
+@item Footnotes.
+@item Images.
 @end itemize
 @end iftex
 
@@ -8714,6 +8864,7 @@ These are:
 * math::                        How to format a mathematical expression.
 * Glyphs::                      How to indicate results of evaluation,
                                   expansion of macros, errors, etc.
+* Footnotes::                   How to include footnotes.
 * Images::                      How to include graphics.
 @end menu
 
@@ -8747,7 +8898,8 @@ output.
 
 Do not put braces after an @code{@@@@} command.
 
-@node Inserting Braces,  , Inserting An Atsign, Braces Atsigns
+
+@node Inserting Braces
 @subsection Inserting @samp{@{} and @samp{@}}with @@@{ and @@@}
 @findex @{ @r{(single @samp{@{})}
 @findex @} @r{(single @samp{@}})}
@@ -8762,12 +8914,11 @@ Do not put braces after either an @code{@@@{} or an @code{@@@}}
 command.
 
 
-@node Inserting Space, Inserting Accents, Braces Atsigns, Insertions
+@node Inserting Space
 @section Inserting Space
 
 @cindex Inserting space
 @cindex Spacing, inserting
-@cindex Whitespace, inserting
 The following sections describe commands that control spacing of various
 kinds within and after sentences.
 
@@ -8778,7 +8929,8 @@ kinds within and after sentences.
 * dmn::                         How to format a dimension.
 @end menu
 
-@node Not Ending a Sentence, Ending a Sentence, Inserting Space, Inserting Space
+
+@node Not Ending a Sentence
 @subsection Not Ending a Sentence
 
 @cindex Not ending a sentence
@@ -8786,13 +8938,13 @@ kinds within and after sentences.
 @cindex Periods, inserting
 Depending on whether a period or exclamation point or question mark is
 inside or at the end of a sentence, less or more space is inserted after
-a period in a typeset manual.  Since it is not always possible for
-Texinfo to determine when a period ends a sentence and when it is used
+a period in a typeset manual.  Since it is not always possible
+to determine when a period ends a sentence and when it is used
 in an abbreviation, special commands are needed in some circumstances.
-(Usually, Texinfo can guess how to handle periods, so you do not need to
+Usually, Texinfo can guess how to handle periods, so you do not need to
 use the special commands; you just enter a period as you would if you
 were using a typewriter, which means you put two spaces after the
-period, question mark, or exclamation mark that ends a sentence.)
+period, question mark, or exclamation mark that ends a sentence.
 
 @findex : @r{(suppress widening)}
 Use the @code{@@:}@: command after a period, question mark,
@@ -8800,7 +8952,6 @@ exclamation mark, or colon that should not be followed by extra space.
 For example, use @code{@@:}@: after periods that end abbreviations
 which are not at the ends of sentences.
 
-@need 700
 For example,
 
 @example
@@ -8871,8 +9022,7 @@ In the Info file output, @code{@@.}@: is equivalent to a simple
 
 The meanings of @code{@@:} and @code{@@.}@: in Texinfo are designed to
 work well with the Emacs sentence motion commands (@pxref{Sentences,,,
-xemacs, XEmacs User's Manual}).  This made it necessary for them to be
-incompatible with some other formatting systems that use @@-commands.
+emacs, The GNU Emacs Manual}).
 
 Do not put braces after any of these commands.
 
@@ -8882,6 +9032,7 @@ Do not put braces after any of these commands.
 
 @cindex Multiple spaces
 @cindex Whitespace, inserting
+@cindex Space, inserting horizontal
 @findex (space)
 @findex (tab)
 @findex (newline)
@@ -8909,8 +9060,7 @@ Spacey@@ @@ @@ @@
 example.
 @end example
 
-@noindent
-produces
+@noindent produces
 
 @example
 Spacey@ @ @ @
@@ -8923,7 +9073,7 @@ Other possible uses of @code{@@@kbd{SPACE}} have been subsumed by
 Do not follow any of these commands with braces.
 
 
-@node dmn,  , Multiple Spaces, Inserting Space
+@node dmn
 @subsection @code{@@dmn}@{@var{dimension}@}: Format a Dimension
 @cindex Thin space between number, dimension
 @cindex Dimension formatting
@@ -8935,7 +9085,7 @@ At times, you may want to write @samp{12@dmn{pt}} or
 abbreviation for the dimension.  You can use the @code{@@dmn} command
 to do this.  On seeing the command, @TeX{} inserts just enough space
 for proper typesetting; the Info formatting commands insert no space
-at all, since the Info file does not require it.@refill
+at all, since the Info file does not require it.
 
 To use the @code{@@dmn} command, write the number and then follow it
 immediately, with no intervening space, by @code{@@dmn}, and then by
@@ -8958,10 +9108,10 @@ In these cases, however, the formatters may insert a line break between
 the number and the dimension, so use @code{@@w} (@pxref{w}).  Also, if
 you write a period after an abbreviation within a sentence, you should
 write @samp{@@:} after the period to prevent @TeX{} from inserting extra
-whitespace, as shown here.  @xref{Inserting Space}.
+whitespace, as shown here.  @xref{Not Ending a Sentence}.
 
 
-@node Inserting Accents, Dots Bullets, Inserting Space, Insertions
+@node Inserting Accents
 @section Inserting Accents
 
 @cindex Inserting accents
@@ -8992,7 +9142,7 @@ possible, since accented characters are very common in some languages.
 @findex dotaccent
 @cindex Dot accent
 @findex H
-@cindex Hungariam umlaut accent
+@cindex Hungarian umlaut accent
 @findex ringaccent
 @cindex Ring accent
 @findex tieaccent
@@ -9060,22 +9210,22 @@ commonly used in languages other than English.
 @cindex Es-zet
 @cindex Sharp S
 @cindex German S
-@multitable {@@questiondown@{@}} {oe,OE} {es-zet or sharp S}
+@multitable {x@@questiondown@{@} } {oe,OE} {es-zet or sharp S}
 @item @t{@@exclamdown@{@}}   @tab @exclamdown{}   @tab upside-down !
 @item @t{@@questiondown@{@}} @tab @questiondown{} @tab upside-down ?
-@item @t{@@aa@{@},@@AA@{@}}  @tab @aa{},@AA{}     @tab A,a with circle
+@item @t{@@aa@{@},@@AA@{@}}  @tab @aa{},@AA{}     @tab a,A with circle
 @item @t{@@ae@{@},@@AE@{@}}  @tab @ae{},@AE{}     @tab ae,AE ligatures
 @item @t{@@dotless@{i@}}     @tab @dotless{i}     @tab dotless i
 @item @t{@@dotless@{j@}}     @tab @dotless{j}     @tab dotless j
 @item @t{@@l@{@},@@L@{@}}    @tab @l{},@L{}       @tab suppressed-L,l
 @item @t{@@o@{@},@@O@{@}}    @tab @o{},@O{}       @tab O,o with slash
-@item @t{@@oe@{@},@@OE@{@}}  @tab @oe{},@OE{}     @tab OE,oe ligatures
+@item @t{@@oe@{@},@@OE@{@}}  @tab @oe{},@OE{}     @tab oe,OE ligatures
 @item @t{@@ss@{@}}           @tab @ss{}           @tab es-zet or sharp S
 @end multitable
 
 
-@node Dots Bullets, TeX and copyright, Inserting Accents, Insertions
-@section Inserting Ellipsis, Dots, and Bullets
+@node Dots Bullets
+@section Inserting Ellipsis and Bullets
 @cindex Dots, inserting
 @cindex Bullets, inserting
 @cindex Ellipsis, inserting
@@ -9099,9 +9249,10 @@ the braces, the formatters would be confused.  @xref{Command Syntax, ,
 @end menu
 
 
-@node dots, bullet, Dots Bullets, Dots Bullets
-@subsection @code{@@dots}@{@} (@dots{})
+@node dots
+@subsection @code{@@dots}@{@} (@dots{}) and @code{@@enddots}@{@} (@enddots{})
 @findex dots
+@findex enddots
 @cindex Inserting dots
 @cindex Dots, inserting
 
@@ -9123,7 +9274,7 @@ the dots in the ellipsis.
 @end iftex
 
 
-@node bullet,  , dots, Dots Bullets
+@node bullet
 @subsection @code{@@bullet}@{@} (@bullet{})
 @findex bullet
 
@@ -9152,7 +9303,7 @@ braces.@refill
 @end menu
 
 
-@node tex, copyright symbol, TeX and copyright, TeX and copyright
+@node tex
 @subsection @code{@@TeX}@{@} (@TeX{})
 @findex tex (command)
 
@@ -9160,10 +9311,10 @@ Use the @code{@@TeX@{@}} command to generate `@TeX{}'.  In a printed
 manual, this is a special logo that is different from three ordinary
 letters.  In Info, it just looks like @samp{TeX}.  The
 @code{@@TeX@{@}} command is unique among Texinfo commands in that the
-@kbd{T} and the @kbd{X} are in upper case.@refill
+@samp{T} and the @samp{X} are in upper case.@refill
 
 
-@node copyright symbol,  , tex, TeX and copyright
+@node copyright symbol
 @subsection @code{@@copyright}@{@} (@copyright{})
 @findex copyright
 
@@ -9173,7 +9324,7 @@ this is @samp{(C)}.@refill
 
 
 @node pounds, minus, TeX and copyright, Insertions
-@section @code{@@pounds@{@}} (@pounds{}): Pounds Sterling
+@section @code{@@pounds}@{@} (@pounds{}): Pounds Sterling
 @findex pounds
 
 Use the @code{@@pounds@{@}} command to generate `@pounds{}'.  In a
@@ -9213,7 +9364,7 @@ an itemized list, you do not need to type the braces
 
 
 @node math, Glyphs, minus, Insertions
-@section @code{@@math} - Inserting Mathematical Expressions
+@section @code{@@math}: Inserting Mathematical Expressions
 @findex math
 @cindex Mathematical expressions
 
@@ -9253,7 +9404,7 @@ remember to write the mathematical expression between one or two
 @samp{$} (dollar-signs) as appropriate.
 
 
-@node Glyphs, Images, math, Insertions
+@node Glyphs
 @section Glyphs for Examples
 @cindex Glyphs
 
@@ -9310,12 +9461,12 @@ message.@refill
 
 
 @menu
-* result::                      
-* expansion::                   
-* Print Glyph::                 
-* Error Glyph::                 
-* Equivalence::                 
-* Point Glyph::                 
+* result::
+* expansion::
+* Print Glyph::
+* Error Glyph::
+* Equivalence::
+* Point Glyph::
 @end menu
 
 @node result, expansion, Glyphs Summary, Glyphs
@@ -9324,6 +9475,7 @@ message.@refill
 @cindex Indicating evaluation
 @cindex Evaluation glyph
 @cindex Value of an expression, indicating
+@findex result
 
 Use the @code{@@result@{@}} command to indicate the result of
 evaluating an expression.@refill
@@ -9351,6 +9503,7 @@ may be read as ``@code{(cdr '(1 2 3))} evaluates to @code{(2 3)}''.
 @node expansion, Print Glyph, result, Glyphs
 @subsection @code{@@expansion@{@}} (@expansion{}): Indicating an Expansion
 @cindex Expansion, indicating it
+@findex expansion
 
 When an expression is a macro call, it expands into a new expression.
 You can indicate the result of the expansion with the
@@ -9406,6 +9559,7 @@ five spaces.@refill
 @node Print Glyph, Error Glyph, expansion, Glyphs
 @subsection @code{@@print@{@}} (@print{}): Indicating Printed Output
 @cindex Printed output, indicating it
+@findex print
 
 Sometimes an expression will print output during its execution.  You
 can indicate the printed output with the @code{@@print@{@}} command.@refill
@@ -9451,6 +9605,7 @@ In a Texinfo source file, this example is written as follows:
 @node Error Glyph, Equivalence, Print Glyph, Glyphs
 @subsection @code{@@error@{@}} (@error{}): Indicating an Error Message
 @cindex Error message, indicating it
+@findex error
 
 A piece of code may cause an error when you evaluate it.  You can
 designate the error message with the @code{@@error@{@}} command.@refill
@@ -9496,6 +9651,7 @@ Wrong type argument: integer-or-marker-p, x
 @node Equivalence, Point Glyph, Error Glyph, Glyphs
 @subsection @code{@@equiv@{@}} (@equiv{}): Indicating Equivalence
 @cindex Equivalence, indicating it
+@findex equiv
 
 Sometimes two expressions produce identical results.  You can indicate the
 exact equivalence of two forms with the @code{@@equiv@{@}} command.@refill
@@ -9529,9 +9685,10 @@ This indicates that evaluating @code{(make-sparse-keymap)} produces
 identical results to evaluating @code{(list 'keymap)}.
 
 
-@node Point Glyph,  , Equivalence, Glyphs
+@node Point Glyph
 @subsection @code{@@point@{@}} (@point{}): Indicating Point in a Buffer
-@cindex Point, indicating it in a buffer
+@cindex Point, indicating in a buffer
+@findex point
 
 Sometimes you need to show an example of text in an Emacs buffer.  In
 such examples, the convention is to include the entire contents of the
@@ -9592,134 +9749,343 @@ This is the changed @@point@{@}contents of foo.
 @end example
 
 
-@c this should be described with figures when we have them
-@c perhaps in the quotation/example chapter.
-@node Images,  , Glyphs, Insertions
-@section Inserting Images
-
-@cindex Images, inserting
-@cindex Pictures, inserting
-@findex image
+@node Footnotes
+@section Footnotes
+@cindex Footnotes
+@findex footnote
 
-You can insert an image in an external file with the @code{@@image}
-command:
+A @dfn{footnote} is for a reference that documents or elucidates the
+primary text.@footnote{A footnote should complement or expand upon
+the primary text, but a reader should not need to read a footnote to
+understand the primary text.  For a thorough discussion of footnotes,
+see @cite{The Chicago Manual of Style}, which is published by the
+University of Chicago Press.}@refill
 
-@example
-@@image@{@var{filename}, @r{[}@var{width}@r{]}, @r{[}@var{height}@r{]}@}
-@end example
+@menu
+* Footnote Commands::           How to write a footnote in Texinfo.
+* Footnote Styles::             Controlling how footnotes appear in Info.
+@end menu
 
-@cindex Formats for images
-@cindex Image formats
-The @var{filename} argument is mandatory, and must not have an
-extension, because the different processors support different formats:
-@TeX{} reads the file @file{@var{filename}.eps} (Encapsulated PostScript
-format); @code{makeinfo} uses @file{@var{filename}.txt} verbatim for
-Info output (more or less as if it was an @code{@@example}).  HTML
-output requires @file{@var{filename}.jpg}.
+@node Footnote Commands
+@subsection Footnote Commands
 
-@cindex Width of images
-@cindex Height of images
-@cindex Aspect ratio of images
-@cindex Distorting images
-The optional @var{width} and @var{height} arguments specify the size to
-scale the image to (they are ignored for Info output).  If they are both
-specified, the image is presented in its natural size (given in the
-file); if only one is specified, the other is scaled proportionately;
-and if both are specified, both are respected, thus possibly distorting
-the original image by changing its aspect ratio.
+In Texinfo, footnotes are created with the @code{@@footnote} command.
+This command is followed immediately by a left brace, then by the text
+of the footnote, and then by a terminating right brace.  Footnotes may
+be of any length (they will be broken across pages if necessary), but
+are usually short.  The template is:
 
-@cindex Dimensions and image sizes
-The @var{width} and @var{height} may be specified using any valid @TeX{}
-dimension, namely:
+@example
+ordinary text@@footnote@{@var{text of footnote}@}
+@end example
 
-@table @asis
-@item pt
-@cindex Points (dimension)
-point (72.27pt = 1in)
-@item pc
-@cindex Picas
-pica (1pc = 12pt)
-@item bp
-@cindex Big points
-big point (72bp = 1in)
-@item in
-@cindex Inches
-inch
-@item cm
-@cindex Centimeters
-centimeter (2.54cm = 1in)
-@item mm
-@cindex Millimeters
-millimeter (10mm = 1cm)
-@item dd
-@cindex Did@^ot points
-did@^ot point (1157dd = 1238pt)
-@item cc
-@cindex Ciceros
-cicero (1cc = 12dd)
-@item sp
-@cindex Scaled points
-scaled point (65536sp = 1pt)
-@end table
+As shown here, the @code{@@footnote} command should come right after the
+text being footnoted, with no intervening space; otherwise, the footnote
+marker might end up starting a line.
 
-@pindex ridt.eps
-For example, the following will scale a file @file{ridt.eps} to one
-inch vertically, with the width scaled proportionately:
+For example, this clause is followed by a sample footnote@footnote{Here
+is the sample footnote.}; in the Texinfo source, it looks like
+this:@refill
 
 @example
-@@image@{ridt,,1in@}
+@dots{}a sample footnote@@footnote@{Here is the sample
+footnote.@}; in the Texinfo source@dots{}
 @end example
 
-@pindex epsf.tex
-For @code{@@image} to work with @TeX{}, the file @file{epsf.tex} must be
-installed somewhere that @TeX{} can find it.  This file is included in
-the Texinfo distribution and is available from
-@uref{ftp://ftp.tug.org/tex/epsf.tex}.
-
-
-@node Breaks, Definition Commands, Insertions, Top
-@chapter Making and Preventing Breaks
-@cindex Making line and page breaks
-@cindex Preventing line and page breaks
+In a printed manual or book, the reference mark for a footnote is a
+small, superscripted number; the text of the footnote appears at the
+bottom of the page, below a horizontal line.@refill
 
-Usually, a Texinfo file is processed both by @TeX{} and by one of the
-Info formatting commands.  Line, paragraph, or page breaks sometimes
-occur in the `wrong' place in one or other form of output.  You must
-ensure that text looks right both in the printed manual and in the
-Info file.@refill
+In Info, the reference mark for a footnote is a pair of parentheses
+with the footnote number between them, like this: @samp{(1)}.  The
+reference mark is followed by a cross-reference link to the footnote's
+text.
 
-For example, in a printed manual, page breaks may occur awkwardly in
-the middle of an example; to prevent this, you can hold text together
-using a grouping command that keeps the text from being split across
-two pages.  Conversely, you may want to force a page break where none
-would occur normally.  Fortunately, problems like these do not often
-arise.  When they do, use the break, break prevention, or pagination
-commands.@refill
+In the HTML output, footnote references are marked with a small,
+superscripted number which is rendered as a hypertext link to the
+footnote text.
 
-@menu
-* Break Commands::              Cause and prevent splits.
-* Line Breaks::                 How to force a single line to use two lines.
-* - and hyphenation::           How to tell TeX about hyphenation points.
-* w::                           How to prevent unwanted line breaks.
-* sp::                          How to insert blank lines.
-* page::                        How to force the start of a new page.
-* group::                       How to prevent unwanted page breaks.
-* need::                        Another way to prevent unwanted page breaks.
-@end menu
+By the way, footnotes in the argument of an @code{@@item} command for a
+@code{@@table} must be on the same line as the @code{@@item}
+(as usual).  @xref{Two-column Tables}.
 
-@ifinfo
-@node Break Commands, Line Breaks, Breaks, Breaks
-@heading The Break Commands
-@end ifinfo
-@iftex
-@sp 1
-@end iftex
 
-The break commands create or allow line and paragraph breaks:@refill
+@node Footnote Styles
+@subsection Footnote Styles
 
-@table @code
-@item @@*
-Force a line break.
+Info has two footnote styles, which determine where the text of the
+footnote is located:@refill
+
+@itemize @bullet
+@cindex @samp{@r{End}} node footnote style
+@item
+In the `End' node style, all the footnotes for a single node
+are placed at the end of that node.  The footnotes are separated from
+the rest of the node by a line of dashes with the word
+@samp{Footnotes} within it.  Each footnote begins with an
+@samp{(@var{n})} reference mark.@refill
+
+@need 700
+@noindent
+Here is an example of a single footnote in the end of node style:@refill
+
+@example
+@group
+ --------- Footnotes ---------
+
+(1)  Here is a sample footnote.
+@end group
+@end example
+
+@cindex @samp{@r{Separate}} footnote style
+@item
+In the `Separate' node style, all the footnotes for a single
+node are placed in an automatically constructed node of
+their own.  In this style, a ``footnote reference'' follows
+each @samp{(@var{n})} reference mark in the body of the
+node.  The footnote reference is actually a cross reference
+which you use to reach the footnote node.@refill
+
+The name of the node with the footnotes is constructed
+by appending @w{@samp{-Footnotes}} to the name of the node
+that contains the footnotes. (Consequently, the footnotes'
+node for the @file{Footnotes} node is
+@w{@file{Footnotes-Footnotes}}!)  The footnotes' node has an
+`Up' node pointer that leads back to its parent node.@refill
+
+@noindent
+Here is how the first footnote in this manual looks after being
+formatted for Info in the separate node style:@refill
+
+@smallexample
+@group
+File: texinfo.info  Node: Overview-Footnotes, Up: Overview
+
+(1) The first syllable of "Texinfo" is pronounced like "speck", not
+"hex". @dots{}
+@end group
+@end smallexample
+@end itemize
+
+A Texinfo file may be formatted into an Info file with either footnote
+style.@refill
+
+@findex footnotestyle
+Use the @code{@@footnotestyle} command to specify an Info file's
+footnote style.  Write this command at the beginning of a line followed
+by an argument, either @samp{end} for the end node style or
+@samp{separate} for the separate node style.
+
+@need 700
+For example,
+
+@example
+@@footnotestyle end
+@end example
+@noindent
+or
+@example
+@@footnotestyle separate
+@end example
+
+Write an @code{@@footnotestyle} command before or shortly after the
+end-of-header line at the beginning of a Texinfo file.  (If you
+include the @code{@@footnotestyle} command between the start-of-header
+and end-of-header lines, the region formatting commands will format
+footnotes as specified.)@refill
+
+If you do not specify a footnote style, the formatting commands use
+their default style.  Currently, @code{texinfo-format-buffer} and
+@code{texinfo-format-region} use the `separate' style and
+@code{makeinfo} uses the `end' style.@refill
+
+@c !!! note: makeinfo's --footnote-style option overrides footnotestyle
+@ignore
+If you use @code{makeinfo} to create the Info file, the
+@samp{--footnote-style} option determines which style is used,
+@samp{end} for the end of node style or @samp{separate} for the
+separate node style.  Thus, to format the Texinfo manual in the
+separate node style, you would use the following shell command:@refill
+
+@example
+makeinfo --footnote-style=separate texinfo.texi
+@end example
+
+@noindent
+To format the Texinfo manual in the end of node style, you would
+type:@refill
+
+@example
+makeinfo --footnote-style=end texinfo.texi
+@end example
+@end ignore
+@ignore
+If you use @code{texinfo-format-buffer} or
+@code{texinfo-format-region} to create the Info file, the value of the
+@code{texinfo-footnote-style} variable controls the footnote style.
+It can be either @samp{"separate"} for the separate node style or
+@samp{"end"} for the end of node style.  (You can change the value of
+this variable with the @kbd{M-x edit-options} command (@pxref{Edit
+Options, , Editing Variable Values, emacs, The GNU Emacs Manual}), or
+with the @kbd{M-x set-variable} command (@pxref{Examining, , Examining
+and Setting Variables, emacs, The GNU Emacs Manual}).@refill
+
+The @code{texinfo-footnote-style} variable also controls the style if
+you use the @kbd{M-x makeinfo-region} or @kbd{M-x makeinfo-buffer}
+command in Emacs.@refill
+@end ignore
+@ifinfo
+This chapter contains two footnotes.@refill
+@end ifinfo
+
+
+@c this should be described with figures when we have them
+@c perhaps in the quotation/example chapter.
+@node Images
+@section Inserting Images
+
+@cindex Images, inserting
+@cindex Pictures, inserting
+@findex image
+
+You can insert an image given in an external file with the
+@code{@@image} command:
+
+@example
+@@image@{@var{filename}, @r{[}@var{width}@r{]}, @r{[}@var{height}@r{]}@}
+@end example
+
+@cindex Formats for images
+@cindex Image formats
+The @var{filename} argument is mandatory, and must not have an
+extension, because the different processors support different formats:
+@itemize @bullet
+@item
+@TeX{} reads the file @file{@var{filename}.eps} (Encapsulated PostScript
+format).
+@item
+@pindex pdftex@r{, and images}
+PDF@TeX{} reads @file{@var{filename}.pdf} (Adobe's Portable Document Format).
+@item
+@code{makeinfo} uses @file{@var{filename}.txt} verbatim for
+Info output (more or less as if it was an @code{@@example}).
+@item
+@cindex GIF, unsupported due to patents
+@cindex PNG image format
+@cindex JPEG image format
+@code{makeinfo} producing HTML output tries @file{@var{filename}.png};
+if that does not exist, it tries @file{@var{filename}.jpg}.  If that
+does not exist either, it complains.  (We cannot support GIF format due
+to patents.)
+@end itemize
+
+@cindex Width of images
+@cindex Height of images
+@cindex Aspect ratio of images
+@cindex Distorting images
+The optional @var{width} and @var{height} arguments specify the size to
+scale the image to (they are ignored for Info output).  If neither is
+specified, the image is presented in its natural size (given in the
+file); if only one is specified, the other is scaled proportionately;
+and if both are specified, both are respected, thus possibly distorting
+the original image by changing its aspect ratio.
+
+@cindex Dimensions and image sizes
+The @var{width} and @var{height} may be specified using any valid @TeX{}
+dimension, namely:
+
+@table @asis
+@item pt
+@cindex Points (dimension)
+point (72.27pt = 1in)
+@item pc
+@cindex Picas
+pica (1pc = 12pt)
+@item bp
+@cindex Big points
+big point (72bp = 1in)
+@item in
+@cindex Inches
+inch
+@item cm
+@cindex Centimeters
+centimeter (2.54cm = 1in)
+@item mm
+@cindex Millimeters
+millimeter (10mm = 1cm)
+@item dd
+@cindex Did@^ot points
+did@^ot point (1157dd = 1238pt)
+@item cc
+@cindex Ciceros
+cicero (1cc = 12dd)
+@item sp
+@cindex Scaled points
+scaled point (65536sp = 1pt)
+@end table
+
+@pindex ridt.eps
+For example, the following will scale a file @file{ridt.eps} to one
+inch vertically, with the width scaled proportionately:
+
+@example
+@@image@{ridt,,1in@}
+@end example
+
+@pindex epsf.tex
+For @code{@@image} to work with @TeX{}, the file @file{epsf.tex} must be
+installed somewhere that @TeX{} can find it.  (The standard location is
+@file{@var{texmf}/tex/generic/dvips/epsf.tex}, where @var{texmf} is a
+root of your @TeX{} directory tree.)  This file is included in the
+Texinfo distribution and is available from
+@uref{ftp://tug.org/tex/epsf.tex}.
+
+@code{@@image} can be used within a line as well as for displayed
+figures.  Therefore, if you intend it to be displayed, be sure to leave
+a blank line before the command, or the output will run into the
+preceding text.
+
+
+@node Breaks
+@chapter Making and Preventing Breaks
+@cindex Making line and page breaks
+@cindex Preventing line and page breaks
+
+Usually, a Texinfo file is processed both by @TeX{} and by one of the
+Info formatting commands.  Line, paragraph, or page breaks sometimes
+occur in the `wrong' place in one or other form of output.  You must
+ensure that text looks right both in the printed manual and in the
+Info file.@refill
+
+For example, in a printed manual, page breaks may occur awkwardly in
+the middle of an example; to prevent this, you can hold text together
+using a grouping command that keeps the text from being split across
+two pages.  Conversely, you may want to force a page break where none
+would occur normally.  Fortunately, problems like these do not often
+arise.  When they do, use the break, break prevention, or pagination
+commands.@refill
+
+@menu
+* Break Commands::              Cause and prevent splits.
+* Line Breaks::                 How to force a single line to use two lines.
+* - and hyphenation::           How to tell TeX about hyphenation points.
+* w::                           How to prevent unwanted line breaks.
+* sp::                          How to insert blank lines.
+* page::                        How to force the start of a new page.
+* group::                       How to prevent unwanted page breaks.
+* need::                        Another way to prevent unwanted page breaks.
+@end menu
+
+@node Break Commands, Line Breaks, Breaks, Breaks
+@ifinfo
+@heading Break Commands
+@end ifinfo
+
+The break commands create or allow line and paragraph breaks:@refill
+
+@table @code
+@item @@*
+Force a line break.
 
 @item @@sp @var{n}
 Skip @var{n} blank lines.@refill
@@ -9840,15 +10206,13 @@ put a @samp{-} at each hyphenation point.  For example:
 @example
 @@hyphenation@{man-u-script man-u-scripts@}
 @end example
-@noindent
-@TeX{} only uses the specified hyphenation points when the
+@noindent @TeX{} only uses the specified hyphenation points when the
 words match exactly, so give all necessary variants.
 @end table
 
 Info output is not hyphenated, so these commands have no effect there.
 
-@node w, sp, - and hyphenation, Breaks
-@comment  node-name,  next,  previous,  up
+@node w
 @section @code{@@w}@{@var{text}@}: Prevent Line Breaks
 @findex w @r{(prevent line break)}
 @cindex Line breaks, preventing
@@ -9859,38 +10223,40 @@ within @var{text}.@refill
 
 You can use the @code{@@w} command to prevent @TeX{} from automatically
 hyphenating a long name or phrase that happens to fall near the end of a
-line.@refill
+line.  For example:
 
 @example
-You can copy GNU software from @@w@{@@samp@{ftp.gnu.ai.mit.edu@}@}.
+You can copy GNU software from @@w@{@@samp@{ftp.gnu.org@}@}.
 @end example
 
 @noindent
 produces
 
 @quotation
-You can copy GNU software from @w{@samp{ftp.gnu.ai.mit.edu}}.
+You can copy GNU software from @w{@samp{ftp.gnu.org}}.
 @end quotation
 
-@quotation
-@strong{Caution:} Do not write an @code{@@refill} command at the end
-of a paragraph containing an @code{@@w} command; it will cause the
-paragraph to be refilled and may thereby negate the effect of the
-@code{@@w} command.@refill
-@end quotation
+@cindex Non-breakable space
+@cindex Unbreakable space
+@cindex Tied space
+You can also use @code{@@w} to produce a non-breakable space:
 
-@node sp, page, w, Breaks
-@comment  node-name,  next,  previous,  up
+@example
+None of the formatters will break at this@@w@{ @}space.
+@end example
+
+
+@node sp
 @section @code{@@sp} @var{n}: Insert Blank Lines
 @findex sp @r{(line spacing)}
-@cindex Spaces (blank lines)
+@cindex Space, inserting vertical
 @cindex Blank lines
 @cindex Line spacing
 
 A line beginning with and containing only @code{@@sp @var{n}}
 generates @var{n} blank lines of space in both the printed manual and
 the Info file.  @code{@@sp} also forces a paragraph break.  For
-example,@refill
+example,
 
 @example
 @@sp 2
@@ -10036,7 +10402,8 @@ This paragraph is preceded by @dots{}
 The @code{@@need} command is useful for preventing orphans (single
 lines at the bottoms of printed pages).@refill
 
-@node Definition Commands, Footnotes, Breaks, Top
+
+@node Definition Commands
 @chapter Definition Commands
 @cindex Definition commands
 
@@ -10295,7 +10662,7 @@ produces
 These two search commands are similar except @dots{}
 @end deffn
 
-Each of the other definition commands has an `x' form: @code{@@defunx},
+Each definition command has an `x' form: @code{@@defunx},
 @code{@@defvrx}, @code{@@deftypefunx}, etc.
 
 The `x' forms work just like @code{@@itemx}; see @ref{itemx, , @code{@@itemx}}.
@@ -10423,7 +10790,7 @@ works like @code{@@defun}.@refill
 @item @@defspec @var{name} @var{arguments}@dots{}
 The @code{@@defspec} command is the definition command for special
 forms.  (In Lisp, a special form is an entity much like a function,
-@pxref{Special Forms,,, lispref, XEmacs Lisp Reference Manual}.)
+@pxref{Special Forms,,, elisp, GNU Emacs Lisp Reference Manual}.)
 @code{@@defspec} is equivalent to @samp{@@deffn @{Special Form@}
 @dots{}} and works like @code{@@defun}.@refill
 @end table
@@ -10442,8 +10809,8 @@ something like a variable---an entity that records a value.  You must
 choose a term to describe the category of entity being defined; for
 example, ``Variable'' could be used if the entity is a variable.
 Write the @code{@@defvr} command at the beginning of a line and
-followed it on the same line by the category of the entity and the
-name of the entity.@refill
+follow it on the same line by the category of the entity and the
+name of the entity.
 
 Capitalize the category name like a title.  If the name of the category
 contains spaces, as in the name ``User Option'', enclose it in braces.
@@ -10510,7 +10877,7 @@ The template is:
 @cindex User options, marking
 The @code{@@defopt} command is the definition command for @dfn{user
 options}, i.e., variables intended for users to change according to
-taste; Emacs has many such (@pxref{Variables,,, xemacs, XEmacs User's
+taste; Emacs has many such (@pxref{Variables,,, emacs, The GNU Emacs
 Manual}).  @code{@@defopt} is equivalent to @samp{@@defvr @{User
 Option@} @dots{}} and works like @code{@@defvar}.@refill
 @end table
@@ -10806,7 +11173,7 @@ The template is:
 @var{name}.@refill
 @end table
 
-@node Abstract Objects, Data Types, Typed Variables, Def Cmds in Detail
+@node Abstract Objects
 @subsection Object-Oriented Programming
 
 Here are the commands for formatting descriptions about abstract
@@ -10841,8 +11208,7 @@ name.  Thus,@refill
 illustrates how you would write the first line of a definition of the
 @code{border-pattern} class option of the class @code{Window}.@refill
 
-The template is
-
+The template is:
 @example
 @group
 @@defcv @var{category} @var{class} @var{name}
@@ -10860,7 +11226,6 @@ variables in object-oriented programming.  @code{@@defivar} is
 equivalent to @samp{@@defcv @{Instance Variable@} @dots{}}@refill
 
 The template is:
-
 @example
 @group
 @@defivar @var{class} @var{instance-variable-name}
@@ -10871,12 +11236,20 @@ The template is:
 
 @code{@@defivar} creates an entry in the index of variables.
 
+@findex deftypeivar
+@item @@deftypeivar @var{class} @var{data-type} @var{name}
+The @code{@@deftypeivar} command is the definition command for typed
+instance variables in object-oriented programming.  It is similar to
+@code{@@defivar} with the addition of the @var{data-type} parameter to
+specify the type of the instance variable.  @code{@@deftypeivar} creates an
+entry in the index of variables.
+
 @findex defop
 @item @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
 The @code{@@defop} command is the general definition command for
 entities that may resemble methods in object-oriented programming.
-These entities take arguments, as functions do, but are associated
-with particular classes of objects.@refill
+These entities take arguments, as functions do, but are associated with
+particular classes of objects.@refill
 
 For example, some systems have constructs called @dfn{wrappers} that
 are associated with classes as methods are, but that act more like
@@ -10908,10 +11281,7 @@ is followed on the same line by the overall name of the category of
 operation, the name of the class of the operation, the name of the
 operation, and its arguments, if any.@refill
 
-@need 800
-@noindent
 The template is:
-
 @example
 @group
 @@defop @var{category} @var{class} @var{name} @var{arguments}@dots{}
@@ -10923,23 +11293,34 @@ The template is:
 @code{@@defop} creates an entry, such as `@code{expose} on
 @code{windows}', in the index of functions.@refill
 
+@findex deftypeop
+@item @@deftypeop @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
+The @code{@@deftypeop} command is the definition command for typed
+operations in object-oriented programming.  It is similar to
+@code{@@defop} with the addition of the @var{data-type} parameter to
+specify the return type of the method.  @code{@@deftypeop} creates an
+entry in the index of functions.
+
 @item @@defmethod @var{class} @var{name} @var{arguments}@dots{}
 @findex defmethod
 The @code{@@defmethod} command is the definition command for methods
 in object-oriented programming.  A method is a kind of function that
 implements an operation for a particular class of objects and its
-subclasses.  In the Lisp Machine, methods actually were functions, but
+subclasses.
+@ignore
+@c ADR: Who cares?!?
+@c KB: Oh, I don't know, I think this info is crucial!
+In the Lisp Machine, methods actually were functions, but
 they were usually defined with @code{defmethod}.
+@end ignore
 
 @code{@@defmethod} is equivalent to @samp{@@defop Method @dots{}}.
 The command is written at the beginning of a line and is followed by
 the name of the class of the method, the name of the method, and its
 arguments, if any.@refill
 
-@need 800
 @noindent
-For example,
-
+For example:
 @example
 @group
 @@defmethod @code{bar-class} bar-method argument
@@ -10965,6 +11346,7 @@ The template is:
 @code{@@defmethod} creates an entry, such as `@code{bar-method} on
 @code{bar-class}', in the index of functions.@refill
 
+
 @item @@deftypemethod @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
 @findex defmethod
 The @code{@@deftypemethod} command is the definition command for methods
@@ -10975,7 +11357,7 @@ to the @code{@@defmethod} command with the addition of the
 @end table
 
 
-@node Data Types,  , Abstract Objects, Def Cmds in Detail
+@node Data Types
 @subsection Data Types
 
 Here is the command for data types:@refill
@@ -11044,8 +11426,8 @@ commands.  The name of the function follows immediately after the
 @code{@@defun} command and it is followed, on the same line, by the
 parameter list.@refill
 
-Here is a definition from @ref{Calling Functions,,, lispref, XEmacs Lisp
-Reference Manual}.
+Here is a definition from @ref{Calling Functions,,, elisp, The GNU Emacs
+Lisp Reference Manual}.
 
 @quotation
 @defun apply function &rest arguments
@@ -11085,7 +11467,6 @@ In the Texinfo source file, this example looks like this:
 @example
 @group
 @@defun apply function &rest arguments
-
 @@code@{apply@} calls @@var@{function@} with
 @@var@{arguments@}, just like @@code@{funcall@} but with one
 difference: the last of @@var@{arguments@} is a list of
@@ -11120,7 +11501,7 @@ sense in @@code@{apply@}.
 
 @group
 An interesting example of using @@code@{apply@} is found
-in the description of @@code@{mapcar@}.@@refill
+in the description of @@code@{mapcar@}.
 @@end defun
 @end group
 @end example
@@ -11133,202 +11514,29 @@ Ordinary variables and user options are described using a format like
 that for functions except that variables do not take arguments.
 
 
-@node Footnotes, Conditionals, Definition Commands, Top
-@chapter Footnotes
-@cindex Footnotes
-@findex footnote
-
-A @dfn{footnote} is for a reference that documents or elucidates the
-primary text.@footnote{A footnote should complement or expand upon
-the primary text, but a reader should not need to read a footnote to
-understand the primary text.  For a thorough discussion of footnotes,
-see @cite{The Chicago Manual of Style}, which is published by the
-University of Chicago Press.}@refill
-
-@menu
-* Footnote Commands::           How to write a footnote in Texinfo.
-* Footnote Styles::             Controlling how footnotes appear in Info.
-@end menu
-
-@node Footnote Commands, Footnote Styles, Footnotes, Footnotes
-@section Footnote Commands
-
-In Texinfo, footnotes are created with the @code{@@footnote} command.
-This command is followed immediately by a left brace, then by the text
-of the footnote, and then by a terminating right brace.  Footnotes may
-be of any length (they will be broken across pages if necessary), but
-are usually short.  The template is:
-
-@example
-ordinary text@@footnote@{@var{text of footnote}@}
-@end example
-
-As shown here, the @code{@@footnote} command should come right after the
-text being footnoted, with no intervening space; otherwise, the
-formatters the footnote mark might end up starting up a line.
-
-For example, this clause is followed by a sample
-footnote@footnote{Here is the sample footnote.}; in the Texinfo
-source, it looks like this:@refill
-
-@example
-@dots{}a sample footnote@@footnote@{Here is the sample
-footnote.@}; in the Texinfo source@dots{}
-@end example
-
-@strong{Warning:} Don't use footnotes in the argument of the
-@code{@@item} command for a @code{@@table} table.  This doesn't work, and
-because of limitations of @TeX{}, there is no way to fix it.  You must
-put the footnote into the body text of the table.
-
-In a printed manual or book, the reference mark for a footnote is a
-small, superscripted number; the text of the footnote appears at the
-bottom of the page, below a horizontal line.@refill
-
-In Info, the reference mark for a footnote is a pair of parentheses
-with the footnote number between them, like this: @samp{(1)}.@refill
+@node Conditionals
+@chapter Conditionally Visible Text
+@cindex Conditionally visible text
+@cindex Text, conditionally visible
+@cindex Visibility of conditional text
+@cindex If text conditionally visible
 
+Sometimes it is good to use different text for different output formats.
+For example, you can use the @dfn{conditional commands} to specify
+different text for the printed manual and the Info output.
 
-@node Footnote Styles,  , Footnote Commands, Footnotes
-@section Footnote Styles
+Conditional commands may not be nested.
 
-Info has two footnote styles, which determine where the text of the
-footnote is located:@refill
+The conditional commands comprise the following categories.
 
 @itemize @bullet
-@cindex @samp{@r{End}} node footnote style
+@item Commands for HTML, Info, or @TeX{}.
+@item Commands for not HTML, Info, or @TeX{}.
+@item Raw @TeX{} or HTML commands.
 @item
-In the `End' node style, all the footnotes for a single node
-are placed at the end of that node.  The footnotes are separated from
-the rest of the node by a line of dashes with the word
-@samp{Footnotes} within it.  Each footnote begins with an
-@samp{(@var{n})} reference mark.@refill
-
-@need 700
-@noindent
-Here is an example of a single footnote in the end of node style:@refill
-
-@example
-@group
- --------- Footnotes ---------
-
-(1)  Here is a sample footnote.
-@end group
-@end example
-
-@cindex @samp{@r{Separate}} footnote style
-@item
-In the `Separate' node style, all the footnotes for a single
-node are placed in an automatically constructed node of
-their own.  In this style, a ``footnote reference'' follows
-each @samp{(@var{n})} reference mark in the body of the
-node.  The footnote reference is actually a cross reference
-which you use to reach the footnote node.@refill
-
-The name of the node containing the footnotes is constructed
-by appending @w{@samp{-Footnotes}} to the name of the node
-that contains the footnotes. (Consequently, the footnotes'
-node for the @file{Footnotes} node is
-@w{@file{Footnotes-Footnotes}}!)  The footnotes' node has an
-`Up' node pointer that leads back to its parent node.@refill
-
-@noindent
-Here is how the first footnote in this manual looks after being
-formatted for Info in the separate node style:@refill
-
-@smallexample
-@group
-File: texinfo.info  Node: Overview-Footnotes, Up: Overview
-
-(1) Note that the first syllable of "Texinfo" is
-pronounced like "speck", not "hex". @dots{}
-@end group
-@end smallexample
+Substituting text for all formats, and testing if a flag is set or clear.
 @end itemize
 
-A Texinfo file may be formatted into an Info file with either footnote
-style.@refill
-
-@findex footnotestyle
-Use the @code{@@footnotestyle} command to specify an Info file's
-footnote style.  Write this command at the beginning of a line followed
-by an argument, either @samp{end} for the end node style or
-@samp{separate} for the separate node style.
-
-@need 700
-For example,
-
-@example
-@@footnotestyle end
-@end example
-@noindent
-or
-@example
-@@footnotestyle separate
-@end example
-
-Write an @code{@@footnotestyle} command before or shortly after the
-end-of-header line at the beginning of a Texinfo file.  (If you
-include the @code{@@footnotestyle} command between the start-of-header
-and end-of-header lines, the region formatting commands will format
-footnotes as specified.)@refill
-
-If you do not specify a footnote style, the formatting commands use
-their default style.  Currently, @code{texinfo-format-buffer} and
-@code{texinfo-format-region} use the `separate' style and
-@code{makeinfo} uses the `end' style.@refill
-
-@c !!! note: makeinfo's --footnote-style option overrides footnotestyle
-@ignore
-If you use @code{makeinfo} to create the Info file, the
-@samp{--footnote-style} option determines which style is used,
-@samp{end} for the end of node style or @samp{separate} for the
-separate node style.  Thus, to format the Texinfo manual in the
-separate node style, you would use the following shell command:@refill
-
-@example
-makeinfo --footnote-style=separate texinfo.texi
-@end example
-
-@noindent
-To format the Texinfo manual in the end of node style, you would
-type:@refill
-
-@example
-makeinfo --footnote-style=end texinfo.texi
-@end example
-@end ignore
-@ignore
-If you use @code{texinfo-format-buffer} or
-@code{texinfo-format-region} to create the Info file, the value of the
-@code{texinfo-footnote-style} variable controls the footnote style.
-It can be either @samp{"separate"} for the separate node style or
-@samp{"end"} for the end of node style.  (You can change the value of
-this variable with the @kbd{M-x edit-options} command (@pxref{Edit
-Options, , Editing Variable Values, xemacs, XEmacs User's Manual}), or
-with the @kbd{M-x set-variable} command (@pxref{Examining, , Examining
-and Setting Variables, xemacs, XEmacs User's Manual}).@refill
-
-The @code{texinfo-footnote-style} variable also controls the style if
-you use the @kbd{M-x makeinfo-region} or @kbd{M-x makeinfo-buffer}
-command in Emacs.@refill
-@end ignore
-This chapter contains two footnotes.@refill
-
-
-@node Conditionals, Macros, Footnotes, Top
-@comment  node-name,  next,  previous,  up
-@chapter Conditionally Visible Text
-@cindex Conditionally visible text
-@cindex Text, conditionally visible
-@cindex Visibility of conditional text
-@cindex If text conditionally visible
-
-Sometimes it is good to use different text for a printed manual and
-its corresponding Info file.  In this case, you can use the
-@dfn{conditional commands} to specify which text is for the printed manual
-and which is for the Info file.@refill
-
 @menu
 * Conditional Commands::        Specifying text for HTML, Info, or @TeX{}.
 * Conditional Not Commands::    Specifying text for not HTML, Info, or @TeX{}.
@@ -11338,21 +11546,18 @@ and which is for the Info file.@refill
                                   flag to a string that you can insert.
 @end menu
 
-@node Conditional Commands, Conditional Not Commands, Conditionals, Conditionals
-@ifinfo
-@heading Conditional Commands
-@end ifinfo
+
+@node Conditional Commands
+@section Conditional Commands
 
 @findex ifinfo
-@code{@@ifinfo} begins segments of text that should be ignored
-by @TeX{} when it
-typesets the printed manual.  The segment of text appears only
-in the Info file.
-The @code{@@ifinfo} command should appear on a line by itself;  end
-the Info-only text with a line containing @code{@@end ifinfo} by
-itself.  At the beginning of a Texinfo file, the Info permissions are
-contained within a region marked by @code{@@ifinfo} and @code{@@end
-ifinfo}. (@xref{Info Summary and Permissions}.)@refill
+@code{@@ifinfo} begins segments of text that should be ignored by @TeX{}
+when it typesets the printed manual.  The segment of text appears only
+in the Info file.  The @code{@@ifinfo} command should appear on a line
+by itself; end the Info-only text with a line containing @code{@@end
+ifinfo} by itself.  At the beginning of a Texinfo file, the Info
+permissions are contained within a region marked by @code{@@ifinfo} and
+@code{@@end ifinfo}. (@xref{Info Summary and Permissions}.)
 
 @findex iftex
 @findex ifhtml
@@ -11371,6 +11576,9 @@ This text will appear only in the printed manual.
 @@ifinfo
 However, this text will appear only in Info.
 @@end ifinfo
+@@ifhtml
+And this text will only appear in HTML.
+@@end ifhtml
 @end example
 
 @noindent
@@ -11381,18 +11589,16 @@ This text will appear only in the printed manual.
 @ifinfo
 However, this text will appear only in Info.
 @end ifinfo
+@ifhtml
+And this text will only appear in HTML.
+@end ifhtml
 
 @noindent
-Note how you only see one of the two lines, depending on whether you
-are reading the Info version or the printed version of this
-manual.@refill
+Notice that you only see one of the input lines, depending on which
+version of the manual you are reading.
 
-The @code{@@titlepage} command is a special variant of @code{@@iftex} that
-is used for making the title and copyright pages of the printed
-manual.  (@xref{titlepage, , @code{@@titlepage}}.) @refill
 
-
-@node Conditional Not Commands, Raw Formatter Commands, Conditional Commands, Conditionals
+@node Conditional Not Commands
 @section Conditional Not Commands
 @findex ifnothtml
 @findex ifnotinfo
@@ -11413,7 +11619,8 @@ If the output file is not being made for the given format, the region is
 included.  Otherwise, it is ignored.
 
 The regions delimited by these commands are ordinary Texinfo source as
-with @code{@@iftex}, not raw formatter source as with @code{@@tex}.
+with @code{@@iftex}, not raw formatter source as with @code{@@tex}
+(@pxref{Raw Formatter Commands}).
 
 
 @node Raw Formatter Commands, set clear value, Conditional Not Commands, Conditionals
@@ -11445,8 +11652,8 @@ overridden by Texinfo features.
 You can enter plain @TeX{} completely, and use @samp{\} in the @TeX{}
 commands, by delineating a region with the @code{@@tex} and @code{@@end
 tex} commands.  (The @code{@@tex} command also causes Info to ignore the
-region, like the @code{@@iftex} command.)  The sole exception is that
-@code{@@} chracter still introduces a command, so that @code{@@end tex}
+region, like the @code{@@iftex} command.)  The sole exception is that the
+@code{@@} character still introduces a command, so that @code{@@end tex}
 can be recognized properly.
 
 @cindex Mathematical expressions
@@ -11480,13 +11687,12 @@ $$ \chi^2 = \sum_{i=1}^N
 @findex html
 Analogously, you can use @code{@@ifhtml @dots{} @@end ifhtml} to delimit
 a region to be included in HTML output only, and @code{@@html @dots{}
-@@end ifhtml} for a region of raw HTML (again, except that @code{@@} is
+@@end html} for a region of raw HTML (again, except that @code{@@} is
 still the escape character, so the @code{@@end} command can be
 recognized.)
 
 
-@node set clear value,  , Raw Formatter Commands, Conditionals
-@comment  node-name,  next,  previous,  up
+@node set clear value
 @section @code{@@set}, @code{@@clear}, and @code{@@value}
 
 You can direct the Texinfo formatting commands to format or ignore parts
@@ -11501,12 +11707,12 @@ insert the date in several places in the Texinfo file.@refill
 
 @menu
 * ifset ifclear::               Format a region if a flag is set.
-* value::                       Replace a flag with a string.
+* set value::                   Expand a flag variable to a string.
 * value Example::               An easy way to update edition information.
 @end menu
 
 
-@node ifset ifclear, value, set clear value, set clear value
+@node ifset ifclear
 @subsection @code{@@ifset} and @code{@@ifclear}
 
 @findex ifset
@@ -11516,8 +11722,10 @@ ifset} commands.  When the @var{flag} is cleared, the Texinfo formatting
 commands do @emph{not} format the text.
 
 Use the @code{@@set @var{flag}} command to turn on, or @dfn{set}, a
-@var{flag}; a @dfn{flag} can be any single word.  The format for the
-command looks like this:@refill
+@var{flag}; a @dfn{flag} name can be any single word, containing
+letters, numerals, hyphens, or underscores.
+
+The format for the command looks like this:@refill
 @findex set
 
 @example
@@ -11621,13 +11829,17 @@ format the text up to the following @code{@@end ifclear}
 command.@refill
 @end table
 
-@node value, value Example, ifset ifclear, set clear value
-@subsection @code{@@value}
+
+@node set value
+@subsection @code{@@set} and @code{@@value}
 @findex value
 
 You can use the @code{@@set} command to specify a value for a flag,
-which is expanded by the @code{@@value} command.  The value is a string
-a characters.
+which is expanded by the @code{@@value} command.  A flag is an
+identifier; for best results, use only letters and numerals in a flag
+name, not @samp{-} or @samp{_}---they will work in some contexts, but
+not all, due to limitations in @TeX{}.  The value is just a string of
+characters, the remainder of the input line.
 
 Write the @code{@@set} command like this:
 
@@ -11636,12 +11848,11 @@ Write the @code{@@set} command like this:
 @end example
 
 @noindent
-This sets the value of @code{foo} to ``This is a string.''
+This sets the value of the flag @code{foo} to ``This is a string.''.
 
-The Texinfo formatters replace an @code{@@value@{@var{flag}@}} command with
-the string to which @var{flag} is set.@refill
-
-Thus, when @code{foo} is set as shown above, the Texinfo formatters convert
+The Texinfo formatters then replace an @code{@@value@{@var{flag}@}}
+command with the string to which @var{flag} is set.  Thus, when
+@code{foo} is set as shown above, the Texinfo formatters convert
 
 @example
 @group
@@ -11663,9 +11874,9 @@ If you write the @code{@@set} command like this:
 @noindent
 without specifying a string, the value of @code{foo} is an empty string.
 
-If you clear a previously set flag with an @code{@@clear @var{flag}}
-command, a subsequent @code{@@value@{flag@}} command is invalid and the
-string is replaced with an error message that says @samp{@{No value for
+If you clear a previously set flag with @code{@@clear @var{flag}}, a
+subsequent @code{@@value@{flag@}} command is invalid and the string is
+replaced with an error message that says @samp{@{No value for
 "@var{flag}"@}}.
 
 For example, if you set @code{foo} as follows:@refill
@@ -11702,15 +11913,16 @@ It is a @{No value for "how-much"@} wet day.
 @end group
 @end example
 
-@node value Example,  , value, set clear value
+
+@node value Example
 @subsection @code{@@value} Example
 
 You can use the @code{@@value} command to limit the number of places you
-need to change when you record an update to a manual.
-Here is how it is done in @cite{The GNU Make Manual}:
+need to change when you record an update to a manual.  Here is how it is
+done in @cite{The GNU Make Manual}:
 
-@need 1000
-@noindent
+@enumerate
+@item
 Set the flags:
 
 @example
@@ -11722,8 +11934,7 @@ Set the flags:
 @end group
 @end example
 
-@need 750
-@noindent
+@item
 Write text for the first @code{@@ifinfo} section, for people reading the
 Texinfo file:
 
@@ -11732,12 +11943,11 @@ Texinfo file:
 This is Edition @@value@{EDITION@},
 last updated @@value@{UPDATED@},
 of @@cite@{The GNU Make Manual@},
-for @@code@{make@}, Version @@value@{VERSION@}.
+for @@code@{make@}, version @@value@{VERSION@}.
 @end group
 @end example
 
-@need 1000
-@noindent
+@item
 Write text for the title page, for people reading the printed manual:
 @c List only the month and the year since that looks less fussy on a
 @c printed cover than a date that lists the day as well.
@@ -11755,8 +11965,7 @@ Write text for the title page, for people reading the printed manual:
 (On a printed cover, a date listing the month and the year looks less
 fussy than a date listing the day as well as the month and year.)
 
-@need 750
-@noindent
+@item
 Write text for the Top node, for people reading the Info file:
 
 @example
@@ -11768,7 +11977,6 @@ for @@code@{make@} Version @@value@{VERSION@}.
 @end group
 @end example
 
-@need 950
 After you format the manual, the text in the first @code{@@ifinfo}
 section looks like this:
 
@@ -11778,49 +11986,336 @@ This is Edition 0.35 Beta, last updated 14 August 1992,
 of `The GNU Make Manual', for `make', Version 3.63 Beta.
 @end group
 @end example
+@end enumerate
 
 When you update the manual, change only the values of the flags; you do
-not need to rewrite the three sections.
+not need to edit the three sections.
+
+
+@node Internationalization
+@chapter Internationalization
+
+@cindex Internationalization
+Texinfo has some support for writing in languages other than English,
+although this area still needs considerable work.
 
+For a list of the various accented and special characters Texinfo
+supports, see @ref{Inserting Accents}.
 
-@node Macros, Format/Print Hardcopy, Conditionals, Top
-@chapter Macros: Defining New Texinfo Commands
+@menu
+* documentlanguage::            Declaring the current language.
+* documentencoding::            Declaring the input encoding.
+@end menu
+
+
+@node documentlanguage
+@section @code{@@documentlanguage @var{cc}}: Set the Document Language
+
+@findex documentlanguage
+@cindex Language, declaring
+@cindex Document language, declaring
+
+The @code{@@documentlanguage} command declares the current document
+language.  Write it on a line by itself, with a two-letter ISO-639
+language code following (list is included below).  If you have a
+multilingual document, the intent is to be able to use this command
+multiple times, to declare each language change.  If the command is not
+used at all, the default is @code{en} for English.
+
+@cindex @file{txi-@var{cc}.tex}
+At present, this command is ignored in Info and HTML output.  For
+@TeX{}, it causes the file @file{txi-@var{cc}.tex} to be read (if it
+exists).  Such a file appropriately redefines the various English words
+used in @TeX{} output, such as `Chapter', `See', and so on.
+
+@cindex Hyphenation patterns, language-dependent
+It would be good if this command also changed @TeX{}'s ideas of the
+current hyphenation patterns (via the @TeX{} primitive
+@code{\language}), but this is unfortunately not currently implemented.
+
+@cindex ISO 639 codes
+@cindex Language codes
+@cindex African languages
+Here is the list of valid language codes.  This list comes from
+@uref{http://www.iro.umontreal.ca/contrib/po/iso-639, the free
+translation project}.  In the future we may wish to allow the 3-letter
+POV codes described at @uref{http://www.sil.org/ethnologue/#contents}.
+This will be necessary to support African languages.
+
+@multitable @columnfractions .06 .27 .06 .27 .06 .27
+@item
+@code{aa} @tab Afar @tab
+@code{ab} @tab Abkhazian @tab
+@code{af} @tab Afrikaans
+@item
+@code{am} @tab Amharic @tab
+@code{ar} @tab Arabic @tab
+@code{as} @tab Assamese
+@item
+@code{ay} @tab Aymara @tab
+@code{az} @tab Azerbaijani @tab
+@code{ba} @tab Bashkir
+@item
+@code{be} @tab Byelorussian @tab
+@code{bg} @tab Bulgarian @tab
+@code{bh} @tab Bihari
+@item
+@code{bi} @tab Bislama @tab
+@code{bn} @tab Bengali; Bangla @tab
+@code{bo} @tab Tibetan
+@item
+@code{br} @tab Breton @tab
+@code{ca} @tab Catalan @tab
+@code{co} @tab Corsican
+@item
+@code{cs} @tab Czech @tab
+@code{cy} @tab Welsh @tab
+@code{da} @tab Danish
+@item
+@code{de} @tab German @tab
+@code{dz} @tab Bhutani @tab
+@code{el} @tab Greek
+@item
+@code{en} @tab English @tab
+@code{eo} @tab Esperanto @tab
+@code{es} @tab Spanish
+@item
+@code{et} @tab Estonian @tab
+@code{eu} @tab Basque @tab
+@code{fa} @tab Persian
+@item
+@code{fi} @tab Finnish @tab
+@code{fj} @tab Fiji @tab
+@code{fo} @tab Faroese
+@item
+@code{fr} @tab French @tab
+@code{fy} @tab Frisian @tab
+@code{ga} @tab Irish
+@item
+@code{gd} @tab Scots Gaelic @tab
+@code{gl} @tab Galician @tab
+@code{gn} @tab Guarani
+@item
+@code{gu} @tab Gujarati @tab
+@code{ha} @tab Hausa @tab
+@code{he} @tab Hebrew
+@item
+@code{hi} @tab Hindi @tab
+@code{hr} @tab Croatian @tab
+@code{hu} @tab Hungarian
+@item
+@code{hy} @tab Armenian @tab
+@code{ia} @tab Interlingua @tab
+@code{id} @tab Indonesian
+@item
+@code{ie} @tab Interlingue @tab
+@code{ik} @tab Inupiak @tab
+@code{is} @tab Icelandic
+@item
+@code{it} @tab Italian @tab
+@code{iu} @tab Inuktitut @tab
+@code{ja} @tab Japanese
+@item
+@code{jw} @tab Javanese @tab
+@code{ka} @tab Georgian @tab
+@code{kk} @tab Kazakh
+@item
+@code{kl} @tab Greenlandic @tab
+@code{km} @tab Cambodian @tab
+@code{kn} @tab Kannada
+@item
+@code{ks} @tab Kashmiri @tab
+@code{ko} @tab Korean @tab
+@code{ku} @tab Kurdish
+@item
+@code{ky} @tab Kirghiz @tab
+@code{la} @tab Latin @tab
+@code{ln} @tab Lingala
+@item
+@code{lt} @tab Lithuanian @tab
+@code{lo} @tab Laothian @tab
+@code{lv} @tab Latvian, Lettish
+@item
+@code{mg} @tab Malagasy @tab
+@code{mi} @tab Maori @tab
+@code{mk} @tab Macedonian
+@item
+@code{ml} @tab Malayalam @tab
+@code{mn} @tab Mongolian @tab
+@code{mo} @tab Moldavian
+@item
+@code{mr} @tab Marathi @tab
+@code{ms} @tab Malay @tab
+@code{mt} @tab Maltese
+@item
+@code{my} @tab Burmese @tab
+@code{na} @tab Nauru @tab
+@code{ne} @tab Nepali
+@item
+@code{nl} @tab Dutch @tab
+@code{no} @tab Norwegian @tab
+@code{oc} @tab Occitan
+@item
+@code{om} @tab (Afan) Oromo @tab
+@code{or} @tab Oriya @tab
+@code{pa} @tab Punjabi
+@item
+@code{pl} @tab Polish @tab
+@code{ps} @tab Pashto, Pushto @tab
+@code{pt} @tab Portuguese
+@item
+@code{qu} @tab Quechua @tab
+@code{rm} @tab Rhaeto-Romance @tab
+@code{rn} @tab Kirundi
+@item
+@code{ro} @tab Romanian @tab
+@code{ru} @tab Russian @tab
+@code{rw} @tab Kinyarwanda
+@item
+@code{sa} @tab Sanskrit @tab
+@code{sd} @tab Sindhi @tab
+@code{sg} @tab Sangro
+@item
+@code{sh} @tab Serbo-Croatian @tab
+@code{si} @tab Sinhalese @tab
+@code{sk} @tab Slovak
+@item
+@code{sl} @tab Slovenian @tab
+@code{sm} @tab Samoan @tab
+@code{sn} @tab Shona
+@item
+@code{so} @tab Somali @tab
+@code{sq} @tab Albanian @tab
+@code{sr} @tab Serbian
+@item
+@code{ss} @tab Siswati @tab
+@code{st} @tab Sesotho @tab
+@code{su} @tab Sundanese
+@item
+@code{sv} @tab Swedish @tab
+@code{sw} @tab Swahili @tab
+@code{ta} @tab Tamil
+@item
+@code{te} @tab Telugu @tab
+@code{tg} @tab Tajik @tab
+@code{th} @tab Thai
+@item
+@code{ti} @tab Tigrinya @tab
+@code{tk} @tab Turkmen @tab
+@code{tl} @tab Tagalog
+@item
+@code{tn} @tab Setswana @tab
+@code{to} @tab Tonga @tab
+@code{tr} @tab Turkish
+@item
+@code{ts} @tab Tsonga @tab
+@code{tt} @tab Tatar @tab
+@code{tw} @tab Twi
+@item
+@code{ug} @tab Uighur @tab
+@code{uk} @tab Ukrainian @tab
+@code{ur} @tab Urdu
+@item
+@code{uz} @tab Uzbek @tab
+@code{vi} @tab Vietnamese @tab
+@code{vo} @tab Volapuk
+@item
+@code{wo} @tab Wolof @tab
+@code{xh} @tab Xhosa @tab
+@code{yi} @tab Yiddish
+@item
+@code{yo} @tab Yoruba @tab
+@code{za} @tab Zhuang @tab
+@code{zh} @tab Chinese
+@item
+@code{zu} @tab Zulu
+@end multitable
+
+
+@node documentencoding
+@section @code{@@documentencoding @var{enc}}: Set Input Encoding
+
+@findex documentencoding
+@cindex Encoding, declaring
+@cindex Input encoding, declaring
+@cindex Document input encoding
+
+The @code{@@documentencoding} command declares the input document
+encoding.  Write it on a line by itself, with a valid encoding
+specification following, such as @samp{ISO-8859-1}.
+
+@cindex http-equiv, and charset
+@cindex meta HTML tag, and charset
+At present, this is used only in HTML output from @code{makeinfo}.  If a
+document encoding @var{enc} is specified, it is used in the
+@samp{<meta>} tag is included in the @samp{<head>} of the output:
+
+@example
+<meta http-equiv="Content-Type" content="text/html; charset=@var{enc}">
+@end example
+
+
+@node Defining New Texinfo Commands
+@chapter Defining New Texinfo Commands
 @cindex Macros
 @cindex Defining new Texinfo commands
 @cindex New Texinfo commands, defining
 @cindex Texinfo commands, defining new
 @cindex User-defined Texinfo commands
 
+Texinfo provides several ways to define new commands:
+
+@itemize @bullet
+@item
 A Texinfo @dfn{macro} allows you to define a new Texinfo command as any
 sequence of text and/or existing commands (including other macros).  The
 macro can have any number of @dfn{parameters}---text you supply each
-time you use the macro.  (This has nothing to do with the
-@code{@@defmac} command, which is for documenting macros in the subject
-of the manual; @pxref{Def Cmd Template}.)
+time you use the macro.
+
+Incidentally, these macros have nothing to do with the @code{@@defmac}
+command, which is for documenting macros in the subject of the manual
+(@pxref{Def Cmd Template}).
+
+@item
+@samp{@@alias} is a convenient way to define a new name for an existing
+command.
+
+@item
+@samp{@@definfoenclose} allows you to define new commands with
+customized output in the Info file.
+
+@end itemize
 
 @menu
-* Defining Macros::             Both defining and undefining new commands.
+* Defining Macros::             Defining and undefining new commands.
 * Invoking Macros::             Using a macro, once you've defined it.
+* Macro Details::               Beyond basic macro usage.
+* alias::                       Command aliases.
+* definfoenclose::              Customized highlighting.
 @end menu
 
 
-@node Defining Macros, Invoking Macros, Macros, Macros
+@node Defining Macros
 @section Defining Macros
 @cindex Defining macros
 @cindex Macro definitions
+@cindex Definitions, a.k.a.@: macros
 
 @findex macro
-You use the Texinfo @code{@@macro} command to define a macro.  For example:
+You use the Texinfo @code{@@macro} command to define a macro, like this:
 
 @example
-@@macro @var{macro-name}@{@var{param1}, @var{param2}, @dots{}@}
+@@macro @var{macroname}@{@var{param1}, @var{param2}, @dots{}@}
 @var{text} @dots{} \@var{param1}\ @dots{}
 @@end macro
 @end example
 
 The @dfn{parameters} @var{param1}, @var{param2}, @dots{} correspond to
 arguments supplied when the macro is subsequently used in the document
-(see the next section).
+(described in the next section).
+
+For a macro to work with @TeX{}, @var{macroname} must consist entirely
+of letters: no digits, hyphens, underscores, or other special characters.
 
 If a macro needs no parameters, you can define it either with an empty
 list (@samp{@@macro foo @{@}}) or with no braces at all (@samp{@@macro
@@ -11829,12 +12324,44 @@ foo}).
 @cindex Body of a macro
 @cindex Mutually recursive macros
 @cindex Recursion, mutual
-The definition or @dfn{body} of the macro can contain any Texinfo
-commands, including previously-defined macros.  (It is not possible to
-have mutually recursive Texinfo macros.)  In the body, instances of a
-parameter name surrounded by backslashes, as in @samp{\@var{param1}\} in
-the example above, are replaced by the corresponding argument from the
-macro invocation.
+The definition or @dfn{body} of the macro can contain most Texinfo
+commands, including previously-defined macros.  Not-yet-defined macro
+invocations are not allowed; thus, it is not possible to have mutually
+recursive Texinfo macros.  Also, a macro definition that defines another
+macro does not work in @TeX{} due to limitations in the design of
+@code{@@macro}.
+
+@cindex Parameters to macros
+In the macro body, instances of a parameter name surrounded by
+backslashes, as in @samp{\@var{param1}\} in the example above, are
+replaced by the corresponding argument from the macro invocation.  You
+can use parameter names any number of times in the body, including zero.
+
+@cindex Backslash in macros
+To get a single @samp{\} in the macro expansion, use @samp{\\}.  Any
+other use of @samp{\} in the body yields a warning.
+
+@cindex Spaces in macros
+@cindex Whitespace in macros
+The newlines after the @code{@@macro} line and before the @code{@@end
+macro} line are ignored, that is, not included in the macro body.  All
+other whitespace is treated according to the usual Texinfo rules.
+
+@cindex Recursive macro invocations
+@findex rmacro
+To allow a macro to be used recursively, that is, in an argument to a
+call to itself, you must define it with @samp{@@rmacro}, like this:
+
+@example
+@@rmacro rmac
+a\arg\b
+@@end rmacro
+@dots{}
+@@rmac@{1@@rmac@{text@}2@}
+@end example
+
+This produces the output `a1atextb2b'.  With @samp{@@macro} instead of
+@samp{@@rmacro}, an error message is given.
 
 @findex unmacro
 @cindex Macros, undefining
@@ -11848,21 +12375,22 @@ For example:
 @end example
 
 
-@node Invoking Macros,  , Defining Macros, Macros
+@node Invoking Macros
 @section Invoking Macros
 @cindex Invoking macros
+@cindex Expanding macros
+@cindex Running macros
 @cindex Macro invocation
 
 After a macro is defined (see the previous section), you can use
 (@dfn{invoke}) it in your document like this:
 
 @example
-@@@var{macro-name} @{@var{arg1}, @var{arg2}, @dots{}@}
+@@@var{macroname} @{@var{arg1}, @var{arg2}, @dots{}@}
 @end example
 
-@noindent
-and the result will be just as if you typed the body of
-@var{macro-name} at that spot.  For example:
+@noindent and the result will be just as if you typed the body of
+@var{macroname} at that spot.  For example:
 
 @example
 @@macro foo @{p, q@}
@@ -11871,50 +12399,242 @@ Together: \p\ & \q\.
 @@foo@{a, b@}
 @end example
 
-@noindent
-produces:
+@noindent produces:
 
 @display
 Together: a & b.
 @end display
 
-@cindex Backslash, and macros
-Thus, the arguments and parameters are separated by commas and delimited
-by braces; any whitespace after (but not before) a comma is ignored.  To
-insert a comma, brace, or backslash in an argument, prepend a backslash,
-as in
+@cindex Backslash, and macros
+Thus, the arguments and parameters are separated by commas and delimited
+by braces; any whitespace after (but not before) a comma is ignored.
+The braces are required in the invocation (but not the definition), even
+when the macro takes no arguments, consistent with all other Texinfo
+commands.  For example:
+
+@example
+@@macro argless @{@}
+No arguments here.
+@@end macro
+@@argless@{@}
+@end example
+
+@noindent produces:
+
+@display
+No arguments here.
+@end display
+
+To insert a comma, brace, or backslash in an argument, prepend a
+backslash, as in
+
+@example
+@@@var{macname} @{\\\@{\@}\,@}
+@end example
+
+@noindent
+which will pass the (almost certainly error-producing) argument
+@samp{\@{@},} to @var{macname}.
+
+If the macro is defined to take a single argument, and is invoked
+without any braces, the entire rest of the line after the macro name is
+supplied as the argument.  For example:
+
+@example
+@@macro bar @{p@}
+Twice: \p\ & \p\.
+@@end macro
+@@bar aah
+@end example
+
+@noindent produces:
+
+@c Sorry for cheating, but let's not require macros to process the manual.
+@display
+Twice: aah & aah.
+@end display
+
+If the macro is defined to take a single argument, and is invoked with
+braces, the braced text is passed as the argument, regardless of
+commas.  For example:
+
+@example
+@@macro bar @{p@}
+Twice: \p\ & \p\.
+@@end macro
+@@bar@{a,b@}
+@end example
+
+@noindent produces:
+
+@display
+Twice: a,b & a,b.
+@end display
+
+
+@node Macro Details
+@section Macro Details
+@cindex Macro details
+@cindex Details of macro usage
+
+Due to unavoidable disparities in the @TeX{} and @command{makeinfo}
+implementations, Texinfo macros have the following limitations.
+
+@itemize @bullet
+@item
+All macros are expanded inside at least one @TeX{} group.  This means
+that @set and other such commands will have no effect inside a macro.
+
+@item
+Macros containing a command which must be on a line by itself, such as a
+conditional, cannot be invoked in the middle of a line.
+
+@item
+The @TeX{} implementation cannot construct macros that define macros in
+the natural way.  To do this, you must use conditionals and raw @TeX{}.
+For example:
+
+@example
+@@ifinfo
+@@macro ctor @{name, arg@}
+@@macro \name\
+something involving \arg\ somehow
+@@end macro
+@@end macro
+@@end ifinfo
+@@tex
+\gdef\ctor#1@{\ctorx#1,@}
+\gdef\ctorx#1,#2,@{\def#1@{something involving #2 somehow@}@}
+@@end tex
+@end example
+
+@item
+It is best to avoid comments inside macro definitions.
+
+@end itemize
+
+
+@node alias
+@section @samp{@@alias @var{new}=@var{existing}}
+@cindex Aliases, command
+@cindex Command aliases
+@findex alias
+
+The @samp{@@alias} command defines a new command to be just like an
+existing one.  This is useful for defining additional markup names, thus
+preserving semantic information in the input even though the output
+result may be the same.
+
+Write the @samp{@@alias} command on a line by itself, followed by the
+new command name, an equals sign, and the existing command name.
+Whitespace around the equals sign is ignored.  Thus:
+@example
+@@alias @var{new} = @var{existing}
+@end example
+
+For example, if your document contains citations for both books and
+some other media (movies, for example), you might like to define a
+macro @code{@@moviecite@{@}} that does the same thing as an ordinary
+@code{@@cite@{@}} but conveys the extra semantic information as well.
+You'd do this as follows:
+
+@example
+@@alias moviecite = cite
+@end example
+
+Macros do not always have the same effect due to vagaries of argument
+parsing.  Also, aliases are much simpler to define than macros.  So the
+command is not redundant.  (It was also heavily used in the Jargon File!)
+
+Aliases must not be recursive, directly or indirectly.
+
+@node definfoenclose
+@section @samp{definfoenclose}: Customized Highlighting
+@cindex Highlighting, customized
+@cindex Customized highlighting
+@findex definfoenclose
+
+A @code{@@definfoenclose} command may be used to define a highlighting
+command for Info, but not for TeX.  A command defined using
+@code{@@definfoenclose} marks text by enclosing it in strings that
+precede and follow the text.  You can use this to get closer control of
+your Info output.
+Presumably, if you define a command with @code{@@definfoenclose} for Info,
+you will create a corresponding command for @TeX{}, either in
+@file{texinfo.tex}, @file{texinfo.cnf}, or within an @samp{@@iftex} in
+your document.
+
+Write a @code{@@definfoenclose} command on a line and follow it with
+three arguments separated by commas.  The first argument to
+@code{@@definfoenclose} is the @@-command name (without the @code{@@});
+the second argument is the Info start delimiter string; and the third
+argument is the Info end delimiter string.  The latter two arguments
+enclose the highlighted text in the Info file.  A delimiter string may
+contain spaces.  Neither the start nor end delimiter is required.  If
+you do not want a start delimiter but do want an end delimiter, you must
+follow the command name with two commas in a row; otherwise, the Info
+formatting commands will naturally misinterpret the end delimiter string
+you intended as the start delimiter string.
+
+If you do a @code{@@definfoenclose} on the name of a pre-defined macro
+(such as @code{@@emph}, @code{@@strong}, @code{@@t}, or @code{@@i}), the
+enclosure definition will override the built-in definition.
+An enclosure command defined this way takes one argument in braces; this
+is intended for new markup commands (@pxref{Marking Text}).
+
+@findex phoo
+For example, you can write:
+
+@example
+@@definfoenclose phoo,//,\\
+@end example
+
+@noindent
+near the beginning of a Texinfo file to define @code{@@phoo} as an Info
+formatting command that inserts `//' before and `\\' after the argument
+to @code{@@phoo}.  You can then write @code{@@phoo@{bar@}} wherever you
+want `//bar\\' highlighted in Info.
+
+Also, for TeX formatting, you could write 
 
 @example
-@@@var{macro-name} @{\\\@{\@}\,@}
+@@iftex
+@@global@@let@@phoo=@@i
+@@end iftex
 @end example
 
 @noindent
-which will pass the (almost certainly error-producing) argument
-@samp{\@{@},} to @var{macro-name}.
+to define @code{@@phoo} as a command that causes TeX to typeset the
+argument to @code{@@phoo} in italics.
 
-If the macro is defined to take a single argument, and is invoked
-without any braces, the entire rest of the line after the macro name is
-supplied as the argument.  For example:
+Note that each definition applies to its own formatter: one for TeX,
+the other for @code{texinfo-format-buffer} or
+@code{texinfo-format-region}.  The @code{@@definfoenclose} command need
+not be within @samp{@@ifinfo}, but the raw @TeX{} commands do need to be
+in @samp{@@iftex}.
+
+@findex headword
+Here is another example: write
 
 @example
-@@macro bar @{p@}
-Twice: \p\, \p\.
-@@end macro
-@@bar aah
+@@definfoenclose headword, , :
 @end example
 
 @noindent
-produces:
+near the beginning of the file, to define @code{@@headword} as an Info
+formatting command that inserts nothing before and a colon after the
+argument to @code{@@headword}.
 
-@display
-Twice: aah, aah.
-@end display
+@samp{@@definfoenclose} definitions must not be recursive, directly or
+indirectly.
 
 
-@node Format/Print Hardcopy, Create an Info File, Macros, Top
-@comment  node-name,  next,  previous,  up
-@chapter Format and Print Hardcopy
+@node Hardcopy
+@chapter Formatting and Printing Hardcopy
 @cindex Format and print hardcopy
+@cindex Printing hardcopy
 @cindex Hardcopy, printing it
 @cindex Making a printed manual
 @cindex Sorting indices
@@ -11927,49 +12647,49 @@ Texinfo file: one for converting the Texinfo file into a file that will be
 printed, a second for sorting indices, and a third for printing the
 formatted document.  When you use the shell commands, you can either
 work directly in the operating system shell or work within a shell
-inside GNU Emacs.@refill
+inside GNU Emacs.
 
 If you are using GNU Emacs, you can use commands provided by Texinfo
 mode instead of shell commands.  In addition to the three commands to
 format a file, sort the indices, and print the result, Texinfo mode
 offers key bindings for commands to recenter the output buffer, show the
-print queue, and delete a job from the print queue.@refill
+print queue, and delete a job from the print queue.
 
 @menu
 * Use TeX::                     Use @TeX{} to format for hardcopy.
-* Format with tex/texindex::    How to format in a shell.
-* Format with texi2dvi::        A simpler way to use the shell.
+* Format with tex/texindex::    How to format with explicit shell commands.
+* Format with texi2dvi::        A simpler way to format.
 * Print with lpr::              How to print.
 * Within Emacs::                How to format and print from an Emacs shell.
 * Texinfo Mode Printing::       How to format and print in Texinfo mode.
 * Compile-Command::             How to print using Emacs's compile command.
 * Requirements Summary::        @TeX{} formatting requirements summary.
-* Preparing for TeX::           What you need to do to use @TeX{}.
+* Preparing for TeX::           What to do before you use @TeX{}.
 * Overfull hboxes::             What are and what to do with overfull hboxes.
 * smallbook::                   How to print small format books and manuals.
 * A4 Paper::                    How to print on European A4 paper.
+* pagesizes::                   How to print with customized page sizes.
 * Cropmarks and Magnification::  How to print marks to indicate the size
                                 of pages and how to print scaled up output.
+* PDF Output::                  Portable Document Format output.
 @end menu
 
-@node Use TeX, Format with tex/texindex, Format/Print Hardcopy, Format/Print Hardcopy
-@ifinfo
-@heading Use @TeX{}
-@end ifinfo
+@node Use TeX
+@section Use @TeX{}
 
 The typesetting program called @TeX{} is used for formatting a Texinfo
-file.  @TeX{} is a very powerful typesetting program and, if used right,
+file.  @TeX{} is a very powerful typesetting program and, if used correctly,
 does an exceptionally good job.  (@xref{Obtaining TeX, , How to Obtain
 @TeX{}}, for information on how to obtain @TeX{}.)
 
 The @code{makeinfo}, @code{texinfo-format-region}, and
 @code{texinfo-format-buffer} commands read the very same @@-commands
 in the Texinfo file as does @TeX{}, but process them differently to
-make an Info file; see @ref{Create an Info File}.@refill
+make an Info file (@pxref{Creating an Info File}).
 
-@node Format with tex/texindex, Format with texi2dvi, Use TeX, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
-@section Format using @code{tex} and @code{texindex}
+
+@node Format with tex/texindex
+@section Format with @code{tex} and @code{texindex}
 @cindex Shell formatting with @code{tex} and @code{texindex}
 @cindex Formatting with @code{tex} and @code{texindex}
 @cindex DVI file
@@ -11981,23 +12701,23 @@ the name of the Texinfo file.  For example:
 tex foo.texi
 @end example
 
-@noindent
-@TeX{} will produce a @dfn{DVI file} as well as several auxiliary
+@noindent @TeX{} will produce a @dfn{DVI file} as well as several auxiliary
 files containing information for indices, cross references, etc.  The
 DVI file (for @dfn{DeVice Independent} file) can be printed on virtually
-any printe (see the following sections).
+any device (see the following sections).
 
 @pindex texindex
 The @code{tex} formatting command itself does not sort the indices; it
 writes an output file of unsorted index data.  (The @code{texi2dvi}
-command automatically generates indices; see @ref{Format with texi2dvi,,
-Format using @code{texi2dvi}}.)  To generate a printed index after
+command automatically generates indices; @pxref{Format with texi2dvi,,
+Format with @code{texi2dvi}}.)  To generate a printed index after
 running the @code{tex} command, you first need a sorted index to work
 from.  The @code{texindex} command sorts indices.  (The source file
 @file{texindex.c} comes as part of the standard Texinfo distribution,
 among other places.)@refill
 
 @cindex Names of index files
+@cindex Index file names
 The @code{tex} formatting command outputs unsorted index files under
 names that obey a standard convention: the name of your main input file
 with any @samp{.tex} (or similar, @pxref{tex invocation,,, web2c,
@@ -12005,14 +12725,14 @@ Web2c}) extension removed, followed by the two letter names of indices.
 For example, the raw index output files for the input file
 @file{foo.texinfo} would be @file{foo.cp}, @file{foo.vr}, @file{foo.fn},
 @file{foo.tp}, @file{foo.pg} and @file{foo.ky}.  Those are exactly the
-arguments to give to @code{texindex}.@refill
+arguments to give to @code{texindex}.
 
 @need 1000
 @cindex Wildcards
 @cindex Globbing
 Instead of specifying all the unsorted index file names explicitly, you
 can use @samp{??} as shell wildcards and give the command in this
-form:@refill
+form:
 
 @example
 texindex foo.??
@@ -12024,13 +12744,13 @@ including any that you have defined yourself using @code{@@defindex}
 or @code{@@defcodeindex}.  (You may execute @samp{texindex foo.??}
 even if there are similarly named files with two letter extensions
 that are not index files, such as @samp{foo.el}.  The @code{texindex}
-command reports but otherwise ignores such files.)@refill
+command reports but otherwise ignores such files.)
 
 For each file specified, @code{texindex} generates a sorted index file
 whose name is made by appending @samp{s} to the input file name.  The
-@code{@@printindex} command knows to look for a file of that name
+@code{@@printindex} command looks for a file with that name
 (@pxref{Printing Indices & Menus}).  @code{texindex} does not alter the
-raw index output file.@refill
+raw index output file.
 
 After you have sorted the indices, you need to rerun the @code{tex}
 formatting command on the Texinfo file.  This regenerates the DVI file,
@@ -12039,7 +12759,7 @@ this time with up-to-date index entries.
 Finally, you may need to run @code{tex} one more time, to get the page
 numbers in the cross-references correct.
 
-To summarize, this is a four step process:
+To summarize, this is a five step process:
 
 @enumerate
 @item
@@ -12057,43 +12777,84 @@ file, this time with indices and defined cross-references, but with page
 numbers for the cross-references from last time, generally incorrect.
 
 @item
+Sort the indices again, with @code{texindex}.
+
+@item
 Run @code{tex} one last time.  This time the correct page numbers are
 written for the cross-references.
 @end enumerate
 
 @pindex texi2dvi
-Alternatively, it's a one-step process: run @code{texi2dvi}.
+Alternatively, it's a one-step process: run @code{texi2dvi}
+(@pxref{Format with texi2dvi}).
 
 You need not run @code{texindex} each time after you run @code{tex}.  If
 you do not, on the next run, the @code{tex} formatting command will use
 whatever sorted index files happen to exist from the previous use of
-@code{texindex}.  This is usually ok while you are
-debugging.@refill
+@code{texindex}.  This is usually ok while you are debugging.
+
+@cindex Auxiliary files, avoiding
+@findex novalidate
+@cindex Pointer validation, suppressing
+@cindex Chapters, formatting one at a time
+Sometimes you may wish to print a document while you know it is
+incomplete, or to print just one chapter of a document.  In that case,
+the usual auxiliary files that @TeX{} creates and warnings @TeX{} gives
+when cross-references are not satisfied are just nuisances.  You can
+avoid them with the @code{@@novalidate} command, which you must give
+@emph{before} the @code{@@setfilename} command
+(@pxref{setfilename,,@code{@@setfilename}}).  Thus, the beginning of
+your file would look approximately like this:
+
+@example
+\input texinfo
+@@novalidate
+@@setfilename myfile.info
+@dots{}
+@end example
 
+@noindent @code{@@novalidate} also turns off validation in
+@code{makeinfo}, just like its @code{--no-validate} option
+(@pxref{Pointer Validation}).
 
-@node Format with texi2dvi, Print with lpr, Format with tex/texindex, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
-@section Format using @code{texi2dvi}
+
+@node Format with texi2dvi
+@section Format with @code{texi2dvi}
 @pindex texi2dvi @r{(shell script)}
 
 The @code{texi2dvi} command automatically runs both @code{tex} and
 @code{texindex} as many times as necessary to produce a DVI file with
-up-to-date, sorted indices.  It simplifies the
-@code{tex}---@code{texindex}---@code{tex} sequence described in the
-previous section.
+sorted indices and all cross-references resolved.  It simplifies the
+@code{tex}---@code{texindex}---@code{tex}---@code{tex} sequence
+described in the previous section.
 
-The syntax for @code{texi2dvi} is like this (where @samp{prompt$} is your
-shell prompt):@refill
+To run @code{texi2dvi} on an input file @file{foo.texi}, do this (where
+@samp{prompt$ } is your shell prompt):
 
 @example
-prompt$ @kbd{texi2dvi @var{filename}@dots{}}
+prompt$ @kbd{texi2dvi foo.texi}
 @end example
 
-For a list of options, run @samp{texi2dvi --help}.
+As shown in this example, the input filenames to @code{texi2dvi} must
+include any extension (@samp{.texi}, @samp{.texinfo}, etc.).  Under
+MS-DOS and perhaps in other circumstances, you may need to run @samp{sh
+texi2dvi foo.texi} instead of relying on the operating system to invoke
+the shell on the @samp{texi2dvi} script.
 
+Perhaps the most useful option to @code{texi2dvi} is
+@samp{--texinfo=@var{cmd}}.  This inserts @var{cmd} on a line by itself
+after the @code{@@setfilename} in a temporary copy of the input file
+before running @TeX{}.  With this, you can specify different printing
+formats, such as @code{@@smallbook} (@pxref{smallbook}),
+@code{@@afourpaper} (@pxref{A4 Paper}), or @code{@@pageparams}
+(@pxref{pagesizes}), without actually changing the document source.
+(You can also do this on a site-wide basis with @file{texinfo.cnf};
+@pxref{Preparing for TeX,,Preparing for @TeX{}}).
 
-@node Print with lpr, Within Emacs, Format with texi2dvi, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
+For a list of other options, run @samp{texi2dvi --help}.
+
+
+@node Print with lpr, Within Emacs, Format with texi2dvi, Hardcopy
 @section Shell Print Using @code{lpr -d}
 @pindex lpr @r{(DVI print command)}
 
@@ -12102,7 +12863,7 @@ installation, but @samp{lpr -d} is common.  The command may require the
 DVI file name without any extension or with a @samp{.dvi}
 extension.  (If it is @samp{lpr}, you must include the @samp{.dvi}.)
 
-The following commands, for example, will (probably) suffice to sort the
+For example, the following commands, will (perhaps) suffice to sort the
 indices, format, and print the @cite{Bison Manual}:
 
 @example
@@ -12128,8 +12889,41 @@ lpr -d bison.dvi
 @end group
 @end example
 
-@node Within Emacs, Texinfo Mode Printing, Print with lpr, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
+@cindex Shell printing, on MS-DOS/MS-Windows
+@cindex Printing DVI files, on MS-DOS/MS-Windows
+@pindex lpr@r{-d, replacements on MS-DOS/MS-Windows}
+@code{lpr} is a standard program on Unix systems, but it is usually
+absent on MS-DOS/MS-Windows.  Some network packages come with a
+program named @code{lpr}, but these are usually limited to sending files
+to a print server over the network, and generally don't support the
+@samp{-d} option.  If you are unfortunate enough to work on one of these
+systems, you have several alternative ways of printing DVI files:
+
+@itemize @bullet{}
+@item Find and install a Unix-like @code{lpr} program, or its clone.
+If you can do that, you will be able to print DVI files just like
+described above.
+
+@item Send the DVI files to a network printer queue for DVI files.
+Some network printers have special queues for printing DVI files.  You
+should be able to set up your network software to send files to that
+queue.  In some cases, the version of @code{lpr} which comes with your
+network software will have a special option to send a file to specific
+queues, like this:
+
+@example
+lpr -Qdvi -hprint.server.domain bison.dvi
+@end example
+
+@item Convert the DVI file to a Postscript or PCL file and send it to your
+local printer.  @xref{dvips invocation,,, dvips, Dvips}, and the man
+pages for @code{dvilj}, for detailed description of these tools.  Once
+the DVI file is converted to the format your local printer understands
+directly, just send it to the appropriate port, usually @samp{PRN}.
+@end itemize
+
+
+@node Within Emacs
 @section From an Emacs Shell
 @cindex Print, format from Emacs shell
 @cindex Format, print from Emacs shell
@@ -12139,8 +12933,8 @@ lpr -d bison.dvi
 
 You can give formatting and printing commands from a shell within GNU
 Emacs.  To create a shell within Emacs, type @kbd{M-x shell}.  In this
-shell, you can format and print the document.  @xref{Format/Print
-Hardcopy, , Format and Print Hardcopy}, for details.@refill
+shell, you can format and print the document.  @xref{Hardcopy, , Format
+and Print Hardcopy}, for details.
 
 You can switch to and from the shell buffer while @code{tex} is
 running and do other editing.  If you are formatting a long document
@@ -12162,7 +12956,8 @@ lpr -d gcc.dvi
 and printing in Texinfo mode.@refill
 @end ifinfo
 
-@node Texinfo Mode Printing, Compile-Command, Within Emacs, Format/Print Hardcopy
+
+@node Texinfo Mode Printing, Compile-Command, Within Emacs, Hardcopy
 @section Formatting and Printing in Texinfo Mode
 @cindex Region printing in Texinfo mode
 @cindex Format and print in Texinfo mode
@@ -12205,7 +13000,7 @@ number shown by a preceding @kbd{C-c C-t C-q} command
 
 @item C-c C-t C-k
 @itemx M-x tex-kill-job
-Kill the currently running @TeX{} job started by
+Kill the currently running @TeX{} job started by either
 @code{texinfo-tex-region} or @code{texinfo-tex-buffer}, or any other
 process running in the Texinfo shell buffer.@refill
 
@@ -12264,13 +13059,22 @@ tex-show-queue-command                    "lpq"
 
 You can change the values of these variables with the @kbd{M-x
 edit-options} command (@pxref{Edit Options, , Editing Variable Values,
-xemacs, XEmacs User's Manual}), with the @kbd{M-x set-variable} command
-(@pxref{Examining, , Examining and Setting Variables, xemacs, XEmacs
-User's Manual}), or with your @file{.emacs} initialization file
-(@pxref{Init File, , , xemacs, XEmacs User's Manual}).@refill
-
-@node Compile-Command, Requirements Summary, Texinfo Mode Printing, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
+emacs, The GNU Emacs Manual}), with the @kbd{M-x set-variable} command
+(@pxref{Examining, , Examining and Setting Variables, emacs, The GNU
+Emacs Manual}), or with your @file{.emacs} initialization file
+(@pxref{Init File, , , emacs, The GNU Emacs Manual}).@refill
+
+@cindex Customize Emacs package
+@findex Development/Docs/Texinfo Customize group
+Beginning with version 20, GNU Emacs offers a user-friendly interface,
+called @dfn{Customize}, for changing values of user-definable variables.
+@xref{Easy Customization, , Easy Customization Interface, emacs, The GNU
+Emacs Manual}, for more details about this.  The Texinfo variables can
+be found in the @samp{Development/Docs/Texinfo} group, once you invoke
+the @kbd{M-x customize} command.
+
+
+@node Compile-Command, Requirements Summary, Texinfo Mode Printing, Hardcopy
 @section Using the Local Variables List
 @cindex Local variables
 @cindex Compile command for formatting
@@ -12295,11 +13099,10 @@ End:
 
 @noindent
 This technique is most often used by programmers who also compile programs
-this way; see @ref{Compilation, , , xemacs, XEmacs User's Manual}.@refill
+this way; see @ref{Compilation, , , emacs, The GNU Emacs Manual}.@refill
 
 
-@node Requirements Summary, Preparing for TeX, Compile-Command, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
+@node Requirements Summary
 @section @TeX{} Formatting Requirements Summary
 @cindex Requirements for formatting
 @cindex Minimal requirements for formatting
@@ -12310,7 +13113,7 @@ Every Texinfo file that is to be input to @TeX{} must begin with a
 
 @example
 \input texinfo
-@@setfilename @var{arg-not-used-by-@@TeX@{@}}
+@@setfilename @var{arg-not-used-by-@TeX{}}
 @end example
 
 @noindent
@@ -12325,7 +13128,7 @@ processing and forces out unfinished pages:
 @end example
 
 Strictly speaking, these lines are all a Texinfo file needs to be
-processed successfully by @TeX{}.  
+processed successfully by @TeX{}.
 
 Usually, however, the beginning includes an @code{@@settitle} command to
 define the title of the printed manual, an @code{@@setchapternewpage}
@@ -12333,31 +13136,20 @@ command, a title page, a copyright page, and permissions.  Besides an
 @code{@@bye}, the end of a file usually includes indices and a table of
 contents.  (And of course most manuals contain a body of text as well.)
 
-@iftex
-For more information, see
-@ref{settitle, , @code{@@settitle}},
-@ref{setchapternewpage, , @code{@@setchapternewpage}},
-@ref{Headings, ,Page Headings},
-@ref{Titlepage & Copyright Page},
-@ref{Printing Indices & Menus}, and
-@ref{Contents}.
-@end iftex
-@noindent
-@ifinfo
-For more information, see@*
-@ref{settitle, , @code{@@settitle}},@*
-@ref{setchapternewpage, , @code{@@setchapternewpage}},@*
-@ref{Headings, ,Page Headings},@*
-@ref{Titlepage & Copyright Page},@*
-@ref{Printing Indices & Menus}, and@*
-@ref{Contents}.
-@end ifinfo
+For more information, see:
+@itemize @bullet
+@item @ref{settitle, , @code{@@settitle}}
+@item @ref{setchapternewpage, , @code{@@setchapternewpage}}
+@item @ref{Headings, ,Page Headings}
+@item @ref{Titlepage & Copyright Page}
+@item @ref{Printing Indices & Menus}
+@item @ref{Contents}
+@end itemize
 
 
-@node Preparing for TeX, Overfull hboxes, Requirements Summary, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
-@section Preparing to Use @TeX{}
-@cindex Preparing to use @TeX{}
+@node Preparing for TeX
+@section Preparing for @TeX{}
+@cindex Preparing for @TeX{}
 @cindex @TeX{} input initialization
 @cindex @code{TEXINPUTS} environment variable
 @vindex TEXINPUTS
@@ -12390,14 +13182,14 @@ distribution.  This file is needed to support the @code{@@image} command
 @cindex Customizing of @TeX{} for Texinfo
 @cindex Site-wide Texinfo configuration file
 Optionally, you may create an additional @file{texinfo.cnf}, and install
-it as well.  This file is read by @TeX{} at the @code{@@setfilename}
-command (@pxref{setfilename,, @code{@@setfilename}}).  You can put any
-commands you like there according to local site-wide conventions, and
-they will be read by @TeX{} when processing any Texinfo document.  For
-example, if @file{texinfo.cnf} contains the a single line
-@samp{@@afourpaper} (@pxref{A4 Paper}), then all Texinfo documents will
-be processed with that page size in effect.  If you have nothing to put
-in @file{texinfo.cnf}, you do not need to create it.
+it as well.  This file is read by @TeX{} when the @code{@@setfilename}
+command is executed (@pxref{setfilename,, @code{@@setfilename}}).  You can put any
+commands you like there, according to local site-wide conventions.  They
+will be read by @TeX{} when processing any Texinfo document.  For
+example, if @file{texinfo.cnf} contains the line @samp{@@afourpaper}
+(@pxref{A4 Paper}), then all Texinfo documents will be processed with
+that page size in effect.  If you have nothing to put in
+@file{texinfo.cnf}, you do not need to create it.
 
 @vindex TEXINPUTS
 If neither of the above locations for these system files suffice for
@@ -12432,14 +13224,45 @@ export TEXINPUTS
 @end group
 @end example
 
+On MS-DOS/MS-Windows, you would say it like this@footnote{Note the use
+of the @samp{;} character, instead of @samp{:}, as directory separator
+on these systems.}:
+
+@example
+@group
+set TEXINPUTS=.;d:/home/me/mylib;c:/usr/lib/tex/macros
+@end group
+@end example
+
 @noindent
-This would cause @TeX{} to look for @file{\input} file first in the current
-directory, indicated by the @samp{.}, then in a hypothetical user's
-@file{me/mylib} directory, and finally in a system directory.
+It is customary for DOS/Windows users to put such commands in the
+@file{autoexec.bat} file, or in the Windows Registry.@refill
 
+@noindent
+These settings would cause @TeX{} to look for @file{\input} file first
+in the current directory, indicated by the @samp{.}, then in a
+hypothetical user's @file{me/mylib} directory, and finally in a system
+directory @file{/usr/lib/tex/macros}.
 
-@node Overfull hboxes, smallbook, Preparing for TeX, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
+@cindex Dumping a .fmt file
+@cindex Format file, dumping
+Finally, you may wish to dump a @file{.fmt} file (@pxref{Memory dumps,,,
+web2c, Web2c}) so that @TeX{} can load Texinfo faster.  (The
+disadvantage is that then updating @file{texinfo.tex} requires
+redumping.)  You can do this by running this command, assuming
+@file{epsf.tex} is findable by @TeX{}:
+
+@example
+initex texinfo @@dump
+@end example
+
+(@code{@@dump} is a @TeX{} primitive.)  You'll then need to move
+@file{texinfo.fmt} to wherever your @code{.fmt} files are found;
+typically this will be in the subdirectory @file{web2c} of your @TeX{}
+installation, for example, @file{/usr/local/share/tex/web2c}.
+
+
+@node Overfull hboxes
 @section Overfull ``hboxes''
 @cindex Overfull @samp{hboxes}
 @cindex @samp{hboxes}, overfull
@@ -12449,46 +13272,67 @@ directory, indicated by the @samp{.}, then in a hypothetical user's
 the right margin.  This can occur when @TeX{} comes upon what it
 interprets as a long word that it cannot hyphenate, such as an
 electronic mail network address or a very long title.  When this
-happens, @TeX{} prints an error message like this:@refill
+happens, @TeX{} prints an error message like this:
 
 @example
-Overfull \hbox (20.76302pt too wide)
+Overfull @@hbox (20.76302pt too wide)
 @end example
 
+@findex hbox
 @noindent
 (In @TeX{}, lines are in ``horizontal boxes'', hence the term, ``hbox''.
-The backslash, @samp{\}, is the @TeX{} equivalent of @samp{@@}.)@refill
+@samp{@@hbox} is a @TeX{} primitive not needed in the Texinfo language.)
 
 @TeX{} also provides the line number in the Texinfo source file and
 the text of the offending line, which is marked at all the places that
-@TeX{} knows how to hyphenate words.
+@TeX{} considered hyphenation.
 @xref{Debugging with TeX, , Catching Errors with @TeX{} Formatting},
-for more information about typesetting errors.@refill
+for more information about typesetting errors.
 
 If the Texinfo file has an overfull hbox, you can rewrite the sentence
 so the overfull hbox does not occur, or you can decide to leave it.  A
 small excursion into the right margin often does not matter and may not
-even be noticeable.@refill
+even be noticeable.
+
+If you have many overfull boxes and/or an antipathy to rewriting, you
+can coerce @TeX{} into greatly increasing the allowable interword
+spacing, thus (if you're lucky) avoiding many of the bad line breaks,
+like this:
+
+@findex \emergencystretch
+@example
+@@tex
+\global\emergencystretch = .9\hsize
+@@end tex
+@end example
+
+@noindent
+(You can adjust the fraction as needed.)  This huge value for
+@code{\emergencystretch} cannot be the default, since then the typeset
+output would generally be of noticeably lower quality.  The default
+value is @samp{.15\hsize}.  @code{\hsize} is the @TeX{} dimension
+containing the current line width.
 
 @cindex Black rectangle in hardcopy
-@cindex Rectangle, ugly, black in hardcopy
-However, unless told otherwise, @TeX{} will print a large, ugly, black
-rectangle beside the line that contains the overfull hbox.  This is so
-you will notice the location of the problem if you are correcting a
-draft.@refill
+@cindex Rectangle, black in hardcopy
+@cindex Box, ugly black in hardcopy
+@cindex Ugly black rectangles in hardcopy
+For what overfull boxes you have, however, @TeX{} will print a large,
+ugly, black rectangle beside the line that contains the overfull hbox
+unless told otherwise.  This is so you will notice the location of the
+problem if you are correcting a draft.
 
-@need 1000
 @findex finalout
 To prevent such a monstrosity from marring your final printout, write
 the following in the beginning of the Texinfo file on a line of its own,
-before the @code{@@titlepage} command:@refill
+before the @code{@@titlepage} command:
 
 @example
 @@finalout
 @end example
 
-@node smallbook, A4 Paper, Overfull hboxes, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
+
+@node smallbook
 @section Printing ``Small'' Books
 @findex smallbook
 @cindex Small book size
@@ -12507,43 +13351,35 @@ file, before the title page:@refill
 @end example
 
 @noindent
-(Since regular sized books are often about 7 by 9.25 inches, this
-command might better have been called the @code{@@regularbooksize}
-command, but it came to be called the @code{@@smallbook} command by
-comparison to the 8.5 by 11 inch format.)@refill
+(Since many books are about 7 by 9.25 inches, this command might better
+have been called the @code{@@regularbooksize} command, but it came to be
+called the @code{@@smallbook} command by comparison to the 8.5 by 11 inch format.)
 
 If you write the @code{@@smallbook} command between the
 start-of-header and end-of-header lines, the Texinfo mode @TeX{}
 region formatting command, @code{texinfo-tex-region}, will format the
 region in ``small'' book size (@pxref{Start of Header}).@refill
 
-The Free Software Foundation distributes printed copies of @cite{The GNU
-Emacs Manual} and other manuals in the ``small'' book size.
-@xref{smallexample & smalllisp, , @code{@@smallexample} and
-@code{@@smalllisp}}, for information about commands that make it easier
-to produce examples for a smaller manual.@refill
+@xref{small}, for information about
+commands that make it easier to produce examples for a smaller manual.
 
-Alternatively, to avoid embedding this physical paper size in your
-document, use @code{texi2dvi} to format your document (@pxref{Format
-with texi2dvi}), and supply @samp{-t @@smallbook} as an argument.  Then
-other people do not have to change the document source file to format it
-differently.
+@xref{Format with texi2dvi}, and @ref{Preparing for TeX,,Preparing for
+@TeX{}}, for other ways to format with @code{@@smallbook} that do not
+require changing the source file.
 
 
-@node A4 Paper, Cropmarks and Magnification, smallbook, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
+@node A4 Paper
 @section Printing on A4 Paper
 @cindex A4 paper, printing on
 @cindex Paper size, European A4
 @cindex European A4 paper
 @findex afourpaper
 
-You can tell @TeX{} to typeset a document for printing on European size
+You can tell @TeX{} to format a document for printing on European size
 A4 paper with the @code{@@afourpaper} command.  Write the command on a
-line by itself between @code{@@iftex} and @code{@@end iftex} lines near
-the beginning of the Texinfo file, before the title page:@refill
-
-For example, this is how you would write the header for this manual:@refill
+line by itself near the beginning of the Texinfo file, before the title
+page.  For example, this is how you would write the header for this
+manual:
 
 @example
 @group
@@ -12551,35 +13387,70 @@ For example, this is how you would write the header for this manual:@refill
 @@c %**start of header
 @@setfilename texinfo
 @@settitle Texinfo
-@@syncodeindex vr fn
-@@iftex
 @@afourpaper
-@@end iftex
 @@c %**end of header
 @end group
 @end example
 
-Alternatively, to avoid embedding this physical paper size in your
-document, use @code{texi2dvi} to format your document (@pxref{Format
-with texi2dvi}), and supply @samp{-t @@afourpaper} as an argument.  Then
-other people do not have to change the document source file to format it
-differently.
+@xref{Format with texi2dvi}, and @ref{Preparing for TeX,,Preparing for
+@TeX{}}, for other ways to format with @code{@@afourpaper} that do not
+require changing the source file.
 
-@pindex texinfo.cnf
-Another alternative: put the @code{@@afourpaper} command in the file
-@file{texinfo.cnf} that @TeX{} will read.  (No need for @code{@@iftex}
-there.)  This will automatically typeset all the Texinfo documents at
-your site with that paper size in effect.
+@findex afourlatex
+You may or may not prefer the formatting that results from the command
+@code{@@afourlatex}.  There's also @code{@@afourwide} for A4 paper in
+wide format.
 
 
-@node Cropmarks and Magnification,  , A4 Paper, Format/Print Hardcopy
-@comment  node-name,  next,  previous,  up
-@section Cropmarks and Magnification
+@node pagesizes
+@section @code{@@pagesizes} [@var{width}][, @var{height}]: Custom page sizes
+@findex pagesizes
+@cindex Custom page sizes
+@cindex Page sizes, customized
+@cindex Text width and height
+@cindex Width of text area
+@cindex Height of text area
+@cindex Depth of text area
+
+You can explicitly specify the height and (optionally) width of the main
+text area on the page with the @code{@@pagesizes} command.  Write this
+on a line by itself near the beginning of the Texinfo file, before the
+title page.  The height comes first, then the width if desired,
+separated by a comma.  Examples:
+
+@example
+@@pagesizes 200mm,150mm  @c for b5 paper
+@end example
+@noindent and
+@example
+@@pagesizes 11.5in      @c for legal paper
+@end example
+
+@cindex B5 paper, printing on
+@cindex Legal paper, printing on
+This would be reasonable for printing on B5-size paper.  To emphasize,
+this command specifies the size of the @emph{text area}, not the size of
+the paper (which is 250@dmn{mm} by 177@dmn{mm} for B5, 14@dmn{in} by
+8.5@dmn{in} for legal).
+
+@cindex Margins on page, not controllable
+To make more elaborate changes, such as changing any of the page
+margins, you must define a new command in @file{texinfo.tex} (or
+@file{texinfo.cnf}, @pxref{Preparing for TeX,,Preparing for @TeX{}}).
+
+@xref{Format with texi2dvi}, and @ref{Preparing for TeX,,Preparing for
+@TeX{}}, for other ways to specify @code{@@pagesizes} that do not
+require changing the source file.
 
+@code{@@pagesizes} is ignored by @code{makeinfo}.
+
+
+@node Cropmarks and Magnification
+@section Cropmarks and Magnification
 @findex cropmarks
 @cindex Cropmarks for printing
 @cindex Printing cropmarks
-You can attempt to direct @TeX{} to print cropmarks at the corners of
+You can (attempt to) direct @TeX{} to print cropmarks at the corners of
 pages with the @code{@@cropmarks} command.  Write the @code{@@cropmarks}
 command on a line by itself between @code{@@iftex} and @code{@@end
 iftex} lines near the beginning of the Texinfo file, before the title
@@ -12599,8 +13470,8 @@ book set to 7 by 9.25 inches with the @code{@@smallbook} command.
 (Printers will not produce cropmarks for regular sized output that is
 printed on regular sized paper.)  Since different printing machines work
 in different ways, you should explore the use of this command with a
-spirit of adventure.  You may have to redefine the command in the
-@file{texinfo.tex} definitions file.@refill
+spirit of adventure.  You may have to redefine the command in
+@file{texinfo.tex}.
 
 @findex mag @r{(@TeX{} command)}
 @cindex Magnified printing
@@ -12616,7 +13487,7 @@ write this command between @code{@@tex} and @code{@@end tex}
 Follow the @code{\mag} command with an @samp{=} and then a number that
 is 1000 times the magnification you desire.  For example, to print pages
 at 1.2 normal size, write the following near the beginning of the
-Texinfo file, before the title page:@refill
+Texinfo file, before the title page:
 
 @example
 @group
@@ -12627,27 +13498,69 @@ Texinfo file, before the title page:@refill
 @end example
 
 With some printing technologies, you can print normal-sized copies that
-look better than usual by using a larger-than-normal master.@refill
+look better than usual by giving a larger-than-normal master to your
+print shop.  They do the reduction, thus effectively increasing the
+resolution.
 
-Depending on your system, @code{\mag} may not work or may work only at
-certain magnifications.  Be prepared to experiment.@refill
+Depending on your system, DVI files prepared with a
+nonstandard-@code{\mag} may not print or may print only with certain
+magnifications.  Be prepared to experiment.
 
-@node Create an Info File, Install an Info File, Format/Print Hardcopy, Top
-@comment  node-name,  next,  previous,  up
-@chapter Creating an Info File
+
+@node PDF Output
+@section PDF Output
+@cindex PDF output
+
+@pindex pdftex
+You can generate a PDF output file from Texinfo source by using the
+@command{pdftex} program to process your file instead of plain
+@command{tex}.  Just run @samp{pdftex foo.texi} instead of @samp{tex
+foo.texi}, or give the @samp{--pdf} option to @command{texi2dvi}.
+
+PDF stands for Portable Document Format, and was invented by Adobe
+Systems.  The
+@uref{http://www.adobe.com/prodindex/acrobat/adobepdf.html, file format
+definition} is freely available, as is a
+@uref{http://www.foolabs.com/xpdf/, free viewer} for the X window
+system.  Since PDF is a binary format, there is no @samp{@@ifpdf} or
+@samp{@@pdf} command by analogy with the other output formats.
+
+Despite the `portable' in the name, PDF files are nowhere near as
+portable in practice as the plain ASCII formats (Info, HTML) Texinfo
+also supports (portability relative to DVI is arguable).  They also tend
+to be much larger and do not support the bitmap fonts used by @TeX{} (by
+default) very well.  Nevertheless, a PDF file does preserve an actual
+printed document on a screen as faithfully as possible, unlike HTML,
+say, so have their place.
+
+PDF support in Texinfo is fairly rudimentary.
+
+
+@node Creating and Installing Info Files
+@chapter Creating and Installing Info Files
+
+This chapter describes how to create and install info files.  @xref{Info
+Files}, for general information about the file format itself.
+
+
+@menu
+* Creating an Info File::       
+* Install an Info File::        
+@end menu
+
+@node Creating an Info File
+@section Creating an Info File
 @cindex Creating an Info file
-@cindex Info, creating an on-line file
+@cindex Info, creating an online file
 @cindex Formatting a file for Info
 
-@code{makeinfo} is a utility that converts a Texinfo file into an Info
-file; @code{texinfo-format-region} and @code{texinfo-format-buffer} are
-GNU Emacs functions that do the same.@refill
-
-A Texinfo file must contain an @code{@@setfilename} line near its
-beginning, otherwise the Info formatting commands will fail.
+@code{makeinfo} is a program that converts a Texinfo file into an Info
+file, HTML file, or plain text.  @code{texinfo-format-region} and
+@code{texinfo-format-buffer} are GNU Emacs functions that convert
+Texinfo to Info.
 
-For information on installing the Info file in the Info system, see
-@ref{Install an Info File}.@refill
+For information on installing the Info file in the Info system,
+@pxref{Install an Info File}.
 
 @menu
 * makeinfo advantages::         @code{makeinfo} provides better error checking.
@@ -12661,21 +13574,22 @@ For information on installing the Info file in the Info system, see
 * Batch Formatting::            How to format for Info in Emacs Batch mode.
 * Tag and Split Files::         How tagged and split files help Info
                                   to run better.
+* makeinfo html::               Generating HTML output.
 @end menu
 
-@node makeinfo advantages, Invoking makeinfo, Create an Info File, Create an Info File
-@ifinfo
-@heading @code{makeinfo} Preferred
-@end ifinfo
+
+@node makeinfo advantages
+@subsection @code{makeinfo} Preferred
 
 The @code{makeinfo} utility creates an Info file from a Texinfo source
 file more quickly than either of the Emacs formatting commands and
 provides better error messages.  We recommend it.  @code{makeinfo} is a
 C program that is independent of Emacs.  You do not need to run Emacs to
 use @code{makeinfo}, which means you can use @code{makeinfo} on machines
-that are too small to run Emacs. You can run @code{makeinfo} in
-any one of three ways: from an operating system shell, from a shell
-inside Emacs, or by typing a key command in Texinfo mode in Emacs.
+that are too small to run Emacs.  You can run @code{makeinfo} in any one
+of three ways: from an operating system shell, from a shell inside
+Emacs, or by typing the @kbd{C-c C-m C-r} or the @kbd{C-c C-m C-b}
+command in Texinfo mode in Emacs.
 @refill
 
 The @code{texinfo-format-region} and the @code{texinfo-format-buffer}
@@ -12683,13 +13597,12 @@ commands are useful if you cannot run @code{makeinfo}.  Also, in some
 circumstances, they format short regions or buffers more quickly than
 @code{makeinfo}.@refill
 
-@node Invoking makeinfo, makeinfo options, makeinfo advantages, Create an Info File
-@section Running @code{makeinfo} from a Shell
+@node Invoking makeinfo
+@subsection Running @code{makeinfo} from a Shell
 
 To create an Info file from a Texinfo file, type @code{makeinfo}
 followed by the name of the Texinfo file.  Thus, to create the Info
 file for Bison, type the following to the shell:
-is the prompt):@refill
 
 @example
 makeinfo bison.texinfo
@@ -12710,9 +13623,9 @@ makeinfo --version
 @end ifinfo
 
 
-@node makeinfo options, Pointer Validation, Invoking makeinfo, Create an Info File
+@node makeinfo options
 @comment  node-name,  next,  previous,  up
-@section Options for @code{makeinfo}
+@subsection Options for @code{makeinfo}
 @cindex @code{makeinfo} options
 @cindex Options for @code{makeinfo}
 
@@ -12749,24 +13662,37 @@ The options are:
 Cause the variable @var{var} to be defined.  This is equivalent to
 @code{@@set @var{var}} in the Texinfo file (@pxref{set clear value}).
 
+@item --commands-in-node-names
+@opindex --commands-in-node-names
+Allow @code{@@}-commands in node names.  This is not recommended, as it
+can probably never be implemented in @TeX{}.  It also makes
+@code{makeinfo} much slower.  Also, this option is ignored when
+@samp{--no-validate} is used.  @xref{Pointer Validation}, for more
+details.
+
 @item --error-limit=@var{limit}
+@itemx -e @var{limit}
 @opindex --error-limit=@var{limit}
+@opindex -e @var{limit}
 Set the maximum number of errors that @code{makeinfo} will report
 before exiting (on the assumption that continuing would be useless);
 default 100.
 
-@need 150
 @item --fill-column=@var{width}
+@itemx -f @var{width}
 @opindex --fill-column=@var{width}
+@opindex -f @var{width}
 Specify the maximum number of columns in a line; this is the right-hand
 edge of a line.  Paragraphs that are filled will be filled to this
 width.  (Filling is the process of breaking up and connecting lines so
 that lines are the same length as or shorter than the number specified
 as the fill column.  Lines are broken between words.) The default value
-is 72.
+is 72.  Ignored with @samp{--html}.
 
 @item --footnote-style=@var{style}
+@itemx -s @var{style}
 @opindex --footnote-style=@var{style}
+@opindex -s @var{style}
 Set the footnote style to @var{style}, either @samp{end} for the end
 node style (the default) or @samp{separate} for the separate node style.
 The value set by this option overrides the value set in a Texinfo file
@@ -12774,45 +13700,78 @@ by an @code{@@footnotestyle} command (@pxref{Footnotes}).  When the
 footnote style is @samp{separate}, @code{makeinfo} makes a new node
 containing the footnotes found in the current node.  When the footnote
 style is @samp{end}, @code{makeinfo} places the footnote references at
-the end of the current node.
+the end of the current node.  Ignored with @samp{--html}.
 
 @item --force
+@itemx -F
 @opindex --force
+@opindex -F
 Ordinarily, if the input file has errors, the output files are not
 created.  With this option, they are preserved.
 
 @item --help
+@itemx -h
 @opindex --help
+@opindex -h
 Print a usage message listing all available options, then exit successfully.
 
+@item --html
+Generate HTML output rather than Info.  @xref{makeinfo html}.
+
 @item -I @var{dir}
 @opindex -I @var{dir}
-Add @code{dir} to the directory search list for finding files that are
-included using the @code{@@include} command.  By default,
-@code{makeinfo} searches only the current directory.
+Append @var{dir} to the directory search list for finding files that
+are included using the @code{@@include} command.  By default,
+@code{makeinfo} searches only the current directory.  If @var{dir} is
+not given, the current directory @file{.} is appended.  Note that
+@var{dir} can actually be a list of several directories separated by the
+usual path separator character (@samp{:} on Unix, @samp{;} on
+MS-DOS/MS-Windows).
+
+@item --macro-expand=@var{file}
+@itemx -E @var{file}
+Output the Texinfo source with all the macros expanded to the named
+file.  Normally, the results of macro expansion are used internally by
+@code{makeinfo} and then discarded.  This option is used by
+@command{texi2dvi} if you are using an old version of @file{texinfo.tex}
+that does not support @code{@@macro}.
 
 @item --no-headers
 @opindex --no-headers
-Do not include menus or node lines in the output.  This results in an
-@sc{ascii} file that you cannot read in Info since it does not contain
-the requisite nodes or menus. It is primarily useful to extract certain
-pieces of a manual into separate files to be included in a distribution,
-such as @file{INSTALL} files.
+@cindex Plain text output
+@cindex ASCII text output
+@cindex Generating plain text files
+@cindex @file{INSTALL} file, generating
+For Info output, do not include menus or node lines in the output and
+write to standard output (unless @option{--output} is specified).  This
+results in an @sc{ascii} file that you cannot read in Info since it does
+not contain the requisite nodes or menus.  It is primarily useful to
+extract certain pieces of a manual into separate files to be included in
+a distribution, such as @file{INSTALL} files.  
+
+@cindex Navigation links, omitting
+For HTML output, if @samp{--no-split} is also specified, do not include a
+navigation links at the top of each node.  @xref{makeinfo html}.
 
 @item --no-split
 @opindex --no-split
+@cindex Splitting of output files
+@cindex Output file splitting
 Suppress the splitting stage of @code{makeinfo}.  By default, large
 output files (where the size is greater than 70k bytes) are split into
-smaller subfiles, each one approximately 50k bytes.
+smaller subfiles.  For Info output, each one is approximately 50k bytes.
+For HTML output, each file contains one node (@pxref{makeinfo html}).
 
 @item --no-pointer-validate
 @itemx --no-validate
 @opindex --no-pointer-validate
 @opindex --no-validate
-Suppress the pointer-validation phase of @code{makeinfo}.  Normally,
-after a Texinfo file is processed, some consistency checks are made to
-ensure that cross references can be resolved, etc.
-@xref{Pointer Validation}.@refill
+@cindex Pointer validation, suppressing
+Suppress the pointer-validation phase of @code{makeinfo}.  This can also
+be done with the @code{@@novalidate} command (@pxref{Use TeX,,Use
+@TeX{}}).  Normally, after a Texinfo file is processed, some consistency
+checks are made to ensure that cross references can be resolved, etc.
+@xref{Pointer Validation}.
 
 @item --no-warn
 @opindex --no-warn
@@ -12821,6 +13780,10 @@ want this if the file you are creating has examples of Texinfo cross
 references within it, and the nodes that are referenced do not actually
 exist.
 
+@item --number-sections
+@opindex --number-sections
+Output chapter, section, and appendix numbers as in printed manuals.
+
 @item --no-number-footnotes
 @opindex --no-number-footnotes
 Suppress automatic footnote numbering.  By default, @code{makeinfo}
@@ -12834,15 +13797,20 @@ current footnote number to 1 at the start of each node.
 Specify that the output should be directed to @var{file} and not to the
 file name specified in the @code{@@setfilename} command found in the
 Texinfo source (@pxref{setfilename}).  If @var{file} is @samp{-}, output
-goes to standard output and @samp{--no-split} is implied.
+goes to standard output and @samp{--no-split} is implied.  For split
+HTML output, @var{file} is the name of the output file for the top node
+(@pxref{makeinfo html}).
 
 @item -P @var{dir}
 @opindex -P @var{dir}
-Prepend @code{dir} to the directory search list for @code{@@include}.
+Prepend @var{dir} to the directory search list for @code{@@include}.
+If @var{dir} is not given, the current directory @file{.} is prepended.
 See @samp{-I} for more details.
 
 @item --paragraph-indent=@var{indent}
+@itemx -p @var{indent}
 @opindex --paragraph-indent=@var{indent}
+@opindex -p @var{indent}
 Set the paragraph indentation style to @var{indent}.  The value set by
 this option overrides the value set in a Texinfo file by an
 @code{@@paragraphindent} command (@pxref{paragraphindent}).  The value
@@ -12856,11 +13824,13 @@ Preserve any existing indentation at the starts of paragraphs.
 Delete any existing indentation.
 
 @item @var{num}
-Indent each paragraph by that number of spaces.
+Indent each paragraph by @var{num} spaces.
 @end table
 
 @item --reference-limit=@var{limit}
+@itemx -r @var{limit}
 @opindex --reference-limit=@var{limit}
+@opindex -r @var{limit}
 Set the value of the number of references to a node that
 @code{makeinfo} will make without reporting a warning.  If a node has more
 than this number of references in it, @code{makeinfo} will make the
@@ -12877,21 +13847,24 @@ Normally, @code{makeinfo} only outputs messages if there are errors or
 warnings.
 
 @item --version
+@itemx -V
 @opindex --version
+@opindex -V
 Print the version number, then exit successfully.
 
 @end table
 
 
-@node Pointer Validation, makeinfo in Emacs, makeinfo options, Create an Info File
-@section Pointer Validation
+@node Pointer Validation
+@subsection Pointer Validation
 @cindex Pointer validation with @code{makeinfo}
 @cindex Validation of pointers
 
-If you do not suppress pointer-validation, @code{makeinfo} will check
-the validity of the final Info file.  Mostly, this means ensuring that
-nodes you have referenced really exist.  Here is a complete list of what
-is checked:@refill
+If you do not suppress pointer validation with the @samp{--no-validate}
+option or the @code{@@novalidate} command in the source file (@pxref{Use
+TeX,,Use @TeX{}}), @code{makeinfo} will check the validity of the final
+Info file.  Mostly, this means ensuring that nodes you have referenced
+really exist.  Here is a complete list of what is checked:
 
 @enumerate
 @item
@@ -12901,15 +13874,16 @@ node in the current file and is not an external reference such as to
 
 @item
 In every node, if the `Previous' node is different from the `Up' node,
-then the `Previous' node must also be pointed to by a `Next' node.@refill
+then the node pointed to by the `Previous' field must have a `Next'
+field which points back to this node.@refill
 
 @item
 Every node except the `Top' node must have an `Up' pointer.@refill
 
 @item
-The node referenced by an `Up' pointer must contain a reference to the
-current node in some manner other than through a `Next' reference.
-This includes menu entries and cross references.@refill
+The node referenced by an `Up' pointer must itself reference the current
+node through a menu item, unless the node referenced by `Up'
+has the form `(@var{file})'.
 
 @item
 If the `Next' reference of a node is not the same as the `Next' reference
@@ -12917,10 +13891,62 @@ of the `Up' reference, then the node referenced by the `Next' pointer
 must have a `Previous' pointer that points back to the current node.
 This rule allows the last node in a section to point to the first node
 of the next chapter.@refill
+
+@item
+Every node except `Top' should be referenced by at least one other node,
+either via the `Previous' or `Next' links, or via a menu or a
+cross-reference.@refill
 @end enumerate
 
-@node makeinfo in Emacs, texinfo-format commands, Pointer Validation, Create an Info File
-@section Running @code{makeinfo} inside Emacs
+@cindex @@-commands in @@node, limited support
+Some Texinfo documents might fail during the validation phase because
+they use commands like @code{@@value} and @code{@@definfoenclose} in
+node definitions and cross-references inconsistently.  Consider the
+following example:
+
+@example
+@group
+@@set nodename Node 1
+
+@@node @@value@{nodename@}, Node 2, Top, Top
+
+This is node 1.
+
+@@node Node 2, , Node 1, Top
+
+This is node 2.
+@end group
+@end example
+
+@noindent
+Here, the node ``Node 1'' was referenced both verbatim and through
+@code{@@value}.
+
+By default, @code{makeinfo} fails such cases, because node names are not
+fully expanded until they are written to the output file.  You should
+always try to reference nodes consistently; e.g., in the above example,
+the second @code{@@node} line should have also used @code{@@value}.
+However, if, for some reason, you @emph{must} reference node names
+inconsistently, and @code{makeinfo} fails to validate the file, you can
+use the @samp{--commands-in-node-names} option to force @code{makeinfo}
+to perform the expensive expansion of all node names it finds in the
+document.  This might considerably slow down the program, though;
+twofold increase in conversion time was measured for large documents
+such as the Jargon file.
+
+@cindex @@value in @@node lines
+The support for @code{@@}-commands in @code{@@node} directives is not
+general enough to be freely used.  For example, if the example above
+redefined @code{nodename} somewhere in the document, @code{makeinfo}
+will fail to convert it, even if invoked with the
+@samp{--commands-in-node-names} option.
+
+@samp{--commands-in-node-names} has no effect if the @samp{--no-validate}
+option is given.
+
+
+@node makeinfo in Emacs
+@subsection Running @code{makeinfo} inside Emacs
 @cindex Running @code{makeinfo} in Emacs
 @cindex @code{makeinfo} inside Emacs
 @cindex Shell, running @code{makeinfo} in
@@ -12960,7 +13986,7 @@ You can parse the error messages by typing @kbd{C-x `}
 (@code{next-error}).  This causes Emacs to go to and position the
 cursor on the line in the Texinfo source that @code{makeinfo} thinks
 caused the error.  @xref{Compilation, , Running @code{make} or
-Compilers Generally, xemacs, XEmacs User's Manual}, for more
+Compilers Generally, emacs, The GNU Emacs Manual}, for more
 information about using the @code{next-error} command.@refill
 
 In addition, you can kill the shell in which the @code{makeinfo}
@@ -12971,8 +13997,8 @@ output.@refill
 @item C-c C-m C-k
 @itemx M-x makeinfo-kill-job
 @findex makeinfo-kill-job
-Kill the current running @code{makeinfo} job created by
-@code{makeinfo-region} or @code{makeinfo-buffer}.@refill
+Kill the current running @code{makeinfo} job
+(from @code{makeinfo-region} or @code{makeinfo-buffer}).@refill
 
 @item C-c C-m C-l
 @itemx M-x makeinfo-recenter-output-buffer
@@ -13005,22 +14031,22 @@ For example, you could write the following in your @file{.emacs} file:@refill
 @c three references to the same named manual, which looks strange.
 @iftex
 For more information, see @ref{makeinfo options, , Options for
-@code{makeinfo}}, as well as ``Editing Variable Values,''``Examining and
-Setting Variables,'' and ``Init File'' in the @cite{The GNU Emacs
+@code{makeinfo}}, as well as ``Editing Variable Values,'' ``Examining
+and Setting Variables,'' and ``Init File'' in @cite{The GNU Emacs
 Manual}.
 @end iftex
 @noindent
 @ifinfo
 For more information, see@*
-@ref{Edit Options, , Editing Variable Values, xemacs, XEmacs User's Manual},@*
-@ref{Examining, , Examining and Setting Variables, xemacs, XEmacs User's Manual},@*
-@ref{Init File, , , xemacs, XEmacs User's Manual}, and@*
+@ref{Edit Options, , Editing Variable Values, emacs, The GNU Emacs Manual},@*
+@ref{Examining, , Examining and Setting Variables, emacs, The GNU Emacs Manual},@*
+@ref{Init File, , , emacs, The GNU Emacs Manual}, and@*
 @ref{makeinfo options, , Options for @code{makeinfo}}.
 @end ifinfo
 
-@node texinfo-format commands, Batch Formatting, makeinfo in Emacs, Create an Info File
+@node texinfo-format commands
 @comment  node-name,  next,  previous,  up
-@section The @code{texinfo-format@dots{}} Commands
+@subsection The @code{texinfo-format@dots{}} Commands
 @findex texinfo-format-region
 @findex texinfo-format-buffer
 
@@ -13055,16 +14081,16 @@ procedures are described in an appendix; see @ref{Catching Mistakes}.
 However, the @code{makeinfo} program is often faster and
 provides better error checking (@pxref{makeinfo in Emacs}).@refill
 
-@node Batch Formatting, Tag and Split Files, texinfo-format commands, Create an Info File
+@node Batch Formatting
 @comment  node-name,  next,  previous,  up
-@section Batch Formatting
+@subsection Batch Formatting
 @cindex Batch formatting for Info
 @cindex Info batch formatting
 
 You can format Texinfo files for Info using @code{batch-texinfo-format}
 and Emacs Batch mode.  You can run Emacs in Batch mode from any shell,
 including a shell inside of Emacs.  (@xref{Command Switches, , Command
-Line Switches and Arguments, xemacs, XEmacs User's Manual}.)@refill
+Line Switches and Arguments, emacs, The GNU Emacs Manual}.)@refill
 
 Here is a shell command to format all the files that end in
 @file{.texinfo} in the current directory:
@@ -13087,9 +14113,9 @@ you can continue working in it.  (When you run
 @code{texinfo-format-region} or @code{texinfo-format-buffer}, you cannot
 use that Emacs for anything else until the command finishes.)@refill
 
-@node Tag and Split Files,  , Batch Formatting, Create an Info File
+@node Tag and Split Files
 @comment  node-name,  next,  previous,  up
-@section Tag Files and Split Files
+@subsection Tag Files and Split Files
 @cindex Making a tag table automatically
 @cindex Tag table, making automatically
 
@@ -13105,27 +14131,27 @@ bytes, @code{texinfo-format-buffer} and @code{makeinfo} split the
 large Info file into shorter @dfn{indirect} subfiles of about 50,000
 bytes each.  Big files are split into smaller files so that Emacs does
 not need to make a large buffer to hold the whole of a large Info
-file; instead, Emacs allocates just enough memory for the small, split
-off file that is needed at the time.  This way, Emacs avoids wasting
+file; instead, Emacs allocates just enough memory for the small, split-off
+file that is needed at the time.  This way, Emacs avoids wasting
 memory when you run Info.  (Before splitting was implemented, Info
 files were always kept short and @dfn{include files} were designed as
 a way to create a single, large printed manual out of the smaller Info
 files.  @xref{Include Files}, for more information.  Include files are
-still used for very large documents, such as @cite{The XEmacs Lisp
+still used for very large documents, such as @cite{The Emacs Lisp
 Reference Manual}, in which each chapter is a separate file.)@refill
 
 When a file is split, Info itself makes use of a shortened version of
 the original file that contains just the tag table and references to
-the files that were split off.  The split off files are called
+the files that were split off.  The split-off files are called
 @dfn{indirect} files.@refill
 
-The split off files have names that are created by appending @w{@samp{-1}},
+The split-off files have names that are created by appending @w{@samp{-1}},
 @w{@samp{-2}}, @w{@samp{-3}} and so on to the file name specified by the
 @code{@@setfilename} command.  The shortened version of the original file
 continues to have the name specified by @code{@@setfilename}.@refill
 
 At one stage in writing this document, for example, the Info file was saved
-as @file{test-texinfo} and that file looked like this:@refill
+as the file @file{test-texinfo} and that file looked like this:@refill
 
 @example
 @group
@@ -13155,7 +14181,7 @@ Node: conventions^?6855
 
 @noindent
 (But @file{test-texinfo} had far more nodes than are shown here.)  Each of
-the split off, indirect files, @file{test-texinfo-1},
+the split-off, indirect files, @file{test-texinfo-1},
 @file{test-texinfo-2}, and @file{test-texinfo-3}, is listed in this file
 after the line that says @samp{Indirect:}.  The tag table is listed after
 the line that says @samp{Tag table:}. @refill
@@ -13165,7 +14191,7 @@ records the cumulative number of bytes in the preceding indirect files,
 not counting the file list itself, the tag table, or the permissions
 text in each file.  In the tag table, the number following the node name
 records the location of the beginning of the node, in bytes from the
-beginning.@refill
+beginning of the (unsplit) output.
 
 If you are using @code{texinfo-format-buffer} to create Info files,
 you may want to run the @code{Info-validate} command.  (The
@@ -13177,9 +14203,50 @@ validate the structure of the nodes, see @ref{Using
 Info-validate}.@refill
 
 
-@node Install an Info File, Command List, Create an Info File, Top
-@comment  node-name,  next,  previous,  up
-@chapter Installing an Info File
+@node makeinfo html
+@subsection Generating HTML
+@cindex HTML
+
+As an alternative to the normal Info format output you can use the
+@samp{--html} option to generate output in HTML format, for installation
+on a web site (for example).  In this release, HTML output from
+@code{makeinfo} is monolithic, splitting the output by chapter or node
+is not supported.  We hope to implement this feature soon.
+
+The HTML output file is named according to @code{@@setfilename}, but
+with any @samp{.info} extension replaced with @samp{.html}.
+
+Texinfo input marked up with the @code{@@ifhtml} command will produce
+output only with the @samp{--html} option supplied.  Input marked up
+with the @code{@@html} is passed literally to the output (suppressing
+the normal escaping of input @samp{<}, @samp{>} and @samp{&} characters
+which have special significance in HTML).
+
+The @samp{--footnote-style} option is currently ignored for HTML output;
+footnotes are hyperlinked at the end of the output file.
+
+The HTML generated is mostly standard (i.e., HTML 2.0, RFC1866).  The
+exception is that HTML 3.2 tables are generated from the
+@code{@@multitable} command, but tagged to degrade as well as possible
+in browsers without table support.  Please report output from an
+error-free run of @code{makeinfo} which violates the HTML 3.2 DTD as a
+bug.
+
+Navigation bars are inserted at the start of nodes, similarly to Info
+output.  The @samp{--no-headers} option will suppress this if used with
+@samp{--no-split}.  Header @code{<link>} elements in split output can
+support info-like navigation with browsers like Lynx and @w{Emacs W3}
+which implement this @w{HTML 1.0} feature.  You still won't normally get
+the multi-file regexp and index search facilities provided by Info
+readers.  Otherwise, hyperlinks are generated from Texinfo commands
+where appropriate.  @samp{@@xref} commands to other documents are
+generated assuming the other document is available in HTML form too, and
+@samp{.html} is appended to the @samp{@@xref} Info file name.  This
+presumably will often not work.
+
+
+@node Install an Info File
+@section Installing an Info File
 @cindex Installing an Info file
 @cindex Info file installation
 @cindex @file{dir} directory for Info installation
@@ -13189,7 +14256,7 @@ Info files using the standalone Info program or the Info reader built
 into Emacs.  (@inforef{Top, info, info}, for an introduction to Info.)
 
 @menu
-* Directory file::              The top level menu for all Info files.
+* Directory File::              The top level menu for all Info files.
 * New Info File::               Listing a new info file.
 * Other Info Directories::      How to specify Info files that are
                                   located in other directories.
@@ -13198,10 +14265,9 @@ into Emacs.  (@inforef{Top, info, info}, for an introduction to Info.)
 * Invoking install-info::       @code{install-info} options.
 @end menu
 
-@node Directory file, New Info File, Install an Info File, Install an Info File
-@ifinfo
-@heading The @file{dir} File
-@end ifinfo
+
+@node Directory File
+@subsection The Directory File @file{dir}
 
 For Info to work, the @file{info} directory must contain a file that
 serves as a top level directory for the Info system.  By convention,
@@ -13216,7 +14282,6 @@ this:@refill
 @example
 @group
 * Menu:
-
 * Info:    (info).     Documentation browsing system.
 * Emacs:   (emacs).    The extensible, self-documenting
                        text editor.
@@ -13246,21 +14311,17 @@ File: emacs  Node: Top, Up: (DIR), Next: Distrib
 @end example
 
 @noindent
-(Note that in this case, the @file{dir} file name is written in upper
-case letters---it can be written in either upper or lower case.  Info
-has a feature that it will change the case of the file name to lower
-case if it cannot find the name as written.)@refill
-@c !!! Can any file name be written in upper or lower case,
-@c     or is dir a special case?
-@c     Yes, apparently so, at least with Gillespie's Info.  --rjc 24mar92
+In this case, the @file{dir} file name is written in upper case
+letters---it can be written in either upper or lower case.  This is not
+true in general, it is a special case for @file{dir}.
 
 
-@node New Info File, Other Info Directories, Directory file, Install an Info File
-@section Listing a New Info File
+@node New Info File
+@subsection Listing a New Info File
 @cindex Adding a new info file
 @cindex Listing a new info file
 @cindex New info file, listing it in @file{dir} file
-@cindex Info file, listing new one
+@cindex Info file, listing a new
 @cindex @file{dir} file listing
 
 To add a new Info file to your system, you must write a menu entry to
@@ -13280,25 +14341,26 @@ followed by a period.  The third part is the description.
 The name of an Info file often has a @file{.info} extension.  Thus, the
 Info file for GDB might be called either @file{gdb} or @file{gdb.info}.
 The Info reader programs automatically try the file name both with and
-without @file{.info}; so it is better to avoid clutter and not to write
-@samp{.info} explicitly in the menu entry.  For example, the GDB menu
-entry should use just @samp{gdb} for the file name, not @samp{gdb.info}.
+without @file{.info}@footnote{On MS-DOS/MS-Windows systems, Info will
+try the @file{.inf} extension as well.}; so it is better to avoid
+clutter and not to write @samp{.info} explicitly in the menu entry.  For
+example, the GDB menu entry should use just @samp{gdb} for the file
+name, not @samp{gdb.info}.
 
 
-@node Other Info Directories, Installing Dir Entries, New Info File, Install an Info File
-@comment  node-name,  next,  previous,  up
-@section Info Files in Other Directories
+@node Other Info Directories
+@subsection Info Files in Other Directories
 @cindex Installing Info in another directory
 @cindex Info installed in another directory
 @cindex Another Info directory
+@cindex @file{dir} files and Info directories
 
 If an Info file is not in the @file{info} directory, there are three
 ways to specify its location:@refill
 
-@itemize @bullet
+@enumerate
 @item
-Write the pathname in the @file{dir} file as the second part of the
-menu.@refill
+Write the pathname in the @file{dir} file as the second part of the menu.
 
 @item
 If you are using Emacs, list the name of the file in a second @file{dir}
@@ -13306,58 +14368,63 @@ file, in its directory; and then add the name of that directory to the
 @code{Info-directory-list} variable in your personal or site
 initialization file.
 
-This tells Emacs where to look for @file{dir} files.  Emacs merges the
-files named @file{dir} from each of the listed directories.  (In Emacs
-version 18, you can set the @code{Info-directory} variable to the name
-of only one directory.)@refill
+This variable tells Emacs where to look for @file{dir} files (the files
+must be named @file{dir}).  Emacs merges the files named @file{dir} from
+each of the listed directories.  (In Emacs version 18, you can set the
+@code{Info-directory} variable to the name of only one
+directory.)@refill
 
 @item
 Specify the Info directory name in the @code{INFOPATH} environment
 variable in your @file{.profile} or @file{.cshrc} initialization file.
 (Only you and others who set this environment variable will be able to
-find Info files whose location is specified this way.)@refill
-@end itemize
+find Info files whose location is specified this way.)
+@end enumerate
 
-For example, to reach a test file in the @file{/home/bob/manuals}
+For example, to reach a test file in the @file{/home/bob/info}
 directory, you could add an entry like this to the menu in the
-@file{dir} file:@refill
+standard @file{dir} file:@refill
 
 @example
-* Test: (/home/bob/manuals/info-test).  Bob's own test file.
+* Test: (/home/bob/info/info-test).  Bob's own test file.
 @end example
 
 @noindent
 In this case, the absolute file name of the @file{info-test} file is
 written as the second part of the menu entry.@refill
 
-@vindex Info-directory-list
 Alternatively, you could write the following in your @file{.emacs}
 file:@refill
 
+@vindex Info-directory-list
 @example
 @group
+(require 'info)
 (setq Info-directory-list
-      '("/home/bob/manuals"
-        "/usr/local/info"))
+      (cons (expand-file-name "/home/bob/info") Info-directory-list))
 @end group
 @end example
 
-@c reworded to avoid overfill hbox
 This tells Emacs to merge the @file{dir} file from the
-@file{/home/bob/manuals} directory with the @file{dir} file from the
-@file{/usr/local/info} directory.  Info will list the
-@file{/home/bob/manuals/info-test} file as a menu entry in the
-@file{/home/bob/manuals/dir} file.@refill
+@file{/home/bob/info} directory with the system @file{dir} file.  Info
+will list the @file{/home/bob/info/info-test} file as a menu entry in
+the @file{/home/bob/info/dir} file.  Emacs does the merging only
+when @kbd{M-x info} is first run, so if you want to set
+@code{Info-directory-list} in an Emacs session where you've already run
+@code{info}, you must @code{(setq Info-dir-contents nil)} to force Emacs
+to recompose the @file{dir} file.
 
 @vindex INFOPATH
 Finally, you can tell Info where to look by setting the @code{INFOPATH}
-environment variable in your @file{.cshrc} or @file{.profile} file.  If
-you use a Bourne-compatible shell such as @code{sh} or @code{bash} for
-your shell command interpreter, you set the @code{INFOPATH} environment
-variable in the @file{.profile} initialization file; but if you use
-@code{csh} or @code{tcsh}, you must set the variable in the
-@file{.cshrc} initialization file.  The two types of shells use
-different syntax.
+environment variable in your shell startup file, such as @file{.cshrc},
+@file{.profile} or @file{autoexec.bat}.  If you use a Bourne-compatible
+shell such as @code{sh} or @code{bash} for your shell command
+interpreter, you set the @code{INFOPATH} environment variable in the
+@file{.profile} initialization file; but if you use @code{csh} or
+@code{tcsh}, you set the variable in the @file{.cshrc} initialization
+file.  On MS-DOS/MS-Windows systems, you must set @code{INFOPATH} in
+your @file{autoexec.bat} file or in the Registry.  Each type of shell
+uses a different syntax.
 
 @itemize @bullet
 @item
@@ -13365,7 +14432,7 @@ In a @file{.cshrc} file, you could set the @code{INFOPATH}
 variable as follows:@refill
 
 @smallexample
-setenv INFOPATH .:~/manuals:/usr/local/emacs/info
+setenv INFOPATH .:~/info:/usr/local/emacs/info
 @end smallexample
 
 @item
@@ -13373,21 +14440,35 @@ In a @file{.profile} file, you would achieve the same effect by
 writing:@refill
 
 @smallexample
-INFOPATH=.:$HOME/manuals:/usr/local/emacs/info
+INFOPATH=.:$HOME/info:/usr/local/emacs/info
 export INFOPATH
 @end smallexample
+
+@item
+@pindex autoexec.bat
+In a @file{autoexec.bat} file, you write this command@footnote{Note the
+use of @samp{;} as the directory separator, and a different syntax for
+using values of other environment variables.}:
+
+@smallexample
+set INFOPATH=.;%HOME%/info;c:/usr/local/emacs/info
+@end smallexample
 @end itemize
 
 @noindent
 The @samp{.} indicates the current directory as usual.  Emacs uses the
 @code{INFOPATH} environment variable to initialize the value of Emacs's
-own @code{Info-directory-list} variable.
-
-@cindex colon @r{last in @code{INFOPATH}}
-However you set @code{INFOPATH}, if its last character is a colon, this
+own @code{Info-directory-list} variable.  The stand-alone Info reader
+merges any files named @file{dir} in any directory listed in the
+@env{INFOPATH} variable into a single menu presented to you in the node
+called @samp{(dir)Top}.
+
+@cindex @samp{:} @r{last in @env{INFOPATH}}
+However you set @env{INFOPATH}, if its last character is a
+colon@footnote{On MS-DOS/MS-Windows systems, use semi-colon instead.}, this
 is replaced by the default (compiled-in) path.  This gives you a way to
 augment the default path with new directories without having to list all
-the standard places.  For example (using @code{sh} syntax:
+the standard places.  For example (using @code{sh} syntax):
 
 @example
 INFOPATH=/local/info:
@@ -13398,9 +14479,16 @@ export INFOPATH
 will search @file{/local/info} first, then the standard directories.
 Leading or doubled colons are not treated specially.
 
+@cindex @file{dir} file, creating your own
+When you create your own @file{dir} file for use with
+@code{Info-directory-list} or @env{INFOPATH}, it's easiest to start by
+copying an existing @file{dir} file and replace all the text after the
+@samp{* Menu:} with your desired entries.  That way, the punctuation and
+special CTRL-_ characters that Info needs will be present.
+
 
 @node Installing Dir Entries, Invoking install-info, Other Info Directories, Install an Info File
-@section Installing Info Directory Files
+@subsection Installing Info Directory Files
 
 When you install an Info file onto your system, you can use the program
 @code{install-info} to update the Info directory file @file{dir}.
@@ -13410,11 +14498,12 @@ after copying the Info file into its proper installed location.
 @findex dircategory
 @findex direntry
 In order for the Info file to work with @code{install-info}, you should
-use the commands @code{@@dircategory} and @code{@@direntry} in the
-Texinfo source file.  Use @code{@@direntry} to specify the menu entry to
-add to the Info directory file, and use @code{@@dircategory} to specify
-which part of the Info directory to put it in.  Here is how these
-commands are used in this manual:
+use the commands @code{@@dircategory} and
+@code{@@direntry}@dots{}@code{@@end direntry} in the Texinfo source
+file.  Use @code{@@direntry} to specify the menu entries to add to the
+Info directory file, and use @code{@@dircategory} to specify which part
+of the Info directory to put it in.  Here is how these commands are used
+in this manual:
 
 @smallexample
 @@dircategory Texinfo documentation system
@@ -13446,38 +14535,50 @@ command.  If you use them later on in the input, @code{install-info}
 will not notice them.
 
 If you use @code{@@dircategory} more than once in the Texinfo source,
-each usage specifies one category; the new menu entry is added to the
-Info directory file in each of the categories you specify.  If you use
-@code{@@direntry} more than once, each usage specifies one menu entry;
-each of these menu entries is added to the directory in each of the
-specified categories.
+each usage specifies the `current' category; any subsequent
+@code{@@direntry} commands will add to that category.  
+
+Here are some recommended @code{@@dircategory} categories: `GNU
+packages', `GNU programming tools', `GNU programming documentation',
+`GNU Emacs Lisp', `GNU libraries', `Linux', `TeX', `Individual
+utilities'.  The idea is to include the `invoking' node for every
+program installed by a package under `Individual utilities', and an
+entry for the manual as a whole in the appropriate other category.
 
 
-@node Invoking install-info,  , Installing Dir Entries, Install an Info File
-@section Invoking install-info
+@node Invoking install-info
+@subsection Invoking install-info
 
 @pindex install-info
 
 @code{install-info} inserts menu entries from an Info file into the
 top-level @file{dir} file in the Info system (see the previous sections
 for an explanation of how the @file{dir} file works).  It's most often
-run as part of software installation, or when constructing a dir file
+run as part of software installation, or when constructing a @file{dir} file
 for all manuals on a system.  Synopsis:
 
 @example
 install-info [@var{option}]@dots{} [@var{info-file} [@var{dir-file}]]
 @end example
 
-If @var{info-file} or @var{dir-file} are not specified, the various
-options (described below) that define them must be.  There are no
-compile-time defaults, and standard input is never used.
-@code{install-info} can read only one info file and write only one dir
-file per invocation.
+If @var{info-file} or @var{dir-file} are not specified, the options
+(described below) that define them must be.  There are no compile-time
+defaults, and standard input is never used.  @code{install-info} can
+read only one Info file and write only one @file{dir} file per invocation.
 
 @cindex @file{dir}, created by @code{install-info}
 If @var{dir-file} (however specified) does not exist,
 @code{install-info} creates it if possible (with no entries).
 
+@cindex Compressed files, reading
+@cindex Dir files, compressed
+If any input file is compressed with @code{gzip} (@pxref{Invoking
+gzip,,,gzip, Gzip}), @code{install-info} automatically uncompresses it
+for reading.  And if @var{dir-file} is compressed, @code{install-info}
+also automatically leaves it compressed after writing any changes.
+If @var{dir-file} itself does not exist, @code{install-info} tries to
+open @file{@var{dir-file}.gz}.
+
 Options:
 
 @table @code
@@ -13488,12 +14589,16 @@ name in the entry in @var{dir-file} must be @var{info-file} (except for
 an optional @samp{.info} in either one).  Don't insert any new entries.
 
 @item --dir-file=@var{name}
+@itemx -d @var{name}
 @opindex --dir-file=@var{name}
+@opindex -d @var{name}
 Specify file name of the Info directory file.  This is equivalent to
 using the @var{dir-file} argument.
 
 @item --entry=@var{text}
+@itemx -e @var{text}
 @opindex --entry=@var{text}
+@opindex -e @var{text}
 Insert @var{text} as an Info directory entry; @var{text} should have the
 form of an Info menu item line plus zero or more extra lines starting
 with whitespace.  If you specify more than one entry, they are all
@@ -13501,17 +14606,24 @@ added.  If you don't specify any entries, they are determined from
 information in the Info file itself.
 
 @item --help
+@itemx -h
 @opindex --help
+@opindex -h
 Display a usage message listing basic usage and all available options,
 then exit successfully.
 
 @item --info-file=@var{file}
+@itemx -i @var{file}
 @opindex --info-file=@var{file}
+@opindex -i @var{file}
 Specify Info file to install in the directory.
-This is equivalent to using the @var{info-file} argument.
+Equivalent to using the @var{info-file} argument.
 
 @item --info-dir=@var{dir}
+@itemx -D @var{dir}
 @opindex --info-dir=@var{dir}
+@opindex -D @var{dir}
+Specify the directory where @file{dir} resides.
 Equivalent to @samp{--dir-file=@var{dir}/dir}.
 
 @item --item=@var{text}
@@ -13524,33 +14636,40 @@ a menu item.
 Suppress warnings.
 
 @item --remove
+@itemx -r
 @opindex --remove
+@opindex -r
 Same as @samp{--delete}.
 
 @item --section=@var{sec}
+@itemx -s @var{sec}
 @opindex --section=@var{sec}
+@opindex -s @var{sec}
 Put this file's entries in section @var{sec} of the directory.  If you
 specify more than one section, all the entries are added in each of the
 sections.  If you don't specify any sections, they are determined from
 information in the Info file itself.
 
 @item --version
+@itemx -V
 @opindex --version
+@opindex -V
 @cindex version number, finding
 Display version information and exit successfully.
 
 @end table
 
 
-@node Command List, Tips, Install an Info File, Top
+@node Command List
 @appendix @@-Command List
 @cindex Alphabetical @@-command list
 @cindex List of  @@-commands
 @cindex @@-command list
+@cindex Reference to @@-commands
 
 Here is an alphabetical list of the @@-commands in Texinfo.  Square
 brackets, @t{[}@w{ }@t{]}, indicate optional arguments; an ellipsis,
-@samp{@dots{}}, indicates repeated text.@refill
+@samp{@dots{}}, indicates repeated text.
 
 @sp 1
 @table @code
@@ -13587,10 +14706,10 @@ Indicate to @TeX{} that an immediately preceding period, question
 mark, exclamation mark, or colon does not end a sentence.  Prevent
 @TeX{} from inserting extra whitespace as it does at the end of a
 sentence.  The command has no effect on the Info file output.
-@xref{Not Ending a Sentence}.@refill
+@xref{Not Ending a Sentence}.
 
 @item @@=
-Generate a macro (bar) accent over the next character, as in @=o.
+Generate a macron (bar) accent over the next character, as in @=o.
 @xref{Inserting Accents}.
 
 @item @@?
@@ -13615,7 +14734,7 @@ Stands for a left brace, @samp{@{}.
 Stands for a right-hand brace, @samp{@}}.@*
 @xref{Braces Atsigns, , Inserting @@ and braces}.
 
-@item @@=
+@item @@~
 Generate a tilde accent over the next character, as in @~N.
 @xref{Inserting Accents}.
 
@@ -13624,15 +14743,27 @@ Generate a tilde accent over the next character, as in @~N.
 Generate the uppercase and lowercase Scandinavian A-ring letters,
 respectively: @AA{}, @aa{}.  @xref{Inserting Accents}.
 
+@item @@acronym@{@var{abbrev}@}
+Tag @var{abbrev} as an acronym, that is, an abbreviation written in all
+capital letters, such as `NASA'.  @xref{acronym,, @code{acronym}}.
+
 @item @@AE@{@}
 @itemx @@ae@{@}
 Generate the uppercase and lowercase AE ligatures, respectively:
 @AE{}, @ae{}.  @xref{Inserting Accents}.
 
-@item @@afourpaper
-Change page dimensions for the A4 paper size.  
-Only allowed inside @code{@@iftex} @dots{} @code{@@end iftex}.  
-@xref{A4 Paper}.
+@item @@afourlatex
+@itemx @@afourpaper
+@itemx @@afourwide
+Change page dimensions for the A4 paper size.  @xref{A4 Paper}.
+
+@item @@alias @var{new}=@var{existing}
+Make the command @samp{@@@var{new}} an alias for the existing command
+@samp{@@@var{existing}}.  @xref{alias}.
+
+@item @@anchor@{@var{name}@}
+Define @var{name} as the current location for use as a cross-reference
+target.  @xref{anchor,, @code{@@anchor}}.
 
 @item @@appendix @var{title}
 Begin an appendix.  The title appears in the table
@@ -13736,10 +14867,14 @@ and @code{@@end ifset} commands, and preventing
 Highlight text that is an expression, a syntactically complete token
 of a program, or a program name.  @xref{code, , @code{@@code}}.@refill
 
+@item @@command@{@var{command-name}@}
+Indicate a command name, such as @command{ls}.
+@xref{command,, @code{@@command}}.
+
 @item @@comment @var{comment}
 Begin a comment in Texinfo.  The rest of the line does not appear in
 either the Info file or the printed manual.  A synonym for @code{@@c}.
-@xref{Comments, , Comments}.@refill
+@xref{Comments}.
 
 @item @@contents
 Print a complete table of contents.  Has no effect in Info, which uses
@@ -13779,12 +14914,9 @@ entity, and its arguments, if any.  @xref{Definition Commands}.@refill
 Define a new index and its indexing command.  Print entries in a roman
 font.  @xref{New Indices, , Defining New Indices}.@refill
 
-@c Unused so far as I can see and unsupported by makeinfo -- karl, 15sep96.
-@item @@definfoenclose @var{new-command}, @var{before}, @var{after},
-Create new @@-command for Info that marks text by enclosing it in
-strings that precede and follow the text.  Write definition inside of
-@code{@@ifinfo} @dots{} @code{@@end ifinfo}. @xref{Customized
-Highlighting}.@refill
+@item @@definfoenclose @var{newcmd}, @var{before}, @var{after},
+Create new @@-command @var{newcmd} for Info that marks text by enclosing
+it in strings that precede and follow the text.  @xref{definfoenclose}.
 
 @item @@defivar @var{class} @var{instance-variable-name}
 @itemx @@defivarx @var{class} @var{instance-variable-name}
@@ -13793,8 +14925,8 @@ object-oriented programming.  The command is equivalent to @samp{@@defcv
 @{Instance Variable@} @dots{}}.  @xref{Definition Commands}, and
 @ref{deffnx,, Def Cmds in Detail}.
 
-@item @@defmac @var{macro-name} @var{arguments}@dots{}
-@itemx @@defmacx @var{macro-name} @var{arguments}@dots{}
+@item @@defmac @var{macroname} @var{arguments}@dots{}
+@itemx @@defmacx @var{macroname} @var{arguments}@dots{}
 Format a description for a macro.  The command is equivalent to
 @samp{@@deffn Macro @dots{}}.  @xref{Definition Commands}, and
 @ref{deffnx,, Def Cmds in Detail}.
@@ -13813,7 +14945,7 @@ Format a description for an operation in object-oriented programming.
 @code{@@defop} takes as arguments the overall name of the category of
 operation, the name of the class of the operation, the name of the
 operation, and its arguments, if any.  @xref{Definition
-Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+Commands}, and @ref{Abstract Objects}.
 
 @item @@defopt @var{option-name}
 @itemx @@defoptx @var{option-name}
@@ -13832,7 +14964,7 @@ and @ref{deffnx,, Def Cmds in Detail}.
 Format a description for a data type.  @code{@@deftp} takes as arguments
 the category, the name of the type (which is a word like @samp{int} or
 @samp{float}), and then the names of attributes of objects of that type.
-@xref{Definition Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+@xref{Definition Commands}, and @ref{Data Types}.
 
 @item @@deftypefn @var{classification} @var{data-type} @var{name} @var{arguments}@dots{}
 @itemx @@deftypefnx @var{classification} @var{data-type} @var{name} @var{arguments}@dots{}
@@ -13846,16 +14978,29 @@ entity, and its arguments, if any.  @xref{Definition Commands}, and
 @itemx @@deftypefunx @var{data-type} @var{function-name} @var{arguments}@dots{}
 Format a description for a function in a typed language.
 The command is equivalent to @samp{@@deftypefn Function @dots{}}.
-@xref{Definition Commands},
-and @ref{deffnx,, Def Cmds in Detail}.
+@xref{Definition Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+
+@item @@deftypeivar @var{class} @var{data-type} @var{variable-name}
+@itemx @@deftypeivarx @var{class} @var{data-type} @var{variable-name}
+Format a description for a typed instance variable in object-oriented
+programming. @xref{Definition Commands}, and @ref{Abstract Objects}.
 
 @item @@deftypemethod @var{class} @var{data-type} @var{method-name} @var{arguments}@dots{}
 @itemx @@deftypemethodx @var{class} @var{data-type} @var{method-name} @var{arguments}@dots{}
 Format a description for a typed method in object-oriented programming.
-Takes as arguments the name of the class of the method, the return type
-of the method, the name of the method, and its arguments, if any.
 @xref{Definition Commands}, and @ref{deffnx,, Def Cmds in Detail}.
 
+@item @@deftypeop @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
+@itemx @@deftypeopx @var{category} @var{class} @var{data-type} @var{name} @var{arguments}@dots{}
+Format a description for a typed operation in object-oriented programming.
+@xref{Definition Commands}, and @ref{Abstract Objects}.
+
+@item @@deftypevar @var{data-type} @var{variable-name}
+@itemx @@deftypevarx @var{data-type} @var{variable-name}
+Format a description for a variable in a typed language.  The command is
+equivalent to @samp{@@deftypevr Variable @dots{}}.  @xref{Definition
+Commands}, and @ref{deffnx,, Def Cmds in Detail}.
+
 @item @@deftypevr @var{classification} @var{data-type} @var{name}
 @itemx @@deftypevrx @var{classification} @var{data-type} @var{name}
 Format a description for something like a variable in a typed
@@ -13864,12 +15009,6 @@ classification of entity being described, the type, and the name of the
 entity.  @xref{Definition Commands}, and @ref{deffnx,, Def Cmds in
 Detail}.
 
-@item @@deftypevar @var{data-type} @var{variable-name}
-@itemx @@deftypevarx @var{data-type} @var{variable-name}
-Format a description for a variable in a typed language.  The command is
-equivalent to @samp{@@deftypevr Variable @dots{}}.  @xref{Definition
-Commands}, and @ref{deffnx,, Def Cmds in Detail}.
-
 @item @@defun @var{function-name} @var{arguments}@dots{}
 @itemx @@defunx @var{function-name} @var{arguments}@dots{}
 Format a description for functions.  The command is equivalent to
@@ -13889,7 +15028,7 @@ as arguments the category of the entity and the name of the entity.
 @xref{Definition Commands},
 and @ref{deffnx,, Def Cmds in Detail}.
 
-@item @@detailmenu@{@}
+@item @@detailmenu
 Avoid @code{makeinfo} confusion stemming from the detailed node listing
 in a master menu.  @xref{Master Menu Parts}.
 
@@ -13902,33 +15041,39 @@ Specify a part of the Info directory menu where this file's entry should
 go.  @xref{Installing Dir Entries}.
 
 @item @@direntry
-Begin the Info directory menu entry for this file.
-@xref{Installing Dir Entries}.
+Begin the Info directory menu entry for this file.  Pair with
+@code{@@end direntry}.  @xref{Installing Dir Entries}.
 
-@need 100
 @item @@display
-Begin a kind of example.  Indent text, do not fill, do not select a
-new font.  Pair with @code{@@end display}.  @xref{display, ,
-@code{@@display}}.@refill
+Begin a kind of example.  Like @code{@@example} (indent text, do not
+fill), but do not select a new font.  Pair with @code{@@end display}.
+@xref{display, , @code{@@display}}.
 
 @item @@dmn@{@var{dimension}@}
 Format a unit of measure, as in 12@dmn{pt}.  Causes @TeX{} to insert a
 thin space before @var{dimension}.  No effect in Info.
-@xref{dmn, , @code{@@dmn}}.@refill
+@xref{dmn, , @code{@@dmn}}.
+
+@item @@documentencoding @var{enc}
+Declare the input encoding as @var{enc}.
+@xref{documentencoding,, @code{@@documentencoding}}.
+
+@item @@documentlanguage @var{CC}
+Declare the document language as the two-character ISO-639 abbreviation
+@var{CC}.  @xref{documentlanguage,, @code{@@documentlanguage}}.
 
 @item @@dotaccent@{@var{c}@}
-Generate a dot accent over the character @var{c}, as in @dotaccent{oo}.
+Generate a dot accent over the character @var{c}, as in @dotaccent{o}.
 @xref{Inserting Accents}.
 
 @item @@dots@{@}
 Insert an ellipsis: @samp{@dots{}}.
-@xref{dots, , @code{@@dots@{@}}}.@refill
+@xref{dots, , @code{@@dots}}.@refill
 
 @item @@email@{@var{address}[, @var{displayed-text}]@}
 Indicate an electronic mail address.
-@xref{email, , @code{@@email}}.@refill
+@xref{email, , @code{@@email}}.
 
-@need 100
 @item @@emph@{@var{text}@}
 Highlight @var{text}; text is displayed in @emph{italics} in printed
 output, and surrounded by asterisks in Info.  @xref{Emphasis, ,
@@ -13938,18 +15083,20 @@ Emphasizing Text}.
 Ends @var{environment}, as in @samp{@@end example}.  @xref{Formatting
 Commands,,@@-commands}.
 
+@item @@env@{@var{environment-variable}@}
+Indicate an environment variable name, such as @env{PATH}.
+@xref{env,, @code{@@env}}.
+
 @item @@enddots@{@}
 Generate an end-of-sentence of ellipsis, like this @enddots{}
 @xref{dots,,@code{@@dots@{@}}}.
 
-@need 100
 @item @@enumerate [@var{number-or-letter}]
 Begin a numbered list, using @code{@@item} for each entry.
 Optionally, start list with @var{number-or-letter}.  Pair with
 @code{@@end enumerate}.  @xref{enumerate, ,
 @code{@@enumerate}}.@refill
 
-@need 100
 @item @@equiv@{@}
 Indicate to the reader the exact equivalence of two forms with a
 glyph: @samp{@equiv{}}.  @xref{Equivalence}.@refill
@@ -13974,6 +15121,10 @@ Begin an example.  Indent text, do not fill, and select fixed-width font.
 Pair with @code{@@end example}.  @xref{example, ,
 @code{@@example}}.@refill
 
+@item @@exampleindent @var{indent}
+Indent example-like environments by @var{indent} number of spaces
+(perhaps 0).  @xref{exampleindent,, Paragraph Indenting}.
+
 @item @@exclamdown@{@}
 Produce an upside-down exclamation point.  @xref{Inserting Accents}.
 
@@ -13994,12 +15145,10 @@ Highlight the name of a file, buffer, node, or directory.  @xref{file, ,
 Prevent @TeX{} from printing large black warning rectangles beside
 over-wide lines.  @xref{Overfull hboxes}.@refill
 
-@need 100
 @item @@findex @var{entry}
 Add @var{entry} to the index of functions.  @xref{Index Entries, ,
 Defining the Entries of an Index}.@refill
 
-@need 200
 @item @@flushleft
 @itemx @@flushright
 Left justify every line but leave the right end ragged.
@@ -14008,7 +15157,6 @@ Leave font as is.  Pair with @code{@@end flushleft}.
 @xref{flushleft & flushright, , @code{@@flushleft} and
 @code{@@flushright}}.@refill
 
-@need 200
 @item @@footnote@{@var{text-of-footnote}@}
 Enter a footnote.  Footnote text is printed at the bottom of the page
 by @TeX{}; Info may format in either `End' node or `Separate' node style.
@@ -14020,10 +15168,9 @@ node style or @samp{separate} for the separate node style.
 @xref{Footnotes}.@refill
 
 @item @@format
-Begin a kind of example.  Like @code{@@example} or @code{@@display},
-but do not narrow the margins and do not select the fixed-width font.
-Pair with @code{@@end format}.  @xref{example, ,
-@code{@@example}}.@refill
+Begin a kind of example.  Like @code{@@display}, but do not narrow the
+margins.  Pair with @code{@@end format}.  @xref{example,,
+@code{@@example}}.
 
 @item @@ftable @var{formatting-command}
 Begin a two-column table, using @code{@@item} for each entry.
@@ -14166,16 +15313,15 @@ respectively: @L{}, @l{}.
 
 @item @@lisp
 Begin an example of Lisp code.  Indent text, do not fill, and select
-fixed-width font.  Pair with @code{@@end lisp}.  @xref{Lisp Example, ,
-@code{@@lisp}}.@refill
+fixed-width font.  Pair with @code{@@end lisp}.  @xref{lisp, , @code{@@lisp}}.
 
 @item @@lowersections
 Change subsequent chapters to sections, sections to subsections, and so
 on. @xref{Raise/lower sections, , @code{@@raisesections} and
 @code{@@lowersections}}.@refill
 
-@item @@macro @var{macro-name} @{@var{params}@}
-Define a new Texinfo command @code{@@@var{macro-name}@{@var{params}@}}.
+@item @@macro @var{macroname} @{@var{params}@}
+Define a new Texinfo command @code{@@@var{macroname}@{@var{params}@}}.
 Only supported by @code{makeinfo} and @code{texi2dvi}.  @xref{Defining
 Macros}.
 
@@ -14188,7 +15334,7 @@ chapheading, , @code{@@majorheading} and @code{@@chapheading}}.@refill
 
 @item @@math@{@var{mathematical-expression}@}
 Format a mathematical expression.
-@xref{math, , @code{@@math} - Inserting Mathematical Expressions}.
+@xref{math, , @code{@@math}: Inserting Mathematical Expressions}.
 
 @item @@menu
 Mark the beginning of a menu of nodes in Info.  No effect in a printed
@@ -14206,7 +15352,7 @@ Start a new page in a printed manual if fewer than @var{n} mils
 (thousandths of an inch) remain on the current page.  @xref{need, ,
 @code{@@need}}.@refill
 
-@item @@node @var{name, next, previous, up}
+@item @@node @var{name}, @var{next}, @var{previous}, @var{up}
 Define the beginning of a new node in Info, and serve as a locator for
 references for @TeX{}.  @xref{node, , @code{@@node}}.@refill
 
@@ -14214,6 +15360,10 @@ references for @TeX{}.  @xref{node, , @code{@@node}}.@refill
 Prevent text from being indented as if it were a new paragraph.
 @xref{noindent, , @code{@@noindent}}.@refill
 
+@item @@novalidate
+Suppress validation of node references, omit creation of auxiliary files
+with @TeX{}.  Use before @code{@@setfilename}.  @xref{Pointer Validation}.
+
 @item @@O@{@}
 @itemx @@o@{@}
 Generate the uppercase and lowercase O-with-slash letters, respectively:
@@ -14230,15 +15380,21 @@ How to Make Your Own Headings}.@refill
 Generate the uppercase and lowercase OE ligatures, respectively:
 @OE{}, @oe{}.  @xref{Inserting Accents}.
 
+@item @@option@{@var{option-name}@}
+Indicate a command-line option, such as @option{-l} or @option{--help}.
+@xref{option,, @code{@@option}}.
+
 @item @@page
 Start a new page in a printed manual.  No effect in Info.
 @xref{page, , @code{@@page}}.@refill
 
+@item @@pagesizes [@var{width}][, @var{height}]
+Change page dimensions.  @xref{pagesizes}.
+
 @item @@paragraphindent @var{indent}
-Indent paragraphs by @var{indent} number of spaces; delete indentation
-if the value of @var{indent} is 0; and do not change indentation if
-@var{indent} is @code{asis}. @xref{paragraphindent, , Paragraph
-Indenting}.@refill
+Indent paragraphs by @var{indent} number of spaces (perhaps 0); preserve
+source file indentation if @var{indent} is @code{asis}.
+@xref{paragraphindent,, Paragraph Indenting}.
 
 @item @@pindex @var{entry}
 Add @var{entry} to the index of programs.  @xref{Index Entries, , Defining
@@ -14278,7 +15434,6 @@ or imaginary work.  Write command on a line of its own.  Pair with
 @code{@@end quotation}.  @xref{quotation, ,
 @code{@@quotation}}.@refill
 
-@need 100
 @item @@r@{@var{text}@}
 Print @var{text} in @r{roman} font.  No effect in Info.
 @xref{Fonts}.@refill
@@ -14288,20 +15443,17 @@ Change subsequent sections to chapters, subsections to sections, and so
 on.  @xref{Raise/lower sections, , @code{@@raisesections} and
 @code{@@lowersections}}.@refill
 
-@need 300
 @item @@ref@{@var{node-name}, [@var{entry}], [@var{topic-or-title}], [@var{info-file}], [@var{manual}]@}
 Make a reference.  In a printed manual, the reference does not start
 with a `See'.  Follow command with a punctuation mark.  Only the first
 argument is mandatory.  @xref{ref, , @code{@@ref}}.@refill
 
-@need 300
 @item @@refill
 In Info, refill and indent the paragraph after all the other processing
 has been done.  No effect on @TeX{}, which always refills.  This command
 is no longer needed, since all formatters now automatically refill.
 @xref{Refilling Paragraphs}.@refill
 
-@need 300
 @item @@result@{@}
 Indicate the result of an expression to the reader with a special
 glyph: @samp{@result{}}.  @xref{result, , @code{@@result}}.@refill
@@ -14331,17 +15483,26 @@ Make @var{flag} active, causing the Texinfo formatting commands to
 format text between subsequent pairs of @code{@@ifset @var{flag}} and
 @code{@@end ifset} commands.  Optionally, set value of @var{flag} to
 @var{string}.
-@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
+@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.
 
 @item @@setchapternewpage @var{on-off-odd}
 Specify whether chapters start on new pages, and if so, whether on
 odd-numbered (right-hand) new pages.  @xref{setchapternewpage, ,
-@code{@@setchapternewpage}}.@refill
+@code{@@setchapternewpage}}.
+
+@item @@setcontentsaftertitlepage
+Put the table of contents after the @samp{@@end titlepage} even if the
+@code{@@contents} command is not there.  @xref{Contents}.
 
 @item @@setfilename @var{info-file-name}
 Provide a name to be used by the Info file.  This command is essential
 for @TeX{} formatting as well, even though it produces no output.
-@xref{setfilename, , @code{@@setfilename}}.@refill
+@xref{setfilename, , @code{@@setfilename}}.
+
+@item @@setshortcontentsaftertitlepage
+Place the short table of contents after the @samp{@@end titlepage}
+command even if the @code{@@shortcontents} command is not there.
+@xref{Contents}.
 
 @item @@settitle @var{title}
 Provide a title for page headers in a printed manual.
@@ -14353,40 +15514,45 @@ menus rather than tables of contents.  A synonym for
 @code{@@summarycontents}.  @xref{Contents, , Generating a Table of
 Contents}.@refill
 
-@item @@shorttitlepage@{@var{title}@}
+@item @@shorttitlepage @var{title}
 Generate a minimal title page.  @xref{titlepage,,@code{@@titlepage}}.
 
-@need 400
 @item @@smallbook
 Cause @TeX{} to produce a printed manual in a 7 by 9.25 inch format
 rather than the regular 8.5 by 11 inch format.  @xref{smallbook, ,
-Printing Small Books}.  Also, see @ref{smallexample & smalllisp, ,
-@code{@@smallexample} and @code{@@smalllisp}}.@refill
+Printing Small Books}.  Also, see @ref{small}.
+
+@item @@smalldisplay
+Begin a kind of example.  Like @code{@@smallexample} (indent text, no
+filling), but do not select the fixed-width font.  In @code{@@smallbook}
+format, print text in a smaller font than with @code{@@display}.  Pair
+with @code{@@end smalldisplay}.  @xref{small}.
 
-@need 400
 @item @@smallexample
 Indent text to indicate an example.  Do not fill, select fixed-width
 font.  In @code{@@smallbook} format, print text in a smaller font than
 with @code{@@example}.  Pair with @code{@@end smallexample}.
-@xref{smallexample & smalllisp, , @code{@@smallexample} and
-@code{@@smalllisp}}.@refill
+@xref{small}.
+
+@item @@smallformat
+Begin a kind of example.  Like @code{@@smalldisplay}, but do not narrow
+the margins and do not select the fixed-width font.
+In @code{@@smallbook} format, print text in a smaller font than
+with @code{@@format}.  Pair with @code{@@end smallformat}.
+@xref{small}.
 
-@need 400
 @item @@smalllisp
 Begin an example of Lisp code.  Indent text, do not fill, select
 fixed-width font.  In @code{@@smallbook} format, print text in a
-smaller font.  Pair with @code{@@end smalllisp}.  @xref{smallexample &
-smalllisp, , @code{@@smallexample} and @code{@@smalllisp}}.@refill
+smaller font.  Pair with @code{@@end smalllisp}.  @xref{small}.
 
-@need 700
 @item @@sp @var{n}
 Skip @var{n} blank lines.  @xref{sp, , @code{@@sp}}.@refill
 
 @item @@ss@{@}
 Generate the German sharp-S es-zet letter, @ss{}.  @xref{Inserting Accents}.
 
-@need 700
-@item @@strong @var{text}
+@item @@strong @{@var{text}@}
 Emphasize @var{text} by typesetting it in a @strong{bold} font for the
 printed manual and by surrounding it with asterisks for Info.
 @xref{emph & strong, , Emphasizing Text}.@refill
@@ -14428,19 +15594,16 @@ menus rather than tables of contents.  A synonym for
 @code{@@shortcontents}.  @xref{Contents, , Generating a Table of
 Contents}.@refill
 
-@need 300
 @item @@syncodeindex @var{from-index} @var{into-index}
 Merge the index named in the first argument into the index named in
 the second argument, printing the entries from the first index in
 @code{@@code} font.  @xref{Combining Indices}.@refill
 
-@need 300
 @item @@synindex @var{from-index} @var{into-index}
 Merge the index named in the first argument into the index named in
 the second argument.  Do not change the font of @var{from-index}
 entries.  @xref{Combining Indices}.@refill
 
-@need 100
 @item @@t@{@var{text}@}
 Print @var{text} in a @t{fixed-width}, typewriter-like font.
 No effect in Info.  @xref{Fonts}.@refill
@@ -14448,7 +15611,6 @@ No effect in Info.  @xref{Fonts}.@refill
 @item @@tab
 Separate columns in a multitable.  @xref{Multitable Rows}.
 
-@need 400
 @item @@table @var{formatting-command}
 Begin a two-column table, using @code{@@item} for each entry.  Write
 each first column entry on the same line as @code{@@item}.  First
@@ -14492,21 +15654,18 @@ Not relevant to Info, which does not have title pages.  @xref{title
 subtitle author, , The @code{@@title} @code{@@subtitle} and
 @code{@@author} Commands}.@refill
 
-@need 400
 @item @@titlefont@{@var{text}@}
 In a printed manual, print @var{text} in a larger than normal font.
 Not relevant to Info, which does not have title pages.
 @xref{titlefont center sp, , The @code{@@titlefont} @code{@@center}
 and @code{@@sp} Commands}.@refill
 
-@need 300
 @item @@titlepage
 Indicate to Texinfo the beginning of the title page.  Write command on
 a line of its own.  Pair with @code{@@end titlepage}.  Nothing between
 @code{@@titlepage} and @code{@@end titlepage} appears in Info.
 @xref{titlepage, , @code{@@titlepage}}.@refill
 
-@need 150
 @item @@today@{@}
 Insert the current date, in `1 Jan 1900' style.  @xref{Custom
 Headings, , How to Make Your Own Headings}.@refill
@@ -14556,9 +15715,9 @@ chapter.  The title appears in the table of contents of a printed
 manual.  In Info, the title is underlined with periods.
 @xref{subsubsection, , The `subsub' Commands}.@refill
 
-@item @@uref@{@var{url}[, @var{displayed-text}@}
+@item @@uref@{@var{url}[, @var{displayed-text}][, @var{replacement}@}
 Define a cross reference to an external uniform resource locator for the
-World Wide Web.  @xref{url, , @code{@@url}}.@refill
+World Wide Web.  @xref{uref, , @code{@@uref}}.@refill
 
 @item @@url@{@var{url}@}
 Indicate text that is a uniform resource locator for the World Wide
@@ -14578,12 +15737,10 @@ Highlight a metasyntactic variable, which is something that stands for
 another piece of text.  @xref{var, , Indicating Metasyntactic
 Variables}.@refill
 
-@need 400
 @item @@vindex @var{entry}
 Add @var{entry} to the index of variables.  @xref{Index Entries, ,
 Defining the Entries of an Index}.@refill
 
-@need 400
 @item @@vskip @var{amount}
 In a printed manual, insert whitespace so as to push text on the
 remainder of the page towards the bottom of the page.  Used in
@@ -14592,7 +15749,6 @@ formatting the copyright page with the argument @samp{0pt plus
 only in contexts ignored for Info.  @xref{Copyright & Permissions, ,
 The Copyright Page and Printed Permissions}.@refill
 
-@need 400
 @item @@vtable @var{formatting-command}
 Begin a two-column table, using @code{@@item} for each entry.
 Automatically enter each of the items in the first column into the
@@ -14600,13 +15756,11 @@ index of variables.  Pair with @code{@@end vtable}.  The same as
 @code{@@table}, except for indexing.  @xref{ftable vtable, ,
 @code{@@ftable} and @code{@@vtable}}.@refill
 
-@need 400
 @item @@w@{@var{text}@}
 Prevent @var{text} from being split across two lines.  Do not end a
 paragraph that uses @code{@@w} with an @code{@@refill} command.
 @xref{w, , @code{@@w}}.@refill
 
-@need 400
 @item @@xref@{@var{node-name}, [@var{entry}], [@var{topic-or-title}], [@var{info-file}], [@var{manual}]@}
 Make a reference that starts with `See' in a printed manual.  Follow
 command with a punctuation mark.  Only the first argument is
@@ -14614,7 +15768,7 @@ mandatory.  @xref{xref, , @code{@@xref}}.@refill
 @end table
 
 
-@node Tips, Sample Texinfo File, Command List, Top
+@node Tips
 @appendix Tips and Hints
 
 Here are some tips for writing Texinfo documentation:@refill
@@ -14677,9 +15831,8 @@ Lisp.
 @item
 Write the indexing commands that refer to a whole section immediately
 after the section command, and write the indexing commands that refer to
-the paragraph before the paragraph.
+a paragraph before that paragraph.
 
-@need 1000
 In the example that follows, a blank line comes after the index
 entry for ``Leaping'':
 
@@ -15057,7 +16210,7 @@ Write notes for yourself at the very end of a Texinfo file after the
 @end itemize
 
 
-@node Sample Texinfo File, Sample Permissions, Tips, Top
+@node Sample Texinfo File
 @appendix A Sample Texinfo File
 @cindex Sample Texinfo file, no comments
 
@@ -15135,9 +16288,10 @@ manual.
 @end example
 
 
-@node Sample Permissions, Include Files, Sample Texinfo File, Top
+@node Sample Permissions
 @appendix Sample Permissions
 @cindex Permissions
+@cindex Sample permissions
 @cindex Copying permissions
 
 Texinfo files should contain sections that tell the readers that they
@@ -15147,7 +16301,7 @@ and the printed manual.@refill
 Also, if you are writing a manual about software, you should explain
 that the software is free and either include the GNU General Public
 License (GPL) or provide a reference to it.  @xref{Distrib, ,
-Distribution, xemacs, XEmacs User's Manual}, for an example of the text
+Distribution, emacs, The GNU Emacs Manual}, for an example of the text
 that could be used in the software ``Distribution'', ``General Public
 License'', and ``NO WARRANTY'' sections of a document.  @xref{Copying,
 , Texinfo Copying Conditions}, for an example of a brief explanation
@@ -15161,7 +16315,7 @@ of how the copying conditions provide you with rights. @refill
 
 @node Inserting Permissions, ifinfo Permissions, Sample Permissions, Sample Permissions
 @ifinfo
-@appendixsec Inserting Permissions
+@section Inserting Permissions
 @end ifinfo
 
 In a Texinfo file, the first @code{@@ifinfo} section usually begins
@@ -15195,18 +16349,18 @@ To make it simple to insert a permission notice into each section of
 the Texinfo file, sample permission notices for each section are
 reproduced in full below.@refill
 
-Note that you may need to specify the correct name of a section
-mentioned in the permission notice.  For example, in @cite{The GDB
-Manual}, the name of the section referring to the General Public
-License is called the ``GDB General Public License'', but in the
-sample shown below, that section is referred to generically as the
-``GNU General Public License''.  If the Texinfo file does not carry a
-copy of the General Public License, leave out the reference to it, but
-be sure to include the rest of the sentence.@refill
+You may need to specify the correct name of a section mentioned in the
+permission notice.  For example, in @cite{The GDB Manual}, the name of
+the section referring to the General Public License is called the ``GDB
+General Public License'', but in the sample shown below, that section is
+referred to generically as the ``GNU General Public License''.  If the
+Texinfo file does not carry a copy of the General Public License, leave
+out the reference to it, but be sure to include the rest of the
+sentence.
 
 @node ifinfo Permissions, Titlepage Permissions, Inserting Permissions, Sample Permissions
 @comment  node-name,  next,  previous,  up
-@appendixsec @samp{ifinfo} Copying Permissions
+@section @samp{ifinfo} Copying Permissions
 @cindex @samp{ifinfo} permissions
 
 In the @code{@@ifinfo} section of a Texinfo file, the standard Free
@@ -15215,7 +16369,7 @@ Software Foundation permission notice reads as follows:@refill
 @example
 This file documents @dots{}
 
-Copyright 1998 Free Software Foundation, Inc.
+Copyright 1999 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim
 copies of this manual provided the copyright notice and
@@ -15247,7 +16401,7 @@ translation approved by the Free Software Foundation.
 
 @node Titlepage Permissions,  , ifinfo Permissions, Sample Permissions
 @comment  node-name,  next,  previous,  up
-@appendixsec Titlepage Copying Permissions
+@section Titlepage Copying Permissions
 @cindex Titlepage permissions
 
 In the @code{@@titlepage} section of a Texinfo file, the standard Free
@@ -15277,7 +16431,7 @@ translation approved by the Free Software Foundation.
 @end example
 
 
-@node Include Files, Headings, Sample Permissions, Top
+@node Include Files
 @appendix Include Files
 @cindex Include files
 
@@ -15302,7 +16456,7 @@ conveniently small parts.@refill
 @end menu
 
 @node Using Include Files, texinfo-multiple-files-update, Include Files, Include Files
-@appendixsec How to Use Include Files
+@section How to Use Include Files
 @findex include
 
 To include another file within a Texinfo file, write the
@@ -15343,7 +16497,7 @@ Texinfo mode command, @code{texinfo-multiple-files-update}, that is
 designed for @code{@@include} files.@refill
 
 @node texinfo-multiple-files-update, Include File Requirements, Using Include Files, Include Files
-@appendixsec @code{texinfo-multiple-files-update}
+@section @code{texinfo-multiple-files-update}
 @findex texinfo-multiple-files-update
 
 GNU Emacs Texinfo mode provides the @code{texinfo-multiple-files-update}
@@ -15419,7 +16573,7 @@ updates @strong{every} pointer and menu in @strong{all} the files and then inser
 master menu.@refill
 
 @node Include File Requirements, Sample Include File, texinfo-multiple-files-update, Include Files
-@appendixsec Include File Requirements
+@section Include File Requirements
 @cindex Include file requirements
 @cindex Requirements for include files
 
@@ -15445,7 +16599,7 @@ should @emph{not} contain any nodes besides the single `Top' node.  The
 them.@refill
 
 @node Sample Include File, Include Files Evolution, Include File Requirements, Include Files
-@appendixsec Sample File with @code{@@include}
+@section Sample File with @code{@@include}
 @cindex Sample @code{@@include} file
 @cindex Include file sample
 @cindex @code{@@include} file sample
@@ -15475,7 +16629,7 @@ would insert a main or master menu:@refill
 @group
 @@page
 @@vskip 0pt plus 1filll
-Copyright @@copyright@{@} 1998 Free Software Foundation, Inc.
+Copyright @@copyright@{@} 1999 Free Software Foundation, Inc.
 @@end titlepage
 @end group
 
@@ -15516,21 +16670,21 @@ The full contents of @file{concept-index.texinfo} might be as simple as this:
 
 @example
 @group
-@@node Concept Index, , Second, Top
+@@node Concept Index
 @@unnumbered Concept Index
 
 @@printindex cp
 @end group
 @end example
 
-The outer Texinfo source file for @cite{The XEmacs Lisp Reference
+The outer Texinfo source file for @cite{The GNU Emacs Lisp Reference
 Manual} is named @file{elisp.texi}.  This outer file contains a master
 menu with 417 entries and a list of 41 @code{@@include}
 files.@refill
 
 @node Include Files Evolution,  , Sample Include File, Include Files
 @comment  node-name,  next,  previous,  up
-@appendixsec Evolution of Include Files
+@section Evolution of Include Files
 
 When Info was first created, it was customary to create many small
 Info files on one subject.  Each Info file was formatted from its own
@@ -15558,7 +16712,7 @@ However, because large Info files are now split automatically, it is
 no longer necessary to keep them small.@refill
 
 Nowadays, multiple Texinfo files are used mostly for large documents,
-such as @cite{The XEmacs Lisp Reference Manual}, and for projects
+such as @cite{The GNU Emacs Lisp Reference Manual}, and for projects
 in which several different people write different sections of a
 document simultaneously.@refill
 
@@ -15569,7 +16723,7 @@ you can write menus and cross references without naming the different
 Texinfo files.@refill
 
 
-@node Headings, Catching Mistakes, Include Files, Top
+@node Headings
 @appendix Page Headings
 @cindex Headings
 @cindex Footings
@@ -15628,7 +16782,7 @@ right part is set flushright.@refill
 
 @node Heading Format, Heading Choice, Headings Introduced, Headings
 @comment  node-name,  next,  previous,  up
-@appendixsec Standard Heading Formats
+@section Standard Heading Formats
 
 Texinfo provides two standard heading formats, one for manuals printed
 on one side of each sheet of paper, and the other for manuals printed
@@ -15697,7 +16851,7 @@ manual.@refill
 
 @node Heading Choice, Custom Headings, Heading Format, Headings
 @comment  node-name,  next,  previous,  up
-@appendixsec Specifying the Type of Heading
+@section Specifying the Type of Heading
 
 @TeX{} does not begin to generate page headings for a standard Texinfo
 file until it reaches the @code{@@end titlepage} command.  Thus, the
@@ -15734,22 +16888,25 @@ Texinfo lacks an @code{@@setchapternewpage even} command.@refill
 
 @node Custom Headings,  , Heading Choice, Headings
 @comment  node-name,  next,  previous,  up
-@appendixsec How to Make Your Own Headings
+@section How to Make Your Own Headings
 
 You can use the standard headings provided with Texinfo or specify
 your own.  By default, Texinfo has no footers, so if you specify them,
 the available page size for the main text will be slightly reduced.
 
-@c Following paragraph is verbose to prevent overfull hboxes.
 Texinfo provides six commands for specifying headings and
-footings.  The @code{@@everyheading} command and
-@code{@@everyfooting} command generate page headers and footers
-that are the same for both even- and odd-numbered pages.
-The @code{@@evenheading} command and @code{@@evenfooting}
-command generate headers and footers for even-numbered
-(left-hand) pages; and the @code{@@oddheading} command and
-@code{@@oddfooting} command generate headers and footers for
-odd-numbered (right-hand) pages.@refill
+footings:
+@itemize @bullet
+@item
+@code{@@everyheading} @code{@@everyfooting} generate page headers and
+footers that are the same for both even- and odd-numbered pages.
+@item
+@code{@@evenheading} and @code{@@evenfooting} command generate headers
+and footers for even-numbered (left-hand) pages.
+@item
+@code{@@oddheading} and @code{@@oddfooting} generate headers and footers
+for odd-numbered (right-hand) pages.
+@end itemize
 
 Write custom heading specifications in the Texinfo file immediately
 after the @code{@@end titlepage} command.  Enclose your specifications
@@ -15881,7 +17038,7 @@ Beware of overlong titles: they may overlap another part of the
 header or footer and blot it out.@refill
 
 
-@node Catching Mistakes, Refilling Paragraphs, Headings, Top
+@node Catching Mistakes
 @appendix Formatting Mistakes
 @cindex Structure, catching mistakes in
 @cindex Nodes, catching mistakes
@@ -15937,7 +17094,7 @@ may want to use the tools described in this appendix.@refill
 
 @node Debugging with Info, Debugging with TeX, makeinfo Preferred, Catching Mistakes
 @comment  node-name,  next,  previous,  up
-@appendixsec Catching Errors with Info Formatting
+@section Catching Errors with Info Formatting
 @cindex Catching errors with Info formatting
 @cindex Debugging with Info formatting
 
@@ -16118,13 +17275,13 @@ Inside the function @code{texinfo-format-parse-args}, the function
 @code{re-search-forward} was called; it was this function that could
 not find the missing right-hand brace.@refill
 
-@xref{Lisp Debug, , Debugging Emacs Lisp, xemacs, XEmacs User's Manual},
-for more information.@refill
+@xref{Lisp Debug, , Debugging Emacs Lisp, emacs, The GNU Emacs
+Manual}, for more information.@refill
 @end ignore
 
 @node Debugging with TeX, Using texinfo-show-structure, Debugging with Info, Catching Mistakes
 @comment  node-name,  next,  previous,  up
-@appendixsec Catching Errors with @TeX{} Formatting
+@section Catching Errors with @TeX{} Formatting
 @cindex Catching errors with @TeX{} formatting
 @cindex Debugging with @TeX{} formatting
 
@@ -16206,9 +17363,8 @@ You can tell @TeX{} to stop this run by typing @kbd{x @key{RET}}
 at the @samp{?} prompt.@refill
 @end enumerate
 
-Please note that if you are running @TeX{} inside Emacs, you need to
-switch to the shell buffer and line at which @TeX{} offers the @samp{?}
-prompt.@refill
+If you are running @TeX{} inside Emacs, you need to switch to the shell
+buffer and line at which @TeX{} offers the @samp{?} prompt.
 
 Sometimes @TeX{} will format a file without producing error messages even
 though there is a problem.  This usually occurs if a command is not ended
@@ -16254,7 +17410,7 @@ directly with @TeX{}, not with Texinfo.)@refill
 
 @node Using texinfo-show-structure, Using occur, Debugging with TeX, Catching Mistakes
 @comment  node-name,  next,  previous,  up
-@appendixsec Using @code{texinfo-show-structure}
+@section Using @code{texinfo-show-structure}
 @cindex Showing the structure of a file
 @findex texinfo-show-structure
 
@@ -16298,20 +17454,20 @@ commands respectively.  If you move your cursor into the @samp{*Occur*}
 window, you can position the cursor over one of the lines and use the
 @kbd{C-c C-c} command (@code{occur-mode-goto-occurrence}), to jump to
 the corresponding spot in the Texinfo file.  @xref{Other Repeating
-Search, , Using Occur, xemacs, XEmacs User's Manual}, for more
+Search, , Using Occur, emacs, The GNU Emacs Manual}, for more
 information about @code{occur-mode-goto-occurrence}.@refill
 
 The first line in the @samp{*Occur*} window describes the @dfn{regular
 expression} specified by @var{texinfo-heading-pattern}.  This regular
 expression is the pattern that @code{texinfo-show-structure} looks for.
-@xref{Regexps, , Using Regular Expressions, xemacs, XEmacs User's Manual},
+@xref{Regexps, , Using Regular Expressions, emacs, The GNU Emacs Manual},
 for more information.@refill
 
 When you invoke the @code{texinfo-show-structure} command, Emacs will
 display the structure of the whole buffer.  If you want to see the
 structure of just a part of the buffer, of one chapter, for example,
 use the @kbd{C-x n n} (@code{narrow-to-region}) command to mark the
-region.  (@xref{Narrowing, , , xemacs, XEmacs User's Manual}.)  This is
+region.  (@xref{Narrowing, , , emacs, The GNU Emacs Manual}.)  This is
 how the example used above was generated.  (To see the whole buffer
 again, use @kbd{C-x n w} (@code{widen}).)@refill
 
@@ -16326,7 +17482,7 @@ or left out a section, you can correct the mistake.@refill
 
 @node Using occur, Running Info-Validate, Using texinfo-show-structure, Catching Mistakes
 @comment  node-name,  next,  previous,  up
-@appendixsec Using @code{occur}
+@section Using @code{occur}
 @cindex Occurrences, listing with @code{@@occur}
 @findex occur
 
@@ -16343,10 +17499,10 @@ command directly.  To do this, type@refill
 @noindent
 and then, when prompted, type a @dfn{regexp}, a regular expression for
 the pattern you want to match.  (@xref{Regexps, , Regular Expressions,
-xemacs, XEmacs User's Manual}.)  The @code{occur} command works from the
-current location of the cursor in the buffer to the end of the buffer.
-If you want to run @code{occur} on the whole buffer, place the cursor at
-the beginning of the buffer.@refill
+emacs, The GNU Emacs Manual}.)  The @code{occur} command works from
+the current location of the cursor in the buffer to the end of the
+buffer.  If you want to run @code{occur} on the whole buffer, place
+the cursor at the beginning of the buffer.@refill
 
 For example, to see all the lines that contain the word
 @samp{@@chapter} in them, just type @samp{@@chapter}.  This will
@@ -16361,12 +17517,12 @@ or phrase, end the last word with a @samp{$}; for example,
 all the nodes that are part of the same chapter or section and
 therefore have the same `Up' pointer.@refill
 
-@xref{Other Repeating Search, , Using Occur, xemacs, XEmacs User's Manual},
+@xref{Other Repeating Search, , Using Occur, emacs , The GNU Emacs Manual},
 for more information.@refill
 
 @node Running Info-Validate,  , Using occur, Catching Mistakes
 @comment  node-name,  next,  previous,  up
-@appendixsec Finding Badly Referenced Nodes
+@section Finding Badly Referenced Nodes
 @findex Info-validate
 @cindex Nodes, checking for badly referenced
 @cindex Checking for badly referenced nodes
@@ -16395,7 +17551,7 @@ if you write an Info file from scratch.@refill
 @end menu
 
 @node Using Info-validate, Unsplit, Running Info-Validate, Running Info-Validate
-@appendixsubsec Running @code{Info-validate}
+@subsection Running @code{Info-validate}
 @cindex Running @code{Info-validate}
 @cindex Info validating a large file
 @cindex Validating a large file
@@ -16408,9 +17564,9 @@ M-x Info-validate
 @end example
 
 @noindent
-(Note that the @code{Info-validate} command requires an upper case
+Note that the @code{Info-validate} command requires an upper case
 `I'.  You may also need to create a tag table before running
-@code{Info-validate}.  @xref{Tagifying}.)@refill
+@code{Info-validate}.  @xref{Tagifying}.
 
 If your file is valid, you will receive a message that says ``File appears
 valid''.  However, if you have a pointer that does not point to a node,
@@ -16444,17 +17600,16 @@ This is because every `Next' pointer should be matched by a
 @code{Info-validate} also checks that all menu entries and cross references
 point to actual nodes.@refill
 
-Note that @code{Info-validate} requires a tag table and does not work
-with files that have been split.  (The @code{texinfo-format-buffer}
-command automatically splits large files.)  In order to use
-@code{Info-validate} on a large file, you must run
-@code{texinfo-format-buffer} with an argument so that it does not split
-the Info file; and you must create a tag table for the unsplit
-file.@refill
+@code{Info-validate} requires a tag table and does not work with files
+that have been split.  (The @code{texinfo-format-buffer} command
+automatically splits large files.)  In order to use @code{Info-validate}
+on a large file, you must run @code{texinfo-format-buffer} with an
+argument so that it does not split the Info file; and you must create a
+tag table for the unsplit file.
 
 @node Unsplit, Tagifying, Using Info-validate, Running Info-Validate
 @comment  node-name,  next,  previous,  up
-@appendixsubsec Creating an Unsplit File
+@subsection Creating an Unsplit File
 @cindex Creating an unsplit file
 @cindex Unsplit file creation
 
@@ -16491,7 +17646,7 @@ a tag table for it. @refill
 @cindex Tag table, making manually
 
 @node Tagifying, Splitting, Unsplit, Running Info-Validate
-@appendixsubsec Tagifying a File
+@subsection Tagifying a File
 
 After creating an unsplit Info file, you must create a tag table for
 it.  Visit the Info file you wish to tagify and type:@refill
@@ -16529,14 +17684,14 @@ table and split the file manually.@refill
 
 @node Splitting,  , Tagifying, Running Info-Validate
 @comment  node-name,  next,  previous,  up
-@appendixsubsec Splitting a File Manually
+@subsection Splitting a File Manually
 @cindex Splitting an Info file manually
 @cindex Info file, splitting manually
 
 You should split a large file or else let the
 @code{texinfo-format-buffer} or @code{makeinfo-buffer} command do it
 for you automatically.  (Generally you will let one of the formatting
-commands do this job for you.  @xref{Create an Info File}.)@refill
+commands do this job for you.  @xref{Creating an Info File}.)@refill
 
 The split-off files are called the indirect subfiles.@refill
 
@@ -16579,10 +17734,11 @@ The primary file still functions as an Info file, but it contains just
 the tag table and a directory of subfiles.@refill
 
 
-@node Refilling Paragraphs, Command Syntax, Catching Mistakes, Top
+@node Refilling Paragraphs
 @appendix Refilling Paragraphs
 @cindex Refilling paragraphs
 @cindex Filling paragraphs
+@cindex Paragraphs, filling
 @findex refill
 
 The @code{@@refill} command refills and, optionally, indents the first
@@ -16618,10 +17774,11 @@ the ends of paragraphs that contain @code{@@*} or @w{@code{@@w@{ @dots{}@}}}
 and therefore do not refill or indent them.@refill
 
 
-@node Command Syntax, Obtaining TeX, Refilling Paragraphs, Top
-@comment node-name,  next,  previous,  up
+@node Command Syntax
 @appendix @@-Command Syntax
 @cindex @@-command syntax
+@cindex Syntax, of @@-commands
+@cindex Command syntax
 
 The character @samp{@@} is used to start special Texinfo commands.
 (It has the same meaning that @samp{\} has in plain @TeX{}.)  Texinfo
@@ -16682,7 +17839,7 @@ Emacs paragraph commands because it cannot appear at the beginning of
 a line.@refill
 
 
-@node Obtaining TeX, Command and Variable Index, Command Syntax, Top
+@node Obtaining TeX
 @appendix How to Obtain @TeX{}
 @cindex Obtaining @TeX{}
 @cindex @TeX{}, how to obtain
@@ -16705,16 +17862,8 @@ available distributions:
 @end example
 
 The Free Software Foundation provides a core distribution on its Source
-Code CD-ROM suitable for printing Texinfo manuals; the University of
-Washington maintains and supports a tape distribution; the @TeX{} Users
-Group co-sponsors a complete CD-ROM @TeX{} distribution.
-
-@itemize @bullet
-
-@item
-For the FSF Source Code CD-ROM, please contact:
+Code CD-ROM suitable for printing Texinfo manuals.  To order it, contact:
 
-@iftex
 @display
 @group
 Free Software Foundation, Inc.
@@ -16729,54 +17878,6 @@ Free Dial Fax (in Japan):
 Electronic mail: @code{gnu@@gnu.org}
 @end group
 @end display
-@end iftex
-@ifinfo
-@display
-@group
-Free Software Foundation, Inc.
-59 Temple Place Suite 330
-Boston, MA @w{ } 02111-1307
-USA
-
-Telephone: @w{+1-617-542-5942}
-Fax: (including Japan) @w{+1-617-542-2652}
-Free Dial Fax (in Japan):
-@w{ } @w{ } @w{ } 0031-13-2473 (KDD)
-@w{ } @w{ } @w{ } 0066-3382-0158 (IDC)
-Electronic mail: @code{gnu@@gnu.org}
-@end group
-@end display
-@end ifinfo
-
-@item
-To order a complete distribution on CD-ROM, please see
-@uref{http://tug.org/tex-live.html}.  (This distribution is also
-available by FTP; see the URL's above.)
-
-@item
-To order a full distribution from the University of Washington on either
-a 1/4@dmn{in} 4-track QIC-24 cartridge or a 4@dmn{mm} DAT cartridge,
-send $210 to:
-
-@display
-@group
-Pierre A. MacKay
-Denny Hall, Mail Stop DH-10
-University of Washington
-Seattle, WA @w{ } 98195
-USA
-Telephone: +1-206-543-2268
-Electronic mail: @code{mackay@@cs.washington.edu}
-@end group
-@end display
-
-@noindent
-Please make checks payable to the University of Washington.
-Checks must be in U.S.@: dollars, drawn on a U.S.@: bank.  Overseas
-sites: please add to the base cost, if desired, $20.00 for shipment via
-air parcel post, or $30.00 for shipment via courier.
-
-@end itemize
 
 Many other @TeX{} distributions are available; see
 @uref{http://tug.org/}.
@@ -16784,7 +17885,8 @@ Many other @TeX{} distributions are available; see
 
 @c These are no longer ``new'', and the explanations
 @c are all given elsewhere anyway, I think.  --karl, 25apr97.
-@ignore (the entire appendix)
+@c So ignore the entire appendix.
+@ignore
 @c node New Features, Command and Variable Index, Obtaining TeX, Top
 @c appendix Second Edition Features
 
@@ -16802,10 +17904,10 @@ edition.@refill
 
 Here is a brief description of the new commands.@refill
 
-@menu
+@c menu
 * New Texinfo Mode Commands::   The updating commands are especially useful.
 * New Commands::                Many newly described @@-commands.
-@end menu
+@c end menu
 
 @c node New Texinfo Mode Commands, New Commands, Obtaining TeX, Obtaining TeX
 @c appendixsec New Texinfo Mode Commands
@@ -16993,8 +18095,8 @@ Indent descriptions in menus.
 Insert node pointers in strict sequence.
 @end table
 
-@c node New Commands,  , New Texinfo Mode Commands, Obtaining TeX
-@c appendixsec New Texinfo @@-Commands
+@c no.de New Commands,  , New Texinfo Mode Commands, Obtaining TeX
+@c appendix.sec New Texinfo @@-Commands
 
 The second edition of the Texinfo manual describes more than 50
 commands that were not described in the first edition.  A third or so
@@ -17209,7 +18311,7 @@ see @ref{Overfull hboxes},@*
 see @ref{Footnotes},@*
 see @ref{dmn, , Format a Dimension},@*
 see @ref{Raise/lower sections, , @code{@@raisesections} and @code{@@lowersections}},@*
-see @ref{math, , @code{@@math} - Inserting Mathematical Expressions}.@*
+see @ref{math, , @code{@@math}: Inserting Mathematical Expressions}.@*
 see @ref{minus, , Inserting a Minus Sign},@*
 see @ref{paragraphindent, , Paragraph Indenting},@*
 see @ref{Cross Reference Commands},@*
@@ -17271,8 +18373,8 @@ Insert the current date.
 @end tex
 @end ignore
 
-@node Command and Variable Index, Concept Index, Obtaining TeX, Top
-@comment  node-name,  next,  previous,  up
+
+@node Command and Variable Index
 @unnumbered Command and Variable Index
 
 This is an alphabetical list of all the @@-commands, assorted Emacs Lisp
@@ -17282,12 +18384,10 @@ commands are listed without their preceding @samp{@@}.@refill
 @printindex fn
 
 
-@node Concept Index,  , Command and Variable Index, Top
+@node Concept Index
 @unnumbered Concept Index
 
 @printindex cp
 
 
-@summarycontents
-@contents
 @bye
index 0c2eaa7..be50d8a 100644 (file)
@@ -7,10 +7,10 @@
 @finalout
 @titlepage
 @title XEmacs FAQ
-@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1999/09/26 19:46:47 $
+@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1999/11/20 20:16:50 $
 @sp 1
 @author Tony Rossini <arossini@@stat.sc.edu>
-@author Ben Wing <wing@@666.com>
+@author Ben Wing <ben@@xemacs.org>
 @author Chuck Thompson <cthomp@@xemacs.org>
 @author Steve Baur <steve@@xemacs.org>
 @author Andreas Kaempf <andreas@@sccon.com>
@@ -305,6 +305,7 @@ Other Mail & News:
 
 Sparcworks, EOS, and WorkShop:
 * Q4.4.1::      What is SPARCworks, EOS, and WorkShop
+* Q4.4.2::      How do I start the Sun Workshop support in XEmacs 21?
 
 Energize:
 * Q4.5.1::      What is/was Energize?
@@ -398,15 +399,15 @@ available resources.
 The previous maintainer of the FAQ was @email{rossini@@stat.sc.edu,
 Anthony Rossini}, who started it, after getting tired of hearing JWZ
 complain about repeatedly having to answer questions.
-@email{ben@@666.com, Ben Wing} and @email{cthomp@@xemacs.org, Chuck
+@email{ben@@xemacs.org, Ben Wing} and @email{cthomp@@xemacs.org, Chuck
 Thompson}, the principal authors of XEmacs, then took over and Ben did
 a massive update reorganizing the whole thing.  At which point Anthony
 took back over, but then had to give it up again.  Some of the other
 contributors to this FAQ are listed later in this document.
 
 The previous version was converted to hypertext format, and edited by
-@email{steve@@altair.xemacs.org, Steven L. Baur}.  It was converted back to
-texinfo by @email{hniksic@@srce.hr, Hrvoje Niksic}.
+@email{steve@@xemacs.org, Steven L. Baur}.  It was converted back to
+texinfo by @email{hniksic@@xemacs.org, Hrvoje Niksic}.
 
 The FAQ was then maintained by @email{andreas@@sccon.com, Andreas
 Kaempf}, who passed it on to @email{faq@@xemacs.org, Christian
@@ -742,7 +743,7 @@ identify problems as best they can.
 @node Q1.1.3, Q1.2.1, Q1.1.2, Introduction
 @unnumberedsubsec Q1.1.3: How do I contribute to XEmacs itself?
 
-Ben Wing @email{ben@@666.com} writes:
+Ben Wing @email{ben@@xemacs.org} writes:
 
 @quotation
 BTW if you have a wish list of things that you want added, you have to
@@ -785,14 +786,14 @@ developers responsible for the 19.16/20.x releases are:
 @end ifhtml
 
 
-@item @email{steve@@altair.xemacs.org, Steve Baur}
+@item @email{steve@@xemacs.org, Steve Baur}
 
 @ifhtml
 <br><img src="steve.gif" alt="Portrait of Steve Baur"><br>
 @end ifhtml
 
 
-@item @email{hniksic@@srce.hr, Hrvoje Niksic}
+@item @email{hniksic@@xemacs.org, Hrvoje Niksic}
 
 @ifhtml
 <br><img src="hniksic.jpeg" alt="Portrait of Hrvoje Niksic"><br>
@@ -811,7 +812,7 @@ The developers responsible for the 19.14 release are:
 Chuck was Mr. XEmacs from 19.11 through 19.14, and is responsible
 for XEmacs becoming a widely distributed program over the Internet.
 
-@item @email{ben@@666.com, Ben Wing}
+@item @email{ben@@xemacs.org, Ben Wing}
 @ifhtml
 <br><img src="wing.gif" alt="Portrait of Ben Wing"><br>
 @end ifhtml
@@ -820,7 +821,7 @@ for XEmacs becoming a widely distributed program over the Internet.
 
 
 @itemize @bullet
-@item @email{jwz@@netscape.com, Jamie Zawinski}
+@item @email{jwz@@jwz.org, Jamie Zawinski}
 @ifhtml
 <br><img src="jwz.gif" alt="Portrait of Jamie Zawinski"><br>
 @end ifhtml
@@ -844,7 +845,7 @@ version of the FAQ (listed in alphabetical order):
 @itemize @bullet
 @item @email{steve@@xemacs.org, SL Baur}
 
-@item @email{hniksic@@srce.hr, Hrvoje Niksic}
+@item @email{hniksic@@xemacs.org, Hrvoje Niksic}
 
 @item @email{Aki.Vehtari@@hut.fi, Aki Vehtari}
 
@@ -923,7 +924,7 @@ This is yet another holdover from XEmacs Lisp's derivation from
 vintage-1980 Lisps; modern versions of Lisp consider this equivalence
 a bad idea, and have separate character types.  In XEmacs version 20,
 the modern convention is followed, and characters are their own
-primitive types. (This change was necessary in order for @sc{MULE},
+primitive types. (This change was necessary in order for @sc{mule},
 i.e. Asian-language, support to be correctly implemented.)
 
   Even in XEmacs version 20, remnants of the equivalence between
@@ -941,21 +942,21 @@ with the distinction between characters and integers in mind.
 
   Every character has an equivalent integer, called the @dfn{character
 code}.  For example, the character @kbd{A} is represented as the
-@w{integer 65}, following the standard @sc{ASCII} representation of
-characters.  If XEmacs was not compiled with @sc{MULE} support, the
+@w{integer 65}, following the standard @sc{ascii} representation of
+characters.  If XEmacs was not compiled with @sc{mule} support, the
 range of this integer will always be 0 to 255 -- eight bits, or one
 byte. (Integers outside this range are accepted but silently truncated;
 however, you should most decidedly @emph{not} rely on this, because it
-will not work under XEmacs with @sc{MULE} support.)  When @sc{MULE}
+will not work under XEmacs with @sc{mule} support.)  When @sc{mule}
 support is present, the range of character codes is much
 larger. (Currently, 19 bits are used.)
 
   FSF GNU Emacs uses kludgy character codes above 255 to represent
-keyboard input of @sc{ASCII} characters in combination with certain
+keyboard input of @sc{ascii} characters in combination with certain
 modifiers.  XEmacs does not use this (a more general mechanism is
-used that does not distinguish between @sc{ASCII} keys and other
+used that does not distinguish between @sc{ascii} keys and other
 keys), so you will never find character codes above 255 in a
-non-@sc{MULE} XEmacs.
+non-@sc{mule} XEmacs.
 
   Individual characters are not often used in programs.  It is far more
 common to work with @emph{strings}, which are sequences composed of
@@ -1148,9 +1149,9 @@ directory called @file{sample.emacs}.  Copy this file from there to your
 home directory and rename it @file{.emacs}.  Then edit it to suit.
 
 Starting with 19.14, you may bring the @file{sample.emacs} into an
-XEmacs buffer by selecting @samp{Help->Samples->Sample .emacs} from the
-menubar.  To determine the location of the @file{etc} directory type the
-command @kbd{C-h v data-directory @key{RET}}.
+XEmacs buffer by selecting @samp{Help->Sample .emacs} from the menubar.
+To determine the location of the @file{etc} directory type the command
+@kbd{C-h v data-directory @key{RET}}.
 
 @node Q1.4.2, Q1.4.3, Q1.4.1, Introduction
 @unnumberedsubsec Q1.4.2: Can I use the same @file{.emacs} with the other Emacs?
@@ -1352,7 +1353,7 @@ This will let you run XEmacs without massive copying.
 Although this entry has been written for XEmacs 19.13, most of it still
 stands true.
 
-@email{steve@@altair.xemacs.org, Steve Baur} writes:
+@email{steve@@xemacs.org, Steve Baur} writes:
 
 @quotation
 The 45MB of space required by the installation directories can be
@@ -1568,7 +1569,7 @@ Initialization error:
 Terminal type `xterm' undefined (or can't access database?)
 @end example
 
-@email{ben@@666.com, Ben Wing} writes:
+@email{ben@@xemacs.org, Ben Wing} writes:
 
 @quotation
 Your ncurses configuration is messed up.  Your /usr/lib/terminfo is a
@@ -1626,7 +1627,7 @@ Rebuild XEmacs yourself -- any working ELF version of libc should be
 O.K.
 @end enumerate
 
-@email{hniksic@@srce.hr, Hrvoje Niksic} writes:
+@email{hniksic@@xemacs.org, Hrvoje Niksic} writes:
 
 @quotation
 Why not use a Perl one-liner for No. 2?
@@ -2210,7 +2211,7 @@ forcing a static link of libc (manually).
 @node Q2.1.14, Q2.1.15, Q2.1.13, Installation
 @unnumberedsubsec Q2.1.14: @kbd{C-g} doesn't work for me.  Is it broken?
 
-@email{ben@@666.com, Ben Wing} writes:
+@email{ben@@xemacs.org, Ben Wing} writes:
 
 @quotation
 @kbd{C-g} does work for most people in most circumstances.  If it
@@ -2734,7 +2735,7 @@ It's almost always a mistake to test @code{emacs-version} or any similar
 variables.
 
 Instead, use feature-tests, such as @code{featurep}, @code{boundp},
-@code{fboundp}, or even simple behavioral tests, eg.:
+@code{fboundp}, or even simple behaviroal tests, eg.:
 
 @lisp
 (defvar foo-old-losing-code-p
@@ -2976,7 +2977,7 @@ When I start up XEmacs using @samp{-iconic} it doesn't work right.
 Using @samp{-unmapped} on the command line, and setting the
 @code{initiallyUnmapped} X Resource don't seem to help much either...
 
-@email{ben@@666.com, Ben Wing} writes:
+@email{ben@@xemacs.org, Ben Wing} writes:
 
 @quotation
 Ugh, this stuff is such an incredible mess that I've about given up
@@ -3540,7 +3541,7 @@ effect of being able to press and release Shift and have the next
 character typed come out in upper case.  This will affect all the other
 modifier keys like Control and Meta as well.
 
-@email{ben@@666.com, Ben Wing} writes:
+@email{ben@@xemacs.org, Ben Wing} writes:
 
 @quotation
 One thing about the sticky modifiers is that if you move the mouse out
@@ -4086,6 +4087,7 @@ Other Mail & News:
 
 Sparcworks, EOS, and WorkShop:
 * Q4.4.1::      What is SPARCworks, EOS, and WorkShop
+* Q4.4.2::      How do I start the Sun Workshop support in XEmacs 21?
 
 Energize:
 * Q4.5.1::      What is/was Energize?
@@ -4165,7 +4167,7 @@ Set @code{vm-reply-ignored-addresses} to a list, like
 @lisp
 (setq vm-reply-ignored-addresses
       '("wing@@nuspl@@nvwls.cc.purdue.edu,netcom[0-9]*.netcom.com"
-       "wing@@netcom.com" "wing@@666.com"))
+       "wing@@netcom.com" "wing@@xemacs.org"))
 @end lisp
 
 Note that each string is a regular expression.
@@ -4487,7 +4489,7 @@ trivial to use.
 @node Q4.3.3, Q4.3.4, Q4.3.2, Subsystems
 @unnumberedsubsec Q4.3.3: Why isn't this @code{movemail} program working?
 
-Ben Wing @email{ben@@666.com} writes:
+Ben Wing @email{ben@@xemacs.org} writes:
 
 @quotation
 It wasn't chown'ed/chmod'd correctly.
@@ -4496,14 +4498,14 @@ It wasn't chown'ed/chmod'd correctly.
 @node Q4.3.4, Q4.3.5, Q4.3.3, Subsystems
 @unnumberedsubsec Q4.3.4: Movemail is also distributed by Netscape?  Can that cause problems?
 
-@email{steve@@altair.xemacs.org, Steve Baur} writes:
+@email{steve@@xemacs.org, Steve Baur} writes:
 
 @quotation
 Yes.  Always use the movemail installed with your XEmacs.  Failure to do
 so can result in lost mail.
 @end quotation
 
-Please refer to @email{jwz@@netscape.com, Jamie Zawinski's} notes at
+Please refer to @email{jwz@@jwz.org, Jamie Zawinski's} notes at
 @iftex
 @*
 @end iftex
@@ -4539,7 +4541,7 @@ There is a good mirror at ftp.cdrom.com;
 @end iftex
 @uref{ftp://ftp.cdrom.com/pub/tex/ctan/support/latex2html/}.
 
-@node Q4.4.1, Q4.5.1, Q4.3.5, Subsystems
+@node Q4.4.1, Q4.4.2, Q4.3.5, Subsystems
 @unnumberedsec 4.4: Sparcworks, EOS, and WorkShop
 @unnumberedsubsec Q4.4.1: What is SPARCworks, EOS, and WorkShop?
 
@@ -4583,7 +4585,45 @@ details, check out
 @uref{http://www.sun.com/software/Products/Developer-products/programs.html}.
 @end quotation
 
-@node Q4.5.1, Q4.6.1, Q4.4.1, Subsystems
+@node Q4.4.2, Q4.5.1, Q4.4.1, Subsystems
+@unnumberedsubsec Q4.4.2: How do I start the Sun Workshop support in XEmacs 21?
+
+Add the switch ---with-workshop to the configure command when building
+XEmacs and put the following in one of your startup files
+(e.g. site-start.el or .emacs):
+
+@lisp
+(when (featurep 'tooltalk)
+  (load "tooltalk-macros")
+  (load "tooltalk-util")
+  (load "tooltalk-init"))
+(when (featurep 'sparcworks)
+  (load "sunpro-init")
+  (load "ring")
+  (load "comint")
+  (load "annotations")
+  (sunpro-startup))
+@end lisp
+
+If you are not using the latest Workshop (5.0) you have to apply the
+following patch:
+
+@format
+--- /opt/SUNWspro/lib/eserve.el.ORIG    Fri May 14 15:23:26 1999
++++ /opt/SUNWspro/lib/eserve.el Fri May 14 15:24:54 1999
+@@@@ -42,7 +42,7 @@@@
+ (defvar running-xemacs nil "t if we're running XEmacs")
+ (defvar running-emacs  nil "t if we're running GNU Emacs 19")
+-(if (string-match "^\\(19\\|20\\)\..*\\(XEmacs\\|Lucid\\)" emacs-version)
++(if (string-match "\\(XEmacs\\|Lucid\\)" emacs-version)
+     (setq running-xemacs t)
+     (setq running-emacs  t))
+@end format 
+
+
+
+@node Q4.5.1, Q4.6.1, Q4.4.2, Subsystems
 @unnumberedsec 4.5: Energize
 @unnumberedsubsec Q4.5.1: What is/was Energize?
 
@@ -5708,7 +5748,7 @@ is:
 an easy way to find out where it spends time?
 @c New
 
-z@email{hniksic@@srce.hr, Hrvoje Niksic} writes:
+z@email{hniksic@@xemacs.org, Hrvoje Niksic} writes:
 @quotation
 Under XEmacs 20.4 and later  you can use @kbd{M-x profile-key-sequence}, press a key
 (say @key{RET} in the Gnus Group buffer), and get the results using
@@ -6229,7 +6269,7 @@ XEmacs 19.16 was the last 19 release, basically consisting of 19.15 plus
 the collected bugfixes.
 
 @item
-As of December 1996, @email{steve@@altair.xemacs.org, Steve Baur} has become
+As of December 1996, @email{steve@@xemacs.org, Steve Baur} has become
 the lead maintainer of XEmacs.
 @end enumerate
 
index 3b7ccdc..d37a926 100644 (file)
@@ -2359,8 +2359,8 @@ The font of this face.
 The foreground and background colors of this face.
 
 @item @code{attributeBackgroundPixmap} (class @code{AttributeBackgroundPixmap}): file-name
-The name of an @sc{XBM} file (or @sc{XPM} file, if your version of Emacs
-supports @sc{XPM}), to use as a background stipple.
+The name of an @sc{xbm} file (or @sc{xpm} file, if your version of Emacs
+supports @sc{xpm}), to use as a background stipple.
 
 @item @code{attributeUnderline} (class @code{AttributeUnderline}): boolean
 Whether text in this face should be underlined.
index 7b735c7..92accd8 100644 (file)
@@ -430,18 +430,18 @@ items and disabling or enabling existing menu items.
  
 The following functions are available: 
 @table @kbd
-@item add-menu: @var{(menu-path menu-name menu-items &optional before)}
+@item add-menu: (@var{menu-path} @var{menu-name} @var{menu-items} &optional @var{before})
 Add a menu to the menu bar or one of its submenus.
-@item add-menu-item: @var{(menu-path item-name function enabled-p
-&optional before)}
+@item add-menu-item: (@var{menu-path} @var{item-name} @var{function}
+@var{enabled-p} &optional @var{before})
 Add a menu item to a menu, creating the menu first if necessary.
-@item delete-menu-item: @var{(path)}
+@item delete-menu-item: (@var{path})
 Remove the menu item defined by @var{path} from the menu hierarchy.
-@item disable-menu-item: @var{(path)}
+@item disable-menu-item: (@var{path})
 Disable the specified menu item.
-@item enable-menu-item: @var{(path)}
+@item enable-menu-item: (@var{path})
 Enable the specified previously disabled menu item.
-@item relabel-menu-item: @var{(path new-name)}
+@item relabel-menu-item: (@var{path} @var{new-name})
 Change the string of the menu item specified by @var{path} to
 @var{new-name}.
 
index dd9bf07..ded2af4 100644 (file)
@@ -508,7 +508,7 @@ indentation is computed by @kbd{C-M-q}; if the value is a number,
 until the end of the list.
 @end table
 
-@node C Indent,, Lisp Indent, Grinding
+@node C Indent,  , Lisp Indent, Grinding
 @subsection Customizing C Indentation
 
   Two variables control which commands perform C indentation and when.
@@ -1012,7 +1012,7 @@ broken up into files.  It lists the names of the component files and the
 names and positions of the functions (or other named subunits) in each
 file.  Grouping the related files makes it possible to search or replace
 through all the files with one command.  Recording the function names
-and positions makes possible the @kbd{M-.}  command which finds the
+and positions makes possible the @kbd{M-.} command which finds the
 definition of a function by looking up which of the files it is in.
 
   Tags tables are stored in files called @dfn{tags table files}.  The
@@ -1029,15 +1029,16 @@ global variables, data types, and anything else convenient.  Each name
 recorded is called a @dfn{tag}.
 
 @menu
-* Tag Syntax::         Tag syntax for various types of code and text files.  
+* Tag Syntax::         Tag syntax for various types of code and text files.
 * Create Tags Table::  Creating a tags table with @code{etags}.
+* Etags Regexps::       Create arbitrary tags using regular expressions.
 * Select Tags Table::  How to visit a tags table.
-* Find Tag::           Commands to find the definition of a specific tag. 
+* Find Tag::           Commands to find the definition of a specific tag.
 * Tags Search::                Using a tags table for searching and replacing.
 * List Tags::          Listing and finding tags defined in a file.
 @end menu
 
-@node Tag Syntax
+@node Tag Syntax, Create Tags Table, Tags, Tags
 @subsection Source File Tag Syntax
 
   Here is how tag syntax is defined for the most popular languages:
@@ -1045,25 +1046,28 @@ recorded is called a @dfn{tag}.
 @itemize @bullet
 @item
 In C code, any C function or typedef is a tag, and so are definitions of
-@code{struct}, @code{union} and @code{enum}.  @code{#define} macro
-definitions and @code{enum} constants are also tags, unless you specify
-@samp{--no-defines} when making the tags table.  Similarly, global
-variables are tags, unless you specify @samp{--no-globals}.  Use of
-@samp{--no-globals} and @samp{--no-defines} can make the tags table file
-much smaller.
+@code{struct}, @code{union} and @code{enum}.  You can tag function
+declarations and external variables in addition to function definitions
+by giving the @samp{--declarations} option to @code{etags}.
+@code{#define} macro definitions and @code{enum} constants are also
+tags, unless you specify @samp{--no-defines} when making the tags table.
+Similarly, global variables are tags, unless you specify
+@samp{--no-globals}.  Use of @samp{--no-globals} and @samp{--no-defines}
+can make the tags table file much smaller.
 
 @item
 In C++ code, in addition to all the tag constructs of C code, member
 functions are also recognized, and optionally member variables if you
 use the @samp{--members} option.  Tags for variables and functions in
 classes are named @samp{@var{class}::@var{variable}} and
-@samp{@var{class}::@var{function}}.
+@samp{@var{class}::@var{function}}.  @code{operator} functions tags are
+named, for example @samp{operator+}.
 
 @item
 In Java code, tags include all the constructs recognized in C++, plus
-the @code{extends} and @code{implements} constructs.  Tags for variables
-and functions in classes are named @samp{@var{class}.@var{variable}} and
-@samp{@var{class}.@var{function}}.
+the @code{interface}, @code{extends} and @code{implements} constructs.
+Tags for variables and functions in classes are named
+@samp{@var{class}.@var{variable}} and @samp{@var{class}.@var{function}}.
 
 @item
 In La@TeX{} text, the argument of any of the commands @code{\chapter},
@@ -1075,7 +1079,7 @@ tag.@refill
 Other commands can make tags as well, if you specify them in the
 environment variable @code{TEXTAGS} before invoking @code{etags}.  The
 value of this environment variable should be a colon-separated list of
-commands names.  For example,
+command names.  For example,
 
 @example
 TEXTAGS="def:newcommand:newenvironment"
@@ -1101,6 +1105,12 @@ set with @code{set!} at top level in the file.
   Several other languages are also supported:
 
 @itemize @bullet
+
+@item
+In Ada code, functions, procedures, packages, tasks, and types are
+tags.  Use the @samp{--packages-only} option to create tags for packages
+only.
+
 @item
 In assembler code, labels appearing at the beginning of a line,
 followed by a colon, are tags.
@@ -1111,39 +1121,44 @@ it constructs.  The portions of the file that contain C code are parsed
 as C code.
 
 @item
-In Cobol code, paragraphs names are the tags, i.e. any word starting in
-column 8 and followed by a full stop.
+In Cobol code, tags are paragraph names; that is, any word starting in
+column 8 and followed by a period.
 
 @item
 In Erlang code, the tags are the functions, records, and macros defined
 in the file.
 
 @item
-In Fortran code, functions and subroutines are tags.
+In Fortran code, functions, subroutines and blockdata are tags.
 
 @item
 In Objective C code, tags include Objective C definitions for classes,
-class categories, methods and protocols.
+class categories, methods, and protocols.
 
 @item
 In Pascal code, the tags are the functions and procedures defined in
 the file.
 
 @item
-In Perl code, the tags are the procedures defined by the @code{sub}
-keyword.
+In Perl code, the tags are the procedures defined by the @code{sub},
+@code{my} and @code{local} keywords.  Use @samp{--globals} if you want
+to tag global variables.
 
 @item
 In Postscript code, the tags are the functions.
 
 @item
 In Prolog code, a tag name appears at the left margin.
+
+@item
+In Python code, @code{def} or @code{class} at the beginning of a line
+generate a tag.
 @end itemize
 
-  You can also generate tags based on regexp matching (@pxref{Create
-Tags Table}) to handle other formats and languages.
+  You can also generate tags based on regexp matching 
+(@pxref{Etags Regexps}) to handle other formats and languages.
 
-@node Create Tags Table
+@node Create Tags Table, Etags Regexps, Tag Syntax, Tags
 @subsection Creating Tags Tables
 @cindex @code{etags} program
 
@@ -1162,10 +1177,18 @@ etags @var{inputfiles}@dots{}
 @end example
 
 @noindent
-The @code{etags} program reads the specified files, and writes a tags table
-named @file{TAGS} in the current working directory.  @code{etags}
-recognizes the language used in an input file based on its file name and
-contents.  You can specify the language with the
+The @code{etags} program reads the specified files, and writes a tags
+table named @file{TAGS} in the current working directory.  You can
+intermix compressed and plain text source file names.  @code{etags}
+knows about the most common compression formats, and does the right
+thing.  So you can compress all your source files and have @code{etags}
+look for compressed versions of its file name arguments, if it does not
+find uncompressed versions.  Under MS-DOS, @code{etags} also looks for
+file names like @samp{mycode.cgz} if it is given @samp{mycode.c} on the
+command line and @samp{mycode.c} does not exist.
+
+  @code{etags} recognizes the language used in an input file based on
+its file name and contents.  You can specify the language with the
 @samp{--language=@var{name}} option, described below.
 
   If the tags table data become outdated due to changes in the files
@@ -1202,7 +1225,7 @@ files.
 the tags file will contain absolute file names.  This way, the tags file
 will still refer to the same files even if you move it, as long as the
 source files remain in the same place.  Absolute file names start with
-@samp{/}, or with @samp{@var{device}:/} on MS-DOS and Windows.
+@samp{/}, or with @samp{@var{device}:/} on MS-DOS and MS-Windows.
 
   When you want to make a tags table from a great number of files, you
 may have problems listing them on the command line, because some systems
@@ -1210,9 +1233,9 @@ have a limit on its length.  The simplest way to circumvent this limit
 is to tell @code{etags} to read the file names from its standard input,
 by typing a dash in place of the file names, like this:
 
-@example
+@smallexample
 find . -name "*.[chCH]" -print | etags -
-@end example
+@end smallexample
 
   Use the option @samp{--language=@var{name}} to specify the language
 explicitly.  You can intermix these options with file names; each one
@@ -1220,18 +1243,25 @@ applies to the file names that follow it.  Specify
 @samp{--language=auto} to tell @code{etags} to resume guessing the
 language from the file names and file contents.  Specify
 @samp{--language=none} to turn off language-specific processing
-entirely; then @code{etags} recognizes tags by regexp matching alone.
-@samp{etags --help} prints the list of the languages @code{etags} knows,
-and the file name rules for guessing the language.
+entirely; then @code{etags} recognizes tags by regexp matching alone
+(@pxref{Etags Regexps}).
+
+  @samp{etags --help} prints the list of the languages @code{etags}
+knows, and the file name rules for guessing the language. It also prints
+a list of all the available @code{etags} options, together with a short
+explanation.
+
+@node Etags Regexps, Select Tags Table, Create Tags Table, Tags
+@subsection Etags Regexps
 
   The @samp{--regex} option provides a general way of recognizing tags
 based on regexp matching.  You can freely intermix it with file names.
 Each @samp{--regex} option adds to the preceding ones, and applies only
 to the following files.  The syntax is:
 
-@example
+@smallexample
 --regex=/@var{tagregexp}[/@var{nameregexp}]/
-@end example
+@end smallexample
 
 @noindent
 where @var{tagregexp} is used to match the lines to tag.  It is always
@@ -1251,18 +1281,25 @@ expression at least @var{m} times and up to @var{n} times.
 
   You should not match more characters with @var{tagregexp} than that
 needed to recognize what you want to tag.  If the match is such that
-more characters than needed are unavoidably matched by @var{tagregexp},
-you may find useful to add a @var{nameregexp}, in order to narrow the tag
-scope.  You can find some examples below.
+more characters than needed are unavoidably matched by @var{tagregexp}
+(as will usually be the case), you should add a @var{nameregexp}, to
+pick out just the tag.  This will enable Emacs to find tags more
+accurately and to do completion on tag names more reliably.  You can
+find some examples below.
+
+  The option @samp{--ignore-case-regex} (or @samp{-c}) is like
+@samp{--regex}, except that the regular expression provided will be
+matched without regard to case, which is appropriate for various
+programming languages.
 
   The @samp{-R} option deletes all the regexps defined with
 @samp{--regex} options.  It applies to the file names following it, as
 you can see from the following example:
 
-@example
+@smallexample
 etags --regex=/@var{reg1}/ voo.doo --regex=/@var{reg2}/ \
     bar.ber -R --lang=lisp los.er
-@end example
+@end smallexample
 
 @noindent
 Here @code{etags} chooses the parsing language for @file{voo.doo} and
@@ -1272,38 +1309,90 @@ Here @code{etags} chooses the parsing language for @file{voo.doo} and
 @file{bar.ber}.  @code{etags} uses the Lisp tags rules, and no regexp
 matching, to recognize tags in @file{los.er}.
 
-  Here are some more examples.  The regexps are quoted to protect them
-from shell interpretation.
+  A regular expression can be bound to a given language, by prepending
+it with @samp{@{lang@}}.  When you do this, @code{etags} will use the
+regular expression only for files of that language.  @samp{etags --help}
+prints the list of languages recognised by @code{etags}.  The following
+example tags the @code{DEFVAR} macros in the Emacs source files.
+@code{etags} applies this regular expression to C files only:
+
+@smallexample
+--regex='@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/'
+@end smallexample
 
 @noindent
-Tag the @code{DEFVAR} macros in the emacs source files:
+This feature is particularly useful when storing a list of regular
+expressions in a file.  The following option syntax instructs
+@code{etags} to read two files of regular expressions.  The regular
+expressions contained in the second file are matched without regard to
+case.
 
-@example
---regex='/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/'
-@end example
+@smallexample
+--regex=@@first-file --ignore-case-regex=@@second-file
+@end smallexample
 
 @noindent
-Tag VHDL files (this example is a single long line, broken here for
-formatting reasons):
+A regex file contains one regular expressions per line.  Empty lines,
+and lines beginning with space or tab are ignored.  When the first
+character in a line is @samp{@@}, @code{etags} assumes that the rest of
+the line is the name of a file of regular expressions.  This means that
+such files can be nested.  All the other lines are taken to be regular
+expressions.  For example, one can create a file called
+@samp{emacs.tags} with the following contents (the first line in the
+file is a comment):
 
-@example
---language=none
---regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/'
---regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\
-\( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
-@end example
+@smallexample
+        -- This is for GNU Emacs source files
+@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/
+@end smallexample
 
 @noindent
-Tag TCL files (this last example shows the usage of a @var{nameregexp}):
+and then use it like this:
 
-@example
---lang=none --regex='/proc[ \t]+\([^ \t]+\)/\1/'
-@end example
+@smallexample
+etags --regex=@@emacs.tags *.[ch] */*.[ch]
+@end smallexample
+
+  Here are some more examples.  The regexps are quoted to protect them
+from shell interpretation.
+
+@itemize @bullet
 
-  For a list of the other available @code{etags} options, execute
-@code{etags --help}.
+@item
+Tag Octave files:
+
+@smallexample
+etags --language=none \
+      --regex='/[ \t]*function.*=[ \t]*\([^ \t]*\)[ \t]*(/\1/' \
+      --regex='/###key \(.*\)/\1/' \
+      --regex='/[ \t]*global[ \t].*/' \
+      *.m
+@end smallexample
+
+@noindent
+Note that tags are not generated for scripts so that you have to add a
+line by yourself of the form `###key <script-name>' if you want to jump
+to it.
+
+@item
+Tag Tcl files:
+
+@smallexample
+etags --language=none --regex='/proc[ \t]+\([^ \t]+\)/\1/' *.tcl
+@end smallexample
+
+@item
+Tag VHDL files:
+
+@smallexample
+--language=none \
+--regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' \
+--regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\
+\( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
+@end smallexample
+@end itemize
 
-@node Select Tags Table, Find Tag, Create Tags Table, Tags
+@node Select Tags Table, Find Tag, Etags Regexps, Tags
 @subsection Selecting a Tags Table
 
 @vindex tag-table-alist
@@ -1555,7 +1644,7 @@ file in the tags table and prepare to advance sequentially by files.
 Visit the next file in the selected tags table.
 @end table
 
-@node List Tags,, Tags Search, Tags
+@node List Tags,  , Tags Search, Tags
 @subsection Tags Table Inquiries
 
 @table @kbd
@@ -1740,7 +1829,7 @@ indent some lines unaesthetically.  However, a correct Fortran program will
 retain its meaning when reindented even if the conventions are not
 followed.
 
-@node ForIndent Vars,, ForIndent Conv, Fortran Indent
+@node ForIndent Vars,  , ForIndent Conv, Fortran Indent
 @subsubsection Variables for Fortran Indentation
 
 @vindex fortran-do-indent
@@ -1897,7 +1986,7 @@ command which splits the current window horizontally, resulting in a window 72
 columns wide.  When you edit in this window, you can immediately see
 when a line gets too wide to be correct Fortran.
 
-@node Fortran Abbrev,, Fortran Columns, Fortran
+@node Fortran Abbrev,  , Fortran Columns, Fortran
 @subsection Fortran Keyword Abbrevs
 
   Fortran mode provides many built-in abbrevs for common keywords and
@@ -1917,7 +2006,7 @@ automatically to @samp{continue}, provided Abbrev mode is enabled.@refill
   Type @samp{;?} or @samp{;C-h} to display a list of all built-in
 Fortran abbrevs and what they stand for.
 
-@node Asm Mode,, Fortran, Programs
+@node Asm Mode,  , Fortran, Programs
 @section Asm Mode
 
 @cindex Asm mode
index 2dbdb54..0ad18f7 100644 (file)
@@ -1,5 +1,4 @@
-
-\input ../texinfo  @c -*-texinfo-*-
+\input texinfo  @c -*-texinfo-*-
 @setfilename ../../info/xemacs.info
 @comment  node-name,  next,  previous,  up
 
index f1d7e42..cd415f7 100644 (file)
@@ -1,3 +1,11 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
index e508b43..9478322 100644 (file)
@@ -1,3 +1,264 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
+1999-11-26  Martin Buchholz  <martin@xemacs.org>
+
+       * callproc.c (Fcall_process_internal):
+       * config.h.in:
+       * esd.c:
+       * event-msw.c (ntpipe_slurp_reader):
+       * event-msw.c (ntpipe_shove_writer):
+       * event-msw.c (winsock_reader):
+       * event-msw.c (winsock_writer):
+       * event-stream.c (dribble_out_event):
+       * fileio.c:
+       * fileio.c (Fexpand_file_name):
+       * glyphs-x.c (write_lisp_string_to_temp_file):
+       * gpmevent.c (tty_get_foreign_selection):
+       * lisp.h: Update prototypes.
+       * lstream.c (Lstream_flush_out):
+       * lstream.c (Lstream_write_1):
+       * lstream.c (Lstream_was_blocked_p):
+       * lstream.c (Lstream_read_more):
+       * lstream.c (Lstream_read):
+       * lstream.c (Lstream_fputc):
+       * lstream.c (make_stdio_output_stream):
+       * lstream.c (stdio_flusher):
+       * lstream.c (stdio_closer):
+       * lstream.c (make_filedesc_output_stream):
+       * lstream.c (errno_would_block_p):
+       * lstream.c (filedesc_writer):
+       * lstream.c (make_lisp_string_input_stream):
+       * lstream.c (make_fixed_buffer_output_stream):
+       * lstream.c (fixed_buffer_reader):
+       * lstream.c (make_resizing_buffer_output_stream):
+       * lstream.c (make_dynarr_output_stream):
+       * lstream.c (make_lisp_buffer_output_stream):
+       * lstream.c (lisp_buffer_reader):
+       * lstream.h (lstream_implementation):
+       * md5.c (Fmd5):
+       * miscplay.h (reset_parsestate):
+       * process-nt.c (nt_send_process):
+       * process-unix.c (unix_send_process):
+       * sound.c:
+       * sysdep.c (sys_close):
+       * sysdep.c (sys_read_1):
+       * sysdep.c (sys_write_1):
+       * sysfile.h:
+       * file-coding.c (determine_real_coding_system):
+       * file-coding.c (Fdetect_coding_region):
+       * file-coding.c (struct decoding_stream):
+       * file-coding.c (decoding_reader):
+       * file-coding.c (Fdecode_coding_region):
+       * file-coding.c (struct encoding_stream):
+       * file-coding.c (encoding_reader):
+       * file-coding.c (Fencode_coding_region):
+       * file-coding.c (convert_to_external_format):
+       * file-coding.c (convert_from_external_format):
+       - Lstream functions mirror Unix98 read(),write().  Therefore use
+         Unix98 types size_t and ssize_t.  
+       - Try to make Lstream* functions 64-bit clean.  Someday someone
+         may actually want to read from a Lstream with more than 2**32 bytes.
+       - Add configure support for ssize_t.
+       - Update all callers of Lstream_read and Lstream_write to
+         use the new types.
+       - Fix esd* initiated C++ compile errors.
+       - Remove comments referring to `fpurge' - we don't want to call it
+         even if it's there.
+
+       * lisp.h
+       - Remove some lingering Lucid compiler support.
+
+       * lisp.h
+       - Add prototype for Fdelete_process.
+
+       * gpmevent.c (Freceive_gpm_event): Remove unused variables.
+
+1999-11-27  Martin Buchholz  <martin@xemacs.org>
+
+       * Makefile.in.in (depend): Only update `depend' if there were changes.
+
+1999-11-26  Martin Buchholz  <martin@xemacs.org>
+
+       * editfns.c (get_system_name): Remove.
+
+1999-11-26  Martin Buchholz  <martin@xemacs.org>
+
+       * device-x.c (x_init_device): 
+       - Replace magic number `17' with equivalent expn using sizeof.
+       - Replace strcmp with marginally more efficient memcmp.
+       - Avoid using C++ reserved word `class'.
+
+       * file-coding.c (determine_real_coding_system): 
+       - Look for both initial and final -*- cookies.
+       - Replace EQ (foo, Qnil) with NILP (foo)
+       - Make searching for cookies more efficient.
+       - Recognize only rfc 1521 characters in charset names.
+
+1999-11-22  Kazuyuki IENAGA <kazz@imasy.or.jp>
+
+       * input-method-xlib.c (IMDestroyCallback): #ifdef'd by
+       "THIS_IS_X11R6", because it shouldn't be evaluated unless X11R6.
+       * input-method-xlib.c (IMInstantiateCallback): Ditto.
+       * input-method-xlib.c (XIM_init_device): Revive XOpenIM function
+       call for X11R5 systems.
+       * input-method-xlib.c (XIM_delete_frame): Enabled XDestroyIC()
+       again because XIM doesn't concern with frame deletion itself.
+       The XIC will be cleared by XIM when XIM is closing (at XIM destroy
+       callback).
+
+1999-10-25  Kazuyuki IENAGA <kazz@imasy.or.jp>
+
+        * input-method-xlib.c: Added new lisp object Qxim_xlib.
+        New macro xim_warn(str), xim_warn1(fmt,str) and xim_info(str).
+        All the valid stderr_out were changed to those macros.
+        (IMDestroyCallback): Don't test the XIC if the frame is not X
+        frame.
+        (IMInstantiateCallback): Treat the client_data as "device" not
+        "frame" because the caller changed from frame to device.
+        Here initializes XIM and activates XICs for each frame which
+        doesn't have XIC.
+        (XIM_init_device): Register the XIM instantiation callback which
+        had been performed by XIM_init_frame() before.
+        (XIM_delete_frame): Added a test for the XIM before clearing XIC.
+        (XIM_init_frame): Placed an actual code for XIC activation which
+        was moved from IMInstantiateCallback.
+        (syms_of_input_method_xlib): New function which includes a symbol
+        Qxim_xlib that uses in emacs.c.
+
+        * emacs.c: Added a function entry "syms_of_input_method_xlib" for
+        input_method_xlib.
+
+        * symsinit.h: Added a declaration of "syms_of_input_method_xlib".
+
+1999-11-05  Robert Pluim  <rpluim@bigfoot.com>
+
+       * emacs.c (shut_down_emacs): Point users to PROBLEMS file
+
+1999-11-16  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+       * redisplay-output.c (compare_runes): Add comments about
+       results from profiling.
+
+       * redisplay.h (struct rune): Do not use bitfields for members.
+       (struct rune): Add various comments about further optimizations.
+       
+1999-11-19  Eric Darve  <darve@crocco.stanford.edu>
+
+       * abbrev.c (abbrev_oblookup): Check whether wordend <= wordstart
+       if Vabbrev_start_location is used too.
+
+1999-10-27  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * file-coding.c (detect_eol_type): Return CR when two
+       sequential CR are found.
+       (determine_real_coding_system): Check EOL type when coding:
+       cookie is found and EOL type is not specified.
+       Don't assume 8bit char as part of coding: cookie.
+
+1999-10-26  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * file-coding.c (determine_real_coding_system): Check if
+       '-*-' exists. End searching for coding: cookie at the end
+       of line. Check whether character before coding: is space,
+       tab or ';'.
+
+1999-11-07  William M. Perry  <wmperry@aventail.com>
+
+       * gpmevent.c: Completely rewrote GPM mouse support for linux
+         console.  The TTY console and event stream are modified at run
+         time, so this code can now be used as a module.
+         (tty_get_foreign_selection): New function to allow pasting from
+         other virtual consoles.
+         (Fgpm_enable): New lisp-visible function to turn GPM on or off
+         at run time.
+
+       * device-tty.c (tty_asynch_device_change): No longer need to
+         notify GPM code of window/console height/width changes.
+
+       * console-tty.c (tty_init_console): Removed outdated GPM support
+         that was part of the console/event code.
+
+       * event-Xt.c (emacs_Xt_select_console): Ditto
+
+       * event-Xt.c (emacs_Xt_unselect_console): Ditto
+
+       * event-unixoid.c (read_event_from_tty_or_stream_desc): Ditto
+
+       * frame-tty.c (console_type_create_frame_tty): Ditto
+
+1999-11-17  Martin Buchholz  <martin@xemacs.org>
+
+       * nt.c:
+       * sysdep.c:
+       * s/mingw32.h:
+       * s/windowsnt.h:
+       - Use Unix 98 types uid_t, gid_t, pid_t.
+       - Define them.
+
+1999-11-01  Olivier Galibert  <galibert@pobox.com>
+
+       * alloc.c (reinit_alloc_once_early): Move purify_flag init...
+       * emacs.c (main_1): ...here, to get the correct value even with
+       the portable dumper.
+
+1999-11-17  Martin Buchholz  <martin@xemacs.org>
+
+       * lisp.h (BIT_VECTOR_LONG_STORAGE): Add extra parens.  It's a macro!
+
+       * tooltalk.c (tt_build_string): Remove extra parens.
+       * process.c (print_process): Remove extra parens.
+       * buffer.h (BI_BUF_PTR_BYTE_POS): 
+       (BUF_PTR_BYTE_POS): 
+       (BI_BUF_BYTE_ADDRESS): 
+       (BI_BUF_BYTE_ADDRESS_BEFORE): 
+       (valid_memind_p): 
+       (bytind_to_memind): 
+       (memind_to_bytind):
+       Remove extra parens.  Inline functions are not macros.
+
+       * editfns.c (Fuser_login_name): 
+       (user_login_name):
+       Use proper type uid_t.
+
+1999-11-15  Martin Buchholz  <martin@xemacs.org>
+
+       * syntax.c (complex_vars_of_syntax): Make more readable.
+       (define_standard_syntax): New function.
+
+       * syntax.c (forward-comment): Gradually make XEmacs 64-bit-clean.
+
+1999-11-14  Martin Buchholz  <martin@xemacs.org>
+
+       * mule-ccl.c (CCL_WRITE_STRING): Fix compiler warnings.
+
+1999-11-12  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * mule-charset.h (LEADING_BYTE_OFFICIAL_1, LEADING_BYTE_OFFICIAL_2):
+       New enum type to make sure no gap in the leading byte definition.
+
+1999-11-11  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * mule-charset.h (LEADING_BYTE_CYRILLIC_ISO_8859_5,
+       LEADING_BYTE_LATIN_ISO8859_9): Moved to 0x8B and 0x8C
+       to remove a hole in leading byte definition.
+
+1999-11-10  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * mule-charset.c (non_ascii_valid_charptr_p): Check if
+       private charset is defined.
+
+1999-11-09  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * mule-ccl.c (ccl_driver): Make sure generated sequences
+       are valid when doing `CCL_WRITE_STRING'.
+       (ccl-execute-on-string): Pass CCL_MODE_DECODING to ccl_driver.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
index 8a02b11..cef8f86 100644 (file)
@@ -739,5 +739,8 @@ install: ${PROGNAME}
 FRC.depend:
 depend: FRC.depend
        cd ${srcdir} && $(RM) depend.tmp && \
-       perl make-src-depend > depend.tmp && \
-       $(RM) depend && mv depend.tmp depend
+       perl ./make-src-depend > depend.tmp && \
+       if cmp -s depend depend.tmp; \
+       then $(RM) depend.tmp; \
+       else $(RM) depend && mv depend.tmp depend; \
+       fi
index 2add8a9..80f08ad 100644 (file)
@@ -222,10 +222,11 @@ abbrev_oblookup (struct buffer *buf, Lisp_Object obarray)
         because of consistency with abbrev_match. */
       if (wordend < point)
        return 0;
-      if (wordend <= wordstart)
-       return 0;
     }
 
+  if (wordend <= wordstart)
+    return 0;
+
   p = word = (Bufbyte *) alloca (MAX_EMCHAR_LEN * (wordend - wordstart));
   for (idx = wordstart; idx < wordend; idx++)
     {
index 8bd4b99..dd9e43b 100644 (file)
@@ -3922,9 +3922,6 @@ void
 reinit_alloc_once_early (void)
 {
   gc_generation_number[0] = 0;
-  /* purify_flag 1 is correct even if CANNOT_DUMP.
-   * loadup.el will set to nil at end. */
-  purify_flag = 1;
   breathing_space = 0;
   XSETINT (all_bit_vectors, 0); /* Qzero may not be set yet. */
   XSETINT (Vgc_message, 0);
index 2c5498d..6e3d980 100644 (file)
@@ -626,9 +626,9 @@ INLINE Bytind BI_BUF_PTR_BYTE_POS (struct buffer *buf, Bufbyte *ptr);
 INLINE Bytind
 BI_BUF_PTR_BYTE_POS (struct buffer *buf, Bufbyte *ptr)
 {
-  return ((ptr) - (buf)->text->beg + 1
-         - ((ptr - (buf)->text->beg + 1) > (buf)->text->gpt
-            ? (buf)->text->gap_size : 0));
+  return (ptr - buf->text->beg + 1
+         - ((ptr - buf->text->beg + 1) > buf->text->gpt
+            ? buf->text->gap_size : 0));
 }
 
 #define BUF_PTR_BYTE_POS(buf, ptr) \
@@ -639,8 +639,8 @@ INLINE Bufbyte * BI_BUF_BYTE_ADDRESS (struct buffer *buf, Bytind pos);
 INLINE Bufbyte *
 BI_BUF_BYTE_ADDRESS (struct buffer *buf, Bytind pos)
 {
-  return ((buf)->text->beg +
-         ((pos >= (buf)->text->gpt ? (pos + (buf)->text->gap_size) : pos)
+  return (buf->text->beg +
+         ((pos >= buf->text->gpt ? (pos + buf->text->gap_size) : pos)
           - 1));
 }
 
@@ -652,8 +652,8 @@ INLINE Bufbyte * BI_BUF_BYTE_ADDRESS_BEFORE (struct buffer *buf, Bytind pos);
 INLINE Bufbyte *
 BI_BUF_BYTE_ADDRESS_BEFORE (struct buffer *buf, Bytind pos)
 {
-  return ((buf)->text->beg +
-         ((pos > (buf)->text->gpt ? (pos + (buf)->text->gap_size) : pos)
+  return (buf->text->beg +
+         ((pos > buf->text->gpt ? (pos + buf->text->gap_size) : pos)
           - 2));
 }
 
@@ -668,16 +668,16 @@ INLINE int valid_memind_p (struct buffer *buf, Memind x);
 INLINE int
 valid_memind_p (struct buffer *buf, Memind x)
 {
-  return ((x >= 1 && x <= (Memind) (buf)->text->gpt) ||
-         (x  > (Memind) ((buf)->text->gpt + (buf)->text->gap_size) &&
-          x <= (Memind) ((buf)->text->z   + (buf)->text->gap_size)));
+  return ((x >= 1 && x <= (Memind) buf->text->gpt) ||
+         (x  > (Memind) (buf->text->gpt + buf->text->gap_size) &&
+          x <= (Memind) (buf->text->z   + buf->text->gap_size)));
 }
 
 INLINE Memind bytind_to_memind (struct buffer *buf, Bytind x);
 INLINE Memind
 bytind_to_memind (struct buffer *buf, Bytind x)
 {
-  return (Memind) ((x > (buf)->text->gpt) ? (x + (buf)->text->gap_size) : x);
+  return (Memind) ((x > buf->text->gpt) ? (x + buf->text->gap_size) : x);
 }
 
 
@@ -688,8 +688,8 @@ memind_to_bytind (struct buffer *buf, Memind x)
 #ifdef ERROR_CHECK_BUFPOS
   assert (valid_memind_p (buf, x));
 #endif
-  return (Bytind) ((x > (Memind) (buf)->text->gpt) ?
-                  x - (buf)->text->gap_size :
+  return (Bytind) ((x > (Memind) buf->text->gpt) ?
+                  x - buf->text->gap_size :
                   x);
 }
 
index 8a685ab..e39fe3f 100644 (file)
@@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA.  */
 
    FSF: long ago.
 
-hacked on by jwz@netscape.com 1991-06
+hacked on by jwz@jwz.org 1991-06
   o  added a compile-time switch to turn on simple sanity checking;
   o  put back the obsolete byte-codes for error-detection;
   o  added a new instruction, unbind_all, which I will use for
index 4b5a5dc..080a1d7 100644 (file)
@@ -450,7 +450,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you
        nread = 0;
        while (nread < bufsize - 1024)
          {
-           int this_read
+           ssize_t this_read
              = Lstream_read (XLSTREAM (instream), bufptr + nread,
                              bufsize - nread);
 
index 45bd85f..3aa4aba 100644 (file)
@@ -551,6 +551,7 @@ extern "C" {
 #endif
 
 /* Allow the source to use standard types */
+#undef ssize_t
 #undef size_t
 #undef pid_t
 #undef mode_t
@@ -579,6 +580,9 @@ extern "C" {
 #undef HAVE_NAS_SOUND
 #undef NAS_NO_ERROR_JUMP
 
+/* Compile in support for ESD (Enlightened Sound Daemon)? */
+#undef HAVE_ESD_SOUND
+
 /* Compile in support for SunPro usage-tracking code? */
 #undef USAGE_TRACKING
 
index 05089bc..c836d8c 100644 (file)
@@ -38,9 +38,6 @@ Boston, MA 02111-1307, USA.  */
 #ifdef FILE_CODING
 #include "file-coding.h"
 #endif
-#ifdef HAVE_GPM
-#include "gpmevent.h"
-#endif
 
 DEFINE_CONSOLE_TYPE (tty);
 DECLARE_IMAGE_INSTANTIATOR_FORMAT (nothing);
@@ -130,10 +127,6 @@ tty_init_console (struct console *con, Lisp_Object props)
   tty_con->terminal_type = terminal_type;
   tty_con->controlling_process = controlling_process;
 
-#ifdef HAVE_GPM
-  connect_to_gpm (con);
-#endif
-
   if (NILP (CONSOLE_NAME (con)))
     CONSOLE_NAME (con) = Ffile_name_nondirectory (tty);
   {
index bc5aacd..a7bbd2b 100644 (file)
@@ -41,9 +41,6 @@ DECLARE_CONSOLE_TYPE (tty);
 struct tty_console
 {
   int infd, outfd;
-#ifdef HAVE_GPM
-  int mouse_fd;
-#endif
   Lisp_Object instream, outstream;
   Lisp_Object terminal_type;
   Lisp_Object controlling_process;
@@ -203,9 +200,6 @@ struct tty_console
   unsigned int is_stdio :1;
 };
 
-#ifdef HAVE_GPM
-#define CONSOLE_TTY_MOUSE_FD(c) (CONSOLE_TTY_DATA (c)->mouse_fd)
-#endif
 #define CONSOLE_TTY_DATA(c) CONSOLE_TYPE_DATA (c, tty)
 #define CONSOLE_TTY_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->cursor_x)
 #define CONSOLE_TTY_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->cursor_y)
index c4b0017..c62ee1b 100644 (file)
@@ -62,7 +62,7 @@ EmacsManager.o: EmacsManager.h EmacsManagerP.h config.h xintrinsicp.h xmmanagerp
 EmacsShell-sub.o: EmacsShell.h EmacsShellP.h config.h xintrinsic.h xintrinsicp.h
 EmacsShell.o: EmacsShell.h ExternalShell.h config.h xintrinsicp.h
 abbrev.o: $(LISP_H) buffer.h bufslots.h chartab.h commands.h insdel.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h symeval.h symsinit.h syntax.h window.h winslots.h
-alloc.o: $(LISP_H) backtrace.h buffer.h bufslots.h bytecode.h chartab.h conslots.h console.h device.h elhash.h events.h extents.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysfile.h systime.h toolbar.h window.h winslots.h
+alloc.o: $(LISP_H) backtrace.h buffer.h bufslots.h bytecode.h chartab.h conslots.h console-stream.h console.h device.h elhash.h events.h extents.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysfile.h systime.h toolbar.h window.h winslots.h
 alloca.o: config.h
 balloon_help.o: balloon_help.h config.h xintrinsic.h
 blocktype.o: $(LISP_H) blocktype.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
@@ -77,7 +77,7 @@ cm.o: $(LISP_H) conslots.h console-tty.h console.h device.h frame.h frameslots.h
 cmdloop.o: $(LISP_H) buffer.h bufslots.h commands.h conslots.h console.h device.h events.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h systime.h toolbar.h window.h winslots.h
 cmds.o: $(LISP_H) buffer.h bufslots.h chartab.h commands.h insdel.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h symeval.h symsinit.h syntax.h
 console-stream.o: $(LISP_H) conslots.h console-stream.h console-tty.h console.h device.h events.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syssignal.h systime.h systty.h toolbar.h window.h winslots.h
-console-tty.o: $(LISP_H) buffer.h bufslots.h conslots.h console-stream.h console-tty.h console.h device.h faces.h file-coding.h frame.h frameslots.h glyphs.h gpmevent.h gui.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syssignal.h systty.h toolbar.h
+console-tty.o: $(LISP_H) buffer.h bufslots.h conslots.h console-stream.h console-tty.h console.h device.h faces.h file-coding.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syssignal.h systty.h toolbar.h
 console.o: $(LISP_H) buffer.h bufslots.h conslots.h console-tty.h console.h device.h events.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h syssignal.h systime.h systty.h toolbar.h window.h winslots.h
 data.o: $(LISP_H) buffer.h bufslots.h bytecode.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h symeval.h symsinit.h sysfloat.h syssignal.h
 debug.o: $(LISP_H) bytecode.h debug.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
@@ -91,16 +91,17 @@ doprnt.o: $(LISP_H) buffer.h bufslots.h lisp-disunion.h lisp-union.h lrecord.h l
 dragdrop.o: $(LISP_H) dragdrop.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
 dynarr.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
 ecrt0.o: config.h
-editfns.o: $(LISP_H) buffer.h bufslots.h chartab.h commands.h conslots.h console.h device.h events.h extents.h frame.h frameslots.h glyphs.h gui.h insdel.h line-number.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h syspwd.h systime.h toolbar.h window.h winslots.h
+editfns.o: $(LISP_H) buffer.h bufslots.h chartab.h commands.h conslots.h console.h device.h events.h extents.h frame.h frameslots.h glyphs.h gui.h insdel.h line-number.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syspwd.h systime.h toolbar.h window.h winslots.h
 eldap.o: $(LISP_H) buffer.h bufslots.h eldap.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h symeval.h symsinit.h sysdep.h
 elhash.o: $(LISP_H) bytecode.h elhash.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
 emacs.o: $(LISP_H) backtrace.h buffer.h bufslots.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h paths.h process.h redisplay.h symeval.h symsinit.h sysdep.h sysdll.h sysfile.h syssignal.h systime.h systty.h
 emodules.o: $(LISP_H) buffer.h bufslots.h conslots.h console.h device.h emodules.h file-coding.h frame.h frameslots.h glyphs.h gui.h insdel.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysdll.h toolbar.h window.h winslots.h
+esd.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h miscplay.h symeval.h symsinit.h
 eval.o: $(LISP_H) backtrace.h buffer.h bufslots.h bytecode.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h symeval.h symsinit.h
 event-Xt.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h EmacsFrame.h blocktype.h buffer.h bufslots.h conslots.h console-tty.h console-x.h console.h device.h dragdrop.h elhash.h events-mod.h events.h file-coding.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h objects-x.h objects.h offix-types.h offix.h process.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysproc.h syssignal.h systime.h systty.h toolbar.h xintrinsic.h xintrinsicp.h
-event-stream.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h blocktype.h buffer.h bufslots.h commands.h conslots.h console-x.h console.h device.h elhash.h events-mod.h events.h file-coding.h frame.h frameslots.h glyphs.h gui-x.h gui.h insdel.h keymap.h lisp-disunion.h lisp-union.h lrecord.h lstream.h macros.h mule-charset.h opaque.h process.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syssignal.h systime.h toolbar.h window.h winslots.h xintrinsic.h
+event-stream.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h blocktype.h buffer.h bufslots.h commands.h conslots.h console-x.h console.h device.h elhash.h events-mod.h events.h file-coding.h frame.h frameslots.h glyphs.h gui-x.h gui.h insdel.h keymap.h lisp-disunion.h lisp-union.h lrecord.h lstream.h macros.h mule-charset.h process.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syssignal.h systime.h toolbar.h window.h winslots.h xintrinsic.h
 event-tty.o: $(LISP_H) conslots.h console-tty.h console.h device.h events.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h process.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysproc.h syssignal.h systime.h systty.h syswait.h toolbar.h
-event-unixoid.o: $(LISP_H) conslots.h console-stream.h console-tty.h console.h device.h events.h gpmevent.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h process.h symeval.h symsinit.h sysdep.h sysfile.h sysproc.h syssignal.h systime.h systty.h
+event-unixoid.o: $(LISP_H) conslots.h console-stream.h console-tty.h console.h device.h events.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h process.h symeval.h symsinit.h sysdep.h sysfile.h sysproc.h syssignal.h systime.h systty.h
 events.o: $(LISP_H) buffer.h bufslots.h conslots.h console-tty.h console-x.h console.h device.h events-mod.h events.h extents.h frame.h frameslots.h glyphs.h gui.h keymap.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h syssignal.h systime.h systty.h toolbar.h window.h winslots.h xintrinsic.h
 extents.o: $(LISP_H) buffer.h bufslots.h conslots.h console.h debug.h device.h elhash.h extents.h faces.h frame.h frameslots.h glyphs.h gui.h insdel.h keymap.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h process.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h
 faces.o: $(LISP_H) buffer.h bufslots.h conslots.h console.h device.h elhash.h extents.h faces.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h objects.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h window.h winslots.h
@@ -116,12 +117,12 @@ frame.o: $(LISP_H) buffer.h bufslots.h conslots.h console.h device.h events.h ex
 free-hook.o: $(LISP_H) hash.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
 general.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
 getloadavg.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h sysfile.h
-gif_io.o: gifrlib.h
+gif_io.o: gifrlib.h sysfile.h
 glyphs-eimage.o: $(LISP_H) buffer.h bufslots.h conslots.h console.h device.h faces.h file-coding.h frame.h frameslots.h gifrlib.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h objects.h opaque.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysfile.h toolbar.h
 glyphs-widget.o: $(LISP_H) buffer.h bufslots.h bytecode.h conslots.h console.h device.h faces.h frame.h frameslots.h glyphs.h gui.h insdel.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h objects.h opaque.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h window.h winslots.h
 glyphs.o: $(LISP_H) blocktype.h buffer.h bufslots.h chartab.h conslots.h console.h device.h elhash.h faces.h frame.h frameslots.h glyphs.h gui.h insdel.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h objects.h opaque.h rangetab.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h window.h winslots.h
 gmalloc.o: config.h getpagesize.h
-gpmevent.o: $(LISP_H) conslots.h console-tty.h console.h device.h events-mod.h events.h gpmevent.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h sysdep.h syssignal.h systime.h systty.h
+gpmevent.o: $(LISP_H) commands.h conslots.h console-tty.h console.h device.h events-mod.h events.h gpmevent.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h process.h symeval.h symsinit.h sysdep.h sysproc.h syssignal.h systime.h systty.h
 gui.o: $(LISP_H) bytecode.h elhash.h gui.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
 gutter.o: $(LISP_H) buffer.h bufslots.h conslots.h console.h device.h faces.h frame.h frameslots.h glyphs.h gui.h gutter.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h window.h winslots.h
 hash.o: $(LISP_H) hash.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
@@ -136,7 +137,7 @@ intl.o: $(LISP_H) bytecode.h conslots.h console.h device.h lisp-disunion.h lisp-
 keymap.o: $(LISP_H) buffer.h bufslots.h bytecode.h conslots.h console.h device.h elhash.h events-mod.h events.h frame.h frameslots.h glyphs.h gui.h insdel.h keymap.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h systime.h toolbar.h window.h winslots.h
 libsst.o: $(LISP_H) libsst.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
 line-number.o: $(LISP_H) buffer.h bufslots.h line-number.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h symeval.h symsinit.h
-linuxplay.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h sysfile.h syssignal.h
+linuxplay.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h miscplay.h symeval.h symsinit.h sysfile.h syssignal.h
 lread.o: $(LISP_H) buffer.h bufslots.h bytecode.h elhash.h file-coding.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h opaque.h symeval.h symsinit.h sysfile.h sysfloat.h
 lstream.o: $(LISP_H) buffer.h bufslots.h insdel.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h symeval.h symsinit.h sysfile.h
 macros.o: $(LISP_H) buffer.h bufslots.h commands.h conslots.h console.h device.h events.h frame.h frameslots.h glyphs.h gui.h keymap.h lisp-disunion.h lisp-union.h lrecord.h macros.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h systime.h toolbar.h window.h winslots.h
@@ -145,6 +146,7 @@ marker.o: $(LISP_H) buffer.h bufslots.h lisp-disunion.h lisp-union.h lrecord.h m
 md5.o: $(LISP_H) buffer.h bufslots.h file-coding.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h symeval.h symsinit.h
 menubar.o: $(LISP_H) buffer.h bufslots.h conslots.h console.h device.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h menubar.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h window.h winslots.h
 minibuf.o: $(LISP_H) buffer.h bufslots.h commands.h conslots.h console-stream.h console.h device.h events.h frame.h frameslots.h glyphs.h gui.h insdel.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h systime.h toolbar.h window.h winslots.h
+miscplay.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h miscplay.h symeval.h symsinit.h sysfile.h syssignal.h
 nas.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h sysdep.h syssignal.h
 nt.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h nt.h ntheap.h symeval.h symsinit.h sysfile.h sysproc.h syssignal.h systime.h
 ntheap.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h ntheap.h symeval.h symsinit.h
index 754905d..4a8c0ca 100644 (file)
@@ -38,10 +38,6 @@ Boston, MA 02111-1307, USA.  */
 
 #include "syssignal.h" /* for SIGWINCH */
 
-#ifdef HAVE_GPM
-#include <gpm.h>
-#endif
-
 #include <errno.h>
 
 Lisp_Object Qinit_pre_tty_win, Qinit_post_tty_win;
@@ -155,15 +151,6 @@ tty_asynch_device_change (void)
          CONSOLE_TTY_DATA (con)->width = width;
          CONSOLE_TTY_DATA (con)->height = height;
 
-#ifdef HAVE_GPM
-         /* We need to tell GPM how big our screen is now
-         ** I am pretty sure the GPM library will get incredibly confused
-         ** if you try to connect to more than one mouse-capable device,
-         ** so I don't think it will cause any more damage in that case.
-         */
-         gpm_mx = width;
-         gpm_my = height;
-#endif
          for (tail = DEVICE_FRAME_LIST (d);
               !NILP (tail);
               tail = XCDR (tail))
index 80b0f45..0c1a3e5 100644 (file)
@@ -387,8 +387,8 @@ x_try_best_visual_class (Screen *screen, int scrnum, int visual_class)
                vi_out [i].depth == 1 ||
                vi_out [i].depth == 8)
 #endif
-             
-           /* SGI has 30-bit deep visuals.  Ignore them. 
+
+           /* SGI has 30-bit deep visuals.  Ignore them.
                 (We only have 24-bit data anyway.)
               */
            && (vi_out [i].depth <= 24)
@@ -566,8 +566,10 @@ x_init_device (struct device *d, Lisp_Object props)
   XtGetApplicationNameAndClass (dpy, (char **) &app_name, (char **) &app_class);
   /* search for a matching visual if requested by the user, or setup the display default */
   {
-    char *buf1 = (char *)alloca (strlen (app_name)  + 17);
-    char *buf2 = (char *)alloca (strlen (app_class) + 17);
+    int resource_name_length = max (sizeof (".emacsVisual"),
+                                   sizeof (".privateColormap"));
+    char *buf1 = alloca_array (char, strlen (app_name)  + resource_name_length);
+    char *buf2 = alloca_array (char, strlen (app_class) + resource_name_length);
     char *type;
     XrmValue value;
 
@@ -575,13 +577,14 @@ x_init_device (struct device *d, Lisp_Object props)
     sprintf (buf2, "%s.EmacsVisual", app_class);
     if (XrmGetResource (XtDatabase (dpy), buf1, buf2, &type, &value) == True)
       {
-       int cnt = 0, vis_class = PseudoColor;
+       int cnt = 0;
+       int vis_class = PseudoColor;
        XVisualInfo vinfo;
-       char *res, *str = (char*)value.addr;
+       char *str = (char*) value.addr;
 
-#define CHECK_VIS_CLASS(class)                                 \
- else if (strncmp (str, #class, sizeof (#class) - 1) == 0)     \
-       cnt = sizeof (#class) - 1, vis_class = class
+#define CHECK_VIS_CLASS(visual_class)                                  \
+ else if (memcmp (str, #visual_class, sizeof (#visual_class) - 1) == 0)        \
+       cnt = sizeof (#visual_class) - 1, vis_class = visual_class
 
        if (1)
          ;
@@ -594,8 +597,7 @@ x_init_device (struct device *d, Lisp_Object props)
 
        if (cnt)
          {
-           res = str + cnt;
-           depth = atoi (res);
+           depth = atoi (str + cnt);
            if (depth == 0)
              {
                stderr_out ("Invalid Depth specification in %s... ignoring...\n", str);
@@ -1750,7 +1752,7 @@ Grab the keyboard on the given device (defaulting to the selected one).
 So long as the keyboard is grabbed, all keyboard events will be delivered
 to emacs -- it is not possible for other X clients to eavesdrop on them.
 Ungrab the keyboard with `x-ungrab-keyboard' (use an unwind-protect).
-Returns t if the grab was successful; nil otherwise.
+Returns t if the grab is successful, nil otherwise.
 */
        (device))
 {
@@ -1809,7 +1811,7 @@ See also `x-set-font-path'.
     signal_simple_error ("Can't get X font path", device);
 
   while (ndirs_return--)
-      font_path = Fcons (build_ext_string (directories[ndirs_return], 
+      font_path = Fcons (build_ext_string (directories[ndirs_return],
                                            FORMAT_FILENAME), font_path);
 
   return font_path;
@@ -1900,7 +1902,7 @@ reinit_console_type_create_device_x (void)
     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
   while (*valid_resource_chars)
     valid_resource_char_p[(unsigned int) (*valid_resource_chars++)] = 1;
-  
+
   name_char_dynarr  = Dynarr_new (char);
   class_char_dynarr = Dynarr_new (char);
 }
index e3dd769..30b173d 100644 (file)
@@ -66,8 +66,6 @@ Lisp_Object Vuser_login_name; /* user name from LOGNAME or USER.  */
 Lisp_Object Vuser_full_name;
 EXFUN (Fuser_full_name, 1);
 
-char *get_system_name (void);
-
 Lisp_Object Qformat;
 
 Lisp_Object Qpoint, Qmark, Qregion_beginning, Qregion_end;
@@ -639,17 +637,17 @@ ignored and this function returns the login name for that UID, or nil.
        (uid))
 {
   char *returned_name;
-  int local_uid;
+  uid_t local_uid;
 
   if (!NILP (uid))
     {
       CHECK_INT (uid);
-      local_uid = XINT(uid);
-      returned_name = user_login_name(&local_uid);
+      local_uid = XINT (uid);
+      returned_name = user_login_name (&local_uid);
     }
   else
     {
-      returned_name = user_login_name(NULL);
+      returned_name = user_login_name (NULL);
     }
   /* #### - I believe this should return nil instead of "unknown" when pw==0
      pw=0 is indicated by a null return from user_login_name
@@ -665,14 +663,12 @@ ignored and this function returns the login name for that UID, or nil.
    corresponds to a nil argument to Fuser_login_name.
 */
 char*
-user_login_name (int *uid)
+user_login_name (uid_t *uid)
 {
-  struct passwd *pw = NULL;
-
   /* uid == NULL to return name of this user */
   if (uid != NULL)
     {
-      pw = getpwuid (*uid);
+      struct passwd *pw = getpwuid (*uid);
       return pw ? pw->pw_name : NULL;
     }
   else
@@ -693,7 +689,7 @@ user_login_name (int *uid)
        return (user_name);
       else
        {
-         pw = getpwuid (geteuid ());
+         struct passwd *pw = getpwuid (geteuid ());
 #ifdef __CYGWIN32__
          /* Since the Cygwin environment may not have an /etc/passwd,
             return "unknown" instead of the null if the username
@@ -913,14 +909,6 @@ Return the name of the machine you are running on, as a string.
     return Fcopy_sequence (Vsystem_name);
 }
 
-/* For the benefit of callers who don't want to include lisp.h.
-   Caller must free! */
-char *
-get_system_name (void)
-{
-  return xstrdup ((char *) XSTRING_DATA (Vsystem_name));
-}
-
 DEFUN ("emacs-pid", Femacs_pid, 0, 0, 0, /*
 Return the process ID of Emacs, as an integer.
 */
index 08bfa7e..bf999a0 100644 (file)
@@ -856,8 +856,20 @@ main_1 (int argc, char **argv, char **envp, int restart)
      We try to do things in an order that minimizes the non-obvious
      dependencies between functions. */
 
+  /* purify_flag 1 is correct even if CANNOT_DUMP.
+   * loadup.el will set to nil at end. */
+
+  purify_flag = 0;
 #ifdef PDUMP
-  initialized = restart || pdump_load ();
+  if (restart)
+    initialized = 1;
+  else {
+    initialized = pdump_load ();
+    purify_flag = !initialized;
+  }
+#else
+  if (!initialized)
+    purify_flag = 1;
 #endif
 
   if (!initialized)
@@ -1018,6 +1030,11 @@ main_1 (int argc, char **argv, char **envp, int restart)
 #if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_DIALOGS) || defined (HAVE_TOOLBARS)
       syms_of_gui_x ();
 #endif
+#ifdef HAVE_XIM
+#ifdef XIM_XLIB
+      syms_of_input_method_xlib ();
+#endif
+#endif /* HAVE_XIM */
 #endif /* HAVE_X_WINDOWS */
 
 #ifdef HAVE_MS_WINDOWS
@@ -1088,6 +1105,10 @@ main_1 (int argc, char **argv, char **envp, int restart)
       syms_of_eldap ();
 #endif
 
+#ifdef HAVE_GPM
+         syms_of_gpmevent ();
+#endif
+
       /* Now create the subtypes for the types that have them.
         We do this before the vars_*() because more symbols
         may get initialized here. */
@@ -1483,6 +1504,10 @@ main_1 (int argc, char **argv, char **envp, int restart)
       vars_of_eldap ();
 #endif
 
+#ifdef HAVE_GPM
+         vars_of_gpmevent ();
+#endif
+
       /* Now initialize any specifier variables.  We do this later
         because it has some dependence on the vars initialized
         above.
@@ -2436,12 +2461,16 @@ shut_down_emacs (int sig, Lisp_Object stuff)
        ("Your files have been auto-saved.\n"
         "Use `M-x recover-session' to recover them.\n"
         "\n"
+         "If you have access to the PROBLEMS file that came with your\n"
+         "version of XEmacs, please check to see if your crash is described\n"
+         "there, as there may be a workaround available.\n"
 #ifdef INFODOCK
-        "Please report this bug by selecting `Report-Bug' in the InfoDock\n"
-        "menu.\n"
+        "Otherwise, please report this bug by selecting `Report-Bug'\n"
+         "in the InfoDock menu.\n"
 #else
-        "Please report this bug by running the send-pr script included\n"
-        "with XEmacs, or selecting `Send Bug Report' from the help menu.\n"
+        "Otherwise, please report this bug by running the send-pr\n"
+         "script included with XEmacs, or selecting `Send Bug Report'\n"
+         "from the help menu.\n"
         "As a last resort send ordinary email to `crashes@xemacs.org'.\n"
 #endif
         "*MAKE SURE* to include the information in the command\n"
index 3417197..4bea4e7 100644 (file)
@@ -2034,9 +2034,6 @@ emacs_Xt_select_console (struct console *con)
 {
   Lisp_Object console;
   int infd;
-#ifdef HAVE_GPM
-  int mousefd;
-#endif
 
   if (CONSOLE_X_P (con))
     return; /* X consoles are automatically selected for when we
@@ -2044,22 +2041,6 @@ emacs_Xt_select_console (struct console *con)
   infd = event_stream_unixoid_select_console (con);
   XSETCONSOLE (console, con);
   select_filedesc (infd, console);
-#ifdef HAVE_GPM
-  /* On a stream device (ie: noninteractive), bad things can happen. */
-  if (EQ (CONSOLE_TYPE (con), Qtty)) {
-    mousefd = CONSOLE_TTY_MOUSE_FD (con);
-       /* We check filedesc_to_what_closure[fd] here because if you run
-       ** XEmacs from a TTY, it will fire up GPM, select the mouse fd, then
-       ** if you run gnuattach to connect to another TTY, it will fire up
-       ** GPM again, and try to reselect the mouse fd.  GPM uses the same
-       ** fd for every connection apparently, and select_filedesc will
-       ** fail its assertion if we try to select it twice.
-       */
-    if ((mousefd >= 0) && !filedesc_to_what_closure[mousefd]) {
-      select_filedesc (mousefd, console);
-    }
-  }
-#endif
 }
 
 static void
@@ -2067,9 +2048,6 @@ emacs_Xt_unselect_console (struct console *con)
 {
   Lisp_Object console;
   int infd;
-#ifdef HAVE_GPM
-  int mousefd;
-#endif
 
   if (CONSOLE_X_P (con))
     return; /* X consoles are automatically selected for when we
@@ -2077,15 +2055,6 @@ emacs_Xt_unselect_console (struct console *con)
   infd = event_stream_unixoid_unselect_console (con);
   XSETCONSOLE (console, con);
   unselect_filedesc (infd);
-#ifdef HAVE_GPM
-  /* On a stream device (ie: noninteractive), bad things can happen. */
-  if (EQ (CONSOLE_TYPE (con), Qtty)) {
-    mousefd = CONSOLE_TTY_MOUSE_FD (con);
-    if (mousefd >= 0) {
-      unselect_filedesc (mousefd);
-    }
-  }
-#endif
 }
 
 /* read an event from a tty, if one is available.  Returns non-zero
index 0dee130..f3e7727 100644 (file)
@@ -89,7 +89,7 @@ typedef NMHDR *LPNMHDR;
 /* Timer ID used for button2 emulation */
 #define BUTTON_2_TIMER_ID 1
 
-extern Lisp_Object 
+extern Lisp_Object
 mswindows_get_toolbar_button_text (struct frame* f, int command_id);
 extern Lisp_Object
 mswindows_handle_toolbar_wm_command (struct frame* f, HWND ctrl, WORD id);
@@ -199,7 +199,7 @@ struct ntpipe_slurp_stream_shared_data
 };
 
 #define MAX_SLURP_STREAMS 32
-struct ntpipe_slurp_stream_shared_data 
+struct ntpipe_slurp_stream_shared_data
 shared_data_block[MAX_SLURP_STREAMS]={{0}};
 
 struct ntpipe_slurp_stream
@@ -271,7 +271,7 @@ slurp_thread (LPVOID vparam)
 
       /* Now we got something to notify caller, either a byte or an
         error/eof indication. Before we do, allow internal pipe
-        buffer to accumulate little bit more data. 
+        buffer to accumulate little bit more data.
         Reader function pulses this event before waiting for
         a character, to avoid pipe delay, and to get the byte
         immediately. */
@@ -360,11 +360,11 @@ get_ntpipe_input_stream_waitable (Lstream *stream)
   return s->thread_data->hev_caller;
 }
 
-static int 
+static ssize_t
 ntpipe_slurp_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   /* This function must be called from the main thread only */
-  struct ntpipe_slurp_stream_shared_data* s = 
+  struct ntpipe_slurp_stream_shared_data* s =
     NTPIPE_SLURP_STREAM_DATA(stream)->thread_data;
 
   if (!s->die_p)
@@ -373,7 +373,7 @@ ntpipe_slurp_reader (Lstream *stream, unsigned char *data, size_t size)
       /* Disallow pipe read delay for the thread: we need a character
          ASAP */
       SetEvent (s->hev_unsleep);
-  
+
       /* Check if we have a character ready. Give it a short delay,
         for the thread to awake from pipe delay, just ion case*/
       wait_result = WaitForSingleObject (s->hev_caller, 2);
@@ -424,7 +424,7 @@ ntpipe_slurp_reader (Lstream *stream, unsigned char *data, size_t size)
              ReadFile (s->hpipe, data, min (bytes_available, size),
                        &bytes_read, NULL);
          }
-      
+
        /* Now we can unblock thread, so it attempts to read more */
        SetEvent (s->hev_thread);
        return bytes_read + 1;
@@ -433,11 +433,11 @@ ntpipe_slurp_reader (Lstream *stream, unsigned char *data, size_t size)
   return 0;
 }
 
-static int 
+static int
 ntpipe_slurp_closer (Lstream *stream)
 {
   /* This function must be called from the main thread only */
-  struct ntpipe_slurp_stream_shared_data* s = 
+  struct ntpipe_slurp_stream_shared_data* s =
     NTPIPE_SLURP_STREAM_DATA(stream)->thread_data;
 
   /* Force thread to stop */
@@ -469,7 +469,7 @@ init_slurp_stream (void)
   LSTREAM_TYPE_DATA (stream, ntpipe_shove)
 
 #define MAX_SHOVE_BUFFER_SIZE 128
-     
+
 struct ntpipe_shove_stream
 {
   LPARAM user_data;    /* Any user data stored in the stream object     */
@@ -496,7 +496,7 @@ shove_thread (LPVOID vparam)
 
   for (;;)
     {
-      DWORD bytes_written; 
+      DWORD bytes_written;
 
       /* Block on event and wait for a job */
       InterlockedIncrement (&s->idle_p);
@@ -533,7 +533,7 @@ make_ntpipe_output_stream (HANDLE hpipe, LPARAM param)
   s->hpipe = hpipe;
   s->user_data = param;
 
-  /* Create reader thread. This could fail, so do not 
+  /* Create reader thread. This could fail, so do not
      create the event until thread is created */
   s->hthread = CreateThread (NULL, 0, shove_thread, (LPVOID)s,
                             CREATE_SUSPENDED, &thread_id_unused);
@@ -562,7 +562,7 @@ get_ntpipe_output_stream_param (Lstream *stream)
 }
 #endif
 
-static int
+static ssize_t
 ntpipe_shove_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct ntpipe_shove_stream* s = NTPIPE_SHOVE_STREAM_DATA(stream);
@@ -671,7 +671,7 @@ winsock_initiate_read (struct winsock_stream *str)
     str->eof_p = 1;
 }
 
-static int
+static ssize_t
 winsock_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   struct winsock_stream *str = WINSOCK_STREAM_DATA (stream);
@@ -704,7 +704,7 @@ winsock_reader (Lstream *stream, unsigned char *data, size_t size)
     return 0;
   if (str->error_p)
     return -1;
-  
+
   /* Return as much of buffer as we have */
   size = min (size, (size_t) (str->bufsize - str->bufpos));
   memcpy (data, (void*)((BYTE*)str->buffer + str->bufpos), size);
@@ -717,7 +717,7 @@ winsock_reader (Lstream *stream, unsigned char *data, size_t size)
   return size;
 }
 
-static int
+static ssize_t
 winsock_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct winsock_stream *str = WINSOCK_STREAM_DATA (stream);
@@ -745,7 +745,7 @@ winsock_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 
   if (size == 0)
     return 0;
-  
+
   {
     ResetEvent (str->ov.hEvent);
 
@@ -867,7 +867,7 @@ mswindows_user_event_p (struct Lisp_Event* sevt)
          || sevt->event_type == misc_user_event);
 }
 
-/* 
+/*
  * Add an emacs event to the proper dispatch queue
  */
 static void
@@ -875,7 +875,7 @@ mswindows_enqueue_dispatch_event (Lisp_Object event)
 {
   int user_p = mswindows_user_event_p (XEVENT(event));
   enqueue_event (event,
-                user_p ? &mswindows_u_dispatch_event_queue : 
+                user_p ? &mswindows_u_dispatch_event_queue :
                        &mswindows_s_dispatch_event_queue,
                 user_p ? &mswindows_u_dispatch_event_queue_tail :
                        &mswindows_s_dispatch_event_queue_tail);
@@ -953,7 +953,7 @@ mswindows_enqueue_mouse_button_event (HWND hwnd, UINT message, POINTS where, DWO
   event->event.button.x = where.x;
   event->event.button.y = where.y;
   event->event.button.modifiers = mswindows_modifier_state (NULL, 0);
-      
+
   if (message==WM_LBUTTONDOWN || message==WM_MBUTTONDOWN ||
       message==WM_RBUTTONDOWN)
     {
@@ -972,7 +972,7 @@ mswindows_enqueue_mouse_button_event (HWND hwnd, UINT message, POINTS where, DWO
       event->event_type = button_release_event;
       ReleaseCapture ();
     }
-  
+
   mswindows_enqueue_dispatch_event (emacs_event);
 }
 
@@ -1004,10 +1004,10 @@ mswindows_dequeue_dispatch_event ()
          !NILP(mswindows_s_dispatch_event_queue));
 
   event = dequeue_event (
-                NILP(mswindows_u_dispatch_event_queue) ? 
-                        &mswindows_s_dispatch_event_queue : 
+                NILP(mswindows_u_dispatch_event_queue) ?
+                        &mswindows_s_dispatch_event_queue :
                         &mswindows_u_dispatch_event_queue,
-                NILP(mswindows_u_dispatch_event_queue) ? 
+                NILP(mswindows_u_dispatch_event_queue) ?
                         &mswindows_s_dispatch_event_queue_tail :
                         &mswindows_u_dispatch_event_queue_tail);
 
@@ -1037,9 +1037,9 @@ mswindows_cancel_dispatch_event (struct Lisp_Event *match)
   Lisp_Object event;
   Lisp_Object previous_event = Qnil;
   int user_p = mswindows_user_event_p (match);
-  Lisp_Object* head = user_p ? &mswindows_u_dispatch_event_queue : 
+  Lisp_Object* head = user_p ? &mswindows_u_dispatch_event_queue :
                               &mswindows_s_dispatch_event_queue;
-  Lisp_Object* tail = user_p ? &mswindows_u_dispatch_event_queue_tail : 
+  Lisp_Object* tail = user_p ? &mswindows_u_dispatch_event_queue_tail :
                               &mswindows_s_dispatch_event_queue_tail;
 
   assert (match->event_type == timeout_event
@@ -1062,7 +1062,7 @@ mswindows_cancel_dispatch_event (struct Lisp_Event *match)
              if (EQ (*tail, event))
                *tail = previous_event;
            }
-         
+
          return event;
        }
       previous_event = event;
@@ -1103,7 +1103,7 @@ remove_waitable_handle (HANDLE h)
   if (ix < 0)
     return;
 
-  mswindows_waitable_handles [ix] = 
+  mswindows_waitable_handles [ix] =
     mswindows_waitable_handles [--mswindows_waitable_count];
 }
 #endif /* HAVE_MSG_SELECT */
@@ -1127,7 +1127,7 @@ mswindows_protect_modal_loop (Lisp_Object (*bfun) (Lisp_Object barg),
 {
   Lisp_Object tmp;
 
-  ++mswindows_in_modal_loop; 
+  ++mswindows_in_modal_loop;
   tmp = condition_case_1 (Qt,
                          bfun, barg,
                          mswindows_modal_loop_error_handler, Qnil);
@@ -1151,7 +1151,7 @@ mswindows_unmodalize_signal_maybe (void)
 }
 
 /*
- * This is an unsafe part of event pump, guarded by 
+ * This is an unsafe part of event pump, guarded by
  * condition_case. See mswindows_pump_outstanding_events
  */
 static Lisp_Object
@@ -1175,7 +1175,7 @@ mswindows_unsafe_pump_events (Lisp_Object u_n_u_s_e_d)
 
   Fdeallocate_event (event);
   UNGCPRO;
-  
+
   /* Qt becomes return value of mswindows_pump_outstanding_events
      once we get here */
   return Qt;
@@ -1223,14 +1223,14 @@ mswindows_pump_outstanding_events (void)
   Lisp_Object result = Qt;
   struct gcpro gcpro1;
   GCPRO1 (result);
-  
+
   if (NILP(mswindows_error_caught_in_modal_loop))
       result = mswindows_protect_modal_loop (mswindows_unsafe_pump_events, Qnil);
   UNGCPRO;
   return result;
 }
 
-static void 
+static void
 mswindows_drain_windows_queue ()
 {
   MSG msg;
@@ -1249,7 +1249,7 @@ mswindows_drain_windows_queue ()
     }
 }
 
-/* 
+/*
  * This is a special flavor of the mswindows_need_event function,
  * used while in event pump. Actually, there is only kind of events
  * allowed while in event pump: a timer.  An attempt to fetch any
@@ -1282,7 +1282,7 @@ mswindows_need_event_in_modal_loop (int badly_p)
       /* We'll deadlock if go waiting */
       if (mswindows_pending_timers_count == 0)
        error ("Deadlock due to an attempt to call next-event in a wrong context");
-      
+
       /* Fetch and dispatch any pending timers */
       GetMessage (&msg, NULL, WM_TIMER, WM_TIMER);
       DispatchMessage (&msg);
@@ -1319,7 +1319,7 @@ mswindows_need_event (int badly_p)
       SELECT_TYPE temp_mask = input_wait_mask;
       EMACS_TIME sometime;
       EMACS_SELECT_TIME select_time_to_block, *pointer_to_this;
-      
+
       if (badly_p)
        pointer_to_this = 0;
       else
@@ -1330,7 +1330,7 @@ mswindows_need_event (int badly_p)
        }
 
       active = select (MAXDESC, &temp_mask, 0, 0, pointer_to_this);
-      
+
       if (active == 0)
        {
          assert (!badly_p);
@@ -1342,7 +1342,7 @@ mswindows_need_event (int badly_p)
            {
              mswindows_drain_windows_queue ();
            }
-#ifdef HAVE_TTY          
+#ifdef HAVE_TTY
          /* Look for a TTY event */
          for (i = 0; i < MAXDESC-1; i++)
            {
@@ -1354,7 +1354,7 @@ mswindows_need_event (int badly_p)
                  struct console *c = tty_find_console_from_fd (i);
                  Lisp_Object emacs_event = Fmake_event (Qnil, Qnil);
                  struct Lisp_Event* event = XEVENT (emacs_event);
-                 
+
                  assert (c);
                  if (read_event_from_tty_or_stream_desc (event, c, i))
                    {
@@ -1373,7 +1373,7 @@ mswindows_need_event (int badly_p)
                    {
                      struct Lisp_Process *p =
                        get_process_from_usid (FD_TO_USID(i));
-                     
+
                      mswindows_enqueue_process_event (p);
                    }
                  else
@@ -1412,7 +1412,7 @@ mswindows_need_event (int badly_p)
     assert ((!badly_p && active == WAIT_TIMEOUT) ||
            (active >= WAIT_OBJECT_0 &&
             active <= WAIT_OBJECT_0 + mswindows_waitable_count));
-    
+
     if (active == WAIT_TIMEOUT)
       {
        /* No luck trying - just return what we've already got */
@@ -1427,7 +1427,7 @@ mswindows_need_event (int badly_p)
       {
        int ix = active - WAIT_OBJECT_0;
        /* First, try to find which process' output has signaled */
-       struct Lisp_Process *p = 
+       struct Lisp_Process *p =
          get_process_from_usid (HANDLE_TO_USID (mswindows_waitable_handles[ix]));
        if (p != NULL)
          {
@@ -1455,7 +1455,7 @@ mswindows_need_event (int badly_p)
 /*                           Event generators                           */
 /************************************************************************/
 
-/* 
+/*
  * Callback procedure for synchronous timer messages
  */
 static void CALLBACK
@@ -1477,7 +1477,7 @@ mswindows_wm_timer_callback (HWND hwnd, UINT umsg, UINT id_timer, DWORD dwtime)
   mswindows_enqueue_dispatch_event (emacs_event);
 }
 
-/* 
+/*
  * Callback procedure for dde messages
  *
  * We execute a dde Open("file") by simulating a file drop, so dde support
@@ -1488,9 +1488,9 @@ HDDEDATA CALLBACK
 mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
                        HSZ hszTopic, HSZ hszItem, HDDEDATA hdata,
                        DWORD dwData1, DWORD dwData2)
-{ 
+{
   switch (uType)
-    { 
+    {
     case XTYP_CONNECT:
       if (!DdeCmpStringHandles (hszTopic, mswindows_dde_topic_system))
        return (HDDEDATA)TRUE;
@@ -1507,7 +1507,7 @@ mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
          return (DdeCreateDataHandle (mswindows_dde_mlid, (LPBYTE)pairs,
                                       sizeof (pairs), 0L, 0, uFmt, 0));
       }
-      return (HDDEDATA)NULL; 
+      return (HDDEDATA)NULL;
 
     case XTYP_EXECUTE:
       if (!DdeCmpStringHandles (hszTopic, mswindows_dde_topic_system))
@@ -1588,12 +1588,12 @@ mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
          UNGCPRO;
          return (HDDEDATA) DDE_FACK;
        }
-      DdeFreeDataHandle (hdata); 
+      DdeFreeDataHandle (hdata);
       return (HDDEDATA) DDE_FNOTPROCESSED;
 
-    default: 
-      return (HDDEDATA) NULL; 
-    } 
+    default:
+      return (HDDEDATA) NULL;
+    }
 }
 #endif
 
@@ -1677,7 +1677,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          BYTE keymap_orig[256];
          POINT pnt = { LOWORD (GetMessagePos()), HIWORD (GetMessagePos()) };
          MSG msg;
-         
+
          msg.hwnd = hwnd;
          msg.message = message;
          msg.wParam = wParam;
@@ -1750,7 +1750,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     mswindows_enqueue_mouse_button_event (hwnd, message,
                                          MAKEPOINTS (lParam), GetMessageTime());
     break;
-    
+
   case WM_LBUTTONUP:
     msframe  = FRAME_MSWINDOWS_DATA (XFRAME (mswindows_find_frame (hwnd)));
     msframe->last_click_time =  GetMessageTime();
@@ -1872,7 +1872,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       }
     msframe->last_click_time =  GetMessageTime();
     break;
-       
+
   case WM_TIMER:
     if (wParam == BUTTON_2_TIMER_ID)
       {
@@ -1921,7 +1921,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       event->event.motion.x = MAKEPOINTS(lParam).x;
       event->event.motion.y = MAKEPOINTS(lParam).y;
       event->event.motion.modifiers = mswindows_modifier_state (NULL, 0);
-      
+
       mswindows_enqueue_dispatch_event (emacs_event);
     }
     break;
@@ -1946,9 +1946,9 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
          /* find out which toolbar */
          frame = XFRAME (mswindows_find_frame (hwnd));
-         btext = mswindows_get_toolbar_button_text ( frame, 
+         btext = mswindows_get_toolbar_button_text ( frame,
                                                      nmhdr->idFrom );
-         
+
          tttext->lpszText = NULL;
          tttext->hinst = NULL;
 
@@ -1956,7 +1956,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
            {
              /* I think this is safe since the text will only go away
                  when the toolbar does...*/
-             GET_C_STRING_EXT_DATA_ALLOCA (btext, FORMAT_OS, 
+             GET_C_STRING_EXT_DATA_ALLOCA (btext, FORMAT_OS,
                                            tttext->lpszText);
            }
 #endif
@@ -1978,12 +1978,12 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          item.mask = TCIF_PARAM;
          SendMessage (nmhdr->hwndFrom, TCM_GETITEM, (WPARAM)index,
                       (LPARAM)&item);
-         
+
          mswindows_handle_gui_wm_command (frame, 0, item.lParam);
        }
     }
     break;
-    
+
   case WM_PAINT:
     {
       /* According to the docs we need to check GetUpdateRect() before
@@ -1994,7 +1994,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          int x, y, width, height;
 
          frame = XFRAME (mswindows_find_frame (hwnd));
-         
+
          BeginPaint (hwnd, &paintStruct);
          x = paintStruct.rcPaint.left;
          y = paintStruct.rcPaint.top;
@@ -2057,8 +2057,8 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          if (FRAME_MSWINDOWS_TARGET_RECT (frame))
            {
              /* Yes, we have to size again */
-             mswindows_size_frame_internal ( frame, 
-                                             FRAME_MSWINDOWS_TARGET_RECT 
+             mswindows_size_frame_internal ( frame,
+                                             FRAME_MSWINDOWS_TARGET_RECT
                                              (frame));
              /* Reset so we do not get here again. The SetWindowPos call in
               * mswindows_size_frame_internal can cause recursion here. */
@@ -2073,7 +2073,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
              if (!msframe->sizing && !FRAME_VISIBLE_P (frame))
                mswindows_enqueue_magic_event (hwnd, XM_MAPFRAME);
              FRAME_VISIBLE_P (frame) = 1;
-             
+
              if (!msframe->sizing || mswindows_dynamic_frame_resize)
                redisplay ();
            }
@@ -2164,7 +2164,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          SendMessage (hwndScrollBar, WM_CANCELMODE, 0, 0);
        }
       UNGCPRO;
-      break;     
+      break;
     }
 
   case WM_MOUSEWHEEL:
@@ -2181,7 +2181,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
        }
       else
        goto defproc;
-      break;     
+      break;
     }
 #endif
 
@@ -2255,7 +2255,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          Lisp_Object image_instance;
          VOID_TO_LISP (image_instance, ii);
          if (IMAGE_INSTANCEP (image_instance)
-             && 
+             &&
              IMAGE_INSTANCE_TYPE_P (image_instance, IMAGE_WIDGET)
              &&
              !NILP (XIMAGE_INSTANCE_WIDGET_FACE (image_instance)))
@@ -2266,27 +2266,27 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                {
                  if (widget_brush)
                    DeleteObject (widget_brush);
-                 widget_brush = CreateSolidBrush 
-                   (COLOR_INSTANCE_MSWINDOWS_COLOR 
-                    (XCOLOR_INSTANCE 
-                     (FACE_BACKGROUND 
+                 widget_brush = CreateSolidBrush
+                   (COLOR_INSTANCE_MSWINDOWS_COLOR
+                    (XCOLOR_INSTANCE
+                     (FACE_BACKGROUND
                       (XIMAGE_INSTANCE_WIDGET_FACE (image_instance),
                        XIMAGE_INSTANCE_SUBWINDOW_FRAME (image_instance)))));
                }
              last_widget_brushed = ii;
              SetTextColor
                (hdc,
-                COLOR_INSTANCE_MSWINDOWS_COLOR 
-                (XCOLOR_INSTANCE 
-                 (FACE_FOREGROUND 
+                COLOR_INSTANCE_MSWINDOWS_COLOR
+                (XCOLOR_INSTANCE
+                 (FACE_FOREGROUND
                   (XIMAGE_INSTANCE_WIDGET_FACE (image_instance),
                    XIMAGE_INSTANCE_SUBWINDOW_FRAME (image_instance)))));
              SetBkMode (hdc, OPAQUE);
              SetBkColor
                (hdc,
-                COLOR_INSTANCE_MSWINDOWS_COLOR 
-                (XCOLOR_INSTANCE 
-                 (FACE_BACKGROUND 
+                COLOR_INSTANCE_MSWINDOWS_COLOR
+                (XCOLOR_INSTANCE
+                 (FACE_BACKGROUND
                   (XIMAGE_INSTANCE_WIDGET_FACE (image_instance),
                    XIMAGE_INSTANCE_SUBWINDOW_FRAME (image_instance)))));
              return (LRESULT)widget_brush;
@@ -2667,7 +2667,7 @@ emacs_mswindows_handle_magic_event (struct Lisp_Event *emacs_event)
     {
     case XM_BUMPQUEUE:
       break;
-    
+
     case WM_SETFOCUS:
     case WM_KILLFOCUS:
       {
@@ -2695,13 +2695,13 @@ emacs_mswindows_handle_magic_event (struct Lisp_Event *emacs_event)
     case XM_UNMAPFRAME:
       {
        Lisp_Object frame = EVENT_CHANNEL (emacs_event);
-       va_run_hook_with_args (EVENT_MSWINDOWS_MAGIC_TYPE(emacs_event) 
+       va_run_hook_with_args (EVENT_MSWINDOWS_MAGIC_TYPE(emacs_event)
                               == XM_MAPFRAME ?
-                              Qmap_frame_hook : Qunmap_frame_hook, 
+                              Qmap_frame_hook : Qunmap_frame_hook,
                               1, frame);
       }
       break;
-                           
+
       /* #### What about Enter & Leave */
 #if 0
       va_run_hook_with_args (in_p ? Qmouse_enter_frame_hook :
@@ -2969,9 +2969,9 @@ reinit_vars_of_event_mswindows (void)
   mswindows_event_stream->select_console_cb    = emacs_mswindows_select_console;
   mswindows_event_stream->unselect_console_cb  = emacs_mswindows_unselect_console;
 #ifdef HAVE_MSG_SELECT
-  mswindows_event_stream->select_process_cb    = 
+  mswindows_event_stream->select_process_cb    =
     (void (*)(struct Lisp_Process*))event_stream_unixoid_select_process;
-  mswindows_event_stream->unselect_process_cb  = 
+  mswindows_event_stream->unselect_process_cb  =
     (void (*)(struct Lisp_Process*))event_stream_unixoid_unselect_process;
   mswindows_event_stream->create_stream_pair_cb = event_stream_unixoid_create_stream_pair;
   mswindows_event_stream->delete_stream_pair_cb = event_stream_unixoid_delete_stream_pair;
index b9fefe2..81f5f02 100644 (file)
@@ -4839,9 +4839,7 @@ dribble_out_event (Lisp_Object event)
        {
          Emchar ch = XCHAR (keysym);
          Bufbyte str[MAX_EMCHAR_LEN];
-         Bytecount len;
-
-         len = set_charptr_emchar (str, ch);
+         Bytecount len = set_charptr_emchar (str, ch);
          Lstream_write (XLSTREAM (Vdribble_file), str, len);
        }
       else if (string_char_length (XSYMBOL (keysym)->name) == 1)
index d613f62..9033ebf 100644 (file)
@@ -41,10 +41,6 @@ Boston, MA 02111-1307, USA.  */
 #include "sysproc.h"           /* select stuff */
 #include "systime.h"
 
-#ifdef HAVE_GPM
-#include "gpmevent.h"
-#endif
-
 /* Mask of bits indicating the descriptors that we wait for input on.
    These work as follows:
 
@@ -84,12 +80,6 @@ read_event_from_tty_or_stream_desc (struct Lisp_Event *event,
 
   XSETCONSOLE (console, con);
 
-#ifdef HAVE_GPM
-  if (fd == CONSOLE_TTY_MOUSE_FD (con)) {
-    return handle_gpm_read (event,con,fd);
-  }
-#endif
-
   nread = read (fd, &ch, 1);
   if (nread <= 0)
     {
index c6e9ae0..2bf225e 100644 (file)
@@ -294,7 +294,7 @@ static const struct struct_description ccs_description = {
   sizeof(charset_conversion_spec),
   ccs_description_1
 };
-  
+
 static const struct lrecord_description ccsd_description_1[] = {
   XD_DYNARR_DESC(charset_conversion_spec_dynarr, &ccs_description),
   { XD_END }
@@ -1053,7 +1053,7 @@ Define symbol ALIAS as an alias for coding system CODING-SYSTEM.
       FROB (CR,   "-mac");
 #undef FROB
     }
-  /* FSF return value is a vector of [ALIAS-unix ALIAS-doc ALIAS-mac],
+  /* FSF return value is a vector of [ALIAS-unix ALIAS-dos ALIAS-mac],
      but it doesn't look intentional, so I'd rather return something
      meaningful or nothing at all. */
   return Qnil;
@@ -1491,21 +1491,19 @@ detect_eol_type (struct detection_state *st, CONST unsigned char *src,
   while (n--)
     {
       c = *src++;
-      if (c == '\r')
-       st->eol.just_saw_cr = 1;
-      else
+      if (c == '\n')
        {
-         if (c == '\n')
-           {
-             if (st->eol.just_saw_cr)
-               return EOL_CRLF;
-             else if (st->eol.seen_anything)
-               return EOL_LF;
-           }
-         else if (st->eol.just_saw_cr)
-           return EOL_CR;
-         st->eol.just_saw_cr = 0;
+         if (st->eol.just_saw_cr)
+           return EOL_CRLF;
+         else if (st->eol.seen_anything)
+           return EOL_LF;
        }
+      else if (st->eol.just_saw_cr)
+       return EOL_CR;
+      else if (c == '\r')
+       st->eol.just_saw_cr = 1;
+      else
+       st->eol.just_saw_cr = 0;
       st->eol.seen_anything = 1;
     }
 
@@ -1530,7 +1528,7 @@ detect_eol_type (struct detection_state *st, CONST unsigned char *src,
 */
 
 static int
-detect_coding_type (struct detection_state *st, CONST unsigned char *src,
+detect_coding_type (struct detection_state *st, CONST Extbyte *src,
                    unsigned int n, int just_do_eol)
 {
   int c;
@@ -1635,13 +1633,15 @@ coding_system_from_mask (int mask)
 
 /* Given a seekable read stream and potential coding system and EOL type
    as specified, do any autodetection that is called for.  If the
-   coding system and/or EOL type are not autodetect, they will be left
+   coding system and/or EOL type are not `autodetect', they will be left
    alone; but this function will never return an autodetect coding system
    or EOL type.
 
    This function does not automatically fetch subsidiary coding systems;
    that should be unnecessary with the explicit eol-type argument. */
 
+#define LENGTH(string_constant) (sizeof (string_constant) - 1)
+
 void
 determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out,
                              enum eol_type *eol_type_in_out)
@@ -1656,68 +1656,110 @@ determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out,
   decst.mask = ~0;
 
   /* If autodetection is called for, do it now. */
-  if (XCODING_SYSTEM_TYPE (*codesys_in_out) == CODESYS_AUTODETECT ||
-      *eol_type_in_out == EOL_AUTODETECT)
+  if (XCODING_SYSTEM_TYPE (*codesys_in_out) == CODESYS_AUTODETECT
+      || *eol_type_in_out == EOL_AUTODETECT)
     {
-      unsigned char random_buffer[4096];
-      int nread;
+      Extbyte buf[4096];
       Lisp_Object coding_system = Qnil;
-
-      nread = Lstream_read (stream, random_buffer, sizeof (random_buffer));
-      if (nread)
-       {
-         unsigned char *cp = random_buffer;
-
-         while (cp < random_buffer + nread)
-           {
-             if ((*cp++ == 'c') && (cp < random_buffer + nread) &&
-                 (*cp++ == 'o') && (cp < random_buffer + nread) &&
-                 (*cp++ == 'd') && (cp < random_buffer + nread) &&
-                 (*cp++ == 'i') && (cp < random_buffer + nread) &&
-                 (*cp++ == 'n') && (cp < random_buffer + nread) &&
-                 (*cp++ == 'g') && (cp < random_buffer + nread) &&
-                 (*cp++ == ':') && (cp < random_buffer + nread))
+      Extbyte *p;
+      ssize_t nread = Lstream_read (stream, buf, sizeof (buf));
+      Extbyte *scan_end;
+
+      /* Look for initial "-*-"; mode line prefix */
+      for (p = buf,
+            scan_end = buf + nread - LENGTH ("-*-coding:?-*-");
+          p <= scan_end
+            && *p != '\n'
+            && *p != '\r';
+          p++)
+       if (*p == '-' && *(p+1) == '*' && *(p+2) == '-')
+         {
+           Extbyte *local_vars_beg = p + 3;
+           /* Look for final "-*-"; mode line suffix */
+           for (p = local_vars_beg,
+                  scan_end = buf + nread - LENGTH ("-*-");
+                p <= scan_end
+                  && *p != '\n'
+                  && *p != '\r';
+                p++)
+             if (*p == '-' && *(p+1) == '*' && *(p+2) == '-')
                {
-                 unsigned char coding_system_name[4096 - 6];
-                 unsigned char *np = coding_system_name;
-
-                 while ( (cp < random_buffer + nread)
-                         && ((*cp == ' ') || (*cp == '\t')) )
-                   {
-                     cp++;
-                   }
-                 while ( (cp < random_buffer + nread) &&
-                         (*cp != ' ') && (*cp != '\t') && (*cp != ';') )
-                   {
-                     *np++ = *cp++;
-                   }
-                 *np = 0;
-                 coding_system
-                   = Ffind_coding_system (intern ((char *) coding_system_name));
+                 Extbyte *suffix = p;
+                 /* Look for "coding:" */
+                 for (p = local_vars_beg,
+                        scan_end = suffix - LENGTH ("coding:?");
+                      p <= scan_end;
+                      p++)
+                   if (memcmp ("coding:", p, LENGTH ("coding:")) == 0
+                       && (p == local_vars_beg
+                           || (*(p-1) == ' '  ||
+                               *(p-1) == '\t' ||
+                               *(p-1) == ';')))
+                     {
+                       Extbyte save;
+                       int n;
+                       p += LENGTH ("coding:");
+                       while (*p == ' ' || *p == '\t') p++;
+
+                       /* Get coding system name */
+                       save = *suffix; *suffix = '\0';
+                       /* Characters valid in a MIME charset name (rfc 1521),
+                          and in a Lisp symbol name. */
+                       n = strspn ( (char *) p,
+                                   "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                                   "abcdefghijklmnopqrstuvwxyz"
+                                   "0123456789"
+                                   "!$%&*+-.^_{|}~");
+                       *suffix = save;
+                       if (n > 0)
+                         {
+                           save = p[n]; p[n] = '\0';
+                           coding_system =
+                             Ffind_coding_system (intern ((char *) p));
+                           p[n] = save;
+                         }
+                       break;
+                     }
                  break;
                }
-           }
-         if (EQ(coding_system, Qnil))
-           do{
-             if (detect_coding_type (&decst, random_buffer, nread,
-                                     XCODING_SYSTEM_TYPE (*codesys_in_out)
-                                     != CODESYS_AUTODETECT))
-               break;
-             nread = Lstream_read (stream,
-                                   random_buffer, sizeof (random_buffer));
-             if (!nread)
-               break;
-           } while(1);
-       }
+           break;
+         }
+
+      if (NILP (coding_system))
+       do
+         {
+           if (detect_coding_type (&decst, buf, nread,
+                                   XCODING_SYSTEM_TYPE (*codesys_in_out)
+                                   != CODESYS_AUTODETECT))
+             break;
+           nread = Lstream_read (stream, buf, sizeof (buf));
+           if (nread == 0)
+             break;
+         }
+       while (1);
+
+      else if (XCODING_SYSTEM_TYPE (*codesys_in_out) == CODESYS_AUTODETECT
+              && XCODING_SYSTEM_EOL_TYPE (coding_system) == EOL_AUTODETECT)
+       do
+         {
+           if (detect_coding_type (&decst, buf, nread, 1))
+             break;
+           nread = Lstream_read (stream, buf, sizeof (buf));
+           if (!nread)
+             break;
+         }
+       while (1);
+
       *eol_type_in_out = decst.eol_type;
       if (XCODING_SYSTEM_TYPE (*codesys_in_out) == CODESYS_AUTODETECT)
        {
-         if (EQ(coding_system, Qnil))
+         if (NILP (coding_system))
            *codesys_in_out = coding_system_from_mask (decst.mask);
          else
            *codesys_in_out = coding_system;
        }
     }
+
   /* If we absolutely can't determine the EOL type, just assume LF. */
   if (*eol_type_in_out == EOL_AUTODETECT)
     *eol_type_in_out = EOL_LF;
@@ -1754,7 +1796,7 @@ type.  Optional arg BUFFER defaults to the current buffer.
   while (1)
     {
       unsigned char random_buffer[4096];
-      int nread = Lstream_read (istr, random_buffer, sizeof (random_buffer));
+      ssize_t nread = Lstream_read (istr, random_buffer, sizeof (random_buffer));
 
       if (!nread)
        break;
@@ -1921,8 +1963,10 @@ struct decoding_stream
   struct detection_state decst;
 };
 
-static int decoding_reader     (Lstream *stream,       unsigned char *data, size_t size);
-static int decoding_writer     (Lstream *stream, CONST unsigned char *data, size_t size);
+static ssize_t decoding_reader (Lstream *stream,
+                               unsigned char *data, size_t size);
+static ssize_t decoding_writer (Lstream *stream,
+                               CONST unsigned char *data, size_t size);
 static int decoding_rewinder   (Lstream *stream);
 static int decoding_seekable_p (Lstream *stream);
 static int decoding_flusher    (Lstream *stream);
@@ -1954,12 +1998,12 @@ decoding_marker (Lisp_Object stream)
 /* Read SIZE bytes of data and store it into DATA.  We are a decoding stream
    so we read data from the other end, decode it, and store it into DATA. */
 
-static int
+static ssize_t
 decoding_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   struct decoding_stream *str = DECODING_STREAM_DATA (stream);
   unsigned char *orig_data = data;
-  int read_size;
+  ssize_t read_size;
   int error_occurred = 0;
 
   /* We need to interface to mule_decode(), which expects to take some
@@ -2016,11 +2060,11 @@ decoding_reader (Lstream *stream, unsigned char *data, size_t size)
     return data - orig_data;
 }
 
-static int
+static ssize_t
 decoding_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct decoding_stream *str = DECODING_STREAM_DATA (stream);
-  int retval;
+  ssize_t retval;
 
   /* Decode all our data into the runoff, and then attempt to write
      it all out to the other end.  Remove whatever chunk we succeeded
@@ -2290,7 +2334,7 @@ BUFFER defaults to the current buffer if unspecified.
       char tempbuf[1024]; /* some random amount */
       Bufpos newpos, even_newer_pos;
       Bufpos oldpos = lisp_buffer_stream_startpos (istr);
-      int size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
+      ssize_t size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
 
       if (!size_in_bytes)
        break;
@@ -2375,9 +2419,9 @@ struct encoding_stream
 #endif /* MULE */
 };
 
-static int encoding_reader (Lstream *stream, unsigned char *data, size_t size);
-static int encoding_writer (Lstream *stream, CONST unsigned char *data,
-                           size_t size);
+static ssize_t encoding_reader (Lstream *stream, unsigned char *data, size_t size);
+static ssize_t encoding_writer (Lstream *stream, CONST unsigned char *data,
+                               size_t size);
 static int encoding_rewinder   (Lstream *stream);
 static int encoding_seekable_p (Lstream *stream);
 static int encoding_flusher    (Lstream *stream);
@@ -2409,12 +2453,12 @@ encoding_marker (Lisp_Object stream)
 /* Read SIZE bytes of data and store it into DATA.  We are a encoding stream
    so we read data from the other end, encode it, and store it into DATA. */
 
-static int
+static ssize_t
 encoding_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   struct encoding_stream *str = ENCODING_STREAM_DATA (stream);
   unsigned char *orig_data = data;
-  int read_size;
+  ssize_t read_size;
   int error_occurred = 0;
 
   /* We need to interface to mule_encode(), which expects to take some
@@ -2471,11 +2515,11 @@ encoding_reader (Lstream *stream, unsigned char *data, size_t size)
     return data - orig_data;
 }
 
-static int
+static ssize_t
 encoding_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct encoding_stream *str = ENCODING_STREAM_DATA (stream);
-  int retval;
+  ssize_t retval;
 
   /* Encode all our data into the runoff, and then attempt to write
      it all out to the other end.  Remove whatever chunk we succeeded
@@ -2698,7 +2742,7 @@ text.  BUFFER defaults to the current buffer if unspecified.
       char tempbuf[1024]; /* some random amount */
       Bufpos newpos, even_newer_pos;
       Bufpos oldpos = lisp_buffer_stream_startpos (istr);
-      int size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
+      ssize_t size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
 
       if (!size_in_bytes)
        break;
@@ -3758,7 +3802,7 @@ encode_coding_utf8 (Lstream *encoding, CONST unsigned char *src,
 
  back_to_square_n:
 #endif /* ENABLE_COMPOSITE_CHARS */
-  
+
   while (n--)
     {
       unsigned char c = *src++;
@@ -5443,7 +5487,7 @@ convert_to_external_format (CONST Bufbyte *ptr,
       GCPRO3 (instream, outstream, da_outstream);
       while (1)
         {
-          int size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
+          ssize_t size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
           if (!size_in_bytes)
             break;
           Lstream_write (ostr, tempbuf, size_in_bytes);
@@ -5500,7 +5544,7 @@ convert_from_external_format (CONST Extbyte *ptr,
       GCPRO3 (instream, outstream, da_outstream);
       while (1)
         {
-          int size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
+          ssize_t size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
           if (!size_in_bytes)
             break;
           Lstream_write (ostr, tempbuf, size_in_bytes);
index a44dd4c..514c058 100644 (file)
@@ -280,18 +280,16 @@ restore_point_unwind (Lisp_Object point_marker)
    signal handler) because that's way too losing.
 
    (#### Actually, longjmp()ing out of the signal handler may not be
-   as losing as I thought.  See sys_do_signal() in sysdep.c.)
+   as losing as I thought.  See sys_do_signal() in sysdep.c.) */
 
-   Solaris include files declare the return value as ssize_t.
-   Is that standard? */
-int
+ssize_t
 read_allowing_quit (int fildes, void *buf, size_t size)
 {
   QUIT;
   return sys_read_1 (fildes, buf, size, 1);
 }
 
-int
+ssize_t
 write_allowing_quit (int fildes, CONST void *buf, size_t size)
 {
   QUIT;
@@ -1020,9 +1018,9 @@ See also the function `substitute-in-file-name'.
          if ((user = user_login_name (NULL)) != NULL)
            {
              /* Does the user login name match the ~name? */
-             if (strcmp(user,((char *) o + 1)) == 0)
+             if (strcmp (user, (char *) o + 1) == 0)
                {
-                 newdir = (Bufbyte *)  get_home_directory();
+                 newdir = (Bufbyte *) get_home_directory();
                  nm = p;
                }
            }
@@ -2982,7 +2980,7 @@ positions), even in Mule. (Fixing this is very difficult.)
        occurs inside of the filedesc stream. */
     while (1)
       {
-       Bytecount this_len;
+       ssize_t this_len;
        Charcount cc_inserted;
 
        QUIT;
index a079f8a..6815605 100644 (file)
@@ -33,10 +33,6 @@ Boston, MA 02111-1307, USA.  */
 
 #include "events.h"
 
-#ifdef HAVE_GPM
-#include <gpm.h>
-#endif
-
 \f
 /* Default properties to use when creating frames.  */
 Lisp_Object Vdefault_tty_frame_plist;
@@ -86,33 +82,6 @@ tty_after_init_frame (struct frame *f, int first_on_device,
     call1 (Qinit_post_tty_win, FRAME_CONSOLE (f));
 }
 
-#ifdef HAVE_GPM
-static int
-tty_get_mouse_position (struct device *d, Lisp_Object *frame, int *x, int *y)
-{
-  Gpm_Event ev;
-  int num_buttons;
-
-  num_buttons = Gpm_GetSnapshot(&ev);
-  *x = ev.x;
-  *y = ev.y;
-  *frame = DEVICE_SELECTED_FRAME (d);
-  return (1);
-}
-
-static void
-tty_set_mouse_position (struct window *w, int x, int y)
-{
-  /* XXX
-     I couldn't find any GPM functions that set the mouse position.
-     Mr. Perry had left this function empty; that must be why.
-     karlheg
-  */
-}
-
-#endif
-
-
 /* Change from withdrawn state to mapped state. */
 static void
 tty_make_frame_visible (struct frame *f)
@@ -223,10 +192,6 @@ console_type_create_frame_tty (void)
   CONSOLE_HAS_METHOD (tty, init_frame_1);
   CONSOLE_HAS_METHOD (tty, init_frame_3);
   CONSOLE_HAS_METHOD (tty, after_init_frame);
-#ifdef HAVE_GPM
-  CONSOLE_HAS_METHOD (tty, get_mouse_position);
-  CONSOLE_HAS_METHOD (tty, set_mouse_position);
-#endif
   CONSOLE_HAS_METHOD (tty, make_frame_visible);
   CONSOLE_HAS_METHOD (tty, make_frame_invisible);
   CONSOLE_HAS_METHOD (tty, frame_visible_p);
index 2bf2c3f..98de5bb 100644 (file)
@@ -532,7 +532,7 @@ getloadavg (double loadavg[], int nelem)
    privileges to use it.
 
    Initial implementation courtesy Zlatko Calusic <zcalusic@carnet.hr>.
-   Integrated to XEmacs by Hrvoje Niksic <hniksic@srce.hr>.
+   Integrated to XEmacs by Hrvoje Niksic <hniksic@xemacs.org>.
    Additional cleanup by Hrvoje Niksic, based on code published by
    Casper Dik <Casper.Dik@Holland.Sun.Com>.  */
   kstat_ctl_t *kc;
index c326e75..301da9b 100644 (file)
@@ -678,7 +678,7 @@ write_lisp_string_to_temp_file (Lisp_Object string, char *filename_out)
   /* Get the data while doing the conversion */
   while (1)
     {
-      int size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
+      ssize_t size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
       if (!size_in_bytes)
        break;
       /* It does seem the flushes are necessary... */
index 77f3738..2d37ea1 100644 (file)
@@ -1,4 +1,27 @@
-/* William Perry 1997 */
+/* GPM functions
+   Copyright (C) 1997 William M. Perry <wmperry@gnu.org>
+   Copyright (C) 1999 Free Software Foundation, Inc.
+
+This file is part of XEmacs.
+
+XEmacs is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with XEmacs; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Synched up with: Not in FSF. */
+
+/* Authors: William Perry */
 
 #include <config.h>
 #include "lisp.h"
@@ -8,6 +31,10 @@
 #include "events.h"
 #include "events-mod.h"
 #include "sysdep.h"
+#include "commands.h"
+#include "lstream.h"
+#include "sysproc.h" /* for MAXDESC */
+#include "process.h"
 
 #ifdef HAVE_GPM
 #include "gpmevent.h"
 #include <linux/keyboard.h>
 #endif
 
-int
-handle_gpm_read (struct Lisp_Event *event, struct console *con, int fd)
-{
-  Gpm_Event ev;
-  int modifiers = 0;
-  int type = -1;
-  int button = 1;
-
-  if (!Gpm_GetEvent(&ev))
-    return 0;
-
-  event->timestamp = 0;
-  event->channel   = CONSOLE_SELECTED_FRAME (con);
-
-  /* Whow, wouldn't named defines be NICE!?!?! */
-  modifiers = 0;
-
-  if (ev.modifiers & 1)   modifiers |= MOD_SHIFT;
-  if (ev.modifiers & 2)   modifiers |= MOD_META;
-  if (ev.modifiers & 4)   modifiers |= MOD_CONTROL;
-  if (ev.modifiers & 8)   modifiers |= MOD_META;
-
-  if (ev.type & GPM_DOWN)
-    type = GPM_DOWN;
-  else if (ev.type & GPM_UP)
-    type = GPM_UP;
-  else if (ev.type & GPM_MOVE) {
-    type = GPM_MOVE;
-    GPM_DRAWPOINTER(&ev);
-  }
-
-  if (ev.buttons & GPM_B_LEFT)
-    button = 1;
-  else if (ev.buttons & GPM_B_MIDDLE)
-    button = 2;
-  else if (ev.buttons & GPM_B_RIGHT)
-    button = 3;
-
-  switch (type) {
-  case GPM_DOWN:
-  case GPM_UP:
-    event->event_type =
-      type == GPM_DOWN ? button_press_event : button_release_event;
-    event->event.button.x         = ev.x;
-    event->event.button.y         = ev.y;
-    event->event.button.button    = button;
-    event->event.button.modifiers = modifiers;
-    break;
-  case GPM_MOVE:
-    event->event_type             = pointer_motion_event;
-    event->event.motion.x         = ev.x;
-    event->event.motion.y         = ev.y;
-    event->event.motion.modifiers = modifiers;
-  default:
-    return 0;
-  }
-  return 1;
-}
-
-void
-connect_to_gpm (struct console *con)
-{
-  /* Only do this if we are running after dumping and really interactive */
-  if (!noninteractive && initialized) {
-    /* We really only want to do this on a TTY */
-    CONSOLE_TTY_MOUSE_FD (con) = -1;
-    if (EQ (CONSOLE_TYPE (con), Qtty)) {
-      Gpm_Connect conn;
-      int rval;
-
-      conn.eventMask = GPM_DOWN|GPM_UP|GPM_MOVE;
-      conn.defaultMask = GPM_MOVE;
-      conn.minMod = 0;
-      conn.maxMod = ((1<<KG_SHIFT)|(1<<KG_ALT)|(1<<KG_CTRL));
-
-      rval = Gpm_Open (&conn, 0);
-      switch (rval) {
-      case -1: /* General failure */
-       break;
-      case -2: /* We are running under an XTerm */
+extern int gpm_tried;
+extern void *gpm_stack;
+
+static int (*orig_event_pending_p) (int);
+static void (*orig_next_event_cb) (struct Lisp_Event *);
+
+static Lisp_Object gpm_event_queue;
+static Lisp_Object gpm_event_queue_tail;
+
+struct __gpm_state {
+       int gpm_tried;
+       int gpm_flag;
+       void *gpm_stack;
+};
+
+static struct __gpm_state gpm_state_information[MAXDESC];
+
+static void
+store_gpm_state (int fd)
+{
+       gpm_state_information[fd].gpm_tried = gpm_tried;
+       gpm_state_information[fd].gpm_flag = gpm_flag;
+       gpm_state_information[fd].gpm_stack = gpm_stack;
+}
+
+static void
+restore_gpm_state (int fd)
+{
+       gpm_tried = gpm_state_information[fd].gpm_tried;
+       gpm_flag = gpm_state_information[fd].gpm_flag;
+       gpm_stack = gpm_state_information[fd].gpm_stack;
+       gpm_consolefd = gpm_fd = fd;
+}
+
+static void
+clear_gpm_state (int fd)
+{
+       if (fd >= 0)
+       {
+               memset(&gpm_state_information[fd], '\0', sizeof(struct __gpm_state));
+       }
+       gpm_tried = gpm_flag = 1;
+       gpm_fd = gpm_consolefd = -1;
+       gpm_stack = NULL;
+}
+
+static int
+get_process_infd (struct Lisp_Process *p)
+{
+  Lisp_Object instr, outstr;
+  get_process_streams (p, &instr, &outstr);
+  assert (!NILP (instr));
+  return filedesc_stream_fd (XLSTREAM (instr));
+}
+
+DEFUN ("receive-gpm-event", Freceive_gpm_event, 0, 2, 0, /*
+Run GPM_GetEvent().
+This function is the process handler for the GPM connection.
+*/
+       (process, string))
+{
+       Gpm_Event ev;
+       int modifiers = 0;
+       int button = 1;
+       Lisp_Object fake_event;
+       struct Lisp_Event *event = NULL;
+       struct gcpro gcpro1;
+       static int num_events;
+
+       CHECK_PROCESS (process);
+
+       restore_gpm_state (get_process_infd (XPROCESS (process)));
+
+       if (!Gpm_GetEvent(&ev))
+       {
+               warn_when_safe (Qnil, Qcritical, "Gpm_GetEvent failed - %d", gpm_fd);
+               return(Qzero);
+       }
+
+       GCPRO1(fake_event);
+
+       num_events++;
+
+       fake_event = Fmake_event (Qnil, Qnil);
+       event = XEVENT(fake_event);
+
+       event->timestamp = 0;
+       event->channel   = Fselected_frame (Qnil); /* CONSOLE_SELECTED_FRAME (con); */
+
+       /* Whow, wouldn't named defines be NICE!?!?! */
+       modifiers = 0;
+
+       if (ev.modifiers & 1)   modifiers |= MOD_SHIFT;
+       if (ev.modifiers & 2)   modifiers |= MOD_META;
+       if (ev.modifiers & 4)   modifiers |= MOD_CONTROL;
+       if (ev.modifiers & 8)   modifiers |= MOD_META;
+
+       if (ev.buttons & GPM_B_LEFT)
+       {
+               button = 1;
+       }
+       else if (ev.buttons & GPM_B_MIDDLE)
+       {
+               button = 2;
+       }
+       else if (ev.buttons & GPM_B_RIGHT)
+       {
+               button = 3;
+       }
+
+       switch (GPM_BARE_EVENTS(ev.type)) {
+       case GPM_DOWN:
+       case GPM_UP:
+               event->event_type =
+                       (ev.type & GPM_DOWN) ? button_press_event : button_release_event;
+               event->event.button.x         = ev.x;
+               event->event.button.y         = ev.y;
+               event->event.button.button    = button;
+               event->event.button.modifiers = modifiers;
+               break;
+       case GPM_MOVE:
+       case GPM_DRAG:
+               event->event_type             = pointer_motion_event;
+               event->event.motion.x         = ev.x;
+               event->event.motion.y         = ev.y;
+               event->event.motion.modifiers = modifiers;
+       default:
+               /* This will never happen */
+               break;
+       }
+
+       /* Handle the event */
+       enqueue_event (fake_event, &gpm_event_queue, &gpm_event_queue_tail);
+
+       UNGCPRO;
+
+       return (Qzero);
+}
+
+static void turn_off_gpm (char *process_name)
+{
+       Lisp_Object process = Fget_process (build_string (process_name));
+       int fd = -1;
+
+       if (NILP (process))
+       {
+               /* Something happened to our GPM process - fail silently */
+               return;
+       }
+
+       fd = get_process_infd (XPROCESS (process));
+
+       restore_gpm_state (fd);
+
        Gpm_Close();
-       break;
-      default:
-       set_descriptor_non_blocking (gpm_fd);
-       CONSOLE_TTY_MOUSE_FD (con) = gpm_fd;
-      }
-    }
-  }
+
+       clear_gpm_state (fd);
+
+       Fdelete_process (build_string (process_name));
+}
+
+#ifdef TIOCLINUX
+static Lisp_Object
+tty_get_foreign_selection (Lisp_Object selection_symbol, Lisp_Object target_type)
+{
+       /* This function can GC */
+       struct device *d = decode_device (Qnil);
+       int fd = DEVICE_INFD (d);
+       char c = 3;
+       Lisp_Object output_stream;
+       Lisp_Object terminal_stream;
+       Lisp_Object output_string;
+       struct gcpro gcpro1,gcpro2,gcpro3;
+
+       GCPRO3(output_stream,terminal_stream,output_string);
+
+       /* The ioctl() to paste actually puts things in the input queue of
+       ** the virtual console, so we need to trap that data, since we are
+       ** supposed to return the actual string selection from this
+       ** function.
+       */
+
+       /* I really hate doing this, but it doesn't seem to cause any
+       ** problems, and it makes the Lstream_read stuff further down
+       ** error out correctly instead of trying to indefinitely read from
+       ** the console.
+       **
+       ** There is no set_descriptor_blocking() function call, but in my
+       ** testing under linux, it has not proved fatal to leave the
+       ** descriptor in non-blocking mode.
+       **
+       ** William Perry Nov 5, 1999
+       */
+       set_descriptor_non_blocking (fd);
+
+       /* We need two streams, one for reading from the selected device,
+       ** and one to write the data into.  There is no writable version
+       ** of the lisp-string lstream, so we make do with a resizing
+       ** buffer stream, and make a string out of it after we are
+       ** done.
+       */
+       output_stream = make_resizing_buffer_output_stream ();
+       terminal_stream = make_filedesc_input_stream (fd, 0, -1, LSTR_BLOCKED_OK);
+       output_string = Qnil;
+
+       /* #### We should arguably use a specbind() and an unwind routine here,
+       ** #### but I don't care that much right now.
+       */
+       if (NILP (output_stream) || NILP (terminal_stream))
+       {
+               /* Should we signal an error here? */
+               goto out;
+       }
+
+       if (ioctl (fd, TIOCLINUX, &c) < 0)
+       {
+               /* Could not get the selection - eek */
+               UNGCPRO;
+               return (Qnil);
+       }
+
+       while (1)
+       {
+               Bufbyte tempbuf[1024]; /* some random amount */
+               ssize_t i;
+               ssize_t size_in_bytes =
+                 Lstream_read (XLSTREAM (terminal_stream),
+                               tempbuf, sizeof (tempbuf));
+
+               if (size_in_bytes <= 0)
+               {
+                       /* end of the stream */
+                       break;
+               }
+
+               /* convert CR->LF */
+               for (i = 0; i < size_in_bytes; i++)
+               {
+                       if (tempbuf[i] == '\r')
+                       {
+                               tempbuf[i] = '\n';
+                       }
+               }
+
+               Lstream_write (XLSTREAM (output_stream), tempbuf, size_in_bytes);
+       }
+
+       Lstream_flush (XLSTREAM (output_stream));
+
+       output_string = make_string (resizing_buffer_stream_ptr (XLSTREAM (output_stream)),
+                                                                Lstream_byte_count (XLSTREAM (output_stream)));
+
+       Lstream_delete (XLSTREAM (output_stream));
+       Lstream_delete (XLSTREAM (terminal_stream));
+
+ out:
+       UNGCPRO;
+       return (output_string);
+}
+
+static Lisp_Object
+tty_selection_exists_p (Lisp_Object selection)
+{
+       return (Qt);
 }
+#endif /* TIOCLINUX */
+
+#if 0
+static Lisp_Object
+tty_own_selection (Lisp_Object selection_name, Lisp_Object selection_value)
+{
+       /* There is no way to do this cleanly - the GPM selection
+       ** 'protocol' (actually the TIOCLINUX ioctl) requires a start and
+       ** end position on the _screen_, not a string to stick in there.
+       ** Lame.
+       **
+       ** William Perry Nov 4, 1999
+       */
+}
+#endif
+
+/* This function appears to work once in a blue moon.  I'm not sure
+** exactly why either.  *sigh*
+**
+** William Perry Nov 4, 1999
+**
+** Apparently, this is the way (mouse-position) is supposed to work,
+** and I was just expecting something else.  (mouse-pixel-position)
+** works just fine.
+**
+** William Perry Nov 7, 1999
+*/
+static int
+tty_get_mouse_position (struct device *d, Lisp_Object *frame, int *x, int *y)
+{
+       Gpm_Event ev;
+       int num_buttons;
+
+       memset(&ev,'\0',sizeof(ev));
+
+       num_buttons = Gpm_GetSnapshot(&ev);
+
+       if (!num_buttons)
+       {
+               /* This means there are events pending... */
+
+               /* #### In theory, we should drain the events pending, stick
+               ** #### them in the queue, and return the mouse position
+               ** #### anyway.
+               */
+               return(-1);
+       }
+       *x = ev.x;
+       *y = ev.y;
+       *frame = DEVICE_SELECTED_FRAME (d);
+       return (1);
+}
+
+static void
+tty_set_mouse_position (struct window *w, int x, int y)
+{
+       /* 
+          #### I couldn't find any GPM functions that set the mouse position.
+          #### Mr. Perry had left this function empty; that must be why.
+          #### karlheg
+       */
+}
+
+static int gpm_event_pending_p (int user_p)
+{
+       Lisp_Object event;
+
+       EVENT_CHAIN_LOOP (event, gpm_event_queue)
+       {
+               if (!user_p || command_event_p (event))
+               {
+                       return (1);
+               }
+       }
+       return (orig_event_pending_p (user_p));
+}
+
+static void gpm_next_event_cb (struct Lisp_Event *event)
+{
+       /* #### It would be nice to preserve some sort of ordering of the
+       ** #### different types of events, but that would be quite a bit
+       ** #### of work, and would more than likely break the abstraction
+       ** #### between the other event loops and this one.
+       */
+          
+       if (!NILP (gpm_event_queue))
+       {
+               Lisp_Object queued_event = dequeue_event (&gpm_event_queue, &gpm_event_queue_tail);
+               *event = *(XEVENT (queued_event));
+
+               if (event->event_type == pointer_motion_event)
+               {
+                       struct device *d = decode_device (event->channel);
+                       int fd = DEVICE_INFD (d);
+
+                       /* Ok, now this is just freaky.  Bear with me though.
+                       **
+                       ** If you run gnuclient and attach to a XEmacs running in
+                       ** X or on another TTY, the mouse cursor does not get
+                       ** drawn correctly.  This is because the ioctl() fails
+                       ** with EPERM because the TTY specified is not our
+                       ** controlling terminal.  If you are the superuser, it
+                       ** will work just spiffy.  The appropriate source file (at
+                       ** least in linux 2.2.x) is
+                       ** .../linux/drivers/char/console.c in the function
+                       ** tioclinux().  The following bit of code is brutal to
+                       ** us:
+                       **
+                       ** if (current->tty != tty && !suser())
+                       **    return -EPERM;
+                       **
+                       ** I even tried setting us as a process leader, removing
+                       ** our controlling terminal, and then using the TIOCSCTTY
+                       ** to set up a new controlling terminal, all with no luck.
+                       **
+                       ** What is even weirder is if you run XEmacs in a VC, and
+                       ** attach to it from another VC with gnuclient, go back to
+                       ** the original VC and hit a key, the mouse pointer
+                       ** displays (in BOTH VCs), until you hit a key in the
+                       ** second VC, after which it does not display in EITHER
+                       ** VC.  Bizarre, no?
+                       **
+                       ** All I can say is thank god Linux comes with source code
+                       ** or I would have been completely confused.  Well, ok,
+                       ** I'm still completely confused.  I don't see why they
+                       ** don't just check the permissions on the device
+                       ** (actually, if you have enough access to it to get the
+                       ** console's file descriptor, you should be able to do
+                       ** with it as you wish, but maybe that is just me).
+                       **
+                       ** William M. Perry - Nov 9, 1999
+                       */
+
+                       Gpm_DrawPointer (event->event.motion.x,event->event.motion.y, fd);
+               }
+
+               return;
+       }
+
+       return (orig_next_event_cb (event));
+}
+
+static void hook_event_callbacks_once (void)
+{
+       static int hooker;
+
+       if (!hooker)
+       {
+               orig_event_pending_p = event_stream->event_pending_p;
+               orig_next_event_cb = event_stream->next_event_cb;
+               event_stream->event_pending_p = gpm_event_pending_p;
+               event_stream->next_event_cb = gpm_next_event_cb;
+               hooker = 1;
+       }
+}
+
+static void hook_console_methods_once (void)
+{
+       static int hooker;
 
+       if (!hooker)
+       {
+               /* Install the mouse position methods for the TTY console type */
+               CONSOLE_HAS_METHOD (tty, get_mouse_position);
+               CONSOLE_HAS_METHOD (tty, set_mouse_position);
+               CONSOLE_HAS_METHOD (tty, get_foreign_selection);
+               CONSOLE_HAS_METHOD (tty, selection_exists_p);
+#if 0
+               CONSOLE_HAS_METHOD (tty, own_selection);
 #endif
+       }
+}
+
+DEFUN ("gpm-enabled-p", Fgpm_enabled_p, 0, 1, 0, /*
+Return non-nil if GPM mouse support is currently enabled on DEVICE.
+*/
+          (device))
+{
+       char *console_name = ttyname (DEVICE_INFD (decode_device (device)));
+       char process_name[1024];
+       Lisp_Object proc;
+
+       if (!console_name)
+       {
+               return (Qnil);
+       }
+
+       memset (process_name, '\0', sizeof(process_name));
+       snprintf (process_name, sizeof(process_name) - 1, "gpm for %s", console_name);
+
+       proc = Fget_process (build_string (process_name));
+
+       if (NILP (proc))
+       {
+               return (Qnil);
+       }
+
+       if (1) /* (PROCESS_LIVE_P (proc)) */
+       {
+               return (Qt);
+       }
+       return (Qnil);
+}
+
+DEFUN ("gpm-enable", Fgpm_enable, 0, 2, 0, /*
+Toggle accepting of GPM mouse events.
+*/
+          (device, arg))
+{
+       Gpm_Connect conn;
+       int rval;
+       Lisp_Object gpm_process;
+       Lisp_Object gpm_filter;
+       struct device *d = decode_device (device);
+       int fd = DEVICE_INFD (d);
+       char *console_name = ttyname (fd);
+       char process_name[1024];
+
+       hook_event_callbacks_once ();
+       hook_console_methods_once ();
+
+       if (noninteractive)
+       {
+               error ("Can't connect to GPM in batch mode.");
+       }
+
+       if (!console_name)
+       {
+               /* Something seriously wrong here... */
+               return (Qnil);
+       }
+
+       memset (process_name, '\0', sizeof(process_name));
+       snprintf (process_name, sizeof(process_name) - 1, "gpm for %s", console_name);
+
+       if (NILP (arg))
+       {
+               turn_off_gpm (process_name);
+               return (Qnil);
+       }
+
+       /* DANGER DANGER.
+       ** Though shalt not call (gpm-enable t) after we have already
+       ** started, or stuff blows up.
+       */
+       if (!NILP (Fgpm_enabled_p (device)))
+       {
+               error ("GPM already enabled for this console.");
+       }
+
+       conn.eventMask = GPM_DOWN|GPM_UP|GPM_MOVE|GPM_DRAG;
+       conn.defaultMask = GPM_MOVE;
+       conn.minMod = 0;
+       conn.maxMod = ((1<<KG_SHIFT)|(1<<KG_ALT)|(1<<KG_CTRL));
+
+       /* Reset some silly static variables so that multiple Gpm_Open()
+       ** calls have even a sligh chance of working
+       */
+       gpm_tried = 0;
+       gpm_flag = 0;
+       gpm_stack = NULL;
+
+       /* Make sure Gpm_Open() does ioctl() on the correct
+       ** descriptor, or it can get the wrong terminal sizes, etc.
+       */
+       gpm_consolefd = fd;
+       
+       /* We have to pass the virtual console manually, otherwise if you
+       ** use 'gnuclient -nw' to connect to an XEmacs that is running in
+       ** X, Gpm_Open() tries to use ttyname(0 | 1 | 2) to find out which
+       ** console you are using, which is of course not correct for the
+       ** new tty device.
+       */
+       if (strncmp (console_name, "/dev/tty",8) || !isdigit (console_name[8]))
+       {
+               /* Urk, something really wrong */
+               return (Qnil);
+       }
+
+       rval = Gpm_Open (&conn, atoi(console_name + 8));
+
+       switch (rval) {
+       case -1: /* General failure */
+               break;
+       case -2: /* We are running under an XTerm */
+               Gpm_Close();
+               break;
+       default:
+               /* Is this really necessary? */
+               set_descriptor_non_blocking (gpm_fd);
+               store_gpm_state (gpm_fd);
+               gpm_process = connect_to_file_descriptor (build_string (process_name), Qnil,
+                                                                                                 make_int (gpm_fd),
+                                                                                                 make_int (gpm_fd));
+
+               if (!NILP (gpm_process))
+               {
+                       rval = 0;
+                       Fprocess_kill_without_query (gpm_process, Qnil);
+                       XSETSUBR (gpm_filter, &SFreceive_gpm_event);
+                       set_process_filter (gpm_process, gpm_filter, 1);
+
+                       /* Keep track of the device for later */
+                       /* Fput (gpm_process, intern ("gpm-device"), device); */
+               }
+               else
+               {
+                       Gpm_Close();
+                       rval = -1;
+               }
+       }
+
+       return(rval ? Qnil : Qt);
+}
+
+void vars_of_gpmevent (void)
+{
+       gpm_event_queue = Qnil;
+       gpm_event_queue_tail = Qnil;
+       staticpro (&gpm_event_queue);
+       staticpro (&gpm_event_queue_tail);
+       pdump_wire (&gpm_event_queue);
+       pdump_wire (&gpm_event_queue_tail);
+}
+
+void syms_of_gpmevent (void)
+{
+       DEFSUBR (Freceive_gpm_event);
+       DEFSUBR (Fgpm_enable);
+       DEFSUBR (Fgpm_enabled_p);
+}
+
+#endif /* HAVE_GPM */
index 4d3ccad..b52eae9 100644 (file)
@@ -27,6 +27,47 @@ Boston, MA 02111-1307, USA.  */
    and X11 R6 release guide chapters on internationalized input,
    for further details */
 
+/*
+  Policy:
+
+  The XIM is of the device, by the device, for the device.
+  The XIC is of each frame, by each frame, for each frame.
+  The exceptions are:
+      1.  Activate XICs on poor frames when the XIM is back.
+      2.  Deactivate all the XICs when the XIM go down.
+
+  Methods:
+
+    -  Register a callback for an XIM when the X device is being initialized.
+       XIM_init_device (d) { XRegisterIMInstantiateCallback (); }
+       The "XRegisterIMInstantiateCallback" is called when an XIM become
+       available on the X display.
+
+    -  Catch the XIC when the frame is being initialized if XIM was available.
+       XIM_init_frame (f) { ... XCreateIC (); ... }
+
+    -  Release the XIC when the frame is being closed.
+       XIM_delete_frame (f) { ... FRAME_X_XIC (f) = NULL; ... }
+       "XIM_delete_frame" is a "DestroyCallback" function declared in
+       XIM_init_frame ();
+
+    -  Release all the XICs when the XIM was down accidentally.
+       In IMDestroyCallback:
+           DEVICE_FRAME_LOOP (...) { FRAME_X_XIC (f) = NULL; }
+
+    -  Re-enable XIC for all the frames which doesn't have XIC when the XIM
+       is back.
+       In IMInstantiateCallback:
+           DEVICE_FRAME_LOOP (...) { XIM_init_frame (f); }
+
+
+  Note:
+
+    -  Currently, we don't use XDestroyIC because of _XimProtoCloseIM
+       (internally registered as im->methods->close) does "Xfree (ic)".
+
+ */
+
 #include <config.h>
 #include "lisp.h"
 #include <X11/Xlocale.h>        /* More portable than <locale.h> ? */
@@ -38,13 +79,20 @@ Boston, MA 02111-1307, USA.  */
 #include "EmacsFrame.h"
 #include "events.h"
 
+#ifdef THIS_IS_X11R6
 #include <X11/IntrinsicP.h>
 #include <X11/Xaw/XawImP.h>
+#endif
 
 #ifndef XIM_XLIB
 #error  XIM_XLIB is not defined??
 #endif
 
+Lisp_Object Qxim_xlib;
+#define xim_warn(str) warn_when_safe (Qxim_xlib, Qwarning, str);
+#define xim_warn1(fmt, str) warn_when_safe (Qxim_xlib, Qwarning, fmt, str);
+#define xim_info(str) warn_when_safe (Qxim_xlib, Qinfo, str);
+
 /* Get/Set IC values for just one attribute */
 #ifdef DEBUG_XEMACS
 #define XIC_Value(Get_Set, xic, name, attr, value)                     \
@@ -92,31 +140,31 @@ Initialize_Locale (void)
   /*XtSetLanguageProc (NULL, (XtLanguageProc) NULL, NULL);*/
   if ((locale = setlocale (LC_ALL, "")) == NULL)
     {
-      stderr_out ("Can't set locale.\n");
-      stderr_out ("Using C locale instead.\n");
+      xim_warn ("Can't set locale.\n"
+               "Using C locale instead.\n");
       putenv ("LANG=C");
       putenv ("LC_ALL=C");
       if ((locale = setlocale (LC_ALL, "C")) == NULL)
        {
-         stderr_out ("Can't even set locale to `C'!\n");
+         xim_warn ("Can't even set locale to `C'!\n");
          return;
        }
     }
 
   if (!XSupportsLocale ())
     {
-      stderr_out ("X Windows does not support locale `%s'\n", locale);
-      stderr_out ("Using C Locale instead\n");
+      xim_warn1 ("X Windows does not support locale `%s'\n"
+                "Using C Locale instead\n", locale);
       putenv ("LANG=C");
       putenv ("LC_ALL=C");
       if ((locale = setlocale (LC_ALL, "C")) == NULL)
        {
-         stderr_out ("Can't even set locale to `C'!\n");
+         xim_warn ("Can't even set locale to `C'!\n");
          return;
        }
       if (!XSupportsLocale ())
         {
-          stderr_out ("X Windows does not even support locale `C'!\n");
+          xim_warn ("X Windows does not even support locale `C'!\n");
           return;
         }
     }
@@ -125,55 +173,131 @@ Initialize_Locale (void)
 
   if (XSetLocaleModifiers ("") == NULL)
     {
-      stderr_out ("XSetLocaleModifiers(\"\") failed\n");
-      stderr_out ("Check the value of the XMODIFIERS environment variable.\n");
+      xim_warn ("XSetLocaleModifiers(\"\") failed\n"
+               "Check the value of the XMODIFIERS environment variable.\n");
     }
 }
 
-/******************************************************************/
-/*                     Input method using xlib                    */
-/******************************************************************/
-
-/*
- * called from when XIM is destroying
- */
+#ifdef THIS_IS_X11R6 /* Callbacks for IM are supported from X11R6 or later. */
+/* Called from when XIM is destroying.
+   Clear all the XIC when the XIM was destroying... */
 static void
 IMDestroyCallback (XIM im, XPointer client_data, XPointer call_data)
 {
-  struct frame *f = (struct frame *) client_data;
-  struct device *d = XDEVICE (FRAME_DEVICE (f));
+  struct device *d = (struct device *)client_data;
   Lisp_Object tail;
 
   DEVICE_FRAME_LOOP (tail, d)
     {
       struct frame *target_frame = XFRAME (XCAR (tail));
-      if (FRAME_X_XIC (target_frame))
+      if (FRAME_X_P (target_frame) && FRAME_X_XIC (target_frame))
        {
-         XDestroyIC (FRAME_X_XIC (target_frame));
+         /* XDestroyIC (FRAME_X_XIC (target_frame)); */
          FRAME_X_XIC (target_frame) = NULL;
        }
     }
 
-#if 0
-  if ( DEVICE_X_XIM (d) )
+  DEVICE_X_XIM (d) = NULL;
+  xim_initted = False;
+  return;
+}
+
+/* This is registered in XIM_init_device (when DEVICE is initializing).
+   This activates XIM when XIM becomes available. */
+static void
+IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
+{
+  struct device *d = (struct device *)client_data;
+  XIM xim;
+  char *name, *class;
+  XIMCallback ximcallback;
+  Lisp_Object tail;
+
+  /* if no xim is presented, initialize xim ... */
+  if ( xim_initted == False )
     {
-      stderr_out ("NULLing d->xim...\n");
-      /* DEVICE_X_XIM (d) = NULL; */
+      xim_initted = True;
+      XtGetApplicationNameAndClass (dpy, &name, &class);
+      DEVICE_X_XIM (d) = xim = XOpenIM (dpy, XtDatabase (dpy), name, class);
+
+      /* destroy callback for im */
+      ximcallback.callback = IMDestroyCallback;
+      ximcallback.client_data = (XPointer) d;
+      XSetIMValues (xim, XNDestroyCallback, &ximcallback, NULL);
     }
-#endif
 
-  xim_initted = False;
+  /* activate XIC on all the X frames... */
+  DEVICE_FRAME_LOOP (tail, d)
+    {
+      struct frame *target_frame = XFRAME (XCAR (tail));
+      if (FRAME_X_P (target_frame) && !FRAME_X_XIC (target_frame))
+       {
+         XIM_init_frame (target_frame);
+       }
+    }
   return;
 }
+#endif /* if THIS_IS_X11R6 */
+
+/* Initialize XIM for X device.
+   Register the use of XIM using XRegisterIMInstantiateCallback. */
+void
+XIM_init_device (struct device *d)
+{
+#ifdef THIS_IS_X11R6
+  DEVICE_X_XIM (d) = NULL;
+  XRegisterIMInstantiateCallback (DEVICE_X_DISPLAY (d), NULL, NULL, NULL,
+                                 IMInstantiateCallback, (XPointer) d);
+  return;
+#else
+  Display *dpy = DEVICE_X_DISPLAY (d);
+  char *name, *class;
+  XIM xim;
+
+  XtGetApplicationNameAndClass (dpy, &name, &class);
+  DEVICE_X_XIM (d) = xim = XOpenIM (dpy, XtDatabase (dpy), name, class);
+  if (xim == NULL)
+    {
+      xim_warn ("XOpenIM() failed...no input server available\n");
+      return;
+    }
+  else
+    {
+      XGetIMValues (xim, XNQueryInputStyle, &DEVICE_X_XIM_STYLES (d), NULL);
+      return;
+    }
+#endif
+}
+
 
 /*
- * called from when FRAME is initializing
+ * For the frames
  */
+
+/* Callback for the deleting frame. */
 static void
-IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
+XIM_delete_frame (Widget w, XtPointer client_data, XtPointer call_data)
 {
   struct frame *f = (struct frame *) client_data;
   struct device *d = XDEVICE (FRAME_DEVICE (f));
+
+  if (DEVICE_X_XIM (d))
+    {
+      if (FRAME_X_XIC (f))
+       {
+         XDestroyIC (FRAME_X_XIC (f));
+         FRAME_X_XIC (f) = NULL;
+       }
+    }
+  return;
+}
+
+/* Initialize XIC for new frame.
+   Create an X input context (XIC) for this frame. */
+void
+XIM_init_frame (struct frame *f)
+{
+  struct device *d = XDEVICE (FRAME_DEVICE (f));
   XIM xim;
   Widget w = FRAME_X_TEXT_WIDGET (f);
   Window win = XtWindow (w);
@@ -181,7 +305,6 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
   XPoint spot = {0,0};
   XIMStyle style;
   XVaNestedList p_list, s_list;
-  char *name, *class;
   typedef struct
   {
     XIMStyles styles;
@@ -191,7 +314,6 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
     char      *inputmethod;
   } xic_vars_t;
   xic_vars_t xic_vars;
-  XIMCallback ximcallback;
   XIC xic;
 
 #define res(name, class, representation, field, default_value) \
@@ -201,32 +323,22 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
   static XtResource resources[] =
   {
     /*  name              class          represent'n   field    default value */
+#ifdef THIS_IS_X11R6
+    res(XtNinputMethod,   XtCInputMethod, XtRString,   inputmethod, (XtPointer) NULL),
+#endif
     res(XtNximStyles,     XtCXimStyles,  XtRXimStyles, styles,  (XtPointer) DefaultXIMStyles),
     res(XtNfontSet,       XtCFontSet,    XtRFontSet,   fontset, (XtPointer) XtDefaultFontSet),
     res(XtNximForeground, XtCForeground, XtRPixel,     fg,      (XtPointer) XtDefaultForeground),
-    res(XtNximBackground, XtCBackground, XtRPixel,     bg,      (XtPointer) XtDefaultBackground),
-    res(XtNinputMethod,   XtCInputMethod, XtRString,   inputmethod, (XtPointer) NULL)
+    res(XtNximBackground, XtCBackground, XtRPixel,     bg,      (XtPointer) XtDefaultBackground)
   };
 
-  /* ---------- beginning of the action ---------- */
 
-  /*
-   * if no xim is presented, initialize xim ...
-   */
-  if ( xim_initted == False )
-    {
-      xim_initted = True;
-      XtGetApplicationNameAndClass (dpy, &name, &class);
-      DEVICE_X_XIM (d) = xim = XOpenIM (dpy, XtDatabase (dpy), name, class);
+  xim = DEVICE_X_XIM (d);
 
-      /* destroy callback for im */
-      ximcallback.callback = IMDestroyCallback;
-      ximcallback.client_data = (XPointer) f;
-      XSetIMValues (xim, XNDestroyCallback, &ximcallback, NULL);
-    }
-  else
+  if (!xim)
     {
-      xim = DEVICE_X_XIM (d);
+      xim_info ("X Input Method open failed. Waiting for an XIM to be enabled.\n");
+      return;
     }
 
   w = FRAME_X_TEXT_WIDGET (f);
@@ -234,13 +346,13 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
   /*
    * initialize XIC
    */
-  if ( FRAME_X_XIC (f) ) return;
+  if (FRAME_X_XIC (f)) return;
   XtGetApplicationResources (w, &xic_vars,
                             resources, XtNumber (resources),
                             NULL, 0);
   if (!xic_vars.fontset)
     {
-      stderr_out ("Can't get fontset resource for Input Method\n");
+      xim_warn ("Can't get fontset resource for Input Method\n");
       FRAME_X_XIC (f) = NULL;
       return;
     }
@@ -278,7 +390,7 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
 
   if (!xic)
     {
-      stderr_out ("Warning: XCreateIC failed.\n");
+      xim_warn ("Warning: XCreateIC failed.\n");
       return;
     }
 
@@ -292,60 +404,11 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data)
 
   XSetICFocus (xic);
 
-  return;
-}
-
-/* Create X input method for device */
-void
-XIM_init_device (struct device *d)
-{
-  /* do nothing here */
-  return;
-}
-
-/* Callback for when the frame was deleted (closed) */
-static void
-XIM_delete_frame (Widget w, XtPointer client_data, XtPointer call_data)
-{
-  struct frame *f = (struct frame *) client_data;
-  struct device *d = XDEVICE (FRAME_DEVICE (f));
-  Display *dpy = DEVICE_X_DISPLAY (d);
-
-  XUnregisterIMInstantiateCallback (dpy, NULL, NULL, NULL,
-                                   IMInstantiateCallback, (XPointer) f);
-
-  if (FRAME_X_XIC (f))
-    {
-      XDestroyIC (FRAME_X_XIC (f));
-      FRAME_X_XIC (f) = NULL;
-    }
-  return;
-}
-
-/* Create an X input context for this frame.
-   -  Register the IM to be initiated later using XRegisterIMInstantiateCallback
- */
-void
-XIM_init_frame (struct frame *f)
-{
-  struct device *d = XDEVICE (FRAME_DEVICE (f));
-
-  XRegisterIMInstantiateCallback (DEVICE_X_DISPLAY (d), NULL, NULL, NULL,
-                                 IMInstantiateCallback, (XPointer) f);
-
-#if 0
-  if ( FRAME_X_XIC (f) )
-    return;
-#endif
-  if ( ! DEVICE_X_XIM (d) )
-    {
-      stderr_out ("X Input Method open failed. Waiting IM to be enabled.\n");
-    }
-
+#ifdef THIS_IS_X11R6
   /* when frame is going to be destroyed (closed) */
   XtAddCallback (FRAME_X_TEXT_WIDGET(f), XNDestroyCallback,
                 XIM_delete_frame, (XtPointer)f);
-  return;
+#endif
 }
 
 
@@ -723,6 +786,65 @@ best_style (XIMStyles *user, XIMStyles *xim)
   return DEFAULTStyle; /* Default Style */
 }
 
+/* These lisp-callable functions will be sealed until xim-leim is needed. 
+   Oct 22 1999 - kazz */
+#if 0
+/*
+ * External callable function for XIM
+ */
+DEFUN ("x-open-xim", Fx_open_xim, 1, 1, 0, /*
+Open the XIC on the frame if XIM is available.
+Commonly, use this as \(x-open-xim \(selected-frame)).
+If the frame is not on X device, return signal.
+If XIC is created successfully return t.  If not return nil.
+*/
+       (frame))
+{
+  struct frame *f;
+
+  CHECK_LIVE_FRAME (frame);
+  f = XFRAME (frame);
+  if (!FRAME_X_P (f))
+    return signal_simple_error ("This frame is not on X device", frame);
+
+  XIM_init_frame (f);
+  return FRAME_X_XIC (f) ? Qt : Qnil;
+}
+
+DEFUN ("x-close-xim", Fx_close_xim, 1, 1, 0, /*
+Close the XIC on the frame if it exists.
+Commonly, use this as \(x-close-xim \(selected-frame)).
+If the frame is not on X device, return signal.
+Otherwise, it destroys the XIC if it exists, then returns t anyway.
+*/
+       (frame))
+{
+  struct frame *f;
+  struct device *d;
+
+  CHECK_LIVE_FRAME (frame);
+  f = XFRAME (frame);
+  if (!FRAME_X_P (f))
+    return signal_simple_error ("This frame is not on X device", frame);
+
+  d = XDEVICE (FRAME_DEVICE (f));
+  if (DEVICE_X_XIM (d)) {
+    /* XDestroyIC (FRAME_X_XIC (XFRAME (f))); */
+    FRAME_X_XIC (XFRAME (f)) = NULL;
+  }
+  return Qt;
+}
+#endif /* if 0 */
+
+void
+syms_of_input_method_xlib (void)
+{
+  defsymbol (&Qxim_xlib, "xim-xlib");
+#if 0 /* see above */
+  DEFSUBR (Fx_open_xim);
+  DEFSUBR (Fx_close_xim);
+#endif
+}
 
 void
 vars_of_input_method_xlib (void)
index 4847277..ab594f3 100644 (file)
@@ -1,7 +1,8 @@
 /* linuxplay.c - play a sound file on the speaker
  **
  ** Copyright (C) 1995,96 by Markus Gutschke (gutschk@math.uni-muenster.de)
- ** This is version 1.3 of linuxplay.c
+ ** This is version 1.3 of linuxplay.c, with platform-independent functions
+ ** moved to a different file by Robert Bihlmeyer <robbe@orcus.priv.at>.
  **
  ** Parts of this code were inspired by sunplay.c, which is copyright 1989 by
  ** Jef Poskanzer and 1991,92 by Jamie Zawinski; c.f. sunplay.c for further
@@ -45,9 +46,6 @@
 
 /* Synched up with: Not in FSF. */
 
-#define HEADERSZ  256   /* has to be at least as big as the biggest header   */
-#define SNDBUFSZ  2048  /* has to be at least as big as HEADERSZ             */
-
 /* XEmacs beta testers say:  undef this by default. */
 #undef NOVOLUMECTRLFORMULAW /* Changing the volume for uLaw-encoded
                               samples sounds very poor; possibly,
@@ -59,6 +57,8 @@
 #include <config.h>
 #endif
 
+#include "miscplay.h"
+
 #include <errno.h>
 #include <fcntl.h>
 #include SOUNDCARD_H_PATH /* Path computed by configure */
 #define warn(str)   message("audio: %s ",GETTEXT(str))
 #endif
 
-#ifdef __GNUC__
-#define UNUSED(x) ((void)(x))
-#else
-#define UNUSED(x)
-#define __inline__
-#endif
-
 static  void (*sighup_handler)(int);
 static  void (*sigint_handler)(int);
 
-/* Maintain global variable for keeping parser state information; this struct
-   is set to zero before the first invocation of the parser. The use of a
-   global variable prevents multiple concurrent executions of this code, but
-   this does not happen anyways... */
-enum wvState
-{ wvMain,
-  wvSubchunk,
-  wvOutOfBlock,
-  wvSkipChunk,
-  wvSoundChunk,
-  wvFatal,
-  wvFatalNotify
-};
-
-static union {
-  struct {
-    int           align;
-    enum wvState state;
-    size_t        left;
-    unsigned char leftover[HEADERSZ];
-    signed long   chunklength;
-  } wave;
-  struct {
-    int           align;
-    int           isdata;
-    int           skipping;
-    size_t        left;
-    unsigned char leftover[HEADERSZ];
-  } audio;
-} parsestate;
-
-/* Use a global buffer as scratch-pad for possible conversions of the
-   sampling format */
-static unsigned char linuxplay_sndbuf[SNDBUFSZ];
-
 static int           mix_fd;
 static int           audio_vol;
 static int           audio_fd;
 static char         *audio_dev = "/dev/dsp";
 
-typedef enum {fmtIllegal,fmtRaw,fmtVoc,fmtWave,fmtSunAudio} fmtType;
-
 /* Intercept SIGINT and SIGHUP in order to close the audio and mixer
    devices before terminating sound output; this requires reliable
    signals as provided by "syssignal.h" */
@@ -156,649 +112,6 @@ static void sighandler(int sig)
   else exit(1);
 }
 
-/* There is no special treatment required for parsing raw data files; we
-   assume that these files contain data in 8bit unsigned format that
-   has been sampled at 8kHz; there is no extra header */
-static size_t parseraw(void **data,size_t *sz,void **outbuf)
-{
-  int rc = *sz;
-
-  *outbuf = *data;
-  *sz = 0;
-  return(rc);
-}
-
-/* Currently we cannot cope with files in VOC format; if you really need
-   to play these files, they should be converted by using SOX */
-static size_t parsevoc(void **data,size_t *sz,void **outbuf)
-{
-  UNUSED(data);
-  UNUSED(sz);
-  UNUSED(outbuf);
-  return(0);
-}
-
-/* We need to perform some look-ahead in order to parse files in WAVE format;
-   this might require re-partioning of the data segments if headers cross the
-   boundaries between two read operations. This is done in a two-step way:
-   first we request a certain amount of bytes... */
-static __inline__ int waverequire(void **data,size_t *sz,size_t rq)
-{
-  int rc = 1;
-
-  if (rq > HEADERSZ) {
-    warn("Header size exceeded while parsing WAVE file");
-    parsestate.wave.state = wvFatal;
-    *sz = 0;
-    return(0); }
-  if ((rq -= parsestate.wave.left) <= 0)
-    return(rc);
-  if (rq > *sz) {rq = *sz; rc = 0;}
-  memcpy(parsestate.wave.leftover+parsestate.wave.left,
-        *data,rq);
-  parsestate.wave.left      += rq;
-  (*(unsigned char **)data) += rq;
-  *sz                       -= rq;
-  return(rc);
-}
-
-/* ...and next we remove this many bytes from the buffer */
-static __inline__ void waveremove(size_t rq)
-{
-  if (parsestate.wave.left <= rq)
-    parsestate.wave.left = 0;
-  else {
-    parsestate.wave.left -= rq;
-    memmove(parsestate.wave.leftover,
-           parsestate.wave.leftover+rq,
-           parsestate.wave.left); }
-  return;
-}
-
-/* Sound files in WAVE format can contain an arbitrary amount of tagged
-   chunks; this requires quite some effort for parsing the data */
-static size_t parsewave(void **data,size_t *sz,void **outbuf)
-{
-  for (;;)
-    switch (parsestate.wave.state) {
-    case wvMain:
-      if (!waverequire(data,sz,20))
-       return(0);
-      /* Keep compatibility with Linux 68k, etc. by not relying on byte-sex  */
-      parsestate.wave.chunklength = parsestate.wave.leftover[16] +
-       256*(parsestate.wave.leftover[17] +
-            256*(parsestate.wave.leftover[18] +
-                 256*parsestate.wave.leftover[19]));
-      waveremove(20);
-      parsestate.wave.state = wvSubchunk;
-      break;
-    case wvSubchunk:
-      if (!waverequire(data,sz,parsestate.wave.chunklength))
-       return(0);
-      parsestate.wave.align = parsestate.wave.chunklength < 14 ? 1
-       : parsestate.wave.leftover[12];
-      if (parsestate.wave.align != 1 &&
-         parsestate.wave.align != 2 &&
-         parsestate.wave.align != 4) {
-       warn("Illegal datawidth detected while parsing WAVE file");
-       parsestate.wave.state = wvFatal; }
-      else
-       parsestate.wave.state = wvOutOfBlock;
-      waveremove(parsestate.wave.chunklength);
-      break;
-    case wvOutOfBlock:
-      if (!waverequire(data,sz,8))
-       return(0);
-      /* Keep compatibility with Linux 68k, etc. by not relying on byte-sex  */
-      parsestate.wave.chunklength = parsestate.wave.leftover[4] +
-       256*(parsestate.wave.leftover[5] +
-            256*(parsestate.wave.leftover[6] +
-                 256*(parsestate.wave.leftover[7] & 0x7F)));
-      if (memcmp(parsestate.wave.leftover,"data",4))
-       parsestate.wave.state = wvSkipChunk;
-      else
-       parsestate.wave.state = wvSoundChunk;
-      waveremove(8);
-      break;
-    case wvSkipChunk:
-      if (parsestate.wave.chunklength > 0 && *sz > 0 &&
-         (signed long)*sz < (signed long)parsestate.wave.chunklength) {
-       parsestate.wave.chunklength -= *sz;
-       *sz = 0; }
-      else {
-       if (parsestate.wave.chunklength > 0 && *sz > 0) {
-         *sz -= parsestate.wave.chunklength;
-         (*(unsigned char **)data) += parsestate.wave.chunklength; }
-       parsestate.wave.state = wvOutOfBlock; }
-      break;
-    case wvSoundChunk: {
-      size_t count,rq;
-      if (parsestate.wave.left) { /* handle leftover bytes from last
-                                    alignment operation */
-       count = parsestate.wave.left;
-       rq    = HEADERSZ-count;
-       if (rq > (size_t) parsestate.wave.chunklength)
-         rq = parsestate.wave.chunklength;
-       if (!waverequire(data,sz,rq)) {
-         parsestate.wave.chunklength -= parsestate.wave.left - count;
-         return(0); }
-       parsestate.wave.chunklength -= rq;
-       *outbuf                      = parsestate.wave.leftover;
-       parsestate.wave.left         = 0;
-       return(rq); }
-      if (*sz >= (size_t) parsestate.wave.chunklength) {
-       count  = parsestate.wave.chunklength;
-       rq     = 0; }
-      else {
-       count  = *sz;
-       count -= rq = count % parsestate.wave.align; }
-      *outbuf                   = *data;
-      (*(unsigned char **)data) += count;
-      *sz                       -= count;
-      if ((parsestate.wave.chunklength -= count) < parsestate.wave.align) {
-       parsestate.wave.state = wvOutOfBlock;
-       /* Some broken software (e.g. SOX) attaches junk to the end of a sound
-          chunk; so, let's ignore this... */
-       if (parsestate.wave.chunklength)
-         parsestate.wave.state = wvSkipChunk; }
-      else if (rq)
-       /* align data length to a multiple of datasize; keep additional data
-          in "leftover" buffer --- this is necessary to ensure proper
-          functioning of the sndcnv... routines */
-       waverequire(data,sz,rq);
-      return(count); }
-    case wvFatalNotify:
-      warn("Irrecoverable error while parsing WAVE file");
-      parsestate.wave.state = wvFatal;
-      break;
-    case wvFatal:
-    default:
-      *sz = 0;
-      return(0); }
-}
-
-/* Strip the header from files in Sun/DEC audio format; this requires some
-   extra processing as the header can be an arbitrary size and it might
-   result in alignment errors for subsequent conversions --- thus we do
-   some buffering, where needed */
-static size_t parsesundecaudio(void **data,size_t *sz,void **outbuf)
-{
-  /* There is data left over from the last invocation of this function; join
-     it with the new data and return a sound chunk that is as big as a
-     single entry */
-  if (parsestate.audio.left) {
-    if (parsestate.audio.left + *sz > (size_t) parsestate.audio.align) {
-      int  count;
-      memmove(parsestate.audio.leftover + parsestate.audio.left,
-             *data,
-             count = parsestate.audio.align - parsestate.audio.left);
-      *outbuf = parsestate.audio.leftover;
-      *sz    -= count;
-      *data   = (*(char **)data) + count;
-      parsestate.audio.left = 0;
-      return(parsestate.audio.align); }
-    else {
-      /* We need even more data in order to get one complete single entry! */
-      memmove(parsestate.audio.leftover + parsestate.audio.left,
-             *data,
-             *sz);
-      *data = (*(char **)data) + *sz;
-      parsestate.audio.left += *sz;
-      *sz   = 0;
-      return(0); } }
-
-  /* This is the main sound chunk, strip of any extra data that does not fit
-     the alignment requirements and move these bytes into the leftover buffer*/
-  if (parsestate.audio.isdata) {
-    int rc = *sz;
-    *outbuf = *data;
-    if ((parsestate.audio.left = rc % parsestate.audio.align) != 0) {
-      memmove(parsestate.audio.leftover,
-             (char *)*outbuf + rc - parsestate.audio.left,
-             parsestate.audio.left);
-      rc -= parsestate.audio.left; }
-    *sz = 0;
-    return(rc); }
-
-  /* This is the first invocation of this function; we need to parse the
-     header information and determine how many bytes we need to skip until
-     the start of the sound chunk */
-  if (!parsestate.audio.skipping) {
-    unsigned char *header = (unsigned char *) *data;
-    if (*sz < 8) {
-      warn("Irrecoverable error while parsing Sun/DEC audio file");
-      return(0); }
-    /* Keep compatibility with Linux 68k, etc. by not relying on byte-sex  */
-    if (header[3]) { /* Sun audio (big endian) */
-      parsestate.audio.align = ((header[15] > 2)+1)*header[23];
-      parsestate.audio.skipping = header[7]+256*(header[6]+256*
-                                                (header[5]+256*header[4])); }
-    else { /* DEC audio (little endian) */
-      parsestate.audio.align = ((header[12] > 2)+1)*header[20];
-      parsestate.audio.skipping = header[4]+256*(header[5]+256*
-                                                (header[6]+256*header[7])); }}
-
-  /* We are skipping extra data that has been attached to header; most usually
-     this will be just a comment, such as the original filename and/or the
-     creation date. Make sure that we do not return less than one single sound
-     sample entry to the caller; if this happens, rather decide to move those
-     few bytes into the leftover buffer and deal with it later */
-  if (*sz >= (size_t) parsestate.audio.skipping) {
-    /* Skip just the header information and return the sound chunk */
-    int rc = *sz - parsestate.audio.skipping;
-    *outbuf = (char *)*data + parsestate.audio.skipping;
-    if ((parsestate.audio.left = rc % parsestate.audio.align) != 0) {
-      memmove(parsestate.audio.leftover,
-             (char *)*outbuf + rc - parsestate.audio.left,
-             parsestate.audio.left);
-      rc -= parsestate.audio.left; }
-    *sz = 0;
-    parsestate.audio.skipping = 0;
-    parsestate.audio.isdata++;
-    return(rc); }
-  else {
-    /* Skip everything */
-    parsestate.audio.skipping -= *sz;
-    return(0); }
-}
-
-/* If the soundcard could not be set to natively support the data format, we
-   try to do some limited on-the-fly conversion to a different format; if
-   no conversion is needed, though, we can output directly */
-static size_t sndcnvnop(void **data,size_t *sz,void **outbuf)
-{
-  int rc = *sz;
-
-  *outbuf = *data;
-  *sz = 0;
-  return(rc);
-}
-
-/* Convert 8 bit unsigned stereo data to 8 bit unsigned mono data */
-static size_t sndcnv8U_2mono(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--)
-    *dest++ = (unsigned char)(((int)*(src)++ +
-                              (int)*(src)++) / 2);
-  *data   = src;
-  return(rc);
-}
-
-/* Convert 8 bit signed stereo data to 8 bit signed mono data */
-static size_t sndcnv8S_2mono(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc, count;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--)
-    *dest++ = (unsigned char)(((int)*((signed char *)(src++)) +
-                              (int)*((signed char *)(src++))) / 2);
-  *data   = src;
-  return(rc);
-}
-
-/* Convert 8 bit signed stereo data to 8 bit unsigned mono data */
-static size_t sndcnv2monounsigned(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--)
-    *dest++ = (unsigned char)(((int)*((signed char *)(src++)) +
-                              (int)*((signed char *)(src++))) / 2) ^ 0x80;
-  *data   = src;
-  return(rc);
-}
-
-/* Convert 8 bit signed mono data to 8 bit unsigned mono data */
-static size_t sndcnv2unsigned(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz;
-  if (count > SNDBUFSZ) { *sz  -= SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--)
-    *dest++ = *(src)++ ^ 0x80;
-  *data   = src;
-  return(rc);
-}
-
-/* Convert a number in the range -32768..32767 to an 8 bit ulaw encoded
-   number --- I hope, I got this conversion right :-) */
-static __inline__ signed char int2ulaw(int i)
-{
-    /* Lookup table for fast calculation of number of bits that need shifting*/
-    static short int t_bits[128] = {
-      0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-      6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-      7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-      7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7};
-    REGISTER int bits,logi;
-
-    /* unrolling this condition (hopefully) improves execution speed */
-    if (i < 0) {
-      if ((i = (132-i)) > 0x7FFF) i = 0x7FFF;
-      logi = (i >> ((bits = t_bits[i/256])+4));
-      return((bits << 4 | logi) ^ 0x7F); }
-    else {
-      if ((i = 132+i) > 0x7FFF) i = 0x7FFF;
-      logi = (i >> ((bits = t_bits[i/256])+4));
-      return(~(bits << 4 | logi)); }
-}
-
-/* Convert 8 bit ulaw stereo data to 8 bit ulaw mono data */
-static size_t sndcnvULaw_2mono(void **data,size_t *sz,void **outbuf)
-{
-
-  static short int ulaw2int[256] = {
-    /* Precomputed lookup table for conversion from ulaw to 15 bit signed */
-    -16062,-15550,-15038,-14526,-14014,-13502,-12990,-12478,
-    -11966,-11454,-10942,-10430, -9918, -9406, -8894, -8382,
-     -7998, -7742, -7486, -7230, -6974, -6718, -6462, -6206,
-     -5950, -5694, -5438, -5182, -4926, -4670, -4414, -4158,
-     -3966, -3838, -3710, -3582, -3454, -3326, -3198, -3070,
-     -2942, -2814, -2686, -2558, -2430, -2302, -2174, -2046,
-     -1950, -1886, -1822, -1758, -1694, -1630, -1566, -1502,
-     -1438, -1374, -1310, -1246, -1182, -1118, -1054,  -990,
-      -942,  -910,  -878,  -846,  -814,  -782,  -750,  -718,
-      -686,  -654,  -622,  -590,  -558,  -526,  -494,  -462,
-      -438,  -422,  -406,  -390,  -374,  -358,  -342,  -326,
-      -310,  -294,  -278,  -262,  -246,  -230,  -214,  -198,
-      -186,  -178,  -170,  -162,  -154,  -146,  -138,  -130,
-      -122,  -114,  -106,   -98,   -90,   -82,   -74,   -66,
-       -60,   -56,   -52,   -48,   -44,   -40,   -36,   -32,
-       -28,   -24,   -20,   -16,   -12,    -8,    -4,    +0,
-    +16062,+15550,+15038,+14526,+14014,+13502,+12990,+12478,
-    +11966,+11454,+10942,+10430, +9918, +9406, +8894, +8382,
-     +7998, +7742, +7486, +7230, +6974, +6718, +6462, +6206,
-     +5950, +5694, +5438, +5182, +4926, +4670, +4414, +4158,
-     +3966, +3838, +3710, +3582, +3454, +3326, +3198, +3070,
-     +2942, +2814, +2686, +2558, +2430, +2302, +2174, +2046,
-     +1950, +1886, +1822, +1758, +1694, +1630, +1566, +1502,
-     +1438, +1374, +1310, +1246, +1182, +1118, +1054,  +990,
-      +942,  +910,  +878,  +846,  +814,  +782,  +750,  +718,
-      +686,  +654,  +622,  +590,  +558,  +526,  +494,  +462,
-      +438,  +422,  +406,  +390,  +374,  +358,  +342,  +326,
-      +310,  +294,  +278,  +262,  +246,  +230,  +214,  +198,
-      +186,  +178,  +170,  +162,  +154,  +146,  +138,  +130,
-      +122,  +114,  +106,   +98,   +90,   +82,   +74,   +66,
-       +60,   +56,   +52,   +48,   +44,   +40,   +36,   +32,
-       +28,   +24,   +20,   +16,   +12,    +8,    +4,    +0};
-
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--)
-    /* it is not possible to directly interpolate between two ulaw encoded
-       data bytes, thus we need to convert to linear format first and later
-       we convert back to ulaw format */
-    *dest++ = int2ulaw(ulaw2int[*(src)++] +
-                      ulaw2int[*(src)++]);
-  *data = src;
-  return(rc);
-}
-
-/* Convert 16 bit little endian signed stereo data to 16 bit little endian
-   signed mono data */
-static size_t sndcnv16_2monoLE(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-  signed short i;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  for (count /= 2; count--; ) {
-    i = ((int)(src[0]) +
-        256*(int)(src[1]) +
-       (int)(src[2]) +
-       256*(int)(src[3])) / 2;
-    src += 4;
-    *dest++ = (unsigned char)(i & 0xFF);
-    *dest++ = (unsigned char)((i / 256) & 0xFF); }
-  *data = src;
-  return(rc);
-}
-
-/* Convert 16 bit big endian signed stereo data to 16 bit big endian
-   signed mono data */
-static size_t sndcnv16_2monoBE(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-  signed short i;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  for (count /= 2; count--; ) {
-    i = ((int)(src[1]) +
-        256*(int)(src[0]) +
-       (int)(src[3]) +
-       256*(int)(src[2])) / 2;
-    src += 4;
-    *dest++ = (unsigned char)((i / 256) & 0xFF);
-    *dest++ = (unsigned char)(i & 0xFF); }
-  *data = src;
-  return(rc);
-}
-
-/* Convert 16 bit little endian signed data to 8 bit unsigned data */
-static size_t sndcnv2byteLE(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--) {
-    *dest++ = (unsigned char)(((signed char *)src)[1] ^ (signed char)0x80);
-    src += 2;
-  }
-  *data = src;
-  return(rc);
-}
-
-/* Convert 16 bit big endian signed data to 8 bit unsigned data */
-static size_t sndcnv2byteBE(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz / 2;
-  if (count > SNDBUFSZ) { *sz  -= 2*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--) {
-    *dest++ = (unsigned char)(((signed char *)src)[0] ^ (signed char)0x80);
-    src += 2;
-  }
-  *data = src;
-  return(rc);
-}
-
-/* Convert 16 bit little endian signed stereo data to 8 bit unsigned
-   mono data */
-static size_t sndcnv2monobyteLE(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz / 4;
-  if (count > SNDBUFSZ) { *sz  -= 4*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--) {
-    *dest++ = (unsigned char)(((int)((signed char *)src)[1] +
-                              (int)((signed char *)src)[3]) / 2 ^ 0x80);
-    src += 4;
-  }
-  *data = src;
-  return(rc);
-}
-
-/* Convert 16 bit big endian signed stereo data to 8 bit unsigned
-   mono data */
-static size_t sndcnv2monobyteBE(void **data,size_t *sz,void **outbuf)
-{
-  REGISTER unsigned char *src;
-  REGISTER unsigned char *dest;
-  int rc,count;
-
-  count = *sz / 4;
-  if (count > SNDBUFSZ) { *sz  -= 4*SNDBUFSZ; count = SNDBUFSZ; }
-  else                    *sz   = 0;
-  rc      = count;
-  src     = (unsigned char *) *data;
-  *outbuf =
-  dest    = linuxplay_sndbuf;
-  while (count--) {
-    *dest++ = (unsigned char)(((int)((signed char *)src)[0] +
-                              (int)((signed char *)src)[2]) / 2 ^ 0x80);
-    src += 4;
-  }
-  *data = src;
-  return(rc);
-}
-
-/* Look at the header of the sound file and try to determine the format;
-   we can recognize files in VOC, WAVE, and, Sun/DEC-audio format--- everything
-   else is assumed to be raw 8 bit unsigned data sampled at 8kHz */
-static fmtType analyze_format(unsigned char *format,int *fmt,int *speed,
-                             int *tracks,
-                             size_t (**parsesndfile)(void **,size_t *sz,
-                                                     void **))
-{
-  /* Keep compatibility with Linux 68k, etc. by not relying on byte-sex  */
-  if (!memcmp(format,"Creative Voice File\x1A\x1A\x00",22) &&
-              (format[22]+256*format[23]) ==
-      ((0x1233-format[24]-256*format[25])&0xFFFF)) { /* VOC */
-    *fmt          = AFMT_U8;
-    *speed        = 8000;
-    *tracks       = 2;
-    *parsesndfile = parsevoc;
-    return(fmtVoc); }
-  else if (!memcmp(format,"RIFF",4) &&
-          !memcmp(format+8,"WAVEfmt ",8)) { /* WAVE */
-    if (memcmp(format+20,"\001\000\001"/* PCM mono */,4) &&
-       memcmp(format+20,"\001\000\002"/* PCM stereo */,4))
-      return(fmtIllegal);
-    *fmt          = (format[32]/(*tracks = format[22])) == 1 ?
-                    AFMT_U8 : AFMT_S16_LE;
-    /* Keep compatibility with Linux 68k, etc. by not relying on byte-sex  */
-    *speed        = format[24]+256*(format[25]+256*
-                                   (format[26]+256*format[27]));
-    *parsesndfile = parsewave;
-    return(fmtWave); }
-  else if (!memcmp(format,".snd",4)) { /* Sun Audio (big endian) */
-    if (format[7]+256*(format[6]+256*(format[5]+256*format[4])) < 24) {
-      *fmt          = AFMT_MU_LAW;
-      *speed        = 8000;
-      *tracks       = 1;
-      *parsesndfile = parsesundecaudio;
-      return(fmtSunAudio); }
-    if      (!memcmp(format+12,"\000\000\000\001",4)) *fmt = AFMT_MU_LAW;
-    else if (!memcmp(format+12,"\000\000\000\002",4)) *fmt = AFMT_S8;
-    else if (!memcmp(format+12,"\000\000\000\003",4)) *fmt = AFMT_S16_BE;
-    else return(fmtIllegal);
-    /* Keep compatibility with Linux 68k, etc. by not relying on byte-sex  */
-    *speed        = format[19]+256*(format[18]+256*
-                                   (format[17]+256*format[16]));
-    *tracks       = format[23];
-    *parsesndfile = parsesundecaudio;
-    return(fmtSunAudio); }
-  else if (!memcmp(format,".sd",4)) { /* DEC Audio (little endian) */
-    if (format[4]+256*(format[5]+256*(format[6]+256*format[7])) < 24) {
-      *fmt          = AFMT_MU_LAW;
-      *speed        = 8000;
-      *tracks       = 1;
-      *parsesndfile = parsesundecaudio;
-      return(fmtSunAudio); }
-    if      (!memcmp(format+12,"\001\000\000",4)) *fmt = AFMT_MU_LAW;
-    else if (!memcmp(format+12,"\002\000\000",4)) *fmt = AFMT_S8;
-    else if (!memcmp(format+12,"\003\000\000",4)) *fmt = AFMT_S16_LE;
-    else return(fmtIllegal);
-    /* Keep compatibility with Linux 68k, etc. by not relying on byte-sex  */
-    *speed        = format[16]+256*(format[17]+256*
-                                   (format[18]+256*format[19]));
-    *tracks       = format[20];
-    *parsesndfile = parsesundecaudio;
-    return(fmtSunAudio); }
-  else {
-    *fmt          = AFMT_U8;
-    *speed        = 8000;
-    *tracks       = 1;
-    *parsesndfile = parseraw;
-    return(fmtRaw); }
-}
-
 /* Initialize the soundcard and mixer device with the parameters that we
    found in the header of the sound file. If the soundcard is not capable of
    natively supporting the required parameters, then try to set up conversion
@@ -973,16 +286,17 @@ static void linux_play_data_or_file(int fd,unsigned char *data,
   int            fmt,speed,tracks;
   unsigned char *pptr,*optr,*cptr,*sptr;
   int            wrtn,rrtn,crtn,prtn;
+  unsigned char         sndbuf[SNDBUFSZ];
 
   /* We need to read at least the header information before we can start
      doing anything */
   if (!data || length < HEADERSZ) {
     if (fd < 0) return;
     else {
-      length = read(fd,linuxplay_sndbuf,SNDBUFSZ);
+      length = read(fd,sndbuf,SNDBUFSZ);
       if (length < HEADERSZ)
        return;
-      data   = linuxplay_sndbuf;
+      data   = sndbuf;
       length = SNDBUFSZ; }
   }
 
@@ -1010,8 +324,7 @@ static void linux_play_data_or_file(int fd,unsigned char *data,
     goto END_OF_PLAY;
   audio_vol = volume;
 
-  /* Initialize global parser state information to zero */
-  memset(&parsestate,0,sizeof(parsestate));
+  reset_parsestate();
 
   /* Mainloop: read a block of data, parse its contents, perform all
                the necessary conversions and output it to the sound
@@ -1034,17 +347,15 @@ static void linux_play_data_or_file(int fd,unsigned char *data,
          warn(buf);
          goto END_OF_PLAY; } }
     if (fd >= 0) {
-      if ((rrtn = read(fd,linuxplay_sndbuf,SNDBUFSZ)) < 0) {
+      if ((rrtn = read(fd,sndbuf,SNDBUFSZ)) < 0) {
        perror("read"); goto END_OF_PLAY; } }
     else
       break;
   } while (rrtn > 0);
 
-  /* Verify that we could fully parse the entire soundfile; this is needed
-     only for files in WAVE format */
-  if (ffmt == fmtWave && parsestate.wave.state != wvOutOfBlock &&
-      parsestate.wave.state != wvFatal)
-    warn("Unexpected end of WAVE file");
+  if (ffmt == fmtWave)
+    parse_wave_complete();
 
 END_OF_PLAY:
   /* Now cleanup all used resources */
index 3831e32..c827371 100644 (file)
@@ -40,10 +40,7 @@ Boston, MA 02111-1307, USA.  */
 #include <ctype.h>
 #include <stdarg.h>
 #include <stddef.h>            /* offsetof */
-
-#ifdef __lucid
-# include <sysent.h>
-#endif
+#include <sys/types.h>
 
 /* ---- Dynamic arrays ---- */
 
@@ -1122,7 +1119,7 @@ set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value)
 
 /* Number of longs required to hold LEN bits */
 #define BIT_VECTOR_LONG_STORAGE(len) \
-  ((len + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
+  (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
 
 
 /*********** symbol ***********/
@@ -2135,7 +2132,7 @@ Lisp_Object emacs_doprnt_string_lisp_2 (CONST Bufbyte *, Lisp_Object,
 /* Defined in editfns.c */
 void uncache_home_directory (void);
 char *get_home_directory (void);
-char *user_login_name (int *);
+char *user_login_name (uid_t *);
 Bufpos bufpos_clip_to_bounds (Bufpos, Bufpos, Bufpos);
 Bytind bytind_clip_to_bounds (Bytind, Bytind, Bytind);
 void buffer_insert1 (struct buffer *, Lisp_Object);
@@ -2313,8 +2310,8 @@ void maybe_signal_double_file_error_2 (CONST char *, CONST char *,
                                       Error_behavior);
 Lisp_Object lisp_strerror (int);
 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
-int read_allowing_quit (int, void *, size_t);
-int write_allowing_quit (int, CONST void *, size_t);
+ssize_t read_allowing_quit (int, void *, size_t);
+ssize_t write_allowing_quit (int, CONST void *, size_t);
 int internal_delete_file (Lisp_Object);
 
 /* Defined in filelock.c */
@@ -2622,6 +2619,7 @@ EXFUN (Fdefault_boundp, 1);
 EXFUN (Fdefault_value, 1);
 EXFUN (Fdefine_key, 3);
 EXFUN (Fdelete_region, 3);
+EXFUN (Fdelete_process, 1);
 EXFUN (Fdelq, 2);
 EXFUN (Fdestructive_alist_to_plist, 1);
 EXFUN (Fdetect_coding_region, 3);
index 08c6c79..a92fc18 100644 (file)
@@ -903,17 +903,18 @@ locate_file_find_directory_hash_table (Lisp_Object directory)
    nil, a list, or a string (for backward compatibility), with the
    following semantics:
 
-   a) nil    - no suffix, just search for file name intact (semantically
-               different from "empty suffix list")
+   a) nil    - no suffix, just search for file name intact
+               (semantically different from "empty suffix list", which
+               would be meaningless.)
    b) list   - list of suffixes to append to file name.  Each of these
                must be a string.
    c) string - colon-separated suffixes to append to file name (backward
                compatibility).
 
-   All of this got hairy, so I decided to use write a mapper.  Calling
-   a function for each suffix shouldn't slow things down, since
-   locate_file is rarely call with enough suffixes for it to make a
-   difference.  */
+   All of this got hairy, so I decided to use a mapper.  Calling a
+   function for each suffix shouldn't slow things down, since
+   locate_file is rarely called with enough suffixes for funcalls to
+   make any difference.  */
 
 /* Map FUN over SUFFIXES, as described above.  FUN will be called with a
    char * containing the current file name, and ARG.  Mapping stops when
index d7c4f70..9ecce37 100644 (file)
@@ -95,12 +95,12 @@ int Lstream_fgetc (Lstream *stream)
 void Lstream_fungetc (Lstream *stream, int c)
        Function equivalents of the above macros.
 
-int Lstream_read (Lstream *stream, void *data, size_t size)
+ssize_t Lstream_read (Lstream *stream, void *data, size_t size)
        Read SIZE bytes of DATA from the stream.  Return the number of
        bytes read.  0 means EOF. -1 means an error occurred and no
        bytes were read.
 
-int Lstream_write (Lstream *stream, void *data, size_t size)
+ssize_t Lstream_write (Lstream *stream, void *data, size_t size)
        Write SIZE bytes of DATA to the stream.  Return the number of
        bytes written.  -1 means an error occurred and no bytes were
        written.
@@ -302,11 +302,11 @@ Lstream_reopen (Lstream *lstr)
 int
 Lstream_flush_out (Lstream *lstr)
 {
-  int num_written;
+  ssize_t num_written;
 
   while (lstr->out_buffer_ind > 0)
     {
-      int size = lstr->out_buffer_ind;
+      size_t size = lstr->out_buffer_ind;
       if (! (lstr->flags & LSTREAM_FL_IS_OPEN))
        Lstream_internal_error ("lstream not open", lstr);
       if (! (lstr->flags & LSTREAM_FL_WRITE))
@@ -347,7 +347,7 @@ Lstream_flush_out (Lstream *lstr)
           the attempt to write the data might have resulted in an
           EWOULDBLOCK error. */
        return 0;
-      else if (num_written >= (int) lstr->out_buffer_ind)
+      else if (num_written >= lstr->out_buffer_ind)
        lstr->out_buffer_ind = 0;
       else if (num_written > 0)
        {
@@ -389,7 +389,7 @@ Lstream_flush (Lstream *lstr)
    if it's getting EWOULDBLOCK errors.   We have to keep stocking them
    up until they can be written, so as to avoid losing data. */
 
-static int
+static size_t
 Lstream_adding (Lstream *lstr, size_t num, int force)
 {
   /* Compute the size that the outbuffer needs to be after the
@@ -409,11 +409,11 @@ Lstream_adding (Lstream *lstr, size_t num, int force)
 
 /* Like Lstream_write(), but does not handle line-buffering correctly. */
 
-static int
+static ssize_t
 Lstream_write_1 (Lstream *lstr, CONST void *data, size_t size)
 {
   CONST unsigned char *p = (CONST unsigned char *) data;
-  int off = 0;
+  ssize_t off = 0;
   if (! (lstr->flags & LSTREAM_FL_IS_OPEN))
     Lstream_internal_error ("lstream not open", lstr);
   if (! (lstr->flags & LSTREAM_FL_WRITE))
@@ -424,7 +424,7 @@ Lstream_write_1 (Lstream *lstr, CONST void *data, size_t size)
     while (1)
       {
        /* Figure out how much we can add to the buffer */
-       int chunk = Lstream_adding (lstr, size, 0);
+       size_t chunk = Lstream_adding (lstr, size, 0);
        if (chunk == 0)
          {
            if (couldnt_write_last_time)
@@ -469,17 +469,17 @@ Lstream_write_1 (Lstream *lstr, CONST void *data, size_t size)
    repeatedly call Lstream_putc(), which knows how to handle
    line buffering. */
 
-int
+ssize_t
 Lstream_write (Lstream *lstr, CONST void *data, size_t size)
 {
-  int i;
+  size_t i;
   CONST unsigned char *p = (CONST unsigned char *) data;
 
   if (size == 0)
     return size;
   if (lstr->buffering != LSTREAM_LINE_BUFFERED)
     return Lstream_write_1 (lstr, data, size);
-  for (i = 0; i < (int) size; i++)
+  for (i = 0; i < size; i++)
     {
       if (Lstream_putc (lstr, p[i]) < 0)
        break;
@@ -490,10 +490,7 @@ Lstream_write (Lstream *lstr, CONST void *data, size_t size)
 int
 Lstream_was_blocked_p (Lstream *lstr)
 {
-  if (lstr->imp->was_blocked_p)
-    return (lstr->imp->was_blocked_p) (lstr);
-  else
-    return 0;
+  return lstr->imp->was_blocked_p ? lstr->imp->was_blocked_p (lstr) : 0;
 }
 
 static int
@@ -511,16 +508,16 @@ Lstream_raw_read (Lstream *lstr, unsigned char *buffer, size_t size)
 
 /* Assuming the buffer is empty, fill it up again. */
 
-static int
+static ssize_t
 Lstream_read_more (Lstream *lstr)
 {
 #if 0
-  int size_needed = max (1, min (MAX_READ_SIZE, lstr->buffering_size));
+  ssize_t size_needed = max (1, min (MAX_READ_SIZE, lstr->buffering_size));
 #else
   /* If someone requested a larger buffer size, so be it! */
-  int size_needed = max (1, lstr->buffering_size);
+  ssize_t size_needed = max (1, lstr->buffering_size);
 #endif
-  int size_gotten;
+  ssize_t size_gotten;
 
   DO_REALLOC (lstr->in_buffer, lstr->in_buffer_size,
              size_needed, unsigned char);
@@ -530,11 +527,11 @@ Lstream_read_more (Lstream *lstr)
   return size_gotten < 0 ? -1 : size_gotten;
 }
 
-int
+ssize_t
 Lstream_read (Lstream *lstr, void *data, size_t size)
 {
   unsigned char *p = (unsigned char *) data;
-  int off = 0;
+  size_t off = 0;
   size_t chunk;
   int error_occurred = 0;
 
@@ -546,7 +543,7 @@ Lstream_read (Lstream *lstr, void *data, size_t size)
   if (chunk > 0)
     {
       /* The bytes come back in reverse order. */
-      for (; off < (int) chunk; off++)
+      for (; off < chunk; off++)
        p[off] = lstr->unget_buffer[--lstr->unget_buffer_ind];
       lstr->byte_count += chunk;
       size -= chunk;
@@ -568,7 +565,7 @@ Lstream_read (Lstream *lstr, void *data, size_t size)
       /* If we need some more, try to get some more from the stream's end */
       if (size > 0)
        {
-         int retval = Lstream_read_more (lstr);
+         ssize_t retval = Lstream_read_more (lstr);
          if (retval < 0)
            error_occurred = 1;
          if (retval <= 0)
@@ -592,7 +589,7 @@ Lstream_read (Lstream *lstr, void *data, size_t size)
          VALIDATE_CHARPTR_BACKWARD (dataend);
          if (dataend + REP_BYTES_BY_FIRST_BYTE (*dataend) != p + off)
            {
-             int newoff = dataend - p;
+             size_t newoff = dataend - p;
              /* If not, chop the size down to ignore the last char
                 and stash it away for next time. */
              Lstream_unread (lstr, dataend, off - newoff);
@@ -601,25 +598,24 @@ Lstream_read (Lstream *lstr, void *data, size_t size)
        }
     }
 
-  return ((off == 0 && error_occurred) ? -1 : off);
+  return off == 0 && error_occurred ? -1 : (ssize_t) off;
 }
 
 void
 Lstream_unread (Lstream *lstr, CONST void *data, size_t size)
 {
-  int i;
-  unsigned char *p = (unsigned char *) data;
+  CONST unsigned char *p = (CONST unsigned char *) data;
 
   /* Make sure buffer is big enough */
-
   DO_REALLOC (lstr->unget_buffer, lstr->unget_buffer_size,
              lstr->unget_buffer_ind + size, unsigned char);
 
+  lstr->byte_count -= size;
+
   /* Bytes have to go on in reverse order -- they are reversed
      again when read back. */
-  for (i = size - 1; i >= 0; i--)
-    lstr->unget_buffer[lstr->unget_buffer_ind++] = p[i];
-  lstr->byte_count -= size;
+  while (size--)
+    lstr->unget_buffer[lstr->unget_buffer_ind++] = p[size];
 }
 
 int
@@ -646,15 +642,11 @@ Lstream_seekable_p (Lstream *lstr)
 static int
 Lstream_pseudo_close (Lstream *lstr)
 {
-  int rc;
-
   if (!lstr->flags & LSTREAM_FL_IS_OPEN)
     Lstream_internal_error ("lstream is not open", lstr);
 
   /* don't check errors here -- best not to risk file descriptor loss */
-  rc = Lstream_flush (lstr);
-
-  return rc;
+  return Lstream_flush (lstr);
 }
 
 int
@@ -729,7 +721,7 @@ int
 Lstream_fputc (Lstream *lstr, int c)
 {
   unsigned char ch = (unsigned char) c;
-  int retval = Lstream_write_1 (lstr, &ch, 1);
+  ssize_t retval = Lstream_write_1 (lstr, &ch, 1);
   if (retval >= 0 && lstr->buffering == LSTREAM_LINE_BUFFERED && ch == '\n')
     return Lstream_flush_out (lstr);
   return retval < 0 ? -1 : 0;
@@ -792,24 +784,42 @@ make_stdio_output_stream (FILE *stream, int flags)
   return make_stdio_stream_1 (stream, flags, "w");
 }
 
-static int
+/* #### From reading the Unix 98 specification, it appears that if we
+   want stdio_reader() to be completely correct, we should check for
+   0 < val < size and if so, check to see if an error has occurred.
+   If an error has occurred, but val is non-zero, we should go ahead
+   and act as if the read was successful, but remember in some fashion
+   or other, that an error has occurred, and report that on the next
+   call to stdio_reader instead of calling fread() again.
+
+   Currently, in such a case, we end up calling fread() twice and we
+   assume that
+
+   1) this is not harmful, and
+   2) the error will still be reported on the second read.
+
+   This is probably reasonable, so I don't think we should change this
+   code (it could even be argued that the error might have fixed
+   itself, so we should do the fread() again.  */
+
+static ssize_t
 stdio_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   struct stdio_stream *str = STDIO_STREAM_DATA (stream);
-  size_t val = fread (data, 1, (size_t) size, str->file);
+  size_t val = fread (data, 1, size, str->file);
   if (!val && ferror (str->file))
     return -1;
-  return (int) val;
+  return val;
 }
 
-static int
+static ssize_t
 stdio_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct stdio_stream *str = STDIO_STREAM_DATA (stream);
   size_t val = fwrite (data, 1, size, str->file);
   if (!val && ferror (str->file))
     return -1;
-  return (int) val;
+  return val;
 }
 
 static int
@@ -837,9 +847,6 @@ stdio_flusher (Lstream *stream)
   if (stream->flags & LSTREAM_FL_WRITE)
     return fflush (str->file);
   else
-    /* call fpurge?  Only exists on some systems.  #### Why not add a
-       configure check for HAVE_FPURGE and utilize it on systems that
-       support it?  --hniksic */
     return 0;
 }
 
@@ -853,7 +860,6 @@ stdio_closer (Lstream *stream)
   if (stream->flags & LSTREAM_FL_WRITE)
     return fflush (str->file);
   else
-    /* call fpurge?  Only exists on some systems. */
     return 0;
 }
 
@@ -921,10 +927,10 @@ make_filedesc_output_stream (int filedesc, int offset, int count, int flags)
   return make_filedesc_stream_1 (filedesc, offset, count, flags, "w");
 }
 
-static int
+static ssize_t
 filedesc_reader (Lstream *stream, unsigned char *data, size_t size)
 {
-  int nread;
+  ssize_t nread;
   struct filedesc_stream *str = FILEDESC_STREAM_DATA (stream);
   if (str->end_pos >= 0)
     size = min (size, (size_t) (str->end_pos - str->current_pos));
@@ -948,11 +954,11 @@ errno_would_block_p (int val)
   return 0;
 }
 
-static int
+static ssize_t
 filedesc_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct filedesc_stream *str = FILEDESC_STREAM_DATA (stream);
-  int retval;
+  ssize_t retval;
   int need_newline = 0;
 
   /* This function would be simple if it were not for the blasted
@@ -1005,8 +1011,8 @@ filedesc_writer (Lstream *stream, CONST unsigned char *data, size_t size)
         out for EWOULDBLOCK. */
       if (str->chars_sans_newline >= str->pty_max_bytes)
        {
-         int retval2 = ((str->allow_quit ? write_allowing_quit : write)
-                        (str->fd, &str->eof_char, 1));
+         ssize_t retval2 = ((str->allow_quit ? write_allowing_quit : write)
+                            (str->fd, &str->eof_char, 1));
          if (retval2 > 0)
            str->chars_sans_newline = 0;
          else if (retval2 < 0)
@@ -1036,8 +1042,8 @@ filedesc_writer (Lstream *stream, CONST unsigned char *data, size_t size)
   if (need_newline)
     {
       Bufbyte nl = '\n';
-      int retval2 = ((str->allow_quit ? write_allowing_quit : write)
-                    (str->fd, &nl, 1));
+      ssize_t retval2 = ((str->allow_quit ? write_allowing_quit : write)
+                        (str->fd, &nl, 1));
       if (retval2 > 0)
         {
           str->chars_sans_newline = 0;
@@ -1170,7 +1176,7 @@ make_lisp_string_input_stream (Lisp_Object string, Bytecount offset,
   return obj;
 }
 
-static int
+static ssize_t
 lisp_string_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   struct lisp_string_stream *str = LISP_STRING_STREAM_DATA (stream);
@@ -1260,7 +1266,7 @@ make_fixed_buffer_output_stream (unsigned char *buf, size_t size)
   return obj;
 }
 
-static int
+static ssize_t
 fixed_buffer_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   struct fixed_buffer_stream *str = FIXED_BUFFER_STREAM_DATA (stream);
@@ -1270,7 +1276,7 @@ fixed_buffer_reader (Lstream *stream, unsigned char *data, size_t size)
   return size;
 }
 
-static int
+static ssize_t
 fixed_buffer_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct fixed_buffer_stream *str = FIXED_BUFFER_STREAM_DATA (stream);
@@ -1332,7 +1338,7 @@ make_resizing_buffer_output_stream (void)
   return obj;
 }
 
-static int
+static ssize_t
 resizing_buffer_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct resizing_buffer_stream *str = RESIZING_BUFFER_STREAM_DATA (stream);
@@ -1394,7 +1400,7 @@ make_dynarr_output_stream (unsigned_char_dynarr *dyn)
   return obj;
 }
 
-static int
+static ssize_t
 dynarr_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct dynarr_stream *str = DYNARR_STREAM_DATA (stream);
@@ -1518,7 +1524,7 @@ make_lisp_buffer_output_stream (struct buffer *buf, Bufpos pos, int flags)
   return lstr;
 }
 
-static int
+static ssize_t
 lisp_buffer_reader (Lstream *stream, unsigned char *data, size_t size)
 {
   struct lisp_buffer_stream *str = LISP_BUFFER_STREAM_DATA (stream);
@@ -1576,7 +1582,7 @@ lisp_buffer_reader (Lstream *stream, unsigned char *data, size_t size)
   return data - orig_data;
 }
 
-static int
+static ssize_t
 lisp_buffer_writer (Lstream *stream, CONST unsigned char *data, size_t size)
 {
   struct lisp_buffer_stream *str = LISP_BUFFER_STREAM_DATA (stream);
index 357c820..1108045 100644 (file)
@@ -95,7 +95,7 @@ typedef struct lstream_implementation
   /* The omniscient mly, blinded by the irresistable thrall of Common
      Lisp, thinks that it is bogus that the types and implementations
      of input and output streams are the same. */
-  int (*reader) (Lstream *stream, unsigned char *data, size_t size);
+  ssize_t (*reader) (Lstream *stream, unsigned char *data, size_t size);
   /* Send some data to the stream's end.  Data to be sent is in DATA
      and is SIZE bytes.  Return the number of bytes sent.  This
      function can send and return fewer bytes than is passed in; in
@@ -106,7 +106,7 @@ typedef struct lstream_implementation
      data. (This is useful, e.g., of you're dealing with a
      non-blocking file descriptor and are getting EWOULDBLOCK errors.)
      This function can be NULL if the stream is input-only. */
-  int (*writer) (Lstream *stream, CONST unsigned char *data, size_t size);
+  ssize_t (*writer) (Lstream *stream, CONST unsigned char *data, size_t size);
   /* Return non-zero if the last write operation on the stream resulted
      in an attempt to block (EWOULDBLOCK). If this method does not
      exists, the implementation returns 0 */
@@ -209,8 +209,8 @@ int Lstream_flush_out (Lstream *lstr);
 int Lstream_fputc (Lstream *lstr, int c);
 int Lstream_fgetc (Lstream *lstr);
 void Lstream_fungetc (Lstream *lstr, int c);
-int Lstream_read (Lstream *lstr, void *data, size_t size);
-int Lstream_write (Lstream *lstr, CONST void *data, size_t size);
+ssize_t Lstream_read (Lstream *lstr, void *data, size_t size);
+ssize_t Lstream_write (Lstream *lstr, CONST void *data, size_t size);
 int Lstream_was_blocked_p (Lstream *lstr);
 void Lstream_unread (Lstream *lstr, CONST void *data, size_t size);
 int Lstream_rewind (Lstream *lstr);
index 4f604f4..a112b6a 100644 (file)
@@ -29,8 +29,7 @@ my ($myName, $srcdir, %exists, %uses, %generated_header);
 Usage: $myName
 
 Generates Makefile dependencies for the XEmacs src directory.
-The dependencies are written to stdout.
-";
+The dependencies are written to stdout.\n";
 
 die $usage if @ARGV;
 
index acb9f0d..775942a 100644 (file)
--- a/src/md5.c
+++ b/src/md5.c
@@ -582,8 +582,8 @@ file-coding or Mule support.  Otherwise, they are ignored.
   while (1)
     {
       Bufbyte tempbuf[1024];   /* some random amount */
-      int size_in_bytes = Lstream_read (XLSTREAM (instream),
-                                       tempbuf, sizeof (tempbuf));
+      ssize_t size_in_bytes =
+       Lstream_read (XLSTREAM (instream), tempbuf, sizeof (tempbuf));
       if (!size_in_bytes)
        break;
 
index e84c7e1..7e92134 100644 (file)
@@ -682,17 +682,27 @@ static tr_stack *mapping_stack_pointer;
 
 /* Write a string at ccl_prog[IC] of length LEN to the current output
    buffer.  */
-#define CCL_WRITE_STRING(len) do {                     \
-  if (!destination)                                    \
-    {                                                  \
-      ccl->status = CCL_STAT_INVALID_CMD;              \
-      goto ccl_error_handler;                          \
-    }                                                  \
-  else                                                 \
-    for (i = 0; i < len; i++)                          \
-      Dynarr_add(destination,                          \
-                (XINT (ccl_prog[ic + (i / 3)])         \
-                 >> ((2 - (i % 3)) * 8)) & 0xFF);      \
+#define CCL_WRITE_STRING(len) do {                             \
+  if (!destination)                                            \
+    {                                                          \
+      ccl->status = CCL_STAT_INVALID_CMD;                      \
+      goto ccl_error_handler;                                  \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      Bufbyte work[MAX_EMCHAR_LEN];                            \
+      for (i = 0; i < len; i++)                                        \
+       {                                                       \
+         int ch = (XINT (ccl_prog[ic + (i / 3)])               \
+                   >> ((2 - (i % 3)) * 8)) & 0xFF;             \
+         int bytes =                                           \
+           ( ch < ( conversion_mode == CCL_MODE_ENCODING ?     \
+                    256 : 128 ) ) ?                            \
+           simple_set_charptr_emchar (work, ch) :              \
+           non_ascii_set_charptr_emchar (work, ch);            \
+         Dynarr_add_many (destination, work, bytes);           \
+       }                                                       \
+    }                                                          \
 } while (0)
 
 /* Read one byte from the current input buffer into Rth register.  */
@@ -1838,7 +1848,7 @@ It returns the contents of write buffer as a string,
   outbuf = Dynarr_new (unsigned_char);
   ccl.last_block = NILP (contin);
   produced = ccl_driver (&ccl, XSTRING_DATA (str), outbuf,
-                        XSTRING_LENGTH (str), (int *)0, CCL_MODE_ENCODING);
+                        XSTRING_LENGTH (str), (int *)0, CCL_MODE_DECODING);
   for (i = 0; i < 8; i++)
     XVECTOR_DATA (status)[i] = make_int(ccl.reg[i]);
   XSETINT (XVECTOR_DATA (status)[8], ccl.ic);
index 5d216a7..b0a60fa 100644 (file)
@@ -267,7 +267,8 @@ non_ascii_valid_char_p (Emchar ch)
       if (f3 < 0x20)
        return 0;
 
-      if (f3 != 0x20 && f3 != 0x7F)
+      if (f3 != 0x20 && f3 != 0x7F && !(f2 >= MIN_CHAR_FIELD2_PRIVATE &&
+                                       f2 <= MAX_CHAR_FIELD2_PRIVATE))
        return 1;
 
       /*
@@ -276,6 +277,8 @@ non_ascii_valid_char_p (Emchar ch)
         FIELD2_TO_PRIVATE_LEADING_BYTE are the same.
         */
       charset = CHARSET_BY_LEADING_BYTE (f2 + FIELD2_TO_OFFICIAL_LEADING_BYTE);
+      if (EQ (charset, Qnil))
+       return 0;
       return (XCHARSET_CHARS (charset) == 96);
     }
   else
@@ -300,7 +303,8 @@ non_ascii_valid_char_p (Emchar ch)
        }
 #endif /* ENABLE_COMPOSITE_CHARS */
 
-      if (f2 != 0x20 && f2 != 0x7F && f3 != 0x20 && f3 != 0x7F)
+      if (f2 != 0x20 && f2 != 0x7F && f3 != 0x20 && f3 != 0x7F
+         && !(f1 >= MIN_CHAR_FIELD1_PRIVATE && f1 <= MAX_CHAR_FIELD1_PRIVATE))
        return 1;
 
       if (f1 <= MAX_CHAR_FIELD1_OFFICIAL)
@@ -310,6 +314,8 @@ non_ascii_valid_char_p (Emchar ch)
        charset =
          CHARSET_BY_LEADING_BYTE (f1 + FIELD1_TO_PRIVATE_LEADING_BYTE);
 
+      if (EQ (charset, Qnil))
+       return 0;
       return (XCHARSET_CHARS (charset) == 96);
     }
 }
index d46ebac..07f72df 100644 (file)
@@ -332,40 +332,48 @@ Boston, MA 02111-1307, USA.  */
 #define LEADING_BYTE_COMPOSITE         0x80 /* for a composite character */
 #define LEADING_BYTE_CONTROL_1         0x8F /* represent normal 80-9F */
 
-/** The following are for 1-byte characters in an official charset. **/
+/* Note the gap in each official charset can cause core dump
+   as first and last values are used to determine whether
+   charset is defined or not in non_ascii_valid_char_p */
 
-#define LEADING_BYTE_LATIN_ISO8859_1   0x81 /* Right half of ISO 8859-1 */
-#define LEADING_BYTE_LATIN_ISO8859_2   0x82 /* Right half of ISO 8859-2 */
-#define LEADING_BYTE_LATIN_ISO8859_3   0x83 /* Right half of ISO 8859-3 */
-#define LEADING_BYTE_LATIN_ISO8859_4   0x84 /* Right half of ISO 8859-4 */
-#define LEADING_BYTE_THAI_TIS620       0x85 /* TIS620-2533 */
-#define LEADING_BYTE_GREEK_ISO8859_7   0x86 /* Right half of ISO 8859-7 */
-#define LEADING_BYTE_ARABIC_ISO8859_6  0x87 /* Right half of ISO 8859-6 */
-#define LEADING_BYTE_HEBREW_ISO8859_8  0x88 /* Right half of ISO 8859-8 */
-#define LEADING_BYTE_KATAKANA_JISX0201 0x89 /* Right half of JIS X0201-1976 */
-#define LEADING_BYTE_LATIN_JISX0201    0x8A /* Left  half of JIS X0201-1976 */
-#define LEADING_BYTE_CYRILLIC_ISO8859_5        0x8C /* Right half of ISO 8859-5 */
-#define LEADING_BYTE_LATIN_ISO8859_9   0x8D /* Right half of ISO 8859-9 */
+/** The following are for 1-byte characters in an official charset. **/
+enum LEADING_BYTE_OFFICIAL_1
+{
+  LEADING_BYTE_LATIN_ISO8859_1 = 0x81, /* Right half of ISO 8859-1 */
+  LEADING_BYTE_LATIN_ISO8859_2,   /* 0x82 Right half of ISO 8859-2 */
+  LEADING_BYTE_LATIN_ISO8859_3,   /* 0x83 Right half of ISO 8859-3 */
+  LEADING_BYTE_LATIN_ISO8859_4,   /* 0x84 Right half of ISO 8859-4 */
+  LEADING_BYTE_THAI_TIS620,       /* 0x85 TIS620-2533 */
+  LEADING_BYTE_GREEK_ISO8859_7,   /* 0x86 Right half of ISO 8859-7 */
+  LEADING_BYTE_ARABIC_ISO8859_6,  /* 0x87 Right half of ISO 8859-6 */
+  LEADING_BYTE_HEBREW_ISO8859_8,  /* 0x88 Right half of ISO 8859-8 */
+  LEADING_BYTE_KATAKANA_JISX0201, /* 0x89 Right half of JIS X0201-1976 */
+  LEADING_BYTE_LATIN_JISX0201,    /* 0x8A Left  half of JIS X0201-1976 */
+  LEADING_BYTE_CYRILLIC_ISO8859_5,/* 0x8B Right half of ISO 8859-5 */
+  LEADING_BYTE_LATIN_ISO8859_9    /* 0x8C Right half of ISO 8859-9 */
+                                  /* 0x8D unused */
+};
 
 #define MIN_LEADING_BYTE_OFFICIAL_1    LEADING_BYTE_LATIN_ISO8859_1
 #define MAX_LEADING_BYTE_OFFICIAL_1    LEADING_BYTE_LATIN_ISO8859_9
 
 /** The following are for 2-byte characters in an official charset. **/
-
-#define LEADING_BYTE_JAPANESE_JISX0208_1978 0x90/* Japanese JIS X0208-1978 */
-#define LEADING_BYTE_CHINESE_GB2312    0x91    /* Chinese Hanzi GB2312-1980 */
-#define LEADING_BYTE_JAPANESE_JISX0208 0x92    /* Japanese JIS X0208-1983 */
-#define LEADING_BYTE_KOREAN_KSC5601    0x93    /* Hangul KS C5601-1987 */
-#define LEADING_BYTE_JAPANESE_JISX0212 0x94    /* Japanese JIS X0212-1990 */
-#define LEADING_BYTE_CHINESE_CNS11643_1        0x95    /* Chinese CNS11643 Set 1 */
-#define LEADING_BYTE_CHINESE_CNS11643_2        0x96    /* Chinese CNS11643 Set 2 */
-#define LEADING_BYTE_CHINESE_BIG5_1    0x97    /* Big5 Level 1 */
-#define LEADING_BYTE_CHINESE_BIG5_2    0x98    /* Big5 Level 2 */
-                                    /* 0x99       unused */
-                                    /* 0x9A       unused */
-                                    /* 0x9B       unused */
-                                    /* 0x9C       unused */
-                                    /* 0x9D       unused */
+enum LEADING_BYTE_OFFICIAL_2
+{
+  LEADING_BYTE_JAPANESE_JISX0208_1978 = 0x90, /* Japanese JIS X0208-1978 */
+  LEADING_BYTE_CHINESE_GB2312,           /* 0x91 Chinese Hanzi GB2312-1980 */
+  LEADING_BYTE_JAPANESE_JISX0208,        /* 0x92 Japanese JIS X0208-1983 */
+  LEADING_BYTE_KOREAN_KSC5601,           /* 0x93 Hangul KS C5601-1987 */
+  LEADING_BYTE_JAPANESE_JISX0212,        /* 0x94 Japanese JIS X0212-1990 */
+  LEADING_BYTE_CHINESE_CNS11643_1,       /* 0x95 Chinese CNS11643 Set 1 */
+  LEADING_BYTE_CHINESE_CNS11643_2,       /* 0x96 Chinese CNS11643 Set 2 */
+  LEADING_BYTE_CHINESE_BIG5_1,           /* 0x97 Big5 Level 1 */
+  LEADING_BYTE_CHINESE_BIG5_2            /* 0x98 Big5 Level 2 */
+                                         /* 0x99 unused */
+                                         /* 0x9A unused */
+                                         /* 0x9B unused */
+                                         /* 0x9C unused */
+};
 
 #define MIN_LEADING_BYTE_OFFICIAL_2    LEADING_BYTE_JAPANESE_JISX0208_1978
 #define MAX_LEADING_BYTE_OFFICIAL_2    LEADING_BYTE_CHINESE_BIG5_2
index 54e06e1..ce16938 100644 (file)
--- a/src/nt.c
+++ b/src/nt.c
@@ -131,13 +131,13 @@ static struct passwd the_passwd =
   the_passwd_shell,
 };
 
-int 
+uid_t
 getuid () 
 { 
   return the_passwd.pw_uid;
 }
 
-int 
+uid_t 
 geteuid () 
 { 
   /* I could imagine arguing for checking to see whether the user is
@@ -146,20 +146,20 @@ geteuid ()
   return getuid (); 
 }
 
-int 
+gid_t
 getgid () 
 { 
   return the_passwd.pw_gid;
 }
 
-int 
+gid_t
 getegid () 
 { 
   return getgid ();
 }
 
 struct passwd *
-getpwuid (int uid)
+getpwuid (uid_t uid)
 {
   if (uid == the_passwd.pw_uid)
     return &the_passwd;
index 0b92984..2a61346 100644 (file)
@@ -705,7 +705,7 @@ nt_send_process (Lisp_Object proc, struct lstream* lstream)
 
   while (1)
     {
-      int writeret;
+      ssize_t writeret;
 
       chunklen = Lstream_read (lstream, chunkbuf, 128);
       if (chunklen <= 0)
index b4a612e..85539ed 100644 (file)
@@ -1142,7 +1142,7 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream)
 
       while (1)
        {
-         int writeret;
+         ssize_t writeret;
 
          chunklen = Lstream_read (lstream, chunkbuf, 512);
          if (chunklen <= 0)
index 9b73e80..4d20fad 100644 (file)
@@ -147,10 +147,10 @@ print_process (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
   else
     {
       int netp = network_connection_p (obj);
-      write_c_string (((netp) ? GETTEXT ("#<network connection ") :
+      write_c_string ((netp ? GETTEXT ("#<network connection ") :
                       GETTEXT ("#<process ")), printcharfun);
       print_internal (proc->name, printcharfun, 1);
-      write_c_string (((netp) ? " " : " pid "), printcharfun);
+      write_c_string ((netp ? " " : " pid "), printcharfun);
       print_internal (proc->pid, printcharfun, 1);
       write_c_string (" state:", printcharfun);
       print_internal (proc->status_symbol, printcharfun, 1);
index 06b78b3..5b8228c 100644 (file)
@@ -190,6 +190,27 @@ compare_runes (struct window *w, struct rune *crb, struct rune *drb)
   /* Do not compare the values of bufpos and endpos.  They do not
      affect the display characteristics. */
 
+  /* Note: (hanoi 6) spends 95% of its time in redisplay, and about
+     30% here. Not using bitfields for rune.type alone gives a redisplay
+     speed up of 10%.
+
+     #### In profile arcs run of a normal Gnus session this function
+     is run 6.76 million times, only to return 1 in 6.73 million of
+     those.
+
+     In addition a quick look GCC sparc assembly shows that GCC is not
+     doing a good job here.
+     1. The function is not inlined (too complicated?)
+     2. It seems to be reloading the crb and drb variables all the
+     time.
+     3. It doesn't seem to notice that the second half of these if's
+     are really a switch statement.
+
+     So I (JV) conjecture
+
+     #### It would really be worth it to arrange for this function to
+     be (almost) a single call to memcmp. */
+  
   if ((crb->findex != drb->findex) ||
       (WINDOW_FACE_CACHEL_DIRTY (w, drb->findex)))
     return 0;
index 96e2e92..f79847c 100644 (file)
@@ -91,6 +91,13 @@ typedef struct
    but control characters have two -- a ^ and a letter -- and other
    non-printing characters (those displayed in octal) have four. */
 
+/* WARNING! In compare_runes (one of the most heavily used functions)
+   two runes are compared. So please be careful with changes to this
+   structure. See comments in compare_runes.
+
+   #### This should really be made smaller.
+*/
+   
 typedef struct rune rune;
 struct rune
 {
@@ -105,10 +112,6 @@ struct rune
                                   each of the face properties in this
                                   particular window. */
 
-  short xpos;                  /* horizontal starting position in pixels */
-  short width;                 /* pixel width of rune */
-
-
   Bufpos bufpos;               /* buffer position this rune is displaying;
                                   for the modeline, the value here is a
                                   Charcount, but who's looking? */
@@ -116,11 +119,26 @@ struct rune
                                /* #### Chuck, what does it mean for a rune
                                   to cover a range of pos?  I don't get
                                   this. */
-  unsigned int cursor_type :3; /* is this rune covered by the cursor? */
-  unsigned int type :3;                /* type of rune object */
+                                /* #### This isn't used as an rvalue anywhere!
+                                   remove! */
+                                   
+  
+  short xpos;                  /* horizontal starting position in pixels */
+  short width;                 /* pixel width of rune */
+       
+  
+  unsigned char cursor_type;   /* is this rune covered by the cursor? */
+  unsigned char type;          /* type of rune object */
+                                /* We used to do bitfields here, but if I
+                                   (JV) count correctly that doesn't matter
+                                   for the size of the structure. All the bit
+                                   fiddling _does_ slow down redisplay by
+                                   about 10%. So don't do that */
 
   union                                /* Information specific to the type of rune */
   {
+    /* #### GLyps are are. Is it really necessary to waste 8 bytes on every
+       rune for that?! */
     /* DGLYPH */
     struct
     {
index 8168d5a..32783cf 100644 (file)
@@ -215,10 +215,15 @@ int kill (int pid, int sig);
 #define popen     _popen
 #define pclose    _pclose
 
+typedef int uid_t;
+typedef int gid_t;
+typedef int pid_t;
+typedef int ssize_t;
+
 /* Encapsulation of system calls */
 #ifndef DONT_ENCAPSULATE
 #define getpid sys_getpid
-int getpid (void);
+pid_t getpid (void);
 #endif
 
 #define DONT_USE_LITOUT
@@ -235,12 +240,12 @@ char *getwd (char *dir);
 void *sbrk (unsigned long increment);
 
 struct passwd;
-struct passwd *getpwuid (int uid);
+struct passwd *getpwuid (uid_t uid);
 struct passwd *getpwnam (const char *name);
-int getuid ();
-int geteuid ();
-int getgid (void);
-int getegid ();
+uid_t getuid (void);
+uid_t geteuid (void);
+gid_t getgid (void);
+gid_t getegid (void);
 #define _timeb timeb
 
 /* Stuff that gets set wrongly or otherwise */
index 50bf0d9..023e038 100644 (file)
@@ -281,10 +281,15 @@ int kill (int pid, int sig);
 
 #endif /* 0 */
 
+typedef int uid_t;
+typedef int gid_t;
+typedef int pid_t;
+typedef int ssize_t;
+
 /* Encapsulation of system calls */
 #ifndef DONT_ENCAPSULATE
 #define getpid sys_getpid
-int getpid (void);
+pid_t getpid (void);
 #endif
 
 /* Random global functions called everywhere. Implemented in nt.c */
@@ -299,12 +304,12 @@ char *getwd (char *dir);
 void *sbrk (unsigned long increment);
 
 struct passwd;
-struct passwd *getpwuid (int uid);
+struct passwd *getpwuid (uid_t uid);
 struct passwd *getpwnam (const char *name);
-int getuid ();
-int geteuid ();
-int getgid (void);
-int getegid ();
+uid_t getuid (void);
+uid_t geteuid (void);
+gid_t getgid (void);
+gid_t getegid (void);
 
 /* Setitimer is emulated */
 #define HAVE_SETITIMER
index 0260728..4a8786f 100644 (file)
@@ -45,6 +45,12 @@ Boston, MA 02111-1307, USA.  */
 # include <netdb.h>
 #endif
 
+#ifdef HAVE_ESD_SOUND
+extern int esd_play_sound_file (char *file, int vol);
+extern int esd_play_sound_data (unsigned char *data, size_t length, int vol);
+# define DEVICE_CONNECTED_TO_ESD_P(x) 1 /* FIXME: better check */
+#endif
+
 int bell_volume;
 int bell_inhibit_time;
 Lisp_Object Vsound_alist;
@@ -79,7 +85,8 @@ Windows the sound file must be in WAV format.
 {
   /* This function can call lisp */
   int vol;
-#if defined (HAVE_NATIVE_SOUND) || defined (HAVE_NAS_SOUND)
+#if defined (HAVE_NATIVE_SOUND) || defined (HAVE_NAS_SOUND) \
+       || defined (HAVE_ESD_SOUND)
   struct device *d = decode_device (device);
 #endif
   struct gcpro gcpro1;
@@ -126,6 +133,17 @@ Windows the sound file must be in WAV format.
     }
 #endif /* HAVE_NAS_SOUND */
 
+#ifdef HAVE_ESD_SOUND
+  if (DEVICE_CONNECTED_TO_ESD_P (d))
+    {
+      char *fileext;
+
+      GET_C_STRING_FILENAME_DATA_ALLOCA (file, fileext);
+      if (esd_play_sound_file (fileext, vol))
+       return Qnil;
+    }
+#endif /* HAVE_ESD_SOUND */
+
 #ifdef HAVE_NATIVE_SOUND
   if (NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d))
     {
@@ -302,6 +320,18 @@ See the variable `sound-alist'.
     }
 #endif /* HAVE_NAS_SOUND */
 
+#ifdef HAVE_ESD_SOUND
+  if (DEVICE_CONNECTED_TO_ESD_P (d) && STRINGP (sound))
+    {
+      Extbyte *soundext;
+      Extcount soundextlen;
+
+      GET_STRING_BINARY_DATA_ALLOCA (sound, soundext, soundextlen);
+      if (esd_play_sound_data (soundext, soundextlen, vol))
+       return Qnil;
+    }
+#endif /* HAVE_ESD_SOUND */
+
 #ifdef HAVE_NATIVE_SOUND
   if ((NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d))
       && STRINGP (sound))
index cb0e337..d94b992 100644 (file)
@@ -28,8 +28,8 @@ my ($myName, $srcdir);
 ($myName = $0) =~ s@.*/@@; my $usage ="
 Usage: $myName
 
-Generates header file fragments from the Emacs sources.
-";
+Generates header file fragments from the Emacs sources
+and writes them to stdout.\n";
 
 die $usage if @ARGV;
 
index 5fbcd26..7ae439d 100644 (file)
@@ -101,6 +101,7 @@ void syms_of_gui_x (void);
 void syms_of_gui (void);
 void syms_of_gutter (void);
 void syms_of_indent (void);
+void syms_of_input_method_xlib (void);
 void syms_of_intl (void);
 void syms_of_keymap (void);
 void syms_of_lread (void);
@@ -148,6 +149,7 @@ void syms_of_widget (void);
 void syms_of_window (void);
 void syms_of_xselect (void);
 void syms_of_eldap (void);
+void syms_of_gpmevent (void);
 
 /* Initialize the console types (dump-time but for reinit_). */
 
@@ -368,6 +370,7 @@ void reinit_vars_of_window (void);
 void vars_of_xselect (void);
 void reinit_vars_of_xselect (void);
 void vars_of_eldap (void);
+void vars_of_gpmevent (void);
 
 /* Initialize specifier variables (dump-time only). */
 
index 4792c2b..2e0dde9 100644 (file)
@@ -661,7 +661,7 @@ Optional argument BUFFER defaults to the current buffer.
   Bufpos stop;
   Emchar c;
   enum syntaxcode code;
-  int count;
+  EMACS_INT count;
   struct buffer *buf = decode_buffer (buffer, 0);
   struct Lisp_Char_Table *mirrortab = XCHAR_TABLE (buf->mirror_syntax_table);
 
@@ -1690,9 +1690,18 @@ Non-nil means `forward-word', etc., should treat escape chars part of words.
   no_quit_in_re_search = 0;
 }
 
+static void
+define_standard_syntax (CONST char *p, enum syntaxcode syn)
+{
+  for (; *p; p++)
+    Fput_char_table (make_char (*p), make_int (syn), Vstandard_syntax_table);
+}
+
 void
 complex_vars_of_syntax (void)
 {
+  Emchar i;
+  CONST char *p;
   /* Set this now, so first buffer creation can refer to it. */
   /* Make it nil before calling copy-syntax-table
      so that copy-syntax-table will know not to try to copy from garbage */
@@ -1704,68 +1713,31 @@ complex_vars_of_syntax (void)
                                                        Smax);
   staticpro (&Vsyntax_designator_chars_string);
 
-  fill_char_table (XCHAR_TABLE (Vstandard_syntax_table),
-                  make_int (Spunct));
-
-  {
-    Emchar i;
+  fill_char_table (XCHAR_TABLE (Vstandard_syntax_table), make_int (Spunct));
 
-    for (i = 0; i <= 32; i++)
-      Fput_char_table (make_char (i), make_int ((int) Swhitespace),
-                      Vstandard_syntax_table);
-    for (i = 127; i <= 159; i++)
-      Fput_char_table (make_char (i), make_int ((int) Swhitespace),
-                      Vstandard_syntax_table);
-
-    for (i = 'a'; i <= 'z'; i++)
-      Fput_char_table (make_char (i), make_int ((int) Sword),
-                      Vstandard_syntax_table);
-    for (i = 'A'; i <= 'Z'; i++)
-      Fput_char_table (make_char (i), make_int ((int) Sword),
-                      Vstandard_syntax_table);
-    for (i = '0'; i <= '9'; i++)
-      Fput_char_table (make_char (i), make_int ((int) Sword),
-                      Vstandard_syntax_table);
-    Fput_char_table (make_char ('$'), make_int ((int) Sword),
+  for (i = 0; i <= 32; i++)    /* Control 0 plus SPACE */
+    Fput_char_table (make_char (i), make_int (Swhitespace),
                     Vstandard_syntax_table);
-    Fput_char_table (make_char ('%'), make_int ((int) Sword),
+  for (i = 127; i <= 159; i++) /* DEL plus Control 1 */
+    Fput_char_table (make_char (i), make_int (Swhitespace),
                     Vstandard_syntax_table);
 
+  define_standard_syntax ("abcdefghijklmnopqrstuvwxyz"
+                         "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                         "0123456789"
+                         "$%", Sword);
+  define_standard_syntax ("\"", Sstring);
+  define_standard_syntax ("\\", Sescape);
+  define_standard_syntax ("_-+*/&|<>=", Ssymbol);
+  define_standard_syntax (".,;:?!#@~^'`", Spunct);
+
+  for (p = "()[]{}"; *p; p+=2)
     {
-      Fput_char_table (make_char ('('), Fcons (make_int ((int) Sopen),
-                                              make_char (')')),
-                      Vstandard_syntax_table);
-      Fput_char_table (make_char (')'), Fcons (make_int ((int) Sclose),
-                                              make_char ('(')),
-                      Vstandard_syntax_table);
-      Fput_char_table (make_char ('['), Fcons (make_int ((int) Sopen),
-                                              make_char (']')),
+      Fput_char_table (make_char (p[0]),
+                      Fcons (make_int (Sopen), make_char (p[1])),
                       Vstandard_syntax_table);
-      Fput_char_table (make_char (']'), Fcons (make_int ((int) Sclose),
-                                              make_char ('[')),
+      Fput_char_table (make_char (p[1]),
+                      Fcons (make_int (Sclose), make_char (p[0])),
                       Vstandard_syntax_table);
-      Fput_char_table (make_char ('{'), Fcons (make_int ((int) Sopen),
-                                              make_char ('}')),
-                      Vstandard_syntax_table);
-      Fput_char_table (make_char ('}'), Fcons (make_int ((int) Sclose),
-                                              make_char ('{')),
-                      Vstandard_syntax_table);
-    }
-
-    Fput_char_table (make_char ('"'), make_int ((int) Sstring),
-                    Vstandard_syntax_table);
-    Fput_char_table (make_char ('\\'), make_int ((int) Sescape),
-                    Vstandard_syntax_table);
-
-    {
-      CONST char *p;
-      for (p = "_-+*/&|<>="; *p; p++)
-       Fput_char_table (make_char (*p), make_int ((int) Ssymbol),
-                        Vstandard_syntax_table);
-
-      for (p = ".,;:?!#@~^'`"; *p; p++)
-       Fput_char_table (make_char (*p), make_int ((int) Spunct),
-                        Vstandard_syntax_table);
     }
-  }
 }
index 398eaca..ea912f0 100644 (file)
@@ -567,7 +567,7 @@ restore_signal_handlers (struct save_signal *saved_handlers)
 }
 
 #ifdef WINDOWSNT
-int
+pid_t
 sys_getpid (void)
 {
   return abs (getpid ());
@@ -2573,8 +2573,8 @@ mswindows_set_last_errno (void)
 
 /* Ben sez: read Dick Gabriel's essay about the Worse Is Better
    approach to programming and its connection to the silly
-   interruptible-system-call business.  To find it, look at
-   Jamie's home page (http://www.netscape.com/people/jwz). */
+   interruptible-system-call business.  To find it, look on
+   Jamie's home page (http://www.jwz.org/worse-is-better.html). */
 
 #ifdef ENCAPSULATE_OPEN
 int
@@ -2638,13 +2638,13 @@ interruptible_open (CONST char *path, int oflag, int mode)
 
 #ifdef ENCAPSULATE_CLOSE
 int
-sys_close (int fd)
+sys_close (int filedes)
 {
 #ifdef INTERRUPTIBLE_CLOSE
   int did_retry = 0;
   REGISTER int rtnval;
 
-  while ((rtnval = close (fd)) == -1
+  while ((rtnval = close (filedes)) == -1
         && (errno == EINTR))
     did_retry = 1;
 
@@ -2656,15 +2656,15 @@ sys_close (int fd)
 
   return rtnval;
 #else
-  return close (fd);
+  return close (filedes);
 #endif
 }
 #endif /* ENCAPSULATE_CLOSE */
 
-int
+ssize_t
 sys_read_1 (int fildes, void *buf, size_t nbyte, int allow_quit)
 {
-  int rtnval;
+  ssize_t rtnval;
 
   /* No harm in looping regardless of the INTERRUPTIBLE_IO setting. */
   while ((rtnval = read (fildes, buf, nbyte)) == -1
@@ -2677,24 +2677,23 @@ sys_read_1 (int fildes, void *buf, size_t nbyte, int allow_quit)
 }
 
 #ifdef ENCAPSULATE_READ
-int
+ssize_t
 sys_read (int fildes, void *buf, size_t nbyte)
 {
   return sys_read_1 (fildes, buf, nbyte, 0);
 }
 #endif /* ENCAPSULATE_READ */
 
-int
+ssize_t
 sys_write_1 (int fildes, CONST void *buf, size_t nbyte, int allow_quit)
 {
-  int rtnval;
-  int bytes_written = 0;
+  ssize_t bytes_written = 0;
   CONST char *b = (CONST char *) buf;
 
   /* No harm in looping regardless of the INTERRUPTIBLE_IO setting. */
   while (nbyte > 0)
     {
-      rtnval = write (fildes, b, nbyte);
+      ssize_t rtnval = write (fildes, b, nbyte);
 
       if (allow_quit)
        REALLY_QUIT;
@@ -2704,17 +2703,17 @@ sys_write_1 (int fildes, CONST void *buf, size_t nbyte, int allow_quit)
          if (errno == EINTR)
            continue;
          else
-            return (bytes_written ? bytes_written : -1);
+            return bytes_written ? bytes_written : -1;
        }
       b += rtnval;
       nbyte -= rtnval;
       bytes_written += rtnval;
     }
-  return (bytes_written);
+  return bytes_written;
 }
 
 #ifdef ENCAPSULATE_WRITE
-int
+ssize_t
 sys_write (int fildes, CONST void *buf, size_t nbyte)
 {
   return sys_write_1 (fildes, buf, nbyte, 0);
index 3f4a694..e421d79 100644 (file)
@@ -244,7 +244,7 @@ Boston, MA 02111-1307, USA.  */
    Other encapsulations are declared in the appropriate sys*.h file. */
 
 #ifdef ENCAPSULATE_READ
-int sys_read (int, void *, size_t);
+ssize_t sys_read (int, void *, size_t);
 #endif
 #if defined (ENCAPSULATE_READ) && !defined (DONT_ENCAPSULATE)
 # undef read
@@ -255,7 +255,7 @@ int sys_read (int, void *, size_t);
 #endif
 
 #ifdef ENCAPSULATE_WRITE
-int sys_write (int, CONST void *, size_t);
+ssize_t sys_write (int, CONST void *, size_t);
 #endif
 #if defined (ENCAPSULATE_WRITE) && !defined (DONT_ENCAPSULATE)
 # undef write
index b53f3f4..f9a6d5e 100644 (file)
@@ -22,7 +22,7 @@ Boston, MA 02111-1307, USA.  */
 /* Synched up with: Not in FSF. */
 
 /* Written by John Rose <john.rose@eng.sun.com>.
-   Heavily modified and cleaned up by Ben Wing <ben.wing@eng.sun.com>. */
+   Heavily modified and cleaned up by Ben Wing <ben@xemacs.org>. */
 
 #include <config.h>
 #include "lisp.h"
@@ -502,7 +502,7 @@ tt_state_symbol (Tt_state n)
 static Lisp_Object
 tt_build_string (char *s)
 {
-  return build_string ((s) ? s : "");
+  return build_string (s ? s : "");
 }
 
 static Lisp_Object
index 5c35ad8..0829572 100644 (file)
@@ -1,3 +1,11 @@
+1999-11-29  XEmacs Build Bot <builds@cvs.xemacs.org>
+
+       * XEmacs 21.2.22 is released
+
+1999-11-28  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.21 is released.
+
 1999-11-10  XEmacs Build Bot <builds@cvs.xemacs.org>
 
        * XEmacs 21.2.20 is released
index eb1b92f..602c7fd 100644 (file)
@@ -1,8 +1,10 @@
 #!/bin/sh
 
-cat README > /tmp/DropTest.txt
+TEMPDIR=/tmp
 
-cat > /tmp/DropTest.html <<EOF
+cat README > $TEMPDIR/DropTest.txt
+
+cat > $TEMPDIR/DropTest.html <<EOF
 <HTML>
 <HEAD>
 <TITLE>DropTest Page</TITLE>
@@ -14,7 +16,7 @@ Just a Test!
 </HTML>
 EOF
 
-cat > /tmp/DropTest.tex <<EOF
+cat > $TEMPDIR/DropTest.tex <<EOF
 \documentclass{article}
 
 \begin{document}
@@ -22,7 +24,7 @@ This is a DropTest!
 \end{document}
 EOF
 
-cat > /tmp/DropTest.xpm <<EOF
+cat > $TEMPDIR/DropTest.xpm <<EOF
 /* XPM */
 static char *test[] = {
 /* width height num_colors chars_per_pixel */
index 16dba19..2054ecc 100644 (file)
@@ -1,7 +1,7 @@
 ;; Copyright (C) 1998 Free Software Foundation, Inc.
 
-;; Author: Hrvoje Niksic <hniksic@srce.hr>
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Author: Hrvoje Niksic <hniksic@xemacs.org>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Created: 1998
 ;; Keywords: tests
 
index d8c680f..0159d5b 100644 (file)
@@ -1,7 +1,7 @@
 ;; Copyright (C) 1999 Free Software Foundation, Inc.
 
-;; Author: Hrvoje Niksic <hniksic@srce.hr>
-;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
+;; Author: Hrvoje Niksic <hniksic@xemacs.org>
+;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
 ;; Created: 1999
 ;; Keywords: tests
 
index af75a6c..b501d5e 100644 (file)
@@ -2,8 +2,8 @@
 emacs_is_beta=t
 emacs_major_version=21
 emacs_minor_version=2
-emacs_beta_version=20
-xemacs_codename="Yoko"
+emacs_beta_version=22
+xemacs_codename="Mercedes"
 infodock_major_version=4
 infodock_minor_version=0
 infodock_build_version=8