XEmacs 21.2.27 "Hera".
authortomo <tomo>
Wed, 19 Jan 2000 08:37:29 +0000 (08:37 +0000)
committertomo <tomo>
Wed, 19 Jan 2000 08:37:29 +0000 (08:37 +0000)
150 files changed:
CHANGES-beta
ChangeLog
README.packages
config.guess
config.sub
configure
configure.in
configure.usage
etc/NEWS
etc/TUTORIAL.de
info/info.info
info/internals.info
info/lispref.info
info/lispref.info-8
info/lispref.info-9
info/new-users-guide.info
info/xemacs-faq.info
info/xemacs-faq.info-1
info/xemacs-faq.info-2
info/xemacs.info
info/xemacs.info-1
info/xemacs.info-3
info/xemacs.info-4
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/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/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 ecb6c94..690a98e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,48 @@
+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 c022376..d57c721 100755 (executable)
--- a/configure
+++ b/configure
@@ -515,10 +515,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\""
@@ -830,7 +831,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:834: checking whether ln -s works" >&5
+echo "configure:835: checking whether ln -s works" >&5
 
 rm -f conftestdata
 if ln -s X conftestdata 2>/dev/null
@@ -848,7 +849,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"
@@ -1075,7 +1076,7 @@ EOF
 
 
 echo $ac_n "checking "host system type"""... $ac_c" 1>&6
-echo "configure:1079: checking "host system type"" >&5
+echo "configure:1080: 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/'`
@@ -1569,7 +1570,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:1573: checking for $ac_word" >&5
+echo "configure:1574: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1596,7 +1597,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:1600: checking for $ac_word" >&5
+echo "configure:1601: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1644,7 +1645,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:1648: checking for $ac_word" >&5
+echo "configure:1649: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1673,7 +1674,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1677: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1678: 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'
@@ -1686,12 +1687,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1690 "configure"
+#line 1691 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1696: \"$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
@@ -1719,19 +1720,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:1723: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1724: 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:1728: checking whether we are using GNU C" >&5
+echo "configure:1729: 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:1735: \"$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:1736: \"$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
@@ -1749,7 +1750,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:1753: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1754: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1782,7 +1783,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:1786: checking for $ac_word" >&5
+echo "configure:1787: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1809,7 +1810,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:1813: checking for $ac_word" >&5
+echo "configure:1814: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1857,7 +1858,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:1861: checking for $ac_word" >&5
+echo "configure:1862: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1886,7 +1887,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1890: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1891: 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'
@@ -1899,12 +1900,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1903 "configure"
+#line 1904 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1909: \"$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
@@ -1932,19 +1933,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:1936: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1937: 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:1941: checking whether we are using GNU C" >&5
+echo "configure:1942: 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:1948: \"$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:1949: \"$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
@@ -1962,7 +1963,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:1966: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1967: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1995,7 +1996,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:1999: checking for $ac_word" >&5
+echo "configure:2000: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2022,7 +2023,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:2026: checking for $ac_word" >&5
+echo "configure:2027: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2070,7 +2071,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:2074: checking for $ac_word" >&5
+echo "configure:2075: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2099,7 +2100,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2103: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2104: 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'
@@ -2112,12 +2113,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 2116 "configure"
+#line 2117 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2122: \"$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
@@ -2145,19 +2146,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:2149: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2150: 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:2154: checking whether we are using GNU C" >&5
+echo "configure:2155: 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:2161: \"$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:2162: \"$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
@@ -2175,7 +2176,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:2179: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2180: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -2212,7 +2213,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:2216: checking how to run the C preprocessor" >&5
+echo "configure:2217: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2225,13 +2226,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 2229 "configure"
+#line 2230 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2236: \"$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
   :
@@ -2242,13 +2243,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2246 "configure"
+#line 2247 "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:2252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2253: \"$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
   :
@@ -2259,13 +2260,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2263 "configure"
+#line 2264 "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:2269: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2270: \"$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
   :
@@ -2290,9 +2291,9 @@ echo "$ac_t""$CPP" 1>&6
 
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:2294: checking for AIX" >&5
+echo "configure:2295: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2296 "configure"
+#line 2297 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -2319,9 +2320,9 @@ rm -f conftest*
 
 
 echo $ac_n "checking for GNU libc""... $ac_c" 1>&6
-echo "configure:2323: checking for GNU libc" >&5
+echo "configure:2324: checking for GNU libc" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2325 "configure"
+#line 2326 "configure"
 #include "confdefs.h"
 #include <features.h>
 int main() {
@@ -2333,7 +2334,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2337: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2338: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_glibc=yes
 else
@@ -2355,7 +2356,7 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 2359 "configure"
+#line 2360 "configure"
 #include "confdefs.h"
 int main () {
 #if defined __SUNPRO_C
@@ -2367,7 +2368,7 @@ return 0;
 #endif
 }
 EOF
-if { (eval echo configure:2371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:2372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -2540,6 +2541,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
@@ -2557,6 +2564,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
@@ -2641,7 +2654,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:2645: checking for dynodump" >&5
+echo "configure:2658: checking for dynodump" >&5
 if test "$unexec" != "unexsol2.o"; then
   echo "$ac_t""no" 1>&6
 else
@@ -2679,12 +2692,12 @@ if test "$unexec" = "unexaix.o"; then
   done
   
 echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6
-echo "configure:2683: checking for terminateAndUnload in -lC" >&5
+echo "configure:2696: 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 2688 "configure"
+#line 2701 "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
@@ -2695,7 +2708,7 @@ int main() {
 terminateAndUnload()
 ; return 0; }
 EOF
-if { (eval echo configure:2699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2712: \"$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
@@ -2799,7 +2812,7 @@ fi
 
 if test "$add_runtime_path" = "yes"; then
       echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6
-echo "configure:2803: checking "for runtime libraries flag"" >&5
+echo "configure:2816: checking "for runtime libraries flag"" >&5
   case "$opsys" in
     sol2 ) dash_r="-R" ;;
     decosf* | linux* | irix*) dash_r="-rpath " ;;
@@ -2821,14 +2834,14 @@ if test "$GCC" = "yes"; then
   done
 fi
         cat > conftest.$ac_ext <<EOF
-#line 2825 "configure"
+#line 2838 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   dash_r="$try_dash_r"
 else
@@ -2930,10 +2943,10 @@ else
 fi
 after_morecore_hook_exists=yes
 echo $ac_n "checking for malloc_get_state""... $ac_c" 1>&6
-echo "configure:2934: checking for malloc_get_state" >&5
+echo "configure:2947: checking for malloc_get_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2937 "configure"
+#line 2950 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_get_state(); below.  */
@@ -2956,7 +2969,7 @@ malloc_get_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2973: \"$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
@@ -2976,10 +2989,10 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6
-echo "configure:2980: checking for malloc_set_state" >&5
+echo "configure:2993: checking for malloc_set_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2983 "configure"
+#line 2996 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_set_state(); below.  */
@@ -3002,7 +3015,7 @@ malloc_set_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3019: \"$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
@@ -3022,16 +3035,16 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6
-echo "configure:3026: checking whether __after_morecore_hook exists" >&5
+echo "configure:3039: checking whether __after_morecore_hook exists" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3028 "configure"
+#line 3041 "configure"
 #include "confdefs.h"
 extern void (* __after_morecore_hook)();
 int main() {
 __after_morecore_hook = 0
 ; return 0; }
 EOF
-if { (eval echo configure:3035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3048: \"$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
@@ -3090,7 +3103,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:3094: checking for $ac_word" >&5
+echo "configure:3107: checking for $ac_word" >&5
 
 if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3145,7 +3158,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:3149: checking for a BSD compatible install" >&5
+echo "configure:3162: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 
   IFS="${IFS=  }"; ac_save_IFS="$IFS"; IFS=":"
@@ -3199,7 +3212,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:3203: checking for $ac_word" >&5
+echo "configure:3216: checking for $ac_word" >&5
 
 if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -3231,15 +3244,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:3235: checking for $ac_hdr" >&5
+echo "configure:3248: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3238 "configure"
+#line 3251 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3256: \"$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*
@@ -3272,15 +3285,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:3276: checking for $ac_hdr" >&5
+echo "configure:3289: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3279 "configure"
+#line 3292 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3297: \"$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*
@@ -3313,15 +3326,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:3317: checking for $ac_hdr" >&5
+echo "configure:3330: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3320 "configure"
+#line 3333 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3338: \"$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*
@@ -3351,10 +3364,10 @@ fi
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:3355: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3368: checking for sys/wait.h that is POSIX.1 compatible" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3358 "configure"
+#line 3371 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -3370,7 +3383,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:3374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -3394,10 +3407,10 @@ EOF
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3398: checking for ANSI C header files" >&5
+echo "configure:3411: checking for ANSI C header files" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3401 "configure"
+#line 3414 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3405,7 +3418,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:3409: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3422: \"$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*
@@ -3422,7 +3435,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 3426 "configure"
+#line 3439 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3440,7 +3453,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 3444 "configure"
+#line 3457 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3458,7 +3471,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 3462 "configure"
+#line 3475 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3469,7 +3482,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:3486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -3495,10 +3508,10 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3499: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3512: checking whether time.h and sys/time.h may both be included" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3502 "configure"
+#line 3515 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -3507,7 +3520,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:3511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3524: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -3531,10 +3544,10 @@ EOF
 fi
 
 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:3535: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:3548: checking for sys_siglist declaration in signal.h or unistd.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3538 "configure"
+#line 3551 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3546,7 +3559,7 @@ int main() {
 char *msg = *(sys_siglist + 1);
 ; return 0; }
 EOF
-if { (eval echo configure:3550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3563: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_decl_sys_siglist=yes
 else
@@ -3571,9 +3584,9 @@ fi
 
 
 echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6
-echo "configure:3575: checking for struct utimbuf" >&5
+echo "configure:3588: checking for struct utimbuf" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3577 "configure"
+#line 3590 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3592,7 +3605,7 @@ int main() {
 static struct utimbuf x; x.actime = x.modtime;
 ; return 0; }
 EOF
-if { (eval echo configure:3596: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3609: \"$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
@@ -3612,10 +3625,10 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3616: checking return type of signal handlers" >&5
+echo "configure:3629: checking return type of signal handlers" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3619 "configure"
+#line 3632 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3632,7 +3645,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:3636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3649: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -3654,10 +3667,10 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3658: checking for size_t" >&5
+echo "configure:3671: checking for size_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3661 "configure"
+#line 3674 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3688,10 +3701,10 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3692: checking for pid_t" >&5
+echo "configure:3705: checking for pid_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3695 "configure"
+#line 3708 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3722,10 +3735,10 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3726: checking for uid_t in sys/types.h" >&5
+echo "configure:3739: checking for uid_t in sys/types.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3729 "configure"
+#line 3742 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -3761,10 +3774,10 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:3765: checking for mode_t" >&5
+echo "configure:3778: checking for mode_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3768 "configure"
+#line 3781 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3795,10 +3808,10 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3799: checking for off_t" >&5
+echo "configure:3812: checking for off_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3802 "configure"
+#line 3815 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3829,10 +3842,10 @@ EOF
 fi
 
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3833: checking for ssize_t" >&5
+echo "configure:3846: checking for ssize_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3836 "configure"
+#line 3849 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3864,9 +3877,9 @@ fi
 
 
 echo $ac_n "checking for struct timeval""... $ac_c" 1>&6
-echo "configure:3868: checking for struct timeval" >&5
+echo "configure:3881: checking for struct timeval" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3870 "configure"
+#line 3883 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3882,7 +3895,7 @@ int main() {
 static struct timeval x; x.tv_sec = x.tv_usec;
 ; return 0; }
 EOF
-if { (eval echo configure:3886: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3899: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
   HAVE_TIMEVAL=yes
@@ -3904,10 +3917,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:3908: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:3921: checking whether struct tm is in sys/time.h or time.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3911 "configure"
+#line 3924 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
@@ -3915,7 +3928,7 @@ int main() {
 struct tm *tp; tp->tm_sec;
 ; return 0; }
 EOF
-if { (eval echo configure:3919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm=time.h
 else
@@ -3939,10 +3952,10 @@ EOF
 fi
 
 echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:3943: checking for tm_zone in struct tm" >&5
+echo "configure:3956: checking for tm_zone in struct tm" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3946 "configure"
+#line 3959 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -3950,7 +3963,7 @@ int main() {
 struct tm tm; tm.tm_zone;
 ; return 0; }
 EOF
-if { (eval echo configure:3954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3967: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_zone=yes
 else
@@ -3973,10 +3986,10 @@ EOF
 
 else
   echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:3977: checking for tzname" >&5
+echo "configure:3990: checking for tzname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3980 "configure"
+#line 3993 "configure"
 #include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
@@ -3986,7 +3999,7 @@ int main() {
 atoi(*tzname);
 ; return 0; }
 EOF
-if { (eval echo configure:3990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_var_tzname=yes
 else
@@ -4012,10 +4025,10 @@ fi
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4016: checking for working const" >&5
+echo "configure:4029: checking for working const" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4019 "configure"
+#line 4032 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4064,7 +4077,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:4068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4089,7 +4102,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:4093: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:4106: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 
 cat > conftestmake <<\EOF
@@ -4114,12 +4127,12 @@ fi
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4118: checking whether byte ordering is bigendian" >&5
+echo "configure:4131: 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 4123 "configure"
+#line 4136 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4130,11 +4143,11 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4147: \"$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 4138 "configure"
+#line 4151 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4145,7 +4158,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4149: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -4162,7 +4175,7 @@ fi
 rm -f conftest*
 if test $ac_cv_c_bigendian = unknown; then
 cat > conftest.$ac_ext <<EOF
-#line 4166 "configure"
+#line 4179 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -4175,7 +4188,7 @@ main () {
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:4179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_bigendian=no
 else
@@ -4202,10 +4215,10 @@ fi
 
 
 echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4206: checking size of short" >&5
+echo "configure:4219: checking size of short" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4209 "configure"
+#line 4222 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4216,7 +4229,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -4244,10 +4257,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:4248: checking size of int" >&5
+echo "configure:4261: checking size of int" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4251 "configure"
+#line 4264 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4258,7 +4271,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -4280,10 +4293,10 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4284: checking size of long" >&5
+echo "configure:4297: checking size of long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4287 "configure"
+#line 4300 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4294,7 +4307,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -4316,10 +4329,10 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4320: checking size of long long" >&5
+echo "configure:4333: checking size of long long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4323 "configure"
+#line 4336 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4330,7 +4343,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4347: \"$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
@@ -4352,10 +4365,10 @@ EOF
 
 
 echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4356: checking size of void *" >&5
+echo "configure:4369: checking size of void *" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4359 "configure"
+#line 4372 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4366,7 +4379,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4383: \"$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
@@ -4389,7 +4402,7 @@ EOF
 
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:4393: checking for long file names" >&5
+echo "configure:4406: 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:
@@ -4435,10 +4448,10 @@ fi
 
 
 echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:4439: checking for sin" >&5
+echo "configure:4452: checking for sin" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4442 "configure"
+#line 4455 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char sin(); below.  */
@@ -4461,7 +4474,7 @@ sin();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4478: \"$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
@@ -4479,12 +4492,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:4483: checking for sin in -lm" >&5
+echo "configure:4496: 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 4488 "configure"
+#line 4501 "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
@@ -4495,7 +4508,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:4499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4512: \"$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
@@ -4539,14 +4552,14 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4543 "configure"
+#line 4556 "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:4550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4563: \"$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:4567: checking type of mail spool file locking" >&5
+echo "configure:4580: 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:4584: checking for $ac_func" >&5
+
+cat > conftest.$ac_ext <<EOF
+#line 4587 "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:4610: \"$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:4592: checking for cma_open in -lpthreads" >&5
+echo "configure:4683: 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 4597 "configure"
+#line 4688 "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
@@ -4604,7 +4695,7 @@ int main() {
 cma_open()
 ; return 0; }
 EOF
-if { (eval echo configure:4608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4699: \"$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
@@ -4640,7 +4731,7 @@ fi
 esac
 
 echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6
-echo "configure:4644: checking whether the -xildoff compiler flag is required" >&5
+echo "configure:4735: 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;
@@ -4651,7 +4742,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:4655: checking for \"-z ignore\" linker flag" >&5
+echo "configure:4746: 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 ;;
@@ -4661,7 +4752,7 @@ fi
 
 
 echo "checking "for specified window system"" 1>&6
-echo "configure:4665: checking "for specified window system"" >&5
+echo "configure:4756: checking "for specified window system"" >&5
 
 if test "$with_x11" != "no"; then
     test "$x_includes $x_libraries" != "NONE NONE" && \
@@ -4694,7 +4785,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:4698: checking for X" >&5
+echo "configure:4789: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -4754,12 +4845,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 4758 "configure"
+#line 4849 "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:4763: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4854: \"$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*
@@ -4828,14 +4919,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 4832 "configure"
+#line 4923 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:4839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4930: \"$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.
@@ -4944,17 +5035,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:4948: checking whether -R must be followed by a space" >&5
+echo "configure:5039: 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 4951 "configure"
+#line 5042 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -4970,14 +5061,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 4974 "configure"
+#line 5065 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -5013,12 +5104,12 @@ ac_cv_lib_dnet_dnet_ntoa=no
 else
 
 echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:5017: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:5108: 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 5022 "configure"
+#line 5113 "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
@@ -5029,7 +5120,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5124: \"$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
@@ -5053,12 +5144,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:5057: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:5148: 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 5062 "configure"
+#line 5153 "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
@@ -5069,7 +5160,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5164: \"$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
@@ -5098,10 +5189,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:5102: checking for gethostbyname" >&5
+echo "configure:5193: checking for gethostbyname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5105 "configure"
+#line 5196 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -5124,7 +5215,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5219: \"$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
@@ -5145,12 +5236,12 @@ fi
     if test $ac_cv_func_gethostbyname = no; then
       
 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:5149: checking for gethostbyname in -lnsl" >&5
+echo "configure:5240: 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 5154 "configure"
+#line 5245 "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
@@ -5161,7 +5252,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:5165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5256: \"$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
@@ -5191,10 +5282,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:5195: checking for connect" >&5
+echo "configure:5286: checking for connect" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5198 "configure"
+#line 5289 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -5217,7 +5308,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5312: \"$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
@@ -5240,12 +5331,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:5244: checking "$xe_msg_checking"" >&5
+echo "configure:5335: 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 5249 "configure"
+#line 5340 "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
@@ -5256,7 +5347,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:5260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5351: \"$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
@@ -5280,10 +5371,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:5284: checking for remove" >&5
+echo "configure:5375: checking for remove" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5287 "configure"
+#line 5378 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -5306,7 +5397,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5401: \"$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
@@ -5327,12 +5418,12 @@ fi
     if test $ac_cv_func_remove = no; then
       
 echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:5331: checking for remove in -lposix" >&5
+echo "configure:5422: 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 5336 "configure"
+#line 5427 "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
@@ -5343,7 +5434,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:5347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5438: \"$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
@@ -5367,10 +5458,10 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:5371: checking for shmat" >&5
+echo "configure:5462: checking for shmat" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5374 "configure"
+#line 5465 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -5393,7 +5484,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5488: \"$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
@@ -5414,12 +5505,12 @@ fi
     if test $ac_cv_func_shmat = no; then
       
 echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:5418: checking for shmat in -lipc" >&5
+echo "configure:5509: 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 5423 "configure"
+#line 5514 "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
@@ -5430,7 +5521,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:5434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5525: \"$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
@@ -5466,12 +5557,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:5470: checking "$xe_msg_checking"" >&5
+echo "configure:5561: 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 5475 "configure"
+#line 5566 "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
@@ -5482,7 +5573,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:5486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5577: \"$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
@@ -5651,7 +5742,7 @@ EOF
 
 
     echo "checking for X defines extracted by xmkmf" 1>&6
-echo "configure:5655: checking for X defines extracted by xmkmf" >&5
+echo "configure:5746: checking for X defines extracted by xmkmf" >&5
   rm -fr conftestdir
   if mkdir conftestdir; then
     cd conftestdir
@@ -5683,15 +5774,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:5687: checking for X11/Intrinsic.h" >&5
+echo "configure:5778: checking for X11/Intrinsic.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5690 "configure"
+#line 5781 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5695: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5786: \"$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*
@@ -5715,12 +5806,12 @@ fi
 
       
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:5719: checking for XOpenDisplay in -lX11" >&5
+echo "configure:5810: 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 5724 "configure"
+#line 5815 "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
@@ -5731,7 +5822,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5826: \"$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
@@ -5756,12 +5847,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:5760: checking "$xe_msg_checking"" >&5
+echo "configure:5851: 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 5765 "configure"
+#line 5856 "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
@@ -5772,7 +5863,7 @@ int main() {
 XGetFontProperty()
 ; return 0; }
 EOF
-if { (eval echo configure:5776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5867: \"$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
@@ -5799,12 +5890,12 @@ fi
 
     
 echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6
-echo "configure:5803: checking for XShapeSelectInput in -lXext" >&5
+echo "configure:5894: 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 5808 "configure"
+#line 5899 "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
@@ -5815,7 +5906,7 @@ int main() {
 XShapeSelectInput()
 ; return 0; }
 EOF
-if { (eval echo configure:5819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5910: \"$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
@@ -5838,12 +5929,12 @@ fi
 
     
 echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6
-echo "configure:5842: checking for XtOpenDisplay in -lXt" >&5
+echo "configure:5933: 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 5847 "configure"
+#line 5938 "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
@@ -5854,7 +5945,7 @@ int main() {
 XtOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5949: \"$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
@@ -5877,14 +5968,14 @@ fi
 
 
   echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6
-echo "configure:5881: checking the version of X11 being used" >&5
+echo "configure:5972: checking the version of X11 being used" >&5
   cat > conftest.$ac_ext <<EOF
-#line 5883 "configure"
+#line 5974 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
     int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }
 EOF
-if { (eval echo configure:5888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:5979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest foobar; x11_release=$?
 else
@@ -5909,15 +6000,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5913: checking for $ac_hdr" >&5
+echo "configure:6004: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5916 "configure"
+#line 6007 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6012: \"$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*
@@ -5948,7 +6039,7 @@ done
 
 
     echo $ac_n "checking for XFree86""... $ac_c" 1>&6
-echo "configure:5952: checking for XFree86" >&5
+echo "configure:6043: checking for XFree86" >&5
   if test -d "/usr/X386/include" -o \
           -f "/etc/XF86Config"    -o \
          -f "/etc/X11/XF86Config" -o \
@@ -5968,12 +6059,12 @@ EOF
 
     test -z "$with_xmu" && { 
 echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6
-echo "configure:5972: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
+echo "configure:6063: 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 5977 "configure"
+#line 6068 "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
@@ -5984,7 +6075,7 @@ int main() {
 XmuReadBitmapDataFromFile()
 ; return 0; }
 EOF
-if { (eval echo configure:5988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6079: \"$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
@@ -6023,19 +6114,19 @@ EOF
 
       
 echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6
-echo "configure:6027: checking for main in -lXbsd" >&5
+echo "configure:6118: 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 6032 "configure"
+#line 6123 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6130: \"$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
@@ -6072,22 +6163,22 @@ fi
 fi 
 if test "$with_msw" != "no"; then
   echo "checking for MS-Windows" 1>&6
-echo "configure:6076: checking for MS-Windows" >&5
+echo "configure:6167: checking for MS-Windows" >&5
   
 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6
-echo "configure:6079: checking for main in -lgdi32" >&5
+echo "configure:6170: 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 6084 "configure"
+#line 6175 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6182: \"$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
@@ -6153,12 +6244,12 @@ EOF
  fi
     fi
         cat > conftest.$ac_ext <<EOF
-#line 6157 "configure"
+#line 6248 "configure"
 #include "confdefs.h"
 #include <fcntl.h>
     int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }
 EOF
-if { (eval echo configure:6162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6253: \"$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
@@ -6234,7 +6325,7 @@ case "$x_libraries" in *X11R4* )
 esac
 
 echo "checking for WM_COMMAND option" 1>&6
-echo "configure:6238: checking for WM_COMMAND option" >&5;
+echo "configure:6329: checking for WM_COMMAND option" >&5;
 if test "$with_wmcommand" != "no"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_WMCOMMAND
@@ -6249,15 +6340,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:6253: checking for X11/Xauth.h" >&5
+echo "configure:6344: checking for X11/Xauth.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6256 "configure"
+#line 6347 "configure"
 #include "confdefs.h"
 #include <X11/Xauth.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6261: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6352: \"$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*
@@ -6280,12 +6371,12 @@ fi
  }
 test -z "$with_xauth" && { 
 echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6
-echo "configure:6284: checking for XauGetAuthByAddr in -lXau" >&5
+echo "configure:6375: 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 6289 "configure"
+#line 6380 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6296,7 +6387,7 @@ int main() {
 XauGetAuthByAddr()
 ; return 0; }
 EOF
-if { (eval echo configure:6300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6341,15 +6432,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:6345: checking for ${dir}tt_c.h" >&5
+echo "configure:6436: checking for ${dir}tt_c.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6348 "configure"
+#line 6439 "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:6353: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6444: \"$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*
@@ -6385,12 +6476,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:6389: checking "$xe_msg_checking"" >&5
+echo "configure:6480: 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 6394 "configure"
+#line 6485 "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
@@ -6401,7 +6492,7 @@ int main() {
 tt_message_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6496: \"$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
@@ -6458,15 +6549,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:6462: checking for Dt/Dt.h" >&5
+echo "configure:6553: checking for Dt/Dt.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6465 "configure"
+#line 6556 "configure"
 #include "confdefs.h"
 #include <Dt/Dt.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6470: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6561: \"$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*
@@ -6489,12 +6580,12 @@ fi
  }
 test -z "$with_cde" && { 
 echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6
-echo "configure:6493: checking for DtDndDragStart in -lDtSvc" >&5
+echo "configure:6584: 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 6498 "configure"
+#line 6589 "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
@@ -6505,7 +6596,7 @@ int main() {
 DtDndDragStart()
 ; return 0; }
 EOF
-if { (eval echo configure:6509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6600: \"$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
@@ -6574,7 +6665,7 @@ EOF
 fi
 
 echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6
-echo "configure:6578: checking if drag and drop API is needed" >&5
+echo "configure:6669: checking if drag and drop API is needed" >&5
 if test "$with_dragndrop" != "no" ; then
   if test -n "$dragndrop_proto" ; then
     with_dragndrop=yes
@@ -6595,18 +6686,18 @@ EOF
 fi
 
 echo "checking for LDAP" 1>&6
-echo "configure:6599: checking for LDAP" >&5
+echo "configure:6690: 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:6602: checking for ldap.h" >&5
+echo "configure:6693: checking for ldap.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6605 "configure"
+#line 6696 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6701: \"$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*
@@ -6629,15 +6720,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:6633: checking for lber.h" >&5
+echo "configure:6724: checking for lber.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6636 "configure"
+#line 6727 "configure"
 #include "confdefs.h"
 #include <lber.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6641: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6732: \"$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*
@@ -6661,12 +6752,12 @@ fi
 if test "$with_ldap" != "no"; then
   
 echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6
-echo "configure:6665: checking for ldap_search in -lldap" >&5
+echo "configure:6756: 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 6670 "configure"
+#line 6761 "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
@@ -6677,7 +6768,7 @@ int main() {
 ldap_search()
 ; return 0; }
 EOF
-if { (eval echo configure:6681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6772: \"$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
@@ -6702,12 +6793,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:6706: checking "$xe_msg_checking"" >&5
+echo "configure:6797: 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 6711 "configure"
+#line 6802 "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
@@ -6718,7 +6809,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6813: \"$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
@@ -6743,12 +6834,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:6747: checking "$xe_msg_checking"" >&5
+echo "configure:6838: 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 6752 "configure"
+#line 6843 "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
@@ -6759,7 +6850,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6854: \"$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
@@ -6784,12 +6875,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:6788: checking "$xe_msg_checking"" >&5
+echo "configure:6879: 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 6793 "configure"
+#line 6884 "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
@@ -6800,7 +6891,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6895: \"$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
@@ -6851,10 +6942,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:6855: checking for $ac_func" >&5
+echo "configure:6946: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6858 "configure"
+#line 6949 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6877,7 +6968,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6972: \"$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
@@ -6909,15 +7000,15 @@ fi
 
 if test "$window_system" != "none"; then
   echo "checking for graphics libraries" 1>&6
-echo "configure:6913: checking for graphics libraries" >&5
+echo "configure:7004: 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:6918: checking for Xpm - no older than 3.4f" >&5
+echo "configure:7009: checking for Xpm - no older than 3.4f" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6921 "configure"
+#line 7012 "configure"
 #include "confdefs.h"
 #include <X11/xpm.h>
     int main(int c, char **v) {
@@ -6925,7 +7016,7 @@ echo "configure:6918: checking for Xpm - no older than 3.4f" >&5
       XpmIncludeVersion != XpmLibraryVersion() ? 1 :
       XpmIncludeVersion < 30406 ? 2 : 0 ;}
 EOF
-if { (eval echo configure:6929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7020: \"$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
@@ -6967,17 +7058,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:6971: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:7062: checking for \"FOR_MSW\" xpm" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6974 "configure"
+#line 7065 "configure"
 #include "confdefs.h"
 
 int main() {
 XpmCreatePixmapFromData()
 ; return 0; }
 EOF
-if { (eval echo configure:6981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   xpm_for_msw=no
 else
@@ -7003,15 +7094,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:7007: checking for compface.h" >&5
+echo "configure:7098: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7010 "configure"
+#line 7101 "configure"
 #include "confdefs.h"
 #include <compface.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7015: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7106: \"$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*
@@ -7034,12 +7125,12 @@ fi
  }
   test -z "$with_xface" && { 
 echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:7038: checking for UnGenFace in -lcompface" >&5
+echo "configure:7129: 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 7043 "configure"
+#line 7134 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7050,7 +7141,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:7054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7145: \"$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
@@ -7102,12 +7193,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:7106: checking for inflate in -lc" >&5
+echo "configure:7197: 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 7111 "configure"
+#line 7202 "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
@@ -7118,7 +7209,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7213: \"$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
@@ -7137,12 +7228,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6
-echo "configure:7141: checking for inflate in -lz" >&5
+echo "configure:7232: 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 7146 "configure"
+#line 7237 "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
@@ -7153,7 +7244,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7248: \"$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
@@ -7172,12 +7263,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6
-echo "configure:7176: checking for inflate in -lgz" >&5
+echo "configure:7267: 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 7181 "configure"
+#line 7272 "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
@@ -7188,7 +7279,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7283: \"$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
@@ -7218,15 +7309,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:7222: checking for jpeglib.h" >&5
+echo "configure:7313: checking for jpeglib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7225 "configure"
+#line 7316 "configure"
 #include "confdefs.h"
 #include <jpeglib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7321: \"$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*
@@ -7249,12 +7340,12 @@ fi
  }
   test -z "$with_jpeg" && { 
 echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6
-echo "configure:7253: checking for jpeg_destroy_decompress in -ljpeg" >&5
+echo "configure:7344: 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 7258 "configure"
+#line 7349 "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
@@ -7265,7 +7356,7 @@ int main() {
 jpeg_destroy_decompress()
 ; return 0; }
 EOF
-if { (eval echo configure:7269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7360: \"$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
@@ -7301,10 +7392,10 @@ EOF
 
     png_problem=""
   test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:7305: checking for pow" >&5
+echo "configure:7396: checking for pow" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7308 "configure"
+#line 7399 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pow(); below.  */
@@ -7327,7 +7418,7 @@ pow();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7422: \"$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
@@ -7348,15 +7439,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:7352: checking for png.h" >&5
+echo "configure:7443: checking for png.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7355 "configure"
+#line 7446 "configure"
 #include "confdefs.h"
 #include <png.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7451: \"$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*
@@ -7379,12 +7470,12 @@ fi
  }
   test -z "$with_png" && { 
 echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:7383: checking for png_read_image in -lpng" >&5
+echo "configure:7474: 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 7388 "configure"
+#line 7479 "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
@@ -7395,7 +7486,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:7399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7490: \"$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
@@ -7418,10 +7509,10 @@ fi
  }
   if test -z "$with_png"; then
     echo $ac_n "checking for workable png version information""... $ac_c" 1>&6
-echo "configure:7422: checking for workable png version information" >&5
+echo "configure:7513: checking for workable png version information" >&5
     xe_check_libs="-lpng -lz"
     cat > conftest.$ac_ext <<EOF
-#line 7425 "configure"
+#line 7516 "configure"
 #include "confdefs.h"
 #include <png.h>
     int main(int c, char **v) {
@@ -7429,7 +7520,7 @@ echo "configure:7422: 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:7433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7524: \"$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
@@ -7472,15 +7563,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:7476: checking for tiffio.h" >&5
+echo "configure:7567: checking for tiffio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7479 "configure"
+#line 7570 "configure"
 #include "confdefs.h"
 #include <tiffio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7484: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7575: \"$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*
@@ -7503,12 +7594,12 @@ fi
  }
   test -z "$with_tiff" && { 
 echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:7507: checking for TIFFClientOpen in -ltiff" >&5
+echo "configure:7598: 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 7512 "configure"
+#line 7603 "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
@@ -7519,7 +7610,7 @@ int main() {
 TIFFClientOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:7523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7614: \"$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
@@ -7558,10 +7649,10 @@ fi
 if test "$with_x11" = "yes"; then
 
   echo "checking for X11 graphics libraries" 1>&6
-echo "configure:7562: checking for X11 graphics libraries" >&5
+echo "configure:7653: checking for X11 graphics libraries" >&5
 
   echo "checking for the Athena widgets" 1>&6
-echo "configure:7565: checking for the Athena widgets" >&5
+echo "configure:7656: checking for the Athena widgets" >&5
 
     case "$with_athena" in
         "xaw" | "")    athena_variant=Xaw      athena_3d=no  ;;
@@ -7575,12 +7666,12 @@ echo "configure:7565: 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:7579: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
+echo "configure:7670: 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 7584 "configure"
+#line 7675 "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
@@ -7591,7 +7682,7 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:7595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7686: \"$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
@@ -7607,12 +7698,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:7611: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7702: 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 7616 "configure"
+#line 7707 "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
@@ -7623,7 +7714,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7718: \"$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
@@ -7654,12 +7745,12 @@ fi
   else
         
 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7658: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7749: 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 7663 "configure"
+#line 7754 "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
@@ -7670,7 +7761,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7765: \"$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
@@ -7688,12 +7779,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:7692: checking for threeDClassRec in -lXaw" >&5
+echo "configure:7783: 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 7697 "configure"
+#line 7788 "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
@@ -7704,7 +7795,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7799: \"$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
@@ -7718,7 +7809,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
@@ -7735,15 +7826,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:7739: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:7830: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7742 "configure"
+#line 7833 "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:7747: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7838: \"$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*
@@ -7763,15 +7854,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:7767: checking for X11/Xaw/XawInit.h" >&5
+echo "configure:7858: checking for X11/Xaw/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7770 "configure"
+#line 7861 "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:7775: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7866: \"$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*
@@ -7797,15 +7888,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:7801: checking for X11/$athena_variant/XawInit.h" >&5
+echo "configure:7892: checking for X11/$athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7804 "configure"
+#line 7895 "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:7809: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7900: \"$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*
@@ -7822,15 +7913,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:7826: checking for X11/$athena_variant/ThreeD.h" >&5
+echo "configure:7917: checking for X11/$athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7829 "configure"
+#line 7920 "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:7834: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7925: \"$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*
@@ -7858,15 +7949,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:7862: checking for X11/Xaw3d/XawInit.h" >&5
+echo "configure:7953: checking for X11/Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7865 "configure"
+#line 7956 "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:7870: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7961: \"$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*
@@ -7883,15 +7974,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:7887: checking for X11/Xaw3d/ThreeD.h" >&5
+echo "configure:7978: checking for X11/Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7890 "configure"
+#line 7981 "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:7895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7986: \"$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*
@@ -7923,15 +8014,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:7927: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:8018: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7930 "configure"
+#line 8021 "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:7935: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8026: \"$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*
@@ -7966,15 +8057,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:7970: checking for Xm/Xm.h" >&5
+echo "configure:8061: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7973 "configure"
+#line 8064 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7978: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8069: \"$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*
@@ -7991,12 +8082,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:7995: checking for XmStringFree in -lXm" >&5
+echo "configure:8086: 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 8000 "configure"
+#line 8091 "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
@@ -8007,7 +8098,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:8011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8102: \"$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
@@ -8036,9 +8127,9 @@ fi
 
   if test "$have_motif" = "yes"; then
         echo $ac_n "checking for Lesstif""... $ac_c" 1>&6
-echo "configure:8040: checking for Lesstif" >&5
+echo "configure:8131: checking for Lesstif" >&5
     cat > conftest.$ac_ext <<EOF
-#line 8042 "configure"
+#line 8133 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 #ifdef LESSTIF_VERSION
@@ -8371,7 +8462,7 @@ fi
 
 if test "$with_mule" = "yes" ; then
   echo "checking for Mule-related features" 1>&6
-echo "configure:8375: checking for Mule-related features" >&5
+echo "configure:8466: checking for Mule-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining MULE
 EOF
@@ -8396,15 +8487,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8400: checking for $ac_hdr" >&5
+echo "configure:8491: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8403 "configure"
+#line 8494 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8408: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8499: \"$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*
@@ -8435,12 +8526,12 @@ done
 
   
 echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6
-echo "configure:8439: checking for strerror in -lintl" >&5
+echo "configure:8530: 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 8444 "configure"
+#line 8535 "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
@@ -8451,7 +8542,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:8455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8546: \"$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
@@ -8484,18 +8575,18 @@ fi
 
 
   echo "checking for Mule input methods" 1>&6
-echo "configure:8488: checking for Mule input methods" >&5
+echo "configure:8579: checking for Mule input methods" >&5
         case "$with_xim" in "" | "yes" )
     echo "checking for XIM" 1>&6
-echo "configure:8491: checking for XIM" >&5
+echo "configure:8582: checking for XIM" >&5
     
 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6
-echo "configure:8494: checking for XOpenIM in -lX11" >&5
+echo "configure:8585: 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 8499 "configure"
+#line 8590 "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
@@ -8506,7 +8597,7 @@ int main() {
 XOpenIM()
 ; return 0; }
 EOF
-if { (eval echo configure:8510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8601: \"$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
@@ -8530,12 +8621,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:8534: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:8625: 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 8539 "configure"
+#line 8630 "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
@@ -8546,7 +8637,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:8550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8641: \"$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
@@ -8611,15 +8702,15 @@ EOF
 
     if test "$with_xfs" = "yes" ; then
     echo "checking for XFontSet" 1>&6
-echo "configure:8615: checking for XFontSet" >&5
+echo "configure:8706: checking for XFontSet" >&5
     
 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6
-echo "configure:8618: checking for XmbDrawString in -lX11" >&5
+echo "configure:8709: 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 8623 "configure"
+#line 8714 "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
@@ -8630,7 +8721,7 @@ int main() {
 XmbDrawString()
 ; return 0; }
 EOF
-if { (eval echo configure:8634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8725: \"$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
@@ -8670,15 +8761,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:8674: checking for wnn/jllib.h" >&5
+echo "configure:8765: checking for wnn/jllib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8677 "configure"
+#line 8768 "configure"
 #include "confdefs.h"
 #include <wnn/jllib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8682: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8773: \"$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*
@@ -8703,10 +8794,10 @@ fi
     for ac_func in crypt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8707: checking for $ac_func" >&5
+echo "configure:8798: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8710 "configure"
+#line 8801 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8729,7 +8820,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8824: \"$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
@@ -8758,12 +8849,12 @@ done
 
     test "$ac_cv_func_crypt" != "yes" && { 
 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:8762: checking for crypt in -lcrypt" >&5
+echo "configure:8853: 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 8767 "configure"
+#line 8858 "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
@@ -8774,7 +8865,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:8778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8869: \"$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
@@ -8809,12 +8900,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:8813: checking for jl_dic_list_e in -lwnn" >&5
+echo "configure:8904: 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 8818 "configure"
+#line 8909 "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
@@ -8825,7 +8916,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8920: \"$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
@@ -8843,12 +8934,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:8847: checking for jl_dic_list_e in -lwnn4" >&5
+echo "configure:8938: 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 8852 "configure"
+#line 8943 "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
@@ -8859,7 +8950,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8954: \"$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
@@ -8877,12 +8968,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:8881: checking for jl_dic_list_e in -lwnn6" >&5
+echo "configure:8972: 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 8886 "configure"
+#line 8977 "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
@@ -8893,7 +8984,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8988: \"$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
@@ -8911,12 +9002,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:8915: checking for dic_list_e in -lwnn6_fromsrc" >&5
+echo "configure:9006: 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 8920 "configure"
+#line 9011 "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
@@ -8927,7 +9018,7 @@ int main() {
 dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9022: \"$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
@@ -8975,12 +9066,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:8979: checking for jl_fi_dic_list in -l$libwnn" >&5
+echo "configure:9070: 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 8984 "configure"
+#line 9075 "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
@@ -8991,7 +9082,7 @@ int main() {
 jl_fi_dic_list()
 ; return 0; }
 EOF
-if { (eval echo configure:8995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9086: \"$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
@@ -9026,15 +9117,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:9030: checking for canna/jrkanji.h" >&5
+echo "configure:9121: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9033 "configure"
+#line 9124 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9129: \"$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*
@@ -9061,15 +9152,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:9065: checking for canna/jrkanji.h" >&5
+echo "configure:9156: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9068 "configure"
+#line 9159 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9073: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9164: \"$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*
@@ -9097,15 +9188,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:9101: checking for canna/RK.h" >&5
+echo "configure:9192: checking for canna/RK.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9104 "configure"
+#line 9195 "configure"
 #include "confdefs.h"
 #include <canna/RK.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9200: \"$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*
@@ -9128,12 +9219,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6
-echo "configure:9132: checking for RkBgnBun in -lRKC" >&5
+echo "configure:9223: 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 9137 "configure"
+#line 9228 "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
@@ -9144,7 +9235,7 @@ int main() {
 RkBgnBun()
 ; return 0; }
 EOF
-if { (eval echo configure:9148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9239: \"$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
@@ -9167,12 +9258,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6
-echo "configure:9171: checking for jrKanjiControl in -lcanna" >&5
+echo "configure:9262: 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 9176 "configure"
+#line 9267 "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
@@ -9183,7 +9274,7 @@ int main() {
 jrKanjiControl()
 ; return 0; }
 EOF
-if { (eval echo configure:9187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9278: \"$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
@@ -9232,12 +9323,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:9236: checking for layout_object_getvalue in -li18n" >&5
+echo "configure:9327: 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 9241 "configure"
+#line 9332 "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
@@ -9248,7 +9339,7 @@ int main() {
 layout_object_getvalue()
 ; return 0; }
 EOF
-if { (eval echo configure:9252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9343: \"$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
@@ -9331,13 +9422,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:9338: checking for $ac_func" >&5
+echo "configure:9429: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9341 "configure"
+#line 9432 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9360,7 +9451,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9455: \"$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
@@ -9401,10 +9492,10 @@ case "$opsys" in
       * ) for ac_func in realpath
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9405: checking for $ac_func" >&5
+echo "configure:9496: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9408 "configure"
+#line 9499 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9427,7 +9518,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9522: \"$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
@@ -9463,10 +9554,10 @@ esac
 for ac_func in getloadavg
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9467: checking for $ac_func" >&5
+echo "configure:9558: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9470 "configure"
+#line 9561 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9489,7 +9580,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9584: \"$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
@@ -9525,12 +9616,12 @@ then
 
     
 echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6
-echo "configure:9529: checking for kstat_open in -lkstat" >&5
+echo "configure:9620: 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 9534 "configure"
+#line 9625 "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
@@ -9541,7 +9632,7 @@ int main() {
 kstat_open()
 ; return 0; }
 EOF
-if { (eval echo configure:9545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9636: \"$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
@@ -9575,12 +9666,12 @@ fi
 
     
 echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6
-echo "configure:9579: checking for kvm_read in -lkvm" >&5
+echo "configure:9670: 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 9584 "configure"
+#line 9675 "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
@@ -9591,7 +9682,7 @@ int main() {
 kvm_read()
 ; return 0; }
 EOF
-if { (eval echo configure:9595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9686: \"$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
@@ -9625,16 +9716,16 @@ fi
 fi
 
 echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:9629: checking whether netdb declares h_errno" >&5
+echo "configure:9720: checking whether netdb declares h_errno" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9631 "configure"
+#line 9722 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 int main() {
 return h_errno;
 ; return 0; }
 EOF
-if { (eval echo configure:9638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9729: \"$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
@@ -9654,16 +9745,16 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:9658: checking for sigsetjmp" >&5
+echo "configure:9749: checking for sigsetjmp" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9660 "configure"
+#line 9751 "configure"
 #include "confdefs.h"
 #include <setjmp.h>
 int main() {
 sigjmp_buf bar; sigsetjmp (bar, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:9667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9758: \"$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
@@ -9683,11 +9774,11 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6
-echo "configure:9687: checking whether localtime caches TZ" >&5
+echo "configure:9778: checking whether localtime caches TZ" >&5
 
 if test "$ac_cv_func_tzset" = "yes"; then
 cat > conftest.$ac_ext <<EOF
-#line 9691 "configure"
+#line 9782 "configure"
 #include "confdefs.h"
 #include <time.h>
 #if STDC_HEADERS
@@ -9722,7 +9813,7 @@ main()
   exit (0);
 }
 EOF
-if { (eval echo configure:9726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   emacs_cv_localtime_cache=no
 else
@@ -9752,9 +9843,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:9756: checking whether gettimeofday accepts one or two arguments" >&5
+echo "configure:9847: checking whether gettimeofday accepts one or two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9758 "configure"
+#line 9849 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -9776,7 +9867,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:9780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9871: \"$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
@@ -9798,19 +9889,19 @@ fi
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:9802: checking for inline" >&5
+echo "configure:9893: checking for inline" >&5
 
 ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 9807 "configure"
+#line 9898 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:9814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -9860,17 +9951,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:9864: checking for working alloca.h" >&5
+echo "configure:9955: checking for working alloca.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9867 "configure"
+#line 9958 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:9874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9965: \"$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
@@ -9894,10 +9985,10 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:9898: checking for alloca" >&5
+echo "configure:9989: checking for alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9901 "configure"
+#line 9992 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -9925,7 +10016,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:9929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10020: \"$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
@@ -9964,10 +10055,10 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:9968: checking whether alloca needs Cray hooks" >&5
+echo "configure:10059: checking whether alloca needs Cray hooks" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9971 "configure"
+#line 10062 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -9991,10 +10082,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:9995: checking for $ac_func" >&5
+echo "configure:10086: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9998 "configure"
+#line 10089 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10017,7 +10108,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10112: \"$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
@@ -10047,10 +10138,10 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:10051: checking stack direction for C alloca" >&5
+echo "configure:10142: checking stack direction for C alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10054 "configure"
+#line 10145 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -10069,7 +10160,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:10073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_stack_direction=1
 else
@@ -10098,15 +10189,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:10102: checking for vfork.h" >&5
+echo "configure:10193: checking for vfork.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10105 "configure"
+#line 10196 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10201: \"$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*
@@ -10134,10 +10225,10 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:10138: checking for working vfork" >&5
+echo "configure:10229: checking for working vfork" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10141 "configure"
+#line 10232 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -10232,7 +10323,7 @@ main() {
   }
 }
 EOF
-if { (eval echo configure:10236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10327: \"$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:10262: checking for working strcoll" >&5
+echo "configure:10353: checking for working strcoll" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10265 "configure"
+#line 10356 "configure"
 #include "confdefs.h"
 #include <string.h>
 main ()
@@ -10271,7 +10362,7 @@ main ()
        strcoll ("123", "456") >= 0);
 }
 EOF
-if { (eval echo configure:10275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10366: \"$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:10303: checking for $ac_func" >&5
+echo "configure:10394: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10306 "configure"
+#line 10397 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10325,7 +10416,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10420: \"$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:10357: checking whether getpgrp takes no argument" >&5
+echo "configure:10448: checking whether getpgrp takes no argument" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10360 "configure"
+#line 10451 "configure"
 #include "confdefs.h"
 
 /*
@@ -10411,7 +10502,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:10415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10506: \"$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:10442: checking for working mmap" >&5
+echo "configure:10533: checking for working mmap" >&5
 case "$opsys" in ultrix* ) have_mmap=no ;; *)
 cat > conftest.$ac_ext <<EOF
-#line 10445 "configure"
+#line 10536 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <unistd.h>
@@ -10474,7 +10565,7 @@ int main (int argc, char *argv[])
   return 1;
 }
 EOF
-if { (eval echo configure:10478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   have_mmap=yes
 else
@@ -10509,15 +10600,15 @@ EOF
 
 ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termios.h""... $ac_c" 1>&6
-echo "configure:10513: checking for termios.h" >&5
+echo "configure:10604: checking for termios.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10516 "configure"
+#line 10607 "configure"
 #include "confdefs.h"
 #include <termios.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10612: \"$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*
@@ -10560,15 +10651,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:10564: checking for termio.h" >&5
+echo "configure:10655: checking for termio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10567 "configure"
+#line 10658 "configure"
 #include "confdefs.h"
 #include <termio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10572: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10663: \"$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:10604: checking for socket" >&5
+echo "configure:10695: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10607 "configure"
+#line 10698 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -10626,7 +10717,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10721: \"$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
@@ -10641,15 +10732,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:10645: checking for netinet/in.h" >&5
+echo "configure:10736: checking for netinet/in.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10648 "configure"
+#line 10739 "configure"
 #include "confdefs.h"
 #include <netinet/in.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10744: \"$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*
@@ -10666,15 +10757,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:10670: checking for arpa/inet.h" >&5
+echo "configure:10761: checking for arpa/inet.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10673 "configure"
+#line 10764 "configure"
 #include "confdefs.h"
 #include <arpa/inet.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10769: \"$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*
@@ -10699,9 +10790,9 @@ EOF
 }
 
       echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:10703: checking "for sun_len member in struct sockaddr_un"" >&5
+echo "configure:10794: checking "for sun_len member in struct sockaddr_un"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10705 "configure"
+#line 10796 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10712,7 +10803,7 @@ int main() {
 static struct sockaddr_un x; x.sun_len = 1;
 ; return 0; }
 EOF
-if { (eval echo configure:10716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10807: \"$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
@@ -10730,9 +10821,9 @@ else
 fi
 rm -f conftest*
       echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6
-echo "configure:10734: checking "for ip_mreq struct in netinet/in.h"" >&5
+echo "configure:10825: checking "for ip_mreq struct in netinet/in.h"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10736 "configure"
+#line 10827 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10742,7 +10833,7 @@ int main() {
 static struct ip_mreq x;
 ; return 0; }
 EOF
-if { (eval echo configure:10746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10837: \"$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:10777: checking for msgget" >&5
+echo "configure:10868: checking for msgget" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10780 "configure"
+#line 10871 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char msgget(); below.  */
@@ -10799,7 +10890,7 @@ msgget();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10894: \"$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
@@ -10814,15 +10905,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:10818: checking for sys/ipc.h" >&5
+echo "configure:10909: checking for sys/ipc.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10821 "configure"
+#line 10912 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10917: \"$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*
@@ -10839,15 +10930,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:10843: checking for sys/msg.h" >&5
+echo "configure:10934: checking for sys/msg.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10846 "configure"
+#line 10937 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10851: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10942: \"$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:10889: checking for dirent.h" >&5
+echo "configure:10980: checking for dirent.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10892 "configure"
+#line 10983 "configure"
 #include "confdefs.h"
 #include <dirent.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10897: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10988: \"$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*
@@ -10920,15 +11011,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:10924: checking for sys/dir.h" >&5
+echo "configure:11015: checking for sys/dir.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10927 "configure"
+#line 11018 "configure"
 #include "confdefs.h"
 #include <sys/dir.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10932: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11023: \"$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:10965: checking for nlist.h" >&5
+echo "configure:11056: checking for nlist.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10968 "configure"
+#line 11059 "configure"
 #include "confdefs.h"
 #include <nlist.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10973: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11064: \"$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:11003: checking "for sound support"" >&5
+echo "configure:11094: 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:11010: checking for multimedia/audio_device.h" >&5
+echo "configure:11101: checking for multimedia/audio_device.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11013 "configure"
+#line 11104 "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:11018: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11109: \"$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:11066: checking for ALopenport in -laudio" >&5
+echo "configure:11157: 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 11071 "configure"
+#line 11162 "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
@@ -11078,7 +11169,7 @@ int main() {
 ALopenport()
 ; return 0; }
 EOF
-if { (eval echo configure:11082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11173: \"$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:11113: checking for AOpenAudio in -lAlib" >&5
+echo "configure:11204: 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 11118 "configure"
+#line 11209 "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
@@ -11125,7 +11216,7 @@ int main() {
 AOpenAudio()
 ; return 0; }
 EOF
-if { (eval echo configure:11129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11220: \"$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:11167: checking for ${dir}/soundcard.h" >&5
+echo "configure:11258: checking for ${dir}/soundcard.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11170 "configure"
+#line 11261 "configure"
 #include "confdefs.h"
 #include <${dir}/soundcard.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11175: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11266: \"$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:11229: checking for audio/audiolib.h" >&5
+echo "configure:11320: checking for audio/audiolib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11232 "configure"
+#line 11323 "configure"
 #include "confdefs.h"
 #include <audio/audiolib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11237: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11328: \"$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*
@@ -11251,12 +11342,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:11255: checking for AuOpenServer in -laudio" >&5
+echo "configure:11346: 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 11260 "configure"
+#line 11351 "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
@@ -11267,7 +11358,7 @@ int main() {
 AuOpenServer()
 ; return 0; }
 EOF
-if { (eval echo configure:11271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11362: \"$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
@@ -11306,7 +11397,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 11310 "configure"
+#line 11401 "configure"
 #include "confdefs.h"
 #include <audio/Xtutil.h>
 EOF
@@ -11337,7 +11428,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:11341: checking for $ac_word" >&5
+echo "configure:11432: 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:11370: checking for esd_play_stream" >&5
+echo "configure:11461: checking for esd_play_stream" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11373 "configure"
+#line 11464 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char esd_play_stream(); below.  */
@@ -11392,7 +11483,7 @@ esd_play_stream();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11487: \"$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
@@ -11443,7 +11534,7 @@ test -z "$with_tty" && with_tty=yes
 
 if test "$with_tty" = "yes"  ; then
   echo "checking for TTY-related features" 1>&6
-echo "configure:11447: checking for TTY-related features" >&5
+echo "configure:11538: checking for TTY-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_TTY
 EOF
@@ -11459,12 +11550,12 @@ EOF
     if test -z "$with_ncurses"; then
     
 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:11463: checking for tgetent in -lncurses" >&5
+echo "configure:11554: 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 11468 "configure"
+#line 11559 "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
@@ -11475,7 +11566,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11570: \"$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
@@ -11508,15 +11599,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:11512: checking for ncurses/curses.h" >&5
+echo "configure:11603: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11515 "configure"
+#line 11606 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11611: \"$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:11542: checking for ncurses/term.h" >&5
+echo "configure:11633: checking for ncurses/term.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11545 "configure"
+#line 11636 "configure"
 #include "confdefs.h"
 #include <ncurses/term.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11550: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11641: \"$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:11580: checking for ncurses/curses.h" >&5
+echo "configure:11671: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11583 "configure"
+#line 11674 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11679: \"$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:11623: checking for tgetent in -l$lib" >&5
+echo "configure:11714: 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 11628 "configure"
+#line 11719 "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
@@ -11635,7 +11726,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11730: \"$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:11670: checking for tgetent in -lcurses" >&5
+echo "configure:11761: 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 11675 "configure"
+#line 11766 "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
@@ -11682,7 +11773,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11777: \"$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
@@ -11700,12 +11791,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:11704: checking for tgetent in -ltermcap" >&5
+echo "configure:11795: 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 11709 "configure"
+#line 11800 "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
@@ -11716,7 +11807,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11811: \"$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
@@ -11764,15 +11855,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:11768: checking for gpm.h" >&5
+echo "configure:11859: checking for gpm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11771 "configure"
+#line 11862 "configure"
 #include "confdefs.h"
 #include <gpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11776: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11867: \"$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:11799: checking for Gpm_Open in -lgpm" >&5
+echo "configure:11890: 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 11804 "configure"
+#line 11895 "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
@@ -11811,7 +11902,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:11815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11906: \"$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
@@ -11861,20 +11952,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:11865: checking for database support" >&5
+echo "configure:11956: 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:11870: checking for ndbm.h" >&5
+echo "configure:11961: checking for ndbm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11873 "configure"
+#line 11964 "configure"
 #include "confdefs.h"
 #include <ndbm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11969: \"$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:11908: checking for dbm_open in -lgdbm" >&5
+echo "configure:11999: 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 11913 "configure"
+#line 12004 "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
@@ -11920,7 +12011,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:11924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12015: \"$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:11952: checking for dbm_open" >&5
+echo "configure:12043: checking for dbm_open" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11955 "configure"
+#line 12046 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dbm_open(); below.  */
@@ -11974,7 +12065,7 @@ dbm_open();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12069: \"$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
@@ -11993,12 +12084,12 @@ else
 
     
 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6
-echo "configure:11997: checking for dbm_open in -ldbm" >&5
+echo "configure:12088: 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 12002 "configure"
+#line 12093 "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
@@ -12009,7 +12100,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:12013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12104: \"$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
@@ -12050,10 +12141,10 @@ EOF
 
 if test "$with_database_berkdb" != "no"; then
   echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6
-echo "configure:12054: checking for Berkeley db.h" >&5
+echo "configure:12145: checking for Berkeley db.h" >&5
   for path in "db/db.h" "db.h"; do
     cat > conftest.$ac_ext <<EOF
-#line 12057 "configure"
+#line 12148 "configure"
 #include "confdefs.h"
 #ifdef HAVE_INTTYPES_H
 #define __BIT_TYPES_DEFINED__
@@ -12071,7 +12162,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   db_h_path="$path"; break
 else
@@ -12087,9 +12178,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:12091: checking for Berkeley DB version" >&5
+echo "configure:12182: checking for Berkeley DB version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 12093 "configure"
+#line 12184 "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:12112: checking for $dbfunc" >&5
+echo "configure:12203: checking for $dbfunc" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12115 "configure"
+#line 12206 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $dbfunc(); below.  */
@@ -12134,7 +12225,7 @@ $dbfunc();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12229: \"$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
@@ -12153,12 +12244,12 @@ else
 
     
 echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6
-echo "configure:12157: checking for $dbfunc in -ldb" >&5
+echo "configure:12248: 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 12162 "configure"
+#line 12253 "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
@@ -12169,7 +12260,7 @@ int main() {
 $dbfunc()
 ; return 0; }
 EOF
-if { (eval echo configure:12173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12264: \"$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:12237: checking for SOCKSinit in -lsocks" >&5
+echo "configure:12328: 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 12242 "configure"
+#line 12333 "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
@@ -12249,7 +12340,7 @@ int main() {
 SOCKSinit()
 ; return 0; }
 EOF
-if { (eval echo configure:12253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12344: \"$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:12308: checking for module support" >&5
+echo "configure:12399: 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:12312: checking for dlfcn.h" >&5
+echo "configure:12403: checking for dlfcn.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12315 "configure"
+#line 12406 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12411: \"$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*
@@ -12334,12 +12425,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:12338: checking for dlopen in -ldl" >&5
+echo "configure:12429: 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 12343 "configure"
+#line 12434 "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
@@ -12350,7 +12441,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12445: \"$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
@@ -12369,12 +12460,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6
-echo "configure:12373: checking for dlopen in -lc" >&5
+echo "configure:12464: 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 12378 "configure"
+#line 12469 "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
@@ -12385,7 +12476,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12480: \"$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
@@ -12424,12 +12515,12 @@ EOF
   else
     
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:12428: checking for shl_load in -ldld" >&5
+echo "configure:12519: 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 12433 "configure"
+#line 12524 "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
@@ -12440,7 +12531,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:12444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12535: \"$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
@@ -12467,12 +12558,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6
-echo "configure:12471: checking for dld_init in -ldld" >&5
+echo "configure:12562: 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 12476 "configure"
+#line 12567 "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
@@ -12483,7 +12574,7 @@ int main() {
 dld_init()
 ; return 0; }
 EOF
-if { (eval echo configure:12487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12578: \"$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
@@ -12528,7 +12619,7 @@ xehost=$canonical
 xealias=$internal_configuration
 
 echo "checking how to build dynamic libraries for ${xehost}" 1>&6
-echo "configure:12532: checking how to build dynamic libraries for ${xehost}" >&5
+echo "configure:12623: checking how to build dynamic libraries for ${xehost}" >&5
 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
 case "$xehost" in
 *-*-linux-gnu*) ;;
@@ -12556,9 +12647,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:12560: checking checking whether we are using GNU C" >&5
+echo "configure:12651: checking checking whether we are using GNU C" >&5
   cat > conftest.$ac_ext <<EOF
-#line 12562 "configure"
+#line 12653 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -12580,7 +12671,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6
-echo "configure:12584: checking how to produce PIC code" >&5
+echo "configure:12675: checking how to produce PIC code" >&5
 wl=
 
 can_build_shared=yes
@@ -12673,18 +12764,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:12677: checking if PIC flag ${dll_cflags} really works" >&5
+echo "configure:12768: checking if PIC flag ${dll_cflags} really works" >&5
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $dll_cflags -DPIC"
   cat > conftest.$ac_ext <<EOF
-#line 12681 "configure"
+#line 12772 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12779: \"$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
@@ -12715,7 +12806,7 @@ cc_produces_so=no
 xldf=
 xcldf=
 echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6
-echo "configure:12719: checking if C compiler can produce shared libraries" >&5
+echo "configure:12810: checking if C compiler can produce shared libraries" >&5
 if test "$XEGCC" = yes; then
   xcldf="-shared"
   xldf="-shared"
@@ -12766,14 +12857,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 12770 "configure"
+#line 12861 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cc_produces_so=yes
 else
@@ -12798,7 +12889,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:12802: checking for ld used by GCC" >&5
+echo "configure:12893: checking for ld used by GCC" >&5
     ac_prog=`($CC -print-prog-name=ld) 2>&5`
     case "$ac_prog" in
     # Accept absolute paths.
@@ -12823,7 +12914,7 @@ echo "configure:12802: checking for ld used by GCC" >&5
     esac
   else
     echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:12827: checking for GNU ld" >&5
+echo "configure:12918: checking for GNU ld" >&5
   fi
 
   if test -z "$LTLD"; then
@@ -12861,7 +12952,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:12865: checking if the linker is GNU ld" >&5
+echo "configure:12956: 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
@@ -12888,7 +12979,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:12892: checking whether the linker supports shared libraries" >&5
+echo "configure:12983: checking whether the linker supports shared libraries" >&5
   dll_ld=$CC
   dll_ldflags=$LDFLAGS
   ld_shlibs=yes
@@ -13103,10 +13194,10 @@ EOF
     for ac_func in dlerror _dlerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13107: checking for $ac_func" >&5
+echo "configure:13198: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13110 "configure"
+#line 13201 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -13129,7 +13220,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13224: \"$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
@@ -13168,11 +13259,11 @@ done
 fi
 
 cat > conftest.$ac_ext <<EOF
-#line 13172 "configure"
+#line 13263 "configure"
 #include "confdefs.h"
 int main(int c,char *v[]){return 0;}
 EOF
-if { (eval echo configure:13176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:13267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -13313,13 +13404,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."
@@ -13884,13 +13991,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
@@ -13904,7 +14009,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 54eccbf..792a5ba 100644 (file)
@@ -673,9 +673,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\""
         ;;
@@ -906,7 +907,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"
@@ -1769,8 +1770,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
 
@@ -1793,6 +1796,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"
 
@@ -2255,12 +2265,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)
@@ -2899,7 +2919,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 ;;
@@ -2910,22 +2930,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.")))
@@ -3243,7 +3263,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
 
@@ -3914,15 +3934,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
@@ -4241,6 +4278,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."
@@ -4324,13 +4365,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
@@ -4344,7 +4383,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 0ef2859..ba26c19 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\7f29271
 Node: Tags\7f29973
 Node: Checking\7f31275
 Node: Emacs Info Variables\7f32228
-Node: Creating an Info File\7f33217
+Node: Creating an Info File\7f33218
 \1f
 End Tag Table
index 0674c50..c3f6ad1 100644 (file)
@@ -42,11 +42,11 @@ Indirect:
 internals.info-1: 1770
 internals.info-2: 45926
 internals.info-3: 92999
-internals.info-4: 141365
-internals.info-5: 183396
-internals.info-6: 232817
-internals.info-7: 281547
-internals.info-8: 331004
+internals.info-4: 141367
+internals.info-5: 183398
+internals.info-6: 232819
+internals.info-7: 281549
+internals.info-8: 331006
 \1f
 Tag Table:
 (Indirect)
@@ -74,106 +74,106 @@ Node: Conversion to and from External Data\7f96749
 Node: General Guidelines for Writing Mule-Aware Code\7f101630
 Node: An Example of Mule-Aware Code\7f103661
 Node: Techniques for XEmacs Developers\7f105648
-Node: A Summary of the Various XEmacs Modules\7f109413
-Node: Low-Level Modules\7f110233
-Node: Basic Lisp Modules\7f117755
-Node: Modules for Standard Editing Operations\7f126079
-Node: Editor-Level Control Flow Modules\7f131967
-Node: Modules for the Basic Displayable Lisp Objects\7f135414
-Node: Modules for other Display-Related Lisp Objects\7f137936
-Node: Modules for the Redisplay Mechanism\7f139014
-Node: Modules for Interfacing with the File System\7f141365
-Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145063
-Node: Modules for Interfacing with the Operating System\7f150517
-Node: Modules for Interfacing with X Windows\7f158178
-Node: Modules for Internationalization\7f161614
-Node: Allocation of Objects in XEmacs Lisp\7f164251
-Node: Introduction to Allocation\7f164805
-Node: Garbage Collection\7f170268
-Node: GCPROing\7f173221
-Node: Garbage Collection - Step by Step\7f180032
-Node: Invocation\7f180424
-Node: garbage_collect_1\7f183396
-Node: mark_object\7f192876
-Node: gc_sweep\7f194688
-Node: sweep_lcrecords_1\7f199751
-Node: compact_string_chars\7f200746
-Node: sweep_strings\7f202926
-Node: sweep_bit_vectors_1\7f203891
-Node: Integers and Characters\7f204567
-Node: Allocation from Frob Blocks\7f205319
-Node: lrecords\7f206923
-Node: Low-level allocation\7f219385
-Node: Pure Space\7f223553
-Node: Cons\7f223728
-Node: Vector\7f224444
-Node: Bit Vector\7f225021
-Node: Symbol\7f225514
-Node: Marker\7f226083
-Node: String\7f226638
-Node: Compiled Function\7f230253
-Node: Events and the Event Loop\7f230422
-Node: Introduction to Events\7f230901
-Node: Main Loop\7f232817
-Node: Specifics of the Event Gathering Mechanism\7f236393
-Node: Specifics About the Emacs Event\7f248846
-Node: The Event Stream Callback Routines\7f249101
-Node: Other Event Loop Functions\7f249346
-Node: Converting Events\7f250486
-Node: Dispatching Events; The Command Builder\7f251095
-Node: Evaluation; Stack Frames; Bindings\7f251330
-Node: Evaluation\7f251672
-Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258212
-Node: Simple Special Forms\7f260596
-Node: Catch and Throw\7f261378
-Node: Symbols and Variables\7f263953
-Node: Introduction to Symbols\7f264217
-Node: Obarrays\7f265255
-Node: Symbol Values\7f268788
-Node: Buffers and Textual Representation\7f271076
-Node: Introduction to Buffers\7f271734
-Node: The Text in a Buffer\7f274397
-Node: Buffer Lists\7f281547
-Node: Markers and Extents\7f283498
-Node: Bufbytes and Emchars\7f285763
-Node: The Buffer Object\7f285978
-Node: MULE Character Sets and Encodings\7f289458
-Node: Character Sets\7f290520
-Node: Encodings\7f293963
-Node: Japanese EUC (Extended Unix Code)\7f295030
-Node: JIS7\7f295844
-Node: Internal Mule Encodings\7f297194
-Node: Internal String Encoding\7f299024
-Node: Internal Character Encoding\7f301137
-Node: CCL\7f302861
-Node: The Lisp Reader and Compiler\7f309613
-Node: Lstreams\7f309826
-Node: Creating an Lstream\7f310857
-Node: Lstream Types\7f312067
-Node: Lstream Functions\7f312319
-Node: Lstream Methods\7f315888
-Node: Consoles; Devices; Frames; Windows\7f319031
-Node: Introduction to Consoles; Devices; Frames; Windows\7f319346
-Node: Point\7f321838
-Node: Window Hierarchy\7f323117
-Node: The Window Object\7f327567
-Node: The Redisplay Mechanism\7f331004
-Node: Critical Redisplay Sections\7f331796
-Node: Line Start Cache\7f332751
-Node: Redisplay Piece by Piece\7f335988
-Node: Extents\7f338024
-Node: Introduction to Extents\7f338562
-Node: Extent Ordering\7f339688
-Node: Format of the Extent Info\7f340929
-Node: Zero-Length Extents\7f342817
-Node: Mathematics of Extent Ordering\7f344215
-Node: Extent Fragments\7f348972
-Node: Faces\7f350059
-Node: Glyphs\7f350175
-Node: Specifiers\7f353193
-Node: Menus\7f353322
-Node: Subprocesses\7f355580
-Node: Interface to X Windows\7f357556
-Node: Index\7f357727
+Node: A Summary of the Various XEmacs Modules\7f109415
+Node: Low-Level Modules\7f110235
+Node: Basic Lisp Modules\7f117757
+Node: Modules for Standard Editing Operations\7f126081
+Node: Editor-Level Control Flow Modules\7f131969
+Node: Modules for the Basic Displayable Lisp Objects\7f135416
+Node: Modules for other Display-Related Lisp Objects\7f137938
+Node: Modules for the Redisplay Mechanism\7f139016
+Node: Modules for Interfacing with the File System\7f141367
+Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145065
+Node: Modules for Interfacing with the Operating System\7f150519
+Node: Modules for Interfacing with X Windows\7f158180
+Node: Modules for Internationalization\7f161616
+Node: Allocation of Objects in XEmacs Lisp\7f164253
+Node: Introduction to Allocation\7f164807
+Node: Garbage Collection\7f170270
+Node: GCPROing\7f173223
+Node: Garbage Collection - Step by Step\7f180034
+Node: Invocation\7f180426
+Node: garbage_collect_1\7f183398
+Node: mark_object\7f192878
+Node: gc_sweep\7f194690
+Node: sweep_lcrecords_1\7f199753
+Node: compact_string_chars\7f200748
+Node: sweep_strings\7f202928
+Node: sweep_bit_vectors_1\7f203893
+Node: Integers and Characters\7f204569
+Node: Allocation from Frob Blocks\7f205321
+Node: lrecords\7f206925
+Node: Low-level allocation\7f219387
+Node: Pure Space\7f223555
+Node: Cons\7f223730
+Node: Vector\7f224446
+Node: Bit Vector\7f225023
+Node: Symbol\7f225516
+Node: Marker\7f226085
+Node: String\7f226640
+Node: Compiled Function\7f230255
+Node: Events and the Event Loop\7f230424
+Node: Introduction to Events\7f230903
+Node: Main Loop\7f232819
+Node: Specifics of the Event Gathering Mechanism\7f236395
+Node: Specifics About the Emacs Event\7f248848
+Node: The Event Stream Callback Routines\7f249103
+Node: Other Event Loop Functions\7f249348
+Node: Converting Events\7f250488
+Node: Dispatching Events; The Command Builder\7f251097
+Node: Evaluation; Stack Frames; Bindings\7f251332
+Node: Evaluation\7f251674
+Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258214
+Node: Simple Special Forms\7f260598
+Node: Catch and Throw\7f261380
+Node: Symbols and Variables\7f263955
+Node: Introduction to Symbols\7f264219
+Node: Obarrays\7f265257
+Node: Symbol Values\7f268790
+Node: Buffers and Textual Representation\7f271078
+Node: Introduction to Buffers\7f271736
+Node: The Text in a Buffer\7f274399
+Node: Buffer Lists\7f281549
+Node: Markers and Extents\7f283500
+Node: Bufbytes and Emchars\7f285765
+Node: The Buffer Object\7f285980
+Node: MULE Character Sets and Encodings\7f289460
+Node: Character Sets\7f290522
+Node: Encodings\7f293965
+Node: Japanese EUC (Extended Unix Code)\7f295032
+Node: JIS7\7f295846
+Node: Internal Mule Encodings\7f297196
+Node: Internal String Encoding\7f299026
+Node: Internal Character Encoding\7f301139
+Node: CCL\7f302863
+Node: The Lisp Reader and Compiler\7f309615
+Node: Lstreams\7f309828
+Node: Creating an Lstream\7f310859
+Node: Lstream Types\7f312069
+Node: Lstream Functions\7f312321
+Node: Lstream Methods\7f315890
+Node: Consoles; Devices; Frames; Windows\7f319033
+Node: Introduction to Consoles; Devices; Frames; Windows\7f319348
+Node: Point\7f321840
+Node: Window Hierarchy\7f323119
+Node: The Window Object\7f327569
+Node: The Redisplay Mechanism\7f331006
+Node: Critical Redisplay Sections\7f331798
+Node: Line Start Cache\7f332753
+Node: Redisplay Piece by Piece\7f335990
+Node: Extents\7f338026
+Node: Introduction to Extents\7f338564
+Node: Extent Ordering\7f339690
+Node: Format of the Extent Info\7f340931
+Node: Zero-Length Extents\7f342819
+Node: Mathematics of Extent Ordering\7f344217
+Node: Extent Fragments\7f348974
+Node: Faces\7f350061
+Node: Glyphs\7f350177
+Node: Specifiers\7f353195
+Node: Menus\7f353324
+Node: Subprocesses\7f355582
+Node: Interface to X Windows\7f357558
+Node: Index\7f357729
 \1f
 End Tag Table
index 83889a8..da8e934 100644 (file)
@@ -59,42 +59,42 @@ lispref.info-5: 195600
 lispref.info-6: 243285
 lispref.info-7: 291568
 lispref.info-8: 340704
-lispref.info-9: 388026
-lispref.info-10: 436665
-lispref.info-11: 484903
-lispref.info-12: 531515
-lispref.info-13: 579414
-lispref.info-14: 627637
-lispref.info-15: 675891
-lispref.info-16: 725647
-lispref.info-17: 774398
-lispref.info-18: 821248
-lispref.info-19: 868299
-lispref.info-20: 917029
-lispref.info-21: 966451
-lispref.info-22: 1013370
-lispref.info-23: 1060397
-lispref.info-24: 1109796
-lispref.info-25: 1159478
-lispref.info-26: 1209388
-lispref.info-27: 1258611
-lispref.info-28: 1307378
-lispref.info-29: 1356815
-lispref.info-30: 1398150
-lispref.info-31: 1447293
-lispref.info-32: 1496506
-lispref.info-33: 1546080
-lispref.info-34: 1594257
-lispref.info-35: 1639889
-lispref.info-36: 1681205
-lispref.info-37: 1726146
-lispref.info-38: 1775833
-lispref.info-39: 1824937
-lispref.info-40: 1874341
-lispref.info-41: 1924225
-lispref.info-42: 1973216
-lispref.info-43: 2017108
-lispref.info-44: 2055444
+lispref.info-9: 387518
+lispref.info-10: 436970
+lispref.info-11: 485198
+lispref.info-12: 534963
+lispref.info-13: 582862
+lispref.info-14: 631085
+lispref.info-15: 679339
+lispref.info-16: 729095
+lispref.info-17: 777846
+lispref.info-18: 824696
+lispref.info-19: 871747
+lispref.info-20: 920477
+lispref.info-21: 969899
+lispref.info-22: 1016818
+lispref.info-23: 1063845
+lispref.info-24: 1113244
+lispref.info-25: 1162926
+lispref.info-26: 1212836
+lispref.info-27: 1262059
+lispref.info-28: 1310826
+lispref.info-29: 1360263
+lispref.info-30: 1401598
+lispref.info-31: 1450741
+lispref.info-32: 1499954
+lispref.info-33: 1549528
+lispref.info-34: 1597705
+lispref.info-35: 1643337
+lispref.info-36: 1684653
+lispref.info-37: 1729594
+lispref.info-38: 1779281
+lispref.info-39: 1828385
+lispref.info-40: 1877789
+lispref.info-41: 1927673
+lispref.info-42: 1976664
+lispref.info-43: 2020556
+lispref.info-44: 2058892
 \1f
 Tag Table:
 (Indirect)
@@ -257,633 +257,633 @@ Node: Catch and Throw\7f365912
 Node: Examples of Catch\7f369751
 Node: Errors\7f371770
 Node: Signaling Errors\7f373259
-Node: Processing of Errors\7f376335
-Node: Handling Errors\7f377664
-Node: Error Symbols\7f384580
-Node: Cleanups\7f388026
-Node: Variables\7f391804
-Node: Global Variables\7f393573
-Node: Constant Variables\7f394649
-Node: Local Variables\7f395275
-Node: Void Variables\7f400212
-Node: Defining Variables\7f403728
-Node: Accessing Variables\7f410892
-Node: Setting Variables\7f412317
-Node: Variable Scoping\7f416836
-Node: Scope\7f418435
-Node: Extent\7f419960
-Node: Impl of Scope\7f421439
-Node: Using Scoping\7f423402
-Node: Buffer-Local Variables\7f424924
-Node: Intro to Buffer-Local\7f425760
-Node: Creating Buffer-Local\7f428303
-Node: Default Value\7f433522
-Node: Variable Aliases\7f436665
-Node: Functions\7f438450
-Node: What Is a Function\7f439544
-Node: Lambda Expressions\7f443590
-Node: Lambda Components\7f444500
-Node: Simple Lambda\7f446332
-Node: Argument List\7f447989
-Node: Function Documentation\7f451717
-Node: Function Names\7f453659
-Node: Defining Functions\7f456232
-Node: Calling Functions\7f459272
-Node: Mapping Functions\7f463121
-Node: Anonymous Functions\7f465809
-Node: Function Cells\7f469054
-Node: Inline Functions\7f473864
-Node: Related Topics\7f475674
-Node: Macros\7f476727
-Node: Simple Macro\7f478011
-Node: Expansion\7f478746
-Node: Compiling Macros\7f481750
-Node: Defining Macros\7f483586
-Node: Backquote\7f484903
-Node: Problems with Macros\7f487300
-Node: Argument Evaluation\7f487995
-Node: Surprising Local Vars\7f490910
-Node: Eval During Expansion\7f492978
-Node: Repeated Expansion\7f494671
-Node: Customization\7f496587
-Node: Common Keywords\7f497056
-Node: Group Definitions\7f499901
-Node: Variable Definitions\7f502093
-Node: Customization Types\7f507076
-Node: Simple Types\7f508511
-Node: Composite Types\7f510668
-Node: Splicing into Lists\7f515358
-Node: Type Keywords\7f517193
-Node: Loading\7f520713
-Node: How Programs Do Loading\7f522388
-Node: Autoload\7f531515
-Node: Repeated Loading\7f537594
-Node: Named Features\7f539707
-Node: Unloading\7f546139
-Node: Hooks for Loading\7f548295
-Node: Byte Compilation\7f549012
-Node: Speed of Byte-Code\7f550929
-Node: Compilation Functions\7f552136
-Node: Docs and Compilation\7f558523
-Node: Dynamic Loading\7f561176
-Node: Eval During Compile\7f563540
-Node: Compiled-Function Objects\7f564805
-Node: Disassembly\7f569603
-Node: Debugging\7f576857
-Node: Debugger\7f578269
-Node: Error Debugging\7f579414
-Node: Infinite Loops\7f582167
-Node: Function Debugging\7f583411
-Node: Explicit Debug\7f586201
-Node: Using Debugger\7f586972
-Node: Debugger Commands\7f588834
-Node: Invoking the Debugger\7f593151
-Node: Internals of Debugger\7f597066
-Node: Syntax Errors\7f601953
-Node: Excess Open\7f603201
-Node: Excess Close\7f605076
-Node: Compilation Errors\7f606497
-Node: Edebug\7f607785
-Node: Using Edebug\7f609893
-Node: Instrumenting\7f612590
-Node: Edebug Execution Modes\7f616079
-Node: Jumping\7f619189
-Node: Edebug Misc\7f621532
-Node: Breakpoints\7f622921
-Node: Global Break Condition\7f625727
-Node: Embedded Breakpoints\7f626682
-Node: Trapping Errors\7f627637
-Node: Edebug Views\7f629713
-Node: Edebug Eval\7f631678
-Node: Eval List\7f632855
-Node: Reading in Edebug\7f636240
-Node: Printing in Edebug\7f637039
-Node: Tracing\7f638754
-Node: Coverage Testing\7f640640
-Node: The Outside Context\7f642681
-Node: Checking Whether to Stop\7f643630
-Node: Edebug Display Update\7f644277
-Node: Edebug Recursive Edit\7f646300
-Node: Instrumenting Macro Calls\7f647955
-Node: Specification List\7f650437
-Node: Backtracking\7f659848
-Node: Debugging Backquote\7f661786
-Node: Specification Examples\7f665492
-Node: Edebug Options\7f667559
-Node: Read and Print\7f672896
-Node: Streams Intro\7f673873
-Node: Input Streams\7f675891
-Node: Input Functions\7f680792
-Node: Output Streams\7f682852
-Node: Output Functions\7f686903
-Node: Output Variables\7f691203
-Node: Minibuffers\7f696002
-Node: Intro to Minibuffers\7f697154
-Node: Text from Minibuffer\7f699342
-Node: Object from Minibuffer\7f704217
-Node: Minibuffer History\7f707444
-Node: Completion\7f710423
-Node: Basic Completion\7f712398
-Node: Minibuffer Completion\7f717427
-Node: Completion Commands\7f721004
-Node: High-Level Completion\7f725647
-Node: Reading File Names\7f729671
-Node: Programmed Completion\7f733355
-Node: Yes-or-No Queries\7f735737
-Node: Multiple Queries\7f741474
-Node: Reading a Password\7f745541
-Node: Minibuffer Misc\7f746878
-Node: Command Loop\7f751748
-Node: Command Overview\7f753092
-Node: Defining Commands\7f756370
-Node: Using Interactive\7f757118
-Node: Interactive Codes\7f761891
-Node: Interactive Examples\7f767683
-Node: Interactive Call\7f768997
-Node: Command Loop Info\7f774398
-Node: Events\7f779377
-Node: Event Types\7f780837
-Node: Event Contents\7f782760
-Node: Event Predicates\7f787236
-Node: Accessing Mouse Event Positions\7f788561
-Node: Frame-Level Event Position Info\7f789260
-Node: Window-Level Event Position Info\7f790300
-Node: Event Text Position Info\7f792064
-Node: Event Glyph Position Info\7f794556
-Node: Event Toolbar Position Info\7f795879
-Node: Other Event Position Info\7f796550
-Node: Accessing Other Event Info\7f796959
-Node: Working With Events\7f798579
-Node: Converting Events\7f804567
-Node: Reading Input\7f807520
-Node: Key Sequence Input\7f808522
-Node: Reading One Event\7f810476
-Node: Dispatching an Event\7f813237
-Node: Quoted Character Input\7f813688
-Node: Peeking and Discarding\7f815036
-Node: Waiting\7f818940
-Node: Quitting\7f821248
-Node: Prefix Command Arguments\7f825656
-Node: Recursive Editing\7f830743
-Node: Disabling Commands\7f835539
-Node: Command History\7f837607
-Node: Keyboard Macros\7f839344
-Node: Keymaps\7f841561
-Node: Keymap Terminology\7f843138
-Node: Format of Keymaps\7f846067
-Node: Creating Keymaps\7f846478
-Node: Inheritance and Keymaps\7f848557
-Node: Key Sequences\7f850929
-Node: Prefix Keys\7f855499
-Node: Active Keymaps\7f859084
-Node: Key Lookup\7f868299
-Node: Functions for Key Lookup\7f873462
-Node: Changing Key Bindings\7f879159
-Node: Key Binding Commands\7f886056
-Node: Scanning Keymaps\7f888121
-Node: Other Keymap Functions\7f896632
-Node: Menus\7f897254
-Node: Menu Format\7f897796
-Node: Menubar Format\7f906381
-Node: Menubar\7f907006
-Node: Modifying Menus\7f910119
-Node: Menu Filters\7f915133
-Node: Pop-Up Menus\7f917029
-Node: Menu Accelerators\7f919234
-Node: Creating Menu Accelerators\7f919956
-Node: Keyboard Menu Traversal\7f921274
-Node: Menu Accelerator Functions\7f922001
-Node: Buffers Menu\7f925036
-Node: Dialog Boxes\7f926330
-Node: Dialog Box Format\7f926497
-Node: Dialog Box Functions\7f927867
-Node: Toolbar\7f928264
-Node: Toolbar Intro\7f928589
-Node: Toolbar Descriptor Format\7f930999
-Node: Specifying the Toolbar\7f935493
-Node: Other Toolbar Variables\7f939098
-Node: Scrollbars\7f943525
-Node: Drag and Drop\7f943661
-Node: Supported Protocols\7f944737
-Node: OffiX DND\7f945240
-Node: CDE dt\7f946247
-Node: MSWindows OLE\7f946838
-Node: Loose ends\7f947009
-Node: Drop Interface\7f947401
-Node: Drag Interface\7f948423
-Node: Modes\7f948597
-Node: Major Modes\7f949548
-Node: Major Mode Conventions\7f952463
-Node: Example Major Modes\7f958418
-Node: Auto Major Mode\7f966451
-Node: Mode Help\7f973899
-Node: Derived Modes\7f975000
-Node: Minor Modes\7f977191
-Node: Minor Mode Conventions\7f978493
-Node: Keymaps and Minor Modes\7f981356
-Node: Modeline Format\7f982191
-Node: Modeline Data\7f983959
-Node: Modeline Variables\7f988229
-Node: %-Constructs\7f992945
-Node: Hooks\7f995856
-Node: Documentation\7f1002618
-Node: Documentation Basics\7f1004041
-Node: Accessing Documentation\7f1007091
-Node: Keys in Documentation\7f1013370
-Node: Describing Characters\7f1016849
-Node: Help Functions\7f1019198
-Node: Obsoleteness\7f1025649
-Node: Files\7f1028643
-Node: Visiting Files\7f1030568
-Node: Visiting Functions\7f1032073
-Node: Subroutines of Visiting\7f1037120
-Node: Saving Buffers\7f1039193
-Node: Reading from Files\7f1045286
-Node: Writing to Files\7f1047443
-Node: File Locks\7f1050160
-Node: Information about Files\7f1053213
-Node: Testing Accessibility\7f1053974
-Node: Kinds of Files\7f1057714
-Node: Truenames\7f1059395
-Node: File Attributes\7f1060397
-Node: Changing File Attributes\7f1065536
-Node: File Names\7f1070942
-Node: File Name Components\7f1072551
-Node: Directory Names\7f1075652
-Node: Relative File Names\7f1079105
-Node: File Name Expansion\7f1080183
-Node: Unique File Names\7f1084090
-Node: File Name Completion\7f1085705
-Node: User Name Completion\7f1088366
-Node: Contents of Directories\7f1089706
-Node: Create/Delete Dirs\7f1093019
-Node: Magic File Names\7f1094125
-Node: Partial Files\7f1099755
-Node: Intro to Partial Files\7f1099983
-Node: Creating a Partial File\7f1101223
-Node: Detached Partial Files\7f1102158
-Node: Format Conversion\7f1103280
-Node: Files and MS-DOS\7f1109796
-Node: Backups and Auto-Saving\7f1111860
-Node: Backup Files\7f1112535
-Node: Making Backups\7f1113932
-Node: Rename or Copy\7f1116681
-Node: Numbered Backups\7f1119174
-Node: Backup Names\7f1121418
-Node: Auto-Saving\7f1124710
-Node: Reverting\7f1132852
-Node: Buffers\7f1136010
-Node: Buffer Basics\7f1137427
-Node: Current Buffer\7f1139480
-Node: Buffer Names\7f1144168
-Node: Buffer File Name\7f1147373
-Node: Buffer Modification\7f1151492
-Node: Modification Time\7f1153685
-Node: Read Only Buffers\7f1157060
-Node: The Buffer List\7f1159478
-Node: Creating Buffers\7f1164308
-Node: Killing Buffers\7f1166454
-Node: Indirect Buffers\7f1170185
-Node: Windows\7f1172757
-Node: Basic Windows\7f1174235
-Node: Splitting Windows\7f1177333
-Node: Deleting Windows\7f1184222
-Node: Selecting Windows\7f1186902
-Node: Cyclic Window Ordering\7f1190031
-Node: Buffers and Windows\7f1194655
-Node: Displaying Buffers\7f1196496
-Node: Choosing Window\7f1201672
-Node: Window Point\7f1209388
-Node: Window Start\7f1211434
-Node: Vertical Scrolling\7f1215924
-Node: Horizontal Scrolling\7f1222061
-Node: Size of Window\7f1225570
-Node: Position of Window\7f1230288
-Node: Resizing Windows\7f1232528
-Node: Window Configurations\7f1237957
-Node: Frames\7f1241382
-Node: Creating Frames\7f1243151
-Node: Frame Properties\7f1244492
-Node: Property Access\7f1245308
-Node: Initial Properties\7f1246157
-Node: X Frame Properties\7f1248643
-Node: Size and Position\7f1253277
-Node: Frame Name\7f1255273
-Node: Frame Titles\7f1256187
-Node: Deleting Frames\7f1258011
-Node: Finding All Frames\7f1258611
-Node: Frames and Windows\7f1260605
-Node: Minibuffers and Frames\7f1262310
-Node: Input Focus\7f1263228
-Node: Visibility of Frames\7f1266305
-Node: Raising and Lowering\7f1268224
-Node: Frame Configurations\7f1270600
-Node: Frame Hooks\7f1271194
-Node: Consoles and Devices\7f1272999
-Node: Basic Console Functions\7f1275743
-Node: Basic Device Functions\7f1276166
-Node: Console Types and Device Classes\7f1276882
-Node: Connecting to a Console or Device\7f1279079
-Node: The Selected Console and Device\7f1281242
-Node: Console and Device I/O\7f1282268
-Node: Positions\7f1283032
-Node: Point\7f1284001
-Node: Motion\7f1287091
-Node: Character Motion\7f1287858
-Node: Word Motion\7f1290095
-Node: Buffer End Motion\7f1291596
-Node: Text Lines\7f1293093
-Node: Screen Lines\7f1297688
-Node: List Motion\7f1301751
-Node: Skipping Characters\7f1305159
-Node: Excursions\7f1307378
-Node: Narrowing\7f1310410
-Node: Markers\7f1315735
-Node: Overview of Markers\7f1316641
-Node: Predicates on Markers\7f1321333
-Node: Creating Markers\7f1322579
-Node: Information from Markers\7f1326616
-Node: Changing Markers\7f1327714
-Node: The Mark\7f1329092
-Node: The Region\7f1337586
-Node: Text\7f1343273
-Node: Near Point\7f1345972
-Node: Buffer Contents\7f1350159
-Node: Comparing Text\7f1351565
-Node: Insertion\7f1352973
-Node: Commands for Insertion\7f1356815
-Node: Deletion\7f1359771
-Node: User-Level Deletion\7f1363366
-Node: The Kill Ring\7f1367527
-Node: Kill Ring Concepts\7f1369701
-Node: Kill Functions\7f1370755
-Node: Yank Commands\7f1372660
-Node: Low-Level Kill Ring\7f1374531
-Node: Internals of Kill Ring\7f1377317
-Node: Undo\7f1380097
-Node: Maintaining Undo\7f1384426
-Node: Filling\7f1387046
-Node: Margins\7f1393040
-Node: Auto Filling\7f1396969
-Node: Sorting\7f1398150
-Node: Columns\7f1407450
-Node: Indentation\7f1409966
-Node: Primitive Indent\7f1410745
-Node: Mode-Specific Indent\7f1411989
-Node: Region Indent\7f1414500
-Node: Relative Indent\7f1417448
-Node: Indent Tabs\7f1419830
-Node: Motion by Indent\7f1421151
-Node: Case Changes\7f1421930
-Node: Text Properties\7f1425181
-Node: Examining Properties\7f1426994
-Node: Changing Properties\7f1428861
-Node: Property Search\7f1432452
-Node: Special Properties\7f1437163
-Node: Saving Properties\7f1437444
-Node: Substitution\7f1440586
-Node: Registers\7f1443856
-Node: Transposition\7f1446399
-Node: Change Hooks\7f1447293
-Node: Transformations\7f1449333
-Node: Searching and Matching\7f1453718
-Node: String Search\7f1454849
-Node: Regular Expressions\7f1459573
-Node: Syntax of Regexps\7f1460940
-Node: Regexp Example\7f1475319
-Node: Regexp Search\7f1477489
-Node: POSIX Regexps\7f1483577
-Node: Search and Replace\7f1485412
-Node: Match Data\7f1488777
-Node: Simple Match Data\7f1489907
-Node: Replacing Match\7f1494172
-Node: Entire Match Data\7f1496506
-Node: Saving Match Data\7f1498497
-Node: Searching and Case\7f1499878
-Node: Standard Regexps\7f1501912
-Node: Syntax Tables\7f1504110
-Node: Syntax Basics\7f1505224
-Node: Syntax Descriptors\7f1508196
-Node: Syntax Class Table\7f1510046
-Node: Syntax Flags\7f1516084
-Node: Syntax Table Functions\7f1519301
-Node: Motion and Syntax\7f1523165
-Node: Parsing Expressions\7f1524617
-Node: Standard Syntax Tables\7f1530686
-Node: Syntax Table Internals\7f1531530
-Node: Abbrevs\7f1532556
-Node: Abbrev Mode\7f1534359
-Node: Abbrev Tables\7f1535079
-Node: Defining Abbrevs\7f1536612
-Node: Abbrev Files\7f1538517
-Node: Abbrev Expansion\7f1540290
-Node: Standard Abbrev Tables\7f1544921
-Node: Extents\7f1546080
-Node: Intro to Extents\7f1547323
-Node: Creating and Modifying Extents\7f1551317
-Node: Extent Endpoints\7f1552824
-Node: Finding Extents\7f1556087
-Node: Mapping Over Extents\7f1559836
-Node: Extent Properties\7f1565953
-Node: Detached Extents\7f1576097
-Node: Extent Parents\7f1577956
-Node: Duplicable Extents\7f1579651
-Node: Extents and Events\7f1582872
-Node: Atomic Extents\7f1584779
-Node: Specifiers\7f1585226
-Node: Introduction to Specifiers\7f1587033
-Node: Specifiers In-Depth\7f1589343
-Node: Specifier Instancing\7f1594257
-Node: Specifier Types\7f1597519
-Node: Adding Specifications\7f1602593
-Node: Retrieving Specifications\7f1611955
-Node: Specifier Tag Functions\7f1615690
-Node: Specifier Instancing Functions\7f1618924
-Node: Specifier Example\7f1622331
-Node: Creating Specifiers\7f1625437
-Node: Specifier Validation Functions\7f1627686
-Node: Other Specification Functions\7f1630070
-Node: Faces and Window-System Objects\7f1633889
-Node: Faces\7f1634213
-Node: Merging Faces\7f1635830
-Node: Basic Face Functions\7f1637791
-Node: Face Properties\7f1639889
-Node: Face Convenience Functions\7f1649448
-Node: Other Face Display Functions\7f1652578
-Node: Fonts\7f1653391
-Node: Font Specifiers\7f1654092
-Node: Font Instances\7f1654333
-Node: Font Instance Names\7f1655300
-Node: Font Instance Size\7f1656141
-Node: Font Instance Characteristics\7f1657427
-Node: Font Convenience Functions\7f1658596
-Node: Colors\7f1659886
-Node: Color Specifiers\7f1660326
-Node: Color Instances\7f1660553
-Node: Color Instance Properties\7f1661297
-Node: Color Convenience Functions\7f1661923
-Node: Glyphs\7f1662976
-Node: Glyph Functions\7f1664568
-Node: Creating Glyphs\7f1664975
-Node: Glyph Properties\7f1666562
-Node: Glyph Convenience Functions\7f1675729
-Node: Glyph Dimensions\7f1679676
-Node: Images\7f1680756
-Node: Image Specifiers\7f1681205
-Node: Image Instantiator Conversion\7f1692627
-Node: Image Instances\7f1693992
-Node: Image Instance Types\7f1694743
-Node: Image Instance Functions\7f1697398
-Node: Glyph Types\7f1701967
-Node: Mouse Pointer\7f1703739
-Node: Redisplay Glyphs\7f1706742
-Node: Subwindows\7f1707775
-Node: Annotations\7f1708018
-Node: Annotation Basics\7f1709034
-Node: Annotation Primitives\7f1712972
-Node: Annotation Properties\7f1714301
-Node: Locating Annotations\7f1717341
-Node: Margin Primitives\7f1718178
-Node: Annotation Hooks\7f1720072
-Node: Display\7f1720732
-Node: Refresh Screen\7f1721710
-Node: Truncation\7f1723621
-Node: The Echo Area\7f1726146
-Node: Warnings\7f1732581
-Node: Invisible Text\7f1737017
-Node: Selective Display\7f1739596
-Node: Overlay Arrow\7f1743722
-Node: Temporary Displays\7f1745075
-Node: Blinking\7f1749196
-Node: Usual Display\7f1751381
-Node: Display Tables\7f1753930
-Node: Display Table Format\7f1754734
-Node: Active Display Table\7f1756176
-Node: Character Descriptors\7f1757368
-Node: Beeping\7f1758125
-Node: Hash Tables\7f1762891
-Node: Introduction to Hash Tables\7f1763499
-Node: Working With Hash Tables\7f1769522
-Node: Weak Hash Tables\7f1770639
-Node: Range Tables\7f1772438
-Node: Introduction to Range Tables\7f1773127
-Node: Working With Range Tables\7f1773558
-Node: Databases\7f1774443
-Node: Connecting to a Database\7f1774742
-Node: Working With a Database\7f1775833
-Node: Other Database Functions\7f1776691
-Node: Processes\7f1777265
-Node: Subprocess Creation\7f1779489
-Node: Synchronous Processes\7f1782778
-Node: MS-DOS Subprocesses\7f1789496
-Node: Asynchronous Processes\7f1790570
-Node: Deleting Processes\7f1794283
-Node: Process Information\7f1796154
-Node: Input to Processes\7f1800080
-Node: Signals to Processes\7f1802370
-Node: Output from Processes\7f1806790
-Node: Process Buffers\7f1807602
-Node: Filter Functions\7f1810469
-Node: Accepting Output\7f1816039
-Node: Sentinels\7f1817566
-Node: Process Window Size\7f1821056
-Node: Transaction Queues\7f1821405
-Node: Network\7f1823103
-Node: System Interface\7f1824937
-Node: Starting Up\7f1826207
-Node: Start-up Summary\7f1826801
-Node: Init File\7f1830355
-Node: Terminal-Specific\7f1832736
-Node: Command Line Arguments\7f1835895
-Node: Getting Out\7f1839384
-Node: Killing XEmacs\7f1839953
-Node: Suspending XEmacs\7f1841622
-Node: System Environment\7f1844964
-Node: User Identification\7f1851631
-Node: Time of Day\7f1855160
-Node: Time Conversion\7f1857947
-Node: Timers\7f1862987
-Node: Terminal Input\7f1865160
-Node: Input Modes\7f1865663
-Node: Translating Input\7f1868076
-Node: Recording Input\7f1872241
-Node: Terminal Output\7f1874341
-Node: Flow Control\7f1877964
-Node: Batch Mode\7f1881756
-Node: X-Windows\7f1883138
-Node: X Selections\7f1883950
-Node: X Server\7f1886160
-Node: Resources\7f1886561
-Node: Server Data\7f1891702
-Node: Grabs\7f1892909
-Node: X Miscellaneous\7f1894490
-Node: ToolTalk Support\7f1896875
-Node: XEmacs ToolTalk API Summary\7f1897092
-Node: Sending Messages\7f1898392
-Node: Example of Sending Messages\7f1898643
-Node: Elisp Interface for Sending Messages\7f1899705
-Node: Receiving Messages\7f1906098
-Node: Example of Receiving Messages\7f1906321
-Node: Elisp Interface for Receiving Messages\7f1907157
-Node: LDAP Support\7f1910982
-Node: Building XEmacs with LDAP support\7f1911478
-Node: XEmacs LDAP API\7f1912456
-Node: LDAP Variables\7f1913186
-Node: The High-Level LDAP API\7f1915662
-Node: The Low-Level LDAP API\7f1916767
-Node: The LDAP Lisp Object\7f1917041
-Node: Opening and Closing a LDAP Connection\7f1917594
-Node: Searching on a LDAP Server (Low-level)\7f1919377
-Node: Syntax of Search Filters\7f1920770
-Node: Internationalization\7f1922068
-Node: I18N Levels 1 and 2\7f1922405
-Node: I18N Level 3\7f1923111
-Node: Level 3 Basics\7f1923392
-Node: Level 3 Primitives\7f1924225
-Node: Dynamic Messaging\7f1925831
-Node: Domain Specification\7f1926294
-Node: Documentation String Extraction\7f1928197
-Node: I18N Level 4\7f1929115
-Node: MULE\7f1929307
-Node: Internationalization Terminology\7f1930418
-Node: Charsets\7f1938957
-Node: Charset Properties\7f1939653
-Node: Basic Charset Functions\7f1944339
-Node: Charset Property Functions\7f1946520
-Node: Predefined Charsets\7f1948563
-Node: MULE Characters\7f1951483
-Node: Composite Characters\7f1952330
-Node: ISO 2022\7f1953584
-Node: Coding Systems\7f1959306
-Node: Coding System Types\7f1961228
-Node: EOL Conversion\7f1963047
-Node: Coding System Properties\7f1964230
-Node: Basic Coding System Functions\7f1968082
-Node: Coding System Property Functions\7f1969986
-Node: Encoding and Decoding Text\7f1970544
-Node: Detection of Textual Encoding\7f1971680
-Node: Big5 and Shift-JIS Functions\7f1973216
-Node: CCL\7f1974304
-Node: CCL Syntax\7f1977408
-Node: CCL Statements\7f1978996
-Node: CCL Expressions\7f1983644
-Node: Calling CCL\7f1986183
-Node: CCL Examples\7f1989172
-Node: Category Tables\7f1989309
-Node: Tips\7f1991668
-Node: Style Tips\7f1992309
-Node: Compilation Tips\7f2001828
-Node: Documentation Tips\7f2003742
-Node: Comment Tips\7f2009251
-Node: Library Headers\7f2012253
-Node: Building XEmacs and Object Allocation\7f2016225
-Node: Building XEmacs\7f2017108
-Node: Pure Storage\7f2023443
-Node: Garbage Collection\7f2026231
-Node: Standard Errors\7f2037370
-Node: Standard Buffer-Local Variables\7f2041579
-Node: Standard Keymaps\7f2044212
-Node: Standard Hooks\7f2047944
-Node: Index\7f2055444
+Node: Processing of Errors\7f377998
+Node: Handling Errors\7f380277
+Node: Error Symbols\7f387518
+Node: Cleanups\7f391474
+Node: Variables\7f395252
+Node: Global Variables\7f397021
+Node: Constant Variables\7f398097
+Node: Local Variables\7f398723
+Node: Void Variables\7f403660
+Node: Defining Variables\7f407176
+Node: Accessing Variables\7f414340
+Node: Setting Variables\7f415765
+Node: Variable Scoping\7f420284
+Node: Scope\7f421883
+Node: Extent\7f423408
+Node: Impl of Scope\7f424887
+Node: Using Scoping\7f426850
+Node: Buffer-Local Variables\7f428372
+Node: Intro to Buffer-Local\7f429208
+Node: Creating Buffer-Local\7f431751
+Node: Default Value\7f436970
+Node: Variable Aliases\7f440113
+Node: Functions\7f441898
+Node: What Is a Function\7f442992
+Node: Lambda Expressions\7f447038
+Node: Lambda Components\7f447948
+Node: Simple Lambda\7f449780
+Node: Argument List\7f451437
+Node: Function Documentation\7f455165
+Node: Function Names\7f457107
+Node: Defining Functions\7f459680
+Node: Calling Functions\7f462720
+Node: Mapping Functions\7f466569
+Node: Anonymous Functions\7f469257
+Node: Function Cells\7f472502
+Node: Inline Functions\7f477312
+Node: Related Topics\7f479122
+Node: Macros\7f480175
+Node: Simple Macro\7f481459
+Node: Expansion\7f482194
+Node: Compiling Macros\7f485198
+Node: Defining Macros\7f487034
+Node: Backquote\7f488351
+Node: Problems with Macros\7f490748
+Node: Argument Evaluation\7f491443
+Node: Surprising Local Vars\7f494358
+Node: Eval During Expansion\7f496426
+Node: Repeated Expansion\7f498119
+Node: Customization\7f500035
+Node: Common Keywords\7f500504
+Node: Group Definitions\7f503349
+Node: Variable Definitions\7f505541
+Node: Customization Types\7f510524
+Node: Simple Types\7f511959
+Node: Composite Types\7f514116
+Node: Splicing into Lists\7f518806
+Node: Type Keywords\7f520641
+Node: Loading\7f524161
+Node: How Programs Do Loading\7f525836
+Node: Autoload\7f534963
+Node: Repeated Loading\7f541042
+Node: Named Features\7f543155
+Node: Unloading\7f549587
+Node: Hooks for Loading\7f551743
+Node: Byte Compilation\7f552460
+Node: Speed of Byte-Code\7f554377
+Node: Compilation Functions\7f555584
+Node: Docs and Compilation\7f561971
+Node: Dynamic Loading\7f564624
+Node: Eval During Compile\7f566988
+Node: Compiled-Function Objects\7f568253
+Node: Disassembly\7f573051
+Node: Debugging\7f580305
+Node: Debugger\7f581717
+Node: Error Debugging\7f582862
+Node: Infinite Loops\7f585615
+Node: Function Debugging\7f586859
+Node: Explicit Debug\7f589649
+Node: Using Debugger\7f590420
+Node: Debugger Commands\7f592282
+Node: Invoking the Debugger\7f596599
+Node: Internals of Debugger\7f600514
+Node: Syntax Errors\7f605401
+Node: Excess Open\7f606649
+Node: Excess Close\7f608524
+Node: Compilation Errors\7f609945
+Node: Edebug\7f611233
+Node: Using Edebug\7f613341
+Node: Instrumenting\7f616038
+Node: Edebug Execution Modes\7f619527
+Node: Jumping\7f622637
+Node: Edebug Misc\7f624980
+Node: Breakpoints\7f626369
+Node: Global Break Condition\7f629175
+Node: Embedded Breakpoints\7f630130
+Node: Trapping Errors\7f631085
+Node: Edebug Views\7f633161
+Node: Edebug Eval\7f635126
+Node: Eval List\7f636303
+Node: Reading in Edebug\7f639688
+Node: Printing in Edebug\7f640487
+Node: Tracing\7f642202
+Node: Coverage Testing\7f644088
+Node: The Outside Context\7f646129
+Node: Checking Whether to Stop\7f647078
+Node: Edebug Display Update\7f647725
+Node: Edebug Recursive Edit\7f649748
+Node: Instrumenting Macro Calls\7f651403
+Node: Specification List\7f653885
+Node: Backtracking\7f663296
+Node: Debugging Backquote\7f665234
+Node: Specification Examples\7f668940
+Node: Edebug Options\7f671007
+Node: Read and Print\7f676344
+Node: Streams Intro\7f677321
+Node: Input Streams\7f679339
+Node: Input Functions\7f684240
+Node: Output Streams\7f686300
+Node: Output Functions\7f690351
+Node: Output Variables\7f694651
+Node: Minibuffers\7f699450
+Node: Intro to Minibuffers\7f700602
+Node: Text from Minibuffer\7f702790
+Node: Object from Minibuffer\7f707665
+Node: Minibuffer History\7f710892
+Node: Completion\7f713871
+Node: Basic Completion\7f715846
+Node: Minibuffer Completion\7f720875
+Node: Completion Commands\7f724452
+Node: High-Level Completion\7f729095
+Node: Reading File Names\7f733119
+Node: Programmed Completion\7f736803
+Node: Yes-or-No Queries\7f739185
+Node: Multiple Queries\7f744922
+Node: Reading a Password\7f748989
+Node: Minibuffer Misc\7f750326
+Node: Command Loop\7f755196
+Node: Command Overview\7f756540
+Node: Defining Commands\7f759818
+Node: Using Interactive\7f760566
+Node: Interactive Codes\7f765339
+Node: Interactive Examples\7f771131
+Node: Interactive Call\7f772445
+Node: Command Loop Info\7f777846
+Node: Events\7f782825
+Node: Event Types\7f784285
+Node: Event Contents\7f786208
+Node: Event Predicates\7f790684
+Node: Accessing Mouse Event Positions\7f792009
+Node: Frame-Level Event Position Info\7f792708
+Node: Window-Level Event Position Info\7f793748
+Node: Event Text Position Info\7f795512
+Node: Event Glyph Position Info\7f798004
+Node: Event Toolbar Position Info\7f799327
+Node: Other Event Position Info\7f799998
+Node: Accessing Other Event Info\7f800407
+Node: Working With Events\7f802027
+Node: Converting Events\7f808015
+Node: Reading Input\7f810968
+Node: Key Sequence Input\7f811970
+Node: Reading One Event\7f813924
+Node: Dispatching an Event\7f816685
+Node: Quoted Character Input\7f817136
+Node: Peeking and Discarding\7f818484
+Node: Waiting\7f822388
+Node: Quitting\7f824696
+Node: Prefix Command Arguments\7f829104
+Node: Recursive Editing\7f834191
+Node: Disabling Commands\7f838987
+Node: Command History\7f841055
+Node: Keyboard Macros\7f842792
+Node: Keymaps\7f845009
+Node: Keymap Terminology\7f846586
+Node: Format of Keymaps\7f849515
+Node: Creating Keymaps\7f849926
+Node: Inheritance and Keymaps\7f852005
+Node: Key Sequences\7f854377
+Node: Prefix Keys\7f858947
+Node: Active Keymaps\7f862532
+Node: Key Lookup\7f871747
+Node: Functions for Key Lookup\7f876910
+Node: Changing Key Bindings\7f882607
+Node: Key Binding Commands\7f889504
+Node: Scanning Keymaps\7f891569
+Node: Other Keymap Functions\7f900080
+Node: Menus\7f900702
+Node: Menu Format\7f901244
+Node: Menubar Format\7f909829
+Node: Menubar\7f910454
+Node: Modifying Menus\7f913567
+Node: Menu Filters\7f918581
+Node: Pop-Up Menus\7f920477
+Node: Menu Accelerators\7f922682
+Node: Creating Menu Accelerators\7f923404
+Node: Keyboard Menu Traversal\7f924722
+Node: Menu Accelerator Functions\7f925449
+Node: Buffers Menu\7f928484
+Node: Dialog Boxes\7f929778
+Node: Dialog Box Format\7f929945
+Node: Dialog Box Functions\7f931315
+Node: Toolbar\7f931712
+Node: Toolbar Intro\7f932037
+Node: Toolbar Descriptor Format\7f934447
+Node: Specifying the Toolbar\7f938941
+Node: Other Toolbar Variables\7f942546
+Node: Scrollbars\7f946973
+Node: Drag and Drop\7f947109
+Node: Supported Protocols\7f948185
+Node: OffiX DND\7f948688
+Node: CDE dt\7f949695
+Node: MSWindows OLE\7f950286
+Node: Loose ends\7f950457
+Node: Drop Interface\7f950849
+Node: Drag Interface\7f951871
+Node: Modes\7f952045
+Node: Major Modes\7f952996
+Node: Major Mode Conventions\7f955911
+Node: Example Major Modes\7f961866
+Node: Auto Major Mode\7f969899
+Node: Mode Help\7f977347
+Node: Derived Modes\7f978448
+Node: Minor Modes\7f980639
+Node: Minor Mode Conventions\7f981941
+Node: Keymaps and Minor Modes\7f984804
+Node: Modeline Format\7f985639
+Node: Modeline Data\7f987407
+Node: Modeline Variables\7f991677
+Node: %-Constructs\7f996393
+Node: Hooks\7f999304
+Node: Documentation\7f1006066
+Node: Documentation Basics\7f1007489
+Node: Accessing Documentation\7f1010539
+Node: Keys in Documentation\7f1016818
+Node: Describing Characters\7f1020297
+Node: Help Functions\7f1022646
+Node: Obsoleteness\7f1029097
+Node: Files\7f1032091
+Node: Visiting Files\7f1034016
+Node: Visiting Functions\7f1035521
+Node: Subroutines of Visiting\7f1040568
+Node: Saving Buffers\7f1042641
+Node: Reading from Files\7f1048734
+Node: Writing to Files\7f1050891
+Node: File Locks\7f1053608
+Node: Information about Files\7f1056661
+Node: Testing Accessibility\7f1057422
+Node: Kinds of Files\7f1061162
+Node: Truenames\7f1062843
+Node: File Attributes\7f1063845
+Node: Changing File Attributes\7f1068984
+Node: File Names\7f1074390
+Node: File Name Components\7f1075999
+Node: Directory Names\7f1079100
+Node: Relative File Names\7f1082553
+Node: File Name Expansion\7f1083631
+Node: Unique File Names\7f1087538
+Node: File Name Completion\7f1089153
+Node: User Name Completion\7f1091814
+Node: Contents of Directories\7f1093154
+Node: Create/Delete Dirs\7f1096467
+Node: Magic File Names\7f1097573
+Node: Partial Files\7f1103203
+Node: Intro to Partial Files\7f1103431
+Node: Creating a Partial File\7f1104671
+Node: Detached Partial Files\7f1105606
+Node: Format Conversion\7f1106728
+Node: Files and MS-DOS\7f1113244
+Node: Backups and Auto-Saving\7f1115308
+Node: Backup Files\7f1115983
+Node: Making Backups\7f1117380
+Node: Rename or Copy\7f1120129
+Node: Numbered Backups\7f1122622
+Node: Backup Names\7f1124866
+Node: Auto-Saving\7f1128158
+Node: Reverting\7f1136300
+Node: Buffers\7f1139458
+Node: Buffer Basics\7f1140875
+Node: Current Buffer\7f1142928
+Node: Buffer Names\7f1147616
+Node: Buffer File Name\7f1150821
+Node: Buffer Modification\7f1154940
+Node: Modification Time\7f1157133
+Node: Read Only Buffers\7f1160508
+Node: The Buffer List\7f1162926
+Node: Creating Buffers\7f1167756
+Node: Killing Buffers\7f1169902
+Node: Indirect Buffers\7f1173633
+Node: Windows\7f1176205
+Node: Basic Windows\7f1177683
+Node: Splitting Windows\7f1180781
+Node: Deleting Windows\7f1187670
+Node: Selecting Windows\7f1190350
+Node: Cyclic Window Ordering\7f1193479
+Node: Buffers and Windows\7f1198103
+Node: Displaying Buffers\7f1199944
+Node: Choosing Window\7f1205120
+Node: Window Point\7f1212836
+Node: Window Start\7f1214882
+Node: Vertical Scrolling\7f1219372
+Node: Horizontal Scrolling\7f1225509
+Node: Size of Window\7f1229018
+Node: Position of Window\7f1233736
+Node: Resizing Windows\7f1235976
+Node: Window Configurations\7f1241405
+Node: Frames\7f1244830
+Node: Creating Frames\7f1246599
+Node: Frame Properties\7f1247940
+Node: Property Access\7f1248756
+Node: Initial Properties\7f1249605
+Node: X Frame Properties\7f1252091
+Node: Size and Position\7f1256725
+Node: Frame Name\7f1258721
+Node: Frame Titles\7f1259635
+Node: Deleting Frames\7f1261459
+Node: Finding All Frames\7f1262059
+Node: Frames and Windows\7f1264053
+Node: Minibuffers and Frames\7f1265758
+Node: Input Focus\7f1266676
+Node: Visibility of Frames\7f1269753
+Node: Raising and Lowering\7f1271672
+Node: Frame Configurations\7f1274048
+Node: Frame Hooks\7f1274642
+Node: Consoles and Devices\7f1276447
+Node: Basic Console Functions\7f1279191
+Node: Basic Device Functions\7f1279614
+Node: Console Types and Device Classes\7f1280330
+Node: Connecting to a Console or Device\7f1282527
+Node: The Selected Console and Device\7f1284690
+Node: Console and Device I/O\7f1285716
+Node: Positions\7f1286480
+Node: Point\7f1287449
+Node: Motion\7f1290539
+Node: Character Motion\7f1291306
+Node: Word Motion\7f1293543
+Node: Buffer End Motion\7f1295044
+Node: Text Lines\7f1296541
+Node: Screen Lines\7f1301136
+Node: List Motion\7f1305199
+Node: Skipping Characters\7f1308607
+Node: Excursions\7f1310826
+Node: Narrowing\7f1313858
+Node: Markers\7f1319183
+Node: Overview of Markers\7f1320089
+Node: Predicates on Markers\7f1324781
+Node: Creating Markers\7f1326027
+Node: Information from Markers\7f1330064
+Node: Changing Markers\7f1331162
+Node: The Mark\7f1332540
+Node: The Region\7f1341034
+Node: Text\7f1346721
+Node: Near Point\7f1349420
+Node: Buffer Contents\7f1353607
+Node: Comparing Text\7f1355013
+Node: Insertion\7f1356421
+Node: Commands for Insertion\7f1360263
+Node: Deletion\7f1363219
+Node: User-Level Deletion\7f1366814
+Node: The Kill Ring\7f1370975
+Node: Kill Ring Concepts\7f1373149
+Node: Kill Functions\7f1374203
+Node: Yank Commands\7f1376108
+Node: Low-Level Kill Ring\7f1377979
+Node: Internals of Kill Ring\7f1380765
+Node: Undo\7f1383545
+Node: Maintaining Undo\7f1387874
+Node: Filling\7f1390494
+Node: Margins\7f1396488
+Node: Auto Filling\7f1400417
+Node: Sorting\7f1401598
+Node: Columns\7f1410898
+Node: Indentation\7f1413414
+Node: Primitive Indent\7f1414193
+Node: Mode-Specific Indent\7f1415437
+Node: Region Indent\7f1417948
+Node: Relative Indent\7f1420896
+Node: Indent Tabs\7f1423278
+Node: Motion by Indent\7f1424599
+Node: Case Changes\7f1425378
+Node: Text Properties\7f1428629
+Node: Examining Properties\7f1430442
+Node: Changing Properties\7f1432309
+Node: Property Search\7f1435900
+Node: Special Properties\7f1440611
+Node: Saving Properties\7f1440892
+Node: Substitution\7f1444034
+Node: Registers\7f1447304
+Node: Transposition\7f1449847
+Node: Change Hooks\7f1450741
+Node: Transformations\7f1452781
+Node: Searching and Matching\7f1457166
+Node: String Search\7f1458297
+Node: Regular Expressions\7f1463021
+Node: Syntax of Regexps\7f1464388
+Node: Regexp Example\7f1478767
+Node: Regexp Search\7f1480937
+Node: POSIX Regexps\7f1487025
+Node: Search and Replace\7f1488860
+Node: Match Data\7f1492225
+Node: Simple Match Data\7f1493355
+Node: Replacing Match\7f1497620
+Node: Entire Match Data\7f1499954
+Node: Saving Match Data\7f1501945
+Node: Searching and Case\7f1503326
+Node: Standard Regexps\7f1505360
+Node: Syntax Tables\7f1507558
+Node: Syntax Basics\7f1508672
+Node: Syntax Descriptors\7f1511644
+Node: Syntax Class Table\7f1513494
+Node: Syntax Flags\7f1519532
+Node: Syntax Table Functions\7f1522749
+Node: Motion and Syntax\7f1526613
+Node: Parsing Expressions\7f1528065
+Node: Standard Syntax Tables\7f1534134
+Node: Syntax Table Internals\7f1534978
+Node: Abbrevs\7f1536004
+Node: Abbrev Mode\7f1537807
+Node: Abbrev Tables\7f1538527
+Node: Defining Abbrevs\7f1540060
+Node: Abbrev Files\7f1541965
+Node: Abbrev Expansion\7f1543738
+Node: Standard Abbrev Tables\7f1548369
+Node: Extents\7f1549528
+Node: Intro to Extents\7f1550771
+Node: Creating and Modifying Extents\7f1554765
+Node: Extent Endpoints\7f1556272
+Node: Finding Extents\7f1559535
+Node: Mapping Over Extents\7f1563284
+Node: Extent Properties\7f1569401
+Node: Detached Extents\7f1579545
+Node: Extent Parents\7f1581404
+Node: Duplicable Extents\7f1583099
+Node: Extents and Events\7f1586320
+Node: Atomic Extents\7f1588227
+Node: Specifiers\7f1588674
+Node: Introduction to Specifiers\7f1590481
+Node: Specifiers In-Depth\7f1592791
+Node: Specifier Instancing\7f1597705
+Node: Specifier Types\7f1600967
+Node: Adding Specifications\7f1606041
+Node: Retrieving Specifications\7f1615403
+Node: Specifier Tag Functions\7f1619138
+Node: Specifier Instancing Functions\7f1622372
+Node: Specifier Example\7f1625779
+Node: Creating Specifiers\7f1628885
+Node: Specifier Validation Functions\7f1631134
+Node: Other Specification Functions\7f1633518
+Node: Faces and Window-System Objects\7f1637337
+Node: Faces\7f1637661
+Node: Merging Faces\7f1639278
+Node: Basic Face Functions\7f1641239
+Node: Face Properties\7f1643337
+Node: Face Convenience Functions\7f1652896
+Node: Other Face Display Functions\7f1656026
+Node: Fonts\7f1656839
+Node: Font Specifiers\7f1657540
+Node: Font Instances\7f1657781
+Node: Font Instance Names\7f1658748
+Node: Font Instance Size\7f1659589
+Node: Font Instance Characteristics\7f1660875
+Node: Font Convenience Functions\7f1662044
+Node: Colors\7f1663334
+Node: Color Specifiers\7f1663774
+Node: Color Instances\7f1664001
+Node: Color Instance Properties\7f1664745
+Node: Color Convenience Functions\7f1665371
+Node: Glyphs\7f1666424
+Node: Glyph Functions\7f1668016
+Node: Creating Glyphs\7f1668423
+Node: Glyph Properties\7f1670010
+Node: Glyph Convenience Functions\7f1679177
+Node: Glyph Dimensions\7f1683124
+Node: Images\7f1684204
+Node: Image Specifiers\7f1684653
+Node: Image Instantiator Conversion\7f1696075
+Node: Image Instances\7f1697440
+Node: Image Instance Types\7f1698191
+Node: Image Instance Functions\7f1700846
+Node: Glyph Types\7f1705415
+Node: Mouse Pointer\7f1707187
+Node: Redisplay Glyphs\7f1710190
+Node: Subwindows\7f1711223
+Node: Annotations\7f1711466
+Node: Annotation Basics\7f1712482
+Node: Annotation Primitives\7f1716420
+Node: Annotation Properties\7f1717749
+Node: Locating Annotations\7f1720789
+Node: Margin Primitives\7f1721626
+Node: Annotation Hooks\7f1723520
+Node: Display\7f1724180
+Node: Refresh Screen\7f1725158
+Node: Truncation\7f1727069
+Node: The Echo Area\7f1729594
+Node: Warnings\7f1736029
+Node: Invisible Text\7f1740465
+Node: Selective Display\7f1743044
+Node: Overlay Arrow\7f1747170
+Node: Temporary Displays\7f1748523
+Node: Blinking\7f1752644
+Node: Usual Display\7f1754829
+Node: Display Tables\7f1757378
+Node: Display Table Format\7f1758182
+Node: Active Display Table\7f1759624
+Node: Character Descriptors\7f1760816
+Node: Beeping\7f1761573
+Node: Hash Tables\7f1766339
+Node: Introduction to Hash Tables\7f1766947
+Node: Working With Hash Tables\7f1772970
+Node: Weak Hash Tables\7f1774087
+Node: Range Tables\7f1775886
+Node: Introduction to Range Tables\7f1776575
+Node: Working With Range Tables\7f1777006
+Node: Databases\7f1777891
+Node: Connecting to a Database\7f1778190
+Node: Working With a Database\7f1779281
+Node: Other Database Functions\7f1780139
+Node: Processes\7f1780713
+Node: Subprocess Creation\7f1782937
+Node: Synchronous Processes\7f1786226
+Node: MS-DOS Subprocesses\7f1792944
+Node: Asynchronous Processes\7f1794018
+Node: Deleting Processes\7f1797731
+Node: Process Information\7f1799602
+Node: Input to Processes\7f1803528
+Node: Signals to Processes\7f1805818
+Node: Output from Processes\7f1810238
+Node: Process Buffers\7f1811050
+Node: Filter Functions\7f1813917
+Node: Accepting Output\7f1819487
+Node: Sentinels\7f1821014
+Node: Process Window Size\7f1824504
+Node: Transaction Queues\7f1824853
+Node: Network\7f1826551
+Node: System Interface\7f1828385
+Node: Starting Up\7f1829655
+Node: Start-up Summary\7f1830249
+Node: Init File\7f1833803
+Node: Terminal-Specific\7f1836184
+Node: Command Line Arguments\7f1839343
+Node: Getting Out\7f1842832
+Node: Killing XEmacs\7f1843401
+Node: Suspending XEmacs\7f1845070
+Node: System Environment\7f1848412
+Node: User Identification\7f1855079
+Node: Time of Day\7f1858608
+Node: Time Conversion\7f1861395
+Node: Timers\7f1866435
+Node: Terminal Input\7f1868608
+Node: Input Modes\7f1869111
+Node: Translating Input\7f1871524
+Node: Recording Input\7f1875689
+Node: Terminal Output\7f1877789
+Node: Flow Control\7f1881412
+Node: Batch Mode\7f1885204
+Node: X-Windows\7f1886586
+Node: X Selections\7f1887398
+Node: X Server\7f1889608
+Node: Resources\7f1890009
+Node: Server Data\7f1895150
+Node: Grabs\7f1896357
+Node: X Miscellaneous\7f1897938
+Node: ToolTalk Support\7f1900323
+Node: XEmacs ToolTalk API Summary\7f1900540
+Node: Sending Messages\7f1901840
+Node: Example of Sending Messages\7f1902091
+Node: Elisp Interface for Sending Messages\7f1903153
+Node: Receiving Messages\7f1909546
+Node: Example of Receiving Messages\7f1909769
+Node: Elisp Interface for Receiving Messages\7f1910605
+Node: LDAP Support\7f1914430
+Node: Building XEmacs with LDAP support\7f1914926
+Node: XEmacs LDAP API\7f1915904
+Node: LDAP Variables\7f1916634
+Node: The High-Level LDAP API\7f1919110
+Node: The Low-Level LDAP API\7f1920215
+Node: The LDAP Lisp Object\7f1920489
+Node: Opening and Closing a LDAP Connection\7f1921042
+Node: Searching on a LDAP Server (Low-level)\7f1922825
+Node: Syntax of Search Filters\7f1924218
+Node: Internationalization\7f1925516
+Node: I18N Levels 1 and 2\7f1925853
+Node: I18N Level 3\7f1926559
+Node: Level 3 Basics\7f1926840
+Node: Level 3 Primitives\7f1927673
+Node: Dynamic Messaging\7f1929279
+Node: Domain Specification\7f1929742
+Node: Documentation String Extraction\7f1931645
+Node: I18N Level 4\7f1932563
+Node: MULE\7f1932755
+Node: Internationalization Terminology\7f1933866
+Node: Charsets\7f1942405
+Node: Charset Properties\7f1943101
+Node: Basic Charset Functions\7f1947787
+Node: Charset Property Functions\7f1949968
+Node: Predefined Charsets\7f1952011
+Node: MULE Characters\7f1954931
+Node: Composite Characters\7f1955778
+Node: ISO 2022\7f1957032
+Node: Coding Systems\7f1962754
+Node: Coding System Types\7f1964676
+Node: EOL Conversion\7f1966495
+Node: Coding System Properties\7f1967678
+Node: Basic Coding System Functions\7f1971530
+Node: Coding System Property Functions\7f1973434
+Node: Encoding and Decoding Text\7f1973992
+Node: Detection of Textual Encoding\7f1975128
+Node: Big5 and Shift-JIS Functions\7f1976664
+Node: CCL\7f1977752
+Node: CCL Syntax\7f1980856
+Node: CCL Statements\7f1982444
+Node: CCL Expressions\7f1987092
+Node: Calling CCL\7f1989631
+Node: CCL Examples\7f1992620
+Node: Category Tables\7f1992757
+Node: Tips\7f1995116
+Node: Style Tips\7f1995757
+Node: Compilation Tips\7f2005276
+Node: Documentation Tips\7f2007190
+Node: Comment Tips\7f2012699
+Node: Library Headers\7f2015701
+Node: Building XEmacs and Object Allocation\7f2019673
+Node: Building XEmacs\7f2020556
+Node: Pure Storage\7f2026891
+Node: Garbage Collection\7f2029679
+Node: Standard Errors\7f2040818
+Node: Standard Buffer-Local Variables\7f2045027
+Node: Standard Keymaps\7f2047660
+Node: Standard Hooks\7f2051392
+Node: Index\7f2058892
 \1f
 End Tag Table
index c2d71fb..445d0fc 100644 (file)
@@ -937,8 +937,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::.
@@ -948,6 +948,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.
@@ -960,17 +965,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
@@ -978,10 +989,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
@@ -989,17 +1000,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
@@ -1022,6 +1056,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 in
@@ -1089,6 +1142,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
@@ -1182,82 +1241,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 5b59644..d9a7549 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
@@ -1126,86 +1212,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 32e78d1..a88cba6 100644 (file)
@@ -19,58 +19,58 @@ preserved on all copies.
 \1f
 Indirect:
 new-users-guide.info-1: 635
-new-users-guide.info-2: 50471
-new-users-guide.info-3: 99973
+new-users-guide.info-2: 50468
+new-users-guide.info-3: 99970
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f635
-Node: Intro\7f4615
-Node: Entering\7f7198
-Node: Enter\7f8712
-Node: Frame\7f9394
-Node: Exiting\7f11063
-Node: Mode Line\7f12263
-Node: Echo Area\7f14410
-Node: Windows and Menus\7f15765
-Node: XEmacs Window\7f16218
-Node: Pull-down Menus\7f19839
-Node: File menu\7f20718
-Node: Edit menu\7f23977
-Node: Options Menu\7f26503
-Node: Buffers Menu\7f31285
-Node: Help menu\7f31671
-Node: Edit\7f32169
-Node: Insert\7f33763
-Node: Cursor Position\7f35091
-Node: Erase\7f37162
-Node: Numeric Argument\7f38316
-Node: Undo\7f39500
-Node: Customization Basics\7f40263
-Node: Customizing key Bindings\7f41492
-Node: Customizing Menus\7f44982
-Node: Help\7f50471
-Node: The Help Menu\7f51159
-Node: Modes\7f56084
-Node: Major Modes\7f57000
-Node: Minor Modes\7f60949
-Node: Files\7f65035
-Node: File Names\7f65757
-Node: Visiting\7f67560
-Node: Saving Files\7f69684
-Node: Other Customizations\7f73061
-Node: Setting Variables\7f75529
-Node: Init File\7f78738
-Node: Select and Move\7f84208
-Node: Selecting Text\7f85162
-Node: Mouse\7f86675
-Node: Region Operation\7f88000
-Node: Moving Text\7f89260
-Node: Accumulating text\7f90500
-Node: Search and Replace\7f92820
-Node: Key Index\7f96684
-Node: Command Index\7f99973
-Node: Variable Index\7f104075
-Node: Concept Index\7f104652
+Node: Intro\7f4612
+Node: Entering\7f7195
+Node: Enter\7f8709
+Node: Frame\7f9391
+Node: Exiting\7f11060
+Node: Mode Line\7f12260
+Node: Echo Area\7f14407
+Node: Windows and Menus\7f15762
+Node: XEmacs Window\7f16215
+Node: Pull-down Menus\7f19836
+Node: File menu\7f20715
+Node: Edit menu\7f23974
+Node: Options Menu\7f26500
+Node: Buffers Menu\7f31282
+Node: Help menu\7f31668
+Node: Edit\7f32166
+Node: Insert\7f33760
+Node: Cursor Position\7f35088
+Node: Erase\7f37159
+Node: Numeric Argument\7f38313
+Node: Undo\7f39497
+Node: Customization Basics\7f40260
+Node: Customizing key Bindings\7f41489
+Node: Customizing Menus\7f44979
+Node: Help\7f50468
+Node: The Help Menu\7f51156
+Node: Modes\7f56081
+Node: Major Modes\7f56997
+Node: Minor Modes\7f60946
+Node: Files\7f65032
+Node: File Names\7f65754
+Node: Visiting\7f67557
+Node: Saving Files\7f69681
+Node: Other Customizations\7f73058
+Node: Setting Variables\7f75526
+Node: Init File\7f78735
+Node: Select and Move\7f84205
+Node: Selecting Text\7f85159
+Node: Mouse\7f86672
+Node: Region Operation\7f87997
+Node: Moving Text\7f89257
+Node: Accumulating text\7f90497
+Node: Search and Replace\7f92817
+Node: Key Index\7f96681
+Node: Command Index\7f99970
+Node: Variable Index\7f104072
+Node: Concept Index\7f104649
 \1f
 End Tag Table
index 40abb30..b49967c 100644 (file)
@@ -9,259 +9,256 @@ END-INFO-DIR-ENTRY
 \1f
 Indirect:
 xemacs-faq.info-1: 195
-xemacs-faq.info-2: 47990
-xemacs-faq.info-3: 95703
-xemacs-faq.info-4: 145538
-xemacs-faq.info-5: 195121
+xemacs-faq.info-2: 49906
+xemacs-faq.info-3: 99720
+xemacs-faq.info-4: 149713
+xemacs-faq.info-5: 199295
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f195
-Node: Introduction\7f16769
-Node: Q1.0.1\7f20249
-Node: Q1.0.2\7f20785
-Node: Q1.0.3\7f21280
-Node: Q1.0.4\7f21542
-Node: Q1.0.5\7f22992
-Node: Q1.0.6\7f23681
-Node: Q1.0.7\7f24687
-Node: Q1.0.8\7f24936
-Node: Q1.0.9\7f25151
-Node: Q1.0.10\7f25429
-Node: Q1.0.11\7f25672
-Node: Q1.0.12\7f26129
-Node: Q1.0.13\7f26497
-Node: Q1.0.14\7f26732
-Node: Q1.1.1\7f27206
-Node: Q1.1.2\7f28283
-Node: Q1.1.3\7f28676
-Node: Q1.2.1\7f29627
-Node: Q1.2.2\7f30683
-Node: Q1.2.3\7f31117
-Node: Q1.3.1\7f32068
-Node: Q1.3.2\7f35986
-Node: Q1.3.3\7f36541
-Node: Q1.3.4\7f36782
-Node: Q1.3.5\7f37546
-Node: Q1.3.6\7f39961
-Node: Q1.3.7\7f41456
-Node: Q1.4.1\7f42391
-Node: Q1.4.2\7f43253
-Node: Q1.4.3\7f43594
-Node: Q1.4.4\7f44013
-Node: Q1.4.5\7f45553
-Node: Q1.4.6\7f45857
-Node: Q1.4.7\7f46865
-Node: Installation\7f47990
-Node: Q2.0.1\7f50454
-Node: Q2.0.2\7f51327
-Node: Q2.0.3\7f58530
-Node: Q2.0.4\7f59828
-Node: Q2.0.5\7f60420
-Node: Q2.0.6\7f60788
-Node: Q2.0.7\7f61169
-Node: Q2.0.8\7f61550
-Node: Q2.0.9\7f63128
-Node: Q2.0.10\7f64566
-Node: Q2.0.11\7f65410
-Node: Q2.0.12\7f66351
-Node: Q2.0.13\7f67874
-Node: Q2.0.14\7f68532
-Node: Q2.1.1\7f69100
-Node: Q2.1.2\7f71842
-Node: Q2.1.3\7f73019
-Node: Q2.1.4\7f74312
-Node: Q2.1.5\7f75111
-Node: Q2.1.6\7f75473
-Node: Q2.1.7\7f75950
-Node: Q2.1.8\7f76303
-Node: Q2.1.9\7f77819
-Node: Q2.1.10\7f78241
-Node: Q2.1.11\7f78998
-Node: Q2.1.12\7f79863
-Node: Q2.1.13\7f80818
-Node: Q2.1.14\7f81849
-Node: Q2.1.15\7f82960
-Node: Q2.1.16\7f88918
-Node: Q2.1.17\7f89612
-Node: Q2.1.18\7f90209
-Node: Q2.1.19\7f92006
-Node: Q2.1.20\7f92536
-Node: Q2.1.21\7f92918
-Node: Q2.1.22\7f93208
-Node: Q2.1.23\7f94505
-Node: Q2.1.24\7f95173
-Node: Customization\7f95703
-Node: Q3.0.1\7f100590
-Node: Q3.0.2\7f101296
-Node: Q3.0.3\7f101860
-Node: Q3.0.4\7f102277
-Node: Q3.0.5\7f103110
-Node: Q3.0.6\7f103891
-Node: Q3.0.7\7f104471
-Node: Q3.0.8\7f105135
-Node: Q3.0.9\7f105981
-Node: Q3.1.1\7f106542
-Node: Q3.1.2\7f107279
-Node: Q3.1.3\7f107710
-Node: Q3.1.4\7f108295
-Node: Q3.1.5\7f108831
-Node: Q3.1.6\7f109215
-Node: Q3.1.7\7f109896
-Node: Q3.1.8\7f112120
-Node: Q3.2.1\7f112662
-Node: Q3.2.2\7f114070
-Node: Q3.2.3\7f114869
-Node: Q3.2.4\7f115471
-Node: Q3.2.5\7f116505
-Node: Q3.2.6\7f116972
-Node: Q3.3.1\7f117934
-Node: Q3.3.2\7f118327
-Node: Q3.3.3\7f118958
-Node: Q3.3.4\7f119339
-Node: Q3.3.5\7f120433
-Node: Q3.4.1\7f121927
-Node: Q3.4.2\7f122570
-Node: Q3.5.1\7f123082
-Node: Q3.5.2\7f124536
-Node: Q3.5.3\7f124954
-Node: Q3.5.4\7f125794
-Node: Q3.5.5\7f126626
-Node: Q3.5.6\7f127766
-Node: Q3.5.7\7f128756
-Node: Q3.5.8\7f130108
-Node: Q3.5.9\7f130855
-Node: Q3.5.10\7f131635
-Node: Q3.5.11\7f132271
-Node: Q3.6.1\7f132824
-Node: Q3.6.2\7f133564
-Node: Q3.6.3\7f133992
-Node: Q3.7.1\7f134492
-Node: Q3.7.2\7f135380
-Node: Q3.7.3\7f136039
-Node: Q3.7.4\7f136461
-Node: Q3.7.5\7f136804
-Node: Q3.7.6\7f137272
-Node: Q3.7.7\7f137987
-Node: Q3.7.8\7f139007
-Node: Q3.8.1\7f139426
-Node: Q3.8.2\7f139886
-Node: Q3.8.3\7f140349
-Node: Q3.8.4\7f140955
-Node: Q3.8.5\7f141674
-Node: Q3.9.1\7f142459
-Node: Q3.9.2\7f143399
-Node: Q3.9.3\7f143997
-Node: Q3.9.4\7f144659
-Node: Q3.10.1\7f145538
-Node: Q3.10.2\7f146356
-Node: Q3.10.3\7f147137
-Node: Q3.10.4\7f147865
-Node: Q3.10.5\7f148248
-Node: Subsystems\7f149258
-Node: Q4.0.1\7f151743
-Node: Q4.0.2\7f152268
-Node: Q4.0.3\7f152826
-Node: Q4.0.4\7f153147
-Node: Q4.0.5\7f153389
-Node: Q4.0.6\7f153620
-Node: Q4.0.7\7f154201
-Node: Q4.0.8\7f154526
-Node: Q4.0.9\7f155753
-Node: Q4.0.10\7f157791
-Node: Q4.0.11\7f158245
-Node: Q4.0.12\7f159095
-Node: Q4.1.1\7f160068
-Node: Q4.1.2\7f160471
-Node: Q4.1.3\7f160798
-Node: Q4.2.1\7f161107
-Node: Q4.2.2\7f161737
-Node: Q4.2.3\7f161977
-Node: Q4.2.4\7f162521
-Node: Q4.3.1\7f163174
-Node: Q4.3.2\7f163758
-Node: Q4.3.3\7f165239
-Node: Q4.3.4\7f165511
-Node: Q4.3.5\7f166188
-Node: Q4.4.1\7f166816
-Node: Q4.4.2\7f168302
-Node: Q4.5.1\7f169506
-Node: Q4.6.1\7f170275
-Node: Q4.7.1\7f175535
-Node: Q4.7.2\7f176490
-Node: Q4.7.3\7f176787
-Node: Q4.7.4\7f177133
-Node: Q4.7.5\7f178017
-Node: Q4.7.6\7f179659
-Node: Miscellaneous\7f179948
-Node: Q5.0.1\7f183368
-Node: Q5.0.2\7f184102
-Node: Q5.0.3\7f184956
-Node: Q5.0.4\7f185658
-Node: Q5.0.5\7f186597
-Node: Q5.0.6\7f188577
-Node: Q5.0.7\7f189234
-Node: Q5.0.8\7f189839
-Node: Q5.0.9\7f190358
-Node: Q5.0.10\7f190872
-Node: Q5.0.11\7f191120
-Node: Q5.0.12\7f191681
-Node: Q5.0.13\7f192598
-Node: Q5.0.14\7f193282
-Node: Q5.0.15\7f194047
-Node: Q5.0.16\7f194344
-Node: Q5.0.17\7f194856
-Node: Q5.0.18\7f195121
-Node: Q5.0.19\7f195647
-Node: Q5.0.20\7f196071
-Node: Q5.1.1\7f196986
-Node: Q5.1.2\7f199055
-Node: Q5.1.3\7f199791
-Node: Q5.1.4\7f203185
-Node: Q5.1.5\7f203720
-Node: Q5.1.6\7f205814
-Node: Q5.1.7\7f207203
-Node: Q5.1.8\7f208804
-Node: Q5.1.9\7f209356
-Node: Q5.1.10\7f210241
-Node: Q5.1.11\7f211372
-Node: Q5.2.1\7f211921
-Node: Q5.2.2\7f212492
-Node: Q5.2.3\7f212909
-Node: Q5.2.4\7f213144
-Node: Q5.3.1\7f214054
-Node: Q5.3.2\7f215275
-Node: Q5.3.3\7f216051
-Node: Q5.3.4\7f216535
-Node: Q5.3.5\7f217202
-Node: Q5.3.6\7f218071
-Node: Q5.3.7\7f218316
-Node: Q5.3.8\7f220506
-Node: Q5.3.9\7f220753
-Node: Q5.3.10\7f221706
-Node: Q5.3.11\7f223790
-Node: Q5.3.12\7f225339
-Node: MS Windows\7f226613
-Node: Q6.0.1\7f227944
-Node: Q6.0.2\7f228691
-Node: Q6.0.3\7f229156
-Node: Q6.0.4\7f229436
-Node: Q6.1.1\7f231717
-Node: Q6.1.2\7f232588
-Node: Q6.1.3\7f232869
-Node: Q6.1.4\7f233151
-Node: Q6.1.5\7f233529
-Node: Q6.1.6\7f234361
-Node: Q6.2.1\7f234945
-Node: Q6.2.2\7f235846
-Node: Q6.2.3\7f236247
-Node: Q6.3.1\7f236536
-Node: Q6.3.2\7f237630
-Node: Q6.3.3\7f240811
-Node: Current Events\7f241065
-Node: Q7.0.1\7f241719
-Node: Q7.0.2\7f242358
-Node: Q7.0.3\7f243432
-Node: Q7.0.4\7f243660
+Node: Introduction\7f16541
+Node: Q1.0.1\7f19944
+Node: Q1.0.2\7f20480
+Node: Q1.0.3\7f20975
+Node: Q1.0.4\7f21237
+Node: Q1.0.5\7f22687
+Node: Q1.0.6\7f23376
+Node: Q1.0.7\7f24382
+Node: Q1.0.8\7f24631
+Node: Q1.0.9\7f24846
+Node: Q1.0.10\7f25124
+Node: Q1.0.11\7f25367
+Node: Q1.0.12\7f25802
+Node: Q1.0.13\7f26170
+Node: Q1.0.14\7f26419
+Node: Q1.1.1\7f26893
+Node: Q1.1.2\7f27970
+Node: Q1.1.3\7f28363
+Node: Q1.2.1\7f29314
+Node: Q1.2.2\7f30370
+Node: Q1.2.3\7f30804
+Node: Q1.3.1\7f31888
+Node: Q1.3.2\7f35806
+Node: Q1.3.3\7f36361
+Node: Q1.3.4\7f36602
+Node: Q1.3.5\7f37366
+Node: Q1.3.6\7f39781
+Node: Q1.3.7\7f41276
+Node: Q1.4.1\7f42211
+Node: Q1.4.2\7f43073
+Node: Q1.4.3\7f43414
+Node: Q1.4.4\7f43833
+Node: Q1.4.5\7f45373
+Node: Q1.4.6\7f45677
+Node: Installation\7f46670
+Node: Q2.0.1\7f49033
+Node: Q2.0.2\7f49906
+Node: Q2.0.3\7f57109
+Node: Q2.0.4\7f58407
+Node: Q2.0.5\7f58999
+Node: Q2.0.6\7f59367
+Node: Q2.0.7\7f59748
+Node: Q2.0.8\7f60129
+Node: Q2.0.9\7f61707
+Node: Q2.0.10\7f63145
+Node: Q2.0.11\7f63989
+Node: Q2.0.12\7f64930
+Node: Q2.1.1\7f66452
+Node: Q2.1.2\7f69194
+Node: Q2.1.3\7f70371
+Node: Q2.1.4\7f71664
+Node: Q2.1.5\7f72463
+Node: Q2.1.6\7f72825
+Node: Q2.1.7\7f73302
+Node: Q2.1.8\7f73655
+Node: Q2.1.9\7f75171
+Node: Q2.1.10\7f75593
+Node: Q2.1.11\7f76350
+Node: Q2.1.12\7f77215
+Node: Q2.1.13\7f78170
+Node: Q2.1.14\7f79201
+Node: Q2.1.15\7f80312
+Node: Q2.1.16\7f87344
+Node: Q2.1.17\7f88038
+Node: Q2.1.18\7f88635
+Node: Q2.1.19\7f88762
+Node: Q2.1.20\7f89292
+Node: Q2.1.21\7f89674
+Node: Q2.1.22\7f89867
+Node: Q2.1.23\7f91164
+Node: Q2.1.24\7f91832
+Node: Customization\7f92362
+Node: Q3.0.1\7f97200
+Node: Q3.0.2\7f97906
+Node: Q3.0.3\7f98470
+Node: Q3.0.4\7f98887
+Node: Q3.0.5\7f99720
+Node: Q3.0.6\7f100501
+Node: Q3.0.7\7f101081
+Node: Q3.0.8\7f101745
+Node: Q3.0.9\7f102591
+Node: Q3.1.1\7f103152
+Node: Q3.1.2\7f103889
+Node: Q3.1.3\7f104320
+Node: Q3.1.4\7f104509
+Node: Q3.1.5\7f104698
+Node: Q3.1.6\7f105082
+Node: Q3.1.7\7f105763
+Node: Q3.1.8\7f107987
+Node: Q3.2.1\7f108529
+Node: Q3.2.2\7f109937
+Node: Q3.2.3\7f110736
+Node: Q3.2.4\7f111338
+Node: Q3.2.5\7f112372
+Node: Q3.2.6\7f112839
+Node: Q3.3.1\7f113801
+Node: Q3.3.2\7f114194
+Node: Q3.3.3\7f114825
+Node: Q3.3.4\7f115206
+Node: Q3.3.5\7f116300
+Node: Q3.4.1\7f117794
+Node: Q3.4.2\7f118437
+Node: Q3.5.1\7f118949
+Node: Q3.5.2\7f120403
+Node: Q3.5.3\7f120821
+Node: Q3.5.4\7f121661
+Node: Q3.5.5\7f122493
+Node: Q3.5.6\7f123633
+Node: Q3.5.7\7f124623
+Node: Q3.5.8\7f125975
+Node: Q3.5.9\7f126722
+Node: Q3.5.10\7f127502
+Node: Q3.5.11\7f128138
+Node: Q3.6.1\7f128691
+Node: Q3.6.2\7f129431
+Node: Q3.6.3\7f129859
+Node: Q3.7.1\7f130359
+Node: Q3.7.2\7f131247
+Node: Q3.7.3\7f131906
+Node: Q3.7.4\7f132328
+Node: Q3.7.5\7f132671
+Node: Q3.7.6\7f133139
+Node: Q3.7.7\7f133854
+Node: Q3.7.8\7f134874
+Node: Q3.8.1\7f135293
+Node: Q3.8.2\7f135753
+Node: Q3.8.3\7f136216
+Node: Q3.8.4\7f136822
+Node: Q3.8.5\7f137541
+Node: Q3.9.1\7f138326
+Node: Q3.9.2\7f139266
+Node: Q3.9.3\7f139864
+Node: Q3.9.4\7f140526
+Node: Q3.10.1\7f141405
+Node: Q3.10.2\7f142223
+Node: Q3.10.3\7f143228
+Node: Q3.10.4\7f143956
+Node: Q3.10.5\7f144339
+Node: Subsystems\7f145349
+Node: Q4.0.1\7f147836
+Node: Q4.0.2\7f148361
+Node: Q4.0.3\7f148919
+Node: Q4.0.4\7f149240
+Node: Q4.0.5\7f149482
+Node: Q4.0.6\7f149713
+Node: Q4.0.7\7f150294
+Node: Q4.0.8\7f150619
+Node: Q4.0.9\7f151846
+Node: Q4.0.10\7f153884
+Node: Q4.0.11\7f154338
+Node: Q4.0.12\7f155188
+Node: Q4.1.1\7f156161
+Node: Q4.1.2\7f156564
+Node: Q4.1.3\7f156891
+Node: Q4.2.1\7f157200
+Node: Q4.2.2\7f157830
+Node: Q4.2.3\7f158070
+Node: Q4.2.4\7f158614
+Node: Q4.3.1\7f159267
+Node: Q4.3.2\7f159851
+Node: Q4.3.3\7f161332
+Node: Q4.3.4\7f161604
+Node: Q4.3.5\7f162281
+Node: Q4.4.1\7f162909
+Node: Q4.4.2\7f164395
+Node: Q4.5.1\7f165599
+Node: Q4.6.1\7f166368
+Node: Q4.7.1\7f171628
+Node: Q4.7.2\7f172583
+Node: Q4.7.3\7f172880
+Node: Q4.7.4\7f173066
+Node: Q4.7.5\7f173950
+Node: Q4.7.6\7f175592
+Node: Miscellaneous\7f175881
+Node: Q5.0.1\7f179298
+Node: Q5.0.2\7f180032
+Node: Q5.0.3\7f180886
+Node: Q5.0.4\7f181588
+Node: Q5.0.5\7f182527
+Node: Q5.0.6\7f184507
+Node: Q5.0.7\7f185164
+Node: Q5.0.8\7f185769
+Node: Q5.0.9\7f186288
+Node: Q5.0.10\7f186802
+Node: Q5.0.11\7f187050
+Node: Q5.0.12\7f187588
+Node: Q5.0.13\7f188505
+Node: Q5.0.14\7f189189
+Node: Q5.0.15\7f189954
+Node: Q5.0.16\7f190251
+Node: Q5.0.17\7f190763
+Node: Q5.0.18\7f191028
+Node: Q5.0.19\7f191222
+Node: Q5.0.20\7f191646
+Node: Q5.1.1\7f192561
+Node: Q5.1.2\7f194630
+Node: Q5.1.3\7f195366
+Node: Q5.1.4\7f198760
+Node: Q5.1.5\7f199295
+Node: Q5.1.6\7f201389
+Node: Q5.1.7\7f202778
+Node: Q5.1.8\7f204379
+Node: Q5.1.9\7f204931
+Node: Q5.1.10\7f205816
+Node: Q5.1.11\7f206947
+Node: Q5.2.1\7f207496
+Node: Q5.2.2\7f208067
+Node: Q5.2.3\7f208484
+Node: Q5.2.4\7f208719
+Node: Q5.3.1\7f209629
+Node: Q5.3.2\7f210850
+Node: Q5.3.3\7f211626
+Node: Q5.3.4\7f212110
+Node: Q5.3.5\7f212777
+Node: Q5.3.6\7f213646
+Node: Q5.3.7\7f213891
+Node: Q5.3.8\7f216081
+Node: Q5.3.9\7f216328
+Node: Q5.3.10\7f217281
+Node: Q5.3.11\7f219365
+Node: Q5.3.12\7f220914
+Node: MS Windows\7f222188
+Node: Q6.0.1\7f223519
+Node: Q6.0.2\7f224266
+Node: Q6.0.3\7f224731
+Node: Q6.0.4\7f225011
+Node: Q6.1.1\7f227292
+Node: Q6.1.2\7f228163
+Node: Q6.1.3\7f228444
+Node: Q6.1.4\7f228726
+Node: Q6.1.5\7f229104
+Node: Q6.1.6\7f229936
+Node: Q6.2.1\7f230520
+Node: Q6.2.2\7f231421
+Node: Q6.2.3\7f231822
+Node: Q6.3.1\7f232111
+Node: Q6.3.2\7f233205
+Node: Q6.3.3\7f236386
+Node: Current Events\7f236640
+Node: Q7.0.1\7f237294
+Node: Q7.0.2\7f237933
+Node: Q7.0.3\7f239007
+Node: Q7.0.4\7f239235
 \1f
 End Tag Table
index ccd10c3..1b14b52 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?
 
@@ -437,7 +434,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
@@ -611,12 +607,10 @@ 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
@@ -634,7 +628,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
@@ -781,14 +775,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>
@@ -1138,7 +1138,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?
 -------------------------------------------------------------
@@ -1161,32 +1161,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 21af251..a759c37 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
@@ -1079,44 +1000,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
@@ -1148,11 +1033,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
@@ -1223,3 +1105,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 2347717..a64f7fc 100644 (file)
@@ -32,367 +32,376 @@ translation approved by the author instead of in the original English.
 \1f
 Indirect:
 xemacs.info-1: 1350
-xemacs.info-2: 47938
-xemacs.info-3: 95895
-xemacs.info-4: 143999
-xemacs.info-5: 192198
-xemacs.info-6: 241563
-xemacs.info-7: 290379
-xemacs.info-8: 339922
-xemacs.info-9: 385201
-xemacs.info-10: 433025
-xemacs.info-11: 482195
-xemacs.info-12: 531344
-xemacs.info-13: 580168
-xemacs.info-14: 628309
-xemacs.info-15: 677063
-xemacs.info-16: 726588
-xemacs.info-17: 775149
-xemacs.info-18: 819067
-xemacs.info-19: 860230
-xemacs.info-20: 908226
-xemacs.info-21: 948946
+xemacs.info-2: 47935
+xemacs.info-3: 95892
+xemacs.info-4: 144418
+xemacs.info-5: 189682
+xemacs.info-6: 237752
+xemacs.info-7: 286779
+xemacs.info-8: 336120
+xemacs.info-9: 383861
+xemacs.info-10: 433167
+xemacs.info-11: 483000
+xemacs.info-12: 532860
+xemacs.info-13: 581970
+xemacs.info-14: 631330
+xemacs.info-15: 681149
+xemacs.info-16: 729643
+xemacs.info-17: 778293
+xemacs.info-18: 827922
+xemacs.info-19: 872280
+xemacs.info-20: 920951
+xemacs.info-21: 962858
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f1350
-Node: License\7f22509
-Node: Distrib\7f35791
-Node: Intro\7f37455
-Node: Frame\7f40326
-Node: Point\7f43594
-Node: Echo Area\7f45561
-Node: Mode Line\7f47938
-Node: XEmacs under X\7f52369
-Node: Keystrokes\7f55546
-Node: Intro to Keystrokes\7f56390
-Node: Representing Keystrokes\7f58493
-Node: Key Sequences\7f59850
-Node: String Key Sequences\7f63190
-Node: Meta Key\7f63573
-Node: Super and Hyper Keys\7f65046
-Node: Character Representation\7f71270
-Node: Commands\7f72290
-Node: Pull-down Menus\7f75139
-Node: File Menu\7f78488
-Node: Edit Menu\7f82310
-Node: Apps Menu\7f84693
-Node: Options Menu\7f85183
-Node: Buffers Menu\7f89163
-Node: Tools Menu\7f89470
-Node: Help Menu\7f89961
-Node: Menu Customization\7f90362
-Node: Entering Emacs\7f94592
-Node: Exiting\7f95895
-Node: Command Switches\7f98986
-Node: Startup Paths\7f108173
-Node: Basic\7f115753
-Node: Blank Lines\7f125231
-Node: Continuation Lines\7f126657
-Node: Position Info\7f128089
-Node: Arguments\7f131222
-Node: Undo\7f134359
-Node: Minibuffer\7f137306
-Node: Minibuffer File\7f139790
-Node: Minibuffer Edit\7f141426
-Node: Completion\7f143999
-Node: Repetition\7f150874
-Node: M-x\7f153666
-Node: Help\7f158760
-Node: Mark\7f168679
-Node: Setting Mark\7f170533
-Node: Using Region\7f173655
-Node: Marking Objects\7f174392
-Node: Mark Ring\7f176230
-Node: Mouse Selection\7f177946
-Node: Additional Mouse Operations\7f179953
-Node: Killing\7f184157
-Node: Yanking\7f189793
-Node: Kill Ring\7f190596
-Node: Appending Kills\7f192198
-Node: Earlier Kills\7f194235
-Node: Using X Selections\7f196848
-Node: X Clipboard Selection\7f198098
-Node: X Selection Commands\7f200275
-Node: X Cut Buffers\7f201361
-Node: Active Regions\7f202720
-Node: Accumulating Text\7f207300
-Node: Rectangles\7f210373
-Node: Registers\7f213892
-Node: RegPos\7f214926
-Node: RegText\7f215829
-Node: RegRect\7f216913
-Node: Display\7f217653
-Node: Scrolling\7f219148
-Node: Horizontal Scrolling\7f223291
-Node: Selective Display\7f224486
-Node: Display Vars\7f225705
-Node: Search\7f228383
-Node: Incremental Search\7f229576
-Node: Non-Incremental Search\7f238503
-Node: Word Search\7f239945
-Node: Regexp Search\7f241563
-Node: Regexps\7f243099
-Node: Search Case\7f253400
-Node: Replace\7f254181
-Node: Unconditional Replace\7f255129
-Node: Regexp Replace\7f256264
-Node: Replacement and Case\7f257199
-Node: Query Replace\7f258179
-Node: Other Repeating Search\7f261406
-Node: Fixit\7f262661
-Node: Kill Errors\7f263241
-Node: Transpose\7f264574
-Node: Fixing Case\7f266978
-Node: Spelling\7f267624
-Node: Files\7f269085
-Node: File Names\7f270395
-Node: Visiting\7f274732
-Node: Saving\7f281418
-Node: Backup\7f286341
-Node: Backup Names\7f287737
-Node: Backup Deletion\7f289220
-Node: Backup Copying\7f290379
-Node: Interlocking\7f292085
-Node: Reverting\7f296213
-Node: Auto Save\7f298125
-Node: Auto Save Files\7f299092
-Node: Auto Save Control\7f300933
-Node: Recover\7f302771
-Node: Version Control\7f303926
-Node: Concepts of VC\7f305964
-Node: Editing with VC\7f307574
-Node: Variables for Check-in/out\7f312830
-Node: Log Entries\7f314729
-Node: Change Logs and VC\7f315909
-Node: Old Versions\7f319176
-Node: VC Status\7f321179
-Node: Renaming and VC\7f322893
-Node: Snapshots\7f323572
-Node: Making Snapshots\7f324073
-Node: Snapshot Caveats\7f325366
-Node: Version Headers\7f327175
-Node: ListDir\7f329874
-Node: Comparing Files\7f331923
-Node: Dired\7f333456
-Node: Dired Enter\7f334127
-Node: Dired Edit\7f334952
-Node: Dired Deletion\7f336699
-Node: Dired Immed\7f339922
-Node: Misc File Ops\7f341198
-Node: Buffers\7f343686
-Node: Select Buffer\7f345844
-Node: List Buffers\7f347639
-Node: Misc Buffer\7f349384
-Node: Kill Buffer\7f351027
-Node: Several Buffers\7f352157
-Node: Windows\7f356023
-Node: Basic Window\7f356734
-Node: Split Window\7f358453
-Node: Other Window\7f360586
-Node: Pop Up Window\7f363015
-Node: Change Window\7f364520
-Node: Mule\7f367428
-Node: Mule Intro\7f368691
-Node: Language Environments\7f369707
-Node: Input Methods\7f371814
-Node: Select Input Method\7f375534
-Node: Coding Systems\7f377689
-Node: Recognize Coding\7f381875
-Node: Specify Coding\7f385201
-Node: Major Modes\7f390132
-Node: Choosing Modes\7f392351
-Node: Indentation\7f394741
-Node: Indentation Commands\7f396836
-Node: Tab Stops\7f399565
-Node: Just Spaces\7f401414
-Node: Text\7f402229
-Node: Text Mode\7f404212
-Node: Nroff Mode\7f406291
-Node: TeX Mode\7f407934
-Node: TeX Editing\7f410186
-Node: TeX Print\7f413620
-Node: Outline Mode\7f416839
-Node: Outline Format\7f418320
-Node: Outline Motion\7f421120
-Node: Outline Visibility\7f422673
-Node: Words\7f425594
-Node: Sentences\7f428541
-Node: Paragraphs\7f430737
-Node: Pages\7f433025
-Node: Filling\7f435625
-Node: Auto Fill\7f436196
-Node: Fill Commands\7f438343
-Node: Fill Prefix\7f440508
-Node: Case\7f442696
-Node: Programs\7f444724
-Node: Program Modes\7f447273
-Node: Lists\7f449505
-Node: Defuns\7f455345
-Node: Grinding\7f457998
-Node: Basic Indent\7f458626
-Node: Multi-line Indent\7f460647
-Node: Lisp Indent\7f462263
-Node: C Indent\7f465713
-Node: Matching\7f470953
-Node: Comments\7f472475
-Node: Balanced Editing\7f478927
-Node: Lisp Completion\7f479941
-Node: Documentation\7f480956
-Node: Change Log\7f482195
-Node: Tags\7f484773
-Node: Tag Syntax\7f486422
-Node: Create Tags Table\7f490366
-Node: Etags Regexps\7f494426
-Node: Select Tags Table\7f499084
-Node: Find Tag\7f502822
-Node: Tags Search\7f505786
-Node: List Tags\7f509242
-Node: Fortran\7f510271
-Node: Fortran Motion\7f511347
-Node: Fortran Indent\7f512167
-Node: ForIndent Commands\7f512852
-Node: ForIndent Num\7f513997
-Node: ForIndent Conv\7f515271
-Node: ForIndent Vars\7f516047
-Node: Fortran Comments\7f517215
-Node: Fortran Columns\7f520813
-Node: Fortran Abbrev\7f522236
-Node: Asm Mode\7f523145
-Node: Running\7f523697
-Node: Compilation\7f524667
-Node: Lisp Modes\7f529517
-Node: Lisp Libraries\7f530790
-Node: Loading\7f531344
-Node: Compiling Libraries\7f535804
-Node: Mocklisp\7f538695
-Node: Lisp Eval\7f539372
-Node: Lisp Debug\7f543012
-Node: Lisp Interaction\7f548437
-Node: External Lisp\7f549792
-Node: Packages\7f551866
-Node: Package Terminology\7f552607
-Node: Using Packages\7f553965
-Node: Building Packages\7f562754
-Node: Abbrevs\7f565276
-Node: Defining Abbrevs\7f567476
-Node: Expanding Abbrevs\7f569923
-Node: Editing Abbrevs\7f572625
-Node: Saving Abbrevs\7f574493
-Node: Dynamic Abbrevs\7f576433
-Node: Picture\7f577735
-Node: Basic Picture\7f580168
-Node: Insert in Picture\7f582453
-Node: Tabs in Picture\7f583875
-Node: Rectangles in Picture\7f585396
-Node: Sending Mail\7f587304
-Node: Mail Format\7f589015
-Node: Mail Headers\7f590365
-Node: Mail Mode\7f596775
-Node: Reading Mail\7f600388
-Node: Calendar/Diary\7f601963
-Node: Calendar Motion\7f603635
-Node: Calendar Unit Motion\7f604518
-Node: Move to Beginning or End\7f606841
-Node: Specified Dates\7f607974
-Node: Scroll Calendar\7f608862
-Node: Mark and Region\7f610653
-Node: General Calendar\7f612559
-Node: LaTeX Calendar\7f614167
-Node: Holidays\7f616181
-Node: Sunrise/Sunset\7f619283
-Node: Lunar Phases\7f622326
-Node: Other Calendars\7f623711
-Node: Calendar Systems\7f625198
-Node: To Other Calendar\7f628309
-Node: From Other Calendar\7f630300
-Node: Mayan Calendar\7f632605
-Node: Diary\7f635800
-Node: Diary Commands\7f637549
-Node: Format of Diary File\7f640855
-Node: Date Formats\7f643725
-Node: Adding to Diary\7f646299
-Node: Special Diary Entries\7f647930
-Node: Calendar Customization\7f653269
-Node: Calendar Customizing\7f654131
-Node: Holiday Customizing\7f657350
-Node: Date Display Format\7f663818
-Node: Time Display Format\7f664776
-Node: Daylight Savings\7f665914
-Node: Diary Customizing\7f669102
-Node: Hebrew/Islamic Entries\7f673723
-Node: Fancy Diary Display\7f677063
-Node: Included Diary Files\7f678960
-Node: Sexp Diary Entries\7f679941
-Node: Appt Customizing\7f685031
-Node: Sorting\7f686077
-Node: Shell\7f690883
-Node: Single Shell\7f692176
-Node: Interactive Shell\7f693775
-Node: Shell Mode\7f697540
-Node: Terminal emulator\7f700031
-Node: Term Mode\7f702340
-Node: Paging in Term\7f703254
-Node: Narrowing\7f704052
-Node: Hardcopy\7f706002
-Node: Recursive Edit\7f706974
-Node: Dissociated Press\7f709961
-Node: CONX\7f712524
-Node: Amusements\7f713548
-Node: Emulation\7f714028
-Node: Customization\7f715872
-Node: Minor Modes\7f717596
-Node: Variables\7f719228
-Node: Examining\7f721184
-Node: Easy Customization\7f722645
-Node: Customization Groups\7f723659
-Node: Changing an Option\7f726588
-Node: Face Customization\7f732844
-Node: Specific Customization\7f734608
-Node: Edit Options\7f737215
-Node: Locals\7f738799
-Node: File Variables\7f741978
-Node: Keyboard Macros\7f746504
-Node: Basic Kbd Macro\7f748675
-Node: Save Kbd Macro\7f750607
-Node: Kbd Macro Query\7f752276
-Node: Key Bindings\7f754218
-Node: Keymaps\7f755092
-Node: Rebinding\7f758942
-Node: Interactive Rebinding\7f759638
-Node: Programmatic Rebinding\7f761830
-Node: Key Bindings Using Strings\7f764637
-Node: Disabling\7f766243
-Node: Syntax\7f768015
-Node: Syntax Entry\7f768896
-Node: Syntax Change\7f772980
-Node: Init File\7f775149
-Node: Init Syntax\7f776654
-Node: Init Examples\7f779006
-Node: Terminal Init\7f783196
-Node: Audible Bell\7f784906
-Node: Faces\7f788337
-Node: X Resources\7f793174
-Node: Geometry Resources\7f794795
-Node: Iconic Resources\7f797243
-Node: Resource List\7f797715
-Node: Face Resources\7f804222
-Node: Widgets\7f807899
-Node: Menubar Resources\7f808838
-Node: Quitting\7f809771
-Node: Lossage\7f812749
-Node: Stuck Recursive\7f813393
-Node: Screen Garbled\7f814099
-Node: Text Garbled\7f815233
-Node: Unasked-for Search\7f815872
-Node: Emergency Escape\7f816657
-Node: Total Frustration\7f818436
-Node: Bugs\7f819067
-Node: Glossary\7f828601
-Node: Manifesto\7f860230
-Node: Key Index\7f883706
-Node: Command Index\7f908226
-Node: Variable Index\7f948946
-Node: Concept Index\7f964897
+Node: License\7f22506
+Node: Distrib\7f35788
+Node: Intro\7f37452
+Node: Frame\7f40323
+Node: Point\7f43591
+Node: Echo Area\7f45558
+Node: Mode Line\7f47935
+Node: XEmacs under X\7f52366
+Node: Keystrokes\7f55543
+Node: Intro to Keystrokes\7f56387
+Node: Representing Keystrokes\7f58490
+Node: Key Sequences\7f59847
+Node: String Key Sequences\7f63187
+Node: Meta Key\7f63570
+Node: Super and Hyper Keys\7f65043
+Node: Character Representation\7f71267
+Node: Commands\7f72287
+Node: Pull-down Menus\7f75136
+Node: File Menu\7f78485
+Node: Edit Menu\7f82307
+Node: Apps Menu\7f84690
+Node: Options Menu\7f85180
+Node: Buffers Menu\7f89160
+Node: Tools Menu\7f89467
+Node: Help Menu\7f89958
+Node: Menu Customization\7f90359
+Node: Entering Emacs\7f94589
+Node: Exiting\7f95892
+Node: Command Switches\7f98983
+Node: Startup Paths\7f108170
+Node: Basic\7f115750
+Node: Blank Lines\7f125228
+Node: Continuation Lines\7f126654
+Node: Position Info\7f128086
+Node: Arguments\7f131219
+Node: Undo\7f134356
+Node: Minibuffer\7f137303
+Node: Minibuffer File\7f139913
+Node: Minibuffer Edit\7f141718
+Node: Completion\7f144418
+Node: Completion Example\7f146349
+Node: Completion Commands\7f147443
+Node: Strict Completion\7f150099
+Node: Completion Options\7f151880
+Node: Minibuffer History\7f153174
+Node: Repetition\7f156358
+Node: M-x\7f159191
+Node: Help\7f164285
+Node: Mark\7f174204
+Node: Setting Mark\7f176058
+Node: Using Region\7f179180
+Node: Marking Objects\7f179917
+Node: Mark Ring\7f181755
+Node: Mouse Selection\7f183471
+Node: Additional Mouse Operations\7f185478
+Node: Killing\7f189682
+Node: Yanking\7f195318
+Node: Kill Ring\7f196121
+Node: Appending Kills\7f197723
+Node: Earlier Kills\7f199760
+Node: Using X Selections\7f202373
+Node: X Clipboard Selection\7f203623
+Node: X Selection Commands\7f205800
+Node: X Cut Buffers\7f206886
+Node: Active Regions\7f208245
+Node: Accumulating Text\7f212825
+Node: Rectangles\7f215898
+Node: Registers\7f219417
+Node: RegPos\7f220871
+Node: RegText\7f222027
+Node: RegRect\7f223133
+Node: RegConfig\7f224012
+Node: RegNumbers\7f224952
+Node: RegFiles\7f225670
+Node: Bookmarks\7f226328
+Node: Display\7f229700
+Node: Scrolling\7f231195
+Node: Horizontal Scrolling\7f235338
+Node: Selective Display\7f236533
+Node: Display Vars\7f237752
+Node: Search\7f240430
+Node: Incremental Search\7f241623
+Node: Non-Incremental Search\7f250550
+Node: Word Search\7f251992
+Node: Regexp Search\7f253610
+Node: Regexps\7f255146
+Node: Search Case\7f265447
+Node: Replace\7f266228
+Node: Unconditional Replace\7f267176
+Node: Regexp Replace\7f268311
+Node: Replacement and Case\7f269246
+Node: Query Replace\7f270226
+Node: Other Repeating Search\7f273453
+Node: Fixit\7f274708
+Node: Kill Errors\7f275288
+Node: Transpose\7f276621
+Node: Fixing Case\7f279025
+Node: Spelling\7f279671
+Node: Files\7f281132
+Node: File Names\7f282442
+Node: Visiting\7f286779
+Node: Saving\7f293465
+Node: Backup\7f298388
+Node: Backup Names\7f299784
+Node: Backup Deletion\7f301267
+Node: Backup Copying\7f302426
+Node: Interlocking\7f304132
+Node: Reverting\7f308260
+Node: Auto Save\7f310172
+Node: Auto Save Files\7f311139
+Node: Auto Save Control\7f312980
+Node: Recover\7f314818
+Node: Version Control\7f315973
+Node: Concepts of VC\7f318011
+Node: Editing with VC\7f319621
+Node: Variables for Check-in/out\7f324877
+Node: Log Entries\7f326776
+Node: Change Logs and VC\7f327956
+Node: Old Versions\7f331223
+Node: VC Status\7f333226
+Node: Renaming and VC\7f334940
+Node: Snapshots\7f335619
+Node: Making Snapshots\7f336120
+Node: Snapshot Caveats\7f337413
+Node: Version Headers\7f339222
+Node: ListDir\7f341921
+Node: Comparing Files\7f343970
+Node: Dired\7f345503
+Node: Dired Enter\7f346174
+Node: Dired Edit\7f346999
+Node: Dired Deletion\7f348746
+Node: Dired Immed\7f351969
+Node: Misc File Ops\7f353245
+Node: Buffers\7f355733
+Node: Select Buffer\7f357891
+Node: List Buffers\7f359686
+Node: Misc Buffer\7f361431
+Node: Kill Buffer\7f363074
+Node: Several Buffers\7f364204
+Node: Windows\7f368070
+Node: Basic Window\7f368781
+Node: Split Window\7f370500
+Node: Other Window\7f372633
+Node: Pop Up Window\7f375062
+Node: Change Window\7f376567
+Node: Mule\7f379475
+Node: Mule Intro\7f380738
+Node: Language Environments\7f381754
+Node: Input Methods\7f383861
+Node: Select Input Method\7f387581
+Node: Coding Systems\7f389736
+Node: Recognize Coding\7f393922
+Node: Specify Coding\7f397248
+Node: Major Modes\7f402179
+Node: Choosing Modes\7f404398
+Node: Indentation\7f406788
+Node: Indentation Commands\7f408883
+Node: Tab Stops\7f411612
+Node: Just Spaces\7f413461
+Node: Text\7f414276
+Node: Text Mode\7f416259
+Node: Nroff Mode\7f418338
+Node: TeX Mode\7f419981
+Node: TeX Editing\7f422233
+Node: TeX Print\7f425667
+Node: Outline Mode\7f428886
+Node: Outline Format\7f430367
+Node: Outline Motion\7f433167
+Node: Outline Visibility\7f434720
+Node: Words\7f437641
+Node: Sentences\7f440588
+Node: Paragraphs\7f442784
+Node: Pages\7f445072
+Node: Filling\7f447672
+Node: Auto Fill\7f448243
+Node: Fill Commands\7f450390
+Node: Fill Prefix\7f452555
+Node: Case\7f454743
+Node: Programs\7f456771
+Node: Program Modes\7f459320
+Node: Lists\7f461552
+Node: Defuns\7f467392
+Node: Grinding\7f470045
+Node: Basic Indent\7f470673
+Node: Multi-line Indent\7f472694
+Node: Lisp Indent\7f474310
+Node: C Indent\7f477760
+Node: Matching\7f483000
+Node: Comments\7f484522
+Node: Balanced Editing\7f490974
+Node: Lisp Completion\7f491988
+Node: Documentation\7f493003
+Node: Change Log\7f494242
+Node: Tags\7f496820
+Node: Tag Syntax\7f498469
+Node: Create Tags Table\7f502413
+Node: Etags Regexps\7f506473
+Node: Select Tags Table\7f511131
+Node: Find Tag\7f514869
+Node: Tags Search\7f517833
+Node: List Tags\7f521289
+Node: Fortran\7f522318
+Node: Fortran Motion\7f523394
+Node: Fortran Indent\7f524214
+Node: ForIndent Commands\7f524899
+Node: ForIndent Num\7f526044
+Node: ForIndent Conv\7f527318
+Node: ForIndent Vars\7f528094
+Node: Fortran Comments\7f529262
+Node: Fortran Columns\7f532860
+Node: Fortran Abbrev\7f534283
+Node: Asm Mode\7f535192
+Node: Running\7f535744
+Node: Compilation\7f536714
+Node: Lisp Modes\7f541564
+Node: Lisp Libraries\7f542837
+Node: Loading\7f543391
+Node: Compiling Libraries\7f547851
+Node: Mocklisp\7f550742
+Node: Lisp Eval\7f551419
+Node: Lisp Debug\7f555059
+Node: Lisp Interaction\7f560484
+Node: External Lisp\7f561839
+Node: Packages\7f563913
+Node: Package Terminology\7f564654
+Node: Using Packages\7f566012
+Node: Building Packages\7f574801
+Node: Abbrevs\7f577323
+Node: Defining Abbrevs\7f579523
+Node: Expanding Abbrevs\7f581970
+Node: Editing Abbrevs\7f584672
+Node: Saving Abbrevs\7f586540
+Node: Dynamic Abbrevs\7f588480
+Node: Picture\7f589782
+Node: Basic Picture\7f592215
+Node: Insert in Picture\7f594500
+Node: Tabs in Picture\7f595922
+Node: Rectangles in Picture\7f597443
+Node: Sending Mail\7f599351
+Node: Mail Format\7f601062
+Node: Mail Headers\7f602412
+Node: Mail Mode\7f608822
+Node: Reading Mail\7f612435
+Node: Calendar/Diary\7f614010
+Node: Calendar Motion\7f615682
+Node: Calendar Unit Motion\7f616565
+Node: Move to Beginning or End\7f618888
+Node: Specified Dates\7f620021
+Node: Scroll Calendar\7f620909
+Node: Mark and Region\7f622700
+Node: General Calendar\7f624606
+Node: LaTeX Calendar\7f626214
+Node: Holidays\7f628228
+Node: Sunrise/Sunset\7f631330
+Node: Lunar Phases\7f634373
+Node: Other Calendars\7f635758
+Node: Calendar Systems\7f637245
+Node: To Other Calendar\7f640356
+Node: From Other Calendar\7f642347
+Node: Mayan Calendar\7f644652
+Node: Diary\7f647847
+Node: Diary Commands\7f649596
+Node: Format of Diary File\7f652902
+Node: Date Formats\7f655772
+Node: Adding to Diary\7f658346
+Node: Special Diary Entries\7f659977
+Node: Calendar Customization\7f665316
+Node: Calendar Customizing\7f666178
+Node: Holiday Customizing\7f669397
+Node: Date Display Format\7f675865
+Node: Time Display Format\7f676823
+Node: Daylight Savings\7f677961
+Node: Diary Customizing\7f681149
+Node: Hebrew/Islamic Entries\7f685770
+Node: Fancy Diary Display\7f689110
+Node: Included Diary Files\7f691007
+Node: Sexp Diary Entries\7f691988
+Node: Appt Customizing\7f697078
+Node: Sorting\7f698124
+Node: Shell\7f702930
+Node: Single Shell\7f704223
+Node: Interactive Shell\7f705822
+Node: Shell Mode\7f709587
+Node: Terminal emulator\7f712078
+Node: Term Mode\7f714387
+Node: Paging in Term\7f715301
+Node: Narrowing\7f716099
+Node: Hardcopy\7f718049
+Node: Recursive Edit\7f719021
+Node: Dissociated Press\7f722008
+Node: CONX\7f724571
+Node: Amusements\7f725595
+Node: Emulation\7f726075
+Node: Customization\7f727919
+Node: Minor Modes\7f729643
+Node: Variables\7f731275
+Node: Examining\7f733231
+Node: Easy Customization\7f734692
+Node: Customization Groups\7f735706
+Node: Changing an Option\7f738635
+Node: Face Customization\7f744891
+Node: Specific Customization\7f746655
+Node: Edit Options\7f749262
+Node: Locals\7f750846
+Node: File Variables\7f754025
+Node: Keyboard Macros\7f758551
+Node: Basic Kbd Macro\7f760722
+Node: Save Kbd Macro\7f762654
+Node: Kbd Macro Query\7f764323
+Node: Key Bindings\7f766265
+Node: Keymaps\7f767139
+Node: Rebinding\7f770989
+Node: Interactive Rebinding\7f771688
+Node: Programmatic Rebinding\7f773880
+Node: Key Bindings Using Strings\7f776687
+Node: Disabling\7f778293
+Node: Syntax\7f780065
+Node: Syntax Entry\7f780946
+Node: Syntax Change\7f785030
+Node: Init File\7f787199
+Node: Init Syntax\7f788704
+Node: Init Examples\7f791056
+Node: Terminal Init\7f795246
+Node: Audible Bell\7f796956
+Node: Faces\7f800387
+Node: X Resources\7f805224
+Node: Geometry Resources\7f806845
+Node: Iconic Resources\7f809293
+Node: Resource List\7f809765
+Node: Face Resources\7f816272
+Node: Widgets\7f819949
+Node: Menubar Resources\7f820888
+Node: Quitting\7f821821
+Node: Lossage\7f824799
+Node: Stuck Recursive\7f825443
+Node: Screen Garbled\7f826149
+Node: Text Garbled\7f827283
+Node: Unasked-for Search\7f827922
+Node: Emergency Escape\7f828707
+Node: Total Frustration\7f830486
+Node: Bugs\7f831117
+Node: Glossary\7f840651
+Node: Manifesto\7f872280
+Node: Key Index\7f895756
+Node: Command Index\7f920951
+Node: Variable Index\7f962858
+Node: Concept Index\7f978995
 \1f
 End Tag Table
index 0055d09..e8495cf 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 e6fe2a8..de7a277 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 66ed5a7..4e46b44 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 db885d4..6b90ddb 100644 (file)
@@ -1,3 +1,47 @@
+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 15aecdc..5af0a45 100644 (file)
@@ -1,3 +1,148 @@
+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 b3468db..d1f445b 100644 (file)
@@ -79,7 +79,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 e643925..f59d54f 100644 (file)
@@ -1157,6 +1157,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 b0bd9f1..ddc1a39 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 ec39fc4..0f28447 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
@@ -413,7 +413,7 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
             lisp-directory)
        (load (expand-file-name (file-name-sans-extension autoload-file-name)
                                lisp-directory) nil t))
-    
+
     (if (not inhibit-autoloads)
        (progn
          (if (not inhibit-early-packages)
@@ -495,7 +495,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)))
 
@@ -597,7 +597,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)
@@ -622,7 +622,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)
@@ -785,7 +785,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)
@@ -823,7 +823,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)
@@ -902,7 +902,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
@@ -913,7 +913,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)
@@ -933,12 +933,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))
@@ -950,7 +950,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")
@@ -963,11 +963,11 @@ 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"))
-    
+
     ((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"))
@@ -996,7 +996,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")))
@@ -1128,7 +1128,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))
@@ -1137,7 +1137,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)
@@ -1158,7 +1158,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 c5cda0c..cb61c20 100644 (file)
-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().
+2000-01-16  Martin Buchholz  <martin@xemacs.org>
 
-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.
-
-       * 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>
+2000-01-14  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
 
-       * 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>
-
-       * 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.
+       * md5.c:
+       * file-coding.c:
+       * file-coding.h:
+       Change enum eol_type to eol_type_t.
 
-1999-10-14  Jonathan Harris  <jhar@tardis.ed.ac.uk>
+2000-01-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
 
-       * event-msw.c (mswindows_key_to_emacs_keysym):
-       Recognise keypad keys as different from normal keys.
+       * gui.c (get_gui_callback): Check cons before accessing car.
 
-1999-10-14  Didier Verna  <didier@xemacs.org>
+2000-01-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
 
-       * glyphs-x.c (x_finalize_image_instance): avoid freeing null pixmaps.
+       * specifier.h (XSPECIFIER_TYPE): Add error checking version.
+       (XSETSPECIFIER_TYPE): Ditto.
 
-1999-10-10  Olivier Galibert  <galibert@pobox.com>
+2000-01-17  Didier Verna  <didier@xemacs.org>
 
-       * symbols.c (init_symbols_once_early): dump Vquit_flag.
+       * redisplay.c (generate_fstring_runes): compute string size in
+       characters, not bytes.
 
-       * symsinit.h: Updated.
+2000-01-09  Hrvoje Niksic  <hniksic@iskon.hr>
 
-       * ntproc.c (vars_of_ntproc): Use defsymbol.
+       * window.c (Fwindow_minibuffer_p): Make WINDOW optional.
 
-       * emacs.c (main_1): Updated reinit calls.
+2000-01-14  Hrvoje Niksic  <hniksic@iskon.hr>
 
-       * lisp.h: Removed Fpurecopy and pure_put declarations.
-       * fns.c: Removed pure_put.
+       * print.c (print_error_message): Call print_prepare().
 
-       * eval.c (Fdefvar): pure_put -> Fput
-       (Fdefconst): Ditto.
-       * frame-x.c (init_x_prop_symbols): Ditto.
-       * symbols.c (deferror): Ditto.
+2000-01-14  Martin Buchholz  <martin@xemacs.org>
 
-       * 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.
+       * .dbxrc: Renamed from dbxrc.
 
-       * 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.
+       * events.c (event_to_character):
+       Use `assert (foo)' instead of `if (!foo) abort()'
 
-1999-10-10  Olivier Galibert  <galibert@pobox.com>
+       * .gdbinit (xtype): Add documentation.
+       * .gdbinit (check-temacs): New function.
+       * .gdbinit (check-xemacs): New function.
+       * dbxrc (check-xemacs): New function.
+       * dbxrc (check-xemacs): New function.
 
-       * symsinit.h: Updated declarations, see other ChangeLog entries.
+2000-01-14  Andy Piper  <andy@xemacs.org>
 
-       * redisplay.c (init_redisplay): Ensure proper reinitialisation.
+       * glyphs-widget.c (widget_query_geometry): Make sure that we
+       calculate default dimensions correctly.
 
-       * lrecord.h (XD_DYNARR_DESC): Introduce XD_INT_RESET and use it.
+2000-01-13  Kirill 'Big K' Katsnelson  <kkm@dtmx.com>
 
-       * glyphs.c: Add the ii_keyword_entry and related descriptions.
-       Fix the image_instantiator_methods one.
+       * symsinit.h: Added prototype for reinit_vars_of_frame_mswindows.
 
-       * file-coding.c: Plonk all data that needs to be dumped in a
-       dynamically allocated structure.
+       * event-msw.c (vars_of_event_mswindows): Fixed a mistyped
+       pdump_wire'd variable.
 
-       * extents.c (reinit_vars_of_extents): Extracted from
-       vars_of_extents.
+       * emacs.c: (main_1): Conditionalized calls to
+       reinit_vars_of_scrollbar_x and reinit_vars_of_module.
 
-       * event-stream.c (vars_of_event_stream): Don't staticpro when
-       pdump_wire is enough.
+2000-01-13  Martin Buchholz  <martin@xemacs.org>
 
-       * 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):
-       * 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>
-
-       * fns.c (Fmapc): Rename back to Fmapc_internal.
-
-1999-07-30  Gleb Arshinov  <gleb@cs.stanford.edu>
-
-       * ntheap.h: CONST (semantically constant) name field of file_data
-       struct
-
-       * unexnt.c (open_output_file): match function definition with
-       function declaration
-
-       * editfns.c: #include "sysfile.h" for getcwd() prototype
-
-       * gif_io.c:  #include "sysfile.h" for close() prototype
-
-1999-09-02  Martin Buchholz  <martin@xemacs.org>
-
-       * 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.
-
-1999-09-01  Martin Buchholz  <martin@xemacs.org>
-
-       * 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.
-
-       * redisplay-output.c (redisplay_clear_to_window_end):
-       Remove redundant initialization.
-
-       * redisplay.h:
-       * redisplay-msw.c:
-       * redisplay-x.c:
-       Move declarations of bevel_modeline() into redisplay.h.
-
-1999-08-30  Olivier Galibert  <galibert@pobox.com>
-
-       * 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.
-
-       * console-stream.h: Declare the Vterminal_* variables.
-
-       * 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[].
-
-       * 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.
-
-       * symbols.c: Fix symbol_value_buffer_local_description.
-
-       * gdbinit (Lisp): Add opaque_ptr, remove opaque_list.
-
-1999-09-02  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * extents.c (extent_remprop): Get extent's plist address
-       correctly.
-
-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().
+       * 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 dd9e43b..ca864f2 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);
@@ -2160,7 +2156,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 */
@@ -2169,7 +2165,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;
@@ -2993,7 +2989,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;
 
@@ -3044,7 +3040,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;
 
@@ -3129,7 +3125,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);
@@ -3155,24 +3151,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;
@@ -3485,7 +3482,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() */
@@ -4150,7 +4147,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];
@@ -4264,7 +4261,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;
@@ -4311,7 +4308,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;
 }
 
@@ -4436,11 +4433,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);
            }
@@ -4454,7 +4451,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;
@@ -4474,7 +4471,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++;
@@ -4522,7 +4519,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,
@@ -4548,7 +4545,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;
@@ -4614,7 +4611,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;
@@ -4681,7 +4678,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;
@@ -4736,7 +4733,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;
@@ -4747,7 +4744,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)
        {
@@ -4793,7 +4790,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
@@ -4858,7 +4855,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]);
@@ -4915,7 +4912,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;
@@ -4939,17 +4936,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));
 
@@ -5003,7 +5000,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 361563f..2b131ac 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
@@ -797,17 +802,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;
 }
 
index c62ee1b..3993f28 100644 (file)
@@ -11,7 +11,7 @@ console-msw.o: $(LISP_H) conslots.h console-msw.h console.h events.h lisp-disuni
 device-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console-stream.h console.h device.h events.h faces.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h systime.h toolbar.h
 dialog-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console.h device.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h
 dired-msw.o: $(LISP_H) buffer.h bufslots.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h ndir.h nt.h regex.h symeval.h symsinit.h sysdir.h sysfile.h sysproc.h systime.h
-event-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console-tty.h console.h device.h dragdrop.h events-mod.h events.h faces.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h lstream.h menubar-msw.h mule-charset.h objects-msw.h objects.h process.h redisplay.h scrollbar-msw.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h sysproc.h syssignal.h systime.h systty.h syswait.h toolbar.h
+event-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console-tty.h console.h device.h dragdrop.h events-mod.h events.h faces.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h lstream.h menubar-msw.h mule-charset.h objects-msw.h objects.h process.h redisplay.h scrollbar-msw.h scrollbar.h select.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h sysproc.h syssignal.h systime.h systty.h syswait.h toolbar.h
 frame-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console.h device.h elhash.h events.h faces.h frame.h frameslots.h glyphs-msw.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h systime.h toolbar.h window.h winslots.h
 glyphs-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console.h device.h elhash.h faces.h file-coding.h frame.h frameslots.h glyphs-msw.h glyphs.h gui.h imgproc.h insdel.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h objects-msw.h objects.h opaque.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysfile.h toolbar.h window.h winslots.h
 gui-msw.o: $(LISP_H) conslots.h console-msw.h console.h device.h elhash.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h
@@ -19,7 +19,7 @@ menubar-msw.o: $(LISP_H) buffer.h bufslots.h commands.h conslots.h console-msw.h
 objects-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console.h device.h hash.h insdel.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h objects-msw.h objects.h specifier.h symeval.h symsinit.h
 redisplay-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console.h debug.h device.h events.h faces.h frame.h frameslots.h glyphs-msw.h glyphs.h gui.h gutter.h lisp-disunion.h lisp-union.h lrecord.h mule-ccl.h mule-charset.h objects-msw.h objects.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h systime.h toolbar.h window.h winslots.h
 scrollbar-msw.o: $(LISP_H) conslots.h console-msw.h console.h device.h events.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h redisplay.h scrollbar-msw.h scrollbar.h specifier.h symeval.h symsinit.h systime.h toolbar.h window.h winslots.h
-select-msw.o: $(LISP_H) conslots.h console-msw.h console.h lisp-disunion.h lisp-union.h lrecord.h select.h symeval.h symsinit.h
+select-msw.o: $(LISP_H) conslots.h console-msw.h console.h device.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h redisplay.h scrollbar.h select.h specifier.h symeval.h symsinit.h toolbar.h
 toolbar-msw.o: $(LISP_H) buffer.h bufslots.h conslots.h console-msw.h console.h device.h elhash.h faces.h frame.h frameslots.h glyphs-msw.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h objects-msw.h objects.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h toolbar.h window.h winslots.h
 #endif
 #ifdef HAVE_X_WINDOWS
@@ -94,7 +94,7 @@ ecrt0.o: config.h
 editfns.o: $(LISP_H) buffer.h bufslots.h chartab.h commands.h conslots.h console.h device.h events.h extents.h frame.h frameslots.h glyphs.h gui.h insdel.h line-number.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syspwd.h systime.h toolbar.h window.h winslots.h
 eldap.o: $(LISP_H) buffer.h bufslots.h eldap.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h symeval.h symsinit.h sysdep.h
 elhash.o: $(LISP_H) bytecode.h elhash.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h
-emacs.o: $(LISP_H) backtrace.h buffer.h bufslots.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h paths.h process.h redisplay.h symeval.h symsinit.h sysdep.h sysdll.h sysfile.h syssignal.h systime.h systty.h
+emacs.o: $(LISP_H) backtrace.h buffer.h bufslots.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 mule-charset.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 conslots.h console.h device.h emodules.h file-coding.h frame.h frameslots.h glyphs.h gui.h insdel.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mule-charset.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysdll.h toolbar.h window.h winslots.h
 esd.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h miscplay.h symeval.h symsinit.h
 eval.o: $(LISP_H) backtrace.h buffer.h bufslots.h bytecode.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mule-charset.h opaque.h symeval.h symsinit.h
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 4ced792..921d48f 100644 (file)
@@ -424,7 +424,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);
@@ -438,7 +438,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)
     {
@@ -1059,7 +1059,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;
@@ -1400,7 +1400,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
@@ -1481,7 +1481,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)
 {
@@ -1643,7 +1643,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;
 
@@ -1946,7 +1946,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_ */
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 e10c23f..1d71858 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;
+  unsigned char 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)
+{
+  unsigned char 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);
-       unsigned char 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 ae3c614..b3e4574 100644 (file)
@@ -2057,7 +2057,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)
@@ -2105,7 +2110,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;
 }
 
@@ -2155,6 +2161,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 &&
@@ -2192,6 +2199,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)
        {
@@ -2200,25 +2210,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. */
@@ -2255,6 +2268,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)
@@ -2267,6 +2281,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);
@@ -2275,10 +2292,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,
@@ -2288,16 +2302,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 8c05fdd..04dc325 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 7e92134..b09fd3b 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 b0a60fa..069bdd8 100644 (file)
@@ -92,9 +92,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,
@@ -506,9 +506,6 @@ make_charset (int id, Lisp_Object name, unsigned char rep_bytes,
 
   assert (NILP (chlook->charset_by_leading_byte[id - 128]));
   chlook->charset_by_leading_byte[id - 128] = obj;
-  if (id < 0xA0)
-    /* official leading byte */
-    rep_bytes_by_first_byte[id] = rep_bytes;
 
   /* Some charsets are "faux" and don't have names or really exist at
      all except in the leading-byte table. */
@@ -1122,6 +1119,27 @@ Return the character set of char CH.
                        (CHAR_LEADING_BYTE (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.
 */
@@ -1253,6 +1271,7 @@ syms_of_mule_charset (void)
 
   DEFSUBR (Fmake_char);
   DEFSUBR (Fchar_charset);
+  DEFSUBR (Fchar_octet);
   DEFSUBR (Fsplit_char);
 
 #ifdef ENABLE_COMPOSITE_CHARS
index 07f72df..5e0caa4 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
@@ -557,17 +557,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
@@ -589,21 +578,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 7e29d59..17de60e 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 5b0fb72..edfd7dd 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