Sync up with r21-2-27.
authortomo <tomo>
Wed, 19 Jan 2000 11:12:54 +0000 (11:12 +0000)
committertomo <tomo>
Wed, 19 Jan 2000 11:12:54 +0000 (11:12 +0000)
198 files changed:
CHANGES-beta
ChangeLog
README.packages
config.guess
config.sub
configure
configure.in
configure.usage
etc/NEWS
etc/TUTORIAL.de
info/custom.info
info/emodules.info
info/info.info
info/internals.info
info/internals.info-3
info/internals.info-5
info/lispref.info
info/lispref.info-10
info/lispref.info-11
info/lispref.info-13
info/lispref.info-44
info/lispref.info-8
info/lispref.info-9
info/new-users-guide.info
info/new-users-guide.info-1
info/standards.info
info/standards.info-1
info/standards.info-2
info/standards.info-3
info/texinfo.info
info/texinfo.info-1
info/texinfo.info-10
info/texinfo.info-11
info/texinfo.info-12
info/texinfo.info-2
info/texinfo.info-3
info/texinfo.info-4
info/texinfo.info-5
info/texinfo.info-6
info/texinfo.info-7
info/texinfo.info-8
info/texinfo.info-9
info/xemacs-faq.info
info/xemacs-faq.info-1
info/xemacs-faq.info-2
info/xemacs-faq.info-3
info/xemacs-faq.info-4
info/xemacs-faq.info-5
info/xemacs.info
info/xemacs.info-1
info/xemacs.info-10
info/xemacs.info-11
info/xemacs.info-12
info/xemacs.info-13
info/xemacs.info-14
info/xemacs.info-15
info/xemacs.info-16
info/xemacs.info-17
info/xemacs.info-18
info/xemacs.info-19
info/xemacs.info-20
info/xemacs.info-21
info/xemacs.info-3
info/xemacs.info-4
info/xemacs.info-5
info/xemacs.info-6
info/xemacs.info-7
info/xemacs.info-8
info/xemacs.info-9
lib-src/ChangeLog
lib-src/Makefile.in.in
lib-src/b2m.c
lib-src/cvtmail.c
lib-src/digest-doc.c
lib-src/ellcc.c
lib-src/etags.c
lib-src/fakemail.c
lib-src/getopt.c
lib-src/getopt1.c
lib-src/gnuserv.h
lib-src/hexl.c
lib-src/make-docfile.c
lib-src/make-path.c
lib-src/movemail.c
lib-src/ootags.c
lib-src/pop.c
lib-src/profile.c
lib-src/sorted-doc.c
lib-src/wakeup.c
lib-src/yow.c
lisp/ChangeLog
lisp/about.el
lisp/autoload.el
lisp/cus-edit.el
lisp/dumped-lisp.el
lisp/files.el
lisp/gutter-items.el
lisp/hyper-apropos.el
lisp/info.el
lisp/menubar-items.el
lisp/minibuf.el
lisp/modeline.el
lisp/mule/mule-cmds.el
lisp/mule/mule-misc.el
lisp/process.el
lisp/startup.el
lwlib/ChangeLog
lwlib/config.h.in
lwlib/lwlib-Xaw.c
lwlib/lwlib-Xlw.c
lwlib/lwlib-Xm.c
lwlib/lwlib.c
man/ChangeLog
man/info.texi
man/internals/internals.texi
man/lispref/control.texi
man/lispref/debugging.texi
man/new-users-guide/new-users-guide.texi
man/xemacs-faq.texi
man/xemacs/custom.texi
man/xemacs/mini.texi
man/xemacs/regs.texi
man/xemacs/xemacs.texi
nt/ChangeLog
nt/config.h
nt/minitar.c
nt/minitar.mak
nt/xemacs.mak
src/ChangeLog
src/Makefile.in.in
src/alloc.c
src/bytecode.c
src/config.h.in
src/console-tty.c
src/dbxrc [deleted file]
src/depend
src/elhash.c
src/emacs.c
src/eval.c
src/event-Xt.c
src/event-msw.c
src/events.c
src/extents.c
src/extents.h
src/file-coding.c
src/file-coding.h
src/fns.c
src/frame.c
src/frame.h
src/gdbinit [deleted file]
src/glyphs-eimage.c
src/glyphs-msw.c
src/glyphs-widget.c
src/glyphs-x.c
src/glyphs.c
src/glyphs.h
src/gpmevent.c
src/gui.c
src/gutter.c
src/input-method-motif.c
src/insdel.c
src/keymap.c
src/libsst.c
src/lisp.h
src/md5.c
src/menubar-x.c
src/menubar.c
src/mule-ccl.c
src/mule-charset.c
src/mule-charset.h
src/ntheap.c
src/print.c
src/redisplay-output.c
src/redisplay.c
src/redisplay.h
src/s/aix3-2.h
src/s/cygwin32.h
src/s/windowsnt.h
src/scrollbar.c
src/specifier.h
src/symsinit.h
src/sysdep.c
src/sysfile.h
src/termcap.c
src/toolbar-x.c
src/toolbar.c
src/unexaix.c
src/unexalpha.c
src/unexec.c
src/unexfreebsd.c
src/unexhp9k3.c
src/unexmips.c
src/window.c
src/window.h
tests/ChangeLog
tests/automated/mule-tests.el
tests/glyph-test.el
version.sh

index 7a22198..d46ad3a 100644 (file)
@@ -1,3 +1,22 @@
+to 21.2.27 "Hera"
+-- Dynamic layout for widgets from Andy Piper
+-- config.sub, config.guess major upgrade, Marcus Thiessel
+-- gdbinit renamed to .gdbinit
+-- dbxrc renamed to .dbxrc
+-- Mail locking overhaul, Michael Sperber
+-- Info-visit-file can now be used non-interactively, Martin Buchholz
+-- FAQ updates, Sandra Wambold
+-- Document lisp-level error handling, Hrvoje Niksic
+-- Windows changes, Kirill Katsnelson
+-- Portable dumper ported to Windows, Kirill Katsnelson
+-- idlwave-mode added, Carsten Dominik
+-- Info changes, Yoshiki Hayashi and Didier Verna.
+-- Again support BSD/OS 2.0
+-- minibuf.* changes, Yoshiki Hayashi
+-- hyper-apropos changes, Yoshiki Hayashi
+-- buffers tab has its own face, Andy Piper
+-- modeline scrolling changes, Didier Verna
+
 to 21.2.26 "Millenium"
 -- Fix unpredictable results, perhaps even crashes, if using the
    `return from debugger feature' and errors in `eval' or `funcall'.
index dfc84eb..aa16740 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        * configure.in: Add new option `--with-utf-2000'; define `UTF2000'
        if it is specified.
 
+2000-01-18  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.27 is released.
+
+2000-01-15  Adrian Aichner  <aichner@ecf.teradyne.com>
+
+       * etc/TUTORIAL.de: Update copyright and fix typo.
+
+2000-01-14  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: Create a .dbxrc in the src directory, like .gdbinit.
+
+       * configure.in: Add `tests' symlink to make it easier to find
+       automated tests directory.
+
+2000-01-14  Andy Piper  <andy@xemacs.org>
+
+       * configure.in: for cygwin 1.0 we must pick up the mingw32 headers
+       before the cygwin headers.
+
+2000-01-08  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: 
+       - Allow find-tag to work in the build directory.
+       - rename src/gdbinit to src/.gdbinit, so that gdb can find it.
+       - Less verbose messages when creating .sbinit, .gdbinit, TAGS.
+
+2000-01-07  Marcus Thiessel <marcus@xemacs.org>
+
+       * config.sub: Upgrade to 1.169, imported from autoconf's CVS
+       * config.guess: Upgrade to 1.158, imported from autoconf's CVS
+
+2000-01-03  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
+
+       * etc/NEWS: Document mail spool locking overhaul.
+
+       * configure.usage (--mail-locking):
+       * configure.in: Handle --mail-locking option correctly in
+       preparation for the movemail locking overhaul.
+
+2000-01-05  Daniel Pittman  <daniel@danann.net>
+
+       * configure.in (Installation): Report which Athena header/library
+       combo is being used.
+
 1999-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.26 is released.
index dbbc6c5..d618862 100644 (file)
@@ -9,8 +9,10 @@ Real Real Quickstart FAQ
 ------------------------
 
 Q. Do I need to have the packages to compile XEmacs?
-A. If you want to compile with MULE, you need the mule-base package installed.
-   Otherwise, no package is required before compilation.
+A. No, XEmacs will build and install just fine without any packages
+   installed.  However, only the most basic editing functions will be
+   available with no packages installed, so installing packages is an
+   essential part of making your installed XEmacs _useful_.
 
 Q. I really liked the old way that packages were bundled and do not
    want to mess with packages at all.
@@ -20,11 +22,11 @@ A. You can grab all the packages at once like you used to with old
 A note of caution
 -----------------
 
-The XEmacs package system is still in its infancy. Please expect a few 
-minor hurdles on the way. Also neither the interface nor the structure is 
+The XEmacs package system is still in its infancy. Please expect a few
+minor hurdles on the way. Also neither the interface nor the structure is
 set in stone. The XEmacs maintainers reserve the right to sacrifice
 backwards compatibility as quirks are worked out over the coming
-releases. 
+releases.
 
 Some Package Theory
 -------------------
@@ -35,7 +37,7 @@ have been unbundled. They have been replaced by the package system.
 Each elisp add-on (or groups of them when they are small) now comes
 in its own tarball that contains a small search hierarchy.
 
-You select just the ones you need. Install them by untarring them into 
+You select just the ones you need. Install them by untarring them into
 the right place. On startup XEmacs will find them, set up the load
 path correctly, install autoloads, etc, etc.
 
@@ -60,7 +62,7 @@ Where to get the packages
 -------------------------
 
 Packages are available from ftp://ftp.xemacs.org/pub/xemacs/packages
-and its mirror.
+and its mirrors.
 
 How to install the packages
 ---------------------------
@@ -73,14 +75,14 @@ The Sumo Tarball
 ----------------
 
 Those with little time, cheap connections and plenty of disk space can
-install all packages at once using the sumo tarballs.
+install all the packages at once using the sumo tarballs.
 Download the file
 
-xemacs-sumo-<date>.tar.gz 
+xemacs-sumo.tar.gz
 
 For an XEmacs compiled with Mule you also need
 
-xemacs-mule-sumo-<date>.tar.gz
+xemacs-mule-sumo.tar.gz
 
 N.B. They are called 'Sumo Tarballs' for good reason. They are
 currently about 15MB and 2.3MB (gzipped) respectively.
@@ -120,8 +122,8 @@ XEmacs comes with some tools to make the periodic updating and
 installing easier. It will notice if new packages or versions are
 available and will fetch them from the ftp site.
 
-Unfortunately this requires that a few packages are already in place. 
-You will have to install them by hand as above or use a SUMO tarball. 
+Unfortunately this requires that a few packages are already in place.
+You will have to install them by hand as above or use a SUMO tarball.
 This requirement will hopefully go away in the future. The packages
 you need are:
 
@@ -132,7 +134,7 @@ and optionally:
 
    mailcrypt    - If you have PGP installed and want to verify the
                   signature of the index file.
-   mule-base    - Needed if you want to compile XEmacs with MULE.
+   mule-base    - Needed if you want to use XEmacs with MULE.
 
 After installing these by hand, you can start XEmacs. (It is a good
 idea to use 'xemacs -vanilla' here as your startup files might need
@@ -164,7 +166,7 @@ things now moved to packages.)
 -  When you are finished choosing packages, invoke
    'Packages->Install/Remove Select' from the menu or type 'x' to
    begin installing packages.
-    
+
 After Installation
 ------------------
 
@@ -173,7 +175,7 @@ New packages can only be used by XEmacs after a restart.
 Note to MULE users
 ------------------
 
-Unlike all other packages the mule-base package is used at build/dump 
+Unlike all other packages the mule-base package is used at build/dump
 time. This means that you need this available before compiling XEmacs
 with MULE. Also it is a good idea to keep packages that are
 MULE-only separate by putting them in the mule-packages hierarchy.
@@ -200,7 +202,7 @@ Upgrading/Removing Packages
 ---------------------------
 
 As the exact files and their locations contained in a package may
-change it is recommend to remove a package first before installing a
+change it is recommended to remove a package first before installing a
 new version. In order to facilitate removal each package contains an
 pgkinfo/MANIFEST.pkgname file which list all the files belong to the
 package. M-x package-admin-delete-binary-package RET can be used to
@@ -230,7 +232,7 @@ Finding the right packages
 
 If you want to find out which package contains the functionality you
 are looking for, use M-x package-get-package-provider, and give it a
-symbol that is likely to be in that package.  eg, if some code you
-want to use has a (require 'thingatpt) in it, try doing
+symbol that is likely to be in that package.  For example, if some
+code you want to use has a (require 'thingatpt) in it, try doing
 M-x package-get-package-provider RET thingatpt , which will return
 something like: (fsf-compat "1.06").
index 7f2ead9..e1b5871 100755 (executable)
@@ -1,6 +1,7 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
+#   Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -23,6 +24,7 @@
 
 # Written by Per Bothner <bothner@cygnus.com>.
 # The master version of this file is at the FSF in /home/gd/gnu/lib.
+# Please send patches to <autoconf-patches@gnu.org>.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # (but try to keep the structure clean).
 #
 
+# Use $HOST_CC if defined. $CC may point to a cross-compiler
+if test x"$CC_FOR_BUILD" = x; then
+  if test x"$HOST_CC" != x; then
+    CC_FOR_BUILD="$HOST_CC"
+  else
+    if test x"$CC" != x; then
+      CC_FOR_BUILD="$CC"
+    else
+      CC_FOR_BUILD=cc
+    fi
+  fi
+fi
+
+
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 8/24/94.)
 if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
@@ -46,7 +62,8 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
 
 # Note: order is significant - the case branches are not exclusive.
 
@@ -59,7 +76,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       cat <<EOF >dummy.s
+       cat <<EOF >$dummy.s
        .globl main
        .ent main
 main:
@@ -76,9 +93,9 @@ main:
        ret \$31,(\$26),1
        .end main
 EOF
-       ${CC-cc} dummy.s -o dummy 2>/dev/null
+       $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
        if test "$?" = 0 ; then
-               ./dummy
+               ./$dummy
                case "$?" in
                        7)
                                UNAME_MACHINE="alpha"
@@ -97,8 +114,14 @@ EOF
                                ;;
                esac
        fi
-       rm -f dummy.s dummy
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
+       rm -f $dummy.s $dummy
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
        exit 0 ;;
     21064:Windows_NT:50:3)
        echo alpha-dec-winnt3.5
@@ -133,6 +156,9 @@ EOF
     wgrisc:OpenBSD:*:*)
        echo mipsel-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit 0 ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
        exit 0;;
@@ -142,7 +168,7 @@ EOF
     SR2?01:HI-UX/MPP:*:*)
        echo hppa1.1-hitachi-hiuxmpp
        exit 0;;
-    Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
        # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
        if test "`(/bin/universe) 2>/dev/null`" = att ; then
                echo pyramid-pyramid-sysv3
@@ -150,7 +176,7 @@ EOF
                echo pyramid-pyramid-bsd
        fi
        exit 0 ;;
-    NILE:*:*:dcosx)
+    NILE*:*:*:dcosx)
        echo pyramid-pyramid-svr4
        exit 0 ;;
     sun4H:SunOS:5.*:*)
@@ -201,6 +227,32 @@ EOF
     atari*:OpenBSD:*:*)
        echo m68k-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor 
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
     sun3*:NetBSD:*:*)
        echo m68k-sun-netbsd${UNAME_RELEASE}
        exit 0 ;;
@@ -234,12 +286,16 @@ EOF
     VAX*:ULTRIX*:*:*)
        echo vax-dec-ultrix${UNAME_RELEASE}
        exit 0 ;;
-    2020:CLIX:*:*)
+    2020:CLIX:*:* | 2430:CLIX:*:*)
        echo clipper-intergraph-clix${UNAME_RELEASE}
        exit 0 ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
-       sed 's/^        //' << EOF >dummy.c
-       int main (argc, argv) int argc; char **argv; {
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
        #if defined (host_mips) && defined (MIPSEB)
        #if defined (SYSTYPE_SYSV)
          printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
@@ -254,10 +310,10 @@ EOF
          exit (-1);
        }
 EOF
-       ${CC-cc} dummy.c -o dummy \
-         && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-         && rm dummy.c dummy && exit 0
-       rm -f dummy.c dummy
+       $CC_FOR_BUILD $dummy.c -o $dummy \
+         && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+         && rm $dummy.c $dummy && exit 0
+       rm -f $dummy.c $dummy
        echo mips-mips-riscos${UNAME_RELEASE}
        exit 0 ;;
     Night_Hawk:Power_UNIX:*:*)
@@ -275,15 +331,18 @@ EOF
     AViiON:dgux:*:*)
         # DG/UX returns AViiON for all architectures
         UNAME_PROCESSOR=`/usr/bin/uname -p`
-        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
-       if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
-            -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
                echo m88k-dg-dgux${UNAME_RELEASE}
-       else
+           else
                echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
        fi
-        else echo i586-dg-dgux${UNAME_RELEASE}
-        fi
        exit 0 ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
        echo m88k-dolphin-sysv3
@@ -309,7 +368,7 @@ EOF
        exit 0 ;;
     *:AIX:2:3)
        if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               sed 's/^                //' << EOF >dummy.c
+               sed 's/^                //' << EOF >$dummy.c
                #include <sys/systemcfg.h>
 
                main()
@@ -320,8 +379,8 @@ EOF
                        exit(0);
                        }
 EOF
-               ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
-               rm -f dummy.c dummy
+               $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+               rm -f $dummy.c $dummy
                echo rs6000-ibm-aix3.2.5
        elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
                echo rs6000-ibm-aix3.2.4
@@ -369,24 +428,24 @@ EOF
            9000/31? )            HP_ARCH=m68000 ;;
            9000/[34]?? )         HP_ARCH=m68k ;;
            9000/[678][0-9][0-9])
-              sed 's/^              //' << EOF >dummy.c
+              sed 's/^              //' << EOF >$dummy.c
               #include <stdlib.h>
               #include <unistd.h>
-              
+
               int main ()
               {
               #if defined(_SC_KERNEL_BITS)
                   long bits = sysconf(_SC_KERNEL_BITS);
-              #endif 
+              #endif
                   long cpu  = sysconf (_SC_CPU_VERSION);
-              
-                  switch (cpu) 
+
+                  switch (cpu)
                {
                case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
                case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0: 
+               case CPU_PA_RISC2_0:
               #if defined(_SC_KERNEL_BITS)
-                   switch (bits) 
+                   switch (bits)
                        {
                        case 64: puts ("hppa2.0w"); break;
                        case 32: puts ("hppa2.0n"); break;
@@ -394,20 +453,20 @@ EOF
                        } break;
               #else  /* !defined(_SC_KERNEL_BITS) */
                    puts ("hppa2.0"); break;
-              #endif 
+              #endif
                default: puts ("hppa1.0"); break;
                }
                   exit (0);
               }
 EOF
-       ${CC-cc} dummy.c -o dummy && HP_ARCH=`./dummy`
-       rm -f dummy.c dummy
+       (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+       rm -f $dummy.c $dummy
        esac
        HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
        echo ${HP_ARCH}-hp-hpux${HPUX_REV}
        exit 0 ;;
     3050*:HI-UX:*:*)
-       sed 's/^        //' << EOF >dummy.c
+       sed 's/^        //' << EOF >$dummy.c
        #include <unistd.h>
        int
        main ()
@@ -432,8 +491,8 @@ EOF
          exit (0);
        }
 EOF
-       ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
-       rm -f dummy.c dummy
+       $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+       rm -f $dummy.c $dummy
        echo unknown-hitachi-hiuxwe2
        exit 0 ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
@@ -442,6 +501,9 @@ EOF
     9000/8??:4.3bsd:*:*)
        echo hppa1.0-hp-bsd
        exit 0 ;;
+    *9??*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit 0 ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
        echo hppa1.1-hp-osf
        exit 0 ;;
@@ -458,6 +520,9 @@ EOF
     parisc*:Lites*:*:*)
        echo hppa1.1-hp-lites
        exit 0 ;;
+    hppa*:OpenBSD:*:*)
+       echo hppa-unknown-openbsd
+       exit 0 ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
        echo c1-convex-bsd
         exit 0 ;;
@@ -490,11 +555,14 @@ EOF
     CRAY*TS:*:*:*)
        echo t90-cray-unicos${UNAME_RELEASE}
        exit 0 ;;
+    CRAY*T3E:*:*:*)
+       echo alpha-cray-unicosmk${UNAME_RELEASE}
+       exit 0 ;;
     CRAY-2:*:*:*)
        echo cray2-cray-unicos
         exit 0 ;;
     F300:UNIX_System_V:*:*)
-        FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
         echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
         exit 0 ;;
@@ -507,29 +575,47 @@ EOF
     hp300:OpenBSD:*:*)
        echo m68k-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
+    i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit 0 ;;
     sparc*:BSD/OS:*:*)
        echo sparc-unknown-bsdi${UNAME_RELEASE}
        exit 0 ;;
-    i?86:BSD/386:*:* | *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
        exit 0 ;;
     *:FreeBSD:*:*)
+       if test -x /usr/bin/objformat; then
+           if test "elf" = "`/usr/bin/objformat`"; then
+               echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
+               exit 0
+           fi
+       fi
        echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
        exit 0 ;;
     *:NetBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
        exit 0 ;;
     *:OpenBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
        exit 0 ;;
     i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin32
+       echo ${UNAME_MACHINE}-pc-cygwin
        exit 0 ;;
     i*:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i386-pc-interix
+       exit 0 ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit 0 ;;
     p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin32
+       echo powerpcle-unknown-cygwin
        exit 0 ;;
     prep*:SunOS:5.*:*)
        echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -538,15 +624,11 @@ EOF
        echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
        exit 0 ;;
     *:Linux:*:*)
-       # uname on the ARM produces all sorts of strangeness, and we need to
-       # filter it out.
-       case "$UNAME_MACHINE" in
-         arm* | sa110*)              UNAME_MACHINE="arm" ;;
-       esac
 
        # The BFD linker knows what the default object file format is, so
-       # first see if it will tell us.
-       ld_help_string=`ld --help 2>&1`
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       ld_help_string=`cd /; ld --help 2>&1`
        ld_supported_emulations=`echo $ld_help_string \
                         | sed -ne '/supported emulations:/!d
                                    s/[         ][      ]*/ /g
@@ -554,16 +636,74 @@ EOF
                                    s/ .*//
                                    p'`
         case "$ld_supported_emulations" in
-         i?86linux)  echo "${UNAME_MACHINE}-pc-linux-gnuaout"      ; exit 0 ;;
-         i?86coff)   echo "${UNAME_MACHINE}-pc-linux-gnucoff"      ; exit 0 ;;
-         sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-         armlinux)   echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-         m68klinux)  echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
-         elf32ppc)   echo "powerpc-unknown-linux-gnu"              ; exit 0 ;;
+         *ia64)
+               echo "${UNAME_MACHINE}-unknown-linux"
+               exit 0
+               ;;
+         i?86linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit 0
+               ;;
+         i?86coff)
+               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+               exit 0
+               ;;
+         sparclinux)
+               echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
+               exit 0
+               ;;
+         armlinux)
+               echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
+               exit 0
+               ;;
+         elf32arm*)
+               echo "${UNAME_MACHINE}-unknown-linux-gnu"
+               exit 0
+               ;;
+         armelf_linux*)
+               echo "${UNAME_MACHINE}-unknown-linux-gnu"
+               exit 0
+               ;;
+         m68klinux)
+               echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
+               exit 0
+               ;;
+         elf32ppc)
+               # Determine Lib Version
+               cat >$dummy.c <<EOF
+#include <features.h>
+#if defined(__GLIBC__)
+extern char __libc_version[];
+extern char __libc_release[];
+#endif
+main(argc, argv)
+     int argc;
+     char *argv[];
+{
+#if defined(__GLIBC__)
+  printf("%s %s\n", __libc_version, __libc_release);
+#else
+  printf("unkown\n");
+#endif
+  return 0;
+}
+EOF
+               LIBC=""
+               $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
+               if test "$?" = 0 ; then
+                       ./$dummy | grep 1\.99 > /dev/null
+                       if test "$?" = 0 ; then
+                               LIBC="libc1"
+                       fi
+               fi      
+               rm -f $dummy.c $dummy
+               echo powerpc-unknown-linux-gnu${LIBC}
+               exit 0
+               ;;
        esac
 
        if test "${UNAME_MACHINE}" = "alpha" ; then
-               sed 's/^        //'  <<EOF >dummy.s
+               sed 's/^        //'  <<EOF >$dummy.s
                .globl main
                .ent main
        main:
@@ -581,9 +721,9 @@ EOF
                .end main
 EOF
                LIBC=""
-               ${CC-cc} dummy.s -o dummy 2>/dev/null
+               $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
                if test "$?" = 0 ; then
-                       ./dummy
+                       ./$dummy
                        case "$?" in
                        7)
                                UNAME_MACHINE="alpha"
@@ -600,22 +740,23 @@ EOF
                        16)
                                UNAME_MACHINE="alphaev6"
                                ;;
-                       esac    
+                       esac
 
-                       objdump --private-headers dummy | \
+                       objdump --private-headers $dummy | \
                          grep ld.so.1 > /dev/null
                        if test "$?" = 0 ; then
                                LIBC="libc1"
                        fi
-               fi      
-               rm -f dummy.s dummy
+               fi
+               rm -f $dummy.s $dummy
                echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
        elif test "${UNAME_MACHINE}" = "mips" ; then
-         cat >dummy.c <<EOF
-main(argc, argv)
-     int argc;
-     char *argv[];
-{
+         cat >$dummy.c <<EOF
+#ifdef __cplusplus
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
 #ifdef __MIPSEB__
   printf ("%s-unknown-linux-gnu\n", argv[1]);
 #endif
@@ -625,8 +766,8 @@ main(argc, argv)
   return 0;
 }
 EOF
-         ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
-         rm -f dummy.c dummy
+         $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
+         rm -f $dummy.c $dummy
        else
          # Either a pre-BFD a.out linker (linux-gnuoldld)
          # or one that does not give us useful --help.
@@ -645,12 +786,13 @@ EOF
            ;;
          esac
          # Determine whether the default compiler is a.out or elf
-         cat >dummy.c <<EOF
+         cat >$dummy.c <<EOF
 #include <features.h>
-main(argc, argv)
-     int argc;
-     char *argv[];
-{
+#ifdef __cplusplus
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
 #ifdef __ELF__
 # ifdef __GLIBC__
 #  if __GLIBC__ >= 2
@@ -667,8 +809,8 @@ main(argc, argv)
   return 0;
 }
 EOF
-         ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
-         rm -f dummy.c dummy
+         $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
+         rm -f $dummy.c $dummy
        fi ;;
 # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
 # are messed up and put the nodename in both sysname and nodename.
@@ -684,10 +826,20 @@ EOF
        echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
        exit 0 ;;
     i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
        if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit 0 ;;
+    i?86:*:5:7*)
+        # Fixed at (any) Pentium or better
+        UNAME_MACHINE=i586
+        if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
+           echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
        else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+           echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
        fi
        exit 0 ;;
     i?86:*:3.2:*)
@@ -699,18 +851,15 @@ EOF
                (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
                (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
                        && UNAME_MACHINE=i586
+               (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
                echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
        else
                echo ${UNAME_MACHINE}-pc-sysv32
        fi
        exit 0 ;;
-    i?86:UnixWare:*:*)
-       if /bin/uname -X 2>/dev/null >/dev/null ; then
-         (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
-           && UNAME_MACHINE=i586
-       fi
-       echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
-       exit 0 ;;
     pc:*:*:*)
         # uname -m prints for DJGPP always 'pc', but it prints nothing about
         # the processor, so we play safe by assuming i386.
@@ -752,7 +901,7 @@ EOF
     mc68030:UNIX_System_V:4.*:*)
        echo m68k-atari-sysv4
        exit 0 ;;
-    i?86:LynxOS:2.*:*)
+    i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
        echo i386-unknown-lynxos${UNAME_RELEASE}
        exit 0 ;;
     TSUNAMI:LynxOS:2.*:*)
@@ -764,6 +913,9 @@ EOF
     SM[BE]S:UNIX_SV:*:*)
        echo mips-dde-sysv${UNAME_RELEASE}
        exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
     RM*:SINIX-*:*:*)
        echo mips-sni-sysv4
        exit 0 ;;
@@ -794,7 +946,7 @@ EOF
     news*:NEWS-OS:*:6*)
        echo mips-sony-newsos6
        exit 0 ;;
-    R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
        if [ -d /usr/nec ]; then
                echo mips-nec-sysv${UNAME_RELEASE}
        else
@@ -810,12 +962,27 @@ EOF
     BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
        echo i586-pc-beos
        exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit 0 ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit 0 ;;
+    *:QNX:*:4*)
+       echo i386-qnx-qnx${UNAME_VERSION}
+       exit 0 ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
 
-cat >dummy.c <<EOF
+cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
 # include <sys/types.h>
 # include <sys/utsname.h>
@@ -853,7 +1020,10 @@ main ()
 #endif
   int version;
   version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
   exit (0);
 #endif
 
@@ -913,8 +1083,8 @@ main ()
 }
 EOF
 
-${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
-rm -f dummy.c dummy
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
 
 # Apollos put the system type in the environment.
 
index f791166..28426bb 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Configuration validation subroutine script, version 1.1.
-#   Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
+#   Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
 # can handle that machine.  It does not imply ALL GNU software can.
@@ -98,11 +98,21 @@ case $os in
                os=
                basic_machine=$1
                ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
        -hiux*)
                os=-hiuxwe2
                ;;
        -sco5)
-               os=sco3.2v5
+               os=-sco3.2v5
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
        -sco4)
@@ -121,6 +131,9 @@ case $os in
                os=-sco3.2v2
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
        -isc)
                os=-isc2.2
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -143,22 +156,33 @@ case $os in
        -psos*)
                os=-psos
                ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
 esac
 
 # Decode aliases for certain CPU-COMPANY combinations.
 case $basic_machine in
        # Recognize the basic CPU types without company name.
        # Some are omitted here because they have special meanings below.
-       tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
+       tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
                | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
-               | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
-               | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
-               | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
-               | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
-               | mipstx39 | mipstx39el \
-               | sparc | sparclet | sparclite | sparc64 | v850)
+               | 580 | i960 | h8300 \
+               | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
+               | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
+               | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
+               | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
+               | mips64orion | mips64orionel | mipstx39 | mipstx39el \
+               | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
+               | mips64vr5000 | miprs64vr5000el | mcore \
+               | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
+               | thumb | d10v | fr30)
                basic_machine=$basic_machine-unknown
                ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
+               ;;
+
        # We use `pc' rather than `unknown'
        # because (1) that's what they normally are, and
        # (2) the word "unknown" tends to confuse beginning users.
@@ -171,27 +195,45 @@ case $basic_machine in
                exit 1
                ;;
        # Recognize the basic CPU types with company name.
-       vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
+       # FIXME: clean up the formatting here.
+       vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
              | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
              | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
-             | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
-             | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
-             | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
-             | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
+             | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
+             | xmp-* | ymp-* \
+             | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
+             | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
+             | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
+             | clipper-* | orion-* \
              | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
-             | sparc64-* | mips64-* | mipsel-* \
-             | mips64el-* | mips64orion-* | mips64orionel-*  \
-             | mipstx39-* | mipstx39el-* \
-             | f301-*)
+             | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
+             | mips64el-* | mips64orion-* | mips64orionel-* \
+             | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
+             | mipstx39-* | mipstx39el-* | mcore-* \
+             | f301-* | armv*-* | t3e-* \
+             | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
+             | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* )
                ;;
        # Recognize the various machine names and aliases which stand
        # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
        3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
                basic_machine=m68000-att
                ;;
        3b*)
                basic_machine=we32k-att
                ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
        alliant | fx80)
                basic_machine=fx80-alliant
                ;;
@@ -221,6 +263,10 @@ case $basic_machine in
                basic_machine=m68k-apollo
                os=-sysv
                ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
        aux)
                basic_machine=m68k-apple
                os=-aux
@@ -297,6 +343,10 @@ case $basic_machine in
        encore | umax | mmax)
                basic_machine=ns32k-encore
                ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
        fx2800)
                basic_machine=i860-alliant
                ;;
@@ -315,6 +365,14 @@ case $basic_machine in
                basic_machine=h8300-hitachi
                os=-hms
                ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
        harris)
                basic_machine=m88k-harris
                os=-sysv3
@@ -330,13 +388,30 @@ case $basic_machine in
                basic_machine=m68k-hp
                os=-hpux
                ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
        hp9k2[0-9][0-9] | hp9k31[0-9])
                basic_machine=m68000-hp
                ;;
        hp9k3[2-9][0-9])
                basic_machine=m68k-hp
                ;;
-       hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
                basic_machine=hppa1.1-hp
                ;;
        hp9k8[0-9][0-9] | hp8[0-9][0-9])
@@ -345,9 +420,16 @@ case $basic_machine in
        hppa-next)
                os=-nextstep3
                ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
        i370-ibm* | ibm*)
                basic_machine=i370-ibm
-               os=-mvs
                ;;
 # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
        i[34567]86v32)
@@ -366,6 +448,25 @@ case $basic_machine in
                basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
                os=-solaris2
                ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       i386-go32 | go32)
+               basic_machine=i386-unknown
+               os=-go32
+               ;;
+       i386-mingw32 | mingw32)
+               basic_machine=i386-unknown
+               os=-mingw32
+               ;;
+       i386-qnx | qnx)
+               basic_machine=i386-qnx
+               ;;
        iris | iris4d)
                basic_machine=mips-sgi
                case $os in
@@ -394,6 +495,10 @@ case $basic_machine in
        miniframe)
                basic_machine=m68000-convergent
                ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
        mipsel*-linux*)
                basic_machine=mipsel-unknown
                os=-linux-gnu
@@ -408,10 +513,30 @@ case $basic_machine in
        mips3*)
                basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
                ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       msdos)
+               basic_machine=i386-unknown
+               os=-msdos
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
        ncr3000)
                basic_machine=i486-ncr
                os=-sysv4
                ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
        news | news700 | news800 | news900)
                basic_machine=m68k-sony
                os=-newsos
@@ -424,6 +549,10 @@ case $basic_machine in
                basic_machine=mips-sony
                os=-newsos
                ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
        next | m*-next )
                basic_machine=m68k-next
                case $os in
@@ -449,9 +578,25 @@ case $basic_machine in
                basic_machine=i960-intel
                os=-nindy
                ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
        np1)
                basic_machine=np1-gould
                ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
        pa-hitachi)
                basic_machine=hppa1.1-hitachi
                os=-hiuxwe2
@@ -469,19 +614,19 @@ case $basic_machine in
         pc532 | pc532-*)
                basic_machine=ns32k-pc532
                ;;
-       pentium | p5 | k5 | nexen)
+       pentium | p5 | k5 | k6 | nexen)
                basic_machine=i586-pc
                ;;
-       pentiumpro | p6 | k6 | 6x86)
+       pentiumpro | p6 | 6x86)
                basic_machine=i686-pc
                ;;
        pentiumii | pentium2)
                basic_machine=i786-pc
                ;;
-       pentium-* | p5-* | k5-* | nexen-*)
+       pentium-* | p5-* | k5-* | k6-* | nexen-*)
                basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
-       pentiumpro-* | p6-* | k6-* | 6x86-*)
+       pentiumpro-* | p6-* | 6x86-*)
                basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
        pentiumii-* | pentium2-*)
@@ -505,12 +650,20 @@ case $basic_machine in
        ps2)
                basic_machine=i386-ibm
                ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
        rm[46]00)
                basic_machine=mips-siemens
                ;;
        rtpc | rtpc-*)
                basic_machine=romp-ibm
                ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
        sequent)
                basic_machine=i386-sequent
                ;;
@@ -518,6 +671,10 @@ case $basic_machine in
                basic_machine=sh-hitachi
                os=-hms
                ;;
+       sparclite-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
        sps7)
                basic_machine=m68k-bull
                os=-sysv2
@@ -525,6 +682,13 @@ case $basic_machine in
        spur)
                basic_machine=spur-unknown
                ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
        sun2)
                basic_machine=m68000-sun
                ;;
@@ -569,6 +733,10 @@ case $basic_machine in
                basic_machine=i386-sequent
                os=-dynix
                ;;
+       t3e)
+               basic_machine=t3e-cray
+               os=-unicos
+               ;;
        tx39)
                basic_machine=mipstx39-unknown
                ;;
@@ -586,6 +754,10 @@ case $basic_machine in
                basic_machine=a29k-nyu
                os=-sym1
                ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
        vaxv)
                basic_machine=vax-dec
                os=-sysv
@@ -609,6 +781,14 @@ case $basic_machine in
                basic_machine=a29k-wrs
                os=-vxworks
                ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
        xmp)
                basic_machine=xmp-cray
                os=-unicos
@@ -616,6 +796,10 @@ case $basic_machine in
         xps | xps100)
                basic_machine=xps100-honeywell
                ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
        none)
                basic_machine=none-none
                os=-none
@@ -623,6 +807,15 @@ case $basic_machine in
 
 # Here we handle the default manufacturer of certain CPU types.  It is in
 # some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
        mips)
                if [ x$os = x-linux-gnu ]; then
                        basic_machine=mips-unknown
@@ -645,7 +838,7 @@ case $basic_machine in
        we32k)
                basic_machine=we32k-att
                ;;
-       sparc)
+       sparc | sparcv9)
                basic_machine=sparc-sun
                ;;
         cydra)
@@ -657,6 +850,16 @@ case $basic_machine in
        orion105)
                basic_machine=clipper-highlevel
                ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       c4x*)
+               basic_machine=c4x-none
+               os=-coff
+               ;;
        *)
                echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
                exit 1
@@ -710,13 +913,21 @@ case $os in
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
-             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -uxpv* | -beos*)
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+             | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
        -linux*)
                os=`echo $os | sed -e 's|linux|linux-gnu|'`
                ;;
@@ -726,6 +937,9 @@ case $os in
        -sunos6*)
                os=`echo $os | sed -e 's|sunos6|solaris3|'`
                ;;
+       -opened*)
+               os=-openedition
+               ;;
        -osfrose*)
                os=-osfrose
                ;;
@@ -741,6 +955,9 @@ case $os in
        -acis*)
                os=-aos
                ;;
+       -386bsd)
+               os=-bsd
+               ;;
        -ctix* | -uts*)
                os=-sysv
                ;;
@@ -760,6 +977,9 @@ case $os in
        -oss*)
                os=-sysv3
                ;;
+        -qnx)
+               os=-qnx4
+               ;;
        -svr4)
                os=-sysv4
                ;;
@@ -772,9 +992,18 @@ case $os in
        # This must come after -sysvr4.
        -sysv*)
                ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
        -xenix)
                os=-xenix
                ;;
+        -*mint | -*MiNT)
+               os=-mint
+               ;;
        -none)
                ;;
        *)
@@ -800,6 +1029,9 @@ case $basic_machine in
        *-acorn)
                os=-riscix1.2
                ;;
+       arm*-rebel)
+               os=-linux
+               ;;
        arm*-semi)
                os=-aout
                ;;
@@ -821,6 +1053,15 @@ case $basic_machine in
                # default.
                # os=-sunos4
                ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
        *-tti)  # must be before sparc entry or we get the wrong os.
                os=-sysv3
                ;;
@@ -833,6 +1074,15 @@ case $basic_machine in
        *-ibm)
                os=-aix
                ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
        *-hp)
                os=-hpux
                ;;
@@ -896,6 +1146,18 @@ case $basic_machine in
        f301-fujitsu)
                os=-uxpv
                ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
        *)
                os=-none
                ;;
@@ -917,9 +1179,15 @@ case $basic_machine in
                        -aix*)
                                vendor=ibm
                                ;;
+                       -beos*)
+                               vendor=be
+                               ;;
                        -hpux*)
                                vendor=hp
                                ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
                        -hiux*)
                                vendor=hitachi
                                ;;
@@ -935,7 +1203,7 @@ case $basic_machine in
                        -genix*)
                                vendor=ns
                                ;;
-                       -mvs*)
+                       -mvs* | -opened*)
                                vendor=ibm
                                ;;
                        -ptx*)
@@ -947,6 +1215,15 @@ case $basic_machine in
                        -aux*)
                                vendor=apple
                                ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -*MiNT)
+                               vendor=atari
+                               ;;
                esac
                basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
                ;;
index 2f6aca0..fbc135d 100755 (executable)
--- a/configure
+++ b/configure
@@ -517,10 +517,11 @@ echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
          case "$val" in
            lockf )     val=lockf ;;
            flock )     val=flock ;;
-           file )      val=file  ;;
+           file | dot ) val=file  ;;
+           locking )   val=locking  ;;
            * ) (echo "$progname: Usage error:"
 echo " " "The \`--$optname' option must have one of these values:
-  \`lockf', \`flock', or \`file'."
+  \`lockf', \`flock', \`file', \`locking', or \`mmdf'."
 echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
          esac
           eval "$opt=\"$val\""
@@ -832,7 +833,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:836: checking whether ln -s works" >&5
+echo "configure:837: checking whether ln -s works" >&5
 
 rm -f conftestdata
 if ln -s X conftestdata 2>/dev/null
@@ -850,7 +851,7 @@ else
 fi
 
 
-for dir in lisp etc man info; do
+for dir in lisp etc man info tests; do
   if test ! -d "$dir" ; then
     echo Making symbolic link to "$srcdir/$dir"
     ${LN_S} "$srcdir/$dir" "$dir"
@@ -1077,7 +1078,7 @@ EOF
 
 
 echo $ac_n "checking "host system type"""... $ac_c" 1>&6
-echo "configure:1081: checking "host system type"" >&5
+echo "configure:1082: 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/'`
@@ -1571,7 +1572,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:1575: checking for $ac_word" >&5
+echo "configure:1576: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1598,7 +1599,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:1602: checking for $ac_word" >&5
+echo "configure:1603: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1646,7 +1647,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:1650: checking for $ac_word" >&5
+echo "configure:1651: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1675,7 +1676,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1679: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1680: 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'
@@ -1688,12 +1689,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1692 "configure"
+#line 1693 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1698: \"$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
@@ -1721,19 +1722,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:1725: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1726: 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:1730: checking whether we are using GNU C" >&5
+echo "configure:1731: 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:1737: \"$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:1738: \"$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
@@ -1751,7 +1752,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:1755: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1756: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1784,7 +1785,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:1788: checking for $ac_word" >&5
+echo "configure:1789: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1811,7 +1812,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:1815: checking for $ac_word" >&5
+echo "configure:1816: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1859,7 +1860,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:1863: checking for $ac_word" >&5
+echo "configure:1864: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1888,7 +1889,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1892: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1893: 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'
@@ -1901,12 +1902,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1905 "configure"
+#line 1906 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1911: \"$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
@@ -1934,19 +1935,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:1938: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1939: 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:1943: checking whether we are using GNU C" >&5
+echo "configure:1944: 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:1950: \"$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:1951: \"$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
@@ -1964,7 +1965,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:1968: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1969: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1997,7 +1998,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:2001: checking for $ac_word" >&5
+echo "configure:2002: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2024,7 +2025,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:2028: checking for $ac_word" >&5
+echo "configure:2029: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2072,7 +2073,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:2076: checking for $ac_word" >&5
+echo "configure:2077: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2101,7 +2102,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2105: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2106: 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'
@@ -2114,12 +2115,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 2118 "configure"
+#line 2119 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2124: \"$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
@@ -2147,19 +2148,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:2151: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2152: 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:2156: checking whether we are using GNU C" >&5
+echo "configure:2157: 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:2163: \"$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:2164: \"$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
@@ -2177,7 +2178,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:2181: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2182: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -2214,7 +2215,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:2218: checking how to run the C preprocessor" >&5
+echo "configure:2219: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2227,13 +2228,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 2231 "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:2237: \"$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
   :
@@ -2244,13 +2245,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2248 "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:2254: \"$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
   :
@@ -2261,13 +2262,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2265 "configure"
+#line 2266 "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:2271: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2272: \"$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
   :
@@ -2292,9 +2293,9 @@ echo "$ac_t""$CPP" 1>&6
 
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:2296: checking for AIX" >&5
+echo "configure:2297: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2298 "configure"
+#line 2299 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -2321,9 +2322,9 @@ rm -f conftest*
 
 
 echo $ac_n "checking for GNU libc""... $ac_c" 1>&6
-echo "configure:2325: checking for GNU libc" >&5
+echo "configure:2326: checking for GNU libc" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2327 "configure"
+#line 2328 "configure"
 #include "confdefs.h"
 #include <features.h>
 int main() {
@@ -2335,7 +2336,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_glibc=yes
 else
@@ -2357,7 +2358,7 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 2361 "configure"
+#line 2362 "configure"
 #include "confdefs.h"
 int main () {
 #if defined __SUNPRO_C
@@ -2369,7 +2370,7 @@ return 0;
 #endif
 }
 EOF
-if { (eval echo configure:2373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:2374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -2542,6 +2543,12 @@ configure___ mail_use_lockf=yes
 configure___ mail_use_lockf=no
 #endif
 
+#ifdef MAIL_USE_LOCKING
+configure___ mail_use_locking=yes
+#else
+configure___ mail_use_locking=no
+#endif
+
 #ifdef HAVE_WIN32_PROCESSES
 configure___ win32_processes=yes
 #else
@@ -2559,6 +2566,12 @@ rm $tempcname
 test "$extra_verbose" = "yes" && \
   for var in libs_machine libs_system libs_termcap libs_standard   objects_machine objects_system c_switch_machine c_switch_system   ld_switch_machine ld_switch_system unexec ld_switch_shared   ld lib_gcc ld_text_start_addr start_files ordinary_link   have_terminfo mail_use_flock mail_use_lockf; do eval "echo \"$var = '\$$var'\""; done && echo ""
 
+case "$opsys" in mingw*) mingw_include=`eval "gcc -print-file-name=libc.a"` ;
+       mingw_include=`eval "dirname $mingw_include"` ;
+       mingw_include="-I$mingw_include/../include/mingw32" ;
+       c_switch_system="$c_switch_system $mingw_include" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"$mingw_include\" to \$c_switch_system"; fi ;;
+esac
+
 test "$ordinary_link" = "no" -a -z "$libs_standard" && libs_standard="-lc"
 
 test "$__DECC" = "yes" && c_switch_site="$c_switch_site -std" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"-std\" to \$c_switch_site"; fi
@@ -2643,7 +2656,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:2647: checking for dynodump" >&5
+echo "configure:2660: checking for dynodump" >&5
 if test "$unexec" != "unexsol2.o"; then
   echo "$ac_t""no" 1>&6
 else
@@ -2681,12 +2694,12 @@ if test "$unexec" = "unexaix.o"; then
   done
   
 echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6
-echo "configure:2685: checking for terminateAndUnload in -lC" >&5
+echo "configure:2698: 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 2690 "configure"
+#line 2703 "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
@@ -2697,7 +2710,7 @@ int main() {
 terminateAndUnload()
 ; return 0; }
 EOF
-if { (eval echo configure:2701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2714: \"$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
@@ -2801,7 +2814,7 @@ fi
 
 if test "$add_runtime_path" = "yes"; then
       echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6
-echo "configure:2805: checking "for runtime libraries flag"" >&5
+echo "configure:2818: checking "for runtime libraries flag"" >&5
   case "$opsys" in
     sol2 ) dash_r="-R" ;;
     decosf* | linux* | irix*) dash_r="-rpath " ;;
@@ -2823,14 +2836,14 @@ if test "$GCC" = "yes"; then
   done
 fi
         cat > conftest.$ac_ext <<EOF
-#line 2827 "configure"
+#line 2840 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   dash_r="$try_dash_r"
 else
@@ -2932,10 +2945,10 @@ else
 fi
 after_morecore_hook_exists=yes
 echo $ac_n "checking for malloc_get_state""... $ac_c" 1>&6
-echo "configure:2936: checking for malloc_get_state" >&5
+echo "configure:2949: checking for malloc_get_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2939 "configure"
+#line 2952 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_get_state(); below.  */
@@ -2958,7 +2971,7 @@ malloc_get_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2975: \"$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
@@ -2978,10 +2991,10 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6
-echo "configure:2982: checking for malloc_set_state" >&5
+echo "configure:2995: checking for malloc_set_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2985 "configure"
+#line 2998 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_set_state(); below.  */
@@ -3004,7 +3017,7 @@ malloc_set_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3008: \"$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*
   eval "ac_cv_func_malloc_set_state=yes"
 else
@@ -3024,16 +3037,16 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6
-echo "configure:3028: checking whether __after_morecore_hook exists" >&5
+echo "configure:3041: checking whether __after_morecore_hook exists" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3030 "configure"
+#line 3043 "configure"
 #include "confdefs.h"
 extern void (* __after_morecore_hook)();
 int main() {
 __after_morecore_hook = 0
 ; return 0; }
 EOF
-if { (eval echo configure:3037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3050: \"$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
@@ -3092,7 +3105,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:3096: checking for $ac_word" >&5
+echo "configure:3109: checking for $ac_word" >&5
 
 if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3147,7 +3160,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:3151: checking for a BSD compatible install" >&5
+echo "configure:3164: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 
   IFS="${IFS=  }"; ac_save_IFS="$IFS"; IFS=":"
@@ -3201,7 +3214,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:3205: checking for $ac_word" >&5
+echo "configure:3218: checking for $ac_word" >&5
 
 if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -3233,15 +3246,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:3237: checking for $ac_hdr" >&5
+echo "configure:3250: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3240 "configure"
+#line 3253 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3245: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3258: \"$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*
@@ -3274,15 +3287,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:3278: checking for $ac_hdr" >&5
+echo "configure:3291: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3281 "configure"
+#line 3294 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3286: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3299: \"$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*
@@ -3315,15 +3328,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:3319: checking for $ac_hdr" >&5
+echo "configure:3332: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3322 "configure"
+#line 3335 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3327: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3340: \"$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*
@@ -3353,10 +3366,10 @@ fi
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:3357: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3370: checking for sys/wait.h that is POSIX.1 compatible" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3360 "configure"
+#line 3373 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -3372,7 +3385,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:3376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -3396,10 +3409,10 @@ EOF
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3400: checking for ANSI C header files" >&5
+echo "configure:3413: checking for ANSI C header files" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3403 "configure"
+#line 3416 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3407,7 +3420,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:3411: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3424: \"$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*
@@ -3424,7 +3437,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 3428 "configure"
+#line 3441 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3442,7 +3455,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 3446 "configure"
+#line 3459 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3460,7 +3473,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 3464 "configure"
+#line 3477 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3471,7 +3484,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:3488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -3497,10 +3510,10 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3501: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3514: checking whether time.h and sys/time.h may both be included" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3504 "configure"
+#line 3517 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -3509,7 +3522,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:3513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3526: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -3533,10 +3546,10 @@ EOF
 fi
 
 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:3537: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:3550: checking for sys_siglist declaration in signal.h or unistd.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3540 "configure"
+#line 3553 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3548,7 +3561,7 @@ int main() {
 char *msg = *(sys_siglist + 1);
 ; return 0; }
 EOF
-if { (eval echo configure:3552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_decl_sys_siglist=yes
 else
@@ -3573,9 +3586,9 @@ fi
 
 
 echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6
-echo "configure:3577: checking for struct utimbuf" >&5
+echo "configure:3590: checking for struct utimbuf" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3579 "configure"
+#line 3592 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3594,7 +3607,7 @@ int main() {
 static struct utimbuf x; x.actime = x.modtime;
 ; return 0; }
 EOF
-if { (eval echo configure:3598: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3611: \"$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
@@ -3614,10 +3627,10 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3618: checking return type of signal handlers" >&5
+echo "configure:3631: checking return type of signal handlers" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3621 "configure"
+#line 3634 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3634,7 +3647,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:3638: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -3656,10 +3669,10 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3660: checking for size_t" >&5
+echo "configure:3673: checking for size_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3663 "configure"
+#line 3676 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3690,10 +3703,10 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3694: checking for pid_t" >&5
+echo "configure:3707: checking for pid_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3697 "configure"
+#line 3710 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3724,10 +3737,10 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3728: checking for uid_t in sys/types.h" >&5
+echo "configure:3741: checking for uid_t in sys/types.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3731 "configure"
+#line 3744 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -3763,10 +3776,10 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:3767: checking for mode_t" >&5
+echo "configure:3780: checking for mode_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3770 "configure"
+#line 3783 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3797,10 +3810,10 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3801: checking for off_t" >&5
+echo "configure:3814: checking for off_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3804 "configure"
+#line 3817 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3831,10 +3844,10 @@ EOF
 fi
 
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3835: checking for ssize_t" >&5
+echo "configure:3848: checking for ssize_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3838 "configure"
+#line 3851 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3866,9 +3879,9 @@ fi
 
 
 echo $ac_n "checking for struct timeval""... $ac_c" 1>&6
-echo "configure:3870: checking for struct timeval" >&5
+echo "configure:3883: checking for struct timeval" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3872 "configure"
+#line 3885 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3884,7 +3897,7 @@ int main() {
 static struct timeval x; x.tv_sec = x.tv_usec;
 ; return 0; }
 EOF
-if { (eval echo configure:3888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
   HAVE_TIMEVAL=yes
@@ -3906,10 +3919,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:3910: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:3923: checking whether struct tm is in sys/time.h or time.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3913 "configure"
+#line 3926 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
@@ -3917,7 +3930,7 @@ int main() {
 struct tm *tp; tp->tm_sec;
 ; return 0; }
 EOF
-if { (eval echo configure:3921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3934: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm=time.h
 else
@@ -3941,10 +3954,10 @@ EOF
 fi
 
 echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:3945: checking for tm_zone in struct tm" >&5
+echo "configure:3958: checking for tm_zone in struct tm" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3948 "configure"
+#line 3961 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -3952,7 +3965,7 @@ int main() {
 struct tm tm; tm.tm_zone;
 ; return 0; }
 EOF
-if { (eval echo configure:3956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_zone=yes
 else
@@ -3975,10 +3988,10 @@ EOF
 
 else
   echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:3979: checking for tzname" >&5
+echo "configure:3992: checking for tzname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3982 "configure"
+#line 3995 "configure"
 #include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
@@ -3988,7 +4001,7 @@ int main() {
 atoi(*tzname);
 ; return 0; }
 EOF
-if { (eval echo configure:3992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_var_tzname=yes
 else
@@ -4014,10 +4027,10 @@ fi
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4018: checking for working const" >&5
+echo "configure:4031: checking for working const" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4021 "configure"
+#line 4034 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4066,7 +4079,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:4070: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4091,7 +4104,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:4095: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:4108: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 
 cat > conftestmake <<\EOF
@@ -4116,12 +4129,12 @@ fi
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4120: checking whether byte ordering is bigendian" >&5
+echo "configure:4133: 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 4125 "configure"
+#line 4138 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4132,11 +4145,11 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4136: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4149: \"$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 4140 "configure"
+#line 4153 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4147,7 +4160,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -4164,7 +4177,7 @@ fi
 rm -f conftest*
 if test $ac_cv_c_bigendian = unknown; then
 cat > conftest.$ac_ext <<EOF
-#line 4168 "configure"
+#line 4181 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -4177,7 +4190,7 @@ main () {
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:4181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_bigendian=no
 else
@@ -4204,10 +4217,10 @@ fi
 
 
 echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4208: checking size of short" >&5
+echo "configure:4221: checking size of short" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4211 "configure"
+#line 4224 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4218,7 +4231,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -4246,10 +4259,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:4250: checking size of int" >&5
+echo "configure:4263: checking size of int" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4253 "configure"
+#line 4266 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4260,7 +4273,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -4282,10 +4295,10 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4286: checking size of long" >&5
+echo "configure:4299: checking size of long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4289 "configure"
+#line 4302 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4296,7 +4309,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -4318,10 +4331,10 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4322: checking size of long long" >&5
+echo "configure:4335: checking size of long long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4325 "configure"
+#line 4338 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4332,7 +4345,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4349: \"$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
@@ -4354,10 +4367,10 @@ EOF
 
 
 echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4358: checking size of void *" >&5
+echo "configure:4371: checking size of void *" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4361 "configure"
+#line 4374 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4368,7 +4381,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4385: \"$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
@@ -4391,7 +4404,7 @@ EOF
 
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:4395: checking for long file names" >&5
+echo "configure:4408: 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:
@@ -4437,10 +4450,10 @@ fi
 
 
 echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:4441: checking for sin" >&5
+echo "configure:4454: checking for sin" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4444 "configure"
+#line 4457 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char sin(); below.  */
@@ -4463,7 +4476,7 @@ sin();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4480: \"$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
@@ -4481,12 +4494,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:4485: checking for sin in -lm" >&5
+echo "configure:4498: 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 4490 "configure"
+#line 4503 "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
@@ -4497,7 +4510,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:4501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4514: \"$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
@@ -4541,14 +4554,14 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4545 "configure"
+#line 4558 "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:4552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4565: \"$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
 rm -f conftest*
 
 echo "checking type of mail spool file locking" 1>&6
-echo "configure:4569: checking type of mail spool file locking" >&5
+echo "configure:4582: checking type of mail spool file locking" >&5
+for ac_func in lockf flock
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4586: checking for $ac_func" >&5
+
+cat > conftest.$ac_ext <<EOF
+#line 4589 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4612: \"$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
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  { test "$extra_verbose" = "yes" && cat << EOF
+    Defining $ac_tr_func
+EOF
+cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+}
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
 test -z "$mail_locking" -a "$mail_use_flock" = "yes" && mail_locking=flock
 test -z "$mail_locking" -a "$mail_use_lockf" = "yes" && mail_locking=lockf
+test -z "$mail_locking" -a "$mail_use_locking" = "yes" && mail_locking=locking
 if   test "$mail_locking" = "lockf"; then { test "$extra_verbose" = "yes" && cat << \EOF
-    Defining REAL_MAIL_USE_LOCKF
+    Defining MAIL_LOCK_LOCKF
 EOF
 cat >> confdefs.h <<\EOF
-#define REAL_MAIL_USE_LOCKF 1
+#define MAIL_LOCK_LOCKF 1
 EOF
 }
 
 elif test "$mail_locking" = "flock"; then { test "$extra_verbose" = "yes" && cat << \EOF
-    Defining REAL_MAIL_USE_FLOCK
+    Defining MAIL_LOCK_FLOCK
 EOF
 cat >> confdefs.h <<\EOF
-#define REAL_MAIL_USE_FLOCK 1
+#define MAIL_LOCK_FLOCK 1
+EOF
+}
+
+elif test "$mail_locking" = "locking"; then { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining MAIL_LOCK_LOCKING
+EOF
+cat >> confdefs.h <<\EOF
+#define MAIL_LOCK_LOCKING 1
+EOF
+}
+
+else mail_locking="dot-locking"; { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining MAIL_LOCK_DOT
+EOF
+cat >> confdefs.h <<\EOF
+#define MAIL_LOCK_DOT 1
 EOF
 }
 
-else mail_locking="dot-locking"
 fi
+test "$mail_locking" = "lockf" -a "$ac_cv_func_lockf" != "yes" && \
+  { echo "Error:" "lockf mail locking requested but not available." >&2; exit 1; }
+test "$mail_locking" = "flock" -a "$ac_cv_func_flock" != "yes" && \
+  { echo "Error:" "flock mail locking requested but not available." >&2; exit 1; }
+test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \
+  { echo "Error:" "locking mail locking requested but not available." >&2; exit 1; }
 
 case "$opsys" in decosf*)
   
 echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6
-echo "configure:4594: checking for cma_open in -lpthreads" >&5
+echo "configure:4685: 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 4599 "configure"
+#line 4690 "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
@@ -4606,7 +4697,7 @@ int main() {
 cma_open()
 ; return 0; }
 EOF
-if { (eval echo configure:4610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4701: \"$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
@@ -4642,7 +4733,7 @@ fi
 esac
 
 echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6
-echo "configure:4646: checking whether the -xildoff compiler flag is required" >&5
+echo "configure:4737: 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;
@@ -4653,7 +4744,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:4657: checking for \"-z ignore\" linker flag" >&5
+echo "configure:4748: 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 ;;
@@ -4663,7 +4754,7 @@ fi
 
 
 echo "checking "for specified window system"" 1>&6
-echo "configure:4667: checking "for specified window system"" >&5
+echo "configure:4758: checking "for specified window system"" >&5
 
 if test "$with_x11" != "no"; then
     test "$x_includes $x_libraries" != "NONE NONE" && \
@@ -4696,7 +4787,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:4700: checking for X" >&5
+echo "configure:4791: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -4756,12 +4847,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 4760 "configure"
+#line 4851 "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:4765: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4856: \"$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*
@@ -4830,14 +4921,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 4834 "configure"
+#line 4925 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:4841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4932: \"$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.
@@ -4946,17 +5037,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:4950: checking whether -R must be followed by a space" >&5
+echo "configure:5041: 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 4953 "configure"
+#line 5044 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -4972,14 +5063,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 4976 "configure"
+#line 5067 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -5015,12 +5106,12 @@ ac_cv_lib_dnet_dnet_ntoa=no
 else
 
 echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:5019: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:5110: 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 5024 "configure"
+#line 5115 "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
@@ -5031,7 +5122,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5126: \"$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
@@ -5055,12 +5146,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:5059: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:5150: 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 5064 "configure"
+#line 5155 "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
@@ -5071,7 +5162,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5166: \"$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
@@ -5100,10 +5191,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:5104: checking for gethostbyname" >&5
+echo "configure:5195: checking for gethostbyname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5107 "configure"
+#line 5198 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -5126,7 +5217,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5221: \"$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
@@ -5147,12 +5238,12 @@ fi
     if test $ac_cv_func_gethostbyname = no; then
       
 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:5151: checking for gethostbyname in -lnsl" >&5
+echo "configure:5242: 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 5156 "configure"
+#line 5247 "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
@@ -5163,7 +5254,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:5167: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5258: \"$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
@@ -5193,10 +5284,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:5197: checking for connect" >&5
+echo "configure:5288: checking for connect" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5200 "configure"
+#line 5291 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -5219,7 +5310,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5314: \"$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
@@ -5242,12 +5333,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:5246: checking "$xe_msg_checking"" >&5
+echo "configure:5337: 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 5251 "configure"
+#line 5342 "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
@@ -5258,7 +5349,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:5262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5353: \"$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
@@ -5282,10 +5373,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:5286: checking for remove" >&5
+echo "configure:5377: checking for remove" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5289 "configure"
+#line 5380 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -5308,7 +5399,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5403: \"$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
@@ -5329,12 +5420,12 @@ fi
     if test $ac_cv_func_remove = no; then
       
 echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:5333: checking for remove in -lposix" >&5
+echo "configure:5424: 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 5338 "configure"
+#line 5429 "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
@@ -5345,7 +5436,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:5349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5440: \"$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
@@ -5369,10 +5460,10 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:5373: checking for shmat" >&5
+echo "configure:5464: checking for shmat" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5376 "configure"
+#line 5467 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -5395,7 +5486,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5490: \"$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
@@ -5416,12 +5507,12 @@ fi
     if test $ac_cv_func_shmat = no; then
       
 echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:5420: checking for shmat in -lipc" >&5
+echo "configure:5511: 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 5425 "configure"
+#line 5516 "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
@@ -5432,7 +5523,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:5436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5527: \"$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
@@ -5468,12 +5559,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:5472: checking "$xe_msg_checking"" >&5
+echo "configure:5563: 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 5477 "configure"
+#line 5568 "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
@@ -5484,7 +5575,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:5488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5579: \"$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
@@ -5653,7 +5744,7 @@ EOF
 
 
     echo "checking for X defines extracted by xmkmf" 1>&6
-echo "configure:5657: checking for X defines extracted by xmkmf" >&5
+echo "configure:5748: checking for X defines extracted by xmkmf" >&5
   rm -fr conftestdir
   if mkdir conftestdir; then
     cd conftestdir
@@ -5685,15 +5776,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:5689: checking for X11/Intrinsic.h" >&5
+echo "configure:5780: checking for X11/Intrinsic.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5692 "configure"
+#line 5783 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5788: \"$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*
@@ -5717,12 +5808,12 @@ fi
 
       
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:5721: checking for XOpenDisplay in -lX11" >&5
+echo "configure:5812: 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 5726 "configure"
+#line 5817 "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
@@ -5733,7 +5824,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5828: \"$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
@@ -5758,12 +5849,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:5762: checking "$xe_msg_checking"" >&5
+echo "configure:5853: 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 5767 "configure"
+#line 5858 "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
@@ -5774,7 +5865,7 @@ int main() {
 XGetFontProperty()
 ; return 0; }
 EOF
-if { (eval echo configure:5778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5869: \"$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
@@ -5801,12 +5892,12 @@ fi
 
     
 echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6
-echo "configure:5805: checking for XShapeSelectInput in -lXext" >&5
+echo "configure:5896: 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 5810 "configure"
+#line 5901 "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
@@ -5817,7 +5908,7 @@ int main() {
 XShapeSelectInput()
 ; return 0; }
 EOF
-if { (eval echo configure:5821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5912: \"$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
@@ -5840,12 +5931,12 @@ fi
 
     
 echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6
-echo "configure:5844: checking for XtOpenDisplay in -lXt" >&5
+echo "configure:5935: 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 5849 "configure"
+#line 5940 "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
@@ -5856,7 +5947,7 @@ int main() {
 XtOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5951: \"$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
@@ -5879,14 +5970,14 @@ fi
 
 
   echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6
-echo "configure:5883: checking the version of X11 being used" >&5
+echo "configure:5974: checking the version of X11 being used" >&5
   cat > conftest.$ac_ext <<EOF
-#line 5885 "configure"
+#line 5976 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
     int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }
 EOF
-if { (eval echo configure:5890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:5981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest foobar; x11_release=$?
 else
@@ -5911,15 +6002,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5915: checking for $ac_hdr" >&5
+echo "configure:6006: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5918 "configure"
+#line 6009 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6014: \"$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*
@@ -5950,7 +6041,7 @@ done
 
 
     echo $ac_n "checking for XFree86""... $ac_c" 1>&6
-echo "configure:5954: checking for XFree86" >&5
+echo "configure:6045: checking for XFree86" >&5
   if test -d "/usr/X386/include" -o \
           -f "/etc/XF86Config"    -o \
          -f "/etc/X11/XF86Config" -o \
@@ -5970,12 +6061,12 @@ EOF
 
     test -z "$with_xmu" && { 
 echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6
-echo "configure:5974: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
+echo "configure:6065: 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 5979 "configure"
+#line 6070 "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
@@ -5986,7 +6077,7 @@ int main() {
 XmuReadBitmapDataFromFile()
 ; return 0; }
 EOF
-if { (eval echo configure:5990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6081: \"$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
@@ -6025,19 +6116,19 @@ EOF
 
       
 echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6
-echo "configure:6029: checking for main in -lXbsd" >&5
+echo "configure:6120: 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 6034 "configure"
+#line 6125 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6132: \"$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
@@ -6074,22 +6165,22 @@ fi
 fi 
 if test "$with_msw" != "no"; then
   echo "checking for MS-Windows" 1>&6
-echo "configure:6078: checking for MS-Windows" >&5
+echo "configure:6169: checking for MS-Windows" >&5
   
 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6
-echo "configure:6081: checking for main in -lgdi32" >&5
+echo "configure:6172: 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 6086 "configure"
+#line 6177 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6184: \"$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
@@ -6155,12 +6246,12 @@ EOF
  fi
     fi
         cat > conftest.$ac_ext <<EOF
-#line 6159 "configure"
+#line 6250 "configure"
 #include "confdefs.h"
 #include <fcntl.h>
     int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }
 EOF
-if { (eval echo configure:6164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6255: \"$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
@@ -6236,7 +6327,7 @@ case "$x_libraries" in *X11R4* )
 esac
 
 echo "checking for WM_COMMAND option" 1>&6
-echo "configure:6240: checking for WM_COMMAND option" >&5;
+echo "configure:6331: checking for WM_COMMAND option" >&5;
 if test "$with_wmcommand" != "no"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_WMCOMMAND
@@ -6251,15 +6342,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:6255: checking for X11/Xauth.h" >&5
+echo "configure:6346: checking for X11/Xauth.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6258 "configure"
+#line 6349 "configure"
 #include "confdefs.h"
 #include <X11/Xauth.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6263: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6354: \"$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*
@@ -6282,12 +6373,12 @@ fi
  }
 test -z "$with_xauth" && { 
 echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6
-echo "configure:6286: checking for XauGetAuthByAddr in -lXau" >&5
+echo "configure:6377: 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 6291 "configure"
+#line 6382 "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
@@ -6298,7 +6389,7 @@ int main() {
 XauGetAuthByAddr()
 ; return 0; }
 EOF
-if { (eval echo configure:6302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6393: \"$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
@@ -6343,15 +6434,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:6347: checking for ${dir}tt_c.h" >&5
+echo "configure:6438: checking for ${dir}tt_c.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6350 "configure"
+#line 6441 "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:6355: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6446: \"$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*
@@ -6387,12 +6478,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:6391: checking "$xe_msg_checking"" >&5
+echo "configure:6482: 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 6396 "configure"
+#line 6487 "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
@@ -6403,7 +6494,7 @@ int main() {
 tt_message_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6498: \"$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
@@ -6460,15 +6551,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:6464: checking for Dt/Dt.h" >&5
+echo "configure:6555: checking for Dt/Dt.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6467 "configure"
+#line 6558 "configure"
 #include "confdefs.h"
 #include <Dt/Dt.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6472: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6563: \"$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*
@@ -6491,12 +6582,12 @@ fi
  }
 test -z "$with_cde" && { 
 echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6
-echo "configure:6495: checking for DtDndDragStart in -lDtSvc" >&5
+echo "configure:6586: 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 6500 "configure"
+#line 6591 "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
@@ -6507,7 +6598,7 @@ int main() {
 DtDndDragStart()
 ; return 0; }
 EOF
-if { (eval echo configure:6511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6602: \"$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
@@ -6576,7 +6667,7 @@ EOF
 fi
 
 echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6
-echo "configure:6580: checking if drag and drop API is needed" >&5
+echo "configure:6671: checking if drag and drop API is needed" >&5
 if test "$with_dragndrop" != "no" ; then
   if test -n "$dragndrop_proto" ; then
     with_dragndrop=yes
@@ -6597,18 +6688,18 @@ EOF
 fi
 
 echo "checking for LDAP" 1>&6
-echo "configure:6601: checking for LDAP" >&5
+echo "configure:6692: 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:6604: checking for ldap.h" >&5
+echo "configure:6695: checking for ldap.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6607 "configure"
+#line 6698 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6703: \"$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*
@@ -6631,15 +6722,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:6635: checking for lber.h" >&5
+echo "configure:6726: checking for lber.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6638 "configure"
+#line 6729 "configure"
 #include "confdefs.h"
 #include <lber.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6643: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6734: \"$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*
@@ -6663,12 +6754,12 @@ fi
 if test "$with_ldap" != "no"; then
   
 echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6
-echo "configure:6667: checking for ldap_search in -lldap" >&5
+echo "configure:6758: 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 6672 "configure"
+#line 6763 "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
@@ -6679,7 +6770,7 @@ int main() {
 ldap_search()
 ; return 0; }
 EOF
-if { (eval echo configure:6683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6774: \"$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
@@ -6704,12 +6795,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:6708: checking "$xe_msg_checking"" >&5
+echo "configure:6799: 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 6713 "configure"
+#line 6804 "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
@@ -6720,7 +6811,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6815: \"$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
@@ -6745,12 +6836,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:6749: checking "$xe_msg_checking"" >&5
+echo "configure:6840: 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 6754 "configure"
+#line 6845 "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
@@ -6761,7 +6852,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6856: \"$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
@@ -6786,12 +6877,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:6790: checking "$xe_msg_checking"" >&5
+echo "configure:6881: 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 6795 "configure"
+#line 6886 "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
@@ -6802,7 +6893,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6897: \"$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
@@ -6853,10 +6944,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:6857: checking for $ac_func" >&5
+echo "configure:6948: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6860 "configure"
+#line 6951 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6879,7 +6970,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6974: \"$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
@@ -6911,15 +7002,15 @@ fi
 
 if test "$window_system" != "none"; then
   echo "checking for graphics libraries" 1>&6
-echo "configure:6915: checking for graphics libraries" >&5
+echo "configure:7006: 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:6920: checking for Xpm - no older than 3.4f" >&5
+echo "configure:7011: checking for Xpm - no older than 3.4f" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6923 "configure"
+#line 7014 "configure"
 #include "confdefs.h"
 #include <X11/xpm.h>
     int main(int c, char **v) {
@@ -6927,7 +7018,7 @@ echo "configure:6920: checking for Xpm - no older than 3.4f" >&5
       XpmIncludeVersion != XpmLibraryVersion() ? 1 :
       XpmIncludeVersion < 30406 ? 2 : 0 ;}
 EOF
-if { (eval echo configure:6931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7022: \"$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
@@ -6969,17 +7060,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:6973: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:7064: checking for \"FOR_MSW\" xpm" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6976 "configure"
+#line 7067 "configure"
 #include "confdefs.h"
 
 int main() {
 XpmCreatePixmapFromData()
 ; return 0; }
 EOF
-if { (eval echo configure:6983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   xpm_for_msw=no
 else
@@ -7005,15 +7096,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:7009: checking for compface.h" >&5
+echo "configure:7100: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7012 "configure"
+#line 7103 "configure"
 #include "confdefs.h"
 #include <compface.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7017: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7108: \"$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*
@@ -7036,12 +7127,12 @@ fi
  }
   test -z "$with_xface" && { 
 echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:7040: checking for UnGenFace in -lcompface" >&5
+echo "configure:7131: 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 7045 "configure"
+#line 7136 "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
@@ -7052,7 +7143,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:7056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7147: \"$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 +7195,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:7108: checking for inflate in -lc" >&5
+echo "configure:7199: 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 7113 "configure"
+#line 7204 "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 +7211,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:7215: \"$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
@@ -7139,12 +7230,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6
-echo "configure:7143: checking for inflate in -lz" >&5
+echo "configure:7234: 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 7148 "configure"
+#line 7239 "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
@@ -7155,7 +7246,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7250: \"$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
@@ -7174,12 +7265,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6
-echo "configure:7178: checking for inflate in -lgz" >&5
+echo "configure:7269: 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 7183 "configure"
+#line 7274 "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
@@ -7190,7 +7281,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7285: \"$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
@@ -7220,15 +7311,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:7224: checking for jpeglib.h" >&5
+echo "configure:7315: checking for jpeglib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7227 "configure"
+#line 7318 "configure"
 #include "confdefs.h"
 #include <jpeglib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7232: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7323: \"$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*
@@ -7251,12 +7342,12 @@ fi
  }
   test -z "$with_jpeg" && { 
 echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6
-echo "configure:7255: checking for jpeg_destroy_decompress in -ljpeg" >&5
+echo "configure:7346: 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 7260 "configure"
+#line 7351 "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
@@ -7267,7 +7358,7 @@ int main() {
 jpeg_destroy_decompress()
 ; return 0; }
 EOF
-if { (eval echo configure:7271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7362: \"$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
@@ -7303,10 +7394,10 @@ EOF
 
     png_problem=""
   test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:7307: checking for pow" >&5
+echo "configure:7398: checking for pow" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7310 "configure"
+#line 7401 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pow(); below.  */
@@ -7329,7 +7420,7 @@ pow();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7424: \"$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
@@ -7350,15 +7441,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:7354: checking for png.h" >&5
+echo "configure:7445: checking for png.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7357 "configure"
+#line 7448 "configure"
 #include "confdefs.h"
 #include <png.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7453: \"$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*
@@ -7381,12 +7472,12 @@ fi
  }
   test -z "$with_png" && { 
 echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:7385: checking for png_read_image in -lpng" >&5
+echo "configure:7476: 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 7390 "configure"
+#line 7481 "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
@@ -7397,7 +7488,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:7401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7492: \"$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
@@ -7420,10 +7511,10 @@ fi
  }
   if test -z "$with_png"; then
     echo $ac_n "checking for workable png version information""... $ac_c" 1>&6
-echo "configure:7424: checking for workable png version information" >&5
+echo "configure:7515: checking for workable png version information" >&5
     xe_check_libs="-lpng -lz"
     cat > conftest.$ac_ext <<EOF
-#line 7427 "configure"
+#line 7518 "configure"
 #include "confdefs.h"
 #include <png.h>
     int main(int c, char **v) {
@@ -7431,7 +7522,7 @@ echo "configure:7424: 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:7435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7526: \"$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
@@ -7474,15 +7565,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:7478: checking for tiffio.h" >&5
+echo "configure:7569: checking for tiffio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7481 "configure"
+#line 7572 "configure"
 #include "confdefs.h"
 #include <tiffio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7486: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7577: \"$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*
@@ -7505,12 +7596,12 @@ fi
  }
   test -z "$with_tiff" && { 
 echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:7509: checking for TIFFClientOpen in -ltiff" >&5
+echo "configure:7600: 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 7514 "configure"
+#line 7605 "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
@@ -7521,7 +7612,7 @@ int main() {
 TIFFClientOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:7525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7616: \"$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
@@ -7560,10 +7651,10 @@ fi
 if test "$with_x11" = "yes"; then
 
   echo "checking for X11 graphics libraries" 1>&6
-echo "configure:7564: checking for X11 graphics libraries" >&5
+echo "configure:7655: checking for X11 graphics libraries" >&5
 
   echo "checking for the Athena widgets" 1>&6
-echo "configure:7567: checking for the Athena widgets" >&5
+echo "configure:7658: checking for the Athena widgets" >&5
 
     case "$with_athena" in
         "xaw" | "")    athena_variant=Xaw      athena_3d=no  ;;
@@ -7577,12 +7668,12 @@ echo "configure:7567: checking for the Athena widgets" >&5
     if test "$athena_3d" = "no"; then
     
 echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7581: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
+echo "configure:7672: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
 ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 7586 "configure"
+#line 7677 "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
@@ -7593,7 +7684,7 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:7597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7688: \"$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
@@ -7609,12 +7700,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
           
 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7613: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7704: checking for threeDClassRec in -l$athena_variant" >&5
 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 7618 "configure"
+#line 7709 "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
@@ -7625,7 +7716,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7720: \"$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
@@ -7656,12 +7747,12 @@ fi
   else
         
 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7660: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7751: checking for threeDClassRec in -l$athena_variant" >&5
 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 7665 "configure"
+#line 7756 "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
@@ -7672,7 +7763,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7767: \"$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
@@ -7690,12 +7781,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 threeDClassRec in -lXaw""... $ac_c" 1>&6
-echo "configure:7694: checking for threeDClassRec in -lXaw" >&5
+echo "configure:7785: checking for threeDClassRec in -lXaw" >&5
 ac_lib_var=`echo Xaw'_'threeDClassRec | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXaw "
 cat > conftest.$ac_ext <<EOF
-#line 7699 "configure"
+#line 7790 "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
@@ -7706,7 +7797,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7801: \"$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
@@ -7720,7 +7811,7 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  athena_lib=Xaw; 
+  athena_lib=Xaw;
           echo "configure: warning: "Assuming that libXaw is actually $athena_variant."" 1>&2;
         
 else
@@ -7737,15 +7828,15 @@ fi
     if test "$athena_3d" = "no"; then
     ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7741: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:7832: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7744 "configure"
+#line 7835 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7840: \"$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*
@@ -7765,15 +7856,15 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6
-echo "configure:7769: checking for X11/Xaw/XawInit.h" >&5
+echo "configure:7860: checking for X11/Xaw/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7772 "configure"
+#line 7863 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7868: \"$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*
@@ -7799,15 +7890,15 @@ fi
   else
             ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:7803: checking for X11/$athena_variant/XawInit.h" >&5
+echo "configure:7894: checking for X11/$athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7806 "configure"
+#line 7897 "configure"
 #include "confdefs.h"
 #include <X11/$athena_variant/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7811: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7902: \"$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*
@@ -7824,15 +7915,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7828: checking for X11/$athena_variant/ThreeD.h" >&5
+echo "configure:7919: checking for X11/$athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7831 "configure"
+#line 7922 "configure"
 #include "confdefs.h"
 #include <X11/$athena_variant/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7927: \"$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*
@@ -7860,15 +7951,15 @@ fi
         if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
       ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:7864: checking for X11/Xaw3d/XawInit.h" >&5
+echo "configure:7955: checking for X11/Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7867 "configure"
+#line 7958 "configure"
 #include "confdefs.h"
 #include <X11/Xaw3d/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7963: \"$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*
@@ -7885,15 +7976,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7889: checking for X11/Xaw3d/ThreeD.h" >&5
+echo "configure:7980: checking for X11/Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7892 "configure"
+#line 7983 "configure"
 #include "confdefs.h"
 #include <X11/Xaw3d/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7897: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7988: \"$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*
@@ -7925,15 +8016,15 @@ fi
             if test -z "$athena_h_path"; then
       ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7929: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:8020: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7932 "configure"
+#line 8023 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8028: \"$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*
@@ -7968,15 +8059,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:7972: checking for Xm/Xm.h" >&5
+echo "configure:8063: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7975 "configure"
+#line 8066 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8071: \"$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*
@@ -7993,12 +8084,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:7997: checking for XmStringFree in -lXm" >&5
+echo "configure:8088: 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 8002 "configure"
+#line 8093 "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
@@ -8009,7 +8100,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:8013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8104: \"$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
@@ -8038,9 +8129,9 @@ fi
 
   if test "$have_motif" = "yes"; then
         echo $ac_n "checking for Lesstif""... $ac_c" 1>&6
-echo "configure:8042: checking for Lesstif" >&5
+echo "configure:8133: checking for Lesstif" >&5
     cat > conftest.$ac_ext <<EOF
-#line 8044 "configure"
+#line 8135 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 #ifdef LESSTIF_VERSION
@@ -8373,7 +8464,7 @@ fi
 
 if test "$with_mule" = "yes" ; then
   echo "checking for Mule-related features" 1>&6
-echo "configure:8377: checking for Mule-related features" >&5
+echo "configure:8468: checking for Mule-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining MULE
 EOF
@@ -8414,15 +8505,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8418: checking for $ac_hdr" >&5
+echo "configure:8509: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8421 "configure"
+#line 8512 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8426: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8517: \"$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*
@@ -8453,12 +8544,12 @@ done
 
   
 echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6
-echo "configure:8457: checking for strerror in -lintl" >&5
+echo "configure:8548: 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 8462 "configure"
+#line 8553 "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
@@ -8469,7 +8560,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:8473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8564: \"$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
@@ -8521,18 +8612,18 @@ EOF
   fi
 
   echo "checking for Mule input methods" 1>&6
-echo "configure:8525: checking for Mule input methods" >&5
+echo "configure:8616: checking for Mule input methods" >&5
         case "$with_xim" in "" | "yes" )
     echo "checking for XIM" 1>&6
-echo "configure:8528: checking for XIM" >&5
+echo "configure:8619: checking for XIM" >&5
     
 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6
-echo "configure:8531: checking for XOpenIM in -lX11" >&5
+echo "configure:8622: 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 8536 "configure"
+#line 8627 "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
@@ -8543,7 +8634,7 @@ int main() {
 XOpenIM()
 ; return 0; }
 EOF
-if { (eval echo configure:8547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8638: \"$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
@@ -8567,12 +8658,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:8571: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:8662: 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 8576 "configure"
+#line 8667 "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
@@ -8583,7 +8674,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:8587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8678: \"$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
@@ -8648,15 +8739,15 @@ EOF
 
     if test "$with_xfs" = "yes" ; then
     echo "checking for XFontSet" 1>&6
-echo "configure:8652: checking for XFontSet" >&5
+echo "configure:8743: checking for XFontSet" >&5
     
 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6
-echo "configure:8655: checking for XmbDrawString in -lX11" >&5
+echo "configure:8746: 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 8660 "configure"
+#line 8751 "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
@@ -8667,7 +8758,7 @@ int main() {
 XmbDrawString()
 ; return 0; }
 EOF
-if { (eval echo configure:8671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8762: \"$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
@@ -8707,15 +8798,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:8711: checking for wnn/jllib.h" >&5
+echo "configure:8802: checking for wnn/jllib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8714 "configure"
+#line 8805 "configure"
 #include "confdefs.h"
 #include <wnn/jllib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8810: \"$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*
@@ -8740,10 +8831,10 @@ fi
     for ac_func in crypt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8744: checking for $ac_func" >&5
+echo "configure:8835: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8747 "configure"
+#line 8838 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8766,7 +8857,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8861: \"$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
@@ -8795,12 +8886,12 @@ done
 
     test "$ac_cv_func_crypt" != "yes" && { 
 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:8799: checking for crypt in -lcrypt" >&5
+echo "configure:8890: 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 8804 "configure"
+#line 8895 "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
@@ -8811,7 +8902,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:8815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8906: \"$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
@@ -8846,12 +8937,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:8850: checking for jl_dic_list_e in -lwnn" >&5
+echo "configure:8941: 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 8855 "configure"
+#line 8946 "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
@@ -8862,7 +8953,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8957: \"$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
@@ -8880,12 +8971,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:8884: checking for jl_dic_list_e in -lwnn4" >&5
+echo "configure:8975: 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 8889 "configure"
+#line 8980 "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
@@ -8896,7 +8987,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8991: \"$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
@@ -8914,12 +9005,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:8918: checking for jl_dic_list_e in -lwnn6" >&5
+echo "configure:9009: 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 8923 "configure"
+#line 9014 "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
@@ -8930,7 +9021,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9025: \"$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
@@ -8948,12 +9039,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:8952: checking for dic_list_e in -lwnn6_fromsrc" >&5
+echo "configure:9043: 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 8957 "configure"
+#line 9048 "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
@@ -8964,7 +9055,7 @@ int main() {
 dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9059: \"$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
@@ -9012,12 +9103,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:9016: checking for jl_fi_dic_list in -l$libwnn" >&5
+echo "configure:9107: 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 9021 "configure"
+#line 9112 "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
@@ -9028,7 +9119,7 @@ int main() {
 jl_fi_dic_list()
 ; return 0; }
 EOF
-if { (eval echo configure:9032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9123: \"$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
@@ -9063,15 +9154,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:9067: checking for canna/jrkanji.h" >&5
+echo "configure:9158: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9070 "configure"
+#line 9161 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9075: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9166: \"$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*
@@ -9098,15 +9189,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:9102: checking for canna/jrkanji.h" >&5
+echo "configure:9193: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9105 "configure"
+#line 9196 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9201: \"$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*
@@ -9134,15 +9225,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:9138: checking for canna/RK.h" >&5
+echo "configure:9229: checking for canna/RK.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9141 "configure"
+#line 9232 "configure"
 #include "confdefs.h"
 #include <canna/RK.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9237: \"$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*
@@ -9165,12 +9256,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6
-echo "configure:9169: checking for RkBgnBun in -lRKC" >&5
+echo "configure:9260: 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 9174 "configure"
+#line 9265 "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
@@ -9181,7 +9272,7 @@ int main() {
 RkBgnBun()
 ; return 0; }
 EOF
-if { (eval echo configure:9185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9276: \"$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
@@ -9204,12 +9295,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6
-echo "configure:9208: checking for jrKanjiControl in -lcanna" >&5
+echo "configure:9299: 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 9213 "configure"
+#line 9304 "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
@@ -9220,7 +9311,7 @@ int main() {
 jrKanjiControl()
 ; return 0; }
 EOF
-if { (eval echo configure:9224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9315: \"$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
@@ -9269,12 +9360,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:9273: checking for layout_object_getvalue in -li18n" >&5
+echo "configure:9364: 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 9278 "configure"
+#line 9369 "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
@@ -9285,7 +9376,7 @@ int main() {
 layout_object_getvalue()
 ; return 0; }
 EOF
-if { (eval echo configure:9289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9380: \"$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
@@ -9368,13 +9459,13 @@ fi
 
 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
+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 fsync ftruncate umask
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9375: checking for $ac_func" >&5
+echo "configure:9466: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9378 "configure"
+#line 9469 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9397,7 +9488,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9492: \"$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
@@ -9438,10 +9529,10 @@ case "$opsys" in
       * ) for ac_func in realpath
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9442: checking for $ac_func" >&5
+echo "configure:9533: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9445 "configure"
+#line 9536 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9464,7 +9555,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9559: \"$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
@@ -9500,10 +9591,10 @@ esac
 for ac_func in getloadavg
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9504: checking for $ac_func" >&5
+echo "configure:9595: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9507 "configure"
+#line 9598 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9526,7 +9617,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9621: \"$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
@@ -9562,12 +9653,12 @@ then
 
     
 echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6
-echo "configure:9566: checking for kstat_open in -lkstat" >&5
+echo "configure:9657: 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 9571 "configure"
+#line 9662 "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
@@ -9578,7 +9669,7 @@ int main() {
 kstat_open()
 ; return 0; }
 EOF
-if { (eval echo configure:9582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9673: \"$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
@@ -9612,12 +9703,12 @@ fi
 
     
 echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6
-echo "configure:9616: checking for kvm_read in -lkvm" >&5
+echo "configure:9707: 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 9621 "configure"
+#line 9712 "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
@@ -9628,7 +9719,7 @@ int main() {
 kvm_read()
 ; return 0; }
 EOF
-if { (eval echo configure:9632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9723: \"$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
@@ -9662,16 +9753,16 @@ fi
 fi
 
 echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:9666: checking whether netdb declares h_errno" >&5
+echo "configure:9757: checking whether netdb declares h_errno" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9668 "configure"
+#line 9759 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 int main() {
 return h_errno;
 ; return 0; }
 EOF
-if { (eval echo configure:9675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9766: \"$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
@@ -9691,16 +9782,16 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:9695: checking for sigsetjmp" >&5
+echo "configure:9786: checking for sigsetjmp" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9697 "configure"
+#line 9788 "configure"
 #include "confdefs.h"
 #include <setjmp.h>
 int main() {
 sigjmp_buf bar; sigsetjmp (bar, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:9704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9795: \"$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
@@ -9720,11 +9811,11 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6
-echo "configure:9724: checking whether localtime caches TZ" >&5
+echo "configure:9815: checking whether localtime caches TZ" >&5
 
 if test "$ac_cv_func_tzset" = "yes"; then
 cat > conftest.$ac_ext <<EOF
-#line 9728 "configure"
+#line 9819 "configure"
 #include "confdefs.h"
 #include <time.h>
 #if STDC_HEADERS
@@ -9759,7 +9850,7 @@ main()
   exit (0);
 }
 EOF
-if { (eval echo configure:9763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   emacs_cv_localtime_cache=no
 else
@@ -9789,9 +9880,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:9793: checking whether gettimeofday accepts one or two arguments" >&5
+echo "configure:9884: checking whether gettimeofday accepts one or two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9795 "configure"
+#line 9886 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -9813,7 +9904,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:9817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9908: \"$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
@@ -9835,19 +9926,19 @@ fi
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:9839: checking for inline" >&5
+echo "configure:9930: checking for inline" >&5
 
 ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 9844 "configure"
+#line 9935 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:9851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9942: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -9897,17 +9988,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:9901: checking for working alloca.h" >&5
+echo "configure:9992: checking for working alloca.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9904 "configure"
+#line 9995 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:9911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10002: \"$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
@@ -9931,10 +10022,10 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:9935: checking for alloca" >&5
+echo "configure:10026: checking for alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9938 "configure"
+#line 10029 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -9962,7 +10053,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:9966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10057: \"$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
@@ -10001,10 +10092,10 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:10005: checking whether alloca needs Cray hooks" >&5
+echo "configure:10096: checking whether alloca needs Cray hooks" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10008 "configure"
+#line 10099 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -10028,10 +10119,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:10032: checking for $ac_func" >&5
+echo "configure:10123: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10035 "configure"
+#line 10126 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10054,7 +10145,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10149: \"$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
@@ -10084,10 +10175,10 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:10088: checking stack direction for C alloca" >&5
+echo "configure:10179: checking stack direction for C alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10091 "configure"
+#line 10182 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -10106,7 +10197,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:10110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_stack_direction=1
 else
@@ -10135,15 +10226,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:10139: checking for vfork.h" >&5
+echo "configure:10230: checking for vfork.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10142 "configure"
+#line 10233 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10238: \"$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*
@@ -10171,10 +10262,10 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:10175: checking for working vfork" >&5
+echo "configure:10266: checking for working vfork" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10178 "configure"
+#line 10269 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -10269,7 +10360,7 @@ main() {
   }
 }
 EOF
-if { (eval echo configure:10273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_vfork_works=yes
 else
 
 
 echo $ac_n "checking for working strcoll""... $ac_c" 1>&6
-echo "configure:10299: checking for working strcoll" >&5
+echo "configure:10390: checking for working strcoll" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10302 "configure"
+#line 10393 "configure"
 #include "confdefs.h"
 #include <string.h>
 main ()
@@ -10308,7 +10399,7 @@ main ()
        strcoll ("123", "456") >= 0);
 }
 EOF
-if { (eval echo configure:10312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_strcoll_works=yes
 else
 for ac_func in getpgrp
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10340: checking for $ac_func" >&5
+echo "configure:10431: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10343 "configure"
+#line 10434 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10362,7 +10453,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10457: \"$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:10394: checking whether getpgrp takes no argument" >&5
+echo "configure:10485: checking whether getpgrp takes no argument" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10397 "configure"
+#line 10488 "configure"
 #include "confdefs.h"
 
 /*
@@ -10448,7 +10539,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:10452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10543: \"$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:10479: checking for working mmap" >&5
+echo "configure:10570: checking for working mmap" >&5
 case "$opsys" in ultrix* ) have_mmap=no ;; *)
 cat > conftest.$ac_ext <<EOF
-#line 10482 "configure"
+#line 10573 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <unistd.h>
@@ -10511,7 +10602,7 @@ int main (int argc, char *argv[])
   return 1;
 }
 EOF
-if { (eval echo configure:10515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   have_mmap=yes
 else
@@ -10546,15 +10637,15 @@ EOF
 
 ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termios.h""... $ac_c" 1>&6
-echo "configure:10550: checking for termios.h" >&5
+echo "configure:10641: checking for termios.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10553 "configure"
+#line 10644 "configure"
 #include "confdefs.h"
 #include <termios.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10558: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10649: \"$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*
@@ -10597,15 +10688,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:10601: checking for termio.h" >&5
+echo "configure:10692: checking for termio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10604 "configure"
+#line 10695 "configure"
 #include "confdefs.h"
 #include <termio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10609: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10700: \"$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:10641: checking for socket" >&5
+echo "configure:10732: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10644 "configure"
+#line 10735 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -10663,7 +10754,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10758: \"$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
@@ -10678,15 +10769,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:10682: checking for netinet/in.h" >&5
+echo "configure:10773: checking for netinet/in.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10685 "configure"
+#line 10776 "configure"
 #include "confdefs.h"
 #include <netinet/in.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10781: \"$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*
@@ -10703,15 +10794,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:10707: checking for arpa/inet.h" >&5
+echo "configure:10798: checking for arpa/inet.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10710 "configure"
+#line 10801 "configure"
 #include "confdefs.h"
 #include <arpa/inet.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10806: \"$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*
@@ -10736,9 +10827,9 @@ EOF
 }
 
       echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:10740: checking "for sun_len member in struct sockaddr_un"" >&5
+echo "configure:10831: checking "for sun_len member in struct sockaddr_un"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10742 "configure"
+#line 10833 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10749,7 +10840,7 @@ int main() {
 static struct sockaddr_un x; x.sun_len = 1;
 ; return 0; }
 EOF
-if { (eval echo configure:10753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10844: \"$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
@@ -10767,9 +10858,9 @@ else
 fi
 rm -f conftest*
       echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6
-echo "configure:10771: checking "for ip_mreq struct in netinet/in.h"" >&5
+echo "configure:10862: checking "for ip_mreq struct in netinet/in.h"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10773 "configure"
+#line 10864 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10779,7 +10870,7 @@ int main() {
 static struct ip_mreq x;
 ; return 0; }
 EOF
-if { (eval echo configure:10783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10874: \"$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:10814: checking for msgget" >&5
+echo "configure:10905: checking for msgget" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10817 "configure"
+#line 10908 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char msgget(); below.  */
@@ -10836,7 +10927,7 @@ msgget();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10931: \"$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
@@ -10851,15 +10942,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:10855: checking for sys/ipc.h" >&5
+echo "configure:10946: checking for sys/ipc.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10858 "configure"
+#line 10949 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10863: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10954: \"$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*
@@ -10876,15 +10967,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:10880: checking for sys/msg.h" >&5
+echo "configure:10971: checking for sys/msg.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10883 "configure"
+#line 10974 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10979: \"$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:10926: checking for dirent.h" >&5
+echo "configure:11017: checking for dirent.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10929 "configure"
+#line 11020 "configure"
 #include "confdefs.h"
 #include <dirent.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10934: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11025: \"$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*
@@ -10957,15 +11048,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:10961: checking for sys/dir.h" >&5
+echo "configure:11052: checking for sys/dir.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10964 "configure"
+#line 11055 "configure"
 #include "confdefs.h"
 #include <sys/dir.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10969: \"$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 "nlist.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for nlist.h""... $ac_c" 1>&6
-echo "configure:11002: checking for nlist.h" >&5
+echo "configure:11093: checking for nlist.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11005 "configure"
+#line 11096 "configure"
 #include "confdefs.h"
 #include <nlist.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11010: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11101: \"$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:11040: checking "for sound support"" >&5
+echo "configure:11131: 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:11047: checking for multimedia/audio_device.h" >&5
+echo "configure:11138: checking for multimedia/audio_device.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11050 "configure"
+#line 11141 "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:11055: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11146: \"$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:11103: checking for ALopenport in -laudio" >&5
+echo "configure:11194: 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 11108 "configure"
+#line 11199 "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
@@ -11115,7 +11206,7 @@ int main() {
 ALopenport()
 ; return 0; }
 EOF
-if { (eval echo configure:11119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11210: \"$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:11150: checking for AOpenAudio in -lAlib" >&5
+echo "configure:11241: 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 11155 "configure"
+#line 11246 "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
@@ -11162,7 +11253,7 @@ int main() {
 AOpenAudio()
 ; return 0; }
 EOF
-if { (eval echo configure:11166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11257: \"$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:11204: checking for ${dir}/soundcard.h" >&5
+echo "configure:11295: checking for ${dir}/soundcard.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11207 "configure"
+#line 11298 "configure"
 #include "confdefs.h"
 #include <${dir}/soundcard.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11303: \"$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 "$with_nas_sound" != "no"; then
   ac_safe=`echo "audio/audiolib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for audio/audiolib.h""... $ac_c" 1>&6
-echo "configure:11266: checking for audio/audiolib.h" >&5
+echo "configure:11357: checking for audio/audiolib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11269 "configure"
+#line 11360 "configure"
 #include "confdefs.h"
 #include <audio/audiolib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11365: \"$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*
@@ -11288,12 +11379,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   
     
 echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6
-echo "configure:11292: checking for AuOpenServer in -laudio" >&5
+echo "configure:11383: checking for AuOpenServer in -laudio" >&5
 ac_lib_var=`echo audio'_'AuOpenServer | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -laudio "
 cat > conftest.$ac_ext <<EOF
-#line 11297 "configure"
+#line 11388 "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
@@ -11304,7 +11395,7 @@ int main() {
 AuOpenServer()
 ; return 0; }
 EOF
-if { (eval echo configure:11308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11399: \"$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
@@ -11343,7 +11434,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 11347 "configure"
+#line 11438 "configure"
 #include "confdefs.h"
 #include <audio/Xtutil.h>
 EOF
@@ -11374,7 +11465,7 @@ if test "$with_esd_sound" != "no"; then
   # 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:11378: checking for $ac_word" >&5
+echo "configure:11469: 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.
     c_switch_site="$c_switch_site `esd-config --cflags`" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"`esd-config --cflags`\" to \$c_switch_site"; fi
     LIBS="`esd-config --libs` $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"`esd-config --libs`\" to \$LIBS"; fi
     echo $ac_n "checking for esd_play_stream""... $ac_c" 1>&6
-echo "configure:11407: checking for esd_play_stream" >&5
+echo "configure:11498: checking for esd_play_stream" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11410 "configure"
+#line 11501 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char esd_play_stream(); below.  */
@@ -11429,7 +11520,7 @@ esd_play_stream();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_esd_play_stream=yes"
 else
@@ -11480,7 +11571,7 @@ test -z "$with_tty" && with_tty=yes
 
 if test "$with_tty" = "yes"  ; then
   echo "checking for TTY-related features" 1>&6
-echo "configure:11484: checking for TTY-related features" >&5
+echo "configure:11575: checking for TTY-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_TTY
 EOF
@@ -11496,12 +11587,12 @@ EOF
     if test -z "$with_ncurses"; then
     
 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:11500: checking for tgetent in -lncurses" >&5
+echo "configure:11591: 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 11505 "configure"
+#line 11596 "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
@@ -11512,7 +11603,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11607: \"$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
@@ -11545,15 +11636,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:11549: checking for ncurses/curses.h" >&5
+echo "configure:11640: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11552 "configure"
+#line 11643 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11557: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11648: \"$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:11579: checking for ncurses/term.h" >&5
+echo "configure:11670: checking for ncurses/term.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11582 "configure"
+#line 11673 "configure"
 #include "confdefs.h"
 #include <ncurses/term.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11678: \"$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:11617: checking for ncurses/curses.h" >&5
+echo "configure:11708: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11620 "configure"
+#line 11711 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11716: \"$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:11660: checking for tgetent in -l$lib" >&5
+echo "configure:11751: 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 11665 "configure"
+#line 11756 "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
@@ -11672,7 +11763,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11767: \"$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:11707: checking for tgetent in -lcurses" >&5
+echo "configure:11798: 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 11712 "configure"
+#line 11803 "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
@@ -11719,7 +11810,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11814: \"$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
@@ -11737,12 +11828,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:11741: checking for tgetent in -ltermcap" >&5
+echo "configure:11832: 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 11746 "configure"
+#line 11837 "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
@@ -11753,7 +11844,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11848: \"$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
@@ -11801,15 +11892,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:11805: checking for gpm.h" >&5
+echo "configure:11896: checking for gpm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11808 "configure"
+#line 11899 "configure"
 #include "confdefs.h"
 #include <gpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11904: \"$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:11836: checking for Gpm_Open in -lgpm" >&5
+echo "configure:11927: 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 11841 "configure"
+#line 11932 "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
@@ -11848,7 +11939,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:11852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11943: \"$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
@@ -11898,20 +11989,20 @@ test "$with_x11" = "yes" -o "$with_tty" = "yes" && extra_objs="$extra_objs event
 
 test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
   != "no no no" && echo "checking for database support" 1>&6
-echo "configure:11902: checking for database support" >&5
+echo "configure:11993: checking for database support" >&5
 
 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:11907: checking for ndbm.h" >&5
+echo "configure:11998: checking for ndbm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11910 "configure"
+#line 12001 "configure"
 #include "confdefs.h"
 #include <ndbm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11915: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12006: \"$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 "$with_database_gdbm" != "no"; then
   
 echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6
-echo "configure:11945: checking for dbm_open in -lgdbm" >&5
+echo "configure:12036: 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 11950 "configure"
+#line 12041 "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
@@ -11957,7 +12048,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:11961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12052: \"$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 "$with_database_dbm" != "no"; then
   echo $ac_n "checking for dbm_open""... $ac_c" 1>&6
-echo "configure:11989: checking for dbm_open" >&5
+echo "configure:12080: checking for dbm_open" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11992 "configure"
+#line 12083 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dbm_open(); below.  */
@@ -12011,7 +12102,7 @@ dbm_open();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12106: \"$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
@@ -12030,12 +12121,12 @@ else
 
     
 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6
-echo "configure:12034: checking for dbm_open in -ldbm" >&5
+echo "configure:12125: 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 12039 "configure"
+#line 12130 "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
@@ -12046,7 +12137,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:12050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12141: \"$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
@@ -12087,10 +12178,10 @@ EOF
 
 if test "$with_database_berkdb" != "no"; then
   echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6
-echo "configure:12091: checking for Berkeley db.h" >&5
+echo "configure:12182: checking for Berkeley db.h" >&5
   for path in "db/db.h" "db.h"; do
     cat > conftest.$ac_ext <<EOF
-#line 12094 "configure"
+#line 12185 "configure"
 #include "confdefs.h"
 #ifdef HAVE_INTTYPES_H
 #define __BIT_TYPES_DEFINED__
@@ -12108,7 +12199,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   db_h_path="$path"; break
 else
@@ -12124,9 +12215,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:12128: checking for Berkeley DB version" >&5
+echo "configure:12219: checking for Berkeley DB version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 12130 "configure"
+#line 12221 "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:12149: checking for $dbfunc" >&5
+echo "configure:12240: checking for $dbfunc" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12152 "configure"
+#line 12243 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $dbfunc(); below.  */
@@ -12171,7 +12262,7 @@ $dbfunc();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12266: \"$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
@@ -12190,12 +12281,12 @@ else
 
     
 echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6
-echo "configure:12194: checking for $dbfunc in -ldb" >&5
+echo "configure:12285: 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 12199 "configure"
+#line 12290 "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
@@ -12206,7 +12297,7 @@ int main() {
 $dbfunc()
 ; return 0; }
 EOF
-if { (eval echo configure:12210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12301: \"$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 "$with_socks" = "yes"; then
   
 echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6
-echo "configure:12274: checking for SOCKSinit in -lsocks" >&5
+echo "configure:12365: 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 12279 "configure"
+#line 12370 "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
@@ -12286,7 +12377,7 @@ int main() {
 SOCKSinit()
 ; return 0; }
 EOF
-if { (eval echo configure:12290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12381: \"$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 "$with_modules" != "no"; then
   echo "checking for module support" 1>&6
-echo "configure:12345: checking for module support" >&5
+echo "configure:12436: checking for module support" >&5
 
     ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
-echo "configure:12349: checking for dlfcn.h" >&5
+echo "configure:12440: checking for dlfcn.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12352 "configure"
+#line 12443 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12448: \"$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*
@@ -12371,12 +12462,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   
     
 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:12375: checking for dlopen in -ldl" >&5
+echo "configure:12466: 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 12380 "configure"
+#line 12471 "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
@@ -12387,7 +12478,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12482: \"$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
@@ -12406,12 +12497,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6
-echo "configure:12410: checking for dlopen in -lc" >&5
+echo "configure:12501: 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 12415 "configure"
+#line 12506 "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
@@ -12422,7 +12513,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12517: \"$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
@@ -12461,12 +12552,12 @@ EOF
   else
     
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:12465: checking for shl_load in -ldld" >&5
+echo "configure:12556: 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 12470 "configure"
+#line 12561 "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
@@ -12477,7 +12568,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:12481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12572: \"$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
@@ -12504,12 +12595,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6
-echo "configure:12508: checking for dld_init in -ldld" >&5
+echo "configure:12599: 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 12513 "configure"
+#line 12604 "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
@@ -12520,7 +12611,7 @@ int main() {
 dld_init()
 ; return 0; }
 EOF
-if { (eval echo configure:12524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12615: \"$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
@@ -12565,7 +12656,7 @@ xehost=$canonical
 xealias=$internal_configuration
 
 echo "checking how to build dynamic libraries for ${xehost}" 1>&6
-echo "configure:12569: checking how to build dynamic libraries for ${xehost}" >&5
+echo "configure:12660: checking how to build dynamic libraries for ${xehost}" >&5
 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
 case "$xehost" in
 *-*-linux-gnu*) ;;
@@ -12593,9 +12684,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:12597: checking checking whether we are using GNU C" >&5
+echo "configure:12688: checking checking whether we are using GNU C" >&5
   cat > conftest.$ac_ext <<EOF
-#line 12599 "configure"
+#line 12690 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -12617,7 +12708,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6
-echo "configure:12621: checking how to produce PIC code" >&5
+echo "configure:12712: checking how to produce PIC code" >&5
 wl=
 
 can_build_shared=yes
@@ -12710,18 +12801,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:12714: checking if PIC flag ${dll_cflags} really works" >&5
+echo "configure:12805: checking if PIC flag ${dll_cflags} really works" >&5
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $dll_cflags -DPIC"
   cat > conftest.$ac_ext <<EOF
-#line 12718 "configure"
+#line 12809 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12725: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12816: \"$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
@@ -12752,7 +12843,7 @@ cc_produces_so=no
 xldf=
 xcldf=
 echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6
-echo "configure:12756: checking if C compiler can produce shared libraries" >&5
+echo "configure:12847: checking if C compiler can produce shared libraries" >&5
 if test "$XEGCC" = yes; then
   xcldf="-shared"
   xldf="-shared"
@@ -12803,14 +12894,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 12807 "configure"
+#line 12898 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cc_produces_so=yes
 else
@@ -12835,7 +12926,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:12839: checking for ld used by GCC" >&5
+echo "configure:12930: checking for ld used by GCC" >&5
     ac_prog=`($CC -print-prog-name=ld) 2>&5`
     case "$ac_prog" in
     # Accept absolute paths.
@@ -12860,7 +12951,7 @@ echo "configure:12839: checking for ld used by GCC" >&5
     esac
   else
     echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:12864: checking for GNU ld" >&5
+echo "configure:12955: checking for GNU ld" >&5
   fi
 
   if test -z "$LTLD"; then
@@ -12898,7 +12989,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:12902: checking if the linker is GNU ld" >&5
+echo "configure:12993: 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
@@ -12925,7 +13016,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:12929: checking whether the linker supports shared libraries" >&5
+echo "configure:13020: checking whether the linker supports shared libraries" >&5
   dll_ld=$CC
   dll_ldflags=$LDFLAGS
   ld_shlibs=yes
@@ -13140,10 +13231,10 @@ EOF
     for ac_func in dlerror _dlerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13144: checking for $ac_func" >&5
+echo "configure:13235: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13147 "configure"
+#line 13238 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -13166,7 +13257,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13261: \"$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
@@ -13205,11 +13296,11 @@ done
 fi
 
 cat > conftest.$ac_ext <<EOF
-#line 13209 "configure"
+#line 13300 "configure"
 #include "confdefs.h"
 int main(int c,char *v[]){return 0;}
 EOF
-if { (eval echo configure:13213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:13304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -13350,13 +13441,25 @@ if test "$extra_verbose" = "yes"; then
   echo ""
 fi
 
-if test -f $srcdir/src/gdbinit -a ! -f src/gdbinit ; then
-  echo "creating src/gdbinit"; echo ""
-  echo "source $srcdir/src/gdbinit" > src/gdbinit
+
+if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then
+  test "$extra_verbose" = "yes" && echo "creating src/.gdbinit"
+  echo "source $srcdir/src/.gdbinit" > "src/.gdbinit"
+fi
+
+if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then
+  test "$extra_verbose" = "yes" && echo "creating src/.dbxrc"
+  echo ". $srcdir/src/.dbxrc" > "src/.dbxrc"
+fi
+
+if test -f "$srcdir/TAGS" -a ! -f "TAGS"; then
+  test "$extra_verbose" = "yes" && echo "creating TAGS"
+  echo "\f
+$srcdir/TAGS,include" > "TAGS"
 fi
 
 if test "$__SUNPRO_C" = "yes"; then
-  echo "creating .sbinit"; echo ""
+  test "$extra_verbose" = "yes" && echo "creating .sbinit"
   ( echo "# For use with Sun WorkShop's Source browser."
     echo "# See sbquery(1) and sbinit(4) for more information"
     for dir in $MAKE_SUBDIR; do echo "import $dir"; done
 if test -n "$runpath"; then
   echo "  Runtime library search path:                            $runpath"
 fi
+if test "$have_xaw" = "yes"; then
+  echo "  Athena library to link:                                 $athena_lib"
+  echo "  Athena header include path:                             $athena_h_path"
+fi
 test "$with_dnet"  = yes && echo "  Compiling in support for DNET."
 test "$with_socks" = yes && echo "  Compiling in support for SOCKS."
 test "$with_xauth" = yes && echo "  Compiling in support for XAUTH."
@@ -13923,13 +14030,11 @@ case "$with_scrollbars" in
   lucid    ) echo "  Using Lucid scrollbars."     ;;
   motif    ) echo "  Using Motif scrollbars."     ;;
   athena   ) echo "  Using Athena scrollbars."    ;;
-  athena3d ) echo "  Using Athena-3d scrollbars." ;;
   msw ) echo "  Using MS-Windows scrollbars." ;;
 esac
 case "$with_widgets" in
   motif    ) echo "  Using Motif native widgets."     ;;
   athena   ) echo "  Using Athena native widgets."    ;;
-  athena3d ) echo "  Using Athena-3d native widgets." ;;
   msw ) echo "  Using MS-Windows native widgets." ;;
 esac
 case "$with_dialogs" in
@@ -13943,7 +14048,6 @@ case "$with_dialogs" in
     fi; fi
     ;;
   athena   ) echo "  Using Athena dialog boxes."    ;;
-  athena3d ) echo "  Using Athena-3d dialog boxes." ;;
   msw ) echo "  Using MS-Windows dialog boxes." ;;
 esac
 test "$with_modules" = "yes" && echo "  Compiling in dynamic shared object module support."
index 1574790..c2cd178 100644 (file)
@@ -675,9 +675,10 @@ The default is to autodetect all sound support."])
          case "$val" in
            lockf )     val=lockf ;;
            flock )     val=flock ;;
-           file )      val=file  ;;
+           file | dot ) val=file  ;;
+           locking )   val=locking  ;;
            * ) USAGE_ERROR(["The \`--$optname' option must have one of these values:
-  \`lockf', \`flock', or \`file'."]) ;;
+  \`lockf', \`flock', \`file', \`locking', or \`mmdf'."]) ;;
          esac
           eval "$opt=\"$val\""
         ;;
@@ -908,7 +909,7 @@ dnl is still relative.  We do not symlink lock because someone may
 dnl have stuck the source on a read-only partition.  Instead we
 dnl create it as an actual directory later on if it does not already
 dnl exist.
-for dir in lisp etc man info; do
+for dir in lisp etc man info tests; do
   if test ! -d "$dir" ; then
     echo Making symbolic link to "$srcdir/$dir"
     ${LN_S} "$srcdir/$dir" "$dir"
@@ -1771,8 +1772,10 @@ configure___ start_files=START_FILES
 CPP_boolean_to_sh(ORDINARY_LINK, ordinary_link)
 CPP_boolean_to_sh(SYSTEM_MALLOC, system_malloc)
 CPP_boolean_to_sh(TERMINFO, have_terminfo)
+dnl The MAIL_USE_xxx variables come from the s&m headers
 CPP_boolean_to_sh(MAIL_USE_FLOCK, mail_use_flock)
 CPP_boolean_to_sh(MAIL_USE_LOCKF, mail_use_lockf)
+CPP_boolean_to_sh(MAIL_USE_LOCKING, mail_use_locking)
 CPP_boolean_to_sh(HAVE_WIN32_PROCESSES, win32_processes)
 EOF
 
@@ -1795,6 +1798,13 @@ test "$extra_verbose" = "yes" && \
   ld lib_gcc ld_text_start_addr start_files ordinary_link
   have_terminfo mail_use_flock mail_use_lockf) && echo ""
 
+dnl Pick up mingw32 include path
+case "$opsys" in mingw*) mingw_include=`eval "gcc -print-file-name=libc.a"` ;
+       mingw_include=`eval "dirname $mingw_include"` ;
+       mingw_include="-I$mingw_include/../include/mingw32" ;
+       XE_APPEND($mingw_include, c_switch_system) ;;
+esac
+
 dnl Non-ordinary link usually requires -lc
 test "$ordinary_link" = "no" -a -z "$libs_standard" && libs_standard="-lc"
 
@@ -2257,12 +2267,22 @@ AC_TRY_LINK([#include <math.h>],
 
 dnl Determine type of mail locking from configure args and s&m headers
 AC_CHECKING(type of mail spool file locking)
+AC_CHECK_FUNCS(lockf flock)
+dnl The mail_use_xxx variables are set according to the s&m headers.
 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 AC_DEFINE(REAL_MAIL_USE_LOCKF)
-elif test "$mail_locking" = "flock"; then AC_DEFINE(REAL_MAIL_USE_FLOCK)
-else mail_locking="dot-locking"
+test -z "$mail_locking" -a "$mail_use_locking" = "yes" && mail_locking=locking
+if   test "$mail_locking" = "lockf"; then AC_DEFINE(MAIL_LOCK_LOCKF)
+elif test "$mail_locking" = "flock"; then AC_DEFINE(MAIL_LOCK_FLOCK)
+elif test "$mail_locking" = "locking"; then AC_DEFINE(MAIL_LOCK_LOCKING)
+else mail_locking="dot-locking"; AC_DEFINE(MAIL_LOCK_DOT)
 fi
+test "$mail_locking" = "lockf" -a "$ac_cv_func_lockf" != "yes" && \
+  XE_DIE("lockf mail locking requested but not available.")
+test "$mail_locking" = "flock" -a "$ac_cv_func_flock" != "yes" && \
+  XE_DIE("flock mail locking requested but not available.")
+test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \
+  XE_DIE("locking mail locking requested but not available.")
 
 case "$opsys" in decosf*)
   AC_CHECK_LIB(pthreads, cma_open)
@@ -2901,7 +2921,7 @@ if test "$with_x11" = "yes"; then
 
   dnl What in heck did the user actually want?
   case "$with_athena" in
-    dnl This is the default, old fashioned flat Athena. 
+    dnl This is the default, old fashioned flat Athena.
     "xaw" | "")        athena_variant=Xaw      athena_3d=no  ;;
     "3d")      athena_variant=Xaw3d    athena_3d=yes ;;
     "next")    athena_variant=neXtaw   athena_3d=yes ;;
@@ -2912,22 +2932,22 @@ if test "$with_x11" = "yes"; then
 
   dnl Search for the Athena library...
   if test "$athena_3d" = "no"; then
-    AC_CHECK_LIB($athena_variant, XawScrollbarSetThumb, 
+    AC_CHECK_LIB($athena_variant, XawScrollbarSetThumb,
       [
         dnl Must not be a 3d library...
-        AC_CHECK_LIB($athena_variant, threeDClassRec, 
+        AC_CHECK_LIB($athena_variant, threeDClassRec,
           AC_MSG_WARN("Could not find a non-3d Athena widget library."),
           athena_lib=$athena_variant)
-      ], 
+      ],
       AC_MSG_WARN("Could not find an Athena widget library."))
   else
     dnl The real configuration, need 3d library
     AC_CHECK_LIB($athena_variant, threeDClassRec, athena_lib=$athena_variant,
       dnl OK, couldn't find it with a proper name, try the standard Athena lib
       dnl If that is 3d, presume the user asked for what they have installed.
-      AC_CHECK_LIB(Xaw, threeDClassRec, 
+      AC_CHECK_LIB(Xaw, threeDClassRec,
         [
-          athena_lib=Xaw; 
+          athena_lib=Xaw;
           AC_MSG_WARN("Assuming that libXaw is actually $athena_variant.");
         ],
         AC_MSG_WARN("Could not find a 3d Athena widget library that looked like $athena_variant.")))
@@ -3255,7 +3275,7 @@ if test "$need_motif" = "yes" ; then
   XE_COMPUTE_RUNPATH()
 fi
 
-AC_CHECK_FUNCS(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)
+AC_CHECK_FUNCS(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 fsync ftruncate umask)
 
 dnl realpath is buggy on linux, decosf and aix4
 
@@ -3926,15 +3946,32 @@ if test "$extra_verbose" = "yes"; then
   echo ""
 fi
 
-dnl Create some auxiliary files
-if test -f $srcdir/src/gdbinit -a ! -f src/gdbinit ; then
-  echo "creating src/gdbinit"; echo ""
-  echo "source $srcdir/src/gdbinit" > src/gdbinit
+dnl ----------------------------------------------
+dnl Create some auxiliary files for developers.
+dnl ----------------------------------------------
+
+dnl Create a .gdbinit useful for debugging XEmacs
+if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then
+  test "$extra_verbose" = "yes" && echo "creating src/.gdbinit"
+  echo "source $srcdir/src/.gdbinit" > "src/.gdbinit"
+fi
+
+dnl Create a .dbxrc useful for debugging XEmacs
+if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then
+  test "$extra_verbose" = "yes" && echo "creating src/.dbxrc"
+  echo ". $srcdir/src/.dbxrc" > "src/.dbxrc"
+fi
+
+dnl Create a useful TAGS file
+if test -f "$srcdir/TAGS" -a ! -f "TAGS"; then
+  test "$extra_verbose" = "yes" && echo "creating TAGS"
+  echo "\f
+$srcdir/TAGS,include" > "TAGS"
 fi
 
 dnl Create top level .sbinit for Sun compilers
 if test "$__SUNPRO_C" = "yes"; then
-  echo "creating .sbinit"; echo ""
+  test "$extra_verbose" = "yes" && echo "creating .sbinit"
   ( echo "# For use with Sun WorkShop's Source browser."
     echo "# See sbquery(1) and sbinit(4) for more information"
     for dir in $MAKE_SUBDIR; do echo "import $dir"; done
@@ -4253,6 +4290,10 @@ fi
 if test -n "$runpath"; then
   echo "  Runtime library search path:                            $runpath"
 fi
+if test "$have_xaw" = "yes"; then
+  echo "  Athena library to link:                                 $athena_lib"
+  echo "  Athena header include path:                             $athena_h_path"
+fi
 test "$with_dnet"  = yes && echo "  Compiling in support for DNET."
 test "$with_socks" = yes && echo "  Compiling in support for SOCKS."
 test "$with_xauth" = yes && echo "  Compiling in support for XAUTH."
@@ -4338,13 +4379,11 @@ case "$with_scrollbars" in
   lucid    ) echo "  Using Lucid scrollbars."     ;;
   motif    ) echo "  Using Motif scrollbars."     ;;
   athena   ) echo "  Using Athena scrollbars."    ;;
-  athena3d ) echo "  Using Athena-3d scrollbars." ;;
   msw ) echo "  Using MS-Windows scrollbars." ;;
 esac
 case "$with_widgets" in
   motif    ) echo "  Using Motif native widgets."     ;;
   athena   ) echo "  Using Athena native widgets."    ;;
-  athena3d ) echo "  Using Athena-3d native widgets." ;;
   msw ) echo "  Using MS-Windows native widgets." ;;
 esac
 case "$with_dialogs" in
@@ -4358,7 +4397,6 @@ case "$with_dialogs" in
     fi; fi
     ;;
   athena   ) echo "  Using Athena dialog boxes."    ;;
-  athena3d ) echo "  Using Athena-3d dialog boxes." ;;
   msw ) echo "  Using MS-Windows dialog boxes." ;;
 esac
 test "$with_modules" = "yes" && echo "  Compiling in dynamic shared object module support."
index 71d3f8f..a6e9c6b 100644 (file)
@@ -141,7 +141,7 @@ Additional features:
                         installed LDAP libraries on the system).
 --mail-locking=TYPE (*) Specify the locking to be used by movemail to prevent
                         concurrent updates of mail spool files. Valid types
-                        are `lockf', `flock', and `file'.
+                        are `lockf', `flock', and `dot'.
 --with-modules         Compile in experimental support for dynamically
                        loaded libraries (Dynamic Shared Objects).
 --with-site-lisp=yes    Allow for a site-lisp directory in the XEmacs hierarchy
index 3dcba1e..1c58518 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -136,6 +136,21 @@ The only thing selection doesn't do is set the clipboard automatically
 as this would break the MS-Windows model.  If you want this behaviour
 then set `selection-sets-clipboard' to t
 
+** Mail spool locking now works correctly.
+XEmacs has always come with a little auxiliary program, movemail,
+which moves mail out of the system's spool area into user storage.  To
+coordinate between XEmacs, the mail delivery agent, and other mail
+user agents, movemail needs to properly lock the spool file before
+moving it.  Movemail now correctly respects the --mail-locking option
+to configure.  Moreover, movemail's locking behavior can be specified
+at run-time, via a new command-line option -m to movemail, or through
+the environment variable EMACSLOCKMETHOD.
+
+When installing XEmacs, make sure you configure it according to your
+environment's mail spool locking conventions.  When you're using a
+binary kit, set the `mail-lock-method' variable at startup, or the
+EMACSLOCKMETHOD environment variable.
+
 ** New command-line switches -user-init-file and -user-init-directory.
 These can be used to specify alternate locations for what is normally
 ~/.emacs and ~/.xemacs.
@@ -144,6 +159,10 @@ 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.
 
+** New variable `mswindows-meta-activates-menu'.
+If you set this variable to nil then pressing the Alt key under
+MS-Windows will no longer activate the menubar. The default is t.
+
 ** Etags changes.
 
 *** In DOS, etags looks for file.cgz if it cannot find file.c.
index f15c75d..def5aa3 100644 (file)
@@ -1,4 +1,4 @@
-Copyright (c) 1997, Adrian Aichner <adrian@xemacs.org>.
+Copyright (c) 1997-2000, Adrian Aichner <adrian@xemacs.org>.
 
 Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions.
 
@@ -39,7 +39,7 @@ weiterbewegt.  Um eine Seite zur
 META-Taste gedrückt und tippe v oder tippe <ESC>v wenn Deine Tastatur
 keine META-, EDIT- oder ALT-Taste besitzt).
 
->>  Versuche ein paar Mal M-v und C-v zu tippen.
+>>  Versuche ein paarmal M-v und C-v zu tippen.
 
 
 * ZUSAMMENFASSUNG
@@ -1137,7 +1137,7 @@ Diese Version des Tutorials ist, wie GNU Emacs selbst,
 urheberrechtlich geschützt und erlaubt die Verteilung von Kopien unter
 bestimmten Voraussetzungen:
 
-Copyright (c) 1997, Adrian Aichner <adrian@xemacs.org>.
+Copyright (c) 1997-2000, Adrian Aichner <adrian@xemacs.org>.
 
 Copyright (c) 1985, 1996 Free Software Foundation
 
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 763a373..9b95d11 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 b47a130..749c9c9 100644 (file)
@@ -779,7 +779,7 @@ Emacs Info-mode Variables
    The following variables may modify the behaviour of Info-mode in
 Emacs; you may wish to set one or several of these variables
 interactively, or in your `~/.emacs' init file.  *Note Examining and
-Setting Variables: (emacs)Examining.
+Setting Variables: (xemacs)Examining.
 
 `Info-enable-edit'
      Set to `nil', disables the `e' (`Info-edit') command.  A non-`nil'
@@ -835,6 +835,6 @@ Node: Cross-refs\7f29297
 Node: Tags\7f29999
 Node: Checking\7f31301
 Node: Emacs Info Variables\7f32254
-Node: Creating an Info File\7f33243
+Node: Creating an Info File\7f33244
 \1f
 End Tag Table
index df42ba5..b3bc9ec 100644 (file)
@@ -42,11 +42,11 @@ Indirect:
 internals.info-1: 1796
 internals.info-2: 45950
 internals.info-3: 93024
-internals.info-4: 141396
-internals.info-5: 183427
-internals.info-6: 232848
-internals.info-7: 281578
-internals.info-8: 331035
+internals.info-4: 141398
+internals.info-5: 183429
+internals.info-6: 232850
+internals.info-7: 281580
+internals.info-8: 331037
 \1f
 Tag Table:
 (Indirect)
@@ -74,106 +74,106 @@ Node: Conversion to and from External Data\7f96774
 Node: General Guidelines for Writing Mule-Aware Code\7f101655
 Node: An Example of Mule-Aware Code\7f103686
 Node: Techniques for XEmacs Developers\7f105673
-Node: A Summary of the Various XEmacs Modules\7f109444
-Node: Low-Level Modules\7f110264
-Node: Basic Lisp Modules\7f117786
-Node: Modules for Standard Editing Operations\7f126110
-Node: Editor-Level Control Flow Modules\7f131998
-Node: Modules for the Basic Displayable Lisp Objects\7f135445
-Node: Modules for other Display-Related Lisp Objects\7f137967
-Node: Modules for the Redisplay Mechanism\7f139045
-Node: Modules for Interfacing with the File System\7f141396
-Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145094
-Node: Modules for Interfacing with the Operating System\7f150548
-Node: Modules for Interfacing with X Windows\7f158209
-Node: Modules for Internationalization\7f161645
-Node: Allocation of Objects in XEmacs Lisp\7f164282
-Node: Introduction to Allocation\7f164836
-Node: Garbage Collection\7f170299
-Node: GCPROing\7f173252
-Node: Garbage Collection - Step by Step\7f180063
-Node: Invocation\7f180455
-Node: garbage_collect_1\7f183427
-Node: mark_object\7f192907
-Node: gc_sweep\7f194719
-Node: sweep_lcrecords_1\7f199782
-Node: compact_string_chars\7f200777
-Node: sweep_strings\7f202957
-Node: sweep_bit_vectors_1\7f203922
-Node: Integers and Characters\7f204598
-Node: Allocation from Frob Blocks\7f205350
-Node: lrecords\7f206954
-Node: Low-level allocation\7f219416
-Node: Pure Space\7f223584
-Node: Cons\7f223759
-Node: Vector\7f224475
-Node: Bit Vector\7f225052
-Node: Symbol\7f225545
-Node: Marker\7f226114
-Node: String\7f226669
-Node: Compiled Function\7f230284
-Node: Events and the Event Loop\7f230453
-Node: Introduction to Events\7f230932
-Node: Main Loop\7f232848
-Node: Specifics of the Event Gathering Mechanism\7f236424
-Node: Specifics About the Emacs Event\7f248877
-Node: The Event Stream Callback Routines\7f249132
-Node: Other Event Loop Functions\7f249377
-Node: Converting Events\7f250517
-Node: Dispatching Events; The Command Builder\7f251126
-Node: Evaluation; Stack Frames; Bindings\7f251361
-Node: Evaluation\7f251703
-Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258243
-Node: Simple Special Forms\7f260627
-Node: Catch and Throw\7f261409
-Node: Symbols and Variables\7f263984
-Node: Introduction to Symbols\7f264248
-Node: Obarrays\7f265286
-Node: Symbol Values\7f268819
-Node: Buffers and Textual Representation\7f271107
-Node: Introduction to Buffers\7f271765
-Node: The Text in a Buffer\7f274428
-Node: Buffer Lists\7f281578
-Node: Markers and Extents\7f283529
-Node: Bufbytes and Emchars\7f285794
-Node: The Buffer Object\7f286009
-Node: MULE Character Sets and Encodings\7f289489
-Node: Character Sets\7f290551
-Node: Encodings\7f293994
-Node: Japanese EUC (Extended Unix Code)\7f295061
-Node: JIS7\7f295875
-Node: Internal Mule Encodings\7f297225
-Node: Internal String Encoding\7f299055
-Node: Internal Character Encoding\7f301168
-Node: CCL\7f302892
-Node: The Lisp Reader and Compiler\7f309644
-Node: Lstreams\7f309857
-Node: Creating an Lstream\7f310888
-Node: Lstream Types\7f312098
-Node: Lstream Functions\7f312350
-Node: Lstream Methods\7f315919
-Node: Consoles; Devices; Frames; Windows\7f319062
-Node: Introduction to Consoles; Devices; Frames; Windows\7f319377
-Node: Point\7f321869
-Node: Window Hierarchy\7f323148
-Node: The Window Object\7f327598
-Node: The Redisplay Mechanism\7f331035
-Node: Critical Redisplay Sections\7f331827
-Node: Line Start Cache\7f332782
-Node: Redisplay Piece by Piece\7f336019
-Node: Extents\7f338055
-Node: Introduction to Extents\7f338593
-Node: Extent Ordering\7f339719
-Node: Format of the Extent Info\7f340960
-Node: Zero-Length Extents\7f342848
-Node: Mathematics of Extent Ordering\7f344246
-Node: Extent Fragments\7f349003
-Node: Faces\7f350090
-Node: Glyphs\7f350206
-Node: Specifiers\7f353224
-Node: Menus\7f353353
-Node: Subprocesses\7f355611
-Node: Interface to X Windows\7f357587
-Node: Index\7f357758
+Node: A Summary of the Various XEmacs Modules\7f109446
+Node: Low-Level Modules\7f110266
+Node: Basic Lisp Modules\7f117788
+Node: Modules for Standard Editing Operations\7f126112
+Node: Editor-Level Control Flow Modules\7f132000
+Node: Modules for the Basic Displayable Lisp Objects\7f135447
+Node: Modules for other Display-Related Lisp Objects\7f137969
+Node: Modules for the Redisplay Mechanism\7f139047
+Node: Modules for Interfacing with the File System\7f141398
+Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145096
+Node: Modules for Interfacing with the Operating System\7f150550
+Node: Modules for Interfacing with X Windows\7f158211
+Node: Modules for Internationalization\7f161647
+Node: Allocation of Objects in XEmacs Lisp\7f164284
+Node: Introduction to Allocation\7f164838
+Node: Garbage Collection\7f170301
+Node: GCPROing\7f173254
+Node: Garbage Collection - Step by Step\7f180065
+Node: Invocation\7f180457
+Node: garbage_collect_1\7f183429
+Node: mark_object\7f192909
+Node: gc_sweep\7f194721
+Node: sweep_lcrecords_1\7f199784
+Node: compact_string_chars\7f200779
+Node: sweep_strings\7f202959
+Node: sweep_bit_vectors_1\7f203924
+Node: Integers and Characters\7f204600
+Node: Allocation from Frob Blocks\7f205352
+Node: lrecords\7f206956
+Node: Low-level allocation\7f219418
+Node: Pure Space\7f223586
+Node: Cons\7f223761
+Node: Vector\7f224477
+Node: Bit Vector\7f225054
+Node: Symbol\7f225547
+Node: Marker\7f226116
+Node: String\7f226671
+Node: Compiled Function\7f230286
+Node: Events and the Event Loop\7f230455
+Node: Introduction to Events\7f230934
+Node: Main Loop\7f232850
+Node: Specifics of the Event Gathering Mechanism\7f236426
+Node: Specifics About the Emacs Event\7f248879
+Node: The Event Stream Callback Routines\7f249134
+Node: Other Event Loop Functions\7f249379
+Node: Converting Events\7f250519
+Node: Dispatching Events; The Command Builder\7f251128
+Node: Evaluation; Stack Frames; Bindings\7f251363
+Node: Evaluation\7f251705
+Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258245
+Node: Simple Special Forms\7f260629
+Node: Catch and Throw\7f261411
+Node: Symbols and Variables\7f263986
+Node: Introduction to Symbols\7f264250
+Node: Obarrays\7f265288
+Node: Symbol Values\7f268821
+Node: Buffers and Textual Representation\7f271109
+Node: Introduction to Buffers\7f271767
+Node: The Text in a Buffer\7f274430
+Node: Buffer Lists\7f281580
+Node: Markers and Extents\7f283531
+Node: Bufbytes and Emchars\7f285796
+Node: The Buffer Object\7f286011
+Node: MULE Character Sets and Encodings\7f289491
+Node: Character Sets\7f290553
+Node: Encodings\7f293996
+Node: Japanese EUC (Extended Unix Code)\7f295063
+Node: JIS7\7f295877
+Node: Internal Mule Encodings\7f297227
+Node: Internal String Encoding\7f299057
+Node: Internal Character Encoding\7f301170
+Node: CCL\7f302894
+Node: The Lisp Reader and Compiler\7f309646
+Node: Lstreams\7f309859
+Node: Creating an Lstream\7f310890
+Node: Lstream Types\7f312100
+Node: Lstream Functions\7f312352
+Node: Lstream Methods\7f315921
+Node: Consoles; Devices; Frames; Windows\7f319064
+Node: Introduction to Consoles; Devices; Frames; Windows\7f319379
+Node: Point\7f321871
+Node: Window Hierarchy\7f323150
+Node: The Window Object\7f327600
+Node: The Redisplay Mechanism\7f331037
+Node: Critical Redisplay Sections\7f331829
+Node: Line Start Cache\7f332784
+Node: Redisplay Piece by Piece\7f336021
+Node: Extents\7f338057
+Node: Introduction to Extents\7f338595
+Node: Extent Ordering\7f339721
+Node: Format of the Extent Info\7f340962
+Node: Zero-Length Extents\7f342850
+Node: Mathematics of Extent Ordering\7f344248
+Node: Extent Fragments\7f349005
+Node: Faces\7f350092
+Node: Glyphs\7f350208
+Node: Specifiers\7f353226
+Node: Menus\7f353355
+Node: Subprocesses\7f355613
+Node: Interface to X Windows\7f357589
+Node: Index\7f357760
 \1f
 End Tag Table
index 2468102..8fce7d2 100644 (file)
@@ -382,8 +382,8 @@ out where the cycles are going.  Specific projects:
 Function calls in elisp are especially expensive.  Iterating over a
 long list is going to be 30 times faster implemented in C than in Elisp.
 
-   To get started debugging XEmacs, take a look at the `gdbinit' and
-`dbxrc' files in the `src' directory.  *Note Q2.1.15 - How to Debug an
+   To get started debugging XEmacs, take a look at the `.gdbinit' and
+`.dbxrc' files in the `src' directory.  *Note Q2.1.15 - How to Debug an
 XEmacs problem with a debugger: (xemacs-faq)Q2.1.15 - How to Debug an
 XEmacs problem with a debugger.
 
index 54a670b..944ee4a 100644 (file)
@@ -227,7 +227,7 @@ File: internals.info,  Node: mark_object,  Next: gc_sweep,  Prev: garbage_collec
 the object is a real Lisp object `Lisp_Type_Record' or just an integer
 or a character. Integers and characters are the only two types that are
 stored directly - without another level of indirection, and therefore
-they don´t have to be marked and collected.  *Note How Lisp Objects Are
+they don't have to be marked and collected.  *Note How Lisp Objects Are
 Represented in C::.
 
    The second case is the one we have to handle. It is the one when we
@@ -268,7 +268,7 @@ and managed, and consequently different ways to free them from memory.
 objects are allocated and handled using that scheme of `lcrecords'.
 Each object is `malloc'ed separately instead of placing it in one of
 the contiguous frob blocks. All types that are currently stored using
-`lcrecords'´s  `alloc_lcrecord' and `make_lcrecord_list' are the types:
+`lcrecords''s  `alloc_lcrecord' and `make_lcrecord_list' are the types:
 vectors, buffers, char-table, char-table-entry, console, weak-list,
 database, device, ldap, hash-table, command-builder, extent-auxiliary,
 extent-info, face, coding-system, frame, image-instance, glyph,
index be9fb29..bbd178b 100644 (file)
@@ -59,42 +59,42 @@ lispref.info-5: 195524
 lispref.info-6: 243218
 lispref.info-7: 291479
 lispref.info-8: 340637
-lispref.info-9: 387989
-lispref.info-10: 436636
-lispref.info-11: 484814
-lispref.info-12: 531411
-lispref.info-13: 579316
-lispref.info-14: 627531
-lispref.info-15: 675782
-lispref.info-16: 725497
-lispref.info-17: 774234
-lispref.info-18: 821024
-lispref.info-19: 868080
-lispref.info-20: 916814
-lispref.info-21: 966178
-lispref.info-22: 1013019
-lispref.info-23: 1060032
-lispref.info-24: 1109434
-lispref.info-25: 1159112
-lispref.info-26: 1209010
-lispref.info-27: 1258233
-lispref.info-28: 1307008
-lispref.info-29: 1356451
-lispref.info-30: 1397762
-lispref.info-31: 1446914
-lispref.info-32: 1496128
-lispref.info-33: 1545712
-lispref.info-34: 1593896
-lispref.info-35: 1639532
-lispref.info-36: 1680851
-lispref.info-37: 1725798
-lispref.info-38: 1775494
-lispref.info-39: 1824556
-lispref.info-40: 1873941
-lispref.info-41: 1923837
-lispref.info-42: 1972828
-lispref.info-43: 2017337
-lispref.info-44: 2055716
+lispref.info-9: 387481
+lispref.info-10: 436941
+lispref.info-11: 485107
+lispref.info-12: 534860
+lispref.info-13: 582765
+lispref.info-14: 630980
+lispref.info-15: 679231
+lispref.info-16: 728946
+lispref.info-17: 777683
+lispref.info-18: 824473
+lispref.info-19: 871529
+lispref.info-20: 920263
+lispref.info-21: 969627
+lispref.info-22: 1016468
+lispref.info-23: 1063481
+lispref.info-24: 1112883
+lispref.info-25: 1162561
+lispref.info-26: 1212459
+lispref.info-27: 1261682
+lispref.info-28: 1310457
+lispref.info-29: 1359900
+lispref.info-30: 1401211
+lispref.info-31: 1450363
+lispref.info-32: 1499577
+lispref.info-33: 1549161
+lispref.info-34: 1597345
+lispref.info-35: 1642981
+lispref.info-36: 1684300
+lispref.info-37: 1729247
+lispref.info-38: 1778943
+lispref.info-39: 1828005
+lispref.info-40: 1877390
+lispref.info-41: 1927286
+lispref.info-42: 1976277
+lispref.info-43: 2020786
+lispref.info-44: 2059165
 \1f
 Tag Table:
 (Indirect)
@@ -255,633 +255,633 @@ Node: Catch and Throw\7f365886
 Node: Examples of Catch\7f369730
 Node: Errors\7f371749
 Node: Signaling Errors\7f373238
-Node: Processing of Errors\7f376306
-Node: Handling Errors\7f377636
-Node: Error Symbols\7f384542
-Node: Cleanups\7f387989
-Node: Variables\7f391769
-Node: Global Variables\7f393538
-Node: Constant Variables\7f394614
-Node: Local Variables\7f395240
-Node: Void Variables\7f400184
-Node: Defining Variables\7f403695
-Node: Accessing Variables\7f410860
-Node: Setting Variables\7f412286
-Node: Variable Scoping\7f416805
-Node: Scope\7f418404
-Node: Extent\7f419929
-Node: Impl of Scope\7f421408
-Node: Using Scoping\7f423371
-Node: Buffer-Local Variables\7f424893
-Node: Intro to Buffer-Local\7f425729
-Node: Creating Buffer-Local\7f428272
-Node: Default Value\7f433492
-Node: Variable Aliases\7f436636
-Node: Functions\7f438422
-Node: What Is a Function\7f439516
-Node: Lambda Expressions\7f443563
-Node: Lambda Components\7f444473
-Node: Simple Lambda\7f446305
-Node: Argument List\7f447964
-Node: Function Documentation\7f451692
-Node: Function Names\7f453634
-Node: Defining Functions\7f456208
-Node: Calling Functions\7f459250
-Node: Mapping Functions\7f463099
-Node: Anonymous Functions\7f465747
-Node: Function Cells\7f468992
-Node: Inline Functions\7f473802
-Node: Related Topics\7f475612
-Node: Macros\7f476665
-Node: Simple Macro\7f477949
-Node: Expansion\7f478684
-Node: Compiling Macros\7f481658
-Node: Defining Macros\7f483496
-Node: Backquote\7f484814
-Node: Problems with Macros\7f487212
-Node: Argument Evaluation\7f487907
-Node: Surprising Local Vars\7f490808
-Node: Eval During Expansion\7f492876
-Node: Repeated Expansion\7f494570
-Node: Customization\7f496481
-Node: Common Keywords\7f496950
-Node: Group Definitions\7f499795
-Node: Variable Definitions\7f501988
-Node: Customization Types\7f506971
-Node: Simple Types\7f508407
-Node: Composite Types\7f510564
-Node: Splicing into Lists\7f515254
-Node: Type Keywords\7f517089
-Node: Loading\7f520609
-Node: How Programs Do Loading\7f522282
-Node: Autoload\7f531411
-Node: Repeated Loading\7f537491
-Node: Named Features\7f539605
-Node: Unloading\7f546038
-Node: Hooks for Loading\7f548194
-Node: Byte Compilation\7f548911
-Node: Speed of Byte-Code\7f550828
-Node: Compilation Functions\7f552035
-Node: Docs and Compilation\7f558424
-Node: Dynamic Loading\7f561077
-Node: Eval During Compile\7f563441
-Node: Compiled-Function Objects\7f564706
-Node: Disassembly\7f569505
-Node: Debugging\7f576759
-Node: Debugger\7f578171
-Node: Error Debugging\7f579316
-Node: Infinite Loops\7f582069
-Node: Function Debugging\7f583313
-Node: Explicit Debug\7f586103
-Node: Using Debugger\7f586875
-Node: Debugger Commands\7f588739
-Node: Invoking the Debugger\7f593056
-Node: Internals of Debugger\7f596971
-Node: Syntax Errors\7f601848
-Node: Excess Open\7f603096
-Node: Excess Close\7f604971
-Node: Compilation Errors\7f606392
-Node: Edebug\7f607680
-Node: Using Edebug\7f609787
-Node: Instrumenting\7f612484
-Node: Edebug Execution Modes\7f615973
-Node: Jumping\7f619083
-Node: Edebug Misc\7f621426
-Node: Breakpoints\7f622815
-Node: Global Break Condition\7f625621
-Node: Embedded Breakpoints\7f626576
-Node: Trapping Errors\7f627531
-Node: Edebug Views\7f629607
-Node: Edebug Eval\7f631572
-Node: Eval List\7f632749
-Node: Reading in Edebug\7f636134
-Node: Printing in Edebug\7f636933
-Node: Tracing\7f638648
-Node: Coverage Testing\7f640534
-Node: The Outside Context\7f642575
-Node: Checking Whether to Stop\7f643524
-Node: Edebug Display Update\7f644170
-Node: Edebug Recursive Edit\7f646192
-Node: Instrumenting Macro Calls\7f647846
-Node: Specification List\7f650328
-Node: Backtracking\7f659739
-Node: Debugging Backquote\7f661677
-Node: Specification Examples\7f665383
-Node: Edebug Options\7f667450
-Node: Read and Print\7f672787
-Node: Streams Intro\7f673764
-Node: Input Streams\7f675782
-Node: Input Functions\7f680683
-Node: Output Streams\7f682743
-Node: Output Functions\7f686795
-Node: Output Variables\7f691095
-Node: Minibuffers\7f695894
-Node: Intro to Minibuffers\7f697046
-Node: Text from Minibuffer\7f699236
-Node: Object from Minibuffer\7f704113
-Node: Minibuffer History\7f707320
-Node: Completion\7f710299
-Node: Basic Completion\7f712274
-Node: Minibuffer Completion\7f717286
-Node: Completion Commands\7f720853
-Node: High-Level Completion\7f725497
-Node: Reading File Names\7f729521
-Node: Programmed Completion\7f733205
-Node: Yes-or-No Queries\7f735587
-Node: Multiple Queries\7f741283
-Node: Reading a Password\7f745351
-Node: Minibuffer Misc\7f746688
-Node: Command Loop\7f751561
-Node: Command Overview\7f752907
-Node: Defining Commands\7f756191
-Node: Using Interactive\7f756939
-Node: Interactive Codes\7f761713
-Node: Interactive Examples\7f767517
-Node: Interactive Call\7f768831
-Node: Command Loop Info\7f774234
-Node: Events\7f779213
-Node: Event Types\7f780673
-Node: Event Contents\7f782596
-Node: Event Predicates\7f787072
-Node: Accessing Mouse Event Positions\7f788397
-Node: Frame-Level Event Position Info\7f789096
-Node: Window-Level Event Position Info\7f790136
-Node: Event Text Position Info\7f791900
-Node: Event Glyph Position Info\7f794392
-Node: Event Toolbar Position Info\7f795715
-Node: Other Event Position Info\7f796386
-Node: Accessing Other Event Info\7f796795
-Node: Working With Events\7f798415
-Node: Converting Events\7f804343
-Node: Reading Input\7f807296
-Node: Key Sequence Input\7f808298
-Node: Reading One Event\7f810252
-Node: Dispatching an Event\7f813013
-Node: Quoted Character Input\7f813464
-Node: Peeking and Discarding\7f814812
-Node: Waiting\7f818716
-Node: Quitting\7f821024
-Node: Prefix Command Arguments\7f825432
-Node: Recursive Editing\7f830519
-Node: Disabling Commands\7f835316
-Node: Command History\7f837384
-Node: Keyboard Macros\7f839123
-Node: Keymaps\7f841341
-Node: Keymap Terminology\7f842918
-Node: Format of Keymaps\7f845848
-Node: Creating Keymaps\7f846259
-Node: Inheritance and Keymaps\7f848338
-Node: Key Sequences\7f850710
-Node: Prefix Keys\7f855280
-Node: Active Keymaps\7f858865
-Node: Key Lookup\7f868080
-Node: Functions for Key Lookup\7f873244
-Node: Changing Key Bindings\7f878947
-Node: Key Binding Commands\7f885834
-Node: Scanning Keymaps\7f887900
-Node: Other Keymap Functions\7f896412
-Node: Menus\7f897034
-Node: Menu Format\7f897576
-Node: Menubar Format\7f906161
-Node: Menubar\7f906786
-Node: Modifying Menus\7f909900
-Node: Menu Filters\7f914918
-Node: Pop-Up Menus\7f916814
-Node: Menu Accelerators\7f919020
-Node: Creating Menu Accelerators\7f919742
-Node: Keyboard Menu Traversal\7f921060
-Node: Menu Accelerator Functions\7f921787
-Node: Buffers Menu\7f924822
-Node: Dialog Boxes\7f926116
-Node: Dialog Box Format\7f926283
-Node: Dialog Box Functions\7f927653
-Node: Toolbar\7f928051
-Node: Toolbar Intro\7f928376
-Node: Toolbar Descriptor Format\7f930787
-Node: Specifying the Toolbar\7f935281
-Node: Other Toolbar Variables\7f938889
-Node: Scrollbars\7f943316
-Node: Drag and Drop\7f943452
-Node: Supported Protocols\7f944528
-Node: OffiX DND\7f945031
-Node: CDE dt\7f946038
-Node: MSWindows OLE\7f946629
-Node: Loose ends\7f946800
-Node: Drop Interface\7f947192
-Node: Drag Interface\7f948214
-Node: Modes\7f948388
-Node: Major Modes\7f949339
-Node: Major Mode Conventions\7f952255
-Node: Example Major Modes\7f958210
-Node: Auto Major Mode\7f966178
-Node: Mode Help\7f973628
-Node: Derived Modes\7f974729
-Node: Minor Modes\7f976920
-Node: Minor Mode Conventions\7f978222
-Node: Keymaps and Minor Modes\7f981086
-Node: Modeline Format\7f981921
-Node: Modeline Data\7f983690
-Node: Modeline Variables\7f987962
-Node: %-Constructs\7f992678
-Node: Hooks\7f995589
-Node: Documentation\7f1002353
-Node: Documentation Basics\7f1003776
-Node: Accessing Documentation\7f1006828
-Node: Keys in Documentation\7f1013019
-Node: Describing Characters\7f1016482
-Node: Help Functions\7f1018836
-Node: Obsoleteness\7f1025279
-Node: Files\7f1028273
-Node: Visiting Files\7f1030198
-Node: Visiting Functions\7f1031703
-Node: Subroutines of Visiting\7f1036751
-Node: Saving Buffers\7f1038827
-Node: Reading from Files\7f1044920
-Node: Writing to Files\7f1047077
-Node: File Locks\7f1049794
-Node: Information about Files\7f1052847
-Node: Testing Accessibility\7f1053608
-Node: Kinds of Files\7f1057348
-Node: Truenames\7f1059029
-Node: File Attributes\7f1060032
-Node: Changing File Attributes\7f1065172
-Node: File Names\7f1070578
-Node: File Name Components\7f1072187
-Node: Directory Names\7f1075288
-Node: Relative File Names\7f1078741
-Node: File Name Expansion\7f1079819
-Node: Unique File Names\7f1083726
-Node: File Name Completion\7f1085341
-Node: User Name Completion\7f1088002
-Node: Contents of Directories\7f1089342
-Node: Create/Delete Dirs\7f1092655
-Node: Magic File Names\7f1093761
-Node: Partial Files\7f1099391
-Node: Intro to Partial Files\7f1099619
-Node: Creating a Partial File\7f1100859
-Node: Detached Partial Files\7f1101794
-Node: Format Conversion\7f1102916
-Node: Files and MS-DOS\7f1109434
-Node: Backups and Auto-Saving\7f1111498
-Node: Backup Files\7f1112173
-Node: Making Backups\7f1113570
-Node: Rename or Copy\7f1116319
-Node: Numbered Backups\7f1118812
-Node: Backup Names\7f1121057
-Node: Auto-Saving\7f1124340
-Node: Reverting\7f1132482
-Node: Buffers\7f1135640
-Node: Buffer Basics\7f1137055
-Node: Current Buffer\7f1139108
-Node: Buffer Names\7f1143798
-Node: Buffer File Name\7f1147003
-Node: Buffer Modification\7f1151123
-Node: Modification Time\7f1153319
-Node: Read Only Buffers\7f1156694
-Node: The Buffer List\7f1159112
-Node: Creating Buffers\7f1163942
-Node: Killing Buffers\7f1166091
-Node: Indirect Buffers\7f1169822
-Node: Windows\7f1172394
-Node: Basic Windows\7f1173872
-Node: Splitting Windows\7f1176970
-Node: Deleting Windows\7f1183841
-Node: Selecting Windows\7f1186522
-Node: Cyclic Window Ordering\7f1189651
-Node: Buffers and Windows\7f1194275
-Node: Displaying Buffers\7f1196116
-Node: Choosing Window\7f1201294
-Node: Window Point\7f1209010
-Node: Window Start\7f1211056
-Node: Vertical Scrolling\7f1215546
-Node: Horizontal Scrolling\7f1221683
-Node: Size of Window\7f1225192
-Node: Position of Window\7f1229910
-Node: Resizing Windows\7f1232150
-Node: Window Configurations\7f1237579
-Node: Frames\7f1241004
-Node: Creating Frames\7f1242773
-Node: Frame Properties\7f1244114
-Node: Property Access\7f1244930
-Node: Initial Properties\7f1245779
-Node: X Frame Properties\7f1248265
-Node: Size and Position\7f1252899
-Node: Frame Name\7f1254895
-Node: Frame Titles\7f1255809
-Node: Deleting Frames\7f1257633
-Node: Finding All Frames\7f1258233
-Node: Frames and Windows\7f1260227
-Node: Minibuffers and Frames\7f1261932
-Node: Input Focus\7f1262851
-Node: Visibility of Frames\7f1265929
-Node: Raising and Lowering\7f1267848
-Node: Frame Configurations\7f1270225
-Node: Frame Hooks\7f1270819
-Node: Consoles and Devices\7f1272626
-Node: Basic Console Functions\7f1275370
-Node: Basic Device Functions\7f1275793
-Node: Console Types and Device Classes\7f1276509
-Node: Connecting to a Console or Device\7f1278706
-Node: The Selected Console and Device\7f1280869
-Node: Console and Device I/O\7f1281895
-Node: Positions\7f1282659
-Node: Point\7f1283628
-Node: Motion\7f1286721
-Node: Character Motion\7f1287488
-Node: Word Motion\7f1289725
-Node: Buffer End Motion\7f1291226
-Node: Text Lines\7f1292723
-Node: Screen Lines\7f1297318
-Node: List Motion\7f1301381
-Node: Skipping Characters\7f1304789
-Node: Excursions\7f1307008
-Node: Narrowing\7f1310043
-Node: Markers\7f1315370
-Node: Overview of Markers\7f1316272
-Node: Predicates on Markers\7f1320965
-Node: Creating Markers\7f1322211
-Node: Information from Markers\7f1326248
-Node: Changing Markers\7f1327346
-Node: The Mark\7f1328724
-Node: The Region\7f1337218
-Node: Text\7f1342905
-Node: Near Point\7f1345607
-Node: Buffer Contents\7f1349794
-Node: Comparing Text\7f1351200
-Node: Insertion\7f1352608
-Node: Commands for Insertion\7f1356451
-Node: Deletion\7f1359409
-Node: User-Level Deletion\7f1363006
-Node: The Kill Ring\7f1367136
-Node: Kill Ring Concepts\7f1369310
-Node: Kill Functions\7f1370364
-Node: Yank Commands\7f1372269
-Node: Low-Level Kill Ring\7f1374140
-Node: Internals of Kill Ring\7f1376926
-Node: Undo\7f1379706
-Node: Maintaining Undo\7f1384035
-Node: Filling\7f1386655
-Node: Margins\7f1392651
-Node: Auto Filling\7f1396581
-Node: Sorting\7f1397762
-Node: Columns\7f1407063
-Node: Indentation\7f1409579
-Node: Primitive Indent\7f1410358
-Node: Mode-Specific Indent\7f1411602
-Node: Region Indent\7f1414113
-Node: Relative Indent\7f1417061
-Node: Indent Tabs\7f1419443
-Node: Motion by Indent\7f1420765
-Node: Case Changes\7f1421544
-Node: Text Properties\7f1424795
-Node: Examining Properties\7f1426610
-Node: Changing Properties\7f1428477
-Node: Property Search\7f1432072
-Node: Special Properties\7f1436783
-Node: Saving Properties\7f1437064
-Node: Substitution\7f1440206
-Node: Registers\7f1443477
-Node: Transposition\7f1446020
-Node: Change Hooks\7f1446914
-Node: Transformations\7f1448954
-Node: Searching and Matching\7f1453339
-Node: String Search\7f1454470
-Node: Regular Expressions\7f1459194
-Node: Syntax of Regexps\7f1460561
-Node: Regexp Example\7f1474941
-Node: Regexp Search\7f1477111
-Node: POSIX Regexps\7f1483199
-Node: Search and Replace\7f1485034
-Node: Match Data\7f1488399
-Node: Simple Match Data\7f1489529
-Node: Replacing Match\7f1493794
-Node: Entire Match Data\7f1496128
-Node: Saving Match Data\7f1498119
-Node: Searching and Case\7f1499502
-Node: Standard Regexps\7f1501536
-Node: Syntax Tables\7f1503734
-Node: Syntax Basics\7f1504850
-Node: Syntax Descriptors\7f1507825
-Node: Syntax Class Table\7f1509675
-Node: Syntax Flags\7f1515713
-Node: Syntax Table Functions\7f1518930
-Node: Motion and Syntax\7f1522794
-Node: Parsing Expressions\7f1524246
-Node: Standard Syntax Tables\7f1530315
-Node: Syntax Table Internals\7f1531159
-Node: Abbrevs\7f1532186
-Node: Abbrev Mode\7f1533990
-Node: Abbrev Tables\7f1534710
-Node: Defining Abbrevs\7f1536243
-Node: Abbrev Files\7f1538148
-Node: Abbrev Expansion\7f1539922
-Node: Standard Abbrev Tables\7f1544553
-Node: Extents\7f1545712
-Node: Intro to Extents\7f1546955
-Node: Creating and Modifying Extents\7f1550949
-Node: Extent Endpoints\7f1552458
-Node: Finding Extents\7f1555723
-Node: Mapping Over Extents\7f1559474
-Node: Extent Properties\7f1565592
-Node: Detached Extents\7f1575736
-Node: Extent Parents\7f1577595
-Node: Duplicable Extents\7f1579290
-Node: Extents and Events\7f1582513
-Node: Atomic Extents\7f1584421
-Node: Specifiers\7f1584868
-Node: Introduction to Specifiers\7f1586671
-Node: Specifiers In-Depth\7f1588981
-Node: Specifier Instancing\7f1593896
-Node: Specifier Types\7f1597158
-Node: Adding Specifications\7f1602232
-Node: Retrieving Specifications\7f1611595
-Node: Specifier Tag Functions\7f1615330
-Node: Specifier Instancing Functions\7f1618564
-Node: Specifier Example\7f1621971
-Node: Creating Specifiers\7f1625077
-Node: Specifier Validation Functions\7f1627326
-Node: Other Specification Functions\7f1629710
-Node: Faces and Window-System Objects\7f1633529
-Node: Faces\7f1633853
-Node: Merging Faces\7f1635472
-Node: Basic Face Functions\7f1637433
-Node: Face Properties\7f1639532
-Node: Face Convenience Functions\7f1649091
-Node: Other Face Display Functions\7f1652224
-Node: Fonts\7f1653037
-Node: Font Specifiers\7f1653738
-Node: Font Instances\7f1653979
-Node: Font Instance Names\7f1654946
-Node: Font Instance Size\7f1655787
-Node: Font Instance Characteristics\7f1657073
-Node: Font Convenience Functions\7f1658242
-Node: Colors\7f1659532
-Node: Color Specifiers\7f1659972
-Node: Color Instances\7f1660199
-Node: Color Instance Properties\7f1660943
-Node: Color Convenience Functions\7f1661569
-Node: Glyphs\7f1662622
-Node: Glyph Functions\7f1664214
-Node: Creating Glyphs\7f1664621
-Node: Glyph Properties\7f1666208
-Node: Glyph Convenience Functions\7f1675375
-Node: Glyph Dimensions\7f1679322
-Node: Images\7f1680402
-Node: Image Specifiers\7f1680851
-Node: Image Instantiator Conversion\7f1692275
-Node: Image Instances\7f1693640
-Node: Image Instance Types\7f1694391
-Node: Image Instance Functions\7f1697046
-Node: Glyph Types\7f1701616
-Node: Mouse Pointer\7f1703388
-Node: Redisplay Glyphs\7f1706391
-Node: Subwindows\7f1707424
-Node: Annotations\7f1707667
-Node: Annotation Basics\7f1708684
-Node: Annotation Primitives\7f1712622
-Node: Annotation Properties\7f1713951
-Node: Locating Annotations\7f1716991
-Node: Margin Primitives\7f1717828
-Node: Annotation Hooks\7f1719722
-Node: Display\7f1720382
-Node: Refresh Screen\7f1721360
-Node: Truncation\7f1723271
-Node: The Echo Area\7f1725798
-Node: Warnings\7f1732234
-Node: Invisible Text\7f1736670
-Node: Selective Display\7f1739250
-Node: Overlay Arrow\7f1743377
-Node: Temporary Displays\7f1744731
-Node: Blinking\7f1748852
-Node: Usual Display\7f1751036
-Node: Display Tables\7f1753586
-Node: Display Table Format\7f1754390
-Node: Active Display Table\7f1755834
-Node: Character Descriptors\7f1757026
-Node: Beeping\7f1757784
-Node: Hash Tables\7f1762550
-Node: Introduction to Hash Tables\7f1763158
-Node: Working With Hash Tables\7f1769183
-Node: Weak Hash Tables\7f1770300
-Node: Range Tables\7f1772099
-Node: Introduction to Range Tables\7f1772788
-Node: Working With Range Tables\7f1773219
-Node: Databases\7f1774104
-Node: Connecting to a Database\7f1774403
-Node: Working With a Database\7f1775494
-Node: Other Database Functions\7f1776352
-Node: Processes\7f1776926
-Node: Subprocess Creation\7f1779150
-Node: Synchronous Processes\7f1782443
-Node: MS-DOS Subprocesses\7f1789141
-Node: Asynchronous Processes\7f1790215
-Node: Deleting Processes\7f1793919
-Node: Process Information\7f1795790
-Node: Input to Processes\7f1799718
-Node: Signals to Processes\7f1801987
-Node: Output from Processes\7f1806407
-Node: Process Buffers\7f1807219
-Node: Filter Functions\7f1810088
-Node: Accepting Output\7f1815655
-Node: Sentinels\7f1817182
-Node: Process Window Size\7f1820675
-Node: Transaction Queues\7f1821024
-Node: Network\7f1822722
-Node: System Interface\7f1824556
-Node: Starting Up\7f1825826
-Node: Start-up Summary\7f1826420
-Node: Init File\7f1829974
-Node: Terminal-Specific\7f1832358
-Node: Command Line Arguments\7f1835517
-Node: Getting Out\7f1839006
-Node: Killing XEmacs\7f1839575
-Node: Suspending XEmacs\7f1841244
-Node: System Environment\7f1844560
-Node: User Identification\7f1851225
-Node: Time of Day\7f1854755
-Node: Time Conversion\7f1857544
-Node: Timers\7f1862586
-Node: Terminal Input\7f1864759
-Node: Input Modes\7f1865262
-Node: Translating Input\7f1867675
-Node: Recording Input\7f1871840
-Node: Terminal Output\7f1873941
-Node: Flow Control\7f1877564
-Node: Batch Mode\7f1881357
-Node: X-Windows\7f1882739
-Node: X Selections\7f1883551
-Node: X Server\7f1885761
-Node: Resources\7f1886162
-Node: Server Data\7f1891303
-Node: Grabs\7f1892510
-Node: X Miscellaneous\7f1894091
-Node: ToolTalk Support\7f1896476
-Node: XEmacs ToolTalk API Summary\7f1896693
-Node: Sending Messages\7f1897993
-Node: Example of Sending Messages\7f1898244
-Node: Elisp Interface for Sending Messages\7f1899306
-Node: Receiving Messages\7f1905699
-Node: Example of Receiving Messages\7f1905922
-Node: Elisp Interface for Receiving Messages\7f1906758
-Node: LDAP Support\7f1910583
-Node: Building XEmacs with LDAP support\7f1911079
-Node: XEmacs LDAP API\7f1912057
-Node: LDAP Variables\7f1912787
-Node: The High-Level LDAP API\7f1915264
-Node: The Low-Level LDAP API\7f1916377
-Node: The LDAP Lisp Object\7f1916651
-Node: Opening and Closing a LDAP Connection\7f1917204
-Node: Searching on a LDAP Server (Low-level)\7f1918987
-Node: Syntax of Search Filters\7f1920382
-Node: Internationalization\7f1921680
-Node: I18N Levels 1 and 2\7f1922017
-Node: I18N Level 3\7f1922723
-Node: Level 3 Basics\7f1923004
-Node: Level 3 Primitives\7f1923837
-Node: Dynamic Messaging\7f1925443
-Node: Domain Specification\7f1925906
-Node: Documentation String Extraction\7f1927809
-Node: I18N Level 4\7f1928727
-Node: MULE\7f1928919
-Node: Internationalization Terminology\7f1930030
-Node: Charsets\7f1938569
-Node: Charset Properties\7f1939265
-Node: Basic Charset Functions\7f1943951
-Node: Charset Property Functions\7f1946132
-Node: Predefined Charsets\7f1948175
-Node: MULE Characters\7f1951095
-Node: Composite Characters\7f1951942
-Node: ISO 2022\7f1953196
-Node: Coding Systems\7f1958918
-Node: Coding System Types\7f1960840
-Node: EOL Conversion\7f1962659
-Node: Coding System Properties\7f1963842
-Node: Basic Coding System Functions\7f1967694
-Node: Coding System Property Functions\7f1969598
-Node: Encoding and Decoding Text\7f1970156
-Node: Detection of Textual Encoding\7f1971292
-Node: Big5 and Shift-JIS Functions\7f1972828
-Node: CCL\7f1973916
-Node: CCL Syntax\7f1977020
-Node: CCL Statements\7f1978608
-Node: CCL Expressions\7f1983256
-Node: Calling CCL\7f1986408
-Node: CCL Examples\7f1989398
-Node: Category Tables\7f1989535
-Node: Tips\7f1991894
-Node: Style Tips\7f1992535
-Node: Compilation Tips\7f2002055
-Node: Documentation Tips\7f2003971
-Node: Comment Tips\7f2009480
-Node: Library Headers\7f2012482
-Node: Building XEmacs and Object Allocation\7f2016454
-Node: Building XEmacs\7f2017337
-Node: Pure Storage\7f2023672
-Node: Garbage Collection\7f2026460
-Node: Standard Errors\7f2037599
-Node: Standard Buffer-Local Variables\7f2041808
-Node: Standard Keymaps\7f2044484
-Node: Standard Hooks\7f2048216
-Node: Index\7f2055716
+Node: Processing of Errors\7f377969
+Node: Handling Errors\7f380249
+Node: Error Symbols\7f387481
+Node: Cleanups\7f391438
+Node: Variables\7f395218
+Node: Global Variables\7f396987
+Node: Constant Variables\7f398063
+Node: Local Variables\7f398689
+Node: Void Variables\7f403633
+Node: Defining Variables\7f407144
+Node: Accessing Variables\7f414309
+Node: Setting Variables\7f415735
+Node: Variable Scoping\7f420254
+Node: Scope\7f421853
+Node: Extent\7f423378
+Node: Impl of Scope\7f424857
+Node: Using Scoping\7f426820
+Node: Buffer-Local Variables\7f428342
+Node: Intro to Buffer-Local\7f429178
+Node: Creating Buffer-Local\7f431721
+Node: Default Value\7f436941
+Node: Variable Aliases\7f440085
+Node: Functions\7f441871
+Node: What Is a Function\7f442965
+Node: Lambda Expressions\7f447012
+Node: Lambda Components\7f447922
+Node: Simple Lambda\7f449754
+Node: Argument List\7f451413
+Node: Function Documentation\7f455141
+Node: Function Names\7f457083
+Node: Defining Functions\7f459657
+Node: Calling Functions\7f462699
+Node: Mapping Functions\7f466548
+Node: Anonymous Functions\7f469196
+Node: Function Cells\7f472441
+Node: Inline Functions\7f477251
+Node: Related Topics\7f479061
+Node: Macros\7f480114
+Node: Simple Macro\7f481398
+Node: Expansion\7f482133
+Node: Compiling Macros\7f485107
+Node: Defining Macros\7f486945
+Node: Backquote\7f488263
+Node: Problems with Macros\7f490661
+Node: Argument Evaluation\7f491356
+Node: Surprising Local Vars\7f494257
+Node: Eval During Expansion\7f496325
+Node: Repeated Expansion\7f498019
+Node: Customization\7f499930
+Node: Common Keywords\7f500399
+Node: Group Definitions\7f503244
+Node: Variable Definitions\7f505437
+Node: Customization Types\7f510420
+Node: Simple Types\7f511856
+Node: Composite Types\7f514013
+Node: Splicing into Lists\7f518703
+Node: Type Keywords\7f520538
+Node: Loading\7f524058
+Node: How Programs Do Loading\7f525731
+Node: Autoload\7f534860
+Node: Repeated Loading\7f540940
+Node: Named Features\7f543054
+Node: Unloading\7f549487
+Node: Hooks for Loading\7f551643
+Node: Byte Compilation\7f552360
+Node: Speed of Byte-Code\7f554277
+Node: Compilation Functions\7f555484
+Node: Docs and Compilation\7f561873
+Node: Dynamic Loading\7f564526
+Node: Eval During Compile\7f566890
+Node: Compiled-Function Objects\7f568155
+Node: Disassembly\7f572954
+Node: Debugging\7f580208
+Node: Debugger\7f581620
+Node: Error Debugging\7f582765
+Node: Infinite Loops\7f585518
+Node: Function Debugging\7f586762
+Node: Explicit Debug\7f589552
+Node: Using Debugger\7f590324
+Node: Debugger Commands\7f592188
+Node: Invoking the Debugger\7f596505
+Node: Internals of Debugger\7f600420
+Node: Syntax Errors\7f605297
+Node: Excess Open\7f606545
+Node: Excess Close\7f608420
+Node: Compilation Errors\7f609841
+Node: Edebug\7f611129
+Node: Using Edebug\7f613236
+Node: Instrumenting\7f615933
+Node: Edebug Execution Modes\7f619422
+Node: Jumping\7f622532
+Node: Edebug Misc\7f624875
+Node: Breakpoints\7f626264
+Node: Global Break Condition\7f629070
+Node: Embedded Breakpoints\7f630025
+Node: Trapping Errors\7f630980
+Node: Edebug Views\7f633056
+Node: Edebug Eval\7f635021
+Node: Eval List\7f636198
+Node: Reading in Edebug\7f639583
+Node: Printing in Edebug\7f640382
+Node: Tracing\7f642097
+Node: Coverage Testing\7f643983
+Node: The Outside Context\7f646024
+Node: Checking Whether to Stop\7f646973
+Node: Edebug Display Update\7f647619
+Node: Edebug Recursive Edit\7f649641
+Node: Instrumenting Macro Calls\7f651295
+Node: Specification List\7f653777
+Node: Backtracking\7f663188
+Node: Debugging Backquote\7f665126
+Node: Specification Examples\7f668832
+Node: Edebug Options\7f670899
+Node: Read and Print\7f676236
+Node: Streams Intro\7f677213
+Node: Input Streams\7f679231
+Node: Input Functions\7f684132
+Node: Output Streams\7f686192
+Node: Output Functions\7f690244
+Node: Output Variables\7f694544
+Node: Minibuffers\7f699343
+Node: Intro to Minibuffers\7f700495
+Node: Text from Minibuffer\7f702685
+Node: Object from Minibuffer\7f707562
+Node: Minibuffer History\7f710769
+Node: Completion\7f713748
+Node: Basic Completion\7f715723
+Node: Minibuffer Completion\7f720735
+Node: Completion Commands\7f724302
+Node: High-Level Completion\7f728946
+Node: Reading File Names\7f732970
+Node: Programmed Completion\7f736654
+Node: Yes-or-No Queries\7f739036
+Node: Multiple Queries\7f744732
+Node: Reading a Password\7f748800
+Node: Minibuffer Misc\7f750137
+Node: Command Loop\7f755010
+Node: Command Overview\7f756356
+Node: Defining Commands\7f759640
+Node: Using Interactive\7f760388
+Node: Interactive Codes\7f765162
+Node: Interactive Examples\7f770966
+Node: Interactive Call\7f772280
+Node: Command Loop Info\7f777683
+Node: Events\7f782662
+Node: Event Types\7f784122
+Node: Event Contents\7f786045
+Node: Event Predicates\7f790521
+Node: Accessing Mouse Event Positions\7f791846
+Node: Frame-Level Event Position Info\7f792545
+Node: Window-Level Event Position Info\7f793585
+Node: Event Text Position Info\7f795349
+Node: Event Glyph Position Info\7f797841
+Node: Event Toolbar Position Info\7f799164
+Node: Other Event Position Info\7f799835
+Node: Accessing Other Event Info\7f800244
+Node: Working With Events\7f801864
+Node: Converting Events\7f807792
+Node: Reading Input\7f810745
+Node: Key Sequence Input\7f811747
+Node: Reading One Event\7f813701
+Node: Dispatching an Event\7f816462
+Node: Quoted Character Input\7f816913
+Node: Peeking and Discarding\7f818261
+Node: Waiting\7f822165
+Node: Quitting\7f824473
+Node: Prefix Command Arguments\7f828881
+Node: Recursive Editing\7f833968
+Node: Disabling Commands\7f838765
+Node: Command History\7f840833
+Node: Keyboard Macros\7f842572
+Node: Keymaps\7f844790
+Node: Keymap Terminology\7f846367
+Node: Format of Keymaps\7f849297
+Node: Creating Keymaps\7f849708
+Node: Inheritance and Keymaps\7f851787
+Node: Key Sequences\7f854159
+Node: Prefix Keys\7f858729
+Node: Active Keymaps\7f862314
+Node: Key Lookup\7f871529
+Node: Functions for Key Lookup\7f876693
+Node: Changing Key Bindings\7f882396
+Node: Key Binding Commands\7f889283
+Node: Scanning Keymaps\7f891349
+Node: Other Keymap Functions\7f899861
+Node: Menus\7f900483
+Node: Menu Format\7f901025
+Node: Menubar Format\7f909610
+Node: Menubar\7f910235
+Node: Modifying Menus\7f913349
+Node: Menu Filters\7f918367
+Node: Pop-Up Menus\7f920263
+Node: Menu Accelerators\7f922469
+Node: Creating Menu Accelerators\7f923191
+Node: Keyboard Menu Traversal\7f924509
+Node: Menu Accelerator Functions\7f925236
+Node: Buffers Menu\7f928271
+Node: Dialog Boxes\7f929565
+Node: Dialog Box Format\7f929732
+Node: Dialog Box Functions\7f931102
+Node: Toolbar\7f931500
+Node: Toolbar Intro\7f931825
+Node: Toolbar Descriptor Format\7f934236
+Node: Specifying the Toolbar\7f938730
+Node: Other Toolbar Variables\7f942338
+Node: Scrollbars\7f946765
+Node: Drag and Drop\7f946901
+Node: Supported Protocols\7f947977
+Node: OffiX DND\7f948480
+Node: CDE dt\7f949487
+Node: MSWindows OLE\7f950078
+Node: Loose ends\7f950249
+Node: Drop Interface\7f950641
+Node: Drag Interface\7f951663
+Node: Modes\7f951837
+Node: Major Modes\7f952788
+Node: Major Mode Conventions\7f955704
+Node: Example Major Modes\7f961659
+Node: Auto Major Mode\7f969627
+Node: Mode Help\7f977077
+Node: Derived Modes\7f978178
+Node: Minor Modes\7f980369
+Node: Minor Mode Conventions\7f981671
+Node: Keymaps and Minor Modes\7f984535
+Node: Modeline Format\7f985370
+Node: Modeline Data\7f987139
+Node: Modeline Variables\7f991411
+Node: %-Constructs\7f996127
+Node: Hooks\7f999038
+Node: Documentation\7f1005802
+Node: Documentation Basics\7f1007225
+Node: Accessing Documentation\7f1010277
+Node: Keys in Documentation\7f1016468
+Node: Describing Characters\7f1019931
+Node: Help Functions\7f1022285
+Node: Obsoleteness\7f1028728
+Node: Files\7f1031722
+Node: Visiting Files\7f1033647
+Node: Visiting Functions\7f1035152
+Node: Subroutines of Visiting\7f1040200
+Node: Saving Buffers\7f1042276
+Node: Reading from Files\7f1048369
+Node: Writing to Files\7f1050526
+Node: File Locks\7f1053243
+Node: Information about Files\7f1056296
+Node: Testing Accessibility\7f1057057
+Node: Kinds of Files\7f1060797
+Node: Truenames\7f1062478
+Node: File Attributes\7f1063481
+Node: Changing File Attributes\7f1068621
+Node: File Names\7f1074027
+Node: File Name Components\7f1075636
+Node: Directory Names\7f1078737
+Node: Relative File Names\7f1082190
+Node: File Name Expansion\7f1083268
+Node: Unique File Names\7f1087175
+Node: File Name Completion\7f1088790
+Node: User Name Completion\7f1091451
+Node: Contents of Directories\7f1092791
+Node: Create/Delete Dirs\7f1096104
+Node: Magic File Names\7f1097210
+Node: Partial Files\7f1102840
+Node: Intro to Partial Files\7f1103068
+Node: Creating a Partial File\7f1104308
+Node: Detached Partial Files\7f1105243
+Node: Format Conversion\7f1106365
+Node: Files and MS-DOS\7f1112883
+Node: Backups and Auto-Saving\7f1114947
+Node: Backup Files\7f1115622
+Node: Making Backups\7f1117019
+Node: Rename or Copy\7f1119768
+Node: Numbered Backups\7f1122261
+Node: Backup Names\7f1124506
+Node: Auto-Saving\7f1127789
+Node: Reverting\7f1135931
+Node: Buffers\7f1139089
+Node: Buffer Basics\7f1140504
+Node: Current Buffer\7f1142557
+Node: Buffer Names\7f1147247
+Node: Buffer File Name\7f1150452
+Node: Buffer Modification\7f1154572
+Node: Modification Time\7f1156768
+Node: Read Only Buffers\7f1160143
+Node: The Buffer List\7f1162561
+Node: Creating Buffers\7f1167391
+Node: Killing Buffers\7f1169540
+Node: Indirect Buffers\7f1173271
+Node: Windows\7f1175843
+Node: Basic Windows\7f1177321
+Node: Splitting Windows\7f1180419
+Node: Deleting Windows\7f1187290
+Node: Selecting Windows\7f1189971
+Node: Cyclic Window Ordering\7f1193100
+Node: Buffers and Windows\7f1197724
+Node: Displaying Buffers\7f1199565
+Node: Choosing Window\7f1204743
+Node: Window Point\7f1212459
+Node: Window Start\7f1214505
+Node: Vertical Scrolling\7f1218995
+Node: Horizontal Scrolling\7f1225132
+Node: Size of Window\7f1228641
+Node: Position of Window\7f1233359
+Node: Resizing Windows\7f1235599
+Node: Window Configurations\7f1241028
+Node: Frames\7f1244453
+Node: Creating Frames\7f1246222
+Node: Frame Properties\7f1247563
+Node: Property Access\7f1248379
+Node: Initial Properties\7f1249228
+Node: X Frame Properties\7f1251714
+Node: Size and Position\7f1256348
+Node: Frame Name\7f1258344
+Node: Frame Titles\7f1259258
+Node: Deleting Frames\7f1261082
+Node: Finding All Frames\7f1261682
+Node: Frames and Windows\7f1263676
+Node: Minibuffers and Frames\7f1265381
+Node: Input Focus\7f1266300
+Node: Visibility of Frames\7f1269378
+Node: Raising and Lowering\7f1271297
+Node: Frame Configurations\7f1273674
+Node: Frame Hooks\7f1274268
+Node: Consoles and Devices\7f1276075
+Node: Basic Console Functions\7f1278819
+Node: Basic Device Functions\7f1279242
+Node: Console Types and Device Classes\7f1279958
+Node: Connecting to a Console or Device\7f1282155
+Node: The Selected Console and Device\7f1284318
+Node: Console and Device I/O\7f1285344
+Node: Positions\7f1286108
+Node: Point\7f1287077
+Node: Motion\7f1290170
+Node: Character Motion\7f1290937
+Node: Word Motion\7f1293174
+Node: Buffer End Motion\7f1294675
+Node: Text Lines\7f1296172
+Node: Screen Lines\7f1300767
+Node: List Motion\7f1304830
+Node: Skipping Characters\7f1308238
+Node: Excursions\7f1310457
+Node: Narrowing\7f1313492
+Node: Markers\7f1318819
+Node: Overview of Markers\7f1319721
+Node: Predicates on Markers\7f1324414
+Node: Creating Markers\7f1325660
+Node: Information from Markers\7f1329697
+Node: Changing Markers\7f1330795
+Node: The Mark\7f1332173
+Node: The Region\7f1340667
+Node: Text\7f1346354
+Node: Near Point\7f1349056
+Node: Buffer Contents\7f1353243
+Node: Comparing Text\7f1354649
+Node: Insertion\7f1356057
+Node: Commands for Insertion\7f1359900
+Node: Deletion\7f1362858
+Node: User-Level Deletion\7f1366455
+Node: The Kill Ring\7f1370585
+Node: Kill Ring Concepts\7f1372759
+Node: Kill Functions\7f1373813
+Node: Yank Commands\7f1375718
+Node: Low-Level Kill Ring\7f1377589
+Node: Internals of Kill Ring\7f1380375
+Node: Undo\7f1383155
+Node: Maintaining Undo\7f1387484
+Node: Filling\7f1390104
+Node: Margins\7f1396100
+Node: Auto Filling\7f1400030
+Node: Sorting\7f1401211
+Node: Columns\7f1410512
+Node: Indentation\7f1413028
+Node: Primitive Indent\7f1413807
+Node: Mode-Specific Indent\7f1415051
+Node: Region Indent\7f1417562
+Node: Relative Indent\7f1420510
+Node: Indent Tabs\7f1422892
+Node: Motion by Indent\7f1424214
+Node: Case Changes\7f1424993
+Node: Text Properties\7f1428244
+Node: Examining Properties\7f1430059
+Node: Changing Properties\7f1431926
+Node: Property Search\7f1435521
+Node: Special Properties\7f1440232
+Node: Saving Properties\7f1440513
+Node: Substitution\7f1443655
+Node: Registers\7f1446926
+Node: Transposition\7f1449469
+Node: Change Hooks\7f1450363
+Node: Transformations\7f1452403
+Node: Searching and Matching\7f1456788
+Node: String Search\7f1457919
+Node: Regular Expressions\7f1462643
+Node: Syntax of Regexps\7f1464010
+Node: Regexp Example\7f1478390
+Node: Regexp Search\7f1480560
+Node: POSIX Regexps\7f1486648
+Node: Search and Replace\7f1488483
+Node: Match Data\7f1491848
+Node: Simple Match Data\7f1492978
+Node: Replacing Match\7f1497243
+Node: Entire Match Data\7f1499577
+Node: Saving Match Data\7f1501568
+Node: Searching and Case\7f1502951
+Node: Standard Regexps\7f1504985
+Node: Syntax Tables\7f1507183
+Node: Syntax Basics\7f1508299
+Node: Syntax Descriptors\7f1511274
+Node: Syntax Class Table\7f1513124
+Node: Syntax Flags\7f1519162
+Node: Syntax Table Functions\7f1522379
+Node: Motion and Syntax\7f1526243
+Node: Parsing Expressions\7f1527695
+Node: Standard Syntax Tables\7f1533764
+Node: Syntax Table Internals\7f1534608
+Node: Abbrevs\7f1535635
+Node: Abbrev Mode\7f1537439
+Node: Abbrev Tables\7f1538159
+Node: Defining Abbrevs\7f1539692
+Node: Abbrev Files\7f1541597
+Node: Abbrev Expansion\7f1543371
+Node: Standard Abbrev Tables\7f1548002
+Node: Extents\7f1549161
+Node: Intro to Extents\7f1550404
+Node: Creating and Modifying Extents\7f1554398
+Node: Extent Endpoints\7f1555907
+Node: Finding Extents\7f1559172
+Node: Mapping Over Extents\7f1562923
+Node: Extent Properties\7f1569041
+Node: Detached Extents\7f1579185
+Node: Extent Parents\7f1581044
+Node: Duplicable Extents\7f1582739
+Node: Extents and Events\7f1585962
+Node: Atomic Extents\7f1587870
+Node: Specifiers\7f1588317
+Node: Introduction to Specifiers\7f1590120
+Node: Specifiers In-Depth\7f1592430
+Node: Specifier Instancing\7f1597345
+Node: Specifier Types\7f1600607
+Node: Adding Specifications\7f1605681
+Node: Retrieving Specifications\7f1615044
+Node: Specifier Tag Functions\7f1618779
+Node: Specifier Instancing Functions\7f1622013
+Node: Specifier Example\7f1625420
+Node: Creating Specifiers\7f1628526
+Node: Specifier Validation Functions\7f1630775
+Node: Other Specification Functions\7f1633159
+Node: Faces and Window-System Objects\7f1636978
+Node: Faces\7f1637302
+Node: Merging Faces\7f1638921
+Node: Basic Face Functions\7f1640882
+Node: Face Properties\7f1642981
+Node: Face Convenience Functions\7f1652540
+Node: Other Face Display Functions\7f1655673
+Node: Fonts\7f1656486
+Node: Font Specifiers\7f1657187
+Node: Font Instances\7f1657428
+Node: Font Instance Names\7f1658395
+Node: Font Instance Size\7f1659236
+Node: Font Instance Characteristics\7f1660522
+Node: Font Convenience Functions\7f1661691
+Node: Colors\7f1662981
+Node: Color Specifiers\7f1663421
+Node: Color Instances\7f1663648
+Node: Color Instance Properties\7f1664392
+Node: Color Convenience Functions\7f1665018
+Node: Glyphs\7f1666071
+Node: Glyph Functions\7f1667663
+Node: Creating Glyphs\7f1668070
+Node: Glyph Properties\7f1669657
+Node: Glyph Convenience Functions\7f1678824
+Node: Glyph Dimensions\7f1682771
+Node: Images\7f1683851
+Node: Image Specifiers\7f1684300
+Node: Image Instantiator Conversion\7f1695724
+Node: Image Instances\7f1697089
+Node: Image Instance Types\7f1697840
+Node: Image Instance Functions\7f1700495
+Node: Glyph Types\7f1705065
+Node: Mouse Pointer\7f1706837
+Node: Redisplay Glyphs\7f1709840
+Node: Subwindows\7f1710873
+Node: Annotations\7f1711116
+Node: Annotation Basics\7f1712133
+Node: Annotation Primitives\7f1716071
+Node: Annotation Properties\7f1717400
+Node: Locating Annotations\7f1720440
+Node: Margin Primitives\7f1721277
+Node: Annotation Hooks\7f1723171
+Node: Display\7f1723831
+Node: Refresh Screen\7f1724809
+Node: Truncation\7f1726720
+Node: The Echo Area\7f1729247
+Node: Warnings\7f1735683
+Node: Invisible Text\7f1740119
+Node: Selective Display\7f1742699
+Node: Overlay Arrow\7f1746826
+Node: Temporary Displays\7f1748180
+Node: Blinking\7f1752301
+Node: Usual Display\7f1754485
+Node: Display Tables\7f1757035
+Node: Display Table Format\7f1757839
+Node: Active Display Table\7f1759283
+Node: Character Descriptors\7f1760475
+Node: Beeping\7f1761233
+Node: Hash Tables\7f1765999
+Node: Introduction to Hash Tables\7f1766607
+Node: Working With Hash Tables\7f1772632
+Node: Weak Hash Tables\7f1773749
+Node: Range Tables\7f1775548
+Node: Introduction to Range Tables\7f1776237
+Node: Working With Range Tables\7f1776668
+Node: Databases\7f1777553
+Node: Connecting to a Database\7f1777852
+Node: Working With a Database\7f1778943
+Node: Other Database Functions\7f1779801
+Node: Processes\7f1780375
+Node: Subprocess Creation\7f1782599
+Node: Synchronous Processes\7f1785892
+Node: MS-DOS Subprocesses\7f1792590
+Node: Asynchronous Processes\7f1793664
+Node: Deleting Processes\7f1797368
+Node: Process Information\7f1799239
+Node: Input to Processes\7f1803167
+Node: Signals to Processes\7f1805436
+Node: Output from Processes\7f1809856
+Node: Process Buffers\7f1810668
+Node: Filter Functions\7f1813537
+Node: Accepting Output\7f1819104
+Node: Sentinels\7f1820631
+Node: Process Window Size\7f1824124
+Node: Transaction Queues\7f1824473
+Node: Network\7f1826171
+Node: System Interface\7f1828005
+Node: Starting Up\7f1829275
+Node: Start-up Summary\7f1829869
+Node: Init File\7f1833423
+Node: Terminal-Specific\7f1835807
+Node: Command Line Arguments\7f1838966
+Node: Getting Out\7f1842455
+Node: Killing XEmacs\7f1843024
+Node: Suspending XEmacs\7f1844693
+Node: System Environment\7f1848009
+Node: User Identification\7f1854674
+Node: Time of Day\7f1858204
+Node: Time Conversion\7f1860993
+Node: Timers\7f1866035
+Node: Terminal Input\7f1868208
+Node: Input Modes\7f1868711
+Node: Translating Input\7f1871124
+Node: Recording Input\7f1875289
+Node: Terminal Output\7f1877390
+Node: Flow Control\7f1881013
+Node: Batch Mode\7f1884806
+Node: X-Windows\7f1886188
+Node: X Selections\7f1887000
+Node: X Server\7f1889210
+Node: Resources\7f1889611
+Node: Server Data\7f1894752
+Node: Grabs\7f1895959
+Node: X Miscellaneous\7f1897540
+Node: ToolTalk Support\7f1899925
+Node: XEmacs ToolTalk API Summary\7f1900142
+Node: Sending Messages\7f1901442
+Node: Example of Sending Messages\7f1901693
+Node: Elisp Interface for Sending Messages\7f1902755
+Node: Receiving Messages\7f1909148
+Node: Example of Receiving Messages\7f1909371
+Node: Elisp Interface for Receiving Messages\7f1910207
+Node: LDAP Support\7f1914032
+Node: Building XEmacs with LDAP support\7f1914528
+Node: XEmacs LDAP API\7f1915506
+Node: LDAP Variables\7f1916236
+Node: The High-Level LDAP API\7f1918713
+Node: The Low-Level LDAP API\7f1919826
+Node: The LDAP Lisp Object\7f1920100
+Node: Opening and Closing a LDAP Connection\7f1920653
+Node: Searching on a LDAP Server (Low-level)\7f1922436
+Node: Syntax of Search Filters\7f1923831
+Node: Internationalization\7f1925129
+Node: I18N Levels 1 and 2\7f1925466
+Node: I18N Level 3\7f1926172
+Node: Level 3 Basics\7f1926453
+Node: Level 3 Primitives\7f1927286
+Node: Dynamic Messaging\7f1928892
+Node: Domain Specification\7f1929355
+Node: Documentation String Extraction\7f1931258
+Node: I18N Level 4\7f1932176
+Node: MULE\7f1932368
+Node: Internationalization Terminology\7f1933479
+Node: Charsets\7f1942018
+Node: Charset Properties\7f1942714
+Node: Basic Charset Functions\7f1947400
+Node: Charset Property Functions\7f1949581
+Node: Predefined Charsets\7f1951624
+Node: MULE Characters\7f1954544
+Node: Composite Characters\7f1955391
+Node: ISO 2022\7f1956645
+Node: Coding Systems\7f1962367
+Node: Coding System Types\7f1964289
+Node: EOL Conversion\7f1966108
+Node: Coding System Properties\7f1967291
+Node: Basic Coding System Functions\7f1971143
+Node: Coding System Property Functions\7f1973047
+Node: Encoding and Decoding Text\7f1973605
+Node: Detection of Textual Encoding\7f1974741
+Node: Big5 and Shift-JIS Functions\7f1976277
+Node: CCL\7f1977365
+Node: CCL Syntax\7f1980469
+Node: CCL Statements\7f1982057
+Node: CCL Expressions\7f1986705
+Node: Calling CCL\7f1989857
+Node: CCL Examples\7f1992847
+Node: Category Tables\7f1992984
+Node: Tips\7f1995343
+Node: Style Tips\7f1995984
+Node: Compilation Tips\7f2005504
+Node: Documentation Tips\7f2007420
+Node: Comment Tips\7f2012929
+Node: Library Headers\7f2015931
+Node: Building XEmacs and Object Allocation\7f2019903
+Node: Building XEmacs\7f2020786
+Node: Pure Storage\7f2027121
+Node: Garbage Collection\7f2029909
+Node: Standard Errors\7f2041048
+Node: Standard Buffer-Local Variables\7f2045257
+Node: Standard Keymaps\7f2047933
+Node: Standard Hooks\7f2051665
+Node: Index\7f2059165
 \1f
 End Tag Table
index d90ceeb..ba008df 100644 (file)
@@ -50,6 +50,89 @@ may be included in a translation approved by the Free Software
 Foundation instead of in the original English.
 
 \1f
+File: lispref.info,  Node: Default Value,  Prev: Creating Buffer-Local,  Up: Buffer-Local Variables
+
+The Default Value of a Buffer-Local Variable
+--------------------------------------------
+
+   The global value of a variable with buffer-local bindings is also
+called the "default" value, because it is the value that is in effect
+except when specifically overridden.
+
+   The functions `default-value' and `setq-default' access and change a
+variable's default value regardless of whether the current buffer has a
+buffer-local binding.  For example, you could use `setq-default' to
+change the default setting of `paragraph-start' for most buffers; and
+this would work even when you are in a C or Lisp mode buffer that has a
+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
+     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::.).
+
+ - 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.
+
+     `default-boundp' is to `default-value' as `boundp' is to
+     `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.
+
+     If a SYMBOL is not buffer-local for the current buffer, and is not
+     marked automatically buffer-local, `setq-default' has the same
+     effect as `setq'.  If SYMBOL is buffer-local for the current
+     buffer, then this changes the value that other buffers will see
+     (as long as they don't have a buffer-local value), but not the
+     value that the current buffer sees.
+
+          ;; In buffer `foo':
+          (make-local-variable 'local)
+               => local
+          (setq local 'value-in-foo)
+               => value-in-foo
+          (setq-default local 'new-default)
+               => new-default
+          local
+               => value-in-foo
+          (default-value 'local)
+               => new-default
+          
+          ;; In (the new) buffer `bar':
+          local
+               => new-default
+          (default-value 'local)
+               => new-default
+          (setq local 'another-default)
+               => another-default
+          (default-value 'local)
+               => another-default
+          
+          ;; Back in buffer `foo':
+          local
+               => value-in-foo
+          (default-value 'local)
+               => another-default
+
+ - Function: set-default SYMBOL VALUE
+     This function is like `setq-default', except that SYMBOL is
+     evaluated.
+
+          (set-default (car '(a b c)) 23)
+               => 23
+          (default-value 'a)
+               => 23
+
+\1f
 File: lispref.info,  Node: Variable Aliases,  Prev: Buffer-Local Variables,  Up: Variables
 
 Variable Aliases
@@ -1160,71 +1243,3 @@ this is unusual.
           (macroexpand '(inc2 r s))
                => (progn (inc r) (inc s))  ; `inc' not expanded here.
 
-\1f
-File: lispref.info,  Node: Compiling Macros,  Next: Defining Macros,  Prev: Expansion,  Up: Macros
-
-Macros and Byte Compilation
-===========================
-
-   You might ask why we take the trouble to compute an expansion for a
-macro and then evaluate the expansion.  Why not have the macro body
-produce the desired results directly?  The reason has to do with
-compilation.
-
-   When a macro call appears in a Lisp program being compiled, the Lisp
-compiler calls the macro definition just as the interpreter would, and
-receives an expansion.  But instead of evaluating this expansion, it
-compiles the expansion as if it had appeared directly in the program.
-As a result, the compiled code produces the value and side effects
-intended for the macro, but executes at full compiled speed.  This would
-not work if the macro body computed the value and side effects
-itself--they would be computed at compile time, which is not useful.
-
-   In order for compilation of macro calls to work, the macros must be
-defined in Lisp when the calls to them are compiled.  The compiler has a
-special feature to help you do this: if a file being compiled contains a
-`defmacro' form, the macro is defined temporarily for the rest of the
-compilation of that file.  To use this feature, you must define the
-macro in the same file where it is used and before its first use.
-
-   Byte-compiling a file executes any `require' calls at top-level in
-the file.  This is in case the file needs the required packages for
-proper compilation.  One way to ensure that necessary macro definitions
-are available during compilation is to require the files that define
-them (*note Named Features::.).  To avoid loading the macro definition
-files when someone *runs* the compiled program, write
-`eval-when-compile' around the `require' calls (*note Eval During
-Compile::.).
-
-\1f
-File: lispref.info,  Node: Defining Macros,  Next: Backquote,  Prev: Compiling Macros,  Up: Macros
-
-Defining Macros
-===============
-
-   A Lisp macro is a list whose CAR is `macro'.  Its CDR should be a
-function; expansion of the macro works by applying the function (with
-`apply') to the list of unevaluated argument-expressions from the macro
-call.
-
-   It is possible to use an anonymous Lisp macro just like an anonymous
-function, but this is never done, because it does not make sense to pass
-an anonymous macro to functionals such as `mapcar'.  In practice, all
-Lisp macros have names, and they are usually defined with the special
-form `defmacro'.
-
- - Special Form: defmacro NAME ARGUMENT-LIST BODY-FORMS...
-     `defmacro' defines the symbol NAME as a macro that looks like this:
-
-          (macro lambda ARGUMENT-LIST . BODY-FORMS)
-
-     This macro object is stored in the function cell of NAME.  The
-     value returned by evaluating the `defmacro' form is NAME, but
-     usually we ignore this value.
-
-     The shape and meaning of ARGUMENT-LIST is the same as in a
-     function, and the keywords `&rest' and `&optional' may be used
-     (*note Argument List::.).  Macros may have a documentation string,
-     but any `interactive' declaration is ignored since macros cannot be
-     called interactively.
-
index 20e1353..023ded4 100644 (file)
@@ -50,6 +50,74 @@ may be included in a translation approved by the Free Software
 Foundation instead of in the original English.
 
 \1f
+File: lispref.info,  Node: Compiling Macros,  Next: Defining Macros,  Prev: Expansion,  Up: Macros
+
+Macros and Byte Compilation
+===========================
+
+   You might ask why we take the trouble to compute an expansion for a
+macro and then evaluate the expansion.  Why not have the macro body
+produce the desired results directly?  The reason has to do with
+compilation.
+
+   When a macro call appears in a Lisp program being compiled, the Lisp
+compiler calls the macro definition just as the interpreter would, and
+receives an expansion.  But instead of evaluating this expansion, it
+compiles the expansion as if it had appeared directly in the program.
+As a result, the compiled code produces the value and side effects
+intended for the macro, but executes at full compiled speed.  This would
+not work if the macro body computed the value and side effects
+itself--they would be computed at compile time, which is not useful.
+
+   In order for compilation of macro calls to work, the macros must be
+defined in Lisp when the calls to them are compiled.  The compiler has a
+special feature to help you do this: if a file being compiled contains a
+`defmacro' form, the macro is defined temporarily for the rest of the
+compilation of that file.  To use this feature, you must define the
+macro in the same file where it is used and before its first use.
+
+   Byte-compiling a file executes any `require' calls at top-level in
+the file.  This is in case the file needs the required packages for
+proper compilation.  One way to ensure that necessary macro definitions
+are available during compilation is to require the files that define
+them (*note Named Features::.).  To avoid loading the macro definition
+files when someone *runs* the compiled program, write
+`eval-when-compile' around the `require' calls (*note Eval During
+Compile::.).
+
+\1f
+File: lispref.info,  Node: Defining Macros,  Next: Backquote,  Prev: Compiling Macros,  Up: Macros
+
+Defining Macros
+===============
+
+   A Lisp macro is a list whose CAR is `macro'.  Its CDR should be a
+function; expansion of the macro works by applying the function (with
+`apply') to the list of unevaluated argument-expressions from the macro
+call.
+
+   It is possible to use an anonymous Lisp macro just like an anonymous
+function, but this is never done, because it does not make sense to pass
+an anonymous macro to functionals such as `mapcar'.  In practice, all
+Lisp macros have names, and they are usually defined with the special
+form `defmacro'.
+
+ - Special Form: defmacro NAME ARGUMENT-LIST BODY-FORMS...
+     `defmacro' defines the symbol NAME as a macro that looks like this:
+
+          (macro lambda ARGUMENT-LIST . BODY-FORMS)
+
+     This macro object is stored in the function cell of NAME.  The
+     value returned by evaluating the `defmacro' form is NAME, but
+     usually we ignore this value.
+
+     The shape and meaning of ARGUMENT-LIST is the same as in a
+     function, and the keywords `&rest' and `&optional' may be used
+     (*note Argument List::.).  Macros may have a documentation string,
+     but any `interactive' declaration is ignored since macros cannot be
+     called interactively.
+
+\1f
 File: lispref.info,  Node: Backquote,  Next: Problems with Macros,  Prev: Defining Macros,  Up: Macros
 
 Backquote
index a6e7a58..1448207 100644 (file)
@@ -80,6 +80,10 @@ debugger, set the variable `debug-on-error' to non-`nil'.
      happen in process filter functions and sentinels.  Therefore, these
      errors also can invoke the debugger.  *Note Processes::.
 
+ - User Option: debug-on-signal
+     This variable is similar to `debug-on-error' but breaks whenever
+     an error is signalled, regardless of whether it would be handled.
+
  - User Option: debug-ignored-errors
      This variable specifies certain kinds of errors that should not
      enter the debugger.  Its value is a list of error condition
@@ -105,10 +109,6 @@ best way to make `.emacs' set `debug-on-error' permanently is with
      (add-hook 'after-init-hook
                '(lambda () (setq debug-on-error t)))
 
- - User Option: debug-on-signal
-     This variable is similar to `debug-on-error' but breaks whenever
-     an error is signalled, regardless of whether it would be handled.
-
 \1f
 File: lispref.info,  Node: Infinite Loops,  Next: Function Debugging,  Prev: Error Debugging,  Up: Debugger
 
index 194e4fb..16137cc 100644 (file)
@@ -529,6 +529,7 @@ Index
 * cdr-safe:                              List Elements.
 * ceiling:                               Numeric Conversions.
 * centering point:                       Vertical Scrolling.
+* cerror:                                Signaling Errors.
 * change hooks:                          Change Hooks.
 * change-major-mode-hook:                Major Mode Conventions.
 * changing key bindings:                 Changing Key Bindings.
@@ -580,6 +581,7 @@ Index
 * charset-registry:                      Charset Property Functions.
 * charset-reverse-direction-charset:     Basic Charset Functions.
 * charsetp:                              Charsets.
+* check-argument-type:                   Signaling Errors.
 * check-toolbar-button-syntax:           Toolbar Descriptor Format.
 * check-valid-char-table-value:          Working With Char Tables.
 * check-valid-inst-list:                 Specifier Validation Functions.
@@ -593,7 +595,6 @@ Index
 * CL note---default optional arg:        Argument List.
 * CL note---integers vrs eq:             Comparison of Numbers.
 * CL note---lack union, set:             Sets And Lists.
-* CL note---no continuable errors:       Signaling Errors.
 * CL note---only throw in Emacs:         Catch and Throw.
 * CL note---rplaca vrs setcar:           Modifying Lists.
 * CL note---set local:                   Setting Variables.
@@ -824,6 +825,7 @@ Index
 * debug-on-next-call:                    Internals of Debugger.
 * debug-on-quit:                         Infinite Loops.
 * debug-on-signal:                       Error Debugging.
+* debug-on-signal use:                   Handling Errors.
 * debugger <1>:                          Internals of Debugger.
 * debugger:                              Debugger.
 * debugger command list:                 Debugger Commands.
@@ -879,6 +881,7 @@ Index
 * define-abbrev:                         Defining Abbrevs.
 * define-abbrev-table:                   Abbrev Tables.
 * define-derived-mode:                   Derived Modes.
+* define-error:                          Error Symbols.
 * define-function:                       Defining Functions.
 * define-key:                            Changing Key Bindings.
 * define-logical-name:                   Changing File Attributes.
@@ -998,6 +1001,7 @@ Index
 * display-buffer:                        Choosing Window.
 * display-buffer-function:               Choosing Window.
 * display-completion-list:               Completion Commands.
+* display-error:                         Processing of Errors.
 * display-message:                       The Echo Area.
 * display-warning:                       Warnings.
 * display-warning-minimum-level:         Warnings.
@@ -1145,6 +1149,7 @@ Index
 * error name:                            Error Symbols.
 * error symbol:                          Error Symbols.
 * error-conditions:                      Error Symbols.
+* error-message-string:                  Processing of Errors.
 * errors:                                Errors.
 * esc-map:                               Prefix Keys.
 * ESC-prefix:                            Prefix Keys.
@@ -2302,7 +2307,6 @@ Index
 * PATH environment variable:             Subprocess Creation.
 * path-separator:                        System Environment.
 * pausing:                               Waiting.
-* peculiar error:                        Error Symbols.
 * peeking at input:                      Peeking and Discarding.
 * percent symbol in modeline:            Modeline Data.
 * perform-replace:                       Search and Replace.
@@ -2809,6 +2813,7 @@ Index
 * shrink-window-pixels:                  Resizing Windows.
 * side effect:                           Intro Eval.
 * signal:                                Signaling Errors.
+* signal-error:                          Signaling Errors.
 * signal-process:                        Signals to Processes.
 * signaling errors:                      Signaling Errors.
 * signals:                               Signals to Processes.
index ea85fa2..72c9b1a 100644 (file)
@@ -941,8 +941,8 @@ How to Signal an Error
    Most errors are signaled "automatically" within Lisp primitives
 which you call for other purposes, such as if you try to take the CAR
 of an integer or move forward a character at the end of the buffer; you
-can also signal errors explicitly with the functions `error' and
-`signal'.
+can also signal errors explicitly with the functions `error', `signal',
+and others.
 
    Quitting, which happens when the user types `C-g', is not considered
 an error, but it is handled almost like an error.  *Note Quitting::.
@@ -952,6 +952,11 @@ an error, but it is handled almost like an error.  *Note Quitting::.
      applying `format' (*note String Conversion::.) to FORMAT-STRING
      and ARGS.
 
+     This error is not continuable: you cannot continue execution after
+     the error using the debugger `r' or `c' commands.  If you wish the
+     user to be able to continue execution, use `cerror' or `signal'
+     instead.
+
      These examples show typical uses of `error':
 
           (error "You have committed an error.
@@ -964,17 +969,23 @@ an error, but it is handled almost like an error.  *Note Quitting::.
 
      `error' works by calling `signal' with two arguments: the error
      symbol `error', and a list containing the string returned by
-     `format'.
+     `format'.  This is repeated in an endless loop, to ensure that
+     `error' never returns.
 
      If you want to use your own string as an error message verbatim,
      don't just write `(error STRING)'.  If STRING contains `%', it
      will be interpreted as a format specifier, with undesirable
      results.  Instead, use `(error "%s" STRING)'.
 
+ - Function: cerror FORMAT-STRING &rest ARGS
+     This function behaves like `error', except that the error it
+     signals is continuable.  That means that debugger commands `c' and
+     `r' can resume execution.
+
  - 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.
+     This function signals a continuable error named by ERROR-SYMBOL.
+     The argument DATA is a list of additional Lisp objects relevant to
+     the circumstances of the error.
 
      The argument ERROR-SYMBOL must be an "error symbol"--a symbol
      bearing a property `error-conditions' whose value is a list of
@@ -982,10 +993,10 @@ an error, but it is handled almost like an error.  *Note Quitting::.
      sorts of errors.
 
      The number and significance of the objects in DATA depends on
-     ERROR-SYMBOL.  For example, with a `wrong-type-arg' error, there
-     are two objects in the list: a predicate that describes the type
-     that was expected, and the object that failed to fit that type.
-     *Note Error Symbols::, for a description of error symbols.
+     ERROR-SYMBOL.  For example, with a `wrong-type-argument' error,
+     there are two objects in the list: a predicate that describes the
+     type that was expected, and the object that failed to fit that
+     type.  *Note Error Symbols::, for a description of error symbols.
 
      Both ERROR-SYMBOL and DATA are available to any error handlers
      that handle the error: `condition-case' binds a local variable to
@@ -993,17 +1004,40 @@ an error, but it is handled almost like an error.  *Note Quitting::.
      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).
+     The function `signal' can return, if the debugger is invoked and
+     the user invokes the "return from signal" option.  If you want the
+     error not to be continuable, use `signal-error' instead.  Note that
+     in FSF Emacs `signal' never returns.
 
           (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."
+          (signal 'no-such-error '("My unknown error condition"))
+               error--> Peculiar error (no-such-error "My unknown error condition")
+
+ - Function: signal-error ERROR-SYMBOL DATA
+     This function behaves like `signal', except that the error it
+     signals is not continuable.
+
+ - Macro: check-argument-type PREDICATE ARGUMENT
+     This macro checks that ARGUMENT satisfies PREDICATE.  If that is
+     not the case, it signals a continuable `wrong-type-argument' error
+     until the returned value satisfies PREDICATE, and assigns the
+     returned value to ARGUMENT.  In other words, execution of the
+     program will not continue until PREDICATE is met.
+
+     ARGUMENT is not evaluated, and should be a symbol.  PREDICATE is
+     evaluated, and should name a function.
 
-     Common Lisp note: XEmacs Lisp has nothing like the Common Lisp
-     concept of continuable errors.
+     As shown in the following example, `check-argument-type' is useful
+     in low-level code that attempts to ensure the sanity of its data
+     before proceeding.
+
+          (defun cache-object-internal (object wlist)
+            ;; Before doing anything, make sure that WLIST is indeed
+            ;; a weak list, which is what we expect.
+            (check-argument-type 'weak-list-p wlist)
+            ...)
 
 \1f
 File: lispref.info,  Node: Processing of Errors,  Next: Handling Errors,  Prev: Signaling Errors,  Up: Errors
@@ -1026,6 +1060,25 @@ the command loop has an implicit handler for all kinds of errors.  The
 command loop's handler uses the error symbol and associated data to
 print an error message.
 
+   Errors in command loop are processed using the `command-error'
+function, which takes care of some necessary cleanup, and prints a
+formatted error message to the echo area.  The functions that do the
+formatting are explained below.
+
+ - Function: display-error ERROR-OBJECT STREAM
+     This function displays ERROR-OBJECT on STREAM.  ERROR-OBJECT is a
+     cons of error type, a symbol, and error arguments, a list.  If the
+     error type symbol of one of its error condition superclasses has
+     an `display-error' property, that function is invoked for printing
+     the actual error message.  Otherwise, the error is printed as
+     `Error: arg1, arg2, ...'.
+
+ - Function: error-message-string ERROR-OBJECT
+     This function converts ERROR-OBJECT to an error message string,
+     and returns it.  The message is equivalent to the one that would be
+     printed by `display-error', except that it is conveniently returned
+     in string form.
+
    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
@@ -1093,6 +1146,12 @@ such as failure to open a file in a call to `insert-file-contents'.  It
 is also used to trap errors that are totally unpredictable, such as
 when the program evaluates an expression read from the user.
 
+   Even when an error is handled, the debugger may still be called if
+the variable `debug-on-signal' (*note Error Debugging::.) is non-`nil'.
+Note that this may yield unpredictable results with code that traps
+expected errors as normal part of its operation.  Do not set
+`debug-on-signal' unless you know what you are doing.
+
    Error signaling and handling have some resemblance to `throw' and
 `catch', but they are entirely separate facilities.  An error cannot be
 caught by a `catch', and a `throw' cannot be handled by an error
@@ -1186,82 +1245,3 @@ including those signaled with `error':
      -| The error was: (error "Rats!  The variable baz was 34, not 35")
      => 2
 
-\1f
-File: lispref.info,  Node: Error Symbols,  Prev: Handling Errors,  Up: Errors
-
-Error Symbols and Condition Names
-.................................
-
-   When you signal an error, you specify an "error symbol" to specify
-the kind of error you have in mind.  Each error has one and only one
-error symbol to categorize it.  This is the finest classification of
-errors defined by the XEmacs Lisp language.
-
-   These narrow classifications are grouped into a hierarchy of wider
-classes called "error conditions", identified by "condition names".
-The narrowest such classes belong to the error symbols themselves: each
-error symbol is also a condition name.  There are also condition names
-for more extensive classes, up to the condition name `error' which
-takes in all kinds of errors.  Thus, each error has one or more
-condition names: `error', the error symbol if that is distinct from
-`error', and perhaps some intermediate classifications.
-
-   In order for a symbol to be an error symbol, it must have an
-`error-conditions' property which gives a list of condition names.
-This list defines the conditions that this kind of error belongs to.
-(The error symbol itself, and the symbol `error', should always be
-members of this list.)  Thus, the hierarchy of condition names is
-defined by the `error-conditions' properties of the error symbols.
-
-   In addition to the `error-conditions' list, the error symbol should
-have an `error-message' property whose value is a string to be printed
-when that error is signaled but not handled.  If the `error-message'
-property exists, but is not a string, the error message `peculiar
-error' is used.
-
-   Here is how we define a new error symbol, `new-error':
-
-     (put 'new-error
-          'error-conditions
-          '(error my-own-errors new-error))
-     => (error my-own-errors new-error)
-     (put 'new-error 'error-message "A new error")
-     => "A new error"
-
-This error has three condition names: `new-error', the narrowest
-classification; `my-own-errors', which we imagine is a wider
-classification; and `error', which is the widest of all.
-
-   The error string should start with a capital letter but it should
-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
-do this:
-
-     (signal 'new-error '(x y))
-          error--> A new error: x, y
-
-   This error can be handled through any of the three condition names.
-This example handles `new-error' and any other errors in the class
-`my-own-errors':
-
-     (condition-case foo
-         (bar nil t)
-       (my-own-errors nil))
-
-   The significant way that errors are classified is by their condition
-names--the names used to match errors with handlers.  An error symbol
-serves only as a convenient way to specify the intended error message
-and list of condition names.  It would be cumbersome to give `signal' a
-list of condition names rather than one error symbol.
-
-   By contrast, using only error symbols without condition names would
-seriously decrease the power of `condition-case'.  Condition names make
-it possible to categorize errors at various levels of generality when
-you write an error handler.  Using error symbols alone would eliminate
-all but the narrowest level of classification.
-
-   *Note Standard Errors::, for a list of all the standard error symbols
-and their conditions.
-
index 6d2fafc..54604a5 100644 (file)
@@ -50,6 +50,92 @@ may be included in a translation approved by the Free Software
 Foundation instead of in the original English.
 
 \1f
+File: lispref.info,  Node: Error Symbols,  Prev: Handling Errors,  Up: Errors
+
+Error Symbols and Condition Names
+.................................
+
+   When you signal an error, you specify an "error symbol" to specify
+the kind of error you have in mind.  Each error has one and only one
+error symbol to categorize it.  This is the finest classification of
+errors defined by the XEmacs Lisp language.
+
+   These narrow classifications are grouped into a hierarchy of wider
+classes called "error conditions", identified by "condition names".
+The narrowest such classes belong to the error symbols themselves: each
+error symbol is also a condition name.  There are also condition names
+for more extensive classes, up to the condition name `error' which
+takes in all kinds of errors.  Thus, each error has one or more
+condition names: `error', the error symbol if that is distinct from
+`error', and perhaps some intermediate classifications.
+
+   In other words, each error condition "inherits" from another error
+condition, with `error' sitting at the top of the inheritance hierarchy.
+
+ - Function: define-error ERROR-SYMBOL ERROR-MESSAGE &optional
+          INHERITS-FROM
+     This function defines a new error, denoted by ERROR-SYMBOL.
+     ERROR-MESSAGE is an informative message explaining the error, and
+     will be printed out when an unhandled error occurs.  ERROR-SYMBOL
+     is a sub-error of INHERITS-FROM (which defaults to `error').
+
+     `define-error' internally works by putting on ERROR-SYMBOL an
+     `error-message' property whose value is ERROR-MESSAGE, and an
+     `error-conditions' property that is a list of ERROR-SYMBOL
+     followed by each of its super-errors, up to and including `error'.
+     You will sometimes see code that sets this up directly rather than
+     calling `define-error', but you should *not* do this yourself,
+     unless you wish to maintain compatibility with FSF Emacs, which
+     does not provide `define-error'.
+
+   Here is how we define a new error symbol, `new-error', that belongs
+to a range of errors called `my-own-errors':
+
+     (define-error 'my-own-errors "A whole range of errors" 'error)
+     (define-error 'new-error "A new error" 'my-own-errors)
+
+`new-error' has three condition names: `new-error', the narrowest
+classification; `my-own-errors', which we imagine is a wider
+classification; and `error', which is the widest of all.
+
+   Note that it is not legal to try to define an error unless its
+super-error is also defined.  For instance, attempting to define
+`new-error' before `my-own-errors' are defined will signal an error.
+
+   The error string should start with a capital letter but it should
+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
+do this:
+
+     (signal 'new-error '(x y))
+          error--> A new error: x, y
+
+   This error can be handled through any of the three condition names.
+This example handles `new-error' and any other errors in the class
+`my-own-errors':
+
+     (condition-case foo
+         (bar nil t)
+       (my-own-errors nil))
+
+   The significant way that errors are classified is by their condition
+names--the names used to match errors with handlers.  An error symbol
+serves only as a convenient way to specify the intended error message
+and list of condition names.  It would be cumbersome to give `signal' a
+list of condition names rather than one error symbol.
+
+   By contrast, using only error symbols without condition names would
+seriously decrease the power of `condition-case'.  Condition names make
+it possible to categorize errors at various levels of generality when
+you write an error handler.  Using error symbols alone would eliminate
+all but the narrowest level of classification.
+
+   *Note Standard Errors::, for a list of all the standard error symbols
+and their conditions.
+
+\1f
 File: lispref.info,  Node: Cleanups,  Prev: Errors,  Up: Nonlocal Exits
 
 Cleaning Up from Nonlocal Exits
@@ -1131,86 +1217,3 @@ Creating and Deleting Buffer-Local Bindings
 appropriate for data pertaining to where the file came from or how to
 save it, rather than with how to edit the contents.
 
-\1f
-File: lispref.info,  Node: Default Value,  Prev: Creating Buffer-Local,  Up: Buffer-Local Variables
-
-The Default Value of a Buffer-Local Variable
---------------------------------------------
-
-   The global value of a variable with buffer-local bindings is also
-called the "default" value, because it is the value that is in effect
-except when specifically overridden.
-
-   The functions `default-value' and `setq-default' access and change a
-variable's default value regardless of whether the current buffer has a
-buffer-local binding.  For example, you could use `setq-default' to
-change the default setting of `paragraph-start' for most buffers; and
-this would work even when you are in a C or Lisp mode buffer that has a
-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
-     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::.).
-
- - 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.
-
-     `default-boundp' is to `default-value' as `boundp' is to
-     `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.
-
-     If a SYMBOL is not buffer-local for the current buffer, and is not
-     marked automatically buffer-local, `setq-default' has the same
-     effect as `setq'.  If SYMBOL is buffer-local for the current
-     buffer, then this changes the value that other buffers will see
-     (as long as they don't have a buffer-local value), but not the
-     value that the current buffer sees.
-
-          ;; In buffer `foo':
-          (make-local-variable 'local)
-               => local
-          (setq local 'value-in-foo)
-               => value-in-foo
-          (setq-default local 'new-default)
-               => new-default
-          local
-               => value-in-foo
-          (default-value 'local)
-               => new-default
-          
-          ;; In (the new) buffer `bar':
-          local
-               => new-default
-          (default-value 'local)
-               => new-default
-          (setq local 'another-default)
-               => another-default
-          (default-value 'local)
-               => another-default
-          
-          ;; Back in buffer `foo':
-          local
-               => value-in-foo
-          (default-value 'local)
-               => another-default
-
- - Function: set-default SYMBOL VALUE
-     This function is like `setq-default', except that SYMBOL is
-     evaluated.
-
-          (set-default (car '(a b c)) 23)
-               => 23
-          (default-value 'a)
-               => 23
-
index 04758b0..3d26462 100644 (file)
@@ -19,58 +19,58 @@ preserved on all copies.
 \1f
 Indirect:
 new-users-guide.info-1: 661
-new-users-guide.info-2: 50497
-new-users-guide.info-3: 100000
+new-users-guide.info-2: 50494
+new-users-guide.info-3: 99997
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f661
-Node: Intro\7f4639
-Node: Entering\7f7222
-Node: Enter\7f8736
-Node: Frame\7f9418
-Node: Exiting\7f11087
-Node: Mode Line\7f12287
-Node: Echo Area\7f14434
-Node: Windows and Menus\7f15789
-Node: XEmacs Window\7f16242
-Node: Pull-down Menus\7f19863
-Node: File menu\7f20742
-Node: Edit menu\7f24001
-Node: Options Menu\7f26528
-Node: Buffers Menu\7f31310
-Node: Help menu\7f31696
-Node: Edit\7f32194
-Node: Insert\7f33788
-Node: Cursor Position\7f35116
-Node: Erase\7f37187
-Node: Numeric Argument\7f38341
-Node: Undo\7f39525
-Node: Customization Basics\7f40288
-Node: Customizing key Bindings\7f41517
-Node: Customizing Menus\7f45007
-Node: Help\7f50497
-Node: The Help Menu\7f51185
-Node: Modes\7f56110
-Node: Major Modes\7f57026
-Node: Minor Modes\7f60975
-Node: Files\7f65061
-Node: File Names\7f65783
-Node: Visiting\7f67586
-Node: Saving Files\7f69710
-Node: Other Customizations\7f73088
-Node: Setting Variables\7f75557
-Node: Init File\7f78766
-Node: Select and Move\7f84235
-Node: Selecting Text\7f85189
-Node: Mouse\7f86702
-Node: Region Operation\7f88027
-Node: Moving Text\7f89287
-Node: Accumulating text\7f90527
-Node: Search and Replace\7f92847
-Node: Key Index\7f96711
-Node: Command Index\7f100000
-Node: Variable Index\7f104102
-Node: Concept Index\7f104679
+Node: Intro\7f4636
+Node: Entering\7f7219
+Node: Enter\7f8733
+Node: Frame\7f9415
+Node: Exiting\7f11084
+Node: Mode Line\7f12284
+Node: Echo Area\7f14431
+Node: Windows and Menus\7f15786
+Node: XEmacs Window\7f16239
+Node: Pull-down Menus\7f19860
+Node: File menu\7f20739
+Node: Edit menu\7f23998
+Node: Options Menu\7f26525
+Node: Buffers Menu\7f31307
+Node: Help menu\7f31693
+Node: Edit\7f32191
+Node: Insert\7f33785
+Node: Cursor Position\7f35113
+Node: Erase\7f37184
+Node: Numeric Argument\7f38338
+Node: Undo\7f39522
+Node: Customization Basics\7f40285
+Node: Customizing key Bindings\7f41514
+Node: Customizing Menus\7f45004
+Node: Help\7f50494
+Node: The Help Menu\7f51182
+Node: Modes\7f56107
+Node: Major Modes\7f57023
+Node: Minor Modes\7f60972
+Node: Files\7f65058
+Node: File Names\7f65780
+Node: Visiting\7f67583
+Node: Saving Files\7f69707
+Node: Other Customizations\7f73085
+Node: Setting Variables\7f75554
+Node: Init File\7f78763
+Node: Select and Move\7f84232
+Node: Selecting Text\7f85186
+Node: Mouse\7f86699
+Node: Region Operation\7f88024
+Node: Moving Text\7f89284
+Node: Accumulating text\7f90524
+Node: Search and Replace\7f92844
+Node: Key Index\7f96708
+Node: Command Index\7f99997
+Node: Variable Index\7f104099
+Node: Concept Index\7f104676
 \1f
 End Tag Table
index 4771478..1200652 100644 (file)
@@ -19,7 +19,8 @@ preserved on all copies.
 \1f
 File: new-users-guide.info,  Node: Top,  Next: Intro,  Prev: (dir),  Up: (dir)
 
-   The Emacs Editor ****************
+The Emacs Editor
+****************
 
    Emacs is the extensible, customizable, self-documenting real-time
 display editor.  This Info file will help you get started on using
index 76887c1..6ecf2d6 100644 (file)
@@ -1,5 +1,5 @@
-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.
@@ -24,61 +24,62 @@ translation approved by the Free Software Foundation.
 
 \1f
 Indirect:
-standards.info-1: 1000
-standards.info-2: 48794
-standards.info-3: 97971
+standards.info-1: 974
+standards.info-2: 48769
+standards.info-3: 97946
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f1000
-Node: Preface\7f1591
-Node: Legal Issues\7f2608
-Node: Reading Non-Free Code\7f2974
-Node: Contributions\7f4697
-Node: Design Advice\7f6827
-Node: Compatibility\7f7335
-Node: Using Extensions\7f8846
-Node: ANSI C\7f10348
-Node: Source Language\7f12471
-Node: Program Behavior\7f13964
-Node: Semantics\7f14673
-Node: Libraries\7f18990
-Node: Errors\7f20225
-Node: User Interfaces\7f22001
-Node: Option Table\7f28879
-Node: Memory Usage\7f43689
-Node: Writing C\7f44683
-Node: Formatting\7f45522
-Node: Comments\7f48794
-Node: Syntactic Conventions\7f52092
-Node: Names\7f55030
-Node: System Portability\7f56964
-Node: CPU Portability\7f58561
-Node: System Functions\7f60818
-Node: Internationalization\7f65922
-Node: Mmap\7f69070
-Node: Documentation\7f69775
-Node: GNU Manuals\7f70410
-Node: Manual Structure Details\7f74658
-Node: License for Manuals\7f75991
-Node: NEWS File\7f76575
-Node: Change Logs\7f77251
-Node: Change Log Concepts\7f77968
-Node: Style of Change Logs\7f79823
-Node: Simple Changes\7f81377
-Node: Conditional Changes\7f82568
-Node: Man Pages\7f83945
-Node: Reading other Manuals\7f85564
-Node: Managing Releases\7f86348
-Node: Configuration\7f87103
-Node: Makefile Conventions\7f94043
-Node: Makefile Basics\7f94802
-Node: Utilities in Makefiles\7f97971
-Node: Command Variables\7f100107
-Node: Directory Variables\7f103608
-Node: Standard Targets\7f114485
-Node: Install Command Categories\7f125025
-Node: Releases\7f129598
-Node: References\7f133681
+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 b0b8bcd..0ba5b2e 100644 (file)
@@ -1,5 +1,5 @@
-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.
@@ -124,7 +124,7 @@ Accepting Contributions
    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.  *Each* person who makes a nontrivial
+sign papers initially.  _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.
@@ -366,14 +366,14 @@ File: standards.info,  Node: Semantics,  Next: Libraries,  Up: Program Behavior
 Writing Robust Programs
 =======================
 
-   Avoid arbitrary limits on the length or number of *any* data
+   Avoid arbitrary limits on the length or number of _any_ data
 structure, including file names, lines, files, and symbols, by
 allocating 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 *including those with codes above 0177*.  The
+nonprinting characters _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
@@ -382,7 +382,7 @@ 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 `perror' or
-equivalent) in *every* error message resulting from a failing system
+equivalent) in _every_ error message resulting from a failing system
 call, as well as the name of the file if any and the name of the
 utility.  Just "cannot open foo.c" or "stat failed" is not sufficient.
 
@@ -440,7 +440,7 @@ are easy to examine with the debugger, so there is no point moving them
 elsewhere.
 
    Do not use a count of errors as the exit status for a program.
-*That does not work*, because exit status values are limited to 8 bits
+_That does not work_, because exit status values are limited to 8 bits
 (0 through 255).  A single run of the program might have 256 errors; if
 you try to return 256 as the exit status, the parent process will see 0
 as the status, and it will appear that the program succeeded.
@@ -581,7 +581,7 @@ 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 `--verbose'.  To achieve this uniformity, look at the
 table of common long-option names when you choose the option names for
-your program (*note Option Table::.).
+your program (*note 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
@@ -606,7 +606,7 @@ among GNU utilities, and fewer idiosyncracies for users to remember.
 
           GNU Emacs 19.30
 
-     The program's name should be a constant string; *don't* compute it
+     The program's name should be a constant string; _don't_ compute it
      from `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 `PATH'.
@@ -1796,7 +1796,7 @@ writing GNU software.
 * 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
+* System Functions::            Portability and ``standard'' library functions
 * Internationalization::        Techniques for internationalization
 * Mmap::                        How you can safely use `mmap'.
 
index 36b3808..8fd19bd 100644 (file)
@@ -1,5 +1,5 @@
-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.
@@ -78,9 +78,9 @@ function itself would be off the bottom of the screen.
 
    Every `#endif' should have a comment, except in the case of short
 conditionals (just a few lines) that are not nested.  The comment should
-state the condition of the conditional that is ending, *including its
-sense*.  `#else' should have a comment describing the condition *and
-sense* of the code that follows.  For example:
+state the condition of the conditional that is ending, _including its
+sense_.  `#else' should have a comment describing the condition _and
+sense_ of the code that follows.  For example:
 
      #ifdef foo
        ...
@@ -331,7 +331,7 @@ that pass their arguments along to `printf' and friends:
 
 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 *not* to use a prototype for such
+"correct" alternative.  Be sure _not_ to use a prototype for such
 functions.
 
    However, avoid casting pointers to integers unless you really need
@@ -604,7 +604,7 @@ 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 *topic*.  For example,
+   Instead, each manual should cover a coherent _topic_.  For example,
 instead of a manual for `diff' and a manual for `diff3', we have one
 manual for "comparison of files" which covers both of those programs,
 as well as `cmp'.  By documenting these programs together, we can make
@@ -629,8 +629,8 @@ what we mean.
 logical breakdown of its topic, but order the sections, and write their
 text, so that reading the chapter straight through makes sense.  Do
 likewise when structuring the book into chapters, and when structuring a
-section into paragraphs.  The watchword is, *at each point, address the
-most fundamental and important issue raised by the preceding text.*
+section into paragraphs.  The watchword is, _at each point, address the
+most fundamental and important issue raised by the preceding text._
 
    If necessary, add extra chapters at the beginning of the manual which
 are purely tutorial and cover the basics of the subject.  These provide
@@ -644,7 +644,7 @@ 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 *in the manual*.
+bugs _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
@@ -872,7 +872,7 @@ are contained in a `#ifdef HAVE_LIBNCURSES' conditional:
      * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
 
    Here is an entry for a change that takes affect only when a certain
-macro is *not* defined:
+macro is _not_ defined:
 
      (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
 
@@ -963,12 +963,12 @@ they affect compilation.
 
    One way to do this is to make a link from a standard name such as
 `config.h' to the proper configuration file for the chosen system.  If
-you use this technique, the distribution should *not* contain a file
+you use this technique, the distribution should _not_ contain a file
 named `config.h'.  This is so that people won't be able to build the
 program without configuring it first.
 
    Another thing that `configure' can do is to edit the Makefile.  If
-you do this, the distribution should *not* contain a file named
+you do this, the distribution should _not_ contain a file named
 `Makefile'.  Instead, it should include a file `Makefile.in' which
 contains the input used for editing.  Once again, this is so that people
 won't be able to build the program without configuring it first.
index c21b67c..bac2c56 100644 (file)
@@ -1,5 +1,5 @@
-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.
@@ -105,7 +105,7 @@ compilation command that runs the preprocessor, and use `LDFLAGS' in
 any compilation command that does linking as well as in any direct use
 of `ld'.
 
-   If there are C compiler options that *must* be used for proper
+   If there are C compiler options that _must_ be used for proper
 compilation of certain files, do not include them in `CFLAGS'.  Users
 expect to be able to specify `CFLAGS' freely themselves.  Instead,
 arrange to pass the necessary options to the C compiler independently
@@ -118,7 +118,7 @@ by defining an implicit rule, like this:
              $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
 
    Do include the `-g' option in `CFLAGS', because that is not
-*required* for proper compilation.  You can consider it a default that
+_required_ for proper compilation.  You can consider it a default that
 is only recommended.  If the package is set up so that it is compiled
 with GCC by default, then you might as well include `-O' in the default
 value of `CFLAGS' as well.
@@ -450,7 +450,7 @@ Makefiles:
      that don't have the Unix man page documentation system installed.
 
      The way to install Info files is to copy them into `$(infodir)'
-     with `$(INSTALL_DATA)' (*note Command Variables::.), and then run
+     with `$(INSTALL_DATA)' (*note Command Variables::), and then run
      the `install-info' program if it is present.  `install-info' is a
      program that edits the Info `dir' file to add or update the menu
      entry for the given Info file; it is part of the Texinfo package.
@@ -685,7 +685,7 @@ 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
-*should not* define them in the makefile).
+_should not_ define them in the makefile).
 
    Here are the three possible category lines, each with a comment that
 explains what it means:
@@ -709,7 +709,7 @@ classified as normal.
 from the Info directory.
 
    If the `install' or `uninstall' target has any dependencies which
-act as subroutines of installation, then you should start *each*
+act as subroutines of installation, then you should start _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
index 2986f92..9f25e17 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -34,306 +34,317 @@ 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: 1484
+texinfo.info-2: 48703
+texinfo.info-3: 96677
+texinfo.info-4: 146069
+texinfo.info-5: 196042
+texinfo.info-6: 245134
+texinfo.info-7: 293729
+texinfo.info-8: 343544
+texinfo.info-9: 392857
+texinfo.info-10: 435235
+texinfo.info-11: 481351
+texinfo.info-12: 519511
 \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\7f1484
+Node: Copying\7f23799
+Node: Overview\7f25804
+Node: Overview-Footnotes\7f27233
+Ref: Overview-Footnote-1\7f27297
+Node: Using Texinfo\7f27769
+Node: Info Files\7f30252
+Node: Info Files-Footnotes\7f34288
+Ref: Info Files-Footnote-1\7f34356
+Node: Printed Books\7f34535
+Node: Printed Books-Footnotes\7f37207
+Ref: Printed Books-Footnote-1\7f37281
+Node: Formatting Commands\7f37491
+Node: Formatting Commands-Footnotes\7f40318
+Ref: Formatting Commands-Footnote-1\7f40404
+Node: Conventions\7f41020
+Node: Comments\7f43582
+Node: Minimum\7f45005
+Node: Six Parts\7f47191
+Node: Short Sample\7f48703
+Node: Acknowledgements\7f52839
+Node: Texinfo Mode\7f53674
+Node: Texinfo Mode Overview\7f55046
+Node: Emacs Editing\7f55822
+Node: Inserting\7f57952
+Node: Showing the Structure\7f62233
+Node: Updating Nodes and Menus\7f64760
+Node: Updating Commands\7f65833
+Node: Updating Requirements\7f71894
+Node: Other Updating Commands\7f74191
+Node: Info Formatting\7f77459
+Node: Printing\7f78717
+Node: Texinfo Mode Summary\7f81062
+Node: Beginning a File\7f85816
+Node: Four Parts\7f86707
+Node: Sample Beginning\7f88177
+Node: Header\7f89797
+Node: First Line\7f91149
+Node: Start of Header\7f92138
+Node: setfilename\7f92851
+Node: settitle\7f94787
+Node: setchapternewpage\7f96677
+Node: paragraphindent\7f99438
+Node: End of Header\7f100920
+Node: Info Summary and Permissions\7f101759
+Node: Titlepage & Copyright Page\7f102778
+Node: titlepage\7f104384
+Node: titlepage-Footnotes\7f106666
+Ref: titlepage-Footnote-1\7f106732
+Node: titlefont center sp\7f107006
+Node: title subtitle author\7f108232
+Node: Copyright & Permissions\7f110504
+Node: end titlepage\7f112505
+Node: headings on off\7f114211
+Node: The Top Node\7f116256
+Node: Title of Top Node\7f117411
+Node: Master Menu Parts\7f118664
+Node: Software Copying Permissions\7f120901
+Node: Ending a File\7f122069
+Node: Printing Indices & Menus\7f122917
+Node: Contents\7f125226
+Node: File End\7f127566
+Node: Structuring\7f128239
+Node: Tree Structuring\7f129896
+Node: Structuring Command Types\7f131339
+Node: makeinfo top\7f133666
+Node: chapter\7f134199
+Node: unnumbered & appendix\7f135223
+Node: majorheading & chapheading\7f136062
+Node: section\7f136883
+Node: unnumberedsec appendixsec heading\7f137647
+Node: subsection\7f138636
+Node: unnumberedsubsec appendixsubsec subheading\7f139208
+Node: subsubsection\7f140161
+Node: Raise/lower sections\7f141711
+Node: Nodes\7f143846
+Node: Two Paths\7f144783
+Node: Node Menu Illustration\7f146069
+Node: node\7f149764
+Node: Node Names\7f152460
+Node: Writing a Node\7f153536
+Node: Node Line Tips\7f155554
+Node: Node Line Requirements\7f156348
+Node: First Node\7f157949
+Node: makeinfo top command\7f159393
+Node: Top Node Summary\7f160572
+Node: makeinfo Pointer Creation\7f162022
+Node: Menus\7f163269
+Node: Menus-Footnotes\7f164208
+Ref: Menus-Footnote-1\7f164266
+Node: Menu Location\7f164559
+Node: Writing a Menu\7f166236
+Node: Menu Parts\7f167202
+Node: Less Cluttered Menu Entry\7f168360
+Node: Menu Example\7f168985
+Node: Other Info Files\7f170506
+Node: Cross References\7f172362
+Node: References\7f173319
+Node: Cross Reference Commands\7f175066
+Node: Cross Reference Parts\7f176125
+Node: xref\7f178961
+Node: Reference Syntax\7f179760
+Node: One Argument\7f181414
+Node: Two Arguments\7f182426
+Node: Three Arguments\7f183541
+Node: Four and Five Arguments\7f185932
+Node: Top Node Naming\7f188344
+Node: ref\7f189354
+Node: pxref\7f190744
+Node: inforef\7f193126
+Node: uref\7f194419
+Node: Marking Text\7f195418
+Node: Indicating\7f196042
+Node: Useful Highlighting\7f197947
+Node: code\7f199336
+Node: kbd\7f202374
+Node: key\7f204244
+Node: samp\7f205577
+Node: var\7f207164
+Node: file\7f208957
+Node: dfn\7f209564
+Node: cite\7f210474
+Node: url\7f210928
+Node: email\7f211492
+Node: Emphasis\7f212304
+Node: emph & strong\7f213204
+Node: Smallcaps\7f214190
+Node: Fonts\7f215517
+Node: Customized Highlighting\7f216605
+Node: Customized Highlighting-Footnotes\7f219420
+Ref: Customized Highlighting-Footnote-1\7f219514
+Node: Quotations and Examples\7f219640
+Node: Block Enclosing Commands\7f221262
+Node: quotation\7f223287
+Node: example\7f224377
+Node: noindent\7f226432
+Node: Lisp Example\7f227896
+Node: Lisp Example-Footnotes\7f228598
+Ref: Lisp Example-Footnote-1\7f228670
+Node: smallexample & smalllisp\7f228788
+Node: display\7f230813
+Node: format\7f231445
+Node: exdent\7f231906
+Node: flushleft & flushright\7f232986
+Node: cartouche\7f234252
+Node: Lists and Tables\7f235019
+Node: Introducing Lists\7f235695
+Node: itemize\7f237360
+Node: enumerate\7f239507
+Node: Two-column Tables\7f242012
+Node: table\7f242701
+Node: ftable vtable\7f245134
+Node: itemx\7f246235
+Node: Multi-column Tables\7f247246
+Node: Multitable Column Widths\7f247917
+Node: Multitable Rows\7f249371
+Node: Indices\7f251148
+Node: Index Entries\7f252298
+Node: Predefined Indices\7f253431
+Node: Indexing Commands\7f254428
+Node: Combining Indices\7f258968
+Node: syncodeindex\7f260331
+Node: synindex\7f261993
+Node: New Indices\7f262518
+Node: Insertions\7f264343
+Node: Braces Atsigns\7f265527
+Node: Inserting An Atsign\7f266079
+Node: Inserting Braces\7f266353
+Node: Inserting Space\7f266716
+Node: Not Ending a Sentence\7f267220
+Node: Ending a Sentence\7f268574
+Node: Multiple Spaces\7f269703
+Node: dmn\7f270922
+Node: Inserting Accents\7f272129
+Node: Dots Bullets\7f273886
+Node: dots\7f274708
+Node: bullet\7f275232
+Node: TeX and copyright\7f275629
+Node: tex\7f276196
+Node: copyright symbol\7f276612
+Node: pounds\7f276872
+Node: minus\7f277236
+Node: math\7f278158
+Node: Glyphs\7f278886
+Node: Glyphs Summary\7f279999
+Node: result\7f280627
+Node: expansion\7f281112
+Node: Print Glyph\7f282068
+Node: Error Glyph\7f282945
+Node: Equivalence\7f283778
+Node: Point Glyph\7f284466
+Node: Images\7f286023
+Node: Breaks\7f287690
+Node: Break Commands\7f289121
+Node: Line Breaks\7f289962
+Node: - and hyphenation\7f290980
+Node: w\7f292230
+Node: sp\7f292943
+Node: page\7f293352
+Node: group\7f293729
+Node: need\7f295472
+Node: Definition Commands\7f296202
+Node: Def Cmd Template\7f297773
+Node: Optional Arguments\7f300770
+Node: deffnx\7f302358
+Node: Def Cmds in Detail\7f303313
+Node: Functions Commands\7f304423
+Node: Variables Commands\7f307428
+Node: Typed Functions\7f309514
+Node: Typed Variables\7f313056
+Node: Abstract Objects\7f315039
+Node: Data Types\7f320264
+Node: Def Cmd Conventions\7f321519
+Node: Sample Function Definition\7f322082
+Node: Footnotes\7f324966
+Node: Footnotes-Footnotes\7f325354
+Ref: Footnotes-Footnote-1\7f325420
+Node: Footnote Commands\7f325700
+Node: Footnote Commands-Footnotes\7f327197
+Ref: Footnote Commands-Footnote-1\7f327279
+Node: Footnote Styles\7f327315
+Node: Conditionals\7f329901
+Node: Conditional Commands\7f330712
+Node: Conditional Not Commands\7f332205
+Node: Raw Formatter Commands\7f332950
+Node: set clear value\7f334780
+Node: ifset ifclear\7f335581
+Node: value\7f338760
+Node: value Example\7f340172
+Node: Macros\7f341750
+Node: Defining Macros\7f342455
+Node: Invoking Macros\7f343544
+Node: Format/Print Hardcopy\7f344650
+Node: Use TeX\7f346487
+Node: Format with tex/texindex\7f347115
+Node: Format with texi2dvi\7f350756
+Node: Print with lpr\7f351347
+Node: Within Emacs\7f352201
+Node: Texinfo Mode Printing\7f353120
+Node: Compile-Command\7f356530
+Node: Requirements Summary\7f357418
+Node: Preparing for TeX\7f358731
+Node: Overfull hboxes\7f361518
+Node: smallbook\7f363077
+Node: A4 Paper\7f364595
+Node: Cropmarks and Magnification\7f365820
+Node: Create an Info File\7f367761
+Node: makeinfo advantages\7f369064
+Node: Invoking makeinfo\7f369980
+Node: makeinfo options\7f370668
+Node: Pointer Validation\7f376152
+Node: makeinfo in Emacs\7f377496
+Node: texinfo-format commands\7f380054
+Node: Batch Formatting\7f381325
+Node: Tag and Split Files\7f382541
+Node: Install an Info File\7f385895
+Node: Directory file\7f386713
+Node: New Info File\7f388581
+Node: Other Info Directories\7f389642
+Node: Installing Dir Entries\7f392857
+Node: Invoking install-info\7f394850
+Node: Command List\7f397265
+Node: Tips\7f435235
+Node: Sample Texinfo File\7f446645
+Node: Sample Permissions\7f448764
+Node: Inserting Permissions\7f449807
+Node: ifinfo Permissions\7f452113
+Node: Titlepage Permissions\7f453734
+Node: Include Files\7f454996
+Node: Using Include Files\7f456083
+Node: texinfo-multiple-files-update\7f458038
+Node: Include File Requirements\7f460399
+Node: Sample Include File\7f461644
+Node: Include Files Evolution\7f463163
+Node: Headings\7f465134
+Node: Headings Introduced\7f465771
+Node: Heading Format\7f467659
+Node: Heading Choice\7f470111
+Node: Custom Headings\7f471483
+Node: Catching Mistakes\7f475811
+Node: makeinfo Preferred\7f477100
+Node: Debugging with Info\7f478005
+Node: Debugging with TeX\7f481351
+Node: Using texinfo-show-structure\7f485631
+Node: Using occur\7f488730
+Node: Running Info-Validate\7f490267
+Node: Using Info-validate\7f491328
+Node: Unsplit\7f493170
+Node: Tagifying\7f494216
+Node: Splitting\7f495068
+Node: Refilling Paragraphs\7f496684
+Node: Refilling Paragraphs-Footnotes\7f498338
+Ref: Refilling Paragraphs-Footnote-1\7f498426
+Node: Command Syntax\7f498589
+Node: Obtaining TeX\7f501546
+Node: Command and Variable Index\7f503659
+Node: Concept Index\7f519511
 \1f
 End Tag Table
index bc542dc..f31fc03 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -91,7 +91,7 @@ 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
 
@@ -556,7 +556,7 @@ File: texinfo.info,  Node: Overview,  Next: Texinfo Mode,  Prev: Copying,  Up: T
 Overview of Texinfo
 *******************
 
-  "Texinfo"(1) (*note Overview-Footnotes::) is a documentation system
+  "Texinfo"(1) (*note Overview-Footnote-1::) 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
@@ -679,7 +679,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
@@ -735,7 +735,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,
@@ -812,7 +812,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
index 7b4fbcc..aea9a20 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -247,7 +247,7 @@ In this case, the text should be formatted with `@table', `@item', and
 Periods Outside of Quotes
 .........................
 
-  Place periods and other punctuation marks *outside* of quotations,
+  Place periods and other punctuation marks _outside_ of quotations,
 unless the punctuation is part of the quotation.  This practice goes
 against publishing conventions in the United States, but enables the
 reader to distinguish between the contents of the quotation and the
@@ -258,7 +258,7 @@ outside the end quotation marks:
 
      Evidently, `au' is an abbreviation for ``author''.
 
-since `au' does *not* serve as an  abbreviation for `author.' (with a
+since `au' does _not_ serve as an  abbreviation for `author.' (with a
 period following the word).
 
 Introducing New Terms
@@ -372,6 +372,7 @@ A Sample Texinfo File
 You can see this file, with comments, in the first chapter.  *Note A
 Short Sample Texinfo File: Short Sample.
 
+
      \input texinfo   @c -*-texinfo-*-
      @c %**start of header
      @setfilename sample.info
@@ -724,8 +725,8 @@ hierarchical level in the file structure.  Usually, each is an
 each included file contains one, and only one, chapter or
 equivalent-level node.
 
-  The outer file should contain only *one* node, the `Top' node.  It
-should *not* contain any nodes besides the single `Top' node.  The
+  The outer file should contain only _one_ node, the `Top' node.  It
+should _not_ contain any nodes besides the single `Top' node.  The
 `texinfo-multiple-files-update' command will not process them.
 
 \1f
@@ -1064,7 +1065,7 @@ and `@end iftex' commands.
      For `@include' files only: expands to the name of the current
      `@include' file.  If the current Texinfo source file is not an
      `@include' file, this command has no effect.  This command does
-     *not* provide the name of the current Texinfo source file unless
+     _not_ provide the name of the current Texinfo source file unless
      it is an `@include' file.  (*Note Include Files::, for more
      information about `@include' files.)
 
index 79b8377..43fe115 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -103,7 +103,7 @@ three things.
      prompt.
 
   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 `?'  prompt.
+switch to the shell buffer and line at which TeX offers the `?' 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
@@ -417,7 +417,7 @@ Refilling Paragraphs
 ********************
 
   The `@refill' command refills and, optionally, indents the first line
-of a paragraph.(1) (*note Refilling Paragraphs-Footnotes::) The
+of a paragraph.(1) (*note Refilling Paragraphs-Footnote-1::) The
 `@refill' command is no longer important, but we describe it here
 because you once needed it.  You will see it in many old Texinfo files.
 
@@ -432,7 +432,7 @@ automatically.)  Now, all the Info formatters automatically fill and
 indent those paragraphs that need to be filled and indented.
 
   The `@refill' command causes `texinfo-format-region' and
-`texinfo-format-buffer' to refill a paragraph in the Info file *after*
+`texinfo-format-buffer' to refill a paragraph in the Info file _after_
 all the other processing has been done.  For this reason, you can not
 use `@refill' with a paragraph containing either `@*' or `@w{ ... }'
 since the refilling action will override those two commands.
@@ -503,7 +503,7 @@ uses the rest of the line as its argument.
 Emacs paragraph and filling commands work properly.  There is only one
 exception to this rule: the command `@refill', which is always used at
 the end of a paragraph immediately following the final period or other
-punctuation character.  `@refill' takes no argument and does *not*
+punctuation character.  `@refill' takes no argument and does _not_
 require braces.  `@refill' never confuses the Emacs paragraph commands
 because it cannot appear at the beginning of a line.
 
@@ -562,6 +562,7 @@ the TeX Users Group co-sponsors a complete CD-ROM TeX distribution.
      sites: please add to the base cost, if desired, $20.00 for
      shipment via air parcel post, or $30.00 for shipment via courier.
 
+
   Many other TeX distributions are available; see `http://tug.org/'.
 
 \1f
index 1e064ab..de69019 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -42,39 +42,43 @@ Concept Index
 
 * !:                                     Inserting Accents.
 * (dir) as Up node of Top node:          First Node.
+* --delete:                              Invoking install-info.
+* --dir-file=NAME:                       Invoking install-info.
+* --entry=TEXT:                          Invoking install-info.
+* --error-limit=LIMIT:                   makeinfo options.
+* --fill-column=WIDTH:                   makeinfo options.
+* --footnote-style=STYLE:                makeinfo options.
+* --force:                               makeinfo options.
+* --help <1>:                            Invoking install-info.
+* --help:                                makeinfo options.
+* --info-dir=DIR:                        Invoking install-info.
+* --info-file=FILE:                      Invoking install-info.
+* --item=TEXT:                           Invoking install-info.
+* --no-headers:                          makeinfo options.
+* --no-number-footnotes:                 makeinfo options.
+* --no-pointer-validate:                 makeinfo options.
+* --no-split:                            makeinfo options.
+* --no-validate:                         makeinfo options.
+* --no-warn:                             makeinfo options.
+* --output=FILE:                         makeinfo options.
+* --paragraph-indent=INDENT:             makeinfo options.
+* --quiet:                               Invoking install-info.
+* --reference-limit=LIMIT:               makeinfo options.
+* --remove:                              Invoking install-info.
+* --section=SEC:                         Invoking install-info.
+* --verbose:                             makeinfo options.
+* --version <1>:                         Invoking install-info.
+* --version:                             makeinfo options.
 * -D VAR:                                makeinfo options.
-* -delete:                               Invoking install-info.
-* -dir-file=NAME:                        Invoking install-info.
-* -entry=TEXT:                           Invoking install-info.
-* -error-limit=LIMIT:                    makeinfo options.
-* -fill-column=WIDTH:                    makeinfo options.
-* -footnote-style=STYLE:                 makeinfo options.
-* -force:                                makeinfo options.
-* -help <1>:                             Invoking install-info.
-* -help:                                 makeinfo options.
 * -I DIR:                                makeinfo options.
-* -info-dir=DIR:                         Invoking install-info.
-* -info-file=FILE:                       Invoking install-info.
-* -item=TEXT:                            Invoking install-info.
-* -no-headers:                           makeinfo options.
-* -no-number-footnotes:                  makeinfo options.
-* -no-pointer-validate:                  makeinfo options.
-* -no-split:                             makeinfo options.
-* -no-validate:                          makeinfo options.
-* -no-warn:                              makeinfo options.
 * -o FILE:                               makeinfo options.
-* -output=FILE:                          makeinfo options.
 * -P DIR:                                makeinfo options.
-* -paragraph-indent=INDENT:              makeinfo options.
-* -quiet:                                Invoking install-info.
-* -reference-limit=LIMIT:                makeinfo options.
-* -remove:                               Invoking install-info.
-* -section=SEC:                          Invoking install-info.
-* -verbose:                              makeinfo options.
-* -version <1>:                          Invoking install-info.
-* -version:                              makeinfo options.
 * .cshrc initialization file:            Preparing for TeX.
 * .profile initialization file:          Preparing for TeX.
+* /L:                                    Inserting Accents.
+* /l:                                    Inserting Accents.
+* /O:                                    Inserting Accents.
+* /o:                                    Inserting Accents.
 * ?:                                     Inserting Accents.
 * @-command in nodename:                 Node Line Requirements.
 * @-command list:                        Command List.
@@ -182,7 +186,7 @@ Concept Index
 * Definition template:                   Def Cmd Template.
 * Definitions grouped together:          deffnx.
 * Description for menu, start:           Inserting.
-* Did^ot points:                         Images.
+* Dido^t points:                         Images.
 * Different cross reference commands:    Cross Reference Commands.
 * Dimension formatting:                  dmn.
 * Dimensions and image sizes:            Images.
@@ -344,8 +348,6 @@ Concept Index
 * keyboard input:                        kbd.
 * Keys, recommended names:               key.
 * Knuth, Donald:                         Printed Books.
-* L/:                                    Inserting Accents.
-* l/:                                    Inserting Accents.
 * Larger or smaller pages:               Cropmarks and Magnification.
 * Less cluttered menu entry:             Less Cluttered Menu Entry.
 * License agreement:                     Software Copying Permissions.
@@ -424,8 +426,6 @@ Concept Index
 * Nodes, catching mistakes:              Catching Mistakes.
 * Nodes, checking for badly referenced:  Running Info-Validate.
 * Not ending a sentence:                 Not Ending a Sentence.
-* O/:                                    Inserting Accents.
-* o/:                                    Inserting Accents.
 * Obtaining TeX:                         Obtaining TeX.
 * Occurrences, listing with @occur:      Using occur.
 * OE:                                    Inserting Accents.
index 1697d67..fc54512 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -44,7 +44,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::.
 
@@ -160,6 +160,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.
@@ -371,7 +372,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
@@ -519,7 +520,7 @@ or an `@ifinfo' line.
 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
+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
@@ -785,7 +786,7 @@ 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.
@@ -802,7 +803,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,7 +837,7 @@ 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.)
@@ -1181,7 +1182,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.
index e95f8a8..5eab100 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -181,8 +181,8 @@ and be put on a line by itself.
 appendix to this manual; see *Note `ifinfo' Copying Permissions: ifinfo
 Permissions, for the complete text.
 
-  The permissions text appears in an Info file *before* the first node.
-This mean that a reader does *not* see this text when reading the file
+  The permissions text appears in an Info file _before_ the first node.
+This mean that a reader does _not_ see this text when reading the file
 using Info, except when using the advanced Info command `g *'.
 
 \1f
@@ -245,7 +245,7 @@ command, but that would have been rather long!)
 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(1) (*note
-titlepage-Footnotes::) for the manual.  This helps readers keep track
+titlepage-Footnote-1::) 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 *Note `@top': makeinfo top.)
 
@@ -727,16 +727,16 @@ those just cause the raw data for the index to be accumulated.  To
 generate an index, you must include the `@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 `texindex' (*note Format/Print Hardcopy::.) to sort the
+program called `texindex' (*note Format/Print 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.
 
   Texinfo offers six different types of predefined index: the concept
 index, the function index, the variables index, the keystroke index, the
-program index, and the data type index (*note Predefined Indices::.).
+program index, and the data type index (*note Predefined Indices::).
 Each index type has a two-letter name: `cp', `fn', `vr', `ky', `pg',
 and `tp'.  You may merge indices, or put them into separate sections
-(*note Combining Indices::.); or you may define your own indices (*note
+(*note Combining Indices::); or you may define your own indices (*note
 Defining New Indices: New Indices.).
 
   The `@printindex' command takes a two-letter index name, reads the
@@ -756,13 +756,13 @@ Precede the `@unnumbered' command with an `@node' line.
      @unnumbered Variable Index
      
      @printindex vr
-
+     
      @node     Concept Index,     , Variable Index, Top
      @comment      node-name, next,       previous, up
      @unnumbered Concept Index
      
      @printindex cp
-
+     
      @summarycontents
      @contents
      @bye
@@ -799,7 +799,7 @@ actual table to appear in the manual.  To do this, you must use the
      table of contents in addition to the full table of contents.
 
      Write the `@shortcontents' command on a line by itself right
-     *before* the `@contents' command.
+     _before_ the `@contents' command.
 
   The table of contents commands automatically generate a chapter-like
 heading at the top of the first table of contents page.  Write the table
@@ -857,7 +857,7 @@ Contents.).
 
   The chapter structuring commands do not create an Info node structure,
 so normally you should put an `@node' command immediately before each
-chapter structuring command (*note Nodes::.).  The only time you are
+chapter structuring command (*note Nodes::).  The only time you are
 likely to use the chapter structuring commands without using the node
 structuring commands is if you are writing a document that contains no
 cross references and will never be transformed into Info format.
@@ -959,6 +959,7 @@ that are listed in the table of contents of a printed book or manual.
 
   Here are the four groups of chapter structuring commands:
 
+
                                                             No new pages
      Numbered       Unnumbered       Lettered and numbered  Unnumbered
      In contents    In contents          In contents        Not in contents
index 04bcd4c..8d30a06 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -73,7 +73,7 @@ is "Chapter 1", and the name of the `Up' node is "Top".
      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
-     *same* hierarchical level.  (The `Top' node contains the exception
+     _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.)
@@ -316,9 +316,9 @@ The First Node
 --------------
 
   The first node of a Texinfo file is the "Top" node, except in an
-included file (*note Include Files::.).  The Top node contains the main
+included file (*note Include Files::).  The Top node contains the main
 or master menu for the document, and a short summary of the document
-(*note Top Node Summary::.).
+(*note Top Node Summary::).
 
   The Top node (which must be named `top' or `Top') should have as its
 `Up' node the name of a node in another file, where there is a menu
@@ -433,13 +433,13 @@ Menus
 *****
 
   "Menus" contain pointers to subordinate nodes.(1) (*note
-Menus-Footnotes::) In Info, you use menus to go to such nodes.  Menus
+Menus-Footnote-1::) 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.
 
-  A node that has a menu should *not* contain much text.  If you have a
+  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.
 
@@ -902,7 +902,7 @@ differently.  *Note `@pxref': pxref.)
      file and in the printed manual.
 
   `@xref' must refer to an Info node by name.  Use `@node' to define
-the node (*note Writing a Node::.).
+the node (*note Writing a Node::).
 
   `@xref' is followed by several arguments inside braces, separated by
 commas.  Whitespace before and after these commas is ignored.
@@ -1215,7 +1215,7 @@ in a printed document, and the following in Info:
 
      Sea surges are described in *Note Hurricanes::.
 
-     *Caution:* You *must* write a period or comma immediately after an
+     *Caution:* You _must_ write a period or comma immediately after an
      `@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
@@ -1229,7 +1229,7 @@ File: texinfo.info,  Node: pxref,  Next: inforef,  Prev: ref,  Up: Cross Referen
 ========
 
   The parenthetical reference command, `@pxref', is nearly the same as
-`@xref', but you use it *only* inside parentheses and you do *not* type
+`@xref', but you use it _only_ inside parentheses and you do _not_ type
 a comma or period after the command's closing brace.  The command
 differs from `@xref' in two ways:
 
@@ -1240,7 +1240,7 @@ differs from `@xref' in two ways:
      closing colon or period.
 
   Because one type of formatting automatically inserts closing
-punctuation and the other does not, you should use `@pxref' *only*
+punctuation and the other does not, you should use `@pxref' _only_
 inside parentheses as part of another sentence.  Also, you yourself
 should not insert punctuation after the reference, as you do with
 `@xref'.
index e7fea89..f285171 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -43,7 +43,7 @@ of text refers to.  For example, metasyntactic variables are marked by
 `@var', and code by `@code'.  Since the pieces of text are labelled by
 commands that tell what kind of object they are, it is easy to change
 the way the Texinfo formatters prepare such text.  (Texinfo is an
-*intentional* formatting language rather than a *typesetting*
+_intentional_ formatting language rather than a _typesetting_
 formatting language.)
 
   For example, in a printed manual, code is usually illustrated in a
@@ -523,7 +523,7 @@ File: texinfo.info,  Node: emph & strong,  Next: Smallcaps,  Prev: Emphasis,  Up
 ---------------------------------
 
   The `@emph' and `@strong' commands are for emphasis; `@strong' is
-stronger.  In printed output, `@emph' produces *italics* and `@strong'
+stronger.  In printed output, `@emph' produces _italics_ and `@strong'
 produces *bold*.
 
   For example,
@@ -631,7 +631,7 @@ work only with TeX.
 `@end ifinfo' to define commands for Info with the same names as new
 commands for TeX.  `@definfoenclose' creates new commands for Info that
 mark text by enclosing it in strings that precede and follow the text.
-(1) (*note Customized Highlighting-Footnotes::)
+(1) (*note Customized Highlighting-Footnote-1::)
 
   Here is how to create a new @-command called `@phoo' that causes TeX
 to typeset its argument in italics and causes Info to display the
@@ -920,7 +920,7 @@ line, and neither does the `@end example' line.
 
   Do not put braces after an `@noindent' command; they are not
 necessary, since `@noindent' is a command used outside of paragraphs
-(*note Command Syntax::.).
+(*note Command Syntax::).
 
 \1f
 File: texinfo.info,  Node: Lisp Example,  Next: smallexample & smalllisp,  Prev: noindent,  Up: Quotations and Examples
@@ -938,7 +938,7 @@ File: texinfo.info,  Node: Lisp Example,  Next: smallexample & smalllisp,  Prev:
 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.(1) (*note Lisp
-Example-Footnotes::)
+Example-Footnote-1::)
 
   Mark the end of `@lisp' with `@end lisp' on a line by itself.
 
@@ -1165,6 +1165,7 @@ itemize' command.
 
   Precede each element of a list with an `@item' or `@itemx' command.
 
+
 Here is an itemized list of the different kinds of table and lists:
 
    * Itemized lists with and without bullets.
@@ -1173,6 +1174,7 @@ Here is an itemized list of the different kinds of table and lists:
 
    * Two-column tables with highlighting.
 
+
 Here is an enumerated list with the same items:
 
   1. Itemized lists with and without bullets.
@@ -1181,6 +1183,7 @@ Here is an enumerated list with the same items:
 
   3. Two-column tables with highlighting.
 
+
 And here is a two-column table with the same items and their @-commands:
 
 `@itemize'
@@ -1313,8 +1316,11 @@ This produces:
 
   2. Proximate causes.
 
+
+
   Here is an example with an argument of `3':
 
+
      @enumerate 3
      @item
      Predisposing causes.
@@ -1334,9 +1340,12 @@ This produces:
 
   5. Perpetuating causes.
 
+
+
   Here is a brief summary of the alternatives.  The summary is
 constructed using `@enumerate' with an argument of `a'.
 
+
   a. `@enumerate'
 
      Without an argument, produce a numbered list, starting with the
@@ -1389,7 +1398,7 @@ Using the `@table' Command
   Write the `@table' command at the beginning of a line and follow it
 on the same line with an argument that is a Texinfo "indicating"
 command such as `@code', `@samp', `@var', or `@kbd' (*note
-Indicating::.).  Although these commands are usually followed by
+Indicating::).  Although these commands are usually followed by
 arguments in braces, in this case you use the command name without an
 argument because `@item' will supply the argument.  This command will
 be applied to the text that goes into the first column of each item and
index 5b8991a..4bcdc71 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -179,16 +179,16 @@ your source file as necessary.
 
 produces:
 
-Key         Command                          Description                   
-C-x 2       `split-window-vertically'        Split the selected window     
-                                             into two windows, with one    
-                                             above the other.              
-C-x 3       `split-window-horizontally'      Split the selected window     
-                                             into two windows positioned   
-                                             side by side.                 
-C-Mouse-2                                    In the mode line or scroll    
-                                             bar of a window, split that   
-                                             window.                       
+Key         Command                          Description
+C-x 2       `split-window-vertically'        Split the selected window
+                                             into two windows, with one
+                                             above the other.
+C-x 3       `split-window-horizontally'      Split the selected window
+                                             into two windows positioned
+                                             side by side.
+C-Mouse-2                                    In the mode line or scroll
+                                             bar of a window, split that
+                                             window.
 
 \1f
 File: texinfo.info,  Node: Indices,  Next: Insertions,  Prev: Lists and Tables,  Up: Top
@@ -224,8 +224,8 @@ Making Index Entries
 ====================
 
   When you are making index entries, it is good practice to think of the
-different ways people may look for something.  Different people *do
-not* think of the same words when they look something up.  A helpful
+different ways people may look for something.  Different people _do
+not_ think of the same words when they look something up.  A helpful
 index will have items indexed under all the different words that people
 may use.  For example, one reader may think it obvious that the
 two-letter names for indices should be listed under "Indices,
@@ -322,7 +322,7 @@ case-sensitive, so use upper and lower case as required for them.
 font and entries for the other indices are printed in a small `@code'
 font.  You may change the way part of an entry is printed with the
 usual Texinfo commands, such as `@file' for file names and `@emph' for
-emphasis (*note Marking Text::.).
+emphasis (*note Marking Text::).
 
   The six indexing commands for predefined indices are:
 
@@ -525,7 +525,7 @@ roman font.  Thus, it parallels the `@findex' command rather than the
 
   You should define new indices within or right after the end-of-header
 line of a Texinfo file, before any `@synindex' or `@syncodeindex'
-commands (*note Header::.).
+commands (*note Header::).
 
 \1f
 File: texinfo.info,  Node: Insertions,  Next: Breaks,  Prev: Indices,  Up: Top
@@ -704,7 +704,7 @@ produces
      Spacey    example.
 
   Other possible uses of `@SPACE' have been subsumed by `@multitable'
-(*note Multi-column Tables::.).
+(*note Multi-column Tables::).
 
   Do not follow any of these commands with braces.
 
@@ -734,7 +734,7 @@ produces
   Not everyone uses this style.  Some people prefer `8.27 in.@:' or
 `8.27 inches' to `8.27@dmn{in}' in the Texinfo file.  In these cases,
 however, the formatters may insert a line break between the number and
-the dimension, so use `@w' (*note w::.).  Also, if you write a period
+the dimension, so use `@w' (*note w::).  Also, if you write a period
 after an abbreviation within a sentence, you should write `@:' after
 the period to prevent TeX from inserting extra whitespace, as shown
 here.  *Note Inserting Space::.
@@ -748,40 +748,40 @@ Inserting Accents
   Here is a table with the commands Texinfo provides for inserting
 floating accents.  The commands with non-alphabetic names do not take
 braces around their argument (which is taken to be the next character).
-(Exception: `@,' *does* take braces around its argument.)  This is so
+(Exception: `@,' _does_ take braces around its argument.)  This is so
 as to make the source as convenient to type and read as possible, since
 accented characters are very common in some languages.
 
-Command             Output  What                   
-@"o                 "o      umlaut accent          
-@'o                 'o      acute accent           
-@,{c}               c,      cedilla accent         
-@=o                 =o      macron/overbar accent  
-@^o                 ^o      circumflex accent      
-@`o                 `o      grave accent           
-@~o                 ~o      tilde accent           
-@dotaccent{o}       .o      overdot accent         
-@H{o}               ''o     long Hungarian umlaut  
-@ringaccent{o}      *o      ring accent            
-@tieaccent{oo}      [oo     tie-after accent       
-@u{o}               (o      breve accent           
-@ubaraccent{o}      o_      underbar accent        
-@udotaccent{o}      o-.     underdot accent        
-@v{o}               <o      hacek or check accent  
+Command           Output   What
+@"o               o"       umlaut accent
+@'o               o'       acute accent
+@,{c}             c,       cedilla accent
+@=o               o=       macron/overbar accent
+@^o               o^       circumflex accent
+@`o               o`       grave accent
+@~o               o~       tilde accent
+@dotaccent{o}     o.       overdot accent
+@H{o}             o''      long Hungarian umlaut
+@ringaccent{o}    o*       ring accent
+@tieaccent{oo}    oo[      tie-after accent
+@u{o}             o(       breve accent
+@ubaraccent{o}    o_       underbar accent
+@udotaccent{o}    .o       underdot accent
+@v{o}             o<       hacek or check accent
 
   This table lists the Texinfo commands for inserting other characters
 commonly used in languages other than English.
 
-@exclamdown{}       !      upside-down !      
-@questiondown{}     ?      upside-down ?      
-@aa{},@AA{}         aa,AA  A,a with circle    
-@ae{},@AE{}         ae,AE  ae,AE ligatures    
-@dotless{i}         i      dotless i          
-@dotless{j}         j      dotless j          
-@l{},@L{}           l/,L/  suppressed-L,l     
-@o{},@O{}           o/,O/  O,o with slash     
-@oe{},@OE{}         oe,OE  OE,oe ligatures    
-@ss{}               ss     es-zet or sharp S  
+@exclamdown{}     !       upside-down !
+@questiondown{}   ?       upside-down ?
+@aa{},@AA{}       aa,AA   A,a with circle
+@ae{},@AE{}       ae,AE   ae,AE ligatures
+@dotless{i}       i       dotless i
+@dotless{j}       j       dotless j
+@l{},@L{}         /l,/L   suppressed-L,l
+@o{},@O{}         /o,/O   O,o with slash
+@oe{},@OE{}       oe,OE   OE,oe ligatures
+@ss{}             ss      es-zet or sharp S
 
 \1f
 File: texinfo.info,  Node: Dots Bullets,  Next: TeX and copyright,  Prev: Inserting Accents,  Up: Insertions
@@ -923,7 +923,7 @@ This produces the following in Info:
   Thus, the `@math' command has no effect on the Info output.
 
   For complex mathematical expressions, you can also use TeX directly
-(*note Raw Formatter Commands::.).  When you use TeX directly, remember
+(*note Raw Formatter Commands::).  When you use TeX directly, remember
 to write the mathematical expression between one or two `$'
 (dollar-signs) as appropriate.
 
@@ -1141,7 +1141,7 @@ name.
 
   You can use the `@point{}' command to show the location of point in
 the text in the buffer.  (The symbol for point, of course, is not part
-of the text in the buffer; it indicates the place *between* two
+of the text in the buffer; it indicates the place _between_ two
 characters where point is located.)
 
   The `@point{}' command is displayed as `-!-' in Info and as a small
@@ -1219,7 +1219,7 @@ mm
      millimeter (10mm = 1cm)
 
 dd
-     did^ot point (1157dd = 1238pt)
+     dido^t point (1157dd = 1238pt)
 
 cc
      cicero (1cc = 12dd)
@@ -1358,8 +1358,8 @@ wish to help TeX out.  Texinfo supports two commands for this:
      Insert a discretionary hyphen, i.e., a place where TeX can (but
      does not have to) hyphenate.  This is especially useful when you
      notice an overfull hbox is due to TeX missing a hyphenation (*note
-     Overfull hboxes::.).  TeX will not insert any hyphenation points
-     in a word containing `@-'.
+     Overfull hboxes::).  TeX will not insert any hyphenation points in
+     a word containing `@-'.
 
 `@hyphenation{HY-PHEN-A-TED WORDS}'
      Tell TeX how to hyphenate HY-PHEN-A-TED WORDS.  As shown, you put
index 4ae5118..10a127a 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -162,7 +162,7 @@ For example,
 
 produces
 
-      - Command: forward-word COUNT
+      - Command: forward-word count
           This function moves point forward COUNT words (or backward if
           COUNT is negative). ...
 
@@ -205,7 +205,7 @@ Thus,
 
 produces
 
-      - Function: buffer-end FLAG
+      - Function: buffer-end flag
           This function returns `(point-min)' if FLAG is less than 1,
           `(point-max)' otherwise.  ...
 
@@ -806,7 +806,7 @@ and it is followed, on the same line, by the parameter list.
   Here is a definition from *Note Calling Functions: (lispref)Calling
 Functions.
 
-      - Function: apply FUNCTION &rest ARGUMENTS
+      - Function: apply function &rest arguments
           `apply' calls FUNCTION with ARGUMENTS, just like `funcall'
           but with one difference: the last of ARGUMENTS is a list of
           arguments to give to FUNCTION, rather than a single argument.
@@ -881,7 +881,7 @@ Footnotes
 *********
 
   A "footnote" is for a reference that documents or elucidates the
-primary text.(1) (*note Footnotes-Footnotes::)
+primary text.(1) (*note Footnotes-Footnote-1::)
 
 * Menu:
 
@@ -915,7 +915,7 @@ 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(1) (*note
-Footnote Commands-Footnotes::); in the Texinfo source, it looks like
+Footnote Commands-Footnote-1::); in the Texinfo source, it looks like
 this:
 
      ...a sample footnote@footnote{Here is the sample
@@ -1071,7 +1071,7 @@ File: texinfo.info,  Node: Conditional Not Commands,  Next: Raw Formatter Comman
 Conditional Not Commands
 ========================
 
-  You can specify text to be included in any output format *other* than
+  You can specify text to be included in any output format _other_ than
 some given one with the `@ifnot...' commands:
      @ifnothtml ... @end ifnothtml
      @ifnotinfo ... @end ifnotinfo
@@ -1157,7 +1157,7 @@ File: texinfo.info,  Node: ifset ifclear,  Next: value,  Prev: set clear value,
 
   When a FLAG is set, the Texinfo formatting commands format text
 between subsequent pairs of `@ifset FLAG' and `@end ifset' commands.
-When the FLAG is cleared, the Texinfo formatting commands do *not*
+When the FLAG is cleared, the Texinfo formatting commands do _not_
 format the text.
 
   Use the `@set FLAG' command to turn on, or "set", a FLAG; a "flag"
@@ -1197,7 +1197,7 @@ like this:
 
 Write the command on a line of its own.
 
-  When FLAG is cleared, the Texinfo formatting commands do *not* format
+  When FLAG is cleared, the Texinfo formatting commands do _not_ format
 the text between `@ifset FLAG' and `@end ifset'; that text is ignored
 and does not appear in either printed or Info output.
 
@@ -1212,7 +1212,7 @@ dig up shrubs without hurting them.  Remember to replant promptly ...".
   If a flag is cleared with an `@clear FLAG' command, then the
 formatting commands format text between subsequent pairs of `@ifclear'
 and `@end ifclear' commands.  But if the flag is set with `@set FLAG',
-then the formatting commands do *not* format text between an `@ifclear'
+then the formatting commands do _not_ format text between an `@ifclear'
 and an `@end ifclear' command; rather, they ignore that text.  An
 `@ifclear' command looks like this:
 
@@ -1360,7 +1360,7 @@ sequence of text and/or existing commands (including other macros).  The
 macro can have any number of "parameters"--text you supply each time
 you use the macro.  (This has nothing to do with the `@defmac' command,
 which is for documenting macros in the subject of the manual; *note Def
-Cmd Template::..)
+Cmd Template::.)
 
 * Menu:
 
index 1f59eb6..79ed349 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -169,7 +169,7 @@ you can use `??' as shell wildcards and give the command in this form:
 
 This command will run `texindex' on all the unsorted index files,
 including any that you have defined yourself using `@defindex' or
-`@defcodeindex'.  (You may execute `texindex foo.??'  even if there are
+`@defcodeindex'.  (You may execute `texindex foo.??' even if there are
 similarly named files with two letter extensions that are not index
 files, such as `foo.el'.  The `texindex' command reports but otherwise
 ignores such files.)
@@ -177,7 +177,7 @@ ignores such files.)
   For each file specified, `texindex' generates a sorted index file
 whose name is made by appending `s' to the input file name.  The
 `@printindex' command knows to look for a file of that name (*note
-Printing Indices & Menus::.).  `texindex' does not alter the raw index
+Printing Indices & Menus::).  `texindex' does not alter the raw index
 output file.
 
   After you have sorted the indices, you need to rerun the `tex'
@@ -454,7 +454,7 @@ and TeX will find it there.
   Also, you should install `epsf.tex' in the same place as
 `texinfo.tex', if it is not already installed from another
 distribution.  This file is needed to support the `@image' command
-(*note Images::.).
+(*note Images::).
 
   Optionally, you may create an additional `texinfo.cnf', and install
 it as well.  This file is read by TeX at the `@setfilename' command
@@ -462,7 +462,7 @@ it as well.  This file is read by TeX at the `@setfilename' command
 like there according to local site-wide conventions, and they will be
 read by TeX when processing any Texinfo document.  For example, if
 `texinfo.cnf' contains the a single line `@afourpaper' (*note A4
-Paper::.), then all Texinfo documents will be processed with that page
+Paper::), then all Texinfo documents will be processed with that page
 size in effect.  If you have nothing to put in `texinfo.cnf', you do
 not need to create it.
 
@@ -555,7 +555,7 @@ but it came to be called the `@smallbook' command by comparison to the
   If you write the `@smallbook' command between the start-of-header and
 end-of-header lines, the Texinfo mode TeX region formatting command,
 `texinfo-tex-region', will format the region in "small" book size
-(*note Start of Header::.).
+(*note Start of Header::).
 
   The Free Software Foundation distributes printed copies of `The GNU
 Emacs Manual' and other manuals in the "small" book size.  *Note
@@ -565,7 +565,7 @@ a smaller manual.
 
   Alternatively, to avoid embedding this physical paper size in your
 document, use `texi2dvi' to format your document (*note Format with
-texi2dvi::.), and supply `-t @smallbook' as an argument.  Then other
+texi2dvi::), and supply `-t @smallbook' as an argument.  Then other
 people do not have to change the document source file to format it
 differently.
 
@@ -594,7 +594,7 @@ the Texinfo file, before the title page:
 
   Alternatively, to avoid embedding this physical paper size in your
 document, use `texi2dvi' to format your document (*note Format with
-texi2dvi::.), and supply `-t @afourpaper' as an argument.  Then other
+texi2dvi::), and supply `-t @afourpaper' as an argument.  Then other
 people do not have to change the document source file to format it
 differently.
 
@@ -630,9 +630,9 @@ spirit of adventure.  You may have to redefine the command in the
   You can attempt to direct TeX to typeset pages larger or smaller than
 usual with the `\mag' TeX command.  Everything that is typeset is
 scaled proportionally larger or smaller.  (`\mag' stands for
-"magnification".)  This is *not* a Texinfo @-command, but is a plain
+"magnification".)  This is _not_ a Texinfo @-command, but is a plain
 TeX command that is prefixed with a backslash.  You have to write this
-command between `@tex' and `@end tex' (*note Raw Formatter Commands::.).
+command between `@tex' and `@end tex' (*note Raw Formatter Commands::).
 
   Follow the `\mag' command with an `=' and then a number that is 1000
 times the magnification you desire.  For example, to print pages at 1.2
@@ -748,7 +748,7 @@ and would also set the fill column to 70.
 
 `-D VAR'
      Cause the variable VAR to be defined.  This is equivalent to `@set
-     VAR' in the Texinfo file (*note set clear value::.).
+     VAR' in the Texinfo file (*note set clear value::).
 
 `--error-limit=LIMIT'
      Set the maximum number of errors that `makeinfo' will report
@@ -767,7 +767,7 @@ and would also set the fill column to 70.
      Set the footnote style to STYLE, either `end' for the end node
      style (the default) or `separate' for the separate node style.
      The value set by this option overrides the value set in a Texinfo
-     file by an `@footnotestyle' command (*note Footnotes::.).  When the
+     file by an `@footnotestyle' command (*note Footnotes::).  When the
      footnote style is `separate', `makeinfo' makes a new node
      containing the footnotes found in the current node.  When the
      footnote style is `end', `makeinfo' places the footnote references
@@ -806,7 +806,7 @@ and would also set the fill column to 70.
      Pointer Validation::.
 
 `--no-warn'
-     Suppress warning messages (but *not* error messages).  You might
+     Suppress warning messages (but _not_ error messages).  You might
      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.
@@ -820,8 +820,8 @@ and would also set the fill column to 70.
 `-o FILE'
      Specify that the output should be directed to FILE and not to the
      file name specified in the `@setfilename' command found in the
-     Texinfo source (*note setfilename::.).  If FILE is `-', output
-     goes to standard output and `--no-split' is implied.
+     Texinfo source (*note setfilename::).  If FILE is `-', output goes
+     to standard output and `--no-split' is implied.
 
 `-P DIR'
      Prepend `dir' to the directory search list for `@include'.  See
@@ -830,7 +830,7 @@ and would also set the fill column to 70.
 `--paragraph-indent=INDENT'
      Set the paragraph indentation style to INDENT.  The value set by
      this option overrides the value set in a Texinfo file by an
-     `@paragraphindent' command (*note paragraphindent::.).  The value
+     `@paragraphindent' command (*note paragraphindent::).  The value
      of INDENT is interpreted as follows:
 
     `asis'
@@ -850,7 +850,7 @@ and would also set the fill column to 70.
 
 `-U VAR'
      Cause VAR to be undefined.  This is equivalent to `@clear VAR' in
-     the Texinfo file (*note set clear value::.).
+     the Texinfo file (*note set clear value::).
 
 `--verbose'
      Cause `makeinfo' to display messages saying what it is doing.
@@ -987,7 +987,7 @@ provide you with some error checking, and other functions can provide
 you with further help in finding formatting errors.  These procedures
 are described in an appendix; see *Note Catching Mistakes::.  However,
 the `makeinfo' program is often faster and provides better error
-checking (*note makeinfo in Emacs::.).
+checking (*note makeinfo in Emacs::).
 
 \1f
 File: texinfo.info,  Node: Batch Formatting,  Next: Tag and Split Files,  Prev: texinfo-format commands,  Up: Create an Info File
index d344328..8448388 100644 (file)
@@ -1,5 +1,5 @@
-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
@@ -160,6 +160,7 @@ File: texinfo.info,  Node: Command List,  Next: Tips,  Prev: Install an Info Fil
 brackets, [ ], indicate optional arguments; an ellipsis, `...',
 indicates repeated text.
 
+
 `@WHITESPACE'
      An `@' followed by a space, tab, or newline produces a normal,
      stretchable, interword space.  *Note Multiple Spaces::.
@@ -172,7 +173,7 @@ indicates repeated text.
 `@"'
 `@''
      Generate an umlaut or acute accent, respectively, over the next
-     character, as in "o and 'o.  *Note Inserting Accents::.
+     character, as in o" and o'.  *Note Inserting Accents::.
 
 `@*'
      Force a line break. Do not end a paragraph that uses `@*' with an
@@ -198,7 +199,7 @@ indicates repeated text.
      *Note Not Ending a Sentence::.
 
 `@='
-     Generate a macro (bar) accent over the next character, as in =o.
+     Generate a macro (bar) accent over the next character, as in o=.
      *Note Inserting Accents::.
 
 `@?'
@@ -213,7 +214,7 @@ indicates repeated text.
 `@^'
 `@`'
      Generate a circumflex (hat) or grave accent, respectively, over
-     the next character, as in ^o.  *Note Inserting Accents::.
+     the next character, as in o^.  *Note Inserting Accents::.
 
 `@{'
      Stands for a left brace, `{'.  *Note Inserting @ and braces:
@@ -224,7 +225,7 @@ indicates repeated text.
      *Note Inserting @ and braces: Braces Atsigns.
 
 `@='
-     Generate a tilde accent over the next character, as in ~N.  *Note
+     Generate a tilde accent over the next character, as in N~.  *Note
      Inserting Accents::.
 
 `@AA{}'
@@ -504,7 +505,7 @@ indicates repeated text.
      space before DIMENSION.  No effect in Info.  *Note `@dmn': dmn.
 
 `@dotaccent{C}'
-     Generate a dot accent over the character C, as in .oo.  *Note
+     Generate a dot accent over the character C, as in oo..  *Note
      Inserting Accents::.
 
 `@dots{}'
@@ -514,7 +515,7 @@ indicates repeated text.
      Indicate an electronic mail address.  *Note `@email': email.
 
 `@emph{TEXT}'
-     Highlight TEXT; text is displayed in *italics* in printed output,
+     Highlight TEXT; text is displayed in _italics_ in printed output,
      and surrounded by asterisks in Info.  *Note Emphasizing Text:
      Emphasis.
 
@@ -613,7 +614,7 @@ indicates repeated text.
      `@end group'.  Not relevant to Info.  *Note `@group': group.
 
 `@H{C}'
-     Generate the long Hungarian umlaut accent over C, as in ''o.
+     Generate the long Hungarian umlaut accent over C, as in o''.
 
 `@heading TITLE'
      Print an unnumbered section-like heading in the text, but not in
@@ -725,7 +726,7 @@ indicates repeated text.
 `@L{}'
 `@l{}'
      Generate the uppercase and lowercase Polish suppressed-L letters,
-     respectively: L/, l/.
+     respectively: /L, /l.
 
 `@lisp'
      Begin an example of Lisp code.  Indent text, do not fill, and
@@ -779,7 +780,7 @@ indicates repeated text.
 `@O{}'
 `@o{}'
      Generate the uppercase and lowercase O-with-slash letters,
-     respectively: O/, o/.
+     respectively: /O, /o.
 
 `@oddfooting [LEFT] @| [CENTER] @| [RIGHT]'
 `@oddheading [LEFT] @| [CENTER] @| [RIGHT]'
@@ -861,7 +862,7 @@ indicates repeated text.
      glyph: `=>'.  *Note `@result': result.
 
 `@ringaccent{C}'
-     Generate a ring accent over the next character, as in *o.  *Note
+     Generate a ring accent over the next character, as in o*.  *Note
      Inserting Accents::.
 
 `@samp{TEXT}'
@@ -1020,7 +1021,7 @@ indicates repeated text.
 
 `@tieaccent{CC}'
      Generate a tie-after accent over the next two characters CC, as in
-     `[oo'.  *Note Inserting Accents::.
+     `oo['.  *Note Inserting Accents::.
 
 `@tindex ENTRY'
      Add ENTRY to the index of data types.  *Note Defining the Entries
@@ -1063,7 +1064,7 @@ indicates repeated text.
 `@ubaraccent{C}'
 `@udotaccent{C}'
      Generate a breve, underbar, or underdot accent, respectively, over
-     or under the character C, as in (o, o_, o-..  *Note Inserting
+     or under the character C, as in o(, o_, .o.  *Note Inserting
      Accents::.
 
 `@unnumbered TITLE'
@@ -1101,7 +1102,7 @@ indicates repeated text.
      Web.  *Note `@url': url.
 
 `@v{C}'
-     Generate check accent over the character C, as in <o.  *Note
+     Generate check accent over the character C, as in o<.  *Note
      Inserting Accents::.
 
 `@value{FLAG}'
index 8eceab5..3f20024 100644 (file)
@@ -9,259 +9,256 @@ END-INFO-DIR-ENTRY
 \1f
 Indirect:
 xemacs-faq.info-1: 221
-xemacs-faq.info-2: 48025
-xemacs-faq.info-3: 95739
-xemacs-faq.info-4: 145583
-xemacs-faq.info-5: 195169
+xemacs-faq.info-2: 49943
+xemacs-faq.info-3: 99763
+xemacs-faq.info-4: 149758
+xemacs-faq.info-5: 199344
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f221
-Node: Introduction\7f16805
-Node: Q1.0.1\7f20286
-Node: Q1.0.2\7f20822
-Node: Q1.0.3\7f21317
-Node: Q1.0.4\7f21579
-Node: Q1.0.5\7f23029
-Node: Q1.0.6\7f23718
-Node: Q1.0.7\7f24724
-Node: Q1.0.8\7f24973
-Node: Q1.0.9\7f25188
-Node: Q1.0.10\7f25466
-Node: Q1.0.11\7f25709
-Node: Q1.0.12\7f26166
-Node: Q1.0.13\7f26534
-Node: Q1.0.14\7f26769
-Node: Q1.1.1\7f27243
-Node: Q1.1.2\7f28320
-Node: Q1.1.3\7f28713
-Node: Q1.2.1\7f29664
-Node: Q1.2.2\7f30718
-Node: Q1.2.3\7f31151
-Node: Q1.3.1\7f32102
-Node: Q1.3.2\7f36020
-Node: Q1.3.3\7f36575
-Node: Q1.3.4\7f36817
-Node: Q1.3.5\7f37581
-Node: Q1.3.6\7f39996
-Node: Q1.3.7\7f41491
-Node: Q1.4.1\7f42426
-Node: Q1.4.2\7f43288
-Node: Q1.4.3\7f43629
-Node: Q1.4.4\7f44048
-Node: Q1.4.5\7f45588
-Node: Q1.4.6\7f45892
-Node: Q1.4.7\7f46900
-Node: Installation\7f48025
-Node: Q2.0.1\7f50491
-Node: Q2.0.2\7f51364
-Node: Q2.0.3\7f58567
-Node: Q2.0.4\7f59865
-Node: Q2.0.5\7f60457
-Node: Q2.0.6\7f60825
-Node: Q2.0.7\7f61206
-Node: Q2.0.8\7f61587
-Node: Q2.0.9\7f63165
-Node: Q2.0.10\7f64603
-Node: Q2.0.11\7f65447
-Node: Q2.0.12\7f66388
-Node: Q2.0.13\7f67911
-Node: Q2.0.14\7f68569
-Node: Q2.1.1\7f69137
-Node: Q2.1.2\7f71879
-Node: Q2.1.3\7f73056
-Node: Q2.1.4\7f74349
-Node: Q2.1.5\7f75148
-Node: Q2.1.6\7f75510
-Node: Q2.1.7\7f75987
-Node: Q2.1.8\7f76340
-Node: Q2.1.9\7f77856
-Node: Q2.1.10\7f78278
-Node: Q2.1.11\7f79035
-Node: Q2.1.12\7f79900
-Node: Q2.1.13\7f80855
-Node: Q2.1.14\7f81886
-Node: Q2.1.15\7f82997
-Node: Q2.1.16\7f88954
-Node: Q2.1.17\7f89648
-Node: Q2.1.18\7f90245
-Node: Q2.1.19\7f92042
-Node: Q2.1.20\7f92572
-Node: Q2.1.21\7f92954
-Node: Q2.1.22\7f93244
-Node: Q2.1.23\7f94541
-Node: Q2.1.24\7f95209
-Node: Customization\7f95739
-Node: Q3.0.1\7f100633
-Node: Q3.0.2\7f101339
-Node: Q3.0.3\7f101903
-Node: Q3.0.4\7f102320
-Node: Q3.0.5\7f103153
-Node: Q3.0.6\7f103934
-Node: Q3.0.7\7f104514
-Node: Q3.0.8\7f105178
-Node: Q3.0.9\7f106024
-Node: Q3.1.1\7f106585
-Node: Q3.1.2\7f107322
-Node: Q3.1.3\7f107753
-Node: Q3.1.4\7f108338
-Node: Q3.1.5\7f108874
-Node: Q3.1.6\7f109258
-Node: Q3.1.7\7f109939
-Node: Q3.1.8\7f112163
-Node: Q3.2.1\7f112705
-Node: Q3.2.2\7f114113
-Node: Q3.2.3\7f114912
-Node: Q3.2.4\7f115514
-Node: Q3.2.5\7f116548
-Node: Q3.2.6\7f117015
-Node: Q3.3.1\7f117977
-Node: Q3.3.2\7f118370
-Node: Q3.3.3\7f119001
-Node: Q3.3.4\7f119382
-Node: Q3.3.5\7f120476
-Node: Q3.4.1\7f121970
-Node: Q3.4.2\7f122613
-Node: Q3.5.1\7f123125
-Node: Q3.5.2\7f124580
-Node: Q3.5.3\7f124998
-Node: Q3.5.4\7f125839
-Node: Q3.5.5\7f126671
-Node: Q3.5.6\7f127811
-Node: Q3.5.7\7f128801
-Node: Q3.5.8\7f130153
-Node: Q3.5.9\7f130900
-Node: Q3.5.10\7f131680
-Node: Q3.5.11\7f132316
-Node: Q3.6.1\7f132869
-Node: Q3.6.2\7f133609
-Node: Q3.6.3\7f134037
-Node: Q3.7.1\7f134537
-Node: Q3.7.2\7f135425
-Node: Q3.7.3\7f136084
-Node: Q3.7.4\7f136506
-Node: Q3.7.5\7f136849
-Node: Q3.7.6\7f137317
-Node: Q3.7.7\7f138032
-Node: Q3.7.8\7f139052
-Node: Q3.8.1\7f139471
-Node: Q3.8.2\7f139931
-Node: Q3.8.3\7f140394
-Node: Q3.8.4\7f141000
-Node: Q3.8.5\7f141719
-Node: Q3.9.1\7f142504
-Node: Q3.9.2\7f143444
-Node: Q3.9.3\7f144042
-Node: Q3.9.4\7f144704
-Node: Q3.10.1\7f145583
-Node: Q3.10.2\7f146401
-Node: Q3.10.3\7f147182
-Node: Q3.10.4\7f147910
-Node: Q3.10.5\7f148293
-Node: Subsystems\7f149303
-Node: Q4.0.1\7f151788
-Node: Q4.0.2\7f152313
-Node: Q4.0.3\7f152871
-Node: Q4.0.4\7f153192
-Node: Q4.0.5\7f153434
-Node: Q4.0.6\7f153665
-Node: Q4.0.7\7f154246
-Node: Q4.0.8\7f154571
-Node: Q4.0.9\7f155798
-Node: Q4.0.10\7f157836
-Node: Q4.0.11\7f158290
-Node: Q4.0.12\7f159140
-Node: Q4.1.1\7f160113
-Node: Q4.1.2\7f160516
-Node: Q4.1.3\7f160843
-Node: Q4.2.1\7f161152
-Node: Q4.2.2\7f161782
-Node: Q4.2.3\7f162022
-Node: Q4.2.4\7f162566
-Node: Q4.3.1\7f163219
-Node: Q4.3.2\7f163803
-Node: Q4.3.3\7f165284
-Node: Q4.3.4\7f165556
-Node: Q4.3.5\7f166233
-Node: Q4.4.1\7f166861
-Node: Q4.4.2\7f168347
-Node: Q4.5.1\7f169551
-Node: Q4.6.1\7f170320
-Node: Q4.7.1\7f175580
-Node: Q4.7.2\7f176535
-Node: Q4.7.3\7f176832
-Node: Q4.7.4\7f177178
-Node: Q4.7.5\7f178062
-Node: Q4.7.6\7f179704
-Node: Miscellaneous\7f179993
-Node: Q5.0.1\7f183415
-Node: Q5.0.2\7f184149
-Node: Q5.0.3\7f185003
-Node: Q5.0.4\7f185705
-Node: Q5.0.5\7f186645
-Node: Q5.0.6\7f188625
-Node: Q5.0.7\7f189282
-Node: Q5.0.8\7f189887
-Node: Q5.0.9\7f190406
-Node: Q5.0.10\7f190920
-Node: Q5.0.11\7f191168
-Node: Q5.0.12\7f191729
-Node: Q5.0.13\7f192646
-Node: Q5.0.14\7f193330
-Node: Q5.0.15\7f194095
-Node: Q5.0.16\7f194392
-Node: Q5.0.17\7f194904
-Node: Q5.0.18\7f195169
-Node: Q5.0.19\7f195695
-Node: Q5.0.20\7f196120
-Node: Q5.1.1\7f197035
-Node: Q5.1.2\7f199104
-Node: Q5.1.3\7f199840
-Node: Q5.1.4\7f203234
-Node: Q5.1.5\7f203769
-Node: Q5.1.6\7f205863
-Node: Q5.1.7\7f207252
-Node: Q5.1.8\7f208853
-Node: Q5.1.9\7f209405
-Node: Q5.1.10\7f210290
-Node: Q5.1.11\7f211421
-Node: Q5.2.1\7f211970
-Node: Q5.2.2\7f212541
-Node: Q5.2.3\7f212958
-Node: Q5.2.4\7f213193
-Node: Q5.3.1\7f214103
-Node: Q5.3.2\7f215324
-Node: Q5.3.3\7f216100
-Node: Q5.3.4\7f216584
-Node: Q5.3.5\7f217251
-Node: Q5.3.6\7f218120
-Node: Q5.3.7\7f218365
-Node: Q5.3.8\7f220555
-Node: Q5.3.9\7f220802
-Node: Q5.3.10\7f221755
-Node: Q5.3.11\7f223839
-Node: Q5.3.12\7f225388
-Node: MS Windows\7f226662
-Node: Q6.0.1\7f227993
-Node: Q6.0.2\7f228740
-Node: Q6.0.3\7f229205
-Node: Q6.0.4\7f229485
-Node: Q6.1.1\7f231765
-Node: Q6.1.2\7f232636
-Node: Q6.1.3\7f232917
-Node: Q6.1.4\7f233199
-Node: Q6.1.5\7f233577
-Node: Q6.1.6\7f234408
-Node: Q6.2.1\7f234992
-Node: Q6.2.2\7f235893
-Node: Q6.2.3\7f236294
-Node: Q6.3.1\7f236583
-Node: Q6.3.2\7f237677
-Node: Q6.3.3\7f240855
-Node: Current Events\7f241109
-Node: Q7.0.1\7f241763
-Node: Q7.0.2\7f242402
-Node: Q7.0.3\7f243476
-Node: Q7.0.4\7f243704
+Node: Introduction\7f16577
+Node: Q1.0.1\7f19981
+Node: Q1.0.2\7f20517
+Node: Q1.0.3\7f21012
+Node: Q1.0.4\7f21274
+Node: Q1.0.5\7f22724
+Node: Q1.0.6\7f23413
+Node: Q1.0.7\7f24419
+Node: Q1.0.8\7f24668
+Node: Q1.0.9\7f24883
+Node: Q1.0.10\7f25161
+Node: Q1.0.11\7f25404
+Node: Q1.0.12\7f25839
+Node: Q1.0.13\7f26207
+Node: Q1.0.14\7f26456
+Node: Q1.1.1\7f26930
+Node: Q1.1.2\7f28007
+Node: Q1.1.3\7f28400
+Node: Q1.2.1\7f29351
+Node: Q1.2.2\7f30405
+Node: Q1.2.3\7f30838
+Node: Q1.3.1\7f31922
+Node: Q1.3.2\7f35840
+Node: Q1.3.3\7f36395
+Node: Q1.3.4\7f36637
+Node: Q1.3.5\7f37401
+Node: Q1.3.6\7f39816
+Node: Q1.3.7\7f41311
+Node: Q1.4.1\7f42246
+Node: Q1.4.2\7f43108
+Node: Q1.4.3\7f43449
+Node: Q1.4.4\7f43868
+Node: Q1.4.5\7f45408
+Node: Q1.4.6\7f45712
+Node: Installation\7f46705
+Node: Q2.0.1\7f49070
+Node: Q2.0.2\7f49943
+Node: Q2.0.3\7f57146
+Node: Q2.0.4\7f58444
+Node: Q2.0.5\7f59036
+Node: Q2.0.6\7f59404
+Node: Q2.0.7\7f59785
+Node: Q2.0.8\7f60166
+Node: Q2.0.9\7f61744
+Node: Q2.0.10\7f63182
+Node: Q2.0.11\7f64026
+Node: Q2.0.12\7f64967
+Node: Q2.1.1\7f66489
+Node: Q2.1.2\7f69231
+Node: Q2.1.3\7f70408
+Node: Q2.1.4\7f71701
+Node: Q2.1.5\7f72500
+Node: Q2.1.6\7f72862
+Node: Q2.1.7\7f73339
+Node: Q2.1.8\7f73692
+Node: Q2.1.9\7f75208
+Node: Q2.1.10\7f75630
+Node: Q2.1.11\7f76387
+Node: Q2.1.12\7f77252
+Node: Q2.1.13\7f78207
+Node: Q2.1.14\7f79238
+Node: Q2.1.15\7f80349
+Node: Q2.1.16\7f87380
+Node: Q2.1.17\7f88074
+Node: Q2.1.18\7f88671
+Node: Q2.1.19\7f88798
+Node: Q2.1.20\7f89328
+Node: Q2.1.21\7f89710
+Node: Q2.1.22\7f89903
+Node: Q2.1.23\7f91200
+Node: Q2.1.24\7f91868
+Node: Customization\7f92398
+Node: Q3.0.1\7f97243
+Node: Q3.0.2\7f97949
+Node: Q3.0.3\7f98513
+Node: Q3.0.4\7f98930
+Node: Q3.0.5\7f99763
+Node: Q3.0.6\7f100544
+Node: Q3.0.7\7f101124
+Node: Q3.0.8\7f101788
+Node: Q3.0.9\7f102634
+Node: Q3.1.1\7f103195
+Node: Q3.1.2\7f103932
+Node: Q3.1.3\7f104363
+Node: Q3.1.4\7f104552
+Node: Q3.1.5\7f104741
+Node: Q3.1.6\7f105125
+Node: Q3.1.7\7f105806
+Node: Q3.1.8\7f108030
+Node: Q3.2.1\7f108572
+Node: Q3.2.2\7f109980
+Node: Q3.2.3\7f110779
+Node: Q3.2.4\7f111381
+Node: Q3.2.5\7f112415
+Node: Q3.2.6\7f112882
+Node: Q3.3.1\7f113844
+Node: Q3.3.2\7f114237
+Node: Q3.3.3\7f114868
+Node: Q3.3.4\7f115249
+Node: Q3.3.5\7f116343
+Node: Q3.4.1\7f117837
+Node: Q3.4.2\7f118480
+Node: Q3.5.1\7f118992
+Node: Q3.5.2\7f120447
+Node: Q3.5.3\7f120865
+Node: Q3.5.4\7f121706
+Node: Q3.5.5\7f122538
+Node: Q3.5.6\7f123678
+Node: Q3.5.7\7f124668
+Node: Q3.5.8\7f126020
+Node: Q3.5.9\7f126767
+Node: Q3.5.10\7f127547
+Node: Q3.5.11\7f128183
+Node: Q3.6.1\7f128736
+Node: Q3.6.2\7f129476
+Node: Q3.6.3\7f129904
+Node: Q3.7.1\7f130404
+Node: Q3.7.2\7f131292
+Node: Q3.7.3\7f131951
+Node: Q3.7.4\7f132373
+Node: Q3.7.5\7f132716
+Node: Q3.7.6\7f133184
+Node: Q3.7.7\7f133899
+Node: Q3.7.8\7f134919
+Node: Q3.8.1\7f135338
+Node: Q3.8.2\7f135798
+Node: Q3.8.3\7f136261
+Node: Q3.8.4\7f136867
+Node: Q3.8.5\7f137586
+Node: Q3.9.1\7f138371
+Node: Q3.9.2\7f139311
+Node: Q3.9.3\7f139909
+Node: Q3.9.4\7f140571
+Node: Q3.10.1\7f141450
+Node: Q3.10.2\7f142268
+Node: Q3.10.3\7f143273
+Node: Q3.10.4\7f144001
+Node: Q3.10.5\7f144384
+Node: Subsystems\7f145394
+Node: Q4.0.1\7f147881
+Node: Q4.0.2\7f148406
+Node: Q4.0.3\7f148964
+Node: Q4.0.4\7f149285
+Node: Q4.0.5\7f149527
+Node: Q4.0.6\7f149758
+Node: Q4.0.7\7f150339
+Node: Q4.0.8\7f150664
+Node: Q4.0.9\7f151891
+Node: Q4.0.10\7f153929
+Node: Q4.0.11\7f154383
+Node: Q4.0.12\7f155233
+Node: Q4.1.1\7f156206
+Node: Q4.1.2\7f156609
+Node: Q4.1.3\7f156936
+Node: Q4.2.1\7f157245
+Node: Q4.2.2\7f157875
+Node: Q4.2.3\7f158115
+Node: Q4.2.4\7f158659
+Node: Q4.3.1\7f159312
+Node: Q4.3.2\7f159896
+Node: Q4.3.3\7f161377
+Node: Q4.3.4\7f161649
+Node: Q4.3.5\7f162326
+Node: Q4.4.1\7f162954
+Node: Q4.4.2\7f164440
+Node: Q4.5.1\7f165644
+Node: Q4.6.1\7f166413
+Node: Q4.7.1\7f171673
+Node: Q4.7.2\7f172628
+Node: Q4.7.3\7f172925
+Node: Q4.7.4\7f173111
+Node: Q4.7.5\7f173995
+Node: Q4.7.6\7f175637
+Node: Miscellaneous\7f175926
+Node: Q5.0.1\7f179345
+Node: Q5.0.2\7f180079
+Node: Q5.0.3\7f180933
+Node: Q5.0.4\7f181635
+Node: Q5.0.5\7f182575
+Node: Q5.0.6\7f184555
+Node: Q5.0.7\7f185212
+Node: Q5.0.8\7f185817
+Node: Q5.0.9\7f186336
+Node: Q5.0.10\7f186850
+Node: Q5.0.11\7f187098
+Node: Q5.0.12\7f187636
+Node: Q5.0.13\7f188553
+Node: Q5.0.14\7f189237
+Node: Q5.0.15\7f190002
+Node: Q5.0.16\7f190299
+Node: Q5.0.17\7f190811
+Node: Q5.0.18\7f191076
+Node: Q5.0.19\7f191270
+Node: Q5.0.20\7f191695
+Node: Q5.1.1\7f192610
+Node: Q5.1.2\7f194679
+Node: Q5.1.3\7f195415
+Node: Q5.1.4\7f198809
+Node: Q5.1.5\7f199344
+Node: Q5.1.6\7f201438
+Node: Q5.1.7\7f202827
+Node: Q5.1.8\7f204428
+Node: Q5.1.9\7f204980
+Node: Q5.1.10\7f205865
+Node: Q5.1.11\7f206996
+Node: Q5.2.1\7f207545
+Node: Q5.2.2\7f208116
+Node: Q5.2.3\7f208533
+Node: Q5.2.4\7f208768
+Node: Q5.3.1\7f209678
+Node: Q5.3.2\7f210899
+Node: Q5.3.3\7f211675
+Node: Q5.3.4\7f212159
+Node: Q5.3.5\7f212826
+Node: Q5.3.6\7f213695
+Node: Q5.3.7\7f213940
+Node: Q5.3.8\7f216130
+Node: Q5.3.9\7f216377
+Node: Q5.3.10\7f217330
+Node: Q5.3.11\7f219414
+Node: Q5.3.12\7f220963
+Node: MS Windows\7f222237
+Node: Q6.0.1\7f223568
+Node: Q6.0.2\7f224315
+Node: Q6.0.3\7f224780
+Node: Q6.0.4\7f225060
+Node: Q6.1.1\7f227340
+Node: Q6.1.2\7f228211
+Node: Q6.1.3\7f228492
+Node: Q6.1.4\7f228774
+Node: Q6.1.5\7f229152
+Node: Q6.1.6\7f229983
+Node: Q6.2.1\7f230567
+Node: Q6.2.2\7f231468
+Node: Q6.2.3\7f231869
+Node: Q6.3.1\7f232158
+Node: Q6.3.2\7f233252
+Node: Q6.3.3\7f236430
+Node: Current Events\7f236684
+Node: Q7.0.1\7f237338
+Node: Q7.0.2\7f237977
+Node: Q7.0.3\7f239051
+Node: Q7.0.4\7f239279
 \1f
 End Tag Table
index fda750c..33597a1 100644 (file)
@@ -88,7 +88,6 @@ Getting Started:
 * Q1.4.4::      May I see an example of a useful XEmacs Lisp function?
 * Q1.4.5::      And how do I bind it to a key?
 * Q1.4.6::      What's the difference between a macro and a function?
-* Q1.4.7::      Why options saved with 19.13 don't work with 19.14 or later?
 
 Installation and Trouble Shooting
 
@@ -104,8 +103,6 @@ Installation and Trouble Shooting
 * Q2.0.10::     After I run configure I find a coredump, is something wrong?
 * Q2.0.11::     XEmacs can't resolve host names.
 * Q2.0.12::     Why can't I strip XEmacs?
-* Q2.0.13::     Can't link XEmacs on Solaris with Gcc.
-* Q2.0.14::     Make on HP/UX 9 fails after linking temacs
 
 Trouble Shooting:
 * Q2.1.1::      XEmacs just crashed on me!
@@ -125,10 +122,10 @@ Trouble Shooting:
 * 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'.
-* Q2.1.18::     19.14 hangs on HP/UX 10.10.
+* Q2.1.18::     [This question intentionally left blank]
 * Q2.1.19::     XEmacs does not follow the local timezone.
 * Q2.1.20::     `Symbol's function definition is void: hkey-help-show.'
-* Q2.1.21::     Every so often the XEmacs frame freezes.
+* Q2.1.21::     [This question intentionally left blank]
 * Q2.1.22::     XEmacs seems to take a really long time to do some things.
 * Q2.1.23::     Movemail on Linux does not work for XEmacs 19.15 and later.
 * Q2.1.24::     XEmacs won't start without network. (NEW)
@@ -148,8 +145,8 @@ Customization and Options
 X Window System & Resources:
 * Q3.1.1::      Where is a list of X resources?
 * Q3.1.2::      How can I detect a color display?
-* Q3.1.3::      `(set-screen-width)' worked in 19.6, but not in 19.13?
-* Q3.1.4::      Specifying `Emacs*EmacsScreen.geometry' in `.emacs' does not work in 19.15?
+* Q3.1.3::      [This question intentionally left blank]
+* Q3.1.4::      [This question intentionally left blank]
 * Q3.1.5::      How can I get the icon to just say `XEmacs'?
 * Q3.1.6::      How can I have the window title area display the full path?
 * Q3.1.7::      `xemacs -name junk' doesn't work?
@@ -268,7 +265,7 @@ Infodock:
 Other Unbundled Packages:
 * Q4.7.1::      What is AUC TeX?  Where do you get it?
 * Q4.7.2::      Are there any Emacs Lisp Spreadsheets?
-* Q4.7.3::      Byte compiling AUC TeX on XEmacs 19.14
+* Q4.7.3::      [This question intentionally left blank]
 * Q4.7.4::      Problems installing AUC TeX
 * Q4.7.5::      Is there a reason for an Emacs package not to be included in XEmacs?
 * Q4.7.6::      Is there a MatLab mode?
@@ -285,14 +282,14 @@ The Miscellaneous Stuff
 * Q5.0.8::      Why does edt emulation not work?
 * Q5.0.9::      How can I emulate VI and use it as my default mode?
 * Q5.0.10::     [This question intentionally left blank]
-* Q5.0.11::     Filladapt doesn't work in 19.15?
+* Q5.0.11::     How do I turn on filladapt for all buffers?
 * Q5.0.12::     How do I disable gnuserv from opening a new frame?
 * Q5.0.13::     How do I start gnuserv so that each subsequent XEmacs is a client?
 * Q5.0.14::     Strange things are happening in Shell Mode.
 * Q5.0.15::     Where do I get the latest CC Mode?
 * Q5.0.16::     I find auto-show-mode disconcerting.  How do I turn it off?
 * Q5.0.17::     How can I get two instances of info?
-* Q5.0.18::     I upgraded to XEmacs 19.14 and gnuserv stopped working
+* Q5.0.18::     [This question intentionally left blank]
 * Q5.0.19::     Is there something better than LaTeX mode?
 * Q5.0.20::     Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient?
 
@@ -436,7 +433,6 @@ Getting Started:
 * Q1.4.4::      May I see an example of a useful XEmacs Lisp function?
 * Q1.4.5::      And how do I bind it to a key?
 * Q1.4.6::      What's the difference between a macro and a function?
-* Q1.4.7::      Why options saved with 19.13 don't work with 19.14 or later?
 
 \1f
 File: xemacs-faq.info,  Node: Q1.0.1,  Next: Q1.0.2,  Prev: Introduction,  Up: Introduction
@@ -610,12 +606,9 @@ File: xemacs-faq.info,  Node: Q1.0.11,  Next: Q1.0.12,  Prev: Q1.0.10,  Up: Intr
 Q1.0.11: Is there a port of XEmacs to the Macintosh?
 ----------------------------------------------------
 
-   There has been a port to the MachTen environment of XEmacs 19.13,
-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/).
+   Yes, there is a port of XEmacs 19.14, tested on MacOS 7.6.1 and MacOS
+8.5.1 by Pitts Jarvis (pjarvis@ispchannel.com).  It's available at
+http://my.ispchannel.com/~pjarvis/xemacs.html (http://my.ispchannel.com/~pjarvis/xemacs.html).
 
 \1f
 File: xemacs-faq.info,  Node: Q1.0.12,  Next: Q1.0.13,  Prev: Q1.0.11,  Up: Introduction
@@ -633,7 +626,7 @@ File: xemacs-faq.info,  Node: Q1.0.13,  Next: Q1.0.14,  Prev: Q1.0.12,  Up: Intr
 Q1.0.13: Is there a port of XEmacs to OS/2?
 -------------------------------------------
 
-   No, and there is no news of anyone working on it.
+   No, but Alexander Nikolaev <avn_1251@mail.ru> is working on it.
 
 \1f
 File: xemacs-faq.info,  Node: Q1.0.14,  Next: Q1.1.1,  Prev: Q1.0.13,  Up: Introduction
@@ -776,14 +769,20 @@ crash some time ago.
 
    * Curtis.N.Bingham <binge@aloft.att.com>
 
+   * Georges Brun-Cottan <bruncott@dormeur.inria.fr>
+
    * Richard Caley <rjc@cogsci.ed.ac.uk>
 
    * Richard Cognot <cognot@ensg.u-nancy.fr>
 
+   * Mark Daku <daku@nortel.ca>
+
    * William G. Dubuque <wgd@martigny.ai.mit.edu>
 
    * Eric Eide <eeide@cs.utah.edu>
 
+   * Alain Fauconnet <af@biomath.jussieu.fr>
+
    * Chris Flatters <cflatter@nrao.edu>
 
    * Evelyn Ginsparg <ginsparg@adra.com>
@@ -1133,7 +1132,7 @@ Q1.4.5: And how do I bind it to a key?
    Or interactively, `M-x global-set-key' and follow the prompts.
 
 \1f
-File: xemacs-faq.info,  Node: Q1.4.6,  Next: Q1.4.7,  Prev: Q1.4.5,  Up: Introduction
+File: xemacs-faq.info,  Node: Q1.4.6,  Prev: Q1.4.5,  Up: Introduction
 
 Q1.4.6: What's the difference between a macro and a function?
 -------------------------------------------------------------
@@ -1156,32 +1155,79 @@ another matter, entirely.  A keyboard macro is a key bound to several
 other keys.  Refer to manual for details.
 
 \1f
-File: xemacs-faq.info,  Node: Q1.4.7,  Prev: Q1.4.6,  Up: Introduction
-
-Q1.4.7: How come options saved with 19.13 don't work with 19.14 or later?
--------------------------------------------------------------------------
-
-   There's a problem with options of the form:
-
-     (add-spec-list-to-specifier (face-property 'searchm-field 'font)
-                                 '((global (nil))))
-
-   saved by a 19.13 XEmacs that causes a 19.14 XEmacs grief.  You must
-delete these options.  XEmacs 19.14 and later no longer write the
-options directly to `.emacs' which should allow us to deal with version
-incompatibilities better in the future.
-
-   Options saved under XEmacs 19.13 are protected by code that
-specifically requires a version 19 XEmacs.  This won't be a problem
-unless you're using XEmacs v20.  You should consider changing the code
-to read:
-
-     (cond
-      ((and (string-match "XEmacs" emacs-version)
-            (boundp 'emacs-major-version)
-            (or (and (= emacs-major-version 19)
-                     (>= emacs-minor-version 12))
-                (>= emacs-major-version 20)))
-       ...
-       ))
+File: xemacs-faq.info,  Node: Installation,  Next: Customization,  Prev: Introduction,  Up: Top
+
+2 Installation and Trouble Shooting
+***********************************
+
+   This is part 2 of the XEmacs Frequently Asked Questions list.  This
+section is devoted to Installation, Maintenance and Trouble Shooting.
+
+* Menu:
+
+Installation:
+* Q2.0.1::      Running XEmacs without installing.
+* Q2.0.2::      XEmacs is too big.
+* Q2.0.3::      Compiling XEmacs with Netaudio.
+* Q2.0.4::      Problems with Linux and ncurses.
+* Q2.0.5::      Do I need X11 to run XEmacs?
+* Q2.0.6::      I'm having strange crashes.  What do I do?
+* Q2.0.7::      Libraries in non-standard locations.
+* Q2.0.8::      can't resolve symbol _h_errno
+* Q2.0.9::      Where do I find external libraries?
+* Q2.0.10::     After I run configure I find a coredump, is something wrong?
+* Q2.0.11::     XEmacs can't resolve host names.
+* Q2.0.12::     Why can't I strip XEmacs?
+
+Trouble Shooting:
+* Q2.1.1::      XEmacs just crashed on me!
+* Q2.1.2::      Cryptic Minibuffer messages.
+* Q2.1.3::      Translation Table Syntax messages at Startup.
+* Q2.1.4::      Startup warnings about deducing proper fonts?
+* Q2.1.5::      XEmacs cannot connect to my X Terminal.
+* Q2.1.6::      XEmacs just locked up my Linux X server.
+* Q2.1.7::      HP Alt key as Meta.
+* Q2.1.8::      got (wrong-type-argument color-instance-p nil)!
+* Q2.1.9::      XEmacs causes my OpenWindows 3.0 server to crash.
+* Q2.1.10::     Warnings from incorrect key modifiers.
+* 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.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'.
+* Q2.1.18::     [This question intentionally left blank]
+* Q2.1.19::     XEmacs does not follow the local timezone.
+* Q2.1.20::     `Symbol's function definition is void: hkey-help-show.'
+* Q2.1.21::     [This question intentionally left blank]
+* Q2.1.22::     XEmacs seems to take a really long time to do some things.
+* Q2.1.23::     Movemail on Linux does not work for XEmacs 19.15 and later.
+* Q2.1.24::     XEmacs won't start without network. (NEW)
+
+\1f
+File: xemacs-faq.info,  Node: Q2.0.1,  Next: Q2.0.2,  Prev: Installation,  Up: Installation
+
+2.0: Installation
+=================
+
+Q2.0.1: Running XEmacs without installing
+-----------------------------------------
+
+   The `INSTALL' file says that up to 108 MB of space is needed
+temporarily during installation!  How can I just try it out?
+
+   XEmacs will run in place without requiring installation and copying
+of the Lisp directories, and without having to specify a special
+build-time flag.  It's the copying of the Lisp directories that
+requires so much space.  XEmacs is largely written in Lisp.
+
+   A good method is to make a shell alias for xemacs:
+
+     alias xemacs=/i/xemacs-20.2/src/xemacs
+
+   (You will obviously use whatever directory you downloaded the source
+tree to instead of `/i/xemacs-20.2').
+
+   This will let you run XEmacs without massive copying.
 
index f1e71fc..e58bb3d 100644 (file)
@@ -7,85 +7,6 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 \1f
-File: xemacs-faq.info,  Node: Installation,  Next: Customization,  Prev: Introduction,  Up: Top
-
-2 Installation and Trouble Shooting
-***********************************
-
-   This is part 2 of the XEmacs Frequently Asked Questions list.  This
-section is devoted to Installation, Maintenance and Trouble Shooting.
-
-* Menu:
-
-Installation:
-* Q2.0.1::      Running XEmacs without installing.
-* Q2.0.2::      XEmacs is too big.
-* Q2.0.3::      Compiling XEmacs with Netaudio.
-* Q2.0.4::      Problems with Linux and ncurses.
-* Q2.0.5::      Do I need X11 to run XEmacs?
-* Q2.0.6::      I'm having strange crashes.  What do I do?
-* Q2.0.7::      Libraries in non-standard locations.
-* Q2.0.8::      can't resolve symbol _h_errno
-* Q2.0.9::      Where do I find external libraries?
-* Q2.0.10::     After I run configure I find a coredump, is something wrong?
-* Q2.0.11::     XEmacs can't resolve host names.
-* Q2.0.12::     Why can't I strip XEmacs?
-* Q2.0.13::     Can't link XEmacs on Solaris with Gcc.
-* Q2.0.14::     Make on HP/UX 9 fails after linking temacs
-
-Trouble Shooting:
-* Q2.1.1::      XEmacs just crashed on me!
-* Q2.1.2::      Cryptic Minibuffer messages.
-* Q2.1.3::      Translation Table Syntax messages at Startup.
-* Q2.1.4::      Startup warnings about deducing proper fonts?
-* Q2.1.5::      XEmacs cannot connect to my X Terminal.
-* Q2.1.6::      XEmacs just locked up my Linux X server.
-* Q2.1.7::      HP Alt key as Meta.
-* Q2.1.8::      got (wrong-type-argument color-instance-p nil)!
-* Q2.1.9::      XEmacs causes my OpenWindows 3.0 server to crash.
-* Q2.1.10::     Warnings from incorrect key modifiers.
-* 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.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'.
-* Q2.1.18::     19.14 hangs on HP/UX 10.10.
-* Q2.1.19::     XEmacs does not follow the local timezone.
-* Q2.1.20::     `Symbol's function definition is void: hkey-help-show.'
-* Q2.1.21::     Every so often the XEmacs frame freezes.
-* Q2.1.22::     XEmacs seems to take a really long time to do some things.
-* Q2.1.23::     Movemail on Linux does not work for XEmacs 19.15 and later.
-* Q2.1.24::     XEmacs won't start without network. (NEW)
-
-\1f
-File: xemacs-faq.info,  Node: Q2.0.1,  Next: Q2.0.2,  Prev: Installation,  Up: Installation
-
-2.0: Installation
-=================
-
-Q2.0.1: Running XEmacs without installing
------------------------------------------
-
-   The `INSTALL' file says that up to 108 MB of space is needed
-temporarily during installation!  How can I just try it out?
-
-   XEmacs will run in place without requiring installation and copying
-of the Lisp directories, and without having to specify a special
-build-time flag.  It's the copying of the Lisp directories that
-requires so much space.  XEmacs is largely written in Lisp.
-
-   A good method is to make a shell alias for xemacs:
-
-     alias xemacs=/i/xemacs-20.2/src/xemacs
-
-   (You will obviously use whatever directory you downloaded the source
-tree to instead of `/i/xemacs-20.2').
-
-   This will let you run XEmacs without massive copying.
-
-\1f
 File: xemacs-faq.info,  Node: Q2.0.2,  Next: Q2.0.3,  Prev: Q2.0.1,  Up: Installation
 
 Q2.0.2: XEmacs is too big
@@ -464,7 +385,7 @@ that stock SunOS systems do not ship with DNS resolver code in libc.
      then proceed to link against the DNS resolver library code.
 
 \1f
-File: xemacs-faq.info,  Node: Q2.0.12,  Next: Q2.0.13,  Prev: Q2.0.11,  Up: Installation
+File: xemacs-faq.info,  Node: Q2.0.12,  Next: Q2.1.1,  Prev: Q2.0.11,  Up: Installation
 
 Q2.0.12: Why can't I strip XEmacs?
 ----------------------------------
@@ -507,44 +428,7 @@ Q2.0.12: Why can't I strip XEmacs?
           /usr/local/lib/xemacs-19.16/i586-unknown-linuxaout
 
 \1f
-File: xemacs-faq.info,  Node: Q2.0.13,  Next: Q2.0.14,  Prev: Q2.0.12,  Up: Installation
-
-Q2.0.13: Problems linking with Gcc on Solaris
----------------------------------------------
-
-   There are known difficulties linking with Gnu ld on Solaris.  A
-typical error message might look like:
-
-     unexec(): dlopen(../dynodump/dynodump.so): ld.so.1: ./temacs:
-     fatal: relocation error:
-     symbol not found: main: referenced in ../dynodump/dynodump.so
-
-   Martin Buchholz <martin@xemacs.org> writes:
-
-     You need to specify `-fno-gnu-linker' as part of your flags to pass
-     to ld.  Future releases of XEmacs will try to do this
-     automatically.
-
-\1f
-File: xemacs-faq.info,  Node: Q2.0.14,  Next: Q2.1.1,  Prev: Q2.0.13,  Up: Installation
-
-Q2.0.14: Make on HP/UX 9 fails after linking temacs
----------------------------------------------------
-
-   Problem when building xemacs-19.16 on hpux 9:
-
-   Richard Cognot <cognot@ensg.u-nancy.fr> writes:
-
-     make on hpux fails after linking temacs with a message:
-
-          "make: don't know how to make .y."
-
-     Solution: This is a problem with HP make revision 70.X.  Either
-     use GNU make, or install PHCO_6552, which will bring make to
-     revision 72.24.1.17.
-
-\1f
-File: xemacs-faq.info,  Node: Q2.1.1,  Next: Q2.1.2,  Prev: Q2.0.14,  Up: Installation
+File: xemacs-faq.info,  Node: Q2.1.1,  Next: Q2.1.2,  Prev: Q2.0.12,  Up: Installation
 
 2.1: Trouble Shooting
 =====================
@@ -971,17 +855,55 @@ debugger.  Here are some hints:
      you've got is a core dump, all is not lost.
 
      If you're using GDB, there are some macros in the file
-     `src/gdbinit' in the XEmacs source distribution that should make it
-     easier for you to decode Lisp objects.  Copy this file to
-     `~/.gdbinit', or `source' it from `~/.gdbinit', and use the macros
-     defined therein.  In particular, use the `pobj' macro to print the
-     internal C representation of a lisp object.  This will work with a
-     core file or not-yet-run executable.  The aliases `ldp' and `lbt'
-     are provided for conveniently calling `debug_print' and
-     `debug_backtrace'.
+     `src/.gdbinit' in the XEmacs source distribution that should make
+     it easier for you to decode Lisp objects.  This file is
+     automatically read by gdb if gdb is run in the directory where
+     xemacs was built, and contains these useful macros to inspect the
+     state of xemacs:
+
+    `pobj'
+          Usage: pobj lisp_object
+          Print the internal C representation of a lisp object.
+
+    `xtype'
+          Usage: xtype lisp_object
+          Print the Lisp type of a lisp object.
+
+    `lbt'
+          Usage: lbt
+          Print the current Lisp stack trace.  Requires a running
+          xemacs process.
+
+    `ldp'
+          Usage: ldp lisp_object
+          Print a Lisp Object value using the Lisp printer.  Requires a
+          running xemacs process.
+
+    `run-temacs'
+          Usage: run-temacs
+          Run temacs interactively, like xemacs.  Use this with
+          debugging tools (like purify) that cannot deal with dumping,
+          or when temacs builds successfully, but xemacs does not.
+
+    `dump-temacs'
+          Usage: dump-temacs
+          Run the dumping part of the build procedure.  Use when
+          debugging temacs, not xemacs!  Use this when temacs builds
+          successfully, but xemacs does not.
+
+    `check-xemacs'
+          Usage: check-xemacs
+          Run the test suite.  Equivalent to 'make check'.
+
+    `check-temacs'
+          Usage: check-temacs
+          Run the test suite on temacs.  Equivalent to 'make
+          check-temacs'.  Use this with debugging tools (like purify)
+          that cannot deal with dumping, or when temacs builds
+          successfully, but xemacs does not.
 
      If you are using Sun's `dbx' debugger, there is an equivalent file
-     `src/dbxrc' to copy to or source from `~/.dbxrc'.
+     `src/.dbxrc', which defines the same commands for dbx.
 
    * If you're using a debugger to get a C stack backtrace and you're
      seeing stack traces with some of the innermost frames mangled, it
@@ -1026,13 +948,12 @@ debugger.  Here are some hints:
 
 
    * If you compile with the newer gcc variants gcc-2.8 or egcs, you
-     will also need gdb 4.17.  Earlier releases of gdb can't handle the
-     debug information generated by the newer compilers.
+     will also need gdb 4.17 or above.  Earlier releases of gdb can't
+     handle the debug information generated by the newer compilers.
 
-   * The above information on using `src/gdbinit' works for XEmacs-21.0
-     and above.  For older versions of XEmacs, there are different
-     `gdbinit' files provided in the `src' directory.  Use the one
-     corresponding to the configure options used when building XEmacs.
+   * In versions of XEmacs before 21.2.27, `src/.gdbinit' was named
+     `src/gdbinit'.  This had the disadvantage of not being sourced
+     automatically by gdb, so you had to set that up yourself.
 
 \1f
 File: xemacs-faq.info,  Node: Q2.1.16,  Next: Q2.1.17,  Prev: Q2.1.15,  Up: Installation
@@ -1078,44 +999,8 @@ reported (and fixed).
 \1f
 File: xemacs-faq.info,  Node: Q2.1.18,  Next: Q2.1.19,  Prev: Q2.1.17,  Up: Installation
 
-Q2.1.18: 19.14 hangs on HP/UX 10.10.
-------------------------------------
-
-   Richard Cognot <cognot@ensg.u-nancy.fr> writes:
-
-     For the record, compiling on hpux 10.10 leads to a hang in Gnus
-     when compiled with optimization on.
-
-     I've just discovered that my hpux 10.01 binary was working less
-     well than expected. In fact, on a 10.10 system, `(while t)' was not
-     interrupted by `C-g'. I defined `BROKEN_SIGIO' and recompiled on
-     10.10, and... the hang is now gone.
-
-     As far as configure goes, this will be a bit tricky: `BROKEN_SIGIO'
-     is needed on 10.10, but *not* on 10.01: if I run my 10.01 binary
-     on a 10.01 machine, without `BROKEN_SIGIO' being defined, `C-g'
-     works as expected.
-
-   Richard Cognot <cognot@ensg.u-nancy.fr> adds:
-
-     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.
-     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
-     -lcurses to -ltermcap in the Makefile and it fixed:
-
-       1. The `poll: interrupted system call' message.
-
-       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
-          emacs to read the socket which connects stdout...
+Q2.1.18: removed
+----------------
 
 \1f
 File: xemacs-faq.info,  Node: Q2.1.19,  Next: Q2.1.20,  Prev: Q2.1.18,  Up: Installation
@@ -1147,11 +1032,8 @@ Q2.1.20: `Symbol's function definition is void: hkey-help-show.'
 \1f
 File: xemacs-faq.info,  Node: Q2.1.21,  Next: Q2.1.22,  Prev: Q2.1.20,  Up: Installation
 
-Q2.1.21: Every so often the XEmacs frame freezes
-------------------------------------------------
-
-   This problem has been fixed in 19.15, and was due to a not easily
-reproducible race condition.
+Q2.1.21: [This question intentionally left blank]
+-------------------------------------------------
 
 \1f
 File: xemacs-faq.info,  Node: Q2.1.22,  Next: Q2.1.23,  Prev: Q2.1.21,  Up: Installation
@@ -1222,3 +1104,173 @@ not on the network, you may be missing a "localhost" entry in your
 
    Add that line, and XEmacs will be happy.
 
+\1f
+File: xemacs-faq.info,  Node: Customization,  Next: Subsystems,  Prev: Installation,  Up: Top
+
+3 Customization and Options
+***************************
+
+   This is part 3 of the XEmacs Frequently Asked Questions list.  This
+section is devoted to Customization and screen settings.
+
+* Menu:
+
+Customization--Emacs Lisp and `.emacs':
+* Q3.0.1::      What version of Emacs am I running?
+* Q3.0.2::      How do I evaluate Elisp expressions?
+* Q3.0.3::      `(setq tab-width 6)' behaves oddly.
+* Q3.0.4::      How can I add directories to the `load-path'?
+* Q3.0.5::      How to check if a lisp function is defined?
+* Q3.0.6::      Can I force the output of `(face-list)' to a buffer?
+* Q3.0.7::      Font selections don't get saved after `Save Options'.
+* Q3.0.8::      How do I make a single minibuffer frame?
+* Q3.0.9::      What is `Customize'?
+
+X Window System & Resources:
+* Q3.1.1::      Where is a list of X resources?
+* Q3.1.2::      How can I detect a color display?
+* Q3.1.3::      [This question intentionally left blank]
+* Q3.1.4::      [This question intentionally left blank]
+* Q3.1.5::      How can I get the icon to just say `XEmacs'?
+* Q3.1.6::      How can I have the window title area display the full path?
+* Q3.1.7::      `xemacs -name junk' doesn't work?
+* Q3.1.8::      `-iconic' doesn't work.
+
+Textual Fonts & Colors:
+* Q3.2.1::      How can I set color options from `.emacs'?
+* Q3.2.2::      How do I set the text, menu and modeline fonts?
+* Q3.2.3::      How can I set the colors when highlighting a region?
+* Q3.2.4::      How can I limit color map usage?
+* Q3.2.5::      My tty supports color, but XEmacs doesn't use them.
+* Q3.2.6::      Can I have pixmap backgrounds in XEmacs?
+
+The Modeline:
+* Q3.3.1::      How can I make the modeline go away?
+* Q3.3.2::      How do you have XEmacs display the line number in the modeline?
+* Q3.3.3::      How do I get XEmacs to put the time of day on the modeline?
+* Q3.3.4::      How do I turn off current chapter from AUC TeX modeline?
+* Q3.3.5::      How can one change the modeline color based on the mode used?
+
+3.4 Multiple Device Support:
+* Q3.4.1::      How do I open a frame on another screen of my multi-headed display?
+* Q3.4.2::      Can I really connect to a running XEmacs after calling up over a modem?  How?
+
+3.5 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.5::      Scrolling one line at a time.
+* 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?
+* Q3.5.10::     Can I turn on "sticky" modifier keys?
+* Q3.5.11::     How do I map the arrow keys?
+
+The Cursor:
+* Q3.6.1::      Is there a way to make the bar cursor thicker?
+* Q3.6.2::      Is there a way to get back the old block cursor where the cursor covers the character in front of the point?
+* Q3.6.3::      Can I make the cursor blink?
+
+The Mouse and Highlighting:
+* Q3.7.1::      How can I turn off Mouse pasting?
+* Q3.7.2::      How do I set control/meta/etc modifiers on mouse buttons?
+* Q3.7.3::      Clicking the left button does not do anything in buffer list.
+* Q3.7.4::      How can I get a list of buffers when I hit mouse button 3?
+* 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?
+
+The Menubar and Toolbar:
+* Q3.8.1::      How do I get rid of the menu (or menubar)?
+* Q3.8.2::      Can I customize the basic menubar?
+* Q3.8.3::      How do I control how many buffers are listed in the menu `Buffers' list?
+* Q3.8.4::      Resources like `Emacs*menubar*font' are not working?
+* Q3.8.5::      How can I bind a key to a function to toggle the toolbar?
+
+Scrollbars:
+* Q3.9.1::      How can I disable the scrollbar?
+* Q3.9.2::      How can one use resources to change scrollbar colors?
+* Q3.9.3::      Moving the scrollbar can move the point; can I disable this?
+* Q3.9.4::      How can I get automatic horizontal scrolling?
+
+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.5::     The region disappears when I hit the end of buffer while scrolling.
+
+\1f
+File: xemacs-faq.info,  Node: Q3.0.1,  Next: Q3.0.2,  Prev: Customization,  Up: Customization
+
+3.0: Customization - Emacs Lisp and .emacs
+==========================================
+
+Q3.0.1: What version of Emacs am I running?
+-------------------------------------------
+
+   How can `.emacs' determine which of the family of Emacsen I am using?
+
+   To determine if you are currently running GNU Emacs 18, GNU Emacs 19,
+XEmacs 19, XEmacs 20, or Epoch, and use appropriate code, check out the
+example given in `etc/sample.emacs'.  There are other nifty things in
+there as well!
+
+   For all new code, all you really need to do is:
+
+     (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
+
+\1f
+File: xemacs-faq.info,  Node: Q3.0.2,  Next: Q3.0.3,  Prev: Q3.0.1,  Up: Customization
+
+Q3.0.2: How can I evaluate Emacs-Lisp expressions?
+--------------------------------------------------
+
+   I know I can evaluate Elisp expressions from `*scratch*' buffer with
+`C-j' after the expression.  How do I do it from another buffer?
+
+   Press `M-:' (the default binding of `eval-expression'), and enter
+the expression to the minibuffer.  In XEmacs prior to 19.15
+`eval-expression' used to be a disabled command by default.  If this is
+the case, upgrade your XEmacs.
+
+\1f
+File: xemacs-faq.info,  Node: Q3.0.3,  Next: Q3.0.4,  Prev: Q3.0.2,  Up: Customization
+
+Q3.0.3: `(setq tab-width 6)' behaves oddly.
+-------------------------------------------
+
+   If you put `(setq tab-width 6)' in your `.emacs' file it does not
+work!  Is there a reason for this?  If you do it at the EVAL prompt it
+works fine!! How strange.
+
+   Use `setq-default' instead, since `tab-width' is all-buffer-local.
+
+\1f
+File: xemacs-faq.info,  Node: Q3.0.4,  Next: Q3.0.5,  Prev: Q3.0.3,  Up: Customization
+
+Q3.0.4: How can I add directories to the `load-path'?
+-----------------------------------------------------
+
+   Here are two ways to do that, one that puts your directories at the
+front of the load-path, the other at the end:
+
+     ;;; Add things at the beginning of the load-path, do not add
+     ;;; duplicate directories:
+     (pushnew "bar" load-path :test 'equal)
+     
+     (pushnew "foo" load-path :test 'equal)
+     
+     ;;; Add things at the end, unconditionally
+     (setq load-path (nconc load-path '("foo" "bar")))
+
+   keith (k.p.) hanlan <keithh@nortel.ca> writes:
+
+     To add directories using Unix shell metacharacters use
+     `expand-file-name' like this:
+
+          (push (expand-file-name "~keithh/.emacsdir") load-path)
+
index d6ddac2..1a4f35f 100644 (file)
@@ -7,176 +7,6 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 \1f
-File: xemacs-faq.info,  Node: Customization,  Next: Subsystems,  Prev: Installation,  Up: Top
-
-3 Customization and Options
-***************************
-
-   This is part 3 of the XEmacs Frequently Asked Questions list.  This
-section is devoted to Customization and screen settings.
-
-* Menu:
-
-Customization--Emacs Lisp and `.emacs':
-* Q3.0.1::      What version of Emacs am I running?
-* Q3.0.2::      How do I evaluate Elisp expressions?
-* Q3.0.3::      `(setq tab-width 6)' behaves oddly.
-* Q3.0.4::      How can I add directories to the `load-path'?
-* Q3.0.5::      How to check if a lisp function is defined?
-* Q3.0.6::      Can I force the output of `(face-list)' to a buffer?
-* Q3.0.7::      Font selections don't get saved after `Save Options'.
-* Q3.0.8::      How do I make a single minibuffer frame?
-* Q3.0.9::      What is `Customize'?
-
-X Window System & Resources:
-* Q3.1.1::      Where is a list of X resources?
-* Q3.1.2::      How can I detect a color display?
-* Q3.1.3::      `(set-screen-width)' worked in 19.6, but not in 19.13?
-* Q3.1.4::      Specifying `Emacs*EmacsScreen.geometry' in `.emacs' does not work in 19.15?
-* Q3.1.5::      How can I get the icon to just say `XEmacs'?
-* Q3.1.6::      How can I have the window title area display the full path?
-* Q3.1.7::      `xemacs -name junk' doesn't work?
-* Q3.1.8::      `-iconic' doesn't work.
-
-Textual Fonts & Colors:
-* Q3.2.1::      How can I set color options from `.emacs'?
-* Q3.2.2::      How do I set the text, menu and modeline fonts?
-* Q3.2.3::      How can I set the colors when highlighting a region?
-* Q3.2.4::      How can I limit color map usage?
-* Q3.2.5::      My tty supports color, but XEmacs doesn't use them.
-* Q3.2.6::      Can I have pixmap backgrounds in XEmacs?
-
-The Modeline:
-* Q3.3.1::      How can I make the modeline go away?
-* Q3.3.2::      How do you have XEmacs display the line number in the modeline?
-* Q3.3.3::      How do I get XEmacs to put the time of day on the modeline?
-* Q3.3.4::      How do I turn off current chapter from AUC TeX modeline?
-* Q3.3.5::      How can one change the modeline color based on the mode used?
-
-3.4 Multiple Device Support:
-* Q3.4.1::      How do I open a frame on another screen of my multi-headed display?
-* Q3.4.2::      Can I really connect to a running XEmacs after calling up over a modem?  How?
-
-3.5 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.5::      Scrolling one line at a time.
-* 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?
-* Q3.5.10::     Can I turn on "sticky" modifier keys?
-* Q3.5.11::     How do I map the arrow keys?
-
-The Cursor:
-* Q3.6.1::      Is there a way to make the bar cursor thicker?
-* Q3.6.2::      Is there a way to get back the old block cursor where the cursor covers the character in front of the point?
-* Q3.6.3::      Can I make the cursor blink?
-
-The Mouse and Highlighting:
-* Q3.7.1::      How can I turn off Mouse pasting?
-* Q3.7.2::      How do I set control/meta/etc modifiers on mouse buttons?
-* Q3.7.3::      Clicking the left button does not do anything in buffer list.
-* Q3.7.4::      How can I get a list of buffers when I hit mouse button 3?
-* 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?
-
-The Menubar and Toolbar:
-* Q3.8.1::      How do I get rid of the menu (or menubar)?
-* Q3.8.2::      Can I customize the basic menubar?
-* Q3.8.3::      How do I control how many buffers are listed in the menu `Buffers' list?
-* Q3.8.4::      Resources like `Emacs*menubar*font' are not working?
-* Q3.8.5::      How can I bind a key to a function to toggle the toolbar?
-
-Scrollbars:
-* Q3.9.1::      How can I disable the scrollbar?
-* Q3.9.2::      How can one use resources to change scrollbar colors?
-* Q3.9.3::      Moving the scrollbar can move the point; can I disable this?
-* Q3.9.4::      How can I get automatic horizontal scrolling?
-
-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.5::     The region disappears when I hit the end of buffer while scrolling.
-
-\1f
-File: xemacs-faq.info,  Node: Q3.0.1,  Next: Q3.0.2,  Prev: Customization,  Up: Customization
-
-3.0: Customization - Emacs Lisp and .emacs
-==========================================
-
-Q3.0.1: What version of Emacs am I running?
--------------------------------------------
-
-   How can `.emacs' determine which of the family of Emacsen I am using?
-
-   To determine if you are currently running GNU Emacs 18, GNU Emacs 19,
-XEmacs 19, XEmacs 20, or Epoch, and use appropriate code, check out the
-example given in `etc/sample.emacs'.  There are other nifty things in
-there as well!
-
-   For all new code, all you really need to do is:
-
-     (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
-
-\1f
-File: xemacs-faq.info,  Node: Q3.0.2,  Next: Q3.0.3,  Prev: Q3.0.1,  Up: Customization
-
-Q3.0.2: How can I evaluate Emacs-Lisp expressions?
---------------------------------------------------
-
-   I know I can evaluate Elisp expressions from `*scratch*' buffer with
-`C-j' after the expression.  How do I do it from another buffer?
-
-   Press `M-:' (the default binding of `eval-expression'), and enter
-the expression to the minibuffer.  In XEmacs prior to 19.15
-`eval-expression' used to be a disabled command by default.  If this is
-the case, upgrade your XEmacs.
-
-\1f
-File: xemacs-faq.info,  Node: Q3.0.3,  Next: Q3.0.4,  Prev: Q3.0.2,  Up: Customization
-
-Q3.0.3: `(setq tab-width 6)' behaves oddly.
--------------------------------------------
-
-   If you put `(setq tab-width 6)' in your `.emacs' file it does not
-work!  Is there a reason for this?  If you do it at the EVAL prompt it
-works fine!! How strange.
-
-   Use `setq-default' instead, since `tab-width' is all-buffer-local.
-
-\1f
-File: xemacs-faq.info,  Node: Q3.0.4,  Next: Q3.0.5,  Prev: Q3.0.3,  Up: Customization
-
-Q3.0.4: How can I add directories to the `load-path'?
------------------------------------------------------
-
-   Here are two ways to do that, one that puts your directories at the
-front of the load-path, the other at the end:
-
-     ;;; Add things at the beginning of the load-path, do not add
-     ;;; duplicate directories:
-     (pushnew "bar" load-path :test 'equal)
-     
-     (pushnew "foo" load-path :test 'equal)
-     
-     ;;; Add things at the end, unconditionally
-     (setq load-path (nconc load-path '("foo" "bar")))
-
-   keith (k.p.) hanlan <keithh@nortel.ca> writes:
-
-     To add directories using Unix shell metacharacters use
-     `expand-file-name' like this:
-
-          (push (expand-file-name "~keithh/.emacsdir") load-path)
-
-\1f
 File: xemacs-faq.info,  Node: Q3.0.5,  Next: Q3.0.6,  Prev: Q3.0.4,  Up: Customization
 
 Q3.0.5: How to check if a lisp function is defined?
@@ -317,34 +147,14 @@ in:
 \1f
 File: xemacs-faq.info,  Node: Q3.1.3,  Next: Q3.1.4,  Prev: Q3.1.2,  Up: Customization
 
-Q3.1.3: `(set-screen-width)' worked in 19.6, but not in 19.13?
---------------------------------------------------------------
-
-   In Lucid Emacs 19.6 I did `(set-screen-width CHARACTERS)' and
-`(set-screen-height LINES)' in my `.emacs' instead of specifying
-`Emacs*EmacsScreen.geometry' in my `.Xdefaults' but this does not work
-in XEmacs 19.13.
-
-   These two functions now take frame arguments:
-
-     (set-frame-width (selected-frame) CHARACTERS)
-     (set-frame-height (selected-frame) LINES)
+Q3.1.3: [This question intentionally left blank]
+------------------------------------------------
 
 \1f
 File: xemacs-faq.info,  Node: Q3.1.4,  Next: Q3.1.5,  Prev: Q3.1.3,  Up: Customization
 
-Q3.1.4: Specifying `Emacs*EmacsScreen.geometry' in `.emacs' does not work in 19.15?
------------------------------------------------------------------------------------
-
-   In XEmacs 19.11 I specified `Emacs*EmacsScreen.geometry' in my
-`.emacs' but this does not work in XEmacs 19.15.
-
-   We have switched from using the term "screen" to using the term
-"frame".
-
-   The correct entry for your `.Xdefaults' is now:
-
-     Emacs*EmacsFrame.geometry
+Q3.1.4: [This question intentionally left blank]
+------------------------------------------------
 
 \1f
 File: xemacs-faq.info,  Node: Q3.1.5,  Next: Q3.1.6,  Prev: Q3.1.4,  Up: Customization
@@ -1394,3 +1204,237 @@ unless the package specifically asked for them.
 
    Automatic horizontal scrolling is now standard, starting with 19.14.
 
+\1f
+File: xemacs-faq.info,  Node: Q3.10.1,  Next: Q3.10.2,  Prev: Q3.9.4,  Up: Customization
+
+3.10: Text Selections
+=====================
+
+Q3.10.1: How can I turn off or change highlighted selections?
+-------------------------------------------------------------
+
+   The `zmacs' mode allows for what some might call gratuitous
+highlighting for selected regions (either by setting mark or by using
+the mouse).  This is the default behavior.  To turn off, add the
+following line to your `.emacs' file:
+
+     (setq zmacs-regions nil)
+
+   Starting with XEmacs-20.2 you can also change this with Customize.
+Select from the `Options' menu `Customize->Emacs->Editing->Basics->Zmacs
+Regions' or type `M-x customize <RET> editing-basics <RET>'.
+
+   To change the face for selection, look at `Options->Customize' on
+the menubar.
+
+\1f
+File: xemacs-faq.info,  Node: Q3.10.2,  Next: Q3.10.3,  Prev: Q3.10.1,  Up: Customization
+
+Q3.10.2: How do I get that typing on an active region removes it?
+-----------------------------------------------------------------
+
+   I want to change things so that if I select some text and start
+typing, the typed text replaces the selected text, similar to Motif.
+
+   You want to use something called "pending delete".  Pending delete
+is what happens when you select a region (with the mouse or keyboard)
+and you press a key to replace the selected region by the key you typed.
+Usually backspace kills the selected region.
+
+   To get this behavior, add the following lines to your `.emacs':
+
+     (cond
+      ((fboundp 'turn-on-pending-delete)
+       (turn-on-pending-delete))
+      ((fboundp 'pending-delete-on)
+       (pending-delete-on t)))
+
+   Note that this will work with both Backspace and Delete.  This code
+is a tad more complicated than it has to be for XEmacs in order to make
+it more portable.
+
+\1f
+File: xemacs-faq.info,  Node: Q3.10.3,  Next: Q3.10.4,  Prev: Q3.10.2,  Up: Customization
+
+Q3.10.3: Can I turn off the highlight during isearch?
+-----------------------------------------------------
+
+   I do not like my text highlighted while I am doing isearch as I am
+not able to see what's underneath.  How do I turn it off?
+
+   Put the following in your `.emacs':
+
+     (setq isearch-highlight nil)
+
+   Starting with XEmacs-20.2 you can also change this with Customize.
+Type `M-x customize-variable <RET> isearch-highlight <RET>'.
+
+   Note also that isearch-highlight affects query-replace and ispell.
+Instead of disabling isearch-highlight you may find that a better
+solution consists of customizing the `isearch' face.
+
+\1f
+File: xemacs-faq.info,  Node: Q3.10.4,  Next: Q3.10.5,  Prev: Q3.10.3,  Up: Customization
+
+Q3.10.4: How do I turn off highlighting after `C-x C-p' (mark-page)?
+--------------------------------------------------------------------
+
+   Put this in your `.emacs':
+
+     (setq zmacs-regions nil)
+
+   *Warning: This command turns off all region highlighting.*
+
+   Also *Note Q3.10.1::.
+
+\1f
+File: xemacs-faq.info,  Node: Q3.10.5,  Prev: Q3.10.4,  Up: Customization
+
+Q3.10.5: The region disappears when I hit the end of buffer while scrolling.
+----------------------------------------------------------------------------
+
+   This has been fixed by default starting with XEmacs-20.3.
+
+   With older versions you can turn this feature (if it indeed is a
+feature) off like this:
+
+     (defadvice scroll-up (around scroll-up freeze)
+       (interactive "_P")
+       (let ((zmacs-region-stays t))
+         (if (interactive-p)
+       (condition-case nil
+           ad-do-it
+         (end-of-buffer (goto-char (point-max))))
+           ad-do-it)))
+     
+     (defadvice scroll-down (around scroll-down freeze)
+       (interactive "_P")
+       (let ((zmacs-region-stays t))
+         (if (interactive-p)
+       (condition-case nil
+           ad-do-it
+         (beginning-of-buffer (goto-char (point-min))))
+           ad-do-it)))
+
+   Thanks to T. V. Raman <raman@adobe.com> for assistance in deriving
+this answer.
+
+\1f
+File: xemacs-faq.info,  Node: Subsystems,  Next: Miscellaneous,  Prev: Customization,  Up: Top
+
+4 Major Subsystems
+******************
+
+   This is part 4 of the XEmacs Frequently Asked Questions list.  This
+section is devoted to major XEmacs subsystems.
+
+* Menu:
+
+Reading Mail with VM:
+* Q4.0.1::      How do I set up VM to retrieve remote mail using POP?
+* Q4.0.2::      How do I get VM to filter mail for me?
+* Q4.0.3::      How can I get VM to automatically check for new mail?
+* Q4.0.4::      [This question intentionally left blank]
+* Q4.0.5::      How do I get my outgoing mail archived?
+* Q4.0.6::      I have various addresses at which I receive mail.  How can I tell VM to ignore them when doing a "reply-all"?
+* Q4.0.7::      Is there a mailing list or FAQ for VM?
+* Q4.0.8::      Remote mail reading with VM.
+* Q4.0.9::      rmail or VM gets an error incorporating new mail.
+* Q4.0.10::     How do I make VM stay in a single frame?
+* Q4.0.11::     How do I make VM or mh-e display graphical smilies?
+* Q4.0.12::     Customization of VM not covered in the manual or here.
+
+Web browsing with W3:
+* Q4.1.1::      What is W3?
+* Q4.1.2::      How do I run W3 from behind a firewall?
+* Q4.1.3::      Is it true that W3 supports style sheets and tables?
+
+Reading Netnews and Mail with Gnus:
+* Q4.2.1::      GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus,argh!
+* Q4.2.2::      [This question intentionally left blank]
+* Q4.2.3::      How do I make Gnus stay within a single frame?
+* Q4.2.4::      How do I customize the From: line?
+
+Other Mail & News:
+* Q4.3.1::      How can I read and/or compose MIME messages?
+* Q4.3.2::      What is TM and where do I get it?
+* Q4.3.3::      Why isn't this `movemail' program working?
+* Q4.3.4::      Movemail is also distributed by Netscape?  Can that cause problems?
+* Q4.3.5::      Where do I find pstogif (required by tm)?
+
+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?
+
+Infodock:
+* Q4.6.1::      What is Infodock?
+
+Other Unbundled Packages:
+* Q4.7.1::      What is AUC TeX?  Where do you get it?
+* Q4.7.2::      Are there any Emacs Lisp Spreadsheets?
+* Q4.7.3::      [This question intentionally left blank]
+* Q4.7.4::      Problems installing AUC TeX
+* Q4.7.5::      Is there a reason for an Emacs package not to be included in XEmacs?
+* Q4.7.6::      Is there a MatLab mode?
+
+\1f
+File: xemacs-faq.info,  Node: Q4.0.1,  Next: Q4.0.2,  Prev: Subsystems,  Up: Subsystems
+
+4.0: Reading Mail with VM
+=========================
+
+Q4.0.1: How do I set up VM to retrieve mail from a remote site using POP?
+-------------------------------------------------------------------------
+
+   Use `vm-spool-files', like this for example:
+
+     (setq vm-spool-files '("/var/spool/mail/wing"
+                            "netcom23.netcom.com:110:pass:wing:MYPASS"))
+
+   Of course substitute your actual password for MYPASS.
+
+\1f
+File: xemacs-faq.info,  Node: Q4.0.2,  Next: Q4.0.3,  Prev: Q4.0.1,  Up: Subsystems
+
+Q4.0.2: How do I get VM to filter mail for me?
+----------------------------------------------
+
+   One possibility is to use procmail to split your mail before it gets
+to VM.  I prefer this personally, since there are many strange and
+wonderful things one can do with procmail.  Procmail may be found at
+`ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/'.
+
+   Also see the Mail Filtering FAQ at:
+`ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/filtering-faq'.
+
+\1f
+File: xemacs-faq.info,  Node: Q4.0.3,  Next: Q4.0.4,  Prev: Q4.0.2,  Up: Subsystems
+
+Q4.0.3: How can I get VM to automatically check for new mail?
+-------------------------------------------------------------
+
+   John Turner <turner@lanl.gov> writes:
+
+     Use the following:
+
+          (setq vm-auto-get-new-mail 60)
+
+\1f
+File: xemacs-faq.info,  Node: Q4.0.4,  Next: Q4.0.5,  Prev: Q4.0.3,  Up: Subsystems
+
+Q4.0.4: [This question intentionally left blank]
+------------------------------------------------
+
+   Obsolete question, left blank to avoid renumbering.
+
+\1f
+File: xemacs-faq.info,  Node: Q4.0.5,  Next: Q4.0.6,  Prev: Q4.0.4,  Up: Subsystems
+
+Q4.0.5: How do I get my outgoing mail archived?
+-----------------------------------------------
+
+     (setq mail-archive-file-name "~/outbox")
+
index ee917b4..7c5211c 100644 (file)
@@ -7,234 +7,6 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 \1f
-File: xemacs-faq.info,  Node: Q3.10.1,  Next: Q3.10.2,  Prev: Q3.9.4,  Up: Customization
-
-3.10: Text Selections
-=====================
-
-Q3.10.1: How can I turn off or change highlighted selections?
--------------------------------------------------------------
-
-   The `zmacs' mode allows for what some might call gratuitous
-highlighting for selected regions (either by setting mark or by using
-the mouse).  This is the default behavior.  To turn off, add the
-following line to your `.emacs' file:
-
-     (setq zmacs-regions nil)
-
-   Starting with XEmacs-20.2 you can also change this with Customize.
-Select from the `Options' menu `Customize->Emacs->Editing->Basics->Zmacs
-Regions' or type `M-x customize <RET> editing-basics <RET>'.
-
-   To change the face for selection, look at `Options->Customize' on
-the menubar.
-
-\1f
-File: xemacs-faq.info,  Node: Q3.10.2,  Next: Q3.10.3,  Prev: Q3.10.1,  Up: Customization
-
-Q3.10.2: How do I get that typing on an active region removes it?
------------------------------------------------------------------
-
-   I want to change things so that if I select some text and start
-typing, the typed text replaces the selected text, similar to Motif.
-
-   You want to use something called "pending delete".  Pending delete
-is what happens when you select a region (with the mouse or keyboard)
-and you press a key to replace the selected region by the key you typed.
-Usually backspace kills the selected region.
-
-   To get this behavior, add the following line to your `.emacs':
-
-     (turn-on-pending-delete)
-
-   Note that this will work with both Backspace and Delete.
-
-\1f
-File: xemacs-faq.info,  Node: Q3.10.3,  Next: Q3.10.4,  Prev: Q3.10.2,  Up: Customization
-
-Q3.10.3: Can I turn off the highlight during isearch?
------------------------------------------------------
-
-   I do not like my text highlighted while I am doing isearch as I am
-not able to see what's underneath.  How do I turn it off?
-
-   Put the following in your `.emacs':
-
-     (setq isearch-highlight nil)
-
-   Starting with XEmacs-20.2 you can also change this with Customize.
-Type `M-x customize-variable <RET> isearch-highlight <RET>'.
-
-   Note also that isearch-highlight affects query-replace and ispell.
-Instead of disabling isearch-highlight you may find that a better
-solution consists of customizing the `isearch' face.
-
-\1f
-File: xemacs-faq.info,  Node: Q3.10.4,  Next: Q3.10.5,  Prev: Q3.10.3,  Up: Customization
-
-Q3.10.4: How do I turn off highlighting after `C-x C-p' (mark-page)?
---------------------------------------------------------------------
-
-   Put this in your `.emacs':
-
-     (setq zmacs-regions nil)
-
-   *Warning: This command turns off all region highlighting.*
-
-   Also *Note Q3.10.1::.
-
-\1f
-File: xemacs-faq.info,  Node: Q3.10.5,  Prev: Q3.10.4,  Up: Customization
-
-Q3.10.5: The region disappears when I hit the end of buffer while scrolling.
-----------------------------------------------------------------------------
-
-   This has been fixed by default starting with XEmacs-20.3.
-
-   With older versions you can turn this feature (if it indeed is a
-feature) off like this:
-
-     (defadvice scroll-up (around scroll-up freeze)
-       (interactive "_P")
-       (let ((zmacs-region-stays t))
-         (if (interactive-p)
-       (condition-case nil
-           ad-do-it
-         (end-of-buffer (goto-char (point-max))))
-           ad-do-it)))
-     
-     (defadvice scroll-down (around scroll-down freeze)
-       (interactive "_P")
-       (let ((zmacs-region-stays t))
-         (if (interactive-p)
-       (condition-case nil
-           ad-do-it
-         (beginning-of-buffer (goto-char (point-min))))
-           ad-do-it)))
-
-   Thanks to T. V. Raman <raman@adobe.com> for assistance in deriving
-this answer.
-
-\1f
-File: xemacs-faq.info,  Node: Subsystems,  Next: Miscellaneous,  Prev: Customization,  Up: Top
-
-4 Major Subsystems
-******************
-
-   This is part 4 of the XEmacs Frequently Asked Questions list.  This
-section is devoted to major XEmacs subsystems.
-
-* Menu:
-
-Reading Mail with VM:
-* Q4.0.1::      How do I set up VM to retrieve remote mail using POP?
-* Q4.0.2::      How do I get VM to filter mail for me?
-* Q4.0.3::      How can I get VM to automatically check for new mail?
-* Q4.0.4::      [This question intentionally left blank]
-* Q4.0.5::      How do I get my outgoing mail archived?
-* Q4.0.6::      I have various addresses at which I receive mail.  How can I tell VM to ignore them when doing a "reply-all"?
-* Q4.0.7::      Is there a mailing list or FAQ for VM?
-* Q4.0.8::      Remote mail reading with VM.
-* Q4.0.9::      rmail or VM gets an error incorporating new mail.
-* Q4.0.10::     How do I make VM stay in a single frame?
-* Q4.0.11::     How do I make VM or mh-e display graphical smilies?
-* Q4.0.12::     Customization of VM not covered in the manual or here.
-
-Web browsing with W3:
-* Q4.1.1::      What is W3?
-* Q4.1.2::      How do I run W3 from behind a firewall?
-* Q4.1.3::      Is it true that W3 supports style sheets and tables?
-
-Reading Netnews and Mail with Gnus:
-* Q4.2.1::      GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus,argh!
-* Q4.2.2::      [This question intentionally left blank]
-* Q4.2.3::      How do I make Gnus stay within a single frame?
-* Q4.2.4::      How do I customize the From: line?
-
-Other Mail & News:
-* Q4.3.1::      How can I read and/or compose MIME messages?
-* Q4.3.2::      What is TM and where do I get it?
-* Q4.3.3::      Why isn't this `movemail' program working?
-* Q4.3.4::      Movemail is also distributed by Netscape?  Can that cause problems?
-* Q4.3.5::      Where do I find pstogif (required by tm)?
-
-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?
-
-Infodock:
-* Q4.6.1::      What is Infodock?
-
-Other Unbundled Packages:
-* Q4.7.1::      What is AUC TeX?  Where do you get it?
-* Q4.7.2::      Are there any Emacs Lisp Spreadsheets?
-* Q4.7.3::      Byte compiling AUC TeX on XEmacs 19.14
-* Q4.7.4::      Problems installing AUC TeX
-* Q4.7.5::      Is there a reason for an Emacs package not to be included in XEmacs?
-* Q4.7.6::      Is there a MatLab mode?
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.1,  Next: Q4.0.2,  Prev: Subsystems,  Up: Subsystems
-
-4.0: Reading Mail with VM
-=========================
-
-Q4.0.1: How do I set up VM to retrieve mail from a remote site using POP?
--------------------------------------------------------------------------
-
-   Use `vm-spool-files', like this for example:
-
-     (setq vm-spool-files '("/var/spool/mail/wing"
-                            "netcom23.netcom.com:110:pass:wing:MYPASS"))
-
-   Of course substitute your actual password for MYPASS.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.2,  Next: Q4.0.3,  Prev: Q4.0.1,  Up: Subsystems
-
-Q4.0.2: How do I get VM to filter mail for me?
-----------------------------------------------
-
-   One possibility is to use procmail to split your mail before it gets
-to VM.  I prefer this personally, since there are many strange and
-wonderful things one can do with procmail.  Procmail may be found at
-`ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/'.
-
-   Also see the Mail Filtering FAQ at:
-`ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/filtering-faq'.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.3,  Next: Q4.0.4,  Prev: Q4.0.2,  Up: Subsystems
-
-Q4.0.3: How can I get VM to automatically check for new mail?
--------------------------------------------------------------
-
-   John Turner <turner@lanl.gov> writes:
-
-     Use the following:
-
-          (setq vm-auto-get-new-mail 60)
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.4,  Next: Q4.0.5,  Prev: Q4.0.3,  Up: Subsystems
-
-Q4.0.4: [This question intentionally left blank]
-------------------------------------------------
-
-   Obsolete question, left blank to avoid renumbering.
-
-\1f
-File: xemacs-faq.info,  Node: Q4.0.5,  Next: Q4.0.6,  Prev: Q4.0.4,  Up: Subsystems
-
-Q4.0.5: How do I get my outgoing mail archived?
------------------------------------------------
-
-     (setq mail-archive-file-name "~/outbox")
-
-\1f
 File: xemacs-faq.info,  Node: Q4.0.6,  Next: Q4.0.7,  Prev: Q4.0.5,  Up: Subsystems
 
 Q4.0.6: I have various addresses at which I receive mail.  How can I tell VM to ignore them when doing a "reply-all"?
@@ -880,14 +652,8 @@ Q4.7.2: Are there any Emacs Lisp Spreadsheets?
 \1f
 File: xemacs-faq.info,  Node: Q4.7.3,  Next: Q4.7.4,  Prev: Q4.7.2,  Up: Subsystems
 
-Q4.7.3: Byte compiling AUC TeX on XEmacs 19.14.
------------------------------------------------
-
-   Georges Brun-Cottan <bruncott@dormeur.inria.fr> writes:
-
-     When byte compiling auctex-9.4g, you must use the command:
-
-          xemacs -batch -l lpath.el
+Q4.7.3: [This question intentionally left blank]
+------------------------------------------------
 
 \1f
 File: xemacs-faq.info,  Node: Q4.7.4,  Next: Q4.7.5,  Prev: Q4.7.3,  Up: Subsystems
@@ -982,14 +748,14 @@ Major & Minor Modes:
 * Q5.0.8::      Why does edt emulation not work?
 * Q5.0.9::      How can I emulate VI and use it as my default mode?
 * Q5.0.10::     [This question intentionally left blank]
-* Q5.0.11::     Filladapt doesn't work in 19.15?
+* Q5.0.11::     How do I turn on filladapt for all buffers?
 * Q5.0.12::     How do I disable gnuserv from opening a new frame?
 * Q5.0.13::     How do I start gnuserv so that each subsequent XEmacs is a client?
 * Q5.0.14::     Strange things are happening in Shell Mode.
 * Q5.0.15::     Where do I get the latest CC Mode?
 * Q5.0.16::     I find auto-show-mode disconcerting.  How do I turn it off?
 * Q5.0.17::     How can I get two instances of info?
-* Q5.0.18::     I upgraded to XEmacs 19.14 and gnuserv stopped working
+* Q5.0.18::     [This question intentionally left blank]
 * Q5.0.19::     Is there something better than LaTeX mode?
 * Q5.0.20::     Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient?
 
@@ -1242,12 +1008,12 @@ Q5.0.10: [This question intentionally left blank]
 \1f
 File: xemacs-faq.info,  Node: Q5.0.11,  Next: Q5.0.12,  Prev: Q5.0.10,  Up: Miscellaneous
 
-Q5.0.11: Filladapt doesn't work in 19.15
-----------------------------------------
+Q5.0.11: How do I turn on filladapt for all buffers?
+----------------------------------------------------
 
-   Filladapt 2.x is included in 19.15.  In it filladapt is now a minor
-mode and minor modes are traditionally off by default.  The following
-added to your `.emacs' will turn it on for all buffers:
+   Filladapt is a minor mode and minor modes are traditionally off by
+default.  The following added to your `.emacs' will turn it on for all
+buffers:
 
      (setq-default filladapt-mode t)
 
@@ -1353,3 +1119,196 @@ Q5.0.17: How can I get two instances of info?
    You can't.  The `info' package does not provide for multiple info
 buffers.
 
+\1f
+File: xemacs-faq.info,  Node: Q5.0.18,  Next: Q5.0.19,  Prev: Q5.0.17,  Up: Miscellaneous
+
+Q5.0.18: [This question intentionally left blank]
+-------------------------------------------------
+
+\1f
+File: xemacs-faq.info,  Node: Q5.0.19,  Next: Q5.0.20,  Prev: Q5.0.18,  Up: Miscellaneous
+
+Q5.0.19: Is there something better than LaTeX mode?
+---------------------------------------------------
+
+   David Kastrup <dak@fsnif.neuroinformatik.ruhr-uni-bochum.de> writes:
+
+     The standard TeX modes leave much to be desired, and are somewhat
+     leniently maintained.  Serious TeX users use AUC TeX (*note
+     Q4.7.1::.).
+
+\1f
+File: xemacs-faq.info,  Node: Q5.0.20,  Next: Q5.1.1,  Prev: Q5.0.19,  Up: Miscellaneous
+
+Q5.0.20: Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient?
+---------------------------------------------------------------------------------------------------------
+
+   Jan Vroonhof <vroonhof@math.ethz.ch> writes:
+     Here is one of the solutions, we have this in a script called
+     `etc/editclient.sh'.
+           #!/bin/sh
+           if gnuclient -batch -eval t >/dev/null 2>&1
+           then
+             exec gnuclient ${1+"$@"}
+           else
+             xemacs -unmapped -f gnuserv-start &
+             until gnuclient -batch -eval t >/dev/null 2>&1
+             do
+                sleep 1
+             done
+             exec gnuclient ${1+"$@"}
+           fi
+
+     Note that there is a known problem when running XEmacs and
+     'gnuclient -nw' on the same TTY.
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.1,  Next: Q5.1.2,  Prev: Q5.0.20,  Up: Miscellaneous
+
+5.1: Emacs Lisp Programming Techniques
+======================================
+
+Q5.1.1: What is the difference in key sequences between XEmacs and GNU Emacs?
+-----------------------------------------------------------------------------
+
+   Erik Naggum <clerik@naggum.no> writes;
+
+     Emacs has a legacy of keyboards that produced characters with
+     modifier bits, and therefore map a variety of input systems into
+     this scheme even today.  XEmacs is instead optimized for X events.
+     This causes an incompatibility in the way key sequences are
+     specified, but both Emacs and XEmacs will accept a key sequence as
+     a vector of lists of modifiers that ends with a key, e.g., to bind
+     `M-C-a', you would say `[(meta control a)]' in both Emacsen.
+     XEmacs has an abbreviated form for a single key, just (meta
+     control a).  Emacs has an abbreviated form for the Control and the
+     Meta modifiers to string-characters (the ASCII characters), as in
+     `\M-\C-a'.  XEmacs users need to be aware that the abbreviated
+     form works only for one-character key sequences, while Emacs users
+     need to be aware that the string-character is rather limited.
+     Specifically, the string-character can accommodate only 256
+     different values, 128 of which have the Meta modifier and 128 of
+     which have not.  In each of these blocks, only 32 characters have
+     the Control modifier.  Whereas `[(meta control A)]' differs from
+     `[(meta control a)]' because the case differs, `\M-\C-a' and
+     `\M-\C-A' do not.  Programmers are advised to use the full common
+     form, both because it is more readable and less error-prone, and
+     because it is supported by both Emacsen.
+
+   Another (even safer) way to be sure of the key-sequences is to use
+the `read-kbd-macro' function, which takes a string like `C-c <up>',
+and converts it to the internal key representation of the Emacs you
+use.  The function is available both on XEmacs and GNU Emacs.
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.2,  Next: Q5.1.3,  Prev: Q5.1.1,  Up: Miscellaneous
+
+Q5.1.2: Can I generate "fake" keyboard events?
+----------------------------------------------
+
+   I wonder if there is an interactive function that can generate
+"fake" keyboard events.  This way, I could simply map them inside
+XEmacs.
+
+   This seems to work:
+
+     (defun cg--generate-char-event (ch)
+       "Generate an event, as if ch has been typed"
+       (dispatch-event (character-to-event ch)))
+     
+     ;;  Backspace and Delete stuff
+     (global-set-key [backspace]
+       (lambda () (interactive) (cg--generate-char-event 127)))
+     (global-set-key [unknown_keysym_0x4]
+       (lambda () (interactive) (cg--generate-char-event 4)))
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.3,  Next: Q5.1.4,  Prev: Q5.1.2,  Up: Miscellaneous
+
+Q5.1.3: Could you explain `read-kbd-macro' in more detail?
+----------------------------------------------------------
+
+   The `read-kbd-macro' function returns the internal Emacs
+representation of a human-readable string (which is its argument).
+Thus:
+
+     (read-kbd-macro "C-c C-a")
+     => [(control ?c) (control ?a)]
+     
+     (read-kbd-macro "C-c C-. <up>")
+     => [(control ?c) (control ?.) up]
+
+   In GNU Emacs the same forms will be evaluated to what GNU Emacs
+understands internally--the sequences `"\C-x\C-c"' and `[3 67108910
+up]', respectively.
+
+   The exact "human-readable" syntax is defined in the docstring of
+`edmacro-mode'.  I'll repeat it here, for completeness.
+
+     Format of keyboard macros during editing:
+
+     Text is divided into "words" separated by whitespace.  Except for
+     the words described below, the characters of each word go directly
+     as characters of the macro.  The whitespace that separates words is
+     ignored.  Whitespace in the macro must be written explicitly, as in
+     `foo <SPC> bar <RET>'.
+
+        * The special words `RET', `SPC', `TAB', `DEL', `LFD', `ESC',
+          and `NUL' represent special control characters.  The words
+          must be written in uppercase.
+
+        * A word in angle brackets, e.g., `<return>', `<down>', or
+          `<f1>', represents a function key.  (Note that in the standard
+          configuration, the function key `<return>' and the control key
+          <RET> are synonymous.)  You can use angle brackets on the
+          words <RET>, <SPC>, etc., but they are not required there.
+
+        * Keys can be written by their ASCII code, using a backslash
+          followed by up to six octal digits.  This is the only way to
+          represent keys with codes above \377.
+
+        * One or more prefixes `M-' (meta), `C-' (control), `S-'
+          (shift), `A-' (alt), `H-' (hyper), and `s-' (super) may
+          precede a character or key notation.  For function keys, the
+          prefixes may go inside or outside of the brackets: `C-<down>'
+          == `<C-down>'.  The prefixes may be written in any order:
+          `M-C-x' == `C-M-x'.
+
+          Prefixes are not allowed on multi-key words, e.g., `C-abc',
+          except that the Meta prefix is allowed on a sequence of
+          digits and optional minus sign: `M--123' == `M-- M-1 M-2 M-3'.
+
+        * The `^' notation for control characters also works: `^M' ==
+          `C-m'.
+
+        * Double angle brackets enclose command names: `<<next-line>>'
+          is shorthand for `M-x next-line <RET>'.
+
+        * Finally, `REM' or `;;' causes the rest of the line to be
+          ignored as a comment.
+
+     Any word may be prefixed by a multiplier in the form of a decimal
+     number and `*': `3*<right>' == `<right> <right> <right>', and
+     `10*foo' == `foofoofoofoofoofoofoofoofoofoo'.
+
+     Multiple text keys can normally be strung together to form a word,
+     but you may need to add whitespace if the word would look like one
+     of the above notations: `; ; ;' is a keyboard macro with three
+     semicolons, but `;;;' is a comment.  Likewise, `\ 1 2 3' is four
+     keys but `\123' is a single key written in octal, and `< right >'
+     is seven keys but `<right>' is a single function key.  When in
+     doubt, use whitespace.
+
+\1f
+File: xemacs-faq.info,  Node: Q5.1.4,  Next: Q5.1.5,  Prev: Q5.1.3,  Up: Miscellaneous
+
+Q5.1.4: What is the performance hit of `let'?
+---------------------------------------------
+
+   In most cases, not noticeable.  Besides, there's no avoiding
+`let'--you have to bind your local variables, after all.  Some pose a
+question whether to nest `let's, or use one `let' per function.  I
+think because of clarity and maintenance (and possible future
+implementation), `let'-s should be used (nested) in a way to provide
+the clearest code.
+
index 5bfab0e..aee6168 100644 (file)
@@ -7,206 +7,6 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 \1f
-File: xemacs-faq.info,  Node: Q5.0.18,  Next: Q5.0.19,  Prev: Q5.0.17,  Up: Miscellaneous
-
-Q5.0.18: I upgraded to XEmacs 19.14 and gnuserv stopped working.
-----------------------------------------------------------------
-
-   Mark Daku <daku@nortel.ca> writes:
-
-     It turns out I was using an older version of gnuserv.  The
-     installation didn't put the binary into the public bin directory.
-     It put it in `lib/xemacs-19.14/hppa1.1-hp-hpux9.05/gnuserv'.
-     Shouldn't it have been put in `bin/hppa1.1-hp-hpux9.0'?
-
-\1f
-File: xemacs-faq.info,  Node: Q5.0.19,  Next: Q5.0.20,  Prev: Q5.0.18,  Up: Miscellaneous
-
-Q5.0.19: Is there something better than LaTeX mode?
----------------------------------------------------
-
-   David Kastrup <dak@fsnif.neuroinformatik.ruhr-uni-bochum.de> writes:
-
-     The standard TeX modes leave much to be desired, and are somewhat
-     leniently maintained.  Serious TeX users use AUC TeX (*note
-     Q4.7.1::.).
-
-\1f
-File: xemacs-faq.info,  Node: Q5.0.20,  Next: Q5.1.1,  Prev: Q5.0.19,  Up: Miscellaneous
-
-Q5.0.20: Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient?
----------------------------------------------------------------------------------------------------------
-
-   Jan Vroonhof <vroonhof@math.ethz.ch> writes:
-     Here is one of the solutions, we have this in a script called
-     `etc/editclient.sh'.
-           #!/bin/sh
-           if gnuclient -batch -eval t >/dev/null 2>&1
-           then
-             exec gnuclient ${1+"$@"}
-           else
-             xemacs -unmapped -f gnuserv-start &
-             until gnuclient -batch -eval t >/dev/null 2>&1
-             do
-                sleep 1
-             done
-             exec gnuclient ${1+"$@"}
-           fi
-
-     Note that there is a known problem when running XEmacs and
-     'gnuclient -nw' on the same TTY.
-
-\1f
-File: xemacs-faq.info,  Node: Q5.1.1,  Next: Q5.1.2,  Prev: Q5.0.20,  Up: Miscellaneous
-
-5.1: Emacs Lisp Programming Techniques
-======================================
-
-Q5.1.1: What is the difference in key sequences between XEmacs and GNU Emacs?
------------------------------------------------------------------------------
-
-   Erik Naggum <clerik@naggum.no> writes;
-
-     Emacs has a legacy of keyboards that produced characters with
-     modifier bits, and therefore map a variety of input systems into
-     this scheme even today.  XEmacs is instead optimized for X events.
-     This causes an incompatibility in the way key sequences are
-     specified, but both Emacs and XEmacs will accept a key sequence as
-     a vector of lists of modifiers that ends with a key, e.g., to bind
-     `M-C-a', you would say `[(meta control a)]' in both Emacsen.
-     XEmacs has an abbreviated form for a single key, just (meta
-     control a).  Emacs has an abbreviated form for the Control and the
-     Meta modifiers to string-characters (the ASCII characters), as in
-     `\M-\C-a'.  XEmacs users need to be aware that the abbreviated
-     form works only for one-character key sequences, while Emacs users
-     need to be aware that the string-character is rather limited.
-     Specifically, the string-character can accommodate only 256
-     different values, 128 of which have the Meta modifier and 128 of
-     which have not.  In each of these blocks, only 32 characters have
-     the Control modifier.  Whereas `[(meta control A)]' differs from
-     `[(meta control a)]' because the case differs, `\M-\C-a' and
-     `\M-\C-A' do not.  Programmers are advised to use the full common
-     form, both because it is more readable and less error-prone, and
-     because it is supported by both Emacsen.
-
-   Another (even safer) way to be sure of the key-sequences is to use
-the `read-kbd-macro' function, which takes a string like `C-c <up>',
-and converts it to the internal key representation of the Emacs you
-use.  The function is available both on XEmacs and GNU Emacs.
-
-\1f
-File: xemacs-faq.info,  Node: Q5.1.2,  Next: Q5.1.3,  Prev: Q5.1.1,  Up: Miscellaneous
-
-Q5.1.2: Can I generate "fake" keyboard events?
-----------------------------------------------
-
-   I wonder if there is an interactive function that can generate
-"fake" keyboard events.  This way, I could simply map them inside
-XEmacs.
-
-   This seems to work:
-
-     (defun cg--generate-char-event (ch)
-       "Generate an event, as if ch has been typed"
-       (dispatch-event (character-to-event ch)))
-     
-     ;;  Backspace and Delete stuff
-     (global-set-key [backspace]
-       (lambda () (interactive) (cg--generate-char-event 127)))
-     (global-set-key [unknown_keysym_0x4]
-       (lambda () (interactive) (cg--generate-char-event 4)))
-
-\1f
-File: xemacs-faq.info,  Node: Q5.1.3,  Next: Q5.1.4,  Prev: Q5.1.2,  Up: Miscellaneous
-
-Q5.1.3: Could you explain `read-kbd-macro' in more detail?
-----------------------------------------------------------
-
-   The `read-kbd-macro' function returns the internal Emacs
-representation of a human-readable string (which is its argument).
-Thus:
-
-     (read-kbd-macro "C-c C-a")
-     => [(control ?c) (control ?a)]
-     
-     (read-kbd-macro "C-c C-. <up>")
-     => [(control ?c) (control ?.) up]
-
-   In GNU Emacs the same forms will be evaluated to what GNU Emacs
-understands internally--the sequences `"\C-x\C-c"' and `[3 67108910
-up]', respectively.
-
-   The exact "human-readable" syntax is defined in the docstring of
-`edmacro-mode'.  I'll repeat it here, for completeness.
-
-     Format of keyboard macros during editing:
-
-     Text is divided into "words" separated by whitespace.  Except for
-     the words described below, the characters of each word go directly
-     as characters of the macro.  The whitespace that separates words is
-     ignored.  Whitespace in the macro must be written explicitly, as in
-     `foo <SPC> bar <RET>'.
-
-        * The special words `RET', `SPC', `TAB', `DEL', `LFD', `ESC',
-          and `NUL' represent special control characters.  The words
-          must be written in uppercase.
-
-        * A word in angle brackets, e.g., `<return>', `<down>', or
-          `<f1>', represents a function key.  (Note that in the standard
-          configuration, the function key `<return>' and the control key
-          <RET> are synonymous.)  You can use angle brackets on the
-          words <RET>, <SPC>, etc., but they are not required there.
-
-        * Keys can be written by their ASCII code, using a backslash
-          followed by up to six octal digits.  This is the only way to
-          represent keys with codes above \377.
-
-        * One or more prefixes `M-' (meta), `C-' (control), `S-'
-          (shift), `A-' (alt), `H-' (hyper), and `s-' (super) may
-          precede a character or key notation.  For function keys, the
-          prefixes may go inside or outside of the brackets: `C-<down>'
-          == `<C-down>'.  The prefixes may be written in any order:
-          `M-C-x' == `C-M-x'.
-
-          Prefixes are not allowed on multi-key words, e.g., `C-abc',
-          except that the Meta prefix is allowed on a sequence of
-          digits and optional minus sign: `M--123' == `M-- M-1 M-2 M-3'.
-
-        * The `^' notation for control characters also works: `^M' ==
-          `C-m'.
-
-        * Double angle brackets enclose command names: `<<next-line>>'
-          is shorthand for `M-x next-line <RET>'.
-
-        * Finally, `REM' or `;;' causes the rest of the line to be
-          ignored as a comment.
-
-     Any word may be prefixed by a multiplier in the form of a decimal
-     number and `*': `3*<right>' == `<right> <right> <right>', and
-     `10*foo' == `foofoofoofoofoofoofoofoofoofoo'.
-
-     Multiple text keys can normally be strung together to form a word,
-     but you may need to add whitespace if the word would look like one
-     of the above notations: `; ; ;' is a keyboard macro with three
-     semicolons, but `;;;' is a comment.  Likewise, `\ 1 2 3' is four
-     keys but `\123' is a single key written in octal, and `< right >'
-     is seven keys but `<right>' is a single function key.  When in
-     doubt, use whitespace.
-
-\1f
-File: xemacs-faq.info,  Node: Q5.1.4,  Next: Q5.1.5,  Prev: Q5.1.3,  Up: Miscellaneous
-
-Q5.1.4: What is the performance hit of `let'?
----------------------------------------------
-
-   In most cases, not noticeable.  Besides, there's no avoiding
-`let'--you have to bind your local variables, after all.  Some pose a
-question whether to nest `let's, or use one `let' per function.  I
-think because of clarity and maintenance (and possible future
-implementation), `let'-s should be used (nested) in a way to provide
-the clearest code.
-
-\1f
 File: xemacs-faq.info,  Node: Q5.1.5,  Next: Q5.1.6,  Prev: Q5.1.4,  Up: Miscellaneous
 
 Q5.1.5: What is the recommended use of `setq'?
index 30b2eb9..025a499 100644 (file)
@@ -32,367 +32,376 @@ translation approved by the author instead of in the original English.
 \1f
 Indirect:
 xemacs.info-1: 1376
-xemacs.info-2: 47962
-xemacs.info-3: 95922
-xemacs.info-4: 144039
-xemacs.info-5: 192257
-xemacs.info-6: 241624
-xemacs.info-7: 290451
-xemacs.info-8: 340004
-xemacs.info-9: 385299
-xemacs.info-10: 433131
-xemacs.info-11: 482312
-xemacs.info-12: 531469
-xemacs.info-13: 580295
-xemacs.info-14: 628442
-xemacs.info-15: 677205
-xemacs.info-16: 726733
-xemacs.info-17: 775300
-xemacs.info-18: 819223
-xemacs.info-19: 860399
-xemacs.info-20: 908395
-xemacs.info-21: 949115
+xemacs.info-2: 47959
+xemacs.info-3: 95919
+xemacs.info-4: 144458
+xemacs.info-5: 189739
+xemacs.info-6: 237817
+xemacs.info-7: 286851
+xemacs.info-8: 336203
+xemacs.info-9: 383958
+xemacs.info-10: 433277
+xemacs.info-11: 483121
+xemacs.info-12: 532985
+xemacs.info-13: 582101
+xemacs.info-14: 631467
+xemacs.info-15: 681294
+xemacs.info-16: 729790
+xemacs.info-17: 778447
+xemacs.info-18: 828082
+xemacs.info-19: 872453
+xemacs.info-20: 921124
+xemacs.info-21: 963031
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f1376
-Node: License\7f22528
-Node: Distrib\7f35810
-Node: Intro\7f37474
-Node: Frame\7f40345
-Node: Point\7f43617
-Node: Echo Area\7f45584
-Node: Mode Line\7f47962
-Node: XEmacs under X\7f52393
-Node: Keystrokes\7f55571
-Node: Intro to Keystrokes\7f56415
-Node: Representing Keystrokes\7f58518
-Node: Key Sequences\7f59875
-Node: String Key Sequences\7f63215
-Node: Meta Key\7f63598
-Node: Super and Hyper Keys\7f65071
-Node: Character Representation\7f71295
-Node: Commands\7f72315
-Node: Pull-down Menus\7f75164
-Node: File Menu\7f78513
-Node: Edit Menu\7f82335
-Node: Apps Menu\7f84720
-Node: Options Menu\7f85210
-Node: Buffers Menu\7f89190
-Node: Tools Menu\7f89497
-Node: Help Menu\7f89988
-Node: Menu Customization\7f90389
-Node: Entering Emacs\7f94619
-Node: Exiting\7f95922
-Node: Command Switches\7f99014
-Node: Startup Paths\7f108203
-Node: Basic\7f115784
-Node: Blank Lines\7f125267
-Node: Continuation Lines\7f126693
-Node: Position Info\7f128127
-Node: Arguments\7f131261
-Node: Undo\7f134398
-Node: Minibuffer\7f137345
-Node: Minibuffer File\7f139829
-Node: Minibuffer Edit\7f141466
-Node: Completion\7f144039
-Node: Repetition\7f150914
-Node: M-x\7f153706
-Node: Help\7f158800
-Node: Mark\7f168722
-Node: Setting Mark\7f170576
-Node: Using Region\7f173698
-Node: Marking Objects\7f174443
-Node: Mark Ring\7f176284
-Node: Mouse Selection\7f178000
-Node: Additional Mouse Operations\7f180008
-Node: Killing\7f184212
-Node: Yanking\7f189852
-Node: Kill Ring\7f190655
-Node: Appending Kills\7f192257
-Node: Earlier Kills\7f194294
-Node: Using X Selections\7f196907
-Node: X Clipboard Selection\7f198157
-Node: X Selection Commands\7f200334
-Node: X Cut Buffers\7f201420
-Node: Active Regions\7f202779
-Node: Accumulating Text\7f207359
-Node: Rectangles\7f210432
-Node: Registers\7f213951
-Node: RegPos\7f214986
-Node: RegText\7f215889
-Node: RegRect\7f216973
-Node: Display\7f217713
-Node: Scrolling\7f219208
-Node: Horizontal Scrolling\7f223351
-Node: Selective Display\7f224547
-Node: Display Vars\7f225766
-Node: Search\7f228444
-Node: Incremental Search\7f229637
-Node: Non-Incremental Search\7f238564
-Node: Word Search\7f240006
-Node: Regexp Search\7f241624
-Node: Regexps\7f243160
-Node: Search Case\7f253461
-Node: Replace\7f254242
-Node: Unconditional Replace\7f255190
-Node: Regexp Replace\7f256326
-Node: Replacement and Case\7f257261
-Node: Query Replace\7f258241
-Node: Other Repeating Search\7f261474
-Node: Fixit\7f262729
-Node: Kill Errors\7f263309
-Node: Transpose\7f264642
-Node: Fixing Case\7f267047
-Node: Spelling\7f267693
-Node: Files\7f269154
-Node: File Names\7f270462
-Node: Visiting\7f274800
-Node: Saving\7f281490
-Node: Backup\7f286413
-Node: Backup Names\7f287809
-Node: Backup Deletion\7f289292
-Node: Backup Copying\7f290451
-Node: Interlocking\7f292158
-Node: Reverting\7f296286
-Node: Auto Save\7f298199
-Node: Auto Save Files\7f299166
-Node: Auto Save Control\7f301007
-Node: Recover\7f302846
-Node: Version Control\7f304001
-Node: Concepts of VC\7f306039
-Node: Editing with VC\7f307649
-Node: Variables for Check-in/out\7f312905
-Node: Log Entries\7f314804
-Node: Change Logs and VC\7f315984
-Node: Old Versions\7f319252
-Node: VC Status\7f321256
-Node: Renaming and VC\7f322970
-Node: Snapshots\7f323651
-Node: Making Snapshots\7f324152
-Node: Snapshot Caveats\7f325446
-Node: Version Headers\7f327255
-Node: ListDir\7f329954
-Node: Comparing Files\7f332003
-Node: Dired\7f333536
-Node: Dired Enter\7f334207
-Node: Dired Edit\7f335032
-Node: Dired Deletion\7f336779
-Node: Dired Immed\7f340004
-Node: Misc File Ops\7f341280
-Node: Buffers\7f343769
-Node: Select Buffer\7f345929
-Node: List Buffers\7f347726
-Node: Misc Buffer\7f349472
-Node: Kill Buffer\7f351116
-Node: Several Buffers\7f352246
-Node: Windows\7f356112
-Node: Basic Window\7f356823
-Node: Split Window\7f358542
-Node: Other Window\7f360675
-Node: Pop Up Window\7f363105
-Node: Change Window\7f364612
-Node: Mule\7f367520
-Node: Mule Intro\7f368783
-Node: Language Environments\7f369799
-Node: Input Methods\7f371907
-Node: Select Input Method\7f375627
-Node: Coding Systems\7f377782
-Node: Recognize Coding\7f381970
-Node: Specify Coding\7f385299
-Node: Major Modes\7f390230
-Node: Choosing Modes\7f392452
-Node: Indentation\7f394842
-Node: Indentation Commands\7f396937
-Node: Tab Stops\7f399666
-Node: Just Spaces\7f401515
-Node: Text\7f402330
-Node: Text Mode\7f404313
-Node: Nroff Mode\7f406394
-Node: TeX Mode\7f408038
-Node: TeX Editing\7f410290
-Node: TeX Print\7f413725
-Node: Outline Mode\7f416945
-Node: Outline Format\7f418426
-Node: Outline Motion\7f421226
-Node: Outline Visibility\7f422779
-Node: Words\7f425700
-Node: Sentences\7f428647
-Node: Paragraphs\7f430843
-Node: Pages\7f433131
-Node: Filling\7f435731
-Node: Auto Fill\7f436302
-Node: Fill Commands\7f438450
-Node: Fill Prefix\7f440616
-Node: Case\7f442804
-Node: Programs\7f444832
-Node: Program Modes\7f447390
-Node: Lists\7f449622
-Node: Defuns\7f455462
-Node: Grinding\7f458115
-Node: Basic Indent\7f458743
-Node: Multi-line Indent\7f460764
-Node: Lisp Indent\7f462380
-Node: C Indent\7f465830
-Node: Matching\7f471070
-Node: Comments\7f472592
-Node: Balanced Editing\7f479044
-Node: Lisp Completion\7f480058
-Node: Documentation\7f481073
-Node: Change Log\7f482312
-Node: Tags\7f484890
-Node: Tag Syntax\7f486539
-Node: Create Tags Table\7f490484
-Node: Etags Regexps\7f494545
-Node: Select Tags Table\7f499203
-Node: Find Tag\7f502941
-Node: Tags Search\7f505905
-Node: List Tags\7f509362
-Node: Fortran\7f510391
-Node: Fortran Motion\7f511467
-Node: Fortran Indent\7f512287
-Node: ForIndent Commands\7f512972
-Node: ForIndent Num\7f514117
-Node: ForIndent Conv\7f515391
-Node: ForIndent Vars\7f516167
-Node: Fortran Comments\7f517335
-Node: Fortran Columns\7f520934
-Node: Fortran Abbrev\7f522357
-Node: Asm Mode\7f523267
-Node: Running\7f523819
-Node: Compilation\7f524789
-Node: Lisp Modes\7f529640
-Node: Lisp Libraries\7f530914
-Node: Loading\7f531469
-Node: Compiling Libraries\7f535929
-Node: Mocklisp\7f538820
-Node: Lisp Eval\7f539497
-Node: Lisp Debug\7f543137
-Node: Lisp Interaction\7f548563
-Node: External Lisp\7f549918
-Node: Packages\7f551993
-Node: Package Terminology\7f552734
-Node: Using Packages\7f554092
-Node: Building Packages\7f562881
-Node: Abbrevs\7f565403
-Node: Defining Abbrevs\7f567603
-Node: Expanding Abbrevs\7f570050
-Node: Editing Abbrevs\7f572752
-Node: Saving Abbrevs\7f574620
-Node: Dynamic Abbrevs\7f576560
-Node: Picture\7f577862
-Node: Basic Picture\7f580295
-Node: Insert in Picture\7f582582
-Node: Tabs in Picture\7f584004
-Node: Rectangles in Picture\7f585525
-Node: Sending Mail\7f587434
-Node: Mail Format\7f589145
-Node: Mail Headers\7f590495
-Node: Mail Mode\7f596905
-Node: Reading Mail\7f600518
-Node: Calendar/Diary\7f602093
-Node: Calendar Motion\7f603765
-Node: Calendar Unit Motion\7f604648
-Node: Move to Beginning or End\7f606971
-Node: Specified Dates\7f608104
-Node: Scroll Calendar\7f608993
-Node: Mark and Region\7f610784
-Node: General Calendar\7f612691
-Node: LaTeX Calendar\7f614299
-Node: Holidays\7f616313
-Node: Sunrise/Sunset\7f619416
-Node: Lunar Phases\7f622459
-Node: Other Calendars\7f623844
-Node: Calendar Systems\7f625331
-Node: To Other Calendar\7f628442
-Node: From Other Calendar\7f630433
-Node: Mayan Calendar\7f632739
-Node: Diary\7f635935
-Node: Diary Commands\7f637685
-Node: Format of Diary File\7f640994
-Node: Date Formats\7f643864
-Node: Adding to Diary\7f646438
-Node: Special Diary Entries\7f648069
-Node: Calendar Customization\7f653409
-Node: Calendar Customizing\7f654271
-Node: Holiday Customizing\7f657491
-Node: Date Display Format\7f663959
-Node: Time Display Format\7f664917
-Node: Daylight Savings\7f666055
-Node: Diary Customizing\7f669243
-Node: Hebrew/Islamic Entries\7f673865
-Node: Fancy Diary Display\7f677205
-Node: Included Diary Files\7f679102
-Node: Sexp Diary Entries\7f680083
-Node: Appt Customizing\7f685173
-Node: Sorting\7f686219
-Node: Shell\7f691025
-Node: Single Shell\7f692318
-Node: Interactive Shell\7f693917
-Node: Shell Mode\7f697682
-Node: Terminal emulator\7f700173
-Node: Term Mode\7f702483
-Node: Paging in Term\7f703397
-Node: Narrowing\7f704195
-Node: Hardcopy\7f706145
-Node: Recursive Edit\7f707117
-Node: Dissociated Press\7f710104
-Node: CONX\7f712667
-Node: Amusements\7f713691
-Node: Emulation\7f714171
-Node: Customization\7f716015
-Node: Minor Modes\7f717739
-Node: Variables\7f719371
-Node: Examining\7f721329
-Node: Easy Customization\7f722790
-Node: Customization Groups\7f723804
-Node: Changing an Option\7f726733
-Node: Face Customization\7f732989
-Node: Specific Customization\7f734754
-Node: Edit Options\7f737361
-Node: Locals\7f738945
-Node: File Variables\7f742124
-Node: Keyboard Macros\7f746651
-Node: Basic Kbd Macro\7f748822
-Node: Save Kbd Macro\7f750754
-Node: Kbd Macro Query\7f752426
-Node: Key Bindings\7f754368
-Node: Keymaps\7f755242
-Node: Rebinding\7f759092
-Node: Interactive Rebinding\7f759788
-Node: Programmatic Rebinding\7f761980
-Node: Key Bindings Using Strings\7f764787
-Node: Disabling\7f766393
-Node: Syntax\7f768165
-Node: Syntax Entry\7f769046
-Node: Syntax Change\7f773130
-Node: Init File\7f775300
-Node: Init Syntax\7f776808
-Node: Init Examples\7f779161
-Node: Terminal Init\7f783352
-Node: Audible Bell\7f785062
-Node: Faces\7f788493
-Node: X Resources\7f793330
-Node: Geometry Resources\7f794951
-Node: Iconic Resources\7f797399
-Node: Resource List\7f797871
-Node: Face Resources\7f804378
-Node: Widgets\7f808055
-Node: Menubar Resources\7f808994
-Node: Quitting\7f809927
-Node: Lossage\7f812906
-Node: Stuck Recursive\7f813549
-Node: Screen Garbled\7f814255
-Node: Text Garbled\7f815389
-Node: Unasked-for Search\7f816028
-Node: Emergency Escape\7f816813
-Node: Total Frustration\7f818592
-Node: Bugs\7f819223
-Node: Glossary\7f828758
-Node: Manifesto\7f860399
-Node: Key Index\7f883875
-Node: Command Index\7f908395
-Node: Variable Index\7f949115
-Node: Concept Index\7f965066
+Node: License\7f22525
+Node: Distrib\7f35807
+Node: Intro\7f37471
+Node: Frame\7f40342
+Node: Point\7f43614
+Node: Echo Area\7f45581
+Node: Mode Line\7f47959
+Node: XEmacs under X\7f52390
+Node: Keystrokes\7f55568
+Node: Intro to Keystrokes\7f56412
+Node: Representing Keystrokes\7f58515
+Node: Key Sequences\7f59872
+Node: String Key Sequences\7f63212
+Node: Meta Key\7f63595
+Node: Super and Hyper Keys\7f65068
+Node: Character Representation\7f71292
+Node: Commands\7f72312
+Node: Pull-down Menus\7f75161
+Node: File Menu\7f78510
+Node: Edit Menu\7f82332
+Node: Apps Menu\7f84717
+Node: Options Menu\7f85207
+Node: Buffers Menu\7f89187
+Node: Tools Menu\7f89494
+Node: Help Menu\7f89985
+Node: Menu Customization\7f90386
+Node: Entering Emacs\7f94616
+Node: Exiting\7f95919
+Node: Command Switches\7f99011
+Node: Startup Paths\7f108200
+Node: Basic\7f115781
+Node: Blank Lines\7f125264
+Node: Continuation Lines\7f126690
+Node: Position Info\7f128124
+Node: Arguments\7f131258
+Node: Undo\7f134395
+Node: Minibuffer\7f137342
+Node: Minibuffer File\7f139952
+Node: Minibuffer Edit\7f141758
+Node: Completion\7f144458
+Node: Completion Example\7f146389
+Node: Completion Commands\7f147483
+Node: Strict Completion\7f150139
+Node: Completion Options\7f151921
+Node: Minibuffer History\7f153215
+Node: Repetition\7f156400
+Node: M-x\7f159233
+Node: Help\7f164327
+Node: Mark\7f174249
+Node: Setting Mark\7f176103
+Node: Using Region\7f179225
+Node: Marking Objects\7f179970
+Node: Mark Ring\7f181811
+Node: Mouse Selection\7f183527
+Node: Additional Mouse Operations\7f185535
+Node: Killing\7f189739
+Node: Yanking\7f195379
+Node: Kill Ring\7f196182
+Node: Appending Kills\7f197784
+Node: Earlier Kills\7f199821
+Node: Using X Selections\7f202434
+Node: X Clipboard Selection\7f203684
+Node: X Selection Commands\7f205861
+Node: X Cut Buffers\7f206947
+Node: Active Regions\7f208306
+Node: Accumulating Text\7f212886
+Node: Rectangles\7f215959
+Node: Registers\7f219478
+Node: RegPos\7f220933
+Node: RegText\7f222089
+Node: RegRect\7f223195
+Node: RegConfig\7f224074
+Node: RegNumbers\7f225014
+Node: RegFiles\7f225733
+Node: Bookmarks\7f226391
+Node: Display\7f229764
+Node: Scrolling\7f231259
+Node: Horizontal Scrolling\7f235402
+Node: Selective Display\7f236598
+Node: Display Vars\7f237817
+Node: Search\7f240495
+Node: Incremental Search\7f241688
+Node: Non-Incremental Search\7f250615
+Node: Word Search\7f252057
+Node: Regexp Search\7f253675
+Node: Regexps\7f255211
+Node: Search Case\7f265512
+Node: Replace\7f266293
+Node: Unconditional Replace\7f267241
+Node: Regexp Replace\7f268377
+Node: Replacement and Case\7f269312
+Node: Query Replace\7f270292
+Node: Other Repeating Search\7f273525
+Node: Fixit\7f274780
+Node: Kill Errors\7f275360
+Node: Transpose\7f276693
+Node: Fixing Case\7f279098
+Node: Spelling\7f279744
+Node: Files\7f281205
+Node: File Names\7f282513
+Node: Visiting\7f286851
+Node: Saving\7f293541
+Node: Backup\7f298464
+Node: Backup Names\7f299860
+Node: Backup Deletion\7f301343
+Node: Backup Copying\7f302502
+Node: Interlocking\7f304209
+Node: Reverting\7f308337
+Node: Auto Save\7f310250
+Node: Auto Save Files\7f311217
+Node: Auto Save Control\7f313058
+Node: Recover\7f314897
+Node: Version Control\7f316052
+Node: Concepts of VC\7f318090
+Node: Editing with VC\7f319700
+Node: Variables for Check-in/out\7f324956
+Node: Log Entries\7f326855
+Node: Change Logs and VC\7f328035
+Node: Old Versions\7f331303
+Node: VC Status\7f333307
+Node: Renaming and VC\7f335021
+Node: Snapshots\7f335702
+Node: Making Snapshots\7f336203
+Node: Snapshot Caveats\7f337497
+Node: Version Headers\7f339306
+Node: ListDir\7f342005
+Node: Comparing Files\7f344054
+Node: Dired\7f345587
+Node: Dired Enter\7f346258
+Node: Dired Edit\7f347083
+Node: Dired Deletion\7f348830
+Node: Dired Immed\7f352055
+Node: Misc File Ops\7f353331
+Node: Buffers\7f355820
+Node: Select Buffer\7f357980
+Node: List Buffers\7f359777
+Node: Misc Buffer\7f361523
+Node: Kill Buffer\7f363167
+Node: Several Buffers\7f364297
+Node: Windows\7f368163
+Node: Basic Window\7f368874
+Node: Split Window\7f370593
+Node: Other Window\7f372726
+Node: Pop Up Window\7f375156
+Node: Change Window\7f376663
+Node: Mule\7f379571
+Node: Mule Intro\7f380834
+Node: Language Environments\7f381850
+Node: Input Methods\7f383958
+Node: Select Input Method\7f387678
+Node: Coding Systems\7f389833
+Node: Recognize Coding\7f394021
+Node: Specify Coding\7f397350
+Node: Major Modes\7f402281
+Node: Choosing Modes\7f404503
+Node: Indentation\7f406893
+Node: Indentation Commands\7f408988
+Node: Tab Stops\7f411717
+Node: Just Spaces\7f413566
+Node: Text\7f414381
+Node: Text Mode\7f416364
+Node: Nroff Mode\7f418445
+Node: TeX Mode\7f420089
+Node: TeX Editing\7f422341
+Node: TeX Print\7f425776
+Node: Outline Mode\7f428996
+Node: Outline Format\7f430477
+Node: Outline Motion\7f433277
+Node: Outline Visibility\7f434830
+Node: Words\7f437751
+Node: Sentences\7f440698
+Node: Paragraphs\7f442894
+Node: Pages\7f445182
+Node: Filling\7f447782
+Node: Auto Fill\7f448353
+Node: Fill Commands\7f450501
+Node: Fill Prefix\7f452667
+Node: Case\7f454855
+Node: Programs\7f456883
+Node: Program Modes\7f459441
+Node: Lists\7f461673
+Node: Defuns\7f467513
+Node: Grinding\7f470166
+Node: Basic Indent\7f470794
+Node: Multi-line Indent\7f472815
+Node: Lisp Indent\7f474431
+Node: C Indent\7f477881
+Node: Matching\7f483121
+Node: Comments\7f484643
+Node: Balanced Editing\7f491095
+Node: Lisp Completion\7f492109
+Node: Documentation\7f493124
+Node: Change Log\7f494363
+Node: Tags\7f496941
+Node: Tag Syntax\7f498590
+Node: Create Tags Table\7f502535
+Node: Etags Regexps\7f506596
+Node: Select Tags Table\7f511254
+Node: Find Tag\7f514992
+Node: Tags Search\7f517956
+Node: List Tags\7f521413
+Node: Fortran\7f522442
+Node: Fortran Motion\7f523518
+Node: Fortran Indent\7f524338
+Node: ForIndent Commands\7f525023
+Node: ForIndent Num\7f526168
+Node: ForIndent Conv\7f527442
+Node: ForIndent Vars\7f528218
+Node: Fortran Comments\7f529386
+Node: Fortran Columns\7f532985
+Node: Fortran Abbrev\7f534408
+Node: Asm Mode\7f535318
+Node: Running\7f535870
+Node: Compilation\7f536840
+Node: Lisp Modes\7f541691
+Node: Lisp Libraries\7f542965
+Node: Loading\7f543520
+Node: Compiling Libraries\7f547980
+Node: Mocklisp\7f550871
+Node: Lisp Eval\7f551548
+Node: Lisp Debug\7f555188
+Node: Lisp Interaction\7f560614
+Node: External Lisp\7f561969
+Node: Packages\7f564044
+Node: Package Terminology\7f564785
+Node: Using Packages\7f566143
+Node: Building Packages\7f574932
+Node: Abbrevs\7f577454
+Node: Defining Abbrevs\7f579654
+Node: Expanding Abbrevs\7f582101
+Node: Editing Abbrevs\7f584803
+Node: Saving Abbrevs\7f586671
+Node: Dynamic Abbrevs\7f588611
+Node: Picture\7f589913
+Node: Basic Picture\7f592346
+Node: Insert in Picture\7f594633
+Node: Tabs in Picture\7f596055
+Node: Rectangles in Picture\7f597576
+Node: Sending Mail\7f599485
+Node: Mail Format\7f601196
+Node: Mail Headers\7f602546
+Node: Mail Mode\7f608956
+Node: Reading Mail\7f612569
+Node: Calendar/Diary\7f614144
+Node: Calendar Motion\7f615816
+Node: Calendar Unit Motion\7f616699
+Node: Move to Beginning or End\7f619022
+Node: Specified Dates\7f620155
+Node: Scroll Calendar\7f621044
+Node: Mark and Region\7f622835
+Node: General Calendar\7f624742
+Node: LaTeX Calendar\7f626350
+Node: Holidays\7f628364
+Node: Sunrise/Sunset\7f631467
+Node: Lunar Phases\7f634510
+Node: Other Calendars\7f635895
+Node: Calendar Systems\7f637382
+Node: To Other Calendar\7f640493
+Node: From Other Calendar\7f642484
+Node: Mayan Calendar\7f644790
+Node: Diary\7f647986
+Node: Diary Commands\7f649736
+Node: Format of Diary File\7f653045
+Node: Date Formats\7f655915
+Node: Adding to Diary\7f658489
+Node: Special Diary Entries\7f660120
+Node: Calendar Customization\7f665460
+Node: Calendar Customizing\7f666322
+Node: Holiday Customizing\7f669542
+Node: Date Display Format\7f676010
+Node: Time Display Format\7f676968
+Node: Daylight Savings\7f678106
+Node: Diary Customizing\7f681294
+Node: Hebrew/Islamic Entries\7f685916
+Node: Fancy Diary Display\7f689256
+Node: Included Diary Files\7f691153
+Node: Sexp Diary Entries\7f692134
+Node: Appt Customizing\7f697224
+Node: Sorting\7f698270
+Node: Shell\7f703076
+Node: Single Shell\7f704369
+Node: Interactive Shell\7f705968
+Node: Shell Mode\7f709733
+Node: Terminal emulator\7f712224
+Node: Term Mode\7f714534
+Node: Paging in Term\7f715448
+Node: Narrowing\7f716246
+Node: Hardcopy\7f718196
+Node: Recursive Edit\7f719168
+Node: Dissociated Press\7f722155
+Node: CONX\7f724718
+Node: Amusements\7f725742
+Node: Emulation\7f726222
+Node: Customization\7f728066
+Node: Minor Modes\7f729790
+Node: Variables\7f731422
+Node: Examining\7f733380
+Node: Easy Customization\7f734841
+Node: Customization Groups\7f735855
+Node: Changing an Option\7f738784
+Node: Face Customization\7f745040
+Node: Specific Customization\7f746805
+Node: Edit Options\7f749412
+Node: Locals\7f750996
+Node: File Variables\7f754175
+Node: Keyboard Macros\7f758702
+Node: Basic Kbd Macro\7f760873
+Node: Save Kbd Macro\7f762805
+Node: Kbd Macro Query\7f764477
+Node: Key Bindings\7f766419
+Node: Keymaps\7f767293
+Node: Rebinding\7f771143
+Node: Interactive Rebinding\7f771842
+Node: Programmatic Rebinding\7f774034
+Node: Key Bindings Using Strings\7f776841
+Node: Disabling\7f778447
+Node: Syntax\7f780219
+Node: Syntax Entry\7f781100
+Node: Syntax Change\7f785184
+Node: Init File\7f787354
+Node: Init Syntax\7f788862
+Node: Init Examples\7f791215
+Node: Terminal Init\7f795406
+Node: Audible Bell\7f797116
+Node: Faces\7f800547
+Node: X Resources\7f805384
+Node: Geometry Resources\7f807005
+Node: Iconic Resources\7f809453
+Node: Resource List\7f809925
+Node: Face Resources\7f816432
+Node: Widgets\7f820109
+Node: Menubar Resources\7f821048
+Node: Quitting\7f821981
+Node: Lossage\7f824960
+Node: Stuck Recursive\7f825603
+Node: Screen Garbled\7f826309
+Node: Text Garbled\7f827443
+Node: Unasked-for Search\7f828082
+Node: Emergency Escape\7f828867
+Node: Total Frustration\7f830646
+Node: Bugs\7f831277
+Node: Glossary\7f840812
+Node: Manifesto\7f872453
+Node: Key Index\7f895929
+Node: Command Index\7f921124
+Node: Variable Index\7f963031
+Node: Concept Index\7f979168
 \1f
 End Tag Table
index e202e16..7d341f0 100644 (file)
@@ -32,7 +32,8 @@ translation approved by the author instead of in the original English.
 \1f
 File: xemacs.info,  Node: Top,  Next: License,  Up: (dir)
 
-   The XEmacs Editor *****************
+The XEmacs Editor
+*****************
 
    XEmacs is the extensible, customizable, self-documenting real-time
 display editor.  This Info file describes how to edit with Emacs and
index 9d7ffc3..9545802 100644 (file)
@@ -30,6 +30,307 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Outline Motion,  Next: Outline Visibility,  Prev: Outline Format,  Up: Outline Mode
+
+Outline Motion Commands
+.......................
+
+   Some special commands in Outline mode move backward and forward to
+heading lines.
+
+`C-c C-n'
+     Move point to the next visible heading line
+     (`outline-next-visible-heading').
+
+`C-c C-p'
+     Move point to the previous visible heading line
+     (`outline-previous-visible-heading').
+
+`C-c C-f'
+     Move point to the next visible heading line at the same level as
+     the one point is on (`outline-forward-same-level').
+
+`C-c C-b'
+     Move point to the previous visible heading line at the same level
+     (`outline-backward-same-level').
+
+`C-c C-u'
+     Move point up to a lower-level (more inclusive) visible heading
+     line (`outline-up-heading').
+
+   `C-c C-n' (`next-visible-heading') moves down to the next heading
+line.  `C-c C-p' (`previous-visible-heading') moves similarly backward.
+Both accept numeric arguments as repeat counts.  The names emphasize
+that invisible headings are skipped, but this is not really a special
+feature.  All editing commands that look for lines ignore the invisible
+lines automatically.
+
+   More advanced motion commands understand the levels of headings.
+The commands `C-c C-f' (`outline-forward-same-level') and `C-c C-b'
+(`outline-backward-same-level') move from one heading line to another
+visible heading at the same depth in the outline.  `C-c C-u'
+(`outline-up-heading') moves backward to another heading that is less
+deeply nested.
+
+\1f
+File: xemacs.info,  Node: Outline Visibility,  Prev: Outline Motion,  Up: Outline Mode
+
+Outline Visibility Commands
+...........................
+
+   The other special commands of outline mode are used to make lines
+visible or invisible.  Their names all start with `hide' or `show'.
+Most of them exist as pairs of opposites.  They are not undoable;
+instead, you can undo right past them.  Making lines visible or
+invisible is simply not recorded by the undo mechanism.
+
+`M-x hide-body'
+     Make all body lines in the buffer invisible.
+
+`M-x show-all'
+     Make all lines in the buffer visible.
+
+`C-c C-d'
+     Make everything under this heading invisible, not including this
+     heading itself (`hide-subtree').
+
+`C-c C-s'
+     Make everything under this heading visible, including body,
+     subheadings, and their bodies (`show-subtree').
+
+`M-x hide-leaves'
+     Make the body of this heading line, and of all its subheadings,
+     invisible.
+
+`M-x show-branches'
+     Make all subheadings of this heading line, at all levels, visible.
+
+`C-c C-i'
+     Make immediate subheadings (one level down) of this heading line
+     visible (`show-children').
+
+`M-x hide-entry'
+     Make this heading line's body invisible.
+
+`M-x show-entry'
+     Make this heading line's body visible.
+
+   Two commands that are exact opposites are `M-x hide-entry' and `M-x
+show-entry'.  They are used with point on a heading line, and apply
+only to the body lines of that heading.  The subtopics and their bodies
+are not affected.
+
+   Two more powerful opposites are `C-c C-h' (`hide-subtree') and `C-c
+C-s' (`show-subtree').  Both should be used when point is on a heading
+line, and both apply to all the lines of that heading's "subtree": its
+body, all its subheadings, both direct and indirect, and all of their
+bodies.  In other words, the subtree contains everything following this
+heading line, up to and not including the next heading of the same or
+higher rank.
+
+   Intermediate between a visible subtree and an invisible one is having
+all the subheadings visible but none of the body.  There are two
+commands for doing this, one that hides the bodies and one that makes
+the subheadings visible.  They are `M-x hide-leaves' and `M-x
+show-branches'.
+
+   A little weaker than `show-branches' is `C-c C-i' (`show-children').
+It makes just the direct subheadings visible--those one level down.
+Deeper subheadings remain invisible.
+
+   Two commands have a blanket effect on the whole file.  `M-x
+hide-body' makes all body lines invisible, so that you see just the
+outline structure.  `M-x show-all' makes all lines visible.  You can
+think of these commands as a pair of opposites even though `M-x
+show-all' applies to more than just body lines.
+
+   You can turn off the use of ellipses at the ends of visible lines by
+setting `selective-display-ellipses' to `nil'.  The result is no
+visible indication of the presence of invisible lines.
+
+\1f
+File: xemacs.info,  Node: Words,  Next: Sentences,  Prev: Text Mode,  Up: Text
+
+Words
+=====
+
+   Emacs has commands for moving over or operating on words.  By
+convention, the keys for them are all `Meta-' characters.
+
+`M-f'
+     Move forward over a word (`forward-word').
+
+`M-b'
+     Move backward over a word (`backward-word').
+
+`M-d'
+     Kill up to the end of a word (`kill-word').
+
+`M-<DEL>'
+     Kill back to the beginning of a word (`backward-kill-word').
+
+`M-@'
+     Mark the end of the next word (`mark-word').
+
+`M-t'
+     Transpose two words;  drag a word forward or backward across other
+     words (`transpose-words').
+
+   Notice how these keys form a series that parallels the
+character-based `C-f', `C-b', `C-d', `C-t' and <DEL>.  `M-@' is related
+to `C-@', which is an alias for `C-<SPC>'.
+
+   The commands `Meta-f' (`forward-word') and `Meta-b'
+(`backward-word') move forward and backward over words.  They are
+analogous to `Control-f' and `Control-b', which move over single
+characters.  Like their `Control-' analogues, `Meta-f' and `Meta-b'
+move several words if given an argument.  `Meta-f' with a negative
+argument moves backward, and `Meta-b' with a negative argument moves
+forward.  Forward motion stops after the last letter of the word, while
+backward motion stops before the first letter.
+
+   `Meta-d' (`kill-word') kills the word after point.  To be precise,
+it kills everything from point to the place `Meta-f' would move to.
+Thus, if point is in the middle of a word, `Meta-d' kills just the part
+after point.  If some punctuation comes between point and the next
+word, it is killed along with the word.  (To kill only the next word
+but not the punctuation before it, simply type `Meta-f' to get to the
+end and kill the word backwards with `Meta-<DEL>'.)  `Meta-d' takes
+arguments just like `Meta-f'.
+
+   `Meta-<DEL>' (`backward-kill-word') kills the word before point.  It
+kills everything from point back to where `Meta-b' would move to.  If
+point is after the space in `FOO, BAR', then `FOO, ' is killed.   To
+kill just `FOO', type `Meta-b Meta-d' instead of `Meta-<DEL>'.
+
+   `Meta-t' (`transpose-words') exchanges the word before or containing
+point with the following word.  The delimiter characters between the
+words do not move.  For example, transposing `FOO, BAR' results in
+`BAR, FOO' rather than `BAR FOO,'.  *Note Transpose::, for more on
+transposition and on arguments to transposition commands.
+
+   To operate on the next N words with an operation which applies
+between point and mark, you can either set the mark at point and then
+move over the words, or you can use the command `Meta-@' (`mark-word')
+which does not move point but sets the mark where `Meta-f' would move
+to.  It can be given arguments just like `Meta-f'.
+
+   The word commands' understanding of syntax is completely controlled
+by the syntax table.  For example, any character can be declared to be
+a word delimiter.  *Note Syntax::.
+
+\1f
+File: xemacs.info,  Node: Sentences,  Next: Paragraphs,  Prev: Words,  Up: Text
+
+Sentences
+=========
+
+   The Emacs commands for manipulating sentences and paragraphs are
+mostly on `Meta-' keys, and therefore are like the word-handling
+commands.
+
+`M-a'
+     Move back to the beginning of the sentence (`backward-sentence').
+
+`M-e'
+     Move forward to the end of the sentence (`forward-sentence').
+
+`M-k'
+     Kill forward to the end of the sentence (`kill-sentence').
+
+`C-x <DEL>'
+     Kill back to the beginning of the sentence
+     (`backward-kill-sentence').
+
+   The commands `Meta-a' and `Meta-e' (`backward-sentence' and
+`forward-sentence') move to the beginning and end of the current
+sentence, respectively.  They resemble `Control-a' and `Control-e',
+which move to the beginning and end of a line.  Unlike their
+counterparts, `Meta-a' and `Meta-e' move over successive sentences if
+repeated or given numeric arguments.  Emacs assumes the typist's
+convention is followed, and thus considers a sentence to end wherever
+there is a `.', `?', or `!' followed by the end of a line or two
+spaces, with any number of `)', `]', `'', or `"' characters allowed in
+between.  A sentence also begins or ends wherever a paragraph begins or
+ends.
+
+   Neither `M-a' nor `M-e' moves past the newline or spaces beyond the
+sentence edge at which it is stopping.
+
+   `M-a' and `M-e' have a corresponding kill command, just like `C-a'
+and `C-e' have `C-k'.  The command is  `M-k' (`kill-sentence') which
+kills from point to the end of the sentence.  With minus one as an
+argument it kills back to the beginning of the sentence.  Larger
+arguments serve as repeat counts.
+
+   There is a special command, `C-x <DEL>' (`backward-kill-sentence'),
+for killing back to the beginning of a sentence, which is useful when
+you change your mind in the middle of composing text.
+
+   The variable `sentence-end' controls recognition of the end of a
+sentence.  It is a regexp that matches the last few characters of a
+sentence, together with the whitespace following the sentence.  Its
+normal value is:
+
+     "[.?!][]\"')]*\\($\\|\t\\|  \\)[ \t\n]*"
+
+This example is explained in the section on regexps.  *Note Regexps::.
+
+\1f
+File: xemacs.info,  Node: Paragraphs,  Next: Pages,  Prev: Sentences,  Up: Text
+
+Paragraphs
+==========
+
+   The Emacs commands for manipulating paragraphs are also `Meta-' keys.
+
+`M-['
+     Move back to previous paragraph beginning
+     (`backward-paragraph').
+
+`M-]'
+     Move forward to next paragraph end (`forward-paragraph').
+
+`M-h'
+     Put point and mark around this or next paragraph
+     (`mark-paragraph').
+
+   `Meta-[' moves to the beginning of the current or previous paragraph,
+while `Meta-]' moves to the end of the current or next paragraph.
+Blank lines and text formatter command lines separate paragraphs and are
+not part of any paragraph.  An indented line starts a new paragraph.
+
+   In major modes for programs (as opposed to Text mode), paragraphs
+begin and end only at blank lines.  As a result, the paragraph commands
+continue to be useful even though there are no paragraphs per se.
+
+   When there is a fill prefix, paragraphs are delimited by all lines
+which don't start with the fill prefix.  *Note Filling::.
+
+   To operate on a paragraph, you can use the command `Meta-h'
+(`mark-paragraph') to set the region around it.  This command puts
+point at the beginning and mark at the end of the paragraph point was
+in.  If point is between paragraphs (in a run of blank lines or at a
+boundary), the paragraph following point is surrounded by point and
+mark.  If there are blank lines preceding the first line of the
+paragraph, one of the blank lines is included in the region.  Thus, for
+example, `M-h C-w' kills the paragraph around or after point.
+
+   The precise definition of a paragraph boundary is controlled by the
+variables `paragraph-separate' and `paragraph-start'.  The value of
+`paragraph-start' is a regexp that matches any line that either starts
+or separates paragraphs.  The value of `paragraph-separate' is another
+regexp that  matches only lines that separate paragraphs without being
+part of any paragraph.  Lines that start a new paragraph and are
+contained in it must match both regexps.  For example, normally
+`paragraph-start' is `"^[ \t\n\f]"' and `paragraph-separate' is `"^[
+\t\f]*$"'.
+
+   Normally it is desirable for page boundaries to separate paragraphs.
+The default values of these variables recognize the usual separator for
+pages.
+
+\1f
 File: xemacs.info,  Node: Pages,  Next: Filling,  Prev: Paragraphs,  Up: Text
 
 Pages
@@ -933,242 +1234,3 @@ variables just discussed and putting open braces on separate lines
 produces clear and readable files.  For an example, look at any of the C
 source files of XEmacs.
 
-\1f
-File: xemacs.info,  Node: Matching,  Next: Comments,  Prev: Grinding,  Up: Programs
-
-Automatic Display of Matching Parentheses
-=========================================
-
-   The Emacs parenthesis-matching feature shows you automatically how
-parentheses match in the text.  Whenever a self-inserting character that
-is a closing delimiter is typed, the cursor moves momentarily to the
-location of the matching opening delimiter, provided that is visible on
-the screen.  If it is not on the screen, some text starting with that
-opening delimiter is displayed in the echo area.  Either way, you see
-the grouping you are closing off.
-
-   In Lisp, automatic matching applies only to parentheses.  In C, it
-also applies to braces and brackets.  Emacs knows which characters to
-regard as matching delimiters based on the syntax table set by the major
-mode.  *Note Syntax::.
-
-   If the opening delimiter and closing delimiter are mismatched--as in
-`[x)'--the echo area displays a warning message.  The correct matches
-are specified in the syntax table.
-
-   Two variables control parenthesis matching displays.
-`blink-matching-paren' turns the feature on or off. The default is `t'
-(match display is on); `nil' turns it off.
-`blink-matching-paren-distance' specifies how many characters back
-Emacs searches to find a matching opening delimiter.  If the match is
-not found in the specified region, scanning stops, and nothing is
-displayed.  This prevents wasting lots of time scanning when there is no
-match.  The default is 4000.
-
-\1f
-File: xemacs.info,  Node: Comments,  Next: Balanced Editing,  Prev: Matching,  Up: Programs
-
-Manipulating Comments
-=====================
-
-   The comment commands insert, kill and align comments.
-
-`M-;'
-     Insert or align comment (`indent-for-comment').
-
-`C-x ;'
-     Set comment column (`set-comment-column').
-
-`C-u - C-x ;'
-     Kill comment on current line (`kill-comment').
-
-`M-<LFD>'
-     Like <RET> followed by inserting and aligning a comment
-     (`indent-new-comment-line').
-
-   The command that creates a comment is `Meta-;'
-(`indent-for-comment').  If there is no comment already on the line, a
-new comment is created and aligned at a specific column called the
-"comment column".  Emacs creates the comment by inserting the string at
-the value of `comment-start'; see below.  Point is left after that
-string.  If the text of the line extends past the comment column,
-indentation is done to a suitable boundary (usually, at least one space
-is inserted).  If the major mode has specified a string to terminate
-comments, that string is inserted after point, to keep the syntax valid.
-
-   You can also use `Meta-;' to align an existing comment.  If a line
-already contains the string that starts comments, `M-;' just moves
-point after it and re-indents it to the conventional place.  Exception:
-comments starting in column 0 are not moved.
-
-   Some major modes have special rules for indenting certain kinds of
-comments in certain contexts.  For example, in Lisp code, comments which
-start with two semicolons are indented as if they were lines of code,
-instead of at the comment column.  Comments which start with three
-semicolons are supposed to start at the left margin.  Emacs understands
-these conventions by indenting a double-semicolon comment using <TAB>
-and by not changing the indentation of a triple-semicolon comment at
-all.
-
-     ;; This function is just an example.
-     ;;; Here either two or three semicolons are appropriate.
-     (defun foo (x)
-     ;;; And now, the first part of the function:
-       ;; The following line adds one.
-       (1+ x))           ; This line adds one.
-
-   In C code, a comment preceded on its line by nothing but whitespace
-is indented like a line of code.
-
-   Even when an existing comment is properly aligned, `M-;' is still
-useful for moving directly to the start of the comment.
-
-   `C-u - C-x ;' (`kill-comment') kills the comment on the current
-line, if there is one.  The indentation before the start of the comment
-is killed as well.  If there does not appear to be a comment in the
-line, nothing happens.  To reinsert the comment on another line, move
-to the end of that line, type first `C-y', and then `M-;' to realign
-the comment.  Note that `C-u - C-x ;' is not a distinct key; it is `C-x
-;' (`set-comment-column') with a negative argument.  That command is
-programmed to call `kill-comment' when called with a negative argument.
-However, `kill-comment' is a valid command which you could bind
-directly to a key if you wanted to.
-
-Multiple Lines of Comments
---------------------------
-
-   If you are typing a comment and want to continue it on another line,
-use the command `Meta-<LFD>' (`indent-new-comment-line'), which
-terminates the comment you are typing, creates a new blank line
-afterward, and begins a new comment indented under the old one.  If
-Auto Fill mode is on and you go past the fill column while typing, the
-comment is continued in just this fashion.  If point is not at the end
-of the line when you type `M-<LFD>', the text on the rest of the line
-becomes part of the new comment line.
-
-Options Controlling Comments
-----------------------------
-
-   The comment column is stored in the variable `comment-column'.  You
-can explicitly set it to a number.  Alternatively, the command `C-x ;'
-(`set-comment-column') sets the comment column to the column point is
-at.  `C-u C-x ;' sets the comment column to match the last comment
-before point in the buffer, and then calls `Meta-;' to align the
-current line's comment under the previous one.  Note that `C-u - C-x ;'
-runs the function `kill-comment' as described above.
-
-   `comment-column' is a per-buffer variable; altering the variable
-affects only the current buffer.  You can also change the default value.
-*Note Locals::.  Many major modes initialize this variable for the
-current buffer.
-
-   The comment commands recognize comments based on the regular
-expression that is the value of the variable `comment-start-skip'.
-This regexp should not match the null string.  It may match more than
-the comment starting delimiter in the strictest sense of the word; for
-example, in C mode the value of the variable is `"/\\*+ *"', which
-matches extra stars and spaces after the `/*' itself.  (Note that `\\'
-is needed in Lisp syntax to include a `\' in the string, which is needed
-to deny the first star its special meaning in regexp syntax.  *Note
-Regexps::.)
-
-   When a comment command makes a new comment, it inserts the value of
-`comment-start' to begin it.  The value of `comment-end' is inserted
-after point and will follow the text you will insert into the comment.
-In C mode, `comment-start' has the value `"/* "' and `comment-end' has
-the value `" */"'.
-
-   `comment-multi-line' controls how `M-<LFD>'
-(`indent-new-comment-line') behaves when used inside a comment.  If
-`comment-multi-line' is `nil', as it normally is, then `M-<LFD>'
-terminates the comment on the starting line and starts a new comment on
-the new following line.  If `comment-multi-line' is not `nil', then
-`M-<LFD>' sets up the new following line as part of the same comment
-that was found on the starting line.  This is done by not inserting a
-terminator on the old line and not inserting a starter on the new line.
-In languages where multi-line comments are legal, the value you choose
-for this variable is a matter of taste.
-
-   The variable `comment-indent-hook' should contain a function that is
-called to compute the indentation for a newly inserted comment or for
-aligning an existing comment.  Major modes set this variable
-differently.  The function is called with no arguments, but with point
-at the beginning of the comment, or at the end of a line if a new
-comment is to be inserted.  The function should return the column in
-which the comment ought to start.  For example, in Lisp mode, the
-indent hook function bases its decision on the number of semicolons
-that begin an existing comment and on the code in the preceding lines.
-
-\1f
-File: xemacs.info,  Node: Balanced Editing,  Next: Lisp Completion,  Prev: Comments,  Up: Programs
-
-Editing Without Unbalanced Parentheses
-======================================
-
-`M-('
-     Put parentheses around next sexp(s) (`insert-parentheses').
-
-`M-)'
-     Move past next close parenthesis and re-indent
-     (`move-over-close-and-reindent').
-
-   The commands `M-(' (`insert-parentheses') and `M-)'
-(`move-over-close-and-reindent') are designed to facilitate a style of
-editing which keeps parentheses balanced at all times.  `M-(' inserts a
-pair of parentheses, either together as in `()', or, if given an
-argument, around the next several sexps, and leaves point after the open
-parenthesis.  Instead of typing `( F O O )', you can type `M-( F O O',
-which has the same effect except for leaving the cursor before the
-close parenthesis.  You can then type `M-)', which moves past the close
-parenthesis, deletes any indentation preceding it (in this example
-there is none), and indents with <LFD> after it.
-
-\1f
-File: xemacs.info,  Node: Lisp Completion,  Next: Documentation,  Prev: Balanced Editing,  Up: Programs
-
-Completion for Lisp Symbols
-===========================
-
-   Completion usually happens in the minibuffer.  An exception is
-completion for Lisp symbol names, which is available in all buffers.
-
-   The command `M-<TAB>' (`lisp-complete-symbol') takes the partial
-Lisp symbol before point to be an abbreviation, and compares it against
-all non-trivial Lisp symbols currently known to Emacs.  Any additional
-characters that they all have in common are inserted at point.
-Non-trivial symbols are those that have function definitions, values, or
-properties.
-
-   If there is an open-parenthesis immediately before the beginning of
-the partial symbol, only symbols with function definitions are
-considered as completions.
-
-   If the partial name in the buffer has more than one possible
-completion and they have no additional characters in common, a list of
-all possible completions is displayed in another window.
-
-\1f
-File: xemacs.info,  Node: Documentation,  Next: Change Log,  Prev: Lisp Completion,  Up: Programs
-
-Documentation Commands
-======================
-
-   As you edit Lisp code to be run in Emacs, you can use the commands
-`C-h f' (`describe-function') and `C-h v' (`describe-variable') to
-print documentation of functions and variables you want to call.  These
-commands use the minibuffer to read the name of a function or variable
-to document, and display the documentation in a window.
-
-   For extra convenience, these commands provide default arguments
-based on the code in the neighborhood of point.  `C-h f' sets the
-default to the function called in the innermost list containing point.
-`C-h v' uses the symbol name around or adjacent to point as its default.
-
-   The `M-x manual-entry' command gives you access to documentation on
-Unix commands, system calls, and libraries.  The command reads a topic
-as an argument, and displays the Unix manual page for that topic.
-`manual-entry' always searches all 8 sections of the manual and
-concatenates all the entries it finds.  For example, the topic
-`termcap' finds the description of the termcap library from section 3,
-followed by the description of the termcap data base from section 5.
-
index 1a93484..e114931 100644 (file)
@@ -30,6 +30,245 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Matching,  Next: Comments,  Prev: Grinding,  Up: Programs
+
+Automatic Display of Matching Parentheses
+=========================================
+
+   The Emacs parenthesis-matching feature shows you automatically how
+parentheses match in the text.  Whenever a self-inserting character that
+is a closing delimiter is typed, the cursor moves momentarily to the
+location of the matching opening delimiter, provided that is visible on
+the screen.  If it is not on the screen, some text starting with that
+opening delimiter is displayed in the echo area.  Either way, you see
+the grouping you are closing off.
+
+   In Lisp, automatic matching applies only to parentheses.  In C, it
+also applies to braces and brackets.  Emacs knows which characters to
+regard as matching delimiters based on the syntax table set by the major
+mode.  *Note Syntax::.
+
+   If the opening delimiter and closing delimiter are mismatched--as in
+`[x)'--the echo area displays a warning message.  The correct matches
+are specified in the syntax table.
+
+   Two variables control parenthesis matching displays.
+`blink-matching-paren' turns the feature on or off. The default is `t'
+(match display is on); `nil' turns it off.
+`blink-matching-paren-distance' specifies how many characters back
+Emacs searches to find a matching opening delimiter.  If the match is
+not found in the specified region, scanning stops, and nothing is
+displayed.  This prevents wasting lots of time scanning when there is no
+match.  The default is 4000.
+
+\1f
+File: xemacs.info,  Node: Comments,  Next: Balanced Editing,  Prev: Matching,  Up: Programs
+
+Manipulating Comments
+=====================
+
+   The comment commands insert, kill and align comments.
+
+`M-;'
+     Insert or align comment (`indent-for-comment').
+
+`C-x ;'
+     Set comment column (`set-comment-column').
+
+`C-u - C-x ;'
+     Kill comment on current line (`kill-comment').
+
+`M-<LFD>'
+     Like <RET> followed by inserting and aligning a comment
+     (`indent-new-comment-line').
+
+   The command that creates a comment is `Meta-;'
+(`indent-for-comment').  If there is no comment already on the line, a
+new comment is created and aligned at a specific column called the
+"comment column".  Emacs creates the comment by inserting the string at
+the value of `comment-start'; see below.  Point is left after that
+string.  If the text of the line extends past the comment column,
+indentation is done to a suitable boundary (usually, at least one space
+is inserted).  If the major mode has specified a string to terminate
+comments, that string is inserted after point, to keep the syntax valid.
+
+   You can also use `Meta-;' to align an existing comment.  If a line
+already contains the string that starts comments, `M-;' just moves
+point after it and re-indents it to the conventional place.  Exception:
+comments starting in column 0 are not moved.
+
+   Some major modes have special rules for indenting certain kinds of
+comments in certain contexts.  For example, in Lisp code, comments which
+start with two semicolons are indented as if they were lines of code,
+instead of at the comment column.  Comments which start with three
+semicolons are supposed to start at the left margin.  Emacs understands
+these conventions by indenting a double-semicolon comment using <TAB>
+and by not changing the indentation of a triple-semicolon comment at
+all.
+
+     ;; This function is just an example.
+     ;;; Here either two or three semicolons are appropriate.
+     (defun foo (x)
+     ;;; And now, the first part of the function:
+       ;; The following line adds one.
+       (1+ x))           ; This line adds one.
+
+   In C code, a comment preceded on its line by nothing but whitespace
+is indented like a line of code.
+
+   Even when an existing comment is properly aligned, `M-;' is still
+useful for moving directly to the start of the comment.
+
+   `C-u - C-x ;' (`kill-comment') kills the comment on the current
+line, if there is one.  The indentation before the start of the comment
+is killed as well.  If there does not appear to be a comment in the
+line, nothing happens.  To reinsert the comment on another line, move
+to the end of that line, type first `C-y', and then `M-;' to realign
+the comment.  Note that `C-u - C-x ;' is not a distinct key; it is `C-x
+;' (`set-comment-column') with a negative argument.  That command is
+programmed to call `kill-comment' when called with a negative argument.
+However, `kill-comment' is a valid command which you could bind
+directly to a key if you wanted to.
+
+Multiple Lines of Comments
+--------------------------
+
+   If you are typing a comment and want to continue it on another line,
+use the command `Meta-<LFD>' (`indent-new-comment-line'), which
+terminates the comment you are typing, creates a new blank line
+afterward, and begins a new comment indented under the old one.  If
+Auto Fill mode is on and you go past the fill column while typing, the
+comment is continued in just this fashion.  If point is not at the end
+of the line when you type `M-<LFD>', the text on the rest of the line
+becomes part of the new comment line.
+
+Options Controlling Comments
+----------------------------
+
+   The comment column is stored in the variable `comment-column'.  You
+can explicitly set it to a number.  Alternatively, the command `C-x ;'
+(`set-comment-column') sets the comment column to the column point is
+at.  `C-u C-x ;' sets the comment column to match the last comment
+before point in the buffer, and then calls `Meta-;' to align the
+current line's comment under the previous one.  Note that `C-u - C-x ;'
+runs the function `kill-comment' as described above.
+
+   `comment-column' is a per-buffer variable; altering the variable
+affects only the current buffer.  You can also change the default value.
+*Note Locals::.  Many major modes initialize this variable for the
+current buffer.
+
+   The comment commands recognize comments based on the regular
+expression that is the value of the variable `comment-start-skip'.
+This regexp should not match the null string.  It may match more than
+the comment starting delimiter in the strictest sense of the word; for
+example, in C mode the value of the variable is `"/\\*+ *"', which
+matches extra stars and spaces after the `/*' itself.  (Note that `\\'
+is needed in Lisp syntax to include a `\' in the string, which is needed
+to deny the first star its special meaning in regexp syntax.  *Note
+Regexps::.)
+
+   When a comment command makes a new comment, it inserts the value of
+`comment-start' to begin it.  The value of `comment-end' is inserted
+after point and will follow the text you will insert into the comment.
+In C mode, `comment-start' has the value `"/* "' and `comment-end' has
+the value `" */"'.
+
+   `comment-multi-line' controls how `M-<LFD>'
+(`indent-new-comment-line') behaves when used inside a comment.  If
+`comment-multi-line' is `nil', as it normally is, then `M-<LFD>'
+terminates the comment on the starting line and starts a new comment on
+the new following line.  If `comment-multi-line' is not `nil', then
+`M-<LFD>' sets up the new following line as part of the same comment
+that was found on the starting line.  This is done by not inserting a
+terminator on the old line and not inserting a starter on the new line.
+In languages where multi-line comments are legal, the value you choose
+for this variable is a matter of taste.
+
+   The variable `comment-indent-hook' should contain a function that is
+called to compute the indentation for a newly inserted comment or for
+aligning an existing comment.  Major modes set this variable
+differently.  The function is called with no arguments, but with point
+at the beginning of the comment, or at the end of a line if a new
+comment is to be inserted.  The function should return the column in
+which the comment ought to start.  For example, in Lisp mode, the
+indent hook function bases its decision on the number of semicolons
+that begin an existing comment and on the code in the preceding lines.
+
+\1f
+File: xemacs.info,  Node: Balanced Editing,  Next: Lisp Completion,  Prev: Comments,  Up: Programs
+
+Editing Without Unbalanced Parentheses
+======================================
+
+`M-('
+     Put parentheses around next sexp(s) (`insert-parentheses').
+
+`M-)'
+     Move past next close parenthesis and re-indent
+     (`move-over-close-and-reindent').
+
+   The commands `M-(' (`insert-parentheses') and `M-)'
+(`move-over-close-and-reindent') are designed to facilitate a style of
+editing which keeps parentheses balanced at all times.  `M-(' inserts a
+pair of parentheses, either together as in `()', or, if given an
+argument, around the next several sexps, and leaves point after the open
+parenthesis.  Instead of typing `( F O O )', you can type `M-( F O O',
+which has the same effect except for leaving the cursor before the
+close parenthesis.  You can then type `M-)', which moves past the close
+parenthesis, deletes any indentation preceding it (in this example
+there is none), and indents with <LFD> after it.
+
+\1f
+File: xemacs.info,  Node: Lisp Completion,  Next: Documentation,  Prev: Balanced Editing,  Up: Programs
+
+Completion for Lisp Symbols
+===========================
+
+   Completion usually happens in the minibuffer.  An exception is
+completion for Lisp symbol names, which is available in all buffers.
+
+   The command `M-<TAB>' (`lisp-complete-symbol') takes the partial
+Lisp symbol before point to be an abbreviation, and compares it against
+all non-trivial Lisp symbols currently known to Emacs.  Any additional
+characters that they all have in common are inserted at point.
+Non-trivial symbols are those that have function definitions, values, or
+properties.
+
+   If there is an open-parenthesis immediately before the beginning of
+the partial symbol, only symbols with function definitions are
+considered as completions.
+
+   If the partial name in the buffer has more than one possible
+completion and they have no additional characters in common, a list of
+all possible completions is displayed in another window.
+
+\1f
+File: xemacs.info,  Node: Documentation,  Next: Change Log,  Prev: Lisp Completion,  Up: Programs
+
+Documentation Commands
+======================
+
+   As you edit Lisp code to be run in Emacs, you can use the commands
+`C-h f' (`describe-function') and `C-h v' (`describe-variable') to
+print documentation of functions and variables you want to call.  These
+commands use the minibuffer to read the name of a function or variable
+to document, and display the documentation in a window.
+
+   For extra convenience, these commands provide default arguments
+based on the code in the neighborhood of point.  `C-h f' sets the
+default to the function called in the innermost list containing point.
+`C-h v' uses the symbol name around or adjacent to point as its default.
+
+   The `M-x manual-entry' command gives you access to documentation on
+Unix commands, system calls, and libraries.  The command reads a topic
+as an argument, and displays the Unix manual page for that topic.
+`manual-entry' always searches all 8 sections of the manual and
+concatenates all the entries it finds.  For example, the topic
+`termcap' finds the description of the termcap library from section 3,
+followed by the description of the termcap data base from section 5.
+
+\1f
 File: xemacs.info,  Node: Change Log,  Next: Tags,  Prev: Documentation,  Up: Programs
 
 Change Logs
@@ -942,262 +1181,3 @@ command and a variable with the same name; the two uses of the name
 never conflict because in Lisp and in Emacs it is always clear from the
 context which one is referred to.
 
-\1f
-File: xemacs.info,  Node: Fortran Columns,  Next: Fortran Abbrev,  Prev: Fortran Comments,  Up: Fortran
-
-Columns
--------
-
-`C-c C-r'
-     Displays a "column ruler" momentarily above the current line
-     (`fortran-column-ruler').
-
-`C-c C-w'
-     Splits the current window horizontally so that it is 72 columns
-     wide.  This may help you avoid going over that limit
-     (`fortran-window-create').
-
-   The command `C-c C-r' (`fortran-column-ruler') shows a column ruler
-above the current line.  The comment ruler consists of two lines of
-text that show you the locations of columns with special significance
-in Fortran programs.  Square brackets show the limits of the columns for
-line numbers, and curly brackets show the limits of the columns for the
-statement body.  Column numbers appear above them.
-
-   Note that the column numbers count from zero, as always in XEmacs.
-As a result, the numbers may not be those you are familiar with; but the
-actual positions in the line are standard Fortran.
-
-   The text used to display the column ruler is the value of the
-variable `fortran-comment-ruler'.  By changing this variable, you can
-change the display.
-
-   For even more help, use `C-c C-w' (`fortran-window-create'), a
-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.
-
-\1f
-File: xemacs.info,  Node: Fortran Abbrev,  Prev: Fortran Columns,  Up: Fortran
-
-Fortran Keyword Abbrevs
------------------------
-
-   Fortran mode provides many built-in abbrevs for common keywords and
-declarations.  These are the same sort of abbrevs that you can define
-yourself.  To use them, you must turn on Abbrev mode.  *note Abbrevs::..
-
-   The built-in abbrevs are unusual in one way: they all start with a
-semicolon.  You cannot normally use semicolon in an abbrev, but Fortran
-mode makes this possible by changing the syntax of semicolon to "word
-constituent".
-
-   For example, one built-in Fortran abbrev is `;c' for `continue'.  If
-you insert `;c' and then insert a punctuation character such as a space
-or a newline, the `;c' changes automatically to `continue', provided
-Abbrev mode is enabled.
-
-   Type `;?' or `;C-h' to display a list of all built-in Fortran
-abbrevs and what they stand for.
-
-\1f
-File: xemacs.info,  Node: Asm Mode,  Prev: Fortran,  Up: Programs
-
-Asm Mode
-========
-
-   Asm mode is a major mode for editing files of assembler code.  It
-defines these commands:
-
-`<TAB>'
-     `tab-to-tab-stop'.
-
-`<LFD>'
-     Insert a newline and then indent using `tab-to-tab-stop'.
-
-`:'
-     Insert a colon and then remove the indentation from before the
-     label preceding colon.  Then do `tab-to-tab-stop'.
-
-`;'
-     Insert or align a comment.
-
-   The variable `asm-comment-char' specifies which character starts
-comments in assembler syntax.
-
-\1f
-File: xemacs.info,  Node: Running,  Next: Packages,  Prev: Programs,  Up: Top
-
-Compiling and Testing Programs
-******************************
-
-   The previous chapter discusses the Emacs commands that are useful for
-making changes in programs.  This chapter deals with commands that
-assist in the larger process of developing and maintaining programs.
-
-* Menu:
-
-* Compilation::        Compiling programs in languages other than Lisp
-                        (C, Pascal, etc.)
-* Modes: Lisp Modes.   Various modes for editing Lisp programs, with
-                       different facilities for running the Lisp programs.
-* Libraries: Lisp Libraries.      Creating Lisp programs to run in Emacs.
-* Eval: Lisp Eval.     Executing a single Lisp expression in Emacs.
-* Debug: Lisp Debug.   Debugging Lisp programs running in Emacs.
-* Interaction: Lisp Interaction.  Executing Lisp in an Emacs buffer.
-* External Lisp::      Communicating through Emacs with a separate Lisp.
-
-\1f
-File: xemacs.info,  Node: Compilation,  Next: Lisp Modes,  Prev: Running,  Up: Running
-
-Running "make", or Compilers Generally
-======================================
-
-   Emacs can run compilers for non-interactive languages like C and
-Fortran as inferior processes, feeding the error log into an Emacs
-buffer.  It can also parse the error messages and visit the files in
-which errors are found, moving point to the line where the error
-occurred.
-
-`M-x compile'
-     Run a compiler asynchronously under Emacs, with error messages to
-     `*compilation*' buffer.
-
-`M-x grep'
-     Run `grep' asynchronously under Emacs, with matching lines listed
-     in the buffer named `*compilation*'.
-
-`M-x kill-compilation'
-     Kill the process made by the `M-x compile' command.
-
-`M-x kill-grep'
-     Kill the running compilation or `grep' subprocess.
-
-`C-x `'
-     Visit the next compiler error message or `grep' match.
-
-   To run `make' or another compiler, type `M-x compile'.  This command
-reads a shell command line using the minibuffer, then executes the
-specified command line in an inferior shell with output going to the
-buffer named `*compilation*'.  By default, the current buffer's default
-directory is used as the working directory for the execution of the
-command; therefore, the makefile comes from this directory.
-
-   When the shell command line is read, the minibuffer appears
-containing a default command line (the command you used the last time
-you typed `M-x compile').  If you type just <RET>, the same command
-line is used again.  The first `M-x compile' provides `make -k' as the
-default.  The default is taken from the variable `compile-command'; if
-the appropriate compilation command for a file is something other than
-`make -k', it can be useful to have the file specify a local value for
-`compile-command' (*note File Variables::.).
-
-   When you start a compilation, the buffer `*compilation*' is
-displayed in another window but not selected.  Its mode line displays
-the word `run' or `exit' in the parentheses to tell you whether
-compilation is finished.  You do not have to keep this buffer visible;
-compilation continues in any case.
-
-   To kill the compilation process, type `M-x-kill-compilation'.  The
-mode line of the `*compilation*' buffer changes to say `signal' instead
-of `run'.  Starting a new compilation also kills any running
-compilation, as only one can occur at any time.  Starting a new
-compilation prompts for confirmation before actually killing a
-compilation that is running.
-
-   To parse the compiler error messages, type `C-x `' (`next-error').
-The character following `C-x' is the grave accent, not the single
-quote.  The command displays the buffer `*compilation*' in one window
-and the buffer in which the next error occurred in another window.
-Point in that buffer is moved to the line where the error was found.
-The corresponding error message is scrolled to the top of the window in
-which `*compilation*' is displayed.
-
-   The first time you use `C-x `' after the start of a compilation, it
-parses all the error messages, visits all the files that have error
-messages, and creates markers pointing at the lines the error messages
-refer to.  It then moves to the first error message location.
-Subsequent uses of `C-x `' advance down the data set up by the first
-use.  When the preparsed error messages are exhausted, the next `C-x `'
-checks for any more error messages that have come in; this is useful if
-you start editing compiler errors while compilation is still going on.
-If no additional error messages have come in, `C-x `' reports an error.
-
-   `C-u C-x `' discards the preparsed error message data and parses the
-`*compilation*' buffer again, then displays the first error.  This way,
-you can process the same set of errors again.
-
-   Instead of running a compiler, you can run `grep' and see the lines
-on which matches were found.  To do this, type `M-x grep' with an
-argument line that contains the same arguments you would give to
-`grep': a `grep'-style regexp (usually in single quotes to quote the
-shell's special characters) followed by filenames, which may use
-wildcard characters.  The output from `grep' goes in the
-`*compilation*' buffer.  You can use `C-x `' to find the lines that
-match as if they were compilation errors.
-
-   Note: a shell is used to run the compile command, but the shell is
-not run in interactive mode.  In particular, this means that the shell
-starts up with no prompt.  If you find your usual shell prompt making an
-unsightly appearance in the `*compilation*' buffer, it means you have
-made a mistake in your shell's initialization file (`.cshrc' or `.shrc'
-or ...) by setting the prompt unconditionally.  The shell
-initialization file should set the prompt only if there already is a
-prompt.  Here's how to do it in `csh':
-
-     if ($?prompt) set prompt = ...
-
-\1f
-File: xemacs.info,  Node: Lisp Modes,  Next: Lisp Libraries,  Prev: Compilation,  Up: Running
-
-Major Modes for Lisp
-====================
-
-   Emacs has four different major modes for Lisp.  They are the same in
-terms of editing commands, but differ in the commands for executing Lisp
-expressions.
-
-Emacs-Lisp mode
-     The mode for editing source files of programs to run in Emacs Lisp.
-     This mode defines `C-M-x' to evaluate the current defun.  *Note
-     Lisp Libraries::.
-
-Lisp Interaction mode
-     The mode for an interactive session with Emacs Lisp.  It defines
-     <LFD> to evaluate the sexp before point and insert its value in the
-     buffer.  *Note Lisp Interaction::.
-
-Lisp mode
-     The mode for editing source files of programs that run in other
-     dialects of Lisp than Emacs Lisp.  This mode defines `C-M-x' to
-     send the current defun to an inferior Lisp process.  *Note
-     External Lisp::.
-
-Inferior Lisp mode
-     The mode for an interactive session with an inferior Lisp process.
-     This mode combines the special features of Lisp mode and Shell mode
-     (*note Shell Mode::.).
-
-Scheme mode
-     Like Lisp mode but for Scheme programs.
-
-Inferior Scheme mode
-     The mode for an interactive session with an inferior Scheme
-     process.
-
-\1f
-File: xemacs.info,  Node: Lisp Libraries,  Next: Lisp Eval,  Prev: Lisp Modes,  Up: Running
-
-Libraries of Lisp Code for Emacs
-================================
-
-   Lisp code for Emacs editing commands is stored in files whose names
-conventionally end in `.el'.  This ending tells Emacs to edit them in
-Emacs-Lisp mode (*note Lisp Modes::.).
-
-* Menu:
-
-* Loading::            Loading libraries of Lisp code into Emacs for use.
-* Compiling Libraries:: Compiling a library makes it load and run faster.
-* Mocklisp::           Converting Mocklisp to Lisp so XEmacs can run it.
-
index f306cd4..b821c35 100644 (file)
@@ -30,6 +30,265 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Fortran Columns,  Next: Fortran Abbrev,  Prev: Fortran Comments,  Up: Fortran
+
+Columns
+-------
+
+`C-c C-r'
+     Displays a "column ruler" momentarily above the current line
+     (`fortran-column-ruler').
+
+`C-c C-w'
+     Splits the current window horizontally so that it is 72 columns
+     wide.  This may help you avoid going over that limit
+     (`fortran-window-create').
+
+   The command `C-c C-r' (`fortran-column-ruler') shows a column ruler
+above the current line.  The comment ruler consists of two lines of
+text that show you the locations of columns with special significance
+in Fortran programs.  Square brackets show the limits of the columns for
+line numbers, and curly brackets show the limits of the columns for the
+statement body.  Column numbers appear above them.
+
+   Note that the column numbers count from zero, as always in XEmacs.
+As a result, the numbers may not be those you are familiar with; but the
+actual positions in the line are standard Fortran.
+
+   The text used to display the column ruler is the value of the
+variable `fortran-comment-ruler'.  By changing this variable, you can
+change the display.
+
+   For even more help, use `C-c C-w' (`fortran-window-create'), a
+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.
+
+\1f
+File: xemacs.info,  Node: Fortran Abbrev,  Prev: Fortran Columns,  Up: Fortran
+
+Fortran Keyword Abbrevs
+-----------------------
+
+   Fortran mode provides many built-in abbrevs for common keywords and
+declarations.  These are the same sort of abbrevs that you can define
+yourself.  To use them, you must turn on Abbrev mode.  *note Abbrevs::..
+
+   The built-in abbrevs are unusual in one way: they all start with a
+semicolon.  You cannot normally use semicolon in an abbrev, but Fortran
+mode makes this possible by changing the syntax of semicolon to "word
+constituent".
+
+   For example, one built-in Fortran abbrev is `;c' for `continue'.  If
+you insert `;c' and then insert a punctuation character such as a space
+or a newline, the `;c' changes automatically to `continue', provided
+Abbrev mode is enabled.
+
+   Type `;?' or `;C-h' to display a list of all built-in Fortran
+abbrevs and what they stand for.
+
+\1f
+File: xemacs.info,  Node: Asm Mode,  Prev: Fortran,  Up: Programs
+
+Asm Mode
+========
+
+   Asm mode is a major mode for editing files of assembler code.  It
+defines these commands:
+
+`<TAB>'
+     `tab-to-tab-stop'.
+
+`<LFD>'
+     Insert a newline and then indent using `tab-to-tab-stop'.
+
+`:'
+     Insert a colon and then remove the indentation from before the
+     label preceding colon.  Then do `tab-to-tab-stop'.
+
+`;'
+     Insert or align a comment.
+
+   The variable `asm-comment-char' specifies which character starts
+comments in assembler syntax.
+
+\1f
+File: xemacs.info,  Node: Running,  Next: Packages,  Prev: Programs,  Up: Top
+
+Compiling and Testing Programs
+******************************
+
+   The previous chapter discusses the Emacs commands that are useful for
+making changes in programs.  This chapter deals with commands that
+assist in the larger process of developing and maintaining programs.
+
+* Menu:
+
+* Compilation::        Compiling programs in languages other than Lisp
+                        (C, Pascal, etc.)
+* Modes: Lisp Modes.   Various modes for editing Lisp programs, with
+                       different facilities for running the Lisp programs.
+* Libraries: Lisp Libraries.      Creating Lisp programs to run in Emacs.
+* Eval: Lisp Eval.     Executing a single Lisp expression in Emacs.
+* Debug: Lisp Debug.   Debugging Lisp programs running in Emacs.
+* Interaction: Lisp Interaction.  Executing Lisp in an Emacs buffer.
+* External Lisp::      Communicating through Emacs with a separate Lisp.
+
+\1f
+File: xemacs.info,  Node: Compilation,  Next: Lisp Modes,  Prev: Running,  Up: Running
+
+Running "make", or Compilers Generally
+======================================
+
+   Emacs can run compilers for non-interactive languages like C and
+Fortran as inferior processes, feeding the error log into an Emacs
+buffer.  It can also parse the error messages and visit the files in
+which errors are found, moving point to the line where the error
+occurred.
+
+`M-x compile'
+     Run a compiler asynchronously under Emacs, with error messages to
+     `*compilation*' buffer.
+
+`M-x grep'
+     Run `grep' asynchronously under Emacs, with matching lines listed
+     in the buffer named `*compilation*'.
+
+`M-x kill-compilation'
+     Kill the process made by the `M-x compile' command.
+
+`M-x kill-grep'
+     Kill the running compilation or `grep' subprocess.
+
+`C-x `'
+     Visit the next compiler error message or `grep' match.
+
+   To run `make' or another compiler, type `M-x compile'.  This command
+reads a shell command line using the minibuffer, then executes the
+specified command line in an inferior shell with output going to the
+buffer named `*compilation*'.  By default, the current buffer's default
+directory is used as the working directory for the execution of the
+command; therefore, the makefile comes from this directory.
+
+   When the shell command line is read, the minibuffer appears
+containing a default command line (the command you used the last time
+you typed `M-x compile').  If you type just <RET>, the same command
+line is used again.  The first `M-x compile' provides `make -k' as the
+default.  The default is taken from the variable `compile-command'; if
+the appropriate compilation command for a file is something other than
+`make -k', it can be useful to have the file specify a local value for
+`compile-command' (*note File Variables::.).
+
+   When you start a compilation, the buffer `*compilation*' is
+displayed in another window but not selected.  Its mode line displays
+the word `run' or `exit' in the parentheses to tell you whether
+compilation is finished.  You do not have to keep this buffer visible;
+compilation continues in any case.
+
+   To kill the compilation process, type `M-x-kill-compilation'.  The
+mode line of the `*compilation*' buffer changes to say `signal' instead
+of `run'.  Starting a new compilation also kills any running
+compilation, as only one can occur at any time.  Starting a new
+compilation prompts for confirmation before actually killing a
+compilation that is running.
+
+   To parse the compiler error messages, type `C-x `' (`next-error').
+The character following `C-x' is the grave accent, not the single
+quote.  The command displays the buffer `*compilation*' in one window
+and the buffer in which the next error occurred in another window.
+Point in that buffer is moved to the line where the error was found.
+The corresponding error message is scrolled to the top of the window in
+which `*compilation*' is displayed.
+
+   The first time you use `C-x `' after the start of a compilation, it
+parses all the error messages, visits all the files that have error
+messages, and creates markers pointing at the lines the error messages
+refer to.  It then moves to the first error message location.
+Subsequent uses of `C-x `' advance down the data set up by the first
+use.  When the preparsed error messages are exhausted, the next `C-x `'
+checks for any more error messages that have come in; this is useful if
+you start editing compiler errors while compilation is still going on.
+If no additional error messages have come in, `C-x `' reports an error.
+
+   `C-u C-x `' discards the preparsed error message data and parses the
+`*compilation*' buffer again, then displays the first error.  This way,
+you can process the same set of errors again.
+
+   Instead of running a compiler, you can run `grep' and see the lines
+on which matches were found.  To do this, type `M-x grep' with an
+argument line that contains the same arguments you would give to
+`grep': a `grep'-style regexp (usually in single quotes to quote the
+shell's special characters) followed by filenames, which may use
+wildcard characters.  The output from `grep' goes in the
+`*compilation*' buffer.  You can use `C-x `' to find the lines that
+match as if they were compilation errors.
+
+   Note: a shell is used to run the compile command, but the shell is
+not run in interactive mode.  In particular, this means that the shell
+starts up with no prompt.  If you find your usual shell prompt making an
+unsightly appearance in the `*compilation*' buffer, it means you have
+made a mistake in your shell's initialization file (`.cshrc' or `.shrc'
+or ...) by setting the prompt unconditionally.  The shell
+initialization file should set the prompt only if there already is a
+prompt.  Here's how to do it in `csh':
+
+     if ($?prompt) set prompt = ...
+
+\1f
+File: xemacs.info,  Node: Lisp Modes,  Next: Lisp Libraries,  Prev: Compilation,  Up: Running
+
+Major Modes for Lisp
+====================
+
+   Emacs has four different major modes for Lisp.  They are the same in
+terms of editing commands, but differ in the commands for executing Lisp
+expressions.
+
+Emacs-Lisp mode
+     The mode for editing source files of programs to run in Emacs Lisp.
+     This mode defines `C-M-x' to evaluate the current defun.  *Note
+     Lisp Libraries::.
+
+Lisp Interaction mode
+     The mode for an interactive session with Emacs Lisp.  It defines
+     <LFD> to evaluate the sexp before point and insert its value in the
+     buffer.  *Note Lisp Interaction::.
+
+Lisp mode
+     The mode for editing source files of programs that run in other
+     dialects of Lisp than Emacs Lisp.  This mode defines `C-M-x' to
+     send the current defun to an inferior Lisp process.  *Note
+     External Lisp::.
+
+Inferior Lisp mode
+     The mode for an interactive session with an inferior Lisp process.
+     This mode combines the special features of Lisp mode and Shell mode
+     (*note Shell Mode::.).
+
+Scheme mode
+     Like Lisp mode but for Scheme programs.
+
+Inferior Scheme mode
+     The mode for an interactive session with an inferior Scheme
+     process.
+
+\1f
+File: xemacs.info,  Node: Lisp Libraries,  Next: Lisp Eval,  Prev: Lisp Modes,  Up: Running
+
+Libraries of Lisp Code for Emacs
+================================
+
+   Lisp code for Emacs editing commands is stored in files whose names
+conventionally end in `.el'.  This ending tells Emacs to edit them in
+Emacs-Lisp mode (*note Lisp Modes::.).
+
+* Menu:
+
+* Loading::            Loading libraries of Lisp code into Emacs for use.
+* Compiling Libraries:: Compiling a library makes it load and run faster.
+* Mocklisp::           Converting Mocklisp to Lisp so XEmacs can run it.
+
+\1f
 File: xemacs.info,  Node: Loading,  Next: Compiling Libraries,  Prev: Lisp Libraries,  Up: Lisp Libraries
 
 Loading Libraries
@@ -931,242 +1190,3 @@ since those two definitions are independent for one abbrev.
 
    `M-x kill-all-abbrevs' removes all existing abbrev definitions.
 
-\1f
-File: xemacs.info,  Node: Expanding Abbrevs,  Next: Editing Abbrevs,  Prev: Defining Abbrevs,  Up: Abbrevs
-
-Controlling Abbrev Expansion
-============================
-
-   An abbrev expands whenever it is in a buffer just before point and
-you type a self-inserting punctuation character (<SPC>, comma, etc.).
-Most often an abbrev is used by inserting the abbrev followed by
-punctuation.
-
-   Abbrev expansion preserves case; thus, `foo' expands into `find
-outer otter', `Foo' into `Find outer otter', and `FOO' into `FIND OUTER
-OTTER' or `Find Outer Otter' according to the variable
-`abbrev-all-caps' (a non-`nil' value chooses the first of the two
-expansions).
-
-   Two commands are available to control abbrev expansion:
-
-`M-''
-     Separate a prefix from a following abbrev to be expanded
-     (`abbrev-prefix-mark').
-
-`C-x a e'
-     Expand the abbrev before point (`expand-abbrev').  This is
-     effective even when Abbrev mode is not enabled.
-
-`M-x unexpand-abbrev'
-     Undo last abbrev expansion.
-
-`M-x expand-region-abbrevs'
-     Expand some or all abbrevs found in the region.
-
-   You may wish to expand an abbrev with a prefix attached.  For
-example, if `cnst' expands into `construction', you may want to use it
-to enter `reconstruction'.  It does not work to type `recnst', because
-that is not necessarily a defined abbrev.  Instead, you can use the
-command `M-'' (`abbrev-prefix-mark') between the prefix `re' and the
-abbrev `cnst'.  First, insert `re'.  Then type `M-''; this inserts a
-minus sign in the buffer to indicate that it has done its work.  Then
-insert the abbrev `cnst'.  The buffer now contains `re-cnst'.  Now
-insert a punctuation character to expand the abbrev `cnst' into
-`construction'.  The minus sign is deleted at this point by `M-''.  The
-resulting text is the desired `reconstruction'.
-
-   If you actually want the text of the abbrev in the buffer, rather
-than its expansion, insert the following punctuation with `C-q'.  Thus,
-`foo C-q -' leaves `foo-' in the buffer.
-
-   If you expand an abbrev by mistake, you can undo the expansion
-(replace the expansion by the original abbrev text) with `M-x
-unexpand-abbrev'.  You can also use `C-_' (`undo') to undo the
-expansion; but that will first undo the insertion of the punctuation
-character.
-
-   `M-x expand-region-abbrevs' searches through the region for defined
-abbrevs, and  offers to replace each one it finds with its expansion.
-This command is useful if you have typed text using abbrevs but forgot
-to turn on Abbrev mode first.  It may also be useful together with a
-special set of abbrev definitions for making several global
-replacements at once.  The command is effective even if Abbrev mode is
-not enabled.
-
-\1f
-File: xemacs.info,  Node: Editing Abbrevs,  Next: Saving Abbrevs,  Prev: Expanding Abbrevs,  Up: Abbrevs
-
-Examining and Editing Abbrevs
-=============================
-
-`M-x list-abbrevs'
-     Print a list of all abbrev definitions.
-
-`M-x edit-abbrevs'
-     Edit a list of abbrevs; you can add, alter, or remove definitions.
-
-   The output from `M-x list-abbrevs' looks like this:
-
-     (lisp-mode-abbrev-table)
-     "dk"             0    "define-key"
-     (global-abbrev-table)
-     "dfn"            0    "definition"
-
-(Some blank lines of no semantic significance, and some other abbrev
-tables, have been omitted.)
-
-   A line containing a name in parentheses is the header for abbrevs in
-a particular abbrev table; `global-abbrev-table' contains all the global
-abbrevs, and the other abbrev tables that are named after major modes
-contain the mode-specific abbrevs.
-
-   Within each abbrev table, each non-blank line defines one abbrev.
-The word at the beginning is the abbrev.  The number that appears is
-the number of times the abbrev has been expanded.  Emacs keeps track of
-this to help you see which abbrevs you actually use, in case you want
-to eliminate those that you don't use often.  The string at the end of
-the line is the expansion.
-
-   `M-x edit-abbrevs' allows you to add, change or kill abbrev
-definitions by editing a list of them in an Emacs buffer.  The list has
-the format described above.  The buffer of abbrevs is called
-`*Abbrevs*', and is in Edit-Abbrevs mode.  This mode redefines the key
-`C-c C-c' to install the abbrev definitions as specified in the buffer.
-The  `edit-abbrevs-redefine' command does this.  Any abbrevs not
-described in the buffer are eliminated when this is done.
-
-   `edit-abbrevs' is actually the same as `list-abbrevs', except that
-it selects the buffer `*Abbrevs*' whereas `list-abbrevs' merely
-displays it in another window.
-
-\1f
-File: xemacs.info,  Node: Saving Abbrevs,  Next: Dynamic Abbrevs,  Prev: Editing Abbrevs,  Up: Abbrevs
-
-Saving Abbrevs
-==============
-
-   These commands allow you to keep abbrev definitions between editing
-sessions.
-
-`M-x write-abbrev-file'
-     Write a file describing all defined abbrevs.
-
-`M-x read-abbrev-file'
-     Read such an abbrev file and define abbrevs as specified there.
-
-`M-x quietly-read-abbrev-file'
-     Similar, but do not display a message about what is going on.
-
-`M-x define-abbrevs'
-     Define abbrevs from buffer.
-
-`M-x insert-abbrevs'
-     Insert all abbrevs and their expansions into the buffer.
-
-   Use `M-x write-abbrev-file' to save abbrev definitions for use in a
-later session.  The command reads a file name using the minibuffer and
-writes a description of all current abbrev definitions into the
-specified file.  The text stored in the file looks like the output of
-`M-x list-abbrevs'.
-
-   `M-x read-abbrev-file' prompts for a file name using the minibuffer
-and reads the specified file, defining abbrevs according to its
-contents.  `M-x quietly-read-abbrev-file' is the same but does not
-display a message in the echo area; it is actually useful primarily in
-the `.emacs' file.  If you give an empty argument to either of these
-functions, the file name Emacs uses is the value of the variable
-`abbrev-file-name', which is by default `"~/.abbrev_defs"'.
-
-   Emacs offers to save abbrevs automatically if you have changed any of
-them, whenever it offers to save all files (for `C-x s' or `C-x C-c').
-Set the variable `save-abbrevs' to `nil' to inhibit this feature.
-
-   The commands `M-x insert-abbrevs' and `M-x define-abbrevs' are
-similar to the previous commands but work on text in an Emacs buffer.
-`M-x insert-abbrevs' inserts text into the current buffer before point,
-describing all current abbrev definitions; `M-x define-abbrevs' parses
-the entire current buffer and defines abbrevs accordingly.
-
-\1f
-File: xemacs.info,  Node: Dynamic Abbrevs,  Prev: Saving Abbrevs,  Up: Abbrevs
-
-Dynamic Abbrev Expansion
-========================
-
-   The abbrev facility described above operates automatically as you
-insert text, but all abbrevs must be defined explicitly.  By contrast,
-"dynamic abbrevs" allow the meanings of abbrevs to be determined
-automatically from the contents of the buffer, but dynamic abbrev
-expansion happens only when you request it explicitly.
-
-`M-/'
-     Expand the word in the buffer before point as a "dynamic abbrev",
-     by searching in the buffer for words starting with that
-     abbreviation (`dabbrev-expand').
-
-   For example, if the buffer contains `does this follow ' and you type
-`f o M-/', the effect is to insert `follow' because that is the last
-word in the buffer that starts with `fo'.  A numeric argument to `M-/'
-says to take the second, third, etc. distinct expansion found looking
-backward from point.  Repeating `M-/' searches for an alternative
-expansion by looking farther back.  After the entire buffer before
-point has been considered, the buffer after point is searched.
-
-   Dynamic abbrev expansion is completely independent of Abbrev mode;
-the expansion of a word with `M-/' is completely independent of whether
-it has a definition as an ordinary abbrev.
-
-\1f
-File: xemacs.info,  Node: Picture,  Next: Sending Mail,  Prev: Abbrevs,  Up: Top
-
-Editing Pictures
-****************
-
-   If you want to create a picture made out of text characters (for
-example, a picture of the division of a register into fields, as a
-comment in a program), use the command `edit-picture' to enter Picture
-mode.
-
-   In Picture mode, editing is based on the "quarter-plane" model of
-text.  In this model, the text characters lie studded on an area that
-stretches infinitely far to the right and downward.  The concept of the
-end of a line does not exist in this model; the most you can say is
-where the last non-blank character on the line is found.
-
-   Of course, Emacs really always considers text as a sequence of
-characters, and lines really do have ends.  But in Picture mode most
-frequently-used keys are rebound to commands that simulate the
-quarter-plane model of text.  They do this by inserting spaces or by
-converting tabs to spaces.
-
-   Most of the basic editing commands of Emacs are redefined by Picture
-mode to do essentially the same thing but in a quarter-plane way.  In
-addition, Picture mode defines various keys starting with the `C-c'
-prefix to run special picture editing commands.
-
-   One of these keys, `C-c C-c', is pretty important.  Often a picture
-is part of a larger file that is usually edited in some other major
-mode.  `M-x edit-picture' records the name of the previous major mode.
-You can then use the `C-c C-c' command (`picture-mode-exit') to restore
-that mode.  `C-c C-c' also deletes spaces from the ends of lines,
-unless you give it a numeric argument.
-
-   The commands used in Picture mode all work in other modes (provided
-the `picture' library is loaded), but are only  bound to keys in
-Picture mode.  Note that the descriptions below talk of moving "one
-column" and so on, but all the picture mode commands handle numeric
-arguments as their normal equivalents do.
-
-   Turning on Picture mode calls the value of the variable
-`picture-mode-hook' as a function, with no arguments, if that value
-exists and is non-`nil'.
-
-* Menu:
-
-* Basic Picture::         Basic concepts and simple commands of Picture Mode.
-* Insert in Picture::     Controlling direction of cursor motion
-                           after "self-inserting" characters.
-* Tabs in Picture::       Various features for tab stops and indentation.
-* Rectangles in Picture:: Clearing and superimposing rectangles.
-
index 33e4f4c..9af04b9 100644 (file)
@@ -30,6 +30,245 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Expanding Abbrevs,  Next: Editing Abbrevs,  Prev: Defining Abbrevs,  Up: Abbrevs
+
+Controlling Abbrev Expansion
+============================
+
+   An abbrev expands whenever it is in a buffer just before point and
+you type a self-inserting punctuation character (<SPC>, comma, etc.).
+Most often an abbrev is used by inserting the abbrev followed by
+punctuation.
+
+   Abbrev expansion preserves case; thus, `foo' expands into `find
+outer otter', `Foo' into `Find outer otter', and `FOO' into `FIND OUTER
+OTTER' or `Find Outer Otter' according to the variable
+`abbrev-all-caps' (a non-`nil' value chooses the first of the two
+expansions).
+
+   Two commands are available to control abbrev expansion:
+
+`M-''
+     Separate a prefix from a following abbrev to be expanded
+     (`abbrev-prefix-mark').
+
+`C-x a e'
+     Expand the abbrev before point (`expand-abbrev').  This is
+     effective even when Abbrev mode is not enabled.
+
+`M-x unexpand-abbrev'
+     Undo last abbrev expansion.
+
+`M-x expand-region-abbrevs'
+     Expand some or all abbrevs found in the region.
+
+   You may wish to expand an abbrev with a prefix attached.  For
+example, if `cnst' expands into `construction', you may want to use it
+to enter `reconstruction'.  It does not work to type `recnst', because
+that is not necessarily a defined abbrev.  Instead, you can use the
+command `M-'' (`abbrev-prefix-mark') between the prefix `re' and the
+abbrev `cnst'.  First, insert `re'.  Then type `M-''; this inserts a
+minus sign in the buffer to indicate that it has done its work.  Then
+insert the abbrev `cnst'.  The buffer now contains `re-cnst'.  Now
+insert a punctuation character to expand the abbrev `cnst' into
+`construction'.  The minus sign is deleted at this point by `M-''.  The
+resulting text is the desired `reconstruction'.
+
+   If you actually want the text of the abbrev in the buffer, rather
+than its expansion, insert the following punctuation with `C-q'.  Thus,
+`foo C-q -' leaves `foo-' in the buffer.
+
+   If you expand an abbrev by mistake, you can undo the expansion
+(replace the expansion by the original abbrev text) with `M-x
+unexpand-abbrev'.  You can also use `C-_' (`undo') to undo the
+expansion; but that will first undo the insertion of the punctuation
+character.
+
+   `M-x expand-region-abbrevs' searches through the region for defined
+abbrevs, and  offers to replace each one it finds with its expansion.
+This command is useful if you have typed text using abbrevs but forgot
+to turn on Abbrev mode first.  It may also be useful together with a
+special set of abbrev definitions for making several global
+replacements at once.  The command is effective even if Abbrev mode is
+not enabled.
+
+\1f
+File: xemacs.info,  Node: Editing Abbrevs,  Next: Saving Abbrevs,  Prev: Expanding Abbrevs,  Up: Abbrevs
+
+Examining and Editing Abbrevs
+=============================
+
+`M-x list-abbrevs'
+     Print a list of all abbrev definitions.
+
+`M-x edit-abbrevs'
+     Edit a list of abbrevs; you can add, alter, or remove definitions.
+
+   The output from `M-x list-abbrevs' looks like this:
+
+     (lisp-mode-abbrev-table)
+     "dk"             0    "define-key"
+     (global-abbrev-table)
+     "dfn"            0    "definition"
+
+(Some blank lines of no semantic significance, and some other abbrev
+tables, have been omitted.)
+
+   A line containing a name in parentheses is the header for abbrevs in
+a particular abbrev table; `global-abbrev-table' contains all the global
+abbrevs, and the other abbrev tables that are named after major modes
+contain the mode-specific abbrevs.
+
+   Within each abbrev table, each non-blank line defines one abbrev.
+The word at the beginning is the abbrev.  The number that appears is
+the number of times the abbrev has been expanded.  Emacs keeps track of
+this to help you see which abbrevs you actually use, in case you want
+to eliminate those that you don't use often.  The string at the end of
+the line is the expansion.
+
+   `M-x edit-abbrevs' allows you to add, change or kill abbrev
+definitions by editing a list of them in an Emacs buffer.  The list has
+the format described above.  The buffer of abbrevs is called
+`*Abbrevs*', and is in Edit-Abbrevs mode.  This mode redefines the key
+`C-c C-c' to install the abbrev definitions as specified in the buffer.
+The  `edit-abbrevs-redefine' command does this.  Any abbrevs not
+described in the buffer are eliminated when this is done.
+
+   `edit-abbrevs' is actually the same as `list-abbrevs', except that
+it selects the buffer `*Abbrevs*' whereas `list-abbrevs' merely
+displays it in another window.
+
+\1f
+File: xemacs.info,  Node: Saving Abbrevs,  Next: Dynamic Abbrevs,  Prev: Editing Abbrevs,  Up: Abbrevs
+
+Saving Abbrevs
+==============
+
+   These commands allow you to keep abbrev definitions between editing
+sessions.
+
+`M-x write-abbrev-file'
+     Write a file describing all defined abbrevs.
+
+`M-x read-abbrev-file'
+     Read such an abbrev file and define abbrevs as specified there.
+
+`M-x quietly-read-abbrev-file'
+     Similar, but do not display a message about what is going on.
+
+`M-x define-abbrevs'
+     Define abbrevs from buffer.
+
+`M-x insert-abbrevs'
+     Insert all abbrevs and their expansions into the buffer.
+
+   Use `M-x write-abbrev-file' to save abbrev definitions for use in a
+later session.  The command reads a file name using the minibuffer and
+writes a description of all current abbrev definitions into the
+specified file.  The text stored in the file looks like the output of
+`M-x list-abbrevs'.
+
+   `M-x read-abbrev-file' prompts for a file name using the minibuffer
+and reads the specified file, defining abbrevs according to its
+contents.  `M-x quietly-read-abbrev-file' is the same but does not
+display a message in the echo area; it is actually useful primarily in
+the `.emacs' file.  If you give an empty argument to either of these
+functions, the file name Emacs uses is the value of the variable
+`abbrev-file-name', which is by default `"~/.abbrev_defs"'.
+
+   Emacs offers to save abbrevs automatically if you have changed any of
+them, whenever it offers to save all files (for `C-x s' or `C-x C-c').
+Set the variable `save-abbrevs' to `nil' to inhibit this feature.
+
+   The commands `M-x insert-abbrevs' and `M-x define-abbrevs' are
+similar to the previous commands but work on text in an Emacs buffer.
+`M-x insert-abbrevs' inserts text into the current buffer before point,
+describing all current abbrev definitions; `M-x define-abbrevs' parses
+the entire current buffer and defines abbrevs accordingly.
+
+\1f
+File: xemacs.info,  Node: Dynamic Abbrevs,  Prev: Saving Abbrevs,  Up: Abbrevs
+
+Dynamic Abbrev Expansion
+========================
+
+   The abbrev facility described above operates automatically as you
+insert text, but all abbrevs must be defined explicitly.  By contrast,
+"dynamic abbrevs" allow the meanings of abbrevs to be determined
+automatically from the contents of the buffer, but dynamic abbrev
+expansion happens only when you request it explicitly.
+
+`M-/'
+     Expand the word in the buffer before point as a "dynamic abbrev",
+     by searching in the buffer for words starting with that
+     abbreviation (`dabbrev-expand').
+
+   For example, if the buffer contains `does this follow ' and you type
+`f o M-/', the effect is to insert `follow' because that is the last
+word in the buffer that starts with `fo'.  A numeric argument to `M-/'
+says to take the second, third, etc. distinct expansion found looking
+backward from point.  Repeating `M-/' searches for an alternative
+expansion by looking farther back.  After the entire buffer before
+point has been considered, the buffer after point is searched.
+
+   Dynamic abbrev expansion is completely independent of Abbrev mode;
+the expansion of a word with `M-/' is completely independent of whether
+it has a definition as an ordinary abbrev.
+
+\1f
+File: xemacs.info,  Node: Picture,  Next: Sending Mail,  Prev: Abbrevs,  Up: Top
+
+Editing Pictures
+****************
+
+   If you want to create a picture made out of text characters (for
+example, a picture of the division of a register into fields, as a
+comment in a program), use the command `edit-picture' to enter Picture
+mode.
+
+   In Picture mode, editing is based on the "quarter-plane" model of
+text.  In this model, the text characters lie studded on an area that
+stretches infinitely far to the right and downward.  The concept of the
+end of a line does not exist in this model; the most you can say is
+where the last non-blank character on the line is found.
+
+   Of course, Emacs really always considers text as a sequence of
+characters, and lines really do have ends.  But in Picture mode most
+frequently-used keys are rebound to commands that simulate the
+quarter-plane model of text.  They do this by inserting spaces or by
+converting tabs to spaces.
+
+   Most of the basic editing commands of Emacs are redefined by Picture
+mode to do essentially the same thing but in a quarter-plane way.  In
+addition, Picture mode defines various keys starting with the `C-c'
+prefix to run special picture editing commands.
+
+   One of these keys, `C-c C-c', is pretty important.  Often a picture
+is part of a larger file that is usually edited in some other major
+mode.  `M-x edit-picture' records the name of the previous major mode.
+You can then use the `C-c C-c' command (`picture-mode-exit') to restore
+that mode.  `C-c C-c' also deletes spaces from the ends of lines,
+unless you give it a numeric argument.
+
+   The commands used in Picture mode all work in other modes (provided
+the `picture' library is loaded), but are only  bound to keys in
+Picture mode.  Note that the descriptions below talk of moving "one
+column" and so on, but all the picture mode commands handle numeric
+arguments as their normal equivalents do.
+
+   Turning on Picture mode calls the value of the variable
+`picture-mode-hook' as a function, with no arguments, if that value
+exists and is non-`nil'.
+
+* Menu:
+
+* Basic Picture::         Basic concepts and simple commands of Picture Mode.
+* Insert in Picture::     Controlling direction of cursor motion
+                           after "self-inserting" characters.
+* Tabs in Picture::       Various features for tab stops and indentation.
+* Rectangles in Picture:: Clearing and superimposing rectangles.
+
+\1f
 File: xemacs.info,  Node: Basic Picture,  Next: Insert in Picture,  Prev: Picture,  Up: Picture
 
 Basic Editing in Picture Mode
@@ -1006,201 +1245,3 @@ begins on the first Sunday in April.  When the daylight savings rules
 are set up for the United States, Emacs always uses the present
 definition, even though it is wrong for some prior years.
 
-\1f
-File: xemacs.info,  Node: Sunrise/Sunset,  Next: Lunar Phases,  Prev: Holidays,  Up: Calendar/Diary
-
-Times of Sunrise and Sunset
----------------------------
-
-   Special calendar commands can tell you, to within a minute or two,
-the times of sunrise and sunset for any date.
-
-`S'
-     Display times of sunrise and sunset for the selected date
-     (`calendar-sunrise-sunset').
-
-`Button2 Sunrise/Sunset'
-     Display times of sunrise and sunset for the date you click on.
-
-`M-x sunrise-sunset'
-     Display times of sunrise and sunset for today's date.
-
-`C-u M-x sunrise-sunset'
-     Display times of sunrise and sunset for a specified date.
-
-   Within the calendar, to display the *local times* of sunrise and
-sunset in the echo area, move point to the date you want, and type `S'.
-Alternatively, click `Button2' on the date, then choose
-`Sunrise/Sunset' from the menu that appears.  The command `M-x
-sunrise-sunset' is available outside the calendar to display this
-information for today's date or a specified date.  To specify a date
-other than today, use `C-u M-x sunrise-sunset', which prompts for the
-year, month, and day.
-
-   You can display the times of sunrise and sunset for any location and
-any date with `C-u C-u M-x sunrise-sunset'.  This asks you for a
-longitude, latitude, number of minutes difference from Coordinated
-Universal Time, and date, and then tells you the times of sunrise and
-sunset for that location on that date.
-
-   Because the times of sunrise and sunset depend on the location on
-earth, you need to tell Emacs your latitude, longitude, and location
-name before using these commands.  Here is an example of what to set:
-
-     (setq calendar-latitude 40.1)
-     (setq calendar-longitude -88.2)
-     (setq calendar-location-name "Urbana, IL")
-
-Use one decimal place in the values of `calendar-latitude' and
-`calendar-longitude'.
-
-   Your time zone also affects the local time of sunrise and sunset.
-Emacs usually gets time zone information from the operating system, but
-if these values are not what you want (or if the operating system does
-not supply them), you must set them yourself.  Here is an example:
-
-     (setq calendar-time-zone -360)
-     (setq calendar-standard-time-zone-name "CST")
-     (setq calendar-daylight-time-zone-name "CDT")
-
-The value of `calendar-time-zone' is the number of minutes difference
-between your local standard time and Coordinated Universal Time
-(Greenwich time).  The values of `calendar-standard-time-zone-name' and
-`calendar-daylight-time-zone-name' are the abbreviations used in your
-time zone.  Emacs displays the times of sunrise and sunset *corrected
-for daylight savings time*.  *Note Daylight Savings::, for how daylight
-savings time is determined.
-
-   As a user, you might find it convenient to set the calendar location
-variables for your usual physical location in your `.emacs' file.  And
-when you install Emacs on a machine, you can create a `default.el' file
-which sets them properly for the typical location of most users of that
-machine.  *Note Init File::.
-
-\1f
-File: xemacs.info,  Node: Lunar Phases,  Next: Other Calendars,  Prev: Sunrise/Sunset,  Up: Calendar/Diary
-
-Phases of the Moon
-------------------
-
-   These calendar commands display the dates and times of the phases of
-the moon (new moon, first quarter, full moon, last quarter).  This
-feature is useful for debugging problems that "depend on the phase of
-the moon."
-
-`M'
-     Display the dates and times for all the quarters of the moon for
-     the three-month period shown (`calendar-phases-of-moon').
-
-`M-x phases-of-moon'
-     Display dates and times of the quarters of the moon for three
-     months around today's date.
-
-   Within the calendar, use the `M' command to display a separate
-buffer of the phases of the moon for the current three-month range.  The
-dates and times listed are accurate to within a few minutes.
-
-   Outside the calendar, use the command `M-x phases-of-moon' to
-display the list of the phases of the moon for the current month and the
-preceding and succeeding months.  For information about a different
-month, use `C-u M-x phases-of-moon', which prompts for the month and
-year.
-
-   The dates and times given for the phases of the moon are given in
-local time (corrected for daylight savings, when appropriate); but if
-the variable `calendar-time-zone' is void, Coordinated Universal Time
-(the Greenwich time zone) is used.  *Note Daylight Savings::.
-
-\1f
-File: xemacs.info,  Node: Other Calendars,  Next: Calendar Systems,  Prev: Lunar Phases,  Up: Calendar/Diary
-
-Conversion To and From Other Calendars
---------------------------------------
-
-   The Emacs calendar displayed is *always* the Gregorian calendar,
-sometimes called the "new style" calendar, which is used in most of the
-world today.  However, this calendar did not exist before the sixteenth
-century and was not widely used before the eighteenth century; it did
-not fully displace the Julian calendar and gain universal acceptance
-until the early twentieth century.  The Emacs calendar can display any
-month since January, year 1 of the current era, but the calendar
-displayed is the Gregorian, even for a date at which the Gregorian
-calendar did not exist.
-
-   While Emacs cannot display other calendars, it can convert dates to
-and from several other calendars.
-
-* Menu:
-
-* Calendar Systems::      The calendars Emacs understands
-                            (aside from Gregorian).
-* To Other Calendar::     Converting the selected date to various calendars.
-* From Other Calendar::   Moving to a date specified in another calendar.
-* Mayan Calendar::        Moving to a date specified in a Mayan calendar.
-
-   If you are interested in these calendars, you can convert dates one
-at a time.  Put point on the desired date of the Gregorian calendar and
-press the appropriate keys.  The `p' is a mnemonic for "print" since
-Emacs "prints' the equivalent date in the echo area.
-
-\1f
-File: xemacs.info,  Node: Calendar Systems,  Next: To Other Calendar,  Prev: Other Calendars,  Up: Other Calendars
-
-Supported Calendar Systems
-==========================
-
-   The ISO commercial calendar is used largely in Europe.
-
-   The Julian calendar, named after Julius Caesar, was the one used in
-Europe throughout medieval times, and in many countries up until the
-nineteenth century.
-
-   Astronomers use a simple counting of days elapsed since noon, Monday,
-January 1, 4713 B.C. on the Julian calendar.  The number of days elapsed
-is called the *Julian day number* or the *Astronomical day number*.
-
-   The Hebrew calendar is used by tradition in the Jewish religion.  The
-Emacs calendar program uses the Hebrew calendar to determine the dates
-of Jewish holidays.  Hebrew calendar dates begin and end at sunset.
-
-   The Islamic calendar is used in many predominantly Islamic countries.
-Emacs uses it to determine the dates of Islamic holidays.  There is no
-universal agreement in the Islamic world about the calendar; Emacs uses
-a widely accepted version, but the precise dates of Islamic holidays
-often depend on proclamation by religious authorities, not on
-calculations.  As a consequence, the actual dates of observance can vary
-slightly from the dates computed by Emacs.  Islamic calendar dates begin
-and end at sunset.
-
-   The French Revolutionary calendar was created by the Jacobins after
-the 1789 revolution, to represent a more secular and nature-based view
-of the annual cycle, and to install a 10-day week in a rationalization
-measure similar to the metric system.  The French government officially
-abandoned this calendar at the end of 1805.
-
-   The Maya of Central America used three separate, overlapping calendar
-systems, the *long count*, the *tzolkin*, and the *haab*.  Emacs knows
-about all three of these calendars.  Experts dispute the exact
-correlation between the Mayan calendar and our calendar; Emacs uses the
-Goodman-Martinez-Thompson correlation in its calculations.
-
-   The Copts use a calendar based on the ancient Egyptian solar
-calendar.  Their calendar consists of twelve 30-day months followed by
-an extra five-day period.  Once every fourth year they add a leap day
-to this extra period to make it six days.  The Ethiopic calendar is
-identical in structure, but has different year numbers and month names.
-
-   The Persians use a solar calendar based on a design of Omar Khayyam.
-Their calendar consists of twelve months of which the first six have 31
-days, the next five have 30 days, and the last has 29 in ordinary years
-and 30 in leap years.  Leap years occur in a complicated pattern every
-four or five years.
-
-   The Chinese calendar is a complicated system of lunar months arranged
-into solar years.  The years go in cycles of sixty, each year containing
-either twelve months in an ordinary year or thirteen months in a leap
-year; each month has either 29 or 30 days.  Years, ordinary months, and
-days are named by combining one of ten "celestial stems" with one of
-twelve "terrestrial branches" for a total of sixty names that are
-repeated in a cycle of sixty.
-
index 72a3771..301442d 100644 (file)
@@ -30,6 +30,204 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Sunrise/Sunset,  Next: Lunar Phases,  Prev: Holidays,  Up: Calendar/Diary
+
+Times of Sunrise and Sunset
+---------------------------
+
+   Special calendar commands can tell you, to within a minute or two,
+the times of sunrise and sunset for any date.
+
+`S'
+     Display times of sunrise and sunset for the selected date
+     (`calendar-sunrise-sunset').
+
+`Button2 Sunrise/Sunset'
+     Display times of sunrise and sunset for the date you click on.
+
+`M-x sunrise-sunset'
+     Display times of sunrise and sunset for today's date.
+
+`C-u M-x sunrise-sunset'
+     Display times of sunrise and sunset for a specified date.
+
+   Within the calendar, to display the *local times* of sunrise and
+sunset in the echo area, move point to the date you want, and type `S'.
+Alternatively, click `Button2' on the date, then choose
+`Sunrise/Sunset' from the menu that appears.  The command `M-x
+sunrise-sunset' is available outside the calendar to display this
+information for today's date or a specified date.  To specify a date
+other than today, use `C-u M-x sunrise-sunset', which prompts for the
+year, month, and day.
+
+   You can display the times of sunrise and sunset for any location and
+any date with `C-u C-u M-x sunrise-sunset'.  This asks you for a
+longitude, latitude, number of minutes difference from Coordinated
+Universal Time, and date, and then tells you the times of sunrise and
+sunset for that location on that date.
+
+   Because the times of sunrise and sunset depend on the location on
+earth, you need to tell Emacs your latitude, longitude, and location
+name before using these commands.  Here is an example of what to set:
+
+     (setq calendar-latitude 40.1)
+     (setq calendar-longitude -88.2)
+     (setq calendar-location-name "Urbana, IL")
+
+Use one decimal place in the values of `calendar-latitude' and
+`calendar-longitude'.
+
+   Your time zone also affects the local time of sunrise and sunset.
+Emacs usually gets time zone information from the operating system, but
+if these values are not what you want (or if the operating system does
+not supply them), you must set them yourself.  Here is an example:
+
+     (setq calendar-time-zone -360)
+     (setq calendar-standard-time-zone-name "CST")
+     (setq calendar-daylight-time-zone-name "CDT")
+
+The value of `calendar-time-zone' is the number of minutes difference
+between your local standard time and Coordinated Universal Time
+(Greenwich time).  The values of `calendar-standard-time-zone-name' and
+`calendar-daylight-time-zone-name' are the abbreviations used in your
+time zone.  Emacs displays the times of sunrise and sunset *corrected
+for daylight savings time*.  *Note Daylight Savings::, for how daylight
+savings time is determined.
+
+   As a user, you might find it convenient to set the calendar location
+variables for your usual physical location in your `.emacs' file.  And
+when you install Emacs on a machine, you can create a `default.el' file
+which sets them properly for the typical location of most users of that
+machine.  *Note Init File::.
+
+\1f
+File: xemacs.info,  Node: Lunar Phases,  Next: Other Calendars,  Prev: Sunrise/Sunset,  Up: Calendar/Diary
+
+Phases of the Moon
+------------------
+
+   These calendar commands display the dates and times of the phases of
+the moon (new moon, first quarter, full moon, last quarter).  This
+feature is useful for debugging problems that "depend on the phase of
+the moon."
+
+`M'
+     Display the dates and times for all the quarters of the moon for
+     the three-month period shown (`calendar-phases-of-moon').
+
+`M-x phases-of-moon'
+     Display dates and times of the quarters of the moon for three
+     months around today's date.
+
+   Within the calendar, use the `M' command to display a separate
+buffer of the phases of the moon for the current three-month range.  The
+dates and times listed are accurate to within a few minutes.
+
+   Outside the calendar, use the command `M-x phases-of-moon' to
+display the list of the phases of the moon for the current month and the
+preceding and succeeding months.  For information about a different
+month, use `C-u M-x phases-of-moon', which prompts for the month and
+year.
+
+   The dates and times given for the phases of the moon are given in
+local time (corrected for daylight savings, when appropriate); but if
+the variable `calendar-time-zone' is void, Coordinated Universal Time
+(the Greenwich time zone) is used.  *Note Daylight Savings::.
+
+\1f
+File: xemacs.info,  Node: Other Calendars,  Next: Calendar Systems,  Prev: Lunar Phases,  Up: Calendar/Diary
+
+Conversion To and From Other Calendars
+--------------------------------------
+
+   The Emacs calendar displayed is *always* the Gregorian calendar,
+sometimes called the "new style" calendar, which is used in most of the
+world today.  However, this calendar did not exist before the sixteenth
+century and was not widely used before the eighteenth century; it did
+not fully displace the Julian calendar and gain universal acceptance
+until the early twentieth century.  The Emacs calendar can display any
+month since January, year 1 of the current era, but the calendar
+displayed is the Gregorian, even for a date at which the Gregorian
+calendar did not exist.
+
+   While Emacs cannot display other calendars, it can convert dates to
+and from several other calendars.
+
+* Menu:
+
+* Calendar Systems::      The calendars Emacs understands
+                            (aside from Gregorian).
+* To Other Calendar::     Converting the selected date to various calendars.
+* From Other Calendar::   Moving to a date specified in another calendar.
+* Mayan Calendar::        Moving to a date specified in a Mayan calendar.
+
+   If you are interested in these calendars, you can convert dates one
+at a time.  Put point on the desired date of the Gregorian calendar and
+press the appropriate keys.  The `p' is a mnemonic for "print" since
+Emacs "prints' the equivalent date in the echo area.
+
+\1f
+File: xemacs.info,  Node: Calendar Systems,  Next: To Other Calendar,  Prev: Other Calendars,  Up: Other Calendars
+
+Supported Calendar Systems
+==========================
+
+   The ISO commercial calendar is used largely in Europe.
+
+   The Julian calendar, named after Julius Caesar, was the one used in
+Europe throughout medieval times, and in many countries up until the
+nineteenth century.
+
+   Astronomers use a simple counting of days elapsed since noon, Monday,
+January 1, 4713 B.C. on the Julian calendar.  The number of days elapsed
+is called the *Julian day number* or the *Astronomical day number*.
+
+   The Hebrew calendar is used by tradition in the Jewish religion.  The
+Emacs calendar program uses the Hebrew calendar to determine the dates
+of Jewish holidays.  Hebrew calendar dates begin and end at sunset.
+
+   The Islamic calendar is used in many predominantly Islamic countries.
+Emacs uses it to determine the dates of Islamic holidays.  There is no
+universal agreement in the Islamic world about the calendar; Emacs uses
+a widely accepted version, but the precise dates of Islamic holidays
+often depend on proclamation by religious authorities, not on
+calculations.  As a consequence, the actual dates of observance can vary
+slightly from the dates computed by Emacs.  Islamic calendar dates begin
+and end at sunset.
+
+   The French Revolutionary calendar was created by the Jacobins after
+the 1789 revolution, to represent a more secular and nature-based view
+of the annual cycle, and to install a 10-day week in a rationalization
+measure similar to the metric system.  The French government officially
+abandoned this calendar at the end of 1805.
+
+   The Maya of Central America used three separate, overlapping calendar
+systems, the *long count*, the *tzolkin*, and the *haab*.  Emacs knows
+about all three of these calendars.  Experts dispute the exact
+correlation between the Mayan calendar and our calendar; Emacs uses the
+Goodman-Martinez-Thompson correlation in its calculations.
+
+   The Copts use a calendar based on the ancient Egyptian solar
+calendar.  Their calendar consists of twelve 30-day months followed by
+an extra five-day period.  Once every fourth year they add a leap day
+to this extra period to make it six days.  The Ethiopic calendar is
+identical in structure, but has different year numbers and month names.
+
+   The Persians use a solar calendar based on a design of Omar Khayyam.
+Their calendar consists of twelve months of which the first six have 31
+days, the next five have 30 days, and the last has 29 in ordinary years
+and 30 in leap years.  Leap years occur in a complicated pattern every
+four or five years.
+
+   The Chinese calendar is a complicated system of lunar months arranged
+into solar years.  The years go in cycles of sixty, each year containing
+either twelve months in an ordinary year or thirteen months in a leap
+year; each month has either 29 or 30 days.  Years, ordinary months, and
+days are named by combining one of ten "celestial stems" with one of
+twelve "terrestrial branches" for a total of sixty names that are
+repeated in a cycle of sixty.
+
+\1f
 File: xemacs.info,  Node: To Other Calendar,  Next: From Other Calendar,  Prev: Calendar Systems,  Up: Other Calendars
 
 Converting To Other Calendars
@@ -1011,176 +1209,3 @@ after midnight local time when the transition to and from daylight
 savings time should occur.  For Cambridge, Massachusetts both variables'
 values are 120.
 
-\1f
-File: xemacs.info,  Node: Diary Customizing,  Next: Hebrew/Islamic Entries,  Prev: Daylight Savings,  Up: Calendar Customization
-
-Customizing the Diary
-.....................
-
-   Ordinarily, the mode line of the diary buffer window indicates any
-holidays that fall on the date of the diary entries.  The process of
-checking for holidays can take several seconds, so including holiday
-information delays the display of the diary buffer noticeably.  If you'd
-prefer to have a faster display of the diary buffer but without the
-holiday information, set the variable `holidays-in-diary-buffer' to
-`nil'.
-
-   The variable `number-of-diary-entries' controls the number of days
-of diary entries to be displayed at one time.  It affects the initial
-display when `view-diary-entries-initially' is `t', as well as the
-command `M-x diary'.  For example, the default value is 1, which says
-to display only the current day's diary entries.  If the value is 2,
-both the current day's and the next day's entries are displayed.  The
-value can also be a vector of seven elements: for example, if the value
-is `[0 2 2 2 2 4 1]' then no diary entries appear on Sunday, the
-current date's and the next day's diary entries appear Monday through
-Thursday, Friday through Monday's entries appear on Friday, while on
-Saturday only that day's entries appear.
-
-   The variable `print-diary-entries-hook' is a normal hook run after
-preparation of a temporary buffer containing just the diary entries
-currently visible in the diary buffer.  (The other, irrelevant diary
-entries are really absent from the temporary buffer; in the diary
-buffer, they are merely hidden.)  The default value of this hook does
-the printing with the command `lpr-buffer'.  If you want to use a
-different command to do the printing, just change the value of this
-hook.  Other uses might include, for example, rearranging the lines into
-order by day and time.
-
-   You can customize the form of dates in your diary file, if neither
-the standard American nor European styles suits your needs, by setting
-the variable `diary-date-forms'.  This variable is a list of patterns
-for recognizing a date.  Each date pattern is a list whose elements may
-be regular expressions (*note Regexps::.) or the symbols `month',
-`day', `year', `monthname', and `dayname'.  All these elements serve as
-patterns that match certain kinds of text in the diary file.  In order
-for the date pattern, as a whole, to match, all of its elements must
-match consecutively.
-
-   A regular expression in a date pattern matches in its usual fashion,
-using the standard syntax table altered so that `*' is a word
-constituent.
-
-   The symbols `month', `day', `year', `monthname', and `dayname' match
-the month number, day number, year number, month name, and day name of
-the date being considered.  The symbols that match numbers allow
-leading zeros; those that match names allow three-letter abbreviations
-and capitalization.  All the symbols can match `*'; since `*' in a
-diary entry means "any day", "any month", and so on, it should match
-regardless of the date being considered.
-
-   The default value of `diary-date-forms' in the American style is
-this:
-
-     ((month "/" day "[^/0-9]")
-      (month "/" day "/" year "[^0-9]")
-      (monthname " *" day "[^,0-9]")
-      (monthname " *" day ", *" year "[^0-9]")
-      (dayname "\\W"))
-
-Emacs matches of the diary entries with the date forms is done with the
-standard syntax table from Fundamental mode (*note Syntax Tables:
-(lispref)Syntax Tables.), but with the `*' changed so that it is a word
-constituent.
-
-   The date patterns in the list must be *mutually exclusive* and must
-not match any portion of the diary entry itself, just the date and one
-character of whitespace.  If, to be mutually exclusive, the pattern
-must match a portion of the diary entry text--beyond the whitespace
-that ends the date--then the first element of the date pattern *must*
-be `backup'.  This causes the date recognizer to back up to the
-beginning of the current word of the diary entry, after finishing the
-match.  Even if you use `backup', the date pattern must absolutely not
-match more than a portion of the first word of the diary entry.  The
-default value of `diary-date-forms' in the European style is this list:
-
-     ((day "/" month "[^/0-9]")
-      (day "/" month "/" year "[^0-9]")
-      (backup day " *" monthname "\\W+\\<[^*0-9]")
-      (day " *" monthname " *" year "[^0-9]")
-      (dayname "\\W"))
-
-Notice the use of `backup' in the third pattern, because it needs to
-match part of a word beyond the date itself to distinguish it from the
-fourth pattern.
-
-\1f
-File: xemacs.info,  Node: Hebrew/Islamic Entries,  Next: Fancy Diary Display,  Prev: Diary Customizing,  Up: Calendar Customization
-
-Hebrew- and Islamic-Date Diary Entries
-......................................
-
-   Your diary file can have entries based on Hebrew or Islamic dates, as
-well as entries based on the world-standard Gregorian calendar.
-However, because recognition of such entries is time-consuming and most
-people don't use them, you must explicitly enable their use.  If you
-want the diary to recognize Hebrew-date diary entries, for example, you
-must do this:
-
-     (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
-     (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
-
-If you want Islamic-date entries, do this:
-
-     (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
-     (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
-
-   Hebrew- and Islamic-date diary entries have the same formats as
-Gregorian-date diary entries, except that `H' precedes a Hebrew date
-and `I' precedes an Islamic date.  Moreover, because the Hebrew and
-Islamic month names are not uniquely specified by the first three
-letters, you may not abbreviate them.  For example, a diary entry for
-the Hebrew date Heshvan 25 could look like this:
-
-     HHeshvan 25 Happy Hebrew birthday!
-
-and would appear in the diary for any date that corresponds to Heshvan
-25 on the Hebrew calendar.  And here is  Islamic-date diary entry  that
-matches Dhu al-Qada 25:
-
-     IDhu al-Qada 25 Happy Islamic birthday!
-
-and would appear in the diary for any date that corresponds to Dhu
-al-Qada 25 on the Islamic calendar.
-
-   As with Gregorian-date diary entries, Hebrew- and Islamic-date
-entries are nonmarking if they are preceded with an ampersand (`&').
-
-   Here is a table of commands used in the calendar to create diary
-entries that match the selected date and other dates that are similar
-in the Hebrew or Islamic calendar:
-
-`i h d'
-     Add a diary entry for the Hebrew date corresponding to the
-     selected date (`insert-hebrew-diary-entry').
-
-`i h m'
-     Add a diary entry for the day of the Hebrew month corresponding to
-     the selected date (`insert-monthly-hebrew-diary-entry').  This
-     diary entry matches any date that has the same Hebrew
-     day-within-month as the selected date.
-
-`i h y'
-     Add a diary entry for the day of the Hebrew year corresponding to
-     the selected date (`insert-yearly-hebrew-diary-entry').  This diary
-     entry matches any date which has the same Hebrew month and
-     day-within-month as the selected date.
-
-`i i d'
-     Add a diary entry for the Islamic date corresponding to the
-     selected date (`insert-islamic-diary-entry').
-
-`i i m'
-     Add a diary entry for the day of the Islamic month corresponding
-     to the selected date (`insert-monthly-islamic-diary-entry').
-
-`i i y'
-     Add a diary entry for the day of the Islamic year corresponding to
-     the selected date (`insert-yearly-islamic-diary-entry').
-
-   These commands work much like the corresponding commands for ordinary
-diary entries: they apply to the date that point is on in the calendar
-window, and what they do is insert just the date portion of a diary
-entry at the end of your diary file.  You must then insert the rest of
-the diary entry.
-
index acd0168..ffe69e8 100644 (file)
@@ -30,6 +30,179 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Diary Customizing,  Next: Hebrew/Islamic Entries,  Prev: Daylight Savings,  Up: Calendar Customization
+
+Customizing the Diary
+.....................
+
+   Ordinarily, the mode line of the diary buffer window indicates any
+holidays that fall on the date of the diary entries.  The process of
+checking for holidays can take several seconds, so including holiday
+information delays the display of the diary buffer noticeably.  If you'd
+prefer to have a faster display of the diary buffer but without the
+holiday information, set the variable `holidays-in-diary-buffer' to
+`nil'.
+
+   The variable `number-of-diary-entries' controls the number of days
+of diary entries to be displayed at one time.  It affects the initial
+display when `view-diary-entries-initially' is `t', as well as the
+command `M-x diary'.  For example, the default value is 1, which says
+to display only the current day's diary entries.  If the value is 2,
+both the current day's and the next day's entries are displayed.  The
+value can also be a vector of seven elements: for example, if the value
+is `[0 2 2 2 2 4 1]' then no diary entries appear on Sunday, the
+current date's and the next day's diary entries appear Monday through
+Thursday, Friday through Monday's entries appear on Friday, while on
+Saturday only that day's entries appear.
+
+   The variable `print-diary-entries-hook' is a normal hook run after
+preparation of a temporary buffer containing just the diary entries
+currently visible in the diary buffer.  (The other, irrelevant diary
+entries are really absent from the temporary buffer; in the diary
+buffer, they are merely hidden.)  The default value of this hook does
+the printing with the command `lpr-buffer'.  If you want to use a
+different command to do the printing, just change the value of this
+hook.  Other uses might include, for example, rearranging the lines into
+order by day and time.
+
+   You can customize the form of dates in your diary file, if neither
+the standard American nor European styles suits your needs, by setting
+the variable `diary-date-forms'.  This variable is a list of patterns
+for recognizing a date.  Each date pattern is a list whose elements may
+be regular expressions (*note Regexps::.) or the symbols `month',
+`day', `year', `monthname', and `dayname'.  All these elements serve as
+patterns that match certain kinds of text in the diary file.  In order
+for the date pattern, as a whole, to match, all of its elements must
+match consecutively.
+
+   A regular expression in a date pattern matches in its usual fashion,
+using the standard syntax table altered so that `*' is a word
+constituent.
+
+   The symbols `month', `day', `year', `monthname', and `dayname' match
+the month number, day number, year number, month name, and day name of
+the date being considered.  The symbols that match numbers allow
+leading zeros; those that match names allow three-letter abbreviations
+and capitalization.  All the symbols can match `*'; since `*' in a
+diary entry means "any day", "any month", and so on, it should match
+regardless of the date being considered.
+
+   The default value of `diary-date-forms' in the American style is
+this:
+
+     ((month "/" day "[^/0-9]")
+      (month "/" day "/" year "[^0-9]")
+      (monthname " *" day "[^,0-9]")
+      (monthname " *" day ", *" year "[^0-9]")
+      (dayname "\\W"))
+
+Emacs matches of the diary entries with the date forms is done with the
+standard syntax table from Fundamental mode (*note Syntax Tables:
+(lispref)Syntax Tables.), but with the `*' changed so that it is a word
+constituent.
+
+   The date patterns in the list must be *mutually exclusive* and must
+not match any portion of the diary entry itself, just the date and one
+character of whitespace.  If, to be mutually exclusive, the pattern
+must match a portion of the diary entry text--beyond the whitespace
+that ends the date--then the first element of the date pattern *must*
+be `backup'.  This causes the date recognizer to back up to the
+beginning of the current word of the diary entry, after finishing the
+match.  Even if you use `backup', the date pattern must absolutely not
+match more than a portion of the first word of the diary entry.  The
+default value of `diary-date-forms' in the European style is this list:
+
+     ((day "/" month "[^/0-9]")
+      (day "/" month "/" year "[^0-9]")
+      (backup day " *" monthname "\\W+\\<[^*0-9]")
+      (day " *" monthname " *" year "[^0-9]")
+      (dayname "\\W"))
+
+Notice the use of `backup' in the third pattern, because it needs to
+match part of a word beyond the date itself to distinguish it from the
+fourth pattern.
+
+\1f
+File: xemacs.info,  Node: Hebrew/Islamic Entries,  Next: Fancy Diary Display,  Prev: Diary Customizing,  Up: Calendar Customization
+
+Hebrew- and Islamic-Date Diary Entries
+......................................
+
+   Your diary file can have entries based on Hebrew or Islamic dates, as
+well as entries based on the world-standard Gregorian calendar.
+However, because recognition of such entries is time-consuming and most
+people don't use them, you must explicitly enable their use.  If you
+want the diary to recognize Hebrew-date diary entries, for example, you
+must do this:
+
+     (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
+     (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
+
+If you want Islamic-date entries, do this:
+
+     (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
+     (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
+
+   Hebrew- and Islamic-date diary entries have the same formats as
+Gregorian-date diary entries, except that `H' precedes a Hebrew date
+and `I' precedes an Islamic date.  Moreover, because the Hebrew and
+Islamic month names are not uniquely specified by the first three
+letters, you may not abbreviate them.  For example, a diary entry for
+the Hebrew date Heshvan 25 could look like this:
+
+     HHeshvan 25 Happy Hebrew birthday!
+
+and would appear in the diary for any date that corresponds to Heshvan
+25 on the Hebrew calendar.  And here is  Islamic-date diary entry  that
+matches Dhu al-Qada 25:
+
+     IDhu al-Qada 25 Happy Islamic birthday!
+
+and would appear in the diary for any date that corresponds to Dhu
+al-Qada 25 on the Islamic calendar.
+
+   As with Gregorian-date diary entries, Hebrew- and Islamic-date
+entries are nonmarking if they are preceded with an ampersand (`&').
+
+   Here is a table of commands used in the calendar to create diary
+entries that match the selected date and other dates that are similar
+in the Hebrew or Islamic calendar:
+
+`i h d'
+     Add a diary entry for the Hebrew date corresponding to the
+     selected date (`insert-hebrew-diary-entry').
+
+`i h m'
+     Add a diary entry for the day of the Hebrew month corresponding to
+     the selected date (`insert-monthly-hebrew-diary-entry').  This
+     diary entry matches any date that has the same Hebrew
+     day-within-month as the selected date.
+
+`i h y'
+     Add a diary entry for the day of the Hebrew year corresponding to
+     the selected date (`insert-yearly-hebrew-diary-entry').  This diary
+     entry matches any date which has the same Hebrew month and
+     day-within-month as the selected date.
+
+`i i d'
+     Add a diary entry for the Islamic date corresponding to the
+     selected date (`insert-islamic-diary-entry').
+
+`i i m'
+     Add a diary entry for the day of the Islamic month corresponding
+     to the selected date (`insert-monthly-islamic-diary-entry').
+
+`i i y'
+     Add a diary entry for the day of the Islamic year corresponding to
+     the selected date (`insert-yearly-islamic-diary-entry').
+
+   These commands work much like the corresponding commands for ordinary
+diary entries: they apply to the date that point is on in the calendar
+window, and what they do is insert just the date portion of a diary
+entry at the end of your diary file.  You must then insert the rest of
+the diary entry.
+
+\1f
 File: xemacs.info,  Node: Fancy Diary Display,  Next: Included Diary Files,  Prev: Hebrew/Islamic Entries,  Up: Calendar Customization
 
 Fancy Diary Display
@@ -1000,215 +1173,3 @@ File::.
 * X Resources::            X resources controlling various aspects of the
                      behavior of XEmacs.
 
-\1f
-File: xemacs.info,  Node: Minor Modes,  Next: Variables,  Up: Customization
-
-Minor Modes
-===========
-
-   Minor modes are options which you can use or not.  For example, Auto
-Fill mode is a minor mode in which <SPC> breaks lines between words as
-you type.  All the minor modes are independent of each other and of the
-selected major mode.  Most minor modes inform you in the mode line when
-they are on; for example, `Fill' in the mode line means that Auto Fill
-mode is on.
-
-   Append `-mode' to the name of a minor mode to get the name of a
-command function that turns the mode on or off.  Thus, the command to
-enable or disable Auto Fill mode is called `M-x auto-fill-mode'.  These
-commands are usually invoked with `M-x', but you can bind keys to them
-if you wish.  With no argument, the function turns the mode on if it was
-off and off if it was on.  This is known as "toggling".  A positive
-argument always turns the mode on, and an explicit zero argument or a
-negative argument always turns it off.
-
-   Auto Fill mode allows you to enter filled text without breaking lines
-explicitly.  Emacs inserts newlines as necessary to prevent lines from
-becoming too long.  *Note Filling::.
-
-   Overwrite mode causes ordinary printing characters to replace
-existing text instead of moving it to the right.  For example, if point
-is in front of the `B' in `FOOBAR', and you type a `G' in Overwrite
-mode, it changes to `FOOGAR', instead of `FOOGBAR'.
-
-   Abbrev mode allows you to define abbreviations that automatically
-expand as you type them.  For example, `amd' might expand to `abbrev
-mode'.  *Note Abbrevs::, for full information.
-
-\1f
-File: xemacs.info,  Node: Variables,  Next: Keyboard Macros,  Prev: Minor Modes,  Up: Customization
-
-Variables
-=========
-
-   A "variable" is a Lisp symbol which has a value.  Variable names can
-contain any characters, but by convention they are words separated by
-hyphens.  A variable can also have a documentation string, which
-describes what kind of value it should have and how the value will be
-used.
-
-   Lisp allows any variable to have any kind of value, but most
-variables that Emacs uses require a value of a certain type.  Often the
-value has to be a string or a number.  Sometimes we say that a certain
-feature is turned on if a variable is "non-`nil'," meaning that if the
-variable's value is `nil', the feature is off, but the feature is on
-for any other value.  The conventional value to turn on the
-feature--since you have to pick one particular value when you set the
-variable--is `t'.
-
-   Emacs uses many Lisp variables for internal recordkeeping, as any
-Lisp program must, but the most interesting variables for you are the
-ones that exist for the sake of customization.  Emacs does not
-(usually) change the values of these variables; instead, you set the
-values, and thereby alter and control the behavior of certain Emacs
-commands.  These variables are called "options".  Most options are
-documented in this manual and appear in the Variable Index (*note
-Variable Index::.).
-
-   One example of a variable which is an option is `fill-column', which
-specifies the position of the right margin (as a number of characters
-from the left margin) to be used by the fill commands (*note
-Filling::.).
-
-* Menu:
-
-* Examining::           Examining or setting one variable's value.
-* Easy Customization::  Convenient and easy customization of variables.
-* Edit Options::        Examining or editing list of all variables' values.
-* Locals::              Per-buffer values of variables.
-* File Variables::      How files can specify variable values.
-
-\1f
-File: xemacs.info,  Node: Examining,  Next: Easy Customization,  Up: Variables
-
-Examining and Setting Variables
--------------------------------
-
-`C-h v'
-`M-x describe-variable'
-     Print the value and documentation of a variable.
-
-`M-x set-variable'
-     Change the value of a variable.
-
-   To examine the value of a single variable, use `C-h v'
-(`describe-variable'), which reads a variable name using the
-minibuffer, with completion.  It prints both the value and the
-documentation of the variable.
-
-     C-h v fill-column <RET>
-
-prints something like:
-
-     fill-column's value is 75
-     
-     Documentation:
-     *Column beyond which automatic line-wrapping should happen.
-     Automatically becomes local when set in any fashion.
-
-The star at the beginning of the documentation indicates that this
-variable is an option.  `C-h v' is not restricted to options; it allows
-any variable name.
-
-   If you know which option you want to set, you can use `M-x
-set-variable' to set it.  This prompts for the variable name in the
-minibuffer (with completion), and then prompts for a Lisp expression
-for the new value using the minibuffer a second time.  For example,
-
-     M-x set-variable <RET> fill-column <RET> 75 <RET>
-
-sets `fill-column' to 75, as if you had executed the Lisp expression
-`(setq fill-column 75)'.
-
-   Setting variables in this way, like all means of customizing Emacs
-except where explicitly stated, affects only the current Emacs session.
-
-\1f
-File: xemacs.info,  Node: Easy Customization,  Next: Edit Options,  Prev: Examining,  Up: Variables
-
-Easy Customization Interface
-----------------------------
-
-   A convenient way to find the user option variables that you want to
-change, and then change them, is with `M-x customize'.  This command
-creates a "customization buffer" with which you can browse through the
-Emacs user options in a logically organized structure, then edit and
-set their values.  You can also use the customization buffer to save
-settings permanently.  (Not all Emacs user options are included in this
-structure as of yet, but we are adding the rest.)
-
-* Menu:
-
-* Groups: Customization Groups.
-                             How options are classified in a structure.
-* Changing an Option::       How to edit a value and set an option.
-* Face Customization::       How to edit the attributes of a face.
-* Specific Customization::   Making a customization buffer for specific
-                                options, faces, or groups.
-
-\1f
-File: xemacs.info,  Node: Customization Groups,  Next: Changing an Option,  Up: Easy Customization
-
-Customization Groups
-....................
-
-   For customization purposes, user options are organized into "groups"
-to help you find them.  Groups are collected into bigger groups, all
-the way up to a master group called `Emacs'.
-
-   `M-x customize' creates a customization buffer that shows the
-top-level `Emacs' group and the second-level groups immediately under
-it.  It looks like this, in part:
-
-     /- Emacs group: ---------------------------------------------------\
-           [State]: visible group members are all at standard settings.
-        Customization of the One True Editor.
-        See also [Manual].
-     
-      [Open] Editing group
-     Basic text editing facilities.
-     
-      [Open] External group
-     Interfacing to external utilities.
-     
-     MORE SECOND-LEVEL GROUPS
-     
-     \- Emacs group end ------------------------------------------------/
-
-This says that the buffer displays the contents of the `Emacs' group.
-The other groups are listed because they are its contents.  But they
-are listed differently, without indentation and dashes, because *their*
-contents are not included.  Each group has a single-line documentation
-string; the `Emacs' group also has a `[State]' line.
-
-   Most of the text in the customization buffer is read-only, but it
-typically includes some "editable fields" that you can edit.  There are
-also "active fields"; this means a field that does something when you
-"invoke" it.  To invoke an active field, either click on it with
-`Mouse-1', or move point to it and type <RET>.
-
-   For example, the phrase `[Open]' that appears in a second-level
-group is an active field.  Invoking the `[Open]' field for a group
-opens up a new customization buffer, which shows that group and its
-contents.  This field is a kind of hypertext link to another group.
-
-   The `Emacs' group does not include any user options itself, but
-other groups do.  By examining various groups, you will eventually find
-the options and faces that belong to the feature you are interested in
-customizing.  Then you can use the customization buffer to set them.
-
-   You can view the structure of customization groups on a larger scale
-with `M-x customize-browse'.  This command creates a special kind of
-customization buffer which shows only the names of the groups (and
-options and faces), and their structure.
-
-   In this buffer, you can show the contents of a group by invoking
-`[+]'.  When the group contents are visible, this button changes to
-`[-]'; invoking that hides the group contents.
-
-   Each group, option or face name in this buffer has an active field
-which says `[Group]', `[Option]' or `[Face]'.  Invoking that active
-field creates an ordinary customization buffer showing just that group
-and its contents, just that option, or just that face.  This is the way
-to set values in it.
-
index f5aabf3..361eb03 100644 (file)
@@ -30,6 +30,218 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Minor Modes,  Next: Variables,  Up: Customization
+
+Minor Modes
+===========
+
+   Minor modes are options which you can use or not.  For example, Auto
+Fill mode is a minor mode in which <SPC> breaks lines between words as
+you type.  All the minor modes are independent of each other and of the
+selected major mode.  Most minor modes inform you in the mode line when
+they are on; for example, `Fill' in the mode line means that Auto Fill
+mode is on.
+
+   Append `-mode' to the name of a minor mode to get the name of a
+command function that turns the mode on or off.  Thus, the command to
+enable or disable Auto Fill mode is called `M-x auto-fill-mode'.  These
+commands are usually invoked with `M-x', but you can bind keys to them
+if you wish.  With no argument, the function turns the mode on if it was
+off and off if it was on.  This is known as "toggling".  A positive
+argument always turns the mode on, and an explicit zero argument or a
+negative argument always turns it off.
+
+   Auto Fill mode allows you to enter filled text without breaking lines
+explicitly.  Emacs inserts newlines as necessary to prevent lines from
+becoming too long.  *Note Filling::.
+
+   Overwrite mode causes ordinary printing characters to replace
+existing text instead of moving it to the right.  For example, if point
+is in front of the `B' in `FOOBAR', and you type a `G' in Overwrite
+mode, it changes to `FOOGAR', instead of `FOOGBAR'.
+
+   Abbrev mode allows you to define abbreviations that automatically
+expand as you type them.  For example, `amd' might expand to `abbrev
+mode'.  *Note Abbrevs::, for full information.
+
+\1f
+File: xemacs.info,  Node: Variables,  Next: Keyboard Macros,  Prev: Minor Modes,  Up: Customization
+
+Variables
+=========
+
+   A "variable" is a Lisp symbol which has a value.  Variable names can
+contain any characters, but by convention they are words separated by
+hyphens.  A variable can also have a documentation string, which
+describes what kind of value it should have and how the value will be
+used.
+
+   Lisp allows any variable to have any kind of value, but most
+variables that Emacs uses require a value of a certain type.  Often the
+value has to be a string or a number.  Sometimes we say that a certain
+feature is turned on if a variable is "non-`nil'," meaning that if the
+variable's value is `nil', the feature is off, but the feature is on
+for any other value.  The conventional value to turn on the
+feature--since you have to pick one particular value when you set the
+variable--is `t'.
+
+   Emacs uses many Lisp variables for internal recordkeeping, as any
+Lisp program must, but the most interesting variables for you are the
+ones that exist for the sake of customization.  Emacs does not
+(usually) change the values of these variables; instead, you set the
+values, and thereby alter and control the behavior of certain Emacs
+commands.  These variables are called "options".  Most options are
+documented in this manual and appear in the Variable Index (*note
+Variable Index::.).
+
+   One example of a variable which is an option is `fill-column', which
+specifies the position of the right margin (as a number of characters
+from the left margin) to be used by the fill commands (*note
+Filling::.).
+
+* Menu:
+
+* Examining::           Examining or setting one variable's value.
+* Easy Customization::  Convenient and easy customization of variables.
+* Edit Options::        Examining or editing list of all variables' values.
+* Locals::              Per-buffer values of variables.
+* File Variables::      How files can specify variable values.
+
+\1f
+File: xemacs.info,  Node: Examining,  Next: Easy Customization,  Up: Variables
+
+Examining and Setting Variables
+-------------------------------
+
+`C-h v'
+`M-x describe-variable'
+     Print the value and documentation of a variable.
+
+`M-x set-variable'
+     Change the value of a variable.
+
+   To examine the value of a single variable, use `C-h v'
+(`describe-variable'), which reads a variable name using the
+minibuffer, with completion.  It prints both the value and the
+documentation of the variable.
+
+     C-h v fill-column <RET>
+
+prints something like:
+
+     fill-column's value is 75
+     
+     Documentation:
+     *Column beyond which automatic line-wrapping should happen.
+     Automatically becomes local when set in any fashion.
+
+The star at the beginning of the documentation indicates that this
+variable is an option.  `C-h v' is not restricted to options; it allows
+any variable name.
+
+   If you know which option you want to set, you can use `M-x
+set-variable' to set it.  This prompts for the variable name in the
+minibuffer (with completion), and then prompts for a Lisp expression
+for the new value using the minibuffer a second time.  For example,
+
+     M-x set-variable <RET> fill-column <RET> 75 <RET>
+
+sets `fill-column' to 75, as if you had executed the Lisp expression
+`(setq fill-column 75)'.
+
+   Setting variables in this way, like all means of customizing Emacs
+except where explicitly stated, affects only the current Emacs session.
+
+\1f
+File: xemacs.info,  Node: Easy Customization,  Next: Edit Options,  Prev: Examining,  Up: Variables
+
+Easy Customization Interface
+----------------------------
+
+   A convenient way to find the user option variables that you want to
+change, and then change them, is with `M-x customize'.  This command
+creates a "customization buffer" with which you can browse through the
+Emacs user options in a logically organized structure, then edit and
+set their values.  You can also use the customization buffer to save
+settings permanently.  (Not all Emacs user options are included in this
+structure as of yet, but we are adding the rest.)
+
+* Menu:
+
+* Groups: Customization Groups.
+                             How options are classified in a structure.
+* Changing an Option::       How to edit a value and set an option.
+* Face Customization::       How to edit the attributes of a face.
+* Specific Customization::   Making a customization buffer for specific
+                                options, faces, or groups.
+
+\1f
+File: xemacs.info,  Node: Customization Groups,  Next: Changing an Option,  Up: Easy Customization
+
+Customization Groups
+....................
+
+   For customization purposes, user options are organized into "groups"
+to help you find them.  Groups are collected into bigger groups, all
+the way up to a master group called `Emacs'.
+
+   `M-x customize' creates a customization buffer that shows the
+top-level `Emacs' group and the second-level groups immediately under
+it.  It looks like this, in part:
+
+     /- Emacs group: ---------------------------------------------------\
+           [State]: visible group members are all at standard settings.
+        Customization of the One True Editor.
+        See also [Manual].
+     
+      [Open] Editing group
+     Basic text editing facilities.
+     
+      [Open] External group
+     Interfacing to external utilities.
+     
+     MORE SECOND-LEVEL GROUPS
+     
+     \- Emacs group end ------------------------------------------------/
+
+This says that the buffer displays the contents of the `Emacs' group.
+The other groups are listed because they are its contents.  But they
+are listed differently, without indentation and dashes, because *their*
+contents are not included.  Each group has a single-line documentation
+string; the `Emacs' group also has a `[State]' line.
+
+   Most of the text in the customization buffer is read-only, but it
+typically includes some "editable fields" that you can edit.  There are
+also "active fields"; this means a field that does something when you
+"invoke" it.  To invoke an active field, either click on it with
+`Mouse-1', or move point to it and type <RET>.
+
+   For example, the phrase `[Open]' that appears in a second-level
+group is an active field.  Invoking the `[Open]' field for a group
+opens up a new customization buffer, which shows that group and its
+contents.  This field is a kind of hypertext link to another group.
+
+   The `Emacs' group does not include any user options itself, but
+other groups do.  By examining various groups, you will eventually find
+the options and faces that belong to the feature you are interested in
+customizing.  Then you can use the customization buffer to set them.
+
+   You can view the structure of customization groups on a larger scale
+with `M-x customize-browse'.  This command creates a special kind of
+customization buffer which shows only the names of the groups (and
+options and faces), and their structure.
+
+   In this buffer, you can show the contents of a group by invoking
+`[+]'.  When the group contents are visible, this button changes to
+`[-]'; invoking that hides the group contents.
+
+   Each group, option or face name in this buffer has an active field
+which says `[Group]', `[Option]' or `[Face]'.  Invoking that active
+field creates an ordinary customization buffer showing just that group
+and its contents, just that option, or just that face.  This is the way
+to set values in it.
+
+\1f
 File: xemacs.info,  Node: Changing an Option,  Next: Face Customization,  Prev: Customization Groups,  Up: Easy Customization
 
 Changing an Option
@@ -783,9 +995,9 @@ local map, which affects all buffers using the same major mode.
 
 * Menu:
 
-* Interactive Rebinding::     Changing Key Bindings Interactively
-* Programmatic Rebinding::    Changing Key Bindings Programmatically
-* Key Bindings Using Strings::Using Strings for Changing Key Bindings
+* Interactive Rebinding::      Changing Key Bindings Interactively
+* Programmatic Rebinding::     Changing Key Bindings Programmatically
+* Key Bindings Using Strings:: Using Strings for Changing Key Bindings
 
 \1f
 File: xemacs.info,  Node: Interactive Rebinding,  Next: Programmatic Rebinding,  Up: Rebinding
@@ -968,226 +1180,3 @@ fashion:
              control [      escape
              control @      control space
 
-\1f
-File: xemacs.info,  Node: Disabling,  Prev: Rebinding,  Up: Key Bindings
-
-Disabling Commands
-------------------
-
-   Disabling a command marks it as requiring confirmation before it can
-be executed.  The purpose of disabling a command is to prevent
-beginning users from executing it by accident and being confused.
-
-   The direct mechanism for disabling a command is to have a non-`nil'
-`disabled' property on the Lisp symbol for the command.  These
-properties are normally set by the user's `.emacs' file with Lisp
-expressions such as:
-
-     (put 'delete-region 'disabled t)
-
-   If the value of the `disabled' property is a string, that string is
-included in the message printed when the command is used:
-
-     (put 'delete-region 'disabled
-          "Text deleted this way cannot be yanked back!\n")
-
-   You can disable a command either by editing the `.emacs' file
-directly or with the command `M-x disable-command', which edits the
-`.emacs' file for you.  *Note Init File::.
-
-   When you attempt to invoke a disabled command interactively in Emacs,
-a window is displayed containing the command's name, its documentation,
-and some instructions on what to do next; then Emacs asks for input
-saying whether to execute the command as requested, enable it and
-execute, or cancel it.  If you decide to enable the command, you are
-asked whether to do this permanently or just for the current session.
-Enabling permanently works by automatically editing your `.emacs' file.
-You can use `M-x enable-command' at any time to enable any command
-permanently.
-
-   Whether a command is disabled is independent of what key is used to
-invoke it; it also applies if the command is invoked using `M-x'.
-Disabling a command has no effect on calling it as a function from Lisp
-programs.
-
-\1f
-File: xemacs.info,  Node: Syntax,  Next: Init File,  Prev: Key Bindings,  Up: Customization
-
-The Syntax Table
-================
-
-   All the Emacs commands which parse words or balance parentheses are
-controlled by the "syntax table".  The syntax table specifies which
-characters are opening delimiters, which are parts of words, which are
-string quotes, and so on.  Actually, each major mode has its own syntax
-table (though sometimes related major modes use the same one) which it
-installs in each buffer that uses that major mode.  The syntax table
-installed in the current buffer is the one that all commands use, so we
-call it "the" syntax table.  A syntax table is a Lisp object, a vector
-of length 256 whose elements are numbers.
-
-* Menu:
-
-* Entry: Syntax Entry.    What the syntax table records for each character.
-* Change: Syntax Change.  How to change the information.
-
-\1f
-File: xemacs.info,  Node: Syntax Entry,  Next: Syntax Change,  Up: Syntax
-
-Information About Each Character
---------------------------------
-
-   The syntax table entry for a character is a number that encodes six
-pieces of information:
-
-   * The syntactic class of the character, represented as a small
-     integer
-
-   * The matching delimiter, for delimiter characters only (the
-     matching delimiter of `(' is `)', and vice versa)
-
-   * A flag saying whether the character is the first character of a
-     two-character comment starting sequence
-
-   * A flag saying whether the character is the second character of a
-     two-character comment starting sequence
-
-   * A flag saying whether the character is the first character of a
-     two-character comment ending sequence
-
-   * A flag saying whether the character is the second character of a
-     two-character comment ending sequence
-
-   The syntactic classes are stored internally as small integers, but
-are usually described to or by the user with characters.  For example,
-`(' is used to specify the syntactic class of opening delimiters.  Here
-is a table of syntactic classes, with the characters that specify them.
-
-` '
-     The class of whitespace characters.
-
-`w'
-     The class of word-constituent characters.
-
-`_'
-     The class of characters that are part of symbol names but not
-     words.  This class is represented by `_' because the character `_'
-     has this class in both C and Lisp.
-
-`.'
-     The class of punctuation characters that do not fit into any other
-     special class.
-
-`('
-     The class of opening delimiters.
-
-`)'
-     The class of closing delimiters.
-
-`''
-     The class of expression-adhering characters.  These characters are
-     part of a symbol if found within or adjacent to one, and are part
-     of a following expression if immediately preceding one, but are
-     like whitespace if surrounded by whitespace.
-
-`"'
-     The class of string-quote characters.  They match each other in
-     pairs, and the characters within the pair all lose their syntactic
-     significance except for the `\' and `/' classes of escape
-     characters, which can be used to include a string-quote inside the
-     string.
-
-`$'
-     The class of self-matching delimiters.  This is intended for TeX's
-     `$', which is used both to enter and leave math mode.  Thus, a
-     pair of matching `$' characters surround each piece of math mode
-     TeX input.  A pair of adjacent `$' characters act like a single
-     one for purposes of matching.
-
-`/'
-     The class of escape characters that always just deny the following
-     character its special syntactic significance.  The character after
-     one of these escapes is always treated as alphabetic.
-
-`\'
-     The class of C-style escape characters.  In practice, these are
-     treated just like `/'-class characters, because the extra
-     possibilities for C escapes (such as being followed by digits)
-     have no effect on where the containing expression ends.
-
-`<'
-     The class of comment-starting characters.  Only single-character
-     comment starters (such as `;' in Lisp mode) are represented this
-     way.
-
-`>'
-     The class of comment-ending characters.  Newline has this syntax in
-     Lisp mode.
-
-   The characters flagged as part of two-character comment delimiters
-can have other syntactic functions most of the time.  For example, `/'
-and `*' in C code, when found separately, have nothing to do with
-comments.  The comment-delimiter significance overrides when the pair of
-characters occur together in the proper order.  Only the list and sexp
-commands use the syntax table to find comments; the commands
-specifically for comments have other variables that tell them where to
-find comments.  Moreover, the list and sexp commands notice comments
-only if `parse-sexp-ignore-comments' is non-`nil'.  This variable is set
-to `nil' in modes where comment-terminator sequences are liable to
-appear where there is no comment, for example, in Lisp mode where the
-comment terminator is a newline but not every newline ends a comment.
-
-\1f
-File: xemacs.info,  Node: Syntax Change,  Prev: Syntax Entry,  Up: Syntax
-
-Altering Syntax Information
----------------------------
-
-   It is possible to alter a character's syntax table entry by storing
-a new number in the appropriate element of the syntax table, but it
-would be hard to determine what number to use.  Emacs therefore
-provides a command that allows you to specify the syntactic properties
-of a character in a convenient way.
-
-   `M-x modify-syntax-entry' is the command to change a character's
-syntax.  It can be used interactively and is also used by major modes
-to initialize their own syntax tables.  Its first argument is the
-character to change.  The second argument is a string that specifies the
-new syntax.  When called from Lisp code, there is a third, optional
-argument, which specifies the syntax table in which to make the change.
-If not supplied, or if this command is called interactively, the third
-argument defaults to the current buffer's syntax table.
-
-  1. The first character in the string specifies the syntactic class.
-     It is one of the characters in the previous table (*note Syntax
-     Entry::.).
-
-  2. The second character is the matching delimiter.  For a character
-     that is not an opening or closing delimiter, this should be a
-     space, and may be omitted if no following characters are needed.
-
-  3. The remaining characters are flags.  The flag characters allowed
-     are:
-
-    `1'
-          Flag this character as the first of a two-character comment
-          starting sequence.
-
-    `2'
-          Flag this character as the second of a two-character comment
-          starting sequence.
-
-    `3'
-          Flag this character as the first of a two-character comment
-          ending sequence.
-
-    `4'
-          Flag this character as the second of a two-character comment
-          ending sequence.
-
-   Use `C-h s' (`describe-syntax') to display a description of the
-contents of the current syntax table.  The description of each
-character includes both the string you have to pass to
-`modify-syntax-entry' to set up that character's current syntax, and
-some English to explain that string if necessary.
-
index 34260d2..2280739 100644 (file)
@@ -30,6 +30,229 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Disabling,  Prev: Rebinding,  Up: Key Bindings
+
+Disabling Commands
+------------------
+
+   Disabling a command marks it as requiring confirmation before it can
+be executed.  The purpose of disabling a command is to prevent
+beginning users from executing it by accident and being confused.
+
+   The direct mechanism for disabling a command is to have a non-`nil'
+`disabled' property on the Lisp symbol for the command.  These
+properties are normally set by the user's `.emacs' file with Lisp
+expressions such as:
+
+     (put 'delete-region 'disabled t)
+
+   If the value of the `disabled' property is a string, that string is
+included in the message printed when the command is used:
+
+     (put 'delete-region 'disabled
+          "Text deleted this way cannot be yanked back!\n")
+
+   You can disable a command either by editing the `.emacs' file
+directly or with the command `M-x disable-command', which edits the
+`.emacs' file for you.  *Note Init File::.
+
+   When you attempt to invoke a disabled command interactively in Emacs,
+a window is displayed containing the command's name, its documentation,
+and some instructions on what to do next; then Emacs asks for input
+saying whether to execute the command as requested, enable it and
+execute, or cancel it.  If you decide to enable the command, you are
+asked whether to do this permanently or just for the current session.
+Enabling permanently works by automatically editing your `.emacs' file.
+You can use `M-x enable-command' at any time to enable any command
+permanently.
+
+   Whether a command is disabled is independent of what key is used to
+invoke it; it also applies if the command is invoked using `M-x'.
+Disabling a command has no effect on calling it as a function from Lisp
+programs.
+
+\1f
+File: xemacs.info,  Node: Syntax,  Next: Init File,  Prev: Key Bindings,  Up: Customization
+
+The Syntax Table
+================
+
+   All the Emacs commands which parse words or balance parentheses are
+controlled by the "syntax table".  The syntax table specifies which
+characters are opening delimiters, which are parts of words, which are
+string quotes, and so on.  Actually, each major mode has its own syntax
+table (though sometimes related major modes use the same one) which it
+installs in each buffer that uses that major mode.  The syntax table
+installed in the current buffer is the one that all commands use, so we
+call it "the" syntax table.  A syntax table is a Lisp object, a vector
+of length 256 whose elements are numbers.
+
+* Menu:
+
+* Entry: Syntax Entry.    What the syntax table records for each character.
+* Change: Syntax Change.  How to change the information.
+
+\1f
+File: xemacs.info,  Node: Syntax Entry,  Next: Syntax Change,  Up: Syntax
+
+Information About Each Character
+--------------------------------
+
+   The syntax table entry for a character is a number that encodes six
+pieces of information:
+
+   * The syntactic class of the character, represented as a small
+     integer
+
+   * The matching delimiter, for delimiter characters only (the
+     matching delimiter of `(' is `)', and vice versa)
+
+   * A flag saying whether the character is the first character of a
+     two-character comment starting sequence
+
+   * A flag saying whether the character is the second character of a
+     two-character comment starting sequence
+
+   * A flag saying whether the character is the first character of a
+     two-character comment ending sequence
+
+   * A flag saying whether the character is the second character of a
+     two-character comment ending sequence
+
+   The syntactic classes are stored internally as small integers, but
+are usually described to or by the user with characters.  For example,
+`(' is used to specify the syntactic class of opening delimiters.  Here
+is a table of syntactic classes, with the characters that specify them.
+
+` '
+     The class of whitespace characters.
+
+`w'
+     The class of word-constituent characters.
+
+`_'
+     The class of characters that are part of symbol names but not
+     words.  This class is represented by `_' because the character `_'
+     has this class in both C and Lisp.
+
+`.'
+     The class of punctuation characters that do not fit into any other
+     special class.
+
+`('
+     The class of opening delimiters.
+
+`)'
+     The class of closing delimiters.
+
+`''
+     The class of expression-adhering characters.  These characters are
+     part of a symbol if found within or adjacent to one, and are part
+     of a following expression if immediately preceding one, but are
+     like whitespace if surrounded by whitespace.
+
+`"'
+     The class of string-quote characters.  They match each other in
+     pairs, and the characters within the pair all lose their syntactic
+     significance except for the `\' and `/' classes of escape
+     characters, which can be used to include a string-quote inside the
+     string.
+
+`$'
+     The class of self-matching delimiters.  This is intended for TeX's
+     `$', which is used both to enter and leave math mode.  Thus, a
+     pair of matching `$' characters surround each piece of math mode
+     TeX input.  A pair of adjacent `$' characters act like a single
+     one for purposes of matching.
+
+`/'
+     The class of escape characters that always just deny the following
+     character its special syntactic significance.  The character after
+     one of these escapes is always treated as alphabetic.
+
+`\'
+     The class of C-style escape characters.  In practice, these are
+     treated just like `/'-class characters, because the extra
+     possibilities for C escapes (such as being followed by digits)
+     have no effect on where the containing expression ends.
+
+`<'
+     The class of comment-starting characters.  Only single-character
+     comment starters (such as `;' in Lisp mode) are represented this
+     way.
+
+`>'
+     The class of comment-ending characters.  Newline has this syntax in
+     Lisp mode.
+
+   The characters flagged as part of two-character comment delimiters
+can have other syntactic functions most of the time.  For example, `/'
+and `*' in C code, when found separately, have nothing to do with
+comments.  The comment-delimiter significance overrides when the pair of
+characters occur together in the proper order.  Only the list and sexp
+commands use the syntax table to find comments; the commands
+specifically for comments have other variables that tell them where to
+find comments.  Moreover, the list and sexp commands notice comments
+only if `parse-sexp-ignore-comments' is non-`nil'.  This variable is set
+to `nil' in modes where comment-terminator sequences are liable to
+appear where there is no comment, for example, in Lisp mode where the
+comment terminator is a newline but not every newline ends a comment.
+
+\1f
+File: xemacs.info,  Node: Syntax Change,  Prev: Syntax Entry,  Up: Syntax
+
+Altering Syntax Information
+---------------------------
+
+   It is possible to alter a character's syntax table entry by storing
+a new number in the appropriate element of the syntax table, but it
+would be hard to determine what number to use.  Emacs therefore
+provides a command that allows you to specify the syntactic properties
+of a character in a convenient way.
+
+   `M-x modify-syntax-entry' is the command to change a character's
+syntax.  It can be used interactively and is also used by major modes
+to initialize their own syntax tables.  Its first argument is the
+character to change.  The second argument is a string that specifies the
+new syntax.  When called from Lisp code, there is a third, optional
+argument, which specifies the syntax table in which to make the change.
+If not supplied, or if this command is called interactively, the third
+argument defaults to the current buffer's syntax table.
+
+  1. The first character in the string specifies the syntactic class.
+     It is one of the characters in the previous table (*note Syntax
+     Entry::.).
+
+  2. The second character is the matching delimiter.  For a character
+     that is not an opening or closing delimiter, this should be a
+     space, and may be omitted if no following characters are needed.
+
+  3. The remaining characters are flags.  The flag characters allowed
+     are:
+
+    `1'
+          Flag this character as the first of a two-character comment
+          starting sequence.
+
+    `2'
+          Flag this character as the second of a two-character comment
+          starting sequence.
+
+    `3'
+          Flag this character as the first of a two-character comment
+          ending sequence.
+
+    `4'
+          Flag this character as the second of a two-character comment
+          ending sequence.
+
+   Use `C-h s' (`describe-syntax') to display a description of the
+contents of the current syntax table.  The description of each
+character includes both the string you have to pass to
+`modify-syntax-entry' to set up that character's current syntax, and
+some English to explain that string if necessary.
+
+\1f
 File: xemacs.info,  Node: Init File,  Next: Audible Bell,  Prev: Syntax,  Up: Customization
 
 The Init File, .emacs
@@ -1060,79 +1283,3 @@ end of the buffer, check for the word `Narrow' in the mode line.  If it
 appears, the text is still present, but marked off-limits.  To make it
 visible again, type `C-x n w'.  *Note Narrowing::.
 
-\1f
-File: xemacs.info,  Node: Unasked-for Search,  Next: Emergency Escape,  Prev: Text Garbled,  Up: Lossage
-
-Spontaneous Entry to Incremental Search
----------------------------------------
-
-   If Emacs spontaneously displays `I-search:' at the bottom of the
-screen, it means that the terminal is sending `C-s' and `C-q' according
-to the poorly designed xon/xoff "flow control" protocol.  You should
-try to prevent this by putting the terminal in a mode where it will not
-use flow control, or by giving it enough padding that it will never
-send a `C-s'.  If that cannot be done, you must tell Emacs to expect
-flow control to be used, until you can get a properly designed terminal.
-
-   Information on how to do these things can be found in the file
-`INSTALL' in the Emacs distribution.
-
-\1f
-File: xemacs.info,  Node: Emergency Escape,  Next: Total Frustration,  Prev: Unasked-for Search,  Up: Lossage
-
-Emergency Escape
-----------------
-
-   Because at times there have been bugs causing Emacs to loop without
-checking `quit-flag', a special feature causes Emacs to be suspended
-immediately if you type a second `C-g' while the flag is already set,
-so you can always get out of XEmacs.  Normally Emacs recognizes and
-clears `quit-flag' (and quits!) quickly enough to prevent this from
-happening.
-
-   When you resume Emacs after a suspension caused by multiple `C-g', it
-asks two questions before going back to what it had been doing:
-
-     Auto-save? (y or n)
-     Abort (and dump core)? (y or n)
-
-Answer each one with `y' or `n' followed by <RET>.
-
-   Saying `y' to `Auto-save?' causes immediate auto-saving of all
-modified buffers in which auto-saving is enabled.
-
-   Saying `y' to `Abort (and dump core)?' causes an illegal instruction
-to be executed, dumping core.  This is to enable a wizard to figure out
-why Emacs was failing to quit in the first place.  Execution does not
-continue after a core dump.  If you answer `n', execution does
-continue.  With luck, Emacs will ultimately check `quit-flag' and quit
-normally.  If not, and you type another `C-g', it is suspended again.
-
-   If Emacs is not really hung, but is just being slow, you may invoke
-the double `C-g' feature without really meaning to.  In that case,
-simply resume and answer `n' to both questions, and you will arrive at
-your former state.  Presumably the quit you requested will happen soon.
-
-   The double-`C-g' feature may be turned off when Emacs is running
-under a window system, since the window system always enables you to
-kill Emacs or to create another window and run another program.
-
-\1f
-File: xemacs.info,  Node: Total Frustration,  Prev: Emergency Escape,  Up: Lossage
-
-Help for Total Frustration
---------------------------
-
-   If using Emacs (or something else) becomes terribly frustrating and
-none of the techniques described above solve the problem, Emacs can
-still help you.
-
-   First, if the Emacs you are using is not responding to commands, type
-`C-g C-g' to get out of it and then start a new one.
-
-   Second, type `M-x doctor <RET>'.
-
-   The doctor will make you feel better.  Each time you say something to
-the doctor, you must end it by typing <RET> <RET>.  This lets the
-doctor know you are finished.
-
index 0a17cb9..e92b69c 100644 (file)
@@ -30,6 +30,82 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Unasked-for Search,  Next: Emergency Escape,  Prev: Text Garbled,  Up: Lossage
+
+Spontaneous Entry to Incremental Search
+---------------------------------------
+
+   If Emacs spontaneously displays `I-search:' at the bottom of the
+screen, it means that the terminal is sending `C-s' and `C-q' according
+to the poorly designed xon/xoff "flow control" protocol.  You should
+try to prevent this by putting the terminal in a mode where it will not
+use flow control, or by giving it enough padding that it will never
+send a `C-s'.  If that cannot be done, you must tell Emacs to expect
+flow control to be used, until you can get a properly designed terminal.
+
+   Information on how to do these things can be found in the file
+`INSTALL' in the Emacs distribution.
+
+\1f
+File: xemacs.info,  Node: Emergency Escape,  Next: Total Frustration,  Prev: Unasked-for Search,  Up: Lossage
+
+Emergency Escape
+----------------
+
+   Because at times there have been bugs causing Emacs to loop without
+checking `quit-flag', a special feature causes Emacs to be suspended
+immediately if you type a second `C-g' while the flag is already set,
+so you can always get out of XEmacs.  Normally Emacs recognizes and
+clears `quit-flag' (and quits!) quickly enough to prevent this from
+happening.
+
+   When you resume Emacs after a suspension caused by multiple `C-g', it
+asks two questions before going back to what it had been doing:
+
+     Auto-save? (y or n)
+     Abort (and dump core)? (y or n)
+
+Answer each one with `y' or `n' followed by <RET>.
+
+   Saying `y' to `Auto-save?' causes immediate auto-saving of all
+modified buffers in which auto-saving is enabled.
+
+   Saying `y' to `Abort (and dump core)?' causes an illegal instruction
+to be executed, dumping core.  This is to enable a wizard to figure out
+why Emacs was failing to quit in the first place.  Execution does not
+continue after a core dump.  If you answer `n', execution does
+continue.  With luck, Emacs will ultimately check `quit-flag' and quit
+normally.  If not, and you type another `C-g', it is suspended again.
+
+   If Emacs is not really hung, but is just being slow, you may invoke
+the double `C-g' feature without really meaning to.  In that case,
+simply resume and answer `n' to both questions, and you will arrive at
+your former state.  Presumably the quit you requested will happen soon.
+
+   The double-`C-g' feature may be turned off when Emacs is running
+under a window system, since the window system always enables you to
+kill Emacs or to create another window and run another program.
+
+\1f
+File: xemacs.info,  Node: Total Frustration,  Prev: Emergency Escape,  Up: Lossage
+
+Help for Total Frustration
+--------------------------
+
+   If using Emacs (or something else) becomes terribly frustrating and
+none of the techniques described above solve the problem, Emacs can
+still help you.
+
+   First, if the Emacs you are using is not responding to commands, type
+`C-g C-g' to get out of it and then start a new one.
+
+   Second, type `M-x doctor <RET>'.
+
+   The doctor will make you feel better.  Each time you say something to
+the doctor, you must end it by typing <RET> <RET>.  This lets the
+doctor know you are finished.
+
+\1f
 File: xemacs.info,  Node: Bugs,  Prev: Lossage,  Up: Top
 
 Reporting Bugs
index 6b02c95..6ee9d4f 100644 (file)
@@ -761,7 +761,7 @@ Key (Character) Index
 * C-x DEL <2>:                           Kill Errors.
 * C-x DEL:                               Killing.
 * C-x e:                                 Basic Kbd Macro.
-* C-x ESC:                               Repetition.
+* C-x ESC ESC:                           Repetition.
 * C-x f:                                 Fill Commands.
 * C-x h:                                 Marking Objects.
 * C-x k:                                 Kill Buffer.
@@ -771,10 +771,18 @@ Key (Character) Index
 * C-x n w:                               Narrowing.
 * C-x o:                                 Other Window.
 * C-x q:                                 Kbd Macro Query.
+* C-x r +:                               RegNumbers.
+* C-x r b:                               Bookmarks.
 * C-x r g:                               RegText.
+* C-x r i:                               RegText.
 * C-x r j:                               RegPos.
+* C-x r l:                               Bookmarks.
+* C-x r m:                               Bookmarks.
+* C-x r n:                               RegNumbers.
+* C-x r r:                               RegRect.
 * C-x r s:                               RegText.
 * C-x r SPC:                             RegPos.
+* C-x r w:                               RegConfig.
 * C-x RET:                               Mule Intro.
 * C-x RET c:                             Specify Coding.
 * C-x RET C-\:                           Select Input Method.
@@ -893,14 +901,18 @@ Key (Character) Index
 * M-n <1>:                               Nroff Mode.
 * M-n:                                   Repetition.
 * M-n (isearch-mode):                    Incremental Search.
+* M-n (minibuffer history):              Minibuffer History.
 * M-n (Shell mode):                      Shell Mode.
 * M-p <1>:                               Nroff Mode.
 * M-p:                                   Repetition.
 * M-p (isearch-mode):                    Incremental Search.
+* M-p (minibuffer history):              Minibuffer History.
 * M-p (Shell mode):                      Shell Mode.
 * M-q:                                   Fill Commands.
 * M-r:                                   Basic.
+* M-r (minibuffer history):              Minibuffer History.
 * M-s:                                   Fill Commands.
+* M-s (minibuffer history):              Minibuffer History.
 * M-SPC:                                 Killing.
 * M-t <1>:                               Words.
 * M-t:                                   Transpose.
@@ -940,7 +952,7 @@ Key (Character) Index
 * S (Calendar mode):                     Sunrise/Sunset.
 * S-TAB (customization buffer):          Changing an Option.
 * shift key:                             Intro to Keystrokes.
-* SPC:                                   Completion.
+* SPC:                                   Completion Commands.
 * SPC (Calendar mode):                   General Calendar.
 * SPC (query-replace):                   Query Replace.
 * super key <1>:                         Super and Hyper Keys.
@@ -951,7 +963,7 @@ Key (Character) Index
 * TAB <2>:                               Text Mode.
 * TAB <3>:                               Indentation.
 * TAB <4>:                               Major Modes.
-* TAB <5>:                               Completion.
+* TAB <5>:                               Completion Example.
 * TAB:                                   String Key Sequences.
 * TAB (customization buffer):            Changing an Option.
 * TAB (Shell mode):                      Shell Mode.
index 0b844bd..14d8650 100644 (file)
@@ -80,6 +80,14 @@ Command and Function Index
 * beginning-of-defun:                    Defuns.
 * beginning-of-fortran-subprogram:       Fortran Motion.
 * beginning-of-line:                     Basic.
+* bookmark-delete:                       Bookmarks.
+* bookmark-insert:                       Bookmarks.
+* bookmark-insert-location:              Bookmarks.
+* bookmark-jump:                         Bookmarks.
+* bookmark-load:                         Bookmarks.
+* bookmark-save:                         Bookmarks.
+* bookmark-set:                          Bookmarks.
+* bookmark-write:                        Bookmarks.
 * buffer-menu:                           Several Buffers.
 * byte-compile-and-load-file:            Compiling Libraries.
 * byte-compile-buffer:                   Compiling Libraries.
@@ -146,6 +154,7 @@ Command and Function Index
 * capitalize-word <1>:                   Case.
 * capitalize-word:                       Fixing Case.
 * center-line:                           Fill Commands.
+* choose-completion:                     Completion Commands.
 * clear-rectangle:                       Rectangles.
 * comint-delchar-or-maybe-eof:           Shell Mode.
 * comint-dynamic-complete:               Shell Mode.
@@ -165,8 +174,8 @@ Command and Function Index
 * conx-save:                             CONX.
 * copy-file:                             Misc File Ops.
 * copy-last-shell-input:                 Shell Mode.
+* copy-rectangle-to-register:            RegRect.
 * copy-region-as-kill:                   Kill Ring.
-* copy-region-to-rectangle:              RegRect.
 * copy-to-buffer:                        Accumulating Text.
 * copy-to-register:                      RegText.
 * count-lines-page:                      Pages.
@@ -329,6 +338,7 @@ Command and Function Index
 * forward-sexp:                          Lists.
 * forward-text-line:                     Nroff Mode.
 * forward-word:                          Words.
+* frame-configuration-to-register:       RegConfig.
 * global-set-key <1>:                    Programmatic Rebinding.
 * global-set-key:                        Interactive Rebinding.
 * goto-char:                             Basic.
@@ -342,6 +352,7 @@ Command and Function Index
 * hide-subtree:                          Outline Visibility.
 * holidays:                              Holidays.
 * include-other-diary-files:             Included Diary Files.
+* increment-register:                    RegNumbers.
 * indent-c-exp:                          Multi-line Indent.
 * indent-for-comment:                    Comments.
 * indent-new-comment-line:               Comments.
@@ -390,7 +401,8 @@ Command and Function Index
 * isearch-ring-retreat:                  Incremental Search.
 * isearch-yank-line:                     Incremental Search.
 * isearch-yank-word:                     Incremental Search.
-* jump-to-register:                      Split Window.
+* jump-to-register <1>:                  Split Window.
+* jump-to-register:                      RegPos.
 * just-one-space:                        Killing.
 * kbd-macro-query:                       Kbd Macro Query.
 * kill-all-abbrevs:                      Defining Abbrevs.
@@ -417,6 +429,7 @@ Command and Function Index
 * lisp-mode:                             External Lisp.
 * lisp-send-defun:                       External Lisp.
 * list-abbrevs:                          Editing Abbrevs.
+* list-bookmarks:                        Bookmarks.
 * list-buffers:                          List Buffers.
 * list-calendar-holidays:                Holidays.
 * list-coding-systems:                   Coding Systems.
@@ -486,9 +499,10 @@ Command and Function Index
 * mark-whole-buffer:                     Marking Objects.
 * mark-word <1>:                         Words.
 * mark-word:                             Marking Objects.
-* minibuffer-complete:                   Completion.
-* minibuffer-complete-word:              Completion.
+* minibuffer-complete:                   Completion Example.
+* minibuffer-complete-word:              Completion Commands.
 * modify-syntax-entry:                   Syntax Change.
+* mouse-choose-completion:               Completion Commands.
 * mouse-del-char:                        Additional Mouse Operations.
 * mouse-delete-window:                   Additional Mouse Operations.
 * mouse-keep-one-window:                 Additional Mouse Operations.
@@ -512,9 +526,13 @@ Command and Function Index
 * newline-and-indent:                    Basic Indent.
 * next-complex-command:                  Repetition.
 * next-error:                            Compilation.
+* next-history-element:                  Minibuffer History.
 * next-line:                             Basic.
+* next-list-mode-item:                   Completion Commands.
+* next-matching-history-element:         Minibuffer History.
 * not-modified:                          Saving.
 * nroff-mode:                            Nroff Mode.
+* number-to-register:                    RegNumbers.
 * occur:                                 Other Repeating Search.
 * open-dribble-file:                     Bugs.
 * open-line:                             Blank Lines.
@@ -562,7 +580,10 @@ Command and Function Index
 * prefer-coding-system:                  Recognize Coding.
 * prepend-to-buffer:                     Accumulating Text.
 * previous-complex-command:              Repetition.
+* previous-history-element:              Minibuffer History.
 * previous-line:                         Basic.
+* previous-list-mode-item:               Completion Commands.
+* previous-matching-history-element:     Minibuffer History.
 * print-buffer:                          Hardcopy.
 * print-diary-entries <1>:               Diary Customizing.
 * print-diary-entries:                   Diary Commands.
@@ -581,7 +602,6 @@ Command and Function Index
 * recenter:                              Basic.
 * recover-file:                          Recover.
 * redraw-calendar:                       General Calendar.
-* register-to-point:                     RegPos.
 * relabel-menu-item:                     Menu Customization.
 * remove-directory:                      File Names.
 * rename-buffer:                         Misc Buffer.
@@ -741,7 +761,8 @@ Command and Function Index
 * widget-backward:                       Changing an Option.
 * widget-complete:                       Changing an Option.
 * widget-forward:                        Changing an Option.
-* window-configuration-to-register:      Split Window.
+* window-configuration-to-register <1>:  Split Window.
+* window-configuration-to-register:      RegConfig.
 * word-search-backward:                  Word Search.
 * word-search-forward:                   Word Search.
 * write-abbrev-file:                     Saving Abbrevs.
index 24632e9..8d9f042 100644 (file)
@@ -65,6 +65,8 @@ Variable Index
 * bell-volume:                           Audible Bell.
 * blink-matching-paren:                  Matching.
 * blink-matching-paren-distance:         Matching.
+* bookmark-save-flag:                    Bookmarks.
+* bookmark-search-size:                  Bookmarks.
 * buffer-file-coding-system:             Recognize Coding.
 * buffer-file-name:                      Visiting.
 * buffer-file-truename:                  Visiting.
@@ -114,8 +116,8 @@ Variable Index
 * comment-start-skip:                    Comments.
 * compare-ignore-case:                   Comparing Files.
 * compile-command:                       Compilation.
-* completion-auto-help:                  Completion.
-* completion-ignored-extensions:         Completion.
+* completion-auto-help:                  Completion Options.
+* completion-ignored-extensions:         Completion Options.
 * create-frame-hook:                     XEmacs under X.
 * ctl-arrow:                             Display Vars.
 * ctl-x-map:                             Keymaps.
@@ -232,7 +234,8 @@ Variable Index
 * mark-ring:                             Mark Ring.
 * mark-ring-max:                         Mark Ring.
 * meta-flag:                             Meta Key.
-* minibuffer-confirm-incomplete:         Completion.
+* minibuffer-confirm-incomplete <1>:     Completion Options.
+* minibuffer-confirm-incomplete:         Minibuffer Edit.
 * minibuffer-local-completion-map:       Keymaps.
 * minibuffer-local-map:                  Keymaps.
 * minibuffer-local-must-match-map:       Keymaps.
@@ -328,6 +331,7 @@ Concept Index
 * Menu:
 
 * .mailrc file:                          Mail Headers.
+* // in file name:                       Minibuffer File.
 * Abbrev mode:                           Minor Modes.
 * abbrevs:                               Abbrevs.
 * aborting:                              Quitting.
@@ -361,6 +365,7 @@ Concept Index
 * blank lines:                           Blank Lines.
 * body lines (Outline mode):             Outline Format.
 * bold font:                             Face Customization.
+* bookmarks:                             Bookmarks.
 * boredom:                               Amusements.
 * buffer:                                Frame.
 * buffer menu:                           Several Buffers.
@@ -451,6 +456,7 @@ Concept Index
 * disabling menu items:                  Menu Customization.
 * Distribution:                          License.
 * doctor:                                Total Frustration.
+* double slash in file name:             Minibuffer File.
 * drastic changes:                       Reverting.
 * dribble file:                          Bugs.
 * early package hierarchies:             Startup Paths.
@@ -515,6 +521,7 @@ Concept Index
 * Help menu:                             Pull-down Menus.
 * hierarchies:                           Startup Paths.
 * history of commands:                   Repetition.
+* history of minibuffer input:           Minibuffer History.
 * holiday forms:                         Holiday Customizing.
 * holidays:                              Holidays.
 * horizontal scrolling:                  Horizontal Scrolling.
@@ -592,6 +599,7 @@ Concept Index
 * minibuffer <1>:                        Keymaps.
 * minibuffer <2>:                        M-x.
 * minibuffer:                            Minibuffer.
+* minibuffer history:                    Minibuffer History.
 * minor modes:                           Minor Modes.
 * mistakes, correcting <1>:              Fixit.
 * mistakes, correcting:                  Undo.
@@ -716,6 +724,7 @@ Concept Index
 * single-file packages:                  Package Terminology.
 * site-specific directories:             Startup Paths.
 * Size menu item:                        Options Menu.
+* slashes repeated in file name:         Minibuffer File.
 * snapshots and version control:         Snapshots.
 * sorting:                               Sorting.
 * sorting diary entries:                 Fancy Diary Display.
index 56cfe9c..1b28053 100644 (file)
@@ -1058,18 +1058,18 @@ File: xemacs.info,  Node: Minibuffer,  Next: M-x,  Prev: Undo,  Up: Top
 The Minibuffer
 **************
 
-   Emacs commands use the "minibuffer" to read arguments more
-complicated than a single number.  Minibuffer arguments can be file
-names, buffer names, Lisp function names, Emacs command names, Lisp
-expressions, and many other things, depending on the command reading the
-argument.  To edit the argument in the minibuffer, you can use Emacs
-editing commands.
+   The "minibuffer" is the facility used by XEmacs commands to read
+arguments more complicated than a single number.  Minibuffer arguments
+can be file names, buffer names, Lisp function names, XEmacs command
+names, Lisp expressions, and many other things, depending on the command
+reading the argument.  You can use the usual XEmacs editing commands in
+the minibuffer to edit the argument text.
 
    When the minibuffer is in use, it appears in the echo area, and the
 cursor moves there.  The beginning of the minibuffer line displays a
-"prompt" indicating what kind of input you should supply and how it
-will be used.  The prompt is often derived from the name of the command
-the argument is for.  The prompt normally ends with a colon.
+"prompt" which says what kind of input you should supply and how it
+will be used.  Often this prompt is derived from the name of the command
+that the argument is for.  The prompt normally ends with a colon.
 
    Sometimes a "default argument" appears in parentheses after the
 colon; it, too, is part of the prompt.  The default is used as the
@@ -1078,13 +1078,14 @@ argument value if you enter an empty argument (e.g., by just typing
 default, which is the name of the buffer that will be used if you type
 just <RET>.
 
-   The simplest way to give a minibuffer argument is to type the text
-you want, terminated by <RET> to exit the minibuffer.  To get out of
-the minibuffer and cancel the command that it was for, type `C-g'.
+   The simplest way to enter a minibuffer argument is to type the text
+you want, terminated by <RET> which exits the minibuffer.  You can
+cancel the command that wants the argument, and get out of the
+minibuffer, by typing `C-g'.
 
    Since the minibuffer uses the screen space of the echo area, it can
-conflict with other ways Emacs customarily uses the echo area.  Here is
-how Emacs handles such conflicts:
+conflict with other ways XEmacs customarily uses the echo area.  Here is
+how XEmacs handles such conflicts:
 
    * If a command gets an error while you are in the minibuffer, this
      does not cancel the minibuffer.  However, the echo area is needed
@@ -1092,10 +1093,10 @@ how Emacs handles such conflicts:
      hidden for a while.  It comes back after a few seconds, or as soon
      as you type anything.
 
-   * If you use a command in the minibuffer whose purpose is to print a
-     message in the echo area (for example `C-x =') the message is
-     displayed normally, and the minibuffer is hidden for a while.  It
-     comes back after a few seconds, or as soon as you type anything.
+   * If in the minibuffer you use a command whose purpose is to print a
+     message in the echo area, such as `C-x =', the message is printed
+     normally, and the minibuffer is hidden for a while.  It comes back
+     after a few seconds, or as soon as you type anything.
 
    * Echoing of keystrokes does not take place while the minibuffer is
      in use.
@@ -1105,6 +1106,7 @@ how Emacs handles such conflicts:
 * File: Minibuffer File.  Entering file names with the minibuffer.
 * Edit: Minibuffer Edit.  How to edit in the minibuffer.
 * Completion::           An abbreviation facility for minibuffer input.
+* Minibuffer History::    Reusing recent minibuffer arguments.
 * Repetition::           Re-executing commands that used the minibuffer.
 
 \1f
@@ -1115,30 +1117,32 @@ Minibuffers for File Names
 
    Sometimes the minibuffer starts out with text in it.  For example,
 when you are supposed to give a file name, the minibuffer starts out
-containing the "default directory", which ends with a slash.  This
-informs you in which directory the file will be looked for if you do
-not specify a different one. For example, the minibuffer might start
-out with:
+containing the "default directory", which ends with a slash.  This is
+to inform you which directory the file will be found in if you do not
+specify a directory.
+
+   For example, the minibuffer might start out with these contents:
 
      Find File: /u2/emacs/src/
 
-where `Find File: ' is the prompt.  Typing `buffer.c' specifies the file
-`/u2/emacs/src/buffer.c'.  To find files in nearby directories, use
-`..'; 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::.).
+where `Find File: ' is the prompt.  Typing `buffer.c' specifies the
+file `/u2/emacs/src/buffer.c'.  To find files in nearby directories,
+use `..'; thus, if you type `../lisp/simple.el', you will get the file
+named `/u2/emacs/lisp/simple.el'.  Alternatively, you can kill with
+`M-<DEL>' the 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
-file `/etc/termcap', just type the name, giving:
+   If you don't want any of the default, you can kill it with `C-a
+C-k'.  But you don't need to kill the default; you can simply ignore it.
+Insert an absolute file name, one starting with a slash or a tilde,
+after the default directory.  For example, to specify the file
+`/etc/termcap', just insert that name, giving these minibuffer contents:
 
      Find File: /u2/emacs/src//etc/termcap
 
-Two slashes in a row are not normally meaningful in Unix file names, but
-they are allowed in XEmacs.  They mean, "ignore everything before the
-second slash in the pair."  Thus, `/u2/emacs/src/' is ignored, and you
-get the file `/etc/termcap'.
+XEmacs gives a special meaning to a double slash (which is not normally
+a useful thing to write): it means, "ignore everything before the
+second slash in the pair."  Thus, `/u2/emacs/src/' is ignored in the
+example above, and you get the file `/etc/termcap'.
 
    If you set `insert-default-directory' to `nil', the default
 directory is not inserted in the minibuffer.  This way, the minibuffer
@@ -1151,50 +1155,53 @@ File: xemacs.info,  Node: Minibuffer Edit,  Next: Completion,  Prev: Minibuffer
 Editing in the Minibuffer
 =========================
 
-   The minibuffer is an Emacs buffer (albeit a peculiar one), and the
-usual Emacs commands are available for editing the text of an argument
+   The minibuffer is an XEmacs buffer (albeit a peculiar one), and the
+usual XEmacs commands are available for editing the text of an argument
 you are entering.
 
    Since <RET> in the minibuffer is defined to exit the minibuffer, you
-must use `C-o' or `C-q <LFD>' to insert a newline into the minibuffer.
-(Recall that a newline is really the <LFD> character.)
+can't use it to insert a newline in the minibuffer.  To do that, type
+`C-o' or `C-q C-j'.  (Recall that a newline is really the character
+control-J.)
 
-   The minibuffer has its own window, which always has space on the
+   The minibuffer has its own window which always has space on the
 screen but acts as if it were not there when the minibuffer is not in
-use.  The minibuffer window is just like the others; you can switch to
-another window with `C-x o', edit text in other windows, and perhaps
-even visit more files before returning to the minibuffer to submit the
-argument.  You can kill text in another window, return to the minibuffer
-window, and then yank the text to use it in the argument.  *Note
-Windows::.
-
-   There are, however, some restrictions on the use of the minibuffer
-window.  You cannot switch buffers in it--the minibuffer and its window
-are permanently attached.  You also cannot split or kill the minibuffer
-window, but you can make it taller with `C-x ^'.
-
-   If you are in the minibuffer and issue a command that displays help
-text in another window, that window will be scrolled if you type
-`M-C-v' while in the minibuffer until you exit the minibuffer.  This
-feature is helpful if a completing minibuffer gives you a long list of
-possible completions.
+use.  When the minibuffer is in use, its window is just like the
+others; you can switch to another window with `C-x o', edit text in
+other windows and perhaps even visit more files, before returning to the
+minibuffer to submit the argument.  You can kill text in another window,
+return to the minibuffer window, and then yank the text to use it in the
+argument.  *Note Windows::.
+
+   There are some restrictions on the use of the minibuffer window,
+however.  You cannot switch buffers in it--the minibuffer and its
+window are permanently attached.  Also, you cannot split or kill the
+minibuffer window. But you can make it taller in the normal fashion with
+`C-x ^'.
+
+   If while in the minibuffer you issue a command that displays help
+text of any sort in another window, you can use the `C-M-v' command
+while in the minibuffer to scroll the help text.  This lasts until you
+exit the minibuffer.  This feature is especially useful if a completing
+minibuffer gives you a list of possible completions.  *Note Other
+Window::.
 
    If the variable `minibuffer-confirm-incomplete' is `t', you are
 asked for confirmation if there is no known completion for the text you
 typed. For example, if you attempted to visit a non-existent file, the
 minibuffer might read:
-             Find File:chocolate_bar.c [no completions, confirm]
+             Find File: chocolate_bar.c [no completions, confirm]
    If you press `Return' again, that confirms the filename. Otherwise,
 you can continue editing it.
 
-   Emacs supports recursive use of the minibuffer.  However, it is easy
-to do this by accident (because of autorepeating keyboards, for
-example) and get confused.  Therefore, most Emacs commands that use the
+   XEmacs supports recursive use of the minibuffer.  However, it is easy
+to do this by accident (because of autorepeating keyboards, for example)
+and get confused.  Therefore, most XEmacs commands that use the
 minibuffer refuse to operate if the minibuffer window is selected.  If
 the minibuffer is active but you have switched to a different window,
 recursive use of the minibuffer is allowed--if you know enough to try
 to do this, you probably will not get confused.
 
-   If you set the variable `enable-recursive-minibuffers' to be
+   If you set the variable `enable-recursive-minibuffers' to a
 non-`nil', recursive use of the minibuffer is always allowed.
 
index c4a0459..176992d 100644 (file)
@@ -30,34 +30,36 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
-File: xemacs.info,  Node: Completion,  Next: Repetition,  Prev: Minibuffer Edit,  Up: Minibuffer
+File: xemacs.info,  Node: Completion,  Next: Minibuffer History,  Prev: Minibuffer Edit,  Up: Minibuffer
 
 Completion
 ==========
 
-   When appropriate, the minibuffer provides a "completion" facility.
-You type the beginning of an argument and one of the completion keys,
-and Emacs visibly fills in the rest, depending on what you have already
-typed.
+   For certain kinds of arguments, you can use "completion" to enter
+the argument value.  Completion means that you type part of the
+argument, then XEmacs visibly fills in the rest, or as much as can be
+determined from the part you have typed.
 
    When completion is available, certain keys--<TAB>, <RET>, and
-<SPC>--are redefined to complete an abbreviation present in the
-minibuffer into a longer string that it stands for, by matching it
-against a set of "completion alternatives" provided by the command
-reading the argument.  `?' is defined to display a list of possible
-completions of what you have inserted.
-
-   For example, when the minibuffer is being used by `Meta-x' to read
-the name of a command, it is given a list of all available Emacs command
-names to complete against.  The completion keys match the text in the
-minibuffer against all the command names, find any additional
-characters of the name that are implied by the ones already present in
-the minibuffer, and add those characters to the ones you have given.
+<SPC>--are rebound to complete the text present in the minibuffer into
+a longer string that it stands for, by matching it against a set of
+"completion alternatives" provided by the command reading the argument.
+`?' is defined to display a list of possible completions of what you
+have inserted.
+
+   For example, when `M-x' uses the minibuffer to read the name of a
+command, it provides a list of all available XEmacs command names to
+complete against.  The completion keys match the text in the minibuffer
+against all the command names, find any additional name characters
+implied by the ones already present in the minibuffer, and add those
+characters to the ones you have given.  This is what makes it possible
+to type `M-x inse <SPC> b <RET>' instead of `M-x insert-buffer <RET>'
+(for example).
 
    Case is normally significant in completion because it is significant
-in most of the names that you can complete (buffer names, file names,
-and command names).  Thus, `fo' will not complete to `Foo'.  When you
-are completing a name in which case does not matter, case may be ignored
+in most of the names that you can complete (buffer names, file names and
+command names).  Thus, `fo' does not complete to `Foo'.  When you are
+completing a name in which case does not matter, case may be ignored
 for completion's sake if specified by program.
 
    When a completion list is displayed, the completions will highlight
@@ -65,40 +67,53 @@ as you move the mouse over them.  Clicking the middle mouse button on
 any highlighted completion will "select" it just as if you had typed it
 in and hit <RET>.
 
-A Completion Example
---------------------
+* Menu:
+
+* Example: Completion Example.
+* Commands: Completion Commands.
+* Strict Completion::
+* Options: Completion Options.
+
+\1f
+File: xemacs.info,  Node: Completion Example,  Next: Completion Commands,  Prev: Completion,  Up: Completion
 
-   Consider the following example.  If you type `Meta-x au <TAB>',
+Completion Example
+------------------
+
+   A concrete example may help here.  If you type `M-x au <TAB>', the
 <TAB> looks for alternatives (in this case, command names) that start
-with `au'.  There are only two commands: `auto-fill-mode' and
-`auto-save-mode'.  They are the same as far as `auto-', so the `au' in
-the minibuffer changes to `auto-'.
+with `au'.  There are several, including `auto-fill-mode' and
+`auto-save-mode'--but they are all the same as far as `auto', so the
+`au' in the minibuffer changes to `auto'.
 
-   If you type <TAB> again immediately, there are multiple possibilities
-for the very next character--it could be `s' or `f'--so no more
-characters are added; but a list of all possible completions is
-displayed in another window.
+   If you type <TAB> again immediately, there are multiple
+possibilities for the very next character--it could be any of `c-'--so
+no more characters are added; instead, <TAB> displays a list of all
+possible completions in another window.
 
    If you go on to type `f <TAB>', this <TAB> sees `auto-f'.  The only
-command name starting this way is `auto-fill-mode', so completion
-inserts the rest of that command.  You now have `auto-fill-mode' in the
-minibuffer after typing just `au <TAB> f <TAB>'.  Note that <TAB> has
-this effect because in the minibuffer it is bound to the function
-`minibuffer-complete' when completion is supposed to be done.
+command name starting this way is `auto-fill-mode', so completion fills
+in the rest of that.  You now have `auto-fill-mode' in the minibuffer
+after typing just `au <TAB> f <TAB>'.  Note that <TAB> has this effect
+because in the minibuffer it is bound to the command
+`minibuffer-complete' when completion is available.
+
+\1f
+File: xemacs.info,  Node: Completion Commands,  Next: Strict Completion,  Prev: Completion Example,  Up: Completion
 
 Completion Commands
 -------------------
 
-   Here is a list of all the completion commands defined in the
-minibuffer when completion is available.
+   Here is a list of the completion commands defined in the minibuffer
+when completion is available.
 
 `<TAB>'
      Complete the text in the minibuffer as much as possible
      (`minibuffer-complete').
 
 `<SPC>'
-     Complete the text in the minibuffer but don't add or fill out more
-     than one word (`minibuffer-complete-word').
+     Complete the minibuffer text, but don't go beyond one word
+     (`minibuffer-complete-word').
 
 `<RET>'
      Submit the text in the minibuffer as the argument, possibly
@@ -117,13 +132,48 @@ minibuffer when completion is available.
      Clicking <button2> will select the highlighted completion and exit
      the minibuffer.  (`minibuf-select-highlighted-completion').
 
-   <SPC> completes in a way that is similar to <TAB>, but it never goes
-beyond the next hyphen or space.  If you have `auto-f' in the
-minibuffer and type <SPC>, it finds that the completion is
-`auto-fill-mode', but it stops completing after `fill-'.  The result is
-`auto-fill-'. Another <SPC> at this point completes all the way to
-`auto-fill-mode'.  <SPC> in the minibuffer runs the function
-`minibuffer-complete-word' when completion is available.
+   <SPC> completes much like <TAB>, but never goes beyond the next
+hyphen or space.  If you have `auto-f' in the minibuffer and type
+<SPC>, it finds that the completion is `auto-fill-mode', but it stops
+completing after `fill-'.  This gives `auto-fill-'.  Another <SPC> at
+this point completes all the way to `auto-fill-mode'.  <SPC> in the
+minibuffer when completion is available runs the command
+`minibuffer-complete-word'.
+
+   Here are some commands you can use to choose a completion from a
+window that displays a list of completions:
+
+`button2up'
+     Clicking mouse button 2 on a completion in the list of possible
+     completions chooses that completion (`mouse-choose-completion').
+     You normally use this command while point is in the minibuffer;
+     but you must click in the list of completions, not in the
+     minibuffer itself.
+
+`<RET>'
+     Typing <RET> *in the completion list buffer* chooses the
+     completion that point is in or next to (`choose-completion').  To
+     use this command, you must first switch windows to the window that
+     shows the list of completions.
+
+`<RIGHT>'
+`<TAB>'
+`C-f'
+     Typing the right-arrow key <RIGHT>, <TAB> or `C-f' *in the
+     completion list buffer* moves point to the following completion
+     (`next-list-mode-item').
+
+`<LEFT>'
+`C-b'
+     Typing the left-arrow key <LEFT> or `C-b' *in the completion list
+     buffer* moves point toward the beginning of the buffer, to the
+     previous completion (`previous-list-mode-item').
+
+\1f
+File: xemacs.info,  Node: Strict Completion,  Next: Completion Options,  Prev: Completion Commands,  Up: Completion
+
+Strict Completion
+-----------------
 
    There are three different ways that <RET> can work in completing
 minibuffers, depending on how the argument will be used.
@@ -144,27 +194,35 @@ minibuffers, depending on how the argument will be used.
      Cautious completion is used for reading file names for files that
      must already exist.
 
-   * "Permissive" completion is used when any string is meaningful, and
-     the list of completion alternatives is just a guide.  For example,
-     when `C-x C-f' reads the name of a file to visit, any file name is
-     allowed, in case you want to create a file.  In permissive
-     completion, <RET> takes the text in the minibuffer exactly as
-     given, without completing it.
+   * "Permissive" completion is used when any string whatever is
+     meaningful, and the list of completion alternatives is just a
+     guide.  For example, when `C-x C-f' reads the name of a file to
+     visit, any file name is allowed, in case you want to create a
+     file.  In permissive completion, <RET> takes the text in the
+     minibuffer exactly as given, without completing it.
+
+   The completion commands display a list of all possible completions in
+a window whenever there is more than one possibility for the very next
+character.  Also, typing `?' explicitly requests such a list.  If the
+list of completions is long, you can scroll it with `C-M-v' (*note
+Other Window::.).
+
+\1f
+File: xemacs.info,  Node: Completion Options,  Prev: Strict Completion,  Up: Completion
 
-   The completion commands display a list of all possible completions
-in a window whenever there is more than one possibility for the very
-next character.  Typing `?' explicitly requests such a list.  The list
-of completions counts as help text, so `C-M-v' typed in the minibuffer
-scrolls the list.
+Completion Options
+------------------
 
    When completion is done on file names, certain file names are usually
 ignored.  The variable `completion-ignored-extensions' contains a list
 of strings; a file whose name ends in any of those strings is ignored
 as a possible completion.  The standard value of this variable has
 several elements including `".o"', `".elc"', `".dvi"' and `"~"'.  The
-effect is that, for example, `foo' completes to `foo.c' even though
-`foo.o' exists as well.  If the only possible completions are files
-that end in "ignored" strings, they are not ignored.
+effect is that, for example, `foo' can complete to `foo.c' even though
+`foo.o' exists as well.  However, if *all* the possible completions end
+in "ignored" strings, then they are not ignored.  Ignored extensions do
+not apply to lists of completions--those always mention all possible
+completions.
 
    If a completion command finds the next character is undetermined, it
 automatically displays a list of all possible completions.  If the
@@ -177,20 +235,89 @@ completions, an extra <RET> must be typed to confirm the response.
 This is helpful for catching typos.
 
 \1f
-File: xemacs.info,  Node: Repetition,  Prev: Completion,  Up: Minibuffer
+File: xemacs.info,  Node: Minibuffer History,  Next: Repetition,  Prev: Completion,  Up: Minibuffer
+
+Minibuffer History
+==================
+
+   Every argument that you enter with the minibuffer is saved on a
+"minibuffer history list" so that you can use it again later in another
+argument.  Special commands load the text of an earlier argument in the
+minibuffer.  They discard the old minibuffer contents, so you can think
+of them as moving through the history of previous arguments.
+
+`<UP>'
+`M-p'
+     Move to the next earlier argument string saved in the minibuffer
+     history (`previous-history-element').
+
+`<DOWN>'
+`M-n'
+     Move to the next later argument string saved in the minibuffer
+     history (`next-history-element').
+
+`M-r REGEXP <RET>'
+     Move to an earlier saved argument in the minibuffer history that
+     has a match for REGEXP (`previous-matching-history-element').
+
+`M-s REGEXP <RET>'
+     Move to a later saved argument in the minibuffer history that has a
+     match for REGEXP (`next-matching-history-element').
+
+   The simplest way to reuse the saved arguments in the history list is
+to move through the history list one element at a time.  While in the
+minibuffer, use `M-p' or up-arrow (`previous-history-element') to "move
+to" the next earlier minibuffer input, and use `M-n' or down-arrow
+(`next-history-element') to "move to" the next later input.
+
+   The previous input that you fetch from the history entirely replaces
+the contents of the minibuffer.  To use it as the argument, exit the
+minibuffer as usual with <RET>.  You can also edit the text before you
+reuse it; this does not change the history element that you "moved" to,
+but your new argument does go at the end of the history list in its own
+right.
+
+   For many minibuffer arguments there is a "default" value.  In some
+cases, the minibuffer history commands know the default value.  Then you
+can insert the default value into the minibuffer as text by using `M-n'
+to move "into the future" in the history.
+
+   There are also commands to search forward or backward through the
+history; they search for history elements that match a regular
+expression that you specify with the minibuffer.  `M-r'
+(`previous-matching-history-element') searches older elements in the
+history, while `M-s' (`next-matching-history-element') searches newer
+elements.  By special dispensation, these commands can use the
+minibuffer to read their arguments even though you are already in the
+minibuffer when you issue them.  As with incremental searching, an
+uppercase letter in the regular expression makes the search
+case-sensitive (*note Search Case::.).
+
+   All uses of the minibuffer record your input on a history list, but
+there are separate history lists for different kinds of arguments.  For
+example, there is a list for file names, used by all the commands that
+read file names.
+
+   There are several other very specific history lists, including one
+for command names read by `M-x', one for buffer names, one for arguments
+of commands like `query-replace', and one for compilation commands read
+by `compile'.  Finally, there is one "miscellaneous" history list that
+most minibuffer arguments use.
+
+\1f
+File: xemacs.info,  Node: Repetition,  Prev: Minibuffer History,  Up: Minibuffer
 
 Repeating Minibuffer Commands
 =============================
 
    Every command that uses the minibuffer at least once is recorded on a
-special history list, together with the values of the minibuffer
-arguments, so that you can repeat the command easily.  In particular,
-every use of `Meta-x' is recorded, since `M-x' uses the minibuffer to
-read the command name.
+special history list, together with the values of its arguments, so that
+you can repeat the entire command.  In particular, every use of `M-x'
+is recorded there, since `M-x' uses the minibuffer to read the command
+name.
 
-`C-x <ESC>'
-     Re-execute a recent minibuffer command
-     (`repeat-complex-command').
+`C-x <ESC> <ESC>'
+     Re-execute a recent minibuffer command (`repeat-complex-command').
 
 `M-p'
      Within `C-x <ESC>', move to previous recorded command
@@ -202,36 +329,37 @@ read the command name.
 
 `M-x list-command-history'
      Display the entire command history, showing all the commands `C-x
-     <ESC>' can repeat, most recent first.
+     <ESC> <ESC>' can repeat, most recent first.
 
-   `C-x <ESC>' is used to re-execute a recent command that used the
-minibuffer. With no argument, it repeats the last command.  A numeric
-argument specifies which command to repeat; 1 means the last one, and
-larger numbers specify earlier commands.
+   `C-x <ESC> <ESC>' is used to re-execute a recent minibuffer-using
+command.  With no argument, it repeats the last such command.  A
+numeric argument specifies which command to repeat; one means the last
+one, and larger numbers specify earlier ones.
 
-   `C-x <ESC>' works by turning the previous command into a Lisp
+   `C-x <ESC> <ESC>' works by turning the previous command into a Lisp
 expression and then entering a minibuffer initialized with the text for
 that expression.  If you type just <RET>, the command is repeated as
-before.  You can also change the command by editing the Lisp expression.
-The expression you finally submit will be executed.  The repeated
-command is added to the front of the command history unless it is
-identical to the most recently executed command already there.
+before.  You can also change the command by editing the Lisp
+expression.  Whatever expression you finally submit is what will be
+executed.  The repeated command is added to the front of the command
+history unless it is identical to the most recently executed command
+already there.
 
    Even if you don't understand Lisp syntax, it will probably be obvious
 which command is displayed for repetition.  If you do not change the
 text, you can be sure the command will repeat exactly as before.
 
-   If you are in the minibuffer for `C-x <ESC>' and the command shown
-to you is not the one you want to repeat, you can move around the list
-of previous commands using `M-n' and `M-p'.  `M-p' replaces the
+   If you are in the minibuffer for `C-x <ESC> <ESC>' and the command
+shown to you is not the one you want to repeat, you can move around the
+list of previous commands using `M-n' and `M-p'.  `M-p' replaces the
 contents of the minibuffer with the next earlier recorded command, and
 `M-n' replaces it with the next later command.  After finding the
 desired previous command, you can edit its expression and then resubmit
 it by typing <RET>.  Any editing you have done on the command to be
 repeated is lost if you use `M-n' or `M-p'.
 
-   `M-n' and `M-p' are specially defined within `C-x <ESC>' to run the
-commands `previous-history-element' and `next-history-element'.
+   `M-n' and `M-p' are specially defined within `C-x <ESC> <ESC>' to
+run the commands `previous-history-element' and `next-history-element'.
 
    The list of previous commands using the minibuffer is stored as a
 Lisp list in the variable `command-history'.  Each element of the list
@@ -1012,209 +1140,3 @@ and the text of the selection is deleted.
 selected text is immediately inserted after being selected; and the
 selection is immediately disowned afterwards.
 
-\1f
-File: xemacs.info,  Node: Killing,  Next: Yanking,  Prev: Additional Mouse Operations,  Up: Top
-
-Deletion and Killing
-====================
-
-   Most commands that erase text from the buffer save it. You can get
-the text back if you change your mind, or you can move or copy it to
-other parts of the buffer.  Commands which erase text and save it in the
-kill ring are known as "kill" commands.  Some other commands erase text
-but do not save it; they are known as "delete" commands.  (This
-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>
-(`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.
-
-Deletion
---------
-
-`C-d'
-     Delete next character (`delete-char').
-
-`<DEL>'
-     Delete previous character (`delete-backward-char').
-
-`M-\'
-     Delete spaces and tabs around point (`delete-horizontal-space').
-
-`M-<SPC>'
-     Delete spaces and tabs around point, leaving one space
-     (`just-one-space').
-
-`C-x C-o'
-     Delete blank lines around the current line (`delete-blank-lines').
-
-`M-^'
-     Join two lines by deleting the intervening newline, and any
-     indentation following it (`delete-indentation').
-
-   The most basic delete commands are `C-d' (`delete-char') and <DEL>
-(`delete-backward-char').  `C-d' deletes the character after point, the
-one the cursor is "on top of".  Point doesn't move.  <DEL> deletes the
-character before the cursor, and moves point back.  You can delete
-newlines like any other characters in the buffer; deleting a newline
-joins two lines.  Actually, `C-d' and <DEL> aren't always delete
-commands; if you give them an argument, they kill instead, since they
-can erase more than one character this way.
-
-   The other delete commands delete only formatting characters: spaces,
-tabs and newlines.  `M-\' (`delete-horizontal-space') deletes all
-spaces and tab characters before and after point.  `M-<SPC>'
-(`just-one-space') does the same but leaves a single space after point,
-regardless of the number of spaces that existed previously (even zero).
-
-   `C-x C-o' (`delete-blank-lines') deletes all blank lines after the
-current line. If the current line is blank, it deletes all blank lines
-preceding the current line as well as leaving one blank line, the
-current line.  `M-^' (`delete-indentation') joins the current line and
-the previous line, or, if given an argument, joins the current line and
-the next line by deleting a newline and all surrounding spaces, possibly
-leaving a single space.  *Note M-^: Indentation.
-
-Killing by Lines
-----------------
-
-`C-k'
-     Kill rest of line or one or more lines (`kill-line').
-
-   The simplest kill command is `C-k'.  If given at the beginning of a
-line, it kills all the text on the line, leaving the line blank.  If
-given on a blank line, the blank line disappears.  As a consequence, a
-line disappears completely if you go to the front of a non-blank line
-and type `C-k' twice.
-
-   More generally, `C-k' kills from point up to the end of the line,
-unless it is at the end of a line.  In that case, it kills the newline
-following the line, thus merging the next line into the current one.
-Emacs ignores invisible spaces and tabs at the end of the line when
-deciding which case applies: if point appears to be at the end of the
-line, you can be sure the newline will be killed.
-
-   If you give `C-k' a positive argument, it kills that many lines and
-the newlines that follow them (however, text on the current line before
-point is not killed).  With a negative argument, `C-k' kills back to a
-number of line beginnings.  An argument of -2 means kill back to the
-second line beginning.  If point is at the beginning of a line, that
-line beginning doesn't count, so `C-u - 2 C-k' with point at the front
-of a line kills the two previous lines.
-
-   `C-k' with an argument of zero kills all the text before point on the
-current line.
-
-Other Kill Commands
--------------------
-
-`C-w'
-     Kill region (from point to the mark) (`kill-region').  *Note
-     Words::.
-
-`M-d'
-     Kill word (`kill-word').
-
-`M-<DEL>'
-     Kill word backwards (`backward-kill-word').
-
-`C-x <DEL>'
-     Kill back to beginning of sentence (`backward-kill-sentence').
-     *Note Sentences::.
-
-`M-k'
-     Kill to end of sentence (`kill-sentence').
-
-`C-M-k'
-     Kill sexp (`kill-sexp').  *Note Lists::.
-
-`M-z CHAR'
-     Kill up to next occurrence of CHAR (`zap-to-char').
-
-   `C-w' (`kill-region') is a very general kill command; it kills
-everything between point and the mark. You can use this command to kill
-any contiguous sequence of characters by first setting the mark at one
-end of a sequence of characters, then going to the other end and typing
-`C-w'.
-
-   A convenient way of killing is combined with searching: `M-z'
-(`zap-to-char') reads a character and kills from point up to (but not
-including) the next occurrence of that character in the buffer.  If
-there is no next occurrence, killing goes to the end of the buffer.  A
-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::.).
-
-\1f
-File: xemacs.info,  Node: Yanking,  Next: Using X Selections,  Prev: Killing,  Up: Top
-
-Yanking
-=======
-
-   "Yanking" means getting back text which was killed. Some systems
-call this "pasting".  The usual way to move or copy text is to kill it
-and then yank it one or more times.
-
-`C-y'
-     Yank last killed text (`yank').
-
-`M-y'
-     Replace re-inserted killed text with the previously killed text
-     (`yank-pop').
-
-`M-w'
-     Save region as last killed text without actually killing it
-     (`copy-region-as-kill').
-
-`C-M-w'
-     Append next kill to last batch of killed text (`append-next-kill').
-
-* Menu:
-
-* Kill Ring::       Where killed text is stored.  Basic yanking.
-* Appending Kills:: Several kills in a row all yank together.
-* Earlier Kills::   Yanking something killed some time ago.
-
-\1f
-File: xemacs.info,  Node: Kill Ring,  Next: Appending Kills,  Prev: Yanking,  Up: Yanking
-
-The Kill Ring
--------------
-
-   All killed text is recorded in the "kill ring", a list of blocks of
-text that have been killed.  There is only one kill ring, used in all
-buffers, so you can kill text in one buffer and yank it in another
-buffer.  This is the usual way to move text from one file to another.
-(*Note Accumulating Text::, for some other ways.)
-
-   If you have two separate Emacs processes, you cannot use the kill
-ring to move text. If you are using XEmacs under X, however, you can
-use the X selection mechanism to move text from one to another.
-
-   If you are using XEmacs under X and have one Emacs process with
-multiple frames, they do share the same kill ring.  You can kill or
-copy text in one Emacs frame, then yank it in the other frame belonging
-to the same process.
-
-   The command `C-y' (`yank') reinserts the text of the most recent
-kill.  It leaves the cursor at the end of the text and sets the mark at
-the beginning of the text.  *Note Mark::.
-
-   `C-u C-y' yanks the text, leaves the cursor in front of the text,
-and sets the mark after it, if the argument is with just a `C-u'.  Any
-other argument, including `C-u' and digits, has different results,
-described below, under "Yanking Earlier Kills".
-
-   To copy a block of text, you can also use `M-w'
-(`copy-region-as-kill'), which copies the region into the kill ring
-without removing it from the buffer. `M-w' is similar to `C-w' followed
-by `C-y' but does not mark the buffer as "modified" and does not
-actually cut anything.
-
index 2c5aa3e..6f80cb7 100644 (file)
@@ -30,6 +30,212 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Killing,  Next: Yanking,  Prev: Additional Mouse Operations,  Up: Top
+
+Deletion and Killing
+====================
+
+   Most commands that erase text from the buffer save it. You can get
+the text back if you change your mind, or you can move or copy it to
+other parts of the buffer.  Commands which erase text and save it in the
+kill ring are known as "kill" commands.  Some other commands erase text
+but do not save it; they are known as "delete" commands.  (This
+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>
+(`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.
+
+Deletion
+--------
+
+`C-d'
+     Delete next character (`delete-char').
+
+`<DEL>'
+     Delete previous character (`delete-backward-char').
+
+`M-\'
+     Delete spaces and tabs around point (`delete-horizontal-space').
+
+`M-<SPC>'
+     Delete spaces and tabs around point, leaving one space
+     (`just-one-space').
+
+`C-x C-o'
+     Delete blank lines around the current line (`delete-blank-lines').
+
+`M-^'
+     Join two lines by deleting the intervening newline, and any
+     indentation following it (`delete-indentation').
+
+   The most basic delete commands are `C-d' (`delete-char') and <DEL>
+(`delete-backward-char').  `C-d' deletes the character after point, the
+one the cursor is "on top of".  Point doesn't move.  <DEL> deletes the
+character before the cursor, and moves point back.  You can delete
+newlines like any other characters in the buffer; deleting a newline
+joins two lines.  Actually, `C-d' and <DEL> aren't always delete
+commands; if you give them an argument, they kill instead, since they
+can erase more than one character this way.
+
+   The other delete commands delete only formatting characters: spaces,
+tabs and newlines.  `M-\' (`delete-horizontal-space') deletes all
+spaces and tab characters before and after point.  `M-<SPC>'
+(`just-one-space') does the same but leaves a single space after point,
+regardless of the number of spaces that existed previously (even zero).
+
+   `C-x C-o' (`delete-blank-lines') deletes all blank lines after the
+current line. If the current line is blank, it deletes all blank lines
+preceding the current line as well as leaving one blank line, the
+current line.  `M-^' (`delete-indentation') joins the current line and
+the previous line, or, if given an argument, joins the current line and
+the next line by deleting a newline and all surrounding spaces, possibly
+leaving a single space.  *Note M-^: Indentation.
+
+Killing by Lines
+----------------
+
+`C-k'
+     Kill rest of line or one or more lines (`kill-line').
+
+   The simplest kill command is `C-k'.  If given at the beginning of a
+line, it kills all the text on the line, leaving the line blank.  If
+given on a blank line, the blank line disappears.  As a consequence, a
+line disappears completely if you go to the front of a non-blank line
+and type `C-k' twice.
+
+   More generally, `C-k' kills from point up to the end of the line,
+unless it is at the end of a line.  In that case, it kills the newline
+following the line, thus merging the next line into the current one.
+Emacs ignores invisible spaces and tabs at the end of the line when
+deciding which case applies: if point appears to be at the end of the
+line, you can be sure the newline will be killed.
+
+   If you give `C-k' a positive argument, it kills that many lines and
+the newlines that follow them (however, text on the current line before
+point is not killed).  With a negative argument, `C-k' kills back to a
+number of line beginnings.  An argument of -2 means kill back to the
+second line beginning.  If point is at the beginning of a line, that
+line beginning doesn't count, so `C-u - 2 C-k' with point at the front
+of a line kills the two previous lines.
+
+   `C-k' with an argument of zero kills all the text before point on the
+current line.
+
+Other Kill Commands
+-------------------
+
+`C-w'
+     Kill region (from point to the mark) (`kill-region').  *Note
+     Words::.
+
+`M-d'
+     Kill word (`kill-word').
+
+`M-<DEL>'
+     Kill word backwards (`backward-kill-word').
+
+`C-x <DEL>'
+     Kill back to beginning of sentence (`backward-kill-sentence').
+     *Note Sentences::.
+
+`M-k'
+     Kill to end of sentence (`kill-sentence').
+
+`C-M-k'
+     Kill sexp (`kill-sexp').  *Note Lists::.
+
+`M-z CHAR'
+     Kill up to next occurrence of CHAR (`zap-to-char').
+
+   `C-w' (`kill-region') is a very general kill command; it kills
+everything between point and the mark. You can use this command to kill
+any contiguous sequence of characters by first setting the mark at one
+end of a sequence of characters, then going to the other end and typing
+`C-w'.
+
+   A convenient way of killing is combined with searching: `M-z'
+(`zap-to-char') reads a character and kills from point up to (but not
+including) the next occurrence of that character in the buffer.  If
+there is no next occurrence, killing goes to the end of the buffer.  A
+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::.).
+
+\1f
+File: xemacs.info,  Node: Yanking,  Next: Using X Selections,  Prev: Killing,  Up: Top
+
+Yanking
+=======
+
+   "Yanking" means getting back text which was killed. Some systems
+call this "pasting".  The usual way to move or copy text is to kill it
+and then yank it one or more times.
+
+`C-y'
+     Yank last killed text (`yank').
+
+`M-y'
+     Replace re-inserted killed text with the previously killed text
+     (`yank-pop').
+
+`M-w'
+     Save region as last killed text without actually killing it
+     (`copy-region-as-kill').
+
+`C-M-w'
+     Append next kill to last batch of killed text (`append-next-kill').
+
+* Menu:
+
+* Kill Ring::       Where killed text is stored.  Basic yanking.
+* Appending Kills:: Several kills in a row all yank together.
+* Earlier Kills::   Yanking something killed some time ago.
+
+\1f
+File: xemacs.info,  Node: Kill Ring,  Next: Appending Kills,  Prev: Yanking,  Up: Yanking
+
+The Kill Ring
+-------------
+
+   All killed text is recorded in the "kill ring", a list of blocks of
+text that have been killed.  There is only one kill ring, used in all
+buffers, so you can kill text in one buffer and yank it in another
+buffer.  This is the usual way to move text from one file to another.
+(*Note Accumulating Text::, for some other ways.)
+
+   If you have two separate Emacs processes, you cannot use the kill
+ring to move text. If you are using XEmacs under X, however, you can
+use the X selection mechanism to move text from one to another.
+
+   If you are using XEmacs under X and have one Emacs process with
+multiple frames, they do share the same kill ring.  You can kill or
+copy text in one Emacs frame, then yank it in the other frame belonging
+to the same process.
+
+   The command `C-y' (`yank') reinserts the text of the most recent
+kill.  It leaves the cursor at the end of the text and sets the mark at
+the beginning of the text.  *Note Mark::.
+
+   `C-u C-y' yanks the text, leaves the cursor in front of the text,
+and sets the mark after it, if the argument is with just a `C-u'.  Any
+other argument, including `C-u' and digits, has different results,
+described below, under "Yanking Earlier Kills".
+
+   To copy a block of text, you can also use `M-w'
+(`copy-region-as-kill'), which copies the region into the kill ring
+without removing it from the buffer. `M-w' is similar to `C-w' followed
+by `C-y' but does not mark the buffer as "modified" and does not
+actually cut anything.
+
+\1f
 File: xemacs.info,  Node: Appending Kills,  Next: Earlier Kills,  Prev: Kill Ring,  Up: Yanking
 
 Appending Kills
@@ -513,22 +719,18 @@ File: xemacs.info,  Node: Registers,  Next: Display,  Prev: Rectangles,  Up: Top
 Registers
 *********
 
-   Emacs "registers" are places in which you can save text or positions
-for later use.  Text saved in a register can be copied into the buffer
-once or many times; a position saved in a register is used by moving
-point to that position.  Rectangles can also be copied into and out of
-registers (*note Rectangles::.).
+   XEmacs "registers" are places in which you can save text or
+positions for later use.  Once you save text or a rectangle in a
+register, you can copy it into the buffer once or many times; a position
+saved in a register is used by moving point to that position.
+Rectangles can also be copied into and out of registers (*note
+Rectangles::.).
 
-   Each register has a name, which is a single character.  A register
-can store either a piece of text, a position, or a rectangle, but only
-one thing at any given time.  Whatever you store in a register remains
-there until you store something else in that register.
-
-* Menu:
-
-* RegPos::    Saving positions in registers.
-* RegText::   Saving text in registers.
-* RegRect::   Saving rectangles in registers.
+   Each register has a name which is a single character.  A register can
+store a piece of text, a rectangle, a position, a window configuration,
+or a file name, but only one thing at any given time.  Whatever you
+store in a register remains there until you store something else in that
+register.  To see what a register R contains, use `M-x view-register'.
 
 `M-x view-register <RET> R'
      Display a description of what register R contains.
@@ -536,31 +738,46 @@ there until you store something else in that register.
    `M-x view-register' reads a register name as an argument and then
 displays the contents of the specified register.
 
+* Menu:
+
+* Position: RegPos.           Saving positions in registers.
+* Text: RegText.              Saving text in registers.
+* Rectangle: RegRect.         Saving rectangles in registers.
+* Configurations: RegConfig.  Saving window configurations in registers.
+* Files: RegFiles.            File names in registers.
+* Numbers: RegNumbers.        Numbers in registers.
+* Bookmarks::                 Bookmarks are like registers, but persistent.
+
 \1f
 File: xemacs.info,  Node: RegPos,  Next: RegText,  Prev: Registers,  Up: Registers
 
 Saving Positions in Registers
 =============================
 
-   Saving a position records a spot in a buffer so you can move back
-there later.  Moving to a saved position re-selects the buffer and
-moves point to the spot.
+   Saving a position records a place in a buffer so that you can move
+back there later.  Moving to a saved position switches to that buffer
+and moves point to that place in it.
 
-`C-x r SPC R'
-     Save the location of point in register R (`point-to-register').
+`C-x r <SPC> R'
+     Save position of point in register R (`point-to-register').
 
 `C-x r j R'
-     Jump to the location saved in register R (`register-to-point').
+     Jump to the position saved in register R (`jump-to-register').
 
-   To save the current location of point in a register, choose a name R
-and type `C-x r SPC R'.  The register R retains the location thus saved
-until you store something else in that register.
+   To save the current position of point in a register, choose a name R
+and type `C-x r <SPC> R'.  The register R retains the position thus
+saved until you store something else in that register.
 
-   The command `C-x r j R' moves point to the location recorded in
+   The command `C-x r j R' moves point to the position recorded in
 register R.  The register is not affected; it continues to record the
 same location.  You can jump to the same position using the same
 register as often as you want.
 
+   If you use `C-x r j' to go to a saved position, but the buffer it
+was saved from has been killed, `C-x r j' tries to create the buffer
+again by visiting the same file.  Of course, this works only for buffers
+that were visiting files.
+
 \1f
 File: xemacs.info,  Node: RegText,  Next: RegRect,  Prev: RegPos,  Up: Registers
 
@@ -572,26 +789,27 @@ it can be impractical to use the kill ring, since each subsequent kill
 moves the piece of text further down on the ring.  It becomes hard to
 keep track of the argument needed to retrieve the same text with `C-y'.
 An alternative is to store the text in a register with `C-x r s'
-(`copy-to-register') and then retrieve it with `C-x r g'
+(`copy-to-register') and then retrieve it with `C-x r i'
 (`insert-register').
 
 `C-x r s R'
      Copy region into register R (`copy-to-register').
 
 `C-x r g R'
+`C-x r i R'
      Insert text contents of register R (`insert-register').
 
    `C-x r s R' stores a copy of the text of the region into the
-register named R.  Given a numeric argument, `C-x r s' deletes the text
-from the buffer as well.
+register named R.  Given a numeric argument, `C-x r s R' deletes the
+text from the buffer as well.
 
-   `C-x r g R' inserts the text from register R in the buffer.  By
+   `C-x r i R' inserts the text from register R in the buffer.  By
 default it leaves point before the text and places the mark after it.
-With a numeric argument, it puts point after the text and the mark
-before it.
+With a numeric argument (`C-u'), it puts point after the text and the
+mark before it.
 
 \1f
-File: xemacs.info,  Node: RegRect,  Prev: RegText,  Up: Registers
+File: xemacs.info,  Node: RegRect,  Next: RegConfig,  Prev: RegText,  Up: Registers
 
 Saving Rectangles in Registers
 ==============================
@@ -602,16 +820,173 @@ basic information on rectangles and how to specify rectangles in a
 buffer.
 
 `C-x r r R'
-     Copy the region-rectangle into register
-     R(`copy-rectangle-to-register').  With a numeric argument, delete
-     it as well.
+     Copy the region-rectangle into register R
+     (`copy-rectangle-to-register').  With a numeric argument, delete it
+     as well.
 
 `C-x r g R'
+`C-x r i R'
      Insert the rectangle stored in register R (if it contains a
      rectangle) (`insert-register').
 
-   The `C-x r g' command inserts linear text if the register contains
-that, or inserts a rectangle if the register contains one.
+   The `C-x r i R' command inserts linear text if the register
+contains that, or inserts a rectangle if the register contains one.
+
+   See also the command `sort-columns', which you can think of as
+sorting a rectangle.  *Note Sorting::.
+
+\1f
+File: xemacs.info,  Node: RegConfig,  Next: RegNumbers,  Prev: RegRect,  Up: Registers
+
+Saving Window Configurations in Registers
+=========================================
+
+   You can save the window configuration of the selected frame in a
+register, or even the configuration of all windows in all frames, and
+restore the configuration later.
+
+`C-x r w R'
+     Save the state of the selected frame's windows in register R
+     (`window-configuration-to-register').
+
+`M-x frame-configuration-to-register <RET> R'
+     Save the state of all frames, including all their windows, in
+     register R (`frame-configuration-to-register').
+
+   Use `C-x r j R' to restore a window or frame configuration.  This is
+the same command used to restore a cursor position.  When you restore a
+frame configuration, any existing frames not included in the
+configuration become invisible.  If you wish to delete these frames
+instead, use `C-u C-x r j R'.
+
+\1f
+File: xemacs.info,  Node: RegNumbers,  Next: RegFiles,  Prev: RegConfig,  Up: Registers
+
+Keeping Numbers in Registers
+============================
+
+   There are commands to store a number in a register, to insert the
+number in the buffer in decimal, and to increment it.  These commands
+can be useful in keyboard macros (*note Keyboard Macros::.).
+
+`C-u NUMBER C-x r n REG'
+     Store NUMBER into register REG (`number-to-register').
+
+`C-u NUMBER C-x r + REG'
+     Increment the number in register REG by NUMBER
+     (`increment-register').
+
+`C-x r g REG'
+     Insert the number from register REG into the buffer.
+
+   `C-x r g' is the same command used to insert any other sort of
+register contents into the buffer.
+
+\1f
+File: xemacs.info,  Node: RegFiles,  Next: Bookmarks,  Prev: RegNumbers,  Up: Registers
+
+Keeping File Names in Registers
+===============================
+
+   If you visit certain file names frequently, you can visit them more
+conveniently if you put their names in registers.  Here's the Lisp code
+used to put a file name in a register:
+
+     (set-register ?R '(file . NAME))
+
+For example,
+
+     (set-register ?z '(file . "/usr/src/xemacs/src/ChangeLog"))
+
+puts the file name shown in register `z'.
+
+   To visit the file whose name is in register R, type `C-x r j R'.
+(This is the same command used to jump to a position or restore a frame
+configuration.)
+
+\1f
+File: xemacs.info,  Node: Bookmarks,  Prev: RegFiles,  Up: Registers
+
+Bookmarks
+=========
+
+   "Bookmarks" are somewhat like registers in that they record
+positions you can jump to.  Unlike registers, they have long names, and
+they persist automatically from one Emacs session to the next.  The
+prototypical use of bookmarks is to record "where you were reading" in
+various files.
+
+   Note: bookmark.el is distributed in edit-utils package.  You need to
+install that to use bookmark facility (*note Packages::.).
+
+`C-x r m <RET>'
+     Set the bookmark for the visited file, at point.
+
+`C-x r m BOOKMARK <RET>'
+     Set the bookmark named BOOKMARK at point (`bookmark-set').
+
+`C-x r b BOOKMARK <RET>'
+     Jump to the bookmark named BOOKMARK (`bookmark-jump').
+
+`C-x r l'
+     List all bookmarks (`list-bookmarks').
+
+`M-x bookmark-save'
+     Save all the current bookmark values in the default bookmark file.
+
+   The prototypical use for bookmarks is to record one current position
+in each of several files.  So the command `C-x r m', which sets a
+bookmark, uses the visited file name as the default for the bookmark
+name.  If you name each bookmark after the file it points to, then you
+can conveniently revisit any of those files with `C-x r b', and move to
+the position of the bookmark at the same time.
+
+   To display a list of all your bookmarks in a separate buffer, type
+`C-x r l' (`list-bookmarks').  If you switch to that buffer, you can
+use it to edit your bookmark definitions or annotate the bookmarks.
+Type `C-h m' in that buffer for more information about its special
+editing commands.
+
+   When you kill XEmacs, XEmacs offers to save your bookmark values in
+your default bookmark file, `~/.emacs.bmk', if you have changed any
+bookmark values.  You can also save the bookmarks at any time with the
+`M-x bookmark-save' command.  The bookmark commands load your default
+bookmark file automatically.  This saving and loading is how bookmarks
+persist from one XEmacs session to the next.
+
+   If you set the variable `bookmark-save-flag' to 1, then each command
+that sets a bookmark will also save your bookmarks; this way, you don't
+lose any bookmark values even if XEmacs crashes.  (The value, if a
+number, says how many bookmark modifications should go by between
+saving.)
+
+   Bookmark position values are saved with surrounding context, so that
+`bookmark-jump' can find the proper position even if the file is
+modified slightly.  The variable `bookmark-search-size' says how many
+characters of context to record, on each side of the bookmark's
+position.
+
+   Here are some additional commands for working with bookmarks:
+
+`M-x bookmark-load <RET> FILENAME <RET>'
+     Load a file named FILENAME that contains a list of bookmark
+     values.  You can use this command, as well as `bookmark-write', to
+     work with other files of bookmark values in addition to your
+     default bookmark file.
+
+`M-x bookmark-write <RET> FILENAME <RET>'
+     Save all the current bookmark values in the file FILENAME.
+
+`M-x bookmark-delete <RET> BOOKMARK <RET>'
+     Delete the bookmark named BOOKMARK.
+
+`M-x bookmark-insert-location <RET> BOOKMARK <RET>'
+     Insert in the buffer the name of the file that bookmark BOOKMARK
+     points to.
+
+`M-x bookmark-insert <RET> BOOKMARK <RET>'
+     Insert in the buffer the *contents* of the file that bookmark
+     BOOKMARK points to.
 
 \1f
 File: xemacs.info,  Node: Display,  Next: Search,  Prev: Registers,  Up: Top
@@ -813,360 +1188,3 @@ they were not there.
 
    To make everything visible again, type `C-x $' with no argument.
 
-\1f
-File: xemacs.info,  Node: Display Vars,  Prev: Selective Display,  Up: Display
-
-Variables Controlling Display
-=============================
-
-   This section contains information for customization only.  Beginning
-users should skip it.
-
-   When you reenter XEmacs after suspending, XEmacs normally clears the
-screen and redraws the entire display.  On some terminals with more than
-one page of memory, it is possible to arrange the termcap entry so that
-the `ti' and `te' strings (output to the terminal when XEmacs is
-entered and exited, respectively) switch between pages of memory so as
-to use one page for XEmacs and another page for other output.  In that
-case, you might want to set the variable `no-redraw-on-reenter' to
-non-`nil' so that XEmacs will assume, when resumed, that the screen
-page it is using still contains what XEmacs last wrote there.
-
-   The variable `echo-keystrokes' controls the echoing of
-multi-character keys; its value is the number of seconds of pause
-required to cause echoing to start, or zero, meaning don't echo at all.
-*Note Echo Area::.
-
-   If the variable `ctl-arrow' is `nil', control characters in the
-buffer are displayed with octal escape sequences, all except newline and
-tab.  If its value is `t', then control characters will be printed with
-an up-arrow, for example `^A'.
-
-   If its value is not `t' and not `nil', then characters whose code is
-greater than 160 (that is, the space character (32) with its high bit
-set) will be assumed to be printable, and will be displayed without
-alteration.  This is the default when running under X Windows, since
-XEmacs assumes an ISO/8859-1 character set (also known as "Latin1").
-The `ctl-arrow' variable may also be set to an integer, in which case
-all characters whose codes are greater than or equal to that value will
-be assumed to be printable.
-
-   Altering the value of `ctl-arrow' makes it local to the current
-buffer; until that time, the default value is in effect.  *Note
-Locals::.
-
-   Normally, a tab character in the buffer is displayed as whitespace
-which extends to the next display tab stop position, and display tab
-stops come at intervals equal to eight spaces.  The number of spaces
-per tab is controlled by the variable `tab-width', which is made local
-by changing it, just like `ctl-arrow'.  Note that how the tab character
-in the buffer is displayed has nothing to do with the definition of
-<TAB> as a command.
-
-   If you set the variable `selective-display-ellipses' to `nil', the
-three dots at the end of a line that precedes invisible lines do not
-appear.  There is no visible indication of the invisible lines.  This
-variable becomes local automatically when set.
-
-\1f
-File: xemacs.info,  Node: Search,  Next: Fixit,  Prev: Display,  Up: Top
-
-Searching and Replacement
-*************************
-
-   Like other editors, Emacs has commands for searching for occurrences
-of a string.  The principal search command is unusual in that it is
-"incremental": it begins to search before you have finished typing the
-search string.  There are also non-incremental search commands more like
-those of other editors.
-
-   Besides the usual `replace-string' command that finds all
-occurrences of one string and replaces them with another, Emacs has a
-fancy replacement command called `query-replace' which asks
-interactively which occurrences to replace.
-
-* Menu:
-
-* Incremental Search::     Search happens as you type the string.
-* Non-Incremental Search:: Specify entire string and then search.
-* Word Search::            Search for sequence of words.
-* Regexp Search::          Search for match for a regexp.
-* Regexps::                Syntax of regular expressions.
-* Search Case::            To ignore case while searching, or not.
-* Replace::                Search, and replace some or all matches.
-* Other Repeating Search:: Operating on all matches for some regexp.
-
-\1f
-File: xemacs.info,  Node: Incremental Search,  Next: Non-Incremental Search,  Prev: Search,  Up: Search
-
-Incremental Search
-==================
-
-   An incremental search begins searching as soon as you type the first
-character of the search string.  As you type in the search string, Emacs
-shows you where the string (as you have typed it so far) is found.
-When you have typed enough characters to identify the place you want,
-you can stop.  Depending on what you do next, you may or may not need to
-terminate the search explicitly with a <RET>.
-
-`C-s'
-     Incremental search forward (`isearch-forward').
-
-`C-r'
-     Incremental search backward (`isearch-backward').
-
-   `C-s' starts an incremental search.  `C-s' reads characters from the
-keyboard and positions the cursor at the first occurrence of the
-characters that you have typed.  If you type `C-s' and then `F', the
-cursor moves right after the first `F'.  Type an `O', and see the
-cursor move to after the first `FO'.  After another `O', the cursor is
-after the first `FOO' after the place where you started the search.
-Meanwhile, the search string `FOO' has been echoed in the echo area.
-
-   The echo area display ends with three dots when actual searching is
-going on.  When search is waiting for more input, the three dots are
-removed.  (On slow terminals, the three dots are not displayed.)
-
-   If you make a mistake in typing the search string, you can erase
-characters with <DEL>.  Each <DEL> cancels the last character of the
-search string.  This does not happen until Emacs is ready to read
-another input character; first it must either find, or fail to find,
-the character you want to erase.  If you do not want to wait for this
-to happen, use `C-g' as described below.
-
-   When you are satisfied with the place you have reached, you can type
-<RET> (or <C-m>), which stops searching, leaving the cursor where the
-search brought it.  Any command not specially meaningful in searches
-also stops the search and is then executed.  Thus, typing `C-a' exits
-the search and then moves to the beginning of the line.  <RET> is
-necessary only if the next command you want to type is a printing
-character, <DEL>, <ESC>, or another control character that is special
-within searches (`C-q', `C-w', `C-r', `C-s', or `C-y').
-
-   Sometimes you search for `FOO' and find it, but were actually
-looking for a different occurance of it.  To move to the next occurrence
-of the search string, type another `C-s'.  Do this as often as
-necessary.  If you overshoot, you can cancel some `C-s' characters with
-<DEL>.
-
-   After you exit a search, you can search for the same string again by
-typing just `C-s C-s': the first `C-s' is the key that invokes
-incremental search, and the second `C-s' means "search again".
-
-   If the specified string is not found at all, the echo area displays
-the text `Failing I-Search'.  The cursor is after the place where Emacs
-found as much of your string as it could.  Thus, if you search for
-`FOOT', and there is no `FOOT', the cursor may be after the `FOO' in
-`FOOL'.  At this point there are several things you can do.  If you
-mistyped the search string, correct it.  If you like the place you have
-found, you can type <RET> or some other Emacs command to "accept what
-the search offered".  Or you can type `C-g', which removes from the
-search string the characters that could not be found (the `T' in
-`FOOT'), leaving those that were found (the `FOO' in `FOOT').  A second
-`C-g' at that point cancels the search entirely, returning point to
-where it was when the search started.
-
-   If a search is failing and you ask to repeat it by typing another
-`C-s', it starts again from the beginning of the buffer.  Repeating a
-failing backward search with `C-r' starts again from the end.  This is
-called "wrapping around".  `Wrapped' appears in the search prompt once
-this has happened.
-
-   The `C-g' "quit" character does special things during searches; just
-what it does depends on the status of the search.  If the search has
-found what you specified and is waiting for input, `C-g' cancels the
-entire search.  The cursor moves back to where you started the search.
-If `C-g' is typed when there are characters in the search string that
-have not been found--because Emacs is still searching for them, or
-because it has failed to find them--then the search string characters
-which have not been found are discarded from the search string.  The
-search is now successful and waiting for more input, so a second `C-g'
-cancels the entire search.
-
-   To search for a control character such as `C-s' or <DEL> or <ESC>,
-you must quote it by typing `C-q' first.  This function of `C-q' is
-analogous to its meaning as an Emacs command: it causes the following
-character to be treated the way a graphic character would normally be
-treated in the same context.
-
-   To search backwards, you can use `C-r' instead of `C-s' to start the
-search; `C-r' is the key that runs the command (`isearch-backward') to
-search backward.  You can also use `C-r' to change from searching
-forward to searching backwards.  Do this if a search fails because the
-place you started was too far down in the file.  Repeated `C-r' keeps
-looking for more occurrences backwards.  `C-s' starts going forward
-again.  You can cancel `C-r' in a search with <DEL>.
-
-   The characters `C-y' and `C-w' can be used in incremental search to
-grab text from the buffer into the search string.  This makes it
-convenient to search for another occurrence of text at point.  `C-w'
-copies the word after point as part of the search string, advancing
-point over that word.  Another `C-s' to repeat the search will then
-search for a string including that word.  `C-y' is similar to `C-w' but
-copies the rest of the current line into the search string.
-
-   The characters `M-p' and `M-n' can be used in an incremental search
-to recall things which you have searched for in the past.  A list of
-the last 16 things you have searched for is retained, and `M-p' and
-`M-n' let you cycle through that ring.
-
-   The character `M-<TAB>' does completion on the elements in the
-search history ring.  For example, if you know that you have recently
-searched for the string `POTATOE', you could type `C-s P O M-<TAB>'.
-If you had searched for other strings beginning with `PO' then you
-would be shown a list of them, and would need to type more to select
-one.
-
-   You can change any of the special characters in incremental search
-via the normal keybinding mechanism: simply add a binding to the
-`isearch-mode-map'.  For example, to make the character `C-b' mean
-"search backwards" while in isearch-mode, do this:
-
-     (define-key isearch-mode-map "\C-b" 'isearch-repeat-backward)
-
-   These are the default bindings of isearch-mode:
-
-`DEL'
-     Delete a character from the incremental search string
-     (`isearch-delete-char').
-
-`RET'
-     Exit incremental search (`isearch-exit').
-
-`C-q'
-     Quote special characters for incremental search
-     (`isearch-quote-char').
-
-`C-s'
-     Repeat incremental search forward (`isearch-repeat-forward').
-
-`C-r'
-     Repeat incremental search backward (`isearch-repeat-backward').
-
-`C-y'
-     Pull rest of line from buffer into search string
-     (`isearch-yank-line').
-
-`C-w'
-     Pull next word from buffer into search string
-     (`isearch-yank-word').
-
-`C-g'
-     Cancels input back to what has been found successfully, or aborts
-     the isearch (`isearch-abort').
-
-`M-p'
-     Recall the previous element in the isearch history ring
-     (`isearch-ring-retreat').
-
-`M-n'
-     Recall the next element in the isearch history ring
-     (`isearch-ring-advance').
-
-`M-<TAB>'
-     Do completion on the elements in the isearch history ring
-     (`isearch-complete').
-
-   Any other character which is normally inserted into a buffer when
-typed is automatically added to the search string in isearch-mode.
-
-Slow Terminal Incremental Search
---------------------------------
-
-   Incremental search on a slow terminal uses a modified style of
-display that is designed to take less time.  Instead of redisplaying
-the buffer at each place the search gets to, it creates a new
-single-line window and uses that to display the line the search has
-found.  The single-line window appears as soon as point gets outside of
-the text that is already on the screen.
-
-   When the search is terminated, the single-line window is removed.
-Only at this time the window in which the search was done is
-redisplayed to show its new value of point.
-
-   The three dots at the end of the search string, normally used to
-indicate that searching is going on, are not displayed in slow style
-display.
-
-   The slow terminal style of display is used when the terminal baud
-rate is less than or equal to the value of the variable
-`search-slow-speed', initially 1200.
-
-   The number of lines to use in slow terminal search display is
-controlled by the variable `search-slow-window-lines'.  Its normal
-value is 1.
-
-\1f
-File: xemacs.info,  Node: Non-Incremental Search,  Next: Word Search,  Prev: Incremental Search,  Up: Search
-
-Non-Incremental Search
-======================
-
-   Emacs also has conventional non-incremental search commands, which
-require you type the entire search string before searching begins.
-
-`C-s <RET> STRING <RET>'
-     Search for STRING.
-
-`C-r <RET> STRING <RET>'
-     Search backward for STRING.
-
-   To do a non-incremental search, first type `C-s <RET>' (or `C-s
-C-m').  This enters the minibuffer to read the search string.
-Terminate the string with <RET> to start the search.  If the string is
-not found, the search command gets an error.
-
-   By default, `C-s' invokes incremental search, but if you give it an
-empty argument, which would otherwise be useless, it invokes
-non-incremental search.  Therefore, `C-s <RET>' invokes non-incremental
-search.  `C-r <RET>' also works this way.
-
-   Forward and backward non-incremental searches are implemented by the
-commands `search-forward' and `search-backward'.  You can bind these
-commands to keys.  The reason that incremental search is programmed to
-invoke them as well is that `C-s <RET>' is the traditional sequence of
-characters used in Emacs to invoke non-incremental search.
-
-   Non-incremental searches performed using `C-s <RET>' do not call
-`search-forward' right away.  They first check if the next character is
-`C-w', which requests a word search.  *Note Word Search::.
-
-\1f
-File: xemacs.info,  Node: Word Search,  Next: Regexp Search,  Prev: Non-Incremental Search,  Up: Search
-
-Word Search
-===========
-
-   Word search looks for a sequence of words without regard to how the
-words are separated.  More precisely, you type a string of many words,
-using single spaces to separate them, and the string is found even if
-there are multiple spaces, newlines or other punctuation between the
-words.
-
-   Word search is useful in editing documents formatted by text
-formatters.  If you edit while looking at the printed, formatted
-version, you can't tell where the line breaks are in the source file.
-Word search, allows you to search  without having to know the line
-breaks.
-
-`C-s <RET> C-w WORDS <RET>'
-     Search for WORDS, ignoring differences in punctuation.
-
-`C-r <RET> C-w WORDS <RET>'
-     Search backward for WORDS, ignoring differences in punctuation.
-
-   Word search is a special case of non-incremental search.  It is
-invoked with `C-s <RET> C-w' followed by the search string, which must
-always be terminated with another <RET>.  Being non-incremental, this
-search does not start until the argument is terminated.  It works by
-constructing a regular expression and searching for that.  *Note Regexp
-Search::.
-
-   You can do a backward word search with `C-r <RET> C-w'.
-
-   Forward and backward word searches are implemented by the commands
-`word-search-forward' and `word-search-backward'.  You can bind these
-commands to keys.  The reason that incremental search is programmed to
-invoke them as well is that `C-s <RET> C-w' is the traditional Emacs
-sequence of keys for word search.
-
index a295967..39d4f90 100644 (file)
@@ -30,6 +30,363 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Display Vars,  Prev: Selective Display,  Up: Display
+
+Variables Controlling Display
+=============================
+
+   This section contains information for customization only.  Beginning
+users should skip it.
+
+   When you reenter XEmacs after suspending, XEmacs normally clears the
+screen and redraws the entire display.  On some terminals with more than
+one page of memory, it is possible to arrange the termcap entry so that
+the `ti' and `te' strings (output to the terminal when XEmacs is
+entered and exited, respectively) switch between pages of memory so as
+to use one page for XEmacs and another page for other output.  In that
+case, you might want to set the variable `no-redraw-on-reenter' to
+non-`nil' so that XEmacs will assume, when resumed, that the screen
+page it is using still contains what XEmacs last wrote there.
+
+   The variable `echo-keystrokes' controls the echoing of
+multi-character keys; its value is the number of seconds of pause
+required to cause echoing to start, or zero, meaning don't echo at all.
+*Note Echo Area::.
+
+   If the variable `ctl-arrow' is `nil', control characters in the
+buffer are displayed with octal escape sequences, all except newline and
+tab.  If its value is `t', then control characters will be printed with
+an up-arrow, for example `^A'.
+
+   If its value is not `t' and not `nil', then characters whose code is
+greater than 160 (that is, the space character (32) with its high bit
+set) will be assumed to be printable, and will be displayed without
+alteration.  This is the default when running under X Windows, since
+XEmacs assumes an ISO/8859-1 character set (also known as "Latin1").
+The `ctl-arrow' variable may also be set to an integer, in which case
+all characters whose codes are greater than or equal to that value will
+be assumed to be printable.
+
+   Altering the value of `ctl-arrow' makes it local to the current
+buffer; until that time, the default value is in effect.  *Note
+Locals::.
+
+   Normally, a tab character in the buffer is displayed as whitespace
+which extends to the next display tab stop position, and display tab
+stops come at intervals equal to eight spaces.  The number of spaces
+per tab is controlled by the variable `tab-width', which is made local
+by changing it, just like `ctl-arrow'.  Note that how the tab character
+in the buffer is displayed has nothing to do with the definition of
+<TAB> as a command.
+
+   If you set the variable `selective-display-ellipses' to `nil', the
+three dots at the end of a line that precedes invisible lines do not
+appear.  There is no visible indication of the invisible lines.  This
+variable becomes local automatically when set.
+
+\1f
+File: xemacs.info,  Node: Search,  Next: Fixit,  Prev: Display,  Up: Top
+
+Searching and Replacement
+*************************
+
+   Like other editors, Emacs has commands for searching for occurrences
+of a string.  The principal search command is unusual in that it is
+"incremental": it begins to search before you have finished typing the
+search string.  There are also non-incremental search commands more like
+those of other editors.
+
+   Besides the usual `replace-string' command that finds all
+occurrences of one string and replaces them with another, Emacs has a
+fancy replacement command called `query-replace' which asks
+interactively which occurrences to replace.
+
+* Menu:
+
+* Incremental Search::     Search happens as you type the string.
+* Non-Incremental Search:: Specify entire string and then search.
+* Word Search::            Search for sequence of words.
+* Regexp Search::          Search for match for a regexp.
+* Regexps::                Syntax of regular expressions.
+* Search Case::            To ignore case while searching, or not.
+* Replace::                Search, and replace some or all matches.
+* Other Repeating Search:: Operating on all matches for some regexp.
+
+\1f
+File: xemacs.info,  Node: Incremental Search,  Next: Non-Incremental Search,  Prev: Search,  Up: Search
+
+Incremental Search
+==================
+
+   An incremental search begins searching as soon as you type the first
+character of the search string.  As you type in the search string, Emacs
+shows you where the string (as you have typed it so far) is found.
+When you have typed enough characters to identify the place you want,
+you can stop.  Depending on what you do next, you may or may not need to
+terminate the search explicitly with a <RET>.
+
+`C-s'
+     Incremental search forward (`isearch-forward').
+
+`C-r'
+     Incremental search backward (`isearch-backward').
+
+   `C-s' starts an incremental search.  `C-s' reads characters from the
+keyboard and positions the cursor at the first occurrence of the
+characters that you have typed.  If you type `C-s' and then `F', the
+cursor moves right after the first `F'.  Type an `O', and see the
+cursor move to after the first `FO'.  After another `O', the cursor is
+after the first `FOO' after the place where you started the search.
+Meanwhile, the search string `FOO' has been echoed in the echo area.
+
+   The echo area display ends with three dots when actual searching is
+going on.  When search is waiting for more input, the three dots are
+removed.  (On slow terminals, the three dots are not displayed.)
+
+   If you make a mistake in typing the search string, you can erase
+characters with <DEL>.  Each <DEL> cancels the last character of the
+search string.  This does not happen until Emacs is ready to read
+another input character; first it must either find, or fail to find,
+the character you want to erase.  If you do not want to wait for this
+to happen, use `C-g' as described below.
+
+   When you are satisfied with the place you have reached, you can type
+<RET> (or <C-m>), which stops searching, leaving the cursor where the
+search brought it.  Any command not specially meaningful in searches
+also stops the search and is then executed.  Thus, typing `C-a' exits
+the search and then moves to the beginning of the line.  <RET> is
+necessary only if the next command you want to type is a printing
+character, <DEL>, <ESC>, or another control character that is special
+within searches (`C-q', `C-w', `C-r', `C-s', or `C-y').
+
+   Sometimes you search for `FOO' and find it, but were actually
+looking for a different occurance of it.  To move to the next occurrence
+of the search string, type another `C-s'.  Do this as often as
+necessary.  If you overshoot, you can cancel some `C-s' characters with
+<DEL>.
+
+   After you exit a search, you can search for the same string again by
+typing just `C-s C-s': the first `C-s' is the key that invokes
+incremental search, and the second `C-s' means "search again".
+
+   If the specified string is not found at all, the echo area displays
+the text `Failing I-Search'.  The cursor is after the place where Emacs
+found as much of your string as it could.  Thus, if you search for
+`FOOT', and there is no `FOOT', the cursor may be after the `FOO' in
+`FOOL'.  At this point there are several things you can do.  If you
+mistyped the search string, correct it.  If you like the place you have
+found, you can type <RET> or some other Emacs command to "accept what
+the search offered".  Or you can type `C-g', which removes from the
+search string the characters that could not be found (the `T' in
+`FOOT'), leaving those that were found (the `FOO' in `FOOT').  A second
+`C-g' at that point cancels the search entirely, returning point to
+where it was when the search started.
+
+   If a search is failing and you ask to repeat it by typing another
+`C-s', it starts again from the beginning of the buffer.  Repeating a
+failing backward search with `C-r' starts again from the end.  This is
+called "wrapping around".  `Wrapped' appears in the search prompt once
+this has happened.
+
+   The `C-g' "quit" character does special things during searches; just
+what it does depends on the status of the search.  If the search has
+found what you specified and is waiting for input, `C-g' cancels the
+entire search.  The cursor moves back to where you started the search.
+If `C-g' is typed when there are characters in the search string that
+have not been found--because Emacs is still searching for them, or
+because it has failed to find them--then the search string characters
+which have not been found are discarded from the search string.  The
+search is now successful and waiting for more input, so a second `C-g'
+cancels the entire search.
+
+   To search for a control character such as `C-s' or <DEL> or <ESC>,
+you must quote it by typing `C-q' first.  This function of `C-q' is
+analogous to its meaning as an Emacs command: it causes the following
+character to be treated the way a graphic character would normally be
+treated in the same context.
+
+   To search backwards, you can use `C-r' instead of `C-s' to start the
+search; `C-r' is the key that runs the command (`isearch-backward') to
+search backward.  You can also use `C-r' to change from searching
+forward to searching backwards.  Do this if a search fails because the
+place you started was too far down in the file.  Repeated `C-r' keeps
+looking for more occurrences backwards.  `C-s' starts going forward
+again.  You can cancel `C-r' in a search with <DEL>.
+
+   The characters `C-y' and `C-w' can be used in incremental search to
+grab text from the buffer into the search string.  This makes it
+convenient to search for another occurrence of text at point.  `C-w'
+copies the word after point as part of the search string, advancing
+point over that word.  Another `C-s' to repeat the search will then
+search for a string including that word.  `C-y' is similar to `C-w' but
+copies the rest of the current line into the search string.
+
+   The characters `M-p' and `M-n' can be used in an incremental search
+to recall things which you have searched for in the past.  A list of
+the last 16 things you have searched for is retained, and `M-p' and
+`M-n' let you cycle through that ring.
+
+   The character `M-<TAB>' does completion on the elements in the
+search history ring.  For example, if you know that you have recently
+searched for the string `POTATOE', you could type `C-s P O M-<TAB>'.
+If you had searched for other strings beginning with `PO' then you
+would be shown a list of them, and would need to type more to select
+one.
+
+   You can change any of the special characters in incremental search
+via the normal keybinding mechanism: simply add a binding to the
+`isearch-mode-map'.  For example, to make the character `C-b' mean
+"search backwards" while in isearch-mode, do this:
+
+     (define-key isearch-mode-map "\C-b" 'isearch-repeat-backward)
+
+   These are the default bindings of isearch-mode:
+
+`DEL'
+     Delete a character from the incremental search string
+     (`isearch-delete-char').
+
+`RET'
+     Exit incremental search (`isearch-exit').
+
+`C-q'
+     Quote special characters for incremental search
+     (`isearch-quote-char').
+
+`C-s'
+     Repeat incremental search forward (`isearch-repeat-forward').
+
+`C-r'
+     Repeat incremental search backward (`isearch-repeat-backward').
+
+`C-y'
+     Pull rest of line from buffer into search string
+     (`isearch-yank-line').
+
+`C-w'
+     Pull next word from buffer into search string
+     (`isearch-yank-word').
+
+`C-g'
+     Cancels input back to what has been found successfully, or aborts
+     the isearch (`isearch-abort').
+
+`M-p'
+     Recall the previous element in the isearch history ring
+     (`isearch-ring-retreat').
+
+`M-n'
+     Recall the next element in the isearch history ring
+     (`isearch-ring-advance').
+
+`M-<TAB>'
+     Do completion on the elements in the isearch history ring
+     (`isearch-complete').
+
+   Any other character which is normally inserted into a buffer when
+typed is automatically added to the search string in isearch-mode.
+
+Slow Terminal Incremental Search
+--------------------------------
+
+   Incremental search on a slow terminal uses a modified style of
+display that is designed to take less time.  Instead of redisplaying
+the buffer at each place the search gets to, it creates a new
+single-line window and uses that to display the line the search has
+found.  The single-line window appears as soon as point gets outside of
+the text that is already on the screen.
+
+   When the search is terminated, the single-line window is removed.
+Only at this time the window in which the search was done is
+redisplayed to show its new value of point.
+
+   The three dots at the end of the search string, normally used to
+indicate that searching is going on, are not displayed in slow style
+display.
+
+   The slow terminal style of display is used when the terminal baud
+rate is less than or equal to the value of the variable
+`search-slow-speed', initially 1200.
+
+   The number of lines to use in slow terminal search display is
+controlled by the variable `search-slow-window-lines'.  Its normal
+value is 1.
+
+\1f
+File: xemacs.info,  Node: Non-Incremental Search,  Next: Word Search,  Prev: Incremental Search,  Up: Search
+
+Non-Incremental Search
+======================
+
+   Emacs also has conventional non-incremental search commands, which
+require you type the entire search string before searching begins.
+
+`C-s <RET> STRING <RET>'
+     Search for STRING.
+
+`C-r <RET> STRING <RET>'
+     Search backward for STRING.
+
+   To do a non-incremental search, first type `C-s <RET>' (or `C-s
+C-m').  This enters the minibuffer to read the search string.
+Terminate the string with <RET> to start the search.  If the string is
+not found, the search command gets an error.
+
+   By default, `C-s' invokes incremental search, but if you give it an
+empty argument, which would otherwise be useless, it invokes
+non-incremental search.  Therefore, `C-s <RET>' invokes non-incremental
+search.  `C-r <RET>' also works this way.
+
+   Forward and backward non-incremental searches are implemented by the
+commands `search-forward' and `search-backward'.  You can bind these
+commands to keys.  The reason that incremental search is programmed to
+invoke them as well is that `C-s <RET>' is the traditional sequence of
+characters used in Emacs to invoke non-incremental search.
+
+   Non-incremental searches performed using `C-s <RET>' do not call
+`search-forward' right away.  They first check if the next character is
+`C-w', which requests a word search.  *Note Word Search::.
+
+\1f
+File: xemacs.info,  Node: Word Search,  Next: Regexp Search,  Prev: Non-Incremental Search,  Up: Search
+
+Word Search
+===========
+
+   Word search looks for a sequence of words without regard to how the
+words are separated.  More precisely, you type a string of many words,
+using single spaces to separate them, and the string is found even if
+there are multiple spaces, newlines or other punctuation between the
+words.
+
+   Word search is useful in editing documents formatted by text
+formatters.  If you edit while looking at the printed, formatted
+version, you can't tell where the line breaks are in the source file.
+Word search, allows you to search  without having to know the line
+breaks.
+
+`C-s <RET> C-w WORDS <RET>'
+     Search for WORDS, ignoring differences in punctuation.
+
+`C-r <RET> C-w WORDS <RET>'
+     Search backward for WORDS, ignoring differences in punctuation.
+
+   Word search is a special case of non-incremental search.  It is
+invoked with `C-s <RET> C-w' followed by the search string, which must
+always be terminated with another <RET>.  Being non-incremental, this
+search does not start until the argument is terminated.  It works by
+constructing a regular expression and searching for that.  *Note Regexp
+Search::.
+
+   You can do a backward word search with `C-r <RET> C-w'.
+
+   Forward and backward word searches are implemented by the commands
+`word-search-forward' and `word-search-backward'.  You can bind these
+commands to keys.  The reason that incremental search is programmed to
+invoke them as well is that `C-s <RET> C-w' is the traditional Emacs
+sequence of keys for word search.
+
+\1f
 File: xemacs.info,  Node: Regexp Search,  Next: Regexps,  Prev: Word Search,  Up: Search
 
 Regular Expression Search
@@ -816,343 +1173,3 @@ performed for single `$'.  The Lisp function that performs the
 substitution is called `substitute-in-file-name'.  The substitution is
 performed only on filenames read as such using the minibuffer.
 
-\1f
-File: xemacs.info,  Node: Visiting,  Next: Saving,  Prev: File Names,  Up: Files
-
-Visiting Files
-==============
-
-`C-x C-f'
-     Visit a file (`find-file').
-
-`C-x C-v'
-     Visit a different file instead of the one visited last
-     (`find-alternate-file').
-
-`C-x 4 C-f'
-     Visit a file, in another window (`find-file-other-window').  Don't
-     change this window.
-
-`C-x 5 C-f'
-     Visit a file, in another frame (`find-file-other-frame').  Don't
-     change this window or frame.
-
-   "Visiting" a file means copying its contents into an Emacs buffer so
-you can edit it.  Emacs creates a new buffer for each file you visit.
-We say that the buffer is visiting the file that it was created to
-hold.  Emacs constructs the buffer name from the file name by throwing
-away the directory and keeping just the file name.  For example, a file
-named `/usr/rms/emacs.tex' is displayed in a buffer named `emacs.tex'.
-If a buffer with that name exists, a unique name is constructed by
-appending `<2>', `<3>',and so on, using the lowest number that makes a
-name that is not already in use.
-
-   Each window's mode line shows the name of the buffer that is being
-displayed in that window, so you can always tell what buffer you are
-editing.
-
-   The changes you make with Emacs are made in the Emacs buffer.  They
-do not take effect in the file that you visit, or any other permanent
-place, until you "save" the buffer.  Saving the buffer means that Emacs
-writes the current contents of the buffer into its visited file.  *Note
-Saving::.
-
-   If a buffer contains changes that have not been saved, the buffer is
-said to be "modified".  This is important because it implies that some
-changes will be lost if the buffer is not saved.  The mode line displays
-two stars near the left margin if the buffer is modified.
-
-   To visit a file, use the command `C-x C-f' (`find-file').  Follow
-the command with the name of the file you wish to visit, terminated by a
-<RET>.  If you are using XEmacs under X, you can also use the Open...
-command from the File menu bar item.
-
-   The file name is read using the minibuffer (*note Minibuffer::.),
-with defaulting and completion in the standard manner (*note File
-Names::.).  While in the minibuffer, you can abort `C-x C-f' by typing
-`C-g'.
-
-   `C-x C-f' has completed successfully when text appears on the screen
-and a new buffer name appears in the mode line.  If the specified file
-does not exist and could not be created or cannot be read, an error
-results.  The error message is printed in the echo area, and includes
-the name of the file that Emacs was trying to visit.
-
-   If you visit a file that is already in Emacs, `C-x C-f' does not make
-another copy.  It selects the existing buffer containing that file.
-However, before doing so, it checks that the file itself has not changed
-since you visited or saved it last.  If the file has changed, Emacs
-prints a warning message.  *Note Simultaneous Editing: Interlocking.
-
-   You can switch to a specific file called out in the current buffer by
-calling the function `find-this-file'. By providing a prefix argument,
-this function calls `filename-at-point' and switches to a buffer
-visiting the file FILENAME. It creates one if none already exists. You
-can use this function to edit the file mentioned in the buffer you are
-working in or to test if the file exists. You can do that by using the
-minibuffer completion after snatching the all or part of the filename.
-
-   If the variable `find-file-use-truenames''s value is non-`nil', a
-buffer's visited filename will always be traced back to the real file.
-The filename will never be a symbolic link, and there will never be a
-symbolic link anywhere in its directory path. In other words, the
-`buffer-file-name' and `buffer-file-truename' will be equal.
-
-   If the variable `find-file-compare-truenames' value is non-`nil',
-the `find-file' command will check the `buffer-file-truename' of all
-visited files when deciding whether a given file is already in a
-buffer, instead of just `buffer-file-name'.  If you attempt to visit
-another file which is a hard-link or symbolic-link to a file that is
-already in a buffer, the existing buffer will be found instead of a
-newly created one.
-
-   If you want to create a file, just visit it.  Emacs prints `(New
-File)' in the echo area, but in other respects behaves as if you had
-visited an existing empty file.  If you make any changes and save them,
-the file is created.
-
-   If you visit a nonexistent file unintentionally (because you typed
-the wrong file name), use the `C-x C-v' (`find-alternate-file') command
-to visit the file you wanted.  `C-x C-v' is similar to `C-x C-f', but
-it kills the current buffer (after first offering to save it if it is
-modified).  `C-x C-v' is allowed even if the current buffer is not
-visiting a file.
-
-   If the file you specify is actually a directory, Dired is called on
-that directory (*note Dired::.).  To inhibit this, set the variable
-`find-file-run-dired' to `nil'; then it is an error to try to visit a
-directory.
-
-   `C-x 4 f' (`find-file-other-window') is like `C-x C-f' except that
-the buffer containing the specified file is selected in another window.
-The window that was selected before `C-x 4 f' continues to show the
-same buffer it was already showing.  If you use this command when only
-one window is being displayed, that window is split in two, with one
-window showing the same buffer as before, and the other one showing the
-newly requested file.  *Note Windows::.
-
-   `C-x 5 C-f' (`find-file-other-frame') is like `C-x C-f' except that
-it creates a new frame in which the file is displayed.
-
-   Use the function `find-this-file-other-window' to edit a file
-mentioned in the buffer you are editing or to test if that file exists.
-To do this, use the minibuffer completion after snatching the part or
-all of the filename. By providing a prefix argument, the function calls
-`filename-at-point' and switches you to a buffer visiting the file
-FILENAME in another window. The function creates a buffer if none
-already exists. This function is similar to `find-file-other-window'.
-
-   There are two hook variables that allow extensions to modify the
-operation of visiting files.  Visiting a file that does not exist runs
-the functions in the list `find-file-not-found-hooks'; the value of this
-variable is expected to be a list of functions which are called one by
-one until one of them returns non-`nil'.  Any visiting of a file,
-whether extant or not, expects `find-file-hooks' to contain list of
-functions and calls them all, one by one.  In both cases the functions
-receive no arguments.  Visiting a nonexistent file runs the
-`find-file-not-found-hooks' first.
-
-\1f
-File: xemacs.info,  Node: Saving,  Next: Reverting,  Prev: Visiting,  Up: Files
-
-Saving Files
-============
-
-   "Saving" a buffer in Emacs means writing its contents back into the
-file that was visited in the buffer.
-
-`C-x C-s'
-     Save the current buffer in its visited file (`save-buffer').
-
-`C-x s'
-     Save any or all buffers in their visited files
-     (`save-some-buffers').
-
-`M-~'
-     Forget that the current buffer has been changed (`not-modified').
-
-`C-x C-w'
-     Save the current buffer in a specified file, and record that file
-     as the one visited in the buffer (`write-file').
-
-`M-x set-visited-file-name'
-     Change file the name under which the current buffer will be saved.
-
-   To save a file and make your changes permanent, type `C-x C-s'
-(`save-buffer').  After saving is finished, `C-x C-s' prints a message
-such as:
-
-     Wrote /u/rms/gnu/gnu.tasks
-
-If the selected buffer is not modified (no changes have been made in it
-since the buffer was created or last saved), Emacs does not save it
-because it would have no effect.  Instead, `C-x C-s' prints a message
-in the echo area saying:
-
-     (No changes need to be saved)
-
-   The command `C-x s' (`save-some-buffers') can save any or all
-modified buffers.  First it asks, for each modified buffer, whether to
-save it.  The questions should be answered with `y' or `n'.  `C-x C-c',
-the key that kills Emacs, invokes `save-some-buffers' and therefore
-asks the same questions.
-
-   If you have changed a buffer and do not want the changes to be saved,
-you should take some action to prevent it.  Otherwise, you are liable to
-save it by mistake each time you use `save-some-buffers' or a related
-command.  One thing you can do is type `M-~' (`not-modified'), which
-removes the indication that the buffer is modified.  If you do this,
-none of the save commands will believe that the buffer needs to be
-saved.  (`~' is often used as a mathematical symbol for `not'; thus
-`Meta-~' is `not', metafied.)  You could also use
-`set-visited-file-name' (see below) to mark the buffer as visiting a
-different file name, not in use for anything important.
-
-   You can also undo all the changes made since the file was visited or
-saved, by reading the text from the file again.  This is called
-"reverting".  *Note Reverting::.  Alternatively, you can undo all the
-changes by repeating the undo command `C-x u'; but this only works if
-you have not made more changes than the undo mechanism can remember.
-
-   `M-x set-visited-file-name' alters the name of the file that the
-current buffer is visiting.  It prompts you for the new file name in the
-minibuffer.  You can also use `set-visited-file-name' on a buffer that
-is not visiting a file.  The buffer's name is changed to correspond to
-the file it is now visiting unless the new name is already used by a
-different buffer; in that case, the buffer name is not changed.
-`set-visited-file-name' does not save the buffer in the newly visited
-file; it just alters the records inside Emacs so that it will save the
-buffer in that file.  It also marks the buffer as "modified" so that
-`C-x C-s' will save.
-
-   If you wish to mark a buffer as visiting a different file and save it
-right away, use `C-x C-w' (`write-file').  It is precisely equivalent
-to `set-visited-file-name' followed by `C-x C-s'.  `C-x C-s' used on a
-buffer that is not visiting  a file has the same effect as `C-x C-w';
-that is, it reads a file name, marks the buffer as visiting that file,
-and saves it there.  The default file name in a buffer that is not
-visiting a file is made by combining the buffer name with the buffer's
-default directory.
-
-   If Emacs is about to save a file and sees that the date of the latest
-version on disk does not match what Emacs last read or wrote, Emacs
-notifies you of this fact, because it probably indicates a problem
-caused by simultaneous editing and requires your immediate attention.
-*Note Simultaneous Editing: Interlocking.
-
-   If the variable `require-final-newline' is non-`nil', Emacs puts a
-newline at the end of any file that doesn't already end in one, every
-time a file is saved or written.
-
-   Use the hook variable `write-file-hooks' to implement other ways to
-write files, and specify things to be done before files are written.
-The value of this variable should be a list of Lisp functions.  When a
-file is to be written, the functions in the list are called, one by
-one, with no arguments.  If one of them returns a non-`nil' value, Emacs
-takes this to mean that the file has been written in some suitable
-fashion; the rest of the functions are not called, and normal writing is
-not done. Use the hook variable `after-save-hook' to list all the
-functions to be called after writing out a buffer to a file.
-
-* Menu:
-
-* Backup::       How Emacs saves the old version of your file.
-* Interlocking:: How Emacs protects against simultaneous editing
-                  of one file by two users.
-
-\1f
-File: xemacs.info,  Node: Backup,  Next: Interlocking,  Prev: Saving,  Up: Saving
-
-Backup Files
-------------
-
-   Because Unix does not provide version numbers in file names,
-rewriting a file in Unix automatically destroys all record of what the
-file used to contain.  Thus, saving a file from Emacs throws away the
-old contents of the file--or it would, except that Emacs carefully
-copies the old contents to another file, called the "backup" file,
-before actually saving.  (Make sure that the variable
-`make-backup-files' is non-`nil'.  Backup files are not written if this
-variable is `nil').
-
-   At your option, Emacs can keep either a single backup file or a
-series of numbered backup files for each file you edit.
-
-   Emacs makes a backup for a file only the first time a file is saved
-from one buffer.  No matter how many times you save a file, its backup
-file continues to contain the contents from before the file was visited.
-Normally this means that the backup file contains the contents from
-before the current editing session; however, if you kill the buffer and
-then visit the file again, a new backup file is made by the next save.
-
-* Menu:
-
-* Names: Backup Names.         How backup files are named;
-                               Choosing single or numbered backup files.
-* Deletion: Backup Deletion.   Emacs deletes excess numbered backups.
-* Copying: Backup Copying.     Backups can be made by copying or renaming.
-
-\1f
-File: xemacs.info,  Node: Backup Names,  Next: Backup Deletion,  Prev: Backup,  Up: Backup
-
-Single or Numbered Backups
-..........................
-
-   If you choose to have a single backup file (the default), the backup
-file's name is constructed by appending `~' to the file name being
-edited; thus, the backup file for `eval.c' is `eval.c~'.
-
-   If you choose to have a series of numbered backup files, backup file
-names are made by appending `.~', the number, and another `~' to the
-original file name.  Thus, the backup files of `eval.c' would be called
-`eval.c.~1~', `eval.c.~2~', and so on, through names like
-`eval.c.~259~' and beyond.
-
-   If protection stops you from writing backup files under the usual
-names, the backup file is written as `%backup%~' in your home directory.
-Only one such file can exist, so only the most recently made backup is
-available.
-
-   The choice of single backup or numbered backups is controlled by the
-variable `version-control'.  Its possible values are:
-
-`t'
-     Make numbered backups.
-
-`nil'
-     Make numbered backups for files that have numbered backups already.
-     Otherwise, make single backups.
-
-`never'
-     Never make numbered backups; always make single backups.
-
-`version-control' may be set locally in an individual buffer to control
-the making of backups for that buffer's file.  For example, Rmail mode
-locally sets `version-control' to `never' to make sure that there is
-only one backup for an Rmail file.  *Note Locals::.
-
-\1f
-File: xemacs.info,  Node: Backup Deletion,  Next: Backup Copying,  Prev: Backup Names,  Up: Backup
-
-Automatic Deletion of Backups
-.............................
-
-   To prevent unlimited consumption of disk space, Emacs can delete
-numbered backup versions automatically.  Generally Emacs keeps the
-first few backups and the latest few backups, deleting any in between.
-This happens every time a new backup is made.  The two variables that
-control the deletion are `kept-old-versions' and `kept-new-versions'.
-Their values are, respectively the number of oldest (lowest-numbered)
-backups to keep and the number of newest (highest-numbered) ones to
-keep, each time a new backup is made.  The values are used just after a
-new backup version is made; that newly made backup is included in the
-count in `kept-new-versions'.  By default, both variables are 2.
-
-   If `trim-versions-without-asking' is non-`nil',  excess middle
-versions are deleted without notification.  If it is `nil', the
-default, you are asked whether the excess middle versions should really
-be deleted.
-
-   You can also use Dired's `.' (Period) command to delete old versions.
-*Note Dired::.
-
index b04611c..c6c017a 100644 (file)
@@ -30,6 +30,346 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Visiting,  Next: Saving,  Prev: File Names,  Up: Files
+
+Visiting Files
+==============
+
+`C-x C-f'
+     Visit a file (`find-file').
+
+`C-x C-v'
+     Visit a different file instead of the one visited last
+     (`find-alternate-file').
+
+`C-x 4 C-f'
+     Visit a file, in another window (`find-file-other-window').  Don't
+     change this window.
+
+`C-x 5 C-f'
+     Visit a file, in another frame (`find-file-other-frame').  Don't
+     change this window or frame.
+
+   "Visiting" a file means copying its contents into an Emacs buffer so
+you can edit it.  Emacs creates a new buffer for each file you visit.
+We say that the buffer is visiting the file that it was created to
+hold.  Emacs constructs the buffer name from the file name by throwing
+away the directory and keeping just the file name.  For example, a file
+named `/usr/rms/emacs.tex' is displayed in a buffer named `emacs.tex'.
+If a buffer with that name exists, a unique name is constructed by
+appending `<2>', `<3>',and so on, using the lowest number that makes a
+name that is not already in use.
+
+   Each window's mode line shows the name of the buffer that is being
+displayed in that window, so you can always tell what buffer you are
+editing.
+
+   The changes you make with Emacs are made in the Emacs buffer.  They
+do not take effect in the file that you visit, or any other permanent
+place, until you "save" the buffer.  Saving the buffer means that Emacs
+writes the current contents of the buffer into its visited file.  *Note
+Saving::.
+
+   If a buffer contains changes that have not been saved, the buffer is
+said to be "modified".  This is important because it implies that some
+changes will be lost if the buffer is not saved.  The mode line displays
+two stars near the left margin if the buffer is modified.
+
+   To visit a file, use the command `C-x C-f' (`find-file').  Follow
+the command with the name of the file you wish to visit, terminated by a
+<RET>.  If you are using XEmacs under X, you can also use the Open...
+command from the File menu bar item.
+
+   The file name is read using the minibuffer (*note Minibuffer::.),
+with defaulting and completion in the standard manner (*note File
+Names::.).  While in the minibuffer, you can abort `C-x C-f' by typing
+`C-g'.
+
+   `C-x C-f' has completed successfully when text appears on the screen
+and a new buffer name appears in the mode line.  If the specified file
+does not exist and could not be created or cannot be read, an error
+results.  The error message is printed in the echo area, and includes
+the name of the file that Emacs was trying to visit.
+
+   If you visit a file that is already in Emacs, `C-x C-f' does not make
+another copy.  It selects the existing buffer containing that file.
+However, before doing so, it checks that the file itself has not changed
+since you visited or saved it last.  If the file has changed, Emacs
+prints a warning message.  *Note Simultaneous Editing: Interlocking.
+
+   You can switch to a specific file called out in the current buffer by
+calling the function `find-this-file'. By providing a prefix argument,
+this function calls `filename-at-point' and switches to a buffer
+visiting the file FILENAME. It creates one if none already exists. You
+can use this function to edit the file mentioned in the buffer you are
+working in or to test if the file exists. You can do that by using the
+minibuffer completion after snatching the all or part of the filename.
+
+   If the variable `find-file-use-truenames''s value is non-`nil', a
+buffer's visited filename will always be traced back to the real file.
+The filename will never be a symbolic link, and there will never be a
+symbolic link anywhere in its directory path. In other words, the
+`buffer-file-name' and `buffer-file-truename' will be equal.
+
+   If the variable `find-file-compare-truenames' value is non-`nil',
+the `find-file' command will check the `buffer-file-truename' of all
+visited files when deciding whether a given file is already in a
+buffer, instead of just `buffer-file-name'.  If you attempt to visit
+another file which is a hard-link or symbolic-link to a file that is
+already in a buffer, the existing buffer will be found instead of a
+newly created one.
+
+   If you want to create a file, just visit it.  Emacs prints `(New
+File)' in the echo area, but in other respects behaves as if you had
+visited an existing empty file.  If you make any changes and save them,
+the file is created.
+
+   If you visit a nonexistent file unintentionally (because you typed
+the wrong file name), use the `C-x C-v' (`find-alternate-file') command
+to visit the file you wanted.  `C-x C-v' is similar to `C-x C-f', but
+it kills the current buffer (after first offering to save it if it is
+modified).  `C-x C-v' is allowed even if the current buffer is not
+visiting a file.
+
+   If the file you specify is actually a directory, Dired is called on
+that directory (*note Dired::.).  To inhibit this, set the variable
+`find-file-run-dired' to `nil'; then it is an error to try to visit a
+directory.
+
+   `C-x 4 f' (`find-file-other-window') is like `C-x C-f' except that
+the buffer containing the specified file is selected in another window.
+The window that was selected before `C-x 4 f' continues to show the
+same buffer it was already showing.  If you use this command when only
+one window is being displayed, that window is split in two, with one
+window showing the same buffer as before, and the other one showing the
+newly requested file.  *Note Windows::.
+
+   `C-x 5 C-f' (`find-file-other-frame') is like `C-x C-f' except that
+it creates a new frame in which the file is displayed.
+
+   Use the function `find-this-file-other-window' to edit a file
+mentioned in the buffer you are editing or to test if that file exists.
+To do this, use the minibuffer completion after snatching the part or
+all of the filename. By providing a prefix argument, the function calls
+`filename-at-point' and switches you to a buffer visiting the file
+FILENAME in another window. The function creates a buffer if none
+already exists. This function is similar to `find-file-other-window'.
+
+   There are two hook variables that allow extensions to modify the
+operation of visiting files.  Visiting a file that does not exist runs
+the functions in the list `find-file-not-found-hooks'; the value of this
+variable is expected to be a list of functions which are called one by
+one until one of them returns non-`nil'.  Any visiting of a file,
+whether extant or not, expects `find-file-hooks' to contain list of
+functions and calls them all, one by one.  In both cases the functions
+receive no arguments.  Visiting a nonexistent file runs the
+`find-file-not-found-hooks' first.
+
+\1f
+File: xemacs.info,  Node: Saving,  Next: Reverting,  Prev: Visiting,  Up: Files
+
+Saving Files
+============
+
+   "Saving" a buffer in Emacs means writing its contents back into the
+file that was visited in the buffer.
+
+`C-x C-s'
+     Save the current buffer in its visited file (`save-buffer').
+
+`C-x s'
+     Save any or all buffers in their visited files
+     (`save-some-buffers').
+
+`M-~'
+     Forget that the current buffer has been changed (`not-modified').
+
+`C-x C-w'
+     Save the current buffer in a specified file, and record that file
+     as the one visited in the buffer (`write-file').
+
+`M-x set-visited-file-name'
+     Change file the name under which the current buffer will be saved.
+
+   To save a file and make your changes permanent, type `C-x C-s'
+(`save-buffer').  After saving is finished, `C-x C-s' prints a message
+such as:
+
+     Wrote /u/rms/gnu/gnu.tasks
+
+If the selected buffer is not modified (no changes have been made in it
+since the buffer was created or last saved), Emacs does not save it
+because it would have no effect.  Instead, `C-x C-s' prints a message
+in the echo area saying:
+
+     (No changes need to be saved)
+
+   The command `C-x s' (`save-some-buffers') can save any or all
+modified buffers.  First it asks, for each modified buffer, whether to
+save it.  The questions should be answered with `y' or `n'.  `C-x C-c',
+the key that kills Emacs, invokes `save-some-buffers' and therefore
+asks the same questions.
+
+   If you have changed a buffer and do not want the changes to be saved,
+you should take some action to prevent it.  Otherwise, you are liable to
+save it by mistake each time you use `save-some-buffers' or a related
+command.  One thing you can do is type `M-~' (`not-modified'), which
+removes the indication that the buffer is modified.  If you do this,
+none of the save commands will believe that the buffer needs to be
+saved.  (`~' is often used as a mathematical symbol for `not'; thus
+`Meta-~' is `not', metafied.)  You could also use
+`set-visited-file-name' (see below) to mark the buffer as visiting a
+different file name, not in use for anything important.
+
+   You can also undo all the changes made since the file was visited or
+saved, by reading the text from the file again.  This is called
+"reverting".  *Note Reverting::.  Alternatively, you can undo all the
+changes by repeating the undo command `C-x u'; but this only works if
+you have not made more changes than the undo mechanism can remember.
+
+   `M-x set-visited-file-name' alters the name of the file that the
+current buffer is visiting.  It prompts you for the new file name in the
+minibuffer.  You can also use `set-visited-file-name' on a buffer that
+is not visiting a file.  The buffer's name is changed to correspond to
+the file it is now visiting unless the new name is already used by a
+different buffer; in that case, the buffer name is not changed.
+`set-visited-file-name' does not save the buffer in the newly visited
+file; it just alters the records inside Emacs so that it will save the
+buffer in that file.  It also marks the buffer as "modified" so that
+`C-x C-s' will save.
+
+   If you wish to mark a buffer as visiting a different file and save it
+right away, use `C-x C-w' (`write-file').  It is precisely equivalent
+to `set-visited-file-name' followed by `C-x C-s'.  `C-x C-s' used on a
+buffer that is not visiting  a file has the same effect as `C-x C-w';
+that is, it reads a file name, marks the buffer as visiting that file,
+and saves it there.  The default file name in a buffer that is not
+visiting a file is made by combining the buffer name with the buffer's
+default directory.
+
+   If Emacs is about to save a file and sees that the date of the latest
+version on disk does not match what Emacs last read or wrote, Emacs
+notifies you of this fact, because it probably indicates a problem
+caused by simultaneous editing and requires your immediate attention.
+*Note Simultaneous Editing: Interlocking.
+
+   If the variable `require-final-newline' is non-`nil', Emacs puts a
+newline at the end of any file that doesn't already end in one, every
+time a file is saved or written.
+
+   Use the hook variable `write-file-hooks' to implement other ways to
+write files, and specify things to be done before files are written.
+The value of this variable should be a list of Lisp functions.  When a
+file is to be written, the functions in the list are called, one by
+one, with no arguments.  If one of them returns a non-`nil' value, Emacs
+takes this to mean that the file has been written in some suitable
+fashion; the rest of the functions are not called, and normal writing is
+not done. Use the hook variable `after-save-hook' to list all the
+functions to be called after writing out a buffer to a file.
+
+* Menu:
+
+* Backup::       How Emacs saves the old version of your file.
+* Interlocking:: How Emacs protects against simultaneous editing
+                  of one file by two users.
+
+\1f
+File: xemacs.info,  Node: Backup,  Next: Interlocking,  Prev: Saving,  Up: Saving
+
+Backup Files
+------------
+
+   Because Unix does not provide version numbers in file names,
+rewriting a file in Unix automatically destroys all record of what the
+file used to contain.  Thus, saving a file from Emacs throws away the
+old contents of the file--or it would, except that Emacs carefully
+copies the old contents to another file, called the "backup" file,
+before actually saving.  (Make sure that the variable
+`make-backup-files' is non-`nil'.  Backup files are not written if this
+variable is `nil').
+
+   At your option, Emacs can keep either a single backup file or a
+series of numbered backup files for each file you edit.
+
+   Emacs makes a backup for a file only the first time a file is saved
+from one buffer.  No matter how many times you save a file, its backup
+file continues to contain the contents from before the file was visited.
+Normally this means that the backup file contains the contents from
+before the current editing session; however, if you kill the buffer and
+then visit the file again, a new backup file is made by the next save.
+
+* Menu:
+
+* Names: Backup Names.         How backup files are named;
+                               Choosing single or numbered backup files.
+* Deletion: Backup Deletion.   Emacs deletes excess numbered backups.
+* Copying: Backup Copying.     Backups can be made by copying or renaming.
+
+\1f
+File: xemacs.info,  Node: Backup Names,  Next: Backup Deletion,  Prev: Backup,  Up: Backup
+
+Single or Numbered Backups
+..........................
+
+   If you choose to have a single backup file (the default), the backup
+file's name is constructed by appending `~' to the file name being
+edited; thus, the backup file for `eval.c' is `eval.c~'.
+
+   If you choose to have a series of numbered backup files, backup file
+names are made by appending `.~', the number, and another `~' to the
+original file name.  Thus, the backup files of `eval.c' would be called
+`eval.c.~1~', `eval.c.~2~', and so on, through names like
+`eval.c.~259~' and beyond.
+
+   If protection stops you from writing backup files under the usual
+names, the backup file is written as `%backup%~' in your home directory.
+Only one such file can exist, so only the most recently made backup is
+available.
+
+   The choice of single backup or numbered backups is controlled by the
+variable `version-control'.  Its possible values are:
+
+`t'
+     Make numbered backups.
+
+`nil'
+     Make numbered backups for files that have numbered backups already.
+     Otherwise, make single backups.
+
+`never'
+     Never make numbered backups; always make single backups.
+
+`version-control' may be set locally in an individual buffer to control
+the making of backups for that buffer's file.  For example, Rmail mode
+locally sets `version-control' to `never' to make sure that there is
+only one backup for an Rmail file.  *Note Locals::.
+
+\1f
+File: xemacs.info,  Node: Backup Deletion,  Next: Backup Copying,  Prev: Backup Names,  Up: Backup
+
+Automatic Deletion of Backups
+.............................
+
+   To prevent unlimited consumption of disk space, Emacs can delete
+numbered backup versions automatically.  Generally Emacs keeps the
+first few backups and the latest few backups, deleting any in between.
+This happens every time a new backup is made.  The two variables that
+control the deletion are `kept-old-versions' and `kept-new-versions'.
+Their values are, respectively the number of oldest (lowest-numbered)
+backups to keep and the number of newest (highest-numbered) ones to
+keep, each time a new backup is made.  The values are used just after a
+new backup version is made; that newly made backup is included in the
+count in `kept-new-versions'.  By default, both variables are 2.
+
+   If `trim-versions-without-asking' is non-`nil',  excess middle
+versions are deleted without notification.  If it is `nil', the
+default, you are asked whether the excess middle versions should really
+be deleted.
+
+   You can also use Dired's `.' (Period) command to delete old versions.
+*Note Dired::.
+
+\1f
 File: xemacs.info,  Node: Backup Copying,  Prev: Backup Deletion,  Up: Backup
 
 Copying vs. Renaming
@@ -768,371 +1108,3 @@ that is ready for distribution to users.
 * Making Snapshots::           The snapshot facilities.
 * Snapshot Caveats::           Things to be careful of when using snapshots.
 
-\1f
-File: xemacs.info,  Node: Making Snapshots,  Next: Snapshot Caveats,  Prev: Snapshots,  Up: Snapshots
-
-Making and Using Snapshots
-..........................
-
-   There are two basic commands for snapshots; one makes a snapshot
-with a given name, the other retrieves a named snapshot.
-
-`C-x v s NAME <RET>'
-     Define the last saved versions of every registered file in or
-     under the current directory as a snapshot named NAME
-     (`vc-create-snapshot').
-
-`C-x v r NAME <RET>'
-     Check out all registered files at or below the current directory
-     level using whatever versions correspond to the snapshot NAME
-     (`vc-retrieve-snapshot').
-
-     This command reports an error if any files are locked at or below
-     the current directory, without changing anything; this is to avoid
-     overwriting work in progress.
-
-   A snapshot uses a very small amount of resources--just enough to
-record the list of file names and which version belongs to the
-snapshot.  Thus, you need not hesitate to create snapshots whenever
-they are useful.
-
-   You can give a snapshot name as an argument to `C-x v =' or `C-x v
-~' (*note Old Versions::.).  Thus, you can use it to compare a snapshot
-against the current files, or two snapshots against each other, or a
-snapshot against a named version.
-
-\1f
-File: xemacs.info,  Node: Snapshot Caveats,  Prev: Making Snapshots,  Up: Snapshots
-
-Snapshot Caveats
-................
-
-   VC's snapshot facilities are modeled on RCS's named-configuration
-support.  They use RCS's native facilities for this, so under VC
-snapshots made using RCS are visible even when you bypass VC.
-
-   For SCCS, VC implements snapshots itself.  The files it uses contain
-name/file/version-number triples.  These snapshots are visible only
-through VC.
-
-   A snapshot is a set of checked-in versions.  So make sure that all
-the files are checked in and not locked when you make a snapshot.
-
-   File renaming and deletion can create some difficulties with
-snapshots.  This is not a VC-specific problem, but a general design
-issue in version control systems that no one has solved very well yet.
-
-   If you rename a registered file, you need to rename its master along
-with it (the command `vc-rename-file' does this automatically).  If you
-are using SCCS, you must also update the records of the snapshot, to
-mention the file by its new name (`vc-rename-file' does this, too).  An
-old snapshot that refers to a master file that no longer exists under
-the recorded name is invalid; VC can no longer retrieve it.  It would
-be beyond the scope of this manual to explain enough about RCS and SCCS
-to explain how to update the snapshots by hand.
-
-   Using `vc-rename-file' makes the snapshot remain valid for
-retrieval, but it does not solve all problems.  For example, some of the
-files in the program probably refer to others by name.  At the very
-least, the makefile probably mentions the file that you renamed.  If you
-retrieve an old snapshot, the renamed file is retrieved under its new
-name, which is not the name that the makefile expects.  So the program
-won't really work as retrieved.
-
-\1f
-File: xemacs.info,  Node: Version Headers,  Prev: Snapshots,  Up: Version Control
-
-Inserting Version Control Headers
----------------------------------
-
-   Sometimes it is convenient to put version identification strings
-directly into working files.  Certain special strings called "version
-headers" are replaced in each successive version by the number of that
-version.
-
-   You can use the `C-x v h' command (`vc-insert-headers') to insert a
-suitable header string.
-
-`C-x v h'
-     Insert headers in a file for use with your version-control system.
-
-   The default header string is `\$Id\$' for RCS and `\%W\%' for SCCS.
-(The actual strings inserted do not have the backslashes in them.  They
-were placed in the Info source file so that the strings don't get
-interpreted as version-control headers when the Info source files are
-maintained under version control.) You can specify other headers to
-insert by setting the variable `vc-header-alist'.  Its value is a list
-of elements of the form `(PROGRAM . STRING)' where PROGRAM is `RCS' or
-`SCCS' and STRING is the string to use.
-
-   Instead of a single string, you can specify a list of strings; then
-each string in the list is inserted as a separate header on a line of
-its own.
-
-   It is often necessary to use "superfluous" backslashes when writing
-the strings that you put in this variable.  This is to prevent the
-string in the constant from being interpreted as a header itself if the
-Emacs Lisp file containing it is maintained with version control.
-
-   Each header is inserted surrounded by tabs, inside comment
-delimiters, on a new line at the start of the buffer.  Normally the
-ordinary comment start and comment end strings of the current mode are
-used, but for certain modes, there are special comment delimiters for
-this purpose; the variable `vc-comment-alist' specifies them.  Each
-element of this list has the form `(MODE STARTER ENDER)'.
-
-   The variable `vc-static-header-alist' specifies further strings to
-add based on the name of the buffer.  Its value should be a list of
-elements of the form `(REGEXP . FORMAT)'.  Whenever REGEXP matches the
-buffer name, FORMAT is inserted as part of the header.  A header line
-is inserted for each element that matches the buffer name, and for each
-string specified by `vc-header-alist'.  The header line is made by
-processing the string from `vc-header-alist' with the format taken from
-the element.  The default value for `vc-static-header-alist' is:
-
-     (("\\.c$" .
-       "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
-     #endif /* lint */\n"))
-
-which specifies insertion of a string of this form:
-
-
-     #ifndef lint
-     static char vcid[] = "STRING";
-     #endif /* lint */
-
-\1f
-File: xemacs.info,  Node: ListDir,  Next: Comparing Files,  Prev: Version Control,  Up: Files
-
-Listing a File Directory
-========================
-
-   Files are organized by Unix into "directories".  A "directory
-listing" is a list of all the files in a directory.  Emacs provides
-directory listings in brief format (file names only) and verbose format
-(sizes, dates, and authors included).
-
-`C-x C-d DIR-OR-PATTERN'
-     Print a brief directory listing (`list-directory').
-
-`C-u C-x C-d DIR-OR-PATTERN'
-     Print a verbose directory listing.
-
-   To print a directory listing, use `C-x C-d' (`list-directory').
-This command prompts in the minibuffer for a file name which is either
-a  directory to be listed or pattern containing wildcards for the files
-to be listed.  For example,
-
-     C-x C-d /u2/emacs/etc <RET>
-
-lists all the files in directory `/u2/emacs/etc'.  An example of
-specifying a file name pattern is:
-
-     C-x C-d /u2/emacs/src/*.c <RET>
-
-   Normally, `C-x C-d' prints a brief directory listing containing just
-file names.  A numeric argument (regardless of value) tells it to print
-a verbose listing (like `ls -l').
-
-   Emacs obtains the text of a directory listing by running `ls' in an
-inferior process.  Two Emacs variables control the switches passed to
-`ls': `list-directory-brief-switches' is a string giving the switches
-to use in brief listings (`"-CF"' by default).
-`list-directory-verbose-switches' is a string giving the switches to
-use in a verbose listing (`"-l"' by default).
-
-   The variable `directory-abbrev-alist' is an alist of abbreviations
-for file directories.  The list consists of elements of the form `(FROM
-.  TO)', each meaning to replace `FROM' with `TO' when it appears in a
-directory name.  This replacement is done when setting up the default
-directory of a newly visited file.  Every `FROM' string should start
-with ``^''.
-
-   Use this feature when you have directories which you normally refer
-to via absolute symbolic links.  Make `TO' the name of the link, and
-`FROM' the name it is linked to.
-
-\1f
-File: xemacs.info,  Node: Comparing Files,  Next: Dired,  Prev: ListDir,  Up: Files
-
-Comparing Files
-===============
-
-   The command `M-x diff' compares two files, displaying the
-differences in an Emacs buffer named `*Diff*'.  It works by running the
-`diff' program, using options taken from the variable `diff-switches',
-whose value should be a string.
-
-   The buffer `*Diff*' has Compilation mode as its major mode, so you
-can use `C-x `' to visit successive changed locations in the two source
-files.  You can also move to a particular hunk of changes and type `C-c
-C-c' to find the corresponding source location.  You can also use the
-other special commands of Compilation mode: <SPC> and <DEL> for
-scrolling, and `M-p' and `M-n' for cursor motion.  *Note Compilation::.
-
-   The command `M-x diff-backup' compares a specified file with its most
-recent backup.  If you specify the name of a backup file, `diff-backup'
-compares it with the source file that it is a backup of.
-
-   The command `M-x compare-windows' compares the text in the current
-window with that in the next window.  Comparison starts at point in each
-window.  Point moves forward in each window, a character at a time in
-each window, until the next characters in the two windows are
-different.  Then the command is finished.  For more information about
-windows in Emacs, *Note Windows::.
-
-   With a numeric argument, `compare-windows' ignores changes in
-whitespace.  If the variable `compare-ignore-case' is non-`nil', it
-ignores differences in case as well.
-
-\1f
-File: xemacs.info,  Node: Dired,  Next: Misc File Ops,  Prev: Comparing Files,  Up: Files
-
-Dired, the Directory Editor
-===========================
-
-   Dired makes it easy to delete or visit many of the files in a single
-directory at once.  It creates an Emacs buffer containing a listing of
-the directory.  You can use the normal Emacs commands to move around in
-this buffer and special Dired commands to operate on the files.
-
-* Menu:
-
-* Enter: Dired Enter.         How to invoke Dired.
-* Edit: Dired Edit.           Editing the Dired buffer.
-* Deletion: Dired Deletion.   Deleting files with Dired.
-* Immed: Dired Immed.         Other file operations through Dired.
-
-\1f
-File: xemacs.info,  Node: Dired Enter,  Next: Dired Edit,  Prev: Dired,  Up: Dired
-
-Entering Dired
---------------
-
-   To invoke dired, type `C-x d' or `M-x dired'.  The command reads a
-directory name or wildcard file name pattern as a minibuffer argument
-just like the `list-directory' command, `C-x C-d'.  Where `dired'
-differs from `list-directory' is in naming the buffer after the
-directory name or the wildcard pattern used for the listing, and putting
-the buffer into Dired mode so that the special commands of Dired are
-available in it.  The variable `dired-listing-switches' is a string
-used as an argument to `ls' in making the directory; this string must
-contain `-l'.
-
-   To display the Dired buffer in another window rather than in the
-selected window, use `C-x 4 d' (`dired-other-window)' instead of `C-x
-d'.
-
-\1f
-File: xemacs.info,  Node: Dired Edit,  Next: Dired Deletion,  Prev: Dired Enter,  Up: Dired
-
-Editing in Dired
-----------------
-
-   Once the Dired buffer exists, you can switch freely between it and
-other Emacs buffers.  Whenever the Dired buffer is selected, certain
-special commands are provided that operate on files that are listed.
-The Dired buffer is "read-only", and inserting text in it is not
-useful, so ordinary printing characters such as `d' and `x' are used
-for Dired commands.  Most Dired commands operate on the file described
-by the line that point is on.  Some commands perform operations
-immediately; others "flag" a file to be operated on later.
-
-   Most Dired commands that operate on the current line's file also
-treat a numeric argument as a repeat count, meaning to act on the files
-of the next few lines.  A negative argument means to operate on the
-files of the preceding lines, and leave point on the first of those
-lines.
-
-   All the usual Emacs cursor motion commands are available in Dired
-buffers.  Some special purpose commands are also provided.  The keys
-`C-n' and `C-p' are redefined so that they try to position the cursor
-at the beginning of the filename on the line, rather than at the
-beginning of the line.
-
-   For extra convenience, <SPC> and `n' in Dired are equivalent to
-`C-n'.  `p' is equivalent to `C-p'.  Moving by lines is done so often
-in Dired that it deserves to be easy to type.  <DEL> (move up and
-unflag) is often useful simply for moving up.
-
-   The `g' command in Dired runs `revert-buffer' to reinitialize the
-buffer from the actual disk directory and show any changes made in the
-directory by programs other than Dired.  All deletion flags in the Dired
-buffer are lost when this is done.
-
-\1f
-File: xemacs.info,  Node: Dired Deletion,  Next: Dired Immed,  Prev: Dired Edit,  Up: Dired
-
-Deleting Files With Dired
--------------------------
-
-   The primary use of Dired is to flag files for deletion and then
-delete them.
-
-`d'
-     Flag this file for deletion.
-
-`u'
-     Remove deletion-flag on this line.
-
-`<DEL>'
-     Remove deletion-flag on previous line, moving point to that line.
-
-`x'
-     Delete the files that are flagged for deletion.
-
-`#'
-     Flag all auto-save files (files whose names start and end with `#')
-     for deletion (*note Auto Save::.).
-
-`~'
-     Flag all backup files (files whose names end with `~') for deletion
-     (*note Backup::.).
-
-`. (Period)'
-     Flag excess numeric backup files for deletion.  The oldest and
-     newest few backup files of any one file are exempt; the middle
-     ones are flagged.
-
-   You can flag a file for deletion by moving to the line describing the
-file and typing `d' or `C-d'.  The deletion flag is visible as a `D' at
-the beginning of the line.  Point is moved to the beginning of the next
-line, so that repeated `d' commands flag successive files.
-
-   The files are flagged for deletion rather than deleted immediately to
-avoid the danger of deleting a file accidentally.  Until you direct
-Dired to delete the flagged files, you can remove deletion flags using
-the commands `u' and <DEL>.  `u' works just like `d', but removes flags
-rather than making flags.  <DEL> moves upward, removing flags; it is
-like `u' with numeric argument automatically negated.
-
-   To delete the flagged files, type `x'.  This command first displays a
-list of all the file names flagged for deletion, and requests
-confirmation with `yes'.  Once you confirm, all the flagged files are
-deleted, and their lines are deleted from the text of the Dired buffer.
-The shortened Dired buffer remains selected.  If you answer `no' or
-quit with `C-g', you return immediately to Dired, with the deletion
-flags still present and no files actually deleted.
-
-   The `#', `~', and `.' commands flag many files for deletion, based
-on their names.  These commands are useful precisely because they do
-not actually delete any files; you can remove the deletion flags from
-any flagged files that you really wish to keep.
-
-   `#' flags for deletion all files that appear to have been made by
-auto-saving (that is, files whose names begin and end with `#').  `~'
-flags for deletion all files that appear to have been made as backups
-for files that were edited (that is, files whose names end with `~').
-
-   `.' (Period) flags just some of the backup files for deletion: only
-numeric backups that are not among the oldest few nor the newest few
-backups of any one file.  Normally `dired-kept-versions' (not
-`kept-new-versions'; that applies only when saving) specifies the
-number of newest versions of each file to keep, and `kept-old-versions'
-specifies the number of oldest versions to keep.  Period with a
-positive numeric argument, as in `C-u 3 .', specifies the number of
-newest versions to keep, overriding `dired-kept-versions'.  A negative
-numeric argument overrides `kept-old-versions', using minus the value
-of the argument to specify the number of oldest versions of each file
-to keep.
-
index 55cfa43..d0c6fcf 100644 (file)
@@ -30,6 +30,374 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Making Snapshots,  Next: Snapshot Caveats,  Prev: Snapshots,  Up: Snapshots
+
+Making and Using Snapshots
+..........................
+
+   There are two basic commands for snapshots; one makes a snapshot
+with a given name, the other retrieves a named snapshot.
+
+`C-x v s NAME <RET>'
+     Define the last saved versions of every registered file in or
+     under the current directory as a snapshot named NAME
+     (`vc-create-snapshot').
+
+`C-x v r NAME <RET>'
+     Check out all registered files at or below the current directory
+     level using whatever versions correspond to the snapshot NAME
+     (`vc-retrieve-snapshot').
+
+     This command reports an error if any files are locked at or below
+     the current directory, without changing anything; this is to avoid
+     overwriting work in progress.
+
+   A snapshot uses a very small amount of resources--just enough to
+record the list of file names and which version belongs to the
+snapshot.  Thus, you need not hesitate to create snapshots whenever
+they are useful.
+
+   You can give a snapshot name as an argument to `C-x v =' or `C-x v
+~' (*note Old Versions::.).  Thus, you can use it to compare a snapshot
+against the current files, or two snapshots against each other, or a
+snapshot against a named version.
+
+\1f
+File: xemacs.info,  Node: Snapshot Caveats,  Prev: Making Snapshots,  Up: Snapshots
+
+Snapshot Caveats
+................
+
+   VC's snapshot facilities are modeled on RCS's named-configuration
+support.  They use RCS's native facilities for this, so under VC
+snapshots made using RCS are visible even when you bypass VC.
+
+   For SCCS, VC implements snapshots itself.  The files it uses contain
+name/file/version-number triples.  These snapshots are visible only
+through VC.
+
+   A snapshot is a set of checked-in versions.  So make sure that all
+the files are checked in and not locked when you make a snapshot.
+
+   File renaming and deletion can create some difficulties with
+snapshots.  This is not a VC-specific problem, but a general design
+issue in version control systems that no one has solved very well yet.
+
+   If you rename a registered file, you need to rename its master along
+with it (the command `vc-rename-file' does this automatically).  If you
+are using SCCS, you must also update the records of the snapshot, to
+mention the file by its new name (`vc-rename-file' does this, too).  An
+old snapshot that refers to a master file that no longer exists under
+the recorded name is invalid; VC can no longer retrieve it.  It would
+be beyond the scope of this manual to explain enough about RCS and SCCS
+to explain how to update the snapshots by hand.
+
+   Using `vc-rename-file' makes the snapshot remain valid for
+retrieval, but it does not solve all problems.  For example, some of the
+files in the program probably refer to others by name.  At the very
+least, the makefile probably mentions the file that you renamed.  If you
+retrieve an old snapshot, the renamed file is retrieved under its new
+name, which is not the name that the makefile expects.  So the program
+won't really work as retrieved.
+
+\1f
+File: xemacs.info,  Node: Version Headers,  Prev: Snapshots,  Up: Version Control
+
+Inserting Version Control Headers
+---------------------------------
+
+   Sometimes it is convenient to put version identification strings
+directly into working files.  Certain special strings called "version
+headers" are replaced in each successive version by the number of that
+version.
+
+   You can use the `C-x v h' command (`vc-insert-headers') to insert a
+suitable header string.
+
+`C-x v h'
+     Insert headers in a file for use with your version-control system.
+
+   The default header string is `\$Id\$' for RCS and `\%W\%' for SCCS.
+(The actual strings inserted do not have the backslashes in them.  They
+were placed in the Info source file so that the strings don't get
+interpreted as version-control headers when the Info source files are
+maintained under version control.) You can specify other headers to
+insert by setting the variable `vc-header-alist'.  Its value is a list
+of elements of the form `(PROGRAM . STRING)' where PROGRAM is `RCS' or
+`SCCS' and STRING is the string to use.
+
+   Instead of a single string, you can specify a list of strings; then
+each string in the list is inserted as a separate header on a line of
+its own.
+
+   It is often necessary to use "superfluous" backslashes when writing
+the strings that you put in this variable.  This is to prevent the
+string in the constant from being interpreted as a header itself if the
+Emacs Lisp file containing it is maintained with version control.
+
+   Each header is inserted surrounded by tabs, inside comment
+delimiters, on a new line at the start of the buffer.  Normally the
+ordinary comment start and comment end strings of the current mode are
+used, but for certain modes, there are special comment delimiters for
+this purpose; the variable `vc-comment-alist' specifies them.  Each
+element of this list has the form `(MODE STARTER ENDER)'.
+
+   The variable `vc-static-header-alist' specifies further strings to
+add based on the name of the buffer.  Its value should be a list of
+elements of the form `(REGEXP . FORMAT)'.  Whenever REGEXP matches the
+buffer name, FORMAT is inserted as part of the header.  A header line
+is inserted for each element that matches the buffer name, and for each
+string specified by `vc-header-alist'.  The header line is made by
+processing the string from `vc-header-alist' with the format taken from
+the element.  The default value for `vc-static-header-alist' is:
+
+     (("\\.c$" .
+       "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
+     #endif /* lint */\n"))
+
+which specifies insertion of a string of this form:
+
+
+     #ifndef lint
+     static char vcid[] = "STRING";
+     #endif /* lint */
+
+\1f
+File: xemacs.info,  Node: ListDir,  Next: Comparing Files,  Prev: Version Control,  Up: Files
+
+Listing a File Directory
+========================
+
+   Files are organized by Unix into "directories".  A "directory
+listing" is a list of all the files in a directory.  Emacs provides
+directory listings in brief format (file names only) and verbose format
+(sizes, dates, and authors included).
+
+`C-x C-d DIR-OR-PATTERN'
+     Print a brief directory listing (`list-directory').
+
+`C-u C-x C-d DIR-OR-PATTERN'
+     Print a verbose directory listing.
+
+   To print a directory listing, use `C-x C-d' (`list-directory').
+This command prompts in the minibuffer for a file name which is either
+a  directory to be listed or pattern containing wildcards for the files
+to be listed.  For example,
+
+     C-x C-d /u2/emacs/etc <RET>
+
+lists all the files in directory `/u2/emacs/etc'.  An example of
+specifying a file name pattern is:
+
+     C-x C-d /u2/emacs/src/*.c <RET>
+
+   Normally, `C-x C-d' prints a brief directory listing containing just
+file names.  A numeric argument (regardless of value) tells it to print
+a verbose listing (like `ls -l').
+
+   Emacs obtains the text of a directory listing by running `ls' in an
+inferior process.  Two Emacs variables control the switches passed to
+`ls': `list-directory-brief-switches' is a string giving the switches
+to use in brief listings (`"-CF"' by default).
+`list-directory-verbose-switches' is a string giving the switches to
+use in a verbose listing (`"-l"' by default).
+
+   The variable `directory-abbrev-alist' is an alist of abbreviations
+for file directories.  The list consists of elements of the form `(FROM
+.  TO)', each meaning to replace `FROM' with `TO' when it appears in a
+directory name.  This replacement is done when setting up the default
+directory of a newly visited file.  Every `FROM' string should start
+with ``^''.
+
+   Use this feature when you have directories which you normally refer
+to via absolute symbolic links.  Make `TO' the name of the link, and
+`FROM' the name it is linked to.
+
+\1f
+File: xemacs.info,  Node: Comparing Files,  Next: Dired,  Prev: ListDir,  Up: Files
+
+Comparing Files
+===============
+
+   The command `M-x diff' compares two files, displaying the
+differences in an Emacs buffer named `*Diff*'.  It works by running the
+`diff' program, using options taken from the variable `diff-switches',
+whose value should be a string.
+
+   The buffer `*Diff*' has Compilation mode as its major mode, so you
+can use `C-x `' to visit successive changed locations in the two source
+files.  You can also move to a particular hunk of changes and type `C-c
+C-c' to find the corresponding source location.  You can also use the
+other special commands of Compilation mode: <SPC> and <DEL> for
+scrolling, and `M-p' and `M-n' for cursor motion.  *Note Compilation::.
+
+   The command `M-x diff-backup' compares a specified file with its most
+recent backup.  If you specify the name of a backup file, `diff-backup'
+compares it with the source file that it is a backup of.
+
+   The command `M-x compare-windows' compares the text in the current
+window with that in the next window.  Comparison starts at point in each
+window.  Point moves forward in each window, a character at a time in
+each window, until the next characters in the two windows are
+different.  Then the command is finished.  For more information about
+windows in Emacs, *Note Windows::.
+
+   With a numeric argument, `compare-windows' ignores changes in
+whitespace.  If the variable `compare-ignore-case' is non-`nil', it
+ignores differences in case as well.
+
+\1f
+File: xemacs.info,  Node: Dired,  Next: Misc File Ops,  Prev: Comparing Files,  Up: Files
+
+Dired, the Directory Editor
+===========================
+
+   Dired makes it easy to delete or visit many of the files in a single
+directory at once.  It creates an Emacs buffer containing a listing of
+the directory.  You can use the normal Emacs commands to move around in
+this buffer and special Dired commands to operate on the files.
+
+* Menu:
+
+* Enter: Dired Enter.         How to invoke Dired.
+* Edit: Dired Edit.           Editing the Dired buffer.
+* Deletion: Dired Deletion.   Deleting files with Dired.
+* Immed: Dired Immed.         Other file operations through Dired.
+
+\1f
+File: xemacs.info,  Node: Dired Enter,  Next: Dired Edit,  Prev: Dired,  Up: Dired
+
+Entering Dired
+--------------
+
+   To invoke dired, type `C-x d' or `M-x dired'.  The command reads a
+directory name or wildcard file name pattern as a minibuffer argument
+just like the `list-directory' command, `C-x C-d'.  Where `dired'
+differs from `list-directory' is in naming the buffer after the
+directory name or the wildcard pattern used for the listing, and putting
+the buffer into Dired mode so that the special commands of Dired are
+available in it.  The variable `dired-listing-switches' is a string
+used as an argument to `ls' in making the directory; this string must
+contain `-l'.
+
+   To display the Dired buffer in another window rather than in the
+selected window, use `C-x 4 d' (`dired-other-window)' instead of `C-x
+d'.
+
+\1f
+File: xemacs.info,  Node: Dired Edit,  Next: Dired Deletion,  Prev: Dired Enter,  Up: Dired
+
+Editing in Dired
+----------------
+
+   Once the Dired buffer exists, you can switch freely between it and
+other Emacs buffers.  Whenever the Dired buffer is selected, certain
+special commands are provided that operate on files that are listed.
+The Dired buffer is "read-only", and inserting text in it is not
+useful, so ordinary printing characters such as `d' and `x' are used
+for Dired commands.  Most Dired commands operate on the file described
+by the line that point is on.  Some commands perform operations
+immediately; others "flag" a file to be operated on later.
+
+   Most Dired commands that operate on the current line's file also
+treat a numeric argument as a repeat count, meaning to act on the files
+of the next few lines.  A negative argument means to operate on the
+files of the preceding lines, and leave point on the first of those
+lines.
+
+   All the usual Emacs cursor motion commands are available in Dired
+buffers.  Some special purpose commands are also provided.  The keys
+`C-n' and `C-p' are redefined so that they try to position the cursor
+at the beginning of the filename on the line, rather than at the
+beginning of the line.
+
+   For extra convenience, <SPC> and `n' in Dired are equivalent to
+`C-n'.  `p' is equivalent to `C-p'.  Moving by lines is done so often
+in Dired that it deserves to be easy to type.  <DEL> (move up and
+unflag) is often useful simply for moving up.
+
+   The `g' command in Dired runs `revert-buffer' to reinitialize the
+buffer from the actual disk directory and show any changes made in the
+directory by programs other than Dired.  All deletion flags in the Dired
+buffer are lost when this is done.
+
+\1f
+File: xemacs.info,  Node: Dired Deletion,  Next: Dired Immed,  Prev: Dired Edit,  Up: Dired
+
+Deleting Files With Dired
+-------------------------
+
+   The primary use of Dired is to flag files for deletion and then
+delete them.
+
+`d'
+     Flag this file for deletion.
+
+`u'
+     Remove deletion-flag on this line.
+
+`<DEL>'
+     Remove deletion-flag on previous line, moving point to that line.
+
+`x'
+     Delete the files that are flagged for deletion.
+
+`#'
+     Flag all auto-save files (files whose names start and end with `#')
+     for deletion (*note Auto Save::.).
+
+`~'
+     Flag all backup files (files whose names end with `~') for deletion
+     (*note Backup::.).
+
+`. (Period)'
+     Flag excess numeric backup files for deletion.  The oldest and
+     newest few backup files of any one file are exempt; the middle
+     ones are flagged.
+
+   You can flag a file for deletion by moving to the line describing the
+file and typing `d' or `C-d'.  The deletion flag is visible as a `D' at
+the beginning of the line.  Point is moved to the beginning of the next
+line, so that repeated `d' commands flag successive files.
+
+   The files are flagged for deletion rather than deleted immediately to
+avoid the danger of deleting a file accidentally.  Until you direct
+Dired to delete the flagged files, you can remove deletion flags using
+the commands `u' and <DEL>.  `u' works just like `d', but removes flags
+rather than making flags.  <DEL> moves upward, removing flags; it is
+like `u' with numeric argument automatically negated.
+
+   To delete the flagged files, type `x'.  This command first displays a
+list of all the file names flagged for deletion, and requests
+confirmation with `yes'.  Once you confirm, all the flagged files are
+deleted, and their lines are deleted from the text of the Dired buffer.
+The shortened Dired buffer remains selected.  If you answer `no' or
+quit with `C-g', you return immediately to Dired, with the deletion
+flags still present and no files actually deleted.
+
+   The `#', `~', and `.' commands flag many files for deletion, based
+on their names.  These commands are useful precisely because they do
+not actually delete any files; you can remove the deletion flags from
+any flagged files that you really wish to keep.
+
+   `#' flags for deletion all files that appear to have been made by
+auto-saving (that is, files whose names begin and end with `#').  `~'
+flags for deletion all files that appear to have been made as backups
+for files that were edited (that is, files whose names end with `~').
+
+   `.' (Period) flags just some of the backup files for deletion: only
+numeric backups that are not among the oldest few nor the newest few
+backups of any one file.  Normally `dired-kept-versions' (not
+`kept-new-versions'; that applies only when saving) specifies the
+number of newest versions of each file to keep, and `kept-old-versions'
+specifies the number of oldest versions to keep.  Period with a
+positive numeric argument, as in `C-u 3 .', specifies the number of
+newest versions to keep, overriding `dired-kept-versions'.  A negative
+numeric argument overrides `kept-old-versions', using minus the value
+of the argument to specify the number of oldest versions of each file
+to keep.
+
+\1f
 File: xemacs.info,  Node: Dired Immed,  Prev: Dired Deletion,  Up: Dired
 
 Immediate File Operations in Dired
@@ -784,285 +1152,3 @@ coding systems, and input methods that go with it.  It also shows some
 sample text to illustrate scripts used in this language environment.
 By default, this command describes the chosen language environment.
 
-\1f
-File: xemacs.info,  Node: Input Methods,  Next: Select Input Method,  Prev: Language Environments,  Up: Mule
-
-Input Methods
-=============
-
-   An "input method" is a kind of character conversion designed
-specifically for interactive input.  In XEmacs, typically each language
-has its own input method; sometimes several languages which use the same
-characters can share one input method.  A few languages support several
-input methods.
-
-   The simplest kind of input method works by mapping ASCII letters into
-another alphabet.  This is how the Greek and Russian input methods work.
-
-   A more powerful technique is composition: converting sequences of
-characters into one letter.  Many European input methods use composition
-to produce a single non-ASCII letter from a sequence that consists of a
-letter followed by accent characters.  For example, some methods convert
-the sequence `'a' into a single accented letter.
-
-   The input methods for syllabic scripts typically use mapping followed
-by composition.  The input methods for Thai and Korean work this way.
-First, letters are mapped into symbols for particular sounds or tone
-marks; then, sequences of these which make up a whole syllable are
-mapped into one syllable sign.
-
-   Chinese and Japanese require more complex methods.  In Chinese input
-methods, first you enter the phonetic spelling of a Chinese word (in
-input method `chinese-py', among others), or a sequence of portions of
-the character (input methods `chinese-4corner' and `chinese-sw', and
-others).  Since one phonetic spelling typically corresponds to many
-different Chinese characters, you must select one of the alternatives
-using special XEmacs commands.  Keys such as `C-f', `C-b', `C-n',
-`C-p', and digits have special definitions in this situation, used for
-selecting among the alternatives.  <TAB> displays a buffer showing all
-the possibilities.
-
-   In Japanese input methods, first you input a whole word using
-phonetic spelling; then, after the word is in the buffer, XEmacs
-converts it into one or more characters using a large dictionary.  One
-phonetic spelling corresponds to many differently written Japanese
-words, so you must select one of them; use `C-n' and `C-p' to cycle
-through the alternatives.
-
-   Sometimes it is useful to cut off input method processing so that the
-characters you have just entered will not combine with subsequent
-characters.  For example, in input method `latin-1-postfix', the
-sequence `e '' combines to form an `e' with an accent.  What if you
-want to enter them as separate characters?
-
-   One way is to type the accent twice; that is a special feature for
-entering the separate letter and accent.  For example, `e ' '' gives
-you the two characters `e''.  Another way is to type another letter
-after the `e'--something that won't combine with that--and immediately
-delete it.  For example, you could type `e e <DEL> '' to get separate
-`e' and `''.
-
-   Another method, more general but not quite as easy to type, is to use
-`C-\ C-\' between two characters to stop them from combining.  This is
-the command `C-\' (`toggle-input-method') used twice.  *Note Select
-Input Method::.
-
-   `C-\ C-\' is especially useful inside an incremental search, because
-stops waiting for more characters to combine, and starts searching for
-what you have already entered.
-
-   The variables `input-method-highlight-flag' and
-`input-method-verbose-flag' control how input methods explain what is
-happening.  If `input-method-highlight-flag' is non-`nil', the partial
-sequence is highlighted in the buffer.  If `input-method-verbose-flag'
-is non-`nil', the list of possible characters to type next is displayed
-in the echo area (but not when you are in the minibuffer).
-
-\1f
-File: xemacs.info,  Node: Select Input Method,  Next: Coding Systems,  Prev: Input Methods,  Up: Mule
-
-Selecting an Input Method
-=========================
-
-`C-\'
-     Enable or disable use of the selected input method.
-
-`C-x <RET> C-\ METHOD <RET>'
-     Select a new input method for the current buffer.
-
-`C-h I METHOD <RET>'
-`C-h C-\ METHOD <RET>'
-     Describe the input method METHOD (`describe-input-method').  By
-     default, it describes the current input method (if any).
-
-`M-x list-input-methods'
-     Display a list of all the supported input methods.
-
-   To choose an input method for the current buffer, use `C-x <RET>
-C-\' (`select-input-method').  This command reads the input method name
-with the minibuffer; the name normally starts with the language
-environment that it is meant to be used with.  The variable
-`current-input-method' records which input method is selected.
-
-   Input methods use various sequences of ASCII characters to stand for
-non-ASCII characters.  Sometimes it is useful to turn off the input
-method temporarily.  To do this, type `C-\' (`toggle-input-method').
-To reenable the input method, type `C-\' again.
-
-   If you type `C-\' and you have not yet selected an input method, it
-prompts for you to specify one.  This has the same effect as using `C-x
-<RET> C-\' to specify an input method.
-
-   Selecting a language environment specifies a default input method for
-use in various buffers.  When you have a default input method, you can
-select it in the current buffer by typing `C-\'.  The variable
-`default-input-method' specifies the default input method (`nil' means
-there is none).
-
-   Some input methods for alphabetic scripts work by (in effect)
-remapping the keyboard to emulate various keyboard layouts commonly used
-for those scripts.  How to do this remapping properly depends on your
-actual keyboard layout.  To specify which layout your keyboard has, use
-the command `M-x quail-set-keyboard-layout'.
-
-   To display a list of all the supported input methods, type `M-x
-list-input-methods'.  The list gives information about each input
-method, including the string that stands for it in the mode line.
-
-\1f
-File: xemacs.info,  Node: Coding Systems,  Next: Recognize Coding,  Prev: Select Input Method,  Up: Mule
-
-Coding Systems
-==============
-
-   Users of various languages have established many more-or-less
-standard coding systems for representing them.  XEmacs does not use
-these coding systems internally; instead, it converts from various
-coding systems to its own system when reading data, and converts the
-internal coding system to other coding systems when writing data.
-Conversion is possible in reading or writing files, in sending or
-receiving from the terminal, and in exchanging data with subprocesses.
-
-   XEmacs assigns a name to each coding system.  Most coding systems are
-used for one language, and the name of the coding system starts with the
-language name.  Some coding systems are used for several languages;
-their names usually start with `iso'.  There are also special coding
-systems `binary' and `no-conversion' which do not convert printing
-characters at all.
-
-   In addition to converting various representations of non-ASCII
-characters, a coding system can perform end-of-line conversion.  XEmacs
-handles three different conventions for how to separate lines in a file:
-newline, carriage-return linefeed, and just carriage-return.
-
-`C-h C CODING <RET>'
-     Describe coding system CODING.
-
-`C-h C <RET>'
-     Describe the coding systems currently in use.
-
-`M-x list-coding-systems'
-     Display a list of all the supported coding systems.
-
-   The command `C-h C' (`describe-coding-system') displays information
-about particular coding systems.  You can specify a coding system name
-as argument; alternatively, with an empty argument, it describes the
-coding systems currently selected for various purposes, both in the
-current buffer and as the defaults, and the priority list for
-recognizing coding systems (*note Recognize Coding::.).
-
-   To display a list of all the supported coding systems, type `M-x
-list-coding-systems'.  The list gives information about each coding
-system, including the letter that stands for it in the mode line (*note
-Mode Line::.).
-
-   Each of the coding systems that appear in this list--except for
-`binary', which means no conversion of any kind--specifies how and
-whether to convert printing characters, but leaves the choice of
-end-of-line conversion to be decided based on the contents of each file.
-For example, if the file appears to use carriage-return linefeed between
-lines, that end-of-line conversion will be used.
-
-   Each of the listed coding systems has three variants which specify
-exactly what to do for end-of-line conversion:
-
-`...-unix'
-     Don't do any end-of-line conversion; assume the file uses newline
-     to separate lines.  (This is the convention normally used on Unix
-     and GNU systems.)
-
-`...-dos'
-     Assume the file uses carriage-return linefeed to separate lines,
-     and do the appropriate conversion.  (This is the convention
-     normally used on Microsoft systems.)
-
-`...-mac'
-     Assume the file uses carriage-return to separate lines, and do the
-     appropriate conversion.  (This is the convention normally used on
-     the Macintosh system.)
-
-   These variant coding systems are omitted from the
-`list-coding-systems' display for brevity, since they are entirely
-predictable.  For example, the coding system `iso-8859-1' has variants
-`iso-8859-1-unix', `iso-8859-1-dos' and `iso-8859-1-mac'.
-
-   In contrast, the coding system `binary' specifies no character code
-conversion at all--none for non-Latin-1 byte values and none for end of
-line.  This is useful for reading or writing binary files, tar files,
-and other files that must be examined verbatim.
-
-   The easiest way to edit a file with no conversion of any kind is with
-the `M-x find-file-literally' command.  This uses `binary', and also
-suppresses other XEmacs features that might convert the file contents
-before you see them.  *Note Visiting::.
-
-   The coding system `no-conversion' means that the file contains
-non-Latin-1 characters stored with the internal XEmacs encoding.  It
-handles end-of-line conversion based on the data encountered, and has
-the usual three variants to specify the kind of end-of-line conversion.
-
-\1f
-File: xemacs.info,  Node: Recognize Coding,  Next: Specify Coding,  Prev: Coding Systems,  Up: Mule
-
-Recognizing Coding Systems
-==========================
-
-   Most of the time, XEmacs can recognize which coding system to use for
-any given file-once you have specified your preferences.
-
-   Some coding systems can be recognized or distinguished by which byte
-sequences appear in the data.  However, there are coding systems that
-cannot be distinguished, not even potentially.  For example, there is no
-way to distinguish between Latin-1 and Latin-2; they use the same byte
-values with different meanings.
-
-   XEmacs handles this situation by means of a priority list of coding
-systems.  Whenever XEmacs reads a file, if you do not specify the coding
-system to use, XEmacs checks the data against each coding system,
-starting with the first in priority and working down the list, until it
-finds a coding system that fits the data.  Then it converts the file
-contents assuming that they are represented in this coding system.
-
-   The priority list of coding systems depends on the selected language
-environment (*note Language Environments::.).  For example, if you use
-French, you probably want XEmacs to prefer Latin-1 to Latin-2; if you
-use Czech, you probably want Latin-2 to be preferred.  This is one of
-the reasons to specify a language environment.
-
-   However, you can alter the priority list in detail with the command
-`M-x prefer-coding-system'.  This command reads the name of a coding
-system from the minibuffer, and adds it to the front of the priority
-list, so that it is preferred to all others.  If you use this command
-several times, each use adds one element to the front of the priority
-list.
-
-   Sometimes a file name indicates which coding system to use for the
-file.  The variable `file-coding-system-alist' specifies this
-correspondence.  There is a special function
-`modify-coding-system-alist' for adding elements to this list.  For
-example, to read and write all `.txt' using the coding system
-`china-iso-8bit', you can execute this Lisp expression:
-
-     (modify-coding-system-alist 'file "\\.txt\\'" 'china-iso-8bit)
-
-The first argument should be `file', the second argument should be a
-regular expression that determines which files this applies to, and the
-third argument says which coding system to use for these files.
-
-   You can specify the coding system for a particular file using the
-`-*-...-*-' construct at the beginning of a file, or a local variables
-list at the end (*note File Variables::.).  You do this by defining a
-value for the "variable" named `coding'.  XEmacs does not really have a
-variable `coding'; instead of setting a variable, it uses the specified
-coding system for the file.  For example, `-*-mode: C; coding:
-iso-8859-1;-*-' specifies use of the iso-8859-1 coding system, as well
-as C mode.
-
-   Once XEmacs has chosen a coding system for a buffer, it stores that
-coding system in `buffer-file-coding-system' and uses that coding
-system, by default, for operations that write from this buffer into a
-file.  This includes the commands `save-buffer' and `write-region'.  If
-you want to write files from this buffer using a different coding
-system, you can specify a different coding system for the buffer using
-`set-buffer-file-coding-system' (*note Specify Coding::.).
-
index dc22b94..b788f97 100644 (file)
@@ -30,6 +30,288 @@ versions, except that the sections entitled "The GNU Manifesto",
 translation approved by the author instead of in the original English.
 
 \1f
+File: xemacs.info,  Node: Input Methods,  Next: Select Input Method,  Prev: Language Environments,  Up: Mule
+
+Input Methods
+=============
+
+   An "input method" is a kind of character conversion designed
+specifically for interactive input.  In XEmacs, typically each language
+has its own input method; sometimes several languages which use the same
+characters can share one input method.  A few languages support several
+input methods.
+
+   The simplest kind of input method works by mapping ASCII letters into
+another alphabet.  This is how the Greek and Russian input methods work.
+
+   A more powerful technique is composition: converting sequences of
+characters into one letter.  Many European input methods use composition
+to produce a single non-ASCII letter from a sequence that consists of a
+letter followed by accent characters.  For example, some methods convert
+the sequence `'a' into a single accented letter.
+
+   The input methods for syllabic scripts typically use mapping followed
+by composition.  The input methods for Thai and Korean work this way.
+First, letters are mapped into symbols for particular sounds or tone
+marks; then, sequences of these which make up a whole syllable are
+mapped into one syllable sign.
+
+   Chinese and Japanese require more complex methods.  In Chinese input
+methods, first you enter the phonetic spelling of a Chinese word (in
+input method `chinese-py', among others), or a sequence of portions of
+the character (input methods `chinese-4corner' and `chinese-sw', and
+others).  Since one phonetic spelling typically corresponds to many
+different Chinese characters, you must select one of the alternatives
+using special XEmacs commands.  Keys such as `C-f', `C-b', `C-n',
+`C-p', and digits have special definitions in this situation, used for
+selecting among the alternatives.  <TAB> displays a buffer showing all
+the possibilities.
+
+   In Japanese input methods, first you input a whole word using
+phonetic spelling; then, after the word is in the buffer, XEmacs
+converts it into one or more characters using a large dictionary.  One
+phonetic spelling corresponds to many differently written Japanese
+words, so you must select one of them; use `C-n' and `C-p' to cycle
+through the alternatives.
+
+   Sometimes it is useful to cut off input method processing so that the
+characters you have just entered will not combine with subsequent
+characters.  For example, in input method `latin-1-postfix', the
+sequence `e '' combines to form an `e' with an accent.  What if you
+want to enter them as separate characters?
+
+   One way is to type the accent twice; that is a special feature for
+entering the separate letter and accent.  For example, `e ' '' gives
+you the two characters `e''.  Another way is to type another letter
+after the `e'--something that won't combine with that--and immediately
+delete it.  For example, you could type `e e <DEL> '' to get separate
+`e' and `''.
+
+   Another method, more general but not quite as easy to type, is to use
+`C-\ C-\' between two characters to stop them from combining.  This is
+the command `C-\' (`toggle-input-method') used twice.  *Note Select
+Input Method::.
+
+   `C-\ C-\' is especially useful inside an incremental search, because
+stops waiting for more characters to combine, and starts searching for
+what you have already entered.
+
+   The variables `input-method-highlight-flag' and
+`input-method-verbose-flag' control how input methods explain what is
+happening.  If `input-method-highlight-flag' is non-`nil', the partial
+sequence is highlighted in the buffer.  If `input-method-verbose-flag'
+is non-`nil', the list of possible characters to type next is displayed
+in the echo area (but not when you are in the minibuffer).
+
+\1f
+File: xemacs.info,  Node: Select Input Method,  Next: Coding Systems,  Prev: Input Methods,  Up: Mule
+
+Selecting an Input Method
+=========================
+
+`C-\'
+     Enable or disable use of the selected input method.
+
+`C-x <RET> C-\ METHOD <RET>'
+     Select a new input method for the current buffer.
+
+`C-h I METHOD <RET>'
+`C-h C-\ METHOD <RET>'
+     Describe the input method METHOD (`describe-input-method').  By
+     default, it describes the current input method (if any).
+
+`M-x list-input-methods'
+     Display a list of all the supported input methods.
+
+   To choose an input method for the current buffer, use `C-x <RET>
+C-\' (`select-input-method').  This command reads the input method name
+with the minibuffer; the name normally starts with the language
+environment that it is meant to be used with.  The variable
+`current-input-method' records which input method is selected.
+
+   Input methods use various sequences of ASCII characters to stand for
+non-ASCII characters.  Sometimes it is useful to turn off the input
+method temporarily.  To do this, type `C-\' (`toggle-input-method').
+To reenable the input method, type `C-\' again.
+
+   If you type `C-\' and you have not yet selected an input method, it
+prompts for you to specify one.  This has the same effect as using `C-x
+<RET> C-\' to specify an input method.
+
+   Selecting a language environment specifies a default input method for
+use in various buffers.  When you have a default input method, you can
+select it in the current buffer by typing `C-\'.  The variable
+`default-input-method' specifies the default input method (`nil' means
+there is none).
+
+   Some input methods for alphabetic scripts work by (in effect)
+remapping the keyboard to emulate various keyboard layouts commonly used
+for those scripts.  How to do this remapping properly depends on your
+actual keyboard layout.  To specify which layout your keyboard has, use
+the command `M-x quail-set-keyboard-layout'.
+
+   To display a list of all the supported input methods, type `M-x
+list-input-methods'.  The list gives information about each input
+method, including the string that stands for it in the mode line.
+
+\1f
+File: xemacs.info,  Node: Coding Systems,  Next: Recognize Coding,  Prev: Select Input Method,  Up: Mule
+
+Coding Systems
+==============
+
+   Users of various languages have established many more-or-less
+standard coding systems for representing them.  XEmacs does not use
+these coding systems internally; instead, it converts from various
+coding systems to its own system when reading data, and converts the
+internal coding system to other coding systems when writing data.
+Conversion is possible in reading or writing files, in sending or
+receiving from the terminal, and in exchanging data with subprocesses.
+
+   XEmacs assigns a name to each coding system.  Most coding systems are
+used for one language, and the name of the coding system starts with the
+language name.  Some coding systems are used for several languages;
+their names usually start with `iso'.  There are also special coding
+systems `binary' and `no-conversion' which do not convert printing
+characters at all.
+
+   In addition to converting various representations of non-ASCII
+characters, a coding system can perform end-of-line conversion.  XEmacs
+handles three different conventions for how to separate lines in a file:
+newline, carriage-return linefeed, and just carriage-return.
+
+`C-h C CODING <RET>'
+     Describe coding system CODING.
+
+`C-h C <RET>'
+     Describe the coding systems currently in use.
+
+`M-x list-coding-systems'
+     Display a list of all the supported coding systems.
+
+   The command `C-h C' (`describe-coding-system') displays information
+about particular coding systems.  You can specify a coding system name
+as argument; alternatively, with an empty argument, it describes the
+coding systems currently selected for various purposes, both in the
+current buffer and as the defaults, and the priority list for
+recognizing coding systems (*note Recognize Coding::.).
+
+   To display a list of all the supported coding systems, type `M-x
+list-coding-systems'.  The list gives information about each coding
+system, including the letter that stands for it in the mode line (*note
+Mode Line::.).
+
+   Each of the coding systems that appear in this list--except for
+`binary', which means no conversion of any kind--specifies how and
+whether to convert printing characters, but leaves the choice of
+end-of-line conversion to be decided based on the contents of each file.
+For example, if the file appears to use carriage-return linefeed between
+lines, that end-of-line conversion will be used.
+
+   Each of the listed coding systems has three variants which specify
+exactly what to do for end-of-line conversion:
+
+`...-unix'
+     Don't do any end-of-line conversion; assume the file uses newline
+     to separate lines.  (This is the convention normally used on Unix
+     and GNU systems.)
+
+`...-dos'
+     Assume the file uses carriage-return linefeed to separate lines,
+     and do the appropriate conversion.  (This is the convention
+     normally used on Microsoft systems.)
+
+`...-mac'
+     Assume the file uses carriage-return to separate lines, and do the
+     appropriate conversion.  (This is the convention normally used on
+     the Macintosh system.)
+
+   These variant coding systems are omitted from the
+`list-coding-systems' display for brevity, since they are entirely
+predictable.  For example, the coding system `iso-8859-1' has variants
+`iso-8859-1-unix', `iso-8859-1-dos' and `iso-8859-1-mac'.
+
+   In contrast, the coding system `binary' specifies no character code
+conversion at all--none for non-Latin-1 byte values and none for end of
+line.  This is useful for reading or writing binary files, tar files,
+and other files that must be examined verbatim.
+
+   The easiest way to edit a file with no conversion of any kind is with
+the `M-x find-file-literally' command.  This uses `binary', and also
+suppresses other XEmacs features that might convert the file contents
+before you see them.  *Note Visiting::.
+
+   The coding system `no-conversion' means that the file contains
+non-Latin-1 characters stored with the internal XEmacs encoding.  It
+handles end-of-line conversion based on the data encountered, and has
+the usual three variants to specify the kind of end-of-line conversion.
+
+\1f
+File: xemacs.info,  Node: Recognize Coding,  Next: Specify Coding,  Prev: Coding Systems,  Up: Mule
+
+Recognizing Coding Systems
+==========================
+
+   Most of the time, XEmacs can recognize which coding system to use for
+any given file-once you have specified your preferences.
+
+   Some coding systems can be recognized or distinguished by which byte
+sequences appear in the data.  However, there are coding systems that
+cannot be distinguished, not even potentially.  For example, there is no
+way to distinguish between Latin-1 and Latin-2; they use the same byte
+values with different meanings.
+
+   XEmacs handles this situation by means of a priority list of coding
+systems.  Whenever XEmacs reads a file, if you do not specify the coding
+system to use, XEmacs checks the data against each coding system,
+starting with the first in priority and working down the list, until it
+finds a coding system that fits the data.  Then it converts the file
+contents assuming that they are represented in this coding system.
+
+   The priority list of coding systems depends on the selected language
+environment (*note Language Environments::.).  For example, if you use
+French, you probably want XEmacs to prefer Latin-1 to Latin-2; if you
+use Czech, you probably want Latin-2 to be preferred.  This is one of
+the reasons to specify a language environment.
+
+   However, you can alter the priority list in detail with the command
+`M-x prefer-coding-system'.  This command reads the name of a coding
+system from the minibuffer, and adds it to the front of the priority
+list, so that it is preferred to all others.  If you use this command
+several times, each use adds one element to the front of the priority
+list.
+
+   Sometimes a file name indicates which coding system to use for the
+file.  The variable `file-coding-system-alist' specifies this
+correspondence.  There is a special function
+`modify-coding-system-alist' for adding elements to this list.  For
+example, to read and write all `.txt' using the coding system
+`china-iso-8bit', you can execute this Lisp expression:
+
+     (modify-coding-system-alist 'file "\\.txt\\'" 'china-iso-8bit)
+
+The first argument should be `file', the second argument should be a
+regular expression that determines which files this applies to, and the
+third argument says which coding system to use for these files.
+
+   You can specify the coding system for a particular file using the
+`-*-...-*-' construct at the beginning of a file, or a local variables
+list at the end (*note File Variables::.).  You do this by defining a
+value for the "variable" named `coding'.  XEmacs does not really have a
+variable `coding'; instead of setting a variable, it uses the specified
+coding system for the file.  For example, `-*-mode: C; coding:
+iso-8859-1;-*-' specifies use of the iso-8859-1 coding system, as well
+as C mode.
+
+   Once XEmacs has chosen a coding system for a buffer, it stores that
+coding system in `buffer-file-coding-system' and uses that coding
+system, by default, for operations that write from this buffer into a
+file.  This includes the commands `save-buffer' and `write-region'.  If
+you want to write files from this buffer using a different coding
+system, you can specify a different coding system for the buffer using
+`set-buffer-file-coding-system' (*note Specify Coding::.).
+
+\1f
 File: xemacs.info,  Node: Specify Coding,  Prev: Recognize Coding,  Up: Mule
 
 Specifying a Coding System
@@ -856,304 +1138,3 @@ characters are saved as newlines, so the invisible lines become ordinary
 lines in the file.  Saving does not change the visibility status of a
 line inside Emacs.
 
-\1f
-File: xemacs.info,  Node: Outline Motion,  Next: Outline Visibility,  Prev: Outline Format,  Up: Outline Mode
-
-Outline Motion Commands
-.......................
-
-   Some special commands in Outline mode move backward and forward to
-heading lines.
-
-`C-c C-n'
-     Move point to the next visible heading line
-     (`outline-next-visible-heading').
-
-`C-c C-p'
-     Move point to the previous visible heading line
-     (`outline-previous-visible-heading').
-
-`C-c C-f'
-     Move point to the next visible heading line at the same level as
-     the one point is on (`outline-forward-same-level').
-
-`C-c C-b'
-     Move point to the previous visible heading line at the same level
-     (`outline-backward-same-level').
-
-`C-c C-u'
-     Move point up to a lower-level (more inclusive) visible heading
-     line (`outline-up-heading').
-
-   `C-c C-n' (`next-visible-heading') moves down to the next heading
-line.  `C-c C-p' (`previous-visible-heading') moves similarly backward.
-Both accept numeric arguments as repeat counts.  The names emphasize
-that invisible headings are skipped, but this is not really a special
-feature.  All editing commands that look for lines ignore the invisible
-lines automatically.
-
-   More advanced motion commands understand the levels of headings.
-The commands `C-c C-f' (`outline-forward-same-level') and `C-c C-b'
-(`outline-backward-same-level') move from one heading line to another
-visible heading at the same depth in the outline.  `C-c C-u'
-(`outline-up-heading') moves backward to another heading that is less
-deeply nested.
-
-\1f
-File: xemacs.info,  Node: Outline Visibility,  Prev: Outline Motion,  Up: Outline Mode
-
-Outline Visibility Commands
-...........................
-
-   The other special commands of outline mode are used to make lines
-visible or invisible.  Their names all start with `hide' or `show'.
-Most of them exist as pairs of opposites.  They are not undoable;
-instead, you can undo right past them.  Making lines visible or
-invisible is simply not recorded by the undo mechanism.
-
-`M-x hide-body'
-     Make all body lines in the buffer invisible.
-
-`M-x show-all'
-     Make all lines in the buffer visible.
-
-`C-c C-d'
-     Make everything under this heading invisible, not including this
-     heading itself (`hide-subtree').
-
-`C-c C-s'
-     Make everything under this heading visible, including body,
-     subheadings, and their bodies (`show-subtree').
-
-`M-x hide-leaves'
-     Make the body of this heading line, and of all its subheadings,
-     invisible.
-
-`M-x show-branches'
-     Make all subheadings of this heading line, at all levels, visible.
-
-`C-c C-i'
-     Make immediate subheadings (one level down) of this heading line
-     visible (`show-children').
-
-`M-x hide-entry'
-     Make this heading line's body invisible.
-
-`M-x show-entry'
-     Make this heading line's body visible.
-
-   Two commands that are exact opposites are `M-x hide-entry' and `M-x
-show-entry'.  They are used with point on a heading line, and apply
-only to the body lines of that heading.  The subtopics and their bodies
-are not affected.
-
-   Two more powerful opposites are `C-c C-h' (`hide-subtree') and `C-c
-C-s' (`show-subtree').  Both should be used when point is on a heading
-line, and both apply to all the lines of that heading's "subtree": its
-body, all its subheadings, both direct and indirect, and all of their
-bodies.  In other words, the subtree contains everything following this
-heading line, up to and not including the next heading of the same or
-higher rank.
-
-   Intermediate between a visible subtree and an invisible one is having
-all the subheadings visible but none of the body.  There are two
-commands for doing this, one that hides the bodies and one that makes
-the subheadings visible.  They are `M-x hide-leaves' and `M-x
-show-branches'.
-
-   A little weaker than `show-branches' is `C-c C-i' (`show-children').
-It makes just the direct subheadings visible--those one level down.
-Deeper subheadings remain invisible.
-
-   Two commands have a blanket effect on the whole file.  `M-x
-hide-body' makes all body lines invisible, so that you see just the
-outline structure.  `M-x show-all' makes all lines visible.  You can
-think of these commands as a pair of opposites even though `M-x
-show-all' applies to more than just body lines.
-
-   You can turn off the use of ellipses at the ends of visible lines by
-setting `selective-display-ellipses' to `nil'.  The result is no
-visible indication of the presence of invisible lines.
-
-\1f
-File: xemacs.info,  Node: Words,  Next: Sentences,  Prev: Text Mode,  Up: Text
-
-Words
-=====
-
-   Emacs has commands for moving over or operating on words.  By
-convention, the keys for them are all `Meta-' characters.
-
-`M-f'
-     Move forward over a word (`forward-word').
-
-`M-b'
-     Move backward over a word (`backward-word').
-
-`M-d'
-     Kill up to the end of a word (`kill-word').
-
-`M-<DEL>'
-     Kill back to the beginning of a word (`backward-kill-word').
-
-`M-@'
-     Mark the end of the next word (`mark-word').
-
-`M-t'
-     Transpose two words;  drag a word forward or backward across other
-     words (`transpose-words').
-
-   Notice how these keys form a series that parallels the
-character-based `C-f', `C-b', `C-d', `C-t' and <DEL>.  `M-@' is related
-to `C-@', which is an alias for `C-<SPC>'.
-
-   The commands `Meta-f' (`forward-word') and `Meta-b'
-(`backward-word') move forward and backward over words.  They are
-analogous to `Control-f' and `Control-b', which move over single
-characters.  Like their `Control-' analogues, `Meta-f' and `Meta-b'
-move several words if given an argument.  `Meta-f' with a negative
-argument moves backward, and `Meta-b' with a negative argument moves
-forward.  Forward motion stops after the last letter of the word, while
-backward motion stops before the first letter.
-
-   `Meta-d' (`kill-word') kills the word after point.  To be precise,
-it kills everything from point to the place `Meta-f' would move to.
-Thus, if point is in the middle of a word, `Meta-d' kills just the part
-after point.  If some punctuation comes between point and the next
-word, it is killed along with the word.  (To kill only the next word
-but not the punctuation before it, simply type `Meta-f' to get to the
-end and kill the word backwards with `Meta-<DEL>'.)  `Meta-d' takes
-arguments just like `Meta-f'.
-
-   `Meta-<DEL>' (`backward-kill-word') kills the word before point.  It
-kills everything from point back to where `Meta-b' would move to.  If
-point is after the space in `FOO, BAR', then `FOO, ' is killed.   To
-kill just `FOO', type `Meta-b Meta-d' instead of `Meta-<DEL>'.
-
-   `Meta-t' (`transpose-words') exchanges the word before or containing
-point with the following word.  The delimiter characters between the
-words do not move.  For example, transposing `FOO, BAR' results in
-`BAR, FOO' rather than `BAR FOO,'.  *Note Transpose::, for more on
-transposition and on arguments to transposition commands.
-
-   To operate on the next N words with an operation which applies
-between point and mark, you can either set the mark at point and then
-move over the words, or you can use the command `Meta-@' (`mark-word')
-which does not move point but sets the mark where `Meta-f' would move
-to.  It can be given arguments just like `Meta-f'.
-
-   The word commands' understanding of syntax is completely controlled
-by the syntax table.  For example, any character can be declared to be
-a word delimiter.  *Note Syntax::.
-
-\1f
-File: xemacs.info,  Node: Sentences,  Next: Paragraphs,  Prev: Words,  Up: Text
-
-Sentences
-=========
-
-   The Emacs commands for manipulating sentences and paragraphs are
-mostly on `Meta-' keys, and therefore are like the word-handling
-commands.
-
-`M-a'
-     Move back to the beginning of the sentence (`backward-sentence').
-
-`M-e'
-     Move forward to the end of the sentence (`forward-sentence').
-
-`M-k'
-     Kill forward to the end of the sentence (`kill-sentence').
-
-`C-x <DEL>'
-     Kill back to the beginning of the sentence
-     (`backward-kill-sentence').
-
-   The commands `Meta-a' and `Meta-e' (`backward-sentence' and
-`forward-sentence') move to the beginning and end of the current
-sentence, respectively.  They resemble `Control-a' and `Control-e',
-which move to the beginning and end of a line.  Unlike their
-counterparts, `Meta-a' and `Meta-e' move over successive sentences if
-repeated or given numeric arguments.  Emacs assumes the typist's
-convention is followed, and thus considers a sentence to end wherever
-there is a `.', `?', or `!' followed by the end of a line or two
-spaces, with any number of `)', `]', `'', or `"' characters allowed in
-between.  A sentence also begins or ends wherever a paragraph begins or
-ends.
-
-   Neither `M-a' nor `M-e' moves past the newline or spaces beyond the
-sentence edge at which it is stopping.
-
-   `M-a' and `M-e' have a corresponding kill command, just like `C-a'
-and `C-e' have `C-k'.  The command is  `M-k' (`kill-sentence') which
-kills from point to the end of the sentence.  With minus one as an
-argument it kills back to the beginning of the sentence.  Larger
-arguments serve as repeat counts.
-
-   There is a special command, `C-x <DEL>' (`backward-kill-sentence'),
-for killing back to the beginning of a sentence, which is useful when
-you change your mind in the middle of composing text.
-
-   The variable `sentence-end' controls recognition of the end of a
-sentence.  It is a regexp that matches the last few characters of a
-sentence, together with the whitespace following the sentence.  Its
-normal value is:
-
-     "[.?!][]\"')]*\\($\\|\t\\|  \\)[ \t\n]*"
-
-This example is explained in the section on regexps.  *Note Regexps::.
-
-\1f
-File: xemacs.info,  Node: Paragraphs,  Next: Pages,  Prev: Sentences,  Up: Text
-
-Paragraphs
-==========
-
-   The Emacs commands for manipulating paragraphs are also `Meta-' keys.
-
-`M-['
-     Move back to previous paragraph beginning
-     (`backward-paragraph').
-
-`M-]'
-     Move forward to next paragraph end (`forward-paragraph').
-
-`M-h'
-     Put point and mark around this or next paragraph
-     (`mark-paragraph').
-
-   `Meta-[' moves to the beginning of the current or previous paragraph,
-while `Meta-]' moves to the end of the current or next paragraph.
-Blank lines and text formatter command lines separate paragraphs and are
-not part of any paragraph.  An indented line starts a new paragraph.
-
-   In major modes for programs (as opposed to Text mode), paragraphs
-begin and end only at blank lines.  As a result, the paragraph commands
-continue to be useful even though there are no paragraphs per se.
-
-   When there is a fill prefix, paragraphs are delimited by all lines
-which don't start with the fill prefix.  *Note Filling::.
-
-   To operate on a paragraph, you can use the command `Meta-h'
-(`mark-paragraph') to set the region around it.  This command puts
-point at the beginning and mark at the end of the paragraph point was
-in.  If point is between paragraphs (in a run of blank lines or at a
-boundary), the paragraph following point is surrounded by point and
-mark.  If there are blank lines preceding the first line of the
-paragraph, one of the blank lines is included in the region.  Thus, for
-example, `M-h C-w' kills the paragraph around or after point.
-
-   The precise definition of a paragraph boundary is controlled by the
-variables `paragraph-separate' and `paragraph-start'.  The value of
-`paragraph-start' is a regexp that matches any line that either starts
-or separates paragraphs.  The value of `paragraph-separate' is another
-regexp that  matches only lines that separate paragraphs without being
-part of any paragraph.  Lines that start a new paragraph and are
-contained in it must match both regexps.  For example, normally
-`paragraph-start' is `"^[ \t\n\f]"' and `paragraph-separate' is `"^[
-\t\f]*$"'.
-
-   Normally it is desirable for page boundaries to separate paragraphs.
-The default values of these variables recognize the usual separator for
-pages.
-
index 781b26c..722a0df 100644 (file)
@@ -7,6 +7,50 @@
 
        * update-elc.sh (ignore_dirs): Ignore lisp/utf-2000 subdirectory.
 
+2000-01-18  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.27 is released.
+
+2000-01-18  Martin Buchholz  <martin@xemacs.org>
+
+       * ootags.c: Ansify.
+       * etags.c:
+       * getopt.c:
+       * cvtmail.c:
+       Remove declarations of ANSI errno, getenv(), malloc().
+
+2000-01-13  Martin Buchholz  <martin@xemacs.org>
+
+       * movemail.c (main): 
+       * make-docfile.c (write_c_args): 
+       Simple compiler warning fixes.
+
+2000-01-09  Martin Buchholz  <martin@xemacs.org>
+
+       * *.[ch]: Change <../src/config.h> to <config.h>
+       * ellcc.c: Always use <...> to #include files not in `.'
+       * Makefile.in.in: Use safer -I paths.
+       Use $(top_srcdir) instead of $(srcdir)/../src
+       Add warning comment.
+
+2000-01-08  Martin Buchholz  <martin@xemacs.org>
+
+       * movemail.c: Warning removal.
+
+2000-01-06  Norbert Koch  <norbert@s.netic.de>
+
+       * movemail.c: Typo fix.
+
+2000-01-03  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
+
+       * movemail.c: Overhaul of the locking code.
+
+2000-01-03  Martin Buchholz  <martin@xemacs.org>
+
+       * etags.c (etags_strrchr): Ansify.
+       (etags_strchr): Ansify.
+       (get_compressor_from_suffix): Remove warning, make code cleaner.
+
 1999-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.26 is released.
index 7730260..d926072 100644 (file)
@@ -91,7 +91,7 @@ INSTALLABLES = $(INSTALLABLES_BASE) ellcc
 #ifdef HAVE_MS_WINDOWS
 INSTALLABLES = $(INSTALLABLES_BASE) runxemacs rungnuclient
 #else
-INSTALLABLES = $(INSTALLABLES_BASE) 
+INSTALLABLES = $(INSTALLABLES_BASE)
 #endif
 #endif
 
@@ -162,7 +162,13 @@ ld_libs_general=@ld_libs_general@
 
 ## We need to #define emacs to get the right versions of some files.
 
-cppflags = -Demacs -I$(top_srcdir)/src -I../src $(CPPFLAGS)
+## To understand the order of -I flags, consider what happens if you run
+## ./configure in the source tree, and then run
+## $(srcdir).2.26/configure in some other build tree.
+## Where will the generated files like config.h be included from?
+## This is also why you _must_ use <...> instead of "..." 
+## when #include'ing generated files.
+cppflags = -Demacs -I. -I../src -I$(srcdir) -I$(top_srcdir)/src $(CPPFLAGS)
 cflags   = $(CFLAGS) $(cppflags) $(c_switch_general)
 ldflags  = $(LDFLAGS) $(ld_switch_general) $(ld_libs_general)
 
@@ -279,32 +285,29 @@ getopt.o: ${srcdir}/getopt.c ${srcdir}/getopt.h
        ${CC} -c $(cflags) ${srcdir}/getopt.c
 getopt1.o: ${srcdir}/getopt1.c ${srcdir}/getopt.h
        ${CC} -c $(cflags) ${srcdir}/getopt1.c
-alloca.o: ${srcdir}/../src/alloca.c
+alloca.o: ${top_srcdir}/src/alloca.c
        ${CC} -c $(cflags) ${srcdir}/../src/alloca.c
 
-regex.o: ${srcdir}/../src/regex.c ${srcdir}/../src/regex.h
+regex.o: ${srcdir}/../src/regex.c ${top_srcdir}/src/regex.h
        $(CC) -c `echo $(cflags) | sed 's/-Demacs/ /'` \
-               -DINHIBIT_STRING_HEADER ${srcdir}/../src/regex.c
+               -DINHIBIT_STRING_HEADER ${top_srcdir}/src/regex.c
 
-etags_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \
-       -DVERSION='"${version}"' ${srcdir}/etags.c \
+etags_args = $(cflags) -DVERSION='"${version}"' ${srcdir}/etags.c \
        $(GETOPTOBJS) regex.o $(ldflags)
-etags_deps   = ${srcdir}/etags.c $(GETOPTDEPS) regex.o ../src/config.h
+etags_deps = ${srcdir}/etags.c $(GETOPTDEPS) regex.o ../src/config.h
 
 etags: ${etags_deps}
        $(CC) ${etags_args} -o $@
 
-ellcc_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \
-    ${srcdir}/ellcc.c $(ldflags)
+ellcc_args = $(cflags) ${srcdir}/ellcc.c $(ldflags)
 ellcc_deps = ${srcdir}/ellcc.c ellcc.h ../src/config.h
 
 ellcc: ${ellcc_deps}
        $(CC) ${ellcc_args} -o $@
 
-run_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \
-       -DVERSION='"${version}"' ${srcdir}/run.c \
+run_args = $(cflags) -DVERSION='"${version}"' ${srcdir}/run.c \
        $(ldflags) -Wl,--subsystem,windows -e _mainCRTStartup
-run_deps   = ${srcdir}/run.c ${srcdir}/run.h ${srcdir}/run.rc \
+run_deps = ${srcdir}/run.c ${srcdir}/run.h ${srcdir}/run.rc \
        ${srcdir}/../nt/xemacs.ico ${srcdir}/../nt/file.ico \
        ${srcdir}/../nt/lisp.ico
 
@@ -319,10 +322,9 @@ runxemacs: run
 rungnuclient: run
        cp run.exe $@.exe
 
-ootags_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \
-       -DVERSION='"${version}"' ${srcdir}/ootags.c \
+ootags_args = $(cflags) -DVERSION='"${version}"' ${srcdir}/ootags.c \
        $(GETOPTOBJS) regex.o $(ldflags)
-ootags_deps   = ${srcdir}/ootags.c $(GETOPTDEPS) regex.o ../src/config.h
+ootags_deps = ${srcdir}/ootags.c $(GETOPTDEPS) regex.o ../src/config.h
 
 ootags: ${ootags_deps}
        $(CC) ${ootags_args} -o $@
index dda077d..d92ea5a 100644 (file)
@@ -19,7 +19,7 @@
    by Francesco Potorti` <pot@cnuce.cnr.it>. */
 
 #ifdef HAVE_CONFIG_H
-#include <../src/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
index 768bcee..6bdcaf1 100644 (file)
@@ -35,17 +35,12 @@ Boston, MA 02111-1307, USA.  */
  */
 
 
-#include <../src/config.h>
+#include <config.h>
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 
-#if __STDC__ || defined(STDC_HEADERS)
-# include <stdlib.h>
-#else
-char *malloc ();
-char *getenv ();
-#endif
 static void *xmalloc (unsigned int);
 static void *xrealloc (char *ptr, unsigned int);
 static void skip_to_lf (FILE *stream);
@@ -68,7 +63,7 @@ main (int argc, char *argv[])
   char name[14];
   int c;
 
-  hd = (char *) getenv ("HOME");
+  hd = getenv ("HOME");
 
   md = (char *) xmalloc (strlen (hd) + 10);
   strcpy (md, hd);
index a39ddc6..1fc540c 100644 (file)
@@ -6,7 +6,7 @@
    but in texinfo format and sorted by function/variable name.  */
 
 #ifdef emacs
-#include <../src/config.h>
+#include <config.h>
 #endif
 #include <stdio.h>
 
index a116c9d..5168a11 100644 (file)
@@ -58,7 +58,7 @@ the lines of:
 See the samples for more details.
 */
 
-#include <../src/config.h>
+#include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -71,8 +71,9 @@ See the samples for more details.
 #endif /* HAVE_UNISTD_H */
 
 #define EMODULES_GATHER_VERSION
-#include "emodules.h"
-#include "ellcc.h"
+
+#include <emodules.h>
+#include <ellcc.h> /* Generated files must be included using <...> */
 
 #define DEBUG
 
index 35a161e..12bdc61 100644 (file)
@@ -96,9 +96,6 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33";
 #include <stdio.h>
 #include <ctype.h>
 #include <errno.h>
-#ifndef errno
-  extern int errno;
-#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -194,8 +191,6 @@ typedef struct
   char **interpreters;
 } language;
 
-extern char *getenv ();
-
 typedef struct node_st
 {                              /* sorting structure            */
   char *name;                  /* function or type name        */
@@ -282,8 +277,8 @@ 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_strchr (const char *sp, int c);
+char *etags_strrchr (const char *sp, int c);
 char *etags_getcwd (void);
 char *relative_filename (char *file, char *dir);
 char *absolute_filename (char *file, char *dir);
@@ -1208,17 +1203,21 @@ get_compressor_from_suffix (file, extptr)
   /* 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 */
+#ifdef 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');
+#else
+  for (compr = compressors; compr->suffix != NULL; compr++)
+    if (streq (compr->suffix, suffix))
+      return compr;
+#endif
+
   return NULL;
 }
 
@@ -5112,14 +5111,13 @@ savenstr (cp, len)
 /*
  * Return the ptr in sp at which the character c last
  * appears; NULL if not found
- *
- * Identical to System V strrchr, included for portability.
  */
 char *
 etags_strrchr (sp, c)
-     register char *sp, c;
+     const char *sp;
+     int c;
 {
-  register char *r;
+  register const char *r;
 
   r = NULL;
   do
@@ -5127,24 +5125,23 @@ etags_strrchr (sp, c)
       if (*sp == c)
        r = sp;
   } while (*sp++);
-  return r;
+  return (char *) r;
 }
 
 
 /*
  * Return the ptr in sp at which the character c first
  * appears; NULL if not found
- *
- * Identical to System V strchr, included for portability.
  */
 char *
 etags_strchr (sp, c)
-     register char *sp, c;
+     const char *sp;
+     int c;
 {
   do
     {
       if (*sp == c)
-       return sp;
+       return (char *) sp;
     } while (*sp++);
   return NULL;
 }
index d3e4786..63ac5d5 100644 (file)
@@ -21,7 +21,7 @@ Boston, MA 02111-1307, USA.  */
 /* Synched up with: FSF 19.28. */
 
 #define NO_SHORTNAMES
-#include <../src/config.h>
+#include <config.h>
 
 #if defined (BSD) && !defined (BSD4_1) && !defined (USE_FAKEMAIL)
 /* This program is not used in BSD, so just avoid loader complaints.  */
@@ -638,10 +638,6 @@ main (int argc, char *argv[])
   register int size;
   FILE *the_pipe;
 
-#if !(__STDC__ || defined(STDC_HEADERS))
-  extern char *getenv ();
-#endif
-
   mail_program_name = getenv ("FAKEMAILER");
   if (!(mail_program_name && *mail_program_name))
     mail_program_name = (char *) MAIL_PROGRAM_NAME;
index dd5cc71..21231de 100644 (file)
@@ -31,7 +31,7 @@ USA.  */
 #endif
 
 #ifdef HAVE_CONFIG_H
-#include <../src/config.h>
+#include <config.h>
 #endif
 
 #include <stdio.h>
@@ -202,11 +202,6 @@ static char *posixly_correct;
 #define        my_index        strchr
 #else
 
-/* Avoid depending on library functions or files
-   whose names are inconsistent.  */
-
-char *getenv ();
-
 static char *
 my_index (const char *str, int chr)
 {
index 1492066..de15d66 100644 (file)
@@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
 USA.  */
 \f
 #ifdef HAVE_CONFIG_H
-#include <../src/config.h>
+#include <config.h>
 #endif
 
 #include "getopt.h"
index 9fb3edd..4e2ac5a 100644 (file)
@@ -43,7 +43,7 @@ static char header_rcsid [] = "!Header: gnuserv.h,v 2.4 95/02/16 11:58:11 arup a
 #define NO_SHORTNAMES
 /* gnuserv should not be compiled using SOCKS */
 #define DO_NOT_SOCKSIFY
-#include <../src/config.h>
+#include <config.h>
 #undef read
 #undef write
 #undef open
index 0a88b00..8d7f308 100644 (file)
@@ -1,6 +1,6 @@
 /* Synched up with: FSF 19.28. */
 
-#include <../src/config.h>
+#include <config.h>
 
 #include <stdio.h>
 #include <ctype.h>
index e28e38e..930990e 100644 (file)
@@ -40,7 +40,7 @@ Boston, MA 02111-1307, USA.  */
  */
 
 #define NO_SHORTNAMES   /* Tell config not to load remap.h */
-#include <../src/config.h>
+#include <config.h>
 
 #include <stdio.h>
 #include <errno.h>
@@ -429,10 +429,10 @@ write_c_args (FILE *out, CONST char *func, char *buff, int minargs,
       static char lo[] = "Lisp_Object";
       if ((C_IDENTIFIER_CHAR_P (c) != in_ident) && !in_ident &&
          (strncmp (p, lo, sizeof (lo) - 1) == 0) &&
-         isspace(*(p + sizeof (lo) - 1)))
+         isspace((unsigned char) (* (p + sizeof (lo) - 1))))
        {
          p += (sizeof (lo) - 1);
-         while (isspace (*p))
+         while (isspace ((unsigned char) (*p)))
            p++;
          c = *p;
        }
index a8093e8..d27ba27 100644 (file)
@@ -27,7 +27,7 @@ Boston, MA 02111-1307, USA.  */
    that option. */
 
 #ifdef emacs
-#include <../src/config.h>
+#include <config.h>
 #endif
 
 #include <sys/types.h>
index 9a1a3c6..12f180a 100644 (file)
@@ -1,35 +1,41 @@
 /* movemail foo bar -- move file foo to file bar,
-   locking file foo the way /bin/mail respects.
+   locking file foo.
    Copyright (C) 1986, 1992, 1993, 1994, 1996 Free Software Foundation, Inc.
 
-This file is part of GNU Emacs.
+This file is part of XEmacs.
 
-GNU Emacs is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+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.
 
-GNU Emacs is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+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 GNU Emacs; see the file COPYING.  If not, write to
+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.  */
+Boston, MA 02111-1307, USA.
 
-/* Important notice: defining MAIL_USE_FLOCK or MAIL_USE_LOCKF *will
-   cause loss of mail* if you do it on a system that does not normally
-   use flock as its way of interlocking access to inbox files.  The
-   setting of MAIL_USE_FLOCK and MAIL_USE_LOCKF *must agree* with the
-   system's own conventions.  It is not a choice that is up to you.
+ Please mail bugs and suggestions to the XEmacs maintainer.
+*/
 
-   So, if your system uses lock files rather than flock, then the only way
-   you can get proper operation is to enable movemail to write lockfiles there.
-   This means you must either give that directory access modes
-   that permit everyone to write lockfiles in it, or you must make movemail
-   a setuid or setgid program.  */
+/* Important notice:
+ *
+ *  You *must* coordinate the locking method used by movemail with that
+ *  used by your mail delivery agent, as well as that of the other mail
+ *  user agents on your system.  movemail allows you to do this at run
+ *  time via the -m flag.  Moreover, it uses a default determined by
+ *  the MAIL_LOCK_DOT, MAIL_LOCK_LOCKF, MAIL_LOCK_FLOCK,
+ *  MAIL_LOCK_LOCKING, and MAIL_LOCK_MMDF preprocessor settings.
+ */
+
+/*
+ * Mike Sperber <sperber@informatik.uni-tuebingen.de> reorganized
+ * everything that has to with locking in December 1999.
+ */
 
 /*
  * Modified January, 1986 by Michael R. Gretzinger (Project Athena)
@@ -56,7 +62,7 @@ Boston, MA 02111-1307, USA.  */
 
 #define NO_SHORTNAMES   /* Tell config not to load remap.h */
 #define DONT_ENCAPSULATE
-#include <../src/config.h>
+#include <config.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
@@ -106,7 +112,7 @@ char * strerror (int errnum);
 #include <io.h>
 #endif /* WINDOWSNT */
 
-#if defined (HAVE_UNISTD_H) || defined (USG)
+#if defined (HAVE_UNISTD_H)
 #include <unistd.h>
 #endif /* unistd.h */
 #ifndef F_OK
@@ -116,23 +122,15 @@ char * strerror (int errnum);
 #define R_OK 4
 #endif /* No F_OK */
 
-#if defined (HAVE_FCNTL_H) || defined (USG)
+#if defined (HAVE_FCNTL_H)
 #include <fcntl.h>
 #endif /* fcntl.h */
 
-#if defined (XENIX) || defined (WINDOWSNT)
+#ifdef HAVE_LOCKING
 #include <sys/locking.h>
 #endif
 
-#ifdef MAIL_USE_LOCKF
-#define MAIL_USE_SYSTEM_LOCK
-#endif
-
-#ifdef MAIL_USE_FLOCK
-#define MAIL_USE_SYSTEM_LOCK
-#endif
-
-#ifdef MAIL_USE_MMDF
+#ifdef HAVE_MMDF
 extern int lk_open (), lk_close ();
 #endif
 
@@ -144,6 +142,7 @@ extern int lk_open (), lk_close ();
 
 static void fatal (char *, char*);
 static void error (char *, char *, char *);
+static void usage(int);
 static void pfatal_with_name (char *);
 static void pfatal_and_delete (char *);
 static char *concat (char *, char *, char *);
@@ -160,9 +159,6 @@ static int pop_search_top (popserver server, int msgno, int lines,
                           struct re_pattern_buffer* regexp);
 #endif
 
-/* Nonzero means this is name of a lock file to delete on fatal error.  */
-char *delete_lockname;
-
 int verbose=0;
 #ifdef MAIL_USE_POP
 int reverse=0;
@@ -184,10 +180,35 @@ struct option longopts[] =
   { "regex",                   required_argument,         NULL,        'r'     },
   { "match-lines",             required_argument,         NULL,        'l'     },
 #endif
+  { "lock-method",             required_argument,         NULL,        'm'     },
+  { "help",                    no_argument,               NULL,        'h'     },
   { "verbose",                         no_argument,               NULL,        'v'     },
   { 0 }
 };
 
+#define DOTLOCKING     0
+#define FLOCKING       1
+#define LOCKFING       2
+#define MMDF                   3
+#define LOCKING         4
+
+#if defined(MAIL_LOCK_FLOCK) && defined(HAVE_FLOCK)
+#define DEFAULT_LOCKING FLOCKING
+#elif defined(MAIL_LOCK_LOCKF) && defined(HAVE_LOCKF)
+#define DEFAULT_LOCKING LOCKFING
+#elif defined(MAIL_LOCK_MMDF) && defined(HAVE_MMDF)
+#define DEFAULT_LOCKING MMDF
+#elif defined(MAIL_LOCK_LOCKING) && defined(HAVE_LOCKING)
+#define DEFAULT_LOCKING LOCKING
+#else
+#define DEFAULT_LOCKING DOTLOCKING
+#endif
+
+static void lock_dot(char *);
+static void unlock_dot(char *);
+static int parse_lock_method(char *);
+static char *unparse_lock_method(int);
+
 int
 main (int argc, char *argv[])
 {
@@ -198,23 +219,23 @@ main (int argc, char *argv[])
   int status;
 #endif
 
-#ifndef MAIL_USE_SYSTEM_LOCK
-  struct stat st;
-  long now;
-  int tem;
-  char *lockname, *p;
-  char *tempname;
-  int desc;
-#endif /* not MAIL_USE_SYSTEM_LOCK */
+  int lock_method = DEFAULT_LOCKING;
+
+  char *maybe_lock_env;
 
-  delete_lockname = 0;
+  maybe_lock_env = getenv("EMACSLOCKMETHOD");
+  if (maybe_lock_env)
+    {
+      printf("maybe-lock_env: %s\n", maybe_lock_env);
+      lock_method = parse_lock_method(maybe_lock_env);
+    }
 
-  while (1)
+  for (;;)
     {
 #ifdef MAIL_USE_POP
-      char* optstring = "i:o:p:l:r:xvk";
+      char* optstring = "i:o:m:p:l:r:xvhk";
 #else
-      char* optstring = "i:o:v";
+      char* optstring = "i:o:m:vh";
 #endif
       int opt = getopt_long (argc, argv, optstring, longopts, 0);
   
@@ -255,7 +276,16 @@ main (int argc, char *argv[])
          regexp_pattern = compile_regex (optarg);
          break;
 #endif
-       case 'v':               verbose = 1;    break;
+
+       case 'm':
+         lock_method = parse_lock_method(optarg);
+         break;
+       case 'h':
+         usage(lock_method);
+         exit(0);
+       case 'v':
+         verbose = 1;
+         break;
        }
     }
 
@@ -272,17 +302,19 @@ main (int argc, char *argv[])
     
   if (!inname || !outname)
     {
-      fprintf (stderr, "Usage: movemail [-rvxk] [-l lines ] [-i] inbox [-o] destfile [[-p] POP-password]\n");
+      usage(lock_method);
       exit(1);
     }
 
-#ifdef MAIL_USE_MMDF
-  mmdf_init (argv[0]);
+#ifdef HAVE_MMDF
+  if (lock_method == MMDF)
+    mmdf_init (argv[0]);
 #endif
 
   if (*outname == 0)
     fatal ("Destination file name is empty", 0);
 
+  VERBOSE(("checking access to output file\n"));
   /* Check access to output file.  */
   if (access (outname, F_OK) == 0 && access (outname, W_OK) != 0)
     pfatal_with_name (outname);
@@ -320,121 +352,83 @@ main (int argc, char *argv[])
   if (access (inname, R_OK | W_OK) != 0)
     pfatal_with_name (inname);
 
-#ifndef MAIL_USE_MMDF
-#ifndef MAIL_USE_SYSTEM_LOCK
-  /* Use a lock file named after our first argument with .lock appended:
-     If it exists, the mail file is locked.  */
-  /* Note: this locking mechanism is *required* by the mailer
-     (on systems which use it) to prevent loss of mail.
-
-     On systems that use a lock file, extracting the mail without locking
-     WILL occasionally cause loss of mail due to timing errors!
-
-     So, if creation of the lock file fails
-     due to access permission on the mail spool directory,
-     you simply MUST change the permission
-     and/or make movemail a setgid program
-     so it can create lock files properly.
-
-     You might also wish to verify that your system is one
-     which uses lock files for this purpose.  Some systems use other methods.
-
-     If your system uses the `flock' system call for mail locking,
-     define MAIL_USE_SYSTEM_LOCK in config.h or the s-*.h file
-     and recompile movemail.  If the s- file for your system
-     should define MAIL_USE_SYSTEM_LOCK but does not, send a bug report
-     to bug-gnu-emacs@prep.ai.mit.edu so we can fix it.  */
-
-  lockname = concat (inname, ".lock", "");
-  tempname = (char *) xmalloc (strlen (inname) + strlen ("EXXXXXX") + 1);
-  strcpy (tempname, inname);
-  p = tempname + strlen (tempname);
-  while (p != tempname && !IS_DIRECTORY_SEP (p[-1]))
-    p--;
-  *p = 0;
-  strcpy (p, "EXXXXXX");
-  mktemp (tempname);
-  unlink (tempname);
 
-  while (1)
+  if (fork () == 0)
     {
-      /* Create the lock file, but not under the lock file name.  */
-      /* Give up if cannot do that.  */
-      desc = open (tempname, O_WRONLY | O_CREAT | O_EXCL, 0666);
-      if (desc < 0)
-       {
-         char *message = (char *) xmalloc (strlen (tempname) + 50);
-         sprintf (message, "%s--see source file lib-src/movemail.c",
-                  tempname);
-         pfatal_with_name (message);
-       }
-      close (desc);
+      setuid (getuid ());
 
-      tem = link (tempname, lockname);
-      unlink (tempname);
-      if (tem >= 0)
-       break;
-      sleep (1);
+      VERBOSE(("opening input file\n"));
 
-      /* If lock file is five minutes old, unlock it.
-        Five minutes should be good enough to cope with crashes
-        and wedgitude, and long enough to avoid being fooled
-        by time differences between machines.  */
-      if (stat (lockname, &st) >= 0)
+      switch (lock_method)
        {
-         now = time (0);
-         if (st.st_ctime < now - 300)
-           unlink (lockname);
+       case DOTLOCKING:
+         indesc = open (inname, O_RDONLY);
+         break;
+#ifdef HAVE_LOCKF
+       case LOCKFING:
+         indesc = open (inname, O_RDWR);
+         break;
+#endif
+#ifdef HAVE_FLOCK
+       case FLOCKING:
+         indesc = open (inname, O_RDWR);
+         break;
+#endif
+#ifdef HAVE_LOCKING
+       case LOCKING:
+         indesc = open (inname, O_RDWR);
+         break;
+#endif
+#ifdef HAVE_MMDF
+       case MMDF:
+         indesc = lk_open (inname, O_RDONLY, 0, 0, 10);
+         break;
+#endif
+       default: abort();
        }
-    }
-
-  delete_lockname = lockname;
-#endif /* not MAIL_USE_SYSTEM_LOCK */
-#endif /* not MAIL_USE_MMDF */
-
-  if (fork () == 0)
-    {
-      setuid (getuid ());
-
-#ifndef MAIL_USE_MMDF
-#ifdef MAIL_USE_SYSTEM_LOCK
-      indesc = open (inname, O_RDWR);
-#else  /* if not MAIL_USE_SYSTEM_LOCK */
-      indesc = open (inname, O_RDONLY);
-#endif /* not MAIL_USE_SYSTEM_LOCK */
-#else  /* MAIL_USE_MMDF */
-      indesc = lk_open (inname, O_RDONLY, 0, 0, 10);
-#endif /* MAIL_USE_MMDF */
 
       if (indesc < 0)
        pfatal_with_name (inname);
 
-#if defined (BSD) || defined (XENIX)
+#ifdef HAVE_UMASK      
       /* In case movemail is setuid to root, make sure the user can
         read the output file.  */
-      /* This is desirable for all systems
-        but I don't want to assume all have the umask system call */
       umask (umask (0) & 0333);
-#endif /* BSD or Xenix */
+#endif
+
       outdesc = open (outname, O_WRONLY | O_CREAT | O_EXCL, 0666);
       if (outdesc < 0)
        pfatal_with_name (outname);
-#ifdef MAIL_USE_SYSTEM_LOCK
-#ifdef MAIL_USE_LOCKF
-      if (lockf (indesc, F_LOCK, 0) < 0) pfatal_with_name (inname);
-#else /* not MAIL_USE_LOCKF */
-#ifdef XENIX
-      if (locking (indesc, LK_RLCK, 0L) < 0) pfatal_with_name (inname);
-#else
-#ifdef WINDOWSNT
-      if (locking (indesc, LK_RLCK, -1L) < 0) pfatal_with_name (inname);
-#else
-      if (flock (indesc, LOCK_EX) < 0) pfatal_with_name (inname);
+
+      VERBOSE(("locking input file\n"));
+
+      switch (lock_method)
+       {
+#ifdef HAVE_LOCKF
+       case LOCKFING:
+         if (lockf (indesc, F_LOCK, 0) < 0)
+           pfatal_with_name (inname);
+         break;
+#endif
+#ifdef HAVE_FLOCK
+       case FLOCKING:
+         if (flock (indesc, LOCK_EX) < 0)
+           pfatal_with_name (inname);
+         break;
 #endif
+#ifdef HAVE_LOCKING
+       case LOCKING:
+         if (locking (indesc, LK_RLCK, -1L) < 0)
+           pfatal_with_name (inname);
+         break;
 #endif
-#endif /* not MAIL_USE_LOCKF */
-#endif /* MAIL_USE_SYSTEM_LOCK */
+       case DOTLOCKING:
+         lock_dot(inname);
+         break;
+       }
 
+      VERBOSE(("copying input file to output file\n"));
+           
       {
        char buf[1024];
 
@@ -453,7 +447,7 @@ main (int argc, char *argv[])
          }
       }
 
-#ifdef BSD
+#ifdef HAVE_FSYNC
       if (fsync (outdesc) < 0)
        pfatal_and_delete (outname);
 #endif
@@ -462,31 +456,29 @@ main (int argc, char *argv[])
       if (close (outdesc) != 0)
        pfatal_and_delete (outname);
 
-#ifdef MAIL_USE_SYSTEM_LOCK
-#if defined (STRIDE) || defined (XENIX) || defined (WINDOWSNT)
-      /* Stride, xenix have file locking, but no ftruncate.  This mess will do. */
-      close (open (inname, O_CREAT | O_TRUNC | O_RDWR, 0666));
-#else
-      ftruncate (indesc, 0L);
-#endif /* STRIDE or XENIX */
-#endif /* MAIL_USE_SYSTEM_LOCK */
+      VERBOSE(("deleting or truncating input file\n"));
 
-#ifdef MAIL_USE_MMDF
-      lk_close (indesc, 0, 0, 0);
+      switch (lock_method)
+       {
+       case LOCKFING:
+       case FLOCKING:
+       case LOCKING:
+#ifdef HAVE_FTRUNCATE
+         ftruncate (indesc, 0L);
 #else
-      close (indesc);
+         close (open (inname, O_CREAT | O_TRUNC | O_RDWR, 0666));
 #endif
-
-#ifndef MAIL_USE_SYSTEM_LOCK
-      /* Delete the input file; if we can't, at least get rid of its
-        contents.  */
-#ifdef MAIL_UNLINK_SPOOL
-      /* This is generally bad to do, because it destroys the permissions
-        that were set on the file.  Better to just empty the file.  */
-      if (unlink (inname) < 0 && errno != ENOENT)
-#endif /* MAIL_UNLINK_SPOOL */
-       creat (inname, 0600);
-#endif /* not MAIL_USE_SYSTEM_LOCK */
+         close (indesc);
+         break;
+#ifdef HAVE_MMDF
+       case MMDF:
+         lk_close (indesc, 0, 0, 0);
+         break;
+#endif
+       case DOTLOCKING:
+         creat (inname, 0600);
+         break;
+       }
 
       exit (0);
     }
@@ -497,22 +489,162 @@ main (int argc, char *argv[])
   else if (WEXITSTATUS (status) != 0)
     exit (WEXITSTATUS (status));
 
-#if !defined (MAIL_USE_MMDF) && !defined (MAIL_USE_SYSTEM_LOCK)
-  unlink (lockname);
-#endif /* not MAIL_USE_MMDF and not MAIL_USE_SYSTEM_LOCK */
+  if (lock_method == DOTLOCKING)
+    unlock_dot(inname);
 
-#endif /* ! DISABLE_DIRECT_ACCESS */
+#endif /* not DISABLE_DIRECT_ACCESS */
 
   return 0;
 }
-\f
+
+static void
+usage(int lock_method)
+{
+  printf ("Usage: movemail [-rvxkh] [-l lines ] [-m method ] [-i] inbox [-o] destfile [[-p] POP-password]\n");
+  printf("where method is one of: dot");
+#ifdef HAVE_LOCKF
+  printf(", lockf");
+#endif
+#ifdef HAVE_FLOCK
+  printf(", flock");
+#endif
+#ifdef HAVE_MMDF
+  printf(", mmdf");
+#endif
+#ifdef HAVE_LOCKING
+  printf(", locking");
+#endif
+  printf("\nDefault is: %s\n", unparse_lock_method(lock_method));
+  
+}
+
+static char *
+unparse_lock_method(int lock_method)
+{
+  switch (lock_method)
+    {
+    case DOTLOCKING: return "dot";
+    case FLOCKING:   return "flock";
+    case LOCKFING:   return "lockf";
+    case LOCKING:    return "locking";
+    case MMDF:       return "mmdf";
+    default: abort();return 0;
+    }
+}
+
+static int
+parse_lock_method(char *method_name)
+{
+  if (!strcmp("dot", method_name) || !strcmp("file", method_name))
+    return DOTLOCKING;
+#ifdef HAVE_LOCKF
+  else if (!strcmp("lockf", method_name))
+    return LOCKFING;
+#endif
+#ifdef HAVE_FLOCK
+  else if (!strcmp("flock", method_name))
+    return FLOCKING;
+#endif
+#ifdef HAVE_MMDF
+  else if (!strcmp("mmdf", method_name))
+    return MMDF;
+#endif
+#ifdef HAVE_LOCKING
+  else if (!strcmp("locking", method_name))
+    return LOCKING;
+#endif
+  else
+    fatal("invalid lock method: %s", method_name);
+  return 0; /* unreached */
+}
+
+static char *
+dot_filename(char *filename)
+{
+  return concat (filename, ".lock", "");
+}
+
+static char *dotlock_filename = NULL;
+
+static void
+lock_dot(char *filename)
+{
+  struct stat st;
+  long now;
+  int tem;
+  char *lockname, *p;
+  char *tempname;
+  int desc;
+
+  dotlock_filename = (char *) xmalloc(strlen(filename) + 1);
+
+  /* Use a lock file named after our first argument with .lock appended:
+     If it exists, the mail file is locked. */
+
+  lockname = dot_filename(filename);
+  tempname = (char *) xmalloc (strlen (filename) + strlen ("EXXXXXX") + 1);
+  strcpy (tempname, filename);
+  p = tempname + strlen (tempname);
+  while (p != tempname && !IS_DIRECTORY_SEP (p[-1]))
+    p--;
+  *p = 0;
+  strcpy (p, "EXXXXXX");
+  mktemp (tempname);
+  unlink (tempname);
+
+  for (;;)
+    {
+      /* Create the lock file, but not under the lock file name.  */
+      /* Give up if cannot do that.  */
+      desc = open (tempname, O_WRONLY | O_CREAT | O_EXCL, 0666);
+      if (desc < 0)
+       {
+         char *message = (char *) xmalloc (strlen (tempname) + 50);
+         sprintf (message, "%s--see source file lib-src/movemail.c",
+                  tempname);
+         pfatal_with_name (message);
+       }
+      close (desc);
+
+      tem = link (tempname, lockname);
+      unlink (tempname);
+      if (tem >= 0)
+       break;
+      sleep (1);
+
+      /* If lock file is five minutes old, unlock it.
+        Five minutes should be good enough to cope with crashes
+        and wedgitude, and long enough to avoid being fooled
+        by time differences between machines.  */
+      if (stat (lockname, &st) >= 0)
+       {
+         now = time (0);
+         if (st.st_ctime < now - 300)
+           unlink (lockname);
+       }
+    }
+  strcpy(dotlock_filename, filename);
+}
+
+static void
+unlock_dot(char *filename)
+{
+  unlink(dot_filename(filename));
+}
+
+static void
+maybe_unlock_dot(void)
+{
+  if (dotlock_filename)
+    unlock_dot(dotlock_filename);
+}
+
 /* Print error message and exit.  */
 
 static void
 fatal (char *s1, char *s2)
 {
-  if (delete_lockname)
-    unlink (delete_lockname);
+  maybe_unlock_dot();
   error (s1, s2, NULL);
   exit (1);
 }
@@ -568,7 +700,7 @@ xmalloc (unsigned int size)
     fatal ("virtual memory exhausted", 0);
   return result;
 }
-\f
+
 /* This is the guts of the interface to the Post Office Protocol.  */
 
 #ifdef MAIL_USE_POP
@@ -605,7 +737,7 @@ popmail (char *user, char *outfile, char *password)
   FILE *mbf;
   popserver server;
 
-  VERBOSE(("opening server\r"));
+  VERBOSE(("opening server\n"));
   server = pop_open (0, user, password, POP_NO_GETPASS);
   if (! server)
     {
@@ -613,7 +745,7 @@ popmail (char *user, char *outfile, char *password)
       return (1);
     }
 
-  VERBOSE(("stat'ing messages\r"));
+  VERBOSE(("stat'ing messages\n"));
   if (pop_stat (server, &nmsgs, &nbytes))
     {
       error (pop_error, NULL, NULL);
@@ -654,13 +786,13 @@ popmail (char *user, char *outfile, char *password)
   for (idx = 0; idx < nmsgs; idx++)
     {
       i = reverse ? nmsgs - idx : idx + 1;
-      VERBOSE(("checking message %d     \r", i));
+      VERBOSE(("checking message %d     \n", i));
       
       if (!regexp_pattern 
          || 
          pop_search_top (server, i, match_lines, regexp_pattern) == POP_RETRIEVED)
        {
-         VERBOSE(("retrieving message %d     \r", i));
+         VERBOSE(("retrieving message %d     \n", i));
           mbx_delimit_begin (mbf);
          if (pop_retr (server, i, mbx_write, mbf) != POP_RETRIEVED)
            {
@@ -689,7 +821,7 @@ popmail (char *user, char *outfile, char *password)
    *      directories have lost mail when over quota because these checks were
    *      not made in previous versions of movemail. */
 
-#ifdef BSD
+#ifdef HAVE_FSYNC
   if (fsync (mbfi) < 0)
     {
       error ("Error in fsync: %s", strerror (errno), NULL);
@@ -709,7 +841,7 @@ popmail (char *user, char *outfile, char *password)
        {
          if (retrieved_list[i] == 1)
            {
-             VERBOSE(("deleting message %d     \r", i));
+             VERBOSE(("deleting message %d     \n", i));
              if (pop_delete (server, i))
                {
                  error (pop_error, NULL, NULL);
@@ -877,7 +1009,7 @@ compile_regex (char* pattern)
 
 
 #endif /* MAIL_USE_POP */
-\f
+
 #ifndef HAVE_STRERROR
 char *
 strerror (int errnum)
index 8a9d0c3..80b4cd0 100644 (file)
@@ -104,9 +104,6 @@ char pot_etags_version[] = "@(#) pot revision number is 12.28";
 #include <stdio.h>
 #include <ctype.h>
 #include <errno.h>
-#ifndef errno
-  extern int errno;
-#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -176,9 +173,9 @@ char pot_etags_version[] = "@(#) pot revision number is 12.28";
 #ifdef OO_BROWSER
 #define set_construct(construct) \
   if (!oo_browser_construct) oo_browser_construct = construct
-void oo_browser_clear_all_globals();
-void oo_browser_clear_some_globals();
-void oo_browser_check_and_clear_structtype();
+void oo_browser_clear_all_globals(void);
+void oo_browser_clear_some_globals(void);
+void oo_browser_check_and_clear_structtype(void);
 #endif
 
 /*
@@ -200,7 +197,7 @@ void oo_browser_check_and_clear_structtype();
 
 typedef int bool;
 
-typedef void Lang_function ();
+typedef void Lang_function (FILE *);
 
 typedef struct
 {
@@ -860,9 +857,7 @@ char *massage_name (s)
 
 \f
 int
-main (argc, argv)
-     int argc;
-     char *argv[];
+main (int argc, char *argv[])
 {
   int i;
   unsigned int nincluded_files;
@@ -1654,8 +1649,7 @@ static char oo_browser_prefix;
 #endif
 
 void
-put_entries (np)
-     register node *np;
+put_entries (node *np)
 {
   register char *sp;
 
@@ -1889,9 +1883,7 @@ struct C_stab_entry { char *name; int c_ext; enum sym_type type; };
 /* maximum key range = 117, duplicates = 0 */
 
 static unsigned int
-hash (str, len)
-     register char *str;
-     register int unsigned len;
+hash (char *str, unsigned int len)
 {
   static unsigned char asso_values[] =
     {
@@ -1909,13 +1901,13 @@ hash (str, len)
       10,  62,  59, 130,  28,  27,  50,  19,   3, 130,
      130, 130, 130, 130, 130, 130, 130, 130,
     };
-  return len + asso_values[str[2]] + asso_values[str[0]];
+  return len +
+    asso_values[(unsigned char) str[2]] +
+    asso_values[(unsigned char) str[0]];
 }
 
-struct C_stab_entry *
-in_word_set (str, len)
-     register char *str;
-     register unsigned int len;
+static struct C_stab_entry *
+in_word_set (char *str, unsigned int len)
 {
   static struct C_stab_entry wordlist[] =
     {
@@ -2077,7 +2069,7 @@ enum sym_type structtype;
 
 #ifdef OO_BROWSER
 void
-oo_browser_check_and_clear_structtype()
+oo_browser_check_and_clear_structtype(void)
 {
   /* Allow for multiple enum_label tags. */
   if (structtype != st_C_enum)
@@ -2156,7 +2148,7 @@ int methodlen;
 
 #ifdef OO_BROWSER
 void
-oo_browser_clear_all_globals()
+oo_browser_clear_all_globals(void)
 {
   /* Initialize globals so there is no carry over between files. */
   oo_browser_construct = C_NULL;
@@ -2167,7 +2159,7 @@ oo_browser_clear_all_globals()
 }
 
 void
-oo_browser_clear_some_globals()
+oo_browser_clear_some_globals(void)
 {
   oo_browser_construct = C_NULL;
   structtype = st_none;
@@ -3638,8 +3630,7 @@ Fortran_functions (inf)
  * look for '^[a-zA-Z_.$][a-zA_Z0-9_.$]*[: ^I^J]'
  */
 void
-Asm_labels (inf)
-     FILE *inf;
+Asm_labels (FILE *inf)
 {
   register char *cp;
 
index c50fc14..0c12cbe 100644 (file)
@@ -21,7 +21,7 @@ Boston, MA 02111-1307, USA.  */
 
 #ifdef HAVE_CONFIG_H
 #define NO_SHORTNAMES  /* Tell config not to load remap.h */
-#include <../src/config.h>
+#include <config.h>
 #else
 #define MAIL_USE_POP
 #endif
index ec62ebb..b0ab560 100644 (file)
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA.  */
  **  abstraction : a stopwatch
  **  operations: reset_watch, get_time
  */
-#include <../src/config.h>
+#include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "../src/systime.h"
index b7c3baa..4b82143 100644 (file)
@@ -7,7 +7,7 @@
 
 /* Synched up with: FSF 19.28. */
 
-#include <../src/config.h>
+#include <config.h>
 
 #include <stdio.h>
 #include <ctype.h>
index 979bd82..618938e 100644 (file)
@@ -1,6 +1,6 @@
 /* Program to produce output at regular intervals.  */
 
-#include <../src/config.h>
+#include <config.h>
 
 #if __STDC__ || defined(STDC_HEADERS)
 #include <stdlib.h>
index 6a76772..79d4635 100644 (file)
@@ -10,7 +10,7 @@
 /* Synched up with: FSF 19.28. */
 
 #define DONT_ENCAPSULATE
-#include <../src/config.h>
+#include <config.h>
 
 #include <stdio.h>
 #include <ctype.h>
index 0abaae8..4f68f8a 100644 (file)
        * files.el (insert-file-contents-literally): Treat file as binary;
        call file-name-handlers. [sync with Emacs 20.3.10]
 
+2000-01-18  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.27 is released.
+
+2000-01-18  Martin Buchholz  <martin@xemacs.org>
+
+       * process.el (shell-command-to-string): Use the FSF docstring.
+       Make shell-command-to-string the standard function, and
+       exec-to-string the (deprecated) alias.
+
+       * startup.el: typo fix.
+
+2000-01-16  Martin Buchholz  <martin@xemacs.org>
+
+       * mule/mule-misc.el (char-octet): Move back into mule-charset.c.
+
+2000-01-14  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * menubar-items.el (sort-buffers-menu-alphabetically): Put invisible
+       buffers after visible buffers.
+       (sort-buffers-menu-by-mode-then-alphabetically): Ditto.
+
+2000-01-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * info.el (Info-extract-menu-node-name): Stop at a dot
+       followed by whitespace or right parenthesis.
+
+2000-01-15  Hrvoje Niksic  <hniksic@iskon.hr>
+
+       * info.el (Info-directory-list): Warn against using Customize with
+       Info-directory-list.
+
+2000-01-15  Adrian Aichner  <aichner@ecf.teradyne.com>
+
+       * minibuf.el (read-file-name): doc fix.
+
+       * autoload.el (update-file-autoloads): doc fix.
+
+       * about.el (about-hackers): Change my E-mail address.
+
+2000-01-13  Martin Buchholz  <martin@xemacs.org>
+
+       * info.el (Info-visit-file): Just use the `f' interactive spec to
+       read a filename in the standard way.
+
+2000-01-13  Andy Piper  <andy@xemacs.org>
+
+       * gutter-items.el (gutter-buffers-tab-orientation): new variable.
+       (gutter-buffers-tab-extent): new variable.
+       (update-tab-in-gutter): call add-tab-to-gutter again if the
+       orientation has changed.
+       (add-tab-to-gutter): cope with different orientations.
+
+2000-01-11  Didier Verna  <didier@xemacs.org>
+
+       * info.el (Info-following-node-name): backward-skip dots as well
+       as spaces (dots at the end of a node name aren't part of it).
+       (Info-extract-menu-node-name): don't skip dots. There could be
+       some in the node name.
+       (Info-index): allow dots to be part of a node name.
+
+2000-01-12  Andreas Jaeger  <aj@suse.de>
+
+       * files.el (auto-mode-alist): Added idlwave-mode.
+       Patch by Carsten Dominik <dominik@astro.uva.nl>.
+
+1999-12-22  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * info.el (Info-search): Show default value.
+
+1999-12-20  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * info.el (Info-read-node-completion-table): New variable.
+       (Info-read-node-name-1): New function.
+       (Info-read-node-name): Use it.
+       (Info-follow-reference): Use DEFAULT argument of completing-read.
+       (Info-menu): Ditto.
+
+1999-12-27  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * hyper-apropos.el (hyper-describe-key-briefly): Save
+       window configuration.
+       (hyper-describe-face): Use DEFAULT of completing-read.
+       (hyper-apropos-read-variable-symbol): Ditto.
+       (hyper-apropos-read-function-symbol): Ditto.
+
+1999-12-27  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * mule/mule-cmds.el (set-default-coding-system): Set
+       comint-exec-hook to use coding-system-for-read and
+       coding-system-for-write so that C-x RET c works.
+
+1999-12-27  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * minibuf.el (minibuffer-confirm-incomplete): Customize.
+       (previous-matching-history-element): Increment
+       minibuffer-max-depth by 1.
+       (next-matching-history-element): Ditto.
+
+2000-01-11  Andy Piper  <andy@xemacs.org>
+
+       * gutter-items.el (buffers-tab): Create a new face for the buffers
+       tab.
+       (buffers-tab-face): use it.
+
+2000-01-10  Didier Verna  <didier@xemacs.org>
+
+       * modeline.el (modeline-scrolling-method): change modeline X
+       cursor appearance according to the value.
+
+2000-01-07  Andreas Jaeger  <aj@suse.de>
+
+       * about.el (about-hackers): Moved my entry to contributor list.
+       (xemacs-hackers): Added myself.
+       (about-maintainer-info): Added description of myself.
+
+
+2000-01-07  Didier Verna  <didier@xemacs.org>
+
+       * modeline.el (modeline-scrolling-method): new variable.
+       (mouse-drag-modeline): add reference to it in the docstring.
+       (mouse-drag-modeline): handle it.
+
+2000-01-08  Andy Piper  <andy@xemacs.org>
+
+       * gutter-items.el (update-tab-in-gutter): remove resize-subwindow
+       calls.
+       (remove-buffer-from-gutter-tab): ditto.
+
+2000-01-06  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * cus-edit.el (custom-hook-convert-widget): Fix comment.
+       (custom-face-edit): Fix grammatical error in help message.
+
+2000-01-03  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
+
+       * movemail.el: Added.
+
+       * dumped-lisp.el (preloaded-file-list): Added movemail.el.
+
+2000-01-03  Didier Verna  <didier@xemacs.org>
+
+       * modeline.el (mouse-drag-modeline): remove the code related to
+       the modeline horizontal scrolling facility.
+
 1999-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.26 is released.
 
 1999-12-21  Martin Buchholz  <martin@xemacs.org>
 
-       * byte-optimize.el (byte-optimize-plus): 
+       * byte-optimize.el (byte-optimize-plus):
        Optimize (+ 1) to 1 instead of (1+ nil).
 
        * files.el (basic-save-buffer): Rewrite for clarity.  Use (char-before).
 
 1999-12-13  Charles G Waldman  <cgw@alum.mit.edu>
 
-       * gnuserv.el (gnuserv-process-filter):  don't call 
+       * gnuserv.el (gnuserv-process-filter):  don't call
        gnuserv-write-to-client when gnuserv-current-client is nil
 
 1999-12-14  Martin Buchholz <martin@xemacs.org>
 
 1999-10-06  Andy Piper  <andy@xemacs.org>
 
-       * files.el (recover-file): Don't use ls under windows for revert buffer. 
+       * files.el (recover-file): Don't use ls under windows for revert buffer.
 
 1999-09-25  Adrian Aichner  <adrian@xemacs.org>
 
 
 1999-09-27  Martin Buchholz  <martin@xemacs.org>
 
-       * modeline.el (modeline-format): 
-       Only purecopy the strings.  Else 
+       * modeline.el (modeline-format):
+       Only purecopy the strings.  Else
        (nsublis '(("%p" . "%P")) (default-value 'modeline-format) :test 'equal)
        barfs.
 
 
 1999-08-30  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
 
-       * obsolete.el (init-file-user): 
-       * startup.el: 
-       * packages.el (packages-compute-package-locations): 
-       * package-get.el (package-get-user-index-filename): 
-       * menubar-items.el (maybe-add-init-button): 
-       * info.el (Info-annotations-path): 
-       * dump-paths.el: 
+       * obsolete.el (init-file-user):
+       * startup.el:
+       * packages.el (packages-compute-package-locations):
+       * package-get.el (package-get-user-index-filename):
+       * menubar-items.el (maybe-add-init-button):
+       * info.el (Info-annotations-path):
+       * dump-paths.el:
        Change `user-init-directory' to be an absolute path.
        Use `user-init-directory' where appropriate.
        Zap `init-file-user' and its uses.
 
 1999-09-03  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * obsolete.el (isearch-yank-x-clipboard): Define it as an obsolete 
+       * obsolete.el (isearch-yank-x-clipboard): Define it as an obsolete
        alias.
 
        * isearch-mode.el (isearch-top-state): Restore isearch-word.
        (isearch-update-ring): New function.
        (isearch-done): Call it.
        (isearch-done): New argument EDIT.
-       (isearch-repeat): If search string is empty, look up at the car of 
+       (isearch-repeat): If search string is empty, look up at the car of
        the search ring; ignore the yank pointer.
        (isearch-abort): Call isearch-done with NOPUSH.
        (isearch-cancel): New function.
        need to check isearch-fixed-case.
        (isearch-toggle-case-fold): Update highlighting of all matches
        before the pause.
-       (isearch-edit-string): 
+       (isearch-edit-string):
 
 1999-09-01  Hrvoje Niksic  <hniksic@srce.hr>
 
 
        * faces.el (isearch-secondary): Create face here.
 
-       * isearch-mode.el: Rewrote the "lazy highlighting" code not to use 
+       * isearch-mode.el: Rewrote the "lazy highlighting" code not to use
        timers.
 
 1999-08-27  Hrvoje Niksic  <hniksic@srce.hr>
index 4448a0d..fa41b5e 100644 (file)
@@ -56,6 +56,7 @@
 ;; `about-maintainer-info' (and maybe `about-hackers'.
 (defvar xemacs-hackers
   '((ajc      "Andrew Cosgriff"   "ajc@bing.wattle.id.au")
+    (aj       "Andreas Jaeger"    "aj@suse.de")
     (baw      "Barry Warsaw"      "bwarsaw@python.org")
     (bw       "Bob Weiner"        "weiner@beopen.com")
     (chr      "Christian Nybø"    "chr@mediascience.no")
@@ -987,6 +988,14 @@ internet startup called New Media Science, doing scripting and
 violation of HTML DTD's.  After graduation, spring 1999, he'll be
 looking for a job involving lisp programming, French and Russian.")
      (widget-insert ".\n"))
+    (aj
+     (widget-insert "\
+In the XEmacs team I'm responsible for the packages which means mainly
+applying patches and packaging the packages.
+
+I'm a software developer working for the SuSE Labs of the Linux
+distributor SuSE.  My main task is to improve the GNU C library.")
+     (widget-insert ".\n"))
 ))
 
 ;; Setup the buffer for a maintainer.
@@ -1197,6 +1206,9 @@ Originator and maintainer of the gnus.org domain.\n")
 Beta tester and last hacker of calendar.\n")
     (about-show-linked-info 'chr "\
 Maintainer of the XEmacs FAQ and proud author of `zap-up-to-char'.\n")
+    (about-show-linked-info 'aj "\
+`Package Patch Tender', beta tester and GNU libc developer.\n")
+
     (flet ((print-short (name addr &optional shortinfo)
             (concat (about-with-face name 'italic)
                     (about-tabs name)
@@ -1263,7 +1275,7 @@ above.  We couldn't have done it without them.\n\n"
        (print-short "Per Abrahamsen" "abraham@dina.kvl.dk")
        (print-short "Gary Adams" "gra@zeppo.East.Sun.COM")
        (print-short "Gennady Agranov" "agranov@csa.CS.Technion.Ac.IL")
-       (print-short "Adrian Aichner" "aichner@ecf.teradyne.com")
+       (print-short "Adrian Aichner" "adrian@xemacs.org")
        (print-short "Mark Allender" "allender@vnet.IBM.COM")
        (print-short "Stephen R. Anderson" "sra@bloch.ling.yale.edu")
        (print-short "Butch Anton" "butch@zaphod.uchicago.edu")
@@ -1360,7 +1372,6 @@ above.  We couldn't have done it without them.\n\n"
        (print-short "Tudor Hulubei" "tudor@cs.unh.edu")
        (print-short "Tatsuya Ichikawa" "ichikawa@hv.epson.co.jp")
        (print-short "Andrew Innes" "andrewi@harlequin.co.uk")
-       (print-short "Andreas Jaeger" "aj@arthur.rhein-neckar.de")
        (print-short "Markku Jarvinen" "Markku.Jarvinen@simpukka.funet.fi")
        (print-short "Robin Jeffries" "robin.jeffries@sun.com")
        (print-short "Philip Johnson" "johnson@uhics.ics.Hawaii.Edu")
index ec70873..2862234 100644 (file)
@@ -359,7 +359,7 @@ Unless you are an XEmacs maintainr, it is probably unwise to change this.")
 (defun update-file-autoloads (file)
   "Update the autoloads for FILE in `generated-autoload-file'
 \(which FILE might bind in its local variables).
-This functions refuses to update autoloads files."
+This function refuses to update autoloads files."
   (interactive "fUpdate autoloads for file: ")
   (setq file (expand-file-name file))
   (when (and (file-newer-than-file-p file generated-autoload-file)
index 983bace..734725f 100644 (file)
@@ -1,6 +1,6 @@
 ;;; cus-edit.el --- Tools for customizating Emacs and Lisp packages.
 ;;
-;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
@@ -2272,7 +2272,7 @@ Optional EVENT is the location for the menu."
   :format "%t: %v"
   :tag "Attributes"
   :extra-offset 12
-  :button-args '(:help-echo "Control whether this attribute have any effect")
+  :button-args '(:help-echo "Control whether this attribute has any effect")
   :args (mapcar (lambda (att)
                  (list 'group
                        :inline t
@@ -2756,7 +2756,7 @@ Optional EVENT is the location for the menu."
   :tag "Hook")
 
 (defun custom-hook-convert-widget (widget)
-  ;; Handle `:custom-options'.
+  ;; Handle `:options'.
   (let* ((options (widget-get widget :options))
         (other `(editable-list :inline t
                                :entry-format "%i %d%v"
index ead38e0..b960080 100644 (file)
@@ -80,7 +80,7 @@
        "text-mode"
        "fill"
        "auto-save"             ; Added for 20.4
-
+       "movemail"              ; Added for 21.2
        (when-feature windows-nt "winnt")
        (when-feature lisp-float-type "float-sup")
        "itimer"                ; for vars auto-save-timeout and
index 19ae8b1..9821e01 100644 (file)
@@ -1160,6 +1160,7 @@ run `normal-mode' explicitly."
     ("\\.m\\(?:[mes]\\|an\\)\\'" . nroff-mode)
     ("\\.icn\\'" . icon-mode)
     ("\\.\\(?:[ckz]?sh\\|shar\\)\\'" . sh-mode)
+    ("\\.pro\\'" . idlwave-mode)
     ;; #### Unix-specific!
     ("/\\.\\(?:bash_\\|z\\)?\\(profile\\|login\\|logout\\)\\'" . sh-mode)
     ("/\\.\\(?:[ckz]sh\\|bash\\|tcsh\\|es\\|xinit\\|startx\\)rc\\'" . sh-mode)
index 6b0b8f0..46b137f 100644 (file)
@@ -40,6 +40,11 @@ customized through the options menu."
           (set-specifier default-gutter-visible-p val)
           (setq gutter-visible-p val)))
 
+(defvar gutter-buffers-tab nil
+  "A tab widget in the gutter for displaying buffers.
+Do not set this. Use `glyph-image-instance' and
+`set-image-instance-property' to change the properties of the tab.")
+
 (defcustom default-gutter-position
   (default-gutter-position)
   "The location of the default gutter. It can be 'top, 'bottom, 'left or
@@ -51,7 +56,8 @@ customized through the options menu."
                 (const :tag "right" 'right))
   :set #'(lambda (var val)
           (set-default-gutter-position val)
-          (setq default-gutter-position val)))
+          (setq default-gutter-position val)
+          (when gutter-buffers-tab (update-tab-in-gutter))))
 
 ;;; The Buffers tab
 
@@ -59,10 +65,10 @@ customized through the options menu."
   "Customization of `Buffers' tab."
   :group 'gutter)
 
-(defvar gutter-buffers-tab nil
-  "A tab widget in the gutter for displaying buffers.
-Do not set this. Use `glyph-image-instance' and
-`set-image-instance-property' to change the properties of the tab.")
+(defvar gutter-buffers-tab-orientation 'top
+  "Where the buffers tab currently is. Do not set this.")
+
+(defvar gutter-buffers-tab-extent nil)
 
 (defcustom buffers-tab-max-size 6
   "*Maximum number of entries which may appear on the \"Buffers\" tab.
@@ -102,7 +108,10 @@ by `buffers-tab-grouping-regexp'."
                 function)
   :group 'buffers-tab)
 
-(defcustom buffers-tab-face 'default
+(make-face 'buffers-tab "Face for displaying the buffers tab.")
+(set-face-parent 'buffers-tab 'default)
+
+(defcustom buffers-tab-face 'buffers-tab
   "*Face to use for displaying the buffers tab."
   :type 'face
   :group 'buffers-tab)
@@ -227,25 +236,51 @@ items by redefining the function `format-buffers-menu-line'."
 
 (defun add-tab-to-gutter ()
   "Put a tab control in the gutter area to hold the most recent buffers."
+  (setq gutter-buffers-tab-orientation (default-gutter-position))
   (let ((gutter-string ""))
+    (unless gutter-buffers-tab-extent
+      (setq gutter-buffers-tab-extent (make-extent 0 0 gutter-string)))
     (set-extent-begin-glyph 
-     (make-extent 0 0 gutter-string)
+     gutter-buffers-tab-extent
      (setq gutter-buffers-tab 
           (make-glyph 
            (vector 'tab-control :descriptor "Buffers" :face buffers-tab-face
+                   :orientation gutter-buffers-tab-orientation
                    :properties (list :items (buffers-tab-items))))))
     ;; This looks better than a 3d border
     (mapcar '(lambda (x)
               (when (valid-image-instantiator-format-p 'tab-control x)
                 (set-specifier default-gutter-border-width 0 'global x)
-                (set-specifier default-gutter gutter-string 'global x)))
+                (set-specifier top-gutter nil 'global x)
+                (set-specifier bottom-gutter nil 'global x)
+                (set-specifier left-gutter nil 'global x)
+                (set-specifier right-gutter nil 'global x)
+                (set-specifier left-gutter-width 0 'global x)
+                (set-specifier right-gutter-width 0 'global x)
+                (cond ((eq gutter-buffers-tab-orientation 'top)
+                       (set-specifier top-gutter gutter-string 'global x))
+                      ((eq gutter-buffers-tab-orientation 'bottom)
+                       (set-specifier bottom-gutter gutter-string 'global x))
+                      ((eq gutter-buffers-tab-orientation 'left)
+                       (set-specifier left-gutter gutter-string 'global x)
+                       (set-specifier left-gutter-width
+                                      (glyph-width gutter-buffers-tab)
+                                      'global x))
+                      ((eq gutter-buffers-tab-orientation 'right)
+                       (set-specifier right-gutter gutter-string 'global x)
+                       (set-specifier right-gutter-width
+                                      (glyph-width gutter-buffers-tab)
+                                      'global x))
+                      )))
            (console-type-list))))
 
 (defun update-tab-in-gutter (&optional frame-or-buffer)
   "Update the tab control in the gutter area."
   (let ((locale (if (framep frame-or-buffer) frame-or-buffer)))
     (when (specifier-instance default-gutter-visible-p locale)
-      (unless gutter-buffers-tab 
+      (unless (and gutter-buffers-tab 
+                  (eq (default-gutter-position)
+                      gutter-buffers-tab-orientation))
        (add-tab-to-gutter))
       (when (valid-image-instantiator-format-p 'tab-control)
        (let ((inst (glyph-image-instance 
@@ -254,9 +289,7 @@ items by redefining the function `format-buffers-menu-line'."
                       (last-nonminibuf-window frame-or-buffer)))))
          (set-image-instance-property inst :items 
                                       (buffers-tab-items 
-                                       nil locale))
-         (resize-subwindow inst (gutter-pixel-width) nil))
-       ))))
+                                       nil locale)))))))
 
 (defun remove-buffer-from-gutter-tab ()
   "Remove the current buffer from the tab control in the gutter area."
@@ -268,9 +301,7 @@ items by redefining the function `format-buffers-menu-line'."
        (setq buffers (build-buffers-tab-internal 
                       (list 
                        (get-buffer-create "*scratch*")))))
-      (set-image-instance-property inst :items buffers)
-      (resize-subwindow inst (gutter-pixel-width) nil)
-      )))
+      (set-image-instance-property inst :items buffers))))
 
 (add-hook 'kill-buffer-hook 'remove-buffer-from-gutter-tab)
 (add-hook 'create-frame-hook 'update-tab-in-gutter)
index dd3397a..a9c4d34 100644 (file)
@@ -438,7 +438,9 @@ General Commands:
        (if (and (or (symbolp defn) (symbolp (setq defn (car-safe defn))))
                 defn
                 show)
-           (hyper-apropos-get-doc defn t))))))
+           (hyper-apropos-get-doc defn t))
+       (or (memq major-mode '(hyper-apropos-mode hyper-apropos-help-mode))
+         (setq hyper-apropos-prev-wconfig (current-window-configuration)))))))
 
 ;;;###autoload
 (defun hyper-describe-face (symbol &optional this-ref-buffer)
@@ -460,10 +462,9 @@ See also `hyper-apropos' and `hyper-describe-function'."
                            ": "))
                  (mapcar #'(lambda (x) (list (symbol-name x)))
                          (face-list))
-                 nil t nil 'hyper-apropos-face-history)))
-     (list (if (string= val "")
-              (progn (push (symbol-name v) hyper-apropos-face-history) v)
-            (intern-soft val))
+                 nil t nil 'hyper-apropos-face-history
+                 (and v (symbol-name v)))))
+     (list (intern-soft val)
           current-prefix-arg)))
   (if (null symbol)
       (message "Sorry, nothing to describe.")
@@ -530,10 +531,10 @@ See also `hyper-apropos' and `hyper-describe-function'."
                         (if v
                             (format " (default %s): " v)
                           ": "))
-                obarray predicate t nil 'variable-history)))
-    (if (string= val "")
-       (progn (push (symbol-name v) variable-history) v)
-      (intern-soft val))))
+                obarray predicate t nil 'variable-history
+                (and v (symbol-name v)))))
+    (intern-soft val)))
+
 ;;;###autoload
 (define-obsolete-function-alias
   'hypropos-read-variable-symbol 'hyper-apropos-read-variable-symbol)
@@ -549,10 +550,9 @@ See also `hyper-apropos' and `hyper-describe-function'."
                                     (format "%s (default %s): " prompt fn)
                                   (format "%s: " prompt))
                                 obarray 'fboundp t nil
-                                'function-history)))
-    (if (equal val "")
-       (progn (push (symbol-name fn) function-history) fn)
-      (intern-soft val))))
+                                'function-history
+                                (and fn (symbol-name fn)))))
+    (intern-soft val)))
 
 (defun hyper-apropos-last-help (arg)
   "Go back to the last symbol documented in the *Hyper Help* buffer."
index d96c5ba..d90df95 100644 (file)
@@ -437,9 +437,15 @@ nil or `never', the default, auto-generated info directory
   "List of directories to search for Info documentation files.
 
 The first directory in this list, the \"dir\" file there will become
-the (dir)Top node of the Info documentation tree.  If you wish to
-modify the info search path, use `M-x customize-variable,
-Info-directory-list' to do so.")
+the (dir)Top node of the Info documentation tree.
+
+Note: DO NOT use the `customize' interface to change the value of this
+variable.  Its value is created dynamically on each startup, depending
+on XEmacs packages installed on the system.  If you want to change the
+search path, make the needed modifications on the variable's value
+from .emacs.  For instance:
+
+    (setq Info-directory-list (cons \"~/info\" Info-directory-list))")
 
 (defcustom Info-localdir-heading-regexp
     "^Locally installed XEmacs Packages:?"
@@ -1489,12 +1495,10 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
     (or (equal tag "") (Info-find-node nil (format "<<%s>>" tag)))))
 
 ;;;###autoload
-(defun Info-visit-file ()
+(defun Info-visit-file (file)
   "Directly visit an info file."
-  (interactive)
-  (let* ((insert-default-directory nil)
-        (file (read-file-name "Goto Info file: " "" "")))
-    (or (equal file "") (Info-find-node (expand-file-name file) "Top"))))
+  (interactive "fVisit Info file: ")
+  (Info-find-node (expand-file-name file) "Top"))
 
 (defun Info-restore-point (&optional always)
   "Restore point to same location it had last time we were in this node."
@@ -1513,13 +1517,33 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
        (set-window-start (get-buffer-window (current-buffer))
                         (+ (nth 2 entry) (point-min)))))
 
+(defvar Info-read-node-completion-table)
+
+;; This function is used as the "completion table" while reading a node name.
+;; It does completion using the alist in Info-read-node-completion-table
+;; unless STRING starts with an open-paren.
+(defun Info-read-node-name-1 (string predicate code)
+  (let ((no-completion (and (> (length string) 0) (eq (aref string 0) ?\())))
+    (cond ((eq code nil)
+          (if no-completion
+              string
+            (try-completion string Info-read-node-completion-table predicate)))
+         ((eq code t)
+          (if no-completion
+              nil
+            (all-completions string Info-read-node-completion-table predicate)))
+         ((eq code 'lambda)
+          (if no-completion
+              t
+            (assoc string Info-read-node-completion-table))))))
+
 (defun Info-read-node-name (prompt &optional default)
   (Info-setup-initial)
   (let* ((completion-ignore-case t)
-        (nodename (completing-read prompt
-                                   (Info-build-node-completions)
-                                   nil nil nil
-                                   'Info-minibuffer-history)))
+        (Info-read-node-completion-table (Info-build-node-completions))
+        (nodename (completing-read prompt 'Info-read-node-name-1
+                                   nil t nil 'Info-minibuffer-history
+                                   default)))
     (if (equal nodename "")
        (or default
            (Info-read-node-name prompt))
@@ -1576,10 +1600,14 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
 ;;;###autoload
 (defun Info-search (regexp)
   "Search for REGEXP, starting from point, and select node it's found in."
-  (interactive "sSearch (regexp): ")
-  (if (equal regexp "")
-      (setq regexp Info-last-search)
-    (setq Info-last-search regexp))
+  (interactive (list
+               (read-from-minibuffer
+                (if Info-last-search
+                    (format "Search (regexp, default %s): "
+                            Info-last-search)
+                  "Search (regexp): ")
+                nil nil nil nil nil Info-last-search)))
+  (setq Info-last-search regexp)
   (with-search-caps-disable-folding regexp t
     (let ((found ())
           (onode Info-current-node)
@@ -1666,7 +1694,7 @@ annotation for any node of any file.  (See `a' and `x' commands.)"
        (skip-chars-forward (concat (or allowedchars "^,\t\n") "("))
        (if (looking-at "(")
           (skip-chars-forward "^)")))
-     (skip-chars-backward " ")
+     (skip-chars-backward " .")
      (point))))
 
 (defun Info-next (&optional n)
@@ -1761,7 +1789,8 @@ NAME may be an abbreviation of the reference name."
                                                  default ") ")
                                        "Follow reference named: ")
                                      completions nil t nil
-                                     'Info-minibuffer-history)))
+                                     'Info-minibuffer-history
+                                     default)))
           (if (and (string= item "") default)
               (list default)
             (list item)))
@@ -1845,7 +1874,19 @@ NAME may be an abbreviation of the reference name."
          (if (looking-at ":")
              (buffer-substring beg (1- (point)))
            (skip-chars-forward " \t\n")
-           (Info-following-node-name (if multi-line "^.,\t" "^.,\t\n"))))
+           ;; Kludge.
+           ;; Allow dots in node name not followed by whitespace.
+           (re-search-forward
+            (concat "\\(([^)]+)[^."
+                    (if multi-line "" "\n")
+                    "]*\\|\\([^.,\t"
+                    (if multi-line "" "\n")
+                    ;; We consider dots followed by newline as
+                    ;; end of nodename even if multil-line.
+                    ;; Also stops at .).  It is generated by @pxref.
+                    ;; Skips sequential dots.
+                    "]\\|\\.+[^ \t\n)]\\)+\\)"))
+           (match-string 1)))
     (while (setq i (string-match "\n" str i))
       (aset str i ?\ ))
     str))
@@ -1888,7 +1929,8 @@ Completion is allowed, and the menu item point is on is the default."
                                                   default)
                                           "Menu item: ")
                                       completions nil t nil
-                                      'Info-minibuffer-history)))
+                                      'Info-minibuffer-history
+                                      default)))
         ;; we rely on the fact that completing-read accepts an input
         ;; of "" even when the require-match argument is true and ""
         ;; is not a valid possibility
@@ -2095,7 +2137,7 @@ Give a blank topic name to go to the Index node itself."
   (interactive "sIndex topic: ")
   (let ((pattern (format "\n\\* \\([^\n:]*%s[^\n:]*\\):[ \t]*%s"
                         (regexp-quote topic)
-                        "\\([^.\n]*\\)\\.[ t]*\\([0-9]*\\)"))
+                        "\\(.*\\)\\.[ t]*\\([0-9]*\\)$"))
        node)
     (message "Searching index for `%s'..." topic)
     (Info-goto-node "Top")
index 0750bc8..4439044 100644 (file)
                    (or buffer-undo-list pending-undo-list))
        :suffix (if (or (eq last-command 'undo)
                       (eq last-command 'advertised-undo))
-                      "More" "")]
+                  "More" "")]
       ["Redo" redo
        :included (fboundp 'redo)
        :active (not (or (eq buffer-undo-list t)
-                        (eq last-buffer-undo-list nil)
-                        (not (or (eq last-buffer-undo-list buffer-undo-list)
-                                 (and (null (car-safe buffer-undo-list))
-                                      (eq last-buffer-undo-list
-                                          (cdr-safe buffer-undo-list)))))
-                        (or (eq buffer-undo-list pending-undo-list)
-                            (eq (cdr buffer-undo-list) pending-undo-list))))
+                       (eq last-buffer-undo-list nil)
+                       (not (or (eq last-buffer-undo-list buffer-undo-list)
+                                (and (null (car-safe buffer-undo-list))
+                                     (eq last-buffer-undo-list
+                                         (cdr-safe buffer-undo-list)))))
+                       (or (eq buffer-undo-list pending-undo-list)
+                           (eq (cdr buffer-undo-list) pending-undo-list))))
        :suffix (if (eq last-command 'redo) "More" "")]
       ["Cut" kill-primary-selection
        :active (selection-owner-p)]
          (force-cursor-redisplay))
        :style radio
        :selected (eq bar-cursor t)]
-       ["Bar cursor (2 pixels)"
-        (progn
-          (customize-set-variable 'bar-cursor 2)
-          (force-cursor-redisplay))
-        :style radio
-        :selected (and bar-cursor (not (eq bar-cursor t)))]
-       "------"
-       ["Line Numbers"
-        (progn
-          (customize-set-variable 'line-number-mode (not line-number-mode))
-          (redraw-modeline))
-        :style toggle :selected line-number-mode]
-       ["Column Numbers"
-        (progn
-          (customize-set-variable 'column-number-mode
-                                  (not column-number-mode))
-          (redraw-modeline))
-        :style toggle :selected column-number-mode]
+       ["Bar cursor (2 pixels)"
+       (progn
+         (customize-set-variable 'bar-cursor 2)
+         (force-cursor-redisplay))
+       :style radio
+       :selected (and bar-cursor (not (eq bar-cursor t)))]
+       "------"
+       ["Line Numbers"
+       (progn
+         (customize-set-variable 'line-number-mode (not line-number-mode))
+         (redraw-modeline))
+       :style toggle :selected line-number-mode]
+       ["Column Numbers"
+       (progn
+         (customize-set-variable 'column-number-mode
+                                 (not column-number-mode))
+         (redraw-modeline))
+       :style toggle :selected column-number-mode]
        )
       ("Menubar Appearance"
        ["Buffers Menu Length..."
@@ -1142,11 +1142,16 @@ Sorts the buffers in alphabetical order by name, but puts buffers beginning
 with a star at the end of the list."
   (let* ((nam1 (buffer-name buf1))
         (nam2 (buffer-name buf2))
+        (inv1p (not (null (string-match "\\` " nam1))))
+        (inv2p (not (null (string-match "\\` " nam2))))
         (star1p (not (null (string-match "\\`*" nam1))))
         (star2p (not (null (string-match "\\`*" nam2)))))
-    (if (not (eq star1p star2p))
-       (not star1p)
-      (string-lessp nam1 nam2))))
+    (cond ((not (eq inv1p inv2p))
+          (not inv1p))
+         ((not (eq star1p star2p))
+          (not star1p))
+         (t
+          (string-lessp nam1 nam2)))))
 
 (defun sort-buffers-menu-by-mode-then-alphabetically (buf1 buf2)
   "For use as a value of `buffers-menu-sort-function'.
@@ -1154,15 +1159,23 @@ Sorts first by major mode and then alphabetically by name, but puts buffers
 beginning with a star at the end of the list."
   (let* ((nam1 (buffer-name buf1))
         (nam2 (buffer-name buf2))
+        (inv1p (not (null (string-match "\\` " nam1))))
+        (inv2p (not (null (string-match "\\` " nam2))))
         (star1p (not (null (string-match "\\`*" nam1))))
         (star2p (not (null (string-match "\\`*" nam2))))
         (mode1 (symbol-value-in-buffer 'major-mode buf1))
         (mode2 (symbol-value-in-buffer 'major-mode buf2)))
-    (cond ((not (eq star1p star2p)) (not star1p))
+    (cond ((not (eq inv1p inv2p))
+          (not inv1p))
+         ((not (eq star1p star2p))
+          (not star1p))
          ((and star1p star2p (string-lessp nam1 nam2)))
-         ((string-lessp mode1 mode2) t)
-         ((string-lessp mode2 mode1) nil)
-         (t (string-lessp nam1 nam2)))))
+         ((string-lessp mode1 mode2)
+          t)
+         ((string-lessp mode2 mode1)
+          nil)
+         (t
+          (string-lessp nam1 nam2)))))
 
 ;; this version is too slow on some machines.
 (defun slow-format-buffers-menu-line (buffer)
@@ -1544,4 +1557,4 @@ The menu is computed by combining `global-popup-menu' and `mode-popup-menu'."
 (provide 'x-menubar)
 (provide 'menubar-items)
 
-;;; x-menubar.el ends here.
+;;; menubar-items.el ends here.
index 9f26bc5..af83e9c 100644 (file)
@@ -77,10 +77,12 @@ t means to return a list of all possible completions of STRING.
 (defvar minibuffer-completion-confirm nil
   "Non-nil => demand confirmation of completion before exiting minibuffer.")
 
-(defvar minibuffer-confirm-incomplete nil
+(defcustom minibuffer-confirm-incomplete nil
   "If true, then in contexts where completing-read allows answers which
 are not valid completions, an extra RET must be typed to confirm the
-response.  This is helpful for catching typos, etc.")
+response.  This is helpful for catching typos, etc."
+  :type 'boolean
+  :group 'minibuffer)
 
 (defcustom completion-auto-help t
   "*Non-nil means automatically provide help for invalid completion input."
@@ -1248,7 +1250,9 @@ With prefix argument N, search for Nth previous match.
 If N is negative, find the next or Nth next match."
   (interactive
    (let ((enable-recursive-minibuffers t)
-        (minibuffer-history-sexp-flag nil))
+        (minibuffer-history-sexp-flag nil)
+        (minibuffer-max-depth (and minibuffer-max-depth
+                                   (1+ minibuffer-max-depth))))
      (if (eq 't (symbol-value minibuffer-history-variable))
         (error "History is not being recorded in this context"))
      (list (read-from-minibuffer "Previous element matching (regexp): "
@@ -1296,7 +1300,9 @@ With prefix argument N, search for Nth next match.
 If N is negative, find the previous or Nth previous match."
   (interactive
    (let ((enable-recursive-minibuffers t)
-        (minibuffer-history-sexp-flag nil))
+        (minibuffer-history-sexp-flag nil)
+        (minibuffer-max-depth (and minibuffer-max-depth
+                                   (1+ minibuffer-max-depth))))
      (if (eq t (symbol-value minibuffer-history-variable))
         (error "History is not being recorded in this context"))
      (list (read-from-minibuffer "Next element matching (regexp): "
@@ -1646,7 +1652,7 @@ only existing buffer names are allowed."
 This will prompt with a dialog box if appropriate, according to
  `should-use-dialog-box-p'.
 Value is not expanded---you must call `expand-file-name' yourself.
-Value is subject to interpreted by substitute-in-file-name however.
+Value is subject to interpretation by `substitute-in-file-name' however.
 Default name to DEFAULT if user enters a null string.
  (If DEFAULT is omitted, the visited file name is used,
   except that if INITIAL-CONTENTS is specified, that combined with DIR is
index ea16c56..778d2c9 100644 (file)
@@ -19,7 +19,7 @@
 ;; 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 
+;; along with XEmacs; see the file COPYING.  If not, write to the
 ;; Free Software Foundation, 59 Temple Place - Suite 330,
 ;; Boston, MA 02111-1307, USA.
 
@@ -59,11 +59,36 @@ buffer list and clicking on the right half cycles backward."
   :type 'boolean
   :group 'modeline)
 
+(defcustom modeline-scrolling-method nil
+  "*If non-nil, dragging the modeline with the mouse may also scroll its
+text horizontally (vertical motion controls window resizing and horizontal
+motion controls modeline scrolling).
+
+With a value of t, the modeline text is scrolled in the same direction as
+the mouse motion. With a value of 'scrollbar, the modeline is considered as
+a scrollbar for its own text, which then moves in the opposite direction."
+  :type '(choice (const :tag "none" nil)
+                (const :tag "text" t)
+                (const :tag "scrollbar" scrollbar))
+  :set (lambda (sym val)
+        (set-default sym val)
+        (when (featurep 'x)
+          (cond ((eq val t)
+                 (set-glyph-image modeline-pointer-glyph "hand2" 'global 'x))
+                ((eq val 'scrollbar)
+                 (set-glyph-image modeline-pointer-glyph "fleur" 'global 'x))
+                (t
+                 (set-glyph-image modeline-pointer-glyph "sb_v_double_arrow"
+                                  'global 'x)))))
+  :group 'modeline)
+
 (defun mouse-drag-modeline (event)
   "Resize a window by dragging its modeline.
 This command should be bound to a button-press event in modeline-map.
 Holding down a mouse button and moving the mouse up and down will
-make the clicked-on window taller or shorter."
+make the clicked-on window taller or shorter.
+
+See also the variable `modeline-scrolling-method'."
   (interactive "e")
   (or (button-press-event-p event)
       (error "%s must be invoked by a mouse-press" this-command))
@@ -79,9 +104,9 @@ make the clicked-on window taller or shorter."
          (start-event-frame (event-frame event))
          (start-event-window (event-window event))
          (start-nwindows (count-windows t))
-;;       (hscroll-delta (face-width 'modeline))
-;;       (start-hscroll (modeline-hscroll (event-window event)))
-;        (start-x-pixel (event-x-pixel event))
+         (hscroll-delta (face-width 'modeline))
+         (start-hscroll (modeline-hscroll (event-window event)))
+         (start-x-pixel (event-x-pixel event))
          (last-timestamp 0)
          default-line-height
          modeline-height
@@ -141,7 +166,9 @@ make the clicked-on window taller or shorter."
               ;; scroll) nore Y pos (modeline drag) have changed.
               (and modeline-click-swaps-buffers
                    (= depress-line (event-y event))
-;;                 (= start-hscroll (modeline-hscroll start-event-window))
+                   (or (not modeline-scrolling-method)
+                       (= start-hscroll
+                          (modeline-hscroll start-event-window)))
                    (modeline-swap-buffers event)))
              ((button-event-p event)
               (setq done t))
@@ -153,11 +180,14 @@ make the clicked-on window taller or shorter."
                  drag-divider-event-lag)
               nil)
              (t
-;;              (set-modeline-hscroll start-event-window
-;;                                    (+ (/ (- (event-x-pixel event) 
-;;                                             start-x-pixel)
-;;                                          hscroll-delta)
-;;                                       start-hscroll))
+              (when modeline-scrolling-method
+                (let ((delta (/ (- (event-x-pixel event) start-x-pixel)
+                                hscroll-delta)))
+                  (set-modeline-hscroll start-event-window
+                                        (if (eq modeline-scrolling-method t)
+                                            (- start-hscroll delta)
+                                          (+ start-hscroll delta)))
+                  ))
               (setq last-timestamp (event-timestamp event)
                     y (event-y-pixel event)
                     edges (window-pixel-edges start-event-window)
@@ -263,7 +293,7 @@ the buffer of the window whose modeline was clicked upon.")
 (make-face 'modeline-mousable "Face for mousable portions of the modeline.")
 (set-face-parent 'modeline-mousable 'modeline nil '(default))
 (when (featurep 'window-system)
-  (set-face-foreground 'modeline-mousable 
+  (set-face-foreground 'modeline-mousable
                       '(((default color x) . "firebrick")
                         ((default color mswindows) . "firebrick"))
                         'global))
@@ -307,7 +337,7 @@ in the list takes precedence.")
                       '(((default color x) . "green4")
                         ((default color x) . "forestgreen")
                         ((default color mswindows) . "green4")
-                        ((default color mswindows) . "forestgreen")) 
+                        ((default color mswindows) . "forestgreen"))
                       'global))
 
 (defvar modeline-mousable-minor-mode-extent (make-extent nil nil)
@@ -391,7 +421,7 @@ Example: (add-minor-mode 'view-minor-mode \" View\" view-mode-map)"
               name)))
        (if (setq el (assq toggle minor-mode-alist))
            (setcdr el (list hacked-name))
-         (funcall add-elt 
+         (funcall add-elt
                   (list toggle hacked-name)
                   'minor-mode-alist))))
     (when keymap
@@ -508,7 +538,7 @@ parentheses on the modeline."
           "Face for the buffer ID string in the modeline.")
 (set-face-parent 'modeline-buffer-id 'modeline nil '(default))
 (when (featurep 'window-system)
-  (set-face-foreground 'modeline-buffer-id 
+  (set-face-foreground 'modeline-buffer-id
                       '(((default color x) . "blue4")
                         ((default color mswindows) . "blue4"))
                       'global))
@@ -521,7 +551,7 @@ parentheses on the modeline."
 (defvar modeline-buffer-id-extent (make-extent nil nil)
   "Extent covering the whole of the buffer-id string.")
 (set-extent-face modeline-buffer-id-extent 'modeline-buffer-id)
-  
+
 (defvar modeline-buffer-id-left-extent (make-extent nil nil)
 "Extent covering the left half of the buffer-id string.")
 (set-extent-keymap modeline-buffer-id-left-extent
index ea10c61..07261fd 100644 (file)
@@ -168,11 +168,15 @@ This sets the following coding systems:
   ;;(setq default-keyboard-coding-system coding-system)
   (setq keyboard-coding-system coding-system)
   ;;(setq default-process-coding-system (cons coding-system coding-system))
+  ;; Refer to coding-system-for-read and coding-system-for-write
+  ;; so that C-x RET c works.
   (add-hook 'comint-exec-hook
            `(lambda ()
               (let ((proc (get-buffer-process (current-buffer))))
-                (set-process-input-coding-system  proc ',coding-system)
-                (set-process-output-coding-system proc ',coding-system)))
+                (set-process-input-coding-system
+                 proc (or coding-system-for-read ',coding-system))
+                (set-process-output-coding-system
+                 proc (or coding-system-for-write ',coding-system))))
            'append)
   (setq file-name-coding-system coding-system))
 
index 9b4906e..2a411dd 100644 (file)
@@ -163,8 +163,8 @@ If each element of LIST is not a string, it is converted to string
 (defalias 'sref 'aref)
 (defalias 'map-char-concat 'mapcar)
 (defun char-bytes (character)
-  "Return number of length a CHARACTER occupies in a string or buffer.
-It returns only 1 in XEmacs.  It is for compatibility with MULE 2.3."
+  "Return number of bytes a CHARACTER occupies in a string or buffer.
+It always returns 1 in XEmacs.  It is for compatibility with MULE 2.3."
   1)
 (defalias 'char-length 'char-bytes)
 
@@ -208,19 +208,6 @@ because its `find-charset-string' ignores ASCII charset."
 ;      (cons charset dest)
 ;      ))))
 
-(defun char-octet (ch &optional n)
-  "Return the octet numbered N (should be 0 or 1) of char CH.
-N defaults to 0 if omitted."
-  (let ((split (split-char ch)))
-    (setq n (or n 0))
-    (cond ((eq n 0)
-          (nth 1 split))
-         ((eq n 1)
-          (nth 2 split))
-         (t (error "n must be 0 or 1")))))
-;; Made obsolete June 15, 1999.  Delete ASAP.
-(make-obsolete 'char-octet "Use split-char")
-
 ;(defun split-char-or-char-int (char)
 ;  "Return list of charset and one or two position-codes of CHAR.
 ;CHAR must be character or integer."
index 0e3d478..db05e32 100644 (file)
@@ -321,7 +321,7 @@ Ouput via `process-send-string' and input via buffer or filter (see
 `set-process-filter') are stream-oriented.  That means UDP datagrams are
 not guaranteed to be sent and received in discrete packets. (But small
 datagrams around 500 bytes that are not truncated by `process-send-string'
-are usually fine.)  Note further that UDP protocol does not guard against 
+are usually fine.)  Note further that UDP protocol does not guard against
 lost packets."
   (open-network-stream-internal name buffer host service protocol))
 
@@ -342,13 +342,11 @@ lost packets."
                start (1+ end)))
        (concat result (substring argument start))))))
 
-(defun exec-to-string (command)
-  "Execute COMMAND as an external process and return the output of that
-process as a string"
-  ;; by "William G. Dubuque" <wgd@zurich.ai.mit.edu>
+(defun shell-command-to-string (command)
+  "Execute shell command COMMAND and return its output as a string."
   (with-output-to-string
     (call-process shell-file-name nil t nil shell-command-switch command)))
 
-(defalias 'shell-command-to-string 'exec-to-string)
+(defalias 'exec-to-string 'shell-command-to-string)
 
 ;;; process.el ends here
index 68ce03a..54d0902 100644 (file)
@@ -30,7 +30,7 @@
 
 ;; This file is dumped with XEmacs.
 
-;; -batch, -t, and -nw are processed by main() in emacs.c and are 
+;; -batch, -t, and -nw are processed by main() in emacs.c and are
 ;; never seen by lisp code.
 
 ;; -version and -help are special-cased as well: they imply -batch,
@@ -395,11 +395,11 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
 
       (setq emacs-roots (paths-find-emacs-roots invocation-directory
                                                invocation-name))
-    
+
       (if debug-paths
          (princ (format "emacs-roots:\n%S\n" emacs-roots)
                 'external-debugging-output))
-    
+
       (if (null emacs-roots)
          (startup-find-roots-warning)
        (startup-setup-paths emacs-roots
@@ -418,7 +418,7 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
                 (file-name-sans-extension autoload-file-name)
                 (expand-file-name "utf-2000" lisp-directory))
                nil t)))
-    
+
     (if (not inhibit-autoloads)
        (progn
          (if (not inhibit-early-packages)
@@ -500,7 +500,7 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
   ;;              (and (not (equal string "")) string)))))
   ;;   (and ctype
   ;;        (string-match iso-8859-1-locale-regexp ctype)))
-  ;;      (progn 
+  ;;      (progn
   ;;   (standard-display-european t)
   ;;   (require 'iso-syntax)))
 
@@ -602,7 +602,7 @@ If this is nil, no message will be displayed.")
 
     ;;; Load init files.
     (load-init-file)
-    
+
     (with-current-buffer (get-buffer "*scratch*")
       (erase-buffer)
       ;; (insert initial-scratch-message)
@@ -627,7 +627,7 @@ If this is nil, no message will be displayed.")
     ;; If -batch, terminate after processing the command options.
     (when (noninteractive) (kill-emacs t))))
 
-(defun load-terminal-library ()              
+(defun load-terminal-library ()
   (when term-file-prefix
     (let ((term (getenv "TERM"))
          hyphend)
@@ -790,7 +790,7 @@ a new format, when variables have changed, etc."
          (setq end-of-options t))
         (t
          (setq file-p t)))
-       
+
        (when file-p
          (setq file-p nil)
          (incf file-count)
@@ -828,7 +828,7 @@ a new format, when variables have changed, etc."
               (setq e (read-key-sequence
                        (let ((p (keymap-prompt map t)))
                          (cond ((symbolp map)
-                                (if p 
+                                (if p
                                     (format "%s %s " map p)
                                   (format "%s " map)))
                                (p)
@@ -907,7 +907,7 @@ a new format, when variables have changed, etc."
 (defun startup-center-spaces (glyph)
   ;; Return the number of spaces to insert in order to center
   ;; the given glyph (may be a string or a pixmap).
-  ;; Assume spaces are as wide as avg-pixwidth.  
+  ;; Assume spaces are as wide as avg-pixwidth.
   ;; Won't be quite right for proportional fonts, but it's the best we can do.
   ;; Maybe the new redisplay will export something a glyph-width function.
   ;;; #### Yes, there is a glyph-width function but it isn't quite what
@@ -918,7 +918,7 @@ a new format, when variables have changed, etc."
   ;; This function is used in about.el too.
   (let* ((avg-pixwidth     (round (/ (frame-pixel-width) (frame-width))))
         (fill-area-width  (* avg-pixwidth (- fill-column left-margin)))
-        (glyph-pixwidth   (cond ((stringp glyph) 
+        (glyph-pixwidth   (cond ((stringp glyph)
                                  (* avg-pixwidth (length glyph)))
                                 ;; #### the pixmap option should be removed
                                 ;;((pixmapp glyph)
@@ -938,12 +938,12 @@ a new format, when variables have changed, etc."
           `( "\
 Sun provides support for the WorkShop/XEmacs integration package only.
 All other XEmacs packages are provided to you \"AS IS\".\n"
-             ,@(let ((lang (or (getenv "LC_ALL") (getenv "LC_MESSAGES") 
+             ,@(let ((lang (or (getenv "LC_ALL") (getenv "LC_MESSAGES")
                                (getenv "LANG"))))
                  (if (and
                       (not (featurep 'mule)) ;; Already got mule?
                       ;; No Mule support on tty's yet
-                      (not (eq 'tty (console-type))) 
+                      (not (eq 'tty (console-type)))
                       lang ;; Non-English locale?
                       (not (string= lang "C"))
                       (not (string-match "^en" lang))
@@ -955,7 +955,7 @@ To handle other languages you need to run a Multi-lingual (`Mule') version of
 XEmacs, by either running the command `xemacs-mule', or by using the X resource
 `ESERVE*defaultXEmacsPath: xemacs-mule' when starting XEmacs from Sun WorkShop.
 \n")))))
-     ((key describe-no-warranty) 
+     ((key describe-no-warranty)
       ": "(face (red bold) "XEmacs comes with ABSOLUTELY NO WARRANTY\n"))
      ((key describe-copying)
       ": conditions to give out copies of XEmacs\n")
@@ -964,16 +964,17 @@ XEmacs, by either running the command `xemacs-mule', or by using the X resource
      "\n--\n"
      (face italic "\
 Copyright (C) 1985-1999 Free Software Foundation, Inc.
-Copyright (C) 1995-1999 Electrotechnical Laboratory, JAPAN.
 Copyright (C) 1990-1994 Lucid, Inc.
 Copyright (C) 1993-1997 Sun Microsystems, Inc. All Rights Reserved.
 Copyright (C) 1994-1996 Board of Trustees, University of Illinois
-Copyright (C) 1995-1996 Ben Wing\n"))
+Copyright (C) 1995-1996 Ben Wing
+Copyright (C) 1996-2000 MORIOKA Tomohiko
+"))
 
     ((face (blue bold underline) "\nInformation, on-line help:\n\n")
      "XEmacs comes with plenty of documentation...\n\n"
      ,@(if (string-match "beta" emacs-version)
-          `((key describe-beta) 
+          `((key describe-beta)
             ": " (face (red bold)
                        "This is an Experimental version of XEmacs.\n"))
         `( "\n"))
@@ -1002,7 +1003,7 @@ Copyright (C) 1995-1996 Ben Wing\n"))
 ;  "If non-nil, function called to provide the startup logo.
 ;This function should return an initialized glyph if it is used.")
 
-;; This will hopefully go away when gettext is functionnal.
+;; This will hopefully go away when gettext is functional.
 (defconst splash-frame-static-body
   `(,(emacs-version) "\n\n"
     (face italic "`C-' means the control key,`M-' means the meta key\n\n")))
@@ -1134,7 +1135,7 @@ It's idempotent, so call this as often as you like!"
        (paths-construct-info-path roots
                                   early-packages late-packages last-packages))
 
-  
+
   (if debug-paths
       (princ (format "Info-directory-list:\n%S\n" Info-directory-list)
             'external-debugging-output))
@@ -1143,7 +1144,7 @@ It's idempotent, so call this as often as you like!"
       (progn
        (setq lock-directory (paths-find-lock-directory roots))
        (setq superlock-file (paths-find-superlock-file lock-directory))
-       
+
        (if debug-paths
            (progn
              (princ (format "lock-directory:\n%S\n" lock-directory)
@@ -1164,7 +1165,7 @@ It's idempotent, so call this as often as you like!"
   (if debug-paths
       (princ (format "exec-path:\n%S\n" exec-path)
             'external-debugging-output))
-  
+
   (setq doc-directory (paths-find-doc-directory roots))
 
   (if debug-paths
index 655f241..8e6ab44 100644 (file)
@@ -1,3 +1,27 @@
+2000-01-18  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.27 is released.
+
+2000-01-15  Andy Piper  <andy@xemacs.org>
+
+       * lwlib-Xlw.c (lw_update_one_widget): make sure global
+       properties gets set.
+
+2000-01-07  Martin Buchholz  <martin@xemacs.org>
+
+       * config.h.in (ATHENA_INCLUDE): CPP trickery to make old cpps happy.
+       This extends support for gcc 2.6 (e.g. on BSD/OS 2.0)
+
+       * lwlib.c: Fix up memset calls.
+
+       * lwlib-Xm.c (xm_update_text): Warning suppression.
+       (xm_update_text_field): Warning suppression.
+
+2000-01-03  Martin Buchholz  <martin@xemacs.org>
+
+       * lwlib-Xaw.c (xaw_update_one_widget): Emergency fix for this crash:
+       (yes-or-no-p-dialog-box "Yes or No")
+
 1999-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.26 is released.
index d94cb09..de51ba5 100644 (file)
@@ -32,9 +32,12 @@ Boston, MA 02111-1307, USA.  */
 /* The path to the Athena widgets - the usual value is `X11/Xaw' */
 #undef ATHENA_H_PATH
 
-/* For use in #include statements.  This extra level of macro indirection
-   is necessary because you can't use macros directly within <> or "" */
-#define ATHENA_INCLUDE(header_file) <ATHENA_H_PATH/header_file>
+/* For use in #include statements.
+   You can't use macros directly within the <> of a #include statement.
+   The multiply nested macros are necessary to make old gcc's happy. */
+#define INCLUDE_GLUE_2(dirname,basename) <##dirname##/##basename##>
+#define INCLUDE_GLUE_1(dirname,basename) INCLUDE_GLUE_2(dirname,basename)
+#define ATHENA_INCLUDE(header_file) INCLUDE_GLUE_1(ATHENA_H_PATH,header_file)
 
 
 #endif /* _LWLIB_CONFIG_H_ */
index 77aeb48..5329976 100644 (file)
@@ -146,7 +146,7 @@ xaw_update_one_widget (widget_instance *instance, Widget widget,
       }
 #endif /* LWLIB_DIALOGS_ATHENA */
 #ifdef LWLIB_WIDGETS_ATHENA
-  else if (XtIsSubclass (widget, labelWidgetClass))
+  else if (XtClass (widget) == labelWidgetClass)
       {
        Arg al [1];
        XtSetArg (al [0], XtNlabel, val->value);
index 8063c7c..e4e91d6 100644 (file)
@@ -536,6 +536,9 @@ xlw_update_one_widget (widget_instance* instance, Widget widget,
                       widget_value* val, Boolean deep_p)
 {
   WidgetClass class = XtClass (widget);
+  /* Update up global arg values. */
+  if (val->args && val->args->nargs)
+    XtSetValues (widget, val->args->args, val->args->nargs);
 
   if (0)
     ;
index 85db133..99db011 100644 (file)
@@ -680,7 +680,7 @@ xm_update_menu (widget_instance* instance, Widget widget, widget_value* val,
 static void
 xm_update_text (widget_instance* instance, Widget widget, widget_value* val)
 {
-  XmTextSetString (widget, val->value ? val->value : "");
+  XmTextSetString (widget, val->value ? val->value : (char *) "");
   XtRemoveAllCallbacks (widget, XmNactivateCallback);
   XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance);
   XtRemoveAllCallbacks (widget, XmNvalueChangedCallback);
@@ -692,7 +692,7 @@ static void
 xm_update_text_field (widget_instance* instance, Widget widget,
                      widget_value* val)
 {
-  XmTextFieldSetString (widget, val->value ? val->value : "");
+  XmTextFieldSetString (widget, val->value ? val->value : (char *) "");
   XtRemoveAllCallbacks (widget, XmNactivateCallback);
   XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance);
   XtRemoveAllCallbacks (widget, XmNvalueChangedCallback);
index f55f092..1ecef08 100644 (file)
@@ -111,7 +111,7 @@ malloc_widget_value (void)
     }
   if (wv)
     {
-      memset (wv, 0, sizeof (widget_value));
+      memset (wv, '\0', sizeof (widget_value));
     }
   return wv;
 }
@@ -188,7 +188,7 @@ copy_scrollbar_values (widget_value *val, widget_value *copy)
   if (val->scrollbar_data)
     *copy->scrollbar_data = *val->scrollbar_data;
   else
-    memset (copy->scrollbar_data, 0, sizeof (scrollbar_values));
+    memset (copy->scrollbar_data, '\0', sizeof (scrollbar_values));
 }
 
 /*
@@ -358,7 +358,7 @@ free_widget_info (widget_info *info)
   safe_free_str (info->type);
   safe_free_str (info->name);
   free_widget_value_tree (info->val);
-  memset ((void*)info, 0xDEADBEEF, sizeof (widget_info));
+  memset (info, '\0', sizeof (widget_info));
   free (info);
 }
 
@@ -393,7 +393,7 @@ allocate_widget_instance (widget_info *info, Widget parent, Boolean pop_up_p)
 static void
 free_widget_instance (widget_instance *instance)
 {
-  memset ((void *) instance, 0xDEADBEEF, sizeof (widget_instance));
+  memset (instance, '\0', sizeof (widget_instance));
   free (instance);
 }
 
@@ -1368,11 +1368,11 @@ void lw_add_widget_value_arg (widget_value* wv, String name, XtArgVal value)
   if (!wv->args)
     {
       wv->args = (widget_args *) malloc (sizeof (widget_args));
-      memset (wv->args, 0, sizeof (widget_args));
+      memset (wv->args, '\0', sizeof (widget_args));
       wv->args->ref_count = 1;
       wv->args->nargs = 0;
       wv->args->args = (ArgList) malloc (sizeof (Arg) * 10);
-      memset (wv->args->args, 0, sizeof (Arg) * 10);
+      memset (wv->args->args, '\0', sizeof (Arg) * 10);
     }
   
   if (wv->args->nargs > 10)
index a163690..cefb9e8 100644 (file)
@@ -1,3 +1,78 @@
+2000-01-18  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.27 is released.
+
+2000-01-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * xemacs/regs.texi: Synch with FSF 20.5.
+
+2000-01-14  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * info.texi: Change cross reference from emacs to xemacs.
+
+2000-01-14  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * xemacs/mini.texi: Synch with FSF 20.5.  Update.
+
+2000-01-16  Martin Buchholz  <martin@xemacs.org>
+
+       * xemacs-faq.texi (Q2.1.15): Fix up @table formatting.
+
+2000-01-14  Martin Buchholz  <martin@xemacs.org>
+
+       * xemacs-faq.texi (Q2.1.15): Update dbx/gdb debugging info.
+
+2000-01-14  Sandra Wambold  <wambold@xemacs.org>
+
+       * xemacs-faq.texi: removed out-of-date XEmacs 19 questions.
+
+2000-01-14  Sandra Wambold  <wambold@xemacs.org>
+
+       * xemacs-faq.texi: Updated Macintosh information,
+       updated OS/2 info, changed turn-on-pending-delete answer.
+
+2000-01-08  Martin Buchholz  <martin@xemacs.org>
+
+       * xemacs-faq.texi (Q2.1.15): Make debugging info current.
+
+2000-01-08  Hrvoje Niksic  <hniksic@iskon.hr>
+
+       * lispref/control.texi (Signaling Errors): Document that `signal'
+       is continuable.
+       (Signaling Errors): Document `cerror', `signal-error', and
+       `check-argument-type'.
+       (Handling Errors): Mention `debug-on-signal'.
+       (Error Symbols): Document `define-error'.
+       (Processing of Errors): Document `display-error' and
+       `error-message-string'.
+
+2000-01-05  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * internals/internals.texi: Remove latin-1 char.
+
+2000-01-05  Didier Verna  <didier@xemacs.org>
+
+       * xemacs/custom.texi (Key bindings using strings): add missing
+       whitespace.
+
+       * xemacs/xemacs.texi (Top):
+       * new-users-guide/new-users-guide.texi (Top): add missing `@top'
+       node.
+
+1999-12-24  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * lispref/minibuf.texi (Reading a Password): New section.
+
+1999-12-21  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * lispref/minibuf.texi: Remove documentation about
+       minibuffer-local-ns-map, read-no-blanks-input.
+
+1999-12-21  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * lispref/minibuf.texi: Partial Synch with FSF manual.
+       Add description about DEFAULT argument of reading functions.
+
 1999-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.26 is released.
index e9eab51..bd827ee 100644 (file)
@@ -3,7 +3,7 @@
 @setfilename ../info/info.info
 @settitle Info
 @comment %**end of header
-@comment $Id: info.texi,v 1.4.2.3 1999/12/05 19:02:24 martinb Exp $
+@comment $Id: info.texi,v 1.4.2.4 2000/01/18 07:27:42 yoshiki Exp $
 
 @dircategory Texinfo documentation system
 @direntry
@@ -855,9 +855,10 @@ node of the file with Emacs Info mode.
 
 The following variables may modify the behaviour of Info-mode in Emacs;
 you may wish to set one or several of these variables interactively, or
-in your @file{~/.emacs} init file.  @xref{Examining, Examining and Setting
-Variables, Examining and Setting Variables, emacs, The GNU Emacs
-Manual}.
+in your @file{~/.emacs} init file.  @xref{Examining, Examining and
+Setting Variables, Examining and Setting Variables, xemacs, XEmacs
+User's Manual}.
+
 
 @vtable @code
 @item Info-enable-edit
index f738f74..81b32d4 100644 (file)
@@ -2650,8 +2650,8 @@ Unfortunately, Emacs Lisp is slow, and is going to stay slow.  Function
 calls in elisp are especially expensive.  Iterating over a long list is
 going to be 30 times faster implemented in C than in Elisp.
 
-To get started debugging XEmacs, take a look at the @file{gdbinit} and
-@file{dbxrc} files in the @file{src} directory.
+To get started debugging XEmacs, take a look at the @file{.gdbinit} and
+@file{.dbxrc} files in the @file{src} directory.
 @xref{Q2.1.15 - How to Debug an XEmacs problem with a debugger,,,
 xemacs-faq, XEmacs FAQ}.
 
@@ -4993,7 +4993,7 @@ The first thing that is checked while marking an object is whether the
 object is a real Lisp object @code{Lisp_Type_Record} or just an integer
 or a character. Integers and characters are the only two types that are
 stored directly - without another level of indirection, and therefore they
-don´t have to be marked and collected. 
+don't have to be marked and collected. 
 @xref{How Lisp Objects Are Represented in C}.
 
 The second case is the one we have to handle. It is the one when we are
@@ -5033,7 +5033,7 @@ bulkier objects are allocated and handled using that scheme of
 @code{lcrecords}. Each object is @code{malloc}ed separately
 instead of placing it in one of the contiguous frob blocks. All types
 that are currently stored 
-using @code{lcrecords}´s  @code{alloc_lcrecord} and
+using @code{lcrecords}'s  @code{alloc_lcrecord} and
 @code{make_lcrecord_list} are the types: vectors, buffers,
 char-table, char-table-entry, console, weak-list, database, device,
 ldap, hash-table, command-builder, extent-auxiliary, extent-info, face,
index 5ea470f..4588d48 100644 (file)
@@ -662,7 +662,7 @@ instead.  @xref{Catch and Throw}.
 which you call for other purposes, such as if you try to take the
 @sc{car} of an integer or move forward a character at the end of the
 buffer; you can also signal errors explicitly with the functions
-@code{error} and @code{signal}.
+@code{error}, @code{signal}, and others.
 
   Quitting, which happens when the user types @kbd{C-g}, is not 
 considered an error, but it is handled almost like an error.
@@ -673,6 +673,11 @@ This function signals an error with an error message constructed by
 applying @code{format} (@pxref{String Conversion}) to
 @var{format-string} and @var{args}.
 
+This error is not continuable: you cannot continue execution after the
+error using the debugger @kbd{r} or @kbd{c} commands.  If you wish the
+user to be able to continue execution, use @code{cerror} or
+@code{signal} instead.
+
 These examples show typical uses of @code{error}:
 
 @example
@@ -691,7 +696,8 @@ These examples show typical uses of @code{error}:
 
 @code{error} works by calling @code{signal} with two arguments: the
 error symbol @code{error}, and a list containing the string returned by
-@code{format}.
+@code{format}.  This is repeated in an endless loop, to ensure that
+@code{error} never returns.
 
 If you want to use your own string as an error message verbatim, don't
 just write @code{(error @var{string})}.  If @var{string} contains
@@ -699,10 +705,16 @@ just write @code{(error @var{string})}.  If @var{string} contains
 results.  Instead, use @code{(error "%s" @var{string})}.
 @end defun
 
+@defun cerror format-string &rest args
+This function behaves like @code{error}, except that the error it
+signals is continuable.  That means that debugger commands @kbd{c} and
+@kbd{r} can resume execution.
+@end defun
+
 @defun signal error-symbol data
-This function signals an error named by @var{error-symbol}.  The
-argument @var{data} is a list of additional Lisp objects relevant to the
-circumstances of the error.
+This function signals a continuable error named by @var{error-symbol}.
+The argument @var{data} is a list of additional Lisp objects relevant to
+the circumstances of the error.
 
 The argument @var{error-symbol} must be an @dfn{error symbol}---a symbol
 bearing a property @code{error-conditions} whose value is a list of
@@ -710,9 +722,9 @@ condition names.  This is how XEmacs Lisp classifies different sorts of
 errors.
 
 The number and significance of the objects in @var{data} depends on
-@var{error-symbol}.  For example, with a @code{wrong-type-arg} error,
-there are two objects in the list: a predicate that describes the type
-that was expected, and the object that failed to fit that type.
+@var{error-symbol}.  For example, with a @code{wrong-type-argument}
+error, there are two objects in the list: a predicate that describes the
+type that was expected, and the object that failed to fit that type.
 @xref{Error Symbols}, for a description of error symbols.
 
 Both @var{error-symbol} and @var{data} are available to any error
@@ -721,8 +733,10 @@ variable to a list of the form @code{(@var{error-symbol} .@:
 @var{data})} (@pxref{Handling Errors}).  If the error is not handled,
 these two values are used in printing the error message.
 
-The function @code{signal} never returns (though in older Emacs versions
-it could sometimes return).
+The function @code{signal} can return, if the debugger is invoked and
+the user invokes the ``return from signal'' option.  If you want the
+error not to be continuable, use @code{signal-error} instead.  Note that
+in FSF Emacs @code{signal} never returns.
 
 @smallexample
 @group
@@ -731,17 +745,42 @@ it could sometimes return).
 @end group
 
 @group
-(signal 'no-such-error '("My unknown error condition."))
-     @error{} peculiar error: "My unknown error condition."
+(signal 'no-such-error '("My unknown error condition"))
+     @error{} Peculiar error (no-such-error "My unknown error condition")
 @end group
 @end smallexample
 @end defun
 
-@cindex CL note---no continuable errors
-@quotation
-@b{Common Lisp note:} XEmacs Lisp has nothing like the Common Lisp
-concept of continuable errors.
-@end quotation
+@defun signal-error error-symbol data
+This function behaves like @code{signal}, except that the error it
+signals is not continuable.
+@end defun
+
+@defmac check-argument-type predicate argument
+This macro checks that @var{argument} satisfies @var{predicate}.  If
+that is not the case, it signals a continuable
+@code{wrong-type-argument} error until the returned value satisfies
+@var{predicate}, and assigns the returned value to @var{argument}.  In
+other words, execution of the program will not continue until
+@var{predicate} is met.
+
+@var{argument} is not evaluated, and should be a symbol.
+@var{predicate} is evaluated, and should name a function.
+
+As shown in the following example, @code{check-argument-type} is useful
+in low-level code that attempts to ensure the sanity of its data before
+proceeding.
+
+@example
+@group
+(defun cache-object-internal (object wlist)
+  ;; @r{Before doing anything, make sure that @var{wlist} is indeed}
+  ;; @r{a weak list, which is what we expect.}
+  (check-argument-type 'weak-list-p wlist)
+  @dots{})
+@end group
+@end example
+@end defmac
 
 @node Processing of Errors
 @subsubsection How XEmacs Processes Errors
@@ -761,6 +800,27 @@ command loop has an implicit handler for all kinds of errors.  The
 command loop's handler uses the error symbol and associated data to
 print an error message.
 
+Errors in command loop are processed using the @code{command-error}
+function, which takes care of some necessary cleanup, and prints a
+formatted error message to the echo area.  The functions that do the
+formatting are explained below.
+
+@defun display-error error-object stream
+This function displays @var{error-object} on @var{stream}.
+@var{error-object} is a cons of error type, a symbol, and error
+arguments, a list.  If the error type symbol of one of its error
+condition superclasses has an @code{display-error} property, that
+function is invoked for printing the actual error message.  Otherwise,
+the error is printed as @samp{Error: arg1, arg2, ...}.
+@end defun
+
+@defun error-message-string error-object
+This function converts @var{error-object} to an error message string,
+and returns it.  The message is equivalent to the one that would be
+printed by @code{display-error}, except that it is conveniently returned
+in string form.
+@end defun
+
 @cindex @code{debug-on-error} use
 An error that has no explicit handler may call the Lisp debugger.  The
 debugger is enabled if the variable @code{debug-on-error} (@pxref{Error
@@ -834,6 +894,13 @@ predictable, such as failure to open a file in a call to
 totally unpredictable, such as when the program evaluates an expression
 read from the user.
 
+@cindex @code{debug-on-signal} use
+  Even when an error is handled, the debugger may still be called if the
+variable @code{debug-on-signal} (@pxref{Error Debugging}) is
+non-@code{nil}.  Note that this may yield unpredictable results with
+code that traps expected errors as normal part of its operation.  Do not
+set @code{debug-on-signal} unless you know what you are doing.
+
   Error signaling and handling have some resemblance to @code{throw} and
 @code{catch}, but they are entirely separate facilities.  An error
 cannot be caught by a @code{catch}, and a @code{throw} cannot be handled
@@ -917,7 +984,9 @@ message and returns a very large number.
 @end smallexample
 
 @noindent
-The handler specifies condition name @code{arith-error} so that it will handle only division-by-zero errors.  Other kinds of errors will not be handled, at least not by this @code{condition-case}.  Thus,
+The handler specifies condition name @code{arith-error} so that it will
+handle only division-by-zero errors.  Other kinds of errors will not be
+handled, at least not by this @code{condition-case}.  Thus,
 
 @smallexample
 @group
@@ -972,43 +1041,49 @@ one or more condition names: @code{error}, the error symbol if that
 is distinct from @code{error}, and perhaps some intermediate
 classifications.
 
-  In order for a symbol to be an error symbol, it must have an
-@code{error-conditions} property which gives a list of condition names.
-This list defines the conditions that this kind of error belongs to.
-(The error symbol itself, and the symbol @code{error}, should always be
-members of this list.)  Thus, the hierarchy of condition names is
-defined by the @code{error-conditions} properties of the error symbols.
-
-  In addition to the @code{error-conditions} list, the error symbol
-should have an @code{error-message} property whose value is a string to
-be printed when that error is signaled but not handled.  If the
-@code{error-message} property exists, but is not a string, the error
-message @samp{peculiar error} is used.
-@cindex peculiar error
+  In other words, each error condition @dfn{inherits} from another error
+condition, with @code{error} sitting at the top of the inheritance
+hierarchy.
+
+@defun define-error error-symbol error-message &optional inherits-from
+  This function defines a new error, denoted by @var{error-symbol}.
+@var{error-message} is an informative message explaining the error, and
+will be printed out when an unhandled error occurs.  @var{error-symbol}
+is a sub-error of @var{inherits-from} (which defaults to @code{error}).
+
+  @code{define-error} internally works by putting on @var{error-symbol}
+an @code{error-message} property whose value is @var{error-message}, and
+an @code{error-conditions} property that is a list of @var{error-symbol}
+followed by each of its super-errors, up to and including @code{error}.
+You will sometimes see code that sets this up directly rather than
+calling @code{define-error}, but you should @emph{not} do this yourself,
+unless you wish to maintain compatibility with FSF Emacs, which does not
+provide @code{define-error}.
+@end defun
 
-  Here is how we define a new error symbol, @code{new-error}:
+  Here is how we define a new error symbol, @code{new-error}, that
+belongs to a range of errors called @code{my-own-errors}:
 
 @example
 @group
-(put 'new-error
-     'error-conditions
-     '(error my-own-errors new-error))       
-@result{} (error my-own-errors new-error)
-@end group
-@group
-(put 'new-error 'error-message "A new error")
-@result{} "A new error"
+(define-error 'my-own-errors "A whole range of errors" 'error)
+(define-error 'new-error "A new error" 'my-own-errors)
 @end group
 @end example
 
 @noindent
-This error has three condition names: @code{new-error}, the narrowest
-classification; @code{my-own-errors}, which we imagine is a wider
-classification; and @code{error}, which is the widest of all.
+@code{new-error} has three condition names: @code{new-error}, the
+narrowest classification; @code{my-own-errors}, which we imagine is a
+wider classification; and @code{error}, which is the widest of all.
+
+  Note that it is not legal to try to define an error unless its
+super-error is also defined.  For instance, attempting to define
+@code{new-error} before @code{my-own-errors} are defined will signal an
+error.
 
   The error string should start with a capital letter but it should
 not end with a period.  This is for consistency with the rest of Emacs.
+
   Naturally, XEmacs will never signal @code{new-error} on its own; only
 an explicit call to @code{signal} (@pxref{Signaling Errors}) in your
 code can do this:
@@ -1044,6 +1119,8 @@ make it possible to categorize errors at various levels of generality
 when you write an error handler.  Using error symbols alone would
 eliminate all but the narrowest level of classification.
 
+  
+
   @xref{Standard Errors}, for a list of all the standard error symbols
 and their conditions.
 
index 72dd9eb..698d0ed 100644 (file)
@@ -95,6 +95,12 @@ happen in process filter functions and sentinels.  Therefore, these
 errors also can invoke the debugger.  @xref{Processes}.
 @end defopt
 
+@defopt debug-on-signal
+This variable is similar to @code{debug-on-error} but breaks
+whenever an error is signalled, regardless of whether it would be
+handled.
+@end defopt
+
 @defopt debug-ignored-errors
 This variable specifies certain kinds of errors that should not enter
 the debugger.  Its value is a list of error condition symbols and/or
@@ -124,12 +130,6 @@ this:
           '(lambda () (setq debug-on-error t)))
 @end example
 
-@defopt debug-on-signal
-This variable is similar to @code{debug-on-error} but breaks
-whenever an error is signalled, regardless of whether it would be
-handled.
-@end defopt
-
 @node Infinite Loops
 @subsection Debugging Infinite Loops
 @cindex infinite loops
index 3bed4da..2826aef 100644 (file)
@@ -60,9 +60,8 @@ are preserved on all copies.
 @page
 @ifinfo
 @node Top, Intro, (dir), (dir)
+@top The Emacs Editor
 
-The Emacs Editor
-****************
 
 Emacs is the extensible, customizable, self-documenting real-time
 display editor.  This Info file will help you get started on using 
index 65ef9d5..96e935b 100644 (file)
@@ -7,7 +7,7 @@
 @finalout
 @titlepage
 @title XEmacs FAQ
-@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1999/12/23 01:50:47 $
+@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2000/01/16 13:41:45 $
 @sp 1
 @author Tony Rossini <rossini@@biostat.washington.edu>
 @author Ben Wing <ben@@xemacs.org>
@@ -139,7 +139,6 @@ Getting Started:
 * Q1.4.4::      May I see an example of a useful XEmacs Lisp function?
 * Q1.4.5::      And how do I bind it to a key?
 * Q1.4.6::      What's the difference between a macro and a function?
-* Q1.4.7::      Why options saved with 19.13 don't work with 19.14 or later?
 
 Installation and Trouble Shooting
 
@@ -155,8 +154,6 @@ Installation and Trouble Shooting
 * Q2.0.10::     After I run configure I find a coredump, is something wrong?
 * Q2.0.11::     XEmacs can't resolve host names.
 * Q2.0.12::     Why can't I strip XEmacs?
-* Q2.0.13::     Can't link XEmacs on Solaris with Gcc.
-* Q2.0.14::     Make on HP/UX 9 fails after linking temacs
 
 Trouble Shooting:
 * Q2.1.1::      XEmacs just crashed on me!
@@ -176,10 +173,10 @@ Trouble Shooting:
 * Q2.1.15::     How to debug an XEmacs problem with a debugger.
 * Q2.1.16::     XEmacs crashes in @code{strcat} on HP/UX 10.
 * Q2.1.17::     @samp{Marker does not point anywhere}.
-* Q2.1.18::     19.14 hangs on HP/UX 10.10.
+* Q2.1.18::     [This question intentionally left blank]
 * Q2.1.19::     XEmacs does not follow the local timezone.
 * Q2.1.20::     @samp{Symbol's function definition is void: hkey-help-show.}
-* Q2.1.21::     Every so often the XEmacs frame freezes.
+* Q2.1.21::     [This question intentionally left blank]
 * Q2.1.22::     XEmacs seems to take a really long time to do some things.
 * Q2.1.23::     Movemail on Linux does not work for XEmacs 19.15 and later.
 * Q2.1.24::     XEmacs won't start without network. (NEW)
@@ -199,8 +196,8 @@ Customization and Options
 X Window System & Resources:
 * Q3.1.1::      Where is a list of X resources?
 * Q3.1.2::      How can I detect a color display?
-* Q3.1.3::      @code{(set-screen-width)} worked in 19.6, but not in 19.13?
-* Q3.1.4::      Specifying @code{Emacs*EmacsScreen.geometry} in @file{.emacs} does not work in 19.15?
+* Q3.1.3::      [This question intentionally left blank]
+* Q3.1.4::      [This question intentionally left blank]
 * Q3.1.5::      How can I get the icon to just say @samp{XEmacs}?
 * Q3.1.6::      How can I have the window title area display the full path?
 * Q3.1.7::      @samp{xemacs -name junk} doesn't work?
@@ -319,7 +316,7 @@ Infodock:
 Other Unbundled Packages:
 * Q4.7.1::      What is AUC TeX?  Where do you get it?
 * Q4.7.2::      Are there any Emacs Lisp Spreadsheets?
-* Q4.7.3::      Byte compiling AUC TeX on XEmacs 19.14
+* Q4.7.3::      [This question intentionally left blank]
 * Q4.7.4::      Problems installing AUC TeX
 * Q4.7.5::      Is there a reason for an Emacs package not to be included in XEmacs?
 * Q4.7.6::      Is there a MatLab mode?
@@ -336,14 +333,14 @@ The Miscellaneous Stuff
 * Q5.0.8::      Why does edt emulation not work?
 * Q5.0.9::      How can I emulate VI and use it as my default mode?
 * Q5.0.10::     [This question intentionally left blank]
-* Q5.0.11::     Filladapt doesn't work in 19.15?
+* Q5.0.11::     How do I turn on filladapt for all buffers?
 * Q5.0.12::     How do I disable gnuserv from opening a new frame?
 * Q5.0.13::     How do I start gnuserv so that each subsequent XEmacs is a client?
 * Q5.0.14::     Strange things are happening in Shell Mode.
 * Q5.0.15::     Where do I get the latest CC Mode?
 * Q5.0.16::     I find auto-show-mode disconcerting.  How do I turn it off?
 * Q5.0.17::     How can I get two instances of info?
-* Q5.0.18::     I upgraded to XEmacs 19.14 and gnuserv stopped working
+* Q5.0.18::     [This question intentionally left blank]
 * Q5.0.19::     Is there something better than LaTeX mode?
 * Q5.0.20::     Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient?
 
@@ -487,7 +484,6 @@ Getting Started:
 * Q1.4.4::      May I see an example of a useful XEmacs Lisp function?
 * Q1.4.5::      And how do I bind it to a key?
 * Q1.4.6::      What's the difference between a macro and a function?
-* Q1.4.7::      Why options saved with 19.13 don't work with 19.14 or later?
 @end menu
 
 @node Q1.0.1, Q1.0.2, Introduction, Introduction
@@ -660,30 +656,30 @@ Yes, @xref{MS Windows}.
 @comment (NT and 95).  The current betas require having an X server to run
 @comment XEmacs; however, a native NT/95 port is in alpha, thanks to
 @comment @email{jhar@@tardis.ed.ac.uk, Jonathan Harris}.
-@comment 
+@comment
 @comment Although some features are still unimplemented, XEmacs 21.0 will support
 @comment MS-Windows.
-@comment 
+@comment
 @comment The NT development is now coordinated by a mailing list at
 @comment @email{xemacs-nt@@xemacs.org}.
-@comment 
+@comment
 @comment If you are willing to contribute or want to follow the progress, mail to
 @comment @iftex
 @comment @*
 @comment @end iftex
 @comment @email{xemacs-nt-request@@xemacs.org} to subscribe.
-@comment 
+@comment
 @comment Furthermore, Altrasoft is seeking corporate and government sponsors to
 @comment help fund a fully native port of XEmacs to Windows 95 and NT using
 @comment full-time, senior-level staff working under a professionally managed
 @comment project structure.  See @uref{http://www.altrasoft.com/, the Altrasoft
 @comment web site} for more details
 @comment or contact Altrasoft directly at 1-888-ALTSOFT.
-@comment 
-@comment 
+@comment
+@comment
 @comment The closest existing port is @dfn{Win-Emacs}, which is based on Lucid
 @comment Emacs 19.6.  Available from @uref{http://www.pearlsoft.com/}.
-@comment 
+@comment
 @comment There's a port of GNU Emacs (not XEmacs) at
 @comment @example
 @comment @uref{http://www.cs.washington.edu/homes/voelker/ntemacs.html}.
@@ -693,12 +689,17 @@ Yes, @xref{MS Windows}.
 @unnumberedsubsec Q1.0.11: Is there a port of XEmacs to the Macintosh?
 @c changed
 
-There has been a port to the MachTen environment of XEmacs 19.13, but no
-patches have been submitted to the maintainers to get this in the
-mainstream distribution.
+@c There has been a port to the MachTen environment of XEmacs 19.13, but no
+@c patches have been submitted to the maintainers to get this in the
+@c mainstream distribution.
+@c
+@c For the MacOS, there is a port of
+@c @uref{ftp://ftp.cs.cornell.edu/pub/parmet/, Emacs 18.59}.
 
-For the MacOS, there is a port of
-@uref{ftp://ftp.cs.cornell.edu/pub/parmet/, Emacs 18.59}.
+Yes, there is a port of XEmacs 19.14, tested on MacOS 7.6.1 and MacOS
+8.5.1 by @uref{pjarvis@@ispchannel.com,Pitts Jarvis}.  It's available
+at @uref{http://my.ispchannel.com/~pjarvis/xemacs.html,
+http://my.ispchannel.com/~pjarvis/xemacs.html}.
 
 @node Q1.0.12, Q1.0.13, Q1.0.11, Introduction
 @unnumberedsubsec Q1.0.12: Is there a port of XEmacs to NextStep?
@@ -710,12 +711,12 @@ XEmacs port, but never went any farther.
 @node Q1.0.13, Q1.0.14, Q1.0.12, Introduction
 @unnumberedsubsec Q1.0.13: Is there a port of XEmacs to OS/2?
 
-No, and there is no news of anyone working on it.
+No, but Alexander Nikolaev <avn_1251@@mail.ru> is working on it.
 
 @node Q1.0.14, Q1.1.1, Q1.0.13, Introduction
 @unnumberedsubsec Q1.0.14: Where can I obtain a printed copy of the XEmacs users manual?
 
-Pre-printed manuals are not available.  If you are familiar with 
+Pre-printed manuals are not available.  If you are familiar with
 TeX, you can generate your own manual from the XEmacs sources.
 
 HTML and Postscript versions of XEmacs manuals may be available from the
@@ -871,14 +872,20 @@ crash some time ago.
 @itemize @bullet
 @item @email{binge@@aloft.att.com, Curtis.N.Bingham}
 
+@item @email{bruncott@@dormeur.inria.fr, Georges Brun-Cottan}
+
 @item @email{rjc@@cogsci.ed.ac.uk, Richard Caley}
 
 @item @email{cognot@@ensg.u-nancy.fr, Richard Cognot}
 
+@item @email{daku@@nortel.ca, Mark Daku}
+
 @item @email{wgd@@martigny.ai.mit.edu, William G. Dubuque}
 
 @item @email{eeide@@cs.utah.edu, Eric Eide}
 
+@item @email{af@@biomath.jussieu.fr, Alain Fauconnet}
+
 @item @email{cflatter@@nrao.edu, Chris Flatters}
 
 @item @email{ginsparg@@adra.com, Evelyn Ginsparg}
@@ -977,7 +984,7 @@ characters.
 @node Q1.3.2, Q1.3.3, Q1.3.1, Introduction
 @unnumberedsubsec Q1.3.2: What is the status of Asian-language support, aka MULE?
 
-MULE support is now available for UNIX versions of XEmacs.  
+MULE support is now available for UNIX versions of XEmacs.
 
 If you would like to help, you may want to join the
 @email{xemacs-mule@@xemacs.org} mailing list.  Especially needed are
@@ -1177,11 +1184,11 @@ it's available in a non-english language, type @kbd{C-u C-h t TAB}, type
 the first letters of your preferred language, then type @key{RET}.
 
 @comment There's an Emacs Lisp tutorial at
-@comment 
+@comment
 @comment @example
 @comment @uref{ftp://prep.ai.mit.edu/pub/gnu/emacs-lisp-intro-1.04.tar.gz}.
 @comment @end example
-@comment 
+@comment
 @comment @email{erik@@petaxp.rug.ac.be, Erik Sundermann} has made a tutorial web
 @comment page at
 @comment @iftex
@@ -1235,7 +1242,7 @@ To bind to a key do:
 
 Or interactively, @kbd{M-x global-set-key} and follow the prompts.
 
-@node Q1.4.6, Q1.4.7, Q1.4.5, Introduction
+@node Q1.4.6, , Q1.4.5, Introduction
 @unnumberedsubsec Q1.4.6: What's the difference between a macro and a function?
 
 Quoting from the Lisp Reference (a.k.a @dfn{Lispref}) Manual:
@@ -1255,36 +1262,6 @@ Do not confuse the two terms with @dfn{keyboard macros}, which are
 another matter, entirely.  A keyboard macro is a key bound to several
 other keys.  Refer to manual for details.
 
-@node Q1.4.7, , Q1.4.6, Introduction
-@unnumberedsubsec Q1.4.7: How come options saved with 19.13 don't work with 19.14 or later?
-
-There's a problem with options of the form:
-
-@lisp
-(add-spec-list-to-specifier (face-property 'searchm-field 'font)
-                            '((global (nil))))
-@end lisp
-
-saved by a 19.13 XEmacs that causes a 19.14 XEmacs grief.  You must
-delete these options.  XEmacs 19.14 and later no longer write the
-options directly to @file{.emacs} which should allow us to deal with
-version incompatibilities better in the future.
-
-Options saved under XEmacs 19.13 are protected by code that specifically
-requires a version 19 XEmacs.  This won't be a problem unless you're
-using XEmacs v20.  You should consider changing the code to read:
-
-@lisp
-(cond
- ((and (string-match "XEmacs" emacs-version)
-       (boundp 'emacs-major-version)
-       (or (and (= emacs-major-version 19)
-                (>= emacs-minor-version 12))
-           (>= emacs-major-version 20)))
-  ...
-  ))
-@end lisp
-
 @node Installation, Customization, Introduction, Top
 @unnumbered 2 Installation and Trouble Shooting
 
@@ -1305,8 +1282,6 @@ Installation:
 * Q2.0.10::     After I run configure I find a coredump, is something wrong?
 * Q2.0.11::     XEmacs can't resolve host names.
 * Q2.0.12::     Why can't I strip XEmacs?
-* Q2.0.13::     Can't link XEmacs on Solaris with Gcc.
-* Q2.0.14::     Make on HP/UX 9 fails after linking temacs
 
 Trouble Shooting:
 * Q2.1.1::      XEmacs just crashed on me!
@@ -1326,10 +1301,10 @@ Trouble Shooting:
 * Q2.1.15::     How to debug an XEmacs problem with a debugger.
 * Q2.1.16::     XEmacs crashes in @code{strcat} on HP/UX 10.
 * Q2.1.17::     @samp{Marker does not point anywhere}.
-* Q2.1.18::     19.14 hangs on HP/UX 10.10.
+* Q2.1.18::     [This question intentionally left blank]
 * Q2.1.19::     XEmacs does not follow the local timezone.
 * Q2.1.20::     @samp{Symbol's function definition is void: hkey-help-show.}
-* Q2.1.21::     Every so often the XEmacs frame freezes.
+* Q2.1.21::     [This question intentionally left blank]
 * Q2.1.22::     XEmacs seems to take a really long time to do some things.
 * Q2.1.23::     Movemail on Linux does not work for XEmacs 19.15 and later.
 * Q2.1.24::     XEmacs won't start without network. (NEW)
@@ -1758,7 +1733,7 @@ check to see if you've put DNS in the shared libc and will then proceed
 to link against the DNS resolver library code.
 @end quotation
 
-@node Q2.0.12, Q2.0.13, Q2.0.11, Installation
+@node Q2.0.12, Q2.1.1, Q2.0.11, Installation
 @unnumberedsubsec Q2.0.12: Why can't I strip XEmacs?
 
 @email{cognot@@fronsac.ensg.u-nancy.fr, Richard Cognot} writes:
@@ -1813,46 +1788,7 @@ cp lib-src/DOC-19.16-XEmacs
 @end enumerate
 @end quotation
 
-@node Q2.0.13, Q2.0.14, Q2.0.12, Installation
-@unnumberedsubsec Q2.0.13: Problems linking with Gcc on Solaris
-
-There are known difficulties linking with Gnu ld on Solaris.  A typical
-error message might look like:
-
-@example
-unexec(): dlopen(../dynodump/dynodump.so): ld.so.1: ./temacs:
-fatal: relocation error:
-symbol not found: main: referenced in ../dynodump/dynodump.so
-@end example
-
-@email{martin@@xemacs.org, Martin Buchholz} writes:
-
-@quotation
-You need to specify @samp{-fno-gnu-linker} as part of your flags to pass
-to ld.  Future releases of XEmacs will try to do this automatically.
-@end quotation
-
-@node Q2.0.14, Q2.1.1, Q2.0.13, Installation
-@unnumberedsubsec Q2.0.14: Make on HP/UX 9 fails after linking temacs
-
-Problem when building xemacs-19.16 on hpux 9:
-
-@email{cognot@@ensg.u-nancy.fr, Richard Cognot} writes:
-
-@quotation
-make on hpux fails after linking temacs with a message:
-
-@example
-"make: don't know how to make .y."
-@end example
-
-Solution: This is a problem with HP make revision 70.X.  Either use GNU
-make, or install PHCO_6552, which will bring make to revision
-72.24.1.17.
-@end quotation
-
-
-@node Q2.1.1, Q2.1.2, Q2.0.14, Installation
+@node Q2.1.1, Q2.1.2, Q2.0.12, Installation
 @unnumberedsec 2.1: Trouble Shooting
 @unnumberedsubsec Q2.1.1: Help!  XEmacs just crashed on me!
 
@@ -2316,17 +2252,55 @@ it cannot display the internal C structure of a Lisp Object.  Even if
 all you've got is a core dump, all is not lost.
 
 If you're using GDB, there are some macros in the file
-@file{src/gdbinit} in the XEmacs source distribution that should make it
-easier for you to decode Lisp objects.  Copy this file to
-@file{~/.gdbinit}, or @code{source} it from @file{~/.gdbinit}, and use
-the macros defined therein.  In particular, use the @code{pobj} macro to
-print the internal C representation of a lisp object.  This will work
-with a core file or not-yet-run executable.  The aliases @code{ldp} and
-@code{lbt} are provided for conveniently calling @code{debug_print} and
-@code{debug_backtrace}.
+@file{src/.gdbinit} in the XEmacs source distribution that should make
+it easier for you to decode Lisp objects.  This file is automatically
+read by gdb if gdb is run in the directory where xemacs was built, and
+contains these useful macros to inspect the state of xemacs:
+
+@table @code
+@item pobj
+Usage: pobj lisp_object @*
+Print the internal C representation of a lisp object.
+
+@item xtype
+Usage: xtype lisp_object @*
+Print the Lisp type of a lisp object.
+
+@item lbt
+Usage: lbt @*
+Print the current Lisp stack trace.
+Requires a running xemacs process.
+
+@item ldp
+Usage: ldp lisp_object @*
+Print a Lisp Object value using the Lisp printer.
+Requires a running xemacs process.
+
+@item run-temacs
+Usage: run-temacs @*
+Run temacs interactively, like xemacs.
+Use this with debugging tools (like purify) that cannot deal with dumping,
+or when temacs builds successfully, but xemacs does not.
+
+@item dump-temacs
+Usage: dump-temacs @*
+Run the dumping part of the build procedure.
+Use when debugging temacs, not xemacs!
+Use this when temacs builds successfully, but xemacs does not.
+
+@item check-xemacs
+Usage: check-xemacs @*
+Run the test suite.  Equivalent to 'make check'.
+
+@item check-temacs
+Usage: check-temacs @*
+Run the test suite on temacs.  Equivalent to 'make check-temacs'.
+Use this with debugging tools (like purify) that cannot deal with dumping,
+or when temacs builds successfully, but xemacs does not.
+@end table
 
 If you are using Sun's @file{dbx} debugger, there is an equivalent file
-@file{src/dbxrc} to copy to or source from @file{~/.dbxrc}.
+@file{src/.dbxrc}, which defines the same commands for dbx.
 
 @item
 If you're using a debugger to get a C stack backtrace and you're seeing
@@ -2377,14 +2351,13 @@ you'll have something useful.
 
 @item
 If you compile with the newer gcc variants gcc-2.8 or egcs, you will
-also need gdb 4.17.  Earlier releases of gdb can't handle the debug
-information generated by the newer compilers.
+also need gdb 4.17 or above.  Earlier releases of gdb can't handle the
+debug information generated by the newer compilers.
 
 @item
-The above information on using @file{src/gdbinit} works for XEmacs-21.0
-and above.  For older versions of XEmacs, there are different
-@file{gdbinit} files provided in the @file{src} directory.  Use the one
-corresponding to the configure options used when building XEmacs.
+In versions of XEmacs before 21.2.27, @file{src/.gdbinit} was named
+@file{src/gdbinit}.  This had the disadvantage of not being sourced
+automatically by gdb, so you had to set that up yourself.
 
 @end itemize
 
@@ -2430,58 +2403,7 @@ Upgrade your Gnus.
 @end enumerate
 
 @node Q2.1.18, Q2.1.19, Q2.1.17, Installation
-@unnumberedsubsec Q2.1.18: 19.14 hangs on HP/UX 10.10.
-
-@email{cognot@@ensg.u-nancy.fr, Richard Cognot} writes:
-
-@quotation
-For the record, compiling on hpux 10.10 leads to a hang in Gnus when
-compiled with optimization on.
-
-I've just discovered that my hpux 10.01 binary was working less well
-than expected. In fact, on a 10.10 system, @code{(while t)} was not
-interrupted by @kbd{C-g}. I defined @code{BROKEN_SIGIO} and recompiled on
-10.10, and... the hang is now gone.
-
-As far as configure goes, this will be a bit tricky: @code{BROKEN_SIGIO}
-is needed on 10.10, but @strong{not} on 10.01: if I run my 10.01 binary
-on a 10.01 machine, without @code{BROKEN_SIGIO} being defined, @kbd{C-g}
-works as expected.
-@end quotation
-
-@email{cognot@@ensg.u-nancy.fr, Richard Cognot} adds:
-
-@quotation
-Apparently somebody has found the reason why there is this
-@iftex
-@*
-@end iftex
-@samp{poll:
-interrupted...} message for each event.  For some reason, libcurses
-reimplements a @code{select()} system call, in a highly broken fashion.
-The fix is to add a -lc to the link line @emph{before} the
--lxcurses. XEmacs will then use the right version of @code{select()}.
-@end quotation
-
-
-@email{af@@biomath.jussieu.fr, Alain Fauconnet} writes:
-
-@quotation
-The @emph{real} solution is to @emph{not} link -lcurses in!  I just
-changed -lcurses to -ltermcap in the Makefile and it fixed:
-
-@enumerate
-@item
-The @samp{poll: interrupted system call} message.
-
-@item
-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
-@emph{hang}.  Actually they would wait forever for emacs to read the
-socket which connects stdout...
-@end enumerate
-@end quotation
+@unnumberedsubsec Q2.1.18: removed
 
 @node Q2.1.19, Q2.1.20, Q2.1.18, Installation
 @unnumberedsubsec Q2.1.19: XEmacs does not follow the local timezone.
@@ -2509,10 +2431,7 @@ This is a problem with a partially loaded hyperbole.  Try adding:
 where you load hyperbole and the problem should go away.
 
 @node Q2.1.21, Q2.1.22, Q2.1.20, Installation
-@unnumberedsubsec Q2.1.21: Every so often the XEmacs frame freezes
-
-This problem has been fixed in 19.15, and was due to a not easily
-reproducible race condition.
+@unnumberedsubsec Q2.1.21: [This question intentionally left blank]
 
 @node Q2.1.22, Q2.1.23, Q2.1.21, Installation
 @unnumberedsubsec Q2.1.22: XEmacs seems to take a really long time to do some things
@@ -2603,8 +2522,8 @@ Customization---Emacs Lisp and @file{.emacs}:
 X Window System & Resources:
 * Q3.1.1::      Where is a list of X resources?
 * Q3.1.2::      How can I detect a color display?
-* Q3.1.3::      @code{(set-screen-width)} worked in 19.6, but not in 19.13?
-* Q3.1.4::      Specifying @code{Emacs*EmacsScreen.geometry} in @file{.emacs} does not work in 19.15?
+* Q3.1.3::      [This question intentionally left blank]
+* Q3.1.4::      [This question intentionally left blank]
 * Q3.1.5::      How can I get the icon to just say @samp{XEmacs}?
 * Q3.1.6::      How can I have the window title area display the full path?
 * Q3.1.7::      @samp{xemacs -name junk} doesn't work?
@@ -2876,38 +2795,10 @@ in:
 @end lisp
 
 @node Q3.1.3, Q3.1.4, Q3.1.2, Customization
-@unnumberedsubsec Q3.1.3: @code{(set-screen-width)} worked in 19.6, but not in 19.13?
-
-In Lucid Emacs 19.6 I did @code{(set-screen-width @var{characters})} and
-@code{(set-screen-height @var{lines})} in my @file{.emacs} instead of
-specifying @code{Emacs*EmacsScreen.geometry} in my
-@iftex
-@*
-@end iftex
-@file{.Xdefaults} but
-this does not work in XEmacs 19.13.
-
-These two functions now take frame arguments:
-
-@lisp
-(set-frame-width (selected-frame) @var{characters})
-(set-frame-height (selected-frame) @var{lines})
-@end lisp
+@unnumberedsubsec Q3.1.3: [This question intentionally left blank]
 
 @node Q3.1.4, Q3.1.5, Q3.1.3, Customization
-@unnumberedsubsec Q3.1.4: Specifying @code{Emacs*EmacsScreen.geometry} in @file{.emacs} does not work in 19.15?
-
-In XEmacs 19.11 I specified @code{Emacs*EmacsScreen.geometry} in
-my @file{.emacs} but this does not work in XEmacs 19.15.
-
-We have switched from using the term @dfn{screen} to using the term
-@dfn{frame}.
-
-The correct entry for your @file{.Xdefaults} is now:
-
-@example
-Emacs*EmacsFrame.geometry
-@end example
+@unnumberedsubsec Q3.1.4: [This question intentionally left blank]
 
 @node Q3.1.5, Q3.1.6, Q3.1.4, Customization
 @unnumberedsubsec Q3.1.5: How can I get the icon to just say @samp{XEmacs}?
@@ -3999,13 +3890,19 @@ is what happens when you select a region (with the mouse or keyboard)
 and you press a key to replace the selected region by the key you typed.
 Usually backspace kills the selected region.
 
-To get this behavior, add the following line to your @file{.emacs}:
+To get this behavior, add the following lines to your @file{.emacs}:
 
 @lisp
-(turn-on-pending-delete)
+(cond
+ ((fboundp 'turn-on-pending-delete)
+  (turn-on-pending-delete))
+ ((fboundp 'pending-delete-on)
+  (pending-delete-on t)))
 @end lisp
 
-Note that this will work with both Backspace and Delete.
+Note that this will work with both Backspace and Delete.  This code is a 
+tad more complicated than it has to be for XEmacs in order to make it
+more portable.
 
 @node Q3.10.3, Q3.10.4, Q3.10.2, Customization
 @unnumberedsubsec Q3.10.3: Can I turn off the highlight during isearch?
@@ -4122,7 +4019,7 @@ Infodock:
 Other Unbundled Packages:
 * Q4.7.1::      What is AUC TeX?  Where do you get it?
 * Q4.7.2::      Are there any Emacs Lisp Spreadsheets?
-* Q4.7.3::      Byte compiling AUC TeX on XEmacs 19.14
+* Q4.7.3::      [This question intentionally left blank]
 * Q4.7.4::      Problems installing AUC TeX
 * Q4.7.5::      Is there a reason for an Emacs package not to be included in XEmacs?
 * Q4.7.6::      Is there a MatLab mode?
@@ -4637,12 +4534,12 @@ following patch:
 @@@@ -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 
+@end format
 
 
 
@@ -4859,17 +4756,7 @@ Yes.  Check out @dfn{dismal} (which stands for Dis' Mode Ain't Lotus) at
 @uref{ftp://cs.nyu.edu/pub/local/fox/dismal/}.
 
 @node Q4.7.3, Q4.7.4, Q4.7.2, Subsystems
-@unnumberedsubsec Q4.7.3: Byte compiling AUC TeX on XEmacs 19.14.
-
-@email{bruncott@@dormeur.inria.fr, Georges Brun-Cottan} writes:
-
-@quotation
-When byte compiling auctex-9.4g, you must use the command:
-
-@example
-xemacs -batch -l lpath.el
-@end example
-@end quotation
+@unnumberedsubsec Q4.7.3: [This question intentionally left blank]
 
 @node Q4.7.4, Q4.7.5, Q4.7.3, Subsystems
 @unnumberedsubsec Q4.7.4: Problems installing AUC TeX.
@@ -4965,14 +4852,14 @@ Major & Minor Modes:
 * Q5.0.8::      Why does edt emulation not work?
 * Q5.0.9::      How can I emulate VI and use it as my default mode?
 * Q5.0.10::     [This question intentionally left blank]
-* Q5.0.11::     Filladapt doesn't work in 19.15?
+* Q5.0.11::     How do I turn on filladapt for all buffers?
 * Q5.0.12::     How do I disable gnuserv from opening a new frame?
 * Q5.0.13::     How do I start gnuserv so that each subsequent XEmacs is a client?
 * Q5.0.14::     Strange things are happening in Shell Mode.
 * Q5.0.15::     Where do I get the latest CC Mode?
 * Q5.0.16::     I find auto-show-mode disconcerting.  How do I turn it off?
 * Q5.0.17::     How can I get two instances of info?
-* Q5.0.18::     I upgraded to XEmacs 19.14 and gnuserv stopped working
+* Q5.0.18::     [This question intentionally left blank]
 * Q5.0.19::     Is there something better than LaTeX mode?
 * Q5.0.20::     Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient?
 
@@ -5165,7 +5052,7 @@ rename-uniquely} to rename the @code{*shell*} buffer instead of @kbd{M-x
 rename-buffer}.
 
 Alternately, you can set the variable @code{shell-multiple-shells}.
-If the value of this variable is non-nil, each time shell mode is invoked, 
+If the value of this variable is non-nil, each time shell mode is invoked,
 a new shell is made
 
 @node Q5.0.7, Q5.0.8, Q5.0.6, Miscellaneous
@@ -5221,11 +5108,11 @@ it, otherwise some minor modes may not get viper-ized.
 Obsolete question, left blank to avoid renumbering
 
 @node Q5.0.11, Q5.0.12, Q5.0.10, Miscellaneous
-@unnumberedsubsec Q5.0.11: Filladapt doesn't work in 19.15
+@unnumberedsubsec Q5.0.11: How do I turn on filladapt for all buffers?
 
-Filladapt 2.x is included in 19.15.  In it filladapt is now a minor
-mode and minor modes are traditionally off by default.  The following
-added to your @file{.emacs} will turn it on for all buffers:
+Filladapt is a minor mode and minor modes are traditionally off by
+default.  The following added to your @file{.emacs} will turn it on for
+all buffers:
 
 @lisp
 (setq-default filladapt-mode t)
@@ -5333,19 +5220,7 @@ enabled by default.  To turn it off, put the following in your
 You can't.  The @code{info} package does not provide for multiple info buffers.
 
 @node Q5.0.18, Q5.0.19, Q5.0.17, Miscellaneous
-@unnumberedsubsec Q5.0.18: I upgraded to XEmacs 19.14 and gnuserv stopped working.
-
-@email{daku@@nortel.ca, Mark Daku} writes:
-
-@quotation
-It turns out I was using an older version of gnuserv.  The installation
-didn't put the binary into the public bin directory.  It put it in
-@iftex
-@*
-@end iftex
-@file{lib/xemacs-19.14/hppa1.1-hp-hpux9.05/gnuserv}.  Shouldn't it have
-been put in @file{bin/hppa1.1-hp-hpux9.0}?
-@end quotation
+@unnumberedsubsec Q5.0.18: [This question intentionally left blank]
 
 @node Q5.0.19, Q5.0.20, Q5.0.18, Miscellaneous
 @unnumberedsubsec Q5.0.19: Is there something better than LaTeX mode?
@@ -6206,7 +6081,7 @@ port of XEmacs.
 
 General Info
 * Q6.0.1::     What is the status of the XEmacs port to Windows?
-* Q6.0.2::     What flavors of MS Windows are supported?  
+* Q6.0.2::     What flavors of MS Windows are supported?
 * Q6.0.3::      Where are the XEmacs on MS Windows binaries?
 * Q6.0.4::     Does XEmacs on MS Windows require an X server to run?
 
@@ -6317,7 +6192,7 @@ Pointers to X servers can be found at
 @iftex
 @*
 @end iftex
-@uref{http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/}; 
+@uref{http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/};
 
 look for "Where to get an X server".  Also note that, although the above
 page talks about Cygnus gnu-win32 (Cygwin), the information on X servers
@@ -6403,7 +6278,7 @@ well as pre-built ncurses and graphic libraries, from:
 @unnumberedsec 6.2: Customization and User Interface
 @unnumberedsubsec Q6.2.1: How will the port cope with differences in the Windows user interface?
 
-XEmacs (and Emacs in general) UI is pretty 
+XEmacs (and Emacs in general) UI is pretty
 different from what is expected of a typical MS Windows program.  How will
 the MS Windows port cope with it?
 
@@ -6468,7 +6343,7 @@ Here is a recount of various Emacs versions running on MS Windows:
 
 @itemize @bullet
 
-@item 
+@item
 Win-Emacs
 
 @itemize @minus
@@ -6484,7 +6359,7 @@ Pearlsoft, but not anymore, since Pearlsoft went out of business.
 @item
 GNU Emacs for DOS
 
-@itemize @minus  
+@itemize @minus
 
 @item
 GNU Emacs features support for MS-DOS and DJGPP (D.J. Delorie's DOS
@@ -6496,7 +6371,7 @@ is far too big compared to typical DOS editors.
 @item
 GNU Emacs compiled with Win32
 
-@itemize @minus  
+@itemize @minus
 
 @item
 Starting with version 19.30, it has been possible to compile GNU Emacs
@@ -6509,7 +6384,7 @@ flavor of XEmacs on MS Windows.
 @item
 NT Emacs
 
-@itemize @minus  
+@itemize @minus
 
 @item
 NT Emacs is a version of GNU Emacs modified to compile and run under
@@ -6518,7 +6393,7 @@ in spirit to the XEmacs "native" port.
 
 @item
 NT Emacs has been written by Geoff Voelker, and more information can be
-found at 
+found at
 @iftex
 @*
 @end iftex
@@ -6529,7 +6404,7 @@ found at
 @item
 XEmacs
 
-@itemize @minus  
+@itemize @minus
 
 @item
 Beginning with XEmacs 19.12, XEmacs' architecture has been redesigned
index d37a926..bcb9764 100644 (file)
@@ -1093,9 +1093,9 @@ definitions for the same key.  Or you can change the current buffer's
 local map, which affects all buffers using the same major mode.
 
 @menu
-* Interactive Rebinding::     Changing Key Bindings Interactively   
-* Programmatic Rebinding::    Changing Key Bindings Programmatically
-* Key Bindings Using Strings::Using Strings for Changing Key Bindings 
+* Interactive Rebinding::      Changing Key Bindings Interactively   
+* Programmatic Rebinding::     Changing Key Bindings Programmatically
+* Key Bindings Using Strings:: Using Strings for Changing Key Bindings 
 @end menu
 
 @node Interactive Rebinding
index c46ce59..3d75b35 100644 (file)
@@ -3,20 +3,19 @@
 @chapter The Minibuffer
 @cindex minibuffer
 
-  Emacs commands use the @dfn{minibuffer} to read arguments more
-complicated than a single number.  Minibuffer arguments can be file
-names, buffer names, Lisp function names, Emacs command names, Lisp
-expressions, and many other things, depending on the command reading the
-argument.  To edit the argument in the minibuffer, you can use Emacs
-editing commands.
-
+  The @dfn{minibuffer} is the facility used by XEmacs commands to read
+arguments more complicated than a single number.  Minibuffer arguments
+can be file names, buffer names, Lisp function names, XEmacs command
+names, Lisp expressions, and many other things, depending on the command
+reading the argument.  You can use the usual XEmacs editing commands in
+the minibuffer to edit the argument text.
 
 @cindex prompt
   When the minibuffer is in use, it appears in the echo area, and the
 cursor moves there.  The beginning of the minibuffer line displays a
-@dfn{prompt} indicating what kind of input you should supply and how it
-will be used.  The prompt is often derived from the name of the command
-the argument is for.  The prompt normally ends with a colon.
+@dfn{prompt} which says what kind of input you should supply and how it
+will be used.  Often this prompt is derived from the name of the command
+that the argument is for.  The prompt normally ends with a colon.
 
 @cindex default argument
   Sometimes a @dfn{default argument} appears in parentheses after the
@@ -26,14 +25,14 @@ For example, commands that read buffer names always show a default, which
 is the name of the buffer that will be used if you type just @key{RET}.
 
 @kindex C-g
-  The simplest way to give a minibuffer argument is to type the text you
-want, terminated by @key{RET} to exit the minibuffer.  To get out
-of the minibuffer and cancel the command that it was for, type
-@kbd{C-g}.
+  The simplest way to enter a minibuffer argument is to type the text
+you want, terminated by @key{RET} which exits the minibuffer.  You can
+cancel the command that wants the argument, and get out of the
+minibuffer, by typing @kbd{C-g}.
 
   Since the minibuffer uses the screen space of the echo area, it can
-conflict with other ways Emacs customarily uses the echo area.  Here is how
-Emacs handles such conflicts:
+conflict with other ways XEmacs customarily uses the echo area.  Here is
+how XEmacs handles such conflicts:
 
 @itemize @bullet
 @item
@@ -44,9 +43,9 @@ while.  It comes back after a few seconds, or as soon as you type
 anything.
 
 @item
-If you use a command in the minibuffer whose purpose is to print a
-message in the echo area (for example @kbd{C-x =}) the message is
-displayed normally, and the minibuffer is hidden for a while.  It comes back
+If in the minibuffer you use a command whose purpose is to print a
+message in the echo area, such as @kbd{C-x =}, the message is printed
+normally, and the minibuffer is hidden for a while.  It comes back
 after a few seconds, or as soon as you type anything.
 
 @item
@@ -58,6 +57,7 @@ use.
 * File: Minibuffer File.  Entering file names with the minibuffer.
 * Edit: Minibuffer Edit.  How to edit in the minibuffer.
 * Completion::           An abbreviation facility for minibuffer input.
+* Minibuffer History::    Reusing recent minibuffer arguments.
 * Repetition::           Re-executing commands that used the minibuffer.
 @end menu
 
@@ -66,37 +66,43 @@ use.
 
   Sometimes the minibuffer starts out with text in it.  For example, when
 you are supposed to give a file name, the minibuffer starts out containing
-the @dfn{default directory}, which ends with a slash.  This informs
-you in which directory the file will be looked for if you do not specify
-a different one. For example, the minibuffer might start out with:
+the @dfn{default directory}, which ends with a slash.  This is to inform
+you which directory the file will be found in if you do not specify a
+directory.
+
+  For example, the minibuffer might start out with these contents:
 
 @example
 Find File: /u2/emacs/src/
 @end example
 
 @noindent
-where @samp{Find File:@: } is the prompt.  Typing @kbd{buffer.c} specifies
-the file 
-@*@file{/u2/emacs/src/buffer.c}.  To find files in nearby
-directories, use @samp{..}; thus, if you type @kbd{../lisp/simple.el}, the
-file that you visit will be the one named 
-@*@file{/u2/emacs/lisp/simple.el}.
-Alternatively, you can use  @kbd{M-@key{DEL}} to kill directory names you
-don't want (@pxref{Words}).@refill
-
-  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 file
-@file{/etc/termcap}, just type the name, giving:
+where @samp{Find File:@: } is the prompt.  Typing @kbd{buffer.c}
+specifies the file @file{/u2/emacs/src/buffer.c}.  To find files in
+nearby directories, use @kbd{..}; thus, if you type
+@kbd{../lisp/simple.el}, you will get the file named
+@file{/u2/emacs/lisp/simple.el}.  Alternatively, you can kill with
+@kbd{M-@key{DEL}} the directory names you don't want (@pxref{Words}).
+
+  If you don't want any of the default, you can kill it with @kbd{C-a
+C-k}.  But you don't need to kill the default; you can simply ignore it.
+Insert an absolute file name, one starting with a slash or a tilde,
+after the default directory.  For example, to specify the file
+@file{/etc/termcap}, just insert that name, giving these minibuffer
+contents:
 
 @example
 Find File: /u2/emacs/src//etc/termcap
 @end example
 
 @noindent
-Two slashes in a row are not normally meaningful in Unix file names, but
-they are allowed in XEmacs.  They mean, ``ignore everything before the
-second slash in the pair.''  Thus, @samp{/u2/emacs/src/} is ignored, and
-you get the file @file{/etc/termcap}.
+@cindex // in file name
+@cindex double slash in file name
+@cindex slashes repeated in file name
+XEmacs gives a special meaning to a double slash (which is not normally
+a useful thing to write): it means, ``ignore everything before the
+second slash in the pair.''  Thus, @samp{/u2/emacs/src/} is ignored in
+the example above, and you get the file @file{/etc/termcap}.
 
 @vindex insert-default-directory
 If you set @code{insert-default-directory} to @code{nil}, the default
@@ -107,126 +113,141 @@ interpreted with respect to the same default directory.
 @node Minibuffer Edit, Completion, Minibuffer File, Minibuffer
 @section Editing in the Minibuffer
 
-  The minibuffer is an Emacs buffer (albeit a peculiar one), and the usual
-Emacs commands are available for editing the text of an argument you are
-entering.
+  The minibuffer is an XEmacs buffer (albeit a peculiar one), and the
+usual XEmacs commands are available for editing the text of an argument
+you are entering.
 
   Since @key{RET} in the minibuffer is defined to exit the minibuffer,
-you must use @kbd{C-o} or @kbd{C-q @key{LFD}} to insert a newline into
-the minibuffer. (Recall that a newline is really the @key{LFD}
-character.)
-
-  The minibuffer has its own window, which always has space on the screen
-but acts as if it were not there when the minibuffer is not in use.  The
-minibuffer window is just like the others; you can switch to another 
-window with @kbd{C-x o}, edit text in other windows, and perhaps even
-visit more files before returning to the minibuffer to submit the
-argument.  You can kill text in another window, return to the minibuffer
-window, and then yank the text to use it in the argument.  @xref{Windows}.
-
-  There are, however, some restrictions on the use of the minibuffer window.
-You cannot switch buffers in it---the minibuffer and its window are
-permanently attached.  You also cannot split or kill the minibuffer
-window, but you can make it taller with @kbd{C-x ^}.
+you can't use it to insert a newline in the minibuffer.  To do that,
+type @kbd{C-o} or @kbd{C-q C-j}.  (Recall that a newline is really the
+character control-J.)
+
+  The minibuffer has its own window which always has space on the screen
+but acts as if it were not there when the minibuffer is not in use.
+When the minibuffer is in use, its window is just like the others; you
+can switch to another window with @kbd{C-x o}, edit text in other
+windows and perhaps even visit more files, before returning to the
+minibuffer to submit the argument.  You can kill text in another window,
+return to the minibuffer window, and then yank the text to use it in the
+argument.  @xref{Windows}.
+
+  There are some restrictions on the use of the minibuffer window,
+however.  You cannot switch buffers in it---the minibuffer and its
+window are permanently attached.  Also, you cannot split or kill the
+minibuffer window. But you can make it taller in the normal fashion with
+@kbd{C-x ^}.
 
 @kindex C-M-v
-  If you are in the minibuffer and issue a command that displays help
-text in another window, that window will be scrolled if you type
-@kbd{M-C-v} while in the minibuffer until you exit the minibuffer.  This
-feature is helpful if a completing minibuffer gives you a long list of
-possible completions.
+  If while in the minibuffer you issue a command that displays help text
+of any sort in another window, you can use the @kbd{C-M-v} command while
+in the minibuffer to scroll the help text.  This lasts until you exit
+the minibuffer.  This feature is especially useful if a completing
+minibuffer gives you a list of possible completions.  @xref{Other Window}.
 
+@vindex minibuffer-confirm-incomplete
 If the variable @code{minibuffer-confirm-incomplete} is @code{t}, you
 are asked for confirmation if there is no known completion for the text
 you typed. For example, if you attempted to visit a non-existent file,
 the minibuffer might read:
 @example
-        Find File:chocolate_bar.c [no completions, confirm]
+        Find File: chocolate_bar.c [no completions, confirm]
 @end example
 If you press @kbd{Return} again, that confirms the filename. Otherwise,
 you can continue editing it. 
 
- Emacs supports recursive use of the minibuffer.  However, it is
-easy to do this by accident (because of autorepeating keyboards, for
-example) and get confused.  Therefore, most Emacs commands that use the
-minibuffer refuse to operate if the minibuffer window is selected.  If the
-minibuffer is active but you have switched to a different window, recursive
-use of the minibuffer is allowed---if you know enough to try to do this,
-you probably will not get confused.
+ XEmacs supports recursive use of the minibuffer.  However, it is easy
+to do this by accident (because of autorepeating keyboards, for example)
+and get confused.  Therefore, most XEmacs commands that use the
+minibuffer refuse to operate if the minibuffer window is selected.  If
+the minibuffer is active but you have switched to a different window,
+recursive use of the minibuffer is allowed---if you know enough to try
+to do this, you probably will not get confused.
 
 @vindex enable-recursive-minibuffers
-  If you set the variable @code{enable-recursive-minibuffers} to be
+  If you set the variable @code{enable-recursive-minibuffers} to a
 non-@code{nil}, recursive use of the minibuffer is always allowed.
 
-@node Completion, Repetition, Minibuffer Edit, Minibuffer
+@node Completion, Minibuffer History, Minibuffer Edit, Minibuffer
 @section Completion
 @cindex completion
 
-  When appropriate, the minibuffer provides a @dfn{completion} facility.
-You type the beginning of an argument and one of the completion keys,
-and Emacs visibly fills in the rest, depending on what you have already
-typed.
+  For certain kinds of arguments, you can use @dfn{completion} to enter
+the argument value.  Completion means that you type part of the
+argument, then XEmacs visibly fills in the rest, or as much as
+can be determined from the part you have typed.
 
   When completion is available, certain keys---@key{TAB}, @key{RET}, and
-@key{SPC}---are redefined to complete an abbreviation present in the
+@key{SPC}---are rebound to complete the text present in the
 minibuffer into a longer string that it stands for, by matching it
 against a set of @dfn{completion alternatives} provided by the command
 reading the argument.  @kbd{?} is defined to display a list of possible
 completions of what you have inserted.
 
-  For example, when the minibuffer is being used by @kbd{Meta-x} to read
-the name of a command, it is given a list of all available Emacs command
-names to complete against.  The completion keys match the text in the
-minibuffer against all the command names, find any additional characters of
-the name that are implied by the ones already present in the minibuffer,
-and add those characters to the ones you have given.
-
-  Case is normally significant in completion because it is significant in
-most of the names that you can complete (buffer names, file names, and
-command names).  Thus, @samp{fo} will not complete to @samp{Foo}.  When you
-are completing a name in which case does not matter, case may be ignored
-for completion's sake if specified by program.
+  For example, when @kbd{M-x} uses the minibuffer to read the name of a
+command, it provides a list of all available XEmacs command names to
+complete against.  The completion keys match the text in the minibuffer
+against all the command names, find any additional name characters
+implied by the ones already present in the minibuffer, and add those
+characters to the ones you have given.  This is what makes it possible
+to type @kbd{M-x inse @key{SPC} b @key{RET}} instead of @kbd{M-x
+insert-buffer @key{RET}} (for example).
+
+  Case is normally significant in completion because it is significant
+in most of the names that you can complete (buffer names, file names and
+command names).  Thus, @samp{fo} does not complete to @samp{Foo}.  When
+you are completing a name in which case does not matter, case may be
+ignored for completion's sake if specified by program.
 
 When a completion list is displayed, the completions will highlight as
 you move the mouse over them.  Clicking the middle mouse button on any 
 highlighted completion will ``select'' it just as if you had typed it in
 and hit @key{RET}.
 
-@subsection A Completion Example
+@menu
+* Example: Completion Example.
+* Commands: Completion Commands.
+* Strict Completion::
+* Options: Completion Options.
+@end menu
+
+@node Completion Example, Completion Commands, Completion, Completion
+@subsection Completion Example
 
 @kindex TAB
 @findex minibuffer-complete
-  Consider the following example.  If you type @kbd{Meta-x au @key{TAB}},
-@key{TAB} looks for alternatives (in this case, command names) that
-start with @samp{au}.  There are only two commands: @code{auto-fill-mode} and
-@code{auto-save-mode}.  They are the same as far as @code{auto-}, so the
-@samp{au} in the minibuffer changes to @samp{auto-}.@refill
-
-  If you type @key{TAB} again immediately, there are multiple possibilities
-for the very next character---it could be @samp{s} or @samp{f}---so no more
-characters are added; but a list of all possible completions is displayed
-in another window.
+  A concrete example may help here.  If you type @kbd{M-x au @key{TAB}},
+the @key{TAB} looks for alternatives (in this case, command names) that
+start with @samp{au}.  There are several, including
+@code{auto-fill-mode} and @code{auto-save-mode}---but they are all the
+same as far as @code{auto}, so the @samp{au} in the minibuffer changes
+to @samp{auto}.
+
+  If you type @key{TAB} again immediately, there are multiple
+possibilities for the very next character---it could be any of
+@samp{c-}---so no more characters are added; instead, @key{TAB}
+displays a list of all possible completions in another window.
 
   If you go on to type @kbd{f @key{TAB}}, this @key{TAB} sees
 @samp{auto-f}.  The only command name starting this way is
-@code{auto-fill-mode}, so completion inserts the rest of that command.  You
-now have @samp{auto-fill-mode} in the minibuffer after typing just @kbd{au
-@key{TAB} f @key{TAB}}.  Note that @key{TAB} has this effect because in the
-minibuffer it is bound to the function @code{minibuffer-complete} when
-completion is supposed to be done.@refill
+@code{auto-fill-mode}, so completion fills in the rest of that.  You now
+have @samp{auto-fill-mode} in the minibuffer after typing just @kbd{au
+@key{TAB} f @key{TAB}}.  Note that @key{TAB} has this effect because in
+the minibuffer it is bound to the command @code{minibuffer-complete}
+when completion is available.
 
+@node Completion Commands, Strict Completion, Completion Example, Completion
 @subsection Completion Commands
 
-  Here is a list of all the completion commands defined in the minibuffer
+  Here is a list of the completion commands defined in the minibuffer
 when completion is available.
 
 @table @kbd
 @item @key{TAB}
-Complete the text in the minibuffer as much as possible @*
+Complete the text in the minibuffer as much as possible
 (@code{minibuffer-complete}).
 @item @key{SPC}
-Complete the text in the minibuffer but don't add or fill out more
-than one word (@code{minibuffer-complete-word}).
+Complete the minibuffer text, but don't go beyond one word
+(@code{minibuffer-complete-word}).
 @item @key{RET}
 Submit the text in the minibuffer as the argument, possibly completing
 first as described below (@code{minibuffer-complete-and-exit}).
@@ -244,14 +265,51 @@ highlighted completion and exit the minibuffer.
 
 @kindex SPC
 @findex minibuffer-complete-word
-@key{SPC} completes in a way that is similar to @key{TAB}, but it never
-goes beyond the next hyphen or space.  If you have @samp{auto-f} in the 
-minibuffer and type @key{SPC}, it finds that the completion is
- @samp{auto-fill-mode}, but it stops completing after @samp{fill-}. 
-The result is @samp{auto-fill-}. Another @key{SPC} at this point
-completes all the way to @samp{auto-fill-mode}.  @key{SPC} in the
-minibuffer runs the function @code{minibuffer-complete-word} when 
-completion is available.@refill
+  @key{SPC} completes much like @key{TAB}, but never goes beyond the
+next hyphen or space.  If you have @samp{auto-f} in the minibuffer and
+type @key{SPC}, it finds that the completion is @samp{auto-fill-mode},
+but it stops completing after @samp{fill-}.  This gives
+@samp{auto-fill-}.  Another @key{SPC} at this point completes all the
+way to @samp{auto-fill-mode}.  @key{SPC} in the minibuffer when
+completion is available runs the command
+@code{minibuffer-complete-word}.
+
+  Here are some commands you can use to choose a completion from a
+window that displays a list of completions:
+
+@table @kbd
+@findex mouse-choose-completion
+@item button2up
+Clicking mouse button 2 on a completion in the list of possible
+completions chooses that completion (@code{mouse-choose-completion}).
+You normally use this command while point is in the minibuffer; but you
+must click in the list of completions, not in the minibuffer itself.
+
+@findex choose-completion
+@item @key{RET}
+Typing @key{RET} @emph{in the completion list buffer} chooses the
+completion that point is in or next to (@code{choose-completion}).  To
+use this command, you must first switch windows to the window that shows
+the list of completions.
+
+@findex next-list-mode-item
+@item @key{RIGHT}
+@itemx @key{TAB}
+@itemx C-f
+Typing the right-arrow key @key{RIGHT}, @key{TAB} or @kbd{C-f} @emph{in
+the completion list buffer} moves point to the following completion
+(@code{next-list-mode-item}).
+
+@findex previous-list-mode-item
+@item @key{LEFT}
+@itemx C-b
+Typing the left-arrow key @key{LEFT} or @kbd{C-b} @emph{in the
+completion list buffer} moves point toward the beginning of the buffer,
+to the previous completion (@code{previous-list-mode-item}).
+@end table
+
+@node Strict Completion, Completion Options, Completion Commands, Completion
+@subsection Strict Completion
 
   There are three different ways that @key{RET} can work in completing
 minibuffers, depending on how the argument will be used.
@@ -276,7 +334,7 @@ Cautious completion is used for reading file names for files that must
 already exist.
 
 @item
-@dfn{Permissive} completion is used when any string is
+@dfn{Permissive} completion is used when any string whatever is
 meaningful, and the list of completion alternatives is just a guide.
 For example, when @kbd{C-x C-f} reads the name of a file to visit, any
 file name is allowed, in case you want to create a file.  In
@@ -284,21 +342,26 @@ permissive completion, @key{RET} takes the text in the minibuffer
 exactly as given, without completing it.
 @end itemize
 
-  The completion commands display a list of all possible completions in a
-window whenever there is more than one possibility for the very next
-character.  Typing @kbd{?} explicitly requests such a list.  The
-list of completions counts as help text, so @kbd{C-M-v} typed in the
-minibuffer scrolls the list.
+  The completion commands display a list of all possible completions in
+a window whenever there is more than one possibility for the very next
+character.  Also, typing @kbd{?} explicitly requests such a list.  If
+the list of completions is long, you can scroll it with @kbd{C-M-v}
+(@pxref{Other Window}).
+
+@node Completion Options,  , Strict Completion, Completion
+@subsection Completion Options
 
 @vindex completion-ignored-extensions
   When completion is done on file names, certain file names are usually
-ignored.  The variable @code{completion-ignored-extensions} contains a list
-of strings; a file whose name ends in any of those strings is ignored as a
-possible completion.  The standard value of this variable has several
-elements including @code{".o"}, @code{".elc"}, @code{".dvi"} and @code{"~"}.
-The effect is that, for example, @samp{foo} completes to @samp{foo.c}
-even though @samp{foo.o} exists as well.  If the only possible completions
-are files that end in ``ignored'' strings, they are not ignored.@refill
+ignored.  The variable @code{completion-ignored-extensions} contains a
+list of strings; a file whose name ends in any of those strings is
+ignored as a possible completion.  The standard value of this variable
+has several elements including @code{".o"}, @code{".elc"}, @code{".dvi"}
+and @code{"~"}.  The effect is that, for example, @samp{foo} can
+complete to @samp{foo.c} even though @samp{foo.o} exists as well.
+However, if @emph{all} the possible completions end in ``ignored''
+strings, then they are not ignored.  Ignored extensions do not apply to
+lists of completions---those always mention all possible completions.
 
 @vindex completion-auto-help
   If a completion command finds the next character is undetermined, it
@@ -312,47 +375,135 @@ then in contexts where @code{completing-read} allows answers that are
 not valid completions, an extra @key{RET} must be typed to confirm the
 response.  This is helpful for catching typos.
 
-@node Repetition,, Completion, Minibuffer
+@node Minibuffer History, Repetition, Completion, Minibuffer
+@section Minibuffer History
+@cindex minibuffer history
+@cindex history of minibuffer input
+
+  Every argument that you enter with the minibuffer is saved on a
+@dfn{minibuffer history list} so that you can use it again later in
+another argument.  Special commands load the text of an earlier argument
+in the minibuffer.  They discard the old minibuffer contents, so you can
+think of them as moving through the history of previous arguments.
+
+@table @kbd
+@item @key{UP}
+@itemx M-p
+Move to the next earlier argument string saved in the minibuffer history
+(@code{previous-history-element}).
+@item @key{DOWN}
+@itemx M-n
+Move to the next later argument string saved in the minibuffer history
+(@code{next-history-element}).
+@item M-r @var{regexp} @key{RET}
+Move to an earlier saved argument in the minibuffer history that has a
+match for @var{regexp} (@code{previous-matching-history-element}).
+@item M-s @var{regexp} @key{RET}
+Move to a later saved argument in the minibuffer history that has a
+match for @var{regexp} (@code{next-matching-history-element}).
+@end table
+
+@kindex M-p @r{(minibuffer history)}
+@kindex M-n @r{(minibuffer history)}
+@findex next-history-element
+@findex previous-history-element
+  The simplest way to reuse the saved arguments in the history list is
+to move through the history list one element at a time.  While in the
+minibuffer, use @kbd{M-p} or up-arrow (@code{previous-history-element})
+to ``move to'' the next earlier minibuffer input, and use @kbd{M-n} or
+down-arrow (@code{next-history-element}) to ``move to'' the next later
+input.
+
+  The previous input that you fetch from the history entirely replaces
+the contents of the minibuffer.  To use it as the argument, exit the
+minibuffer as usual with @key{RET}.  You can also edit the text before
+you reuse it; this does not change the history element that you
+``moved'' to, but your new argument does go at the end of the history
+list in its own right.
+
+  For many minibuffer arguments there is a ``default'' value.  In some
+cases, the minibuffer history commands know the default value.  Then you
+can insert the default value into the minibuffer as text by using
+@kbd{M-n} to move ``into the future'' in the history.
+
+@findex previous-matching-history-element
+@findex next-matching-history-element
+@kindex M-r @r{(minibuffer history)}
+@kindex M-s @r{(minibuffer history)}
+  There are also commands to search forward or backward through the
+history; they search for history elements that match a regular
+expression that you specify with the minibuffer.  @kbd{M-r}
+(@code{previous-matching-history-element}) searches older elements in
+the history, while @kbd{M-s} (@code{next-matching-history-element})
+searches newer elements.  By special dispensation, these commands can
+use the minibuffer to read their arguments even though you are already
+in the minibuffer when you issue them.  As with incremental searching,
+an uppercase letter in the regular expression makes the search
+case-sensitive (@pxref{Search Case}).
+
+  All uses of the minibuffer record your input on a history list, but
+there are separate history lists for different kinds of arguments.  For
+example, there is a list for file names, used by all the commands that
+read file names.
+
+  There are several other very specific history lists, including one for
+command names read by @kbd{M-x}, one for buffer names, one for arguments
+of commands like @code{query-replace}, and one for compilation commands
+read by @code{compile}.  Finally, there is one ``miscellaneous'' history
+list that most minibuffer arguments use.
+
+@c Do wee need this?
+@ignore
+@vindex history-length
+  The variable @code{history-length} specifies the maximum length of a
+minibuffer history list; once a list gets that long, the oldest element
+is deleted each time an element is added.  If the value of
+@code{history-length} is @code{t}, though, there is no maximum length
+and elements are never deleted.
+@end ignore
+
+@node Repetition,  , Minibuffer History, Minibuffer
 @section Repeating Minibuffer Commands
 @cindex command history
 @cindex history of commands
 
   Every command that uses the minibuffer at least once is recorded on a
-special history list, together with the values of the minibuffer arguments,
-so that you can repeat the command easily.  In particular, every
-use of @kbd{Meta-x} is recorded, since @kbd{M-x} uses the minibuffer to
-read the command name.
+special history list, together with the values of its arguments, so that
+you can repeat the entire command.  In particular, every use of
+@kbd{M-x} is recorded there, since @kbd{M-x} uses the minibuffer to read
+the command name.
 
 @findex list-command-history
 @c widecommands
 @table @kbd
-@item C-x @key{ESC}
-Re-execute a recent minibuffer command @*(@code{repeat-complex-command}).
+@item C-x @key{ESC} @key{ESC}
+Re-execute a recent minibuffer command (@code{repeat-complex-command}).
 @item M-p
 Within @kbd{C-x @key{ESC}}, move to previous recorded command
 (@code{previous-history-element}).
 @item M-n
 Within @kbd{C-x @key{ESC}}, move to the next (more recent) recorded
-command (@code{next-history-element}).@refill
+command (@code{next-history-element}).
 @item M-x list-command-history
 Display the entire command history, showing all the commands
-@kbd{C-x @key{ESC}} can repeat, most recent first.@refill
+@kbd{C-x @key{ESC} @key{ESC}} can repeat, most recent first.
 @end table
 
-@kindex C-x ESC
+@kindex C-x ESC ESC
 @findex repeat-complex-command
-  @kbd{C-x @key{ESC}} is used to re-execute a recent command that used
-the minibuffer. With no argument, it repeats the last command.  A numeric
-argument specifies which command to repeat; 1 means the last one, and
-larger numbers specify earlier commands.
-
-  @kbd{C-x @key{ESC}} works by turning the previous command into a Lisp
-expression and then entering a minibuffer initialized with the text for
-that expression.  If you type just @key{RET}, the command is repeated as
-before.  You can also change the command by editing the Lisp expression.
-The expression you finally submit will be executed.  The repeated
-command is added to the front of the command history unless it is
-identical to the most recently executed command already there.
+  @kbd{C-x @key{ESC} @key{ESC}} is used to re-execute a recent
+minibuffer-using command.  With no argument, it repeats the last such
+command.  A numeric argument specifies which command to repeat; one
+means the last one, and larger numbers specify earlier ones.
+
+  @kbd{C-x @key{ESC} @key{ESC}} works by turning the previous command
+into a Lisp expression and then entering a minibuffer initialized with
+the text for that expression.  If you type just @key{RET}, the command
+is repeated as before.  You can also change the command by editing the
+Lisp expression.  Whatever expression you finally submit is what will be
+executed.  The repeated command is added to the front of the command
+history unless it is identical to the most recently executed command
+already there.
 
   Even if you don't understand Lisp syntax, it will probably be obvious
 which command is displayed for repetition.  If you do not change the text,
@@ -362,17 +513,17 @@ you can be sure the command will repeat exactly as before.
 @kindex M-p
 @findex next-complex-command
 @findex previous-complex-command
-  If you are in the minibuffer for @kbd{C-x @key{ESC}} and the command shown
-to you is not the one you want to repeat, you can move around the list of
-previous commands using @kbd{M-n} and @kbd{M-p}.  @kbd{M-p} replaces the
-contents of the minibuffer with the next earlier recorded command, and
-@kbd{M-n} replaces it with the next later command.  After finding the
-desired previous command, you can edit its expression and then
-resubmit it by typing @key{RET}.  Any editing you have done on the
-command to be repeated is lost if you use @kbd{M-n} or @kbd{M-p}.
-
-@kbd{M-n} and @kbd{M-p} are specially defined within @kbd{C-x @key{ESC}}
-to run the commands @code{previous-history-element} and
+  If you are in the minibuffer for @kbd{C-x @key{ESC} @key{ESC}} and the
+command shown to you is not the one you want to repeat, you can move
+around the list of previous commands using @kbd{M-n} and @kbd{M-p}.
+@kbd{M-p} replaces the contents of the minibuffer with the next earlier
+recorded command, and @kbd{M-n} replaces it with the next later command.
+After finding the desired previous command, you can edit its expression
+and then resubmit it by typing @key{RET}.  Any editing you have done on
+the command to be repeated is lost if you use @kbd{M-n} or @kbd{M-p}.
+
+@kbd{M-n} and @kbd{M-p} are specially defined within @kbd{C-x @key{ESC}
+@key{ESC}} to run the commands @code{previous-history-element} and
 @code{next-history-element}.
 
 @vindex command-history
index 9435e1e..fe7810f 100644 (file)
@@ -3,22 +3,20 @@
 @chapter Registers
 @cindex registers
 
-  Emacs @dfn{registers} are places in which you can save text or
-positions for later use.  Text saved in a register can be copied into
-the buffer once or many times; a position saved in a register is used by
-moving point to that position.  Rectangles can also be copied into and
-out of registers (@pxref{Rectangles}).
+  XEmacs @dfn{registers} are places in which you can save text or
+positions for later use.  Once you save text or a rectangle in a
+register, you can copy it into the buffer once or many times; a position
+saved in a register is used by moving point to that position.
+Rectangles can also be copied into and out of registers
+(@pxref{Rectangles}).
 
-  Each register has a name, which is a single character.  A register can
-store either a piece of text, a position, or a rectangle, but only one
-thing at any given time.  Whatever you store in a register remains
-there until you store something else in that register.
-
-@menu
-* RegPos::    Saving positions in registers.
-* RegText::   Saving text in registers.
-* RegRect::   Saving rectangles in registers.
-@end menu
+@findex view-register
+  Each register has a name which is a single character.  A register can
+store a piece of text, a rectangle, a position, a window configuration,
+or a file name, but only one thing at any given time.  Whatever you
+store in a register remains there until you store something else in that
+register.  To see what a register @var{r} contains, use @kbd{M-x
+view-register}.
 
 @table @kbd
 @item M-x view-register @key{RET} @var{r}
@@ -29,34 +27,49 @@ Display a description of what register @var{r} contains.
   @kbd{M-x view-register} reads a register name as an argument and then
 displays the contents of the specified register.
 
+@menu
+* Position: RegPos.           Saving positions in registers.
+* Text: RegText.              Saving text in registers.
+* Rectangle: RegRect.         Saving rectangles in registers.
+* Configurations: RegConfig.  Saving window configurations in registers.
+* Files: RegFiles.            File names in registers.
+* Numbers: RegNumbers.        Numbers in registers.
+* Bookmarks::                 Bookmarks are like registers, but persistent.
+@end menu
+
 @node RegPos, RegText, Registers, Registers
 @section Saving Positions in Registers
 
-  Saving a position records a spot in a buffer so you can move
-back there later.  Moving to a saved position re-selects the buffer
-and moves point to the spot.
+  Saving a position records a place in a buffer so that you can move
+back there later.  Moving to a saved position switches to that buffer
+and moves point to that place in it.
 
 @table @kbd
-@item C-x r SPC @var{r}
-Save the location of point in register @var{r} (@code{point-to-register}).
+@item C-x r @key{SPC} @var{r}
+Save position of point in register @var{r} (@code{point-to-register}).
 @item C-x r j @var{r}
-Jump to the location saved in register @var{r} (@code{register-to-point}).
+Jump to the position saved in register @var{r} (@code{jump-to-register}).
 @end table
 
 @kindex C-x r SPC
 @findex point-to-register
-  To save the current location of point in a register, choose a name
-@var{r} and type @kbd{C-x r SPC @var{r}}.  The register @var{r} retains
-the location thus saved until you store something else in that
-register.@refill
+  To save the current position of point in a register, choose a name
+@var{r} and type @kbd{C-x r @key{SPC} @var{r}}.  The register @var{r}
+retains the position thus saved until you store something else in that
+register.
 
 @kindex C-x r j
-@findex register-to-point
-  The command @kbd{C-x r j @var{r}} moves point to the location recorded
+@findex jump-to-register
+  The command @kbd{C-x r j @var{r}} moves point to the position recorded
 in register @var{r}.  The register is not affected; it continues to
 record the same location.  You can jump to the same position using the
 same register as often as you want.
 
+  If you use @kbd{C-x r j} to go to a saved position, but the buffer it
+was saved from has been killed, @kbd{C-x r j} tries to create the buffer
+again by visiting the same file.  Of course, this works only for buffers
+that were visiting files.
+
 @node RegText, RegRect, RegPos, Registers
 @section Saving Text in Registers
 
@@ -65,46 +78,234 @@ can be impractical to use the kill ring, since each subsequent kill moves
 the piece of text further down on the ring.  It becomes hard to keep
 track of the argument needed to retrieve the same text with @kbd{C-y}.  An
 alternative is to store the text in a register with @kbd{C-x r s}
-(@code{copy-to-register}) and then retrieve it with @kbd{C-x r g}
+(@code{copy-to-register}) and then retrieve it with @kbd{C-x r i}
 (@code{insert-register}).
 
 @table @kbd
 @item C-x r s @var{r}
 Copy region into register @var{r} (@code{copy-to-register}).
 @item C-x r g @var{r}
+@itemx C-x r i @var{r}
 Insert text contents of register @var{r} (@code{insert-register}).
 @end table
 
 @kindex C-x r s
 @kindex C-x r g
+@kindex C-x r i
 @findex copy-to-register
 @findex insert-register
   @kbd{C-x r s @var{r}} stores a copy of the text of the region into the
-register named @var{r}.  Given a numeric argument, @kbd{C-x r s} deletes the
-text from the buffer as well.
+register named @var{r}.  Given a numeric argument, @kbd{C-x r s @var{r}}
+deletes the text from the buffer as well.
 
-  @kbd{C-x r g @var{r}} inserts the text from register @var{r} in the buffer.
-By default it leaves point before the text and places the mark after it. 
-With a numeric argument, it puts point after the text and the mark
-before it.
+  @kbd{C-x r i @var{r}} inserts the text from register @var{r} in the buffer.
+By default it leaves point before the text and places the mark after
+it. With a numeric argument (@kbd{C-u}), it puts point after the text
+and the mark before it.
 
-@node RegRect,, RegText, Registers
+@node RegRect, RegConfig, RegText, Registers
 @section Saving Rectangles in Registers
 @cindex rectangle
-@findex copy-region-to-rectangle
 
   A register can contain a rectangle instead of lines of text.  The rectangle
 is represented as a list of strings.  @xref{Rectangles}, for basic
 information on rectangles and how to specify rectangles in a buffer.
 
 @table @kbd
+@findex copy-rectangle-to-register
+@kindex C-x r r
 @item C-x r r @var{r}
-Copy the region-rectangle into register @var{r}(@code{copy-rectangle-to-register}).
-With a numeric argument, delete it as well.
+Copy the region-rectangle into register @var{r}
+(@code{copy-rectangle-to-register}).  With a numeric argument, delete it
+as well.
 @item C-x r g @var{r}
+@itemx C-x r i @var{r}
 Insert the rectangle stored in register @var{r} (if it contains a
 rectangle) (@code{insert-register}).
 @end table
 
-  The @kbd{C-x r g} command inserts linear text if the register contains
+  The @kbd{C-x r i @var{r}} command inserts linear text if the register
+  contains
 that, or inserts a rectangle if the register contains one.
+
+  See also the command @code{sort-columns}, which you can think of
+as sorting a rectangle.  @xref{Sorting}.
+
+@node RegConfig, RegNumbers, RegRect, Registers
+@section Saving Window Configurations in Registers
+
+@findex window-configuration-to-register
+@findex frame-configuration-to-register
+@kindex C-x r w
+@c @kindex C-x r f
+  You can save the window configuration of the selected frame in a
+register, or even the configuration of all windows in all frames, and
+restore the configuration later.
+
+@table @kbd
+@item C-x r w @var{r}
+Save the state of the selected frame's windows in register @var{r}
+(@code{window-configuration-to-register}).
+@c @item C-x r f @var{r}
+@item M-x frame-configuration-to-register @key{RET} @var{r}
+Save the state of all frames, including all their windows, in register
+@var{r} (@code{frame-configuration-to-register}).
+@end table
+
+  Use @kbd{C-x r j @var{r}} to restore a window or frame configuration.
+This is the same command used to restore a cursor position.  When you
+restore a frame configuration, any existing frames not included in the
+configuration become invisible.  If you wish to delete these frames
+instead, use @kbd{C-u C-x r j @var{r}}.
+
+@node RegNumbers, RegFiles, RegConfig, Registers
+@section Keeping Numbers in Registers
+
+  There are commands to store a number in a register, to insert
+the number in the buffer in decimal, and to increment it.  These commands
+can be useful in keyboard macros (@pxref{Keyboard Macros}).
+
+@table @kbd
+@item C-u @var{number} C-x r n @var{reg}
+@kindex C-x r n
+@findex number-to-register
+Store @var{number} into register @var{reg} (@code{number-to-register}).
+@item C-u @var{number} C-x r + @var{reg}
+@kindex C-x r +
+@findex increment-register
+Increment the number in register @var{reg} by @var{number}
+(@code{increment-register}).
+@item C-x r g @var{reg}
+Insert the number from register @var{reg} into the buffer.
+@end table
+
+  @kbd{C-x r g} is the same command used to insert any other
+sort of register contents into the buffer.
+
+@node RegFiles, Bookmarks, RegNumbers, Registers
+@section Keeping File Names in Registers
+
+  If you visit certain file names frequently, you can visit them more
+conveniently if you put their names in registers.  Here's the Lisp code
+used to put a file name in a register:
+
+@smallexample
+(set-register ?@var{r} '(file . @var{name}))
+@end smallexample
+
+@need 3000
+@noindent
+For example,
+
+@smallexample
+(set-register ?z '(file . "/usr/src/xemacs/src/ChangeLog"))
+@end smallexample
+
+@noindent
+puts the file name shown in register @samp{z}.
+
+  To visit the file whose name is in register @var{r}, type @kbd{C-x r j
+@var{r}}.  (This is the same command used to jump to a position or
+restore a frame configuration.)
+
+@node Bookmarks,  , RegFiles, Registers
+@section Bookmarks
+@cindex bookmarks
+
+  @dfn{Bookmarks} are somewhat like registers in that they record
+positions you can jump to.  Unlike registers, they have long names, and
+they persist automatically from one Emacs session to the next.  The
+prototypical use of bookmarks is to record ``where you were reading'' in
+various files.
+
+  Note: bookmark.el is distributed in edit-utils package.  You need to
+install that to use bookmark facility (@pxref{Packages}).
+
+@table @kbd
+@item C-x r m @key{RET}
+Set the bookmark for the visited file, at point.
+
+@item C-x r m @var{bookmark} @key{RET}
+@findex bookmark-set
+Set the bookmark named @var{bookmark} at point (@code{bookmark-set}).
+
+@item C-x r b @var{bookmark} @key{RET}
+@findex bookmark-jump
+Jump to the bookmark named @var{bookmark} (@code{bookmark-jump}).
+
+@item C-x r l
+@findex list-bookmarks
+List all bookmarks (@code{list-bookmarks}).
+
+@item M-x bookmark-save
+@findex bookmark-save
+Save all the current bookmark values in the default bookmark file.
+@end table
+
+@kindex C-x r m
+@findex bookmark-set
+@kindex C-x r b
+@findex bookmark-jump
+  The prototypical use for bookmarks is to record one current position
+in each of several files.  So the command @kbd{C-x r m}, which sets a
+bookmark, uses the visited file name as the default for the bookmark
+name.  If you name each bookmark after the file it points to, then you
+can conveniently revisit any of those files with @kbd{C-x r b}, and move
+to the position of the bookmark at the same time.
+
+@kindex C-x r l
+  To display a list of all your bookmarks in a separate buffer, type
+@kbd{C-x r l} (@code{list-bookmarks}).  If you switch to that buffer,
+you can use it to edit your bookmark definitions or annotate the
+bookmarks.  Type @kbd{C-h m} in that buffer for more information about
+its special editing commands.
+
+  When you kill XEmacs, XEmacs offers to save your bookmark values in
+your default bookmark file, @file{~/.emacs.bmk}, if you have changed any
+bookmark values.  You can also save the bookmarks at any time with the
+@kbd{M-x bookmark-save} command.  The bookmark commands load your
+default bookmark file automatically.  This saving and loading is how
+bookmarks persist from one XEmacs session to the next.
+
+@vindex bookmark-save-flag
+  If you set the variable @code{bookmark-save-flag} to 1, then each
+command that sets a bookmark will also save your bookmarks; this way,
+you don't lose any bookmark values even if XEmacs crashes.  (The value,
+if a number, says how many bookmark modifications should go by between
+saving.)
+
+@vindex bookmark-search-size
+  Bookmark position values are saved with surrounding context, so that
+@code{bookmark-jump} can find the proper position even if the file is
+modified slightly.  The variable @code{bookmark-search-size} says how
+many characters of context to record, on each side of the bookmark's
+position.
+
+  Here are some additional commands for working with bookmarks:
+
+@table @kbd
+@item M-x bookmark-load @key{RET} @var{filename} @key{RET}
+@findex bookmark-load
+Load a file named @var{filename} that contains a list of bookmark
+values.  You can use this command, as well as @code{bookmark-write}, to
+work with other files of bookmark values in addition to your default
+bookmark file.
+
+@item M-x bookmark-write @key{RET} @var{filename} @key{RET}
+@findex bookmark-write
+Save all the current bookmark values in the file @var{filename}.
+
+@item M-x bookmark-delete @key{RET} @var{bookmark} @key{RET}
+@findex bookmark-delete
+Delete the bookmark named @var{bookmark}.
+
+@item M-x bookmark-insert-location @key{RET} @var{bookmark} @key{RET}
+@findex bookmark-insert-location
+Insert in the buffer the name of the file that bookmark @var{bookmark}
+points to.
+
+@item M-x bookmark-insert @key{RET} @var{bookmark} @key{RET}
+@findex bookmark-insert
+Insert in the buffer the @emph{contents} of the file that bookmark
+@var{bookmark} points to.
+@end table
index 0ad18f7..cbbf13c 100644 (file)
@@ -90,9 +90,8 @@ translation approved by the author instead of in the original English.
 @page
 @ifinfo
 @node Top, License,, (dir)
+@top The XEmacs Editor
 
-The XEmacs Editor
-*****************
 
 XEmacs is the extensible, customizable, self-documenting real-time
 display editor.  This Info file describes how to edit with Emacs
index 993621f..dcf8740 100644 (file)
@@ -1,3 +1,23 @@
+2000-01-18  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.27 is released.
+
+2000-01-18  Martin Buchholz  <martin@xemacs.org>
+
+       * minitar.c: Errno.h --> errno.h.  Remove errno declaration.
+
+2000-01-13  Kirill 'Big K' Katsnelson  <kkm@dtmx.com>
+
+       * xemacs.mak: Added USE_PORTABLE_DUMPER make command line macro.
+       (temacs:) Added dependency for lastfile.lib so that 'make temacs'
+       builds it first.
+
+1999-12-28  Scott Blachowicz  <Scott.Blachowicz@seaslug.org>
+
+       * minitar.mak: Add vars to allow building from main xemacs.mak.
+
+       * xemacs.mak: Add rules to build & install minitar.
+
 1999-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.26 is released.
index e012c18..7571782 100644 (file)
@@ -611,16 +611,8 @@ on various systems. */
 /* Should movemail use hesiod for getting POP server host? */
 #undef HESIOD
 /* Determine type of mail locking. */
-/* Play preprocessor games so that configure options override s&m files */
-#undef REAL_MAIL_USE_LOCKF
-#undef REAL_MAIL_USE_FLOCK
-#undef MAIL_USE_LOCKF
-#undef MAIL_USE_FLOCK
-#ifdef REAL_MAIL_USE_FLOCK
-#define MAIL_USE_FLOCK
-#endif
-#ifdef REAL_MAIL_USE_LOCKF
-#define MAIL_USE_LOCKF
-#endif
+#undef MAIL_LOCK_LOCKF
+#undef REAL_LOCK_FLOCK
+#undef MAIL_LOCK_DOT
 
 #endif /* _SRC_CONFIG_H_ */
index 75127f6..2fa8b52 100644 (file)
@@ -13,7 +13,7 @@
 
 
 #include <stdio.h>
-#include <Errno.h>
+#include <errno.h>
 
 #include <zlib.h>
 
@@ -43,7 +43,6 @@ int makepath(char *path)
 {
   char tmp[MAXNAMELEN];
   char *cp;
-  extern int errno;
 
   for (cp=path; cp; cp = (char*)strchr(cp+1,'/')){
     if (!*cp)
index 6218f56..50e5c0d 100644 (file)
@@ -1,10 +1,12 @@
 ZLIB=\path\to\zlib
+LIB_SRC=.
+NT=.
 
-all: minitar.exe
+all: $(LIB_SRC)\minitar.exe
 
-minitar.exe: minitar.obj
-       cl -o minitar.exe minitar.obj $(ZLIB)\zlib.lib
+$(LIB_SRC)\minitar.exe: $(LIB_SRC)\minitar.obj
+       cl -o $@ $(LIB_SRC)\minitar.obj $(ZLIB)\zlib.lib
 
-minitar.obj: minitar.c
-       cl -c minitar.c -I $(ZLIB)
+$(LIB_SRC)\minitar.obj: $(NT)\minitar.c
+       cl -Fo$@ -c $(NT)\minitar.c -I $(ZLIB)
 
index 9090b73..e04f1c3 100644 (file)
@@ -129,12 +129,18 @@ DEBUG_XEMACS=0
 !if !defined(USE_UNION_TYPE)
 USE_UNION_TYPE=0
 !endif
+!if !defined(USE_MINITAR)
+USE_MINITAR=1
+!endif
 !if !defined(USE_MINIMAL_TAGBITS)
 USE_MINIMAL_TAGBITS=0
 !endif
 !if !defined(USE_INDEXED_LRECORD_IMPLEMENTATION)
 USE_INDEXED_LRECORD_IMPLEMENTATION=0
 !endif
+!if !defined(USE_PORTABLE_DUMPER)
+USE_PORTABLE_DUMPER=0
+!endif
 !if !defined(GUNG_HO)
 GUNG_HO=0
 !endif
@@ -341,6 +347,10 @@ TAGBITS_DEFINES=-DUSE_MINIMAL_TAGBITS
 LRECORD_DEFINES=-DUSE_INDEXED_LRECORD_IMPLEMENTATION
 !endif
 !if $(USE_UNION_TYPE)
+!if $(USE_PORTABLE_DUMPER)
+DUMPER_DEFINES=-DPDUMP
+!endif
+
 UNION_DEFINES=-DUSE_UNION_TYPE
 !endif
 
@@ -359,7 +369,7 @@ PATH_DEFINES=-DPATH_PREFIX=\"$(PATH_PREFIX)\"
 INCLUDES=$(X_INCLUDES) $(MSW_INCLUDES) -I$(XEMACS)\nt\inc -I$(XEMACS)\src -I$(XEMACS)\lwlib
 
 DEFINES=$(X_DEFINES) $(MSW_DEFINES) $(MULE_DEFINES) \
-       $(TAGBITS_DEFINES) $(LRECORD_DEFINES) $(UNION_DEFINES) \
+       $(TAGBITS_DEFINES) $(LRECORD_DEFINES) $(UNION_DEFINES) $(DUMPER_DEFINES)\
        -DWIN32 -D_WIN32 -DWIN32_LEAN_AND_MEAN -DWINDOWSNT -Demacs \
        -DHAVE_CONFIG_H $(PROGRAM_DEFINES) $(PATH_DEFINES)
 
@@ -428,6 +438,8 @@ $(LIB_SRC)/movemail.exe: $(LIB_SRC)/movemail.c $(LIB_SRC)/pop.c $(ETAGS_DEPS)
        cd $(LIB_SRC)
        $(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc $(LIB_SRC_DEFINES) $(CFLAGS) -Fe$@ $** wsock32.lib -link -incremental:no
        cd $(NT)
+$(LIB_SRC)/minitar.exe : $(NT)/minitar.mak $(NT)/minitar.c
+       nmake -nologo -f minitar.mak ZLIB="$(ZLIB_DIR)" NT="$(NT)" LIB_SRC="$(LIB_SRC)"
 
 LIB_SRC_TOOLS = \
        $(LIB_SRC)/make-docfile.exe     \
@@ -437,6 +449,14 @@ LIB_SRC_TOOLS = \
        $(LIB_SRC)/sorted-doc.exe       \
        $(LIB_SRC)/wakeup.exe           \
        $(LIB_SRC)/etags.exe            
+!if $(USE_MINITAR)
+LIB_SRC_TOOLS = \
+       $(LIB_SRC_TOOLS) \
+       $(LIB_SRC)/minitar.exe
+!endif
+
+# Shorthand target
+minitar: $(LIB_SRC)/minitar.exe
 
 #------------------------------------------------------------------------------
 
@@ -1142,6 +1162,7 @@ $(DOC): $(LIB_SRC)\make-docfile.exe
        $(LIB_SRC)\make-docfile.exe -a $(DOC) -d $(TEMACS_SRC) $(DOC_SRC9)
 
 update-elc:
+       set EMACSBOOTSTRAPMODULEPATH=$(MODULES)
        set EMACSBOOTSTRAPLOADPATH=$(LISP);$(PACKAGE_PATH)
        set EMACSBOOTSTRAPMODULEPATH=$(MODULES)
        $(TEMACS) -batch -l $(TEMACS_DIR)\..\lisp\update-elc.el
@@ -1163,7 +1184,7 @@ all:      $(XEMACS)\Installation $(OUTDIR)\nul $(LASTFILE) $(LWLIB) \
        $(LIB_SRC_TOOLS) $(RUNEMACS) $(TEMACS) update-elc $(DOC) dump-xemacs \
        $(LISP)/auto-autoloads.el $(LISP)/custom-load.el info
 
-temacs: $(TEMACS)
+temacs: $(LASTFILE) $(TEMACS)
 
 # use this rule to install the system
 install:       all
@@ -1321,6 +1342,9 @@ XEmacs $(XEMACS_VERSION_STRING) $(xemacs_codename:"=\") configured for `$(EMACS_
 !if $(USE_UNION_TYPE)
   Using union type for Lisp object storage.
 !endif
+!if $(USE_PORTABLE_DUMPER)
+  Using portable dumper.
+!endif
 !if $(DEBUG_XEMACS)
   Compiling in extra debug checks. XEmacs will be slow!
 !endif
index 2ba3d85..b0a23b9 100644 (file)
        (Vcharset_thai_tis620): Likewise.
        (Vcharset_katakana_jisx0201): Likewise.
 
-1999-12-31  Martin Buchholz <martin@xemacs.org>
+2000-01-18  Martin Buchholz <martin@xemacs.org>
 
-       * XEmacs 21.2.26 is released.
+       * XEmacs 21.2.27 is released.
 
-1999-12-31  Andy Piper  <andy@xemacs.org>
+2000-01-18  Martin Buchholz  <martin@xemacs.org>
 
-       * glyphs-x.c (x_widget_instantiate): Avoid X errors calling
-       XMapWindow() on a NULL pointer X window.
+       * glyphs-eimage.c (struct tiff_error_struct):
+       (tiff_error_func):
+       (tiff_warning_func):
+       #if HAVE_VSNPRINTF ==> #ifdef HAVE_VSNPRINTF
 
-1999-12-31  Martin Buchholz  <martin@xemacs.org>
+       * unexmips.c:
+       * unexhp9k3.c:
+       * unexfreebsd.c:
+       * unexec.c: Remove vestigial Lucid C code.
+       * unexalpha.c:
+       * unexaix.c:
+       * termcap.c:
+       * libsst.c: Ansify.
+       Remove declarations of errno and strerror().
 
-       * data.c (indirect_function): Use signal_void_function_error().
+       * eval.c (Fbacktrace): Small Purify-cation.  Fix docstring.
 
-       * lisp.h: Modify prototypes for signal_*().  Add SUBR_FUNCTION macro.
+       * .dbxrc (run-temacs): Use the horrible ${1+"$@"} instead of "$@".
 
-       * eval.c (PRIMITIVE_FUNCALL): Optimize.
-       (signal_void_function_error): return result of Fsignal().
-       (signal_invalid_function_error): return result of Fsignal().
-       (signal_wrong_number_of_arguments_error): return result of Fsignal().
-       (signal_malformed_list_error): Add DOESNT_RETURN.
-       (signal_malformed_property_list_error): Add DOESNT_RETURN.
-       (signal_circular_list_error): Add DOESNT_RETURN.
-       (signal_circular_property_list_error): Add DOESNT_RETURN.
-       (Feval): Use returned results of signal_*().  Avoids a crash!
-       (Ffuncall): Use returned results of signal_*(). Avoids the crash:
-         (setq debug-on-error t) (funcall 'foo) kbd{r42} kbd{RET}
-       - Only check for fun_nargs < subr_min_args if fun_nargs != max_args.
-       (function_argcount): Use signal_invalid_function_error().
-       (funcall_lambda): Use signal_wrong_number_of_arguments_error().
-       Use signal_invalid_function_error().
-
-1999-12-28  Andy Piper  <andy@xemacs.org>
-
-       * debug.c: rename debug_loop elements to X_ to avoid name clashes.
-
-       * menubar-x.c (menu_item_descriptor_to_widget_value_1): strdup
-       string_chars.
-       (menu_item_descriptor_to_widget_value_1): strdup name.
-       (pre_activate_callback): strdup name.
-
-       * scrollbar-x.c (scrollbar_instance_to_widget_value): strdup name.
-       (x_update_scrollbar_instance_status): use free_widget_value_tree.
-
-       * dialog-x.c (maybe_run_dbox_text_callback): strdup name.  use
-       free_widget_value_tree.
-       (dbox_descriptor_to_widget_value): ditto.
-
-       * gui-x.c (widget_value_unwind): use free_widget_value_tree.
-       (gui_items_to_widget_values_1): ditto.
-       (gui_items_to_widget_values): ditto.
-       (free_popup_widget_value_tree): free name.
-
-1999-12-27  Andy Piper  <andy@xemacs.org>
-
-       * nt.c (fstat): use get_osfhandle rather than the handle
-       directly. From Fabrice Popineau.
-
-       * process-nt.c (nt_open_network_stream): take types into account
-       when warning. From Fabrice Popineau.
-
-1999-12-24  Martin Buchholz <martin@xemacs.org>
-
-       * XEmacs 21.2.25 is released.
-
-1999-12-22  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
-
-       * syntax.c (vars_of_syntax): Initialize parse-sexp_ignore_comments.
-
-1999-12-21  Martin Buchholz  <martin@xemacs.org>
-
-       * editfns.c (Fpoint_min): 
-       (Fpoint_min_marker): 
-       (Fpoint_max): 
-       (Fpoint_max_marker): 
-       (Fchar_after): 
-       (Fchar_before): 
-       Docstring fixes.  What's a `buffer pointer' anyways?
-
-       * editfns.c (char=): Remove unused and undocumented optional
-       third BUFFER argument.
-
-       * toolbar.h (DEVICE_SUPPORTS_TOOLBARS_P): 
-       * fns.c (plists_differ): 
-       * elhash.c (HASH_CODE): 
-       * elhash.c (KEYS_EQUAL_P): 
-       * redisplay-output.c (redisplay_move_cursor): 
-       * redisplay.c (create_text_block): 
-       * floatfns.c (Flogb): 
-       * glyphs-msw.c (mswindows_initialize_image_instance_mask): 
-       * glyphs-msw.c (xpm_to_eimage): 
-       * buffer.h (POINT_MARKER_P): 
-       * syntax.c (scan_lists): 
-       * cmdloop.c (Fcommand_loop_1): 
-       * widget.c (Fwidget_apply): 
-       * regex.c (STREQ): 
-       Remove extra parens, esp. of the form ((expr))
-
-       * floatfns.c (Flogb): Make 64-bit clean.
-
-1999-12-12  Daniel Pittman  <daniel@danann.net>
-
-       * configure.in:
-       * configure.usage:
-        Clean up Athena widget support:
-       - Add `with-athena' to select a variant.
-       - Remove all `athena3d' options.
-       - Robust detection of Athena libraries and headers.
-        - Refuse to build with mismatched library and headers.
-        - Only build a 3d Athena if the user asks for it.
-
-1999-12-21  Andy Piper  <andy@xemacs.org>
-
-       * redisplay.c (redisplay_frame): check for faces changed when
-       reseting subwindow caches.
-
-       * glyphs.h (struct ii_keyword_entry): add copy_p.
-       (struct image_instantiator_methods): add query_geometry_method and
-       layout_children_method.
-       (IIFORMAT_VALID_GENERIC_KEYWORD): new macro to take into account
-       copying characteristics of keywords.
-       (IIFORMAT_VALID_NONCOPY_KEYWORD): new macro for defining keywords
-       whose arguments should not be copied by the specifier code.
-       (image_instance_geometry): new enum for layouts.
-       (struct Lisp_Image_Instance): re-jig for layouts and update
-       macros.
-
-       * glyphs.c (string_instantiate): rename variables.
-       (image_instantiate): add strings to those widgets that are
-       instantiated per-window.
-       (image_copy_vector_instantiator): new function for copying glyph
-       specifier instantiators.
-       (image_copy_instantiator): ditto.
+2000-01-16  Martin Buchholz  <martin@xemacs.org>
 
-       * glyphs-x.c (x_update_subwindow): use new face update functions.
-       (update_widget_face): update to use new lwlib arg functions.
-       (update_tab_widget_face): new function for updating tab control
-       label faces.
-       (x_widget_instantiate): use new face update functions and new
-       lwlib arg functions.
-       (x_tab_control_instantiate): ditto.
-       (x_tab_control_set_property): ditto.
-
-       * glyphs-widget.c (VALID_GUI_KEYWORDS): use NONCOPY keyword for
-       callbacks and other things that could recurse.
-       (VALID_GUI_KEYWORDS): 
-
-       * event-msw.c: fix cpp stuff for cygwin < b20.
-
-       * config.h.in: move uid_t and friends to before the s&m files so
-       that they can be used there.
-
-       * Makefile.in.in (debug-temacs): new target that adds emacs
-       environment before invoking gdb.
-
-       * lwlib.h (_widget_args): new structure for holding widget
-       args. It is reference counted so that we don't have to copy Xt
-       args.
-       (_widget_value): remove widget args. Add reference to widget_args.
-
-       * lwlib.c (free_widget_value_contents): free widget args using
-       free_widget_value_args.
-
-       * lwlib-Xaw.c (xaw_update_one_widget): use new arg packet.
-       (xaw_update_one_widget): use XtIsSubclass for determining labels.
-
-       * lwlib.c (lw_add_value_args_to_args): modify to use our reference
-       counted arg packet.
-       (lw_add_widget_value_arg): new function. Add an arg to the arg
-       packet.
-       (free_widget_value_args): new function. Remove a reference counted
-       arg packet.
-       (lw_copy_widget_value_args): new function. Copy reference counted
-       arg packet.
-       (merge_widget_value_args): new function. Do a merge of widget
-       args.
-       (merge_widget_value): use it.
-       (copy_widget_value_tree): copy widget args using reference
-       counting, since we can't easily copy the args we have been given.
-
-       * specifier.h (struct specifier_methods): add copy_instantiator_method.
-
-       * specifier.c (build_up_processed_list): use
-       copy_instantiator_method if defined.
-
-1999-12-19  Martin Buchholz  <martin@xemacs.org>
-
-       * fns.c (Ffillarray): Use O(N), not O(N^2) algorithm for strings.
-
-1999-12-19  Hrvoje Niksic  <hniksic@iskon.hr>
-
-       * profile.c (sigprof_handler): FUN retrieved from the backtrace
-       can also be a cons representing anonymous interpreted function.
-
-1999-12-18  Martin Buchholz  <martin@xemacs.org>
-
-       * fns.c (mapcar1): 
-       (Fmapconcat): 
-       (Fmapcar): 
-       (Fmapvector): 
-       Docstring fixes.  Make them consistent with the lispref and ANSI Lisp.
-
-1999-12-17  Martin Buchholz  <martin@xemacs.org>
-
-       * print.c (print_internal): print ?+ instead of ?\+, etc...
-       Make printing a little more efficient.
-       Prevent buffer overflow if sizeof EMACS_INT > 8.
-       My first 128-bit fix!
-
-1999-12-14  Karl M. Hegbloom  <karlheg@inetarena.com>
-
-       * filelock.c (unlock_all_files): GC_CONSP should be CONSP
-
-1999-12-17  Martin Buchholz  <martin@xemacs.org>
-
-       * database.c:
-       * window.c:
-       * event-stream.c:
-       Remove last vestigial uses of GC_*
-       
-       * fns.c (mapcar1): Fix ***THREE*** obscure crashes in one function!
-       - Two of those involve evil mapping functions that destructively
-         modify a list being mapped over.
-       - Any garbage collection when mapping over a string could cause a
-         crash (typically in mapconcat).
-
-1999-12-08  Adrian Aichner  <adrian@xemacs.org>
-
-       * s\windowsnt.h (DIRECTORY_SEP): Initialize from
-       `Vdirectory_sep_char'.
-
-       * lisp.h: Add declaration for `Vdirectory_sep_char' to allow
-       customization of `DIRECTORY_SEP' under native Windows NT.
-
-1999-12-14  Katsumi Yamaoka   <yamaoka@jpl.org>
-
-       * buffer.c (Fbury_buffer): Add directions to the docstring.
-
-1999-12-14  Martin Buchholz <martin@xemacs.org>
-
-       * XEmacs 21.2.24 is released.
-
-1999-12-13  Martin Buchholz  <martin@xemacs.org>
-
-       * sound.c (vars_of_sound): Provide esd-sound if HAVE_ESD_SOUND
-
-       * nas.c: Fix compiler warnings.  Ansify.  C++ compilation support.
-
-1999-12-13  Kazuyuki IENAGA <ienaga@jsys.co.jp>
-
-       * input-method-xlib.c: Make sure src/ does not use Athena, except
-       indirectly through lwlib.
-
-1999-12-13  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * dbxrc (pobj): Add opaque_ptr, remove opaque_list.
-
-1999-12-10  Shenghuo ZHU <zsh@cs.rochester.edu>
-
-       * file-coding.c (add_coding_system_to_list_mapper): 
-       - (coding-system-list) should list aliases correctly.
-
-1999-12-07  Andy Piper  <andy@xemacs.org>
-
-       * fileio.c (vars_of_fileio): directory separator fix from Mike Alexander.
-       * windowsnt.h (ditto):
-
-1999-11-27  Adrian Aichner  <adrian@xemacs.org>
-
-       * sysfile.h: Encapsulate `fstat' for Windows NT just like stat to
-       get consistent file modification times.
-
-       * sysdep.h: Declare `wait_for_termination' to use process handle,
-       not PID, on Windows NT native.
-
-       * sysdep.c (wait_for_termination): Use process handle, not PID, on
-       Windows NT native.  Set exit code correctly on Windows NT.
-       (sys_subshell): Use process handle, not PID,
-       on Windows NT native.
-       (sys_fstat): Add ENCAPSULATE_FSTAT for Windows NT.
-
-       * process-nt.c (nt_create_process): Remove negative pid hack for
-       Windows 95.
-       (nt_send_process): Declare vol_proc volatile.
-       (get_internet_address): warn_when_safe if IP address cannot be
-       found.
-       (nt_open_network_stream): warn_when_safe if network stream fails
-       to open.
-       
-       * ntproc.c (create_child): Remove negative pid hack for Windows
-       95.  Remove incorrect and unnecessary USE_UNION_TYPE handling.
-
-       * nt.c (fstat): Encapsulate for Windows NT just like stat to get
-       consistent file modification times.
-
-       * callproc.c (call_process_cleanup): Use process handle, not PID,
-       on Windows NT native.
-       (Fcall_process_internal): Ditto.  Close fd_error in parent.  Don't
-       check for negative pid on Windows NT/9[58].
-
-1999-12-07  Martin Buchholz <martin@xemacs.org>
-
-       * XEmacs 21.2.23 is released.
-
-1999-12-06  Martin Buchholz  <martin@xemacs.org>
-
-       * events.c (Fcopy_event): Don't copy the lrecord_header.
-
-       * lisp.h (DO_REALLOC): 
+       * mule-charset.c (Fchar_octet): Resurrect from earlier in 1999.
        Optimize.
-       Remove redundant parens.
-       Remove generic hygienic macro comment.
-
-       * lrecord.h (set_lheader_implementation): Remove redundant parens.
-
-1999-12-05  Martin Buchholz  <martin@xemacs.org>
-
-       * lstream.c (Lstream_adding): 
-       - Never compare a size_t and a possibly negative number.
-       - Optimize.
-
-1999-12-05  Kyle Jones  <kyle_jones@wonderworks.com>
-
-       * lisp/itimer.el: (require 'lisp-float-type).  Use
-         floats directly in itimer-time-difference.
-
-1999-12-05  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_output_layout): avoid name hiding.
-
-       * gui.h: declare gui_add_item_keywords_to_plist.
-
-       * window.c (Fdelete_window): mark subwindows as changed so that
-       they can be GC'd if necessary.
-
-1999-12-02  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * src/callproc.c (Fcall_process_internal): Be careful in writing
-       terminating null when copying args. nargs can be < 4.
-       Idea from Klaus Frank <klausf@i3.informatik.rwth-aachen.de>
-
-1999-11-29  Kyle Jones  <kyle_jones@wonderworks.com>
-
-       * src/sound.c (Fding): Remove zero initialization of
-         static variables to avoid crashes on systems that dump
-         the initialized data segment read-only.
-
-1999-12-05  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * glyphs-x.c (convert_EImage_to_XImage): Guard against other
-       visual classes. From Rasmus Borup Hansen <rbh@math.ku.dk>
-
-1999-12-04  Martin Buchholz  <martin@xemacs.org>
-
-       * lstream.c: (filedesc_reader): 
-       (filedesc_writer): Try number 2: Support broken systems where
-       return type of read() and write() is different from ssize_t.
-
-       * systty.h: 
-       * sysdep.h:
-       * sysdep.c:
-       - Replace macro calls to EMACS_GET_TTY and EMACS_SET_TTY with
-         function equivalents emacs_get_tty() and emacs_set_tty().
-       - Moved prototypes to systty.h, where struct event_tty is defined.
-       - Renamed bogus `waitp' parameter to `flushp'.
-
-       * lstream.c (filedesc_reader): Support broken systems where return
-       type of read() is different from ssize_t.
-
-       * events.c (Fcopy_event): Avoid redundant EQ test if event2 is nil.
-
-       * event-stream.c (menu_move_up): Remove redundant if block.
-       (menu_move_down): Gratuitous rewriting.
-       (menu_move_left): Work around Cygnus codefusion-990706 compiler bug.
-       (menu_move_right): Ditto.
-
-       * lrecord.h (copy_lcrecord):
-       (zero_lcrecord): 
-       Always add parentheses around uses of macro arguments.
-
-       * sysdll.c: #include <stdlib.h> for exit().
-       * unexhp9k800.x: #include <stdlib.h> for malloc().
-       Use proper prototype for Save_Shared_Data(void).
-
-1999-12-04  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * src/redisplay.c (point_would_be_visible): Correct for topclip.
-
-1999-12-02  Hrvoje Niksic  <hniksic@iskon.hr>
-
-       * lisp.h: Declare Qself_insert_defer_undo.
-
-       * event-stream.c (Fdispatch_event): Get the magic undo thing from
-       a symbol property, so commands other than self-insert-command can
-       install it.
-       (syms_of_event_stream): Define Qself_insert_defer_undo.
-
-1999-11-30  Martin Buchholz  <martin@xemacs.org>
-
-       * floatfns.c (emacs_rint): Rename rint to emacs_rint, so that
-       `#undef HAVE_RINT' works.
-
-       * sysdep.h: Fix up prototypes for sys_read_1(), sys_write_1()
-
-1999-11-25  Andy Piper  <andy@xemacs.org>
-
-       * select-msw.c (Fmswindows_set_clipboard): selection fixes from
-       Mike Alexander.
-       (Fmswindows_delete_selection): ditto.
-
-       * redisplay.h (CLASS_REDISPLAY_FLAGS_CHANGEDP): add size_changed.
-       (GLOBAL_REDISPLAY_FLAGS_CHANGEDP): ditto.
-
-       * redisplay.c (redisplay_device): move size changed to macros in
-       redisplay.h
-       (redisplay_without_hooks): ditto.
-
-       * redisplay-output.c (redisplay_output_layout): rename to avoid
-       name hiding.
-
-       * process-nt.c (struct nt_process_data): mks toolkit fixes from
-       Mike Alexander.
-       (nt_create_process): ditto.
-       (nt_send_process): ditto.
-
-       * nt.c (init_environment): make sure mingw32 gets the cached
-       system info.
-
-       * gui.h: declare gui_add_item_keywords_to_plist.
-
-       * event-msw.c (mswindows_wnd_proc): Clipboard fixes from Mike
-       Alexander.
-
-       * console-msw.h: fix cygwin define/header 1.0 problems.
-       * glyphs-msw.c: ditto.
-       * ntplay.c: ditto.
-       * unexcw.c: ditto.
-       * s/cygwin32/h: ditto.
-
-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
-
-1999-11-04  Martin Buchholz  <martin@xemacs.org>
-
-       * mule-ccl.c (ccl_driver): Warning suppression
-
-1999-11-01  SL Baur  <steve@miho.m17n.org>
-
-       * emacs.c (main_1): Guard call to reinit_vars_of_debug when not
-       building a debugged XEmacs.
-
-1999-10-28  Andreas Jaeger  <aj@suse.de>
-
-       * src/emacs.c (main_1): Don't set the malloc hooks if using
-       DOUG_LEA_MALLOC.
-
-1999-10-30  Olivier Galibert  <galibert@pobox.com>
-
-       * alloc.c (pdump_dump_rtables): Don't forget to dump the last
-       registered type.
-       (pdump): Ditto.
 
-1999-10-25  Olivier Galibert  <galibert@pobox.com>
+2000-01-14  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
 
-       * emacs.c (main_1): Call reinit_vars_of_scrollbar_x.
-
-       * symsinit.h: Declare reinit_vars_of_scrollbar_x.
-
-1999-10-25  Martin Buchholz  <martin@xemacs.org>
-
-       * redisplay.h (CLASS_RESET_CHANGED_FLAGS): 
-       (GLOBAL_RESET_CHANGED_FLAGS): 
-       (CLASS_REDISPLAY_FLAGS_CHANGEDP): 
-       (RESET_CHANGED_SET_FLAGS): 
-       Fix C++ compile errors/warnings.
-       These macros were just a tad too clever.
-
-       * process-unix.c (unix_open_network_stream):
-       * objects-x.c (allocate_nearest_color):
-       * mule-charset.c (vars_of_mule_charset): 
-       * fileio.c (Ffile_truename): 
-       * file-coding.c (vars_of_file_coding): 
-       Fix compile errors/warnings.
-
-       * alloc.c (xstrdup): Use fact that memcpy returns its first arg.
-       (allocate_lisp_storage): Simplify.
-
-1999-10-24  Olivier Galibert  <galibert@pobox.com>
-
-       * conslots.h: Add defines with first and last slot names.
-       * bufslots.h: Add defines with first and last slot names.
-
-       * buffer.c (common_init_complex_vars_of_buffer): Renamed from
-       reinit_complex_vars_of_buffer
-       (reinit_complex_vars_of_buffer): Reset the slots to the dumped
-       value.
-       (complex_vars_of_buffer): Dump the slots values.
-
-       * console.c (common_init_complex_vars_of_console): Renamed from
-       reinit_complex_vars_of_console
-       (reinit_complex_vars_of_console): Reset the slots to the dumped
-       value.
-       (complex_vars_of_console): Dump the slots values.
-
-       * alloc.c: Rename reloc_table to pdump_reloc_table, rt_list to
-       pdump_rt_list and move them at the beginning of the file.
-       (gc_sweep): Unmark pdumped objects after the sweep phase.
-       (pdump_dump_rtables): Change a bare 256 to
-       last_lrecord_type_index_assigned.  Add a separator between the
-       adresses or lrecords and the ones of C structs in the dump file.
-       (pdump_load): Cope with the new separator and the renamings.  Stop
-       looking for the hash tables list after it has been found (duh!).
-
-1999-10-24  Robert Bihlmeyer <robbe@orcus.priv.at>
-
-       * sound.c: support HAVE_ESD_SOUND
-
-       * miscplay.c: 
-       * miscplay.h: 
-       * linuxplay.c: Move large part of linuxplay to generalized file
-       miscplay. Make it platform independent.
-
-       * esd.c: New file
-
-1999-10-24  Adrian Aichner <adrian@xemacs.org>
-
-       * lisp.h (Dynarr_declare): Fix boo-boo.
-
-1999-10-24  Olivier Galibert  <galibert@pobox.com>
-
-       * process-unix.c (allocate_pty): Fix HAVE_GETPT.
-       * process.h: Ditto.
-
-1999-10-24  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * redisplay.c (start_with_line_at_pixpos): Remove assert(cur_elt
-       >=0). Handle the cur_elt == 0 case.
-
-1999-10-24  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * unexelf.c: Merge Martin's c++ fixes back in 
-
-1999-10-20  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-        * unexelf.c (unexec): Only copy the global offset
-        table from memory on sgi machines.
-
-1999-08-13     Alexandre Oliva <oliva@dcc.unicamp.br>, Vin Shelton <acs@xemacs.org>
-
-        * unexelf.c: Enable GNU/Linux/alpha to build with gcc 2.95 by
-        adding support for an sbss section.  Get IRIX 5.2 to build using
-        unexelf.c.
-
-        * m/iris4d.h: Use unexelf.o for unexec.
-
-        * m/iris5d.h: Use unexelf.o for unexec.
-
-1999-10-24  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * unexelf.c: Revert to 21.1 version
-
-1999-08-28  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * window.c (Fwindow_truncated_p): New function.
-
-1999-08-25  Jonathan Marten <jonathan.marten@uk.sun.com>
-
-       * window.c (window_truncation_on): Always return 0 for minibuffer
-       windows, to enable auto scrolling.
-
-1999-10-24 Neal Becker <nbecker@fred.net>
-       * process.h: Unix98 PTY support
-
-1999-10-17  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * fileio.c (Ffile_truename): Do proper mule decoding on
-       the argument to xrealpath()
-
-1999-08-19  Stephen Tse  <stephent@sfu.ca>
-
-       * process-unix.c (unix_open_network_stream): Add udp network
-       support; rename variable Qtcpip to Qtcp, parameter family to
-       protocol for consistency with Qudp.
-
-       * process-nt.c (nt_open_network_stream): Rename variable Qtcpip to
-       Qtcp, parameter family to protocol for consistency with Qudp.
-
-       * process.c (global_variables): Add a new variable Qudp for udp
-       network support; rename variable Qtcpip to Qtcp for consistency
-       with Qudp.
-       (Fopen_network_stream_internal): Rename parameter FAMILY to
-       PROTOCOL for consistency; fix a minor typo and add an explanation
-       in docstring for udp programming.
-       (Fopen_multicast_group_internal): Fix a minor typo in docstring.
-       (syms_of_process): Add a new variable Qudp for udp network
-       support; rename variable Qtcpip to Qtcp for consistency with Qudp.
-
-       * process.h (extern_variables): Add a new variable Qudp for udp
-       network support; rename variable Qtcpip to Qtcp for consistency
-       with Qudp.
-
-       * procimpl.h: Add a new variable Qudp for udp network support;
-       rename variable Qtcpip to Qtcp for consistency with Qudp.
-       (struct process_methods): Rename parameter family to protocol.
-
-
-1999-10-24  Olivier Galibert  <galibert@pobox.com>
-
-       * alloc.c (pdump_make_hash): Divide pointers by 8 for a better hash.
-
-1999-10-23  Olivier Galibert  <galibert@pobox.com>
-
-       * lrecord.h (struct lrecord_header): Removed dumped flags.
-
-       * dynarr.c: Use DUMPEDP instead of dumped flag.
-
-       * lisp.h (DUMPEDP): Added.  Removed dumped flag from dynarr.
-
-       * alloc.c: Removed hash_next linked list pointer.
-       
-       * *.c *.h: Removed markobj and mark_object parameters, removed GC_
-       and XGC macros.
-
-1999-10-14  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-x.c (x_output_shadows): fix dodgy maths for border
-       calculations.
-
-       * gutter.c (output_gutter): be more accurate about the area to be
-       cleared since X seems to manage to do the clear after drawing the
-       border.
-
-       * redisplay.h (RESET_CHANGED_FLAGS): new macro for setting
-       redisplay flags as a group.
-       (RESET_CHANGED_SET_FLAGS): ditto.
-       (CLASS_RESET_CHANGED_FLAGS): ditto.
-       (GLOBAL_RESET_CHANGED_FLAGS): ditto.
-       (REDISPLAY_FLAGS_CHANGEDP): new macro for testing redisplay flags
-       as a group.
-       (CLASS_REDISPLAY_FLAGS_CHANGEDP): ditto.
-       (GLOBAL_REDISPLAY_FLAGS_CHANGEDP): ditto.
-
-       * redisplay.c (redisplay_frame): use CLASS_RESET_CHANGED_FLAGS
-       instead of setting flags individually.
-       (redisplay_device): ditto CLASS_REDISPLAY_FLAGS_CHANGEDP.
-       (redisplay_device): ditto.
-       (redisplay_device): ditto CLASS_RESET_CHANGED_FLAGS.
-       (redisplay_without_hooks): ditto GLOBAL_REDISPLAY_FLAGS_CHANGEDP.
-       (redisplay_without_hooks): ditto CLASS_REDISPLAY_FLAGS_CHANGEDP.
-       (redisplay_without_hooks): ditto.
-       (redisplay_without_hooks): ditto GLOBAL_RESET_CHANGED_FLAGS.
-
-       * redisplay-x.c (x_output_string): unmap subwindows in the area.
-       (x_output_blank): ditto.
-
-       * redisplay-output.c (redisplay_output_display_block): don't unmap
-       subwindows in case layout optimization can avoid it.
-       (redisplay_output_subwindow): unmap subwindows in the area.
-       (redisplay_output_layout): optimize the output of layouts - only
-       output glyphs that have changed if nothing else of redisplay
-       significance has occurred.
-       (redisplay_output_pixmap): change args to
-       redisplay_clear_clipped_region.
-       (redisplay_clear_clipped_region): allow the clipped region to be
-       cleared of all subwindows except the one passed in.
-
-       * redisplay-msw.c (mswindows_output_blank): unmap subwindows in
-       the area.
-       (mswindows_output_cursor): ditto.
-       (mswindows_output_string): ditto.
-
-       * gutter.c (calculate_gutter_size): if the window buffer is nil
-       then don't continue.
-       (update_frame_gutters): be more lenient about when we actually
-       update the gutter. Layout optimization makes this
-       non-costly. Cache redisplay flags that we want to temporarily
-       ignore.
-
-       * glyphs.c (Fglyph_animated_timeout_handler): handle image
-       specific timeouts rather than iterating over the instance cache.
-       (glyph_animated_timeout_mapper): deleted.
-       (add_glyph_animated_timeout): use a weak list to hold onto the
-       image so that it can be GC'ed.
-       (disable_glyph_animated_timeout): disable a specific timeout.
-       (vars_of_glyphs): disable-animated-pixmaps is a new boolean for
-       controlling whether pixmaps are animated or not.
-
-       * glyphs-msw.c (mswindows_finalize_image_instance): make sure the
-       image timeout gets disabled when the image gets freed.
-
-       * glyphs-eimage.c (gif_instantiate): remove meaningless
-       comment. Cope with timeouts specified in the gif extension block.
-
-       * event-msw.c (vars_of_event_mswindows): new variable
-       mswindows-meta-activates-menu.
-       (mswindows_wnd_proc): only goto defproc with VK_MENU if the user
-       wants it.
-
-       * glyphs-x.c (x_finalize_image_instance): delete mask first so
-       that we can compare with image.
-
-1999-10-14  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * event-msw.c (mswindows_key_to_emacs_keysym):
-       Recognise keypad keys as different from normal keys.
-
-1999-10-14  Didier Verna  <didier@xemacs.org>
-
-       * glyphs-x.c (x_finalize_image_instance): avoid freeing null pixmaps.
-
-1999-10-10  Olivier Galibert  <galibert@pobox.com>
-
-       * symbols.c (init_symbols_once_early): dump Vquit_flag.
-
-       * symsinit.h: Updated.
-
-       * ntproc.c (vars_of_ntproc): Use defsymbol.
-
-       * emacs.c (main_1): Updated reinit calls.
-
-       * lisp.h: Removed Fpurecopy and pure_put declarations.
-       * fns.c: Removed pure_put.
-
-       * eval.c (Fdefvar): pure_put -> Fput
-       (Fdefconst): Ditto.
-       * frame-x.c (init_x_prop_symbols): Ditto.
-       * symbols.c (deferror): Ditto.
-
-       * alloc.c (Fmake_byte_code): Remove Fpurecopy call.
-       * buffer.c (vars_of_buffer): Ditto.
-       * bytecode.c (Ffetch_bytecode): Ditto.
-       (optimize_compiled_function): Ditto.
-       * emacs.c (vars_of_emacs): Ditto.
-       * emodules.c (vars_of_module): Ditto.
-       * eval.c (define_function): Ditto.
-       (Fautoload): Ditto.
-       * frame.c (vars_of_frame): Ditto.
-       * intl.c (Fset_domain): Ditto.
-       * lread.c (load_force_doc_string_unwind): Ditto.
-       * menubar.c (vars_of_menubar): Ditto.
-       * minibuf.c (reinit_complex_vars_of_minibuf): Ditto.
-
-       * debug.c (reinit_vars_of_debug): Extracted.
-       * device-x.c (reinit_vars_of_device_x): Ditto.
-       * emodules.c (reinit_vars_of_module): Ditto.
-       * font-lock.c (reinit_vars_of_font_lock): Ditto.
-       * glyphs-widget.c (reinit_vars_of_glyphs_widget): Ditto.
-       * glyphs.c (reinit_vars_of_glyphs): Ditto.
-       * gui-x.c (reinit_vars_of_gui_x): Ditto.
-       * insdel.c (reinit_vars_of_insdel): Ditto.
-       * menubar-x.c (reinit_vars_of_menubar_x): Ditto.
-       * minibuf.c (reinit_complex_vars_of_minibuf): Ditto.
-       * mule-wnnfns.c (reinit_vars_of_mule_wnn): Ditto.
-       * print.c (reinit_vars_of_print): Ditto.
-       * redisplay.c (reinit_vars_of_redisplay): Ditto.
-       * select-x.c (reinit_vars_of_xselect): Ditto.
-       * undo.c (reinit_vars_of_undo): Ditto.
-
-1999-10-10  Olivier Galibert  <galibert@pobox.com>
-
-       * symsinit.h: Updated declarations, see other ChangeLog entries.
-
-       * redisplay.c (init_redisplay): Ensure proper reinitialisation.
-
-       * lrecord.h (XD_DYNARR_DESC): Introduce XD_INT_RESET and use it.
-
-       * glyphs.c: Add the ii_keyword_entry and related descriptions.
-       Fix the image_instantiator_methods one.
-
-       * file-coding.c: Plonk all data that needs to be dumped in a
-       dynamically allocated structure.
-
-       * extents.c (reinit_vars_of_extents): Extracted from
-       vars_of_extents.
-
-       * event-stream.c (vars_of_event_stream): Don't staticpro when
-       pdump_wire is enough.
-
-       * event-msw.c (reinit_vars_of_event_mswindows): Extracted from
-       vars_of_event_mswindows.
-
-       * event-Xt.c (reinit_vars_of_event_Xt): Extracted from
-       vars_of_event_Xt.
-
-       * eval.c (vars_of_eval): Don't staticpro when pdump_wire is enough.
-
-       * emacs.c (main_1): Added some reinit calls.
-
-       * device-x.c (reinit_console_type_create_device_x): Extracted from
-       console_type_create_device_x.
-
-       * console.h: Declare the console_type_entry_dynarr description.
-
-       * console.c: Unstatic the console_type_entry_dynarr description.
-
-       * alloc.c: Removed some dubious comments.  Handle XD_INT_RESET.
-
-1999-10-07  Olivier Galibert  <galibert@pobox.com>
-
-       * symsinit.h: Updated declarations, see other ChangeLog entries.
-
-       * minibuf.c (reinit_complex_vars_of_minibuf): Extracted from
-       complex_vars_of_minibuf.
-
-       * lrecord.h: Removed XD_PARENT_INDIRECT (unused and
-       unimplemented), added XD_LO_LINK.
-
-       * lisp.h (pdump_wire_list): Add declaration.
-
-       * glyphs.h (INITIALIZE_DEVICE_IIFORMAT): Fix bug found by Andy.
-       (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT): Fix stupid bug.
-       (REINITIALIZE_IMAGE_INSTANTIATOR_FORMAT): Remove, useless once the
-       stupid bug fixed.
-
-       * glyphs.c (reinit_image_instantiator_format_create): Remove.
-
-       * glyphs-x.c (reinit_image_instantiator_format_create_glyphs_x):
-       Remove.
-
-       * glyphs-widget.c
-       (reinit_image_instantiator_format_create_glyphs_widget): Remove.
-
-       * glyphs-msw.c
-       (reinit_image_instantiator_format_create_glyphs_mswindows):
-       Remove.
-
-       * glyphs-eimage.c
-       (reinit_image_instantiator_format_create_glyphs_eimage): Remove.
-
-       * frame.c (Fmake_frame): Don't reset the face cache when using the
-       stream device.
-
-       * file-coding.c: Dumped the_codesys_prop_dynarr and added all
-       relevant descriptions.
-
-       * events.c (reinit_vars_of_events): Extracted from vars_of_events.
-
-       * eval.c: The subr is _not_ a lcrecord.
-
-       * emacs.c (main_1): Call vars_of_specifier early before any
-       specifier creation (e.g in vars_of_glyphs, at least).  Remove the
-       useless reinit_image_instantiator_format*.  Add
-       reinit_vars_of_events and reinit_complex_vars_of_minibuf.  Add
-       calls to lstream_type_create* and process_type_create*.
-
-       * elhash.c: Dump Vall_weak_hash_tables correctly.
-
-       * data.c: Dump Vall_weak_lists correctly.
-
-       * console.c: Fix description.
-
-       * console-stream.c (init_console_stream): Do initializations
-       correctly in the pdump case.
-
-       * chartab.c: Fix description.  Dump Vall_syntax_tables correctly.
-       (Fcopy_char_table): Link into Vall_syntax_tables.
-
-       * alloc.c (pdump_wire_list): Added.
-       (Fgarbage_collect): Fix loop in stats couting missing the last
-       lrecord type.
-       (pdump_register_sub): Added XD_LO_LINK.
-       (pdump_dump_data): Ditto.  Fixed XD_LO_RESET_NIL forgttting the
-       counter.
-       (pdump_reloc_one): Ditto.
-       (pdump_scan_by_alignement): Use last_lrecord_type_index_assigned
-       instead of 256.
-       (pdump_dump_wired): Added lists.
-       (pdump): Use last_lrecord_type_index_assigned instead of 256.
-       Dump last_lrecord_type_index_assigned value.  Fix minor bugs.
-
-1999-10-07  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c (mswindows_finalize_image_instance): zero out
-       bitmap slices.
-
-       * glyphs-x.c (x_finalize_image_instance): fix FMW problem.
-
-1999-10-06  Andy Piper  <andy@xemacs.org>
-
-       * elhash.c (resize_hash_table): Correct reference to lrecord_header.
-
-1999-10-06  Damon Lipparelli  <lipp@primus.com>
-
-       * elhash.h: forward declare Lisp_Hash_Table.
-
-1999-10-06  Andy Piper  <andy@xemacs.org>
-
-       * glyphs.c (Fset_image_instance_property): mark glyphs as dirty
-       after setting an image instance property.
-
-1999-10-05  Andy Piper  <andy@xemacs.org>
-
-       * gutter.c (update_frame_gutters): output gutters if
-       windows_changed is set. This is the only way of catching changes
-       in selected window which obviously can affect the specifiers.
-
-       * redisplay.c: new state flags, subwindows_state_changed and
-       subwindows_state_changed set.
-       (redisplay_window): use them.
-       (redisplay_device): ditto.
-       (redisplay_without_hooks): ditto.
-       (redisplay_frame): ditto. Reset subwindow cachels if
-       subwindows_changed is set.
-       (redisplay_window): call mark_glyph_cachels_as_clean after
-       redisplaying.
-
-       * redisplay-x.c (x_output_x_pixmap): select correct
-       pixmap image for display depending on the currently selected
-       slice.
-
-       * redisplay-output.c (compare_runes): check dirtiness when
-       checking RUNE_DGLYPH runes.
-       (compare_display_blocks): relax invalidation of display blocks
-       since we can now detect whether individual glyphs have changed or
-       not.
-
-       * redisplay-msw.c (mswindows_output_dibitmap): select correct
-       bitmap image for display depending on the currently selected
-       slice.
-
-       * glyphs.h (struct Lisp_Image_Instance): add a dirty flag.
-       (IMAGE_INSTANCE_DIRTYP): new macro.
-       (XIMAGE_INSTANCE_DIRTYP): ditto.
-       (MARK_IMAGE_INSTANCE_CHANGED): ditto.
-       (GLYPH_DIRTYP): ditto.
-       (XGLYPH_DIRTYP): ditto.
-       (MARK_GLYPH_CHANGED): ditto.
-       (GLYPH_CACHEL_DIRTYP): ditto.
-       (struct glyph_cachel): add a dirty flag.
-
-       * glyphs.c (update_frame_subwindows): Don't update on
-       glyphs_changed.
-       (glyph_animated_timeout_mapper): new function. Map over the
-       instance cache lookinng for animated images to update.
-       (Fglyph_animated_timeout_handler): new function. Lisp callback for
-       handling animated image timeout events.
-       (disable_glyph_animated_timeout): new function. Add the animated
-       image timeout.
-       (disable_glyph_animated_timeout): new function. Remove the
-       animated image timeout.
-       (syms_of_glyphs): initialize Qglyph_animated_timeout_handler and
-       friends.
-       (vars_of_glyphs): initialize Vglyph_animated_ticker.
-       (image_instance_equal): add the currently displayed slice.
-       (image_instance_hash): ditto.
-       (allocate_glyph): initialize dirty flag.
-       (glyph_width): rename glyph -> glyph_or_image.
-       (glyph_height_internal): ditto.
-       (glyph_dirty_p): new function. Determine whether the image
-       instance in the domain and/or glyph is dirty.
-       (set_glyph_dirty_p): set the dirtiness.
-       (update_glyph_cachel_data): take dirtiness into account. Pass the
-       image instance we are interested in to glyph_width and friends.
-       (get_glyph_cachel_index): make non-static. Always call
-       update_glyph_cachel_data.
-       (mark_glyph_cachels_as_not_updated): meaningless formatting
-       change.
-       (mark_glyph_cachels_as_clean): new function. Clean dirtiness from
-       glyph cachels.
-
-       * glyphs-x.h (struct x_image_instance_data): change
-       pixmap to a list of pixmaps.
-       (IMAGE_INSTANCE_X_PIXMAP_SLICE): new macro.
-       (IMAGE_INSTANCE_X_PIXMAP_SLICES): ditto.
-       (XIMAGE_INSTANCE_X_PIXMAP_SLICE): ditto.
-       (XIMAGE_INSTANCE_X_PIXMAP_SLICES): ditto.
-
-       * glyphs-x.c (x_finalize_image_instance): make sure multi pixmap
-       images get deleted properly.
-       (init_image_instance_from_x_image): add slices paramater and use
-       it to initialize x_image_instance_data correctly.
-       (image_instance_add_x_image): new function. Add new pixmaps to our
-       set of instantiated pixmaps for an image. Used by animated images.
-       (x_init_image_instance_from_eimage): add a slices
-       parameter. Instantiate all images from the eimage.
-       (x_xpm_instantiate): update use of
-       init_image_instance_from_x_image.
-       (init_image_instance_from_xbm_inline): ditto.
-       (x_initialize_pixmap_image_instance): add slices paramater and use
-       it to allocate x_image_instance_data correctly.
-
-       * glyphs-msw.h (struct mswindows_image_instance_data): change
-       bitmap to a list of bitmaps.
-       (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE): new macro.
-       (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES): ditto.
-       (XIMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE): ditto.
-       (XIMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES): ditto.
-
-       * glyphs-msw.c (init_image_instance_from_dibitmap): add slices
-       paramater and use it to initialize mswindows_image_instance_data
-       correctly.
-       (image_instance_add_dibitmap): new function. Add new bitmaps to
-       our set of instantiated bitmaps for an image. Used by animated
-       images.
-       (mswindows_init_image_instance_from_eimage): add a slices
-       parameter. Instantiate all images from the eimage.
-       (mswindows_xpm_instantiate): update use of
-       init_image_instance_from_dibitmap.
-       (bmp_instantiate): ditto.
-       (init_image_instance_from_xbm_inline): ditto.
-       (mswindows_finalize_image_instance): make sure all the bitmap
-       slices get deleted.
-       (mswindows_initialize_dibitmap_image_instance): add slices
-       paramater and use it to allocate mswindows_image_instance_data
-       correctly.
-
-       * glyphs-eimage.c (jpeg_instantiate): give extra paramter to
-       init_image_instance_from_eimage.
-       (png_instantiate): ditto.
-       (tiff_instantiate): ditto.
-       (gif_instantiate): allocate bitmaps for all gif slices not just
-       the first one.
-
-       * device.h (struct device): add subwindows_state_changed flag.
-       (MARK_DEVICE_SUBWINDOWS_STATE_CHANGED): new macro.
-       (MARK_DEVICE_FRAMES_GLYPHS_CHANGED): ditto.
-
-       * console.h (struct console_methods): add a slice parameter to
-       init_image_instance_from_eimage_method.
-
-       * redisplay.c (create_string_text_block): Allow buffer to be nil
-       without crashing.
-
-1999-09-24  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c: only include gui-x.h if we are building with
-       widgets.
-
-       * gui-x.c (vars_of_gui_x): only set popup_up_p if we have popups.
-
-1999-09-28  Lee Kindness <lkindness@csl.co.uk>
-
-       * objects-x.c (allocate_nearest_color): will return 0 (failure)
-       when the colormap is full and the color it has computed to be the
-       'nearest' has been allocated read/write.
-
-1999-10-02  Olivier Galibert  <galibert@pobox.com>
-
-       * search.c (reinit_vars_of_search):   Reinit   the  search   cache
-       correctly.
-
-       * elhash.h:     Make    the    description    visible.     Declare
-       resize_hash_table.
-
-       * elhash.c  (resize_hash_table): Extracted from enlarge_hash_table
-       to generalize the hash table reorganization.
-       (reorganize_hash_table): Added.
-       (enlarge_hash_table): Uses resize_has_table.
-
-       * casetab.c (complex_vars_of_casetab):  staticpro  the mule mirror
-       tables.
-
-       * alloc.c:   Add  correct  management  of   blocks of  structures.
-       Reorganize hash tables at reload since  the hash values can change
-       with the pointers.
-
-1999-10-01  Olivier Galibert  <galibert@pobox.com>
-
-       * lisp.h: Add pdump_wire declaration
-
-       * elhash.c (vars_of_elhash): Wire Vall_weak_hash_tables.
-       * symbols.c (init_symbols_once_early): Wire Qnil and Qunbound.
-
-       * alloc.c (pdump_wire): Added..
-       (pdump_load): Support it.
-       (pdump): Support it
-
-       * glyphs-msw.c
-       (reinit_image_instantiator_format_create_glyphs_mswindows): Fix
-       macro calls.
-
-1999-09-28  Olivier Galibert  <galibert@pobox.com>
-
-       * symsinit.h: Added lots of prototypes.
-
-       * symeval.h: Added defsymbol_nodump declaration.
-
-       * symbols.c (find_symbol_value): Lame attempt at making the
-       startup go further.
-       (defsymbol_nodump): Added.
-
-       * mule-charset.c: Collapsed global lisp objects arrays in one
-       dumpable structure.
-
-       * lrecord.h: Added some flags.
-
-       * lisp.h: Added dumped flag to dynarrs.  Added dumpstruct
-       declaration.
-
-       * glyphs.h (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM): Don't
-       staticpro dynamic variables.
-
-       * glyphs.c (reinit_specifier_type_create_image): Added.
-       (image_instantiator_format_create): Dump image instantiator format
-       dynarr.
-       (reinit_image_instantiator_format_create): Added.
-
-       * emacs.c (main_1): Added reinits calls.
-
-       * dynarr.c: Protect dumped dynarrays from going berzek in free or
-       realloc.
-
-       * specifier.h (INITIALIZE_SPECIFIER_TYPE): Don't staticpro dynamic
-       variables.
-       * specifier.c (specifier_type_create): Dump the specifier type
-       dynarr.
-       (reinit_specifier_type_create): Added.
-       * console.h (INITIALIZE_CONSOLE_TYPE): Don't staticpro dynamic
-       variables.
-       * console.c (console_type_create): Dump the console type dynarr.
-       (reinit_vars_of_console): Extracted from vars_of_console.
-       (reinit_complex_vars_of_console): Extracted from
-       complex_vars_of_console
-       * window.c (reinit_vars_of_window): Extracted from vars_of_window.
-       * toolbar.c (reinit_specifier_type_create_toolbar): Added.
-       * search.c (reinit_vars_of_search): Extracted from vars_of_search.
-       * objects.c (reinit_specifier_type_create_objects): Added.
-       (reinit_vars_of_objects): Extracted from vars_of_objects.
-       * lstream.c (reinit_vars_of_lstream): Extracted from
-       vars_of_lstream.
-       * lread.c (reinit_vars_of_lread): Extracted from vars_of_lread.
-       * gutter.c (reinit_specifier_type_create_gutter): Added.
-       * glyphs-x.c (reinit_image_instantiator_format_create_glyphs_x):
-       Added.
-       * glyphs-widget.c
-       (reinit_image_instantiator_format_create_glyphs_widget): Added
-       * glyphs-msw.c
-       (reinit_image_instantiator_format_create_glyphs_mswindows): Added.
-       * glyphs-eimage.c
-       (reinit_image_instantiator_format_create_glyphs_eimage): Added.
-       * event-stream.c (reinit_vars_of_event_stream): Extracted from
-       vars_of_event_stream
-       * eval.c (reinit_vars_of_eval): Extracted from vars_of_eval.
-       * device.c (reinit_vars_of_device): Extracted from vars_of_device.
-       * console-x.c (reinit_console_type_create_x): Added.
-       * console-tty.c (reinit_console_type_create_tty): Added
-       * console-stream.c (reinit_console_type_create_stream): Added.
-       (init_console_stream): If PDUMP, always reinitialise basic
-       devices.
-       * console-msw.c (reinit_console_type_create_mswindows): Added.
-       * buffer.c (reinit_vars_of_buffer): Extracted from
-       init_vars_of_buffer.
-       (reinit_complex_vars_of_buffer): Extracted from
-       complex_vars_of_buffer
-
-       * alloc.c: Further with the portable dumping, the revenge.
-       (dumpstruct): Added.
-       (reinit_alloc_once_early): Extracted from init_alloc_once_early.
-
-       * specifier.c (sizeof_specifier): Correct size computation.
-       (make_specifier_internal): Ditto.
-
-1999-09-27  Olivier Galibert  <galibert@pobox.com>
-
-       * alloc.c: Further with the portable dumping.
-
-1999-09-27  Martin Buchholz  <martin@xemacs.org>
-
-       * glyphs-x.c (update_widget_face): Remove bogus cast
-
-       * data.c (sign_extent_lisp):
-       * data.c (check_int_range):
-       * data.c (Faref):
-       * data.c (Faset):
-       * data.c (number_char_or_marker_to_int):
-       * data.c (number_char_or_marker_to_double):
-       * data.c (Frem):
-       * data.c (Fmod):
-       * extents.c (print_extent_1):
-       * fns.c (print_bit_vector):
-       * fns.c (Flength):
-       * fns.c (Fsafe_length):
-       * fns.c (copy_list):
-       * fns.c (Fsubseq):
-       * fns.c (Felt):
-       * fns.c (Flast):
-       * fns.c (Fnbutlast):
-       * insdel.h:
-       * marker.c (print_marker):
-       * syntax.h:
-       * bytecode.c (bytecode_arithcompare):
-       * bytecode.c (bytecode_arithop):
-       * lisp.h:
-       * lisp.h (EXTERNAL_LIST_LOOP_DELETE_IF):
-       * lisp.h (TRUE_LIST_P):
-       * lisp.h (CHECK_TRUE_LIST):
-       * lisp.h (bit_vector_length):
-       * lisp.h (GCPRO4): Make consistent.
-       * lisp.h (NGCPRO4): Make consistent.
-       * lisp.h (NNGCPRO4): Make consistent.
-       * alloc.c (Fmake_list):
-       * alloc.c (Fmake_string):
-       Use proper 64-bit types, e.g. EMACS_INT or size_t instead of int.
-       This should make all arithmetic 64-bit clean.
-
-       Use %ld with (long) casts in print statements of types with sizes
-       possibly larger than int.
-
-       Following functions had mismatched prototypes!!:
-       do_marker_adjustment(), fixup_internal_substring(), scan_lists(),
-       char_quoted(), make_string_from_buffer(),
-       make_string_from_buffer_no_extents()
-
-       The types of Bufpos, Bytind, Memind, Bytecount, Charcount,
-       Extcount are all now EMACS_INT.  I hope to see the day when I can
-       create a buffer with more than INT_MAX characters, without having
-       XEmacs slow down to a crawl.  I also hope to be able to create a
-       list with more than INT_MAX cons cells.
-
-       * redisplay.c (decode_mode_spec): 
-       The %p and %P specs in the mode line were not correct for buffers
-       larger than MAX_INT/100!  The %p spec was off by .5% even for
-       small buffers!
-
-1999-09-27  Martin Buchholz  <martin@xemacs.org>
-
-       * cmdloop.c (num_input_keys):
-       * print.c (debug_temp):
-       * emacs.c (Vinfo_directory):
-       Delete unused variables 
-
-       * console-x.h (x_interline_space):  Mark as unimplemented.
-       * redisplay-x.c (x_interline_space):  Mark as unimplemented.
-
-       * event-Xt.c (pending_timeouts):
-       * linuxplay.c (linuxplay_sndbuf):
-       * profile.c (QS*):
-       * search.c (searchbufs):
-       * specifier.c (specifier_type_entry_dynarr):
-       * undo.c (pending_boundary):
-       * event-stream.c (the_low_level_timeout_blocktype):
-       * extents.c (gap_array_marker_freelist):
-       * extents.c (extent_list_marker_freelist):
-       * print.c (being_printed):
-       * print.c (alternate_do_pointer):
-       * alloc.c (first_string_chars_block):
-       * alloc.c (current_string_chars_block):
-       * emacs.c (initial_argv):
-       * emacs.c (initial_argc):
-       * eval.c (lisp_eval_depth):
-       * free-hook.c (pointer_table):
-       * free-hook.c (free_queue):
-       * free-hook.c (current_free):
-       * free-hook.c (strict_free_check):
-       * redisplay.c (formatted_string_emchar_dynarr):
-       * redisplay.c (formatted_string_display_line):
-       * redisplay.c (formatted_string_extent_dynarr):
-       * redisplay.c (formatted_string_extent_start_dynarr):
-       * redisplay.c (formatted_string_extent_end_dynarr):
-       * redisplay.c (updating_line_start_cache):
-       * redisplay.c (last_display_warning_tick):
-       * redisplay.c (display_warning_tick):
-       * redisplay.c (internal_cache):
-       * window.c (Vwindow_configuration_free_list):
-       Make static.
-
-       * redisplay.c (Vinitial_window_system):  Make CONST.
-
-1999-09-24  Martin Buchholz  <martin@xemacs.org>
-
-       * redisplay-tty.c (term_get_fkeys_1): Minor aesthetic improvements.
-
-       * doprnt.c (get_doprnt_args): Use int, not short, with va_arg.
-
-1999-09-24  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (output_display_line): only clear the borders
-       if we are not displaying the gutter.
-
-1999-09-24  Jan Vroonhof <vroonhof@math.ethz.ch>
-
-       * frame-x.c (x_any_window_to_frame): Let Xt find the widget and
-       then use x_any_widget_or_parent_to_frame().
-       (x_find_frame_for_window): remove special cases.
-
-1999-09-24  Andy Piper  <andy@xemacs.org>
-
-       * scrollbar-x.c (x_window_is_scrollbar): deleted.
-       * scrollbar-x.h: ditto.
-       
-1999-09-23  Martin Buchholz  <martin@xemacs.org>
-
-       * alloc.c (this_marks_a_marked_record): Remove.
-
-       * buffer.c (mark_buffer):
-       * buffer.c (nuke_all_buffer_slots):
-       * console.c (mark_console):
-       * console.c (nuke_all_console_slots):
-       * frame.c (mark_frame):
-       * frame.c (nuke_all_frame_slots):
-       Treat MARKED_SLOT() macros consistently.
-
-       * device.h (error_check_device_type):
-       * faces.c (face_getprop):
-       * fileio.c (DRIVE_LETTER):
-       * filelock.c (lock_file_1):
-       * frame-x.c (x_create_widgets):
-       * frame.h (error_check_frame_type):
-       * keymap.c (print_keymap):
-       * keymap.c (Fkey_description):
-       * keymap.c (where_is_recursive_mapper):
-       * mule-charset.h (CHARSET_LEADING_BYTE):
-       * objects-msw.c (mswindows_color_instance_hash):
-       * objects.c (color_instance_equal):
-       * objects.h (struct color_specifier):
-       * objects.h (struct font_specifier):
-       * objects.h (struct face_boolean_specifier):
-       * opaque.h (get_opaque_ptr):
-       * opaque.h (set_opaque_ptr):
-       * process-unix.c (set_socket_nonblocking_maybe):
-       * specifier.h (SPECIFIER_TYPE_P):
-       * symbols.c (store_symval_forwarding):
-       * syssignal.h (EMACS_KILLPG):
-       * terminfo.c (emacs_tparam):
-       * glyphs.c (glyph_putprop):
-       * glyphs.c (glyph_remprop):
-       * glyphs.c (Fimage_instance_subwindow_id):
-       * window.c (mark_window):
-       * window.c (mark_window_config):
-       * window.c (Fset_window_configuration):
-       * window.c (save_window_save):
-       * eval.c (Fuser_variable_p):
-       * eval.c (Fcommand_execute):
-       * eval.c (Feval):
-       * eval.c (Ffuncall):
-       * lisp.h (XPNTR):
-       * lisp.h (INT_OR_FLOATP):
-       * lisp.h (GC_INT_OR_FLOATP):
-       * lisp.h (XFLOATINT):
-       * lisp.h (IS_ANY_SEP):
-       * mule-ccl.c (Fccl_execute):
-       * mule-ccl.c (Fccl_execute_on_string):
-       * redisplay-x.c (x_output_string):
-       Remove redundant extra parentheses.
-
-1999-09-22  Martin Buchholz  <martin@xemacs.org>
-
-       * chartab.c (word_boundary_p): Add prototype for warning avoidance.
-       * eval.c (PRIMITIVE_FUNCALL): ANSIfy
-       * free-hook.c (fun_ptr): ANSIfy
-       * getloadavg.c: Remove declaration for errno.
-       * gui.c (allocate_gui_item): ANSIfy
-       * gui.h (allocate_gui_item): ANSIfy
-       * mule-ccl.c (resolve_symbol_ccl_program): Make static
-       * realpath.c: Remove K&R support.
-       * redisplay-x.c (x_output_display_block): Don't shadow previous local
-       * glyphs-widget.c (layout_instantiate):  Don't shadow previous local
-       * gutter.c (get_gutter_coords): Make static.
-       * lread.c (locate_file_map_suffixes): Make static.
-       * ralloc.c (relinquish): ANSIfy
-       * redisplay.c:
-       * lisp.h:
-       Move prototypes from redisplay.c to lisp.h
-
-1999-09-22  Martin Buchholz  <martin@xemacs.org>
-
-       * glyphs-x.c (x_widget_set_property):
-       - Remove unnecessary initialization.
-       - Use char*, not Bufbyte *, with GET_C_STRING_OS_DATA_ALLOCA
-       * glyphs-x.c (x_widget_instantiate):
-       - Use char*, not Bufbyte *, with GET_C_STRING_OS_DATA_ALLOCA
-       * unexelf.c (unexec):
-       Add cast for C++ compilability.
-       * redisplay.h:
-       Fix a typo.
-       * ralloc.c (r_alloc_reinit):
-       SET_FUN_PTR was broken wrt ANSI aliasing!
-       To compensate, use __typeof__ when using gcc, else live with
-       possible (but rare) warnings.
-       * ralloc.c (init_ralloc):
-       Ditto
-       * ralloc.c: Use the real dlmalloc prototype for __morecore.
-       * lread.c (locate_file_map_suffixes):
-       * input-method-xlib.c (XIM_init_frame):
-       - Xlib functions should use XPointer, not XtPointer.
-       * input-method-xlib.c (XIM_delete_frame):
-       - Xlib functions should use XPointer, not XtPointer.
-       * input-method-xlib.c (IMDestroyCallback):
-       - Simplify.
-       - XFRAME (obj) can never be NULL, so don't test for it.
-       * gutter.h:
-       Add GUTTER_POS_LOOP for iterating over all gutter_pos'es
-       * gutter.c (SET_GUTTER_WAS_VISIBLE_FLAG):
-       Run c-backslash-region on macro body.
-       * gutter.c (gutter_was_visible):
-       Remove redundant parens - this is not a macro.
-       * gutter.c (redraw_exposed_gutters):
-       Use GUTTER_POS_LOOP.
-       * gutter.c (gutter_specs_changed):
-       Use GUTTER_POS_LOOP.
-       * gutter.c (gutter_geometry_changed_in_window):
-       Use GUTTER_POS_LOOP.
-       * gutter.c (update_frame_gutters):
-       Use GUTTER_POS_LOOP.
-       * gutter.c (init_frame_gutters):
-       Use GUTTER_POS_LOOP.
-       * file-coding.c (determine_real_coding_system):
-       Fix C++ compile error.
-       * emodules.c (find_make_module):
-       Cast return value from xrealloc
-       * emacs.c (Fkill_emacs):
-       Use __typeof__, when available.
-       * emacs.c (voodoo_free_hook):
-       Use __typeof__, when available.
-       (Unfortunately, the type of __free_hook is glibc-version-dependent)
-       * dired.c (user_cache): Use Bufbyte *, not char *
-       * dired.c (Fuser_name_all_completions): Ditto.
-
-1999-09-22  Andy Piper  <andy@xemacs.org>
-
-       * redisplay.c (redisplay_frame): reset the gutter display lines
-       when we reset the subwindows.
-
-       * gutter.c (reset_gutter_display_lines): new function.
-
-       * window.c (Flast_nonminibuf_window): new function equivalent to
-       FRAME_LAST_NONMINIBUF_WINDOW ().
-       (syms_of_window): declare it.
-
-       * redisplay.c (create_string_text_block): don't add bogus eol
-       markers to gutter display lines.
-
-       * glyphs.c (reset_subwindow_cachels): make sure we unmap
-       subwindows using unmap_subwindow so that expose events get
-       registered correctly.
-
-       * window.c (window_scroll): use Vwindow_pixel_scroll_increment to
-       determine how much to scroll the window.
-       (vars_of_window): Vwindow_pixel_scroll_increment is a new
-       variable.
-
-1999-09-20  Robert Pluim  <rpluim@nortelnetworks.com>
-
-       * glyphs-x.c (update_widget_face): Guard fontList declaration for
-       non-motif uses.
-
-1999-09-20  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c (mswindows_update_subwindow): update faces.
-
-1999-09-19  Andy Piper  <andy@xemacs.org>
-
-       * glyphs.c (update_frame_subwindows): update if faces have
-       changed.
-
-       * glyphs-x.c (x_widget_instantiate): create the clip widget using
-       lwlib rather than directly.
-       (x_finalize_image_instance): delete the clip widget using lwlib.
-       (x_update_subwindow): update widget faces.
-       (update_widget_face): new function for updating the face
-       properties of a widget.
-       (x_widget_set_property): update widget faces.
-
-       * lwlib-Xlw.c (xlw_create_clip_window): new function. We need to
-       manage the clip widgets using lwlib so that we can delete them in
-       a safe manner.
-
-1999-09-16  Martin Buchholz  <martin@xemacs.org>
-
-       * lisp-union.h:
-       * lisp-disunion.h:
-       Define new, potentially faster INT arithmetic macros
-       INT_PLUS, INT_MINUS, INT_PLUS1, INT_MINUS1
-       * bytecode.c (execute_optimized_function):
-       Use new macros.
-       Fix metering code
-       * bytecode.c (bytecode_negate):
-       Optimize for integer case.
-
-1999-08-29  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
-
-       * m/mips.h: Support for mips-linux: Add !linux around places
-       that are not valid for linux, define TEXT_START, DATA_START,
-       DATA_SEG_BITS.
-
-1999-09-16  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_output_subwindow): clip subwindows
-       that don't completely fit on-screen rather than just unmapping
-       them.
-
-       * glyphs.h: change signature of map_subwindow.
-
-       * glyphs.c (map_subwindow): add display_glyph_area to the
-       signature. make sure the mapped area saved in the subwindow_cachel
-       reflects this.
-       (Fforce_subwindow_map): make a no-op. I don't think this does
-       anything useful.
-
-       * glyphs-x.h (struct x_subwindow_data): save the Display rather
-       than the Screen. Add a clipwindow and clipwidget handle.
-       (IMAGE_INSTANCE_X_CLIPWINDOW): new accessor.
-       (IMAGE_INSTANCE_X_CLIPWIDGET): ditto.
-       (XIMAGE_INSTANCE_X_CLIPWIDGET): ditto.
-       (XIMAGE_INSTANCE_X_CLIPWINDOW): ditto.
-
-       * glyphs-x.c (x_finalize_image_instance): destroy the clipwidget
-       as well as the widget itself.
-       (x_unmap_subwindow): unmap the clipwindow and clipwidget rather
-       than the widgets and subwindows themselves. move the widget inside
-       the clipwidget.
-       (x_subwindow_instantiate): hold onto the Display rather than the
-       Screen. allocate a clipwindow to put the subwindow inside.
-       (x_resize_subwindow): use saved Display directly.
-       (x_widget_instantiate): allocate a clipwidget of type EmacsManager
-       to put widgets inside.
-
-       * glyphs-widget.c: remove group stuff.
-
-       * glyphs-msw.h (struct mswindows_subwindow_data): new structure to
-       hold the clipwindow.
-       (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW): new accessor.
-       (XIMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW): ditto.
-
-       * glyphs-msw.c: remove group stuff.
-       (mswindows_finalize_image_instance): destroy clipwindow as well as
-       the widget itself.
-       (mswindows_unmap_subwindow): unmap the clipwindow rather than the
-       widget.
-       (mswindows_map_subwindow): ditto. move the widget within the
-       clipwindow.
-       (mswindows_subwindow_instantiate): allocate and initialize
-       mswindows_subwindow_data. allocate a clipwindow with the subwindow
-       as a child.
-       (mswindows_widget_instantiate): ditto.
-       (mswindows_control_wnd_proc): new function that allows us to
-       propagate events from the widget to the main windows control loop.
-
-       * device-msw.c (mswindows_init_device): register new widget clip window
-       class.
-
-       * console.h (struct console_methods): add display_glyph_area to
-       map_window.
-
-       * console-msw.h: declare new window class and wnd proc for
-       widgets.
-
-1999-09-14  Martin Buchholz  <martin@xemacs.org>
-
-       * general.c:
-       * eldap.c:
-       Move symbols used only by eldap.c into eldap.c as statics.
-
-1999-09-09  Martin Buchholz  <martin@xemacs.org>
-
-       * window.c (syms_of_window):
-       * symbols.c (syms_of_symbols):
-       * redisplay.c (syms_of_redisplay):
-       * print.c (syms_of_print):
-       * lisp.h:
-       * intl.c (syms_of_intl):
-       * general.c (syms_of_general):
-       * frame.c (syms_of_frame):
-       * fileio.c (syms_of_fileio):
+       * md5.c:
+       * file-coding.c:
        * file-coding.h:
-       * file-coding.c (syms_of_file_coding):
-       * extents.c (syms_of_extents):
-       * event-stream.c (syms_of_event_stream):
-       * event-stream.c (Fnext_event):
-       * device.c (syms_of_device):
-       * data.c (syms_of_data):
-       * casetab.c (syms_of_casetab):
-       * casetab.c (check_case_table):
-       * callint.c (syms_of_callint):
-       * buffer.c (syms_of_buffer):
-       Delete unused C symbols:
-       Qbuffer_file_name, Qbuffer_undo_list, Quser_variable_p,
-       Qcurrent_prefix_arg, Qtranslate_table, Qkeywordp,
-       Qnumber_or_marker_p, Qcons, Qkeyword, Qignore, Qdelete_device,
-       Qcommand_execute, Qglyph_invisible,
-       Qbuffer_file_coding_system, Qfile_name_handler_alist,
-       Qframe_x_p, Qframe_tty_p, Qblack, Qkeyboard, Qmenubar, Qpath,
-       Qvector, Qwhite, Qcase, Qdomain, Qalternate_debugging_output,
-       Qprint_escape_newlines, Qprint_readably, Qfloat_output_format,
-       Qwindow_scroll_functions, Qfboundp, Qscroll_up, Qscroll_down
-
-       Rename symbols as required by the CHECK_RECORD macro:
-       - Qcase_table_p to Qcase_tablep
-       - Qcoding_system_p to Qcoding_systemp
-
-       * debug.h:
-       * debug.c (syms_of_debug):
-       Make debug.c's internal Lisp_Objects static.
-
-       * events.c (vars_of_events):
-       * events.c (syms_of_events):
-       Use regular old defsymbol instead of KEYSYM + staticpro().
-
-       * select-x.c (CHECK_CUTBUFFER):
-       Rewrite in accordance with coding standards.
-
-       * keymap.c (syms_of_keymap):
-       Use SPC in the same way as RET, TAB, etc.
-
-1999-08-27  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * xemacs-20/src/menubar-x.c (make_dummy_xbutton_event): Don't add
-       offset twice if HAVE_WMCOMMAND is defined.
-
-1999-09-13 Mike McEwan <mike@lotusland.demon.co.uk>
-
-       * redisplay-x.c (x_output_vertical_divider): make sure
-       shadow_thickness is positive.
-
-1999-09-10 Julian Back <jback@rudd.compulink.co.uk>
-
-       * process-nt.c (nt_create_process): fixup to cope with
-       Vprocess_environment.
-
-1999-09-02  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_output_layout): call output
-       routines with clear_clip false. output layout borders with text
-       correctly.
-
-       * redisplay-msw.c (mswindows_output_blank): call output routines
-       with clear_clip true.
-       (mswindows_output_string): ditto.
-       (mswindows_output_display_block): ditto.
-
-       * redisplay-x.c (x_output_display_block): call output routines
-       with clear_clip true.
-
-       * redisplay.h: fix output routines for clear_clip parameter.
-
-       * redisplay-output.c (redisplay_output_layout): cope with glyphs
-       in the border.
-
-       * glyphs-widget.c (layout_instantiate): deal with border glyphs.
-       (check_valid_glyph_or_instantiator): renamed from
-       check_valid_glyph_or_image.
-       (check_valid_border): allow glyphs or their instantiators.
-       (check_valid_glyph_or_instantiator_list): renamed from
-       check_valid_glyph_or_image_list,
-       (glyph_instantiator_to_glyph): new function. make sure a glyph is
-       a glyph and not an instantiator.
-       (substitute_keyword_value): new function. replace a keyword value
-       with a new one.
-
-1999-09-01  Andy Piper  <andy@xemacs.org>
-
-       * glyphs.c (string_set_property): new function to set the data of
-       a string.
-       (image_instantiator_format_create): use it.
-
-1999-09-07  Hrvoje Niksic  <hniksic@srce.hr>
+       Change enum eol_type to eol_type_t.
 
-       * fns.c (Fmapc): Rename back to Fmapc_internal.
+2000-01-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
 
-1999-07-30  Gleb Arshinov  <gleb@cs.stanford.edu>
+       * gui.c (get_gui_callback): Check cons before accessing car.
 
-       * ntheap.h: CONST (semantically constant) name field of file_data
-       struct
+2000-01-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
 
-       * unexnt.c (open_output_file): match function definition with
-       function declaration
+       * specifier.h (XSPECIFIER_TYPE): Add error checking version.
+       (XSETSPECIFIER_TYPE): Ditto.
 
-       * editfns.c: #include "sysfile.h" for getcwd() prototype
+2000-01-17  Didier Verna  <didier@xemacs.org>
 
-       * gif_io.c:  #include "sysfile.h" for close() prototype
+       * redisplay.c (generate_fstring_runes): compute string size in
+       characters, not bytes.
 
-1999-09-02  Martin Buchholz  <martin@xemacs.org>
+2000-01-09  Hrvoje Niksic  <hniksic@iskon.hr>
 
-       * elhash.c:
-       * elhash.h:
-       Change the :type keyword to :weakness, for compatibility with the
-       GNU Emacs 20.5 hash table implementation.
-       Keep (but don't document) the :type keyword for compatibility.
-       Obsolete function hash-table-type
-       General cleanup.
-       Define function sxhash for compatibility with Common Lisp and GNU Emacs.
+       * window.c (Fwindow_minibuffer_p): Make WINDOW optional.
 
-1999-09-01  Martin Buchholz  <martin@xemacs.org>
+2000-01-14  Hrvoje Niksic  <hniksic@iskon.hr>
 
-       * floatfns.c (arith_error):
-       * floatfns.c (range_error):
-       * floatfns.c (range_error2):
-       * floatfns.c (domain_error):
-       * floatfns.c (domain_error2):
-       * lrecord.h (LRECORDP):
-       * console-x.h (X_ERROR_OCCURRED):
-       * console-x.h (HANDLING_X_ERROR):
-       * chartab.c (CATEGORYP):
-       * buffer.h (XCHAR_OR_CHAR_INT):
-       Remove redundant and confusing parentheses.
+       * print.c (print_error_message): Call print_prepare().
 
-       * redisplay-output.c (redisplay_clear_to_window_end):
-       Remove redundant initialization.
+2000-01-14  Martin Buchholz  <martin@xemacs.org>
 
-       * redisplay.h:
-       * redisplay-msw.c:
-       * redisplay-x.c:
-       Move declarations of bevel_modeline() into redisplay.h.
+       * .dbxrc: Renamed from dbxrc.
 
-1999-08-30  Olivier Galibert  <galibert@pobox.com>
+       * events.c (event_to_character):
+       Use `assert (foo)' instead of `if (!foo) abort()'
 
-       * lisp.h: Add staticpro_nodump for undumped staticpro-ing.
-       * alloc.c: Add staticpro_nodump for undumped staticpro-ing.  Add
-                 alignment information for dumped data.  Enhance
-                 descriptions.  Phase out Vterminal_* variables while
-                 dumping.
-       * lrecord.h: Add chained descriptions and automagically-reset
-                 lisp_objects to the description system.
+       * .gdbinit (xtype): Add documentation.
+       * .gdbinit (check-temacs): New function.
+       * .gdbinit (check-xemacs): New function.
+       * dbxrc (check-xemacs): New function.
+       * dbxrc (check-xemacs): New function.
 
-       * console-stream.h: Declare the Vterminal_* variables.
+2000-01-14  Andy Piper  <andy@xemacs.org>
 
-       * buffer.c: Don't dump Vbuffer_alist, Vbuffer_defaults and
-                 Vbuffer_local_symbols.
-       * console.c: Don't dump Vconsole_list, Vconsole_defaults and
-                 Vconsole_local_symbols.
-       * eval.c: Don't dump Qunbound_suspended_errors_tag.
-       * lread.c: Don't dump Vread_buffer_stream.
-       * lstream.c: Don't dump Vlstream_free_list[].
-       * search.c: Don't dump last_thing_searched.
-       * window.c: Don't dump minibuf_window and
-                 Vwindow_configuration_free_list[].
+       * glyphs-widget.c (widget_query_geometry): Make sure that we
+       calculate default dimensions correctly.
 
-       * faces.c: Add face description.
-       * fns.c: Add bit_vector description.
-       * glyphs.c: Add image specifier description.
-       * objects.c: Add color, face and face boolean specifiers descriptions.
-       * opaque.c: Add opaque description.  Don't dump Vopaque_ptr_free_list.
-       * rangetab.c: Add range table description.
-       * specifier.c: Add specifier and specifier methods description.
-       * specifier.h: Add specifier extra description support.
+2000-01-13  Kirill 'Big K' Katsnelson  <kkm@dtmx.com>
 
-       * symbols.c: Fix symbol_value_buffer_local_description.
+       * symsinit.h: Added prototype for reinit_vars_of_frame_mswindows.
 
-       * gdbinit (Lisp): Add opaque_ptr, remove opaque_list.
+       * event-msw.c (vars_of_event_mswindows): Fixed a mistyped
+       pdump_wire'd variable.
 
-1999-09-02  Hrvoje Niksic  <hniksic@srce.hr>
+       * emacs.c: (main_1): Conditionalized calls to
+       reinit_vars_of_scrollbar_x and reinit_vars_of_module.
 
-       * extents.c (extent_remprop): Get extent's plist address
-       correctly.
+2000-01-13  Martin Buchholz  <martin@xemacs.org>
 
-1999-08-31  Andy Piper  <andy@xemacs.org>
-
-       * xmu.h: define Xmu/Converters.h things.
-
-1999-08-31  Andy Piper  <andy@xemacs.org>
-
-       * opaque.c (equal_opaque_ptr): define.
-       (hash_opaque_ptr): define.
-
-       * xmu.h: define Xmu/Misc.h things.
-
-1999-08-17  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * file-coding.c (determine_real_coding_system): Treat `coding:'
-       cookie.
-
-1999-08-16  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * file-coding.c (struct decoding_stream): New member `counter'.
-       (reset_decoding_stream): Initialize `counter'.
-       (decode_coding_ucs4): Use `counter'.
-       (decode_coding_utf8): Likewise.
-
-1999-08-31  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_normalize_glyph_area): make sure
-       the clip offset doesn't exceed the height we have available to
-       show.
-
-       * window.h (struct window): add top_yoffset and left_xoffset for
-       pixel scrolling.
-       (WINDOW_TEXT_TOP_CLIP): new macro.
-
-       * window.c (window_scroll): add behaviour for pixel-scrolling of
-       tall lines.
-
-       * redisplay.h (struct display_line): add top_clip.
-       (DISPLAY_LINE_HEIGHT): adjust for top_clip.
-       (DISPLAY_LINE_YPOS): ditto.
-
-       * redisplay.c (position_redisplay_data_type): add
-       start_col_xoffset to prepare for pixel-based h-scrolling.
-       (WINDOW_SCROLLED): new macro.
-       (next_tab_position): use it.
-       (add_glyph_rune): use new hscoll vars.
-       (create_text_block): ditto.
-       (generate_displayable_area): adjust off-by-one error.
-       (regenerate_window): take top_clip into account.
-       (regenerate_window_extents_only_changed): ditto.
-       (regenerate_window_incrementally): ditto.
-
-       * redisplay-x.c (x_output_display_block): use DISPLAY_LINE_YPOS,
-       DISPLAY_LINE_HEIGHT and DISPLAY_LINE_YEND macros.
-       (x_output_string): ditto.
-       (x_output_blank): ditto.
-       (x_output_hline): ditto.
-       (x_output_eol_cursor): ditto.
-
-       * redisplay-output.c (output_display_line): allow for
-       top_clip. use DISPLAY_LINE_YPOS, DISPLAY_LINE_HEIGHT and
-       DISPLAY_LINE_YEND macros.
-       (redisplay_output_layout): output strings in layouts correctly.
-       (redisplay_clear_clipped_region): allow for top_clip.
-       (redisplay_calculate_display_boxes): ditto.
-
-       * redisplay-msw.c (mswindows_output_blank): use DISPLAY_LINE_YPOS,
-       DISPLAY_LINE_HEIGHT and DISPLAY_LINE_YEND macros.
-       (mswindows_output_cursor): ditto.
-       (mswindows_output_string): ditto.
-       (mswindows_redraw_exposed_window): ditto.
-       (mswindows_output_display_block): ditto.
-
-       * gutter.c: new specifier type gutter-size.
-       (gutter_size_validate): validate gutter-size specifier.
-       (Fgutter_size_specifier_p): predicate for gutter-size.
-       (Fredisplay_gutter_area): allow the gutter area to be redisplayed
-       under user contol, like Fredisplay_echo_area.
-       (syms_of_gutter): add new functions.
-       (specifier_type_create_gutter): add new specifier.
-       (specifier_vars_of_gutter): change specifier types of *-height to
-       gutter-size.
-
-       * glyphs.c (glyph_width): make work with image instances.
-
-       * console.h (struct console_methods): change api of output_string.
-
-       * glyphs-x.c (x_map_subwindow): move before mapping as reported by
-       Stephen J. Turnbull <turnbull@sk.tsukuba.ac.jp>
-
-1999-08-30  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c (x_finalize_image_instance): X_MASK -> PIXMAP_MASK
-       for assignment.
-       (init_image_instance_from_x_image): ditto.
-       (x_xpm_instantiate): ditto.
-       (x_colorize_image_instance): ditto. Reported by Richard Cognot
-       <cognot@ensg.u-nancy.fr>
-
-1999-08-29  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c (x_widget_instantiate): move font initialisation so
-       that it doesn't get saved in the user defined args.
-       (x_tab_control_instantiate): Set the fg color of the tab's
-       children.
-       (x_tab_control_set_property): ditto.
-
-1999-08-27  Damon Lipparelli  <lipp@primus.com>
-
-       * events.h (XTIMEOUT): must preface Lisp_Timeout with ``struct''
-       (XSETTIMEOUT): fixup typo
-
-1999-08-11  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * syntax.c (scan_words): Unified Mule and Non-mule scanning.
-       Word boundary search looks back instead of forward so that it
-       doesn't peek over the limit.
-
-1999-08-20  Olivier Galibert  <galibert@pobox.com>
-
-       * config.h.in: Add PDUMP define.
-       * emacs.c (Fdump_emacs): Hackish, call pdump() if configured in.
-
-       * lrecord.h: Enhance description system.
-       * alloc.c: Fix vector and string description.  Add portable
-       dumper enumeration fonctions.
-
-       * symbols.c:  Fix symbols description.   Add  symbol_value_forward
-       description.
-       * eval.c: Add subr description.
-       * elhash.c (CLEAR_HENTRY):   Clean  value pointer  too.   Fix hash
-       table description.
-       (remhash_1): CLEAR_HENTRY evaluates the parameter two times now.
-
-1999-08-20  Olivier Galibert  <galibert@pobox.com>
-
-       * opaque.c: Kill opaque lists, make  Lisp_Opaque_Ptr a lrecord of
-       its own.
-       * opaque.h: Ditto.
-
-       * eval.c (eval_in_buffer_trapping_errors):
-       (run_hook_trapping_errors):
-       (safe_run_hook_trapping_errors):
-       (call0_trapping_errors):
-       (call1_trapping_errors):
-       (call2_trapping_errors): OPAQUEP  -> OPAQUE_PTRP.  make_opaque_ptr
-       now takes a non-const void *.
-
-1999-08-20  Olivier Galibert  <galibert@pobox.com>
-
-       * opaque.c: Remove make_opaque_long.
-
-       * opaque.h: Remove everything opaque_long related.
-
-       * eval.c (vars_of_eval): Make Qunbound_suspended_errors_tag an
-       opaque_ptr.
-
-       * emacs.c (main_1): Remove make_opaque_long from comment.
-
-1999-08-20  Olivier Galibert  <galibert@pobox.com>
-
-       * event-stream.c (mark_timeout):
-       (print_timeout):
-       (event_stream_generate_wakeup):
-       (event_stream_resignal_wakeup):
-       (event_stream_disable_wakeup):
-       (event_stream_wakeup_pending_p):
-       (vars_of_event_stream): Lisp_Timeout is now a lrecord.
-
-       * events.h (struct Lisp_Timeout): Added.
-
-1999-08-24  Andy Piper  <andy@xemacs.org>
-
-       * console-x.h: declare new pixmap signatures.
-
-1999-08-23  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c (x_update_subwindow): make sure the widget size is
-       maintained after an update.
-
-       * event-Xt.c (emacs_Xt_handle_magic_event): use
-       find_matching_subwindow to check whether the exposure is totally
-       inside a subwindow, if it is then ignore it.
-
-       * glyphs.c (find_matching_subwindow): new function.
-
-       * toolbar-x.c (x_draw_blank_toolbar_button): use new
-       x_output_shadows signature.
-       (x_output_toolbar_button): use new x_output_x_pixmap signature.
-
-       * redisplay.h (struct display_box): new structure.
-       (struct display_glyph_area): ditto.
-       declare new display_box functions.
-
-       * redisplay-x.c (x_output_pixmap): update for new display
-       box stuff.
-       (x_bevel_area): update to allow multiple edge styles and border
-       segments.
-       (x_output_display_block): update for new display_box stuff and
-       signatures.
-       (x_clear_region): ditto.
-       (x_output_x_pixmap): ditto. adjust offsets rather than clip.
-       (console_type_create_redisplay_x): declare new console methods.
-       (x_output_vertical_divider): update for new bevel_area signature.
-       (x_output_shadows): update to allow selective drawing of edges.
-
-       * redisplay-tty.c (tty_output_display_block): do nothing for
-       layouts.
-
-       * redisplay-output.c (redisplay_output_subwindow): convert to use
-       display_box structure, this allows us to put subwindows anywhere
-       with any offset, useful for layout glyphs.
-       (redisplay_output_layout): new function. output a layout and its
-       sub-glyphs.
-       (redisplay_output_pixmap): new modular function combining generic
-       parts of the X and mswindows versions. convert to use display_box
-       structures.
-       (redisplay_clear_clipped_region): new function. clear the area a
-       glyph is going into.
-       (redisplay_normalize_glyph_area): new function. calculate the
-       bounds of a display_glyph_area given a display_box.
-       (redisplay_normalize_display_box): new function. shrink a
-       display_box to enclose a display_glyph_area.
-       (redisplay_display_boxes_in_window_p): check whether the input
-       display_box and display_glyph_area are actually in a window.
-       (redisplay_calculate_display_boxes): calculate display boxes based
-       on conventional display_line metrics.
-       (bevel_modeline): update for new bevel_area signature.
-
-       * redisplay-msw.c (mswindows_output_blank): update for new
-       display_box stuff.
-       (mswindows_output_string): ditto.
-       (mswindows_output_dibitmap): ditto.
-       (mswindows_output_dibitmap_region): ditto.
-       (mswindows_output_pixmap): ditto.
-       (mswindows_bevel_area): update to allow multiple edge styles and
-       border segments.
-       (mswindows_output_display_block): update for new display_box stuff
-       and signatures.
-       (mswindows_clear_region): ditto.
-       (console_type_create_redisplay_mswindows): declare new console methods.
-
-       * lisp.h (edge_style): new enum.
-       declare display_box and display_glyph_area.
-
-       * gutter.c (output_gutter): update for new bevel_area signature.
-
-       * glyphs.h (image_instance_type): add layout.
-       (IMAGE_LAYOUT_MASK): ditto.
-       (LAYOUT_IMAGE_INSTANCEP): new macro.
-       (CHECK_LAYOUT_IMAGE_INSTANCE): ditto.
-       (struct Lisp_Image_Instance): add offsets for layout and the
-       layout type itself. move mask here also.
-       (IMAGE_INSTANCE_LAYOUT_CHILDREN): new macro.
-       (IMAGE_INSTANCE_LAYOUT_BORDER): ditto.
-       (XIMAGE_INSTANCE_LAYOUT_CHILDREN): ditto.
-       (XIMAGE_INSTANCE_LAYOUT_BORDER): ditto.
-
-       * glyphs.c (mark_image_instance): update for layouts.
-       (print_image_instance): ditto.
-       (image_instance_equal): ditto.
-       (image_instance_hash): ditto.
-       (allocate_image_instance): initialise offsets for layout.
-       (decode_image_instance_type): update for layouts.
-       (encode_image_instance_type): ditto.
-       (Fimage_instance_height): ditto.
-       (Fimage_instance_width): ditto.
-       (allocate_glyph): ditto.
-       (glyph_width): allow image instances as an argument. update for layouts.
-       (glyph_height_internal): ditto.
-       (syms_of_glyphs): add layout symbols.
-
-       * glyphs-x.h (struct x_image_instance_data): remove mask entry.
-       (IMAGE_INSTANCE_X_MASK): update.
-
-       * glyphs-x.c (x_label_instantiate): new function. instantiate a
-       label.
-       (image_instantiator_format_create_glyphs_x): initialise new layout
-       glyph type.
-
-       * glyphs-widget.c: new layout type.
-       (check_valid_orientation): new keyword checker for layouts.
-       (check_valid_justification): ditto.
-       (check_valid_border): ditto.
-       (check_valid_glyph_or_image_list): ditto.
-       (layout_possible_dest_types): new function for layout glyph type.
-       (layout_normalize): ditto.
-       (layout_instantiate): ditto.
-       (syms_of_glyphs_widget): new keywords for layout.
-       (image_instantiator_format_create_glyphs_widget): initialise the
-       layout glyph type.
-
-       * glyphs-msw.h (struct mswindows_image_instance_data): remove mask
-       argument.
-       (IMAGE_INSTANCE_MSWINDOWS_MASK): update.
-
-       * glyphs-msw.c: declare layout format.
-       (image_instantiator_format_create_glyphs_mswindows): initialise it.
-
-       * general.c: new symbols for layouts.
-
-       * console.h (struct console_methods): new console methods for
-       outputting pixmaps and strings.
-
-1999-08-23  Didier Verna  <verna@inf.enst.fr>
-
-       * sound.c: revert the renaming of `bell_volume' to `Vbell_volume'
-       and `bell_inhibit_time' to `Vbell_inhibit_time'.
-
-1999-08-18  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_output_subwindow): disable
-       clipping attempt.
-
-1999-08-17  Andy Piper  <andy@xemacs.org>
-
-       * gutter.c (redraw_exposed_gutter): handle degenerate case of no
-       area to expose or no gutter to display.
-
-1999-08-16  Charles G Waldman  <cgw@fnal.gov>
-
-       * sound.c: rename `bell_volume' to `Vbell_volume' and
-       `bell_inhibit_time' to `Vbell_inhibit_time'.
-
-1999-08-13  Charles G Waldman  <cgw@fnal.gov>
-
-       * sound.c: (bell-inhibit-time): New variable.
-       (ding): Use it.
-       (sound-alist): Fix docstring.
-
-1999-08-17  Andy Piper  <andy@xemacs.org>
-
-       * gui-x.c (button_item_to_widget_value): xstrdup name so that
-       deleting it is ok.
-
-1999-08-16 Jeff Miller <jmiller@smart.net>
-
-       * syntax.c (scan_words): make compile.
-
-1999-08-16  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_output_subwindow): try and be more
-       relaxed about clipping possibilities.
-
-       * glyphs-x.c (x_tab_control_set_property): free_widget_value_tree
-       rather than just the widget_value.
-       (x_update_subwindow): ditto.
-       (x_widget_instantiate): ditto.
-
-       * gutter.c (output_gutter): shrink current display lines if
-       required.
-
-1999-08-15  Andy Piper  <andy@xemacs.org>
-
-       * redisplay.h: declare free_display_lines.
-
-       * redisplay.c (free_display_lines): make non-static.
-
-       * gutter.c (free_frame_gutters): use free_display_lines instead of
-       Dynarr_free.
-       (calculate_gutter_size): ditto.
-
-1999-08-12  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * eval.c (run_hook_with_args_in_buffer): GCPRO globals.
-
-1999-08-14  Andy Piper  <andy@xemacs.org>
-
-       * glyphs.c (update_subwindow_cachel): make it less brittle.
-
-1999-08-04  Mike Woolley  <mike@bulsara.com>
-
-       * scrollbar-msw.c (mswindows_handle_mousewheel_event): Fixed
-       problem in wheelmouse code occurring when the horizontal scrollbar
-       is enabled but not visible.
-
-1999-08-08  Andy Piper  <andyp@beasys.com>
-
-       * toolbar-msw.c (mswindows_redraw_frame_toolbars): new function.
-       (console_type_create_toolbar_mswindows): use it.
-
-       * glyphs.c (Fset_image_instance_property): fiddly reorganisation.
-
-       * redisplay-output.c (redisplay_output_display_block): unmap
-       subwindows in the block area before outputting the block.
-
-       * event-msw.c (mswindows_wnd_proc): check the update rect before
-       painting and disable expose registration while painting.
-
-       * glyphs.c (register_ignored_expose): check
-       hold_ignored_expose_registration before registering expose events.
-
-       * redisplay.c (redisplay_frame): reset the subwindow cache before
-       displaying the gutter.
-
-       * glyphs-msw.c (mswindows_map_subwindow): move the window before
-       mapping.
-
-       * gutter.c (update_frame_gutters): check for glyphs_changed as if
-       it is the subwindow cache will have been reset.
-
-1999-08-06  Andy Piper  <andyp@beasys.com>
-
-       * gui-x.c (button_item_to_widget_value): cope with strings.
-
-       * glyphs.h: declare global widget functions.
-       (IIFORMAT_HAS_SHARED_DEVMETHOD): new macro.
-
-       * glyphs-x.c (x_combo_box_instantiate): do generic initialization
-       here. remove dead code.
-       (image_instantiator_format_create_glyphs_x): enable combo boxes
-       for Motif 2.0.
-
-       * glyphs-widget.c (widget_instantiate_1): make non-static.
-       (tree_view_instantiate): renamed from combo_box_instantiate.
-       (image_instantiator_format_create_glyphs_widget): use new/changed methods.
-
-       * glyphs-msw.c (mswindows_combo_box_instantiate): do generic
-       initialization here.
-
-       * lwlib-Xm.c (xm_update_combo_box): new function.
-       (xm_update_one_widget): call it.
-       (xm_update_one_value): deal with combo boxes as well as lists.
-       (xm_create_combo_box): create a drop-down combo box.
-
-       * toolbar-msw.c (mswindows_output_toolbar): call
-       mswindows_move_toolbar.
-
-1999-08-05  Andy Piper  <andyp@beasys.com>
-
-       * window.c (Fcurrent_pixel_column): new function. use display
-       lines to calculate pixel position of point.
-       * window.c (syms_of_window): declare it.
-
-1999-08-05  Andy Piper  <andy@xemacs.org>
-
-       * glyphs.c (check_for_ignored_expose): ignore exposures wholly
-       contained in our ignore list.
-
-       * buffer.c (Frecord_buffer): add call to record-buffer-hook.
-       (syms_of_buffer): declare record-buffer-hook.
-
-       * s/mingw32.h: define mousewheel things.
-
-1999-08-04  Mike Woolley <mike@bulsara.com>
-
-       * windowsnt.h (_WIN32_WINNT): enable for win95
-
-       * s/cygwin32.h: define mousewheel things.
-
-       * scrollbar-msw.h: declare mousewheel handler.
-
-       * scrollbar-msw.c (mswindows_handle_mousewheel_event): new function.
-
-1999-08-04  Andy Piper  <andy@xemacs.org>
-
-       * gui-x.c (gui_items_to_widget_values): remove unused variable.
-       (gui_items_to_widget_values_1): ditto.
-
-       * gui-x.h: unconditionally define since it is used everywhere.
-
-1999-08-04  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c (x_finalize_image_instance): only free pixels if we
-       have that type of image.
-
-1999-07-30  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_unmap_subwindows): add comparison
-       subwindow to not unmap if required.
-       (redisplay_unmap_subwindows_maybe): comparison is Qnil.
-       (redisplay_unmap_subwindows_except_us): new function.
-       (redisplay_output_subwindow): use it to unmap windows in the area
-       we are displaying into.
-
-       * glyphs.c (update_subwindow_cachel_data): always update as we
-       only ever get called when an update is required.
-       (update_subwindow_cachel): new function. sync a subwindow with its
-       cachel.
-       (Fresize_subwindow): use it.
-       (register_ignored_expose): make sure we set the tail correctly.
-
-1999-07-28  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_clear_bottom_of_window): remove
-       unneeded device.
-
-       * gutter.c (redraw_exposed_gutter): unmap subwindows from the
-       whole gutter.
-
-       * gui.h: declare parse_gui_item_tree_list and
-       parse_gui_item_tree_children.
-
-       * gui.c (parse_gui_item_tree_item): new function for parsing item
-       lists into gui-item trees.
-       (parse_gui_item_tree_children): ditto.
-       (parse_gui_item_tree_list): ditto.
-
-       * gui-x.h: declare gui_items_to_widget_values.
-
-       * gui-x.c (gui_items_to_widget_values_1): new function for
-       recursively parsing gui-items into widget_values.
-       (gui_item_children_to_widget_values): ditto.
-       (gui_items_to_widget_values): ditto.
-       (sanity_check_lwlib): add widgets macrolets.
-
-       * glyphs.h (IMAGE_INSTANCE_WIDGET_ITEMS): rename from *ITEM.
-       (XIMAGE_INSTANCE_WIDGET_ITEMS): ditto.
-       (IMAGE_INSTANCE_WIDGET_ITEM): rename from *SINGLE_ITEM.
-       (XIMAGE_INSTANCE_WIDGET_ITEM): ditto.
-       (struct expose_ignore): new structure for storing ignorable expose
-       events.
-
-       * glyphs.c (valid_image_instantiator_format_p): fix so that using
-       a console-type as a locale works.
-       (mark_image_instance): ITEM->ITEMS.
-       (image_instance_equal): ditto.
-       (image_instance_hash): ditto.
-       (struct expose_ignore_blocktype): new blocktype.
-       (check_for_ignored_expose): new function. checks frame exposure
-       list for events to ignore.
-       (register_ignored_expose): new function. registers an expose event
-       as ignorable.
-       (unmap_subwindow): register the expose event as ignorable.
-       (vars_of_glyphs): initialise the exposure blocktype.
-
-       * glyphs-x.c (x_finalize_image_instance): use lw_destroy_widget.
-       (x_update_subwindow): modify all widgets using widget_value tree
-       rather than just a single widget value.
-       (x_widget_instantiate): LWLIB_USES_MOTIF -> LWLIB_WIDGETS_MOTIF.
-       make sure widgets don't resize themselves.
-       (x_tab_control_instantiate): new function. use lwlib tab functions.
-       (x_tab_control_set_property): new function.
-       (image_instantiator_format_create_glyphs_x): add tab_control.
-
-       * glyphs-widget.c (widget_text_to_pixel_conversion): calculate
-       slightly more sensibly.
-       (initialize_widget_image_instance): ITEM->ITEMS.
-       (widget_instantiate_1): parse gui items generically into the ITEMS
-       entry.
-
-       * glyphs-msw.c (mswindows_update_subwindow): replace
-       SINGLE_ITEM->ITEM.
-       (mswindows_register_widget_instance): ditto.
-       (add_tree_item): modify to use new pre-initialised gui-item
-       structure.
-       (add_tab_item): ditto.
-       (mswindows_tab_control_instantiate): ditto.
-       (mswindows_tab_control_set_property): ditto.
-       (image_instantiator_format_create_glyphs_mswindows): predicate
-       existance of widgets on HAVE_WIDGETS.
-
-       * frame.h (struct frame): add subwindow_exposures variables.
-
-       * frame.c (allocate_frame_core): reset subwindow_exposures links.
-
-       * event-msw.c (mswindows_wnd_proc): check for ignored
-       expose events before redrawing.
-
-       * event-Xt.c (emacs_Xt_handle_magic_event): check for ignored
-       expose events before redrawing.
-
-1999-07-30  SL Baur  <steve@xemacs.org>
-
-       * scrollbar-x.c: should include EmacsFrame.h.
-       From Jeff Miller <jmiller@smart.net>
-
-1999-07-30  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.19 is released
-
-1999-07-27  Jeff Miller  <jmiller@smart.net>
-
-       * add a "#ifdef HAVE_MENUBARS"  wrapper to gui.c around
-         menubar_show_keybindings.
-
-1999-07-23  SL Baur  <steve@miho>
-
-       * mule-charset.c (syms_of_mule_charset): Delete duplicated
-       definition of Qccl_program.
-
-       * mule-ccl.h: Make a global declaration of it here.
-
-1999-07-20  Bob Weiner  <weiner@beopen.com>
-
-       * s/sco7.h: Added from rr@sco.com.
-
-1999-06-25  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * mule-ccl.c (ccl_driver): Fix `CCL_WriteMultibyteChar2'.
-
-1999-06-24  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * file-coding.c (mule_decode): Setup `str->ccl.last_block'.
-       (mule_encode): Likewise.
-
-       * mule-ccl.c (Qccl_program): New variable.
-       (CCL_SUSPEND): New macro.
-       (CCL_INVALID_CMD): New macro.
-       (CCL_READ_CHAR): Don't regard as invalid command while processing
-       the last block even if input is empty; use
-       `CCL_STAT_SUSPEND_BY_SRC' instead of `CCL_STAT_SUSPEND'.
-       (vars_of_mule_ccl): Setup `Qccl_program' and `Qccl_program_idx'.
-
-       * mule-ccl.h (CCL_STAT_SUCCESS): Moved from mule-ccl.c.
-       (CCL_STAT_SUSPEND_BY_SRC): Imported from Emacs 20.3.10.
-       (CCL_STAT_SUSPEND_BY_DST): Likewise.
-       (CCL_STAT_INVALID_CMD): Moved from mule-ccl.c; change value from 2.
-       (CCL_STAT_QUIT): Moved from mule-ccl.c; change value from 3.
-
-1999-05-04  Ken'ichi Handa  <handa@gnu.org>
-
-       * mule-ccl.h (struct ccl_program): New member stack_idx.
-
-       * mule-ccl.c (ccl_prog_stack_struct): Declare it as static.
-       (ccl_driver): Setup stack_idx and ccl_prog correctly.  Update them
-       before returing.
-       (setup_ccl_program): Initialize ccl->stack_idx to 0.
-
-1998-10-12  Kenichi Handa  <handa@etl.go.jp>
-
-       * mule-ccl.c (CCL_DECODE_SJIS, CCL_ENCODE_SJIS): Swap the
-       definitions.
-
-1998-08-18  Kenichi Handa  <handa@etl.go.jp>
-
-       * mule-ccl.c (CCL_READ_CHAR): If eof is encounterd while
-       processing the last block, don't just finish but processes eol
-       block of the current CCL program.
-       (ccl_driver): Add a new jump label ccl_repeat for the above
-       change.
-
-1998-04-15  Kenichi Handa  <handa@etl.go.jp>
-
-       * mule-ccl.c: Typo in comments fixed.
-       (Qccl_program_idx): New variables.
-       (CCL_ReadMultibyteChar2): Macro name changed from
-       CCL_ReadMultibyteCharacter.
-       (CCL_WriteMultibyteChar2): Macro name changed from
-       CCL_WriteMultibyteChar2.
-       (ccl_driver): Adjusted for the above changes.
-       (resolve_symbol_ccl_program): New function.
-       (Fccl_execute): The arg CCL-PROGRAM can be a symbol of CCL
-       program.  If CCL-PRGRAM is a vector, convert symbols in it to ID
-       numbers by resolve_symbol_ccl_program.
-       (Fccl_execute_on_string): Likewise.
-       (Fregister_ccl_program): If the arg CCL-PRGRAM is a vector,
-       convert symbols in it to ID numbers by resolve_symbol_ccl_program.
-
-1998-01-21  Kenichi Handa  <handa@etl.go.jp>
-
-       * mule-ccl.h: (struct ccl_program): New member private_state.
-
-       * mule-ccl.c
-       (CCL_Call): Fix the comment.
-       (CCL_ReadMultibyteCharacter, CCL_WriteMultibyteCharacter): New
-       macros for CCL Commands.
-       (EXCMD): New macro.
-       (ccl_driver): New case lable `CCL_Extention'.
-       (setup_ccl_program): Initialize the member `private_state' of CCL.
-
-1999-07-08  Katsumi Yamaoka <yamaoka@jpl.org>
-
-       * keymap.c (copy_keymap_internal): Inherit the default binding.
-
-1999-07-14  Kazuyuki IENAGA <kazz@imasy.or.jp>
-
-       * event-Xt.c (handle_focus_event_1): Re-enable Motif/XIM to get
-       focus the event (XIM_focus_event).
-       (emacs_Xt_handle_magic_event): No side effect on Motif/XIM because
-       XIM_SetGeometry does nothing in input_method_motif.c, but re-unify
-       the interface for future use (XIM_SetGeometry).
-       * redisplay-x.c (x_output_string): Re-enable Motif/XIM to set spot
-       location (XIM_SetSpotLocation).
-       (x_output_eol_cursor): Ditto.
-
-1999-07-17  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * gdbinit (pobj): change lrecord_foo to &lrecord_foo to match
-       Olivier's change to lrecord.h of 1999-04-22
-
-1999-07-20  Robert Pluim  <rpluim@bigfoot.com>
-
-       * gutter.c (redraw_exposed_gutter): Change type of pos from
-       enum toolbar_pos -> enum gutter_pos, since former is only defined
-       if toolbar support is.
-
-1999-07-19  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c (x_resize_subwindow): cope with widgets as well as
-       subwindows.
-
-       * gutter.c (gutter_validate): new function for the gutter specifier.
-       (specifier_type_create_gutter): declare specifier validator.
-
-       * buffer.h (INC_CHARBYTIND): add for no error checking version.
-
-1999-07-18  Andy Piper  <andy@xemacs.org>
-
-       * redisplay.c (add_emchar_rune): use XSTRING_DATA not string_data.
-
-       * glyphs-msw.c (console_type_create_glyphs_mswindows): add
-       resize_subwindow.
-       (mswindows_resize_subwindow): new function.
-
-       * gutter.c (redraw_exposed_gutter): only reset the
-       current_display_lines if non-zero.
-       (Fgutter_pixel_height): new function.
-       (Fgutter_pixel_width): new function.
-
-       * event-msw.c (mswindows_wnd_proc): set the mask of the parameter
-       we want to retrive from the tab control.
-
-1999-07-17  Andy Piper  <andy@xemacs.org>
-
-       * window.c (change_window_height): mark gutters changed when we're
-       done.
-
-       * gutter.c (specifier_vars_of_gutter): make defaults more
-       sensible.
-
-       * gutter.h (WINDOW_REAL_GUTTER_BORDER_WIDTH): adjust to be 0 for 0
-       height gutter.
-       (DEFAULT_GUTTER_WIDTH): change.
-       (DEFAULT_GUTTER_BORDER_WIDTH): change.
-
-1999-07-18  Andy Piper  <andy@xemacs.org>
-
-       * redisplay.c (add_emchar_rune): use XSTRING_DATA not string_data.
-
-1999-07-16  Andy Piper  <andy@xemacs.org>
-
-       * frame.c (Fmake_frame): call init_frame_gutters().
-
-       * redisplay.c (add_emchar_rune): use string functions if we are
-       working with a string.
-       (position_redisplay_data_type): add string element.
-
-1999-07-15  Andy Piper  <andy@xemacs.org>
-
-       * winslots.h: add real_gutter_size slots to hold the actual gutter
-       size. This is important for autodetected sizes.
-
-       * gutter.c (calculate_gutter_size): calculate size for gutters
-       that have 'autodetect size.
-
-       * redisplay-msw.c (mswindows_output_vertical_divider): adjust
-       extent of divider for gutters.
-
-       * redisplay-x.c (x_output_vertical_divider): adjust extent of
-       divider for gutters.
-
-       * scrollbar.c (update_scrollbar_instance): adjust scrollbar
-       position to take into account the gutters.
-
-       * redisplay.c (generate_modeline): adjust modeline position to
-       take into account the gutters.
-
-1999-07-14  Andy Piper  <andy@xemacs.org>
-
-       * gutter.c (frame_topmost_window): new function.
-       (frame_bottommost_window): ditto.
-       (frame_leftmost_window): ditto.
-       (frame_rightmost_window): ditto.
-
-1999-07-13  Andy Piper  <andy@xemacs.org>
-
-       * redisplay.c (calculate_display_line_boundaries): use text
-       boundaries so that gutters get handled properly.
-
-1999-07-12  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c (x_widget_instantiate): set the font Motif-style if
-       we're using Motif.
-
-       * redisplay-output.c (redisplay_clear_to_window_end): generalised
-       from redisplay-x.c
-
-       * redisplay-x.c (redisplay_clear_to_window_end): moved to
-       redisplay.c
-
-       * redisplay-msw.c (redisplay_clear_to_window_end): deleted.
-
-       * gutter.c: new file - implements gutters. All new functions are
-       semantically equivalent to the toolbar functions.
-       (gutter_was_visible): new function.
-       (get_gutter_coords): ditto.
-       (output_gutter): ditto.
-       (clear_gutter): ditto.
-       (update_frame_gutters): ditto.
-       (redraw_exposed_gutter): ditto.
-       (redraw_exposed_gutters): ditto.
-       (free_frame_gutters): ditto.
-       (init_frame_gutters): ditto.
-       (decode_gutter_position): ditto.
-       (Fset_default_gutter_position): ditto.
-       (Fset_default_gutter_position): ditto.
-       (Fdefault_gutter_position): ditto.
-       (gutter_after_change): ditto.
-       (Fgutter_specifier_p): ditto.
-       (recompute_overlaying_specifier): ditto.
-       (gutter_specs_changed): ditto.
-       (default_gutter_specs_changed): ditto.
-       (gutter_geometry_changed_in_window): ditto.
-       (default_gutter_size_changed_in_window): ditto.
-       (default_gutter_border_width_changed_in_window): ditto.
-       (default_gutter_visible_p_changed_in_window): ditto.
-       (syms_of_gutter): ditto.
-       (vars_of_gutter): ditto.
-       (specifier_type_create_gutter): ditto.
-       (specifier_vars_of_gutter): ditto.
-
-       * gutter.h: new file. Contains gutter constants and sizing macros
-       similar to those for the toolbar.
-
-       * winslots.h: add gutter variables.
-
-       * window.h: declare window_is_* functions.
-
-       * window.c (window_is_lowest): make non-static.
-       (window_is_highest): ditto.
-       (window_top_toolbar_height): deleted.
-       (window_bottom_toolbar_height): deleted.
-       (window_left_toolbar_width): deleted.
-       (window_right_toolbar_width): deleted.
-       (window_top_gutter_height): add gutter sizing.
-       (window_bottom_gutter_height): ditto.
-       (window_left_gutter_width): ditto.
-       (window_right_gutter_width): ditto.
-
-       * symsinit.h: declarations for gutters vars etc.
-
-       * search.c (bi_find_next_emchar_in_string): new function.
-
-       * scrollbar.c (update_scrollbar_instance): remove reference to
-       window_bottom_toolbar_height which did nothing.
-
-       * redisplay.h (struct display_line): add face indices for
-       overriding defaults in output_display_line.
-       Add gutter_changed flags and declarations.
-
-       * redisplay.c (create_string_text_block): new function, similar to
-       create_text_block but for strings. Display tables etc are used
-       from the currently selected window.
-       (generate_string_display_line): ditto. Similar to
-       generate_display_line.
-       (generate_displayable_area): generate display lines for a given
-       area on a frame. Input is the string, with associated extents, to
-       display.
-       (redisplay_frame): add gutter_changed check.
-       (redisplay_device): ditto.
-       (redisplay_without_hooks): ditto.
-
-       * redisplay-x.c (bevel_modeline): moved to redisplay.c.
-       (x_redraw_exposed_area): redraw exposed gutters.
-       (x_bevel_area): new redisplay device method.
-       (x_type_create_redisplay_mswindows): add bevel_area device method.
-       (x_output_display_block): fiddly Martin-style cleanup.
-       (x_output_vertical_divider): use bevel_area.
-
-       * redisplay-output.c (output_display_line): check display_lines
-       for face information before using defaults.
-       (bevel_modeline): new function, calls bevel_area with appropriate
-       values.
-
-       * redisplay-msw.c (bevel_modeline): moved to redisplay.c.
-       (mswindows_redraw_exposed_area): redraw exposed gutters.
-       (mswindows_bevel_area): new redisplay device method.
-       (console_type_create_redisplay_mswindows): add bevel_area device
-       method.
-
-       * indent.c (string_column_at_point): add column_at_point but for
-       strings.
-
-       * glyphs-x.c (image_instantiator_format_create_glyphs_x): only
-       instantiate widgets that we have a toolkit for.
-
-       * general.c: add Qgutter.
-
-       * frame.h (struct frame): add display lines for gutters and
-       visibility flags.
-
-       * frame.c (set_frame_selected_window): mark gutters changed.
-
-       * emacs.c (main_1): add gutter initialisation.
-
-       * device.h (struct device): add gutter_changed flag and macros to
-       manipulate it.
-
-       * console.h (struct console_methods): new bevel area redisplay
-       method.
-
-       * buffer.h (REAL_INC_CHARBYTIND): new macro for strings as
-       REAL_INC_BYTIND is for buffers.
-       (INC_CHARPTR): ditto.
-
-       * Makefile.in.in (objs): add gutter.o
-
-1999-07-13  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.18 is released
-
-1999-07-08  SL Baur  <steve@mule.m17n.org>
-
-       * event-Xt.c (handle_focus_event_1): Guard FRAME_X_XIC with
-       XIM_XLIB.
-       (emacs_Xt_handle_magic_event): Ditto.
-       * redisplay-x.c (x_output_string): Ditto.
-       (x_output_eol_cursor): Ditto.
-
-1999-06-30  Kazuyuki IENAGA <kazz@imasy.or.jp>
-
-       *  event-Xt.c, input-method-xlib.c, redisplay-x.c: Avoid the
-       problem that when XIM is destroyed or missed with some reason,
-       xemacs will die.  Now xim=xlib waits the XIM will be ready and
-       endures the case of XIM end up.
-
-1999-07-03  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * tooltalk.c (init_tooltalk): save signal actions for SIGQUIT,
-       SIGINT and SIGCHLD before calling tt_open and restore the
-       afterwards. This fixes e.g. the zombie subprocesses on Solaris
-
-1999-07-06  SL Baur  <steve@xemacs.org>
-
-       * s/linux.h: gcc-2.8 changes for powerpc
-       From Justin Vallon <vallon@mindspring.com>
-
-1999-07-05  Didier Verna  <verna@inf.enst.fr>
-
-       * indent.c: new symbol Qcoerce.
-       (Fmove_to_column): use it + doc string update.
-
-1999-07-04  Andy Piper  <andy@xemacs.org>
-
-       * console.c: undo earlier Fprovide changes.
-       * fns.c: ditto.
-       * console.h: ditto.
-
-       * console-tty.c (image_instantiator_format_create_glyphs_tty): new
-       function. validate appropriate image formats for tty.
-
-       * glyphs.h (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM):
-       initialize consoles parameter.
-       (struct image_instantiator_methods): add consoles parameter.
-       (IIFORMAT_VALID_CONSOLE): new function. validate the format on the
-       console.
-       (INITIALIZE_DEVICE_IIFORMAT): validate the format on the given
-       console.
-
-       * glyphs-msw.c: declare instantiators for later use.
-       (image_instantiator_format_create_glyphs_mswindows): validate xpm
-       and friends on the mswindows console.
-       * glyphs-x.c: ditto.
-
-       * glyphs.c (valid_image_instantiator_format_p): disallow glyphs
-       that have not been registered on the supplied device.
-       (Fvalid_image_instantiator_format_p): add locale argument.
-       (instantiate_image_instantiator): valid image instantiator on the
-       device.
-
-       * symsinit.h: add image_instantiator_format_create_glyphs_tty()
-       declaration.
-
-       * emacs.c (main_1): add call to
-       image_instantiator_format_create_glyphs_tty().
-
-1999-06-29  Olivier Galibert  <galibert@pobox.com>
-
-       * lisp.h: Add #include <stddef.h>.
-
-       * sysdep.c: Remove #include <stddef.h>.
-       * symbols.c: Remove #include <stddef.h>.
-       * sheap.c: Remove #include <stddef.h>.
-       * opaque.c: Remove #include <stddef.h>.
-       * nt.c: Remove #include <stddef.h>.
-       * mule-charset.c: Remove #include <stddef.h>.
-       * marker.c: Remove #include <stddef.h>.
-       * file-coding.c: Remove #include <stddef.h>.
-       * extents.c: Remove #include <stddef.h>.
-       * elhash.c: Remove #include <stddef.h>.
-       * data.c: Remove #include <stddef.h>.
-       * chartab.c: Remove #include <stddef.h>.
-       * bytecode.c: Remove #include <stddef.h>.
-       * alloc.c: Remove #include <stddef.h>.  Fix vector description
-
-1999-06-30  SL Baur  <steve@miho.m17n.org>
-
-       * editfns.c: Document "%s" format spec.
-       Suggested by Bob Weiner <weiner@altrasoft.com>
-
-1999-06-29  Andy Piper  <andy@xemacs.org>
-
-       * event-msw.c: fix definition booboo.
-
-1999-06-28  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-x.c: change tree -> tree-view, progress ->
-       progress_gauge, edit -> edit-field, tab -> tab-control, combo ->
-       combo-box.
-       (complex_vars_of_glyphs_x): provide-on-console the implemented
-       widget types.
-
-       * glyphs-msw.c: ditto.
-       (complex_vars_of_glyphs_mswindows): ditto.
-
-       * lisp.h: add Fprovide_on_console.
-
-       * fns.c (Ffeaturep): add extra optional console argument.
-       (Fprovide_on_console): like Fprovide but provides only on the
-       specified console-type.
-       (Frequire): check console-features as well as global features.
-
-       * console.c (Fconsole_features): new function. return features for
-       this console.
-       (syms_of_console): add Fconsole_features.
-
-       * console.h (CONMETH_FEATURES): new function for accessing features.
-       (CONSOLE_FEATURES): ditto.
-       (struct console_methods): add features slot.
-       (INITIALIZE_CONSOLE_TYPE): initialize features slot.
-
-1999-06-28  Andy Piper  <andy@xemacs.org>
-
-       * event-Xt.c (handle_focus_event_1): conditionally compile for
-       X11R5.
-
-       * s/cygwin32.h: fix me website address.
-
-       * event-msw.c: add NMHDR for pre b20 cygwin builds.
-
-       * gui-x.c (button_item_to_widget_value): only add callback if it
-       is non-nil.
-
-       * glyphs-x.c: add progress, edit and combo instantiators.
-       (x_widget_set_property): new function. uses lwlib to set widget
-       values.
-       (x_widget_property): new function. uses lwlib to get widget
-       values.
-       (x_button_instantiate): support images in buttons.
-       (x_button_property): new function. use lwlib to get the selected
-       state.
-       (x_progress_instantiate): new function for instantiating progress
-       gauges.
-       (x_progress_set_property): new function. sets the progress gauge
-       position.
-       (x_edit_instantiate): new function. for instantiating edit fields.
-       (x_combo_instantiate): new function. for instantiating combo
-       boxes.
-       (image_instantiator_format_create_glyphs_x): add new device ii
-       formats.
-
-       * glyphs-msw.c (mswindows_tab_instantiate): remove redundant var.
-
-       * console.h (CONSOLE_FEATURES): new features accesor.
-
-       * conslots.h (MARKED_SLOT): add features entry.
-
-1999-06-25  Andy Piper  <andy@xemacs.org>
-
-       * menubar-x.c (menu_item_descriptor_to_widget_value_1): use new
-       gui functions.
-
-       * menubar-msw.c: move MAX_MENUITEM_LENGTH to gui.h
-
-       * gui.h (struct Lisp_Gui_Item): add accelerator.
-
-       * gui.c (gui_item_add_keyval_pair): deal with accelerators.
-       (gui_item_init): ditto.
-       (gui_add_item_keywords_to_plist): ditto.
-       (mark_gui_item): ditto.
-       (gui_item_hash): ditto.
-       (gui_item_accelerator): new function.
-       (gui_name_accelerator): new function stolen from gui-x.c
-
-       * gui-x.c (popup_selection_callback): always define. mark
-       subwindows changed after calling a callback.
-       (menu_name_to_accelerator): deleted.
-       (button_item_to_widget_value): forward gui_item things to gui_item
-       functions.
-
-       * glyphs-x.h (struct x_subwindow_data): add data for widgets. add
-       appropriate accesors.
-
-       * glyphs-x.c: declare new glyph formats.
-       (x_finalize_image_instance): unmanage and destroy widgets if they
-       exist.
-       (x_unmap_subwindow): handle widgets specially.
-       (x_map_subwindow): ditto. offset display of widgets by offset of
-       text widget within container.
-       (x_update_subwindow): new function. call lw_modify_all_widgets
-       when we are a widget.
-       (x_widget_instantiate): new function for generically creating
-       widgets-glyphs. toolkit specifics forwarded to lwlib.
-       (x_button_instantiate): new function for instantiating
-       widgets-glyph buttons.
-       (console_type_create_glyphs_x): register update_subwindow.
-       (image_instantiator_format_create_glyphs_x): register widget and
-       button types.
-
-       * event-msw.c (mswindows_wnd_proc): remove redundant variable.
-
-       * event-Xt.c (x_event_to_emacs_event): call handle_focus_event_1
-       when we get a button press in case we do not have the focus.
-       (handle_focus_event_1): set the keyboard focus to the text widget
-       if we do not have it.
-
-       * dialog-x.c (dbox_descriptor_to_widget_value): use new gui_item
-       functions.
-
-1999-06-24  SL Baur  <steve@miho.m17n.org>
-
-       * syntax.c (scan_words): Restore non-Mule code.
-       (word_constituent_p): Restore.
-
-1999-06-23  Olivier Galibert  <galibert@pobox.com>
-
-       * config.h.in: Add missing #undef *_USER_DEFINED.
-
-1999-06-23  SL Baur  <steve@miho.m17n.org>
-
-       * lisp.h (set_bit_vector_bit): Force promotion to unsigned long
-       int (fixes a 64-bit problem).
-
-       * chartab.c (word_boundary_p): Use EQ not == for lisp_object
-       comparison.
-
-1999-03-23  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
-
-       * paths.h.in (PATH_DOC): Made doc-directory configurable.
-
-1999-06-22  Olivier Galibert  <galibert@pobox.com>
-
-       * lrecord.h: Added basic external description system.
-
-       * symbols.c: Added symbol, symbol-value-buffer-local,
-       symbol-value-lisp-magic and symbol-value-varalias description.
-       * mule-charset.c: Added charset description.
-       * marker.c: Added marker description.
-       * keymap.c: Added keymap description.
-       * glyphs.c: Added glyph description.
-       * floatfns.c: Added float description.
-       * file-coding.c: Added coding-system description.
-       * extents.c: Added extent description.
-       * elhash.c: Added hash-table description.
-       * data.c: Added weak-list desciption.
-       * chartab.c: Added char-table-entry and char-table description.
-       * bytecode.c: Added compiled-function description.
-       * alloc.c: Added cons, vector and string description.
-
-1999-06-22  Olivier Galibert  <galibert@pobox.com>
-
-       * lrecord.h (struct lrecord_header): Reduced size to 4 bytes.
-       Updated everything to the removal of the "flags" substructure.
-
-       * lisp.h (subr_lheader_initializer): Updated.
-       * symeval.h (symbol_value_forward_lheader_initializer): Updated.
-
-1999-06-20  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * syntax.c (word_constituent_p): Deleted.
-       (scan_words): Use `WORD_BOUNDARY_P'.
-
-       * chartab.c (Vword_combining_categories): New variable.
-       (Vword_separating_categories): Likewise.
-       (CATEGORYP): New macro.
-       (CATEGORY_SET): Likewise.
-       (CATEGORY_MEMBER): Likewise.
-       (word_boundary_p): New function.
-       (complex_vars_of_chartab): Set up new variable
-       `word-combining-categories' and `word-separating-categories'.
-
-1999-06-18  Olivier Galibert  <galibert@pobox.com>
-
-       * lrecord.h: Added description as a placehold in the lrecord
-       implementation structures.  Added the parameter to all constructor
-       defines.
-
-       * alloc.c: Added placeholders.
-       * buffer.c: Ditto.
-       * bytecode.c: Ditto.
-       * chartab.c: Ditto.
-       * console.c: Ditto.
-       * data.c: Ditto.
-       * database.c: Ditto.
-       * device.c: Ditto.
-       * eldap.c: Ditto.
-       * elhash.c: Ditto.
-       * eval.c: Ditto.
-       * event-stream.c: Ditto.
-       * events.c: Ditto.
-       * extents.c: Ditto.
-       * faces.c: Ditto.
-       * file-coding.c: Ditto.
-       * floatfns.c: Ditto.
-       * fns.c: Ditto.
-       * frame.c: Ditto.
-       * glyphs.c: Ditto.
-       * gui-x.c: Ditto.
-       * keymap.c: Ditto.
-       * lstream.c: Ditto.
-       * marker.c: Ditto.
-       * mule-charset.c: Ditto.
-       * objects.c: Ditto.
-       * opaque.c: Ditto.
-       * process.c: Ditto.
-       * rangetab.c: Ditto.
-       * specifier.c: Ditto.
-       * symbols.c: Ditto.
-       * toolbar.c: Ditto.
-       * tooltalk.c: Ditto.
-       * window.c: Ditto.
-
-1999-06-22  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.17 is released
-
-1999-06-13  Oscar Figueiredo  <oscar@xemacs.org>
-
-       * config.h.in (HAVE_LDAP_SET_OPTION): New define
-       (HAVE_LDAP_GET_LDERRNO): Ditto
-       (HAVE_LDAP_RESULT2ERROR): Ditto
-       (HAVE_LDAP_PARSE_RESULT): Ditto
-       (HAVE_UMICH_LDAP): Removed
-       (HAVE_NS_LDAP): Removed
-
-       * eldap.h (struct Lisp_LDAP): Removed the `livep' member as
-       suggested by Olivier Galibert
-       (CHECK_LIVE_LDAP): Test on `ld' instead of `livep'
-
-       * eldap.c: Take the removal of `livep' into account in all the
-       necessary functions
-       (signal_ldap_error): Take two additional parameters
-       Added new finer compilation conditions in order to use
-       ldap_parse_result or ldap_result2error if available
-       (Fldap_open): Conform to this new API
-       (Fldap_search_internal): Ditto
-
-1999-06-17  SL Baur  <steve@miho.m17n.org>
-
-       * data.c (struct int_or_double): Should use EMACS_INT not int.
-
-1999-06-16  Norbert Koch  <n.koch@eai-delta.de>
-
-       * redisplay-msw.c: Run 'ccl_driver' with 'CCL_MODE_ENCODING' as in
-       redisplay-x.c
-
-1999-06-12  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * redisplay-x.c (separate_textual_runs): Run `ccl_driver' with
-       `CCL_MODE_ENCODING'.
-
-       * file-coding.c (mule_decode): Run `ccl_driver' with
-       `CCL_MODE_DECODING'.
-       (mule_encode): Run `ccl_driver' with `CCL_MODE_ENCODING'.
-
-       * mule-ccl.c (CCL_WRITE_CHAR): Refer `conversion_mode'.
-       (ccl_driver): Add new argument `conversion_mode'.
-       (Fccl_execute): Run `ccl_driver' with `CCL_MODE_ENCODING'.
-       (Fccl_execute_on_string): Likewise [perhaps it is better to add
-       new optional argument].
-
-       * mule-ccl.h (CCL_MODE_ENCODING): New macro.
-       (CCL_MODE_DECODING): New macro.
-       (ccl_driver): Add new argument `conversion_mode'.
-
-1999-06-15  SL Baur  <steve@miho.m17n.org>
-
-       * mule-charset.c (Fsplit_char): New subr.
-       (Fchar_octet): delete.
-       (syms_of_mule_charset): DEFSUBR it.
-
-1999-06-13  Andy Piper  <andy@xemacs.org>
-
-       * menubar.h: update declarations involving gui_items.
-
-       * lisp.h: declare Lisp_Gui_Item.
-
-       * glyphs.h (struct Lisp_Image_Instance): update type of gui_item.
-
-       * glyphs.c (mark_image_instance): modify for new lisp-based gui_items.
-       (print_image_instance): ditto.
-       (image_instance_equal): ditto.
-       (image_instance_hash): ditto.
-
-       * event-msw.c (mswindows_need_event): assert badly_p status.
-       (mswindows_wnd_proc): modify WM_NOTIFY handling to cope with
-       callbacks in tree-view and tab-control widgets.
-       (emacs_mswindows_next_event): modify use of
-       mswindows_dequeue_dispatch_event.
-
-       * dialog-msw.c (mswindows_popup_dialog_box): modify for new
-       lisp-based gui_items.
-
-       * glyphs-msw.c (mswindows_update_subwindow): update use of
-       gui_items.
-       (mswindows_register_gui_item): new function.
-       (mswindows_register_gui_item): fix to use lisp gui_items.
-       (mswindows_widget_instantiate): ditto.
-       (mswindows_button_instantiate): ditto.
-       (add_tree_item): new function to recursively add tree view
-       elements.
-       (add_tree_item_list): ditto.
-       (mswindows_tree_instantiate): new function. instantiate tree view
-       controls.
-       (add_tab_item): new function to add tabs to a tab control.
-       (mswindows_tab_instantiate): new function. instantiate tab
-       controls.
-       (image_instantiator_format_create_glyphs_mswindows): add tree view
-       and tab controls.
-       (vars_of_glyphs_mswindows): ditto.
-
-       * glyphs-widget.c (check_valid_item_list_1): allow nested lists in
-       item lists.
-       (check_valid_item_list): ditto.
-       (initialize_widget_image_instance): fix to use new lisp gui_item.
-       (widget_instantiate_1): allow the setting of default textwidth in
-       characters.
-       (widget_instantiate): change to use new widget_instantiate_1
-       signature.
-       (combo_instantiate): ditto.
-       (static_instantiate): ditto.
-       (tab_instantiate): new function for tab widgets.
-       (image_instantiator_format_create_glyphs_widget): add tab and tree
-       view widgets.
-
-       * menubar-msw.c (displayable_menu_item): convert to use lisp
-       gui_items.
-       (populate_menu_add_item): ditto.
-       (populate_or_checksum_helper): ditto.
-
-       * menubar.c (menu_parse_submenu_keywords): convert to use lisp
-       gui_items.
-       (Fmenu_find_real_submenu): ditto.
-
-       * gui.h (struct Lisp_Gui_Item): make gui_item a lisp oebjct.
-
-       * gui.c (gui_item_add_keyval_pair): gui_items are now lisp
-       objects, convert functions that use them accordingly.
-       (gui_item_init): ditto.
-       (gui_item_active_p): ditto.
-       (gui_item_selected_p): ditto.
-       (gui_item_included_p): ditto.
-       (gui_item_display_flush_left): ditto.
-       (gui_item_display_flush_right): ditto.
-       (mark_gui_item): ditto.
-       (allocate_gui_item): new function to create a gui_item.
-       (make_gui_item_from_keywords_internal): ditto. create and return a
-       gui_item as well as setting keywords.
-       (gui_parse_item_keywords): ditto.
-       (gui_parse_item_keywords_no_errors): ditto.
-       (gui_add_item_keywords_to_plist): new function, not yet used.
-       (gui_item_hash): new function.
-       (gui_item_id_hash): use gui_item_hash.
-       (gui_item_equal): new function.
-       (print_gui_item): new function.
-
-1999-06-11  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.16 is released
-
-1999-06-10  Andy Piper  <andy@xemacs.org>
-
-       * select-msw.c (mswindows_own_selection): only set the clipboard
-       if asked.
-       (mswindows_get_foreign_selection): only get the clipboard if
-       asked.
-       (mswindows_disown_selection): only disown the clipboard if asked.
-
-1999-06-03  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * file-coding.c (coding_system_from_mask): Use `raw-text' instead
-       of `no-conversion'.
-       (complex_vars_of_mule_coding): Use `raw-text' as the coding-system
-       of coding-category `no-conversion'.
-
-1999-06-03  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * file-coding.c (Qraw_text): New variable.
-       (syms_of_mule_coding): Add new symbol `raw-text'.
-       (complex_vars_of_mule_coding): Add new coding-system `raw-text';
-       define coding-system `binary' independently; define coding-system
-       `no-conversion' as an alias for `raw-text'.
-
-       * file-coding.h (Qraw_text): New variable.
-
-1999-06-08  SL Baur  <steve@xemacs.org>
-
-       * s/decosf4-0.h: Explicitly #undef SYSTEM_MALLOC.
-
-1999-06-06  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (MIME_LINE_LENGTH): Default to 72, as in mimencode and
-       base64.el.
-       (base64_decode_1): Signal errors instead of returning -1.
-
-1999-06-07  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * mule-charset.c (Fmake_char): Update docstring.
-
-1999-06-07  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (Fstring_lessp): Actually increment the Bufbyte pointers.
-
-1999-06-05  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (base64_decode_1): Allow and ignore any non-base64
-       characters in input.
-
-1999-05-27  Olivier Galibert  <galibert@pobox.com>
-
-       * emacs.c (Fdump_emacs): Add clear_message() lost with the removal
-       of report_pure_usage().
-
-1999-06-04  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (Fstring_lessp): Remove O(n^2) under Mule.
-
-1999-06-04  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.15 is released
-
-1999-06-01  Hirokazu FUKUI  <fukui@atesoft.advantest.co.jp>
-
-       * frame.c (Fset_mouse_position):
-       (Fset_mouse_pixel_position):
-       * window.c (Fsplit_window):
-       (Fmove_to_window_line):
-       Fix crash when invoking functions with an already-deleted window
-       argument.
-
-       * indent.c (vertical_motion_1):
-       (vmotion_pixels):
-       (Fvertical_motion_pixels):
-       * window.c (Fwindow_displayed_text_pixel_height):
-       Fix error message when invoking functions with an already-deleted
-       window argument.
-
-1999-06-01  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * sysdep.c (request_sigio_on_device): Guard against glibc
-       2.1's stub streams implementation.
-
-1999-06-03  SL Baur  <steve@xemacs.org>
-
-       * config.h.in:
-       * emacs.c:  Implement x.y.z version numbers
-       From Jan Vroonhof <vroonhof@math.ethz.ch>
-
-1999-05-20  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * mule-charset.c (complex_vars_of_mule_charset): Registry of
-       japanese-jisx0208-1978 should not match with "jisx0208.1983" nor
-       "jisc6226.1983".
-
-1999-06-03  SL Baur  <steve@xemacs.org>
-
-       * frame-x.c:
-       * device-x.c: rename session option to wmcommand.
-       From Oliver Graf <ograf@rhein-zeitung.de>
-
-1999-05-27  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (Fsubstring): Don't traverse the same region twice with
-       charcount_to_bytecount().
-
-1999-06-03  SL Baur  <steve@steve1.m17n.org>
-
-       * m/alpha.h (SYSTEM_MALLOC): Fix indented preprocessor directive
-       garbage.
-
-       * s/decosf4-0.h: Defining ORDINARY_LINK here is redundant (and it
-       doesn't really work as is implied by the commentary).
-       Don't define SYSTEM_MALLOC so the old GNU malloc can be used.
-
-1999-06-02  SL Baur  <steve@steve1.m17n.org>
-
-       * symsinit.h: Declare vars_of_ntproc.
-       * emacs.c (main_1): Call it.
-
-       * ntproc.c (syms_of_ntproc): Move variable initializations from
-       here ...
-       (vars_of_ntproc): ... to here [new function].
-
-       * file-coding.c (syms_of_file_coding): Rename.
-       (vars_of_file_coding): Ditto.
-       (complex_vars_of_file_coding): Ditto.
-
-       * symsinit.h: Rename *_mule_coding to *_file_coding.
-
-       * emacs.c (main_1): Call them by the proper name.
-
-       * device-msw.c (syms_of_device_mswindows): Move variable
-       initializations from here ...
-       (vars_of_device_mswindows): ... to here.
-
-       * chartab.c (vars_of_chartab): New function.
-
-       * symsinit.h: New function, vars_of_chartab.
-
-       * emacs.c (main_1): Call it.
-
-       * mule-canna.c (syms_of_mule_canna): Move CANNA initialization ...
-       (vars_of_mule_canna): ... to here.
-
-       * mule-ccl.c (vars_of_mule_ccl): New function.  Move variable
-       initializations out of syms_of_mule_ccl.
-
-       * symsinit.h: Declare new function vars_of_mule_ccl.
-
-       * emacs.c (main_1): Call it.
-
-1999-05-27  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (base64_decode_1): Ignore whitespace.
-
-1999-05-27  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * mule-charset.c (Fmake_char): Strip the eighth bit off ARG1 and
-       ARG2.
-
-1999-05-21  Andy Piper  <andy@xemacs.org>
-
-       * xselect.c: deleted.
-
-       * symsinit.h: declare select initialisation.
-
-       * select.h: new file. declare commonly used select functions and
-       variables.
-
-       * select.c: new file. generalised from xselect.c.
-       (clean_local_selection_data): moved from xselect.c.
-       (get_local_selection): ditto. device specific pieces called via a
-       devmeth.
-       (handle_selection_clear): ditto.
-       (Fown_selection_internal): renamed and generalised from
-       Fx_own_selection_internal. moved from xselect.c.
-       (Fdisown_selection_internal): ditto.
-       (Fselection_owner_p): ditto.
-       (Fselection_exists_p): ditto.
-       (Fget_selection_internal): ditto.
-       (syms_of_select): new function. QXXXX values moved from xselect.c
-       (vars_of_select): new function. selection_converter_alist,
-       lost_selection_hooks moved and renamed from xselect.c
-
-       * select-x.c: renamed from xselect.c.
-       (x_own_selection): converted to device specific. non-X-specific
-       bits moved to select.c.
-       (x_get_foreign_selection): ditto.
-       (x_disown_selection): ditto.
-       (x_selection_exists_p): ditto.
-       (console_type_create_select_x): new function.
-
-       * select-msw.c (mswindows_own_selection): new device method to set
-       the clipboard when we 'own' the selection.
-       (mswindows_get_foreign_selection): new device method to get the
-       clipboard.
-       (mswindows_disown_selection): new device method to delete the
-       selection when we 'disown' it.
-       (console_type_create_select_mswindows): new function.
-
-       * emacs.c (main_1): add select to things to initialise.
-
-       * console.h (struct console_methods): new console methods for
-       selection.
-
-       * Makefile.in.in (x_objs): xselect.c renamed to select-x.c
-
-1999-05-20  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * print.c (long_to_string): Install a faster version.
-
-1999-05-16  Andy Piper  <andy@xemacs.org>
-
-       * ntproc.c (syms_of_ntproc): default
-       win32-start-process-share-console to t.
-
-1999-05-14  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * config.h.in: Do it here.
-
-       * bytecode.c: Don't define ERROR_CHECK_TYPECHECK here.
-
-1999-05-14  Andy Piper  <andy@xemacs.org>
-
-       * toolbar-msw.c (mswindows_output_toolbar): hash on something
-       hashable.
-
-1999-05-14  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.14 is released
-
-1999-05-12  Andy Piper  <andy@xemacs.org>
-
-       * ntproc.c (sys_spawnve): kludge argv[0] in a MS compatible way.
-
-1999-05-11  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * emacs.c (Frun_emacs_from_temacs): (re)alloc natgs+2 entries for
-       run_temacs_argv array -- fixes random memory corruption crash
-
-1999-05-12  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * window.c (Fcurrent_window_configuration):
-       Save minibuffer height;
-
-       * window.c (set_window_configuration): use it.
-
-1999-05-10  Robert Pluim  <rpluim@bigfoot.com>
-
-       * lisp.h (NNUNGCPRO): fix typo in name of DEBUG_GCPRO version
-
-1999-04-21  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * redisplay.c (redisplay_window): Do not put data
-       in the line start cache if it is not guaranteed to be correct
-
-1999-04-02  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * window.c (struct window_config): Removed frame
-       size members.
-       (window_config_equal): No longer compare frame sizes.
-       (Fset_window_configuration): Resize old top window to fit in the
-       current frame directly, no longer use a fake frame resize.
-       (Fcurrent_window_configuration): No longer save frame size
-
-1999-05-11  Andy Piper  <andy@xemacs.org>
-
-       * ntproc.c (sys_spawnve): actually assign argv[0] instead of the
-       first character.
-
-1999-05-10  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * sysdep.c (init_system_name): If gethostname gives a proper
-       domain name, don't look further for one.
-
-1999-05-09  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * symbols.c (Fintern): Avoid frequent XSYMBOL (foo).
-       (Fintern_soft): Accept a symbol argument.
-
-1999-05-06  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * symbols.c (Fintern): ...do it here.
-
-       * lread.c (read_atom): Don't handle keywords here.
-
-1999-05-06  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * symbols.c (reject_constant_symbols): Just use SYMBOL_IS_KEYWORD.
-
-1999-05-03  Olivier Galibert  <galibert@pobox.com>
-
-       * lisp.h (SYMBOL_IS_KEYWORD): A symbol can be a keyword only if it
-       is interned in the main obarray.
-
-1999-04-23  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * menubar-x.c (pre_activate_callback): set accelerator field in
-       "No menu" entries to nil. Avoid crash in
-       command_builder_operate_menu_accelerator
-
-1999-05-03  Olivier Galibert  <galibert@pobox.com>
-
-       * symeval.h (symbol_value_forward_lheader_initializer): Ditto.
-
-       * lisp.h (DEFUN): Fix lrecord header initialisation.
-
-1999-05-02  Andy Piper  <andy@xemacs.org>
-
-       * objects-msw.c (mswindows_font_instance_truename): add a ';'.
-
-       * ntproc.c (sys_kill): cast using MS mandated defines.
-
-1999-04-29  Andy Piper  <andy@xemacs.org>
-
-       * m/intel386.h: remove redundant definitions.
-
-       * s/mingw32.h: new header for mingw32.
-
-       * unexnt.c: (open_input_file): function moved to nt.c.
-       (close_file_data): ditto.
-       (rva_to_section): function moved to ntproc.
-
-       * symsinit.h: declare syms_of_ntproc();
-
-       * objects-msw.c (mswindows_font_instance_truename): new function.
-
-       * ntproc.c: remove many warnings.
-       (_sys_read_ahead): moved from nt.c and made static.
-       (rva_to_section): moved from unexnt.c but not defined under
-       mingw32.
-       (win32_executable_type): implement what we can for mingw32
-       headers.
-       (sys_spawnve): fix bad MULE/GCPRO bug in filename handling.
-
-       * ntheap.h: remove declarations of functions that are now static.
-
-       * ntheap.c: support static heap.
-
-       * nt.h: conditionalise X_OK definition.
-
-       * nt.c: eliminate many warnings and support mingw32.
-       (open_input_file): function moved from unexnt.c and made static
-       (close_file_data): ditto.
-       (_sys_read_ahead): moved to ntproc.c
-
-       * emacs.c: make sure syms_of_ntptroc gets called under windows.
-
-       * console-msw.h: support mingw32.
-       * getloadavg.c: ditto.
-       * ntplay.c: ditto.
-       * sysdep.c: ditto.
-       * sysdir.h: ditto.
-       * systime.h: ditto.
-       * systty.h: ditto.
-
-       * config.h.in: dont turn on DEBUG_ENCAPSULATION by default because
-       some systems don't have all of the encapsulated system calls.
-
-       * callproc.c: warning elimination.
-       * dired-msw.c: ditto.
-       * process-nt.c: ditto.
-       * realpath.c: ditto.
-
-       * Makefile.in.in: tweak : and ; for building under mswindows.
-
-1999-04-26  Michael Harnois  <mharnois@willinet.net>
-
-       * eldap.c (allocate_ldap): Adapt to the new semantics of
-       alloc_lcrecord_type().
-
-1999-03-16  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * file-coding.c (DECODE_HANDLE_END_OF_CONVERSION): fixed.
-
-1998-09-04  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * Delete mule-coding.c and mule-coding.h because they are not
-       used.
-
-1999-04-22  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * objects.c (print_font_instance): Check for NILP(f->device),
-       i.e. Vthe_null_font_instance.
-       (font_instance_truename_internal): ditto.
-       (Ffont_instance_properties): ditto.
-
-1999-04-22  Olivier Galibert  <galibert@pobox.com>
-
-       * lrecord.h (DECLARE_LRECORD): lrecord_implementation isn't an
-       array anymore.
-
-1999-04-22  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * Makefile.in.in (tests): Don't mention tests explicitly -- makes
-       it easier to add new ones.
-
-1999-04-22  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * symbols.c (reject_constant_symbols): Ditto.
-       (init_symbols_once_early): Ditto.
-
-       * print.c (print_symbol): Don't use ->obarray.
-
-       * symbols.c (Funintern): Ditto.
-
-       * alloc.c (Fmake_symbol): Don't set ->obarray.
-
-       * lisp.h (struct Lisp_Symbol): Removed .obarray field.
-
-       * symbols.c (init_symbols_once_early): Removed
-       Vpure_uninterned_symbol_table.
-       (Fintern): Don't store to ->obarray field.
-
-1999-04-22  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * data.c (vars_of_data): Default debug_issue_ebola_notices to 0.
-       (eq_with_ebola_notice): Remove abracadabra support.
-
-1999-04-11  Oscar Figueiredo  <Oscar.Figueiredo@di.epfl.ch>
-
-       * eldap.c (Fldap_search_internal): Add a new parameter `withdn' to
-       retrieve the distinguished names of entries
-
-1999-03-08  Martin Buchholz  <martin@xemacs.org>
-
-       * lread.c (read_escape): Make hex escapes read only two hex digits.
-
-1999-04-05  Olivier Galibert  <galibert@pobox.com>
-
-       * Makefile.in.in: Remove puresize-adjust.h and recursive makes.
-       * make-src-depend: Remove puresize-adjust.h.
-       * src-headers: Remove puresize-adjust.h.
-       * config.h.in: Kill everything purespace/gung-ho related.
-
-       * dbxrc: Make gung-ho mandatory.
-       * gdbinit: Ditto.
-
-       * lrecord.h: Make gung-ho mandatory.  Remove pure flag and add
-       c_readonly and lisp_readonly.  Remove implementation arrays.
-       (C_READONLY_RECORD_HEADER_P): Added.
-       (LISP_READONLY_RECORD_HEADER_P): Added.
-       (SET_C_READONLY_RECORD_HEADER): Added.
-       (SET_LISP_READONLY_RECORD_HEADER): Added.
-
-       * lisp.h: Kill everything purespace/non gung-ho related.
-       (CHECK_C_WRITEABLE): Added.
-       (CHECK_LISP_WRITEABLE): Added.
-       (C_READONLY): Added.
-       (LISP_READONLY): Added.
-
-       * lisp-union.h: Make gung-ho mandatory.
-       * lisp-disunion.h: Ditto.
-
-       * alloc.c: Kill everything purespace/non  gung-ho related. Fix all
-       set_lheader_implementation calls.
-       (c_readonly): Added.
-       (lisp_readonly): Added.
-       (make_string_nocopy): Added.
-       (Fpurecopy):  Changed to do  nothing.   Kept the old documentation
-       for reference purposes for the next patches.
-       (sweep_lcrecords_1): Don't free C readonly lcrecords.
-       (sweep_bit_vectors_1): Don't free C readonly bitvectors.
-       (SWEEP_FIXED_TYPE_BLOCK): Don't free C readonly lrecords.
-
-       * fns.c: Make gung-ho mandatory.
-       (Fput): CHECK_IMPURE -> CHECK_LISP_WRITEABLE.
-       (Fremprop): Ditto.
-       (Ffillarray): Ditto.
-
-       * data.c: Make gung-ho mandatory.
-       (pure_write_error): Removed.
-       (c_write_error): Added.
-       (lisp_write_error): Added.
-       (Fsetcar): CHECK_IMPURE -> CHECK_LISP_WRITEABLE.
-       (Fsetcdr): Ditto.
-       (Faset): Ditto.
-
-       * symbols.c: Make gung-ho mandatory.  make_pure_pname ->
-                 make_string or make_string_nocopy.  Fix various
-                 alloc_lcrecord_type.
-
-       * lread.c: Remove everything purespace related.
-       (Flocate_file_clear_hashing): purified -> c_readonly.
-       (locate_file): Ditto.
-       (read_atom): make_pure_pname -> make_string.
-
-       * emacs.c (Frun_emacs_from_temacs): Remove purespace stats
-                 reporting.
-       (Fdump_emacs): Ditto.
-
-       * print.c (print_internal): Make gung-ho mandatory.
-       * ntheap.c (sbrk): Ditto.
-       * mem-limits.h (EXCEEDS_LISP_PTR): Ditto
-       * symeval.h (symbol_value_forward_lheader_initializer): Ditto.
-
-       * sheap.c (more_static_core): Remove puresize-adjust.h from
-                 message.
-
-       * syntax.c (complex_vars_of_syntax): make_pure_string ->
-                 make_string_nocopy.
-       * keymap.c (make_keymap): Fix alloc_lcrecord_type.
-       (vars_of_keymap): make_pure_string -> make_string_nocopy.
-       * events.c (deinitialize_event): Fix set_lheader_implementation.
-       (zero_event): Ditto.
-       * specifier.c (make_specifier_internal): Fix alloc_lcrecord.
-       * menubar-x.c (set_frame_menubar): Fix alloc_lcrecord_type.
-       * mule-charset.c (make_charset): Ditto.
-       * console.c (allocate_console): Ditto.
-       (complex_vars_of_console): Ditto.
-       * file-coding.c (allocate_coding_system): Ditto.
-       * device.c (allocate_device): Ditto
-       * gui-x.c (gcpro_popup_callbacks): Ditto.
-       * extents.c (allocate_extent_auxiliary): Ditto.
-       (allocate_extent_info): Ditto.
-       (copy_extent): Ditto.
-       * glyphs.c (allocate_image_instance): Ditto.
-       (allocate_glyph): Ditto.
-       * frame.c (allocate_frame_core): Ditto.
-       * database.c (allocate_database): Ditto.
-       * tooltalk.c (make_tooltalk_message): Ditto.
-       (make_tooltalk_pattern): Ditto.
-       * rangetab.c (Fmake_range_table): Ditto.
-       (Fcopy_range_table): Ditto.
-       * process.c (make_process_internal): Ditto.
-       * chartab.c (Fmake_char_table): Ditto.
-       (make_char_table_entry): Ditto.
-       (copy_char_table_entry): Ditto.
-       (Fcopy_char_table): Ditto.
-       * elhash.c (make_general_lisp_hash_table): Ditto.
-       (Fcopy_hash_table): Ditto.
-       * buffer.c (allocate_buffer): Ditto.
-       (complex_vars_of_buffer): Ditto.
-       * event-stream.c (allocate_command_builder): Ditto.
-       * objects.c (Fmake_color_instance): Ditto.
-       (Fmake_font_instance): Ditto.
-       (vars_of_objects): Ditto.
-       * toolbar.c (update_toolbar_button): Ditto.
-       * window.c (allocate_window): Ditto.
-       (make_dummy_parent): Ditto.
-       (Fcurrent_window_configuration): Fix alloc_lcrecord.
-       (vars_of_window): Fix make_lcrecord_list.
-       * faces.c (allocate_face): Fix alloc_lcrecord_type. pure_list ->
-                 Flist.
-       * lstream.c (Lstream_new): Fix make_lcrecord_list.
-       * opaque.c (make_opaque): Fix alloc_lrecord.
-       (make_opaque_list): Fix alloc_lrecord_type.
-
-1999-04-19  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * process.c (Fstart_process_internal): Ditto.
-
-       * ntproc.c (sys_spawnve): Use Vlisp_EXEC_SUFFIXES when calling
-       locate_file().
-
-       * glyphs-x.c (x_locate_pixmap_file): Ditto.
-
-       * glyphs-msw.c (mswindows_locate_pixmap_file): Fix call to
-       locate_file().
-
-       * emodules.c (vars_of_module): New variable Vmodule_extensions.
-       (emodules_load): Use it when calling locate_file().
-
-       * emacs.c (main_1): Use Vlisp_EXEC_SUFFIXES when calling
-       locate_file().
-
-       * callproc.c: Vlisp_EXEC_SUFFIXES: New variable.
-       (vars_of_callproc): Initialize it.
-       (Fcall_process_internal): Use it when calling locate_file().
-
-       * alloc.c (disksave_object_finalization): Use
-       Flocate_file_clear_hashing().
-
-       * lread.c (Flocate_file_clear_hashing): Clear all hasing when
-       given `t' as argument.
-
-1999-04-18  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * lread.c (locate_file): Expand `pathel' when appropriate.
-       (Flocate_file_clear_hashing): Expand path elements.
-       (Flocate_file_clear_hashing): Use Vlocate_file_hash_table.
-
-       * dired.c (make_directory_hash_table): Create the hash-table only
-       if the directory open is successful.
-
-       * lread.c (decode_mode_1): New function.
-       (decode_mode): Ditto.
-       (Flocate_file): Use them.
-       (Flocate_file): Expand FILENAME.
-       (locate_file_map_suffixes): New function.
-       (locate_file_in_directory_mapper): New function.
-       (locate_file_in_directory): Use locate_file_in_directory_mapper()
-       and locate_file_map_suffixes().
-       (locate_file_construct_suffixed_files): Use
-       locate_file_map_suffixes().
-       (locate_file_without_hash): Don't GCPRO path.
-       (Flocate_file_clear_hashing): Use EXTERNAL_LIST_LOOP.
-       (syms_of_lread): Remove Qlocate_file_hash_table.
-       (locate_file_find_directory_hash_table): Use
-       Vlocate_file_hash_table.
-       (locate_file_refresh_hashing): Ditto.
-
-       * lread.c: Renamed read_objects to Vread_objects.
-
-1999-04-16  Olivier Galibert  <galibert@pobox.com>
-
-       * mule-charset.c: Generally resync with fsf 20.3 charset
-       interface.
-       (make_charset): Add long and short name.  Use id instead of
-       leading byte.
-       (Fmake_charset): Ditto.
-       (Fmake_reverse_direction_charset): Ditto.
-       (Fcharset_property): Ditto.
-       (Fcharset_short_name): Added.
-       (Fcharset_long_name): Added.
-       (Fcharset_description): Renamed from charset-doc-string.
-       (syms_of_mule_charset): Synced symbols.
-       (complex_vars_of_mule_charset): Synced charsets.
-
-       * mule-charset.h: Removed leading byte (uses id instead), added
-       short and long name.
-
-1999-04-15  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * file-coding.c (Fdefine_coding_system_alias): New function.
-
-1999-04-08  Olivier Galibert  <galibert@pobox.com>
-
-       * mule-charset.c (complex_vars_of_mule_charset): Allow all iso8859
-       and -ascii fonts for displaying ascii instead of iso8859-1 only.
-
-1998-12-14  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * extents.c (set_extent_glyph_1): Make sure that the glyph we
-       attach to the extent is valid.
-
-1998-12-12  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * dired.c (user_name_completion): Mule-ize.
-       (user_name_completion): Use xmalloc/xrealloc/xfree.
-       (user_name_completion): Use DO_REALLOC.
-       (user_name_completion): Cut down the number of static variables;
-       use a structure.
-       (user_name_completion): Username completion is always
-       case-sensitive.
-
-1998-12-06  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (base64_decode_1): Remove COUNTER.
-       (base64_decode_1): Accept CRLF in addition to CR.
-       (base64_decode_1): Disallow a stray character after final EOF; the
-       check was probably a remnant of buggy recode code.
-
-1998-12-05  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (init_provide_once): Provide `base64'.
-
-1998-12-04  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (XMALLOC_UNBIND): Include SPECCOUNT argument, for clarity.
-       (Fbase64_encode_region): If buffer is read-only, bail out early.
-       (Fbase64_decode_region): Ditto.
-       (Fbase64_encode_region): Initialize SPECCOUNT to pacify the
-       compiler.
-       (Fbase64_encode_string): Ditto.
-       (Fbase64_decode_region): Ditto.
-       (Fbase64_decode_string): Ditto.
-
-1998-11-25  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * dired.c (Fdirectory_files): Remove redundant code.
-
-1999-03-05  Philip Aston  <philipa@parallax.co.uk>
-
-       * frame-msw.c Make raise-frame restore minimised windows.
-
-1999-03-05  Philip Aston  <philipa@parallax.co.uk>
-
-       * device-msw.c: Fix DEFVAR format - Death to phantom quote, and
-       add magic newline.
-
-1999-03-05  Philip Aston  <philipa@parallax.co.uk>
-
-       * toolbar-msw.c Consider captions when deciding whether to rebuild
-       toolbar. This fixes the initial toolbar display for those of us
-       who don't like captions. These patches applied by Andy Piper.
-
-1999-03-12  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.13 is released
-
-1999-03-12  SL Baur  <steve@xemacs.org>
-
-       * file-coding.c: Guard ucs table initialization with ifdef MULE.
-
-1999-03-10  Stephen J. Turnbull  <turnbull@sk.tsukuba.ac.jp>
-
-       * file-coding.c:  docstring and comment improvements.
-       (decode_ucs4)  flag possible data loss with comment.
-
-1999-03-10  Martin Buchholz  <martin@xemacs.org>
-
-       * file-coding.c (Fset_ucs_char): add CHECK_INT, CHECK_CHAR
-       (ucs_to_char):
-       (Fucs_char):
-       (Fset_char_ucs):
-       (decode_coding_ucs4):
-       (encode_coding_ucs4):
-       (detect_coding_utf8):
-       (decode_coding_utf8):
-       (encode_utf8):
-       (encode_coding_utf8):
-       Add CHECK_* macros where needed to avoid crashes.
-       #ifdef out all composite character support using
-       #ifdef ENABLE_COMPOSITE_CHARS
-       Use normal XEmacs coding standards.
-       Fix docstrings.
-       Remove CODING_STREAM_COMPOSE, CODING_STREAM_DECOMPOSE.
-
-1998-09-08  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (make-coding-system): Add description about
-       `ucs-4' and `utf-8'.
-       (detection_state): Modify to implement ucs-4 and utf-8.
-       (detect_coding_type): Likewise.
-       (detect_coding_ucs4): New implementation.
-       (detect_coding_utf8): New implementation.
-       (encode_utf8): fixed.
-       (syms_of_mule_coding): Rename `ucs4' and `utf8' to `ucs-4' and
-       `utf-8'.
-
-1998-09-08  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (mule_char_to_ucs4): Encode 94x94 chars in ISO
-       2022 registry to private area.
-
-1998-09-07  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (encode_utf8): New function.
-       (encode_coding_utf8): New implementation.
-
-1998-09-07  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (ucs_to_mule_table): New variable; abolish
-       `Vucs_to_mule_table'
-       (mule_to_ucs_table): renamed from `Vmule_to_ucs_table'.
-       (set-ucs-char): New function.
-       (ucs_to_char): New function.
-       (ucs-char): New function.
-       (set-char-ucs): New function.
-       (char-ucs): New function.
-       (decode_ucs4): Use `ucs_to_char'.
-       (complex_vars_of_mule_coding): Abolish `ucs-to-mule-table' and
-       `mule-to-ucs-table'.
-
-1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * chartab.h: EXFUN `Fget_char_table'.
-
-       * file-coding.c (encode_ucs4): New function.
-       (encode_coding_ucs4): Use `encode_ucs4'.
-
-1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (decode_coding_ucs4): New implementation.
-
-1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (decode_coding_ucs4): fixed.
-
-       * file-coding.c (Vmule_to_ucs_table): New variable.
-       (mule_char_to_ucs4): New function.
-       (encode_coding_ucs4): New implementation.
-       (complex_vars_of_mule_coding): Define variable
-       `mule-to-ucs-table'.
-
-1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (decode_coding_utf8): New implementation.
-
-1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (decode_coding_utf8): fixed.
-
-1998-09-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (Vucs_to_mule_table): New variable.
-       (decode_ucs4): Refer `Vucs_to_mule_table'.
-       (complex_vars_of_mule_coding): Define variable
-       `ucs-to-mule-table'.
-
-1998-09-04  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * file-coding.c (detect_coding_ucs4): New function (not
-       implemented yet).
-       (decode_coding_ucs4): New function.
-       (encode_coding_ucs4): New function (not implemented yet).
-       (detect_coding_utf8): New function (not implemented yet).
-       (decode_coding_utf8): New function.
-       (encode_coding_utf8): New function (not implemented yet).
-       (make-coding-system): New type `ucs4' and `utf8'.
-       (coding-system-type): Likewise.
-       (detection_state): Add `ucs4' and `utf8'.
-       (detect_coding_type): Likewise.
-       (mule_decode): Use `decode_coding_ucs4' and `decode_coding_utf8'.
-       (mule_encode): Use `encode_coding_ucs4' and `encode_coding_utf8'.
-       (decode_ucs4): New function (very incomplete).
-       (syms_of_mule_coding): Add `ucs4' and `utf8'.
-
-       * file-coding.h: Add definitions for UCS-4 and UTF-8.
-
-1999-03-08  Martin Buchholz  <martin@xemacs.org>
-
-       * mule-charset.c:
-       (non_ascii_valid_char_p):
-       (lookup_composite_char):
-       (composite_char_string):
-       (make-composite-char):
-       (composite-char-string):
-       (syms_of_mule_charset):
-       (complex_vars_of_mule_charset):
-       * mule-charset.h (LEADING_BYTE_COMPOSITE):
-       (CHAR_LEADING_BYTE):
-       (MAKE_CHAR):
-       * file-coding.h (CODING_STATE_COMPOSITE):
-       (CODING_STATE_ISO2022_LOCK):
-       (iso_esc_flag):
-       (LEADING_BYTE_COMPOSITE):
-       * file-coding.c (struct iso2022_decoder):
-       (decoding_closer):
-       (reset_iso2022):
-       (parse_iso2022_esc):
-       (encode_coding_iso2022):
-       #ifdef out all composite character support using
-       #ifdef ENABLE_COMPOSITE_CHARS
-
-       * alloc.c: Define lrecord_coding_system only if ! FILE_CODING
-
-1999-03-04  Takeshi YAMADA <yamada@cslab.kecl.ntt.co.jp>
-
-       * fns.c (Fbase64_encode_string): Calculate `allength' in the same
-       way of `Fbase64_encode_region'.
-
-1999-02-18  Katsumi Yamaoka   <yamaoka@jpl.org>
-
-       * fns.c (base64_encode_1): Don't add a newline at the tail.
-
-1999-03-08  Andy Piper  <andy@xemacs.org>
-
-       * menubar-msw.c (displayable_menu_item): correct off-by-one &
-       handling.
-
-1999-03-07  Martin Buchholz  <martin@xemacs.org>
-
-       * console-stream.h (struct stream_console):
-       * event-unixoid.c (event_stream_unixoid_select_console):
-       (event_stream_unixoid_unselect_console):
-       * print.c (Fexternal_debugging_output):
-       * sysdep.c (reset_one_device):
-       * console-stream.c (stream_init_console):
-       (stream_delete_console):
-       (allocate_stream_console_struct): move into stream_init_console.
-       (free_stream_console_struct): move into stream_delete_console.
-       Use `fd' only for file descriptors.
-       Therefore, rename members of struct stream_console.
-
-       * systime.h: Unix98 says sys/time.h should define select(), but
-       some systems define that in unistd.h.  So include that file always.
-
-       * glyphs.h (MAYBE_IIFORMAT_METH): Don't use leading `_'.  Avoid
-       multiple evaluation of first arg.  Do proper do {} while (0) wrapping.
-       (HAS_IIFORMAT_METH_P): Prevent macro from being used in
-       non-boolean context
-       (MAYBE_IIFORMAT_DEVMETH): Use standard internal macro naming convention.
-
-       * EmacsShell.c:
-       * balloon_help.c:
-       Add #include <stdio.h>.
-       Some versions of assert.h use printf() without #include'ing stdio.h
-
-       * free-hook.c (blocktype): Add gcpro5_type to blocktype.
-       (log_gcpro): Remove unused variable FRAME.
-       (show_gcprohist): Ansify.
-       Comment the #endif's
-
-       * frame-x.c (x_delete_frame): Don't use FRAME_X_SHELL_WIDGET(f)
-       after it's just been XtDestroy'ed!
-
-1999-02-18  Martin Buchholz  <martin@xemacs.org>
-
-       * opaque.c (print_opaque):
-       (sizeof_opaque):
-       (equal_opaque):
-       (hash_opaque):
-       Egcs 1.1.1 seems to have a bug where
-       INTP (p->size_or_chain)
-       will crash XEmacs.  Fix by introducing intermediate variable.
-
-       * sound.c (Fdevice_sound_enabled_p): Fix compiler warning.
-
-       * dired.c (Fdirectory_files):
-       (Ffile_name_completion):
-       (Ffile_name_all_completions):
-       (file_name_completion):
-       - Use `directory' instead of `dirname' to sync with FSF Emacs and
-       avoid compiler warnings.
-       - Fix up docstrings so that C variables match documentation.
-
-1999-03-05  Martin Buchholz  <martin@xemacs.org>
-
-       * alloc.c: (garbage_collect_1): Reorg code to make scope of local
-       variables as small as possible to help out the compiler and the maintainer.
-
-       * alloc.c: (disksave_object_finalization):
-       Set all the *-load-path variables to
-       nil, not just load-path itself.  This gets the locate-file hash
-       tables garbage collected BEFORE dump, and has the side effect of
-       preventing crashes on OSF4.0+egcs.
-
-       * alloc.c:
-       * gdbinit:
-       * dbxrc:
-       - Clean up gdb/dbx debugging support.
-       - Storing an EMACS_INT in an enum is not 64-bit clean!
-       - So change the enum to a set of separate variables.
-       - Add test cases to help debug the debugging support!
-       - Add `lisp-shadows' and `run-temacs' targets for dbx.
-       - Both dbx and gdb have been tested now.
-
-1999-03-05  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.12 is released
-
-1999-02-16  Kazuyuki IENAGA  <ienaga@jsys.co.jp>
-
-       * device-x.c: Support to find best visual without flashing.
-
-1999-03-02  Paul Keusemann  <pkeusem@visi.com>
-
-       * database.c (berkdb_map): Add flags argument to cursor call (must
-         be 0 according to docs) required for Berkeley DB 2.6.4 and later.
-
-1999-03-03  Martin Buchholz  <martin@xemacs.org>
-
-       * hash.c:
-       * hash.h:
-       General cleanup.  Get free-hook.c working again.
-       Remove unused functions:
-       make_strings_hash_table, copy_hash, expand_hash_table.
-
-       * malloc.c:
-       * mem-limits.h:
-       Always use new ANSI-style function prototypes.
-
-       * unexalpha.c (unexec): Never use implicit int.
-
-       * sgiplay.c (close_sound_file):
-       (play_sound_file):
-       (restore_audio_port):
-       (play_sound_data):
-       (audio_initialize):
-       (play_internal):
-       (drain_audio_port):
-       (write_mulaw_8_chunk):
-       (write_linear_chunk):
-       (write_linear_32_chunk):
-       (initialize_audio_port):
-       (open_audio_port):
-       (set_channels):
-       (set_output_format):
-       (adjust_audio_volume):
-       (get_current_volumes):
-       (parse_snd_header):
-       Always use new ANSI-style function prototypes.
-       Use unistd.h for missing prototypes.
-
-       * unexelfsgi.c (round_up):
-       (find_section):
-       (unexec): Always use new ANSI-style function prototypes
-
-       * elhash.c (struct Lisp_Hash_Table): rename golden to golden_ratio
-
-       * console.h (struct console_methods): Always use full ANSI prototypes
-
-       * emacs.c (__sti__iflPNGFile_c___): Always use full ANSI prototypes
-
-1999-03-02  Andy Piper  <andy@xemacs.org>
-
-       * event-stream.c (init_event_stream): make sure native mswindows
-       gets an appropriate event loop.
-
-1999-02-22  Andy Piper  <andy@xemacs.org>
-
-       * frame-msw.c (mswindows_make_frame_visible): use SW_SHOW rather
-       than SW_SHOWNORMAL to prevent resizing of maximised frames.
-       (mswindows_raise_frame): remove comment.
-
-1999-03-01  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.11 is released
-
-1999-02-25  SL Baur  <steve@xemacs.org>
-
-       * mule-charset.c (Qleading_byte): New variable to implement
-       charset-leading-byte function.
-       (Fcharset_property): Use it.
-       (syms_of_mule_charset): Initialize it.
-       From Kazuyuki IENAGA <ienaga@jsys.co.jp>
-
-1999-02-17  Kazuo Oishi <oishi@ae.agr.yamaguchi-u.ac.jp>
-
-       * glyphs-x.c (cononvert_EImage_to_XImage): correct
-       bytes per pixel counting.
-
-1999-02-15  Andy Piper  <andy@xemacs.org>
-
-       * s/cygwin32.h (BROKEN_SIGIO): don't define this as it causes
-       major lockups.
-
-1999-02-16  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
-
-       * fns.c (Fbase64_encode_string): New optional argument
-       `NO_LINE_BREAK'.
-
-1999-02-16  Martin Buchholz  <martin@xemacs.org>
-
-       * gdbinit:  Fix up commands to run temacs.  Add lisp-shadows command.
-       * alloc.c (xcalloc):  undef xcalloc, just like xmalloc
-
-1999-02-10  Martin Buchholz  <martin@xemacs.org>
-
-       * s/bsdos4.h: New file.  Port to BSDI BSD/OS 4.0.
-       * xintrinsic.h:  Redo CONST support for X11 R4 compatibility.
-
-1999-02-05  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.10 is released
-
-1999-02-02  Gleb Arshinov  <gleb@cs.stanford.edu>
-
-       * process-nt.c (nt_send_process):
-       Fix for process-send-region/process-send-string breaking when size
-       of the input > 128 chars: change maximum chunk size for process
-       stream from 512 to 128, thus guaranteeing that ntpipe_shove_writer
-       succeeds.
-
-1999-02-02  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.9 is released
-
-1999-01-30  Martin Buchholz  <martin@xemacs.org>
-
-       * bytecode.c (funcall_compiled_function): Call
-       UNBIND_TO_GCPRO instead of UNBIND_TO_GCPRO_VARIABLES_ONLY.
-
-       * backtrace.h (UNBIND_TO_GCPRO_VARIABLES_ONLY):
-       #ifdef 0 out unused macro.
-
-1999-01-27  Martin Buchholz  <martin@xemacs.org>
-
-       * gui.c (gui_parse_item_keywords_internal): Make static.
-
-1999-01-21  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c: add xface support.
-       (mswindows_xface_instantiate): new function copied from glyphs-x.c
-       (image_instantiator_format_create_glyphs_mswindows): do device
-       specific initialisation for xfaces.
-       (xbm_create_bitmap_from_data): line data must be padded to a word
-       boundary.
-
-       * glyphs-x.c (xface_validate): moved to glyphs.c
-       (xface_normalize): ditto.
-       (xface_possible_dest_types): ditto.
-       (image_instantiator_format_create_glyphs_x): do device specific
-       initialisation for xfaces.
-
-       * glyphs.h: declare xface symbol.
-
-       * glyphs.c: move generic xface support here.
-       (xface_validate): moved from glyphs-x.c
-       (xface_normalize): ditto.
-       (xface_possible_dest_types): ditto.
-       (image_instantiator_format_create): xface declarations moved from
-       glyphs-x.c.
-
-1999-01-14  Adrian Aichner  <adrian@xemacs.org>
-
-       * event-stream.c (vars_of_event_stream): Fixing documentation.
-
-1999-01-17  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * glyphs-eimage.c (gif_instantiate): Correct handling of
-       interlaced gifs to avoid writing past the end of the eimage
-       buffer.
-
-1999-01-13  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * search.c (Freplace_match): Handle single backslash at end of
-       NEWTEXT correctly.
-
-1999-01-12  William M. Perry  <wmperry@aventail.com>
-
-       * eldap.c (Fldap_open): slow down interrupts around ldap_open to
-         avoid connection errors.
-
-1999-01-12  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_update_line): backout change that
-       shouldn't have gone ine.
-
-1999-01-09  Oscar Figueiredo  <Oscar.Figueiredo@di.epfl.ch>
-
-       * eldap.c (vars_of_ldap): Do no provide `ldap' here since it may
-       collide with ldap.el
-
-1999-01-11  Andy Piper  <andy@xemacs.org>
-
-       * redisplay.h (DISPLAY_LINE_HEIGHT): new macro.
-       (DISPLAY_LINE_YPOS): new macro.
-
-       * redisplay-msw.c (mswindows_output_string): use it.
-       (mswindows_output_pixmap): ditto.
-       (mswindows_output_display_block): ditto.
-
-       * redisplay-output.c (redisplay_output_display_block): new
-       function. just call the devmeth, maybe insert some generic code
-       here later.
-       (compare_display_blocks): use it.
-       (output_display_line): ditto.
-       (redisplay_unmap_subwindows_maybe): new function. potentially
-       unmap subwindows in the given area.
-
-       * glyphs.c (reset_subwindow_cachels): unmap subwindows that we are
-       resetting.
-
-1999-01-10  J. Kean Johnston  <jkj@sco.com>
-
-       * Makefile.in.in: Set value of moduledir
-       - Changed DUMPENV to include $(MODULEPATH)
-       - Added install rule to install header files for use by ellcc.
-
-       * config.h.in: Added INHIBIT_SITE_MODULES
-       - Added HAVE__DLERROR
-       - Added HAVE_DLFCN_H
-       - Added DLSYM_NEEDS_UNDERSCORE
-
-       * dll.c: Removed.
-
-       * emodules.c: New file containing dynamic loading code.
-
-       * emodules.h: New file.
-
-       * emacs.c: Added variables Vmodule_directory,
-       Vsite_module_directory, Vconfigure_module_directory and
-       Vconfigure_site_module_directory.
-       - (main_1): Added new variable inhibit_site_modules and command
-       line options `-no-site-modules' and `--no-site-modules'.
-       - (main_1): Call syms_of_module() instead of syms_of_dll().
-       - (main_1): Call vars_of_module().
-       - (vars_of_emacs): Introduce inhibit-site-modules,
-       module-directory, configure-module-directory,
-       site-module-directory, and configure-site-module-directory to the
-       Lisp reader.
-
-       * lisp.h: Declare load_module and list_modules, as well as
-       Vmodule_directory, Vsite_module_directory,
-       Vconfigure_module_directory and Vconfigure_site_module_directory.
-
-       * paths.h.in: Added PATH_MODULESEARCH and PATH_SITE_MODULES.
-       - Added correct support for site-lisp directory.
-
-       * symbols.c (defsubr): Modified to allow modules to add new subrs
-       after dump time.
-       - (defsubr_macro): Same.
-       - (defvar_magick): Only use purespace when not initialized, so
-       that loaded modules can still add symbols.
-
-       * symsinit.h: Add definitions for syms_of_module(),
-       vars_of_module().  Removed syms_of_dll().
-
-       * sysdll.c: Include dlfcn.h if HAVE_DLFCN_H is defined.
-       - (dll_variable): Take DLSYM_NEEDS_UNDERSCORE into account.
-       - (dll_error): use _dlerror() if HAVE__DLERROR is defined.
-
-       * s/sco5-shr.h (C_SWITCH_SYSTEM): Correct for modern gcc and
-       explicitly pass -belf for native cc.
-
-       * s/sco5.h (LIB_GCC): Use -print-libgcc-file-name instead of
-       hard-coding the library name.
-
-1999-01-01    <martin@xemacs.org>
-
-       * device-x.c (Fx_set_font_path):
-       Add proper cast to permit compilation under C++.
-
-       * buffer.c (directory_is_current_directory):
-       Add proper casts to permit compilation under C++.
-
-1998-12-30  Damon Lipparelli  <lipp@primus.com>
-
-       * event-msw.c (mswindows_wnd_proc):
-         Fixed failure when building with MSVC 5.
-
-1998-12-29  Martin Buchholz  <martin@xemacs.org>
-
-       * file-coding.c (decode_coding_iso2022):
-       - Prevent crash when decoding ISO7/Lock detected files
-       - the usual martin fiddling
-
-1998-12-29  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * event-msw.c:
-         glyphs-msw.c:
-         Fixed failures when building with MSVC.
-       * unexnt.c (dump_bss_and_heap):
-         Removed compiler warning by removing bss_data variable.
-
-1998-12-18  Jim Radford  <radford@robby.caltech.edu>
-
-       * device-x.c (Fx_set_font_path, Fx_get_font_path): New functions
-       so that packages that distribute their own fonts can access them.
-
-1998-12-28  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c (mswindows_button_instantiate): cope with buttons
-       that have an image provided.
-
-       * glyphs.h: add Q_image decl.
-
-       * glyphs-widget.c new functionality allowing images in
-       widgets.
-       (check_valid_glyph_or_image): new function to validate
-       glyphs passed in through :image.
-       (widget_normalize): new function. convert :image parameters into
-       real glyphs if not already so.
-       (widget_instantiate_1): mess with size parameters to be similar to
-       :image if provided.
-       (syms_of_glyphs_widget): new keyword :image.
-       (image_instantiator_format_create_glyphs_widget): normalize
-       buttons and allow :image.
-
-1998-12-27  Andy Piper  <andy@xemacs.org>
-
-       * frame-msw.c (mswindows_init_frame_1): warning elimination.
-
-       * glyphs-widget.c (check_valid_anything): no-op function.
-       (check_valid_callback): check callbacks in gui_items.
-       (check_valid_symbol): as it sounds.
-       (check_valid_string_or_vector): ditto.
-       (widget_validate): modified for descriptors that are vectors or
-       sequences of keyword/val pairs.
-       (widget_instantiate_1): ditto.
-       (image_instantiator_format_create_glyphs_widget): allow gui_item
-       keywords in the instantiator.
-
-       * gui.c (gui_parse_item_keywords_internal): renamed from
-       gui_parse_item_keywords but taking error behaviour.
-       (gui_parse_item_keywords): use it.
-       (gui_parse_item_keywords_no_errors): ditto.
-       (gui_item_add_keyval_pair): add Error_behavior flag and only
-       signal invalid keywords if required.
-
-       * gui.h: new gui signatures.
-
-       * menubar.c (menu_parse_submenu_keywords): use new
-       gui_item_add_keyval_pair signature.
-
-       * s/cygwin32.h: modify PTY_ITERATION to eliminate warnings.
-
-1998-12-28  Martin Buchholz <martin@xemacs.org>
-
-       * XEmacs 21.2.8 is released.
-
-1998-12-28  Martin Buchholz  <martin@xemacs.org>
-
-       * editfns.c (get_home_directory):
-       (user-home-directory): Simplify.
-
-
-       * callproc.c (child_setup):
-       - Environment variables were being passed to inferior processes
-         using internal encoding.
-       - Convert to external encoding.
-       - Rename local var `tem' to better name `tail'.
-       - Use Flength instead of `manual' calculation.
-
-       * buffer.c (kill-buffer):
-       (record-buffer):
-       (set-buffer-major-mode):
-       (current-buffer):
-       - Fix up parameter names to correspond to docstrings.
-       - Don't use `bufname' when a buffer will do as well.
-       - Remove one unneeded GCPRO.
-
-       * buffer.h (initial_directory):
-       * buffer.c (init_initial_directory):
-       - use correct conversions between internal and external format.
-       (directory_is_current_directory): new function
-       (init_buffer): convert initial_directory to internal format.
-       - solve crashes when current working directory is non-ASCII.
-
-       * alloc.c (xmalloc):
-       (xcalloc):
-       (xrealloc):
-       - remove stupid casts, since XEmacs requires an ANSI C system.
-       (lrecord_type_index): replace abort() with more readable assert().
-
-       (reset_lcrecord_stats): remove.
-       (sweep_lcrecords_1):
-       - replace call to reset_lcrecord_stats() with call to xzero().
-
-1998-12-27  Martin Buchholz  <martin@xemacs.org>
-
-       * process-unix.c (unix_create_process):
-       - Fix crash invoking program with non-ASCII name.
-         Try invoking xemacs with SHELL=/bin/sh, then M-x shell.
-       - Remove unused variable `env'.
-       - Rename `temp' to better name `save_errno'.
-       - Reorganize code for clarity.  But still too chicken to nuke the
-         BSD 4.2 support.
-
-1998-12-24  Martin Buchholz <martin@xemacs.org>
-
-       * XEmacs 21.2.7 is released.
-
-1998-12-23  Martin Buchholz  <martin@xemacs.org>
-
-       * glyphs.c (decode_device_ii_format):
-       - Fix indentation.
-       - Use GET_C_STRING_FILENAME_DATA_ALLOCA with char *, not Extbyte *.
-
-       * glyphs-x.c (x_subwindow_instantiate):
-       - A image instance mask was being assigned to a image instance type!
-       - X_SUBWINDOW_INSTANCE_DATA (ii) is not an lvalue in C++.
-
-       * glyphs-msw.c (mswindows_initialize_dibitmap_image_instance):
-       Fix indentation.
-       * glyphs-x.h: Make indentation consistent.
-
-       * emacs.c (Fdump_emacs): Remove Steve Martin merge artifacts.
-
-       * glyphs-widget.c (check_valid_glyph): Warning suppression.
-       - Make it static
-       - #ifdef it out, since it's not actually used yet (FIX THIS!)
-
-       * glyphs-widget.c:
-       * glyphs.h:
-       Move declarations of decode_device_ii_format and
-       decode_image_instantiator_format into glyphs.h where they belong.
-
-1998-12-22  Martin Buchholz  <martin@xemacs.org>
-
-       * frame-x.c (x_delete_frame): Revert part of my changes at the
-       suggestion of Gunnar Evermann - unfortunately no one really
-       understands this code.
-
-       * callproc.c (init_callproc): code cleanup.
-
-       * free-hook.c (malloc):
-       (check_malloc):
-       (__free_hook):
-       (__malloc_hook):
-       (__realloc_hook):
-       (block_input_malloc):
-       (block_input_realloc):
-       * device-x.c (x_delete_device):
-       * emacs.c (voodoo_free_hook):
-       * events.c (print_event):
-       (CHECK_EVENT_TYPE):
-       (CHECK_EVENT_TYPE2):
-       (CHECK_EVENT_TYPE3):
-       Use proper prototypes.
-       Make C_E_T macros a little faster.
-       Pedantic fiddly little changes.  You really don't care.
-
-1998-12-22  Andy Piper  <andy@xemacs.org>
-
-       * redisplay-output.c (redisplay_clear_region): make sure that
-       fg/bg colors get set even when we are in the border area.
-
-1998-12-13  Martin Buchholz  <martin@xemacs.org>
-
-       * console-msw.c: Function definitions follow coding standards
-       - This prevents e.g. find-tag on Lisp_Event finding DEVENT
-
-1998-12-11  Martin Buchholz  <martin@xemacs.org>
-
-       * events.h (struct timeout_data):
-       * event-tty.c (tty_timeout_to_emacs_event):
-       * event-msw.c (mswindows_wm_timer_callback):
-       * event-Xt.c (Xt_timeout_to_emacs_event):
-       * event-msw.c (mswindows_cancel_dispatch_event):
-       Make sure Lisp_Objects inside events are initialized to Qnil, not
-       Qnull_pointer, which is now illegal.
-
-1998-12-10  Martin Buchholz  <martin@xemacs.org>
-
-       * lisp.h: Fix up prototypes to match alloc.c
-
-1998-12-08  Martin Buchholz  <martin@xemacs.org>
-
-       * windowsnt.h: Remove `support' for using index and rindex
-
-       * filelock.c (current_lock_owner):
-       - Change uses of index -> strchr, rindex -> strrchr
-
-1998-12-07  Martin Buchholz  <martin@xemacs.org>
-
-       * sysdep.c (set_descriptor_non_blocking):
-       Since O_NONBLOCK is now always #defined, make use of fcntl
-       conditional on F_SETFL being defined.
-
-       * console-msw.c (DHEADgER):
-       (DOPAQUE_DATA):
-       (DEVENT):
-       (DCONS):
-       (DCONSCDR):
-       (DSTRING):
-       (DVECTOR):
-       (DSYMBOL):
-       (DSYMNAME):
-       - max_align_t should not be visible to the user of the
-         XOPAQUE_DATA macro.
-       - use Bufbyte instead of char
-       - parens around (FOOP (obj)) are always redundant.
-         If they were necessary, we should fix the macro instead.
-       - Always use string_data(foo) instead of foo->data.
-
-
-1998-12-06  Martin Buchholz  <martin@xemacs.org>
-
-       * frame-msw.c (mswindows_init_frame_1):
-       - use make_lisp_hash_table, not Fmake_hash_table
-       - include elhash.h
-
-       * lisp.h:
-       * alloc.c (make_vector): remove travesty
-       (Fmake_vector):
-       (make_pure_vector):
-       (pure_cons):
-       (make_bit_vector_internal):
-       (make_bit_vector):
-       (make_bit_vector_from_byte_vector):
-       (Fmake_bit_vector):
-       - make vector_equal a little faster.
-       - Don't use variable name `new'.
-       - Use size_t instead of EMACS_INT.
-       - usual Martin-style pointless bit-twiddling.
-
-       * fns.c (mapcar1):
-       (Fmapconcat):
-       (Fmapcar):
-       (Fmapvector):
-       Make mapcar faster.  In particular, make
-         (mapc #'identity long-string)
-       MUCH faster under Mule.
-       * tests/automated/lisp-tests.el: Test 'em!
-
-       * bytecode.c (Ffetch_bytecode): Fix crash when loading lazy-loaded
-       bytecode.
-
-1998-12-01  Martin Buchholz  <martin@xemacs.org>
-
-       * menubar-x.c (menu_item_descriptor_to_widget_value_1): Always use
-       Qnil, not NULL, to initialize `null' Lisp_Objects.
-
-1998-11-29  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * specifier.c (display_table_validate): Update.
-
-       * redisplay.c (create_text_block): Use them.
-
-       * glyphs.c (display_table_entry): New function.
-       (get_display_tables): Ditto.
-
-1998-12-15  Oscar Figueiredo  <Oscar.Figueiredo@di.epfl.ch>
-
-       * eldap.c (toplevel): Mention that eldap.c compiles with
-       OpenLDAP libs
-       (Fldap_open): Use `GET_C_STRING_OS_DATA_ALLOCA'
-       (Fldap_search_internal): Ditto
-
-1998-12-11  Martin Buchholz  <martin@xemacs.org>
-
-       * event-msw.c (mswindows_cancel_dispatch_event):
-       Gratuitous code prettification
-
-
-1998-12-07  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (Fnconc): Fix use of wrong_type_argument().
-
-       * floatfns.c (Ffloat): Fix docstring.
-       (Ffloat): Fix use of wrong_type_argument().
-       (Fabs): Ditto.
-       (extract_float): Ditto.
-       (Fceiling): Ditto.
-       (Fround): Ditto.
-       (Ftruncate): Ditto.
-
-1998-12-06  Martin Buchholz  <martin@xemacs.org>
-
-       * frame-msw.c (mswindows_init_frame_1):
-       - use make_lisp_hash_table, not Fmake_hash_table
-       - include elhash.h
-
-       * lisp.h:
-       * alloc.c (make_vector): remove travesty
-       (Fmake_vector):
-       (make_pure_vector):
-       (pure_cons):
-       (make_bit_vector_internal):
-       (make_bit_vector):
-       (make_bit_vector_from_byte_vector):
-       (Fmake_bit_vector):
-       - make vector_equal a little faster.
-       - Don't use variable name `new'.
-       - Use size_t instead of EMACS_INT.
-       - usual Martin-style pointless bit-twiddling.
-
-       * fns.c (mapcar1):
-       (Fmapconcat):
-       (Fmapcar):
-       (Fmapvector):
-       Make mapcar faster.  In particular, make
-         (mapc #'identity long-string)
-       MUCH faster under Mule.
-       * tests/automated/lisp-tests.el: Test 'em!
-
-       * bytecode.c (Ffetch_bytecode): Fix crash when loading lazy-loaded
-       bytecode.
-
-1998-12-02  Didier Verna  <verna@inf.enst.fr>
-
-       * menubar-x.c (menu_item_descriptor_to_widget_value_1): set the
-       accelerator field to nil for labels.
-
-1998-12-16  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * menubar-msw.c (displayable_menu_item):
-         Escape occurrences of '&' and support occurrences of the
-        '%_' accelerator indicator in menus.
-
-1998-11-26  Didier Verna  <verna@inf.enst.fr>
-
-       * dired.c (Fdirectory_files): use make_string instead of
-       make_ext_string on the filename. The conversion external->internal
-       format is already done in sys_readdir.
-
-1998-12-15  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * glyphs.c (normalize_image_instantiator): GCPRO instantiator
-
-1998-12-16  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * event-msw.c
-         (Belatedly) added Kirill to list of file's authors.
-         emacs_mswindows_quit_p: Don't process WM_PAINT messages in
-         quit checking. WM_PAINT messages cause redisplay, but
-         windows' states are not necessarily stable when this function
-         gets called.
-
-1998-12-17  Andy Piper  <andy@xemacs.org>
-
-       * strftime.c (zone_name): CONSTify.
-
-1998-12-15  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c (mswindows_combo_instantiate): ditto.
-       (mswindows_widget_property): return Qunbound when no property available.
-       (mswindows_button_property): ditto.
-       (mswindows_combo_property): ditto.
-       (mswindows_widget_set_property): ditto.
-
-       * glyphs-widget.c (check_valid_item_list): use properties.
-
-       * glyphs.h (struct Lisp_Image_Instance): we have properties now.
-
-       * glyphs.c (Fset_image_instance_property): allow setting of arbitrary properties.
-       (Fimage_instance_property): ditto.
-       * glyphs-widget.c (widget_property): ditto.
-       (widget_set_property): ditto.
-
-       * frame-msw.c (mswindows_set_frame_pointer): SetCursor() as well
-       as setting the class cursor so that GC actually changes the
-       cursor.
-
-       * config.h: don't undef MAIL_USE_POP.
-
-1998-12-13  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c
-       (image_instantiator_format_create_glyphs_mswindows): line ->
-       label.
-       (mswindows_label_instantiate): ditto. Play with window flags.
-       (image_instantiator_format_create_glyphs_mswindows): ditto.
-       (vars_of_glyphs_mswindows): provide Qlabel as we support it now.
-
-       * glyphs-widget.c (widget_instantiate_1): re-jig autosizing to
-       cope with lines and labels.
-       (static_instantiate): use widget_instantiate_1.
-       line -> label.
-       (image_instantiator_format_create_glyphs_widget): ditto.
-
-1998-12-10  Andy Piper  <andy@xemacs.org>
-
-       * Makefile.in.in (objs): add gui.o
-
-1998-12-10  Andy Piper  <andy@xemacs.org>
-
-       * gui.c: adjust defines of HAVE_POPUPS so that we can build with
-       no window system.
-
-1998-12-09  Andy Piper  <andy@xemacs.org>
-
-       * glyphs.c (finalize_image_instance): mark glyphs changed when an
-       image instance is removed so that the subwindow cache gets reset
-       and thus destroyed images get GC'd.
-
-1998-12-08  Andy Piper  <andy@xemacs.org>
-
-       * gui-msw.c (mswindows_handle_gui_wm_command): call
-       MARK_SUBWINDOWS_CHANGED.
-
-       * glyphs-msw.c (mswindows_finalize_image_instance): make sure
-       subwindows really get deleted.
-
-       * redisplay.c: new variable subwindows_changed[_set].
-       (redisplay_window): use it.
-       (redisplay_frame): ditto.
-       (redisplay_device): ditto.
-       (redisplay_without_hooks): ditto.
-
-       * device.h (MARK_DEVICE_SUBWINDOWS_CHANGED): new macro for
-       subwindows redisplay as per glyphs equivalent.
-       * redisplay.h: ditto.
-       (MARK_SUBWINDOWS_CHANGED): ditto.
-       (RESET_CHANGED_SET_FLAGS): ditto.
-       * frame.h (MARK_FRAME_SUBWINDOWS_CHANGED): ditto.
-
-1998-12-07  Andy Piper  <andy@xemacs.org>
-
-       * frame.c (Fmake_frame): reset subwindow cachels on non-stream
-       frames.
-
-       * redisplay.c (redisplay_frame): invalidate subwindow cachels.
-
-       * event-msw.c (mswindows_wnd_proc): catch the various WM_CTLCOLOR*
-       messages and paint widget glyphs as appropriate with their face fg
-       & bg.
-
-1998-12-06  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c (vars_of_glyphs_mswindows): provide widget types
-       here rather than in glyphs-widget - do this because we only want
-       to provide what is really available.
-
-       * glyphs.c (Fimage_instance_property): new function to get the
-       properties of image instances. wires through to console specific
-       methods and then to widget specific methods.
-       (Fset_image_instance_property): ditto but for setting widget properties.
-       (check_valid_face): make extern so that it can be used elsewhere.
-
-       * glyphs-widget.c (widget_property): new function. gets the
-       properties of widgets in general and wires the function through to
-       widget specific ones.
-       (widget_set_property): ditto but for setting widget properties.
-
-       * glyphs-msw.c (mswindows_combo_instantiate): Add functionality to
-       add items to the list. Play with window styles a bit to get the
-       desired effect.
-       (mswindows_widget_property): break out specific widget properties.
-       (mswindows_button_property): new function. gets the checked state
-       of a button.
-       (mswindows_combo_property): new function. gets the current
-       selection in the combo box.
-       (mswindows_widget_set_property): new function. sets specific
-       properties of specific widgets.
-
-       * glyphs-widget.c (check_valid_item_list): new function. check
-       that items for a combo-box are just a list of strings.
-       (combo_validate): new function. check there is an item list.
-       (widget_instantiate_1): new function. renamed from
-       widget_instantiate so that we can do slightly different things for
-       other widgets.
-       (widget_instantiate): call widget_instantiate_1.
-       (combo_instantiate): new function to instantiate combo boxes,
-       defaults height to the pixel height of the number of items in the
-       box.
-       (syms_of_glyphs_widget): move widget keywords here.
-       (image_instantiator_format_create_glyphs_widget): use new combo
-       functions.
-
-1998-12-04  Andy Piper  <andy@xemacs.org>
-
-       * event-msw.c (mswindows_wnd_proc): mule-ize.
-
-       * glyphs.c (pixmap_to_lisp_data): mule-ize.
-
-       * glyphs-msw.c (extract_xpm_color_names): mule-ize.
-       (resource_name_to_resource): ditto.
-       (mswindows_resource_instantiate): ditto.
-       (mswindows_widget_instantiate): ditto.
-       (mswindows_widget_set_property): ditto.
-
-       * redisplay-output.c (redisplay_output_subwindow): don't show
-       subwindows if they are obscured at the edge of the frame, emacs
-       gets into some sort of redisplay loop otherwise.
-
-       * gui.h: prototype gui_item_selected_p.
-
-       * gui.c (gui_item_selected_p): new function to determine the
-       selected state of a gui_item.
-
-       * frame.h (struct frame): add subwindows_changed flag.
-
-       * redisplay.c (redisplay_frame): call update_frame_subwindows ().
-
-       * glyphs.c (update_subwindow): new function to update a
-       subwindow's state.
-       (update_frame_subwindows): new function to update all the
-       subwindows on a frame.
-
-       * console.h (struct console_methods): add update_subwindow.
-
-       * glyphs-msw.c (mswindows_widget_property): return selected state
-       for selected property.
-       (mswindows_update_subwindow): new function. updates widget glyphs
-       in redisplay as per menubars or toolbars e.g. selected state.
-       (console_type_create_glyphs_mswindows): add update_subwindow.
-
-1998-12-03  Andy Piper  <andy@xemacs.org>
-
-       * console-tty.c (syms_of_console_tty): MULE -> FILE_CODING since
-       tty coding system things are such.
-
-       * glyphs-widget.c (widget_face_font_info): new function for
-       pulling out height and width metrics for a widget's face.
-       (widget_text_to_pixel_conversion): calculate pixel sizes of text
-       for widgets.
-
-       * event-msw.c (mswindows_drain_windows_queue): translate messages
-       that are destined for subwindows. This makes edit fields interact
-       with the keyboard correctly.
-       nuke warnings by #ifndef'ing out stuff not required by msg select().
-
-       * glyphs.h (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM): new
-       macro defining the iiforma without the symbol required by widget.
-       (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT): use it.
-
-       * general.c (syms_of_general): add Qwidget, Qselected.
-
-       * faces.c (complex_vars_of_faces): add widget face inheriting from
-       gui-element face.
-
-1998-11-09  Andy Piper  <andy@xemacs.org>
-
-       * window.h (struct window): add a cache of subwindows on a
-       per-window basis.
-
-       * window.c (mark_window): mark the subwindow_instance_cache.
-       (allocate_window): initialise the subwindow instance_cache.
-
-       * toolbar-x.c (x_output_toolbar): call redisplay_clear_region
-       instead of the devmeth.
-       (x_clear_toolbar): ditto.
-
-       * redisplay-x.c (x_output_display_block): call
-       redisplay_output_subwindow for subwindows and widgets.
-
-       * redisplay-tty.c (tty_output_display_block): add IMAGE_WIDGET to
-       types to do nothing for.
-
-       * lisp.h: declare new widget/subwindow symbols.
-
-       * glyphs.c (image_instantiate): cache subwindows on a per-window
-       basis.
-       (subwindow_possible_dest_types): new function for subwindow dest
-       types.
-       (subwindow_instantiate): generic instantiation of a
-       subwindow. specialised by device multi-methods.
-       (Fsubwindowp): moved from glyphs-x.c. adapted for glyph-based
-       subwindows.
-       (Fimage_instance_subwindow_id): ditto.
-       (Fresize_subwindow): ditto.
-       (Fforce_subwindow_map): ditto.
-
-       * glyphs-x.c (x_print_image_instance): remove subwindow
-       stuff. Handled genrically in glyphs.c.
-       (x_image_instance_equal): ditto.
-       (x_image_instance_hash): ditto.
-       (x_finalize_image_instance): delete subwindows when required.
-       (mark_subwindow) (print_subwindow) (finalize_subwindow)
-       (subwindow_hash) (Fmake_subwindow): deleted because of new,
-       glyph-based, subwindow implementation.
-       (Fsubwindow_height) (Fsubwindow_width) (Fsubwindow_xid): aliased
-       in glyphs.el
-       (Fsubwindowp) (Fresize_subwindow) (Fforce_subwindow_map): moved to
-       glyphs.c.
-       (x_unmap_subwindow): new function to unmap X subwindows.
-       (x_map_subwindow): new function to map X subwindows.
-       (x_subwindow_instantiate): new function to instantiate X
-       subwindows.
-       (x_resize_subwindow): new function to resize X subwindows.
-       (console_type_create_glyphs_x): add subwindow functions.
-       (image_instantiator_format_create_glyphs_x): add device
-       multi-methods for xpm, xbm and subwindow.
-
-       * glyphs.el (subwindow-xid): old alias for new subwindow functions.
-       (subwindow-width): ditto.
-       (subwindow-height): ditto.
-
-       * glyphs-msw.c (mswindows_widget_instantiate): new function for
-       generally instantiating ms subwindows. Used by
-       mswindows_*_instantiate.
-       (mswindows_edit_instantiate): instantiate an edit field on a
-       mswindows frame.
-
-1998-11-04  Andy Piper  <andy@xemacs.org>
-
-       * symsinit.h: declare new functions.
-
-       * redisplay.h: declare new functions.
-
-       * redisplay-x.c (x_output_display_block): call
-       redisplay_clear_region rather than x_clear_region.
-       (x_output_string): ditto.
-       (x_output_pixmap): ditto.
-       (x_clear_to_window_end): ditto.
-       (x_output_eol_cursor): ditto.
-       (x_clear_region): only do X specific things. other duties handled
-       in redisplay_clear_region.
-
-       * redisplay-tty.c (tty_clear_region): do tty specific things - some
-       duties moved to redisplay_clear_region.
-
-       * redisplay-output.c (clear_left_border): use
-       redisplay_clear_region instead of device method.
-       (clear_right_border): ditto.
-       (output_display_line): ditto.
-       (redisplay_output_subwindow): ditto.
-       (redisplay_clear_top_of_window): ditto.
-       (redisplay_clear_region): perform duties previously handled by
-       device methods. call the appropriate device method at the
-       end. unmap subwindows if necessary.
-
-       * redisplay-msw.c (mswindows_output_string): use
-       redisplay_clear_region instead of mswindows_clear_region.
-       (mswindows_clear_to_window_end): ditto.
-       (mswindows_output_display_block): output subwindows when required.
-       (mswindows_clear_region): only do mswindows specific things,
-       everything else is now handled in redisplay_clear_region.
-
-       * gui.h: add item id hash defines and declare function prototypes.
-
-       * gui.c (mark_gui_item): new function for marking gui_items.
-       (gui_item_hash): generic hash function for generating command ids
-       for gui_items.
-
-       * gui-msw.c: new file.
-       (mswindows_handle_gui_wm_command): new function to handle widget
-       callbacks.
-
-       * glyphs.h (MAYBE_IIFORMAT_DEVMETH): new function for device
-       multi-methods.
-       (IIFORMAT_HAS_SHARED_METHOD): ditto.
-       (DEFINE_DEVICE_IIFORMAT): ditto.
-       (INITIALIZE_DEVICE_IIFORMAT): ditto.
-       (struct Lisp_Image_Instance): add widget and subwindow data plus
-       appropriate access functions.
-
-       * glyphs.c (decode_device_ii_format): new function for decoding
-       image instantiator functions based on a device type as well as an
-       image format.
-       (decode_image_instantiator_format): just call
-       decode_device_ii_format with nil device.
-       (add_entry_to_device_ii_format_list): new function for per device
-       method instances.
-       (add_entry_to_image_instantiator_format_list): just call
-       add_entry_to_device_ii_format_list with nil device.
-       (check_valid_vector): new function.
-       (instantiate_image_instantiator): instantiate using per-format
-       method and then per-format-per-device method (device
-       multi-methods). signal an error if neither is possible.
-       (mark_image_instance): cope with subwindows and widgets.
-       (print_image_instance): ditto.
-       (image_instance_equal): ditto.
-       (image_instance_hash): ditto.
-       (allocate_glyph): ditto.
-       (glyph_width): ditto.
-       (glyph_height_internal): ditto.
-       (xpm_instantiate): removed because of device multi-methods.
-       (mark_subwindow_cachels): new cachel functions for caching
-       instantiated subwindows on a per-frame basis. mostly copied from
-       glyph cachel functions.
-       (update_subwindow_cachel_data): ditto.
-       (add_subwindow_cachel): ditto.
-       (get_subwindow_cachel_index): ditto.
-       (reset_subwindow_cachels): ditto.
-       (mark_subwindow_cachels_as_not_updated): ditto.
-       (unmap_subwindow): generic unmapping of subwindows based on cachel
-       data.
-       (map_subwindow): ditto.
-       (initialize_subwindow_image_instance): generic initialisation of
-       subwindow data.
-       (syms_of_glyphs): add widget keywords.
-
-       * glyphs-x.h (struct x_subwindow_data): convert Lisp_Subwindow to
-       x_subwindow_data.
-
-1998-11-04  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-widget.c: new file for instantiating widget type glyphs.
-       (widget_possible_dest_types): new general dest type function for
-       widgets.
-       (widget_validate): ditto.
-       (initialize_widget_image_instance): ditto
-       (widget_instantiate): ditto. Sets up fg/bg, gui_item parsing
-       before handing on control to device multi-methods.
-       (syms_of_glyphs_widget): new function.
-       (image_instantiator_format_create_glyphs_widget): new function,
-       added placeholders for button, edit, combo, scrollbar
-       (vars_of_glyphs_widget): new function.
-
-       * glyphs-msw.h (WIDGET_INSTANCE_MSWINDOWS_HANDLE): new define for
-       storing window ids of widgets.
-
-       * glyphs-msw.c (mswindows_finalize_image_instance): cope with
-       deletion of widget and subwindow glyphs.
-       (mswindows_unmap_subwindow): new device function for unmapping
-       subwindows on a msw frame.
-       (mswindows_map_subwindow): ditto.
-       (mswindows_register_image_instance): register instantiated widgets
-       with the widget hastable.
-       (mswindows_button_instantiate): instantiate a button type widget
-       on an msw frame.
-       (mswindows_subwindow_instantiate): instanttiate a subwindow on a
-       mswindows frame.
-       (image_instantiator_format_create_glyphs_mswindows): add device
-       multi-methods for xbm, xpm, subwindow, edit and button.
-
-       * frame.h (struct frame): add subwindow_cachels dynarr for caching
-       information about subwindows visible on the current frame. used by
-       redisplay_clear_region to unmap subwindows as required.
-
-       * frame.c (mark_frame): mark subwindow_cachels.
-       (allocate_frame_core): instantiate subwindow_cachels.
-
-       * frame-msw.c (mswindows_init_frame_1): instntiate and mark the
-       widget hashtable.
-
-       * event-msw.c (mswindows_wnd_proc): add call to
-       mswindows_handle_gui_wm_command to handle widget callbacks.
-
-       * emacs.c (main_1): add calls to glyphs-widget initialisation
-       routines.
-
-       * console.h (struct console_methods): add
-       unmap/map_subwindow_method for use be redisplay_clear_region to
-       map and unmap subwindows. Remove xpm and xbm stuff - now dealt
-       with by image instantiator multi-methods. Add
-       resize_subwindow_method.
-
-       * console-stream.c (stream_clear_region): change signature to
-       match new generic clear region function.
-
-       * Makefile.in.in: add glyphs-widget.o to list of objects.
-
-       * console-msw.h (struct mswindows_frame): add widget hashtable for
-       wiring command ids to callbacks.
-
-1998-12-16  Andy Piper  <andy@xemacs.org>
-
-       * XEmacs 21.2.6 is released
-
-1998-12-08  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * md5.c (Fmd5): Correctly initiate string input stream.
-
-       * Makefile.in.in (tests): Add md5-tests.el.
-
-1998-12-06  Martin Buchholz  <martin@xemacs.org>
-
-       * lisp.h:
-       * alloc.c (make_vector): remove travesty
-       (Fmake_vector):
-       (make_pure_vector):
-       (pure_cons):
-       (make_bit_vector_internal):
-       (make_bit_vector):
-       (make_bit_vector_from_byte_vector):
-       (Fmake_bit_vector):
-       - make vector_equal a little faster.
-       - Don't use variable name `new'.
-       - Use size_t instead of EMACS_INT.
-       - usual Martin-style pointless bit-twiddling.
-
-       * fns.c (mapcar1):
-       (Fmapconcat):
-       (Fmapcar):
-       (Fmapvector):
-       Make mapcar faster.  In particular, make
-         (mapc #'identity long-string)
-       MUCH faster under Mule.
-       * tests/automated/lisp-tests.el: Test 'em!
-
-1998-12-06  Martin Buchholz  <martin@xemacs.org>
-
-       * bytecode.c (Ffetch_bytecode): Fix crash when loading lazy-loaded
-       bytecode.
-
-1998-12-13  Martin Buchholz  <martin@xemacs.org>
-
-       * console-msw.c: Function definitions follow coding standards
-       - This prevents e.g. find-tag on Lisp_Event finding DEVENT
-
-1998-12-11  Martin Buchholz  <martin@xemacs.org>
-
-       * events.h (struct timeout_data):
-       * event-tty.c (tty_timeout_to_emacs_event):
-       * event-msw.c (mswindows_wm_timer_callback):
-       * event-Xt.c (Xt_timeout_to_emacs_event):
-       * event-msw.c (mswindows_cancel_dispatch_event):
-       Make sure Lisp_Objects inside events are initialized to Qnil, not
-       Qnull_pointer, which is now illegal.
-
-1998-12-10  Martin Buchholz  <martin@xemacs.org>
-
-       * lisp.h: Fix up prototypes to match alloc.c
-
-1998-12-09  Andy Piper  <andy@xemacs.org>
-
-       * glyphs-msw.c (init_image_instance_from_xbm_inline): don't use
-       XSETINT for assigning lisp objects.
-
-1998-12-07  Martin Buchholz  <martin@xemacs.org>
-
-       * opaque.h:
-       * console-msw.c (DHEADER):
-       (DOPAQUE_DATA):
-       (DEVENT):
-       (DCONS):
-       (DCONSCDR):
-       (DSTRING):
-       (DVECTOR):
-       (DSYMBOL):
-       (DSYMNAME):
-       - max_align_t should not be visible to the user of the
-         XOPAQUE_DATA macro.
-       - use Bufbyte instead of char
-       - parens around (FOOP (obj)) are always redundant.
-         If they were necessary, we should fix the macro instead.
-       - Always use string_data(foo) instead of foo->data.
-
-1998-12-07  Martin Buchholz  <martin@xemacs.org>
-
-       * sysdep.c (set_descriptor_non_blocking):
-       Since O_NONBLOCK is now always #defined, make use of fcntl
-       conditional on F_SETFL being defined.
-
-1998-12-09  Andy Piper  <andy@xemacs.org>
-
-       * menubar-msw.c (mswindows_handle_wm_command): add back in checks
-       that got removed in the merge
-
-1998-11-30  Greg Klanderman  <greg@alphatech.com>
-
-       * dired.c (vars_of_dired): bugfix for previous conditionalization
-       of user-name-completion on non- Windows NT.
-
-1998-12-08  Martin Buchholz  <martin@xemacs.org>
-
-       * windowsnt.h: Remove `support' for using index and rindex
-
-       * filelock.c (current_lock_owner):
-       - Change uses of index -> strchr, rindex -> strrchr
-
-1998-12-06  Martin Buchholz  <martin@xemacs.org>
-
-       * frame-msw.c (mswindows_init_frame_1):
-       - use make_lisp_hash_table, not Fmake_hash_table
-       - include elhash.h
-
-1998-12-05  XEmacs Build Bot <builds@cvs.xemacs.org>
-
-       * XEmacs 21.2.5 is released
-
-1998-11-30  Martin Buchholz  <martin@xemacs.org>
-
-       * xselect.c (receive_incremental_selection):
-       * xselect.c (x_get_window_property):
-       * xmu.c (XmuReadBitmapDataFromFile):
-       * xmu.c (XmuCursorNameToIndex):
-       * xgccache.c (describe_gc_cache):
-       * xgccache.c (gc_cache_lookup):
-       * xgccache.c (free_gc_cache):
-       * xgccache.c (make_gc_cache):
-       * window.h:
-       * window.c (map_windows_1):
-       * window.c (Fother_window_for_scrolling):
-       * window.c (window_scroll):
-       * window.c (change_window_height):
-       * window.c (Fsplit_window):
-       * window.c (window_left_gutter_width):
-       * window.c (window_modeline_height):
-       * window.c (invalidate_vertical_divider_cache_in_window):
-       * window.c (window_needs_vertical_divider_1):
-       * window.c (update_mirror_internal):
-       * window.c (SET_LAST_FACECHANGE):
-       * widget.c (Fwidget_plist_member):
-       * unexec.c (copy_text_and_data):
-       * unexcw.c (copy_executable_and_dump_data_section):
-       * tooltalk.doc:
-       * tooltalk.c (struct Lisp_Tooltalk_Pattern):
-       * tooltalk.c (struct Lisp_Tooltalk_Message):
-       * toolbar.h (struct toolbar_button):
-       * toolbar.c (default_toolbar_visible_p_changed_in_window):
-       * toolbar.c (recompute_overlaying_specifier):
-       * toolbar.c (toolbar_validate):
-       * toolbar.c (toolbar_button_at_pixpos):
-       * toolbar.c (get_toolbar_coords):
-       * toolbar.c (update_frame_toolbars):
-       * toolbar-x.c:
-       * toolbar-msw.c (mswindows_handle_toolbar_wm_command):
-       * toolbar-msw.c (mswindows_find_toolbar_pos):
-       * toolbar-msw.c (mswindows_output_toolbar):
-       * toolbar-msw.c (mswindows_clear_toolbar):
-       * toolbar-msw.c:
-       * systty.h:
-       * syssignal.h:
-       * sysproc.h:
-       * sysfile.h:
-       * sysdll.c:
-       * sysdep.h:
-       * sysdep.c (rmdir):
-       * sysdep.c (sys_fopen):
-       * sysdep.c (sys_open):
-       * sysdep.c (tty_init_sys_modes_on_device):
-       * sysdep.c (get_eof_char):
-       * sysdep.c (child_setup_tty):
-       * sysdep.c (set_descriptor_non_blocking):
-       * syntax.h:
-       * syntax.c (scan_words):
-       * syntax.c:
-       * symsinit.h:
-       * symeval.h (struct symbol_value_varalias):
-       * symeval.h (struct symbol_value_forward):
-       * symbols.c (syms_of_symbols):
-       * symbols.c (init_symbols_once_early):
-       * symbols.c (Fbuilt_in_variable_type):
-       * symbols.c (Fsymbol_value_in_buffer):
-       * symbols.c (default_value):
-       * symbols.c (Fset):
-       * symbols.c (find_symbol_value_quickly):
-       * symbols.c (store_symval_forwarding):
-       * symbols.c (set_default_console_slot_variable):
-       * symbols.c (set_default_buffer_slot_variable):
-       * symbols.c (verify_ok_for_buffer_local):
-       * symbols.c (symbol_is_constant):
-       * symbols.c (oblookup):
-       * symbols.c (Funintern):
-       * symbols.c (Fintern):
-       * symbols.c (check_obarray):
-       * sunplay.c:
-       * specifier.h (struct specifier_methods):
-       * specifier.h:
-       * specifier.c (specifier_instance):
-       * specifier.c (specifier_instance_from_inst_list):
-       * specifier.c (decode_locale_type):
-       * specifier.c (specifier_equal):
-       * specifier.c (finalize_specifier):
-       * specifier.c (prune_specifiers):
-       * specifier.c (kill_specifier_buffer_locals):
-       * sound.c (init_native_sound):
-       * sound.c:
-       * signal.c (alarm):
-       * search.c (Fmatch_data):
-       * search.c (match_limit):
-       * search.c (Freplace_match):
-       * search.c (skip_chars):
-       * search.c (scan_buffer):
-       * search.c:
-       * scrollbar.c (specifier_vars_of_scrollbar):
-       * scrollbar.c (Fscrollbar_set_hscroll):
-       * scrollbar.c (vertical_scrollbar_changed_in_window):
-       * scrollbar.c (release_window_mirror_scrollbars):
-       * scrollbar.c (free_scrollbar_instance):
-       * scrollbar-x.c:
-       * scrollbar-msw.c:
-       * s/msdos.h (O_BINARY):
-       * s/linux.h:
-       * s/freebsd.h (LIBS_TERMCAP):
-       * regex.c (re_match_2_internal):
-       * regex.c (compile_extended_range):
-       * regex.c (POP_FAILURE_POINT):
-       * regex.c (PUSH_FAILURE_POINT):
-       * redisplay.h (RESET_CHANGED_SET_FLAGS):
-       * redisplay.h:
-       * redisplay.h (struct display_line):
-       * redisplay.h (struct rune):
-       * redisplay.c (vars_of_redisplay):
-       * redisplay.c (redisplay_variable_changed):
-       * redisplay.c (UPDATE_CACHE_RETURN):
-       * redisplay.c (validate_line_start_cache):
-       * redisplay.c (mark_redisplay_structs):
-       * redisplay.c (mark_glyph_block_dynarr):
-       * redisplay.c (window_line_number):
-       * redisplay.c (redisplay_frame):
-       * redisplay.c (redisplay_window):
-       * redisplay.c (generate_modeline):
-       * redisplay.c (create_right_glyph_block):
-       * redisplay.c (create_left_glyph_block):
-       * redisplay.c (create_text_block):
-       * redisplay.c:
-       * redisplay-x.c (x_output_hline):
-       * redisplay-x.c (x_output_vertical_divider):
-       * redisplay-tty.c (tty_output_display_block):
-       * redisplay-output.c (output_display_line):
-       * redisplay-output.c:
-       * redisplay-msw.c (mswindows_output_vertical_divider):
-       * redisplay-msw.c (mswindows_ring_bell):
-       * redisplay-msw.c (mswindows_output_cursor):
-       * redisplay-msw.c:
-       * rangetab.c:
-       * ralloc.c:
-       * puresize.h (RAW_PURESIZE):
-       * profile.c (syms_of_profile):
-       * profile.c (Fstart_profiling):
-       * profile.c (sigprof_handler):
-       * profile.c:
-       * procimpl.h:
-       * process.c (vars_of_process):
-       * process.c (read_process_output):
-       * process.c (get_process):
-       * process.c:
-       * process-unix.c (unix_open_multicast_group):
-       * process-unix.c (unix_get_tty_name):
-       * process-unix.c (unix_send_process):
-       * process-unix.c (unix_reap_exited_processes):
-       * process-unix.c (unix_create_process):
-       * process-unix.c (unix_init_process_io_handles):
-       * process-unix.c (allocate_pty):
-       * process-unix.c:
-       * process-nt.c (nt_open_network_stream):
-       * process-nt.c (nt_update_status_if_terminated):
-       * process-nt.c (nt_finalize_process_data):
-       * process-nt.c:
-       * print.c (debug_short_backtrace):
-       * print.c (debug_backtrace):
-       * print.c (print_symbol):
-       * print.c (print_internal):
-       * print.c (print_cons):
-       * print.c (Fwrite_char):
-       * print.c (print_prepare):
-       * print.c (canonicalize_printcharfun):
-       * print.c (output_string):
-       * print.c:
-       * opaque.h:
-       * opaque.c (allocate_managed_opaque):
-       * opaque.c:
-       * offix.c (DndSetData):
-       * objects.c (face_boolean_create):
-       * objects.c (font_instantiate):
-       * objects.c (font_create):
-       * objects.c (color_create):
-       * objects.c (finalize_font_instance):
-       * objects.c (finalize_color_instance):
-       * objects.c:
-       * objects-x.c (x_font_instance_truename):
-       * objects-x.c:
-       * objects-x.c (x_initialize_font_instance):
-       * objects-x.c (allocate_nearest_color):
-       * objects-tty.c (tty_initialize_font_instance):
-       * objects-tty.c (tty_initialize_color_instance):
-       * objects-msw.c (mswindows_initialize_color_instance):
-       * ntproc.c (syms_of_ntproc):
-       * ntproc.c (Fwin32_set_process_priority):
-       * ntproc.c (sys_spawnve):
-       * ntproc.c:
-       * ntheap.c (get_data_end):
-       * nt.c (period):
-       * nt.c:
-       * nt.c (stat):
-       * nt.c (generate_inode_val):
-       * nt.c (sys_rename):
-       * nas.c:
-       * mule-wnnfns.c (Fwnn_hinsi_number):
-       * mule-wnnfns.c (Fwnn_yuragi):
-       * mule-wnnfns.c (Fwnn_common_learn):
-       * mule-wnnfns.c (Fwnn_suffix_learn):
-       * mule-wnnfns.c (Fwnn_prefix_learn):
-       * mule-wnnfns.c (Fwnn_okuri_learn):
-       * mule-wnnfns.c (Fwnn_complex_conv):
-       * mule-wnnfns.c (Fwnn_last_is_first):
-       * mule-wnnfns.c (Fwnn_bmodify_dict_add):
-       * mule-wnnfns.c (Fwnn_notrans_dict_add):
-       * mule-wnnfns.c (Fwnn_fiusr_dict_add):
-       * mule-wnnfns.c (Fwnn_fisys_dict_add):
-       * mule-wnnfns.c (Fwnn_hinsi_list):
-       * mule-wnnfns.c (Fwnn_fuzokugo_set):
-       * mule-wnnfns.c (Fwnn_dict_search):
-       * mule-wnnfns.c (Fwnn_word_toroku):
-       * mule-wnnfns.c (Fwnn_hindo_update):
-       * mule-wnnfns.c (Fwnn_bunsetu_henkou):
-       * mule-wnnfns.c (Fwnn_kakutei):
-       * mule-wnnfns.c (Fwnn_begin_henkan):
-       * mule-wnnfns.c (Fwnn_dict_comment):
-       * mule-wnnfns.c (Fwnn_dict_add):
-       * mule-wnnfns.c (Fwnn_open):
-       * mule-mcpath.c (mc_getcwd):
-       * mule-coding.c (vars_of_mule_coding):
-       * mule-coding.c (convert_to_external_format):
-       * mule-coding.c (encoding_marker):
-       * mule-coding.c (decoding_marker):
-       * mule-coding.c (Fcopy_coding_system):
-       * mule-coding.c (Fmake_coding_system):
-       * mule-coding.c (Fcoding_system_list):
-       * mule-coding.c (Ffind_coding_system):
-       * mule-coding.c (symbol_to_eol_type):
-       * mule-coding.c:
-       * mule-charset.c (complex_vars_of_mule_charset):
-       * mule-charset.c (vars_of_mule_charset):
-       * mule-charset.c (Fset_charset_ccl_program):
-       * mule-charset.c (struct charset_list_closure):
-       * mule-charset.c (Ffind_charset):
-       * mule-charset.c (make_charset):
-       * mule-charset.c (non_ascii_valid_char_p):
-       * mule-charset.c:
-       * mule-ccl.c (ccl_driver):
-       * mule-canna.c (c2mu):
-       * mule-canna.c (Fcanna_henkan_begin):
-       * mule-canna.c (Fcanna_parse):
-       * mule-canna.c (Fcanna_store_yomi):
-       * mule-canna.c (Fcanna_touroku_string):
-       * mule-canna.c (Fcanna_initialize):
-       * minibuf.c:
-       * menubar.c (menu_parse_submenu_keywords):
-       * menubar-x.c (make_dummy_xbutton_event):
-       * menubar-x.c (set_frame_menubar):
-       * menubar-x.c (menu_item_descriptor_to_widget_value_1):
-       * menubar-x.c:
-       * menubar-msw.h:
-       * menubar-msw.c (mswindows_popup_menu):
-       * menubar-msw.c (mswindows_update_frame_menubars):
-       * menubar-msw.c (mswindows_handle_wm_command):
-       * menubar-msw.c (unsafe_handle_wm_initmenu_1):
-       * menubar-msw.c (unsafe_handle_wm_initmenupopup_1):
-       * menubar-msw.c (update_frame_menubar_maybe):
-       * menubar-msw.c (populate_or_checksum_helper):
-       * menubar-msw.c (empty_menu):
-       * menubar-msw.c:
-       * md5.c:
-       * marker.c (set_marker_internal):
-       * marker.c (print_marker):
-       * malloc.c:
-       * make-src-depend:
-       * lstream.c (lisp_buffer_rewinder):
-       * lstream.c (mark_lstream):
-       * lrecord.h:
-       * lrecord.h (struct lrecord_header):
-       * lread.c (readevalloop):
-       * lread.c (locate_file):
-       * lread.c (locate_file_in_directory):
-       * lread.c (Flocate_file):
-       * lread.c (load_force_doc_string_unwind):
-       * lread.c (ebolify_bytecode_constants):
-       * lread.c:
-       * lisp.h:
-       * lisp-union.h:
-       * lisp-disunion.h:
-       * linuxplay.c (linux_play_data_or_file):
-       * linuxplay.c (audio_init):
-       * line-number.c:
-       * keymap.h:
-       * keymap.c (describe_map):
-       * keymap.c (describe_map_mapper):
-       * keymap.c (Fdescribe_bindings_internal):
-       * keymap.c (Fsingle_key_description):
-       * keymap.c (map_keymap_sorted):
-       * keymap.c (get_relevant_keymaps):
-       * keymap.c (Flookup_key):
-       * keymap.c (raw_lookup_key_mapper):
-       * keymap.c (Fdefine_key):
-       * keymap.c (Fevent_matches_key_specifier_p):
-       * keymap.c (key_desc_list_to_event):
-       * keymap.c (define_key_parser):
-       * keymap.c (define_key_check_and_coerce_keysym):
-       * keymap.c (keymap_submaps):
-       * keymap.c (keymap_store_internal):
-       * keymap.c (keymap_delete_inverse_internal):
-       * keymap.c (keymap_store_inverse_internal):
-       * keymap.c (print_keymap):
-       * keymap.c (Lisp_Keymap):
-       * keymap.c:
-       * intl.c:
-       * insdel.c (convert_bufbyte_string_into_emchar_dynarr):
-       * insdel.c (make_gap):
-       * input-method-xlib.c (get_XIM_input):
-       * input-method-xlib.c (XIM_init_frame):
-       * imgproc.c:
-       * hash.h:
-       * hash.c:
-       * gui.c:
-       * gui-x.c (button_item_to_widget_value):
-       * gui-x.c (popup_selection_callback):
-       * glyphs.h (struct image_instantiator_methods):
-       * glyphs.c (mark_glyph_cachels):
-       * glyphs.c (Fglyph_type):
-       * glyphs.c (image_instantiate):
-       * glyphs.c (image_create):
-       * glyphs.c (make_image_instance_1):
-       * glyphs.c (finalize_image_instance):
-       * glyphs.c:
-       * glyphs-x.c (finalize_subwindow):
-       * glyphs-x.c (xface_validate):
-       * glyphs-x.c (x_locate_pixmap_file):
-       * glyphs-x.c (convert_EImage_to_XImage):
-       * glyphs-msw.c:
-       * glyphs-msw.c (mswindows_resource_instantiate):
-       * glyphs-msw.c (xpm_to_eimage):
-       * glyphs-msw.c (convert_EImage_to_DIBitmap):
-       * glyphs-eimage.c (tiff_instantiate):
-       * glyphs-eimage.c (png_instantiate):
-       * glyphs-eimage.c (struct png_error_struct):
-       * glyphs-eimage.c (gif_memory_storage):
-       * glyphs-eimage.c:
-       * gifrlib.h:
-       * getloadavg.c (getloadavg):
-       * getloadavg.c:
-       * gdbinit:
-       * free-hook.c (log_gcpro):
-       * free-hook.c (check_malloc):
-       * free-hook.c (check_free):
-       * free-hook.c (ROUND_UP_TO_PAGE):
-       * free-hook.c:
-       * frame.h (struct frame):
-       * frame.h:
-       * frame.c (change_frame_size_1):
-       * frame.c (allocate_frame_core):
-       * frame.c:
-       * frame-x.c (x_focus_on_frame):
-       * frame-x.c (x_init_frame_2):
-       * frame-x.c (x_popup_frame):
-       * frame-x.c (xemacs_XtPopup):
-       * frame-x.c:
-       * frame-x.c (Foffix_start_drag_internal):
-       * frame-x.c (x_cde_destroy_callback):
-       * frame-x.c (x_wm_hack_wm_protocols):
-       * frame-tty.c (tty_frame_visible_p):
-       * frame-msw.c (mswindows_make_frame_invisible):
-       * frame-msw.c (mswindows_after_init_frame):
-       * frame-msw.c (mswindows_init_frame_1):
-       * fns.c (syms_of_fns):
-       * fns.c (Fbase64_decode_string):
-       * fns.c (Fnconc):
-       * fns.c (Ffillarray):
-       * fns.c (Fobject_plist):
-       * fns.c (Fget):
-       * fns.c (Fcanonicalize_lax_plist):
-       * fns.c (Fcanonicalize_plist):
-       * fns.c (Fplist_remprop):
-       * fns.c (Fplist_get):
-       * fns.c (advance_plist_pointers):
-       * fns.c (internal_plist_put):
-       * fns.c (Fnreverse):
-       * fns.c (Fremassq):
-       * fns.c (Felt):
-       * fns.c (Fsubstring):
-       * fns.c (Fbvconcat):
-       * fns.c (Flength):
-       * fns.c (length_with_bytecode_hack):
-       * fns.c (print_bit_vector):
-       * fns.c:
-       * floatfns.c (Ffloor):
-       * floatfns.c:
-       * floatfns.c (in_float_error):
-       * fileio.c (Ffile_modes):
-       * fileio.c (Fexpand_file_name):
-       * fileio.c (Fmake_temp_name):
-       * fileio.c (Ffile_name_nondirectory):
-       * fileio.c (Ffile_name_directory):
-       * file-coding.h:
-       * file-coding.c (vars_of_mule_coding):
-       * file-coding.c (convert_to_external_format):
-       * file-coding.c (encoding_marker):
-       * file-coding.c (decoding_marker):
-       * file-coding.c (Fcopy_coding_system):
-       * file-coding.c (Fmake_coding_system):
-       * file-coding.c (struct coding_system_list_closure):
-       * file-coding.c (Ffind_coding_system):
-       * file-coding.c (symbol_to_eol_type):
-       * file-coding.c:
-       * faces.h (struct face_cachel):
-       * faces.c (vars_of_faces):
-       * faces.c (face_property_was_changed):
-       * faces.c (mark_face_cachels):
-       * faces.c (temporary_faces_list):
-       * faces.c (struct face_list_closure):
-       * faces.c:
-       * extents.h (struct extent):
-       * extents.c (vars_of_extents):
-       * extents.c (struct copy_string_extents_1_arg):
-       * extents.c (add_string_extents_mapper):
-       * extents.c (Fextent_property):
-       * extents.c (Fset_extent_property):
-       * extents.c (symbol_to_glyph_layout):
-       * extents.c (properties_equal):
-       * extents.c (print_extent):
-       * extents.c (print_extent_1):
-       * extents.c (extent_in_region_p):
-       * extents.c (gap_array_make_gap):
-       * extents.c:
-       * events.h (struct Lisp_Event):
-       * events.h:
-       * events.c (Fevent_properties):
-       * events.c (format_event_object):
-       * events.c (Fmake_event):
-       * events.c (event_equal):
-       * events.c (print_event):
-       * events.c (mark_event):
-       * event-stream.c ((read-char)
-       * event-stream.c (vars_of_event_stream):
-       * event-stream.c (syms_of_event_stream):
-       * event-stream.c (Fset_recent_keys_ring_size):
-       * event-stream.c (Fsit_for):
-       * event-stream.c (Fnext_event):
-       * event-stream.c (execute_help_form):
-       * event-stream.c (maybe_kbd_translate):
-       * event-stream.c:
-       * event-msw.c (vars_of_event_mswindows):
-       * event-msw.c (mswindows_wnd_proc):
-       * event-msw.c (mswindows_need_event):
-       * event-msw.c (mswindows_drain_windows_queue):
-       * event-msw.c (mswindows_pump_outstanding_events):
-       * event-msw.c:
-       * event-msw.c (slurp_thread):
-       * event-msw.c (struct ntpipe_slurp_stream):
-       * event-msw.c (HANDLE_TO_USID):
-       * event-Xt.c (emacs_Xt_handle_magic_event):
-       * event-Xt.c (x_event_to_emacs_event):
-       * event-Xt.c (x_reset_modifier_mapping):
-       * event-Xt.c (x_reset_key_mapping):
-       * event-Xt.c:
-       * eval.c (syms_of_eval):
-       * eval.c (warn_when_safe):
-       * eval.c (warn_when_safe_lispobj):
-       * eval.c (Fbacktrace_frame):
-       * eval.c (Fbacktrace):
-       * eval.c (top_level_set):
-       * eval.c (unbind_to_hairy):
-       * eval.c (specbind_magic):
-       * eval.c (specbind_unwind_wasnt_local):
-       * eval.c (call2_trapping_errors):
-       * eval.c (call1_trapping_errors):
-       * eval.c (catch_them_squirmers_call2):
-       * eval.c (call0_trapping_errors):
-       * eval.c (run_hook_trapping_errors):
-       * eval.c (catch_them_squirmers_eval_in_buffer):
-       * eval.c (call4_in_buffer):
-       * eval.c (call3_in_buffer):
-       * eval.c (call2_in_buffer):
-       * eval.c (call1_in_buffer):
-       * eval.c (call0_in_buffer):
-       * eval.c (run_hook):
-       * eval.c (run_hook_with_args_in_buffer):
-       * eval.c (Fapply):
-       * eval.c (Feval):
-       * eval.c (do_autoload):
-       * eval.c (un_autoload):
-       * eval.c (Fautoload):
-       * eval.c (Finteractive_p):
-       * eval.c (Fcommand_execute):
-       * eval.c (signal_quit):
-       * eval.c (call_with_suspended_errors):
-       * eval.c (signal_error):
-       * eval.c (return_from_signal):
-       * eval.c (Fcall_with_condition_handler):
-       * eval.c (run_condition_case_handlers):
-       * eval.c (condition_case_1):
-       * eval.c (Funwind_protect):
-       * eval.c (unwind_to_catch):
-       * eval.c (internal_catch):
-       * eval.c (Fmacroexpand_internal):
-       * eval.c (Fuser_variable_p):
-       * eval.c (Fdefconst):
-       * eval.c (Fdefvar):
-       * eval.c (Ffunction):
-       * eval.c (signal_call_debugger):
-       * eval.c (call_debugger):
-       * eval.c:
-       * emacs.c (main):
-       * emacs.c (sort_args):
-       * emacs.c (main_1):
-       * elhash.h:
-       * elhash.c:
-       * editfns.c (Fencode_time):
-       * editfns.c (Fdecode_time):
-       * editfns.c (Fuser_full_name):
-       * editfns.c:
-       * editfns.c (save_excursion_restore):
-       * ecrt0.c:
-       * dynarr.c:
-       * doprnt.c (emacs_doprnt_1):
-       * doc.c (verify_doc_mapper):
-       * doc.c (Fsnarf_documentation):
-       * doc.c (Fdocumentation):
-       * dll.c:
-       * dired.c (user_name_completion):
-       * dired.c (Fdirectory_files):
-       * dialog-x.c:
-       * dialog-msw.c:
-       * dgif_lib.c (FreeSavedImages):
-       * dgif_lib.c (DGifGetImageDesc):
-       * device.h:
-       * device.h (struct device):
-       * device.c (Fselect_device):
-       * device.c (allocate_device):
-       * device.c:
-       * device-x.c (Fx_keysym_on_keyboard_p):
-       * device-x.c (Fx_valid_keysym_name_p):
-       * device-x.c (x_IO_error_handler):
-       * device-x.c (x_delete_device):
-       * device-x.c (x_finish_init_device):
-       * device-x.c (x_init_device):
-       * device-x.c:
-       * device-msw.c (mswindows_init_device):
-       * dbxrc:
-       * database.c (vars_of_database):
-       * database.c (Fput_database):
-       * database.c (Fopen_database):
-       * database.c (berkdb_remove):
-       * database.c (berkdb_put):
-       * database.c (Fdatabasep):
-       * database.c (print_database):
-       * database.c:
-       * data.c (vars_of_data):
-       * data.c (syms_of_data):
-       * data.c (init_errors_once_early):
-       * data.c (prune_weak_lists):
-       * data.c (finish_marking_weak_lists):
-       * data.c (print_weak_list):
-       * data.c (Fmod):
-       * data.c (Fstring_to_number):
-       * data.c (Fnumber_to_string):
-       * data.c (Findirect_function):
-       * data.c (Fsetcdr):
-       * data.c (Ffloatp):
-       * data.c (Fsubr_interactive):
-       * data.c (Farrayp):
-       * data.c (Fkeywordp):
-       * data.c (Fnull):
-       * data.c:
-       * console.h (CONSOLE_NAME):
-       * console.h:
-       * console.c (vars_of_console):
-       * console.c (Fselect_console):
-       * console.c:
-       * console-x.h (DEVICE_X_COLORMAP):
-       * console-x.h (struct x_device):
-       * console-x.c (x_device_to_console_connection):
-       * console-tty.h (CONSOLE_TTY_FINAL_CURSOR_Y):
-       * console-tty.c (tty_init_console):
-       * console-tty.c:
-       * console-msw.h (struct mswindows_frame):
-       * conslots.h:
-       * config.h.in:
-       * cmds.c (internal_self_insert):
-       * cmds.c (Fforward_line):
-       * cmds.c (Fforward_char):
-       * cmds.c:
-       * cmdloop.c:
-       * chartab.c (mark_char_table_entry):
-       * chartab.c:
-       * casefiddle.c (casify_word):
-       * callproc.c (child_setup):
-       * callproc.c (Fcall_process_internal):
-       * callproc.c:
-       * callint.c (Fcall_interactively):
-       * bytecode.h:
-       * bytecode.c (execute_rare_opcode):
-       * bytecode.c (execute_optimized_program):
-       * bytecode.c:
-       * bufslots.h:
-       * buffer.h (BUFFER_REALLOC):
-       * buffer.h (GET_CHARPTR_INT_DATA_ALLOCA):
-       * buffer.h (GET_CHARPTR_EXT_DATA_ALLOCA):
-       * buffer.h:
-       * buffer.h (MAP_INDIRECT_BUFFERS):
-       * buffer.h (CHECK_LIVE_BUFFER):
-       * buffer.c (init_initial_directory):
-       * buffer.c (complex_vars_of_buffer):
-       * buffer.c (vars_of_buffer):
-       * buffer.c (finish_init_buffer):
-       * buffer.c (Fget_file_buffer):
-       * buffer.c (Fbuffer_list):
-       * buffer.c (mark_buffer):
-       * balloon_help.c (balloon_help_move_to_pointer):
-       * balloon_help.c (show_help):
-       * balloon_help.c:
-       * backtrace.h:
-       * alloc.c (garbage_collect_1):
-       * alloc.c (sweep_strings):
-       * alloc.c (sweep_compiled_functions):
-       * alloc.c (sweep_bit_vectors_1):
-       * alloc.c (sweep_vectors_1):
-       * alloc.c (sweep_lcrecords_1):
-       * alloc.c (tick_lcrecord_stats):
-       * alloc.c (pure_string_sizeof):
-       * alloc.c (mark_conses_in_list):
-       * alloc.c (mark_object):
-       * alloc.c (report_pure_usage):
-       * alloc.c (make_pure_float):
-       * alloc.c (make_pure_string):
-       * alloc.c (free_managed_lcrecord):
-       * alloc.c (mark_string):
-       * alloc.c (noseeum_make_marker):
-       * alloc.c (allocate_event):
-       * alloc.c (Fbit_vector):
-       * alloc.c (Fvector):
-       * alloc.c (make_float):
-       * alloc.c (Fmake_list):
-       * alloc.c (Flist):
-       * alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC):
-       * alloc.c (PUT_FIXED_TYPE_ON_FREE_LIST):
-       * alloc.c (DECLARE_FIXED_TYPE_ALLOC):
-       * alloc.c (dbg_constants):
-       * alloc.c (gc_record_type_p):
-       * alloc.c (free_lcrecord):
-       * alloc.c (xmalloc):
-       * alloc.c (NOSEEUM_INCREMENT_CONS_COUNTER):
-       * abbrev.c:
-       * Makefile.in.in (mostlyclean):
-       * Makefile.in.in (external_client_xlib_objs_nonshared):
-       * Makefile.in.in (temacs_link_args):
-       * Makefile.in.in (release):
-       * Makefile.in.in (dnd_objs):
-       * Makefile.in.in (objs):
-       * Makefile.in.in (PROGNAME):
-       * EmacsShell.c: cast strings to (XtPointer)
-       * EmacsFrame.c: cast strings to (XtPointer)
-       - mega patch
-       - rewrite basic lisp functions for speed
-       - rewrite bytecode interpreter for speed
-       - rewrite list looping constructs for speed and safety using
-         tortoise/hare.
-       - use size_t where appropriate.
-       - new hashtable implementation
-       - cleanup implementation of opaques
-       - opaques can now be purecopy'ed
-       - move some cl functionality into C for speed.
-       - remove last remaining VMS support
-       - spelling fixes
-       - improve gdb/dbx debugger support
-       - move pure.c back into alloc.c for performance
-       - enable report_pure_usage() if --memory-usage-stats
-       - remove remnants of Energize support (EMACS_BTL, cadillac...)
-       - don't use symbols with leading `_' or embedded `__'
-       - globally cleanup duplicated semicolons `;;'
-       - I give in on %p vs %lx - we use printf("%lx",(long) p)
-         globally.
-       - globally replace O_NDELAY with O_NONBLOCK.
-       - globally replace CDISABLE with _POSIX_VDISABLE.
-       - use O_RDONLY and O_RDWR instead of magic `0' and `2'.
-       - define (and maybe use!) STDERR_FILENO and friends.
-       - add support for macros defined in C
-       - `when', `unless', `not' and `defalias' now defined in C,
-         so that they are universally available.
-       - rename defvar_mumble to defvar_magic
-       - rename RETURN__ to RETURN_SANS_WARNINGS
-       - use consistent style of initial caps in error messages
-       - implement last, butlast, nbutlast, copy-list in C.
-       - provide typedefs for all struct Lisp_foo types
-       - Lisp_Objects must be initialized to Qnil rather than 0.
-       - make sure XEmacs runs (slowly) with always_gc == 1;
-       - fast and safe LOOP_* macros
-       - change calls to XSETOBJ to XSETFOO
-       - replace calls to XSETINT by make_int()
-       - plug up memory leaks
-       - use style markobj (foo), not silly ((markobj) (foo))
-       - use XFLOAT_DATA (obj) instead of float_data (XFLOAT (obj))
-
-1998-12-02  P. E. Jareth Hein  <jareth@camelot.co.jp>
-
-       * unexec.c: Changed a #ifndef statement to fix XEmacs on BSDI 3.0
-
-1998-11-28  SL Baur  <steve@altair.xemacs.org>
-
-       * XEmacs 21.2-beta4 is released.
-
-1998-11-27  SL Baur  <steve@altair.xemacs.org>
-
-       * mule-charset.c (complex_vars_of_mule_charset): Fix graphic
-       property in control-1 charset.
-       From Julian Bradfield <jcb@daimi.au.dk>
-
-1998-11-26  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * gui-x.c (button_item_to_widget_value): Ignore :key-sequence
-       keyword.
-       Add stub for :label.
-
-       * gui.c (gui_item_add_keyval_pair): ditto.
-
-       * menubar-x.c (menu_item_descriptor_to_widget_value_1): Ignore
-       :key-sequence keyword.
-       Add stub for:label.
-       Support :active for submenus like the Windows code and FSF Emacs.
-
-1998-11-27  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * dired.c (make_directory_hash_table): make_string() is OK because
-       readdir() Mule-encapsulates.
-
-1998-11-26  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (Fbase64_encode_string): Fix docstring.
-       (Fbase64_decode_string): Ditto.
-
-1998-11-26  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * editfns.c (Ftranslate_region): Use
-       convert_bufbyte_string_into_emchar_string().
-
-1998-11-25  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * editfns.c (Ftranslate_region): Accept vectors and char-tables as
-       well as strings.
-       (Ftranslate_region): Turn table into an array of Emchars for
-       larger regions.
-
-1998-11-25  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * chartab.c (Freset_char_table): Fix wrong placement of #endif.
-
-1998-11-24  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * chartab.c (Freset_char_table): Don't blindly fill chartables of
-       type `char' with nils.
-
-       * chartab.c (canonicalize_char_table_value): Coerce ints to chars
-       for tables of type `char'.
-
-1998-11-26  Didier Verna  <verna@inf.enst.fr>
-
-       * input-method-xlib.c (Initialize_Locale): don't call
-       XtSetLanguageProc. We've done the whole work here.
-       * input-method-xfs.c (Initialize_Locale): ditto.
-       * input-method-motif.c (Initialize_Locale): ditto.
-
-1998-11-26  Didier Verna  <verna@inf.enst.fr>
-
-       * process-unix.c (unix_create_process): handle properly
-       Vfile_name_coding_system for converting the program and directory
-       names.
-
-1998-11-27  SL Baur  <steve@altair.xemacs.org>
-
-       * m/arm.h: New file.
-       From James LewisMoss <dres@ioa.com>
-
-1998-11-27  Takeshi Hagiwara  <hagiwara@ie.niigata-u.ac.jp>
-
-       * m/mips-nec.h:
-       Fix the realpath() problem of UnixWare2.1.3.
-       Patches for NEC's sysv4.2 machine.
-
-1998-11-25  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * dired.c (Fdirectory_files): Remove redundant code.
-
-1998-11-25  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (free_malloced_ptr): New function.
-       (XMALLOC_OR_ALLOCA): New macro.
-       (XMALLOC_UNBIND): Ditto.
-       (Fbase64_encode_region): Use malloc() for large blocks; arrange it
-       to be freed in case of non-local exit.
-       (Fbase64_encode_string): Ditto.
-       (Fbase64_decode_region): Ditto.
-       (Fbase64_decode_string): Ditto.
-       (STORE_BYTE): New macro.
-       (base64_decode_1): Use it.
-
-1998-11-25  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (base64_value_to_char): Base64 stuff.
-
-1998-11-24  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * editfns.c (Fbuffer_substring): New function.
-
-       * lisp.h: Declare make_string_from_buffer_no_extents().
-
-       * insdel.c (make_string_from_buffer_1): New function.
-       (make_string_from_buffer_no_extents): Ditto.
-
-1998-11-15  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
-
-       * linuxplay.c: Including <fcntl.h> instead of <sys/fcntl.h> makes
-       sound work on AIX with OSS installed.  Linux should still work.
-
-1998-11-03  Andy Piper  <andyp@parallax.co.uk>
-
-       * config.h.in: name change for cygwin/version.h
-
-       * configure.in: check for cygwin/version.h now.
-
-       * cygwin32.h: track CYGWIN_DLL_VERSION_MAJOR ->
-       CYGWIN_VERSION_DLL_MAJOR name change in cygwin b20.
-       move cygwin32/version.h to cygwin/version.h
-
-1998-11-03  Olivier Galibert  <galibert@pobox.com>
-
-       * lisp.h  (struct  Lisp_Bit_Vector): Fix declaration of  bits from
-       int to long.
-
-1998-10-22  Andy Piper  <andyp@parallax.co.uk>
-
-       * cygwin32.h: track CYGWIN_DLL_VERSION_MAJOR ->
-       CYGWIN_VERSION_DLL_MAJOR name change in cygwin b20.
-       enable BROKEN_SIGIO under b20 to make QUIT work.
-
-1998-10-22  Andy Piper  <andyp@parallax.co.uk>
-
-       * frame-msw.c (mswindows_size_frame_internal): force frame sizing
-       to fit within the constraints of the screen size. I.e. make the
-       frame small enough to fit and move it if some of it will be
-       off-screen.
-
-1998-10-19  Greg Klanderman  <greg@alphatech.com>
-
-       * dired.c: conditionalize inclusion of user-name-completion
-       primitives on non-Windows NT.  The needed functions don't exist on NT.
-
-1998-11-24  SL Baur  <steve@altair.xemacs.org>
-
-       * gifrlib.h: Clean up types for 64 bit compile.
-       * dgif_lib.c (DGifInitRead): Ditto.
-       (MakeSavedImage): Ditto.
-       * emacs.c (decode_path): Ditto.
-       From Steve Carney <carney@pa.dec.com>
-
-1998-10-16  William M. Perry  <wmperry@aventail.com>
-
-       * glyphs-msw.c (bitmap_table): Fixed typo in builtin bitmaps
-         (cehckboxes instead of checkboxes).
-
-1998-10-15  SL Baur  <steve@altair.xemacs.org>
-
-       * XEmacs 21.2-beta3 is released.
-
-1998-10-13  Raymond Toy  <toy@rtp.ericsson.se>
-
-       * runemacs.c (WinMain): If the basename is "rungnuclient.exe", run
-       gnuclient.  Otherwise, we run xemacs as we always did.  This gets
-       rid of the annoying DOS window when running gnuclient.
-
-1998-10-13  Andy Piper  <andyp@parallax.co.uk>
-
-       * dragdrop.c (vars_of_dragdrop): rename HAVE_MSWINDOWS ->
-       HAVE_MS_WINDOWS typo.
-
-1998-10-13  SL Baur  <steve@altair.xemacs.org>
-
-       * process-unix.c (unix_send_process): Set closed flag on writable
-       pipe after SIGPIPE is received and before we call deactivate_process.
-
-1998-10-03  Gunnar Evermann  <ge204@eng.cam.ac.uk>
-
-       * window.c (Fset_window_start): respect narrowing when
-       checking wheter start is at the beginning of a line.
-       (Fset_window_buffer): Ditto
-       Fixes repeatable crash in VM.
-
-1998-10-09  SL Baur  <steve@altair.xemacs.org>
-
-       * window.c (specifier_vars_of_window): Set default vertical
-       divider width to 1 on ttys.
-
-1998-10-08  Martin Buchholz  <martin@xemacs.org>
-
-       * alloc.c:
-       * unexec.c:
-       * malloc.c:
-       Add <stddef.h> to get ptrdiff_t declaration
-
-1998-10-07  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * scrollbar-msw.c: Use the same vertical scrollbar drag hack as
-         is used for Motif or Lucid scrollbars under X.
-
-1998-10-08  Pierre Wendling  <pw@ebc.vbe.dec.com>
-
-       * m/alpha.h (UNEXEC): quoted to avoid bad expansion when running
-       `configure'
-
-1998-10-06  Takeshi Hagiwara  <hagiwara@ie.niigata-u.ac.jp>
-
-       * frame-x.c (x_delete_frame): Fix an argument of XtDestroyWidget.
-
-1998-10-05  Andy Piper  <andyp@parallax.co.uk>
-
-       * s/cygwin32.h: more cygwin b20 reorganisation.
-
-1998-10-01  Raymond Toy  <toy@rtp.ericsson.se>
-
-       * nas.c: Added necessary support functions to be able to handle
-       WAVE files in memory, just like the support for SND files in
-       memory.
-
-1998-09-30  SL Baur  <steve@altair.xemacs.org>
-
-       * callproc.c (child_setup): Fix spelling typo.
-
-1998-09-29  SL Baur  <steve@altair.xemacs.org>
-
-       * XEmacs 21.2-beta2 is released.
-
-1998-09-27  P. E. Jareth Hein  <jareth@camelot.co.jp>
-
-       * regex.c (re_match_2_internal): Add in code to reset lowest_active_reg
-       to prevent memory corruption in the case of jumping out of a series of
-       nested match patterns. This is a rather brute force approach, though.
-
-1998-09-02  Andy Piper  <andyp@parallax.co.uk>
-
-       * config.h.in: ditto.
-
-       * s/cygwin32.h: rearrange declarations to cope with cygwin
-       b20. Include cygwin32/version.h if it exists.
-
-1998-09-20  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * device-msw.c (mswindows_init_device): Call new
-         mswindows_enumerate_fonts() function in objects-msw.c instead
-         of font_enum_callback_1() to enumerate fonts.
-
-         font_enum_callback_1() and _2() moved to objects-msw.c.
-
-       * faces.c (complex_vars_of_faces): Make the mswindows default
-         face font fully specified and provide some fallbacks.
-
-       * objects-msw.c: font_enum_callback_1() and _2() moved here
-         from objects-msw.c. Obtain the enumerated font's character
-         sets by table lookup instead of using the locale-specific
-         string provided by Windows.
-
-         New public non-method mswindows_enumerate_fonts() that fills
-         in the supplied mswindows device's font list.
-
-         mswindows_initialize_font_instance: Use the supplied name
-         variable instead of f->name when signalling errors. Match font
-         weights and character sets using lookup tables which handle
-         spaces instead of by frobbing.
-
-1998-09-20  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * process-nt.c: Define an arbitrary limit, FRAGMENT_CODE_SIZE,
-         on the size of code fragments passed to run_in_other_process.
-
-         run_in_other_process(): Use FRAGMENT_CODE_SIZE to determine
-         the amount of memory to allocate in the other process.
-
-         Removed sigkill_code_end(), sigint_code_end() and
-         sig_enable_code_end() since they are now redundant.
-
-         send_signal() and enable_child_signals(): Don't try to work
-         out the end of the code fragments passed to
-         run_in_other_process()
-
-1998-09-10  Kazuyuki IENAGA  <ienaga@jsys.co.jp>
-
-       * src/s/freebsd.h: Added __ELF__ and compiler/liker flags for
-       FreeBSD-current.
-
-       * src/unexelf.c: Partially synched with FSF's 20.3.
-
-1998-09-10  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * insdel.c (signal_after_change): Map across indirect buffers
-       here, and not in the upper-level functions.
-       (signal_first_change): Don't check for Armageddon.
-       (signal_before_change): Map across indirect buffers here.
-       (prepare_to_modify_buffer): ...and here.
-
-1998-09-09  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * insdel.c (signal_after_change): Add return value.
-       (buffer_insert_string_1): Use it.
-       (buffer_delete_range): Ditto.
-       (buffer_replace_char): Ditto.
-       (cancel_multiple_change): Map the indirect buffers.
-
-1998-09-06  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * insdel.c (init_buffer_text): Remove INDIRECT_P parameter.
-       (uninit_buffer_text): Ditto.
-
-       * buffer.c (Fmake_indirect_buffer): Implement stricter
-       error-checking.
-
-1998-09-04  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * insdel.c (change_function_restore): Reverse order of
-       function-call and assignment.
-       (first_change_hook_restore): Ditto.
-
-       * extents.c (mark_extent_auxiliary): Mark them.
-       (Fset_extent_property): Set them.
-       (Fextent_property): Get them.
-       (Fextent_properties): Ditto.
-       (vars_of_extents): Set their default.
-
-       * extents.h (struct extent_auxiliary): Add before_change_functions
-       and after_change_functions.
-
-       * insdel.c (signal_before_change): Use it.
-       (signal_after_change): Ditto.
-
-       * extents.c (report_extent_modification): New function.
-
-       * insdel.c (signal_before_change): Don't check for Armageddon.
-       (signal_after_change): Ditto.
-
-1998-09-11  Gunnar Evermann  <Gunnar.Evermann@nats.informatik.uni-hamburg.de>
-
-       * redisplay.c (redisplay_window): make sure a new starting point
-       is chosen if it somehow got moved from the beginning of the line
-       -- this can happen because Fwiden was called recently.
-
-       * window.c (Fset_window_start): set start_at_line_beg correctly
-       (Fset_window_buffer): Ditto
-
-1998-09-06  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * insdel.c (init_buffer_text): Remove INDIRECT_P parameter.
-       (uninit_buffer_text): Ditto.
-
-       * buffer.c (Fmake_indirect_buffer): Implement stricter
-       error-checking.
-
-1998-05-14  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * emacs.c (main_1): Removed references to *vars_of_filelock.
-
-       * lisp.h: Added Fsystem_name.
-
-       * filelock.c: Replaced by version from FSF 20.2. Now implements
-       locking by using symlinks which is NFS safe. However keep the
-       GCPRO's in lock_file and the calls to callx_in_buffer like our old
-       version (and of course use ansi C, acessor macros, etc).
-
-1998-09-06  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * process-unix.c (unix_create_process): Reset SIGHUP handler to
-       SIG_DFL. We now try to conserve any inherted SIG_IGN settings
-       in init_signals_very_early. However these should not be passed
-       on to children attached to the new pty.
-
-1998-08-28  Andy Piper  <andyp@parallax.co.uk>
-
-       * glyphs-eimage.c (png_instantiate_unwind): clean up eimage after use.
-
-1998-09-07  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * fileio.c (file-name-directory, file_name_as_directory):
-         Don't call CORRECT_DIR_SEPS, even when #defined WINDOWSNT.
-
-1998-09-02  Andy Piper  <andyp@parallax.co.uk>
-
-       * emacs.c (main_1): init_ralloc() if initialised and we have REL_ALLOC
-
-       * ralloc.c: uncomment __morecore.
-
-1998-09-92  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * event-msw.c(winsock_writer): Supply a dummy 4th argument to
-         WriteFile() to fix a winsock 1.x bug on Win95.
-
-1998-08-28  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * event-Xt.c (emacs_Xt_mapping_action): Check for device being
-       deleted.
-       (x_event_to_emacs_event): Ditto.
-       (emacs_Xt_handle_focus_event): Ditto.
-       (emacs_Xt_handle_magic_event): Ditto.
-
-       * console-x.h (struct x_device): New flag being_deleted.
-       (DEVICE_X_BEING_DELETED): New macro.
-
-       * device-x.c (x_IO_error_handler): Throw to top-level instead of
-       returning.  Before doing that, set the being_deleted flag on the
-       device.
-
-1998-08-27  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * device-x.c (x-seppuku-on-epipe): Removed.
-
-1998-08-26  Gunnar Evermann  <Gunnar.Evermann@nats.informatik.uni-hamburg.de>
-
-       * frame-x.c (x_delete_frame): Flush the X output buffer after
-       calling XtDestroyWidget to ensure that the windows are really
-       killed right now.
-
-1998-08-26  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * menubar-x.c (my_run_hook): New unused function.
-       (pre_activate_callback): Use run_hook for Qactivate_menubar_hook,
-       since we ignore the results of the contained functions anyway.
-
-1998-08-26  P. E. Jareth Hein  <jareth@camelot.co.jp>
-
-       * glyphs-eimage.c (gif_instantiate): Fix a crash in handling
-       interlaced GIF files that are smaller than 4 lines high...
-
-1998-08-31  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * buffer.c (map_over_sharing_buffers): Deleted.
-
-       * insdel.c (MAP_INDIRECT_BUFFERS): Move to buffer.h.
-
-       * buffer.c (Fkill_buffer): Keep indirect_children updated while
-       killing them.
-
-1998-08-31  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * insdel.c (buffer_insert_string_1): Advance the point bytind in
-       all the buffers.
-       (buffer_delete_range): Ditto.
-
-       * marker.c (init_buffer_markers): Set point-marker to the value of
-       point in an indirect buffer.
-
-1998-08-30  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * undo.c (undo_prelude): Test last-undo-buffer against base
-       buffer.
-
-       * insdel.c (MAP_INDIRECT_BUFFERS): Use it.
-
-       * buffer.h (BUFFER_BASE_BUFFER): New macro.
-
-1998-08-30  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * insdel.c (init_buffer_text): Initialize it here.
-
-       * line-number.c: Address line_number_cache through buffer->text.
-
-       * buffer.c (mark_buffer): Mark line number cache.
-
-       * bufslots.h (line_number_cache): Move to struct buffer_text.
-
-       * insdel.c (buffer_insert_string_1): Propagate signals and changes
-       across the children buffers.
-       (buffer_delete_range): Ditto.
-       (buffer_replace_char): Ditto.
-       (gap_left): Ditto.
-       (gap_right): Ditto.
-
-       * insdel.c (MAP_INDIRECT_BUFFERS): New macro.
-
-       * buffer.c (Fmake_indirect_buffer): Uncomment.
-
-1998-08-31  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * macros.c (Fend_kbd_macro): Remove trailing period from error
-       message.
-       (Fexecute_kbd_macro): Ditto.
-
-1998-08-21  Greg Klanderman  <greg@alphatech.com>
-
-       * dired.c (Fuser_name_completion): remove optional 2nd argument.
-       (Fuser_name_completion_1): new function to return uniqueness
-       indication in addition to the user name completion.
-       (user_name_completion): change type of `uniq' argument.
-
-1998-08-19  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
-
-       * lread.c (vars_of_lread): Removed `source-directory' variable.
-
-1998-08-22  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fileio.c (Ffile_readable_p): Apply the DOS/Windows logic to
-       Cygwin.
-
-1998-08-19  SL Baur  <steve@altair.xemacs.org>
-
-       * dired.c (vars_of_dired): Fix misapplied patch.
-
-1998-08-16  Martin Buchholz  <martin@xemacs.org>
-
-       * fns.c (Fremrassq, remrassq_no_quit):
-       A XCAR that should have been an XCDR turned Fremrassq into Fremassq
-
-1998-07-17  Didier Verna  <verna@inf.enst.fr>
-
-       * redisplay-x.c (x_get_gc): returns a GC with a FillStipple fill
-       style as foreground GC for faces that have the `dim' property.
-       (x_output_string): when the `dim' face property is set,
-       ensure the gray pixmap has been created, and get a proper
-       foreground GC to draw the text.
-
-1998-08-09  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * event-msw.c (mswindows_wnd_proc): Workaround for a Win95 bug:
-         Manually track the state of the left and right Ctrl and Alt
-         modifiers.
-
-1998-08-07 Matt Stupple <matts@tibco.com>
-
-       * ntproc.c: don't wait on char_consumed at thread entry.
-       Additionally, to get the 'process' marked as finished, ensure
-       that the CHILD_ACTIVE macro returns false, so before exiting
-       close char_avail and set it to NULL, and close other handles
-       to reduce handle leak problems.
-
-1998-08-09  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * menubar-msw.c (displayable_menu_item): take account of menu
-         depth when deciding whether to try to display accelerators.
-
-1998-08-04  Andy Piper  <andyp@parallax.co.uk>
-
-       * event-msw.c: use MsgWaitForMultipleObjects if there are no
-       subprocesses.
-
-       * glyphs-msw.c: fix a couple of potential handle leaks.
-
-1998-08-04  P. E. Jareth Hein  <jareth@camelot.co.jp>
-
-       * dgif_lib.c gif_io.c gifrlib.h: New files to put GIF
-         *decoding ONLY* back into the core.
-       * glyphs-eimage.c: Change referenced header file for GIF
-         reading to point to the incore version.
-
-1998-07-20  Martin Buchholz  <martin@xemacs.org>
-
-       * casefiddle.c (casify_object):
-       Change algorithm from O(N**2) to O(N).
-       Code cleanup.
-       Doc string cleanup.
-
-1998-07-22  Greg Klanderman  <greg@alphatech.com>
-
-       * dired.c (file_name_completion_unwind): don't leak the cons.
-
-1998-07-20  Greg Klanderman  <greg@alphatech.com>
-
-       * dired.c (Fuser_name_completion): new function.
-       (Fuser_name_all_completions): new function.
-       (user_name_completion): new function.
-       (syms_of_dired): 2 new DEFSUBRs.
-       (vars_of_dired): initialize user name cache vars.
-
-1998-07-29  P. E. Jareth Hein  <jareth@camelot.co.jp>
-
-       * glyphs-eimage.c (png_instantiate): Add proper handling for background
-       colors taken from the default face.  Also correct a thinko in
-       transparency (not alpha) handling.
-
-1998-07-23  Martin Buchholz  <martin@xemacs.org>
-
-       * s/decosf4-0.h:  Use a perfectly ordinary link.  Nuke BSD crap.
-       * unexalpha.c: ANSI C-ize.  Clean compiler warnings.
-       * lread.c (Fload_internal):  Be very careful with printfs of
-       size_t's
-       * gui-x.c (menu_name_to_accelerator): tolower wants an `int'
-       argument.
-
-1998-07-27  Gunnar Evermann  <Gunnar.Evermann@nats.informatik.uni-hamburg.de>
-
-       * callint.c (Fcall_interactively): GCPRO prompt string before
-       passing it to Fread_key_sequence
-
-1998-07-27  SL Baur  <steve@altair.xemacs.org>
-
-       * keymap.c (vars_of_keymap): Initialize Vkey_translation_map and
-       Vvertical_divider_map.
-
-       * mule-canna.c (vars_of_mule_canna): Initialize every symbol to
-       Qnil or 0, none were initialized prior to this change.
-
-       Rename misnamed `V' prefixed integer variables:
-       Vcanna_empty_info, Vcanna_through_info, Vcanna_underline,
-       Vcanna_inhibit_hankakukana, Vcanna_henkan_length, Vcanna_henkan_revPos,
-       Vcanna_henkan_revLen, Vcanna_ichiran_length, Vcanna_ichiran_revPos,
-       Vcanna_ichiran_revLen.
-
-       Rename misnamed `V' prefixed integer variables and initialize
-       properly in the vars_of routine.
-       Vcanna_mode_AlphaMode, Vcanna_mode_EmptyMode, Vcanna_mode_KigoMode,
-       Vcanna_mode_YomiMode, Vcanna_mode_JishuMode, Vcanna_mode_TankouhoMode,
-       Vcanna_mode_IchiranMode, Vcanna_mode_YesNoMode, Vcanna_mode_OnOffMode,
-       Vcanna_mode_AdjustBunsetsuMode, Vcanna_mode_ChikujiYomiMode,
-       Vcanna_mode_ChikujiTanMode, Vcanna_mode_HenkanMode,
-       Vcanna_mode_HenkanNyuryokuMode, Vcanna_mode_ZenHiraHenkanMode,
-       Vcanna_mode_HanHiraHenkanMode, Vcanna_mode_ZenKataHenkanMode,
-       Vcanna_mode_HanKataHenkanMode, Vcanna_mode_HanKataHenkanMode,
-       Vcanna_mode_ZenAlphaHenkanMode, Vcanna_mode_HanAlphaHenkanMode,
-       Vcanna_mode_ZenHiraKakuteiMode, Vcanna_mode_HanHiraKakuteiMode,
-       Vcanna_mode_ZenKataKakuteiMode, Vcanna_mode_HanKataKakuteiMode,
-       Vcanna_mode_ZenAlphaKakuteiMode, Vcanna_mode_HanAlphaKakuteiMode,
-       Vcanna_mode_HexMode, Vcanna_mode_BushuMode, Vcanna_mode_ExtendMode,
-       Vcanna_mode_RussianMode, Vcanna_mode_GreekMode, Vcanna_mode_LineMode,
-       Vcanna_mode_ChangingServerMode, Vcanna_mode_HenkanMethodMode,
-       Vcanna_mode_DeleteDicMode, Vcanna_mode_TourokuMode,
-       Vcanna_mode_TourokuEmptyMode, Vcanna_mode_TourokuHinshiMode,
-       Vcanna_mode_TourokuDicMode, Vcanna_mode_QuotedInsertMode,
-       Vcanna_mode_BubunMuhenkanMode, Vcanna_mode_MountDicMode,
-       Vcanna_fn_SelfInsert, Vcanna_fn_FunctionalInsert,
-       Vcanna_fn_QuotedInsert, Vcanna_fn_JapaneseMode, Vcanna_fn_AlphaMode,
-       Vcanna_fn_HenkanNyuryokuMode, Vcanna_fn_Forward, Vcanna_fn_Backward,
-       Vcanna_fn_Next, Vcanna_fn_Prev, Vcanna_fn_BeginningOfLine,
-       Vcanna_fn_EndOfLine, Vcanna_fn_DeleteNext, Vcanna_fn_DeletePrevious,
-       Vcanna_fn_KillToEndOfLine, Vcanna_fn_Henkan, Vcanna_fn_Kakutei,
-       Vcanna_fn_Extend, Vcanna_fn_Shrink, Vcanna_fn_AdjustBunsetsu,
-       Vcanna_fn_Quit, Vcanna_fn_ConvertAsHex, Vcanna_fn_ConvertAsBushu,
-       Vcanna_fn_KouhoIchiran, Vcanna_fn_BubunMuhenkan, Vcanna_fn_Zenkaku,
-       Vcanna_fn_Hankaku, Vcanna_fn_ExtendMode, Vcanna_fn_ToUpper,
-       Vcanna_fn_Capitalize, Vcanna_fn_ToLower, Vcanna_fn_Hiragana,
-       Vcanna_fn_Katakana, Vcanna_fn_Romaji, Vcanna_fn_BaseHiragana,
-       Vcanna_fn_BaseKatakana, Vcanna_fn_BaseEisu, Vcanna_fn_BaseZenkaku,
-       Vcanna_fn_BaseHankaku, Vcanna_fn_BaseKana, Vcanna_fn_BaseKakutei,
-       Vcanna_fn_BaseHenkan, Vcanna_fn_BaseHiraKataToggle,
-       Vcanna_fn_BaseZenHanToggle, Vcanna_fn_BaseKanaEisuToggle,
-       Vcanna_fn_BaseKakuteiHenkanToggle, Vcanna_fn_BaseRotateForward,
-       Vcanna_fn_BaseRotateBackward, Vcanna_fn_Touroku, Vcanna_fn_HexMode,
-       Vcanna_fn_BushuMode, Vcanna_fn_KigouMode, Vcanna_fn_Mark,
-       Vcanna_fn_TemporalMode, Vcanna_key_Nfer, Vcanna_key_Xfer,
-       Vcanna_key_Up, Vcanna_key_Left, Vcanna_key_Right, Vcanna_key_Down,
-       Vcanna_key_Insert, Vcanna_key_Rollup, Vcanna_key_Rolldown,
-       Vcanna_key_Home, Vcanna_key_Help, Vcanna_key_KP_Key,
-       Vcanna_key_Shift_Nfer, Vcanna_key_Shift_Xfer, Vcanna_key_Shift_Up,
-       Vcanna_key_Shift_Left, Vcanna_key_Shift_Right, Vcanna_key_Shift_Down,
-       Vcanna_key_Cntrl_Nfer, Vcanna_key_Cntrl_Xfer, Vcanna_key_Cntrl_Up,
-       Vcanna_key_Cntrl_Left, Vcanna_key_Cntrl_Right, Vcanna_key_Cntrl_Down
-
-1998-07-16  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * event-Xt.c (x_to_emacs_keysym): Return nil for modifier keysyms.
-       (x_event_to_emacs_event): Let x_to_emacs_keysym check for modifier
-       keys thus no longer considering all keysyms on a key.
-
-1998-07-19  SL Baur  <steve@altair.xemacs.org>
-
-       * XEmacs 21.2-beta1 is released.
-
-1998-07-12  Oscar Figueiredo  <Oscar.Figueiredo@di.epfl.ch>
-
-       * eldap.c (Fldap_search_internal): When converting the list of
-       attributes to search Copy the final 0 from Lisp strings to C
-       strings.
-       Check base, not Vldap_default_base as a a string
-
-1998-07-13  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * nt.c: Remove Vstdio_str; already defined in console-stream.c.
-
-       * unexnt.c: Unconditionally define bss_start and bss_size, and
-         ensure that they don't go in the .bss section.
-
-1998-07-17  Olivier Galibert  <galibert@pobox.com>
-
-       * glyphs-x.c (convert_EImage_to_XImage):  Fix previous patch (conv
-       byte order is dependant  of  the local  byte order).
-       From Takeshi Hagiwara <hagiwara@ie.niigata-u.ac.jp>
-
-1998-07-18  SL Baur  <steve@altair.xemacs.org>
-
-       * glyphs-msw.c (mswindows_resource_normalize): Qresource ->
-       Qmswindows_resource.
-       From Jonathan Harris <jhar@tardis.ed.ac.uk>
-
-1998-07-12  SL Baur  <steve@altair.xemacs.org>
-
-       * general.c (syms_of_general): Add defsymbol for Qresource.
-
-       * glyphs-msw.c (vars_of_glyphs_mswindows): Rename Qresource to
-       Qmswindows_resource.
-       (TopLevel): Rename 'resource image format to 'mswindows_resource.
-       (mswindows_resource_validate): Rename.
-       (mswindows_resource_normalize): Rename.
-       (mswindows_resource_possible_dest_types): Rename.
-       (mswindows_resource_instantiate): Rename.
-       (image_instantiator_format_create_glyphs_mswindows): Replace
-       `resource' with `mswindows.resource'.
-
-       * XEmacs 21.0-pre5 is released.
-
-1998-07-10  SL Baur  <steve@altair.xemacs.org>
-
-       * mule-wnnfns.c (Fwnn_open): Correctly trap on misdefined Wnn
-       server type in environment.
-       Use alloca-ed strings instead of tiny fixed size ones.
-
-1998-07-09  SL Baur  <steve@altair.xemacs.org>
-
-       * XEmacs 21.0-pre4 is released.
-
-1998-07-01  James N. Potts  <jnpotts@plutonium.net>
-
-       * fileio.c: (expand_file_name): under win32: Don't treat names
-       as UNC names if a drive letter has been specified.  If a drive
-       has been specified, strip out extra directory-seperators that
-       reportedly cause problems under Win95.
-
-1998-07-09  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * windowsnt.h: Define DUMP_SEPARATE_SECTION when building with
-         MSVC >= 5.0. Put emacs init and zero-init data in a special
-         section of the executable when this is defined.
-
-       * unexnt.c, ntheap.h:
-         Removed unused find_section() and get_section_size().
-
-       * unexnt.c:
-         Fix up the executable's checksum after dumping otherwise the
-         profiler complains.
-         When DUMP_SEPARATE_SECTION is defined, don't need to dump
-         zero-init data separately from init data. Dump emacs data
-         into a special section of the executable.
-         When DUMP_SEPARATE_SECTION not defined, dump .bss up to
-         my_ebss instead of up to the end of bss.
-
-1998-07-09  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * filelock.c: Removed Vconfigure_lock_directory - already
-         defined in emacs.c.
-
-       * frame-msw.c: Removed Qinitially_unmapped and Qpopup - already
-         defined in frame.c and general.c respectively.
-
-       * glyphs-msw.c: Removed Qresource - already defined in
-         general.c.
-
-1998-07-05  Oscar Figueiredo  <Oscar.Figueiredo@di.epfl.ch>
-
-       * eldap.c (Fldap_search_internal): Docstring fixes
-
-1998-07-04  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * nt.c (init_environment): Removed unused PRELOAD_WINSOCK,
-         EMACSDOC and TERM variables. Added EMACSDEBUGPATHS,
-         EMACSPACKAGEPATH and INFOPATH variables.
-         Removed unused get_emacs_configuration function.
-
-       * s/windowsnt.h: Don't define EMACS_CONFIGURATION here because
-         it is now defined at build-time by the makefile.
-
-1998-07-01  James N. Potts  <jnpotts@plutonium.net>
-
-       * fileio.c: (expand_file_name): under win32: Don't treat names as
-       UNC names if a drive letter has been specified.  If a drive has
-       been specified, strip out extra directory-seperators that
-       reportedly cause problems under Win95.
-
-1998-07-05  Andy Piper  <andyp@parallax.co.uk>
-
-       * faces.c (complex_vars_of_faces): for the gui-element face don't
-       fallback to the default face, instead provide reasonable default
-       fallbacks that were previously hardcoded elsewhere.
-
-1998-07-06  Olivier Galibert  <galibert@pobox.com>
-
-       * glyphs-x.c (convert_EImage_to_XImage): Fix pixel writing problem
-       when the X server endianness is different than the client's one.
-
-1998-06-29  Kyle Jones  <kyle_jones@wonderworks.com>
-
-       * eval.c (run_hook_with_args_in_buffer): Check
-         default (non-buffer-local) value of hook for
-         nil before treating it as a function.  Don't initialize
-         the `globals' variable twice.
-
-1998-06-24  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * fileio.c: Don't do directory seperator canonicalisation in
-         substitute-in-file-name because we don't know that the
-         filename refers to a local file.
-
-1998-06-24  Adrian Aichner  <adrian@xemacs.org>
-
-       * process-nt.c (nt_create_process): Try appending the standard
-         executable file extensions to the filename if none supplied.
-
-1998-06-29  SL Baur  <steve@altair.xemacs.org>
-
-       * fileio.c (Fsubstitute_in_file_name): Enable double slash notation
-       for cygwin32.
-       From Keisuke Mori <ksk@ntts.com>
-
-1998-06-24  Andy Piper  <andyp@parallax.co.uk>
-
-       * toolbar-msw.c (mswindows_output_toolbar): only enable masked
-       images if we have masks. This handles the xbm case (have masks)
-       and avoids overuse of resources in the xpm case (generally no masks).
-       Don't output small toolbars.
-
-1998-06-29  Kyle Jones  <kyle_jones@wonderworks.com>
-
-       * eval.c (run_hook_with_args_in_buffer): Don't treat
-         the default value of a buffer local hook as a list of
-         hooks unless it is both a cons and the car of that cons
-         is not Qlambda.
-
-1998-06-29  SL Baur  <steve@altair.xemacs.org>
-
-       * extents.c: Email address for Ben Wing is ben@xemacs.org.
-       * process-unix.c: Ditto.
-       * mule-coding.h: Ditto.
-       * mule-coding.c: Ditto.
-       * mule-charset.c: Ditto.
-       * mule-charset.h: Ditto.
-       * file-coding.c: Ditto.
-       * file-coding.h: Ditto.
-
-1998-06-22  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * event-msw.c: Guard against recursion when freeing
-         FRAME_MSWINDOWS_TARGET_RECT struture in WM_SIZE processing.
-
-       * frame-msw.c: Don't set WS_VISIBLE attribute on first frame.
-         Call ShowWindow twice in init_frame_3 to get round runemacs
-         weirdness.
-
-1998-06-27  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * scrollbar.c (vertical_scrollbar_changed_in_window): Ditto.
-
-       * winslots.h: Rename.
-
-       * window.c (specifier_vars_of_window): Renamed
-       vertical-divider-draggable-p to vertical-divider-always-visible-p,
-       as suggested by Ben Wing.
-       (specifier_vars_of_window): Fix docstrings.
-
-1998-06-22  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
-
-       * unexaix.c: Line number information works correctly again.
-
-1998-06-22  Olivier Galibert  <galibert@pobox.com>
-
-       * emacs.c (__sti__iflPNGFile_c___): Added. See comment. Cry.
-
-1998-06-21  Martin Buchholz  <martin@xemacs.org>
-
-       * editfns.c (get_home_directory): ANSIfy.
-       XEmacs is compilable under C *and* C++.
-       It's XEmacs, not Xemacs!
-
-1998-06-19  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * console-msw.h: added a list of fonts to device data.
-
-       * device-msw.c: enumerate list of available fonts in
-         mswindows_init_device. Free list in mswindows_delete_device.
-
-       * objects-msw.c: Added helper function match_font used by
-         mswindows_initialize_font_instance and mswindows_list_fonts.
-         Allow a charset to be specified in a font string, even if
-         previous fields havn't been specified.
-
-1998-06-23  Greg Klanderman  <greg@alphatech.com>
-
-       * indent.c (column_at_point): column cache bugfix.
-       Set last_known_column_point to the buffer position for
-       which the column was requested, not buffer's point.
-
-       * redisplay.c (decode_mode_spec): for current-column, show
-       window's point's column, not buffer's point's column.
-
-1998-06-23  Andy Piper  <andyp@parallax.co.uk>
-
-       * menubar-msw.c (mswindows_handle_wm_command): use
-       enqueue_misc_user event rather than
-       mswindows_enqueue_msic_user_event to fix customize problems. Add some
-       checks that X does.
-
-       * console-msw.h: declare mswindows_enqueue_magic_event.
-
-       * event-msw.c (mswindows_enqueue_magic_event): make global.
-
-1998-06-24  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * line-number.c (LINE_NUMBER_FAR): Reverted to 16384.
-       (buffer_line_number): Use EMACS_INT_MAX instead of random LOTS.
-       (add_position_to_cache): Use EMACS_INT instead of int.
-
-1998-06-21  Olivier Galibert  <galibert@pobox.com>
-
-       * lisp-disunion.h (XMARKBIT): Have XMARKBIT return something
-       suitable for an int used as a boolean (btw, C sucks.).
-
-1998-06-18  Andy Piper  <andyp@parallax.co.uk>
-
-       * object-msw.c: remove warnings.
-
-       * device-msw.c: #define wrongly named cygwin structure elements.
-
-       * s/cygwin32.h: define DEMI_BOLD
-
-1998-06-19  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * redisplay-msw.c: new function mswindows_apply_face_effects.
-         This is called by output_string and output_cursor to display
-         underline and strikeout on faces.
-
-1998-06-19  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * console-msw.h: added a list of fonts to device data.
-
-       * device-msw.c: enumerate list of available fonts in
-         mswindows_init_device. Free list in mswindows_delete_device.
-
-       * objects-msw.c: Added helper function match_font used by
-         mswindows_initialize_font_instance and mswindows_list_fonts.
-         Allow a charset to be specified in a font string, even if
-         previous fields havn't been specified.
-
-1998-06-15  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * objects-msw.c:
-         Removed compilation warnings from mswindows_string_to_color.
-         mswindows_list_fonts returns a more general bogus font.
-         New lisp-visible function mswindows-color-list.
-
-1998-06-19  David Bush <david.bush@adn.alcatel.com>
-
-       * editfns.c (Fuser_login_name): Modify to user new function
-       user_login_name.
-       (user_login_name): C only function to avoid Lisp object overhead
-       Returns "unknown" instead of nil in Cygwin environment
-
-       * fileio.c (Fexpand_file_name): Treat "~" and "~user" as
-       equivalent for current user in Cygwin environment. Use new
-       function user_login_name to get username.
-
-       * lisp.h: Declare user_login_name
-
-1998-06-18  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
-
-       * unexaix.c (make_hdr): Fixed bias computations so debugging info
-       works again.
-       Some other insignificant nitpicks.
-
-1998-06-18  Andy Piper  <andyp@parallax.co.uk>
-
-       * toolbar-msw.c (mswindows_output_toolbar): specify ILC_MASK when
-       creating the image list and make sure he bk color is transparent.
-
-1998-06-18  Jan Vroonhof  <vroonhof@math.ethz.ch>
-
-       * event-Xt.c (emacs_Xt_remove_timeout): Also remove timeout from
-       completed_timeouts. The timer could have expired.
-
-1998-06-17  Andy Piper  <andyp@parallax.co.uk>
-
-       * console-msw.h: move XEMACS_RECT_WH inside frame
-       parameters. define macors to access it.
-
-       * frame-msw.c (mswindows_init_frame_1): use new target_rect
-       parameter to intialise desired sizing. (mswindows_init_frame_2):
-       enable and size the frame to something sensible when we get
-       here. (mswindows_set_frame_properites): use new
-       mswindows_size_frame_internal function and size frame if frame
-       parameters not just if init is finished - WM_SIZE happens too
-       early for some specs. (mswindows_size_frame_internal): new
-       function abstracted from mswindows_set_frame_properties.
-       (Vmswindows_use_system_frame_size_defaults):
-       new variable controls whether to allow the system to pick frame
-       size defaults, defaults to nil.
-
-       * event-msw.c: in WM_SIZE use mswindows_size_frame_internal rather
-       than duplicated code.
-
-1998-06-15  Colin Rafferty <colin@xemacs.org>
-
-       * Makefile.in.in: Made EXTW_LINK expand properly.
-
-1998-06-12  Martin Buchholz  <martin@xemacs.org>
-
-       * redisplay.c (vars_of_redisplay): default value of
-       column-number-start-at-one should be NIL!
-
-1998-06-11  Martin Buchholz  <martin@xemacs.org>
-
-       * casefiddle.c:
-       (upcase-initials "fooBar") ==> "FooBar" instead of "Foobar"
-
-1998-06-05  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * eldap.c (Fldap_search_internal): Use build_ext_string instead of
-       build_string to avoid crashes under Mule.
-
-1998-06-13  Andy Piper  <andyp@parallax.co.uk>
-
-       * ntplay.c (play_sound_data_1): don't delete the sound data until
-       the next sound is played and the previous one finished.
-
-1998-06-10  Samuel Mikes  <smikes@alumni.hmc.edu>
-
-       * fileio.c (directory-sep-char): Escape backslashes.
-
-1998-06-10  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * event-stream.c: Fix docstring reference.
-
-1998-06-12  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * alloc.c (make_float): Remove useless initialization of `next'
-       field.
-       (make_pure_float): Ditto.
-
-       * lisp.h (struct Lisp_Float): Rename `next' to `__unused__next'.
-
-1998-06-08  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * fileio.c (Fmake_directory_internal): Remove conditionals
-       on WINDOWSNT when calling mkdir.
-
-       * ntproc.c: Deleted the following unused functions:
-       register_child, reap_subprocess, sys_wait.
-
-       * nt.c (sys_rename): Ifzeroed this implementation.
-       Deleted the following unused functions:
-       sys_access, sys_chdir, sys_chmod, sys_creat, sys_link, sys_mkdir,
-       sys_mktemp, sys_rmdir, sys_unlink, sys_close, sys_dup, sys_dup2,
-       sys_read, sys_write.
-       Merger sys_fopen and sys_open with sysdep.c implementation.
-
-       * sysdep.c: Removed MS-DOS code.
-       (sys_rename): Deal with Microsoft rename weirdness.
-       (sys_open): Implemented for Windows.
-       (sys_fopen): Ditto.
-       (sys_mkdir): Ditto.
-
-1998-06-08  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * buffer.c (complex_vars_of_buffer): Removed %t description from
-       the docstring.
-
-1998-06-04  Rick Rankin  <Rick_Rankin-P15254@email.mot.com>
-
-       * scrollbar-msw.c: initialize the cbSize element of the
-       SCROLLINFO struct before calling SetScrollInfo. WinNT seems
-       to ignore the value of cbSize, but Win95 (and I presume Win98)
-       appear to want it set to sizeof(SCROLLINFO).
-
-1998-06-04  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * event-stream.c: Defined Qcancel_mode_internal.
-       (syms_of_event_stream): defsymbol'ed it.
-
-       * events.h: Externed it.
-
-       * event-msw.c (mswindows_wnd_proc, WM_CANCELMODE): Added this handler.
-
-1998-06-04  Oliver Graf <ograf@fga.de>
-
-       * frame-x.c (x_cde_destroy_callback): free the data
-       (cde-start-drag-internal) corrected root position, 21.1 needs this
-       hardcoded in Button events
-       (offix-start-drag-internal) corrected root position
-
-1998-06-03  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * process-nt.c (signal_cannot_launch): Use signal_simple_error()
-       instead of error().
-
-1998-06-03  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * dialog-msw.c (button_width): Removed `inline' from the function
-       declaration.
-
-1998-06-03  Rick Rankin  <Rick_Rankin-P15254@email.mot.com>
-
-       * frame-msw.c: add WS_VISIBLE flag to the first frame created.
-       Note that adding this flag to subsequent frames causes problems.
-
-1998-06-03  Gunnar Evermann  <Gunnar.Evermann@nats.informatik.uni-hamburg.de>
-
-       * glyphs-eimage.c (png_instantiate) move 'struct
-       png_memory_storage tbr' out of nested block to avoid dangling
-       reference
-
-1998-06-02  Andy Piper  <andyp@parallax.co.uk>
-
-       * faces.h:
-       * faces.c: rename 3d-object -> gui-element. add toolbar face which
-       inherits from gui-element.
-
-       * glyphs-msw.c: use DIBitmaps for xbm bitmaps to be consistent
-       with existing code, generate masks correctly.
-
-1998-06-03  P. E. Jareth Hein  <jareth@camelot-soft.com>
-
-       * glyphs-eimage.c: Changed included header for gifs to use
-       Gifreader instead of giflib.
-
-       * glyphs-x.c: removed the image-related functions that were
-       moved into glyphs-eimage.
-
-1998-06-02  David Bush  <david.bush@adnb.alcatel.com>
-
-       * glyphs.c (bitmap_to_lisp_data) Define XFree to be free
-       if built without X Windows support.
-
-1998-06-02  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (Fconcat): Synch docstring with new reality.
-
-1998-06-03  SL Baur  <steve@altair.xemacs.org>
-
-       * frame.c: Remove reference to msdos.h (which is going away).
-       Suggested by Hrvoje Niksic and Kirill Katsnelson.
-
-1998-06-02  P. E. Jareth Hein  <jareth@camelot-soft.com>
-
-       * glyphs-eimage.c (jpeg_instantiate): Fix handling of
-       grayscale images/
-
-
-1998-05-30  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * events.h: Fixed commentary about misc-user scrollbar events.
-
-       * scrollbar-x.c (x_update_vertical_scrollbar_callback): Use frame
-       object as an event channel, instead of window object.
-       (x_update_horizontal_scrollbar_callback): Ditto.
-
-1998-05-29  Andy Piper  <andyp@parallax.co.uk>
-
-       * ntplay.c (play_sound_data_1) new function. convert alloca data
-       to malloc if necessary.
-       (play_sound_file): if the file is not in our path then convert to
-       data and play.
-
-1998-06-01  SL Baur  <steve@altair.xemacs.org>
-
-       * mule-mcpath.c (mc_chdir): Reverse parameters in call to memcpy.
-       * msdos.c (Frecent_doskeys): Ditto.
-
-       * unexalpha.c (unexec): Reverse parameters in call to memcpy.
-       Suggested by Reggie Perry <perry@zso.dec.com>
-
-       * buffer.h: Eliminate size in declaration.
-
-1998-06-01  Olivier Galibert  <galibert@pobox.com>
-
-       * unexelfsgi.c (unexec): Cleanup n/nn and remove useless kludge.
-
-1998-06-01  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * gui.c (gui_item_init): Changed the default value for config member
-       from Qunbound to Qnil.
-
-1998-06-01  Greg Klanderman  <greg@alphatech.com>
-
-       * indent.c (vmotion_pixels): Don't #define abs().
-
-1998-05-30  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * s/windowsnt.h: Defined popen and pclose to be _popen and _pclose
-       respectively.
-
-1998-05-30  Andy Piper  <andyp@parallax.co.uk>
-
-       * glyphs.h: add xbm declarations.
-
-       * console.h: add xbm_instantiate_method device method.
-
-       * glyphs.c (check_valid_xbm_inline) (xbm_validate)
-       (bitmap_to_lisp_data) (xbm_mask_file_munging) (xbm_normalize)
-       (xbm_possible_dest_types): moved here from glyphs-x.c. use
-       locate_pixmap_file device method and read_bitmap_data_from_file
-       instead of XmuReadBitmapDataFromFile.
-       (xbm_instatntiate): make a device method.
-
-       * glyphs-x.c: see glyphs.c changes. (read_bitmap_data_from_file)
-       new function that just calls XmuReadBitmapDataFromFile.
-       (x_xbm_instatntiate): device method from xbm_instantiate.
-
-       * glyphs-msw.c (read_bitmap_data) (NextInt)
-       (read_bitmap_data_from_file): new functions copied from Xmu
-       sources.
-       (xbm_create_bitmap_from_data) from Ben <ben@666.com> convert
-       inline data to an mswindows bitmap.
-       (init_image_instance_from_xbm_inline) (xbm_instantiate_1)
-       (mswindows_xbm_instantiate): mswindows-ized versions of the X
-       functions.
-
-1998-05-30  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * window.c (specifier_vars_of_window): Renamed `has_modeline-p' to
-       `modeline-visible-p'.
-       Declared specifier lisp variables at the beginning oh the file
-       as static.
-
-       * procimpl.h (struct process_methods): Changed semantics of
-       create_process method so it accepts lisp strings instead of
-       char pointers.
-
-       * process.c (Fstart_process_internal): Moved building of
-       unix style argv from here to process-unix.c, ...
-
-       * process-unix.c (unix_create_process): ... right here.
-
-       * process-nt.c (nt_create_process): Changed this function to
-       support new semantics, so avoided a GC problem.
-
-       * events.c (Fmake_event): Document misc-user events properties.
-       (Fmake_event): Do not allow arbitrary objects for channel property
-       of misc-user events.
-       (Fmake_event): Change misc-user event validation: it is function
-       which is required, not button.
-
-       * event-msw.c (mswindows_user_event_p): Recognize misc user events as
-       user events.
-       (mswindows_enqueue_misc_user_event): Added function.
-       (mswindows_bump_queue): Removed function.
-       (mswindows_enqueue_magic_event): Support NULL HWND parameter.
-       (mswindows_wnd_proc, WM_CLOSE): Use mswindows_enqueue_misc_user_event().
-       (mswindows_wnd_proc, WM_EXITSIZEMOVE): Ditto.
-       (emacs_mswindows_handle_magic_event): Handle XM_BUMPQUEUE, by doing
-       really nothing, which is my personal favorite thing.
-
-       * console-msw.h: Removed prototype for mswindows_bump_queue().
-       Added prototype for mswindows_enqueue_misc_user_event().
-
-       * menubar-msw.c (mswindows_handle_wm_command): Use
-       mswindows_enqueue_misc_user_event().
-
-       * toolbar-msw.c (mswindows_handle_toolbar_wm_command): Ditto.
-
-       * dialog-msw.c (dialog_proc): Ditto.
-
-       * scrollbar-msw.c (mswindows_handle_scrollbar_event): Ditto.
-        (mswindows_handle_scrollbar_event): Use frame, not window, for misc
-       user events channel.
-
-1998-05-29  Greg Klanderman  <greg@alphatech.com>
-
-       * window.c (Fwindow_displayed_text_pixel_height): was relying on
-       incorrect semantics of vmotion_pixels which has been fixed.  don't
-       use it anymore as it can't easily be used.
-
-       * indent.c (vmotion_pixels): fix off by one bug moving up.  also
-       the motion was reported incorrectly if you tried to go past end of
-       buffer.
-
-1998-05-30  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * toolbar.h: Removed misleading commentary, as Martin suggested.
-
-1998-05-30  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * lisp.h: Extern Qactivate_menubar_hook.
-
-       * menubar-msw.c (unsafe_handle_wm_initmenu_1): Pass correct value to
-       run_hook ().
-
-1998-05-29  Andy Piper  <andyp@parallax.co.uk>
-
-       * glyphs-msw.c: use BPLINE macro.
-
-       * select-msw.c (mswindows-selection-exists-p)
-       (mswindows-delete-selection): doc string fixes.
-
-       * toolbar-msw.c (mswindows_output_toolbar): make disabled buttons
-       unpressable. warning elimination.
-
-1998-05-28  Martin Buchholz  <martin@xemacs.org>
-
-       * alloc.c (dbg_constants):
-       * dbxrc:
-       * gdbinit:
-       Remove toolbar_data debugging code, since that lrecord has
-       also been removed.
-
-Wed May 27, 1998  Darryl Okahata  <darrylo@sr.hp.com>
-
-       * alloc.c: zap cached value of (user-home-directory), so that
-         it's not undumped.
-
-       * buffer.c: From init_buffer(), separated out code that
-         determined the initial directory for the *scratch* buffer, and
-         put them into a function called "init_initial_directory()".
-         The initial directory is now available as a global "char *"
-         called initial_directory.
-
-       * buffer.h: Added extern entries for initial_directory[] and
-         init_initial_directory().
-
-       * editfns.c: added new elisp function "user-home-directory",
-       which basically returns getenv("HOME"), but attempts to use
-       other values if $HOME isn't set.This may have to be tweaked in
-       the future as, under Unix, "/" is used if $HOME isn't set (this
-       probably should be set to the current directory).  To support
-       this, a new C function, "get_home_directory()", now exists,
-       which returns the "home directory", as a "char *" string.
-
-       * emacs.c: Rearrange NT initialization order so that
-       environment/registry variables will be properly entered into
-       Vprocess_enviroment.
-
-       * fileio.c: replaced egetenv("HOME") with calls to the new
-         get_home_directory().
-
-       * lisp.h: Added function prototypes for uncache_home_directory()
-         and get_home_directory(), along with lisp prototypes for
-         Fuser_home_directory() and friends.
-
-       * nt.c: replaced getenv("HOME") with calls to the new
-         get_home_directory().
-
-       * sysfile.h: for WINDOWSNT, #include <direct.h>, to suppress
-         warnings about getcwd(), etc. not having prototypes.
-
-1998-05-28  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * process-nt.c (send_signal): Emulate SIGHUP.
-       (validate_signal_number): Ditto.
-
-       * event-msw.c (mswindows_wnd_proc, WM_KEYDOWN): Unconditionally
-       remove MOD_SHIFT from ASCII characters.
-       (mswindows_wnd_proc, WM_KEYDOWN): Do not activate the menubar when
-       F10 is pressed.
-
-1998-05-24  Oliver Graf <ograf@fga.de>
-
-       * frame-x.c (cde-start-drag-internal): added filename and multi-
-       data transfers
-       (x_cde_convert_callback) dito
-
-1998-05-26  Oliver Graf <ograf@fga.de>
-
-       * frame-x.c: include event-mod.h also with CDE
-       (x_cde_convert_callback) made the thing working
-       (cde-start-drag-internal) also debugging
-
-1998-05-25  Hans Guenter Weigand  <hgweigand@wiesbaden.netsurf.de>
-
-       * m/sparc.h:
-       * getloadavg.c:
-       * malloc.c:
-       * unexec.c:
-       * mem-limits.h:
-         - add __OpenBSD__ where __NetBSD__ was found.
-         - TODO: replace platform-specific conditional compilation by
-           feature tests in configure.in.
-
-1998-05-15  Greg Klanderman  <greg@alphatech.com>
-
-       * window.c (Fwindow_displayed_text_pixel_height): New function.
-       (syms_of_window): DEFSUBR it.
-
-       * indent.c (Fvertical_motion_pixels): New function - request
-       movement in pixels.
-       (vmotion_pixels): helper.
-       (syms_of_indent): DEFSUBR.
-       * lisp.h: declaration for vmotion_pixels().
-
-       * indent.c (Fvertical_motion): Add optional third argument PIXELS,
-       to request returning motion in pixels.
-       (Fvertical_motion_pixels): Remove, functionality merged into
-       Fvertical_motion.
-       * window.c (window_scroll): call Fvertical_motion with 3 arguments.
-       (Fmove_to_window_line): ditto.
-       * lisp.h: Change declaration for Fvertical_motion.
-
-       * window.c: rename window-text-pixel-{height,width,edges} to
-       window-text-area-pixel-*.
-
-1998-05-26  Gunnar Evermann  <Gunnar.Evermann@nats.informatik.uni-hamburg.de>
-
-       * tooltalk.c (vars_of_tooltalk) added staticpro for
-       Tooltalk_Message_plist_str and Tooltalk_Pattern_plist_str
-
-1998-05-27  Andy Piper  <andyp@parallax.co.uk>
-
-       * faces.c: create a new 3d_object_face, make modeline and
-       vertical_divider faces fallback to this rather than the default.
-
-1998-05-21  Andy Piper  <andyp@parallax.co.uk>
-
-       * s/cygwin32.h: define charsets for cygwin.
-
-1998-05-25  Andy Piper  <andyp@parallax.co.uk>
-
-       * toolbar-msw.c (mswindows_output_toolbar): fix up button sizes
-       and coordinates. resize bitmaps if we have already settled on a
-       different size.
-
-       * glyphs-msw.c (xpm_to_eimage): add ';' for mswindows compiler.
-
-1998-05-25  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * toolbar-msw.c (mswindows_handle_toolbar_wm_command): Ditto.
-
-       * menubar-msw.c (mswindows_handle_wm_command): Ditto.
-
-       * gui.h: Ditto.
-
-       * gui-x.c (popup_selection_callback): Ditto.
-
-       * dialog-msw.c (dialog_proc): get_callback -> get_gui_callback.
-
-       * gui.c (get_callback): Renamed to get_gui_callback.
-
-1998-05-17  Martin Buchholz  <martin@xemacs.org>
-
-       * glyphs.h: order rearrangement.
-
-       * device-tty.c (tty_asynch_device_change): Warning suppression.
-       * device-x.c (x_device_system_metrics): Warning suppression.
-       Make Doc strings consistent with coding standards.
-
-1998-05-24  Martin Buchholz  <martin@xemacs.org>
-
-       * general.c: multiple definition of `Qicon'.  general.c seems
-         like a good home for Qicon.
-
-1998-05-20  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * This patch is to fix compilation warnings under Windows.
-
-       * s/windowsnt.h: Encapsulate getpid with sys_getpid.
-       Added prototypes for FSF inherited functions, with which XEmacs is
-       sprinkled thoroughly.
-       Removed some #if 0 code. Bracketed some more definitions, probably
-       related to Visual C versions prior to 4 (we do not support them).
-
-       * sysfloat.h (logb): Finally, get logb() prototyped.
-
-       * sysfile.h: Added Windows specific includes.
-       Removed old Windows specific code bracketed with #if 0.
-
-       * sysdep.h: Added prototype for xrealpath().
-
-       * sysdep.c (sys_getpid): Added function, to support '95 negative pids.
-
-       * symsinit.h: Added prototypes for syms_of_dired_mswindows,
-       vars_of_dired_mswindows and init_ntproc (Grrr).
-
-       * realpath.c: Added Windows specific include files.
-       (xrealpath): Conditionalized declaration of some auto variables on
-       S_IFLNK, to avoid warnings.
-
-       * ntproc.c: Disabled some compiler warnings. This file is going to
-       die, so I have not cleaned it up much.
-       (set_process_dir): Const parameter.
-       (Fwin32_short_file_name): Down CHECK_* macros to one argument.
-       (Fwin32_long_file_name): Ditto.
-       (Fwin32_set_process_priority): Ditto. Why didn't I remove these
-       three functions?
-
-       * nt.h: Added prototypes for set_process_dir and convert_time.
-
-       * nt.c: More include files.
-       (getpwnam): Consted char* argument.
-       (get_emacs_configuration): Const return value.
-       (opendir): Const argument.
-       (stat): Casted converstion long->short.
-       (stat): Removed ad hoc and questionable support for non-MSC compile.
-       (sys_pipe): Removed unused auto variable.
-       (_sys_read_ahead): Removed calls to DebPrint.
-       (sys_read): Ditto, in 2 places.
-       (term_ntproc): Added unused int parameter to signal handler, to
-       avoid a warning when compiling a call to signal().
-       (msw_sigset): Properly return old signandler or NULL instead of void.
-
-       * floatfns.c (Flogb): Casted arguments to unary minus to signed.
-
-       * gmalloc.c (morecore): Ditto.
-       (_free_internal): Ditto.
-
-       * lread.c (parse_integer): Ditto.
-
-       * dired-msw.c: Added several include files.
-
-       * cmdloop.c (Fcommand_loop_1): Added Microsoft C to the Big List
-       of Compilers to Shut Up.
-
-       * callproc.c: Added #includes to suppress warnings under Windows.
-       (init_callproc): Removed #if0'ed code and unused variables.
-
-1998-05-25  Andy Piper  <andyp@parallax.co.uk>
-
-       * device-msw.c (mswindows_device_system_metrics): do planes in a
-       way consistent with X.
-
-       * glyphs-msw.c (mswindows_initialize_image_instance_mask): don't
-       use SetPixel, use DIBits functions.
-       (xpm_to_eimage): frob colors more closely like xpm deos.
-
-       * toolbar-msw.c: only resize bitmaps when shrinking. Adjust look
-       to be closer to X version.
-
-       * event-msw.c: use tooltip string directly.
-
-       * redisplay-msw.c: reinstate Kirill's bg pixmap change.
-
-       * objects-msw.c: frob rgb colors that only Kyle uses.
-
-       * dialog-msw.c (button_width): INLINE -> inline.
-
-1998-05-23  SL Baur  <steve@altair.xemacs.org>
-
-       * getloadavg.c (getloadavg): Fix typo.
-
-1998-05-23  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * objects-msw.c (mswindows_initialize_font_instance): Added support
-       for font character sets.
-       Replaced 'XXX' with '####' in comments throughout the file.
-
-1998-05-23  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * emacs.c (main_1): Added calls to vars_of_dialog_mswindows() and
-       console_type_create_dialog_mswindows(), to initialize Windows dialog
-       support.
-
-       * symsinit.h: Prototyped the above functions.
-
-       * dialog-x.c (x_popup_dialog_box): Moved dialog descriptor consistency
-       checks to dialog.c...
-
-       * dialog.c (Fpopup_dialog_box): ...right here. Added more checks: a
-       device must support dialog boxes, and the descriptor must supply at
-       least one button.
-
-       * dialog-msw.c: New file, dialogs for Windows.
-
-1998-05-21  Oscar Figueiredo  <Oscar.Figueiredo@di.epfl.ch>
-
-       * eldap.c (ldap_search_unwind): Return Qnil instead of nothing
-       (Fldap_search_internal): Removed unused variable `err'
-
-       * eldap.h: Moved Lisp_LDAP declaration here instead of using a
-       forward declaration
-
-1998-05-17  Martin Buchholz  <martin@xemacs.org>
-
-       * eldap.h: eldap.[ch] should never be used unless HAVE_LDAP is
-       defined.  Therefore there is no need to handle the case when
-       HAVE_LDAP is undefined.  Similarily, there is no reason to have
-       any code wrapped within `#ifdef emacs', since this code is only
-       useful within an emacs.  This simplifies the code significantly.
-
-       * inline.c: Include eldap.h only if HAVE_LDAP.
-       * inline.c: Don't bother including TT_C_H_PATH, since tooltalk.h
-       already does that.
-
-1998-05-21  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * unexnt.c (copy_executable_and_dump_data_section): Suppress
-       printing dump stats when building without DEBUG_XEMACS.
-       (dump_bss_and_heap): Ditto.
-
-1998-05-21  Andy Piper  <andyp@parallax.co.uk>
-
-       * gnuclient.c: don't suppress window system if there is no display
-       and we are running under mswindows. send 'mswindows device type if
-       we are in this situation.
-
-1998-05-20  Andy Piper  <andyp@parallax.co.uk>
-
-       * general.c:
-       * lisp.h: Qbitmap, Qcursor, Qicon moved here from glyphs-msw.c.
-
-       * glyphs-msw.c: change cursor imgae type name to resource. Fix
-       some nits.
-
-1998-05-20  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * EmacsFrame.c (Xt_StringToScrollBarPlacement):  Added support for
-       {top,bottom}-{left,right} values in addition to
-       {top,bottom}_{left,right}.
-
-1998-05-18  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fileio.c (Fmake_temp_name): Remove unreached code.
-
-       * process-nt.c (validate_signal_number): Use
-       signal_simple_error().
-
-1998-05-19  Martin Buchholz  <martin@xemacs.org>
-
-       * unexhp9k800.c:
-       * sound.c (vars_of_sound):
-       * sysdep.c (reset_sigio_on_device):
-       * window.c (window_bottom_gutter_height):
-       unexhp9k800.c:258: warning: implicit declaration of function
-       `calculate_checksum'
-       sound.c:604: warning: implicit declaration of function `vars_of_hpplay'
-       sysdep.c:1012: warning: unused variable `owner'
-       window.c:993: warning: `window_right_toolbar_width' defined but not used
-
-1998-05-19  Andy Piper  <andyp@parallax.co.uk>
-
-       * glyphs-msw.c (mswindows_create_resized_mask)
-       (mswindows_create_resized_bitmap): new funnctions split out from
-       mswindows_resize_dibitmap_instance.
-
-       * glyphs-msw.h: declare new resize functions.
-
-       * toolbar-msw.c (mswindows_output_toolbar): use new bitmap resize
-       functions so that the original bitmaps are preserved.
-
-       * sheap.c: fixup static heap exhausted error to avoid FAQs.
-
-       * redisplay-msw.c (mswindows_output_blank): fixup brush from bg
-       color if we are trying to output 0 depth bg pixmap.
-
-       * scrollbar-msw.c: warning elimination.
-
-1998-05-18  Martin Buchholz  <martin@xemacs.org>
-
-       * frame-x.c (x_update_frame_external_traits): Start preprocessor
-       directives in column 1.
-
-       * search.c (skip_chars): Avoid using xzero with arrays, since some
-       compilers get confused by the construct &array.
-
-1998-05-18  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * objects-msw.h:
-       * objects-msw.c: Changed the charset value for a new font from
-       "don't care" to "ansi".
-
-       * glyphs-msw.c (convert_EImage_to_DIBitmap): Warnings fix.
-
-1998-05-18  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * event-msw.c (mswindows_wnd_proc, WM_KEYDOWN): Do not clear shift
-       modifier on control chars.
-       Use IsCharAlpha() instead of isaplha().
-
-1998-05-19  Kazuyuki IENAGA <ienaga@jsys.co.jp>
-
-       * s/freebsd.h: FreeBSD 2.2.6 now supports setlocale(LC_ALL, "").
-
-1998-05-18  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * objects-msw.c (mswindows_initialize_font_instance): Use ANSI
-       charset when creating font.
-       (mswindows_initialize_color_instance): Do not create brush along
-       with a color.
-       (mswindows_finalize_color_instance): Do not delete it then.
-
-       * objects-msw.h (struct mswindows_color_instance_data): Removed
-       brush slot, and corresponding accessor macro.
-
-1998-05-18  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * toolbar.c: Removed toolbar_data lrecord implementation.
-       (mark_frame_toolbar_buttons_dirty): Replase usage of toolbar_data
-       with toolbar_buttons (via FRAME_TOOLBAR_BUTTONS).
-       (compute_frame_toolbar_buttons): Ditto.
-       (CHECK_TOOLBAR): Ditto.
-       (set_frame_toolbar): Removed allocation of toolbar_data lrecord.
-       (update_frame_toolbars): Do not check for changed buffer
-       here. Toolbar information is provided by cached specs in
-       windows. The check for buffer is eliminated becuase toolbars are
-       marked changed in set_frame_selected_window() in frame.c
-       Added check for changed toolbars geometry.
-       (compute_frame_toolbars_data): Removed unused second parameter;
-       Adjusted callers of this static function throughout the file.
-       (init_frame_toolbars): Initialize current_toolbar_size.
-       (update_frame_toolbars): Use DEVICE_SUPPORTS_TOOLBARS_P instead of
-       what is its current expansion, for clarity.
-       (init_frame_toolbars): Ditto.
-       (init_device_toolbars): Ditto.
-       (init_global_toolbars): Ditto.
-
-       * toolbar.h: Removed definition of toolbar_data lrecord.
-       Added accessor macros FRAME_TOOLBAR_BUTTONS and
-       FRAME_CURRENT_TOOLBAR_SIZE.
-       Added macro DEVICE_SUPPORTS_TOOLBARS_P.
-
-       * toolbar-x.c (x_output_toolbar): The same change as in
-       toolbar-msw.c
-       (x_output_toolbar): Ditto.
-       (x_redraw_exposed_toolbar): Ditto.
-
-       * toolbar-msw.c (mswindows_output_toolbar): Retrieve current
-       buttons from toolbar_buttons using FRAME_TOOLBAR_BUTTONS macro.
-       (mswindows_output_toolbar): Ditto.
-       (mswindows_output_toolbar): Ditto.
-
-       * frame.c (mark_frame): Removed marking of arrays, according to
-       frameslots.h change.
-       (nuke_all_frame_slots): Ditto.
-       (set_frame_selected_window): Mark toolbars changed when
-       last_nonminibuf_window changes.
-
-       * frame.h (struct frame): Moved some slots to frameslots.h.
-       Added current_toolbar_size array.
-       Changed references from toolbar_data to toolbar_buttons in macros
-       FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE,
-       FRAME_RAW_THEORETICAL_TOOLBAR_SIZE and
-       FRAME_RAW_THEORETICAL_TOOLBAR_BORDER_WIDTH.
-
-       * frameslots.h: Added macro MARKED_SLOT_ARRAY a la winslots.h
-       Moved arrays of lisp objects here from frame.h: toolbar_size,
-       toolbar_visible_p, toolbar_border_width.
-       Removed toolbar_data slot and added toolbar_buttons.
-
-1998-05-17  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * symsinit.h: Externed syms_of_process_nt()
-
-       * emacs.c (main_1): Call syms_of_process_nt()
-
-       * process-nt.c: Quote process arguments by a call to Lisp function
-       `nt-quote-process-args'.
-       (syms_of_process_nt): New function.
-       (nt_send_process): Flush data stream after each write, to avoid
-       leaving buffered data.
-       (nt_send_process): When blocked on process output, wait for
-       process to slurp more for progressively increasing time intervals.
-
-1998-05-17  Martin Buchholz  <martin@xemacs.org>
-
-       * window.c (have_undivided_common_edge): Make file-local function
-       static.
-       (map_windows): Return 0 if all map functions successful.
-       Fix typos.
-
-       * winslots.h: Use unlikely names for local variables in macros to
-       avoid shadowing warnings.
-
-1998-05-17  Andy Piper  <andyp@parallax.co.uk>
-
-       * toolbar-msw.c (mswindows_output_toolbar): hash on toolbar width
-       so that we re-output if the toolbar size has changed.
-
-1998-05-17  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
-
-       * s/aix4-2.h (ALIGN_DATA_RELOC): Undefined to support new unexaix.c.
-
-       * s/aix3-1.h (ALIGN_DATA_RELOC): Defined to support new unexaix.c.
-
-       * unexaix.c: Massive cleanup and support of AIX 4.2 (and hopefully
-       greater).
-
-1998-05-16  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * glyphs-msw.c: Defined OEMRESOURCE before including windows.h to
-       get bitmap manifest constants defined.
-
-       * console-msw.h: Include system files in angle brackets, not in
-       quotes.
-
-       * window.c (specifier_vars_of_window): Fixed a typo in
-       `vertical-divider-line-width' docstirng.
-
-1998-05-16  Olivier Galibert  <galibert@pobox.com>
-
-       * line-number.c (delete_invalidate_line_number_cache): Use an
-       EMACS_INT.
-       (buffer_line_number): Remove dangerous, plain wrong when using
-       64bits emacs ints, cast.
-
-       * insdel.c (buffer_delete_range): Use an EMACS_INT.
-
-       * cmds.c (Fforward_line): Use EMACS_INTs.
-
-       * search.c (bi_scan_buffer): Change to use EMACS_INTs.
-       (scan_buffer): Ditto.
-       (bi_find_next_newline_no_quit): Remove useless cast.
-       (find_next_newline_no_quit): Ditto.
-       (find_next_newline): Ditto.
-       (find_before_next_newline): Use an EMACS_INT.
-
-       * lisp.h: Change scan_buffer to pass EMACS_INTs.
-
-1998-05-16  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * menubar-msw.c (mswindows_handle_wm_command): Ditto.
-
-       * toolbar-msw.c (mswindows_handle_toolbar_wm_command): Ditto.
-
-       * gui-x.c (popup_selection_callback): Use it.
-
-       * gui.h (get_callback): Declare it.
-
-       * gui.c (get_callback): New function.
-
-1998-05-15  SL Baur  <steve@altair.xemacs.org>
-
-       * window.c (have_undivided_common_edge): Guard scrollbar specific
-       stuff.
-       (window_needs_vertical_divider_1): Ditto.
-
-1998-05-16  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * emacs.c (decode_path): Eliminate compiler warning.
-       (Fdecode_path): Renamed to Fsplit_path.
-       (Fsplit_string_by_char): New function.
-
-1998-05-14  Damon Lipparelli  <lipp@primus.com>
-
-       * winslots.h: close comment
-
-1998-05-16  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * callproc.c: Removed declared and unused variable Qbuffer_file_type.
-
-       * bufslots.h: Removed buffer_file_type slot.
-
-       * buffer.c (complex_vars_of_buffer): Removed buffer_file_type from
-       buffer local flags.
-       (complex_vars_of_buffer): Removed buffer-file-type variable and
-       its default reference.
-
-1998-05-15  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * faces.c (complex_vars_of_faces): Defined
-       Vvertical_divider_face.
-       (vars_of_faces): Staticpro it.
-
-       * faces.h: Externed Vvertical_divider_face.
-
-       * redisplay-x.c (x_output_vertical_divider): Use
-       Vvertical_divider_face to draw the divider instead of modeline
-       face.
-
-       * redisplay-msw.c (mswindows_output_vertical_divider): Draw
-       divider face using Vvertical_divider_face background.
-       Fix drawing spacing gaps around the divider.
-
-1998-05-14  Didier Verna  <verna@inf.enst.fr>
-
-       * redisplay-x.c (x_output_vertical_divider): removed hard-wired
-       values for the vertical divider line width and spacing. Use the
-       cached values from the window structure instead.
-       (x_divider_width): ditto.
-
-       * window.c (specifier_vars_of_window): new specifiers:
-       vertical-divier -line-width and -spacing.
-       (vertical_divider_global_width_changed): formerly known as
-       vertical_divider_shadow_thickness_changed.
-
-       * winslots.h: new slots: vertical_specifier _line_width and
-       _spacing. Plus corrected a comment typo.
-
-1998-05-15  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * window.h: Declared window_divider_width().
-
-       * console-stream.c (stream_divider_width): Removed method.
-       (console_type_create_stream): And declaration for it.
-
-       * redisplay.c (pixel_to_glyph_translation): Use
-       window_divider_width() instead of divider_width redisplay method.
-       (pixel_to_glyph_translation): Fix top divider edge calculation
-       when scrollbar is on top.
-
-       * window.c (window_divider_width): New function, an outphaser for
-       divider_width redisplay method.
-       (window_right_gutter_width): Use it.
-       (specifier_vars_of_window): For vertical-divider-{spacing,line-width}
-       specifiers, set fallback values differently on TTYs, and document
-       the behavior of these on TTYs in the docstrings.
-
-       * scrollbar.c (update_scrollbar_instance): Use
-       window_divider_width() instead of divider_width redisplay method.
-
-       * console.h (struct console_methods): Removed divider_width_method.
-
-       * redisplay-tty.c (tty_divider_width): Removed device method.
-       (console_type_create_redisplay_tty): Removed definition for it.
-       (tty_output_vertical_divider): Respect the value returned by
-       window_divider_width thus divider line width specification.
-
-       * redisplay-msw.c (mswindows_divider_width): Removed device method.
-       (console_type_create_redisplay_mswindows): Removed definition for it.
-       (mswinodws_output_vertical_divider): Respect the value returned by
-       window_divider_width thus divider line width specification.
-
-1998-05-15  Andy Piper  <andyp@parallax.co.uk>
-
-       * toolbar-msw.c: guess toolbar frame size a bit more accurately.
-
-1998-05-15  Andy Piper  <andyp@parallax.co.uk>
-
-       * glyphs-msw.c: resource loading implementation.
-       (cursor_normalize): new function.
-       (cursor_validate): ditto.
-       (cursor_instantiate): ditto.
-       (cursor_name_to_resource): ditto.
-       (cursor_possible_dest_types): ditto.
-       (check_valid_symbol): ditto.
-       (check_valid_string_or_int): ditto.
-
-1998-05-14  Martin Buchholz  <martin@xemacs.org>
-
-       * sysdep.c (tty_init_sys_modes_on_device): Treat VSUSP just like
-       VINTR and VQUIT.
-
-       * process-unix.c (process_signal_char): Use VSUSP instead of
-       non-standard VSWTCH.  Always prefer VSUSP to VSWTCH.
-
-1998-05-14  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * specifier.c (specifier_instance): Change locale precedence of
-       instantiation so window locale has higher priority than buffer
-       locale.
-       (Fspecifier_instance): Reflect this in docstring.
-       (Fadd_spec_list_to_specifier): Ditto.
-       (Fadd_spec_to_specifier): Ditto.
-       (Fremove_specifier): Ditto.
-
-1998-05-15  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       ** Dialog separation into a device method from Andy Piper
-
-       * emacs.c (main_1): Call console_type_create_dialog_x().
-
-       * dialog-x.c (x_popup_dialog_box): Old Fpopup_dialog_box converted
-       into this device method.
-       (console_type_create_dialog_x): New function.
-
-       * dialog.c (Fpopup_dialog_box): New function.
-       (syms_of_dialog): Defsubr it.
-
-       * console.h (struct console_methods): Declared
-       popup_dialog_box_method().
-
-       * symsinit.h: Defined console_type_create_dialog_{x,mswindows}
-
-1998-05-14  Oliver Graf <ograf@fga.de>
-
-       * dragdrop.c (vars_of_dragdrop): dragdrop-protocols created
-       * frame-x.c (x_cde_transfer_callback): checked for merge errors
-
-1998-05-13  Oliver Graf <ograf@fga.de>
-
-       * dragdrop.c (vars_of_dragdrop): provide dragdrop-api
-
-1998-05-15  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * console.h (device_metrics): Removed dbcs, input-method-editor
-       and right-to-left metrics.
-
-       * device.c (Fdevice_system_metric): Ditto.
-       (Fdevice_system_metrics): Ditto.
-       (syms_of_device): Ditto.
-       (Fdevice_system_metric): Swapped DEVICE and METRIC parameters back
-       again.
-
-1998-05-14  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * line-number.h (mark_line_number_cache): Remove unused
-       declaration.
-
-       * line-number.c (LINE_NUMBER_FAR): Increase to 32768.
-       (get_nearest_line_number): Simplify.
-       (add_position_to_cache): Make the old marker point nowhere.
-
-1998-05-14  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       ** Renamed window-divider-map => vertical-divider-map
-       and event-over-divider-p => event-over-vertical-divider-p,
-       in the following files/functions:
-       * events.h:
-       * events.c (Fevent_over_divider_p):
-       * keymap.c (get_relevant_keymaps):
-       (vars_of_keymap):
-
-       * redisplay.h (OVER_V_DIVIDER): Renamed so from OVER_DIVIDER.
-
-       * redisplay.c (pixel_to_glyph_translation): Use OVER_V_DIVIDER.
-
-1998-05-14  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * window.c (vertical_divider_changed_in_window): Renamed so.
-       (specifier_vars_of_window): Defined Vvertical_divider_draggable_p.
-       (window_needs_vertical_divider_1): Decide whether we need it based
-       on the value of the above specifier. If separators are unwanted,
-       put them only if there's no scrollbar between this window and its
-       right neighbor.
-       (have_undivided_common_edge): New function, helper for the above.
-       (window_needs_vertical_divider): Return either a cached value,
-       or clauclate and cache one.
-       (invalidate_vertical_divider_cache_in_window): Implemented.
-       (map_windows): Changed return type to int, return the value from
-       MAPFUN.
-
-       * window.h: Prototype invalidate_vertical_divider_cache_in_window.
-       (struct window): Added need_vertical_divider_p and
-       need_vertical_divider_valid_p.
-
-       * winslots.h: Added vertical_divider_draggable_p slot.
-
-       * scrollbar.c (vertical_scrollbar_changed_in_window): Implemented.
-       (specifier_vars_of_scrollbar): Used it in all vertical specifiers.
-
-       * frame.c (invalidate_vertical_divider_cache_in_frame): New function.
-
-       * frame.h (MARK_FRAME_WINDOWS_STRUCTURE_CHANGED): Call
-       invalidate_vertical_divider_cache_in_frame().
-       Prototype it.
-
-1998-05-14  Andy Piper  <andyp@parallax.co.uk>
-
-       * toolbar-msw.c: provide correct parameters to TB_SETROWS.
-
-       * glyphs-msw.c (mswindows_initialize_image_instance_mask): size
-       masks correctly and don't select 0.
-
-1998-05-14  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * winslots.h: New file, declaration of some struct window and
-       struct saved_window members.
-
-       * window.h (struct window): Include it, with required preprocessor
-       magic.
-
-       * window.c (mark_window): Ditto.
-       (allocate_window): Ditto.
-       (struct saved_window): Ditto.
-       (mark_window_config): Ditto.
-       (saved_window_equal): Ditto.
-       (Fset_window_configuration): Ditto.
-
-1998-05-14  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * redisplay-msw.c (mswindows_output_vertical_divider): Syntax fix.
-
-1998-05-12  Didier Verna  <verna@inf.enst.fr>
-
-       * redisplay-x.c (x_output_vertical_divider): draw shadows around
-       the divider line. The shadow thickness is currently
-       hard-wired. This will probably be turned into a specifier soon.
-
-1998-05-12  Didier Verna  <verna@inf.enst.fr>
-
-       * console.h (struct console_methods): the divider_width console
-       method now requires a struct window * argument.
-
-       * redisplay-x.c (x_divider_width): ditto. Plus remove
-       X_DIVIDER_WIDTH, X_DIVIDER_SHADOW_THICKNESS.
-       (x_output_vertical_divider): give a depressed look when the shadow
-       thickness is negative.
-
-       * console-stream.c (stream_divider_width): pass a struct window *
-       argument.
-
-       * redisplay-tty.c (tty_divider_width): ditto.
-
-       * window.c (window_right_gutter_width): totdi.
-
-       * redisplay.c (generate_modeline): ittod.
-
-       * scrollbar.c (update_scrollbar_instance): ttido.
-
-       * redisplay-msw.c (mswindows_divider_width): ottid.
-       WARNING: this enables to compile, but the feature is not functional.
-
-       * window.h (struct window): new field
-       vertical_divider_shadow_thickness.
-
-       * window.c (specifier_vars_of_window): new specifier
-       vertical-divider-shadow-thickness.
-       (vertical_divider_shadow_thickness_changed): new function to
-       inform redisplay that the window has changed.
-       (mark_window): handle new field vertical_divider_shadow_thickness
-       from struct window.
-       (allocate_window): ditto.
-       (saved_window_equal): toddi.
-       (Fset_window_configuration): totid.
-       (save_window_save): ttdio.
-       (struct saved_window): new field vertical_divider_shadow_thickness.
-
-1998-05-14  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * device-msw.c (mswindows_device_system_metrics): Support a deluge
-       of metrics.
-
-1998-05-12  Oliver Graf <ograf@fga.de>
-
-       * frame-x.c (x_cde_transfer_callback): fixed for the new protocol
-       * event-Xt.c (x_event_to_emacs_event): C++ compability
-
-1998-05-14  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * emacs.c (Fdecode_path): Default SEPCHAR to value of
-       path-separator.
-
-1998-05-14  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * emacs.c (vars_of_emacs): Do it here; change the meaning of
-       Vpath_separator.
-
-       * fileio.c (vars_of_fileio): Don't define Vpath_separator here.
-
-1998-05-14  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * emacs.c (decode_path_1): New function.
-       (decode_path): Use it.
-       (Fdecode_path): Renamed from Fdecode_path_internal; use
-       decode_path_1.
-
-1998-05-12  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * macros.c (Fzap_last_kbd_macro_event): New function.
-       (Fend_kbd_macro): Remove REMOVE_LAST kludge.
-
-1998-05-10  Andy Piper  <andyp@parallax.co.uk>
-
-       * redisplay-msw.c (mswindows_output_dibitmap_region): make sure
-       multiple bitmaps are output vertically as well as horizontally.
-       * (mswindows_output_dibitmap): don't cope with bitmap boundaries
-       crossing lines this is handled by
-       mswindows_output_dibitmap_region.
-
-1998-05-12  Martin Buchholz  <martin@xemacs.org>
-
-       * inline.c: Include eldap.h
-
-       * menubar-x.c (x_update_frame_menubar_internal):
-       Remove: unused variable `container'
-
-1998-05-11  Martin Buchholz  <martin@xemacs.org>
-
-       * s/aix4.h: Allow AIX 4.3 XEmacs to compile cleanly.
-       Unfortunately, the resulting temacs still cannot dump.
-
-       * symbols.c (symbol_is_constant):
-       (verify_ok_for_buffer_local):
-       -Wswitch Warning suppression - add default case to switches.
-
-       * redisplay.c (decode_mode_spec): Remove unused variables,
-       Replace Fcoding_system_property (codesys, Qmnemonic) with
-       XCODING_SYSTEM_MNEMONIC (codesys);
-       Fcoding_system_property is for users.
-
-       * buffer.c:
-       * fileio.c:
-       * lread.c:
-       * xselect.c:
-       Change empty docstrings into no doc strings at all.
-       Fix bogus FSF-format docstrings.
-
-       * extents.c:
-       Standardize docstrings.
-
-       * floatfns.c:
-       Explain problems with matherr.
-
-       * glyphs.c:  make DEFUNs etags-readable, i.e. single-line
-
-       * syssignal.h:
-       if BROKEN_SIGIO, then SIGIO wants to be undefined.
-       if SIGIO and not SIGPOLL, SIGPOLL wants to be SIGIO.\
-       Fix the weird resultant interaction (causes windows problems)
-
-       * gdbinit:
-       * dbxrc:
-       Take new EMACSBOOTSTRAPLOADPATH into account.
-       Update documentation strings
-
-       * Makefile.in.in:
-       - Adjust for luser's CDPATH being set to something weird.
-       - Take into account bash 2.02's tendency to print the cwd when
-         using CDPATH.  Always use `cd ./foo' instead of `cd foo'.
-       - fix the run-temacs target to use $(DUMPENV)
-       - fix the run-puremacs target to use $(DUMPENV)
-       - fix the `depend' target to properly $(RM) the right files
-       - Generate a better TAGS file for XEmacs' lisp code using
-         hand-crafted regexps.
-       - Use standard coding conventions for modules/Makefile.in
-
-1998-05-12  Didier Verna  <verna@inf.enst.fr>
-
-       * redisplay.c: removed the scrolling modeline code that didn't
-       make it for 21.0. To be continued ...
-
-1998-05-13  Michael Sperber [Mr. Preprocessor]  <sperber@informatik.uni-tuebingen.de>
-
-       * emacs.c (Fdecode_path_internal): Removed bogus handling of nil
-       and empty string inputs.
-
-1998-05-12  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * redisplay-x.c (x_output_vertical_divider): Fixed typo.
-
-1998-05-10  Oliver Graf <ograf@fga.de>
-
-       * event-stream.c (enqueue_misc_user_event_pos): created
-       * lisp.h (enqueue_misc_user_event_pos): prototype added
-       * frame-x.c (x_cde_transfer_callback): debug code plus API changes
-       * emacs.c: call vars_of_dragdrop
-       * dragdrop.c (vars_of_dragdrop): provide dragdrop
-
-1998-05-11  Oliver Graf <ograf@fga.de>
-
-       * frame-x.c (x_cde_transfer_callback): return at correct pos
-       * event-Xt.c (x_event_to_emacs_event): changed format of drop
-       object for MIME (see comment in dragdrop.c)
-       * dragdrop.c: API change documented in comment
-       removed provide of dragdrop [is provided by dragdrop.el]
-
-1998-05-12  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * window.c (window_needs_vertical_divider): Enable vertical
-       dividers for every non-rightmost window.
-       (window_left_gutter_width): Left gutter consists of mythical
-       toolbar and a virtual scrollbar.
-       (window_right_gutter_width): The right one may have a divider
-       also.
-
-       * scrollbar.c (update_scrollbar_instance): Position vertical
-       scrollbar left to divider if the latter present.
-
-       * redisplay.h: Declared OVER_DIVIER constant.
-
-       * redisplay.c (pixel_to_glyph_translation): Handle OVER_DIVIDER
-       case.
-
-       * redisplay-x.c (x_output_vertical_divider): Output divider along
-       the right side of the window, down to window bottom. Swapped
-       foreground and background colors so it is visible by default.
-
-       * redisplay-tty.c (tty_output_vertical_divider): Uncondiionally
-       stick the divider to the right window side.
-
-       * redisplay-msw.c (mswindows_redisplay_deadbox_maybe): Fixed
-       deadbox painting.
-       (mswindows_divider_width): Ask system for user preferred value.
-       (mswindows_output_vertical_divider): Always output the divider on
-       the right side of a window, down to bottom.
-
-       * keymap.c (get_relevant_keymaps): Route mouse button events which
-       happened over a window divider through window-divider-map.
-       (Fkey_binding): Documented that in the docstring.
-       Defined the variable Vwindow_divider_map.
-
-       * events.c (Fevent_over_divider_p): Added this function.
-
-       * events.h: EXFUNed it.
-
-1998-05-12  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * toolbar.c (update_frame_toolbars): Re-layout frame windows if
-       toolbar geometry is suspected to change.
-
-1998-05-11  Jonathan Harris  <jhar@tardis.ed.ac.uk>
-
-       * src/device-msw.c
-       * src/event-msw.c
-       Condition dnd and dde code on HAVE_DRAGNDROP.
-
-1998-05-11  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * events.c (format_event_object): Print space as SPC etc.
-
-1998-05-11  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * print.c (print_internal): In the default case, abort() if
-       ERROR_CHECK_TYPECHECK.
-
-       * fileio.c (Fmake_temp_name): Doc fix.
-
-1998-05-10  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * xgccache.c (describe_gc_cache): Define only if DEBUG_XEMACS.
-
-       * undo.c (Fprimitive_undo): Fixed typo.
-
-1998-05-11  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * fns.c (concat): Signal error on integer argument.
-
-1998-05-10  Kirill M. Katsnelson  <kkm@kis.ru>
-
-       * console.h (device_metrics): Prefixed each constatnt with DM_
-
-       * device.c: (Fdevice_system_metric): Renamed so from plural form
-       (metrics); Changed parameters order and added DEFAULT parameter;
-       Unabbreviated some metric constants; Fixed and untabified doc string.
-       (Fdevice_system_metrics): Added. Returns a plist of all provided
-       metrics.
-
-       * device-msw.c (mswindows_device_system_metrics): Renamed
-       device_metrics enum constants.
-       Return Qunbound instead of Qnil.
-
-       * device-tty.c (tty_device_system_metrics): Ditto.
-
-       * device-x.c (x_device_system_metrics): Ditto.
-
-1998-05-10  Andy Piper  <andyp@parallax.co.uk>
-
-       * redisplay-msw.c: implement background pixmaps (really!). Make
-       sure bg color is transparent if we have bg pmaps.
-       * (mswindows_output_string) (mswindows_clear_region): output bg
-       pmap if required.
-       * (mswindows_output_dibitmap_region): new function.
-       * (mswindows_output_dibitmap): output offset pixmaps, blt masks in
-       the bg color rather than transparently.
-
-       * toolbar-msw.c: use masks if they exist.
-
-       * glyphs-msw.c: set up masks correctly.
-
-       * event-msw.c: typedef SOCKET if cygwin and not msg select().
+       * window.c (Fset_window_configuration):
+       * sysdep.c (_start):
+       * input-method-motif.c (res):
+       * event-Xt.c (Xt_process_to_emacs_event):
+       Simple compiler warning fixes.
+
+       * bytecode.c (funcall_compiled_function): Use the original
+       function symbol on the backtrace list in preference to the
+       compiled_function object in error messages.
+
+2000-01-13  Andy Piper  <andy@xemacs.org>
 
-1998-05-10  Hrvoje Niksic  <hniksic@srce.hr>
+       * glyphs-x.c (update_widget_face): Make sure we update the widget
+       background as well as foreground.
+
+2000-01-13  Andy Piper  <andy@xemacs.org>
+
+       * glyphs.h (struct Lisp_Image_Instance): Move justify and orient
+       fields to subwindow.
+       (IMAGE_INSTANCE_SUBWINDOW_JUSTIFY): new macro.
+       (XIMAGE_INSTANCE_SUBWINDOW_JUSTIFY): ditto.
+       (IMAGE_INSTANCE_SUBWINDOW_ORIENT): ditto.
+       (XIMAGE_INSTANCE_SUBWINDOW_ORIENT): ditto.
+
+       * glyphs-widget.c (check_valid_tab_orientation): new function.
+       (initialize_widget_image_instance): zero orientation and
+       justification.
+       (widget_instantiate): pick up orientation.
+       (tab_control_query_geometry): return appropriate values for
+       vertical tabs.
+
+       * glyphs-msw.c: (mswindows_tab_control_instantiate): assign
+       appropriate creation flags for left, right and bottom tabs.
+
+       * s/cygwin32.h: add tab definitions.
+
+2000-01-12  Kirill 'Big K' Katsnelson  <kkm@dtmx.com>
+
+       * glyphs-msw.c (mswindows_unmap_subwindow): Set focus back to the
+       frame upon hiding a subwindow.
+       (mswindows_button_instantiate): Changed the push button style to
+       BS_PUSHBUTTON.
+       (mswindows_button_instantiate): Removed button BS_NOTIFY
+       style.
+       (mswindows_button_instantiate): Removed redundant check for
+       a disabled gui item.
+       (mswindows_button_instantiate): Made use of WS_TABSTOP
+       consistent: "operable" controls (edit, button, tree, scroll) have
+       this style, "display-only" ones (static, progress gauge) do
+       not. This style is currently ignored by XEmacs though. Also,
+       removed the WS_EX_CONTROLPARENT style - it is not for children,
+       it is for their parents!
+       (mswindows_edit_field_instantiate): Ditto.
+       (mswindows_progress_gauge_instantiate): Ditto.
+       (mswindows_tree_view_instantiate): Ditto.
+       (mswindows_tab_control_instantiate): Ditto.
+       (mswindows_scrollbar_instantiate): Ditto.
+       (mswindows_combo_box_instantiate): Ditto.
+       (mswindows_widget_instantiate): Added the WS_EX_CONTROLPARENT
+       style to the "clip" window.
+       (mswindows_button_instantiate): Removed compilation warning by
+       equally typing terms of the ?: operator.
+
+2000-01-12  Didier Verna  <didier@xemacs.org>
+
+       * redisplay.c (generate_fstring_runes): new parameter holding the
+       last modeline-format extent.
+       (add_glyph_to_fstring_db_runes): new parameter holding the glyph
+       extent, fill the glyph block with it.
+       (generate_fstring_runes): handle these parameters.
+       (generate_formatted_string_db): ditto.
+
+       * keymap.c (get_relevant_keymaps): retreive the keymaps from the
+       glyphs'extents in the modeline.
+
+1999-01-11  Mike Woolley  <mike@bulsara.com>
+
+       * ntheap.c: Reduced the reserved heap space from 1Gb down to
+       256Mb, as a workaround for the non-starting problem many people
+       have experienced.
+
+2000-01-06  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * console-tty.c (Fset_console_tty_output_coding_system):
+       Force redrawing tty frame.
+
+2000-01-10  Didier Verna  <didier@xemacs.org>
+
+       * redisplay.c (generate_fstring_runes): fix size computation bug.
+
+2000-01-09  William M. Perry <wmperry@aventail.com>
+
+       * gpmevent.c: (gpm_next_event_cb): Don't return value from void function.
+
+2000-01-09  Andy Piper  <andy@xemacs.org>
+
+       * glyphs-msw.c: index -> i to avoid shadows.
+       (xbm_create_bitmap_from_data): make static.
+       (check_valid_string_or_int): deleted.
+       (mswindows_control_wnd_proc): message -> msg to avoid shadows.
+
+       * glyphs-x.c (x_update_subwindow): remove unused args.
 
-       * regex.c (re_match_2_internal): Check for quit.
+       * glyphs.c (glyph_image_instance): return the thing. Don't set the
+       back pointer - this is done in allocate_image_instance.
+       (query_string_font): return Qnil to make the compiler happy.
+       (unmap_subwindow): set to ~0 to make the compiler happy.
+       (glyph_query_geometry): comment out until used.
+       (glyph_layout): ditto.
 
-1998-05-10  Hrvoje Niksic  <hniksic@srce.hr>
+2000-01-09  Hrvoje Niksic  <hniksic@iskon.hr>
 
-       * frame.c (Ffocus_frame): New function.
+       * insdel.c (signal_after_change): Remove extraneous unbind_to().
index 36aede3..21d04e1 100644 (file)
@@ -502,7 +502,7 @@ debug-temacs: temacs
 ## Purify
 PURIFY_PROG  = purify
 PURIFY_FLAGS = -chain-length=32 -ignore-signals=SIGPOLL -threads=yes \
- -cache-dir=./purecache -always-use-cache-dir=yes -pointer-mask=0x0fffffff
+ -cache-dir=./purecache -always-use-cache-dir=yes
 PURIFY_LIBS  = -lpthread
 puremacs: $(temacs_deps)
        $(PURIFY_PROG) $(PURIFY_FLAGS) $(LD) $(temacs_link_args) $(PURIFY_LIBS)
index ca3bb7c..8ee5af5 100644 (file)
@@ -496,8 +496,8 @@ this_one_is_unmarkable (Lisp_Object obj)
 /************************************************************************/
 /* Give gdb/dbx enough information to decode Lisp Objects.  We make
    sure certain symbols are always defined, so gdb doesn't complain
-   about expressions in src/gdbinit.  See src/gdbinit or src/dbxrc to
-   see how this is used.  */
+   about expressions in src/.gdbinit.  See src/.gdbinit or src/.dbxrc
+   to see how this is used.  */
 
 EMACS_UINT dbg_valmask = ((1UL << VALBITS) - 1) << GCBITS;
 EMACS_UINT dbg_typemask = (1UL << GCTYPEBITS) - 1;
@@ -1720,7 +1720,7 @@ noseeum_make_marker (void)
 
    This new method makes things somewhat bigger, but it is MUCH safer.  */
 
-DECLARE_FIXED_TYPE_ALLOC (string, struct Lisp_String);
+DECLARE_FIXED_TYPE_ALLOC (string, Lisp_String);
 /* strings are used and freed quite often */
 /* #define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_string 10000 */
 #define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_string 1000
@@ -1728,7 +1728,7 @@ DECLARE_FIXED_TYPE_ALLOC (string, struct Lisp_String);
 static Lisp_Object
 mark_string (Lisp_Object obj)
 {
-  struct Lisp_String *ptr = XSTRING (obj);
+  Lisp_String *ptr = XSTRING (obj);
 
   if (CONSP (ptr->plist) && EXTENT_INFOP (XCAR (ptr->plist)))
     flush_cached_extent_info (XCAR (ptr->plist));
@@ -1764,7 +1764,7 @@ DEFINE_BASIC_LRECORD_IMPLEMENTATION ("string", string,
                                      */
                                     0, string_equal, 0,
                                     string_description,
-                                    struct Lisp_String);
+                                    Lisp_String);
 
 /* String blocks contain this many useful bytes. */
 #define STRING_CHARS_BLOCK_SIZE                                        \
@@ -1789,27 +1789,22 @@ static struct string_chars_block *current_string_chars_block;
  *  the string occupies in string_chars_block->string_chars
  *  (including alignment padding).
  */
-#define STRING_FULLSIZE(s) \
-   ALIGN_SIZE (((s) + 1 + sizeof (struct Lisp_String *)),\
-               ALIGNOF (struct Lisp_String *))
+#define STRING_FULLSIZE(size) \
+   ALIGN_SIZE (((size) + 1 + sizeof (Lisp_String *)),\
+               ALIGNOF (Lisp_String *))
 
 #define BIG_STRING_FULLSIZE_P(fullsize) ((fullsize) >= STRING_CHARS_BLOCK_SIZE)
 #define BIG_STRING_SIZE_P(size) (BIG_STRING_FULLSIZE_P (STRING_FULLSIZE(size)))
 
-#define CHARS_TO_STRING_CHAR(x) \
-  ((struct string_chars *) \
-   (((char *) (x)) - (slot_offset (struct string_chars, chars[0]))))
-
-
 struct string_chars
 {
-  struct Lisp_String *string;
+  Lisp_String *string;
   unsigned char chars[1];
 };
 
 struct unused_string_chars
 {
-  struct Lisp_String *string;
+  Lisp_String *string;
   EMACS_INT fullsize;
 };
 
@@ -1824,19 +1819,14 @@ init_string_chars_alloc (void)
 }
 
 static struct string_chars *
-allocate_string_chars_struct (struct Lisp_String *string_it_goes_with,
+allocate_string_chars_struct (Lisp_String *string_it_goes_with,
                              EMACS_INT fullsize)
 {
   struct string_chars *s_chars;
 
-  /* Allocate the string's actual data */
-  if (BIG_STRING_FULLSIZE_P (fullsize))
-    {
-      s_chars = (struct string_chars *) xmalloc (fullsize);
-    }
-  else if (fullsize <=
-           (countof (current_string_chars_block->string_chars)
-            - current_string_chars_block->pos))
+  if (fullsize <=
+      (countof (current_string_chars_block->string_chars)
+       - current_string_chars_block->pos))
     {
       /* This string can fit in the current string chars block */
       s_chars = (struct string_chars *)
@@ -1868,21 +1858,20 @@ allocate_string_chars_struct (struct Lisp_String *string_it_goes_with,
 Lisp_Object
 make_uninit_string (Bytecount length)
 {
-  struct Lisp_String *s;
-  struct string_chars *s_chars;
+  Lisp_String *s;
   EMACS_INT fullsize = STRING_FULLSIZE (length);
   Lisp_Object val;
 
-  if ((length < 0) || (fullsize <= 0))
-    abort ();
+  assert (length >= 0 && fullsize > 0);
 
   /* Allocate the string header */
-  ALLOCATE_FIXED_TYPE (string, struct Lisp_String, s);
+  ALLOCATE_FIXED_TYPE (string, Lisp_String, s);
   set_lheader_implementation (&(s->lheader), &lrecord_string);
 
-  s_chars = allocate_string_chars_struct (s, fullsize);
+  set_string_data (s, BIG_STRING_FULLSIZE_P (fullsize)
+                  ? xnew_array (Bufbyte, length + 1)
+                  : allocate_string_chars_struct (s, fullsize)->chars);
 
-  set_string_data (s, &(s_chars->chars[0]));
   set_string_length (s, length);
   s->plist = Qnil;
 
@@ -1903,8 +1892,9 @@ static void verify_string_chars_integrity (void);
 */
 
 void
-resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta)
+resize_string (Lisp_String *s, Bytecount pos, Bytecount delta)
 {
+  Bytecount oldfullsize, newfullsize;
 #ifdef VERIFY_STRING_CHARS_INTEGRITY
   verify_string_chars_integrity ();
 #endif
@@ -1923,47 +1913,59 @@ resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta)
     }
 #endif /* ERROR_CHECK_BUFPOS */
 
-  if (pos >= 0 && delta < 0)
-  /* If DELTA < 0, the functions below will delete the characters
-     before POS.  We want to delete characters *after* POS, however,
-     so convert this to the appropriate form. */
-    pos += -delta;
-
   if (delta == 0)
     /* simplest case: no size change. */
     return;
-  else
-    {
-      Bytecount oldfullsize = STRING_FULLSIZE (string_length (s));
-      Bytecount newfullsize = STRING_FULLSIZE (string_length (s) + delta);
 
-      if (oldfullsize == newfullsize)
+  if (pos >= 0 && delta < 0)
+    /* If DELTA < 0, the functions below will delete the characters
+       before POS.  We want to delete characters *after* POS, however,
+       so convert this to the appropriate form. */
+    pos += -delta;
+
+  oldfullsize = STRING_FULLSIZE (string_length (s));
+  newfullsize = STRING_FULLSIZE (string_length (s) + delta);
+
+  if (BIG_STRING_FULLSIZE_P (oldfullsize))
+    {
+      if (BIG_STRING_FULLSIZE_P (newfullsize))
        {
-         /* next simplest case; size change but the necessary
-            allocation size won't change (up or down; code somewhere
-            depends on there not being any unused allocation space,
-            modulo any alignment constraints). */
+         /* Both strings are big.  We can just realloc(). */
+         set_string_data (s, (Bufbyte *) xrealloc (string_data (s),
+                                                   string_length (s) + delta + 1));
          if (pos >= 0)
            {
              Bufbyte *addroff = pos + string_data (s);
 
              memmove (addroff + delta, addroff,
-                      /* +1 due to zero-termination. */
                       string_length (s) + 1 - pos);
            }
        }
-      else if (BIG_STRING_FULLSIZE_P (oldfullsize) &&
-              BIG_STRING_FULLSIZE_P (newfullsize))
+      else /* String has been demoted from BIG_STRING. */
        {
-         /* next simplest case; the string is big enough to be malloc()ed
-            itself, so we just realloc.
+         Bufbyte *new_data =
+           allocate_string_chars_struct (s, newfullsize)->chars;
+         Bufbyte *old_data = string_data (s);
 
-            It's important not to let the string get below the threshold
-            for making big strings and still remain malloc()ed; if that
-            were the case, repeated calls to this function on the same
-            string could result in memory leakage. */
-         set_string_data (s, (Bufbyte *) xrealloc (string_data (s),
-                                                   newfullsize));
+         if (pos >= 0)
+           {
+             memcpy (new_data, old_data, pos);
+             memcpy (new_data + pos + delta, old_data + pos,
+                     string_length (s) + 1 - pos);
+           }
+         set_string_data (s, new_data);
+         xfree (old_data);
+       }
+    }
+  else /* old string is small */
+    {
+      if (oldfullsize == newfullsize)
+       {
+         /* special case; size change but the necessary
+            allocation size won't change (up or down; code
+            somewhere depends on there not being any unused
+            allocation space, modulo any alignment
+            constraints). */
          if (pos >= 0)
            {
              Bufbyte *addroff = pos + string_data (s);
@@ -1975,58 +1977,52 @@ resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta)
        }
       else
        {
-         /* worst case.  We make a new string_chars struct and copy
-            the string's data into it, inserting/deleting the delta
-            in the process.  The old string data will either get
-            freed by us (if it was malloc()ed) or will be reclaimed
-            in the normal course of garbage collection. */
-         struct string_chars *s_chars =
-           allocate_string_chars_struct (s, newfullsize);
-         Bufbyte *new_addr = &(s_chars->chars[0]);
-         Bufbyte *old_addr = string_data (s);
+         Bufbyte *old_data = string_data (s);
+         Bufbyte *new_data =
+           BIG_STRING_FULLSIZE_P (newfullsize)
+           ? xnew_array (Bufbyte, string_length (s) + delta + 1)
+           : allocate_string_chars_struct (s, newfullsize)->chars;
+
          if (pos >= 0)
            {
-             memcpy (new_addr, old_addr, pos);
-             memcpy (new_addr + pos + delta, old_addr + pos,
+             memcpy (new_data, old_data, pos);
+             memcpy (new_data + pos + delta, old_data + pos,
                      string_length (s) + 1 - pos);
            }
-         set_string_data (s, new_addr);
-         if (BIG_STRING_FULLSIZE_P (oldfullsize))
-           xfree (old_addr);
-         else
-           {
-             /* We need to mark this chunk of the string_chars_block
-                as unused so that compact_string_chars() doesn't
-                freak. */
-             struct string_chars *old_s_chars =
-               (struct string_chars *) ((char *) old_addr -
-                                        sizeof (struct Lisp_String *));
-             /* Sanity check to make sure we aren't hosed by strange
-                alignment/padding. */
-             assert (old_s_chars->string == s);
-             MARK_STRUCT_AS_FREE (old_s_chars);
-             ((struct unused_string_chars *) old_s_chars)->fullsize =
-               oldfullsize;
-           }
+         set_string_data (s, new_data);
+
+         {
+           /* We need to mark this chunk of the string_chars_block
+              as unused so that compact_string_chars() doesn't
+              freak. */
+           struct string_chars *old_s_chars = (struct string_chars *)
+             ((char *) old_data - offsetof (struct string_chars, chars));
+           /* Sanity check to make sure we aren't hosed by strange
+              alignment/padding. */
+           assert (old_s_chars->string == s);
+           MARK_STRUCT_AS_FREE (old_s_chars);
+           ((struct unused_string_chars *) old_s_chars)->fullsize =
+             oldfullsize;
+         }
        }
+    }
 
-      set_string_length (s, string_length (s) + delta);
-      /* If pos < 0, the string won't be zero-terminated.
-        Terminate now just to make sure. */
-      string_data (s)[string_length (s)] = '\0';
+  set_string_length (s, string_length (s) + delta);
+  /* If pos < 0, the string won't be zero-terminated.
+     Terminate now just to make sure. */
+  string_data (s)[string_length (s)] = '\0';
 
-      if (pos >= 0)
-       {
-         Lisp_Object string;
-
-         XSETSTRING (string, s);
-         /* We also have to adjust all of the extent indices after the
-            place we did the change.  We say "pos - 1" because
-            adjust_extents() is exclusive of the starting position
-            passed to it. */
-         adjust_extents (string, pos - 1, string_length (s),
-                         delta);
-       }
+  if (pos >= 0)
+    {
+      Lisp_Object string;
+
+      XSETSTRING (string, s);
+      /* We also have to adjust all of the extent indices after the
+        place we did the change.  We say "pos - 1" because
+        adjust_extents() is exclusive of the starting position
+        passed to it. */
+      adjust_extents (string, pos - 1, string_length (s),
+                     delta);
     }
 
 #ifdef VERIFY_STRING_CHARS_INTEGRITY
@@ -2037,7 +2033,7 @@ resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta)
 #ifdef MULE
 
 void
-set_string_char (struct Lisp_String *s, Charcount i, Emchar c)
+set_string_char (Lisp_String *s, Charcount i, Emchar c)
 {
   Bufbyte newstr[MAX_EMCHAR_LEN];
   Bytecount bytoff = charcount_to_bytecount (string_data (s), i);
@@ -2164,7 +2160,7 @@ build_translated_string (CONST char *str)
 Lisp_Object
 make_string_nocopy (CONST Bufbyte *contents, Bytecount length)
 {
-  struct Lisp_String *s;
+  Lisp_String *s;
   Lisp_Object val;
 
   /* Make sure we find out about bad make_string_nocopy's when they happen */
@@ -2173,7 +2169,7 @@ make_string_nocopy (CONST Bufbyte *contents, Bytecount length)
 #endif
 
   /* Allocate the string header */
-  ALLOCATE_FIXED_TYPE (string, struct Lisp_String, s);
+  ALLOCATE_FIXED_TYPE (string, Lisp_String, s);
   set_lheader_implementation (&(s->lheader), &lrecord_string);
   SET_C_READONLY_RECORD_HEADER (&s->lheader);
   s->plist = Qnil;
@@ -2997,7 +2993,7 @@ verify_string_chars_integrity (void)
         {
           struct string_chars *s_chars =
             (struct string_chars *) &(sb->string_chars[pos]);
-          struct Lisp_String *string;
+          Lisp_String *string;
          int size;
          int fullsize;
 
@@ -3048,7 +3044,7 @@ compact_string_chars (void)
           struct string_chars *from_s_chars =
             (struct string_chars *) &(from_sb->string_chars[from_pos]);
           struct string_chars *to_s_chars;
-          struct Lisp_String *string;
+          Lisp_String *string;
          int size;
          int fullsize;
 
@@ -3133,7 +3129,7 @@ compact_string_chars (void)
 static int debug_string_purity;
 
 static void
-debug_string_purity_print (struct Lisp_String *p)
+debug_string_purity_print (Lisp_String *p)
 {
   Charcount i;
   Charcount s = string_char_length (p);
@@ -3159,24 +3155,25 @@ sweep_strings (void)
   int num_small_used = 0, num_small_bytes = 0, num_bytes = 0;
   int debug = debug_string_purity;
 
-#define UNMARK_string(ptr)                             \
-  do { struct Lisp_String *p = (ptr);                  \
-       int size = string_length (p);                   \
-       UNMARK_RECORD_HEADER (&(p->lheader));           \
-       num_bytes += size;                              \
-       if (!BIG_STRING_SIZE_P (size))                  \
-        { num_small_bytes += size;                     \
-          num_small_used++;                            \
-        }                                              \
-       if (debug) debug_string_purity_print (p);       \
-     } while (0)
-#define ADDITIONAL_FREE_string(p)                              \
-  do { int size = string_length (p);                           \
-       if (BIG_STRING_SIZE_P (size))                           \
-        xfree_1 (CHARS_TO_STRING_CHAR (string_data (p)));      \
-     } while (0)
+#define UNMARK_string(ptr) do {                        \
+    Lisp_String *p = (ptr);                    \
+    size_t size = string_length (p);           \
+    UNMARK_RECORD_HEADER (&(p->lheader));      \
+    num_bytes += size;                         \
+    if (!BIG_STRING_SIZE_P (size))             \
+      { num_small_bytes += size;               \
+      num_small_used++;                                \
+      }                                                \
+    if (debug)                                 \
+      debug_string_purity_print (p);           \
+  } while (0)
+#define ADDITIONAL_FREE_string(ptr) do {       \
+    size_t size = string_length (ptr);         \
+    if (BIG_STRING_SIZE_P (size))              \
+      xfree (ptr->data);                       \
+  } while (0)
 
-  SWEEP_FIXED_TYPE_BLOCK (string, struct Lisp_String);
+  SWEEP_FIXED_TYPE_BLOCK (string, Lisp_String);
 
   gc_count_num_short_string_in_use = num_small_used;
   gc_count_string_total_size = num_bytes;
@@ -3489,7 +3486,7 @@ garbage_collect_1 (void)
     for (i = 0; i < staticidx; i++)
       mark_object (*(staticvec[i]));
     for (i = 0; i < staticidx_nodump; i++)
-      mark_object (*(staticvec_nodump[i]));    
+      mark_object (*(staticvec_nodump[i]));
   }
 
   { /* GCPRO() */
@@ -4154,7 +4151,7 @@ complex_vars_of_alloc (void)
  *                     - lrecord_implementations_table[]
  *                     - relocation table
  *                      - wired variable address/value couples with the count preceding the list
- */    
+ */
 typedef struct
 {
   char signature[8];
@@ -4268,7 +4265,7 @@ pdump_add_entry (pdump_entry_list *list, const void *obj, size_t size, int count
     {
       if (e->obj == obj)
        return;
-      
+
       pos++;
       if (pos == PDUMP_HASHSIZE)
        pos = 0;
@@ -4315,7 +4312,7 @@ pdump_get_entry_list(const struct struct_description *sdesc)
   pdump_struct_table.list[pdump_struct_table.count].list.align = 8;
   pdump_struct_table.list[pdump_struct_table.count].list.count = 0;
   pdump_struct_table.list[pdump_struct_table.count].sdesc = sdesc;
-  
+
   return &pdump_struct_table.list[pdump_struct_table.count++].list;
 }
 
@@ -4440,11 +4437,11 @@ pdump_register_sub (const void *data, const struct lrecord_description *desc, in
            int i;
            if (XD_IS_INDIRECT (count))
              count = pdump_get_indirect_count (count, desc, data);
-           
+
            for(i=0;i<count;i++) {
              const Lisp_Object *pobj = ((const Lisp_Object *)rdata) + i;
              Lisp_Object dobj = *pobj;
-             
+
              backtrace[me].offset = (const char *)pobj - (const char *)data;
              pdump_register_object (dobj);
            }
@@ -4458,7 +4455,7 @@ pdump_register_sub (const void *data, const struct lrecord_description *desc, in
            if (dobj) {
              if (XD_IS_INDIRECT (count))
                count = pdump_get_indirect_count (count, desc, data);
-             
+
              pdump_register_struct (dobj, sdesc, count);
            }
            break;
@@ -4478,7 +4475,7 @@ pdump_register_object (Lisp_Object obj)
       !POINTER_TYPE_P (XTYPE (obj)) ||
       pdump_get_entry (XRECORD_LHEADER (obj)))
     return;
-  
+
   if (XRECORD_LHEADER_IMPLEMENTATION (obj)->description)
     {
       int me = depth++;
@@ -4526,7 +4523,7 @@ pdump_register_struct (const void *data, const struct struct_description *sdesc,
       backtrace[me].obj = 0;
       backtrace[me].position = 0;
       backtrace[me].offset = 0;
-      
+
       pdump_add_entry (pdump_get_entry_list (sdesc),
                       data,
                       sdesc->size,
@@ -4552,7 +4549,7 @@ pdump_dump_data (pdump_entry_list_elmt *elmt, const struct lrecord_description *
       int pos, i;
       void *rdata;
       memcpy (pdump_buf, elmt->obj, size*count);
-      
+
       for (i=0; i<count; i++)
        {
          char *cur = ((char *)pdump_buf) + i*size;
@@ -4618,7 +4615,7 @@ pdump_dump_data (pdump_entry_list_elmt *elmt, const struct lrecord_description *
                    int i;
                    if (XD_IS_INDIRECT (count))
                      count = pdump_get_indirect_count (count, desc, elmt->obj);
-                   
+
                    for(i=0; i<count; i++)
                      {
                        Lisp_Object *pobj = ((Lisp_Object *)rdata) + i;
@@ -4685,7 +4682,7 @@ pdump_reloc_one (void *data, EMACS_INT delta, const struct lrecord_description *
          int i;
          if (XD_IS_INDIRECT (count))
            count = pdump_get_indirect_count (count, desc, data);
-         
+
          for (i=0; i<count; i++)
            {
              Lisp_Object *pobj = ((Lisp_Object *)rdata) + i;
@@ -4740,7 +4737,7 @@ pdump_scan_by_alignement (void (*f)(pdump_entry_list_elmt *, const struct lrecor
                elmt = elmt->next;
              }
          }
-      
+
       for (i=0; i<pdump_struct_table.count; i++)
        if (pdump_struct_table.list[i].list.align == align) {
          elmt = pdump_struct_table.list[i].list.first;
@@ -4751,7 +4748,7 @@ pdump_scan_by_alignement (void (*f)(pdump_entry_list_elmt *, const struct lrecor
              elmt = elmt->next;
            }
        }
-      
+
       elmt = pdump_opaque_data_list.first;
       while (elmt)
        {
@@ -4797,7 +4794,7 @@ pdump_dump_structvec (void)
 static void
 pdump_dump_itable (void)
 {
-  write (pdump_fd, lrecord_implementations_table, sizeof (lrecord_implementations_table));  
+  write (pdump_fd, lrecord_implementations_table, sizeof (lrecord_implementations_table));
 }
 
 static void
@@ -4862,7 +4859,7 @@ pdump_dump_wired (void)
       write (pdump_fd, &pdump_wirevec[i], sizeof (pdump_wirevec[i]));
       write (pdump_fd, &obj, sizeof (obj));
     }
-  
+
   for (i=0; i<pdump_wireidx_list; i++)
     {
       Lisp_Object obj = *(pdump_wirevec_list[i]);
@@ -4919,7 +4916,7 @@ pdump (void)
     }
   pdump_struct_table.count = 0;
   pdump_struct_table.size = -1;
-  
+
   pdump_opaque_data_list.first = 0;
   pdump_opaque_data_list.align = 8;
   pdump_opaque_data_list.count = 0;
@@ -4943,17 +4940,17 @@ pdump (void)
     return;
 
   for (i=0; i<dumpstructidx; i++)
-    pdump_register_struct (*(void **)(dumpstructvec[i].data), dumpstructvec[i].desc, 1); 
+    pdump_register_struct (*(void **)(dumpstructvec[i].data), dumpstructvec[i].desc, 1);
 
   memcpy (hd.signature, "XEmacsDP", 8);
   hd.reloc_address = 0;
   hd.nb_staticpro = staticidx;
   hd.nb_structdmp = dumpstructidx;
   hd.last_type    = last_lrecord_type_index_assigned;
-  
+
   cur_offset = 256;
   max_size = 0;
-  
+
   pdump_scan_by_alignement (pdump_allocate_offset);
   pdump_qnil = pdump_get_entry (XRECORD_LHEADER (Qnil));
 
@@ -5007,7 +5004,7 @@ pdump_load (void)
   if (pdump_start == MAP_FAILED)
     pdump_start = 0;
 #endif
-  
+
   if (!pdump_start)
     {
       pdump_start = (void *)((((unsigned long)(malloc(length+255))) + 255) & ~255);
index e39fe3f..9058be8 100644 (file)
@@ -527,6 +527,10 @@ funcall_compiled_function (Lisp_Object fun, int nargs, Lisp_Object args[])
   }
 
  wrong_number_of_arguments:
+  /* The actual printed compiled_function object is incomprehensible.
+     Check the backtrace to see if we can get a more meaningful symbol. */
+  if (EQ (fun, indirect_function (*backtrace_list->function, 0)))
+    fun = *backtrace_list->function;
   return Fsignal (Qwrong_number_of_arguments, list2 (fun, make_int (nargs)));
 }
 
index d5f53c9..3f427a2 100644 (file)
@@ -308,6 +308,11 @@ char *alloca();
 #undef HAVE_SOCKADDR_SUN_LEN
 #undef HAVE_MULTICAST
 #undef HAVE_SYSVIPC
+#undef HAVE_LOCKF
+#undef HAVE_FLOCK
+#undef HAVE_FSYNC
+#undef HAVE_FTRUNCATE
+#undef HAVE_UMASK
 
 #undef SYSV_SYSTEM_DIR
 #undef NONSYSTEM_DIR_LIBRARY
@@ -801,17 +806,11 @@ on various systems. */
 /* Should movemail use hesiod for getting POP server host? */
 #undef HESIOD
 /* Determine type of mail locking. */
-/* Play preprocessor games so that configure options override s&m files */
-#undef REAL_MAIL_USE_LOCKF
-#undef REAL_MAIL_USE_FLOCK
-#undef MAIL_USE_LOCKF
-#undef MAIL_USE_FLOCK
-#ifdef REAL_MAIL_USE_FLOCK
-#define MAIL_USE_FLOCK
-#endif
-#ifdef REAL_MAIL_USE_LOCKF
-#define MAIL_USE_LOCKF
-#endif
+#undef MAIL_LOCK_LOCKF
+#undef MAIL_LOCK_FLOCK
+#undef MAIL_LOCK_DOT
+#undef MAIL_LOCK_LOCKING
+#undef MAIL_LOCK_MMDF
 
 #undef PREFIX_USER_DEFINED
 #undef EXEC_PREFIX_USER_DEFINED
index c836d8c..12fc504 100644 (file)
@@ -278,6 +278,8 @@ CODESYS defaults to the value of `terminal-coding-system'.
   set_encoding_stream_coding_system
     (XLSTREAM (CONSOLE_TTY_DATA (decode_tty_console (console))->outstream),
      Fget_coding_system (NILP (codesys) ? Vterminal_coding_system : codesys));
+  /* Redraw tty */
+  face_property_was_changed (Vdefault_face, Qfont, Qtty);
   return Qnil;
 }
 
diff --git a/src/dbxrc b/src/dbxrc
deleted file mode 100644 (file)
index 166922b..0000000
--- a/src/dbxrc
+++ /dev/null
@@ -1,362 +0,0 @@
-# -*- ksh -*-
-# Copyright (C) 1998 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.
-
-# Author: Martin Buchholz
-
-# You can use this file to debug XEmacs using Sun WorkShop's dbx.
-# Add the contents of this file to $HOME/.dbxrc or
-# Source the contents of this file with something like:
-# if test -r ./dbxrc; then . ./dbxrc; fi
-
-# Some functions defined here require a running process, but most
-# don't.  Considerable effort has been expended to this end.
-
-# See also the comments in gdbinit.
-
-# See also the question of the XEmacs FAQ, titled
-# "How to Debug an XEmacs problem with a debugger".
-
-ignore POLL
-ignore IO
-
-document lbt << 'end'
-Usage: lbt
-Print the current Lisp stack trace.
-Requires a running xemacs process.
-end
-
-function lbt {
-  call debug_backtrace()
-}
-
-document ldp << 'end'
-Usage: ldp lisp_object
-Print a Lisp Object value using the Lisp printer.
-Requires a running xemacs process.
-end
-
-function ldp {
-  call debug_print ($1);
-}
-
-# A bug in dbx prevents string variables from having values beginning with `-'!!
-function XEmacsInit {
-  function ToInt { eval "$1=\$[(int) $1]"; }
-  ToInt dbg_USE_UNION_TYPE
-  ToInt Lisp_Type_Int
-  ToInt Lisp_Type_Char
-  ToInt Lisp_Type_Cons
-  ToInt Lisp_Type_String
-  ToInt Lisp_Type_Vector
-  ToInt Lisp_Type_Symbol
-  ToInt Lisp_Type_Record
-  ToInt dbg_valbits
-  ToInt dbg_gctypebits
-  function ToLong { eval "$1=\$[(unsigned long) $1]"; }
-  ToLong dbg_valmask
-  ToLong dbg_typemask
-  xemacs_initted=yes
-}
-
-function printvar {
-  for i in $*; do eval "echo $i=\$$i"; done
-}
-
-document decode_object << 'end'
-Usage: decode_object lisp_object
-Extract implementation information from a Lisp Object.
-Defines variables $val, $type and $imp.
-end
-
-# Various dbx bugs cause ugliness in following code
-function decode_object {
-  if test -z "$xemacs_initted"; then XEmacsInit; fi;
-  if test $dbg_USE_UNION_TYPE = 1; then
-    # Repeat after me... dbx sux, dbx sux, dbx sux...
-    # Allow both `pobj Qnil' and `pobj 0x82746834' to work
-    case $(whatis $1) in
-      *Lisp_Object*) obj="$[(unsigned long)(($1).i)]";;
-      *) obj="$[(unsigned long)($1)]";;
-    esac
-  else
-    obj="$[(unsigned long)($1)]";
-  fi
-  if test $[(int)($obj & 1)] = 1; then
-    # It's an int
-    val=$[(long)(((unsigned long long)$obj) >> 1)]
-    type=$Lisp_Type_Int
-  else
-    type=$[(int)(((void*)$obj) & $dbg_typemask)]
-    if test $type = $Lisp_Type_Char; then
-      val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)]
-    else
-      # It's a record pointer
-      val=$[(void*)$obj]
-      if test "$val" = "(nil)"; then type=null_pointer; fi
-    fi
-  fi
-
-  if test $type = $Lisp_Type_Record; then
-    typeset lheader="((struct lrecord_header *) $val)"
-    imp=$[(void*)(lrecord_implementations_table[$lheader->type])]
-  else
-    imp="0xdeadbeef"
-  fi
-  # printvar obj val type imp
-}
-
-function xint {
-  decode_object "$*"
-  print (long) ($val)
-}
-
-function xtype {
-  decode_object "$*"
-  if   test $type = $Lisp_Type_Int;    then echo "int"
-  elif test $type = $Lisp_Type_Char;   then echo "char"
-  elif test $type = $Lisp_Type_Symbol; then echo "symbol"
-  elif test $type = $Lisp_Type_String; then echo "string"
-  elif test $type = $Lisp_Type_Vector; then echo "vector"
-  elif test $type = $Lisp_Type_Cons;   then echo "cons"
-  elif test $type = null_pointer;      then echo "null_pointer"
-  else
-    echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]"
-  fi
-}
-
-function lisp-shadows {
-  run -batch -vanilla -f list-load-path-shadows
-}
-
-function environment-to-run-temacs {
-  unset EMACSLOADPATH
-  export EMACSBOOTSTRAPLOADPATH=../lisp/:..
-  export EMACSBOOTSTRAPMODULEPATH=../modules/:..
-}
-
-document run-temacs << 'end'
-Usage: run-temacs
-Run temacs interactively, like xemacs.
-Use this with debugging tools (like purify) that cannot deal with dumping,
-or when temacs builds successfully, but xemacs does not.
-end
-
-function run-temacs {
-  environment-to-run-temacs
-  run -batch -l ../lisp/loadup.el run-temacs -q
-}
-
-document update-elc << 'end'
-Usage: update-elc
-Run the core lisp byte compilation part of the build procedure.
-Use when debugging temacs, not xemacs!
-Use this when temacs builds successfully, but xemacs does not.
-end
-
-function update-elc {
-  environment-to-run-temacs
-  run -batch -l ../lisp/update-elc.el
-}
-
-
-function dump-temacs {
-  environment-to-run-temacs
-  run -batch -l ../lisp/loadup.el dump
-}
-
-document dump-temacs << 'end'
-Usage: dump-temacs
-Run the dumping part of the build procedure.
-Use when debugging temacs, not xemacs!
-Use this when temacs builds successfully, but xemacs does not.
-end
-
-function pstruct {
-  xstruct="((struct $1 *) $val)"
-  print $xstruct
-  print *$xstruct
-}
-
-function lrecord_type_p {
-  if eval test -z \"\$lrecord_$1\" && test $imp = $[(void*)(&lrecord_$1)]; then return 0; else return 1; fi
-}
-
-document pobj << 'end'
-Usage: pobj lisp_object
-Print the internal C structure of a underlying Lisp Object.
-end
-
-function pobj {
-  decode_object $1
-  if test $type = $Lisp_Type_Int; then
-    print -f"Integer: %d" $val
-  elif test $type = $Lisp_Type_Char; then
-    if test $[$val > 32 && $val < 128] = 1; then
-      print -f"Char: %c" $val
-    else
-      print -f"Char: %d" $val
-    fi
-  elif test $type = $Lisp_Type_String || lrecord_type_p string; then
-    pstruct Lisp_String
-  elif test $type = $Lisp_Type_Cons   || lrecord_type_p cons; then
-    pstruct Lisp_Cons
-  elif test $type = $Lisp_Type_Symbol || lrecord_type_p symbol; then
-    pstruct Lisp_Symbol
-    echo "Symbol name: $[(char *)($xstruct->name->data)]"
-  elif test $type = $Lisp_Type_Vector || lrecord_type_p vector; then
-    pstruct Lisp_Vector
-    echo "Vector of length $[$xstruct->size]"
-  elif lrecord_type_p bit_vector; then
-    pstruct Lisp_Bit_Vector
-  elif lrecord_type_p buffer; then
-    pstruct buffer
-  elif lrecord_type_p char_table; then
-    pstruct Lisp_Char_Table
-  elif lrecord_type_p char_table_entry; then
-    pstruct Lisp_Char_Table_Entry
-  elif lrecord_type_p charset; then
-    pstruct Lisp_Charset
-  elif lrecord_type_p coding_system; then
-    pstruct Lisp_Coding_System
-  elif lrecord_type_p color_instance; then
-    pstruct Lisp_Color_Instance
-  elif lrecord_type_p command_builder; then
-    pstruct command_builder
-  elif lrecord_type_p compiled_function; then
-    pstruct Lisp_Compiled_Function
-  elif lrecord_type_p console; then
-    pstruct console
-  elif lrecord_type_p database; then
-    pstruct Lisp_Database
-  elif lrecord_type_p device; then
-    pstruct device
-  elif lrecord_type_p event; then
-    pstruct Lisp_Event
-  elif lrecord_type_p extent; then
-    pstruct extent
-  elif lrecord_type_p extent_auxiliary; then
-    pstruct extent_auxiliary
-  elif lrecord_type_p extent_info; then
-    pstruct extent_info
-  elif lrecord_type_p face; then
-    pstruct Lisp_Face
-  elif lrecord_type_p float; then
-    pstruct Lisp_Float
-  elif lrecord_type_p font_instance; then
-    pstruct Lisp_Font_Instance
-  elif lrecord_type_p frame; then
-    pstruct frame
-  elif lrecord_type_p glyph; then
-    pstruct Lisp_Glyph
-  elif lrecord_type_p hash_table; then
-    pstruct Lisp_Hash_Table
-  elif lrecord_type_p image_instance; then
-    pstruct Lisp_Image_Instance
-  elif lrecord_type_p keymap; then
-    pstruct Lisp_Keymap
-  elif lrecord_type_p lcrecord_list; then
-    pstruct lcrecord_list
-  elif lrecord_type_p lstream; then
-    pstruct lstream
-  elif lrecord_type_p marker; then
-    pstruct Lisp_Marker
-  elif lrecord_type_p opaque; then
-    pstruct Lisp_Opaque
-  elif lrecord_type_p opaque_ptr; then
-    pstruct Lisp_Opaque_Ptr
-  elif lrecord_type_p popup_data; then
-    pstruct popup_data
-  elif lrecord_type_p process; then
-    pstruct Lisp_Process
-  elif lrecord_type_p range_table; then
-    pstruct Lisp_Range_Table
-  elif lrecord_type_p specifier; then
-    pstruct Lisp_Specifier
-  elif lrecord_type_p subr; then
-    pstruct Lisp_Subr
-  elif lrecord_type_p symbol_value_buffer_local; then
-    pstruct symbol_value_buffer_local
-  elif lrecord_type_p symbol_value_forward; then
-    pstruct symbol_value_forward
-  elif lrecord_type_p symbol_value_lisp_magic; then
-    pstruct symbol_value_lisp_magic
-  elif lrecord_type_p symbol_value_varalias; then
-    pstruct symbol_value_varalias
-  elif lrecord_type_p toolbar_button; then
-    pstruct toolbar_button
-  elif lrecord_type_p tooltalk_message; then
-    pstruct Lisp_Tooltalk_Message
-  elif lrecord_type_p tooltalk_pattern; then
-    pstruct Lisp_Tooltalk_Pattern
-  elif lrecord_type_p weak_list; then
-    pstruct weak_list
-  elif lrecord_type_p window; then
-    pstruct window
-  elif lrecord_type_p window_configuration; then
-    pstruct window_config
-  elif test "$type" = "null_pointer"; then
-    echo "Lisp Object is a null pointer!!"
-  else
-    echo "Unknown Lisp Object type"
-    print $1
-  fi
-}
-
-function pproc {
-  print *(`process.c`struct Lisp_Process*)$1 ;
-  ldp "(`process.c`struct Lisp_Process*)$1->name" ;
-  ldp "(`process.c`struct Lisp_Process*)$1->command" ;
-}
-
-dbxenv suppress_startup_message 4.0
-dbxenv mt_watchpoints on
-
-function dp_core {
-  print ((struct x_frame *)(((struct frame*)(Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget->core
-}
-
-# Barf!
-function print_shell {
-  print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget)
-}
-
-# -------------------------------------------------------------
-# functions to test the debugging support itself.
-# If you change this file, make sure the following still work...
-# -------------------------------------------------------------
-function test_xtype {
-  function doit { echo -n "$1: "; xtype "$1"; }
-  test_various_objects
-}
-
-function test_pobj {
-  function doit { echo '==============================='; echo -n "$1: "; pobj "$1"; }
-  test_various_objects
-}
-
-function test_various_objects {
-  doit Vemacs_major_version
-  doit Vhelp_char
-  doit Qnil
-  doit Qunbound
-  doit Vobarray
-  doit Vall_weak_lists
-  doit Vxemacs_codename
-}
index c9db857..e4ba398 100644 (file)
@@ -94,7 +94,7 @@ ecrt0.o: config.h
 editfns.o: $(LISP_H) buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.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 mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.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 char-1byte.h char-lb.h char-ucs.h character.h eldap.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.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 char-1byte.h char-lb.h char-ucs.h character.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h paths.h process.h redisplay.h symeval.h symsinit.h sysdep.h sysdll.h sysfile.h syssignal.h systime.h systty.h
+emacs.o: $(LISP_H) backtrace.h buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.h commands.h conslots.h console.h device.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h paths.h process.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysdll.h sysfile.h syssignal.h systime.h systty.h toolbar.h
 emodules.o: $(LISP_H) buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.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 mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.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 char-1byte.h char-lb.h char-ucs.h character.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h opaque.h symeval.h symsinit.h
index 29fe779..397f65d 100644 (file)
@@ -413,19 +413,11 @@ xhash_table (Lisp_Object hash_table)
 /************************************************************************/
 
 /* Creation of hash tables, without error-checking. */
-static double
-hash_table_rehash_threshold (Lisp_Hash_Table *ht)
-{
-  return
-    ht->rehash_threshold > 0.0 ? ht->rehash_threshold :
-    ht->size > 4096 && !ht->test_function ? 0.7 : 0.6;
-}
-
 static void
 compute_hash_table_derived_values (Lisp_Hash_Table *ht)
 {
   ht->rehash_count = (size_t)
-    ((double) ht->size * hash_table_rehash_threshold (ht));
+    ((double) ht->size * ht->rehash_threshold);
   ht->golden_ratio = (size_t)
     ((double) ht->size * (.6180339887 / (double) sizeof (Lisp_Object)));
 }
@@ -440,10 +432,6 @@ make_general_lisp_hash_table (enum hash_table_test test,
   Lisp_Object hash_table;
   Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table, &lrecord_hash_table);
 
-  ht->rehash_size      = rehash_size;
-  ht->rehash_threshold = rehash_threshold;
-  ht->weakness         = weakness;
-
   switch (test)
     {
     case HASH_TABLE_EQ:
@@ -465,15 +453,21 @@ make_general_lisp_hash_table (enum hash_table_test test,
       abort ();
     }
 
-  if (ht->rehash_size <= 0.0)
-    ht->rehash_size = HASH_TABLE_DEFAULT_REHASH_SIZE;
+  ht->weakness = weakness;
+
+  ht->rehash_size =
+    rehash_size > 1.0 ? rehash_size : HASH_TABLE_DEFAULT_REHASH_SIZE;
+
+  ht->rehash_threshold =
+    rehash_threshold > 0.0 ? rehash_threshold :
+    size > 4096 && !ht->test_function ? 0.7 : 0.6;
+
   if (size < HASH_TABLE_MIN_SIZE)
     size = HASH_TABLE_MIN_SIZE;
-  if (rehash_threshold < 0.0)
-    rehash_threshold = 0.75;
-  ht->size =
-    hash_table_size ((size_t) ((double) size / hash_table_rehash_threshold (ht)) + 1);
+  ht->size = hash_table_size ((size_t) (((double) size / ht->rehash_threshold)
+                                       + 1.0));
   ht->count = 0;
+
   compute_hash_table_derived_values (ht);
 
   /* We leave room for one never-occupied sentinel hentry at the end.  */
@@ -500,8 +494,7 @@ make_lisp_hash_table (size_t size,
                      enum hash_table_weakness weakness,
                      enum hash_table_test test)
 {
-  return make_general_lisp_hash_table
-    (test, size, HASH_TABLE_DEFAULT_REHASH_SIZE, -1.0, weakness);
+  return make_general_lisp_hash_table (test, size, -1.0, -1.0, weakness);
 }
 
 /* Pretty reading of hash tables.
@@ -1090,7 +1083,7 @@ beyond which the HASH-TABLE is enlarged by rehashing.
 */
        (hash_table))
 {
-  return make_float (hash_table_rehash_threshold (xhash_table (hash_table)));
+  return make_float (xhash_table (hash_table)->rehash_threshold);
 }
 
 DEFUN ("hash-table-weakness", Fhash_table_weakness, 1, 1, 0, /*
index bf999a0..4312190 100644 (file)
@@ -36,6 +36,7 @@ Boston, MA 02111-1307, USA.  */
 #include "console.h"
 #include "process.h"
 #include "redisplay.h"
+#include "frame.h"
 #include "sysdep.h"
 
 #include "syssignal.h" /* Always include before systty.h */
@@ -155,6 +156,7 @@ Lisp_Object Vconfigure_info_directory;
 Lisp_Object Vsite_directory, Vconfigure_site_directory;
 Lisp_Object Vconfigure_info_path;
 Lisp_Object Vinternal_error_checking;
+Lisp_Object Vmail_lock_methods, Vconfigure_mail_lock_method;
 Lisp_Object Vpath_separator;
 
 /* The default base directory XEmacs is installed under. */
@@ -1711,7 +1713,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
       reinit_vars_of_lread ();
       reinit_vars_of_lstream ();
       reinit_vars_of_minibuf ();
+#ifdef HAVE_SHLIB
       reinit_vars_of_module ();
+#endif
       reinit_vars_of_objects ();
       reinit_vars_of_print ();
       reinit_vars_of_redisplay ();
@@ -1726,6 +1730,9 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
 #ifdef HAVE_X_WINDOWS
       reinit_vars_of_device_x ();
+#endif
+#ifdef HAVE_SCROLLBARS
+      reinit_vars_of_scrollbar_x ();
 #ifdef HAVE_MENUBARS
       reinit_vars_of_menubar_x ();
 #endif
@@ -1800,6 +1807,7 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
   init_redisplay ();      /* Determine terminal type.
                             init_sys_modes uses results */
+  init_frame ();
   init_event_stream (); /* Set up so we can get user input. */
   init_macros (); /* set up so we can run macros. */
   init_editfns (); /* Determine the name of the user we're running as */
@@ -3086,6 +3094,46 @@ bufpos           - check buffer positions.
                                    Vinternal_error_checking);
 #endif
 
+  DEFVAR_CONST_LISP ("mail-lock-methods", &Vmail_lock_methods /*
+Mail spool locking methods supported by this instance of XEmacs.
+This is a list of symbols.  Each of the symbols is one of the
+following: dot, lockf, flock, locking, mmdf.
+*/ );
+  {
+    Vmail_lock_methods = Qnil;
+    Vmail_lock_methods = Fcons (intern ("dot"), Vmail_lock_methods);
+#ifdef HAVE_LOCKF
+    Vmail_lock_methods = Fcons (intern ("lockf"), Vmail_lock_methods);
+#endif
+#ifdef HAVE_FLOCK
+    Vmail_lock_methods = Fcons (intern ("flock"), Vmail_lock_methods);
+#endif
+#ifdef HAVE_MMDF
+    Vmail_lock_methods = Fcons (intern ("mmdf"), Vmail_lock_methods);
+#endif
+#ifdef HAVE_LOCKING
+    Vmail_lock_methods = Fcons (intern ("locking"), Vmail_lock_methods);
+#endif
+  }
+  
+  DEFVAR_CONST_LISP ("configure-mail-lock-method", &Vconfigure_mail_lock_method /*
+Mail spool locking method suggested by configure.  This is one
+of the symbols in MAIL-LOCK-METHODS.
+*/ );
+  {
+#if defined(MAIL_LOCK_FLOCK) && defined(HAVE_FLOCK)
+    Vconfigure_mail_lock_method = intern("flock");
+#elif defined(MAIL_LOCK_LOCKF) && defined(HAVE_LOCKF)
+    Vconfigure_mail_lock_method = intern("lockf");
+#elif defined(MAIL_LOCK_MMDF) && defined(HAVE_MMDF)
+    Vconfigure_mail_lock_method = intern("mmdf");
+#elif defined(MAIL_LOCK_LOCKING) && defined(HAVE_LOCKING)
+    Vconfigure_mail_lock_method = intern("locking");
+#else
+    Vconfigure_mail_lock_method = intern("dot");
+#endif
+  }
+
   DEFVAR_LISP ("path-separator", &Vpath_separator /*
 The directory separator in search paths, as a string.
 */ );
index 1992302..e2768e7 100644 (file)
@@ -4743,7 +4743,7 @@ backtrace_specials (int speccount, int speclimit, Lisp_Object stream)
 
 DEFUN ("backtrace", Fbacktrace, 0, 2, "", /*
 Print a trace of Lisp function calls currently active.
-Option arg STREAM specifies the output stream to send the backtrace to,
+Optional arg STREAM specifies the output stream to send the backtrace to,
 and defaults to the value of `standard-output'.  Optional second arg
 DETAILED means show places where currently active variable bindings,
 catches, condition-cases, and unwind-protects were made as well as
@@ -4786,8 +4786,8 @@ function calls.
       if (!NILP (detailed) && catches && catches->backlist == backlist)
        {
           int catchpdl = catches->pdlcount;
-          if (specpdl[catchpdl].func == condition_case_unwind
-              && speccount > catchpdl)
+          if (speccount > catchpdl
+             && specpdl[catchpdl].func == condition_case_unwind)
             /* This is a condition-case catchpoint */
             catchpdl = catchpdl + 1;
 
index 4bea4e7..46161af 100644 (file)
@@ -1339,8 +1339,8 @@ handle_focus_event_1 (struct frame *f, int in_p)
      is mandatory. Weirdly you get a FocusOut event when you click in
      a widget-glyph but you don't get a correspondng FocusIn when you
      click in the frame. Why is this?  */
-  if (in_p 
-#if XtSpecificationRelease > 5      
+  if (in_p
+#if XtSpecificationRelease > 5
       && FRAME_X_TEXT_WIDGET (f) != focus_widget
 #endif
       )
@@ -2011,22 +2011,24 @@ static void
 Xt_process_to_emacs_event (struct Lisp_Event *emacs_event)
 {
   int i;
-  Lisp_Object process;
 
   assert (process_events_occurred > 0);
+
   for (i = 0; i < MAXDESC; i++)
     {
-      process = filedesc_with_input[i];
+      Lisp_Object process = filedesc_with_input[i];
       if (PROCESSP (process))
-       break;
+       {
+         filedesc_with_input[i] = Qnil;
+         process_events_occurred--;
+         /* process events have nil as channel */
+         emacs_event->event_type = process_event;
+         emacs_event->timestamp  = 0; /* #### */
+         emacs_event->event.process.process = process;
+         return;
+       }
     }
-  assert (i < MAXDESC);
-  filedesc_with_input[i] = Qnil;
-  process_events_occurred--;
-  /* process events have nil as channel */
-  emacs_event->event_type = process_event;
-  emacs_event->timestamp  = 0; /* #### */
-  emacs_event->event.process.process = process;
+  abort ();
 }
 
 static void
index 3911ef6..d8c07f1 100644 (file)
@@ -2264,9 +2264,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          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)))
+             IMAGE_INSTANCE_TYPE_P (image_instance, IMAGE_WIDGET))
            {
              /* set colors for the buttons */
              HDC hdc = (HDC)wParam;
@@ -3004,7 +3002,7 @@ vars_of_event_mswindows (void)
   mswindows_s_dispatch_event_queue = Qnil;
   staticpro (&mswindows_s_dispatch_event_queue);
   mswindows_s_dispatch_event_queue_tail = Qnil;
-  pdump_wire (&mswindows_u_dispatch_event_queue_tail);
+  pdump_wire (&mswindows_s_dispatch_event_queue_tail);
 
   mswindows_error_caught_in_modal_loop = Qnil;
   staticpro (&mswindows_error_caught_in_modal_loop);
index 7bb19c4..e08ded9 100644 (file)
@@ -1059,7 +1059,7 @@ event_to_character (struct Lisp_Event *event,
 
   if (event->event_type != key_press_event)
     {
-      if (event->event_type == dead_event) abort ();
+      assert (event->event_type != dead_event);
       return -1;
     }
   if (!allow_extra_modifiers &&
index d0ef995..bb5fa40 100644 (file)
@@ -4618,14 +4618,9 @@ struct report_extent_modification_closure {
   int speccount;
 };
 
-/* This juggling with the pointer to another file's global variable is
-   kind of yucky.  Perhaps I should just export the variable.  */
-static int *inside_change_hook_pointer;
-
 static Lisp_Object
 report_extent_modification_restore (Lisp_Object buffer)
 {
-  *inside_change_hook_pointer = 0;
   if (current_buffer != XBUFFER (buffer))
     Fset_buffer (buffer);
   return Qnil;
@@ -4650,7 +4645,13 @@ report_extent_modification_mapper (EXTENT extent, void *arg)
   /* Now that we are sure to call elisp, set up an unwind-protect so
      inside_change_hook gets restored in case we throw.  Also record
      the current buffer, in case we change it.  Do the recording only
-     once.  */
+     once.
+
+     One confusing thing here is that our caller never actually calls
+     unbind_to (closure.speccount, Qnil).  This is because
+     map_extents_bytind() unbinds before, and with a smaller
+     speccount.  The additional unbind_to() in
+     report_extent_modification() would cause XEmacs to abort.  */
   if (closure->speccount == -1)
     {
       closure->speccount = specpdl_depth ();
@@ -4666,7 +4667,10 @@ report_extent_modification_mapper (EXTENT extent, void *arg)
   /* #### It's a shame that we can't use any of the existing run_hook*
      functions here.  This is so because all of them work with
      symbols, to be able to retrieve default values of local hooks.
-     <sigh> */
+     <sigh>
+
+     #### Idea: we could set up a dummy symbol, and call the hook
+     functions on *that*.  */
 
   if (!CONSP (hook) || EQ (XCAR (hook), Qlambda))
     call3 (hook, exobj, startobj, endobj);
@@ -4674,6 +4678,8 @@ report_extent_modification_mapper (EXTENT extent, void *arg)
     {
       Lisp_Object tail;
       EXTERNAL_LIST_LOOP (tail, hook)
+       /* #### Shouldn't this perform the same Fset_buffer() check as
+           above?  */
        call3 (XCAR (tail), exobj, startobj, endobj);
     }
   return 0;
@@ -4681,7 +4687,7 @@ report_extent_modification_mapper (EXTENT extent, void *arg)
 
 void
 report_extent_modification (Lisp_Object buffer, Bufpos start, Bufpos end,
-                           int *inside, int afterp)
+                           int afterp)
 {
   struct report_extent_modification_closure closure;
 
@@ -4691,20 +4697,8 @@ report_extent_modification (Lisp_Object buffer, Bufpos start, Bufpos end,
   closure.afterp = afterp;
   closure.speccount = -1;
 
-  inside_change_hook_pointer = inside;
-  *inside = 1;
-
   map_extents (start, end, report_extent_modification_mapper, (void *)&closure,
               buffer, NULL, ME_MIGHT_CALL_ELISP);
-
-  if (closure.speccount == -1)
-    *inside = 0;
-  else
-    {
-      /* We mustn't unbind when closure.speccount != -1 because
-        map_extents_bytind has already done that.  */
-      assert (*inside == 0);
-    }
 }
 
 \f
index 390c3e0..2a2ab9d 100644 (file)
@@ -367,7 +367,7 @@ void process_extents_for_insertion (Lisp_Object object,
                                    Bytind opoint, Bytecount length);
 void process_extents_for_deletion (Lisp_Object object, Bytind from,
                                   Bytind to, int destroy_them);
-void report_extent_modification (Lisp_Object, Bufpos, Bufpos, int *, int);
+void report_extent_modification (Lisp_Object, Bufpos, Bufpos, int);
 
 void set_extent_glyph (EXTENT extent, Lisp_Object glyph, int endp,
                       glyph_layout layout);
index 3f5dfdd..248313a 100644 (file)
@@ -428,7 +428,7 @@ finalize_coding_system (void *header, int for_disksave)
     }
 }
 
-static enum eol_type
+static eol_type_t
 symbol_to_eol_type (Lisp_Object symbol)
 {
   CHECK_SYMBOL (symbol);
@@ -442,7 +442,7 @@ symbol_to_eol_type (Lisp_Object symbol)
 }
 
 static Lisp_Object
-eol_type_to_symbol (enum eol_type type)
+eol_type_to_symbol (eol_type_t type)
 {
   switch (type)
     {
@@ -1063,7 +1063,7 @@ Define symbol ALIAS as an alias for coding system CODING-SYSTEM.
 }
 
 static Lisp_Object
-subsidiary_coding_system (Lisp_Object coding_system, enum eol_type type)
+subsidiary_coding_system (Lisp_Object coding_system, eol_type_t type)
 {
   Lisp_Coding_System *cs = XCODING_SYSTEM (coding_system);
   Lisp_Object new_coding_system;
@@ -1404,7 +1404,7 @@ Return the coding system associated with a coding category.
 
 struct detection_state
 {
-  enum eol_type eol_type;
+  eol_type_t eol_type;
   int seen_non_ascii;
   int mask;
 #ifdef MULE
@@ -1485,7 +1485,7 @@ mask_has_at_most_one_bit_p (int mask)
   return (mask & (mask - 1)) == 0;
 }
 
-static enum eol_type
+static eol_type_t
 detect_eol_type (struct detection_state *st, CONST unsigned char *src,
                 unsigned int n)
 {
@@ -1647,7 +1647,7 @@ coding_system_from_mask (int mask)
 
 void
 determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out,
-                             enum eol_type *eol_type_in_out)
+                             eol_type_t *eol_type_in_out)
 {
   struct detection_state decst;
 
@@ -2007,7 +2007,7 @@ struct decoding_stream
      EOL type stored in CODESYS because the latter might indicate
      automatic EOL-type detection while the former will always
      indicate a particular EOL type. */
-  enum eol_type eol_type;
+  eol_type_t eol_type;
 #ifdef MULE
   /* Additional ISO2022 information.  We define the structure above
      because it's also needed by the detection routines. */
index 023bf57..ff70465 100644 (file)
@@ -96,7 +96,7 @@ struct Lisp_Coding_System
 
   Lisp_Object post_read_conversion, pre_write_conversion;
 
-  enum eol_type eol_type;
+  eol_type_t eol_type;
 
   /* Subsidiary coding systems that specify a particular type of EOL
      marking, rather than autodetecting it.  These will only be non-nil
@@ -500,7 +500,7 @@ void set_decoding_stream_coding_system (Lstream *stream,
 void set_encoding_stream_coding_system (Lstream *stream,
                                        Lisp_Object codesys);
 void determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out,
-                                  enum eol_type *eol_type_in_out);
+                                  eol_type_t *eol_type_in_out);
 
 
 #ifndef MULE
index 6cbc1be..403e6ea 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -1850,7 +1850,7 @@ int
 plists_differ (Lisp_Object a, Lisp_Object b, int nil_means_not_present,
               int laxp, int depth)
 {
-  int eqp = (depth == -1);     /* -1 as depth means us eq, not equal. */
+  int eqp = (depth == -1);     /* -1 as depth means use eq, not equal. */
   int la, lb, m, i, fill;
   Lisp_Object *keys, *vals;
   char *flags;
index 0264e90..ccdb8ab 100644 (file)
@@ -116,6 +116,10 @@ Lisp_Object Vframe_being_created;
 Lisp_Object Qframe_being_created;
 
 static void store_minibuf_frame_prop (struct frame *f, Lisp_Object val);
+static struct display_line title_string_display_line;
+/* Used by generate_title_string. Global because they get used so much that
+   the dynamic allocation time adds up. */
+static Emchar_dynarr *title_string_emchar_dynarr;
 
 EXFUN (Fset_frame_properties, 2);
 
@@ -2674,8 +2678,8 @@ frame_conversion_internal (struct frame *f, int pixel_to_char,
 
   window = FRAME_SELECTED_WINDOW (f);
 
-  egw = max (glyph_width (Vcontinuation_glyph, Vdefault_face, 0, window),
-            glyph_width (Vtruncation_glyph, Vdefault_face, 0, window));
+  egw = max (glyph_width (Vcontinuation_glyph, window),
+            glyph_width (Vtruncation_glyph, window));
   egw = max (egw, cpw);
   bdr = 2 * f->internal_border_width;
   obw = FRAME_SCROLLBAR_WIDTH (f) + FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH (f) +
@@ -2850,9 +2854,9 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth)
   {
     int adjustment, trunc_width, cont_width;
 
-    trunc_width = glyph_width (Vtruncation_glyph, Vdefault_face, 0,
+    trunc_width = glyph_width (Vtruncation_glyph, 
                               FRAME_SELECTED_WINDOW (f));
-    cont_width = glyph_width (Vcontinuation_glyph, Vdefault_face, 0,
+    cont_width = glyph_width (Vcontinuation_glyph, 
                              FRAME_SELECTED_WINDOW (f));
     adjustment = max (trunc_width, cont_width);
     adjustment = max (adjustment, font_width);
@@ -2967,6 +2971,37 @@ change_frame_size (struct frame *f, int newheight, int newwidth, int delay)
 }
 
 \f
+/* The caller is responsible for freeing the returned string. */
+static Bufbyte *
+generate_title_string (struct window *w, Lisp_Object format_str,
+                      face_index findex, int type)
+{
+  struct display_line *dl;
+  struct display_block *db;
+  int elt = 0;
+
+  dl = &title_string_display_line;
+  db = get_display_block_from_line (dl, TEXT);
+  Dynarr_reset (db->runes);
+
+  generate_formatted_string_db (format_str, Qnil, w, dl, db, findex, 0,
+                                -1, type);
+
+  Dynarr_reset (title_string_emchar_dynarr);
+  while (elt < Dynarr_length (db->runes))
+    {
+      if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR)
+       Dynarr_add (title_string_emchar_dynarr,
+                   Dynarr_atp (db->runes, elt)->object.chr.ch);
+      elt++;
+    }
+
+  return
+    convert_emchar_string_into_malloced_string
+    (Dynarr_atp (title_string_emchar_dynarr, 0),
+     Dynarr_length (title_string_emchar_dynarr), 0);
+}
+
 void
 update_frame_title (struct frame *f)
 {
@@ -2990,8 +3025,8 @@ update_frame_title (struct frame *f)
 
   if (HAS_FRAMEMETH_P (f, set_title_from_bufbyte))
     {
-      title = generate_formatted_string (w, title_format, Qnil,
-                                         DEFAULT_INDEX, CURRENT_DISP);
+      title = generate_title_string (w, title_format,
+                                    DEFAULT_INDEX, CURRENT_DISP);
       FRAMEMETH (f, set_title_from_bufbyte, (f, title));
     }
 
@@ -3002,8 +3037,8 @@ update_frame_title (struct frame *f)
          if (title)
            xfree (title);
 
-         title = generate_formatted_string (w, icon_format, Qnil,
-                                             DEFAULT_INDEX, CURRENT_DISP);
+         title = generate_title_string (w, icon_format,
+                                        DEFAULT_INDEX, CURRENT_DISP);
        }
       FRAMEMETH (f, set_icon_name_from_bufbyte, (f, title));
     }
@@ -3062,6 +3097,24 @@ icon_glyph_changed (Lisp_Object glyph, Lisp_Object property,
 }
 
 \f
+/***************************************************************************/
+/*                                                                        */
+/*                              initialization                             */
+/*                                                                        */
+/***************************************************************************/
+
+void
+init_frame (void)
+{
+#ifndef PDUMP
+  if (!initialized)
+#endif
+    {
+      title_string_emchar_dynarr = Dynarr_new (Emchar);
+      xzero (title_string_display_line);
+    }
+}
+
 void
 syms_of_frame (void)
 {
index bba3195..c8ec325 100644 (file)
@@ -777,4 +777,6 @@ int is_surrogate_for_selected_frame (struct frame *f);
 void update_frame_icon (struct frame *f);
 void invalidate_vertical_divider_cache_in_frame (struct frame *f);
 
+void init_frame (void);
+
 #endif /* _XEMACS_FRAME_H_ */
diff --git a/src/gdbinit b/src/gdbinit
deleted file mode 100644 (file)
index a50968a..0000000
+++ /dev/null
@@ -1,477 +0,0 @@
-# -*- ksh -*-
-# Copyright (C) 1998 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.
-
-# Author: Martin Buchholz
-
-# Some useful commands for debugging emacs with gdb 4.16 or better.
-# Install this as your .gdbinit file in your home directory,
-# or source this file from your .gdbinit
-# Configure xemacs with --debug, and compile with -g.
-#
-# See also the question of the XEmacs FAQ, titled
-# "How to Debug an XEmacs problem with a debugger".
-#
-# This can be used to debug XEmacs no matter how the following are
-# specified:
-
-# USE_UNION_TYPE
-
-# (the above all have configure equivalents)
-
-# Some functions defined here require a running process, but most
-# don't.  Considerable effort has been expended to this end.
-
-# See the dbg_ C support code in src/alloc.c that allows the functions
-# defined in this file to work correctly.
-
-set print union off
-set print pretty off
-
-define decode_object
-  set $obj = (unsigned long) $arg0
-  if $obj & 1
-  # It's an int
-    set $val = $obj >> 1
-    set $type = Lisp_Type_Int
-  else
-    set $type = $obj & dbg_typemask
-    if $type == Lisp_Type_Char
-      set $val = ($obj & dbg_valmask) >> dbg_gctypebits
-    else
-      # It's a record pointer
-      set $val = $obj
-    end
-  end
-
-  if $type == Lisp_Type_Record
-    set $lheader = (struct lrecord_header *) $val
-    set $imp = lrecord_implementations_table[$lheader->type]
-  else
-    set $imp = -1
-  end
-end
-
-document decode_object
-Usage: decode_object lisp_object
-Extract implementation information from a Lisp Object.
-Defines variables $val, $type and $imp.
-end
-
-define xint
-decode_object $arg0
-print ((long) $val)
-end
-
-define xtype
-  decode_object $arg0
-  if $type == Lisp_Type_Int
-    echo int\n
-  else
-  if $type == Lisp_Type_Char
-    echo char\n
-  else
-  if $type == Lisp_Type_Symbol
-    echo symbol\n
-  else
-  if $type == Lisp_Type_String
-    echo string\n
-  else
-  if $type == Lisp_Type_Vector
-    echo vector\n
-  else
-  if $type == Lisp_Type_Cons
-    echo cons\n
-  else
-    printf "record type: %s\n", $imp->name
-  # barf
-  end
-  end
-  end
-  end
-  end
-  end
-end
-
-define lisp-shadows
-  run -batch -vanilla -f list-load-path-shadows
-end
-
-document lisp-shadows
-Usage: lisp-shadows
-Run xemacs to check for lisp shadows
-end
-
-define environment-to-run-temacs
-  unset env EMACSLOADPATH
-  set env EMACSBOOTSTRAPLOADPATH=../lisp/:..
-  set env EMACSBOOTSTRAPMODULEPATH=../modules/:..
-end
-
-define run-temacs
-  environment-to-run-temacs
-  run -batch -l ../lisp/loadup.el run-temacs -q
-end
-
-document run-temacs
-Usage: run-temacs
-Run temacs interactively, like xemacs.
-Use this with debugging tools (like purify) that cannot deal with dumping,
-or when temacs builds successfully, but xemacs does not.
-end
-
-define update-elc
-  environment-to-run-temacs
-  run -batch -l ../lisp/update-elc.el
-end
-
-document update-elc
-Usage: update-elc
-Run the core lisp byte compilation part of the build procedure.
-Use when debugging temacs, not xemacs!
-Use this when temacs builds successfully, but xemacs does not.
-end
-
-define dump-temacs
-  environment-to-run-temacs
-  run -batch -l ../lisp/loadup.el dump
-end
-
-document dump-temacs
-Usage: dump-temacs
-Run the dumping part of the build procedure.
-Use when debugging temacs, not xemacs!
-Use this when temacs builds successfully, but xemacs does not.
-end
-
-# if you use Purify, do this:
-# export PURIFYOPTIONS='-pointer-mask=0x0fffffff'
-
-define ldp
-  printf "%s", "Lisp => "
-  call debug_print($arg0)
-end
-
-document ldp
-Usage: ldp lisp_object
-Print a Lisp Object value using the Lisp printer.
-Requires a running xemacs process.
-end
-
-define lbt
-call debug_backtrace()
-end
-
-document lbt
-Usage: lbt
-Print the current Lisp stack trace.
-Requires a running xemacs process.
-end
-
-
-define leval
-ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil)))
-end
-
-document leval
-Usage: leval "SEXP"
-Eval a lisp expression.
-Requires a running xemacs process.
-
-Example:
-(gdb) leval "(+ 1 2)"
-Lisp ==> 3
-end
-
-
-define wtype
-print $arg0->core.widget_class->core_class.class_name
-end
-
-define xtname
-print XrmQuarkToString(((Object)($arg0))->object.xrm_name)
-end
-
-# GDB's command language makes you want to ...
-
-define pstruct
-  set $xstruct = (struct $arg0 *) $val
-  print $xstruct
-  print *$xstruct
-end
-
-define pobj
-  decode_object $arg0
-  if $type == Lisp_Type_Int
-    printf "Integer: %d\n", $val
-  else
-  if $type == Lisp_Type_Char
-    if $val > 32 && $val < 128
-      printf "Char: %c\n", $val
-    else
-      printf "Char: %d\n", $val
-    end
-  else
-  if $type == Lisp_Type_String || $imp == &lrecord_string
-    pstruct Lisp_String
-  else
-  if $type == Lisp_Type_Cons   || $imp == &lrecord_cons
-    pstruct Lisp_Cons
-  else
-  if $type == Lisp_Type_Symbol || $imp == &lrecord_symbol
-    pstruct Lisp_Symbol
-    printf "Symbol name: %s\n", $xstruct->name->data
-  else
-  if $type == Lisp_Type_Vector || $imp == &lrecord_vector
-    pstruct Lisp_Vector
-    printf "Vector of length %d\n", $xstruct->size
-    #print *($xstruct->data) @ $xstruct->size
-  else
-  if $imp == &lrecord_bit_vector
-    pstruct Lisp_Bit_Vector
-  else
-  if $imp == &lrecord_buffer
-    pstruct buffer
-  else
-  if $imp == &lrecord_char_table
-    pstruct Lisp_Char_Table
-  else
-  if $imp == &lrecord_char_table_entry
-    pstruct Lisp_Char_Table_Entry
-  else
-  if $imp == &lrecord_charset
-    pstruct Lisp_Charset
-  else
-  if $imp == &lrecord_coding_system
-    pstruct Lisp_Coding_System
-  else
-  if $imp == &lrecord_color_instance
-    pstruct Lisp_Color_Instance
-  else
-  if $imp == &lrecord_command_builder
-    pstruct command_builder
-  else
-  if $imp == &lrecord_compiled_function
-    pstruct Lisp_Compiled_Function
-  else
-  if $imp == &lrecord_console
-    pstruct console
-  else
-  if $imp == &lrecord_database
-    pstruct Lisp_Database
-  else
-  if $imp == &lrecord_device
-    pstruct device
-  else
-  if $imp == &lrecord_event
-    pstruct Lisp_Event
-  else
-  if $imp == &lrecord_extent
-    pstruct extent
-  else
-  if $imp == &lrecord_extent_auxiliary
-    pstruct extent_auxiliary
-  else
-  if $imp == &lrecord_extent_info
-    pstruct extent_info
-  else
-  if $imp == &lrecord_face
-    pstruct Lisp_Face
-  else
-  if $imp == &lrecord_float
-    pstruct Lisp_Float
-  else
-  if $imp == &lrecord_font_instance
-    pstruct Lisp_Font_Instance
-  else
-  if $imp == &lrecord_frame
-    pstruct frame
-  else
-  if $imp == &lrecord_glyph
-    pstruct Lisp_Glyph
-  else
-  if $imp == &lrecord_hash_table
-    pstruct Lisp_Hash_Table
-  else
-  if $imp == &lrecord_image_instance
-    pstruct Lisp_Image_Instance
-  else
-  if $imp == &lrecord_keymap
-    pstruct Lisp_Keymap
-  else
-  if $imp == &lrecord_lcrecord_list
-    pstruct lcrecord_list
-  else
-  if $imp == &lrecord_lstream
-    pstruct lstream
-  else
-  if $imp == &lrecord_marker
-    pstruct Lisp_Marker
-  else
-  if $imp == &lrecord_opaque
-    pstruct Lisp_Opaque
-  else
-  if $imp == &lrecord_opaque_ptr
-    pstruct Lisp_Opaque_Ptr
-  else
-  if $imp == &lrecord_popup_data
-    pstruct popup_data
-  else
-  if $imp == &lrecord_process
-    pstruct Lisp_Process
-  else
-  if $imp == &lrecord_range_table
-    pstruct Lisp_Range_Table
-  else
-  if $imp == &lrecord_specifier
-    pstruct Lisp_Specifier
-  else
-  if $imp == &lrecord_subr
-    pstruct Lisp_Subr
-  else
-  if $imp == &lrecord_symbol_value_buffer_local
-    pstruct symbol_value_buffer_local
-  else
-  if $imp == &lrecord_symbol_value_forward
-    pstruct symbol_value_forward
-  else
-  if $imp == &lrecord_symbol_value_lisp_magic
-    pstruct symbol_value_lisp_magic
-  else
-  if $imp == &lrecord_symbol_value_varalias
-    pstruct symbol_value_varalias
-  else
-  if $imp == &lrecord_toolbar_button
-    pstruct toolbar_button
-  else
-  if $imp == &lrecord_tooltalk_message
-    pstruct Lisp_Tooltalk_Message
-  else
-  if $imp == &lrecord_tooltalk_pattern
-    pstruct Lisp_Tooltalk_Pattern
-  else
-  if $imp == &lrecord_weak_list
-    pstruct weak_list
-  else
-  if $imp == &lrecord_window
-    pstruct window
-  else
-  if $imp == &lrecord_window_configuration
-    pstruct window_config
-  else
-    echo Unknown Lisp Object type\n
-    print $arg0
-  # Barf, gag, retch
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  # Repeat after me... gdb sux, gdb sux, gdb sux...
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  # Are we having fun yet??
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-  end
-end
-
-document pobj
-Usage: pobj lisp_object
-Print the internal C structure of a underlying Lisp Object.
-end
-
-# -------------------------------------------------------------
-# functions to test the debugging support itself.
-# If you change this file, make sure the following still work...
-# -------------------------------------------------------------
-define test_xtype
-  printf "Vemacs_major_version: "
-  xtype Vemacs_major_version
-  printf "Vhelp_char: "
-  xtype Vhelp_char
-  printf "Qnil: "
-  xtype Qnil
-  printf "Qunbound: "
-  xtype Qunbound
-  printf "Vobarray: "
-  xtype Vobarray
-  printf "Vall_weak_lists: "
-  xtype Vall_weak_lists
-  printf "Vxemacs_codename: "
-  xtype Vxemacs_codename
-end
-
-define test_pobj
-  printf "Vemacs_major_version: "
-  pobj Vemacs_major_version
-  printf "Vhelp_char: "
-  pobj Vhelp_char
-  printf "Qnil: "
-  pobj Qnil
-  printf "Qunbound: "
-  pobj Qunbound
-  printf "Vobarray: "
-  pobj Vobarray
-  printf "Vall_weak_lists: "
-  pobj Vall_weak_lists
-  printf "Vxemacs_codename: "
-  pobj Vxemacs_codename
-end
-
index 4005413..0cb977a 100644 (file)
@@ -663,7 +663,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 
     height = unwind.giffile->SHeight;
     width = unwind.giffile->SWidth;
-    unwind.eimage = (unsigned char*) 
+    unwind.eimage = (unsigned char*)
       xmalloc (width * height * 3 * unwind.giffile->ImageCount);
     if (!unwind.eimage)
       signal_image_error("Unable to allocate enough memory for image", instantiator);
@@ -695,7 +695,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
            eip = unwind.eimage + (width * height * 3 * slice) + (row * width * 3);
            for (j = 0; j < width; j++)
              {
-               unsigned char pixel = 
+               unsigned char pixel =
                  unwind.giffile->SavedImages[slice].RasterBits[(i * width) + j];
                *eip++ = cmo->Colors[pixel].Red;
                *eip++ = cmo->Colors[pixel].Green;
@@ -727,7 +727,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
          unwind.giffile->SavedImages[0].ExtensionBlockCount)
        {
          timeout = (unsigned short)
-           ((unwind.giffile->SavedImages[0].ExtensionBlocks[0].Bytes[2] << 8) + 
+           ((unwind.giffile->SavedImages[0].ExtensionBlocks[0].Bytes[2] << 8) +
             unwind.giffile-> SavedImages[0].ExtensionBlocks[0].Bytes[1]) * 10;
        }
 
@@ -737,7 +737,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
       if (!NILP (tid))
        IMAGE_INSTANCE_PIXMAP_TIMEOUT (ii) = XINT (tid);
     }
-  
+
   unbind_to (speccount, Qnil);
 }
 
@@ -1155,7 +1155,7 @@ tiff_memory_size(thandle_t data)
 
 struct tiff_error_struct
 {
-#if HAVE_VSNPRINTF
+#ifdef HAVE_VSNPRINTF
   char err_str[256];
 #else
   char err_str[1024];          /* return the error string */
@@ -1175,7 +1175,7 @@ tiff_error_func(CONST char *module, CONST char *fmt, ...)
   va_list vargs;
 
   va_start (vargs, fmt);
-#if HAVE_VSNPRINTF
+#ifdef HAVE_VSNPRINTF
   vsnprintf (tiff_err_data.err_str, 255, fmt, vargs);
 #else
   /* pray this doesn't overflow... */
@@ -1190,14 +1190,14 @@ static void
 tiff_warning_func(CONST char *module, CONST char *fmt, ...)
 {
   va_list vargs;
-#if HAVE_VSNPRINTF
+#ifdef HAVE_VSNPRINTF
   char warn_str[256];
 #else
   char warn_str[1024];
 #endif
 
   va_start (vargs, fmt);
-#if HAVE_VSNPRINTF
+#ifdef HAVE_VSNPRINTF
   vsnprintf (warn_str, 255, fmt, vargs);
 #else
   vsprintf (warn_str, fmt, vargs);
index 00506b5..cbe62a1 100644 (file)
@@ -1,5 +1,5 @@
 /* mswindows-specific glyph objects.
-   Copyright (C) 1998, 1999 Andy Piper.
+   Copyright (C) 1998, 1999, 2000 Andy Piper.
 
 This file is part of XEmacs.
 
@@ -439,18 +439,18 @@ static void set_mono_pixel ( unsigned char* bits,
                             int bpline, int height,
                             int x, int y, int white )
 {
-  int index;
+  int i;
   unsigned char    bitnum;
   /* Find the byte on which this scanline begins */
-  index = (height - y - 1) * bpline;
+  i = (height - y - 1) * bpline;
   /* Find the byte containing this pixel */
-  index += (x >> 3);
+  i += (x >> 3);
   /* Which bit is it? */
   bitnum = (unsigned char)( 7 - (x % 8) );
   if( white )         /* Turn it on */
-    bits[index] |= (1<<bitnum);
+    bits[i] |= (1<<bitnum);
   else         /* Turn it off */
-    bits[index] &= ~(1<<bitnum);
+    bits[i] &= ~(1<<bitnum);
 }
 
 static void
@@ -1330,15 +1330,6 @@ check_valid_resource_id (Lisp_Object data)
     signal_simple_error ("invalid resource identifier", data);
 }
 
-void
-check_valid_string_or_int (Lisp_Object data)
-{
-  if (!INTP (data))
-    CHECK_STRING (data);
-  else
-    CHECK_INT (data);
-}
-
 /**********************************************************************
  *                             XBM                                    *
  **********************************************************************/
@@ -1628,7 +1619,7 @@ static int flip_table[] =
    padded to a multiple of 16.  Scan lines are stored in increasing
    byte order from left to right, big-endian within a byte.  0 =
    black, 1 = white.  */
-HBITMAP
+static HBITMAP
 xbm_create_bitmap_from_data (HDC hdc, char *data,
                             unsigned int width, unsigned int height,
                             int mask, COLORREF fg, COLORREF bg)
@@ -2106,6 +2097,7 @@ static void
 mswindows_map_subwindow (struct Lisp_Image_Instance *p, int x, int y,
                         struct display_glyph_area* dga)
 {
+      SetFocus (GetParent (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p)));
   /* move the window before mapping it ... */
   SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
                NULL,
@@ -2144,6 +2136,7 @@ mswindows_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h)
 static void
 mswindows_update_subwindow (struct Lisp_Image_Instance *p)
 {
+  /* Now do widget specific updates. */
   if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
     {
       /* buttons checked or otherwise */
@@ -2161,10 +2154,10 @@ mswindows_update_subwindow (struct Lisp_Image_Instance *p)
       SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
                   WM_SETFONT,
                   (WPARAM)FONT_INSTANCE_MSWINDOWS_HFONT
-                  (XFONT_INSTANCE (widget_face_font_info
-                                   (IMAGE_INSTANCE_SUBWINDOW_FRAME (p),
+                  (XFONT_INSTANCE (query_string_font 
+                                   (IMAGE_INSTANCE_WIDGET_TEXT (p),
                                     IMAGE_INSTANCE_WIDGET_FACE (p),
-                                    0, 0))),
+                                    IMAGE_INSTANCE_SUBWINDOW_FRAME (p)))),
                   MAKELPARAM (TRUE, 0));
     }
 }
@@ -2344,9 +2337,7 @@ mswindows_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
     {
       id = mswindows_register_widget_instance (image_instance, domain);
     }
-  /* have to set the type this late in case there is no device
-     instantiation for a widget */
-  IMAGE_INSTANCE_TYPE (ii) = IMAGE_WIDGET;
+
   if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
     GET_C_STRING_OS_DATA_ALLOCA (IMAGE_INSTANCE_WIDGET_TEXT (ii), nm);
 
@@ -2355,7 +2346,7 @@ mswindows_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
 
   if ((IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (ii)
        = CreateWindowEx(
-                       0,              /* EX flags */
+                       WS_EX_CONTROLPARENT,    /* EX flags */
                        XEMACS_CONTROL_CLASS,
                        0,              /* text */
                        WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CHILD,
@@ -2396,17 +2387,17 @@ mswindows_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
   /* set the widget font from the widget face */
   SendMessage (wnd, WM_SETFONT,
               (WPARAM)FONT_INSTANCE_MSWINDOWS_HFONT
-              (XFONT_INSTANCE (widget_face_font_info
-                               (domain,
+              (XFONT_INSTANCE (query_string_font
+                               (IMAGE_INSTANCE_WIDGET_TEXT (ii),
                                 IMAGE_INSTANCE_WIDGET_FACE (ii),
-                                0, 0))),
+                                domain))),
               MAKELPARAM (TRUE, 0));
 }
 
 /* Instantiate a button widget. Unfortunately instantiated widgets are
    particular to a frame since they need to have a parent. It's not
    like images where you just select the image into the context you
-   want to display it in and BitBlt it. So images instances can have a
+   want to display it in and BitBlt it. So image instances can have a
    many-to-one relationship with things you see, whereas widgets can
    only be one-to-one (i.e. per frame) */
 static void
@@ -2417,15 +2408,14 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
   /* this function can call lisp */
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   HWND wnd;
-  int flags = BS_NOTIFY;
+  int flags = WS_TABSTOP;/* BS_NOTIFY #### is needed to get exotic feedback
+                           only. Since we seem to want nothing beyond BN_CLICK,
+                           the style is perhaps not necessary -- kkm */
   Lisp_Object style;
   Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
   struct Lisp_Gui_Item* pgui = XGUI_ITEM (gui);
   Lisp_Object glyph = find_keyword_in_vector (instantiator, Q_image);
 
-  if (!gui_item_active_p (gui))
-    flags |= WS_DISABLED;
-
   if (!NILP (glyph))
     {
       if (!IMAGE_INSTANCEP (glyph))
@@ -2438,6 +2428,8 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
 
   style = pgui->style;
 
+  /* #### consider using the default face for radio and toggle
+     buttons. */
   if (EQ (style, Qradio))
     {
       flags |= BS_RADIOBUTTON;
@@ -2447,11 +2439,13 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
       flags |= BS_AUTOCHECKBOX;
     }
   else
-    flags |= BS_DEFPUSHBUTTON;
+    {
+      flags |= BS_DEFPUSHBUTTON;
+    }
 
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, "BUTTON", flags,
-                               WS_EX_CONTROLPARENT);
+                               pointer_bg, dest_mask, domain, "BUTTON", 
+                               flags, 0);
 
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* set the checked state */
@@ -2465,9 +2459,9 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
       SendMessage (wnd, BM_SETIMAGE,
                   (WPARAM) (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ?
                             IMAGE_BITMAP : IMAGE_ICON),
-                  (LPARAM) (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ?
-                            XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) :
-                            XIMAGE_INSTANCE_MSWINDOWS_ICON (glyph)));
+                  (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ?
+                   (LPARAM) XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) :
+                   (LPARAM) XIMAGE_INSTANCE_MSWINDOWS_ICON (glyph)));
     }
 }
 
@@ -2480,8 +2474,7 @@ mswindows_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instan
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
                                pointer_bg, dest_mask, domain, "EDIT",
                                ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP
-                               | WS_BORDER,
-                               WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT);
+                               | WS_BORDER, WS_EX_CLIENTEDGE);
 }
 
 /* instantiate a progress gauge */
@@ -2494,8 +2487,7 @@ mswindows_progress_gauge_instantiate (Lisp_Object image_instance, Lisp_Object in
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
                                pointer_bg, dest_mask, domain, PROGRESS_CLASS,
-                               WS_TABSTOP | WS_BORDER | PBS_SMOOTH,
-                               WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT);
+                               WS_BORDER | PBS_SMOOTH, WS_EX_CLIENTEDGE);
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* set the colors */
 #ifdef PBS_SETBKCOLOR
@@ -2579,7 +2571,7 @@ mswindows_tree_view_instantiate (Lisp_Object image_instance, Lisp_Object instant
                                pointer_bg, dest_mask, domain, WC_TREEVIEW,
                                WS_TABSTOP | WS_BORDER | PBS_SMOOTH
                                | TVS_HASLINES | TVS_HASBUTTONS,
-                               WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT);
+                               WS_EX_CLIENTEDGE);
 
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
 
@@ -2602,7 +2594,7 @@ mswindows_tree_view_instantiate (Lisp_Object image_instance, Lisp_Object instant
 /* instantiate a tab control */
 static TC_ITEM* add_tab_item (Lisp_Object image_instance,
                             HWND wnd, Lisp_Object item,
-                            Lisp_Object domain, int index)
+                            Lisp_Object domain, int i)
 {
   TC_ITEM tvitem, *ret;
 
@@ -2624,7 +2616,7 @@ static TC_ITEM* add_tab_item (Lisp_Object image_instance,
   tvitem.cchTextMax = strlen (tvitem.pszText);
 
   if ((ret = (TC_ITEM*)SendMessage (wnd, TCM_INSERTITEM,
-                                   index, (LPARAM)&tvitem)) < 0)
+                                   i, (LPARAM)&tvitem)) < 0)
     signal_simple_error ("error adding tab entry", item);
 
   return ret;
@@ -2637,20 +2629,31 @@ mswindows_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object insta
 {
   Lisp_Object rest;
   HWND wnd;
-  int index = 0;
+  int i = 0;
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+  Lisp_Object orient = find_keyword_in_vector (instantiator, Q_orientation);
+  unsigned int flags = WS_TABSTOP;
+
+  if (EQ (orient, Qleft) || EQ (orient, Qright))
+    {
+      flags |= TCS_VERTICAL | TCS_MULTILINE;
+    }
+  if (EQ (orient, Qright) || EQ (orient, Qbottom))
+    {
+      flags |= TCS_BOTTOM;
+    }
+
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
                                pointer_bg, dest_mask, domain, WC_TABCONTROL,
                                /* borders don't suit tabs so well */
-                               WS_TABSTOP,
-                               WS_EX_CONTROLPARENT);
+                               flags, 0);
 
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* add items to the tab */
   LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
     {
-      add_tab_item (image_instance, wnd, XCAR (rest), domain, index);
-      index++;
+      add_tab_item (image_instance, wnd, XCAR (rest), domain, i);
+      i++;
     }
 }
 
@@ -2664,7 +2667,7 @@ mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop
   if (EQ (prop, Q_items))
     {
       HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
-      int index = 0;
+      int i = 0;
       Lisp_Object rest;
       check_valid_item_list_1 (val);
 
@@ -2679,8 +2682,8 @@ mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop
       LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
        {
          add_tab_item (image_instance, wnd, XCAR (rest),
-                       IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), index);
-         index++;
+                       IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), i);
+         i++;
        }
 
       return Qt;
@@ -2707,8 +2710,7 @@ mswindows_scrollbar_instantiate (Lisp_Object image_instance, Lisp_Object instant
 {
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
                                pointer_bg, dest_mask, domain, "SCROLLBAR",
-                               0,
-                               WS_EX_CLIENTEDGE );
+                               WS_TABSTOP, WS_EX_CLIENTEDGE);
 }
 
 /* instantiate a combo control */
@@ -2722,8 +2724,7 @@ mswindows_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instant
   Lisp_Object rest;
   Lisp_Object data = Fplist_get (find_keyword_in_vector (instantiator, Q_properties),
                                 Q_items, Qnil);
-  int len;
-  GET_LIST_LENGTH (data, len);
+  int len, height;
 
   /* Maybe ought to generalise this more but it may be very windows
      specific. In windows the window height of a combo box is the
@@ -2731,19 +2732,29 @@ mswindows_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instant
      before creating the window and then reset it to a single line
      after the window is created so that redisplay does the right
      thing. */
-  widget_instantiate_1 (image_instance, instantiator, pointer_fg,
-                       pointer_bg, dest_mask, domain, len + 1, 0, 0);
+  widget_instantiate (image_instance, instantiator, pointer_fg,
+                     pointer_bg, dest_mask, domain);
+
+  /* We now have everything right apart from the height. */
+  default_face_font_info (domain, 0, 0, &height, 0, 0);
+  GET_LIST_LENGTH (data, len);
 
+  height = (height + WIDGET_BORDER_HEIGHT * 2 ) * len;
+  IMAGE_INSTANCE_HEIGHT (ii) = height;
+  
+  /* Now create the widget. */
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
                                pointer_bg, dest_mask, domain, "COMBOBOX",
                                WS_BORDER | WS_TABSTOP | CBS_DROPDOWN
                                | CBS_AUTOHSCROLL
                                | CBS_HASSTRINGS | WS_VSCROLL,
-                               WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT);
-  /* reset the height */
-  widget_text_to_pixel_conversion (domain,
-                                  IMAGE_INSTANCE_WIDGET_FACE (ii), 1, 0,
-                                  &IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii), 0);
+                               WS_EX_CLIENTEDGE);
+  /* Reset the height. layout will probably do this safely, but better make sure. */
+  image_instance_layout (image_instance, 
+                        IMAGE_UNSPECIFIED_GEOMETRY,
+                        IMAGE_UNSPECIFIED_GEOMETRY,
+                        domain);
+
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* add items to the combo box */
   SendMessage (wnd, CB_RESETCONTENT, 0, 0);
@@ -2823,7 +2834,8 @@ mswindows_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
       GET_C_STRING_OS_DATA_ALLOCA (val, lparam);
       SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
                   WM_SETTEXT, 0, (LPARAM)lparam);
-      return Qt;
+      /* We don't return Qt here so that other widget methods can be
+         called afterwards. */
     }
   return Qunbound;
 }
@@ -2846,10 +2858,10 @@ mswindows_progress_gauge_set_property (Lisp_Object image_instance, Lisp_Object p
 }
 
 LRESULT WINAPI
-mswindows_control_wnd_proc (HWND hwnd, UINT message,
+mswindows_control_wnd_proc (HWND hwnd, UINT msg,
                            WPARAM wParam, LPARAM lParam)
 {
-  switch (message)
+  switch (msg)
     {
     case WM_NOTIFY:
     case WM_COMMAND:
@@ -2859,9 +2871,9 @@ mswindows_control_wnd_proc (HWND hwnd, UINT message,
     case WM_CTLCOLORSTATIC:
     case WM_CTLCOLORSCROLLBAR:
 
-      return mswindows_wnd_proc (GetParent (hwnd), message, wParam, lParam);
+      return mswindows_wnd_proc (GetParent (hwnd), msg, wParam, lParam);
     default:
-      return DefWindowProc (hwnd, message, wParam, lParam);
+      return DefWindowProc (hwnd, msg, wParam, lParam);
     }
 }
 
index eb399c1..2d6ed8c 100644 (file)
@@ -1,5 +1,5 @@
 /* Widget-specific glyph objects.
-   Copyright (C) 1998, 1999 Andy Piper.
+   Copyright (C) 1998, 1999, 2000 Andy Piper.
 
 This file is part of XEmacs.
 
@@ -60,50 +60,20 @@ Lisp_Object Q_descriptor, Q_height, Q_width, Q_properties, Q_items;
 Lisp_Object Q_image, Q_text, Q_percent, Q_orientation, Q_justify, Q_border;
 Lisp_Object Qetched_in, Qetched_out, Qbevel_in, Qbevel_out;
 
-#define WIDGET_BORDER_HEIGHT 4
-#define WIDGET_BORDER_WIDTH 4
-
 #ifdef DEBUG_WIDGETS
 int debug_widget_instances;
 #endif
 
 /* TODO:
    - more complex controls.
-   - tooltips for controls.
+   - tooltips for controls, especially buttons.
  */
 
-/* In windows normal windows work in pixels, dialog boxes work in
+/* In MS-Windows normal windows work in pixels, dialog boxes work in
    dialog box units. Why? sigh. We could reuse the metrics for dialogs
    if this were not the case. As it is we have to position things
    pixel wise. I'm not even sure that X has this problem at least for
    buttons in groups. */
-Lisp_Object
-widget_face_font_info (Lisp_Object domain, Lisp_Object face,
-                      int *height, int *width)
-{
-  Lisp_Object font_instance = FACE_FONT (face, domain, Vcharset_ascii);
-
-  if (height)
-    *height = XFONT_INSTANCE (font_instance)->height;
-  if (width)
-    *width = XFONT_INSTANCE (font_instance)->width;
-  
-  return font_instance;
-}
-
-void
-widget_text_to_pixel_conversion (Lisp_Object domain, Lisp_Object face,
-                                int th, int tw,
-                                int* height, int* width)
-{
-  int ch=0, cw=0;
-  widget_face_font_info (domain, face, &ch, &cw);
-  if (height)
-    *height = th * ch + 2 * WIDGET_BORDER_HEIGHT;
-  if (width)
-    *width = tw * cw + 2 * WIDGET_BORDER_WIDTH;
-}
-
 static int
 widget_possible_dest_types (void)
 {
@@ -133,6 +103,19 @@ check_valid_orientation (Lisp_Object data)
 }
 
 static void
+check_valid_tab_orientation (Lisp_Object data)
+{
+  if (!EQ (data, Qtop)
+      &&
+      !EQ (data, Qbottom)
+      &&
+      !EQ (data, Qleft)
+      &&
+      !EQ (data, Qright))
+    signal_simple_error ("unknown orientation for tab control", data);
+}
+
+static void
 check_valid_justification (Lisp_Object data)
 {
   if (!EQ (data, Qleft) && !EQ (data, Qright) && !EQ (data, Qcenter))
@@ -259,17 +242,17 @@ substitute_keyword_value (Lisp_Object inst, Lisp_Object key, Lisp_Object val)
     }
 }
 
-/* wire widget property invocations to specific widgets ...  The
- problem we are solving here is that when instantiators get converted
- to instances they lose some type information (they just become
- subwindows or widgets for example). For widgets we need to preserve
- this type information so that we can do widget specific operations on
- the instances. This is encoded in the widget type
- field. widget_property gets invoked by decoding the primary type
- (Qwidget), widget property then invokes based on the secondary type
- (Qedit_field for example). It is debatable that we should wire things in this
- generalised way rather than treating widgets specially in
- image_instance_property. */
+/* Wire widget property invocations to specific widgets. The problem
+   we are solving here is that when instantiators get converted to
+   instances they lose some type information (they just become
+   subwindows or widgets for example). For widgets we need to preserve
+   this type information so that we can do widget specific operations
+   on the instances. This is encoded in the widget type
+   field. widget_property gets invoked by decoding the primary type
+   (Qwidget), <widget>_property then invokes based on the secondary
+   type (Qedit_field for example). It is debatable whether we should
+   wire things in this generalised way rather than treating widgets
+   specially in image_instance_property. */
 static Lisp_Object 
 widget_property (Lisp_Object image_instance, Lisp_Object prop)
 {
@@ -302,7 +285,14 @@ widget_set_property (Lisp_Object image_instance, Lisp_Object prop, Lisp_Object v
   struct image_instantiator_methods* meths;
   Lisp_Object ret;
 
-  /* try device specific methods first ... */
+  /* PIck up any generic properties that we might need to keep hold
+     of. */
+  if (EQ (prop, Q_text))
+    {
+      IMAGE_INSTANCE_WIDGET_TEXT (ii) = val;
+    }
+
+  /* Now try device specific methods first ... */
   meths = decode_device_ii_format (IMAGE_INSTANCE_DEVICE (ii), 
                                   IMAGE_INSTANCE_WIDGET_TYPE (ii), 
                                   ERROR_ME_NOT);
@@ -329,6 +319,85 @@ widget_set_property (Lisp_Object image_instance, Lisp_Object prop, Lisp_Object v
   return val;
 }
 
+/* Query for a widgets desired geometry. If no type specific method is
+   provided then use the widget text to calculate sizes. */
+static void 
+widget_query_geometry (Lisp_Object image_instance, 
+                      unsigned int* width, unsigned int* height,
+                      enum image_instance_geometry disp, Lisp_Object domain)
+{
+  struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
+  struct image_instantiator_methods* meths;
+
+  /* First just set up what we already have. */
+  if (width)   *width = IMAGE_INSTANCE_WIDTH (ii);
+  if (height)  *height = IMAGE_INSTANCE_HEIGHT (ii);
+  
+  if (IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii)
+      ||
+      IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii))
+    {
+      /* .. then try device specific methods ... */
+      meths = decode_device_ii_format (IMAGE_INSTANCE_DEVICE (ii), 
+                                      IMAGE_INSTANCE_WIDGET_TYPE (ii), 
+                                      ERROR_ME_NOT);
+      if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry))
+       IIFORMAT_METH (meths, query_geometry, (image_instance, 
+                                              width, height, disp,
+                                              domain));
+      else
+       {
+         /* ... then format specific methods ... */
+         meths = decode_device_ii_format (Qnil, IMAGE_INSTANCE_WIDGET_TYPE (ii), 
+                                          ERROR_ME_NOT);
+         if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry))
+           IIFORMAT_METH (meths, query_geometry, (image_instance, 
+                                                  width, height, disp,
+                                                  domain));
+         else 
+           {
+             unsigned int w, h;
+             
+             /* Then if we are allowed to resize the widget, make the
+                size the same as the text dimensions. */
+             query_string_geometry (IMAGE_INSTANCE_WIDGET_TEXT (ii),
+                                    IMAGE_INSTANCE_WIDGET_FACE (ii),
+                                    &w, &h, 0, domain);
+             /* Adjust the size for borders. */
+             if (IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii))
+               *width = w + 2 * WIDGET_BORDER_WIDTH;
+             if (IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii))
+               *height = h +  2 * WIDGET_BORDER_HEIGHT;
+           }
+       }
+    }
+}
+
+static void 
+widget_layout (Lisp_Object image_instance, 
+              unsigned int width, unsigned int height, Lisp_Object domain)
+{
+  struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
+  struct image_instantiator_methods* meths;
+
+  /* .. then try device specific methods ... */
+  meths = decode_device_ii_format (IMAGE_INSTANCE_DEVICE (ii), 
+                                  IMAGE_INSTANCE_WIDGET_TYPE (ii), 
+                                  ERROR_ME_NOT);
+  if (meths && HAS_IIFORMAT_METH_P (meths, layout))
+    IIFORMAT_METH (meths, layout, (image_instance, 
+                                  width, height, domain));
+  else
+    {
+      /* ... then format specific methods ... */
+      meths = decode_device_ii_format (Qnil, IMAGE_INSTANCE_WIDGET_TYPE (ii), 
+                                      ERROR_ME_NOT);
+      if (meths && HAS_IIFORMAT_METH_P (meths, layout))
+       IIFORMAT_METH (meths, layout, (image_instance, 
+                                      width, height, domain));
+    }
+}
+
 static void
 widget_validate (Lisp_Object instantiator)
 {
@@ -381,8 +450,12 @@ initialize_widget_image_instance (struct Lisp_Image_Instance *ii, Lisp_Object ty
   /*  initialize_subwindow_image_instance (ii);*/
   IMAGE_INSTANCE_WIDGET_TYPE (ii) = type;
   IMAGE_INSTANCE_WIDGET_PROPS (ii) = Qnil;
-  IMAGE_INSTANCE_WIDGET_FACE (ii) = Vwidget_face;
+  SET_IMAGE_INSTANCE_WIDGET_FACE (ii, Qnil);
   IMAGE_INSTANCE_WIDGET_ITEMS (ii) = allocate_gui_item ();
+  IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 1;
+  IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 1;
+  IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) = 0;
+  IMAGE_INSTANCE_SUBWINDOW_JUSTIFY (ii) = 0;
 }
 
 /* Instantiate a button widget. Unfortunately instantiated widgets are
@@ -392,10 +465,9 @@ initialize_widget_image_instance (struct Lisp_Image_Instance *ii, Lisp_Object ty
    many-to-one relationship with things you see, whereas widgets can
    only be one-to-one (i.e. per frame) */
 void
-widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
-                     Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                     int dest_mask, Lisp_Object domain, int default_textheight,
-                     int default_pixheight, int default_textwidth)
+widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
+                   Lisp_Object pointer_fg, Lisp_Object pointer_bg,
+                   int dest_mask, Lisp_Object domain)
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object face = find_keyword_in_vector (instantiator, Q_face);
@@ -406,6 +478,7 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
   Lisp_Object desc = find_keyword_in_vector (instantiator, Q_descriptor);
   Lisp_Object glyph = find_keyword_in_vector (instantiator, Q_image);
   Lisp_Object props = find_keyword_in_vector (instantiator, Q_properties);
+  Lisp_Object orient = find_keyword_in_vector (instantiator, Q_orientation);
   int pw=0, ph=0, tw=0, th=0;
   
   /* this just does pixel type sizing */
@@ -419,11 +492,15 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
 
   /* retrieve the fg and bg colors */
   if (!NILP (face))
-    IMAGE_INSTANCE_WIDGET_FACE (ii) = Fget_face (face);
+    SET_IMAGE_INSTANCE_WIDGET_FACE (ii, Fget_face (face));
   
   /* data items for some widgets */
   IMAGE_INSTANCE_WIDGET_PROPS (ii) = props;
 
+  /* Pick up the orientation before we do our first layout. */
+  if (EQ (orient, Qleft) || EQ (orient, Qright) || EQ (orient, Qvertical))
+    IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) = 1;
+
   /* retrieve the gui item information. This is easy if we have been
      provided with a vector, more difficult if we have just been given
      keywords */
@@ -448,53 +525,73 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
                 parse_gui_item_tree_children (items));
     }
 
-  /* normalize size information */
-  if (!NILP (width))
-    tw = XINT (width);
-  if (!NILP (height))
-    th = XINT (height);
-  if (!NILP (pixwidth))
-    pw = XINT (pixwidth);
-  if (!NILP (pixheight))
-    ph = XINT (pixheight);
+  /* Normalize size information. We now only assign sizes if the user
+     gives us some explicitly, or there are some constraints that we
+     can't change later on. Otherwise we postpone sizing until query
+     geometry gets called. */
+  if (!NILP (pixwidth))                /* pixwidth takes precendent */
+    {
+      pw = XINT (pixwidth);
+      IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0;
+    }
+  else if (!NILP (width))
+    {
+      tw = XINT (width);
+      IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0;
+    }
 
-  /* for a widget with an image pick up the dimensions from that */
-  if (!NILP (glyph))
+  if (!NILP (pixheight))
+    {
+      ph = XINT (pixheight);
+      IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0;
+    }
+  else if (!NILP (height) && XINT (height) > 1)
     {
-      if (!pw && !tw)
-       pw = glyph_width (glyph, Qnil, DEFAULT_INDEX, domain) 
-         + 2 * WIDGET_BORDER_WIDTH;
-      if (!ph && !th)
-       ph = glyph_height (glyph, Qnil, DEFAULT_INDEX, domain) 
-         + 2 * WIDGET_BORDER_HEIGHT;
+      th = XINT (height);
+      IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0;
     }
 
-  /* if we still don' t have sizes, guess from text size */
-  if (!tw && !pw)
+  /* Taking the default face information when the user has specified
+     size in characters is probably as good as any since the widget
+     face is more likely to be proportional and thus give inadequate
+     results. Using character sizes can only ever be approximate
+     anyway. */
+  if (tw || th)
     {
-      if (default_textwidth)
-       tw = default_textwidth;
-      else if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
-       tw = XSTRING_LENGTH (IMAGE_INSTANCE_WIDGET_TEXT (ii));
+      int charwidth, charheight;
+      default_face_font_info (domain, 0, 0, &charheight, &charwidth, 0);
+      if (tw)
+       pw = charwidth * tw;
+      if (th)
+       ph = charheight * th;
     }
 
-  if (!th && !ph)
+  /* for a widget with an image pick up the dimensions from that */
+  if (!NILP (glyph))
     {
-      if (default_textheight)
-       th = default_textheight;
-      else if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii)))
-       th = 1;
-      else
-       ph = default_pixheight;
+      if (!pw)
+       pw = glyph_width (glyph, domain) + 2 * WIDGET_BORDER_WIDTH;
+      if (!ph)
+       ph = glyph_height (glyph, domain) + 2 * WIDGET_BORDER_HEIGHT;
+      IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0;
+      IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0;
     }
-  
-  if (tw !=0 || th !=0)
-    widget_text_to_pixel_conversion (domain,
-                                    IMAGE_INSTANCE_WIDGET_FACE (ii),
-                                    th, tw, th ? &ph : 0, tw ? &pw : 0);
 
-  IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii) = pw;
-  IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii) = ph;
+  /* have to set the type this late in case there is no device
+     instantiation for a widget */
+  IMAGE_INSTANCE_TYPE (ii) = IMAGE_WIDGET;
+
+  /* When we create the widgets the window system expects a valid
+     size, so If we still don' t have sizes, call layout to pick them
+     up. If query_geometry or layout relies on the widget being in
+     existence then we are in catch 22. */
+  image_instance_layout (image_instance, 
+                        pw ? pw : IMAGE_UNSPECIFIED_GEOMETRY,
+                        ph ? ph : IMAGE_UNSPECIFIED_GEOMETRY,
+                        domain);
+  /* Layout has already been done so we don't need to re-layout. */
+  IMAGE_INSTANCE_DIRTYP (ii) = 0;
+
 #ifdef DEBUG_WIDGETS
   debug_widget_instances++;
   stderr_out ("instantiated ");
@@ -503,63 +600,67 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
 #endif
 }
 
+/* tree-view geometry - get the height right */
 static void
-widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
-                   Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                   int dest_mask, Lisp_Object domain)
+tree_view_query_geometry (Lisp_Object image_instance, 
+                         unsigned int* width, unsigned int* height,
+                         enum image_instance_geometry disp, Lisp_Object domain)
 {
-  widget_instantiate_1 (image_instance, instantiator, pointer_fg,
-                              pointer_bg, dest_mask, domain, 1, 0, 0);
-}
+  struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+  Lisp_Object items = IMAGE_INSTANCE_WIDGET_ITEMS (ii);
 
-/* tree-view generic instantiation - get the height right */
-static void
-tree_view_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
-                      Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                      int dest_mask, Lisp_Object domain)
-{
-  Lisp_Object data = Fplist_get (find_keyword_in_vector (instantiator, Q_properties),
-                                Q_items, Qnil);
-  int len;
-  GET_LIST_LENGTH (data, len);
-  widget_instantiate_1 (image_instance, instantiator, pointer_fg,
-                       pointer_bg, dest_mask, domain, len + 1, 0, 0);
+  
+  if (*width)
+    {
+      /* #### what should this be. reconsider when X has tree views. */
+      query_string_geometry (IMAGE_INSTANCE_WIDGET_TEXT (ii),
+                            IMAGE_INSTANCE_WIDGET_FACE (ii),
+                            width, 0, 0, domain);
+    }
+  if (*height)
+    {
+      int len, h;
+      default_face_font_info (domain, 0, 0, &h, 0, 0);
+      GET_LIST_LENGTH (items, len);
+      *height = len * h;
+    }
 }
 
+/* Get the geometry of a tab control. This is based on the number of
+   items and text therin in the tab control. */
 static void
-tab_control_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
-                Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                int dest_mask, Lisp_Object domain)
+tab_control_query_geometry (Lisp_Object image_instance, 
+                           unsigned int* width, unsigned int* height,
+                           enum image_instance_geometry disp, Lisp_Object domain)
 {
-  Lisp_Object data = Fplist_get (find_keyword_in_vector (instantiator, Q_properties),
-                                Q_items, Qnil);
+  struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+  Lisp_Object items = IMAGE_INSTANCE_WIDGET_ITEMS (ii);
   Lisp_Object rest;
-  int len = 0;
+  unsigned int tw = 0, th = 0;
 
-  LIST_LOOP (rest, data)
+  LIST_LOOP (rest, items)
     {
-      len += 3;                        /* some bias */
-      if (STRINGP (XCAR (rest)))
-       len += XSTRING_LENGTH (XCAR (rest));
-      else if (VECTORP (XCAR (rest)))
-       {
-         Lisp_Object gui = gui_parse_item_keywords (XCAR (rest));
-         len += XSTRING_LENGTH (XGUI_ITEM (gui)->name);
-       }
+      unsigned int h, w;
+
+      query_string_geometry (XGUI_ITEM (XCAR (rest))->name,
+                            IMAGE_INSTANCE_WIDGET_FACE (ii),
+                            &w, &h, 0, domain);
+      tw += 2 * WIDGET_BORDER_WIDTH; /* some bias */
+      tw += w;
+      th = max (th, h + 2 * WIDGET_BORDER_HEIGHT);
     }
 
-  widget_instantiate_1 (image_instance, instantiator, pointer_fg,
-                       pointer_bg, dest_mask, domain, 0, 0, len);
-}
-
-/* Instantiate a static control */
-static void
-static_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
-                   Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                   int dest_mask, Lisp_Object domain)
-{
-  widget_instantiate_1 (image_instance, instantiator, pointer_fg,
-                       pointer_bg, dest_mask, domain, 0, 4, 0);
+  /* Fixup returned values depending on orientation. */
+  if (IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii))
+    {
+      if (height)      *height = tw;
+      if (width)       *width = th;
+    }
+  else
+    {
+      if (height)      *height = th;
+      if (width)       *width = tw;
+    }
 }
 
 \f
@@ -689,8 +790,8 @@ layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   LIST_LOOP (rest, items)
     {
       Lisp_Object glyph = XCAR (rest);
-      int gheight = glyph_height (glyph, Qnil, DEFAULT_INDEX, domain);
-      int gwidth = glyph_width (glyph, Qnil, DEFAULT_INDEX, domain);
+      int gheight = glyph_height (glyph, domain);
+      int gwidth = glyph_width (glyph, domain);
       nitems ++;
       if (EQ (orient, Qhorizontal))
        {
@@ -738,7 +839,7 @@ layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
       XIMAGE_INSTANCE_XOFFSET (bglyph) = 10; /* Really, what should this be? */
       XIMAGE_INSTANCE_YOFFSET (bglyph) = 0;
 
-      ph_adjust = (glyph_height (border, Qnil, DEFAULT_INDEX, domain) / 2);
+      ph_adjust = (glyph_height (border, domain) / 2);
       IMAGE_INSTANCE_LAYOUT_BORDER (ii) = make_int (ph_adjust);
     }
 
@@ -768,8 +869,8 @@ layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
       /* make sure the image is instantiated */
       Lisp_Object glyph = XCAR (rest);
       Lisp_Object gii = glyph_image_instance (glyph, domain, ERROR_ME, 1);
-      int gwidth = glyph_width (glyph, Qnil, DEFAULT_INDEX, domain);
-      int gheight = glyph_height (glyph, Qnil, DEFAULT_INDEX, domain);
+      int gwidth = glyph_width (glyph, domain);
+      int gheight = glyph_height (glyph, domain);
 
       children = Fcons (gii, children);
 
@@ -862,6 +963,8 @@ image_instantiator_format_create_glyphs_widget (void)
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM (widget, "widget");
   IIFORMAT_HAS_METHOD (widget, property);
   IIFORMAT_HAS_METHOD (widget, set_property);
+  IIFORMAT_HAS_METHOD (widget, query_geometry);
+  IIFORMAT_HAS_METHOD (widget, layout);
 
   /* widget image-instantiator types - buttons */
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (button, "button");
@@ -917,7 +1020,8 @@ image_instantiator_format_create_glyphs_widget (void)
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (tree_view, "tree-view");
   IIFORMAT_HAS_SHARED_METHOD (tree_view, validate, combo_box);
   IIFORMAT_HAS_SHARED_METHOD (tree_view, possible_dest_types, widget);
-  IIFORMAT_HAS_METHOD (tree_view, instantiate);
+  IIFORMAT_HAS_SHARED_METHOD (tree_view, instantiate, widget);
+  IIFORMAT_HAS_METHOD (tree_view, query_geometry);
   VALID_WIDGET_KEYWORDS (tree_view);
   VALID_GUI_KEYWORDS (tree_view);
   IIFORMAT_VALID_KEYWORD (tree_view, Q_properties, check_valid_item_list);
@@ -926,15 +1030,17 @@ image_instantiator_format_create_glyphs_widget (void)
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (tab_control, "tab-control");
   IIFORMAT_HAS_SHARED_METHOD (tab_control, validate, combo_box);
   IIFORMAT_HAS_SHARED_METHOD (tab_control, possible_dest_types, widget);
-  IIFORMAT_HAS_METHOD (tab_control, instantiate);
+  IIFORMAT_HAS_SHARED_METHOD (tab_control, instantiate, widget);
+  IIFORMAT_HAS_METHOD (tab_control, query_geometry);
   VALID_WIDGET_KEYWORDS (tab_control);
   VALID_GUI_KEYWORDS (tab_control);
+  IIFORMAT_VALID_KEYWORD (tab_control, Q_orientation, check_valid_tab_orientation);
   IIFORMAT_VALID_KEYWORD (tab_control, Q_properties, check_valid_item_list);
 
   /* labels */
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (label, "label");
   IIFORMAT_HAS_SHARED_METHOD (label, possible_dest_types, widget);
-  IIFORMAT_HAS_SHARED_METHOD (label, instantiate, static);
+  IIFORMAT_HAS_SHARED_METHOD (label, instantiate, widget);
   VALID_WIDGET_KEYWORDS (label);
   IIFORMAT_VALID_KEYWORD (label, Q_descriptor, check_valid_string);
 
index b162822..d2dc9df 100644 (file)
@@ -4,7 +4,7 @@
    Copyright (C) 1995 Tinker Systems
    Copyright (C) 1995, 1996 Ben Wing
    Copyright (C) 1995 Sun Microsystems
-   Copyright (C) 1999 Andy Piper
+   Copyright (C) 1999, 2000 Andy Piper
 
 This file is part of XEmacs.
 
@@ -104,13 +104,13 @@ DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg);
 #endif
 #ifdef HAVE_TIFF
 DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff);
-#endif  
+#endif
 #ifdef HAVE_PNG
 DECLARE_IMAGE_INSTANTIATOR_FORMAT (png);
-#endif  
+#endif
 #ifdef HAVE_GIF
 DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif);
-#endif  
+#endif
 #ifdef HAVE_XPM
 DEFINE_DEVICE_IIFORMAT (x, xpm);
 #endif
@@ -427,7 +427,7 @@ x_finalize_image_instance (struct Lisp_Image_Instance *p)
              IMAGE_INSTANCE_X_MASK (p) != IMAGE_INSTANCE_X_PIXMAP (p))
            XFreePixmap (dpy, IMAGE_INSTANCE_X_MASK (p));
          IMAGE_INSTANCE_PIXMAP_MASK (p) = 0;
-         
+
          if (IMAGE_INSTANCE_X_PIXMAP_SLICES (p))
            {
              for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++)
@@ -445,7 +445,7 @@ x_finalize_image_instance (struct Lisp_Image_Instance *p)
              XFreeCursor (dpy, IMAGE_INSTANCE_X_CURSOR (p));
              IMAGE_INSTANCE_X_CURSOR (p) = 0;
            }
-         
+
          if (IMAGE_INSTANCE_X_NPIXELS (p) != 0)
            {
              XFreeColors (dpy,
@@ -519,7 +519,7 @@ x_initialize_pixmap_image_instance (struct Lisp_Image_Instance *ii,
 {
   ii->data = xnew_and_zero (struct x_image_instance_data);
   IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices;
-  IMAGE_INSTANCE_X_PIXMAP_SLICES (ii) = 
+  IMAGE_INSTANCE_X_PIXMAP_SLICES (ii) =
     xnew_array_and_zero (Pixmap, slices);
   IMAGE_INSTANCE_TYPE (ii) = type;
   IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil;
@@ -945,7 +945,7 @@ x_init_image_instance_from_eimage (struct Lisp_Image_Instance *ii,
 
   for (slice = 0; slice < slices; slice++)
     {
-      ximage = convert_EImage_to_XImage (device, width, height, 
+      ximage = convert_EImage_to_XImage (device, width, height,
                                         eimage + (width * height * 3 * slice),
                                         &pixtbl, &npixels);
       if (!ximage)
@@ -1288,8 +1288,8 @@ xpm_free (XpmAttributes *xpmattrs)
 
 static void
 x_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
-                                  Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                                  int dest_mask, Lisp_Object domain)
+                  Lisp_Object pointer_fg, Lisp_Object pointer_bg,
+                  int dest_mask, Lisp_Object domain)
 {
   /* This function can GC */
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
@@ -1729,7 +1729,7 @@ autodetect_validate (Lisp_Object instantiator)
 
 static Lisp_Object
 autodetect_normalize (Lisp_Object instantiator,
-                               Lisp_Object console_type)
+                     Lisp_Object console_type)
 {
   Lisp_Object file = find_keyword_in_vector (instantiator, Q_data);
   Lisp_Object filename = Qnil;
@@ -1820,10 +1820,10 @@ autodetect_possible_dest_types (void)
 
 static void
 autodetect_instantiate (Lisp_Object image_instance,
-                                 Lisp_Object instantiator,
-                                 Lisp_Object pointer_fg,
-                                 Lisp_Object pointer_bg,
-                                 int dest_mask, Lisp_Object domain)
+                       Lisp_Object instantiator,
+                       Lisp_Object pointer_fg,
+                       Lisp_Object pointer_bg,
+                       int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   struct gcpro gcpro1, gcpro2, gcpro3;
@@ -2113,8 +2113,8 @@ x_unmap_subwindow (struct Lisp_Image_Instance *p)
 {
   if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
     {
-      XUnmapWindow 
-       (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), 
+      XUnmapWindow
+       (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
         IMAGE_INSTANCE_X_CLIPWINDOW (p));
     }
   else                         /* must be a widget */
@@ -2133,7 +2133,7 @@ x_map_subwindow (struct Lisp_Image_Instance *p, int x, int y,
     {
       Window subwindow = IMAGE_INSTANCE_X_SUBWINDOW_ID (p);
       XMoveResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
-                        IMAGE_INSTANCE_X_CLIPWINDOW (p), 
+                        IMAGE_INSTANCE_X_CLIPWINDOW (p),
                         x, y, dga->width, dga->height);
       XMoveWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
                   subwindow, -dga->xoffset, -dga->yoffset);
@@ -2142,7 +2142,7 @@ x_map_subwindow (struct Lisp_Image_Instance *p, int x, int y,
     }
   else                         /* must be a widget */
     {
-      XtConfigureWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p), 
+      XtConfigureWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p),
                         x + IMAGE_INSTANCE_X_WIDGET_XOFFSET (p),
                         y + IMAGE_INSTANCE_X_WIDGET_YOFFSET (p),
                         dga->width, dga->height, 0);
@@ -2160,28 +2160,23 @@ x_update_subwindow (struct Lisp_Image_Instance *p)
 #ifdef HAVE_WIDGETS
   if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
     {
-      Arg al[5];
-      widget_value* wv = gui_items_to_widget_values 
+      widget_value* wv = gui_items_to_widget_values
        (IMAGE_INSTANCE_WIDGET_ITEMS (p));
 
       /* This seems ugly, but I'm not sure what else to do. */
       if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (p), Qtab_control))
        {
-         update_tab_widget_face (wv, p, 
+         update_tab_widget_face (wv, p,
                                  IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
        }
       /* update the colors and font */
       update_widget_face (wv, p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
-      
+
       /* now modify the widget */
-      lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p), 
+      lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p),
                             wv, True);
       free_widget_value_tree (wv);
-      /* We have to do this otherwise Motif will unceremoniously
-         resize us when the label gets set. */
-      XtSetArg (al [0], XtNwidth, IMAGE_INSTANCE_WIDGET_WIDTH (p));
-      XtSetArg (al [1], XtNheight, IMAGE_INSTANCE_WIDGET_HEIGHT (p));
-      XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (p), al, 2);
+      /* subwindow resizing now gets done by the parent function. */
     }
 #endif
 }
@@ -2202,7 +2197,7 @@ x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   Window pw, win;
   XSetWindowAttributes xswa;
   Mask valueMask = 0;
-  unsigned int w = IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii), 
+  unsigned int w = IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii),
     h = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii);
 
   if (!DEVICE_X_P (XDEVICE (device)))
@@ -2224,9 +2219,9 @@ x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   valueMask |= CWBackingStore;
   xswa.colormap = DefaultColormapOfScreen (xs);
   valueMask |= CWColormap;
-  
+
   /* Create a window for clipping */
-  IMAGE_INSTANCE_X_CLIPWINDOW (ii) = 
+  IMAGE_INSTANCE_X_CLIPWINDOW (ii) =
     XCreateWindow (dpy, pw, 0, 0, w, h, 0, CopyFromParent,
                   InputOutput, CopyFromParent, valueMask,
                   &xswa);
@@ -2236,7 +2231,7 @@ x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                       0, 0, w, h, 0, CopyFromParent,
                       InputOutput, CopyFromParent, valueMask,
                       &xswa);
-  
+
   IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)win;
 }
 
@@ -2270,7 +2265,7 @@ Subwindows are not currently implemented.
 }
 #endif
 
-static void 
+static void
 x_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h)
 {
   if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW)
@@ -2310,28 +2305,34 @@ update_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii,
 #ifdef LWLIB_WIDGETS_MOTIF
   XmFontList fontList;
 #endif
-
-  Lisp_Object pixel = FACE_FOREGROUND 
+  /* Update the foreground. */
+  Lisp_Object pixel = FACE_FOREGROUND
     (IMAGE_INSTANCE_WIDGET_FACE (ii),
      domain);
-  XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
-
+  XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)), bcolor;
   lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
+
+  /* Update the background. */
+  pixel = FACE_BACKGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii),
+                          domain);
+  bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
+  lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel);
+
 #ifdef LWLIB_WIDGETS_MOTIF
   fontList = XmFontListCreate
-    (FONT_INSTANCE_X_FONT 
-     (XFONT_INSTANCE (widget_face_font_info 
-                     (domain,
+    (FONT_INSTANCE_X_FONT
+     (XFONT_INSTANCE (query_string_font
+                     (IMAGE_INSTANCE_WIDGET_TEXT (ii),
                       IMAGE_INSTANCE_WIDGET_FACE (ii),
-                      0, 0))), XmSTRING_DEFAULT_CHARSET);
+                      domain))),  XmSTRING_DEFAULT_CHARSET);
   lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal)fontList);
 #endif
-  lw_add_widget_value_arg 
-    (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT 
-     (XFONT_INSTANCE (widget_face_font_info 
-                     (domain,
+  lw_add_widget_value_arg
+    (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT
+     (XFONT_INSTANCE (query_string_font
+                     (IMAGE_INSTANCE_WIDGET_TEXT (ii),
                       IMAGE_INSTANCE_WIDGET_FACE (ii),
-                      0, 0))));
+                      domain))));
 }
 
 static void
@@ -2341,9 +2342,9 @@ update_tab_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii,
   if (wv->contents)
     {
       widget_value* val = wv->contents, *cur;
-      
+
       /* Give each child label the correct foreground color. */
-      Lisp_Object pixel = FACE_FOREGROUND 
+      Lisp_Object pixel = FACE_FOREGROUND
        (IMAGE_INSTANCE_WIDGET_FACE (ii),
         domain);
       XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
@@ -2398,9 +2399,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   clip_wv = xmalloc_widget_value ();
 
   lw_add_widget_value_arg (clip_wv, XtNresize, False);
-  lw_add_widget_value_arg (clip_wv, XtNwidth, 
+  lw_add_widget_value_arg (clip_wv, XtNwidth,
                           (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
-  lw_add_widget_value_arg (clip_wv, XtNheight, 
+  lw_add_widget_value_arg (clip_wv, XtNheight,
                           (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
   clip_wv->enabled = True;
 
@@ -2422,7 +2423,7 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
      created so that Motif will fix up the shadow colors
      correctly. Once the widget is created Motif won't do this
      anymore...*/
-  pixel = FACE_FOREGROUND 
+  pixel = FACE_FOREGROUND
     (IMAGE_INSTANCE_WIDGET_FACE (ii),
      IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
   fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
@@ -2436,9 +2437,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
   /* we cannot allow widgets to resize themselves */
   lw_add_widget_value_arg (wv, XtNresize, False);
-  lw_add_widget_value_arg (wv, XtNwidth, 
+  lw_add_widget_value_arg (wv, XtNwidth,
                           (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
-  lw_add_widget_value_arg (wv, XtNheight, 
+  lw_add_widget_value_arg (wv, XtNheight,
                           (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
   /* update the font. */
   update_widget_face (wv, ii, domain);
@@ -2452,9 +2453,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   /* Resize the widget here so that the values do not get copied by
      lwlib. */
   ac = 0;
-  XtSetArg (al [ac], XtNwidth, 
+  XtSetArg (al [ac], XtNwidth,
            (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); ac++;
-  XtSetArg (al [ac], XtNheight, 
+  XtSetArg (al [ac], XtNheight,
            (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); ac++;
   XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, ac);
   /* because the EmacsManager is the widgets parent we have to
@@ -2485,7 +2486,6 @@ x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
       GET_C_STRING_OS_DATA_ALLOCA (val, str);
       wv->value = str;
       lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False);
-      return Qt;
     }
 
   /* Modify the text properties of the widget */
@@ -2494,7 +2494,6 @@ x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
       widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
       update_widget_face (wv, ii, IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
       lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False);
-      return Qt;
     }
   return Qunbound;
 }
@@ -2616,9 +2615,9 @@ x_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
   widget_value* wv = xmalloc_widget_value ();
-  
+
   button_item_to_widget_value (gui, wv, 1, 1);
-  
+
   x_widget_instantiate (image_instance, instantiator, pointer_fg,
                        pointer_bg, dest_mask, domain, "text-field", wv);
 }
@@ -2634,11 +2633,11 @@ x_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   widget_value * wv = 0;
   /* This is not done generically because of sizing problems under
      mswindows. */
-  widget_instantiate_1 (image_instance, instantiator, pointer_fg,
-                       pointer_bg, dest_mask, domain, 1, 0, 0);
+  widget_instantiate (image_instance, instantiator, pointer_fg,
+                     pointer_bg, dest_mask, domain);
 
   wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
-  
+
   x_widget_instantiate (image_instance, instantiator, pointer_fg,
                        pointer_bg, dest_mask, domain, "combo-box", wv);
 }
@@ -2650,10 +2649,10 @@ x_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                           int dest_mask, Lisp_Object domain)
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  widget_value * wv = 
+  widget_value * wv =
     gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
 
-  update_tab_widget_face (wv, ii, 
+  update_tab_widget_face (wv, ii,
                          IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
 
   x_widget_instantiate (image_instance, instantiator, pointer_fg,
@@ -2666,19 +2665,19 @@ x_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop,
                            Lisp_Object val)
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  
+
   if (EQ (prop, Q_items))
     {
       widget_value * wv = 0;
       check_valid_item_list_1 (val);
 
-      IMAGE_INSTANCE_WIDGET_ITEMS (ii) = 
-       Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)), 
+      IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
+       Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
               parse_gui_item_tree_children (val));
 
       wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
-      
-      update_tab_widget_face (wv, ii, 
+
+      update_tab_widget_face (wv, ii,
                              IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
 
       lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True);
@@ -2699,9 +2698,9 @@ x_label_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii);
   widget_value* wv = xmalloc_widget_value ();
-  
+
   button_item_to_widget_value (gui, wv, 1, 1);
-  
+
   x_widget_instantiate (image_instance, instantiator, pointer_fg,
                        pointer_bg, dest_mask, domain, "button", wv);
 }
@@ -2755,13 +2754,13 @@ image_instantiator_format_create_glyphs_x (void)
 #endif
 #ifdef HAVE_TIFF
   IIFORMAT_VALID_CONSOLE (x, tiff);
-#endif  
+#endif
 #ifdef HAVE_PNG
   IIFORMAT_VALID_CONSOLE (x, png);
-#endif  
+#endif
 #ifdef HAVE_GIF
   IIFORMAT_VALID_CONSOLE (x, gif);
-#endif  
+#endif
   INITIALIZE_DEVICE_IIFORMAT (x, xbm);
   IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate);
 
index e099355..3639de1 100644 (file)
@@ -3,7 +3,7 @@
    Copyright (C) 1995 Tinker Systems
    Copyright (C) 1995, 1996 Ben Wing
    Copyright (C) 1995 Sun Microsystems
-   Copyright (C) 1998, 1999 Andy Piper
+   Copyright (C) 1998, 1999, 2000 Andy Piper
 
 This file is part of XEmacs.
 
@@ -24,7 +24,8 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: Not in FSF. */
 
-/* Written by Ben Wing and Chuck Thompson. */
+/* Written by Ben Wing and Chuck Thompson. Heavily modified /
+   rewritten by Andy Piper. */
 
 #include <config.h>
 #include "lisp.h"
@@ -122,7 +123,7 @@ typedef struct
 image_instantiator_format_entry_dynarr *
   the_image_instantiator_format_entry_dynarr;
 
-static Lisp_Object allocate_image_instance (Lisp_Object device);
+static Lisp_Object allocate_image_instance (Lisp_Object device, Lisp_Object glyph);
 static void image_validate (Lisp_Object instantiator);
 static void glyph_property_was_changed (Lisp_Object glyph,
                                        Lisp_Object property,
@@ -575,9 +576,9 @@ static Lisp_Object
 instantiate_image_instantiator (Lisp_Object device, Lisp_Object domain,
                                Lisp_Object instantiator,
                                Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                               int dest_mask)
+                               int dest_mask, Lisp_Object glyph)
 {
-  Lisp_Object ii = allocate_image_instance (device);
+  Lisp_Object ii = allocate_image_instance (device, glyph);
   struct image_instantiator_methods *meths;
   struct gcpro gcpro1;
   int  methp = 0;
@@ -622,6 +623,8 @@ mark_image_instance (Lisp_Object obj)
   struct Lisp_Image_Instance *i = XIMAGE_INSTANCE (obj);
 
   mark_object (i->name);
+  /* We don't mark the glyph reference since that would create a
+     circularity preventing GC. */
   switch (IMAGE_INSTANCE_TYPE (i))
     {
     case IMAGE_TEXT:
@@ -754,13 +757,6 @@ print_image_instance (Lisp_Object obj, Lisp_Object printcharfun,
       break;
 
     case IMAGE_WIDGET:
-      /*
-      if (!NILP (IMAGE_INSTANCE_WIDGET_CALLBACK (ii)))
-       {
-         print_internal (IMAGE_INSTANCE_WIDGET_CALLBACK (ii), printcharfun, 0);
-         write_c_string (", ", printcharfun);
-       }
-      */
       if (!NILP (IMAGE_INSTANCE_WIDGET_FACE (ii)))
        {
          write_c_string (" (", printcharfun);
@@ -842,7 +838,11 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
 
   if (d1 != d2)
     return 0;
-  if (IMAGE_INSTANCE_TYPE (i1) != IMAGE_INSTANCE_TYPE (i2))
+  if (IMAGE_INSTANCE_TYPE (i1) != IMAGE_INSTANCE_TYPE (i2)
+      || IMAGE_INSTANCE_WIDTH (i1) != IMAGE_INSTANCE_WIDTH (i2)
+      || IMAGE_INSTANCE_HEIGHT (i1) != IMAGE_INSTANCE_HEIGHT (i2)
+      || IMAGE_INSTANCE_XOFFSET (i1) != IMAGE_INSTANCE_XOFFSET (i2)
+      || IMAGE_INSTANCE_YOFFSET (i1) != IMAGE_INSTANCE_YOFFSET (i2))
     return 0;
   if (!internal_equal (IMAGE_INSTANCE_NAME (i1), IMAGE_INSTANCE_NAME (i2),
                       depth + 1))
@@ -863,11 +863,7 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
     case IMAGE_MONO_PIXMAP:
     case IMAGE_COLOR_PIXMAP:
     case IMAGE_POINTER:
-      if (!(IMAGE_INSTANCE_PIXMAP_WIDTH (i1) ==
-           IMAGE_INSTANCE_PIXMAP_WIDTH (i2) &&
-           IMAGE_INSTANCE_PIXMAP_HEIGHT (i1) ==
-           IMAGE_INSTANCE_PIXMAP_HEIGHT (i2) &&
-           IMAGE_INSTANCE_PIXMAP_DEPTH (i1) ==
+      if (!(IMAGE_INSTANCE_PIXMAP_DEPTH (i1) ==
            IMAGE_INSTANCE_PIXMAP_DEPTH (i2) &&
            IMAGE_INSTANCE_PIXMAP_SLICE (i1) ==
            IMAGE_INSTANCE_PIXMAP_SLICE (i2) &&
@@ -887,6 +883,8 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
     case IMAGE_WIDGET:
       if (!(EQ (IMAGE_INSTANCE_WIDGET_TYPE (i1),
                IMAGE_INSTANCE_WIDGET_TYPE (i2))
+           && IMAGE_INSTANCE_SUBWINDOW_ID (i1) ==
+           IMAGE_INSTANCE_SUBWINDOW_ID (i2)
            && internal_equal (IMAGE_INSTANCE_WIDGET_ITEMS (i1),
                               IMAGE_INSTANCE_WIDGET_ITEMS (i2),
                               depth + 1)
@@ -895,6 +893,8 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
                               depth + 1)
            ))
        return 0;
+      break;
+      
     case IMAGE_LAYOUT:
       if (IMAGE_INSTANCE_TYPE (i1) == IMAGE_LAYOUT
          &&
@@ -905,12 +905,10 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
                            IMAGE_INSTANCE_LAYOUT_CHILDREN (i2),
                            depth + 1)))
        return 0;
+      break;
+      
     case IMAGE_SUBWINDOW:
-      if (!(IMAGE_INSTANCE_SUBWINDOW_WIDTH (i1) ==
-           IMAGE_INSTANCE_SUBWINDOW_WIDTH (i2) &&
-           IMAGE_INSTANCE_SUBWINDOW_HEIGHT (i1) ==
-           IMAGE_INSTANCE_SUBWINDOW_HEIGHT (i2) &&
-           IMAGE_INSTANCE_SUBWINDOW_ID (i1) ==
+      if (!(IMAGE_INSTANCE_SUBWINDOW_ID (i1) ==
            IMAGE_INSTANCE_SUBWINDOW_ID (i2)))
        return 0;
       break;
@@ -927,7 +925,9 @@ image_instance_hash (Lisp_Object obj, int depth)
 {
   struct Lisp_Image_Instance *i = XIMAGE_INSTANCE (obj);
   struct device *d = XDEVICE (i->device);
-  unsigned long hash = (unsigned long) d;
+  unsigned long hash = HASH3 ((unsigned long) d,
+                             IMAGE_INSTANCE_WIDTH (i),
+                             IMAGE_INSTANCE_HEIGHT (i));
 
   switch (IMAGE_INSTANCE_TYPE (i))
     {
@@ -942,9 +942,7 @@ image_instance_hash (Lisp_Object obj, int depth)
     case IMAGE_MONO_PIXMAP:
     case IMAGE_COLOR_PIXMAP:
     case IMAGE_POINTER:
-      hash = HASH6 (hash, IMAGE_INSTANCE_PIXMAP_WIDTH (i),
-                   IMAGE_INSTANCE_PIXMAP_HEIGHT (i),
-                   IMAGE_INSTANCE_PIXMAP_DEPTH (i),
+      hash = HASH4 (hash, IMAGE_INSTANCE_PIXMAP_DEPTH (i),
                    IMAGE_INSTANCE_PIXMAP_SLICE (i),
                    internal_hash (IMAGE_INSTANCE_PIXMAP_FILENAME (i),
                                   depth + 1));
@@ -955,16 +953,15 @@ image_instance_hash (Lisp_Object obj, int depth)
                    internal_hash (IMAGE_INSTANCE_WIDGET_TYPE (i), depth + 1),
                    internal_hash (IMAGE_INSTANCE_WIDGET_PROPS (i), depth + 1),
                    internal_hash (IMAGE_INSTANCE_WIDGET_ITEMS (i), depth + 1));
-    case IMAGE_LAYOUT:
-      if (IMAGE_INSTANCE_TYPE (i) == IMAGE_LAYOUT)
-       hash = HASH3 (hash,
-                     internal_hash (IMAGE_INSTANCE_LAYOUT_BORDER (i), depth + 1),
-                     internal_hash (IMAGE_INSTANCE_LAYOUT_CHILDREN (i),
-                                    depth + 1));
     case IMAGE_SUBWINDOW:
-      hash = HASH4 (hash, IMAGE_INSTANCE_SUBWINDOW_WIDTH (i),
-                   IMAGE_INSTANCE_SUBWINDOW_HEIGHT (i),
-                   (int) IMAGE_INSTANCE_SUBWINDOW_ID (i));
+      hash = HASH2 (hash, (int) IMAGE_INSTANCE_SUBWINDOW_ID (i));
+      break;
+
+    case IMAGE_LAYOUT:
+      hash = HASH3 (hash,
+                   internal_hash (IMAGE_INSTANCE_LAYOUT_BORDER (i), depth + 1),
+                   internal_hash (IMAGE_INSTANCE_LAYOUT_CHILDREN (i),
+                                  depth + 1));
       break;
 
     default:
@@ -982,7 +979,7 @@ DEFINE_LRECORD_IMPLEMENTATION ("image-instance", image_instance,
                               struct Lisp_Image_Instance);
 
 static Lisp_Object
-allocate_image_instance (Lisp_Object device)
+allocate_image_instance (Lisp_Object device, Lisp_Object glyph)
 {
   struct Lisp_Image_Instance *lp =
     alloc_lcrecord_type (struct Lisp_Image_Instance, &lrecord_image_instance);
@@ -994,7 +991,12 @@ allocate_image_instance (Lisp_Object device)
   lp->name = Qnil;
   lp->x_offset = 0;
   lp->y_offset = 0;
+  lp->width = 0;
+  lp->height = 0;
+  lp->glyph = glyph;
+  MARK_IMAGE_INSTANCE_CHANGED (lp); /* So that layouts get done. */
   XSETIMAGE_INSTANCE (val, lp);
+  MARK_GLYPHS_CHANGED; /* So that the dirty flag gets reset. */
   return val;
 }
 
@@ -1176,7 +1178,7 @@ make_image_instance_1 (Lisp_Object data, Lisp_Object device,
   if (VECTORP (data) && EQ (XVECTOR_DATA (data)[0], Qinherit))
     signal_simple_error ("Inheritance not allowed here", data);
   ii = instantiate_image_instantiator (device, device, data,
-                                      Qnil, Qnil, dest_mask);
+                                      Qnil, Qnil, dest_mask, Qnil);
   RETURN_UNGCPRO (ii);
 }
 
@@ -1450,12 +1452,10 @@ Return the height of the image instance, in pixels.
     case IMAGE_MONO_PIXMAP:
     case IMAGE_COLOR_PIXMAP:
     case IMAGE_POINTER:
-      return make_int (XIMAGE_INSTANCE_PIXMAP_HEIGHT (image_instance));
-
     case IMAGE_SUBWINDOW:
     case IMAGE_WIDGET:
     case IMAGE_LAYOUT:
-      return make_int (XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (image_instance));
+      return make_int (XIMAGE_INSTANCE_HEIGHT (image_instance));
 
     default:
       return Qnil;
@@ -1474,12 +1474,10 @@ Return the width of the image instance, in pixels.
     case IMAGE_MONO_PIXMAP:
     case IMAGE_COLOR_PIXMAP:
     case IMAGE_POINTER:
-      return make_int (XIMAGE_INSTANCE_PIXMAP_WIDTH (image_instance));
-
     case IMAGE_SUBWINDOW:
     case IMAGE_WIDGET:
     case IMAGE_LAYOUT:
-      return make_int (XIMAGE_INSTANCE_SUBWINDOW_WIDTH (image_instance));
+      return make_int (XIMAGE_INSTANCE_WIDTH (image_instance));
 
     default:
       return Qnil;
@@ -1611,7 +1609,7 @@ instance is a mono pixmap; otherwise, the same image instance is returned.
 
   /* #### There should be a copy_image_instance(), which calls a
      device-specific method to copy the window-system subobject. */
-  new = allocate_image_instance (device);
+  new = allocate_image_instance (device, Qnil);
   copy_lcrecord (XIMAGE_INSTANCE (new), XIMAGE_INSTANCE (image_instance));
   /* note that if this method returns non-zero, this method MUST
      copy any window-system resources, so that when one image instance is
@@ -1622,6 +1620,98 @@ instance is a mono pixmap; otherwise, the same image instance is returned.
   return new;
 }
 
+
+/************************************************************************/
+/*                              Geometry calculations                   */
+/************************************************************************/
+
+/* Find out desired geometry of the image instance. If there is no
+   special function then just return the width and / or height. */
+void
+image_instance_query_geometry (Lisp_Object image_instance, 
+                              unsigned int* width, unsigned int* height, 
+                              enum image_instance_geometry disp,
+                              Lisp_Object domain)
+{
+  struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
+  Lisp_Object type;
+  struct image_instantiator_methods* meths;
+
+  type = encode_image_instance_type (IMAGE_INSTANCE_TYPE (ii));
+  meths = decode_device_ii_format (Qnil, type, ERROR_ME_NOT);
+  
+  if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry))
+    {
+      IIFORMAT_METH (meths, query_geometry, (image_instance, width, height, 
+                                            disp, domain));
+    }
+  else
+    {
+      if (width)
+       *width = IMAGE_INSTANCE_WIDTH (ii);
+      if (height)
+       *height = IMAGE_INSTANCE_HEIGHT (ii);
+    }
+}
+
+/* Layout the image instance using the provided dimensions. Layout
+   widgets are going to do different kinds of calculations to
+   determine what size to give things so we could make the layout
+   function relatively simple to take account of that. An alternative
+   approach is to consider separately the two cases, one where you
+   don't mind what size you have (normal widgets) and one where you
+   want to specifiy something (layout widgets). */
+void
+image_instance_layout (Lisp_Object image_instance, 
+                      unsigned int width, unsigned int height, 
+                      Lisp_Object domain)
+{
+  struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
+  Lisp_Object type;
+  struct image_instantiator_methods* meths;
+
+  type = encode_image_instance_type (IMAGE_INSTANCE_TYPE (ii));
+  meths = decode_device_ii_format (Qnil, type, ERROR_ME_NOT);
+
+  /* If geometry is unspecified then get some reasonable values for it. */
+  if (width == IMAGE_UNSPECIFIED_GEOMETRY
+      ||
+      height == IMAGE_UNSPECIFIED_GEOMETRY)
+    {
+      unsigned int dwidth, dheight;
+
+      /* Get the desired geometry. */
+      if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry))
+       {
+         IIFORMAT_METH (meths, query_geometry, (image_instance, &dwidth, &dheight, 
+                                                IMAGE_DESIRED_GEOMETRY, 
+                                                domain));
+       }
+      else
+       {
+         dwidth = IMAGE_INSTANCE_WIDTH (ii);
+         dheight = IMAGE_INSTANCE_HEIGHT (ii);
+       }
+
+      /* Compare with allowed geometry. */
+      if (width == IMAGE_UNSPECIFIED_GEOMETRY)
+       width = dwidth;
+      if (height == IMAGE_UNSPECIFIED_GEOMETRY)
+       height = dheight;
+    }
+
+  /* At this point width and height should contain sane values. Thus
+     we set the glyph geometry and lay it out. */
+  IMAGE_INSTANCE_WIDTH (ii) = width;
+  IMAGE_INSTANCE_HEIGHT (ii) = height;
+  
+  if (meths && HAS_IIFORMAT_METH_P (meths, layout))
+    {
+      IIFORMAT_METH (meths, layout, (image_instance, width, height, domain));
+    }
+  /* else no change to the geometry. */
+}
+
 \f
 /************************************************************************/
 /*                              error helpers                           */
@@ -1718,7 +1808,7 @@ string_possible_dest_types (void)
   return IMAGE_TEXT_MASK;
 }
 
-/* called from autodetect_instantiate() */
+/* Called from autodetect_instantiate() */
 void
 string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                    Lisp_Object pointer_fg, Lisp_Object pointer_bg,
@@ -1726,8 +1816,9 @@ string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 {
   Lisp_Object string = find_keyword_in_vector (instantiator, Q_data);
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-
-  assert (!NILP (string));
+  
+  /* Should never get here with a domain other than a window. */
+  assert (!NILP (string) && WINDOWP (domain));
   if (dest_mask & IMAGE_TEXT_MASK)
     {
       IMAGE_INSTANCE_TYPE (ii) = IMAGE_TEXT;
@@ -1737,6 +1828,116 @@ string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
     incompatible_image_types (instantiator, dest_mask, IMAGE_TEXT_MASK);
 }
 
+/* Sort out the size of the text that is being displayed. Calculating
+   it dynamically allows us to change the text and still see
+   everything. Note that the following methods are for text not string
+   since that is what the instantiated type is. The first method is a
+   helper that is used elsewhere for calculating text geometry. */
+void
+query_string_geometry (Lisp_Object string, Lisp_Object face,
+                      unsigned int* width, unsigned int* height, 
+                      unsigned int* descent, Lisp_Object domain)
+{
+  struct font_metric_info fm;
+  Charset_ID charsets[NUM_LEADING_BYTES];
+  struct face_cachel frame_cachel;
+  struct face_cachel *cachel;
+  Lisp_Object frame = FW_FRAME (domain);
+
+  /* Compute height */
+  if (height)
+    {
+      /* Compute string metric info */
+      find_charsets_in_bufbyte_string (charsets,
+                                      XSTRING_DATA   (string),
+                                      XSTRING_LENGTH (string));
+      
+      /* Fallback to the default face if none was provided. */
+      if (!NILP (face))
+       {
+         reset_face_cachel (&frame_cachel);
+         update_face_cachel_data (&frame_cachel, frame, face);
+         cachel = &frame_cachel;
+       }
+      else
+       {
+         cachel = WINDOW_FACE_CACHEL (XWINDOW (domain), DEFAULT_INDEX);
+       }
+      
+      ensure_face_cachel_complete (cachel, domain, charsets);
+      face_cachel_charset_font_metric_info (cachel, charsets, &fm);
+      
+      *height = fm.ascent + fm.descent;
+      /* #### descent only gets set if we query the height as well. */
+      if (descent)
+       *descent = fm.descent;
+    }
+    
+  /* Compute width */
+  if (width)
+    {
+      if (!NILP (face))
+       *width = redisplay_frame_text_width_string (XFRAME (frame),
+                                                   face,
+                                                   0, string, 0, -1);
+      else
+       *width = redisplay_frame_text_width_string (XFRAME (frame),
+                                                   Vdefault_face,
+                                                   0, string, 0, -1);
+    }
+}
+
+Lisp_Object
+query_string_font (Lisp_Object string, Lisp_Object face, Lisp_Object domain)
+{
+  Charset_ID charsets[NUM_LEADING_BYTES];
+  struct face_cachel frame_cachel;
+  struct face_cachel *cachel;
+  int i;
+  Lisp_Object frame = FW_FRAME (domain);
+
+  /* Compute string font info */
+  find_charsets_in_bufbyte_string (charsets,
+                                  XSTRING_DATA   (string),
+                                  XSTRING_LENGTH (string));
+  reset_face_cachel (&frame_cachel);
+  update_face_cachel_data (&frame_cachel, frame, face);
+  cachel = &frame_cachel;
+
+  ensure_face_cachel_complete (cachel, domain, charsets);
+  
+  for (i = 0; i < NUM_LEADING_BYTES; i++)
+    {
+      if (charsets[i])
+       {
+         return FACE_CACHEL_FONT (cachel, 
+                                  CHARSET_BY_LEADING_BYTE (i + 
+                                                           MIN_LEADING_BYTE));
+
+       }  
+    }
+
+  return Qnil;                 /* NOT REACHED */
+}
+
+static void
+text_query_geometry (Lisp_Object image_instance,
+                    unsigned int* width, unsigned int* height, 
+                    enum image_instance_geometry disp, Lisp_Object domain)
+{
+  struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+  unsigned int descent = 0;
+
+  query_string_geometry (IMAGE_INSTANCE_TEXT_STRING (ii),
+                        IMAGE_INSTANCE_FACE (ii),
+                        width, height, &descent, domain);
+
+  /* The descent gets set as a side effect of querying the
+     geometry. */
+  IMAGE_INSTANCE_TEXT_DESCENT (ii) = descent;
+}
+
 /* set the properties of a string */
 static Lisp_Object
 text_set_property (Lisp_Object image_instance, Lisp_Object prop,
@@ -1777,20 +1978,12 @@ formatted_string_instantiate (Lisp_Object image_instance,
                              Lisp_Object pointer_fg, Lisp_Object pointer_bg,
                              int dest_mask, Lisp_Object domain)
 {
-  Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
-  struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-
-  assert (!NILP (data));
   /* #### implement this */
   warn_when_safe (Qunimplemented, Qnotice,
                  "`formatted-string' not yet implemented; assuming `string'");
-  if (dest_mask & IMAGE_TEXT_MASK)
-    {
-      IMAGE_INSTANCE_TYPE (ii) = IMAGE_TEXT;
-      IMAGE_INSTANCE_TEXT_STRING (ii) = data;
-    }
-  else
-    incompatible_image_types (instantiator, dest_mask, IMAGE_TEXT_MASK);
+
+  string_instantiate (image_instance, instantiator, 
+                     pointer_fg, pointer_bg, dest_mask, domain);
 }
 
 \f
@@ -2447,6 +2640,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
 {
   Lisp_Object device = DFW_DEVICE (domain);
   struct device *d = XDEVICE (device);
+  Lisp_Object glyph = IMAGE_SPECIFIER_ATTACHEE (XIMAGE_SPECIFIER (specifier));
   int dest_mask = XIMAGE_SPECIFIER_ALLOWED (specifier);
   int pointerp = dest_mask & image_instance_type_to_mask (IMAGE_POINTER);
 
@@ -2569,7 +2763,8 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
                                                     domain,
                                                     instantiator,
                                                     pointer_fg, pointer_bg,
-                                                    dest_mask);
+                                                    dest_mask,
+                                                    glyph);
          
          Fsetcar (locative, instance);
          /* only after the image has been instantiated do we know
@@ -3163,7 +3358,8 @@ allocate_glyph (enum glyph_type type,
       break;
     case GLYPH_ICON:
       XIMAGE_SPECIFIER_ALLOWED (g->image) =
-       IMAGE_NOTHING_MASK | IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK;
+       IMAGE_NOTHING_MASK | IMAGE_MONO_PIXMAP_MASK
+       | IMAGE_COLOR_PIXMAP_MASK;
       break;
     default:
       abort ();
@@ -3296,70 +3492,52 @@ The return value will be one of 'buffer, 'pointer, or 'icon.
     }
 }
 
-/*****************************************************************************
- glyph_width
+Lisp_Object
+glyph_image_instance (Lisp_Object glyph, Lisp_Object domain,
+                     Error_behavior errb, int no_quit)
+{
+  Lisp_Object specifier = GLYPH_IMAGE (XGLYPH (glyph));
 
- Return the width of the given GLYPH on the given WINDOW.  If the
- instance is a string then the width is calculated using the font of
- the given FACE, unless a face is defined by the glyph itself.
- ****************************************************************************/
-unsigned short
-glyph_width (Lisp_Object glyph_or_image, Lisp_Object frame_face,
-            face_index window_findex, Lisp_Object window)
+  /* This can never return Qunbound.  All glyphs have 'nothing as
+     a fallback. */
+  Lisp_Object image_instance = specifier_instance (specifier, Qunbound, 
+                                                  domain, errb, no_quit, 0,
+                                                  Qzero);
+
+  return image_instance;
+}
+
+static Lisp_Object
+glyph_image_instance_maybe (Lisp_Object glyph_or_image, Lisp_Object window)
 {
   Lisp_Object instance = glyph_or_image;
-  Lisp_Object frame = XWINDOW (window)->frame;
 
-  /* #### We somehow need to distinguish between the user causing this
-     error condition and a bug causing it. */
   if (GLYPHP (glyph_or_image))
     instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1);
 
-  if (!IMAGE_INSTANCEP (instance))
-    return 0;
-
-  switch (XIMAGE_INSTANCE_TYPE (instance))
-    {
-    case IMAGE_TEXT:
-      {
-       Lisp_Object str = XIMAGE_INSTANCE_TEXT_STRING (instance);
-       Lisp_Object private_face = Qnil;
-
-       if (GLYPHP (glyph_or_image))
-         private_face = XGLYPH_FACE(glyph_or_image);
-
-       if (!NILP (private_face))
-         return redisplay_frame_text_width_string (XFRAME (frame),
-                                                   private_face,
-                                                   0, str, 0, -1);
-       else
-       if (!NILP (frame_face))
-         return redisplay_frame_text_width_string (XFRAME (frame),
-                                                   frame_face,
-                                                   0, str, 0, -1);
-       else
-         return redisplay_text_width_string (XWINDOW (window),
-                                             window_findex,
-                                             0, str, 0, -1);
-      }
+  return instance;
+}
 
-    case IMAGE_MONO_PIXMAP:
-    case IMAGE_COLOR_PIXMAP:
-    case IMAGE_POINTER:
-      return XIMAGE_INSTANCE_PIXMAP_WIDTH (instance);
+/*****************************************************************************
+ glyph_width
 
-    case IMAGE_NOTHING:
-      return 0;
+ Return the width of the given GLYPH on the given WINDOW.
+ Calculations are done based on recursively querying the geometry of
+ the associated image instances.
+ ****************************************************************************/
+unsigned short
+glyph_width (Lisp_Object glyph_or_image, Lisp_Object domain)
+{
+  Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image,
+                                                    domain);
+  if (!IMAGE_INSTANCEP (instance))
+    return 0;
 
-    case IMAGE_SUBWINDOW:
-    case IMAGE_WIDGET:
-    case IMAGE_LAYOUT:
-      return XIMAGE_INSTANCE_SUBWINDOW_WIDTH (instance);
+  if (XIMAGE_INSTANCE_DIRTYP (instance))
+    image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
+                          IMAGE_UNSPECIFIED_GEOMETRY, domain);
 
-    default:
-      abort ();
-      return 0;
-    }
+  return XIMAGE_INSTANCE_WIDTH (instance);
 }
 
 DEFUN ("glyph-width", Fglyph_width, 1, 2, 0, /*
@@ -3372,126 +3550,60 @@ that redisplay will.
   XSETWINDOW (window, decode_window (window));
   CHECK_GLYPH (glyph);
 
-  return make_int (glyph_width (glyph, Qnil, DEFAULT_INDEX, window));
-}
-
-#define RETURN_ASCENT  0
-#define RETURN_DESCENT 1
-#define RETURN_HEIGHT  2
-
-Lisp_Object
-glyph_image_instance (Lisp_Object glyph, Lisp_Object domain,
-                     Error_behavior errb, int no_quit)
-{
-  Lisp_Object specifier = GLYPH_IMAGE (XGLYPH (glyph));
-
-  /* This can never return Qunbound.  All glyphs have 'nothing as
-     a fallback. */
-  return specifier_instance (specifier, Qunbound, domain, errb, no_quit, 0,
-                            Qzero);
+  return make_int (glyph_width (glyph, window));
 }
 
-static unsigned short
-glyph_height_internal (Lisp_Object glyph_or_image, Lisp_Object frame_face,
-                      face_index window_findex, Lisp_Object window,
-                      int function)
+unsigned short
+glyph_ascent (Lisp_Object glyph_or_image, Lisp_Object domain)
 {
-  Lisp_Object instance = glyph_or_image;
-  Lisp_Object frame = XWINDOW (window)->frame;
-
-  if (GLYPHP (glyph_or_image))
-    instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1);
-
+  Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image,
+                                                    domain);
   if (!IMAGE_INSTANCEP (instance))
     return 0;
 
-  switch (XIMAGE_INSTANCE_TYPE (instance))
-    {
-    case IMAGE_TEXT:
-      {
-       struct font_metric_info fm;
-       Lisp_Object string = XIMAGE_INSTANCE_TEXT_STRING (instance);
-       Charset_ID charsets[NUM_LEADING_BYTES];
-       struct face_cachel frame_cachel;
-       struct face_cachel *cachel;
-
-       find_charsets_in_bufbyte_string (charsets,
-                                        XSTRING_DATA   (string),
-                                        XSTRING_LENGTH (string));
-
-       if (!NILP (frame_face))
-         {
-           reset_face_cachel (&frame_cachel);
-           update_face_cachel_data (&frame_cachel, frame, frame_face);
-           cachel = &frame_cachel;
-         }
-       else
-         cachel = WINDOW_FACE_CACHEL (XWINDOW (window), window_findex);
-       ensure_face_cachel_complete (cachel, window, charsets);
+  if (XIMAGE_INSTANCE_DIRTYP (instance))
+    image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
+                          IMAGE_UNSPECIFIED_GEOMETRY, domain);
 
-       face_cachel_charset_font_metric_info (cachel, charsets, &fm);
-
-       switch (function)
-         {
-         case RETURN_ASCENT:  return fm.ascent;
-         case RETURN_DESCENT: return fm.descent;
-         case RETURN_HEIGHT:  return fm.ascent + fm.descent;
-         default:
-           abort ();
-           return 0; /* not reached */
-         }
-      }
-
-    case IMAGE_MONO_PIXMAP:
-    case IMAGE_COLOR_PIXMAP:
-    case IMAGE_POINTER:
-      /* #### Ugh ugh ugh -- temporary crap */
-      if (function == RETURN_ASCENT || function == RETURN_HEIGHT)
-       return XIMAGE_INSTANCE_PIXMAP_HEIGHT (instance);
-      else
-       return 0;
-
-    case IMAGE_NOTHING:
-      return 0;
-
-    case IMAGE_SUBWINDOW:
-    case IMAGE_WIDGET:
-    case IMAGE_LAYOUT:
-      /* #### Ugh ugh ugh -- temporary crap */
-      if (function == RETURN_ASCENT || function == RETURN_HEIGHT)
-       return XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (instance);
-      else
-       return 0;
-
-    default:
-      abort ();
-      return 0;
-    }
+  if (XIMAGE_INSTANCE_TYPE (instance) == IMAGE_TEXT)
+    return XIMAGE_INSTANCE_TEXT_ASCENT (instance);
+  else
+    return XIMAGE_INSTANCE_HEIGHT (instance);
 }
 
 unsigned short
-glyph_ascent (Lisp_Object glyph, Lisp_Object frame_face,
-             face_index window_findex, Lisp_Object window)
+glyph_descent (Lisp_Object glyph_or_image, Lisp_Object domain)
 {
-  return glyph_height_internal (glyph, frame_face, window_findex, window,
-                               RETURN_ASCENT);
-}
+  Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image,
+                                                    domain);
+  if (!IMAGE_INSTANCEP (instance))
+    return 0;
 
-unsigned short
-glyph_descent (Lisp_Object glyph, Lisp_Object frame_face,
-              face_index window_findex, Lisp_Object window)
-{
-  return glyph_height_internal (glyph, frame_face, window_findex, window,
-                               RETURN_DESCENT);
+  if (XIMAGE_INSTANCE_DIRTYP (instance))
+    image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
+                          IMAGE_UNSPECIFIED_GEOMETRY, domain);
+
+  if (XIMAGE_INSTANCE_TYPE (instance) ==  IMAGE_TEXT)
+    return XIMAGE_INSTANCE_TEXT_DESCENT (instance);
+  else
+    return 0;
 }
 
 /* strictly a convenience function. */
 unsigned short
-glyph_height (Lisp_Object glyph, Lisp_Object frame_face,
-             face_index window_findex, Lisp_Object window)
+glyph_height (Lisp_Object glyph_or_image, Lisp_Object domain)
 {
-  return glyph_height_internal (glyph, frame_face, window_findex, window,
-                               RETURN_HEIGHT);
+  Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image,
+                                                    domain);
+  
+  if (!IMAGE_INSTANCEP (instance))
+    return 0;
+
+  if (XIMAGE_INSTANCE_DIRTYP (instance))
+    image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
+                          IMAGE_UNSPECIFIED_GEOMETRY, domain);
+
+  return XIMAGE_INSTANCE_HEIGHT (instance);
 }
 
 DEFUN ("glyph-ascent", Fglyph_ascent, 1, 2, 0, /*
@@ -3504,7 +3616,7 @@ that redisplay will.
   XSETWINDOW (window, decode_window (window));
   CHECK_GLYPH (glyph);
 
-  return make_int (glyph_ascent (glyph, Qnil, DEFAULT_INDEX, window));
+  return make_int (glyph_ascent (glyph, window));
 }
 
 DEFUN ("glyph-descent", Fglyph_descent, 1, 2, 0, /*
@@ -3517,7 +3629,7 @@ that redisplay will.
   XSETWINDOW (window, decode_window (window));
   CHECK_GLYPH (glyph);
 
-  return make_int (glyph_descent (glyph, Qnil, DEFAULT_INDEX, window));
+  return make_int (glyph_descent (glyph, window));
 }
 
 /* This is redundant but I bet a lot of people expect it to exist. */
@@ -3531,22 +3643,14 @@ that redisplay will.
   XSETWINDOW (window, decode_window (window));
   CHECK_GLYPH (glyph);
 
-  return make_int (glyph_height (glyph, Qnil, DEFAULT_INDEX, window));
+  return make_int (glyph_height (glyph, window));
 }
 
-#undef RETURN_ASCENT
-#undef RETURN_DESCENT
-#undef RETURN_HEIGHT
-
 static unsigned int
 glyph_dirty_p (Lisp_Object glyph_or_image, Lisp_Object window)
 {
-  Lisp_Object instance = glyph_or_image;
-
-  if (GLYPHP (glyph_or_image))
-    instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1);
-
-  return XIMAGE_INSTANCE_DIRTYP (instance);
+  return XIMAGE_INSTANCE_DIRTYP (glyph_image_instance_maybe 
+                                (glyph_or_image, window));
 }
 
 static void
@@ -3621,6 +3725,33 @@ glyph_property_was_changed (Lisp_Object glyph, Lisp_Object property,
     (XGLYPH (glyph)->after_change) (glyph, property, locale);
 }
 
+#if 0                          /* Not used for now */
+static void
+glyph_query_geometry (Lisp_Object glyph_or_image, Lisp_Object window,
+                     unsigned int* width, unsigned int* height, 
+                     enum image_instance_geometry disp, Lisp_Object domain)
+{
+  Lisp_Object instance = glyph_or_image;
+
+  if (GLYPHP (glyph_or_image))
+    instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1);
+  
+  image_instance_query_geometry (instance, width, height, disp, domain);
+}
+
+static void
+glyph_layout (Lisp_Object glyph_or_image, Lisp_Object window,
+             unsigned int width, unsigned int height, Lisp_Object domain)
+{
+  Lisp_Object instance = glyph_or_image;
+
+  if (GLYPHP (glyph_or_image))
+    instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1);
+  
+  image_instance_layout (instance, width, height, domain);
+}
+#endif
+
 \f
 /*****************************************************************************
  *                     glyph cachel functions                               *
@@ -3662,9 +3793,9 @@ update_glyph_cachel_data (struct window *w, Lisp_Object glyph,
        and passing it to the size functions. */
       instance = glyph_image_instance (glyph, window, ERROR_ME_NOT, 1);
       cachel->dirty = XGLYPH_DIRTYP (glyph) = glyph_dirty_p (glyph, window);
-      cachel->width   = glyph_width   (instance, Qnil, DEFAULT_INDEX, window);
-      cachel->ascent  = glyph_ascent  (instance, Qnil, DEFAULT_INDEX, window);
-      cachel->descent = glyph_descent (instance, Qnil, DEFAULT_INDEX, window);
+      cachel->width   = glyph_width   (instance, window);
+      cachel->ascent  = glyph_ascent  (instance, window);
+      cachel->descent = glyph_descent (instance, window);
     }
 
   cachel->updated = 1;
@@ -3781,7 +3912,7 @@ compute_glyph_cachel_usage (glyph_cachel_dynarr *glyph_cachels,
 /*****************************************************************************
  *                     subwindow cachel functions                                   *
  *****************************************************************************/
-/* subwindows are curious in that you have to physically unmap them to
+/* Subwindows are curious in that you have to physically unmap them to
    not display them. It is problematic deciding what to do in
    redisplay. We have two caches - a per-window instance cache that
    keeps track of subwindows on a window, these are linked to their
@@ -4051,8 +4182,15 @@ update_subwindow (Lisp_Object subwindow)
     return;
 
   MAYBE_DEVMETH (XDEVICE (ii->device), update_subwindow, (ii));
+  /* We must update the window's size as it may have been changed by
+     the the layout routines. We also do this here so that explicit resizing
+     from lisp does not result in synchronous updates. */
+  MAYBE_DEVMETH (XDEVICE (ii->device), resize_subwindow, (ii,
+                IMAGE_INSTANCE_WIDTH (ii),
+                IMAGE_INSTANCE_HEIGHT (ii)));
 }
 
+/* Update all the subwindows on a frame. */
 void
 update_frame_subwindows (struct frame *f)
 {
@@ -4094,8 +4232,8 @@ void unmap_subwindow (Lisp_Object subwindow)
 
   /* make sure we don't get expose events */
   register_ignored_expose (f, cachel->x, cachel->y, cachel->width, cachel->height);
-  cachel->x = -1;
-  cachel->y = -1;
+  cachel->x = ~0;
+  cachel->y = ~0;
   cachel->being_displayed = 0;
   IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (ii) = 0;
 
@@ -4133,6 +4271,15 @@ void map_subwindow (Lisp_Object subwindow, int x, int y,
   cachel->height = dga->height;
   cachel->being_displayed = 1;
 
+  /* This forces any pending display changes to happen to the image
+     before we show it. I'm not sure whether or not we need mark as
+     clean here, but for now we will. */
+  if (IMAGE_INSTANCE_DIRTYP (ii))
+    {
+      update_subwindow (subwindow);
+      IMAGE_INSTANCE_DIRTYP (ii) = 0; 
+    }
+
   MAYBE_DEVMETH (XDEVICE (ii->device), map_subwindow, (ii, x, y, dga));
 }
 
@@ -4165,7 +4312,10 @@ subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (ii) = 0;
   IMAGE_INSTANCE_SUBWINDOW_FRAME (ii) = frame;
 
-  /* this stuff may get overidden by the widget code */
+  /* #### This stuff may get overidden by the widget code and is
+     actually really dumb now that we have dynamic geometry
+     calculations. What should really happen is that the subwindow
+     should query its child for and appropriate geometry. */
   if (NILP (width))
     IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii) = 20;
   else
@@ -4217,21 +4367,19 @@ If a value is nil that parameter is not changed.
   CHECK_SUBWINDOW_IMAGE_INSTANCE (subwindow);
 
   if (NILP (width))
-    neww = XIMAGE_INSTANCE_SUBWINDOW_WIDTH (subwindow);
+    neww = XIMAGE_INSTANCE_WIDTH (subwindow);
   else
     neww = XINT (width);
 
   if (NILP (height))
-    newh = XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (subwindow);
+    newh = XIMAGE_INSTANCE_HEIGHT (subwindow);
   else
     newh = XINT (height);
 
-  
-  MAYBE_DEVMETH (XDEVICE (XIMAGE_INSTANCE_DEVICE (subwindow)), 
-                resize_subwindow, (XIMAGE_INSTANCE (subwindow), neww, newh));
-
-  XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (subwindow) = newh;
-  XIMAGE_INSTANCE_SUBWINDOW_WIDTH (subwindow) = neww;
+  /* The actual resizing gets done asychronously by
+     update_subwindow. */
+  XIMAGE_INSTANCE_HEIGHT (subwindow) = newh;
+  XIMAGE_INSTANCE_WIDTH (subwindow) = neww;
 
   /* need to update the cachels as redisplay will not do this */
   update_subwindow_cachel (subwindow);
@@ -4370,7 +4518,7 @@ Don't use this.
                 also might not. */
              MARK_DEVICE_FRAMES_GLYPHS_CHANGED 
                (XDEVICE (IMAGE_INSTANCE_DEVICE (ii)));
-             IMAGE_INSTANCE_DIRTYP (ii) = 1;
+             MARK_IMAGE_INSTANCE_CHANGED (ii);
            }
        }
     }
@@ -4645,6 +4793,7 @@ image_instantiator_format_create (void)
   /* Do this so we can set strings. */
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (text, "text");
   IIFORMAT_HAS_METHOD (text, set_property);
+  IIFORMAT_HAS_METHOD (text, query_geometry);
 
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (formatted_string, "formatted-string");
 
@@ -4814,8 +4963,7 @@ Faces can have their own, overriding display table.
   set_specifier_fallback (Vcurrent_display_table,
                          list1 (Fcons (Qnil, Qnil)));
   set_specifier_caching (Vcurrent_display_table,
-                        slot_offset (struct window,
-                                     display_table),
+                        offsetof (struct window, display_table),
                         some_window_value_changed,
                         0, 0);
 }
index c8bb105..decfe0c 100644 (file)
@@ -84,6 +84,18 @@ typedef struct
 
 extern const struct struct_description iim_description;
 
+enum image_instance_geometry
+{
+  IMAGE_GEOMETRY,
+  IMAGE_DESIRED_GEOMETRY,
+  IMAGE_MIN_GEOMETRY,
+  IMAGE_MAX_GEOMETRY, 
+  IMAGE_UNSPECIFIED_GEOMETRY = ~0
+};
+
+#define WIDGET_BORDER_HEIGHT 4
+#define WIDGET_BORDER_WIDTH 4
+
 struct image_instantiator_methods
 {
   Lisp_Object symbol;
@@ -132,12 +144,19 @@ struct image_instantiator_methods
                                      Lisp_Object property,
                                      Lisp_Object val);
 
-  /* Find out the geometry of this image instance. */
+  /* Find out the desired geometry, as given by disp, of this image
+   instance. Actual geometry is stored in the appropriate slots in the
+   image instance. */
   void (*query_geometry_method) (Lisp_Object image_instance,
-                                int* width, int* height, int disp);
-
-  /* Layout the instances children. */
-  void (*layout_children_method) (Lisp_Object image_instance);
+                                unsigned int* width, unsigned int* height,
+                                enum image_instance_geometry disp, 
+                                Lisp_Object domain);
+  
+  /* Layout the instance and its children bounded by the provided
+     dimensions. */
+  void (*layout_method) (Lisp_Object image_instance,
+                                 unsigned int width, unsigned int height,
+                                 Lisp_Object domain);
 };
 
 /***** Calling an image-instantiator method *****/
@@ -306,10 +325,16 @@ void initialize_subwindow_image_instance (struct Lisp_Image_Instance*);
 void subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                            Lisp_Object pointer_fg, Lisp_Object pointer_bg,
                            int dest_mask, Lisp_Object domain);
-void widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
-                          Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-                          int dest_mask, Lisp_Object domain, int default_textheight,
-                          int default_pixheight, int default_textwidth);
+void widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
+                        Lisp_Object pointer_fg, Lisp_Object pointer_bg,
+                        int dest_mask, Lisp_Object domain);
+void image_instance_query_geometry (Lisp_Object image_instance, 
+                                   unsigned int* width, unsigned int* height, 
+                                   enum image_instance_geometry disp,
+                                   Lisp_Object domain);
+void image_instance_layout (Lisp_Object image_instance, 
+                           unsigned int width, unsigned int height, 
+                           Lisp_Object domain);
 
 DECLARE_DOESNT_RETURN (incompatible_image_types (Lisp_Object instantiator,
                                                  int given_dest_mask,
@@ -372,14 +397,6 @@ enum image_instance_type
   IMAGE_LAYOUT
 };
 
-enum image_instance_geometry
-{
-  IMAGE_GEOMETRY,
-  IMAGE_DESIRED_GEOMETRY,
-  IMAGE_MIN_GEOMETRY,
-  IMAGE_MAX_GEOMETRY
-};
-
 #define IMAGE_NOTHING_MASK (1 << 0)
 #define IMAGE_TEXT_MASK (1 << 1)
 #define IMAGE_MONO_PIXMAP_MASK (1 << 2)
@@ -463,6 +480,9 @@ struct Lisp_Image_Instance
   struct lcrecord_header header;
   Lisp_Object device;
   Lisp_Object name;
+  /* The glyph from which we were instantiated. This is a weak
+     reference. */
+  Lisp_Object glyph;
   enum image_instance_type type;
   unsigned int x_offset, y_offset;     /* for layout purposes */
   unsigned int width, height;
@@ -493,11 +513,19 @@ struct Lisp_Image_Instance
       Lisp_Object frame;
       void* subwindow;         /* specific devices can use this as necessary */
       unsigned int being_displayed : 1;        /* used to detect when needs to be unmapped */
+      unsigned int v_resize : 1;       /* Whether the vsize is allowed to change. */
+      unsigned int h_resize : 1;       /* Whether the hsize is allowed to change. */
+      unsigned int orientation : 1; /* Vertical or horizontal. */
+      unsigned int justification : 2; /* Left, right or center. */
       union
       {
        struct
        {
-         Lisp_Object face; /* foreground and background colors */
+         /* Face for colors and font. We specify this here becuase we
+            want people to be able to put :face in the instantiator
+            spec. Using gyph-face is more inconvenient, although more
+            general. */
+         Lisp_Object face;     
          Lisp_Object type;
          Lisp_Object props;    /* properties */
          Lisp_Object gui_item; /* a list of gui_items */
@@ -515,8 +543,18 @@ struct Lisp_Image_Instance
   void *data;
 };
 
+/* Layout bit-fields. */
+#define LAYOUT_HORIZONTAL      0
+#define LAYOUT_VERTICAL        1
+
+#define LAYOUT_JUSTIFY_LEFT 0
+#define LAYOUT_JUSTIFY_RIGHT 1
+#define LAYOUT_JUSTIFY_CENTER 2
+
+/* Accessor macros. */
 #define IMAGE_INSTANCE_DEVICE(i) ((i)->device)
 #define IMAGE_INSTANCE_NAME(i) ((i)->name)
+#define IMAGE_INSTANCE_GLYPH(i) ((i)->glyph)
 #define IMAGE_INSTANCE_TYPE(i) ((i)->type)
 #define IMAGE_INSTANCE_XOFFSET(i) ((i)->x_offset)
 #define IMAGE_INSTANCE_YOFFSET(i) ((i)->y_offset)
@@ -526,6 +564,8 @@ struct Lisp_Image_Instance
  ((IMAGE_INSTANCE_TYPE (i) == IMAGE_MONO_PIXMAP)                       \
   || (IMAGE_INSTANCE_TYPE (i) == IMAGE_COLOR_PIXMAP))
 #define IMAGE_INSTANCE_DIRTYP(i) ((i)->dirty)
+#define IMAGE_INSTANCE_FACE(i) \
+  XGLYPH_FACE (IMAGE_INSTANCE_GLYPH (i))
 
 #define IMAGE_INSTANCE_TEXT_STRING(i) ((i)->u.text.string)
 #define IMAGE_INSTANCE_TEXT_WIDTH(i) \
@@ -533,6 +573,8 @@ struct Lisp_Image_Instance
 #define IMAGE_INSTANCE_TEXT_HEIGHT(i) \
   IMAGE_INSTANCE_HEIGHT(i)
 #define IMAGE_INSTANCE_TEXT_DESCENT(i) ((i)->u.text.descent)
+#define IMAGE_INSTANCE_TEXT_ASCENT(i) \
+  (IMAGE_INSTANCE_TEXT_HEIGHT(i) - IMAGE_INSTANCE_TEXT_DESCENT(i))
 
 #define IMAGE_INSTANCE_PIXMAP_WIDTH(i) \
   IMAGE_INSTANCE_WIDTH(i)
@@ -559,6 +601,14 @@ struct Lisp_Image_Instance
 #define IMAGE_INSTANCE_SUBWINDOW_FRAME(i) ((i)->u.subwindow.frame)
 #define IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP(i) \
 ((i)->u.subwindow.being_displayed)
+#define IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP(i) \
+((i)->u.subwindow.v_resize)
+#define IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP(i) \
+((i)->u.subwindow.h_resize)
+#define IMAGE_INSTANCE_SUBWINDOW_ORIENT(i) \
+((i)->u.subwindow.orientation)
+#define IMAGE_INSTANCE_SUBWINDOW_JUSTIFY(i) \
+((i)->u.subwindow.justification)
 
 #define IMAGE_INSTANCE_WIDGET_WIDTH(i) \
   IMAGE_INSTANCE_WIDTH(i)
@@ -566,7 +616,12 @@ struct Lisp_Image_Instance
   IMAGE_INSTANCE_HEIGHT(i)
 #define IMAGE_INSTANCE_WIDGET_TYPE(i) ((i)->u.subwindow.s.widget.type)
 #define IMAGE_INSTANCE_WIDGET_PROPS(i) ((i)->u.subwindow.s.widget.props)
-#define IMAGE_INSTANCE_WIDGET_FACE(i) ((i)->u.subwindow.s.widget.face)
+#define SET_IMAGE_INSTANCE_WIDGET_FACE(i,f) \
+ ((i)->u.subwindow.s.widget.face = f)
+#define IMAGE_INSTANCE_WIDGET_FACE(i) \
+  (!NILP ((i)->u.subwindow.s.widget.face) ? (i)->u.subwindow.s.widget.face : \
+  !NILP (IMAGE_INSTANCE_FACE (i)) ? IMAGE_INSTANCE_FACE (i) : \
+  Vwidget_face)
 #define IMAGE_INSTANCE_WIDGET_ITEMS(i) ((i)->u.subwindow.s.widget.gui_item)
 #define IMAGE_INSTANCE_WIDGET_ITEM(i) \
 (CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \
@@ -581,6 +636,8 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \
   IMAGE_INSTANCE_DEVICE (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_NAME(i) \
   IMAGE_INSTANCE_NAME (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_GLYPH(i) \
+  IMAGE_INSTANCE_GLYPH (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_TYPE(i) \
   IMAGE_INSTANCE_TYPE (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_XOFFSET(i) \
@@ -589,9 +646,23 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \
   IMAGE_INSTANCE_YOFFSET (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_DIRTYP(i) \
   IMAGE_INSTANCE_DIRTYP (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_WIDTH(i) \
+  IMAGE_INSTANCE_WIDTH (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_HEIGHT(i) \
+  IMAGE_INSTANCE_HEIGHT (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_FACE(i) \
+  IMAGE_INSTANCE_FACE (XIMAGE_INSTANCE (i))
 
 #define XIMAGE_INSTANCE_TEXT_STRING(i) \
   IMAGE_INSTANCE_TEXT_STRING (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_TEXT_WIDTH(i) \
+  IMAGE_INSTANCE_TEXT_WIDTH (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_TEXT_HEIGHT(i) \
+  IMAGE_INSTANCE_TEXT_HEIGHT (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_TEXT_ASCENT(i) \
+  IMAGE_INSTANCE_TEXT_ASCENT (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_TEXT_DESCENT(i) \
+  IMAGE_INSTANCE_TEXT_DESCENT (XIMAGE_INSTANCE (i))
 
 #define XIMAGE_INSTANCE_PIXMAP_WIDTH(i) \
   IMAGE_INSTANCE_PIXMAP_WIDTH (XIMAGE_INSTANCE (i))
@@ -630,6 +701,8 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \
   IMAGE_INSTANCE_WIDGET_PROPS (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_WIDGET_FACE(i) \
   IMAGE_INSTANCE_WIDGET_FACE (XIMAGE_INSTANCE (i))
+#define XSET_IMAGE_INSTANCE_WIDGET_FACE(i) \
+  SET_IMAGE_INSTANCE_WIDGET_FACE (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_WIDGET_ITEM(i) \
   IMAGE_INSTANCE_WIDGET_ITEM (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_WIDGET_ITEMS(i) \
@@ -652,6 +725,10 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \
   IMAGE_INSTANCE_SUBWINDOW_FRAME (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP(i) \
   IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_SUBWINDOW_ORIENT(i) \
+  IMAGE_INSTANCE_SUBWINDOW_ORIENT (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_SUBWINDOW_JUSTIFY(i) \
+  IMAGE_INSTANCE_SUBWINDOW_JUSTIFY (XIMAGE_INSTANCE (i))
 
 #define MARK_IMAGE_INSTANCE_CHANGED(i) \
   (IMAGE_INSTANCE_DIRTYP (i) = 1);
@@ -758,19 +835,10 @@ extern Lisp_Object Vcontinuation_glyph, Vcontrol_arrow_glyph, Vhscroll_glyph;
 extern Lisp_Object Vinvisible_text_glyph, Voctal_escape_glyph, Vtruncation_glyph;
 extern Lisp_Object Vxemacs_logo;
 
-unsigned short glyph_width (Lisp_Object glyph, Lisp_Object frame_face,
-                           face_index window_findex,
-                           Lisp_Object window);
-unsigned short glyph_ascent (Lisp_Object glyph,  Lisp_Object frame_face,
-                            face_index window_findex,
-                            Lisp_Object window);
-unsigned short glyph_descent (Lisp_Object glyph,
-                             Lisp_Object frame_face,
-                             face_index window_findex,
-                             Lisp_Object window);
-unsigned short glyph_height (Lisp_Object glyph,  Lisp_Object frame_face,
-                            face_index window_findex,
-                            Lisp_Object window);
+unsigned short glyph_width (Lisp_Object glyph, Lisp_Object domain);
+unsigned short glyph_ascent (Lisp_Object glyph, Lisp_Object domain);
+unsigned short glyph_descent (Lisp_Object glyph, Lisp_Object domain);
+unsigned short glyph_height (Lisp_Object glyph, Lisp_Object domain);
 Lisp_Object glyph_baseline (Lisp_Object glyph, Lisp_Object domain);
 Lisp_Object glyph_face (Lisp_Object glyph, Lisp_Object domain);
 int glyph_contrib_p (Lisp_Object glyph, Lisp_Object domain);
@@ -789,11 +857,11 @@ Lisp_Object allocate_glyph (enum glyph_type type,
                            void (*after_change) (Lisp_Object glyph,
                                                  Lisp_Object property,
                                                  Lisp_Object locale));
-Lisp_Object widget_face_font_info (Lisp_Object domain, Lisp_Object face,
-                                  int *height, int *width);
-void widget_text_to_pixel_conversion (Lisp_Object domain, Lisp_Object face,
-                                     int th, int tw,
-                                     int* height, int* width);
+void query_string_geometry ( Lisp_Object string, Lisp_Object face,
+                            unsigned int* width, unsigned int* height, 
+                            unsigned int* descent, Lisp_Object domain);
+Lisp_Object query_string_font (Lisp_Object string, 
+                              Lisp_Object face, Lisp_Object domain);
 Lisp_Object add_glyph_animated_timeout (EMACS_INT tickms, Lisp_Object device);
 void disable_glyph_animated_timeout (int i);
 
@@ -868,8 +936,8 @@ typedef struct subwindow_cachel subwindow_cachel;
 struct subwindow_cachel
 {
   Lisp_Object subwindow;
-  int x, y;
-  int width, height;
+  unsigned int x, y;
+  unsigned int width, height;
   unsigned int being_displayed : 1;
   unsigned int updated : 1;
 };
@@ -890,10 +958,8 @@ int find_matching_subwindow (struct frame* f, int x, int y, int width, int heigh
 
 struct expose_ignore
 {
-  int  x;
-  int  y;
-  int  width;
-  int  height;
+  unsigned int x, y;
+  unsigned int width, height;
   struct expose_ignore *next;
 };
 
index 2d37ea1..0a219b9 100644 (file)
@@ -452,7 +452,7 @@ static void gpm_next_event_cb (struct Lisp_Event *event)
                return;
        }
 
-       return (orig_next_event_cb (event));
+       orig_next_event_cb (event);
 }
 
 static void hook_event_callbacks_once (void)
index e43a204..a83688c 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -76,7 +76,7 @@ get_gui_callback (Lisp_Object data, Lisp_Object *fn, Lisp_Object *arg)
   if (SYMBOLP (data)
       || (COMPILED_FUNCTIONP (data)
          && XCOMPILED_FUNCTION (data)->flags.interactivep)
-      || (EQ (XCAR (data), Qlambda)
+      || (CONSP (data) && (EQ (XCAR (data), Qlambda))
          && !NILP (Fassq (Qinteractive, Fcdr (Fcdr (data))))))
     {
       *fn = Qcall_interactively;
index d9534d0..f9d884f 100644 (file)
@@ -805,8 +805,7 @@ in the gutter area.
      automatically knew about specifier fallbacks, so we didn't
      have to do it ourselves. */
   set_specifier_caching (Vdefault_gutter,
-                        slot_offset (struct window,
-                                     default_gutter),
+                        offsetof (struct window, default_gutter),
                         default_gutter_specs_changed,
                         0, 0);
 
@@ -818,8 +817,7 @@ See `default-gutter' for a description of a valid gutter instantiator.
 */ );
   Vgutter[TOP_GUTTER] = Fmake_specifier (Qgutter);
   set_specifier_caching (Vgutter[TOP_GUTTER],
-                        slot_offset (struct window,
-                                     gutter[TOP_GUTTER]),
+                        offsetof (struct window, gutter[TOP_GUTTER]),
                         gutter_specs_changed,
                         0, 0);
 
@@ -836,8 +834,7 @@ displayed even if you provide a value for `bottom-gutter'.
 */ );
   Vgutter[BOTTOM_GUTTER] = Fmake_specifier (Qgutter);
   set_specifier_caching (Vgutter[BOTTOM_GUTTER],
-                        slot_offset (struct window,
-                                     gutter[BOTTOM_GUTTER]),
+                        offsetof (struct window, gutter[BOTTOM_GUTTER]),
                         gutter_specs_changed,
                         0, 0);
 
@@ -854,8 +851,7 @@ displayed even if you provide a value for `left-gutter'.
 */ );
   Vgutter[LEFT_GUTTER] = Fmake_specifier (Qgutter);
   set_specifier_caching (Vgutter[LEFT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter[LEFT_GUTTER]),
+                        offsetof (struct window, gutter[LEFT_GUTTER]),
                         gutter_specs_changed,
                         0, 0);
 
@@ -872,8 +868,7 @@ displayed even if you provide a value for `right-gutter'.
 */ );
   Vgutter[RIGHT_GUTTER] = Fmake_specifier (Qgutter);
   set_specifier_caching (Vgutter[RIGHT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter[RIGHT_GUTTER]),
+                        offsetof (struct window, gutter[RIGHT_GUTTER]),
                         gutter_specs_changed,
                         0, 0);
 
@@ -913,8 +908,7 @@ is the default.
 */ );
   Vdefault_gutter_height = Fmake_specifier (Qgutter_size);
   set_specifier_caching (Vdefault_gutter_height,
-                        slot_offset (struct window,
-                                     default_gutter_height),
+                        offsetof (struct window, default_gutter_height),
                         default_gutter_size_changed_in_window,
                         0, 0);
 
@@ -926,8 +920,7 @@ See `default-gutter-height' for more information.
 */ );
   Vdefault_gutter_width = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_gutter_width,
-                        slot_offset (struct window,
-                                     default_gutter_width),
+                        offsetof (struct window, default_gutter_width),
                         default_gutter_size_changed_in_window,
                         0, 0);
 
@@ -940,8 +933,7 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_size[TOP_GUTTER] = Fmake_specifier (Qgutter_size);
   set_specifier_caching (Vgutter_size[TOP_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_size[TOP_GUTTER]),
+                        offsetof (struct window, gutter_size[TOP_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -954,8 +946,7 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_size[BOTTOM_GUTTER] = Fmake_specifier (Qgutter_size);
   set_specifier_caching (Vgutter_size[BOTTOM_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_size[BOTTOM_GUTTER]),
+                        offsetof (struct window, gutter_size[BOTTOM_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -968,8 +959,7 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_size[LEFT_GUTTER] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vgutter_size[LEFT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_size[LEFT_GUTTER]),
+                        offsetof (struct window, gutter_size[LEFT_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -982,8 +972,7 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_size[RIGHT_GUTTER] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vgutter_size[RIGHT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_size[RIGHT_GUTTER]),
+                        offsetof (struct window, gutter_size[RIGHT_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1036,8 +1025,7 @@ instead.
 */ );
   Vdefault_gutter_border_width = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_gutter_border_width,
-                        slot_offset (struct window,
-                                     default_gutter_border_width),
+                        offsetof (struct window, default_gutter_border_width),
                         default_gutter_border_width_changed_in_window,
                         0, 0);
 
@@ -1050,8 +1038,8 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_border_width[TOP_GUTTER] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vgutter_border_width[TOP_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_border_width[TOP_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_border_width[TOP_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1064,8 +1052,8 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_border_width[BOTTOM_GUTTER] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vgutter_border_width[BOTTOM_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_border_width[BOTTOM_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_border_width[BOTTOM_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1078,8 +1066,8 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_border_width[LEFT_GUTTER] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vgutter_border_width[LEFT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_border_width[LEFT_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_border_width[LEFT_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1092,8 +1080,8 @@ See `default-gutter-height' for more information.
 */ );
   Vgutter_border_width[RIGHT_GUTTER] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vgutter_border_width[RIGHT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_border_width[RIGHT_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_border_width[RIGHT_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1133,8 +1121,8 @@ visibility specifiers have a fallback value of true.
 */ );
   Vdefault_gutter_visible_p = Fmake_specifier (Qboolean);
   set_specifier_caching (Vdefault_gutter_visible_p,
-                        slot_offset (struct window,
-                                     default_gutter_visible_p),
+                        offsetof (struct window,
+                                  default_gutter_visible_p),
                         default_gutter_visible_p_changed_in_window,
                         0, 0);
 
@@ -1147,8 +1135,8 @@ See `default-gutter-visible-p' for more information.
 */ );
   Vgutter_visible_p[TOP_GUTTER] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vgutter_visible_p[TOP_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_visible_p[TOP_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_visible_p[TOP_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1161,8 +1149,8 @@ See `default-gutter-visible-p' for more information.
 */ );
   Vgutter_visible_p[BOTTOM_GUTTER] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vgutter_visible_p[BOTTOM_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_visible_p[BOTTOM_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_visible_p[BOTTOM_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1175,8 +1163,8 @@ See `default-gutter-visible-p' for more information.
 */ );
   Vgutter_visible_p[LEFT_GUTTER] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vgutter_visible_p[LEFT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_visible_p[LEFT_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_visible_p[LEFT_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
@@ -1189,8 +1177,8 @@ See `default-gutter-visible-p' for more information.
 */ );
   Vgutter_visible_p[RIGHT_GUTTER] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vgutter_visible_p[RIGHT_GUTTER],
-                        slot_offset (struct window,
-                                     gutter_visible_p[RIGHT_GUTTER]),
+                        offsetof (struct window,
+                                  gutter_visible_p[RIGHT_GUTTER]),
                         gutter_geometry_changed_in_window,
                         0, 0);
 
index a1cb446..d209e88 100644 (file)
@@ -115,9 +115,10 @@ XIM_init_frame (struct frame *f)
      default face, rather than foreground and background resources, or
      that the user can use set-frame-parameters to set xic attributes */
 
-#define res(name, class, representation, field, default_value) \
-  { name, class, representation, sizeof(xim_resources.field), \
-     XtOffsetOf(xim_resources_t, field), XtRString, default_value }
+#define res(name, class, representation, field, default_value) \
+  { name, class, representation, sizeof(xim_resources.field),  \
+    XtOffsetOf(xim_resources_t, field),                                \
+    XtRString, (XtPointer) (default_value) }
 
   static XtResource resources[] =
   {
index bec55be..3313316 100644 (file)
@@ -2085,7 +2085,12 @@ multiple_change_finish_up (Lisp_Object buffer)
    of the specified region, that will also be handled correctly.
 
    begin_multiple_change() returns a number (actually a specpdl depth)
-   that you must pass to end_multiple_change() when you are done. */
+   that you must pass to end_multiple_change() when you are done.
+
+   FSF Emacs 20 implements a similar feature, accessible from Lisp
+   through a `combine-after-change-calls' special form, which is
+   essentially equivalent to this function.  We should consider
+   whether we want to introduce a similar Lisp form.  */
 
 int
 begin_multiple_change (struct buffer *buf, Bufpos start, Bufpos end)
@@ -2133,7 +2138,8 @@ change_function_restore (Lisp_Object buffer)
   /* We should first reset the variable and then change the buffer,
      because Fset_buffer() can throw.  */
   inside_change_hook = 0;
-  Fset_buffer (buffer);
+  if (XBUFFER (buffer) != current_buffer)
+    Fset_buffer (buffer);
   return Qnil;
 }
 
@@ -2183,6 +2189,7 @@ signal_before_change (struct buffer *buf, Bufpos start, Bufpos end)
   if (!inside_change_hook)
     {
       Lisp_Object buffer;
+      int speccount;
 
       /* Are we in a multiple-change session? */
       if (buf->text->changes->in_multiple_change &&
@@ -2220,6 +2227,9 @@ signal_before_change (struct buffer *buf, Bufpos start, Bufpos end)
        }
 
       /* Now in any case run the before-change-functions if any.  */
+      speccount = specpdl_depth ();
+      record_unwind_protect (change_function_restore, Fcurrent_buffer ());
+      inside_change_hook = 1;
 
       MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons)
        {
@@ -2228,25 +2238,28 @@ signal_before_change (struct buffer *buf, Bufpos start, Bufpos end)
              /* Obsolete, for compatibility */
              || !NILP (symbol_value_in_buffer (Qbefore_change_function, buffer)))
            {
-             int speccount = specpdl_depth ();
-             record_unwind_protect (change_function_restore, Fcurrent_buffer ());
              set_buffer_internal (buf);
-             inside_change_hook = 1;
              va_run_hook_with_args (Qbefore_change_functions, 2,
                                     make_int (start), make_int (end));
              /* Obsolete, for compatibility */
              va_run_hook_with_args (Qbefore_change_function, 2,
                                     make_int (start), make_int (end));
-             unbind_to (speccount, Qnil);
            }
        }
 
+      /* Make sure endpoints remain valid.  before-change-functions
+        might have modified the buffer. */
+      if (start < BUF_BEGV (buf)) start = BUF_BEGV (buf);
+      if (start > BUF_ZV (buf))   start = BUF_ZV (buf);
+      if (end < BUF_BEGV (buf)) end = BUF_BEGV (buf);
+      if (end > BUF_ZV (buf))   end = BUF_ZV (buf);
+
       MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons)
        {
          XSETBUFFER (buffer, mbuf);
-         report_extent_modification (buffer, start, end,
-                                     &inside_change_hook, 0);
+         report_extent_modification (buffer, start, end, 0);
        }
+      unbind_to (speccount, Qnil);
 
       /* Only now do we indicate that the before-change-functions have
         been called, in case some function throws out. */
@@ -2283,6 +2296,7 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end,
   if (!inside_change_hook)
     {
       Lisp_Object buffer;
+      int speccount;
 
       if (buf->text->changes->in_multiple_change &&
          buf->text->changes->mc_begin != 0)
@@ -2295,6 +2309,9 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end,
          return; /* after-change-functions signalled when all changes done */
        }
 
+      speccount = specpdl_depth ();
+      record_unwind_protect (change_function_restore, Fcurrent_buffer ());
+      inside_change_hook = 1;
       MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons)
        {
          XSETBUFFER (buffer, mbuf);
@@ -2303,10 +2320,7 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end,
              /* Obsolete, for compatibility */
              || !NILP (symbol_value_in_buffer (Qafter_change_function, buffer)))
            {
-             int speccount = specpdl_depth ();
-             record_unwind_protect (change_function_restore, Fcurrent_buffer ());
              set_buffer_internal (buf);
-             inside_change_hook = 1;
              /* The actual after-change functions take slightly
                 different arguments than what we were passed. */
              va_run_hook_with_args (Qafter_change_functions, 3,
@@ -2316,16 +2330,24 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end,
              va_run_hook_with_args (Qafter_change_function, 3,
                                     make_int (start), make_int (new_end),
                                     make_int (orig_end - start));
-             unbind_to (speccount, Qnil);
            }
        }
 
+      /* Make sure endpoints remain valid.  after-change-functions
+        might have modified the buffer. */
+      if (start < BUF_BEGV (buf)) start = BUF_BEGV (buf);
+      if (start > BUF_ZV (buf))   start = BUF_ZV (buf);
+      if (new_end < BUF_BEGV (buf)) new_end = BUF_BEGV (buf);
+      if (new_end > BUF_ZV (buf))   new_end = BUF_ZV (buf);
+      if (orig_end < BUF_BEGV (buf)) orig_end = BUF_BEGV (buf);
+      if (orig_end > BUF_ZV (buf))   orig_end = BUF_ZV (buf);
+
       MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons)
        {
          XSETBUFFER (buffer, mbuf);
-         report_extent_modification (buffer, start, new_end,
-                                     &inside_change_hook, 1);
+         report_extent_modification (buffer, start, new_end, 1);
        }
+      unbind_to (speccount, Qnil); /* sets inside_change_hook back to 0 */
     }
 }
 
index 04b6b46..2fd38ef 100644 (file)
@@ -2116,7 +2116,7 @@ lookup_keys (Lisp_Object keymap, int nkeys, Lisp_Object *keys,
   if (nkeys == 0)
     return Qnil;
 
-  if (nkeys < (countof (kkk)))
+  if (nkeys < countof (kkk))
     raw_keys = kkk;
   else
     raw_keys = alloca_array (struct key_data, nkeys);
@@ -2146,7 +2146,7 @@ lookup_events (Lisp_Object event_head, int nmaps, Lisp_Object keymaps[],
 
   nkeys = event_chain_count (event_head);
 
-  if (nkeys < (countof (kkk)))
+  if (nkeys < countof (kkk))
     raw_keys = kkk;
   else
     raw_keys = alloca_array (struct key_data, nkeys);
@@ -2372,8 +2372,7 @@ get_relevant_keymaps (Lisp_Object keys,
                  get_relevant_extent_keymaps
                    (Fevent_modeline_position (terminal),
                     XBUFFER (buffer)->generated_modeline_string,
-                    /* #### third arg should maybe be a glyph. */
-                    Qnil, &closure);
+                    Fevent_glyph_extent (terminal), &closure);
 
                  if (!UNBOUNDP (map) && !NILP (map))
                    relevant_map_push (get_keymap (map, 1, 1), &closure);
index 677852d..4180167 100644 (file)
 #include "lisp.h"
 #endif
 
-#ifdef STDC_HEADERS
 #include <stdlib.h>
-#endif
+#include <stdio.h>
+#include <fcntl.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 
-#include <stdio.h>
-#include <fcntl.h>
 #include "libsst.h"
 
 #define AUDBUF 1024
 
-extern void usleep();
-
 int
 sst_open(play_level, record_level)
     int play_level, record_level;
     {
     int fd, i, gr, ger, gx;
     struct audio_ioctl ai;
-    char *getenv(), *ep;
+    char *ep;
 
     fd = open( "/dev/audio", O_RDWR );
     if ( fd < 0 )
index 85da011..24b1924 100644 (file)
@@ -116,13 +116,11 @@ void *xmalloc_and_zero (size_t size);
 void *xrealloc (void *, size_t size);
 char *xstrdup (CONST char *);
 /* generally useful */
-#define countof(x) ((int) (sizeof(x)/sizeof(x[0])))
-#define slot_offset(type, slot_name) \
-  ((unsigned) (((char *) (&(((type *)0)->slot_name))) - ((char *)0)))
+#define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
 #define xnew(type) ((type *) xmalloc (sizeof (type)))
 #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
 #define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
-#define xzero(lvalue) ((void) memset (&(lvalue), 0, sizeof (lvalue)))
+#define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
 #define xnew_array_and_zero(type, len) ((type *) xmalloc_and_zero ((len) * sizeof (type)))
 #define XREALLOC_ARRAY(ptr, type, len) ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
 #define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type)))
@@ -156,7 +154,6 @@ void xfree_1 (void *);
 } while (0)
 #else
 void xfree (void *);
-#define xfree_1 xfree
 #endif /* ERROR_CHECK_MALLOC */
 
 #ifndef PRINTF_ARGS
@@ -195,7 +192,7 @@ void xfree (void *);
 
 #ifndef ALIGNOF
 # if defined (__GNUC__) && (__GNUC__ >= 2)
-#  define ALIGNOF(x) __alignof (x)
+#  define ALIGNOF(x) __alignof__ (x)
 # else
 #  define ALIGNOF(x) sizeof (x)
 # endif
index 775942a..8e524f6 100644 (file)
--- a/src/md5.c
+++ b/src/md5.c
@@ -482,7 +482,7 @@ md5_coding_system (Lisp_Object object, Lisp_Object coding, Lisp_Object istream,
        {
          /* Attempt to autodetect the coding of the string.  This is
              VERY hit-and-miss.  */
-         enum eol_type eol = EOL_AUTODETECT;
+         eol_type_t eol = EOL_AUTODETECT;
          coding_system = Fget_coding_system (Qundecided);
          determine_real_coding_system (XLSTREAM (istream),
                                        &coding_system, &eol);
index c15e271..62f4afc 100644 (file)
@@ -94,14 +94,11 @@ menu_item_descriptor_to_widget_value_1 (Lisp_Object desc,
      prohibits GC. */
   /* !!#### This function has not been Mule-ized */
   int menubar_root_p = (menu_type == MENUBAR_TYPE && depth == 0);
-  widget_value *wv;
-  Lisp_Object wv_closure;
   int count = specpdl_depth ();
   int partition_seen = 0;
+  widget_value *wv = xmalloc_widget_value ();
+  Lisp_Object wv_closure = make_opaque_ptr (wv);
 
-  wv = xmalloc_widget_value ();
-
-  wv_closure = make_opaque_ptr (wv);
   record_unwind_protect (widget_value_unwind, wv_closure);
 
   if (STRINGP (desc))
@@ -363,7 +360,7 @@ int in_menu_callback;
 static Lisp_Object
 restore_in_menu_callback (Lisp_Object val)
 {
-    in_menu_callback = XINT(val);
+    in_menu_callback = XINT (val);
     return Qnil;
 }
 #endif /* LWLIB_MENUBARS_LUCID || LWLIB_MENUBARS_MOTIF */
@@ -514,24 +511,21 @@ pre_activate_callback (Widget widget, LWLIB_ID id, XtPointer client_data)
 static widget_value *
 compute_menubar_data (struct frame *f, Lisp_Object menubar, int deep_p)
 {
-  widget_value *data;
-
   if (NILP (menubar))
-    data = 0;
+    return 0;
   else
     {
-      Lisp_Object old_buffer;
+      widget_value *data;
       int count = specpdl_depth ();
 
-      old_buffer = Fcurrent_buffer ();
-      record_unwind_protect (Fset_buffer, old_buffer);
-      Fset_buffer ( XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer);
+      record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
+      Fset_buffer (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer);
       data = menu_item_descriptor_to_widget_value (menubar, MENUBAR_TYPE,
                                                   deep_p, 0);
-      Fset_buffer (old_buffer);
       unbind_to (count, Qnil);
+
+      return data;
     }
-  return data;
 }
 
 static int
@@ -541,7 +535,7 @@ set_frame_menubar (struct frame *f, int deep_p, int first_time_p)
   Lisp_Object menubar;
   int menubar_visible;
   long id;
-  /* As for the toolbar, the minibuffer does not have its own menubar. */
+  /* As with the toolbar, the minibuffer does not have its own menubar. */
   struct window *w = XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f));
 
   if (! FRAME_X_P (f))
@@ -693,7 +687,7 @@ make_dummy_xbutton_event (XEvent *dummy,
        XtSetArg (al [1], XtNy, &shelly);
        XtGetValues (shell, al, 2);
       }
-#endif      
+#endif
       XtSetArg (al [0], XtNx, &framex);
       XtSetArg (al [1], XtNy, &framey);
       XtGetValues (daddy, al, 2);
index 7a6e2dc..c92232f 100644 (file)
@@ -588,11 +588,9 @@ This is a specifier; use `set-specifier' to change it.
 
   set_specifier_fallback (Vmenubar_visible_p, list1 (Fcons (Qnil, Qt)));
   set_specifier_caching (Vmenubar_visible_p,
-                        slot_offset (struct window,
-                                     menubar_visible_p),
+                        offsetof (struct window, menubar_visible_p),
                         menubar_visible_p_changed,
-                        slot_offset (struct frame,
-                                     menubar_visible_p),
+                        offsetof (struct frame, menubar_visible_p),
                         menubar_visible_p_changed_in_frame);
 }
 
index 5fb3c52..d16205e 100644 (file)
@@ -645,20 +645,20 @@ static tr_stack *mapping_stack_pointer;
 
 /* Suspend CCL program because of reading from empty input buffer or
    writing to full output buffer.  When this program is resumed, the
-   same I/O command is executed.  */
+   same I/O command is executed.  The `if (1)' is for warning suppression. */
 #define CCL_SUSPEND(stat)      \
   do {                         \
     ic--;                      \
     ccl->status = stat;                \
-    goto ccl_finish;           \
+    if (1) goto ccl_finish;    \
   } while (0)
 
 /* Terminate CCL program because of invalid command.  Should not occur
-   in the normal case.  */
+   in the normal case.  The `if (1)' is for warning suppression. */
 #define CCL_INVALID_CMD                        \
   do {                                 \
     ccl->status = CCL_STAT_INVALID_CMD;        \
-    goto ccl_error_handler;            \
+    if (1) goto ccl_error_handler;     \
   } while (0)
 
 /* Encode one character CH to multibyte form and write to the current
index c7769c7..79fee33 100644 (file)
@@ -128,9 +128,9 @@ static const struct struct_description charset_lookup_description = {
    rep_bytes_by_first_byte(c) is more efficient than the equivalent
    canonical computation:
 
-   (BYTE_ASCII_P (c) ? 1 : XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (c))) */
+   XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (c)) */
 
-Bytecount rep_bytes_by_first_byte[0xA0] =
+const Bytecount rep_bytes_by_first_byte[0xA0] =
 { /* 0x00 - 0x7f are for straight ASCII */
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -1276,7 +1276,6 @@ DEFINE_LRECORD_IMPLEMENTATION ("charset", charset,
                                mark_charset, print_charset, 0, 0, 0,
                               charset_description,
                               struct Lisp_Charset);
-
 /* Make a new charset. */
 
 static Lisp_Object
@@ -1381,11 +1380,6 @@ make_charset (Charset_ID id, Lisp_Object name,
 
   assert (NILP (chlook->charset_by_leading_byte[id - MIN_LEADING_BYTE]));
   chlook->charset_by_leading_byte[id - MIN_LEADING_BYTE] = obj;
-#ifndef UTF2000
-  if (id < 0xA0)
-    /* official leading byte */
-    rep_bytes_by_first_byte[id] = CHARSET_REP_BYTES (cs);
-#endif
 
   /* Some charsets are "faux" and don't have names or really exist at
      all except in the leading-byte table. */
@@ -2352,6 +2346,27 @@ Return the character set of char CH.
   return XCHARSET_NAME (CHAR_CHARSET (XCHAR (ch)));
 }
 
+DEFUN ("char-octet", Fchar_octet, 1, 2, 0, /*
+Return the octet numbered N (should be 0 or 1) of char CH.
+N defaults to 0 if omitted.
+*/
+       (ch, n))
+{
+  Lisp_Object charset;
+  int octet0, octet1;
+
+  CHECK_CHAR_COERCE_INT (ch);
+
+  BREAKUP_CHAR (XCHAR (ch), charset, octet0, octet1);
+
+  if (NILP (n) || EQ (n, Qzero))
+    return make_int (octet0);
+  else if (EQ (n, make_int (1)))
+    return make_int (octet1);
+  else
+    signal_simple_error ("Octet number must be 0 or 1", n);
+}
+
 DEFUN ("split-char", Fsplit_char, 1, 1, 0, /*
 Return list of charset and one or two position-codes of CHAR.
 */
@@ -2389,6 +2404,7 @@ Return list of charset and one or two position-codes of CHAR.
       rc = list2 (XCHARSET_NAME (charset), make_int (c1));
     }
   UNGCPRO;
+
   return rc;
 #endif
 }
@@ -2506,6 +2522,7 @@ syms_of_mule_charset (void)
 
   DEFSUBR (Fmake_char);
   DEFSUBR (Fchar_charset);
+  DEFSUBR (Fchar_octet);
   DEFSUBR (Fsplit_char);
 
 #ifdef ENABLE_COMPOSITE_CHARS
index 5948f1b..3d51fdc 100644 (file)
@@ -239,7 +239,7 @@ Boston, MA 02111-1307, USA.  */
 
    Character set               Encoding (PC == position-code)
    -------------               -------- (LB == leading-byte)
-   ASCII                       PC1 |
+   ASCII                       PC1  |
    Control-1                   LB   | PC1 + 0xA0
    Dimension-1 official                LB   | PC1 + 0x80
    Dimension-1 private         0x9E | LB         | PC1 + 0x80
@@ -559,17 +559,6 @@ struct charset_lookup {
 
 extern struct charset_lookup *chlook;
 
-/* Table of number of bytes in the string representation of a character
-   indexed by the first byte of that representation.
-
-   This value can be derived other ways -- e.g. something like
-
-   (BYTE_ASCII_P (first_byte) ? 1 :
-    XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (first_byte)))
-
-   but it's faster this way. */
-extern Bytecount rep_bytes_by_first_byte[0xA0];
-
 #ifdef ERROR_CHECK_TYPECHECK
 /* int not Bufbyte even though that is the actual type of a leading byte.
    This way, out-ot-range values will get caught rather than automatically
@@ -593,21 +582,26 @@ CHARSET_BY_LEADING_BYTE (int lb)
 #define CHARSET_BY_ATTRIBUTES(type, final, dir) \
   (chlook->charset_by_attributes[type][final][dir])
 
-#ifdef ERROR_CHECK_TYPECHECK
 
-/* Number of bytes in the string representation of a character */
+/* Table of number of bytes in the string representation of a character
+   indexed by the first byte of that representation.
+
+   This value can be derived in other ways -- e.g. something like
+   XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (first_byte))
+   but it's faster this way. */
+extern const Bytecount rep_bytes_by_first_byte[0xA0];
+
+/* Number of bytes in the string representation of a character. */
 INLINE int REP_BYTES_BY_FIRST_BYTE (int fb);
 INLINE int
 REP_BYTES_BY_FIRST_BYTE (int fb)
 {
-  assert (fb >= 0 && fb < 0xA0);
+#ifdef ERROR_CHECK_TYPECHECK
+  assert (0 <= fb && fb < 0xA0);
+#endif
   return rep_bytes_by_first_byte[fb];
 }
 
-#else
-#define REP_BYTES_BY_FIRST_BYTE(fb) (rep_bytes_by_first_byte[fb])
-#endif
-
 \f
 /************************************************************************/
 /*                        Dealing with characters                       */
index ff5ef3a..8f9984e 100644 (file)
@@ -148,7 +148,8 @@ allocate_heap (void)
      still a pretty decent arena to play in!  */
 
   unsigned long base = 0x01B00000;   /*  27MB */
-  unsigned long end  = 1 << VALBITS; /* 256MB */
+  /* Temporary hack for the non-starting problem - use 28 (256Mb) rather than VALBITS (1Gb) */
+  unsigned long end  = 1 << 28;      /* 256MB */
   void *ptr = NULL;
 
 #define NTHEAP_PROBE_BASE 1
index 5b828ca..41591be 100644 (file)
@@ -627,8 +627,13 @@ print_error_message (Lisp_Object error_object, Lisp_Object stream)
   {
     int first = 1;
     int speccount = specpdl_depth ();
+    Lisp_Object frame = Qnil;
+    struct gcpro gcpro1;
+    GCPRO1 (stream);
 
     specbind (Qprint_message_label, Qerror);
+    stream = print_prepare (stream, &frame);
+
     tail = Fcdr (error_object);
     if (EQ (type, Qerror))
       {
@@ -650,6 +655,8 @@ print_error_message (Lisp_Object error_object, Lisp_Object stream)
        tail = Fcdr (tail);
        first = 0;
       }
+    print_finish (stream, frame);
+    UNGCPRO;
     unbind_to (speccount, Qnil);
     return;
     /* not reached */
index 16a27f2..8f41eff 100644 (file)
@@ -1234,8 +1234,8 @@ redisplay_output_layout (struct window *w,
 
   XSETWINDOW (window, w);
 
-  layout_height = glyph_height (image_instance, Qnil, findex, window);
-  layout_width = glyph_width (image_instance, Qnil, findex, window);
+  layout_height = glyph_height (image_instance, window);
+  layout_width = glyph_width (image_instance, window);
 
   dga->height = layout_height;
   dga->width = layout_width;
@@ -1319,8 +1319,8 @@ redisplay_output_layout (struct window *w,
          struct display_glyph_area cdga;
          cdga.xoffset  = IMAGE_INSTANCE_XOFFSET (childii) - dga->xoffset;
          cdga.yoffset = IMAGE_INSTANCE_YOFFSET (childii) - dga->yoffset;
-         cdga.width = glyph_width (child, Qnil, findex, window);
-         cdga.height = glyph_height (child, Qnil, findex, window);
+         cdga.width = glyph_width (child, window);
+         cdga.height = glyph_height (child, window);
 
          /* Although normalization is done by the output routines
             we have to do it here so that they don't try and
@@ -1362,9 +1362,9 @@ redisplay_output_layout (struct window *w,
                        xzero (dl);
                        /* Munge boxes into display lines. */
                        dl.ypos = (cdb.ypos - cdga.yoffset)
-                         + glyph_ascent (child, Qnil, findex, window);
-                       dl.ascent = glyph_ascent (child, Qnil, findex, window);
-                       dl.descent = glyph_descent (child, Qnil, findex, window);
+                         + glyph_ascent (child, window);
+                       dl.ascent = glyph_ascent (child, window);
+                       dl.descent = glyph_descent (child, window);
                        dl.top_clip = cdga.yoffset;
                        dl.clip = (dl.ypos + dl.descent) - (cdb.ypos + cdb.height);
                        /* output_string doesn't understand offsets in
index 156ff35..ed35b8e 100644 (file)
@@ -246,18 +246,13 @@ typedef struct
 } prop_block_dynarr;
 
 
-static void generate_formatted_string_db (Lisp_Object format_str,
-                                         Lisp_Object result_str,
-                                         struct window *w,
-                                         struct display_line *dl,
-                                         struct display_block *db,
-                                         face_index findex, int min_pixpos,
-                                         int max_pixpos, int type);
 static Charcount generate_fstring_runes (struct window *w, pos_data *data,
                                         Charcount pos, Charcount min_pos,
                                         Charcount max_pos, Lisp_Object elt,
                                         int depth, int max_pixsize,
-                                        face_index findex, int type);
+                                        face_index findex, int type,
+                                        Charcount *offset,
+                                        Lisp_Object cur_ext);
 static prop_block_dynarr *add_glyph_rune (pos_data *data,
                                          struct glyph_block *gb,
                                          int pos_type, int allow_cursor,
@@ -300,10 +295,6 @@ static int max_preempts;
    isn't any reason we need more than a single set. */
 display_line_dynarr *cmotion_display_lines;
 
-/* Used by generate_formatted_string.  Global because they get used so
-   much that the dynamic allocation time adds up. */
-static Emchar_dynarr *formatted_string_emchar_dynarr;
-static struct display_line formatted_string_display_line;
 /* We store the extents that we need to generate in a Dynarr and then
    frob them all on at the end of generating the string.  We do it
    this way rather than adding them as we generate the string because
@@ -428,7 +419,6 @@ int windows_structure_changed;
 Lisp_Object Vbar_cursor;
 Lisp_Object Qbar_cursor;
 
-
 int visible_bell;      /* If true and the terminal will support it
                           then the frame will flash instead of
                           beeping when an error occurs */
@@ -1551,7 +1541,7 @@ add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type,
       if (cachel)
        width = cachel->width;
       else
-       width = glyph_width (gb->glyph, Qnil, data->findex, data->window);
+       width = glyph_width (gb->glyph, data->window);
 
       if (!width)
        return NULL;
@@ -1614,9 +1604,8 @@ add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type,
        }
       else
        {
-         ascent = glyph_ascent (gb->glyph, Qnil, data->findex, data->window);
-         descent = glyph_descent (gb->glyph, Qnil, data->findex,
-                                  data->window);
+         ascent = glyph_ascent (gb->glyph, data->window);
+         descent = glyph_descent (gb->glyph, data->window);
        }
 
       baseline = glyph_baseline (gb->glyph, data->window);
@@ -2777,8 +2766,8 @@ add_margin_runes (struct display_line *dl, struct display_block *db, int start,
              unsigned short ascent, descent;
              Lisp_Object baseline = glyph_baseline (gb->glyph, window);
 
-             ascent = glyph_ascent (gb->glyph, Qnil, gb->findex, window);
-             descent = glyph_descent (gb->glyph, Qnil, gb->findex, window);
+             ascent = glyph_ascent (gb->glyph, window);
+             descent = glyph_descent (gb->glyph, window);
 
              /* A pixmap that has not had a baseline explicitly set.
                  We use the existing ascent / descent ratio of the
@@ -2892,7 +2881,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
        {
          int width;
 
-         width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+         width = glyph_width (gb->glyph, window);
 
          if (white_in_start - width >= left_in_end)
            {
@@ -2943,7 +2932,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
        if (extent_begin_glyph_layout (XEXTENT (gb->extent)) ==
            GL_INSIDE_MARGIN)
          {
-           gb->width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+           gb->width = glyph_width (gb->glyph, window);
            used_in += gb->width;
            Dynarr_add (ib, *gb);
          }
@@ -3012,7 +3001,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
        if (extent_begin_glyph_layout (XEXTENT (gb->extent)) ==
            GL_INSIDE_MARGIN)
          {
-           int width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+           int width = glyph_width (gb->glyph, window);
 
            if (used_out)
              {
@@ -3054,7 +3043,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
       if (extent_begin_glyph_layout (XEXTENT (gb->extent)) ==
          GL_OUTSIDE_MARGIN)
        {
-         int width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+         int width = glyph_width (gb->glyph, window);
 
          if (out_end + width <= in_out_start)
            {
@@ -3211,7 +3200,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
 
       if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_WHITESPACE)
        {
-         int width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+         int width = glyph_width (gb->glyph, window);
 
          if (white_in_end + width <= dl->bounds.right_in)
            {
@@ -3261,7 +3250,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
 
        if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN)
          {
-           gb->width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+           gb->width = glyph_width (gb->glyph, window);
            used_in += gb->width;
            Dynarr_add (ib, *gb);
          }
@@ -3325,7 +3314,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
 
        if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN)
          {
-           int width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+           int width = glyph_width (gb->glyph, window);
 
            if (used_out)
              {
@@ -3366,7 +3355,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
 
       if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_OUTSIDE_MARGIN)
        {
-         int width = glyph_width (gb->glyph, Qnil, gb->findex, window);
+         int width = glyph_width (gb->glyph, window);
 
          if (out_start - width >= in_out_end)
            {
@@ -3482,9 +3471,119 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
 /*                                                                        */
 /***************************************************************************/
 
+/* This function is also used in frame.c by `generate_title_string' */
+void
+generate_formatted_string_db (Lisp_Object format_str, Lisp_Object result_str,
+                              struct window *w, struct display_line *dl,
+                              struct display_block *db, face_index findex,
+                              int min_pixpos, int max_pixpos, int type)
+{
+  struct frame *f = XFRAME (w->frame);
+  struct device *d = XDEVICE (f->device);
+
+  pos_data data;
+  int c_pixpos;
+  Charcount offset = 0;
+
+  xzero (data);
+  data.d = d;
+  data.db = db;
+  data.dl = dl;
+  data.findex = findex;
+  data.pixpos = min_pixpos;
+  data.max_pixpos = max_pixpos;
+  data.cursor_type = NO_CURSOR;
+  data.last_charset = Qunbound;
+  data.last_findex = DEFAULT_INDEX;
+  data.result_str = result_str;
+  data.is_modeline = 1;
+  data.string = Qnil;
+  XSETWINDOW (data.window, w);
+
+  Dynarr_reset (formatted_string_extent_dynarr);
+  Dynarr_reset (formatted_string_extent_start_dynarr);
+  Dynarr_reset (formatted_string_extent_end_dynarr);
+
+  /* result_str is nil when we're building a frame or icon title. Otherwise,
+     we're building a modeline, so the offset starts at the modeline
+     horizontal scrolling ammount */
+  if (! NILP (result_str))
+    offset = w->modeline_hscroll;
+  generate_fstring_runes (w, &data, 0, 0, -1, format_str, 0,
+                          max_pixpos - min_pixpos, findex, type, &offset,
+                         Qnil);
+
+  if (Dynarr_length (db->runes))
+    {
+      struct rune *rb =
+        Dynarr_atp (db->runes, Dynarr_length (db->runes) - 1);
+      c_pixpos = rb->xpos + rb->width;
+    }
+  else
+    c_pixpos = min_pixpos;
+
+  /* If we don't reach the right side of the window, add a blank rune
+     to make up the difference.  This usually only occurs if the
+     modeline face is using a proportional width font or a fixed width
+     font of a different size from the default face font. */
+
+  if (c_pixpos < max_pixpos)
+    {
+      data.pixpos = c_pixpos;
+      data.blank_width = max_pixpos - data.pixpos;
+
+      add_blank_rune (&data, NULL, 0);
+    }
+
+  /* Now create the result string and frob the extents into it. */
+  if (!NILP (result_str))
+    {
+      int elt;
+      Bytecount len;
+      Bufbyte *strdata;
+      struct buffer *buf = XBUFFER (WINDOW_BUFFER (w));
+
+      detach_all_extents (result_str);
+      resize_string (XSTRING (result_str), -1,
+                     data.bytepos - XSTRING_LENGTH (result_str));
+
+      strdata = XSTRING_DATA (result_str);
+
+      for (elt = 0, len = 0; elt < Dynarr_length (db->runes); elt++)
+        {
+          if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR)
+            {
+              len += (set_charptr_emchar
+                      (strdata + len, Dynarr_atp (db->runes,
+                                                  elt)->object.chr.ch));
+            }
+        }
+
+      for (elt = 0; elt < Dynarr_length (formatted_string_extent_dynarr);
+           elt++)
+        {
+          Lisp_Object extent = Qnil;
+          Lisp_Object child;
+
+          XSETEXTENT (extent, Dynarr_at (formatted_string_extent_dynarr, elt));
+          child = Fgethash (extent, buf->modeline_extent_table, Qnil);
+          if (NILP (child))
+            {
+              child = Fmake_extent (Qnil, Qnil, result_str);
+              Fputhash (extent, child, buf->modeline_extent_table);
+            }
+          Fset_extent_parent (child, extent);
+          set_extent_endpoints
+            (XEXTENT (child),
+             Dynarr_at (formatted_string_extent_start_dynarr, elt),
+             Dynarr_at (formatted_string_extent_end_dynarr, elt),
+             result_str);
+        }
+    }
+}
+
 /* Ensure that the given display line DL accurately represents the
    modeline for the given window. */
-
 static void
 generate_modeline (struct window *w, struct display_line *dl, int type)
 {
@@ -3585,110 +3684,6 @@ generate_modeline (struct window *w, struct display_line *dl, int type)
     dl->ypos -= FRAME_BOTTOM_GUTTER_BOUNDS (f);
 }
 
-static void
-generate_formatted_string_db (Lisp_Object format_str, Lisp_Object result_str,
-                              struct window *w, struct display_line *dl,
-                              struct display_block *db, face_index findex,
-                              int min_pixpos, int max_pixpos, int type)
-{
-  struct frame *f = XFRAME (w->frame);
-  struct device *d = XDEVICE (f->device);
-
-  pos_data data;
-  int c_pixpos;
-
-  xzero (data);
-  data.d = d;
-  data.db = db;
-  data.dl = dl;
-  data.findex = findex;
-  data.pixpos = min_pixpos;
-  data.max_pixpos = max_pixpos;
-  data.cursor_type = NO_CURSOR;
-  data.last_charset = Qunbound;
-  data.last_findex = DEFAULT_INDEX;
-  data.result_str = result_str;
-  data.is_modeline = 1;
-  data.string = Qnil;
-  XSETWINDOW (data.window, w);
-
-  Dynarr_reset (formatted_string_extent_dynarr);
-  Dynarr_reset (formatted_string_extent_start_dynarr);
-  Dynarr_reset (formatted_string_extent_end_dynarr);
-
-  /* This recursively builds up the modeline. */
-  generate_fstring_runes (w, &data, 0, 0, -1, format_str, 0,
-                          max_pixpos - min_pixpos, findex, type);
-
-  if (Dynarr_length (db->runes))
-    {
-      struct rune *rb =
-        Dynarr_atp (db->runes, Dynarr_length (db->runes) - 1);
-      c_pixpos = rb->xpos + rb->width;
-    }
-  else
-    c_pixpos = min_pixpos;
-
-  /* If we don't reach the right side of the window, add a blank rune
-     to make up the difference.  This usually only occurs if the
-     modeline face is using a proportional width font or a fixed width
-     font of a different size from the default face font. */
-
-  if (c_pixpos < max_pixpos)
-    {
-      data.pixpos = c_pixpos;
-      data.blank_width = max_pixpos - data.pixpos;
-
-      add_blank_rune (&data, NULL, 0);
-    }
-
-  /* Now create the result string and frob the extents into it. */
-  if (!NILP (result_str))
-    {
-      int elt;
-      Bytecount len;
-      Bufbyte *strdata;
-      struct buffer *buf = XBUFFER (WINDOW_BUFFER (w));
-
-      detach_all_extents (result_str);
-      resize_string (XSTRING (result_str), -1,
-                     data.bytepos - XSTRING_LENGTH (result_str));
-
-      strdata = XSTRING_DATA (result_str);
-
-      for (elt = 0, len = 0; elt < Dynarr_length (db->runes); elt++)
-        {
-          if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR)
-            {
-              len += (set_charptr_emchar
-                      (strdata + len, Dynarr_atp (db->runes,
-                                                  elt)->object.chr.ch));
-            }
-        }
-
-      for (elt = 0; elt < Dynarr_length (formatted_string_extent_dynarr);
-           elt++)
-        {
-          Lisp_Object extent = Qnil;
-          Lisp_Object child;
-
-          XSETEXTENT (extent, Dynarr_at (formatted_string_extent_dynarr, elt));
-          child = Fgethash (extent, buf->modeline_extent_table, Qnil);
-          if (NILP (child))
-            {
-              child = Fmake_extent (Qnil, Qnil, result_str);
-              Fputhash (extent, child, buf->modeline_extent_table);
-            }
-          Fset_extent_parent (child, extent);
-          set_extent_endpoints
-            (XEXTENT (child),
-             Dynarr_at (formatted_string_extent_start_dynarr, elt),
-             Dynarr_at (formatted_string_extent_end_dynarr, elt),
-             result_str);
-        }
-    }
-}
-
 static Charcount
 add_string_to_fstring_db_runes (pos_data *data, CONST Bufbyte *str,
                                 Charcount pos, Charcount min_pos, Charcount max_pos)
@@ -3734,7 +3729,8 @@ add_string_to_fstring_db_runes (pos_data *data, CONST Bufbyte *str,
    modeline extents. */
 static Charcount
 add_glyph_to_fstring_db_runes (pos_data *data, Lisp_Object glyph,
-                               Charcount pos, Charcount min_pos, Charcount max_pos)
+                               Charcount pos, Charcount min_pos,
+                              Charcount max_pos, Lisp_Object extent)
 {
   /* This function has been Mule-ized. */
   Charcount end;
@@ -3750,7 +3746,7 @@ add_glyph_to_fstring_db_runes (pos_data *data, Lisp_Object glyph,
     end = min (max_pos, end);
 
   gb.glyph = glyph;
-  gb.extent = Qnil;
+  gb.extent = extent;
   add_glyph_rune (data, &gb, BEGIN_GLYPHS, 0, 0);
   pos++;
 
@@ -3777,7 +3773,8 @@ static Charcount
 generate_fstring_runes (struct window *w, pos_data *data, Charcount pos,
                         Charcount min_pos, Charcount max_pos,
                         Lisp_Object elt, int depth, int max_pixsize,
-                        face_index findex, int type)
+                        face_index findex, int type, Charcount *offset,
+                       Lisp_Object cur_ext)
 {
   /* This function has been Mule-ized. */
   /* #### The other losing things in this function are:
@@ -3809,13 +3806,22 @@ tail_recurse:
 
           if (this != last)
             {
-              /* The string is just a string. */
+              /* No %-construct */
               Charcount size =
-                bytecount_to_charcount (last, this - last) + pos;
-              Charcount tmp_max = (max_pos == -1 ? size : min (size, max_pos));
+               bytecount_to_charcount (last, this - last);
 
-              pos = add_string_to_fstring_db_runes (data, last, pos, pos,
-                                                    tmp_max);
+             if (size <= *offset)
+               *offset -= size;
+             else
+               {
+                 Charcount tmp_max = (max_pos == -1 ? pos + size - *offset :
+                                      min (pos + size - *offset, max_pos));
+                 CONST Bufbyte *tmp_last = charptr_n_addr (last, *offset);
+
+                 pos = add_string_to_fstring_db_runes (data, tmp_last,
+                                                       pos, pos, tmp_max);
+                 *offset = 0;
+               }
             }
           else /* *this == '%' */
             {
@@ -3840,7 +3846,7 @@ tail_recurse:
                   pos = generate_fstring_runes (w, data, pos, spec_width,
                                                 max_pos, Vglobal_mode_string,
                                                 depth, max_pixsize, findex,
-                                                type);
+                                                type, offset, cur_ext);
                 }
               else if (*this == '-')
                 {
@@ -3871,13 +3877,31 @@ tail_recurse:
                 }
               else if (*this != 0)
                 {
-                  Bufbyte *str;
                   Emchar ch = charptr_emchar (this);
+                  Bufbyte *str;
+                 Charcount size;
+
                   decode_mode_spec (w, ch, type);
 
                   str = Dynarr_atp (mode_spec_bufbyte_string, 0);
-                  pos = add_string_to_fstring_db_runes (data,str, pos, pos,
-                                                        max_pos);
+                 size = bytecount_to_charcount
+                   /* Skip the null character added by `decode_mode_spec' */
+                   (str, Dynarr_length (mode_spec_bufbyte_string)) - 1;
+
+                 if (size <= *offset)
+                   *offset -= size;
+                 else
+                   {
+                     CONST Bufbyte *tmp_str = charptr_n_addr (str, *offset);
+
+                     /* ### NOTE: I don't understand why a tmp_max is not
+                        computed and used here as in the plain string case
+                        above. -- dv */
+                     pos = add_string_to_fstring_db_runes (data, tmp_str,
+                                                           pos, pos,
+                                                           max_pos);
+                     *offset = 0;
+                   }
                 }
 
               /* NOT this++.  There could be any sort of character at
@@ -3903,13 +3927,26 @@ tail_recurse:
 
       if (!UNBOUNDP (tem))
         {
-          /* If value is a string, output that string literally:
+         /* If value is a string, output that string literally:
              don't check for % within it.  */
           if (STRINGP (tem))
             {
-              pos =
-                add_string_to_fstring_db_runes
-                (data, XSTRING_DATA (tem), pos, min_pos, max_pos);
+             Bufbyte *str = XSTRING_DATA (tem);
+             Charcount size = XSTRING_CHAR_LENGTH (tem);
+
+             if (size <= *offset)
+               *offset -= size;
+             else
+               {
+                 CONST Bufbyte *tmp_str = charptr_n_addr (str, *offset);
+
+                 /* ### NOTE: I don't understand why a tmp_max is not
+                    computed and used here as in the plain string case
+                    above. -- dv */
+                 pos = add_string_to_fstring_db_runes (data, tmp_str, pos,
+                                                       min_pos, max_pos);
+                 *offset = 0;
+               }
             }
           /* Give up right away for nil or t.  */
           else if (!EQ (tem, elt))
@@ -3934,50 +3971,53 @@ tail_recurse:
   else if (CONSP (elt))
     {
       /* A cons cell: four distinct cases.
-       * If first element is a string or a cons, process all the elements
-       * and effectively concatenate them.
-       * If first element is a negative number, truncate displaying cdr to
-       * at most that many characters.  If positive, pad (with spaces)
-       * to at least that many characters.
-       * If first element is a symbol, process the cadr or caddr recursively
-       * according to whether the symbol's value is non-nil or nil.
-       * If first element is a face, process the cdr recursively
-       * without altering the depth.
+       * - If first element is a string or a cons, process all the elements
+       *   and effectively concatenate them.
+       * - If first element is a negative number, truncate displaying cdr to
+       *   at most that many characters.  If positive, pad (with spaces)
+       *   to at least that many characters.
+       * - If first element is another symbol, process the cadr or caddr
+       *   recursively according to whether the symbol's value is non-nil or
+       *   nil.
+       * - If first element is a face, process the cdr recursively
+       *   without altering the depth.
        */
+
       Lisp_Object car, tem;
 
       car = XCAR (elt);
       if (SYMBOLP (car))
-        {
-          elt = XCDR (elt);
-          if (!CONSP (elt))
-            goto invalid;
-          tem = symbol_value_in_buffer (car, w->buffer);
-          /* elt is now the cdr, and we know it is a cons cell.
-             Use its car if CAR has a non-nil value.  */
-          if (!UNBOUNDP (tem))
-            {
-              if (!NILP (tem))
-                {
-                  elt = XCAR (elt);
-                  goto tail_recurse;
-                }
-            }
-          /* Symbol's value is nil (or symbol is unbound)
-           * Get the cddr of the original list
-           * and if possible find the caddr and use that.
-           */
-          elt = XCDR (elt);
-          if (NILP (elt))
-            ;
-          else if (!CONSP (elt))
-            goto invalid;
-          else
-            {
-              elt = XCAR (elt);
-              goto tail_recurse;
-            }
-        }
+       {
+         elt = XCDR (elt);
+         if (!CONSP (elt))
+           goto invalid;
+
+         tem = symbol_value_in_buffer (car, w->buffer);
+         /* elt is now the cdr, and we know it is a cons cell.
+            Use its car if CAR has a non-nil value.  */
+         if (!UNBOUNDP (tem))
+           {
+             if (!NILP (tem))
+               {
+                 elt = XCAR (elt);
+                 goto tail_recurse;
+               }
+           }
+         /* Symbol's value is nil (or symbol is unbound)
+          * Get the cddr of the original list
+          * and if possible find the caddr and use that.
+          */
+         elt = XCDR (elt);
+         if (NILP (elt))
+           ;
+         else if (!CONSP (elt))
+           goto invalid;
+         else
+           {
+             elt = XCAR (elt);
+             goto tail_recurse;
+           }
+       }
       else if (INTP (car))
         {
           Charcount lim = XINT (car);
@@ -4016,13 +4056,14 @@ tail_recurse:
       else if (STRINGP (car) || CONSP (car))
         {
           int limit = 50;
+
           /* LIMIT is to protect against circular lists.  */
           while (CONSP (elt) && --limit > 0
                  && (pos < max_pos || max_pos == -1))
             {
               pos = generate_fstring_runes (w, data, pos, pos, max_pos,
-                                            XCAR (elt), depth,
-                                            max_pixsize, findex, type);
+                                            XCAR (elt), depth, max_pixsize,
+                                           findex, type, offset, cur_ext);
               elt = XCDR (elt);
             }
         }
@@ -4061,7 +4102,8 @@ tail_recurse:
               data->findex = new_findex;
               pos = generate_fstring_runes (w, data, pos, pos, max_pos,
                                             XCDR (elt), depth - 1,
-                                            max_pixsize, new_findex, type);
+                                           max_pixsize, new_findex, type,
+                                           offset, car);
               data->findex = old_findex;
               Dynarr_add (formatted_string_extent_dynarr, ext);
               Dynarr_add (formatted_string_extent_start_dynarr, start);
@@ -4071,57 +4113,46 @@ tail_recurse:
     }
   else if (GLYPHP (elt))
     {
-      pos = add_glyph_to_fstring_db_runes (data, elt, pos, pos, max_pos);
+      /* Glyphs are considered as one character with respect to the modeline
+        horizontal scrolling facility. -- dv */
+      if (*offset > 0)
+       *offset -= 1;
+      else
+       pos = add_glyph_to_fstring_db_runes (data, elt, pos, pos, max_pos,
+                                            cur_ext);
     }
   else
     {
     invalid:
-      pos =
-        add_string_to_fstring_db_runes
-          (data, (CONST Bufbyte *) GETTEXT ("*invalid*"), pos, min_pos,
-           max_pos);
+      {
+       char *str = GETTEXT ("*invalid*");
+       Charcount size = (Charcount) strlen (str); /* is this ok ?? -- dv */
+
+       if (size <= *offset)
+         *offset -= size;
+       else
+         {
+           CONST Bufbyte *tmp_str =
+             charptr_n_addr ((CONST Bufbyte *) str, *offset);
+
+           /* ### NOTE: I don't understand why a tmp_max is not computed and
+              used here as in the plain string case above. -- dv */
+           pos = add_string_to_fstring_db_runes (data, tmp_str, pos,
+                                                 min_pos, max_pos);
+           *offset = 0;
+         }
+      }
     }
 
   if (min_pos > pos)
     {
-      add_string_to_fstring_db_runes (data, (CONST Bufbyte *) "", pos, min_pos,
-                                      -1);
+      add_string_to_fstring_db_runes (data, (CONST Bufbyte *) "", pos,
+                                     min_pos, -1);
     }
 
   return pos;
 }
 
-/* The caller is responsible for freeing the returned string. */
-Bufbyte *
-generate_formatted_string (struct window *w, Lisp_Object format_str,
-                          Lisp_Object result_str, face_index findex, int type)
-{
-  struct display_line *dl;
-  struct display_block *db;
-  int elt = 0;
-
-  dl = &formatted_string_display_line;
-  db = get_display_block_from_line (dl, TEXT);
-  Dynarr_reset (db->runes);
-
-  generate_formatted_string_db (format_str, result_str, w, dl, db, findex, 0,
-                                -1, type);
-
-  Dynarr_reset (formatted_string_emchar_dynarr);
-  while (elt < Dynarr_length (db->runes))
-    {
-      if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR)
-       Dynarr_add (formatted_string_emchar_dynarr,
-                   Dynarr_atp (db->runes, elt)->object.chr.ch);
-      elt++;
-    }
-
-  return
-    convert_emchar_string_into_malloced_string
-    ( Dynarr_atp (formatted_string_emchar_dynarr, 0),
-      Dynarr_length (formatted_string_emchar_dynarr), 0);
-}
-
 /* Update just the modeline.  Assumes the desired display structs.  If
    they do not have a modeline block, it does nothing. */
 static void
@@ -6164,7 +6195,9 @@ regeneration_done:
      somewhere else once tty updates occur on a per-frame basis. */
   mark_face_cachels_as_clean (w);
 
-  /* The glyph cachels only get dirty if someone changed something. */
+  /* The glyph cachels only get dirty if someone changed something.
+   Since redisplay has now effectively ended we can reset the dirty
+   flag since everything must be up-to-date. */
   if (glyphs_changed)
     mark_glyph_cachels_as_clean (w);
 
@@ -9094,12 +9127,10 @@ init_redisplay (void)
     {
       cmotion_display_lines = Dynarr_new (display_line);
       mode_spec_bufbyte_string = Dynarr_new (Bufbyte);
-      formatted_string_emchar_dynarr = Dynarr_new (Emchar);
       formatted_string_extent_dynarr = Dynarr_new (EXTENT);
       formatted_string_extent_start_dynarr = Dynarr_new (Bytecount);
       formatted_string_extent_end_dynarr = Dynarr_new (Bytecount);
       internal_cache = Dynarr_new (line_start_cache);
-      xzero (formatted_string_display_line);
     }
 
   /* window system is nil when in -batch mode */
@@ -9383,9 +9414,9 @@ This is a specifier; use `set-specifier' to change it.
   Vleft_margin_width = Fmake_specifier (Qnatnum);
   set_specifier_fallback (Vleft_margin_width, list1 (Fcons (Qnil, Qzero)));
   set_specifier_caching (Vleft_margin_width,
-                        slot_offset (struct window, left_margin_width),
+                        offsetof (struct window, left_margin_width),
                         some_window_value_changed,
-                        slot_offset (struct frame, left_margin_width),
+                        offsetof (struct frame, left_margin_width),
                         margin_width_changed_in_frame);
 
   DEFVAR_SPECIFIER ("right-margin-width", &Vright_margin_width /*
@@ -9395,9 +9426,9 @@ This is a specifier; use `set-specifier' to change it.
   Vright_margin_width = Fmake_specifier (Qnatnum);
   set_specifier_fallback (Vright_margin_width, list1 (Fcons (Qnil, Qzero)));
   set_specifier_caching (Vright_margin_width,
-                        slot_offset (struct window, right_margin_width),
+                        offsetof (struct window, right_margin_width),
                         some_window_value_changed,
-                        slot_offset (struct frame, right_margin_width),
+                        offsetof (struct frame, right_margin_width),
                         margin_width_changed_in_frame);
 
   DEFVAR_SPECIFIER ("minimum-line-ascent", &Vminimum_line_ascent /*
@@ -9407,7 +9438,7 @@ This is a specifier; use `set-specifier' to change it.
   Vminimum_line_ascent = Fmake_specifier (Qnatnum);
   set_specifier_fallback (Vminimum_line_ascent, list1 (Fcons (Qnil, Qzero)));
   set_specifier_caching (Vminimum_line_ascent,
-                        slot_offset (struct window, minimum_line_ascent),
+                        offsetof (struct window, minimum_line_ascent),
                         some_window_value_changed,
                         0, 0);
 
@@ -9418,7 +9449,7 @@ This is a specifier; use `set-specifier' to change it.
   Vminimum_line_descent = Fmake_specifier (Qnatnum);
   set_specifier_fallback (Vminimum_line_descent, list1 (Fcons (Qnil, Qzero)));
   set_specifier_caching (Vminimum_line_descent,
-                        slot_offset (struct window, minimum_line_descent),
+                        offsetof (struct window, minimum_line_descent),
                         some_window_value_changed,
                         0, 0);
 
@@ -9430,7 +9461,7 @@ This is a specifier; use `set-specifier' to change it.
   Vuse_left_overflow = Fmake_specifier (Qboolean);
   set_specifier_fallback (Vuse_left_overflow, list1 (Fcons (Qnil, Qnil)));
   set_specifier_caching (Vuse_left_overflow,
-                        slot_offset (struct window, use_left_overflow),
+                        offsetof (struct window, use_left_overflow),
                         some_window_value_changed,
                         0, 0);
 
@@ -9442,7 +9473,7 @@ This is a specifier; use `set-specifier' to change it.
   Vuse_right_overflow = Fmake_specifier (Qboolean);
   set_specifier_fallback (Vuse_right_overflow, list1 (Fcons (Qnil, Qnil)));
   set_specifier_caching (Vuse_right_overflow,
-                        slot_offset (struct window, use_right_overflow),
+                        offsetof (struct window, use_right_overflow),
                         some_window_value_changed,
                         0, 0);
 
@@ -9453,7 +9484,7 @@ This is a specifier; use `set-specifier' to change it.
   Vtext_cursor_visible_p = Fmake_specifier (Qboolean);
   set_specifier_fallback (Vtext_cursor_visible_p, list1 (Fcons (Qnil, Qt)));
   set_specifier_caching (Vtext_cursor_visible_p,
-                        slot_offset (struct window, text_cursor_visible_p),
+                        offsetof (struct window, text_cursor_visible_p),
                         text_cursor_visible_p_changed,
                         0, 0);
 
index 04f2538..b9772bf 100644 (file)
@@ -696,13 +696,18 @@ int window_half_pixpos (struct window *w);
 void redisplay_echo_area (void);
 void free_display_structs (struct window_mirror *mir);
 void free_display_lines (display_line_dynarr *dla);
-Bufbyte *generate_formatted_string (struct window *w, Lisp_Object format_str,
-                                    Lisp_Object result_str, face_index findex,
-                                    int type);
 void generate_displayable_area (struct window *w, Lisp_Object disp_string,
                                int xpos, int ypos, int width, int height,
                                display_line_dynarr* dl,
                                Bufpos start_pos, face_index default_face);
+/* `generate_title_string' in frame.c needs this */
+void generate_formatted_string_db (Lisp_Object format_str,
+                                  Lisp_Object result_str,
+                                  struct window *w,
+                                  struct display_line *dl,
+                                  struct display_block *db,
+                                  face_index findex,
+                                  int min_pixpos, int max_pixpos, int type);
 int real_current_modeline_height (struct window *w);
 int pixel_to_glyph_translation (struct frame *f, int x_coord,
                                int y_coord, int *col, int *row,
index a006cef..70330be 100644 (file)
@@ -32,8 +32,6 @@
 #endif
 #endif
 
-#define HAVE_FSYNC
-
 /* With this defined, a gcc-compiled Emacs crashed in realloc under AIX
    3.2, and a cc-compiled Emacs works with this undefined.
    --karl@cs.umb.edu.  */
index def1faa..1eaa8b5 100644 (file)
@@ -121,6 +121,12 @@ extern long random();
 #ifndef WM_MOUSEWHEEL
 #define WM_MOUSEWHEEL 0x20A
 #endif
+#ifndef TCS_BOTTOM
+#define TCS_BOTTOM 0x0002
+#endif
+#ifndef TCS_VERTICAL
+#define TCS_VERTICAL 0x0080
+#endif
 
 #define PBS_SMOOTH              0x01
 
index ebbcf69..6dee7ee 100644 (file)
@@ -105,9 +105,9 @@ typedef int pid_t;
    The alternative is that a lock file named
    /usr/spool/mail/$USER.lock.  */
 
-/* #define MAIL_USE_FLOCK */
 #define MAIL_USE_POP
-#define MAIL_USE_SYSTEM_LOCK
+#define HAVE_LOCKING
+#define MAIL_USE_LOCKING
 
 /* If the character used to separate elements of the executable path
    is not ':', #define this to be the appropriate character constant.  */
index 39855c8..6f2f0e9 100644 (file)
@@ -956,11 +956,9 @@ This is a specifier; use `set-specifier' to change it.
     (Vscrollbar_width,
      list1 (Fcons (Qnil, make_int (DEFAULT_SCROLLBAR_WIDTH))));
   set_specifier_caching (Vscrollbar_width,
-                        slot_offset (struct window,
-                                     scrollbar_width),
+                        offsetof (struct window, scrollbar_width),
                         vertical_scrollbar_changed_in_window,
-                        slot_offset (struct frame,
-                                     scrollbar_width),
+                        offsetof (struct frame, scrollbar_width),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("scrollbar-height", &Vscrollbar_height /*
@@ -972,11 +970,9 @@ This is a specifier; use `set-specifier' to change it.
     (Vscrollbar_height,
      list1 (Fcons (Qnil, make_int (DEFAULT_SCROLLBAR_HEIGHT))));
   set_specifier_caching (Vscrollbar_height,
-                        slot_offset (struct window,
-                                     scrollbar_height),
+                        offsetof (struct window, scrollbar_height),
                         some_window_value_changed,
-                        slot_offset (struct frame,
-                                     scrollbar_height),
+                        offsetof (struct frame, scrollbar_height),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("horizontal-scrollbar-visible-p", &Vhorizontal_scrollbar_visible_p /*
@@ -987,11 +983,11 @@ This is a specifier; use `set-specifier' to change it.
   set_specifier_fallback (Vhorizontal_scrollbar_visible_p,
                          list1 (Fcons (Qnil, Qt)));
   set_specifier_caching (Vhorizontal_scrollbar_visible_p,
-                        slot_offset (struct window,
-                                     horizontal_scrollbar_visible_p),
+                        offsetof (struct window,
+                                  horizontal_scrollbar_visible_p),
                         some_window_value_changed,
-                        slot_offset (struct frame,
-                                     horizontal_scrollbar_visible_p),
+                        offsetof (struct frame,
+                                  horizontal_scrollbar_visible_p),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("vertical-scrollbar-visible-p", &Vvertical_scrollbar_visible_p /*
@@ -1002,11 +998,11 @@ This is a specifier; use `set-specifier' to change it.
   set_specifier_fallback (Vvertical_scrollbar_visible_p,
                          list1 (Fcons (Qnil, Qt)));
   set_specifier_caching (Vvertical_scrollbar_visible_p,
-                        slot_offset (struct window,
-                                     vertical_scrollbar_visible_p),
+                        offsetof (struct window,
+                                  vertical_scrollbar_visible_p),
                         vertical_scrollbar_changed_in_window,
-                        slot_offset (struct frame,
-                                     vertical_scrollbar_visible_p),
+                        offsetof (struct frame,
+                                  vertical_scrollbar_visible_p),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("scrollbar-on-left-p", &Vscrollbar_on_left_p /*
@@ -1030,11 +1026,9 @@ This is a specifier; use `set-specifier' to change it.
   }
 
   set_specifier_caching (Vscrollbar_on_left_p,
-                        slot_offset (struct window,
-                                     scrollbar_on_left_p),
+                        offsetof (struct window, scrollbar_on_left_p),
                         vertical_scrollbar_changed_in_window,
-                        slot_offset (struct frame,
-                                     scrollbar_on_left_p),
+                        offsetof (struct frame, scrollbar_on_left_p),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("scrollbar-on-top-p", &Vscrollbar_on_top_p /*
@@ -1045,11 +1039,9 @@ This is a specifier; use `set-specifier' to change it.
   set_specifier_fallback (Vscrollbar_on_top_p,
                          list1 (Fcons (Qnil, Qnil)));
   set_specifier_caching (Vscrollbar_on_top_p,
-                        slot_offset (struct window,
-                                     scrollbar_on_top_p),
+                        offsetof (struct window, scrollbar_on_top_p),
                         some_window_value_changed,
-                        slot_offset (struct frame,
-                                     scrollbar_on_top_p),
+                        offsetof (struct frame, scrollbar_on_top_p),
                         frame_size_slipped);
 }
 
@@ -1059,8 +1051,7 @@ complex_vars_of_scrollbar (void)
   Vscrollbar_pointer_glyph = Fmake_glyph_internal (Qpointer);
 
   set_specifier_caching (XGLYPH (Vscrollbar_pointer_glyph)->image,
-                        slot_offset (struct window,
-                                     scrollbar_pointer),
+                        offsetof (struct window, scrollbar_pointer),
                         scrollbar_pointer_changed_in_window,
                         0, 0);
 }
index e447d5c..e8c51f8 100644 (file)
@@ -281,6 +281,15 @@ error_check_##type##_specifier_data (struct Lisp_Specifier *sp)            \
   assert (SPECIFIER_TYPE_P (sp, type));                                        \
   return (struct type##_specifier *) sp->data;                         \
 }                                                                      \
+INLINE struct Lisp_Specifier *                                         \
+error_check_##type##_specifier_type (Lisp_Object obj);                 \
+INLINE struct Lisp_Specifier *                                         \
+error_check_##type##_specifier_type (Lisp_Object obj)                  \
+{                                                                      \
+  struct Lisp_Specifier *sp = XSPECIFIER (obj);                                \
+  assert (SPECIFIER_TYPE_P (sp, type));                                        \
+  return sp;                                                           \
+}                                                                      \
 DECLARE_NOTHING
 #else
 #define DECLARE_SPECIFIER_TYPE(type)                           \
@@ -343,10 +352,19 @@ do {                                                                      \
      : (sp)->data))
 #endif
 
-/* #### Need to create ERROR_CHECKING versions of these. */
+#ifdef ERROR_CHECK_TYPECHECK
+# define XSPECIFIER_TYPE(x, type)      \
+   error_check_##type##_specifier_type (x)
+# define XSETSPECIFIER_TYPE(x, p, type)        do              \
+{                                                      \
+  XSETSPECIFIER (x, p);                                        \
+  assert (SPECIFIER_TYPEP (XSPECIFIER(x), type));      \
+} while (0)
+#else
+# define XSPECIFIER_TYPE(x, type) XSPECIFIER (x)
+# define XSETSPECIFIER_TYPE(x, p, type) XSETSPECIFIER (x, p)
+#endif /* ERROR_CHECK_TYPE_CHECK */
 
-#define XSPECIFIER_TYPE(x, type) XSPECIFIER (x)
-#define XSETSPECIFIER_TYPE(x, p, type) XSETSPECIFIER (x, p)
 #define SPECIFIER_TYPEP(x, type)                               \
   (SPECIFIERP (x) && SPECIFIER_TYPE_P (XSPECIFIER (x), type))
 #define CHECK_SPECIFIER_TYPE(x, type) do {             \
index 7ae439d..2e6a4e3 100644 (file)
@@ -293,6 +293,7 @@ void vars_of_font_lock (void);
 void reinit_vars_of_font_lock (void);
 void vars_of_frame_tty (void);
 void vars_of_frame_mswindows (void);
+void reinit_vars_of_frame_mswindows (void);
 void vars_of_frame_x (void);
 void vars_of_frame (void);
 void vars_of_glyphs_x (void);
index 7f5486b..99b4313 100644 (file)
@@ -2145,9 +2145,9 @@ hft_reset (struct console *con)
  */
 
 #ifdef __cplusplus
-  extern "C" int _start ();
+  extern "C" int _start (void);
 #else
-  extern int _start ();
+  extern int _start (void);
 #endif
 
 #ifndef HAVE_TEXT_START
index cc8f2de..c7e29cb 100644 (file)
@@ -203,10 +203,6 @@ Boston, MA 02111-1307, USA.  */
 #define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
 #endif
 
-#if !defined (USG)  && !defined (WINDOWSNT)
-# define HAVE_FSYNC
-#endif
-
 #ifndef MAXPATHLEN
 /* in 4.1, param.h fails to define this. */
 #define MAXPATHLEN 1024
index 6beecc5..1c5529e 100644 (file)
@@ -26,18 +26,9 @@ Boston, MA 02111-1307, USA.  */
 #include "lisp.h" /* For encapsulated open, close, read */
 #include "device.h" /* For DEVICE_BAUD_RATE */
 #else /* not emacs */
-#if defined(USG) || defined(STDC_HEADERS)
-#define memcpy(d, s, n) memcpy ((d), (s), (n))
-#endif
 
-#ifdef STDC_HEADERS
 #include <stdlib.h>
 #include <string.h>
-#else
-char *getenv ();
-char *malloc ();
-char *realloc ();
-#endif
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -337,8 +328,6 @@ static int name_match ();
 
    If BP is zero, space is dynamically allocated.  */
 
-extern char *getenv ();
-
 int
 tgetent (bp, name)
      char *bp;
@@ -365,7 +354,7 @@ tgetent (bp, name)
      it is the entry itself, but only if
      the name the caller requested matches the TERM variable.  */
 
-  if (tem && !IS_DIRECTORY_SEP (*tem) && !strcmp (name, (char *) getenv ("TERM")))
+  if (tem && !IS_DIRECTORY_SEP (*tem) && !strcmp (name, getenv ("TERM")))
     {
       indirect = tgetst1 (find_capability (tem, "tc"), 0);
       if (!indirect)
index ab7e16d..6e2be07 100644 (file)
@@ -296,9 +296,9 @@ x_get_button_size (struct frame *f, Lisp_Object window,
        return XINT (f->toolbar_size[pos]);
 
       if (vert)
-       size = glyph_height (glyph, Vdefault_face, 0, window);
+       size = glyph_height (glyph, window);
       else
-       size = glyph_width (glyph, Vdefault_face, 0, window);
+       size = glyph_width (glyph, window);
     }
 
   if (!size)
index 31732af..cff25ac 100644 (file)
@@ -1434,8 +1434,7 @@ For the other vector formats (specifying blank areas of the toolbar):
      automatically knew about specifier fallbacks, so we didn't
      have to do it ourselves. */
   set_specifier_caching (Vdefault_toolbar,
-                        slot_offset (struct window,
-                                     default_toolbar),
+                        offsetof (struct window, default_toolbar),
                         default_toolbar_specs_changed,
                         0, 0);
 
@@ -1447,8 +1446,7 @@ See `default-toolbar' for a description of a valid toolbar instantiator.
 */ );
   Vtoolbar[TOP_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[TOP_TOOLBAR]),
+                        offsetof (struct window, toolbar[TOP_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1465,8 +1463,7 @@ displayed even if you provide a value for `bottom-toolbar'.
 */ );
   Vtoolbar[BOTTOM_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[BOTTOM_TOOLBAR]),
+                        offsetof (struct window, toolbar[BOTTOM_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1483,8 +1480,7 @@ displayed even if you provide a value for `left-toolbar'.
 */ );
   Vtoolbar[LEFT_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[LEFT_TOOLBAR]),
+                        offsetof (struct window, toolbar[LEFT_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1501,8 +1497,7 @@ displayed even if you provide a value for `right-toolbar'.
 */ );
   Vtoolbar[RIGHT_TOOLBAR] = Fmake_specifier (Qtoolbar);
   set_specifier_caching (Vtoolbar[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar[RIGHT_TOOLBAR]),
+                        offsetof (struct window, toolbar[RIGHT_TOOLBAR]),
                         toolbar_specs_changed,
                         0, 0);
 
@@ -1556,11 +1551,9 @@ is not visible, so it is expanded to take up the slack.
 */ );
   Vdefault_toolbar_height = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_toolbar_height,
-                        slot_offset (struct window,
-                                     default_toolbar_height),
+                        offsetof (struct window, default_toolbar_height),
                         default_toolbar_size_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_height),
+                        offsetof (struct frame, default_toolbar_height),
                         default_toolbar_size_changed_in_frame);
 
   DEFVAR_SPECIFIER ("default-toolbar-width", &Vdefault_toolbar_width /*
@@ -1571,11 +1564,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vdefault_toolbar_width = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_toolbar_width,
-                        slot_offset (struct window,
-                                     default_toolbar_width),
+                        offsetof (struct window, default_toolbar_width),
                         default_toolbar_size_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_width),
+                        offsetof (struct frame, default_toolbar_width),
                         default_toolbar_size_changed_in_frame);
 
   DEFVAR_SPECIFIER ("top-toolbar-height",
@@ -1587,11 +1578,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[TOP_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[TOP_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[TOP_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[TOP_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[TOP_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("bottom-toolbar-height",
@@ -1603,11 +1592,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[BOTTOM_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[BOTTOM_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[BOTTOM_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[BOTTOM_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[BOTTOM_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("left-toolbar-width",
@@ -1619,11 +1606,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[LEFT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[LEFT_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[LEFT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[LEFT_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[LEFT_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("right-toolbar-width",
@@ -1635,11 +1620,9 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_size[RIGHT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_size[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_size[RIGHT_TOOLBAR]),
+                        offsetof (struct window, toolbar_size[RIGHT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_size[RIGHT_TOOLBAR]),
+                        offsetof (struct frame, toolbar_size[RIGHT_TOOLBAR]),
                         frame_size_slipped);
 
   fb = Qnil;
@@ -1700,11 +1683,9 @@ the value in a window domain will not.
 */ );
   Vdefault_toolbar_border_width = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vdefault_toolbar_border_width,
-                        slot_offset (struct window,
-                                     default_toolbar_border_width),
+                        offsetof (struct window, default_toolbar_border_width),
                         default_toolbar_border_width_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_border_width),
+                        offsetof (struct frame, default_toolbar_border_width),
                         default_toolbar_border_width_changed_in_frame);
 
   DEFVAR_SPECIFIER ("top-toolbar-border-width",
@@ -1716,11 +1697,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[TOP_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[TOP_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[TOP_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[TOP_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[TOP_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("bottom-toolbar-border-width",
@@ -1732,11 +1713,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[BOTTOM_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[BOTTOM_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[BOTTOM_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[BOTTOM_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[BOTTOM_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("left-toolbar-border-width",
@@ -1748,11 +1729,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[LEFT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[LEFT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[LEFT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[LEFT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[LEFT_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("right-toolbar-border-width",
@@ -1764,11 +1745,11 @@ See `default-toolbar-height' for more information.
 */ );
   Vtoolbar_border_width[RIGHT_TOOLBAR] = Fmake_specifier (Qnatnum);
   set_specifier_caching (Vtoolbar_border_width[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_border_width[RIGHT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_border_width[RIGHT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_border_width[RIGHT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_border_width[RIGHT_TOOLBAR]),
                         frame_size_slipped);
 
   fb = Qnil;
@@ -1812,11 +1793,9 @@ visibility specifiers have a fallback value of true.
 */ );
   Vdefault_toolbar_visible_p = Fmake_specifier (Qboolean);
   set_specifier_caching (Vdefault_toolbar_visible_p,
-                        slot_offset (struct window,
-                                     default_toolbar_visible_p),
+                        offsetof (struct window, default_toolbar_visible_p),
                         default_toolbar_visible_p_changed_in_window,
-                        slot_offset (struct frame,
-                                     default_toolbar_visible_p),
+                        offsetof (struct frame, default_toolbar_visible_p),
                         default_toolbar_visible_p_changed_in_frame);
 
   DEFVAR_SPECIFIER ("top-toolbar-visible-p",
@@ -1828,11 +1807,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[TOP_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[TOP_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[TOP_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[TOP_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[TOP_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[TOP_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("bottom-toolbar-visible-p",
@@ -1844,11 +1823,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[BOTTOM_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[BOTTOM_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[BOTTOM_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[BOTTOM_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[BOTTOM_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[BOTTOM_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("left-toolbar-visible-p",
@@ -1860,11 +1839,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[LEFT_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[LEFT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[LEFT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[LEFT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[LEFT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[LEFT_TOOLBAR]),
                         frame_size_slipped);
 
   DEFVAR_SPECIFIER ("right-toolbar-visible-p",
@@ -1876,11 +1855,11 @@ See `default-toolbar-visible-p' for more information.
 */ );
   Vtoolbar_visible_p[RIGHT_TOOLBAR] = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_visible_p[RIGHT_TOOLBAR],
-                        slot_offset (struct window,
-                                     toolbar_visible_p[RIGHT_TOOLBAR]),
+                        offsetof (struct window,
+                                  toolbar_visible_p[RIGHT_TOOLBAR]),
                         toolbar_geometry_changed_in_window,
-                        slot_offset (struct frame,
-                                     toolbar_visible_p[RIGHT_TOOLBAR]),
+                        offsetof (struct frame,
+                                  toolbar_visible_p[RIGHT_TOOLBAR]),
                         frame_size_slipped);
 
   /* initially, top inherits from default; this can be
@@ -1902,8 +1881,7 @@ This is a specifier; use `set-specifier' to change it.
 */ );
   Vtoolbar_buttons_captioned_p = Fmake_specifier (Qboolean);
   set_specifier_caching (Vtoolbar_buttons_captioned_p,
-                        slot_offset (struct window,
-                                     toolbar_buttons_captioned_p),
+                        offsetof (struct window, toolbar_buttons_captioned_p),
                         toolbar_buttons_captioned_p_changed,
                         0, 0);
   set_specifier_fallback (Vtoolbar_buttons_captioned_p,
index 50f5b21..933097e 100644 (file)
@@ -439,7 +439,6 @@ write_segment (int new, char *ptr, char *end)
 {
   int i, nwrite, ret;
   char buf[80];
-  extern int errno;
   char zeros[UnexBlockSz];
 
   for (i = 0; ptr < end;)
index a8045f0..9602c10 100644 (file)
@@ -31,6 +31,7 @@ Boston, MA 02111-1307, USA.  */
 #include <sys/stat.h>
 #include <sys/mman.h>
 #include <stdio.h>
+#include <errno.h>
 #include <varargs.h>
 #include <filehdr.h>
 #include <aouthdr.h>
@@ -54,9 +55,6 @@ static void mark_x (char *);
        if (lseek (_fd, _position, L_SET) != _position) \
          fatal_unexec (_error_message, _error_arg);
 
-extern int errno;
-extern char *strerror ();
-
 void *sbrk();
 
 #define EEOF -1
index 06bb930..7c885d5 100644 (file)
@@ -136,7 +136,7 @@ before writing it (above and beyond the number of bytes of actual
 program text).  HDR's standard fields are already correct, except that
 this adjustment to the `a_text' field has not yet been made;
 thus, the amount of offset can depend on the data in the file.
-  
+
 * A_TEXT_SEEK(HDR)
 
 If defined, this macro specifies the number of bytes to seek into the
@@ -186,19 +186,12 @@ pointer looks like an int) but not on all machines.
 #  undef _POSIX_SOURCE
 # endif
 
-# if defined(__lucid) && !defined(__STDC_EXTENDED__)
-#  define __STDC_EXTENDED__ 1
-# endif
-
 # include <stddef.h>
 # include <stdlib.h>
 # include <unistd.h>
 # include <string.h>
 # include <stddef.h>
-
-# ifdef __lucid
-#  include <sysent.h>
-# endif
+# include <errno.h>
 
 #endif
 
@@ -443,7 +436,7 @@ unexec (new_name, a_name, data_start, bss_start, entry_address)
     {
       close (new);
       /* unlink (new_name);            / * Failed, unlink new a.out */
-      return -1;       
+      return -1;
     }
 
   close (new);
@@ -998,7 +991,7 @@ copy_text_and_data (int new, int a_out)
     char c;
     int mcount_address, mcount_offset, count;
     extern char *_execname;
-   
+
 
     /* The use of _execname is incompatible with RISCiX 1.1 */
     sprintf (command, "nm %s | fgrep mcount", _execname);
@@ -1018,7 +1011,7 @@ copy_text_and_data (int new, int a_out)
     {
       sprintf (errbuf, "Failed to execute the command '%s'\n", command);
       PERROR (errbuf);
-    }  
+    }
 
     sscanf(address_text, "%x", &mcount_address);
     ptr = (char *) unexec_text_start;
@@ -1076,7 +1069,6 @@ write_segment (new, ptr, end)
 #if 0
   char buf[80];
 #endif
-  extern int errno;
   /* This is the normal amount to write at once.
      It is the size of block that NFS uses.  */
   int writesize = 1 << 13;
index 5cb73b3..0a97488 100644 (file)
@@ -40,6 +40,7 @@ Tweaked 26-Feb-94 by Shawn Carey for use with FreeBSD-1.1 shared libraries.
 #include <sys/types.h>
 #include <string.h>
 #include <stdio.h>
+#include <errno.h>
 #include <a.out.h>
 #include <unistd.h>
 #include <ctype.h>
@@ -95,7 +96,6 @@ int run_time_remap (char *dummy);
 /********************** Variables **********************************/
 
 /* for reporting error messages from system calls */
-extern int errno;
 extern int _DYNAMIC;
 extern char **environ;             
 
index 607cd73..9bca2a9 100644 (file)
@@ -40,6 +40,7 @@ Modified Jan 93 by Hamish Macdonald for HPUX
 #include <sys/types.h>
 #include <string.h>
 #include <stdio.h>
+#include <errno.h>
 #include <signal.h>
 #ifdef __hp9000s300
 # include </usr/include/debug.h>
@@ -87,7 +88,6 @@ int run_time_remap (char *dummy);
 
 /* for reporting error messages from system calls */
 extern int sys_nerr;
-extern int errno;
 extern int _DYNAMIC;
 extern char **environ;             
 
index 486646b..ca497ae 100644 (file)
@@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA.  */
 #include <sys/file.h>
 #include <sys/stat.h>
 #include <stdio.h>
+#include <errno.h>
 #include <varargs.h>
 
 #ifdef MACH
@@ -95,7 +96,6 @@ static void mark_x ();
        if (lseek (_fd, _position, L_SET) != _position) \
          fatal_unexec (_error_message, _error_arg);
 
-extern int errno;
 extern char *strerror ();
 #define EEOF -1
 
index 80934b9..9281bd8 100644 (file)
@@ -1148,7 +1148,7 @@ be used.  Otherwise, the selected frame is used.
   return FRAME_MINIBUF_WINDOW (decode_frame_or_selected (con_dev_or_frame));
 }
 
-DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, 1, 1, 0, /*
+DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, 0, 1, 0, /*
 Return non-nil if WINDOW is a minibuffer window.
 */
        (window))
@@ -1437,22 +1437,23 @@ Return the number of columns by which WINDOW is scrolled from left margin.
   return make_int (decode_window (window)->hscroll);
 }
 
-#ifdef MODELINE_IS_SCROLLABLE
 DEFUN ("modeline-hscroll", Fmodeline_hscroll, 0, 1, 0, /*
-Return the number of columns by which WINDOW's modeline is scrolled from
-left margin. If the window has no modeline, return nil.
+Return the horizontal scrolling ammount of WINDOW's modeline.
+If the window has no modeline, return nil.
 */
        (window))
 {
   struct window *w = decode_window (window);
 
-  return (WINDOW_HAS_MODELINE_P (w)) ? make_int (w->modeline_hscroll) : Qnil;
+  return (WINDOW_HAS_MODELINE_P (w)) ? make_int ((int) w->modeline_hscroll) :
+    Qnil;
 }
 
 DEFUN ("set-modeline-hscroll", Fset_modeline_hscroll, 2, 2, 0, /*
-Set number of columns WINDOW's modeline is scrolled from left margin to NCOL.
-NCOL should be zero or positive. If NCOL is negative, it will be forced to 0.
-If the window has no modeline, do nothing and return nil.
+Set the horizontal scrolling ammount of WINDOW's modeline to NCOL.
+If NCOL is negative, it will silently be forced to 0.
+If the window has no modeline, return nil. Otherwise, return the actual
+value that was set.
 */
        (window, ncol))
 {
@@ -1460,18 +1461,20 @@ If the window has no modeline, do nothing and return nil.
 
   if (WINDOW_HAS_MODELINE_P (w))
     {
-      int ncols;
+      Charcount ncols;
+
       CHECK_INT (ncol);
-      ncols = XINT (ncol);
-      if (ncols < 0) ncols = 0;
-      if (w->modeline_hscroll != ncols)
-       MARK_MODELINE_CHANGED;
-      w->modeline_hscroll = ncols;
-      return ncol;
+      ncols = (XINT (ncol) <= 0) ? 0 : (Charcount) XINT (ncol);
+      if (ncols != w->modeline_hscroll)
+       {
+         MARK_MODELINE_CHANGED;
+         w->modeline_hscroll = ncols;
+       }
+      return make_int ((int) ncols);
     }
+
   return Qnil;
 }
-#endif /* MODELINE_IS_SCROLLABLE */
 
 DEFUN ("set-window-hscroll", Fset_window_hscroll, 2, 2, 0, /*
 Set number of columns WINDOW is scrolled from left margin to NCOL.
@@ -4050,12 +4053,12 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
     fheight = XINT (Vwindow_pixel_scroll_increment);
   else if (!NILP (Vwindow_pixel_scroll_increment));
     default_face_height_and_width (window, &fheight, &fwidth);
-  
+
   if (Dynarr_length (dla) >= 1)
     modeline = Dynarr_atp (dla, 0)->modeline;
 
   dl = Dynarr_atp (dla, modeline);
-    
+
   if (value > 0)
     {
       /* Go for partial display line scrolling. This just means bumping
@@ -4074,7 +4077,7 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
        {
          int vtarget;
          Bufpos startp, old_start;
-         
+
          if (WINDOW_TEXT_TOP_CLIP (w))
            {
              WINDOW_TEXT_TOP_CLIP (w) = 0;
@@ -4083,7 +4086,7 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
 
          old_start = marker_position (w->start[CURRENT_DISP]);
          startp = vmotion (w, old_start, value, &vtarget);
-         
+
          if (vtarget < value &&
              (w->window_end_pos[CURRENT_DISP] == -1
               || (BUF_Z (b) - w->window_end_pos[CURRENT_DISP] > BUF_ZV (b))))
@@ -4098,7 +4101,7 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
              w->force_start = 1;
              w->start_at_line_beg = beginning_of_line_p (b, startp);
              MARK_WINDOWS_CHANGED (w);
-             
+
              if (!point_would_be_visible (w, startp, XINT (point)))
                {
                  if (selected)
@@ -4132,16 +4135,16 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
        {
          int vtarget;
          Bufpos startp, old_start;
-         
+
          if (WINDOW_TEXT_TOP_CLIP (w))
            {
              WINDOW_TEXT_TOP_CLIP (w) = 0;
              MARK_WINDOWS_CHANGED (w);
            }
-             
+
          old_start = marker_position (w->start[CURRENT_DISP]);
          startp = vmotion (w, old_start, value, &vtarget);
-         
+
          if (vtarget > value
              && marker_position (w->start[CURRENT_DISP]) == BUF_BEGV (b))
            {
@@ -4155,16 +4158,16 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction,
              w->force_start = 1;
              w->start_at_line_beg = beginning_of_line_p (b, startp);
              MARK_WINDOWS_CHANGED (w);
-             
+
              if (!point_would_be_visible (w, startp, XINT (point)))
                {
                  Bufpos new_point;
-                 
+
                  if (MINI_WINDOW_P (w))
                    new_point = startp;
                  else
                    new_point = start_of_last_line (w, startp);
-                 
+
                  if (selected)
                    BUF_SET_PT (b, new_point);
                  else
@@ -4694,7 +4697,7 @@ struct saved_window
   int pixel_width;
   int pixel_height;
   int hscroll;
-  int modeline_hscroll;
+  Charcount modeline_hscroll;
   int parent_index;           /* index into saved_windows */
   int prev_index;             /* index into saved_windows */
   char start_at_line_beg; /* boolean */
@@ -4956,7 +4959,7 @@ by `current-window-configuration' (which see).
   int previous_pixel_width;
   int previous_minibuf_height, previous_minibuf_top,previous_minibuf_width;
   int real_font_height;
-  int converted_minibuf_height,target_minibuf_height; 
+  int converted_minibuf_height,target_minibuf_height;
   int specpdl_count = specpdl_depth ();
 
   GCPRO1 (configuration);
@@ -5024,7 +5027,7 @@ by `current-window-configuration' (which see).
 #if 0
       /* JV: This is bogus,
         First of all, the units are inconsistent. The frame sizes are measured
-        in characters but the window sizes are stored in pixels. So if a 
+        in characters but the window sizes are stored in pixels. So if a
         font size change happened between saving and restoring, the
         frame "sizes" maybe equal but the windows still should be
         resized. This is tickled alot by the new "character size
@@ -5045,7 +5048,7 @@ by `current-window-configuration' (which see).
          || config->frame_width != FRAME_WIDTH (f))
        change_frame_size (f, config->frame_height, config->frame_width, 0);
 #endif
-      
+
       previous_pixel_top = XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top;
       previous_pixel_height = XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_height;
       previous_pixel_left = XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_left;
@@ -5055,7 +5058,7 @@ by `current-window-configuration' (which see).
 
       default_face_height_and_width (frame, &real_font_height, 0);
       assert(real_font_height > 0);
-  
+
       if (FRAME_HAS_MINIBUF_P (f) && ! FRAME_MINIBUF_ONLY_P (f))
        {
          previous_minibuf_height
@@ -5068,13 +5071,14 @@ by `current-window-configuration' (which see).
       else
        {
          previous_minibuf_height = 0;
+         previous_minibuf_top = 0;
          previous_minibuf_width = 0;
        }
       converted_minibuf_height =
        (previous_minibuf_height % real_font_height) == 0 ?
        - (previous_minibuf_height / real_font_height ) :    /* lines */
            previous_minibuf_height;   /* pixels */
-           
+
       /* Temporarily avoid any problems with windows that are smaller
         than they are supposed to be.  */
       window_min_height = 1;
@@ -5256,7 +5260,7 @@ by `current-window-configuration' (which see).
 
          #### Now we get more cases correct then ever before, but
         are we treating all? For instance what if the frames minibuf window
-        is no longer the same one? 
+        is no longer the same one?
       */
       target_minibuf_height = previous_minibuf_height;
       if (converted_minibuf_height &&
@@ -5279,7 +5283,7 @@ by `current-window-configuration' (which see).
          set_window_pixwidth  (FRAME_MINIBUF_WINDOW (f),
                            previous_minibuf_width, 0);
        }
-       
+
       /* This is a better way to deal with frame resizing, etc.
         What we _actually_ want is for the old (just restored)
         root window to fit
@@ -5294,7 +5298,7 @@ by `current-window-configuration' (which see).
       /* Note that this function also updates the subwindow
         "pixel_left"s */
       set_window_pixwidth (FRAME_ROOT_WINDOW (f), previous_pixel_width, 0);
-      
+
       /* If restoring in the current frame make the window current,
         otherwise just update the frame selected_window slot to be
         the restored current_window. */
@@ -5536,11 +5540,11 @@ its value is -not- saved.
 
   /* save the minibuffer height using the heuristics from
      change_frame_size_1 */
-  
+
   XSETFRAME (frame, f); /* frame could have been nil ! */
   default_face_height_and_width (frame, &real_font_height, 0);
   assert(real_font_height > 0);
-  
+
   if (FRAME_HAS_MINIBUF_P (f) && ! FRAME_MINIBUF_ONLY_P (f))
     minibuf_height = XWINDOW(FRAME_MINIBUF_WINDOW(f))->pixel_height;
   else
@@ -5606,7 +5610,7 @@ a non-nil result to be returned.
 
       if (NILP (pos))
        pos = Fwindow_point (window);
-      
+
       CHECK_INT (pos);
       point = XINT (pos);
 
@@ -5744,15 +5748,13 @@ syms_of_window (void)
   DEFSUBR (Fwindow_displayed_text_pixel_height);
   DEFSUBR (Fwindow_text_area_pixel_width);
   DEFSUBR (Fwindow_hscroll);
-#ifdef MODELINE_IS_SCROLLABLE
+  DEFSUBR (Fset_window_hscroll);
   DEFSUBR (Fmodeline_hscroll);
   DEFSUBR (Fset_modeline_hscroll);
-#endif /* MODELINE_IS_SCROLLABLE */
 #if 0 /* bogus FSF crock */
   DEFSUBR (Fwindow_redisplay_end_trigger);
   DEFSUBR (Fset_window_redisplay_end_trigger);
 #endif
-  DEFSUBR (Fset_window_hscroll);
   DEFSUBR (Fwindow_pixel_edges);
   DEFSUBR (Fwindow_text_area_pixel_edges);
   DEFSUBR (Fwindow_point);
@@ -5892,8 +5894,7 @@ This is a specifier; use `set-specifier' to change it.
   Fadd_spec_to_specifier (Vmodeline_shadow_thickness, make_int (2),
                          Qnil, Qnil, Qnil);
   set_specifier_caching (Vmodeline_shadow_thickness,
-                        slot_offset (struct window,
-                                     modeline_shadow_thickness),
+                        offsetof (struct window, modeline_shadow_thickness),
                         modeline_shadow_thickness_changed,
                         0, 0);
 
@@ -5905,8 +5906,7 @@ This is a specifier; use `set-specifier' to change it.
   set_specifier_fallback (Vhas_modeline_p,
                          list1 (Fcons (Qnil, Qt)));
   set_specifier_caching (Vhas_modeline_p,
-                        slot_offset (struct window,
-                                     has_modeline_p),
+                        offsetof (struct window, has_modeline_p),
                         /* #### It's strange that we need a special
                            flag to indicate that the shadow-thickness
                            has changed, but not one to indicate that
@@ -5928,8 +5928,8 @@ This is a specifier; use `set-specifier' to change it.
   set_specifier_fallback (Vvertical_divider_always_visible_p,
                          list1 (Fcons (Qnil, Qt)));
   set_specifier_caching (Vvertical_divider_always_visible_p,
-                        slot_offset (struct window,
-                                     vertical_divider_always_visible_p),
+                        offsetof (struct window,
+                                  vertical_divider_always_visible_p),
                         vertical_divider_changed_in_window,
                         0, 0);
 
@@ -5943,8 +5943,8 @@ This is a specifier; use `set-specifier' to change it.
   Fadd_spec_to_specifier (Vvertical_divider_shadow_thickness, make_int (2),
                          Qnil, Qnil, Qnil);
   set_specifier_caching (Vvertical_divider_shadow_thickness,
-                        slot_offset (struct window,
-                                     vertical_divider_shadow_thickness),
+                        offsetof (struct window,
+                                  vertical_divider_shadow_thickness),
                         vertical_divider_changed_in_window,
                         0, 0);
   DEFVAR_SPECIFIER ("vertical-divider-line-width", &Vvertical_divider_line_width /*
@@ -5974,8 +5974,8 @@ This is a specifier; use `set-specifier' to change it.
     set_specifier_fallback (Vvertical_divider_line_width, fb);
   }
   set_specifier_caching (Vvertical_divider_line_width,
-                         slot_offset (struct window,
-                                     vertical_divider_line_width),
+                         offsetof (struct window,
+                                  vertical_divider_line_width),
                         vertical_divider_changed_in_window,
                          0, 0);
 
@@ -6004,8 +6004,7 @@ This is a specifier; use `set-specifier' to change it.
     set_specifier_fallback (Vvertical_divider_spacing, fb);
   }
   set_specifier_caching (Vvertical_divider_spacing,
-                        slot_offset (struct window,
-                                     vertical_divider_spacing),
+                        offsetof (struct window, vertical_divider_spacing),
                         vertical_divider_changed_in_window,
                         0, 0);
 }
index 043a9fc..588187a 100644 (file)
@@ -129,7 +129,7 @@ struct window
   /* Number of columns display within the window is scrolled to the left. */
   int hscroll;
   /* Idem for the window's modeline */
-  int modeline_hscroll;
+  Charcount modeline_hscroll;
   /* Amount to clip off the top line for pixel-based scrolling. Point
      will remain constant but this will be incremented to
      incrementally shift lines up. */
index b4234ab..d1b19a2 100644 (file)
@@ -1,3 +1,17 @@
+2000-01-18  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.27 is released.
+
+1999-12-24  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * automated/syntax-tests.el: New file.
+       Add test for scan_words using forward-word and backword-word.
+
+2000-01-08  Martin Buchholz  <martin@xemacs.org>
+
+       * automated/mule-tests.el: 
+       Test resizing of small and big (> 8k bytes) strings.
+
 1999-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.26 is released.
index dea33ef..86c402d 100644 (file)
@@ -103,4 +103,61 @@ the Assert macro checks for correctness."
     (aset string 0 (make-char 'latin-iso8859-2 42))
     (Assert (eq (aref string 1) (make-char 'latin-iso8859-2 69))))
 
+  ;; Test strings waxing and waning across the 8k BIG_STRING limit (see alloc.c)
+  (defun charset-char-string (charset)
+    (let (lo hi string n)
+      (if (= (charset-chars charset) 94)
+         (setq lo 33 hi 126)
+       (setq lo 32 hi 127))
+      (if (= (charset-dimension charset) 1)
+         (progn
+           (setq string (make-string (1+ (- hi lo)) ??))
+           (setq n 0)
+           (loop for j from lo to hi do
+             (progn
+               (aset string n (make-char charset j))
+               (incf n)))
+           string)
+       (progn
+         (setq string (make-string (* (1+ (- hi lo)) (1+ (- hi lo))) ??))
+         (setq n 0)
+         (loop for j from lo to hi do
+           (loop for k from lo to hi do
+             (progn
+               (aset string n (make-char charset j k))
+               (incf n))))
+         string))))
+
+  ;; The following two used to crash xemacs!
+  (Assert (charset-char-string 'japanese-jisx0208))
+  (aset (make-string 9003 ??) 1 (make-char 'latin-iso8859-1 77))
+
+  (let ((greek-string (charset-char-string 'greek-iso8859-7))
+       (string (make-string (* 96 60) ??)))
+    (loop for j from 0 below (length string) do
+      (aset string j (aref greek-string (mod j 96))))
+    (loop for k in '(0 1 58 59) do
+      (Assert (equal (substring string (* 96 k) (* 96 (1+ k))) greek-string))))
+
+  (let ((greek-string (charset-char-string 'greek-iso8859-7))
+       (string (make-string (* 96 60) ??)))
+   (loop for j from (1- (length string)) downto 0 do
+     (aset string j (aref greek-string (mod j 96))))
+   (loop for k in '(0 1 58 59) do
+     (Assert (equal (substring string (* 96 k) (* 96 (1+ k))) greek-string))))
+
+  (let ((ascii-string (charset-char-string 'ascii))
+       (string (make-string (* 94 60) (make-char 'greek-iso8859-7 57))))
+   (loop for j from 0 below (length string) do
+      (aset string j (aref ascii-string (mod j 94))))
+    (loop for k in '(0 1 58 59) do
+      (Assert (equal (substring string (* 94 k) (+ 94 (* 94 k))) ascii-string))))
+
+  (let ((ascii-string (charset-char-string 'ascii))
+       (string (make-string (* 94 60) (make-char 'greek-iso8859-7 57))))
+    (loop for j from (1- (length string)) downto 0 do
+      (aset string j (aref ascii-string (mod j 94))))
+    (loop for k in '(0 1 58 59) do
+      (Assert (equal (substring string (* 94 k) (* 94 (1+ k))) ascii-string))))
+
   )
index 67533cc..b9c04a1 100644 (file)
@@ -2,6 +2,10 @@
  (make-extent (point) (point))
  (setq im (make-glyph [xpm :file "xemacs-icon.xpm"])))
 
+(set-extent-begin-glyph 
+ (make-extent (point) (point))
+ (make-glyph [string :data "xemacs"]))
+
 (defun foo ()
   (interactive)
   (setq ok-select (not ok-select)))
@@ -64,6 +68,7 @@
  (setq tab (make-glyph 
            [tab-control :descriptor "My Tab"
                         :face highlight
+                        :orientation right
                         :properties (:items (["One" foo]
                                              ["Two" fee]
                                              ["Three" foo]))])))
 ;; normal pushbutton
 (set-extent-begin-glyph 
  (make-extent (point) (point))
- (make-glyph [button :descriptor ["A Big Button" foo ]]))
+ (setq pbutton
+       (make-glyph [button :descriptor ["A Big Button" foo ]])))
 
 ;; edit box
 (set-extent-begin-glyph 
index 97bafe3..40561bc 100644 (file)
@@ -2,8 +2,8 @@
 emacs_is_beta=t
 emacs_major_version=21
 emacs_minor_version=2
-emacs_beta_version=26
-xemacs_codename="Millenium"
+emacs_beta_version=27
+xemacs_codename="Hera"
 infodock_major_version=4
 infodock_minor_version=0
 infodock_build_version=8