XEmacs 21.2.25 "Hephaestus".
authortomo <tomo>
Wed, 19 Jan 2000 05:07:48 +0000 (05:07 +0000)
committertomo <tomo>
Wed, 19 Jan 2000 05:07:48 +0000 (05:07 +0000)
88 files changed:
CHANGES-beta
ChangeLog
README
configure
configure.in
configure.usage
etc/TUTORIAL.de
info/lispref.info
info/widget.info
info/xemacs-faq.info
info/xemacs-faq.info-1
info/xemacs-faq.info-2
lib-src/ChangeLog
lib-src/config.values.sh
lib-src/fakemail.c
lisp/ChangeLog
lisp/build-report.el
lisp/byte-optimize.el
lisp/cus-edit.el
lisp/files.el
lisp/gnuserv.el
lisp/hyper-apropos.el
lisp/minibuf.el
lisp/mule/mule-category.el
lisp/package-get.el
lwlib/ChangeLog
lwlib/config.h.in
lwlib/lwlib-Xaw.c
lwlib/lwlib.c
lwlib/lwlib.h
lwlib/xlwcheckbox.c
lwlib/xlwgauge.c
lwlib/xlwgauge.h
lwlib/xlwgaugeP.h
lwlib/xlwradio.c
lwlib/xlwradio.h
lwlib/xlwradioP.h
lwlib/xlwscrollbar.c
lwlib/xlwtabs.c
lwlib/xlwtabsP.h
man/ChangeLog
man/lispref/functions.texi
man/lispref/minibuf.texi
man/lispref/text.texi
man/widget.texi
man/xemacs-faq.texi
nt/ChangeLog
nt/minitar.c
src/ChangeLog
src/Makefile.in.in
src/buffer.c
src/buffer.h
src/cmdloop.c
src/config.h.in
src/database.c
src/editfns.c
src/elhash.c
src/event-msw.c
src/event-stream.c
src/filelock.c
src/floatfns.c
src/fns.c
src/glyphs-msw.c
src/glyphs-widget.c
src/glyphs-x.c
src/glyphs.c
src/glyphs.h
src/gutter.h
src/lisp.h
src/print.c
src/profile.c
src/redisplay-output.c
src/redisplay.c
src/regex.c
src/s/windowsnt.h
src/specifier.c
src/specifier.h
src/syntax.c
src/toolbar.h
src/widget.c
src/window.c
tests/ChangeLog
tests/automated/base64-tests.el
tests/automated/byte-compiler-tests.el
tests/automated/lisp-tests.el
tests/automated/mule-tests.el
tests/glyph-test.el
version.sh

index 6740d26..3c9a7d4 100644 (file)
@@ -1,5 +1,25 @@
-                                                       -*- indented-text -*-
+to 21.2.25 "Hephaestus"
+-- the LATEST.IS.* file has been renamed to LATEST-IS-*.
+-- the CVS tag to checkout the latest tarball is `r21-2-latest-beta'.
+-- 3 crashes in mapcar1 have been fixed.
+-- lwlib arg passing cleanup
+-- yet more widget and tab fixes
+-- yet another Tab sync
+-- specifier copying fix for widgets
+-- preparation for proper layouts
+-- native widgets used for some custom widgets
+-- (+ 1) is no longer incorrectly compiled
+-- char-before no longer has performance penalty
+-- xpm again works on Windows
+-- native Windows fixes from Adrian Aichner
+-- Mule fixes from Yoshiki Hayashi
+-- properly detect Athena widgets headers and libs, preventing crashes
+   from misdetection and from libraries and headers that don't match,
+   from Daniel Pittman
+
 to 21.2.24 "Hecate"
+-- Tabs fixes from Andy Piper
+-- Widget leak fixes from Andy Piper
 -- (coding-system-list) deals properly with coding system aliases, Shenghuo ZHU
 -- configure support for ESD sound rewritte, Martin Buchholz
 -- directory separator fix from Mike Alexander
index fee99c7..19b744d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+1999-12-24  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.25 is released.
+
+1999-12-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * README: Remove msdos part.
+
+1999-12-17  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: Oops. xpm doesn't actually depend on X11.
+       I got confused by the name (like others get confused by `xemacs'?)
+
 1999-12-14  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.24 is released.
 
        * Makefile.in.in: use WINDOWSNT for mingw install.
 
-1999-08-01  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-08-01  Adrian Aichner  <adrian@xemacs.org>
 
        * etc/DISTRIB: Update IP address of ftp.xemacs.org.
        * etc/NEWS: Fix typo
 
        * etc/check_cygwin_setup.sh: fix a couple of buglets.
 
-1998-08-23  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-08-23  Adrian Aichner  <adrian@xemacs.org>
 
        * etc/sample.emacs: Enable sound support on mswindows devices.
 
        conditions for both PNG and XPM, stop screaming if png is not found and
        no window-system is selected, and fixed a bug in the XPM checking.
 
-1998-08-06  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-08-06  Adrian Aichner  <adrian@xemacs.org>
 
        * etc/TUTORIAL.de: Fixing typos and grammatical errors.  Fixing
        inconsistent usage of RET, <Return>, and <return> (only using
@@ -1512,7 +1525,7 @@ Wed Jan 28 13:41:22 1998  Andy Piper  <andyp@parallax.co.uk>
 
        * etc/aliases.ksh: Add `mak' function to create beta.err for
        build-report.
-       From Adrian Aichner <aichner@ecf.teradyne.com>
+       From Adrian Aichner <adrian@xemacs.org>
        Suggested by Karl M. Hegbloom <karlheg@bittersweet.inetarena.com>
 
 1998-01-27  SL Baur  <steve@altair.xemacs.org>
@@ -1926,13 +1939,13 @@ Sun November 01 12:00:00 1997 <jhar@tardis.ed.ac.uk>
        * lwlib/lwlib-Xm.c(update_one_menu_entry): Add missing variable.
        From Skip Montanaro <skip@calendar.com>
 
-1997-11-04  Adrian Aichner  <aichner@ecf.teradyne.com>
+1997-11-04  Adrian Aichner  <adrian@xemacs.org>
 
        * etc/TUTORIAL.de:
        Updated copyright information. Translated most of the COPYING
        section. Translated the <<.*>> didactic line.
 
-1997-10-22  Adrian Aichner  <aichner@ecf.teradyne.com>
+1997-10-22  Adrian Aichner  <adrian@xemacs.org>
 
        * etc/TUTORIAL.de: Fixed two issues reported by
        Achim Oppelt <aoppelt@theorie3.physik.uni-erlangen.de>
@@ -1945,12 +1958,12 @@ Sun November 01 12:00:00 1997 <jhar@tardis.ed.ac.uk>
        Applied patches supplied by Marc Aurel <4-tea-2@bong.saar.de>.
        They fix yet more typos and quite a few awkward sentences.
 
-1997-10-21  Adrian Aichner  <aichner@ecf.teradyne.com>
+1997-10-21  Adrian Aichner  <adrian@xemacs.org>
 
        * etc/TUTORIAL.de: Manually merged a few more corrections by
        Carsten Leonhardt <leo@arioch.oche.de>
 
-1997-10-20  Adrian Aichner  <aichner@ecf.teradyne.com>
+1997-10-20  Adrian Aichner  <adrian@xemacs.org>
 
        * etc/TUTORIAL.de:
        Applied patches from Andreas Jaeger <aj@arthur.rhein-neckar.de> to 1.2,
diff --git a/README b/README
index b85267e..0962c32 100644 (file)
--- a/README
+++ b/README
@@ -59,8 +59,5 @@ There are several subdirectories:
 `info' holds the Info documentation tree for XEmacs.
 `man' holds the source code for the XEmacs info documentation tree.
 
-`msdos' holds configuration files for compiling XEmacs under MSDOG.
-    See the file etc/MSDOS for more information.
-
 `nt' holds configuration files for compiling XEmacs under Microsoft Windows
     NT.  The support for NT is very tentative right now.
index ee408ed..c022376 100755 (executable)
--- a/configure
+++ b/configure
@@ -482,6 +482,21 @@ echo "  Use \`$progname --help' to show usage.") >&2 && exit 1
          done
         ;;
 
+                        "with_athena" )
+         case "$val" in
+            xa | xaw )                   val=xaw    ;;
+            3 | 3d | xaw3d )              val=3d     ;;
+                        ne | nex | next | naxtaw)     val=next   ;;
+                        9 | 95 | xaw95 )              val=95     ;;
+            xp | xpm | xawxpm )           val=xpm    ;;
+           * ) (echo "$progname: Usage error:"
+echo " " "The \`--$optname' option must have one of these values:
+  \`xaw', \`3d', \`next', \`95', or \`xpm'."
+echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
+         esac
+          eval "$opt=\"$val\""
+        ;;
+
                "with_xim" )
          case "$val" in
            y | ye | yes )                val=yes   ;;
@@ -710,12 +725,11 @@ EOF
          case "$val" in
            l | lu | luc | luci | lucid )               val=lucid  ;;
            m | mo | mot | moti | motif )               val=motif  ;;
-           athena3d | athena-3d )                      val=athena3d ;;
            a | at | ath | athe | athen | athena )      val=athena ;;
            n | no | non | none )                       val=no ;;
            * ) (echo "$progname: Usage error:"
 echo " " "The \`--$optname' option must have one of these values:
-  \`lucid', \`motif', \`athena', \`athena3d', or \`no'."
+  \`lucid', \`motif', \`athena', or \`no'."
 echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
          esac
          eval "$opt=\"$val\""
@@ -816,7 +830,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:820: checking whether ln -s works" >&5
+echo "configure:834: checking whether ln -s works" >&5
 
 rm -f conftestdata
 if ln -s X conftestdata 2>/dev/null
@@ -1061,7 +1075,7 @@ EOF
 
 
 echo $ac_n "checking "host system type"""... $ac_c" 1>&6
-echo "configure:1065: checking "host system type"" >&5
+echo "configure:1079: 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/'`
@@ -1555,7 +1569,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:1559: checking for $ac_word" >&5
+echo "configure:1573: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1582,7 +1596,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:1586: checking for $ac_word" >&5
+echo "configure:1600: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1630,7 +1644,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:1634: checking for $ac_word" >&5
+echo "configure:1648: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1659,7 +1673,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1663: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1677: 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'
@@ -1672,12 +1686,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1676 "configure"
+#line 1690 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1695: \"$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
@@ -1705,19 +1719,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:1709: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1723: 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:1714: checking whether we are using GNU C" >&5
+echo "configure:1728: 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:1721: \"$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:1735: \"$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
@@ -1735,7 +1749,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:1739: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1753: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1768,7 +1782,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:1772: checking for $ac_word" >&5
+echo "configure:1786: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1795,7 +1809,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:1799: checking for $ac_word" >&5
+echo "configure:1813: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1843,7 +1857,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:1847: checking for $ac_word" >&5
+echo "configure:1861: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1872,7 +1886,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1876: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1890: 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'
@@ -1885,12 +1899,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 1889 "configure"
+#line 1903 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1908: \"$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
@@ -1918,19 +1932,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:1922: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1936: 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:1927: checking whether we are using GNU C" >&5
+echo "configure:1941: 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:1934: \"$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:1948: \"$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
@@ -1948,7 +1962,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:1952: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1966: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -1981,7 +1995,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:1985: checking for $ac_word" >&5
+echo "configure:1999: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2008,7 +2022,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:2012: checking for $ac_word" >&5
+echo "configure:2026: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2056,7 +2070,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:2060: checking for $ac_word" >&5
+echo "configure:2074: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2085,7 +2099,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:2089: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:2103: 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'
@@ -2098,12 +2112,12 @@ cross_compiling=no
 
 cat > conftest.$ac_ext << EOF
 
-#line 2102 "configure"
+#line 2116 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:2107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2121: \"$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
@@ -2131,19 +2145,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:2135: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:2149: 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:2140: checking whether we are using GNU C" >&5
+echo "configure:2154: 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:2147: \"$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:2161: \"$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
@@ -2161,7 +2175,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:2165: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:2179: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -2198,7 +2212,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:2202: checking how to run the C preprocessor" >&5
+echo "configure:2216: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2211,13 +2225,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 2215 "configure"
+#line 2229 "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:2221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2235: \"$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
   :
@@ -2228,13 +2242,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2232 "configure"
+#line 2246 "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:2238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2252: \"$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
   :
@@ -2245,13 +2259,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2249 "configure"
+#line 2263 "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:2255: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2269: \"$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
   :
@@ -2276,9 +2290,9 @@ echo "$ac_t""$CPP" 1>&6
 
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:2280: checking for AIX" >&5
+echo "configure:2294: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2282 "configure"
+#line 2296 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -2305,9 +2319,9 @@ rm -f conftest*
 
 
 echo $ac_n "checking for GNU libc""... $ac_c" 1>&6
-echo "configure:2309: checking for GNU libc" >&5
+echo "configure:2323: checking for GNU libc" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2311 "configure"
+#line 2325 "configure"
 #include "confdefs.h"
 #include <features.h>
 int main() {
@@ -2319,7 +2333,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2337: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_glibc=yes
 else
@@ -2341,7 +2355,7 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 2345 "configure"
+#line 2359 "configure"
 #include "confdefs.h"
 int main () {
 #if defined __SUNPRO_C
@@ -2353,7 +2367,7 @@ return 0;
 #endif
 }
 EOF
-if { (eval echo configure:2357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:2371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -2627,7 +2641,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:2631: checking for dynodump" >&5
+echo "configure:2645: checking for dynodump" >&5
 if test "$unexec" != "unexsol2.o"; then
   echo "$ac_t""no" 1>&6
 else
@@ -2665,12 +2679,12 @@ if test "$unexec" = "unexaix.o"; then
   done
   
 echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6
-echo "configure:2669: checking for terminateAndUnload in -lC" >&5
+echo "configure:2683: 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 2674 "configure"
+#line 2688 "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
@@ -2681,7 +2695,7 @@ int main() {
 terminateAndUnload()
 ; return 0; }
 EOF
-if { (eval echo configure:2685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2699: \"$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
@@ -2785,7 +2799,7 @@ fi
 
 if test "$add_runtime_path" = "yes"; then
       echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6
-echo "configure:2789: checking "for runtime libraries flag"" >&5
+echo "configure:2803: checking "for runtime libraries flag"" >&5
   case "$opsys" in
     sol2 ) dash_r="-R" ;;
     decosf* | linux* | irix*) dash_r="-rpath " ;;
@@ -2807,14 +2821,14 @@ if test "$GCC" = "yes"; then
   done
 fi
         cat > conftest.$ac_ext <<EOF
-#line 2811 "configure"
+#line 2825 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   dash_r="$try_dash_r"
 else
@@ -2916,10 +2930,10 @@ else
 fi
 after_morecore_hook_exists=yes
 echo $ac_n "checking for malloc_get_state""... $ac_c" 1>&6
-echo "configure:2920: checking for malloc_get_state" >&5
+echo "configure:2934: checking for malloc_get_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2923 "configure"
+#line 2937 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_get_state(); below.  */
@@ -2942,7 +2956,7 @@ malloc_get_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2960: \"$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
@@ -2962,10 +2976,10 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6
-echo "configure:2966: checking for malloc_set_state" >&5
+echo "configure:2980: checking for malloc_set_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2969 "configure"
+#line 2983 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_set_state(); below.  */
@@ -2988,7 +3002,7 @@ malloc_set_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3006: \"$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
@@ -3008,16 +3022,16 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6
-echo "configure:3012: checking whether __after_morecore_hook exists" >&5
+echo "configure:3026: checking whether __after_morecore_hook exists" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3014 "configure"
+#line 3028 "configure"
 #include "confdefs.h"
 extern void (* __after_morecore_hook)();
 int main() {
 __after_morecore_hook = 0
 ; return 0; }
 EOF
-if { (eval echo configure:3021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3035: \"$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
@@ -3076,7 +3090,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:3080: checking for $ac_word" >&5
+echo "configure:3094: checking for $ac_word" >&5
 
 if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3131,7 +3145,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:3135: checking for a BSD compatible install" >&5
+echo "configure:3149: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 
   IFS="${IFS=  }"; ac_save_IFS="$IFS"; IFS=":"
@@ -3185,7 +3199,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:3189: checking for $ac_word" >&5
+echo "configure:3203: checking for $ac_word" >&5
 
 if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -3217,15 +3231,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:3221: checking for $ac_hdr" >&5
+echo "configure:3235: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3224 "configure"
+#line 3238 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3243: \"$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*
@@ -3258,15 +3272,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:3262: checking for $ac_hdr" >&5
+echo "configure:3276: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3265 "configure"
+#line 3279 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3284: \"$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*
@@ -3299,15 +3313,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:3303: checking for $ac_hdr" >&5
+echo "configure:3317: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3306 "configure"
+#line 3320 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3311: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3325: \"$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*
@@ -3337,10 +3351,10 @@ fi
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:3341: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3355: checking for sys/wait.h that is POSIX.1 compatible" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3344 "configure"
+#line 3358 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -3356,7 +3370,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:3360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -3380,10 +3394,10 @@ EOF
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3384: checking for ANSI C header files" >&5
+echo "configure:3398: checking for ANSI C header files" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3387 "configure"
+#line 3401 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3391,7 +3405,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:3395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3409: \"$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*
@@ -3408,7 +3422,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 3412 "configure"
+#line 3426 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3426,7 +3440,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 3430 "configure"
+#line 3444 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3444,7 +3458,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 3448 "configure"
+#line 3462 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3455,7 +3469,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:3473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -3481,10 +3495,10 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3485: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3499: checking whether time.h and sys/time.h may both be included" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3488 "configure"
+#line 3502 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -3493,7 +3507,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:3497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -3517,10 +3531,10 @@ EOF
 fi
 
 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:3521: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:3535: checking for sys_siglist declaration in signal.h or unistd.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3524 "configure"
+#line 3538 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3532,7 +3546,7 @@ int main() {
 char *msg = *(sys_siglist + 1);
 ; return 0; }
 EOF
-if { (eval echo configure:3536: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_decl_sys_siglist=yes
 else
@@ -3557,9 +3571,9 @@ fi
 
 
 echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6
-echo "configure:3561: checking for struct utimbuf" >&5
+echo "configure:3575: checking for struct utimbuf" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3563 "configure"
+#line 3577 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3578,7 +3592,7 @@ int main() {
 static struct utimbuf x; x.actime = x.modtime;
 ; return 0; }
 EOF
-if { (eval echo configure:3582: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3596: \"$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
@@ -3598,10 +3612,10 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3602: checking return type of signal handlers" >&5
+echo "configure:3616: checking return type of signal handlers" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3605 "configure"
+#line 3619 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3618,7 +3632,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:3622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -3640,10 +3654,10 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3644: checking for size_t" >&5
+echo "configure:3658: checking for size_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3647 "configure"
+#line 3661 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3674,10 +3688,10 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3678: checking for pid_t" >&5
+echo "configure:3692: checking for pid_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3681 "configure"
+#line 3695 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3708,10 +3722,10 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3712: checking for uid_t in sys/types.h" >&5
+echo "configure:3726: checking for uid_t in sys/types.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3715 "configure"
+#line 3729 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -3747,10 +3761,10 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:3751: checking for mode_t" >&5
+echo "configure:3765: checking for mode_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3754 "configure"
+#line 3768 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3781,10 +3795,10 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3785: checking for off_t" >&5
+echo "configure:3799: checking for off_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3788 "configure"
+#line 3802 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3815,10 +3829,10 @@ EOF
 fi
 
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3819: checking for ssize_t" >&5
+echo "configure:3833: checking for ssize_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3822 "configure"
+#line 3836 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3850,9 +3864,9 @@ fi
 
 
 echo $ac_n "checking for struct timeval""... $ac_c" 1>&6
-echo "configure:3854: checking for struct timeval" >&5
+echo "configure:3868: checking for struct timeval" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3856 "configure"
+#line 3870 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3868,7 +3882,7 @@ int main() {
 static struct timeval x; x.tv_sec = x.tv_usec;
 ; return 0; }
 EOF
-if { (eval echo configure:3872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3886: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
   HAVE_TIMEVAL=yes
@@ -3890,10 +3904,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:3894: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:3908: checking whether struct tm is in sys/time.h or time.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3897 "configure"
+#line 3911 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
@@ -3901,7 +3915,7 @@ int main() {
 struct tm *tp; tp->tm_sec;
 ; return 0; }
 EOF
-if { (eval echo configure:3905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm=time.h
 else
@@ -3925,10 +3939,10 @@ EOF
 fi
 
 echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:3929: checking for tm_zone in struct tm" >&5
+echo "configure:3943: checking for tm_zone in struct tm" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3932 "configure"
+#line 3946 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -3936,7 +3950,7 @@ int main() {
 struct tm tm; tm.tm_zone;
 ; return 0; }
 EOF
-if { (eval echo configure:3940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_zone=yes
 else
@@ -3959,10 +3973,10 @@ EOF
 
 else
   echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:3963: checking for tzname" >&5
+echo "configure:3977: checking for tzname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3966 "configure"
+#line 3980 "configure"
 #include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
@@ -3972,7 +3986,7 @@ int main() {
 atoi(*tzname);
 ; return 0; }
 EOF
-if { (eval echo configure:3976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_var_tzname=yes
 else
@@ -3998,10 +4012,10 @@ fi
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4002: checking for working const" >&5
+echo "configure:4016: checking for working const" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4005 "configure"
+#line 4019 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4050,7 +4064,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:4054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4075,7 +4089,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:4079: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:4093: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 
 cat > conftestmake <<\EOF
@@ -4100,12 +4114,12 @@ fi
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4104: checking whether byte ordering is bigendian" >&5
+echo "configure:4118: 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 4109 "configure"
+#line 4123 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4116,11 +4130,11 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4134: \"$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 4124 "configure"
+#line 4138 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4131,7 +4145,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4135: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4149: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -4148,7 +4162,7 @@ fi
 rm -f conftest*
 if test $ac_cv_c_bigendian = unknown; then
 cat > conftest.$ac_ext <<EOF
-#line 4152 "configure"
+#line 4166 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -4161,7 +4175,7 @@ main () {
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:4165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_bigendian=no
 else
@@ -4188,10 +4202,10 @@ fi
 
 
 echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4192: checking size of short" >&5
+echo "configure:4206: checking size of short" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4195 "configure"
+#line 4209 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4202,7 +4216,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -4230,10 +4244,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:4234: checking size of int" >&5
+echo "configure:4248: checking size of int" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4237 "configure"
+#line 4251 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4244,7 +4258,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -4266,10 +4280,10 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4270: checking size of long" >&5
+echo "configure:4284: checking size of long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4273 "configure"
+#line 4287 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4280,7 +4294,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -4302,10 +4316,10 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4306: checking size of long long" >&5
+echo "configure:4320: checking size of long long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4309 "configure"
+#line 4323 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4316,7 +4330,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4334: \"$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
@@ -4338,10 +4352,10 @@ EOF
 
 
 echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4342: checking size of void *" >&5
+echo "configure:4356: checking size of void *" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4345 "configure"
+#line 4359 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4352,7 +4366,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4370: \"$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
@@ -4375,7 +4389,7 @@ EOF
 
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:4379: checking for long file names" >&5
+echo "configure:4393: 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:
@@ -4421,10 +4435,10 @@ fi
 
 
 echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:4425: checking for sin" >&5
+echo "configure:4439: checking for sin" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4428 "configure"
+#line 4442 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char sin(); below.  */
@@ -4447,7 +4461,7 @@ sin();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4465: \"$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
@@ -4465,12 +4479,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:4469: checking for sin in -lm" >&5
+echo "configure:4483: 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 4474 "configure"
+#line 4488 "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
@@ -4481,7 +4495,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:4485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4499: \"$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
@@ -4525,14 +4539,14 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4529 "configure"
+#line 4543 "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:4536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4550: \"$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
@@ -4549,7 +4563,7 @@ fi
 rm -f conftest*
 
 echo "checking type of mail spool file locking" 1>&6
-echo "configure:4553: checking type of mail spool file locking" >&5
+echo "configure:4567: checking type of mail spool file locking" >&5
 test -z "$mail_locking" -a "$mail_use_flock" = "yes" && mail_locking=flock
 test -z "$mail_locking" -a "$mail_use_lockf" = "yes" && mail_locking=lockf
 if   test "$mail_locking" = "lockf"; then { test "$extra_verbose" = "yes" && cat << \EOF
@@ -4574,12 +4588,12 @@ fi
 case "$opsys" in decosf*)
   
 echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6
-echo "configure:4578: checking for cma_open in -lpthreads" >&5
+echo "configure:4592: 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 4583 "configure"
+#line 4597 "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
@@ -4590,7 +4604,7 @@ int main() {
 cma_open()
 ; return 0; }
 EOF
-if { (eval echo configure:4594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4608: \"$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
@@ -4626,7 +4640,7 @@ fi
 esac
 
 echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6
-echo "configure:4630: checking whether the -xildoff compiler flag is required" >&5
+echo "configure:4644: 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;
@@ -4637,7 +4651,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:4641: checking for \"-z ignore\" linker flag" >&5
+echo "configure:4655: 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 ;;
@@ -4647,7 +4661,7 @@ fi
 
 
 echo "checking "for specified window system"" 1>&6
-echo "configure:4651: checking "for specified window system"" >&5
+echo "configure:4665: checking "for specified window system"" >&5
 
 if test "$with_x11" != "no"; then
     test "$x_includes $x_libraries" != "NONE NONE" && \
@@ -4680,7 +4694,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:4684: checking for X" >&5
+echo "configure:4698: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -4740,12 +4754,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 4744 "configure"
+#line 4758 "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:4749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4763: \"$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*
@@ -4814,14 +4828,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 4818 "configure"
+#line 4832 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:4825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4839: \"$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.
@@ -4930,17 +4944,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:4934: checking whether -R must be followed by a space" >&5
+echo "configure:4948: 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 4937 "configure"
+#line 4951 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -4956,14 +4970,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 4960 "configure"
+#line 4974 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -4999,12 +5013,12 @@ ac_cv_lib_dnet_dnet_ntoa=no
 else
 
 echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:5003: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:5017: 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 5008 "configure"
+#line 5022 "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
@@ -5015,7 +5029,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5033: \"$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
@@ -5039,12 +5053,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:5043: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:5057: 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 5048 "configure"
+#line 5062 "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
@@ -5055,7 +5069,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5073: \"$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
@@ -5084,10 +5098,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:5088: checking for gethostbyname" >&5
+echo "configure:5102: checking for gethostbyname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5091 "configure"
+#line 5105 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -5110,7 +5124,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5128: \"$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
@@ -5131,12 +5145,12 @@ fi
     if test $ac_cv_func_gethostbyname = no; then
       
 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:5135: checking for gethostbyname in -lnsl" >&5
+echo "configure:5149: 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 5140 "configure"
+#line 5154 "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
@@ -5147,7 +5161,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:5151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5165: \"$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
@@ -5177,10 +5191,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:5181: checking for connect" >&5
+echo "configure:5195: checking for connect" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5184 "configure"
+#line 5198 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -5203,7 +5217,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -5226,12 +5240,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:5230: checking "$xe_msg_checking"" >&5
+echo "configure:5244: 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 5235 "configure"
+#line 5249 "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
@@ -5242,7 +5256,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:5246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5260: \"$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
@@ -5266,10 +5280,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:5270: checking for remove" >&5
+echo "configure:5284: checking for remove" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5273 "configure"
+#line 5287 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -5292,7 +5306,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5310: \"$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
@@ -5313,12 +5327,12 @@ fi
     if test $ac_cv_func_remove = no; then
       
 echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:5317: checking for remove in -lposix" >&5
+echo "configure:5331: 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 5322 "configure"
+#line 5336 "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
@@ -5329,7 +5343,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:5333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5347: \"$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
@@ -5353,10 +5367,10 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:5357: checking for shmat" >&5
+echo "configure:5371: checking for shmat" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5360 "configure"
+#line 5374 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -5379,7 +5393,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5397: \"$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
@@ -5400,12 +5414,12 @@ fi
     if test $ac_cv_func_shmat = no; then
       
 echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:5404: checking for shmat in -lipc" >&5
+echo "configure:5418: 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 5409 "configure"
+#line 5423 "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
@@ -5416,7 +5430,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:5420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5434: \"$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
@@ -5452,12 +5466,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:5456: checking "$xe_msg_checking"" >&5
+echo "configure:5470: 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 5461 "configure"
+#line 5475 "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
@@ -5468,7 +5482,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:5472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5486: \"$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
@@ -5637,7 +5651,7 @@ EOF
 
 
     echo "checking for X defines extracted by xmkmf" 1>&6
-echo "configure:5641: checking for X defines extracted by xmkmf" >&5
+echo "configure:5655: checking for X defines extracted by xmkmf" >&5
   rm -fr conftestdir
   if mkdir conftestdir; then
     cd conftestdir
@@ -5669,15 +5683,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:5673: checking for X11/Intrinsic.h" >&5
+echo "configure:5687: checking for X11/Intrinsic.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5676 "configure"
+#line 5690 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5695: \"$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*
@@ -5701,12 +5715,12 @@ fi
 
       
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:5705: checking for XOpenDisplay in -lX11" >&5
+echo "configure:5719: 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 5710 "configure"
+#line 5724 "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
@@ -5717,7 +5731,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5735: \"$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
@@ -5742,12 +5756,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:5746: checking "$xe_msg_checking"" >&5
+echo "configure:5760: 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 5751 "configure"
+#line 5765 "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
@@ -5758,7 +5772,7 @@ int main() {
 XGetFontProperty()
 ; return 0; }
 EOF
-if { (eval echo configure:5762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5776: \"$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
@@ -5785,12 +5799,12 @@ fi
 
     
 echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6
-echo "configure:5789: checking for XShapeSelectInput in -lXext" >&5
+echo "configure:5803: 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 5794 "configure"
+#line 5808 "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
@@ -5801,7 +5815,7 @@ int main() {
 XShapeSelectInput()
 ; return 0; }
 EOF
-if { (eval echo configure:5805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5819: \"$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
@@ -5824,12 +5838,12 @@ fi
 
     
 echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6
-echo "configure:5828: checking for XtOpenDisplay in -lXt" >&5
+echo "configure:5842: 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 5833 "configure"
+#line 5847 "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
@@ -5840,7 +5854,7 @@ int main() {
 XtOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5858: \"$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
@@ -5863,14 +5877,14 @@ fi
 
 
   echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6
-echo "configure:5867: checking the version of X11 being used" >&5
+echo "configure:5881: checking the version of X11 being used" >&5
   cat > conftest.$ac_ext <<EOF
-#line 5869 "configure"
+#line 5883 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
     int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }
 EOF
-if { (eval echo configure:5874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:5888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest foobar; x11_release=$?
 else
@@ -5895,15 +5909,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5899: checking for $ac_hdr" >&5
+echo "configure:5913: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5902 "configure"
+#line 5916 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5921: \"$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*
@@ -5934,7 +5948,7 @@ done
 
 
     echo $ac_n "checking for XFree86""... $ac_c" 1>&6
-echo "configure:5938: checking for XFree86" >&5
+echo "configure:5952: checking for XFree86" >&5
   if test -d "/usr/X386/include" -o \
           -f "/etc/XF86Config"    -o \
          -f "/etc/X11/XF86Config" -o \
@@ -5954,12 +5968,12 @@ EOF
 
     test -z "$with_xmu" && { 
 echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6
-echo "configure:5958: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
+echo "configure:5972: 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 5963 "configure"
+#line 5977 "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
@@ -5970,7 +5984,7 @@ int main() {
 XmuReadBitmapDataFromFile()
 ; return 0; }
 EOF
-if { (eval echo configure:5974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5988: \"$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
@@ -6009,19 +6023,19 @@ EOF
 
       
 echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6
-echo "configure:6013: checking for main in -lXbsd" >&5
+echo "configure:6027: 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 6018 "configure"
+#line 6032 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6039: \"$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
@@ -6058,22 +6072,22 @@ fi
 fi 
 if test "$with_msw" != "no"; then
   echo "checking for MS-Windows" 1>&6
-echo "configure:6062: checking for MS-Windows" >&5
+echo "configure:6076: checking for MS-Windows" >&5
   
 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6
-echo "configure:6065: checking for main in -lgdi32" >&5
+echo "configure:6079: 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 6070 "configure"
+#line 6084 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6091: \"$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
@@ -6139,12 +6153,12 @@ EOF
  fi
     fi
         cat > conftest.$ac_ext <<EOF
-#line 6143 "configure"
+#line 6157 "configure"
 #include "confdefs.h"
 #include <fcntl.h>
     int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }
 EOF
-if { (eval echo configure:6148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6162: \"$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
@@ -6197,7 +6211,7 @@ else
 fi
 
 if test "$with_x11" != "yes"; then
-            for feature in tooltalk cde offix wmcommand xim xmu xpm nas_sound
+            for feature in tooltalk cde offix wmcommand xim xmu nas_sound
   do
     if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then
        echo "configure: warning: --with-$feature ignored:  Not valid without X support" 1>&2
@@ -6220,7 +6234,7 @@ case "$x_libraries" in *X11R4* )
 esac
 
 echo "checking for WM_COMMAND option" 1>&6
-echo "configure:6224: checking for WM_COMMAND option" >&5;
+echo "configure:6238: checking for WM_COMMAND option" >&5;
 if test "$with_wmcommand" != "no"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_WMCOMMAND
@@ -6235,15 +6249,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:6239: checking for X11/Xauth.h" >&5
+echo "configure:6253: checking for X11/Xauth.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6242 "configure"
+#line 6256 "configure"
 #include "confdefs.h"
 #include <X11/Xauth.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6247: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6261: \"$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*
@@ -6266,12 +6280,12 @@ fi
  }
 test -z "$with_xauth" && { 
 echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6
-echo "configure:6270: checking for XauGetAuthByAddr in -lXau" >&5
+echo "configure:6284: 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 6275 "configure"
+#line 6289 "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
@@ -6282,7 +6296,7 @@ int main() {
 XauGetAuthByAddr()
 ; return 0; }
 EOF
-if { (eval echo configure:6286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6300: \"$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
@@ -6327,15 +6341,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:6331: checking for ${dir}tt_c.h" >&5
+echo "configure:6345: checking for ${dir}tt_c.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6334 "configure"
+#line 6348 "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:6339: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6353: \"$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*
@@ -6371,12 +6385,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:6375: checking "$xe_msg_checking"" >&5
+echo "configure:6389: 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 6380 "configure"
+#line 6394 "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
@@ -6387,7 +6401,7 @@ int main() {
 tt_message_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6405: \"$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
@@ -6444,15 +6458,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:6448: checking for Dt/Dt.h" >&5
+echo "configure:6462: checking for Dt/Dt.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6451 "configure"
+#line 6465 "configure"
 #include "confdefs.h"
 #include <Dt/Dt.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6456: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6470: \"$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*
@@ -6475,12 +6489,12 @@ fi
  }
 test -z "$with_cde" && { 
 echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6
-echo "configure:6479: checking for DtDndDragStart in -lDtSvc" >&5
+echo "configure:6493: 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 6484 "configure"
+#line 6498 "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
@@ -6491,7 +6505,7 @@ int main() {
 DtDndDragStart()
 ; return 0; }
 EOF
-if { (eval echo configure:6495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6509: \"$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
@@ -6560,7 +6574,7 @@ EOF
 fi
 
 echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6
-echo "configure:6564: checking if drag and drop API is needed" >&5
+echo "configure:6578: checking if drag and drop API is needed" >&5
 if test "$with_dragndrop" != "no" ; then
   if test -n "$dragndrop_proto" ; then
     with_dragndrop=yes
@@ -6581,18 +6595,18 @@ EOF
 fi
 
 echo "checking for LDAP" 1>&6
-echo "configure:6585: checking for LDAP" >&5
+echo "configure:6599: 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:6588: checking for ldap.h" >&5
+echo "configure:6602: checking for ldap.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6591 "configure"
+#line 6605 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6596: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6610: \"$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*
@@ -6615,15 +6629,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:6619: checking for lber.h" >&5
+echo "configure:6633: checking for lber.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6622 "configure"
+#line 6636 "configure"
 #include "confdefs.h"
 #include <lber.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6641: \"$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*
@@ -6647,12 +6661,12 @@ fi
 if test "$with_ldap" != "no"; then
   
 echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6
-echo "configure:6651: checking for ldap_search in -lldap" >&5
+echo "configure:6665: 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 6656 "configure"
+#line 6670 "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
@@ -6663,7 +6677,7 @@ int main() {
 ldap_search()
 ; return 0; }
 EOF
-if { (eval echo configure:6667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6681: \"$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
@@ -6688,12 +6702,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:6692: checking "$xe_msg_checking"" >&5
+echo "configure:6706: 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 6697 "configure"
+#line 6711 "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
@@ -6704,7 +6718,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6722: \"$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
@@ -6729,12 +6743,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:6733: checking "$xe_msg_checking"" >&5
+echo "configure:6747: 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 6738 "configure"
+#line 6752 "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
@@ -6745,7 +6759,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6763: \"$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
@@ -6770,12 +6784,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:6774: checking "$xe_msg_checking"" >&5
+echo "configure:6788: 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 6779 "configure"
+#line 6793 "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
@@ -6786,7 +6800,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6804: \"$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
@@ -6837,10 +6851,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:6841: checking for $ac_func" >&5
+echo "configure:6855: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6844 "configure"
+#line 6858 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6863,7 +6877,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6881: \"$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
@@ -6895,15 +6909,15 @@ fi
 
 if test "$window_system" != "none"; then
   echo "checking for graphics libraries" 1>&6
-echo "configure:6899: checking for graphics libraries" >&5
+echo "configure:6913: 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:6904: checking for Xpm - no older than 3.4f" >&5
+echo "configure:6918: checking for Xpm - no older than 3.4f" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6907 "configure"
+#line 6921 "configure"
 #include "confdefs.h"
 #include <X11/xpm.h>
     int main(int c, char **v) {
@@ -6911,7 +6925,7 @@ echo "configure:6904: checking for Xpm - no older than 3.4f" >&5
       XpmIncludeVersion != XpmLibraryVersion() ? 1 :
       XpmIncludeVersion < 30406 ? 2 : 0 ;}
 EOF
-if { (eval echo configure:6915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6929: \"$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
@@ -6953,17 +6967,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:6957: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:6971: checking for \"FOR_MSW\" xpm" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 6960 "configure"
+#line 6974 "configure"
 #include "confdefs.h"
 
 int main() {
 XpmCreatePixmapFromData()
 ; return 0; }
 EOF
-if { (eval echo configure:6967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   xpm_for_msw=no
 else
@@ -6989,15 +7003,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:6993: checking for compface.h" >&5
+echo "configure:7007: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6996 "configure"
+#line 7010 "configure"
 #include "confdefs.h"
 #include <compface.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7001: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7015: \"$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*
@@ -7020,12 +7034,12 @@ fi
  }
   test -z "$with_xface" && { 
 echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:7024: checking for UnGenFace in -lcompface" >&5
+echo "configure:7038: 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 7029 "configure"
+#line 7043 "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
@@ -7036,7 +7050,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:7040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7054: \"$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
@@ -7088,12 +7102,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:7092: checking for inflate in -lc" >&5
+echo "configure:7106: 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 7097 "configure"
+#line 7111 "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
@@ -7104,7 +7118,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7122: \"$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
@@ -7123,12 +7137,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6
-echo "configure:7127: checking for inflate in -lz" >&5
+echo "configure:7141: 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 7132 "configure"
+#line 7146 "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
@@ -7139,7 +7153,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7157: \"$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
@@ -7158,12 +7172,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6
-echo "configure:7162: checking for inflate in -lgz" >&5
+echo "configure:7176: 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 7167 "configure"
+#line 7181 "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
@@ -7174,7 +7188,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7192: \"$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
@@ -7204,15 +7218,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:7208: checking for jpeglib.h" >&5
+echo "configure:7222: checking for jpeglib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7211 "configure"
+#line 7225 "configure"
 #include "confdefs.h"
 #include <jpeglib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7230: \"$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*
@@ -7235,12 +7249,12 @@ fi
  }
   test -z "$with_jpeg" && { 
 echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6
-echo "configure:7239: checking for jpeg_destroy_decompress in -ljpeg" >&5
+echo "configure:7253: 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 7244 "configure"
+#line 7258 "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
@@ -7251,7 +7265,7 @@ int main() {
 jpeg_destroy_decompress()
 ; return 0; }
 EOF
-if { (eval echo configure:7255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7269: \"$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
@@ -7287,10 +7301,10 @@ EOF
 
     png_problem=""
   test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:7291: checking for pow" >&5
+echo "configure:7305: checking for pow" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7294 "configure"
+#line 7308 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pow(); below.  */
@@ -7313,7 +7327,7 @@ pow();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7331: \"$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
@@ -7334,15 +7348,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:7338: checking for png.h" >&5
+echo "configure:7352: checking for png.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7341 "configure"
+#line 7355 "configure"
 #include "confdefs.h"
 #include <png.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7360: \"$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*
@@ -7365,12 +7379,12 @@ fi
  }
   test -z "$with_png" && { 
 echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:7369: checking for png_read_image in -lpng" >&5
+echo "configure:7383: 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 7374 "configure"
+#line 7388 "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
@@ -7381,7 +7395,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:7385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7399: \"$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
@@ -7404,10 +7418,10 @@ fi
  }
   if test -z "$with_png"; then
     echo $ac_n "checking for workable png version information""... $ac_c" 1>&6
-echo "configure:7408: checking for workable png version information" >&5
+echo "configure:7422: checking for workable png version information" >&5
     xe_check_libs="-lpng -lz"
     cat > conftest.$ac_ext <<EOF
-#line 7411 "configure"
+#line 7425 "configure"
 #include "confdefs.h"
 #include <png.h>
     int main(int c, char **v) {
@@ -7415,7 +7429,7 @@ echo "configure:7408: 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:7419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7433: \"$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
@@ -7458,15 +7472,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:7462: checking for tiffio.h" >&5
+echo "configure:7476: checking for tiffio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7465 "configure"
+#line 7479 "configure"
 #include "confdefs.h"
 #include <tiffio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7470: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7484: \"$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*
@@ -7489,12 +7503,12 @@ fi
  }
   test -z "$with_tiff" && { 
 echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:7493: checking for TIFFClientOpen in -ltiff" >&5
+echo "configure:7507: 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 7498 "configure"
+#line 7512 "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
@@ -7505,7 +7519,7 @@ int main() {
 TIFFClientOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:7509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7523: \"$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
@@ -7544,16 +7558,29 @@ fi
 if test "$with_x11" = "yes"; then
 
   echo "checking for X11 graphics libraries" 1>&6
-echo "configure:7548: checking for X11 graphics libraries" >&5
+echo "configure:7562: checking for X11 graphics libraries" >&5
+
+  echo "checking for the Athena widgets" 1>&6
+echo "configure:7565: checking for the Athena widgets" >&5
+
+    case "$with_athena" in
+        "xaw" | "")    athena_variant=Xaw      athena_3d=no  ;;
+    "3d")      athena_variant=Xaw3d    athena_3d=yes ;;
+    "next")    athena_variant=neXtaw   athena_3d=yes ;;
+    "95")      athena_variant=Xaw95    athena_3d=yes ;;
+    "xpm")     athena_variant=XawXpm   athena_3d=yes ;;
+    *)         { echo "Error:" "Unknown Athena widget set \`$with_athena'. This should not happen." >&2; exit 1; } ;;
+  esac
 
+    if test "$athena_3d" = "no"; then
     
-echo $ac_n "checking for XawScrollbarSetThumb in -lXaw""... $ac_c" 1>&6
-echo "configure:7552: checking for XawScrollbarSetThumb in -lXaw" >&5
-ac_lib_var=`echo Xaw'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
+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
+ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
 
-xe_check_libs=" -lXaw "
+xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 7557 "configure"
+#line 7584 "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
@@ -7564,7 +7591,39 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:7568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7595: \"$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
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+xe_check_libs=""
+
+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
+ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'`
+
+xe_check_libs=" -l$athena_variant "
+cat > conftest.$ac_ext <<EOF
+#line 7616 "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
+    builtin and then its argument prototype would still apply.  */
+char threeDClassRec();
+
+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
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7578,33 +7637,74 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  have_xaw=yes
+  echo "configure: warning: "Could not find a non-3d Athena widget library."" 1>&2
 else
   echo "$ac_t""no" 1>&6
-have_xaw=no
+athena_lib=$athena_variant
 fi
 
 
-                    
-    
-echo $ac_n "checking for XawScrollbarSetThumb in -lXaw3d""... $ac_c" 1>&6
-echo "configure:7592: checking for XawScrollbarSetThumb in -lXaw3d" >&5
-ac_lib_var=`echo Xaw3d'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
+      
+else
+  echo "$ac_t""no" 1>&6
+echo "configure: warning: "Could not find an Athena widget library."" 1>&2
+fi
+
 
-xe_check_libs=" -lXaw3d "
+  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
+ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'`
+
+xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 7597 "configure"
+#line 7663 "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
     builtin and then its argument prototype would still apply.  */
-char XawScrollbarSetThumb();
+char threeDClassRec();
 
 int main() {
-XawScrollbarSetThumb()
+threeDClassRec()
+; return 0; }
+EOF
+if { (eval echo configure:7674: \"$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
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+xe_check_libs=""
+
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
+  echo "$ac_t""yes" 1>&6
+  athena_lib=$athena_variant
+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
+ac_lib_var=`echo Xaw'_'threeDClassRec | sed 'y%./+-%__p_%'`
+
+xe_check_libs=" -lXaw "
+cat > conftest.$ac_ext <<EOF
+#line 7697 "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
+    builtin and then its argument prototype would still apply.  */
+char threeDClassRec();
+
+int main() {
+threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7708: \"$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
@@ -7618,25 +7718,263 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  have_xaw3d=yes
+  athena_lib=Xaw; 
+          echo "configure: warning: "Assuming that libXaw is actually $athena_variant."" 1>&2;
+        
+else
+  echo "$ac_t""no" 1>&6
+echo "configure: warning: "Could not find a 3d Athena widget library that looked like $athena_variant."" 1>&2
+fi
+
+
+fi
+
+
+  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
+
+cat > conftest.$ac_ext <<EOF
+#line 7742 "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; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo "configure: warning: "Could not find a non-3d Athena header set."" 1>&2
+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
+
+cat > conftest.$ac_ext <<EOF
+#line 7770 "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; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  athena_h_path=X11/Xaw
+else
+  echo "$ac_t""no" 1>&6
+echo "configure: warning: "Could not find a non-3d Athena header set."" 1>&2
+fi
+
+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
+
+cat > conftest.$ac_ext <<EOF
+#line 7804 "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; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+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
+
+cat > conftest.$ac_ext <<EOF
+#line 7829 "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; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  athena_h_path=X11/$athena_variant
+else
+  echo "$ac_t""no" 1>&6
+fi
+
 else
   echo "$ac_t""no" 1>&6
-have_xaw3d=no
 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
+
+cat > conftest.$ac_ext <<EOF
+#line 7865 "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; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+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
+
+cat > conftest.$ac_ext <<EOF
+#line 7890 "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; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+            echo "configure: warning: "Assuming that X11/Xaw3d headers are suitable for $athena_variant."" 1>&2
+            athena_h_path=X11/Xaw3d
+          
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    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
+
+cat > conftest.$ac_ext <<EOF
+#line 7930 "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; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  
+          echo "configure: warning: "Assuming that X11/Xaw headers are suitable for $athena_variant."" 1>&2
+          athena_h_path=X11/Xaw
+        
+else
+  echo "$ac_t""no" 1>&6
+echo "configure: warning: "Could not find a suitable 3d Athena header set."" 1>&2
+fi
+
+    fi
+  fi
+
+    if test -n "$athena_lib" -a -n "$athena_h_path"; then
+    have_xaw=yes
+  else
+    have_xaw=no
+  fi
 
     ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:7632: checking for Xm/Xm.h" >&5
+echo "configure:7970: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7635 "configure"
+#line 7973 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7640: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7978: \"$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*
@@ -7653,12 +7991,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:7657: checking for XmStringFree in -lXm" >&5
+echo "configure:7995: 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 7662 "configure"
+#line 8000 "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
@@ -7669,7 +8007,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:7673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8011: \"$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
@@ -7698,9 +8036,9 @@ fi
 
   if test "$have_motif" = "yes"; then
         echo $ac_n "checking for Lesstif""... $ac_c" 1>&6
-echo "configure:7702: checking for Lesstif" >&5
+echo "configure:8040: checking for Lesstif" >&5
     cat > conftest.$ac_ext <<EOF
-#line 7704 "configure"
+#line 8042 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 #ifdef LESSTIF_VERSION
@@ -7723,13 +8061,12 @@ rm -f conftest*
 
 fi 
 
-case "$with_menubars" in "" | "yes" | "athena" | "athena3d" )
+case "$with_menubars" in "" | "yes" | "athena" )
   with_menubars="lucid" ;;
 esac
 case "$with_dialogs" in "" | "yes" | "lucid" )
-  if   test "$have_motif" = "yes"; then with_dialogs="motif"
-  elif test "$have_xaw3d" = "yes"; then with_dialogs="athena3d"
-  elif test "$have_xaw"   = "yes"; then with_dialogs="athena"
+  if   test "$have_motif"     = "yes"; then with_dialogs="motif"
+  elif test "$have_xaw"       = "yes"; then with_dialogs="athena"
   else with_dialogs=no
   fi ;;
 esac
@@ -7738,7 +8075,6 @@ case "$with_scrollbars" in "" | "yes" )
 esac
 case "$with_widgets" in "" | "yes" | "lucid")
   if   test "$have_motif" = "yes"; then with_widgets="motif"
-  elif test "$have_xaw3d" = "yes"; then with_widgets="athena3d"
   elif test "$have_xaw"   = "yes"; then with_widgets="athena"
   else with_widgets=no
   fi ;;
@@ -7747,8 +8083,25 @@ esac
 all_widgets="$with_menubars $with_scrollbars $with_dialogs $with_toolbars $with_widgets"
 
 case "$all_widgets" in
- *athena*3d )
-  { test "$extra_verbose" = "yes" && cat << \EOF
+  *athena* )
+    if test "$have_xaw" != "yes"; then
+      { echo "Error:" "Could not find a suitable Athena library to build with." >&2; exit 1; }
+    fi
+
+        lwlib_objs="$lwlib_objs lwlib-Xaw.o" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"lwlib-Xaw.o\" to \$lwlib_objs"; fi
+
+        libs_x="-l$athena_lib $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-l$athena_lib\" to \$libs_x"; fi
+
+            { test "$extra_verbose" = "yes" && cat << EOF
+    Defining ATHENA_H_PATH = $athena_h_path
+EOF
+cat >> confdefs.h <<EOF
+#define ATHENA_H_PATH $athena_h_path
+EOF
+}
+
+
+    { test "$extra_verbose" = "yes" && cat << \EOF
     Defining LWLIB_USES_ATHENA
 EOF
 cat >> confdefs.h <<\EOF
@@ -7756,7 +8109,7 @@ cat >> confdefs.h <<\EOF
 EOF
 }
 
-  { test "$extra_verbose" = "yes" && cat << \EOF
+    { test "$extra_verbose" = "yes" && cat << \EOF
     Defining NEED_ATHENA
 EOF
 cat >> confdefs.h <<\EOF
@@ -7764,31 +8117,18 @@ cat >> confdefs.h <<\EOF
 EOF
 }
 
-  lwlib_objs="$lwlib_objs lwlib-Xaw.o" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"lwlib-Xaw.o\" to \$lwlib_objs"; fi
-  if test "$have_xaw3d"; then
-    libs_x="-lXaw3d $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXaw3d\" to \$libs_x"; fi
-  else
-    libs_x="-lXaw $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXaw\" to \$libs_x"; fi
-  fi ;;
- *athena* )
-  { test "$extra_verbose" = "yes" && cat << \EOF
-    Defining LWLIB_USES_ATHENA
-EOF
-cat >> confdefs.h <<\EOF
-#define LWLIB_USES_ATHENA 1
-EOF
-}
 
-  { test "$extra_verbose" = "yes" && cat << \EOF
-    Defining NEED_ATHENA
+    if test "$athena_3d" = "yes"; then
+      { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining HAVE_ATHENA_3D
 EOF
 cat >> confdefs.h <<\EOF
-#define NEED_ATHENA 1
+#define HAVE_ATHENA_3D 1
 EOF
 }
 
-  lwlib_objs="$lwlib_objs lwlib-Xaw.o" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"lwlib-Xaw.o\" to \$lwlib_objs"; fi
-  libs_x="-lXaw $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXaw\" to \$libs_x"; fi ;;
+    fi
+  ;;
 esac
 
 case "$all_widgets" in *motif* )
@@ -7834,23 +8174,25 @@ esac
 
 
 
-case "$with_scrollbars" in athena* ) { test "$extra_verbose" = "yes" && cat << \EOF
+test "$with_scrollbars" = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF
     Defining LWLIB_SCROLLBARS_ATHENA
 EOF
 cat >> confdefs.h <<\EOF
 #define LWLIB_SCROLLBARS_ATHENA 1
 EOF
 }
-;; esac
-case "$with_dialogs"    in athena* ) { test "$extra_verbose" = "yes" && cat << \EOF
+
+test "$with_dialogs"    = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF
     Defining LWLIB_DIALOGS_ATHENA
 EOF
 cat >> confdefs.h <<\EOF
 #define LWLIB_DIALOGS_ATHENA 1
 EOF
 }
-   ;; esac
-test "$with_scrollbars" = "athena3d" && { test "$extra_verbose" = "yes" && cat << \EOF
+
+
+if test "$athena_3d" = "yes"; then
+  test "$with_scrollbars" = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF
     Defining LWLIB_SCROLLBARS_ATHENA3D
 EOF
 cat >> confdefs.h <<\EOF
@@ -7858,7 +8200,7 @@ cat >> confdefs.h <<\EOF
 EOF
 }
 
-test "$with_dialogs"    = "athena3d" && { test "$extra_verbose" = "yes" && cat << \EOF
+  test "$with_dialogs"    = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF
     Defining LWLIB_DIALOGS_ATHENA3D
 EOF
 cat >> confdefs.h <<\EOF
@@ -7866,6 +8208,8 @@ cat >> confdefs.h <<\EOF
 EOF
 }
 
+fi
+
 case "$with_widgets" in athena* ) { test "$extra_verbose" = "yes" && cat << \EOF
     Defining LWLIB_WIDGETS_ATHENA
 EOF
@@ -8027,7 +8371,7 @@ fi
 
 if test "$with_mule" = "yes" ; then
   echo "checking for Mule-related features" 1>&6
-echo "configure:8031: checking for Mule-related features" >&5
+echo "configure:8375: checking for Mule-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining MULE
 EOF
@@ -8052,15 +8396,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8056: checking for $ac_hdr" >&5
+echo "configure:8400: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8059 "configure"
+#line 8403 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8064: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8408: \"$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*
@@ -8091,12 +8435,12 @@ done
 
   
 echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6
-echo "configure:8095: checking for strerror in -lintl" >&5
+echo "configure:8439: 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 8100 "configure"
+#line 8444 "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
@@ -8107,7 +8451,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:8111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8455: \"$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
@@ -8140,18 +8484,18 @@ fi
 
 
   echo "checking for Mule input methods" 1>&6
-echo "configure:8144: checking for Mule input methods" >&5
+echo "configure:8488: checking for Mule input methods" >&5
         case "$with_xim" in "" | "yes" )
     echo "checking for XIM" 1>&6
-echo "configure:8147: checking for XIM" >&5
+echo "configure:8491: checking for XIM" >&5
     
 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6
-echo "configure:8150: checking for XOpenIM in -lX11" >&5
+echo "configure:8494: 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 8155 "configure"
+#line 8499 "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
@@ -8162,7 +8506,7 @@ int main() {
 XOpenIM()
 ; return 0; }
 EOF
-if { (eval echo configure:8166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8510: \"$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
@@ -8186,12 +8530,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:8190: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:8534: 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 8195 "configure"
+#line 8539 "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
@@ -8202,7 +8546,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:8206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8550: \"$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
@@ -8267,15 +8611,15 @@ EOF
 
     if test "$with_xfs" = "yes" ; then
     echo "checking for XFontSet" 1>&6
-echo "configure:8271: checking for XFontSet" >&5
+echo "configure:8615: checking for XFontSet" >&5
     
 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6
-echo "configure:8274: checking for XmbDrawString in -lX11" >&5
+echo "configure:8618: 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 8279 "configure"
+#line 8623 "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
@@ -8286,7 +8630,7 @@ int main() {
 XmbDrawString()
 ; return 0; }
 EOF
-if { (eval echo configure:8290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8634: \"$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
@@ -8326,15 +8670,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:8330: checking for wnn/jllib.h" >&5
+echo "configure:8674: checking for wnn/jllib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8333 "configure"
+#line 8677 "configure"
 #include "confdefs.h"
 #include <wnn/jllib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8338: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8682: \"$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*
@@ -8359,10 +8703,10 @@ fi
     for ac_func in crypt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8363: checking for $ac_func" >&5
+echo "configure:8707: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8366 "configure"
+#line 8710 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8385,7 +8729,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8733: \"$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
@@ -8414,12 +8758,12 @@ done
 
     test "$ac_cv_func_crypt" != "yes" && { 
 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:8418: checking for crypt in -lcrypt" >&5
+echo "configure:8762: 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 8423 "configure"
+#line 8767 "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
@@ -8430,7 +8774,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:8434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8778: \"$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
@@ -8465,12 +8809,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:8469: checking for jl_dic_list_e in -lwnn" >&5
+echo "configure:8813: 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 8474 "configure"
+#line 8818 "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
@@ -8481,7 +8825,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8829: \"$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
@@ -8499,12 +8843,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:8503: checking for jl_dic_list_e in -lwnn4" >&5
+echo "configure:8847: 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 8508 "configure"
+#line 8852 "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
@@ -8515,7 +8859,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8863: \"$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
@@ -8533,12 +8877,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:8537: checking for jl_dic_list_e in -lwnn6" >&5
+echo "configure:8881: 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 8542 "configure"
+#line 8886 "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
@@ -8549,7 +8893,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8567,12 +8911,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:8571: checking for dic_list_e in -lwnn6_fromsrc" >&5
+echo "configure:8915: 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 8576 "configure"
+#line 8920 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8583,7 +8927,7 @@ int main() {
 dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:8587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8931: \"$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
@@ -8631,12 +8975,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:8635: checking for jl_fi_dic_list in -l$libwnn" >&5
+echo "configure:8979: 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 8640 "configure"
+#line 8984 "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
@@ -8647,7 +8991,7 @@ int main() {
 jl_fi_dic_list()
 ; return 0; }
 EOF
-if { (eval echo configure:8651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8995: \"$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
@@ -8682,15 +9026,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:8686: checking for canna/jrkanji.h" >&5
+echo "configure:9030: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8689 "configure"
+#line 9033 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8694: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9038: \"$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*
@@ -8717,15 +9061,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:8721: checking for canna/jrkanji.h" >&5
+echo "configure:9065: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8724 "configure"
+#line 9068 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8729: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9073: \"$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*
@@ -8753,15 +9097,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:8757: checking for canna/RK.h" >&5
+echo "configure:9101: checking for canna/RK.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8760 "configure"
+#line 9104 "configure"
 #include "confdefs.h"
 #include <canna/RK.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8765: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9109: \"$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*
@@ -8784,12 +9128,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6
-echo "configure:8788: checking for RkBgnBun in -lRKC" >&5
+echo "configure:9132: 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 8793 "configure"
+#line 9137 "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
@@ -8800,7 +9144,7 @@ int main() {
 RkBgnBun()
 ; return 0; }
 EOF
-if { (eval echo configure:8804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9148: \"$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
@@ -8823,12 +9167,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6
-echo "configure:8827: checking for jrKanjiControl in -lcanna" >&5
+echo "configure:9171: 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 8832 "configure"
+#line 9176 "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
@@ -8839,7 +9183,7 @@ int main() {
 jrKanjiControl()
 ; return 0; }
 EOF
-if { (eval echo configure:8843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9187: \"$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
@@ -8888,12 +9232,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:8892: checking for layout_object_getvalue in -li18n" >&5
+echo "configure:9236: 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 8897 "configure"
+#line 9241 "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
@@ -8904,7 +9248,7 @@ int main() {
 layout_object_getvalue()
 ; return 0; }
 EOF
-if { (eval echo configure:8908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9252: \"$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
@@ -8990,10 +9334,10 @@ fi
 for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime gethostname getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8994: checking for $ac_func" >&5
+echo "configure:9338: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8997 "configure"
+#line 9341 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9016,7 +9360,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9364: \"$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
@@ -9057,10 +9401,10 @@ case "$opsys" in
       * ) for ac_func in realpath
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9061: checking for $ac_func" >&5
+echo "configure:9405: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9064 "configure"
+#line 9408 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9083,7 +9427,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9431: \"$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
@@ -9119,10 +9463,10 @@ esac
 for ac_func in getloadavg
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9123: checking for $ac_func" >&5
+echo "configure:9467: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9126 "configure"
+#line 9470 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9145,7 +9489,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9493: \"$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
@@ -9181,12 +9525,12 @@ then
 
     
 echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6
-echo "configure:9185: checking for kstat_open in -lkstat" >&5
+echo "configure:9529: 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 9190 "configure"
+#line 9534 "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
@@ -9197,7 +9541,7 @@ int main() {
 kstat_open()
 ; return 0; }
 EOF
-if { (eval echo configure:9201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9545: \"$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
@@ -9231,12 +9575,12 @@ fi
 
     
 echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6
-echo "configure:9235: checking for kvm_read in -lkvm" >&5
+echo "configure:9579: 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 9240 "configure"
+#line 9584 "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
@@ -9247,7 +9591,7 @@ int main() {
 kvm_read()
 ; return 0; }
 EOF
-if { (eval echo configure:9251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9595: \"$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
@@ -9281,16 +9625,16 @@ fi
 fi
 
 echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:9285: checking whether netdb declares h_errno" >&5
+echo "configure:9629: checking whether netdb declares h_errno" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9287 "configure"
+#line 9631 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 int main() {
 return h_errno;
 ; return 0; }
 EOF
-if { (eval echo configure:9294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9638: \"$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
@@ -9310,16 +9654,16 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:9314: checking for sigsetjmp" >&5
+echo "configure:9658: checking for sigsetjmp" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9316 "configure"
+#line 9660 "configure"
 #include "confdefs.h"
 #include <setjmp.h>
 int main() {
 sigjmp_buf bar; sigsetjmp (bar, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:9323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9667: \"$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
@@ -9339,11 +9683,11 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6
-echo "configure:9343: checking whether localtime caches TZ" >&5
+echo "configure:9687: checking whether localtime caches TZ" >&5
 
 if test "$ac_cv_func_tzset" = "yes"; then
 cat > conftest.$ac_ext <<EOF
-#line 9347 "configure"
+#line 9691 "configure"
 #include "confdefs.h"
 #include <time.h>
 #if STDC_HEADERS
@@ -9378,7 +9722,7 @@ main()
   exit (0);
 }
 EOF
-if { (eval echo configure:9382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   emacs_cv_localtime_cache=no
 else
@@ -9408,9 +9752,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:9412: checking whether gettimeofday accepts one or two arguments" >&5
+echo "configure:9756: checking whether gettimeofday accepts one or two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9414 "configure"
+#line 9758 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -9432,7 +9776,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:9436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9780: \"$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
@@ -9454,19 +9798,19 @@ fi
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:9458: checking for inline" >&5
+echo "configure:9802: checking for inline" >&5
 
 ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 9463 "configure"
+#line 9807 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:9470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -9516,17 +9860,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:9520: checking for working alloca.h" >&5
+echo "configure:9864: checking for working alloca.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9523 "configure"
+#line 9867 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:9530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9874: \"$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
@@ -9550,10 +9894,10 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:9554: checking for alloca" >&5
+echo "configure:9898: checking for alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9557 "configure"
+#line 9901 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -9581,7 +9925,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:9585: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9929: \"$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
@@ -9620,10 +9964,10 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:9624: checking whether alloca needs Cray hooks" >&5
+echo "configure:9968: checking whether alloca needs Cray hooks" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9627 "configure"
+#line 9971 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -9647,10 +9991,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:9651: checking for $ac_func" >&5
+echo "configure:9995: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9654 "configure"
+#line 9998 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9673,7 +10017,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10021: \"$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
@@ -9703,10 +10047,10 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:9707: checking stack direction for C alloca" >&5
+echo "configure:10051: checking stack direction for C alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9710 "configure"
+#line 10054 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -9725,7 +10069,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:9729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_stack_direction=1
 else
@@ -9754,15 +10098,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:9758: checking for vfork.h" >&5
+echo "configure:10102: checking for vfork.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9761 "configure"
+#line 10105 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9766: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10110: \"$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*
@@ -9790,10 +10134,10 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:9794: checking for working vfork" >&5
+echo "configure:10138: checking for working vfork" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9797 "configure"
+#line 10141 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -9888,7 +10232,7 @@ main() {
   }
 }
 EOF
-if { (eval echo configure:9892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10236: \"$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:9918: checking for working strcoll" >&5
+echo "configure:10262: checking for working strcoll" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9921 "configure"
+#line 10265 "configure"
 #include "confdefs.h"
 #include <string.h>
 main ()
@@ -9927,7 +10271,7 @@ main ()
        strcoll ("123", "456") >= 0);
 }
 EOF
-if { (eval echo configure:9931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10275: \"$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:9959: checking for $ac_func" >&5
+echo "configure:10303: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9962 "configure"
+#line 10306 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9981,7 +10325,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10329: \"$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:10013: checking whether getpgrp takes no argument" >&5
+echo "configure:10357: checking whether getpgrp takes no argument" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10016 "configure"
+#line 10360 "configure"
 #include "confdefs.h"
 
 /*
@@ -10067,7 +10411,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:10071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10415: \"$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:10098: checking for working mmap" >&5
+echo "configure:10442: checking for working mmap" >&5
 case "$opsys" in ultrix* ) have_mmap=no ;; *)
 cat > conftest.$ac_ext <<EOF
-#line 10101 "configure"
+#line 10445 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <unistd.h>
@@ -10130,7 +10474,7 @@ int main (int argc, char *argv[])
   return 1;
 }
 EOF
-if { (eval echo configure:10134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   have_mmap=yes
 else
@@ -10165,15 +10509,15 @@ EOF
 
 ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termios.h""... $ac_c" 1>&6
-echo "configure:10169: checking for termios.h" >&5
+echo "configure:10513: checking for termios.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10172 "configure"
+#line 10516 "configure"
 #include "confdefs.h"
 #include <termios.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10177: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10521: \"$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*
@@ -10216,15 +10560,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:10220: checking for termio.h" >&5
+echo "configure:10564: checking for termio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10223 "configure"
+#line 10567 "configure"
 #include "confdefs.h"
 #include <termio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10228: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10572: \"$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:10260: checking for socket" >&5
+echo "configure:10604: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10263 "configure"
+#line 10607 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -10282,7 +10626,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10630: \"$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
@@ -10297,15 +10641,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:10301: checking for netinet/in.h" >&5
+echo "configure:10645: checking for netinet/in.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10304 "configure"
+#line 10648 "configure"
 #include "confdefs.h"
 #include <netinet/in.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10309: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10653: \"$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*
@@ -10322,15 +10666,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:10326: checking for arpa/inet.h" >&5
+echo "configure:10670: checking for arpa/inet.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10329 "configure"
+#line 10673 "configure"
 #include "confdefs.h"
 #include <arpa/inet.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10678: \"$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*
@@ -10355,9 +10699,9 @@ EOF
 }
 
       echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:10359: checking "for sun_len member in struct sockaddr_un"" >&5
+echo "configure:10703: checking "for sun_len member in struct sockaddr_un"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10361 "configure"
+#line 10705 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10368,7 +10712,7 @@ int main() {
 static struct sockaddr_un x; x.sun_len = 1;
 ; return 0; }
 EOF
-if { (eval echo configure:10372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10716: \"$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
@@ -10386,9 +10730,9 @@ else
 fi
 rm -f conftest*
       echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6
-echo "configure:10390: checking "for ip_mreq struct in netinet/in.h"" >&5
+echo "configure:10734: checking "for ip_mreq struct in netinet/in.h"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10392 "configure"
+#line 10736 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10398,7 +10742,7 @@ int main() {
 static struct ip_mreq x;
 ; return 0; }
 EOF
-if { (eval echo configure:10402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10746: \"$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:10433: checking for msgget" >&5
+echo "configure:10777: checking for msgget" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10436 "configure"
+#line 10780 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char msgget(); below.  */
@@ -10455,7 +10799,7 @@ msgget();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10803: \"$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
@@ -10470,15 +10814,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:10474: checking for sys/ipc.h" >&5
+echo "configure:10818: checking for sys/ipc.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10477 "configure"
+#line 10821 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10482: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10826: \"$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*
@@ -10495,15 +10839,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:10499: checking for sys/msg.h" >&5
+echo "configure:10843: checking for sys/msg.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10502 "configure"
+#line 10846 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10507: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10851: \"$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:10545: checking for dirent.h" >&5
+echo "configure:10889: checking for dirent.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10548 "configure"
+#line 10892 "configure"
 #include "confdefs.h"
 #include <dirent.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10553: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10897: \"$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*
@@ -10576,15 +10920,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:10580: checking for sys/dir.h" >&5
+echo "configure:10924: checking for sys/dir.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10583 "configure"
+#line 10927 "configure"
 #include "confdefs.h"
 #include <sys/dir.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10932: \"$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:10621: checking for nlist.h" >&5
+echo "configure:10965: checking for nlist.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10624 "configure"
+#line 10968 "configure"
 #include "confdefs.h"
 #include <nlist.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10973: \"$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:10659: checking "for sound support"" >&5
+echo "configure:11003: 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:10666: checking for multimedia/audio_device.h" >&5
+echo "configure:11010: checking for multimedia/audio_device.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10669 "configure"
+#line 11013 "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:10674: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11018: \"$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:10722: checking for ALopenport in -laudio" >&5
+echo "configure:11066: 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 10727 "configure"
+#line 11071 "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
@@ -10734,7 +11078,7 @@ int main() {
 ALopenport()
 ; return 0; }
 EOF
-if { (eval echo configure:10738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11082: \"$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:10769: checking for AOpenAudio in -lAlib" >&5
+echo "configure:11113: 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 10774 "configure"
+#line 11118 "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
@@ -10781,7 +11125,7 @@ int main() {
 AOpenAudio()
 ; return 0; }
 EOF
-if { (eval echo configure:10785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11129: \"$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:10823: checking for ${dir}/soundcard.h" >&5
+echo "configure:11167: checking for ${dir}/soundcard.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10826 "configure"
+#line 11170 "configure"
 #include "confdefs.h"
 #include <${dir}/soundcard.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11175: \"$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:10885: checking for audio/audiolib.h" >&5
+echo "configure:11229: checking for audio/audiolib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10888 "configure"
+#line 11232 "configure"
 #include "confdefs.h"
 #include <audio/audiolib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11237: \"$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*
@@ -10907,12 +11251,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:10911: checking for AuOpenServer in -laudio" >&5
+echo "configure:11255: 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 10916 "configure"
+#line 11260 "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
@@ -10923,7 +11267,7 @@ int main() {
 AuOpenServer()
 ; return 0; }
 EOF
-if { (eval echo configure:10927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11271: \"$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
@@ -10962,7 +11306,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 10966 "configure"
+#line 11310 "configure"
 #include "confdefs.h"
 #include <audio/Xtutil.h>
 EOF
@@ -10993,7 +11337,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:10997: checking for $ac_word" >&5
+echo "configure:11341: 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:11026: checking for esd_play_stream" >&5
+echo "configure:11370: checking for esd_play_stream" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11029 "configure"
+#line 11373 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char esd_play_stream(); below.  */
@@ -11048,7 +11392,7 @@ esd_play_stream();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11396: \"$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
@@ -11099,7 +11443,7 @@ test -z "$with_tty" && with_tty=yes
 
 if test "$with_tty" = "yes"  ; then
   echo "checking for TTY-related features" 1>&6
-echo "configure:11103: checking for TTY-related features" >&5
+echo "configure:11447: checking for TTY-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_TTY
 EOF
@@ -11115,12 +11459,12 @@ EOF
     if test -z "$with_ncurses"; then
     
 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:11119: checking for tgetent in -lncurses" >&5
+echo "configure:11463: 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 11124 "configure"
+#line 11468 "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
@@ -11131,7 +11475,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11479: \"$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
@@ -11164,15 +11508,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:11168: checking for ncurses/curses.h" >&5
+echo "configure:11512: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11171 "configure"
+#line 11515 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11176: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11520: \"$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:11198: checking for ncurses/term.h" >&5
+echo "configure:11542: checking for ncurses/term.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11201 "configure"
+#line 11545 "configure"
 #include "confdefs.h"
 #include <ncurses/term.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11550: \"$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:11236: checking for ncurses/curses.h" >&5
+echo "configure:11580: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11239 "configure"
+#line 11583 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11244: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11588: \"$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:11279: checking for tgetent in -l$lib" >&5
+echo "configure:11623: 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 11284 "configure"
+#line 11628 "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
@@ -11291,7 +11635,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11639: \"$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:11326: checking for tgetent in -lcurses" >&5
+echo "configure:11670: 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 11331 "configure"
+#line 11675 "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
@@ -11338,7 +11682,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11686: \"$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
@@ -11356,12 +11700,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:11360: checking for tgetent in -ltermcap" >&5
+echo "configure:11704: 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 11365 "configure"
+#line 11709 "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
@@ -11372,7 +11716,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11720: \"$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
@@ -11420,15 +11764,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:11424: checking for gpm.h" >&5
+echo "configure:11768: checking for gpm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11427 "configure"
+#line 11771 "configure"
 #include "confdefs.h"
 #include <gpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11776: \"$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:11455: checking for Gpm_Open in -lgpm" >&5
+echo "configure:11799: 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 11460 "configure"
+#line 11804 "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
@@ -11467,7 +11811,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:11471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11815: \"$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
@@ -11517,20 +11861,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:11521: checking for database support" >&5
+echo "configure:11865: 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:11526: checking for ndbm.h" >&5
+echo "configure:11870: checking for ndbm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11529 "configure"
+#line 11873 "configure"
 #include "confdefs.h"
 #include <ndbm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11534: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11878: \"$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:11564: checking for dbm_open in -lgdbm" >&5
+echo "configure:11908: 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 11569 "configure"
+#line 11913 "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
@@ -11576,7 +11920,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:11580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11924: \"$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:11608: checking for dbm_open" >&5
+echo "configure:11952: checking for dbm_open" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11611 "configure"
+#line 11955 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dbm_open(); below.  */
@@ -11630,7 +11974,7 @@ dbm_open();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11978: \"$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
@@ -11649,12 +11993,12 @@ else
 
     
 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6
-echo "configure:11653: checking for dbm_open in -ldbm" >&5
+echo "configure:11997: 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 11658 "configure"
+#line 12002 "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
@@ -11665,7 +12009,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:11669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12013: \"$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
@@ -11706,10 +12050,10 @@ EOF
 
 if test "$with_database_berkdb" != "no"; then
   echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6
-echo "configure:11710: checking for Berkeley db.h" >&5
+echo "configure:12054: checking for Berkeley db.h" >&5
   for path in "db/db.h" "db.h"; do
     cat > conftest.$ac_ext <<EOF
-#line 11713 "configure"
+#line 12057 "configure"
 #include "confdefs.h"
 #ifdef HAVE_INTTYPES_H
 #define __BIT_TYPES_DEFINED__
@@ -11727,7 +12071,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:11731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   db_h_path="$path"; break
 else
@@ -11743,9 +12087,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:11747: checking for Berkeley DB version" >&5
+echo "configure:12091: checking for Berkeley DB version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 11749 "configure"
+#line 12093 "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:11768: checking for $dbfunc" >&5
+echo "configure:12112: checking for $dbfunc" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11771 "configure"
+#line 12115 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $dbfunc(); below.  */
@@ -11790,7 +12134,7 @@ $dbfunc();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12138: \"$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
@@ -11809,12 +12153,12 @@ else
 
     
 echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6
-echo "configure:11813: checking for $dbfunc in -ldb" >&5
+echo "configure:12157: 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 11818 "configure"
+#line 12162 "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
@@ -11825,7 +12169,7 @@ int main() {
 $dbfunc()
 ; return 0; }
 EOF
-if { (eval echo configure:11829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12173: \"$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:11893: checking for SOCKSinit in -lsocks" >&5
+echo "configure:12237: 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 11898 "configure"
+#line 12242 "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
@@ -11905,7 +12249,7 @@ int main() {
 SOCKSinit()
 ; return 0; }
 EOF
-if { (eval echo configure:11909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12253: \"$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:11964: checking for module support" >&5
+echo "configure:12308: 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:11968: checking for dlfcn.h" >&5
+echo "configure:12312: checking for dlfcn.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11971 "configure"
+#line 12315 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12320: \"$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*
@@ -11990,12 +12334,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:11994: checking for dlopen in -ldl" >&5
+echo "configure:12338: 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 11999 "configure"
+#line 12343 "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
@@ -12006,7 +12350,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12025,12 +12369,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6
-echo "configure:12029: checking for dlopen in -lc" >&5
+echo "configure:12373: 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 12034 "configure"
+#line 12378 "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
@@ -12041,7 +12385,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12389: \"$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
@@ -12080,12 +12424,12 @@ EOF
   else
     
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:12084: checking for shl_load in -ldld" >&5
+echo "configure:12428: 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 12089 "configure"
+#line 12433 "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
@@ -12096,7 +12440,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:12100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12444: \"$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
@@ -12123,12 +12467,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6
-echo "configure:12127: checking for dld_init in -ldld" >&5
+echo "configure:12471: 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 12132 "configure"
+#line 12476 "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
@@ -12139,7 +12483,7 @@ int main() {
 dld_init()
 ; return 0; }
 EOF
-if { (eval echo configure:12143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12487: \"$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
@@ -12184,7 +12528,7 @@ xehost=$canonical
 xealias=$internal_configuration
 
 echo "checking how to build dynamic libraries for ${xehost}" 1>&6
-echo "configure:12188: checking how to build dynamic libraries for ${xehost}" >&5
+echo "configure:12532: checking how to build dynamic libraries for ${xehost}" >&5
 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
 case "$xehost" in
 *-*-linux-gnu*) ;;
@@ -12212,9 +12556,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:12216: checking checking whether we are using GNU C" >&5
+echo "configure:12560: checking checking whether we are using GNU C" >&5
   cat > conftest.$ac_ext <<EOF
-#line 12218 "configure"
+#line 12562 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -12236,7 +12580,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6
-echo "configure:12240: checking how to produce PIC code" >&5
+echo "configure:12584: checking how to produce PIC code" >&5
 wl=
 
 can_build_shared=yes
@@ -12329,18 +12673,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:12333: checking if PIC flag ${dll_cflags} really works" >&5
+echo "configure:12677: checking if PIC flag ${dll_cflags} really works" >&5
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $dll_cflags -DPIC"
   cat > conftest.$ac_ext <<EOF
-#line 12337 "configure"
+#line 12681 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12688: \"$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
@@ -12371,7 +12715,7 @@ cc_produces_so=no
 xldf=
 xcldf=
 echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6
-echo "configure:12375: checking if C compiler can produce shared libraries" >&5
+echo "configure:12719: checking if C compiler can produce shared libraries" >&5
 if test "$XEGCC" = yes; then
   xcldf="-shared"
   xldf="-shared"
@@ -12422,14 +12766,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 12426 "configure"
+#line 12770 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cc_produces_so=yes
 else
@@ -12454,7 +12798,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:12458: checking for ld used by GCC" >&5
+echo "configure:12802: checking for ld used by GCC" >&5
     ac_prog=`($CC -print-prog-name=ld) 2>&5`
     case "$ac_prog" in
     # Accept absolute paths.
@@ -12479,7 +12823,7 @@ echo "configure:12458: checking for ld used by GCC" >&5
     esac
   else
     echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:12483: checking for GNU ld" >&5
+echo "configure:12827: checking for GNU ld" >&5
   fi
 
   if test -z "$LTLD"; then
@@ -12517,7 +12861,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:12521: checking if the linker is GNU ld" >&5
+echo "configure:12865: 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
@@ -12544,7 +12888,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:12548: checking whether the linker supports shared libraries" >&5
+echo "configure:12892: checking whether the linker supports shared libraries" >&5
   dll_ld=$CC
   dll_ldflags=$LDFLAGS
   ld_shlibs=yes
@@ -12759,10 +13103,10 @@ EOF
     for ac_func in dlerror _dlerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12763: checking for $ac_func" >&5
+echo "configure:13107: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12766 "configure"
+#line 13110 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -12785,7 +13129,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13133: \"$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
@@ -12824,11 +13168,11 @@ done
 fi
 
 cat > conftest.$ac_ext <<EOF
-#line 12828 "configure"
+#line 13172 "configure"
 #include "confdefs.h"
 int main(int c,char *v[]){return 0;}
 EOF
-if { (eval echo configure:12832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:13176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
index 25048ad..54eccbf 100644 (file)
@@ -638,6 +638,23 @@ The default is to autodetect all sound support."])
          done
         ;;
 
+        dnl Has the user specified a prefered Athena widget set?
+        dnl This bit expands any alias names out for us...
+        "with_athena" )
+         case "$val" in
+            xa | xaw )                   val=xaw    ;;
+            3 | 3d | xaw3d )              val=3d     ;;
+            dnl No `n' for next, someone may try `no'
+            ne | nex | next | naxtaw)     val=next   ;;
+            dnl Have not tested the next two...
+            9 | 95 | xaw95 )              val=95     ;;
+            xp | xpm | xawxpm )           val=xpm    ;;
+           * ) USAGE_ERROR(["The \`--$optname' option must have one of these values:
+  \`xaw', \`3d', \`next', \`95', or \`xpm'."]) ;;
+         esac
+          eval "$opt=\"$val\""
+        ;;
+
         dnl Has the user requested XIM support?
        "with_xim" )
          case "$val" in
@@ -772,11 +789,10 @@ The default is to autodetect all sound support."])
          case "$val" in
            l | lu | luc | luci | lucid )               val=lucid  ;;
            m | mo | mot | moti | motif )               val=motif  ;;
-           athena3d | athena-3d )                      val=athena3d ;;
            a | at | ath | athe | athen | athena )      val=athena ;;
            n | no | non | none )                       val=no ;;
            * ) USAGE_ERROR(["The \`--$optname' option must have one of these values:
-  \`lucid', \`motif', \`athena', \`athena3d', or \`no'."]) ;;
+  \`lucid', \`motif', \`athena', or \`no'."]) ;;
          esac
          eval "$opt=\"$val\""
        ;;
@@ -2568,7 +2584,7 @@ if test "$with_x11" != "yes"; then
   dnl if test "$with_tty" = "no" ; then
   dnl   AC_MSG_ERROR([No window system support and no TTY support - Unable to proceed.])
   dnl fi
-  for feature in tooltalk cde offix wmcommand xim xmu xpm nas_sound
+  for feature in tooltalk cde offix wmcommand xim xmu nas_sound
   do
     if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then
        AC_MSG_WARN([--with-$feature ignored:  Not valid without X support])
@@ -2879,16 +2895,84 @@ if test "$with_x11" = "yes"; then
 
   AC_CHECKING(for X11 graphics libraries)
 
-  dnl Autodetect -lXaw
-  AC_CHECK_LIB(Xaw, XawScrollbarSetThumb, have_xaw=yes, have_xaw=no)
-  dnl if test "$have_xaw" = "yes"; then
-    dnl AC_CHECK_HEADER(X11/Xaw/Reports.h, [
-      dnl XE_APPEND(pkg-src/tree-x, MAKE_SUBDIR)
-      dnl XE_APPEND(pkg-src/tree-x, INSTALL_ARCH_DEP_SUBDIR)])
-  dnl fi
+  AC_CHECKING(for the Athena widgets)
+
+  dnl What in heck did the user actually want?
+  case "$with_athena" in
+    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 ;;
+    "95")      athena_variant=Xaw95    athena_3d=yes ;;
+    "xpm")     athena_variant=XawXpm   athena_3d=yes ;;
+    *)         XE_DIE("Unknown Athena widget set \`$with_athena'. This should not happen.") ;;
+  esac
+
+  dnl Search for the Athena library...
+  if test "$athena_3d" = "no"; then
+    AC_CHECK_LIB($athena_variant, XawScrollbarSetThumb, 
+      [
+        dnl Must not be a 3d library...
+        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, 
+        [
+          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.")))
+  fi
+
+  dnl Now we locate the Athena headers that we need.
+  if test "$athena_3d" = "no"; then
+    AC_CHECK_HEADER(X11/Xaw/ThreeD.h,
+      AC_MSG_WARN("Could not find a non-3d Athena header set."),
+      AC_CHECK_HEADER(X11/Xaw/XawInit.h,
+        athena_h_path=X11/Xaw,
+        AC_MSG_WARN("Could not find a non-3d Athena header set.")))
+  else
+    dnl The three-d Athena headers are so much more slippery.
+    dnl Curse this `Lets replace standard libraries' thing that they did. :/
+    AC_CHECK_HEADER(X11/$athena_variant/XawInit.h,
+      AC_CHECK_HEADER(X11/$athena_variant/ThreeD.h,
+        athena_h_path=X11/$athena_variant,))
+
+    dnl If we couldn't find the specific variant, try the generic Athena 3d headers
+    if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
+      AC_CHECK_HEADER(X11/Xaw3d/XawInit.h,
+        AC_CHECK_HEADER(X11/Xaw3d/ThreeD.h,
+          [
+            AC_MSG_WARN("Assuming that X11/Xaw3d headers are suitable for $athena_variant.")
+            athena_h_path=X11/Xaw3d
+          ],))
+    fi
+
+    dnl If nothing yet found, see if Xaw is a 3d header set...
+    dnl We AC_MSG_WARN if we fail because I am all out of ideas...
+    if test -z "$athena_h_path"; then
+      AC_CHECK_HEADER(X11/Xaw/ThreeD.h,
+        [
+          AC_MSG_WARN("Assuming that X11/Xaw headers are suitable for $athena_variant.")
+          athena_h_path=X11/Xaw
+        ],
+        AC_MSG_WARN("Could not find a suitable 3d Athena header set."))
+    fi
+  fi
 
-  dnl Autodetect -lXaw3d
-  AC_CHECK_LIB(Xaw3d, XawScrollbarSetThumb, have_xaw3d=yes, have_xaw3d=no)
+  dnl Do we actually have a usable Athena widget set? Please?
+  if test -n "$athena_lib" -a -n "$athena_h_path"; then
+    have_xaw=yes
+  else
+    have_xaw=no
+  fi
 
   dnl autodetect Motif - but only add to libs_x later (if necessary)
   AC_CHECK_HEADER(Xm/Xm.h,
@@ -2913,13 +2997,12 @@ dnl Finish ensuring that we have values for the various toolkit items.
 dnl Not all toolkits support all widgets
 dnl if Motif is available we use it for the dialog boxes.
 
-case "$with_menubars" in "" | "yes" | "athena" | "athena3d" )
+case "$with_menubars" in "" | "yes" | "athena" )
   with_menubars="lucid" ;;
 esac
 case "$with_dialogs" in "" | "yes" | "lucid" )
-  if   test "$have_motif" = "yes"; then with_dialogs="motif"
-  elif test "$have_xaw3d" = "yes"; then with_dialogs="athena3d"
-  elif test "$have_xaw"   = "yes"; then with_dialogs="athena"
+  if   test "$have_motif"     = "yes"; then with_dialogs="motif"
+  elif test "$have_xaw"       = "yes"; then with_dialogs="athena"
   else with_dialogs=no
   fi ;;
 esac
@@ -2928,7 +3011,6 @@ case "$with_scrollbars" in "" | "yes" )
 esac
 case "$with_widgets" in "" | "yes" | "lucid")
   if   test "$have_motif" = "yes"; then with_widgets="motif"
-  elif test "$have_xaw3d" = "yes"; then with_widgets="athena3d"
   elif test "$have_xaw"   = "yes"; then with_widgets="athena"
   else with_widgets=no
   fi ;;
@@ -2937,20 +3019,28 @@ esac
 all_widgets="$with_menubars $with_scrollbars $with_dialogs $with_toolbars $with_widgets"
 
 case "$all_widgets" in
- *athena*3d )
-  AC_DEFINE(LWLIB_USES_ATHENA)
-  AC_DEFINE(NEED_ATHENA)
-  XE_APPEND(lwlib-Xaw.o, lwlib_objs)
-  if test "$have_xaw3d"; then
-    XE_PREPEND(-lXaw3d, libs_x)
-  else
-    XE_PREPEND(-lXaw, libs_x)
-  fi ;;
- *athena* )
-  AC_DEFINE(LWLIB_USES_ATHENA)
-  AC_DEFINE(NEED_ATHENA)
-  XE_APPEND(lwlib-Xaw.o, lwlib_objs)
-  XE_PREPEND(-lXaw, libs_x) ;;
+  *athena* )
+    if test "$have_xaw" != "yes"; then
+      XE_DIE("Could not find a suitable Athena library to build with.")
+    fi
+
+    dnl Add the Lucid widget Athena code
+    XE_APPEND(lwlib-Xaw.o, lwlib_objs)
+
+    dnl Add the Athena widget library we located earlier
+    XE_PREPEND(-l$athena_lib, libs_x)
+
+    dnl Export the path for lwlib, used to build and include the headers
+    dnl from the right place later on.
+    AC_DEFINE_UNQUOTED(ATHENA_H_PATH, $athena_h_path)
+
+    AC_DEFINE(LWLIB_USES_ATHENA)
+    AC_DEFINE(NEED_ATHENA)
+
+    if test "$athena_3d" = "yes"; then
+      AC_DEFINE(HAVE_ATHENA_3D)
+    fi
+  ;;
 esac
 
 case "$all_widgets" in *motif* )
@@ -2975,10 +3065,14 @@ esac
 
 AC_SUBST(lwlib_objs)
 
-case "$with_scrollbars" in athena* ) AC_DEFINE(LWLIB_SCROLLBARS_ATHENA);; esac
-case "$with_dialogs"    in athena* ) AC_DEFINE(LWLIB_DIALOGS_ATHENA)   ;; esac
-test "$with_scrollbars" = "athena3d" && AC_DEFINE(LWLIB_SCROLLBARS_ATHENA3D)
-test "$with_dialogs"    = "athena3d" && AC_DEFINE(LWLIB_DIALOGS_ATHENA3D)
+test "$with_scrollbars" = "athena" && AC_DEFINE(LWLIB_SCROLLBARS_ATHENA)
+test "$with_dialogs"    = "athena" && AC_DEFINE(LWLIB_DIALOGS_ATHENA)
+
+if test "$athena_3d" = "yes"; then
+  test "$with_scrollbars" = "athena" && AC_DEFINE(LWLIB_SCROLLBARS_ATHENA3D)
+  test "$with_dialogs"    = "athena" && AC_DEFINE(LWLIB_DIALOGS_ATHENA3D)
+fi
+
 case "$with_widgets" in athena* ) AC_DEFINE(LWLIB_WIDGETS_ATHENA);; esac
 test "$with_widgets" != "no" && test "$with_widgets" != "msw" && \
        AC_DEFINE(LWLIB_TABS_LUCID)
index 12a020f..71d3f8f 100644 (file)
@@ -61,15 +61,17 @@ Window-system options:
 --without-toolbars      Don't compile with any toolbar support.
 --without-wmcommand     Compile without realized leader window which will
                         keep the WM_COMMAND property.
+--with-athena=TYPE      Use TYPE Athena widgets
+                        (xaw, 3d, next, 95, or xpm)
 --with-menubars=TYPE    Use TYPE menubars (lucid, motif, or no).  The Lucid
                         widgets emulate Motif (mostly) but are faster.
                         *WARNING*  The Motif menubar is currently broken.
 --with-scrollbars=TYPE  Use TYPE scrollbars
-                        (lucid, motif, athena, athena3d, or no).
---with-dialogs=TYPE     Use TYPE dialog boxes (motif, athena, athena3d, or no).
+                        (lucid, motif, athena, or no).
+--with-dialogs=TYPE     Use TYPE dialog boxes (motif, athena, or no).
                         Lucid menubars and scrollbars are the default.
                         Motif dialog boxes will be used if Motif can be found.
---with-widgets=TYPE     Use TYPE widgets (motif, athena, athena3d, or no).
+--with-widgets=TYPE     Use TYPE widgets (motif, athena, or no).
                         Motif widgets will be used if Motif can be found.
                         Other widget types are currently unsupported.
 --with-dragndrop (*)    Compile in the generic drag and drop API. This is
index b0ef6d0..f15c75d 100644 (file)
@@ -1,4 +1,4 @@
-Copyright (c) 1997, Adrian Aichner <aichner@ecf.teradyne.com>.
+Copyright (c) 1997, Adrian Aichner <adrian@xemacs.org>.
 
 Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions.
 
@@ -1131,13 +1131,13 @@ dem von Stuart Cracraft f
 Ben Wing hat das Tutorial für X Windows erweitert.  Martin Buchholz
 und Hrvoje Niksic haben weitere Korrekturen für XEmacs beigetragen.
 Ins Deutsche Ã¼bertragen wurde es von Adrian Aichner
-<aichner@ecf.teradyne.com>.
+<adrian@xemacs.org>.
 
 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 <aichner@ecf.teradyne.com>.
+Copyright (c) 1997, Adrian Aichner <adrian@xemacs.org>.
 
 Copyright (c) 1985, 1996 Free Software Foundation
 
index 360182b..83889a8 100644 (file)
@@ -61,40 +61,40 @@ lispref.info-7: 291568
 lispref.info-8: 340704
 lispref.info-9: 388026
 lispref.info-10: 436665
-lispref.info-11: 484608
-lispref.info-12: 531220
-lispref.info-13: 579119
-lispref.info-14: 627342
-lispref.info-15: 675596
-lispref.info-16: 724798
-lispref.info-17: 772038
-lispref.info-18: 818888
-lispref.info-19: 865939
-lispref.info-20: 914669
-lispref.info-21: 964091
-lispref.info-22: 1011010
-lispref.info-23: 1058037
-lispref.info-24: 1107436
-lispref.info-25: 1157118
-lispref.info-26: 1207028
-lispref.info-27: 1256251
-lispref.info-28: 1305018
-lispref.info-29: 1353990
-lispref.info-30: 1395325
-lispref.info-31: 1444468
-lispref.info-32: 1493681
-lispref.info-33: 1543255
-lispref.info-34: 1591432
-lispref.info-35: 1637064
-lispref.info-36: 1678380
-lispref.info-37: 1723321
-lispref.info-38: 1773008
-lispref.info-39: 1822112
-lispref.info-40: 1871516
-lispref.info-41: 1921400
-lispref.info-42: 1970391
-lispref.info-43: 2014283
-lispref.info-44: 2052619
+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
 \1f
 Tag Table:
 (Indirect)
@@ -290,599 +290,600 @@ Node: Function Names\7f453659
 Node: Defining Functions\7f456232
 Node: Calling Functions\7f459272
 Node: Mapping Functions\7f463121
-Node: Anonymous Functions\7f465514
-Node: Function Cells\7f468759
-Node: Inline Functions\7f473569
-Node: Related Topics\7f475379
-Node: Macros\7f476432
-Node: Simple Macro\7f477716
-Node: Expansion\7f478451
-Node: Compiling Macros\7f481455
-Node: Defining Macros\7f483291
-Node: Backquote\7f484608
-Node: Problems with Macros\7f487005
-Node: Argument Evaluation\7f487700
-Node: Surprising Local Vars\7f490615
-Node: Eval During Expansion\7f492683
-Node: Repeated Expansion\7f494376
-Node: Customization\7f496292
-Node: Common Keywords\7f496761
-Node: Group Definitions\7f499606
-Node: Variable Definitions\7f501798
-Node: Customization Types\7f506781
-Node: Simple Types\7f508216
-Node: Composite Types\7f510373
-Node: Splicing into Lists\7f515063
-Node: Type Keywords\7f516898
-Node: Loading\7f520418
-Node: How Programs Do Loading\7f522093
-Node: Autoload\7f531220
-Node: Repeated Loading\7f537299
-Node: Named Features\7f539412
-Node: Unloading\7f545844
-Node: Hooks for Loading\7f548000
-Node: Byte Compilation\7f548717
-Node: Speed of Byte-Code\7f550634
-Node: Compilation Functions\7f551841
-Node: Docs and Compilation\7f558228
-Node: Dynamic Loading\7f560881
-Node: Eval During Compile\7f563245
-Node: Compiled-Function Objects\7f564510
-Node: Disassembly\7f569308
-Node: Debugging\7f576562
-Node: Debugger\7f577974
-Node: Error Debugging\7f579119
-Node: Infinite Loops\7f581872
-Node: Function Debugging\7f583116
-Node: Explicit Debug\7f585906
-Node: Using Debugger\7f586677
-Node: Debugger Commands\7f588539
-Node: Invoking the Debugger\7f592856
-Node: Internals of Debugger\7f596771
-Node: Syntax Errors\7f601658
-Node: Excess Open\7f602906
-Node: Excess Close\7f604781
-Node: Compilation Errors\7f606202
-Node: Edebug\7f607490
-Node: Using Edebug\7f609598
-Node: Instrumenting\7f612295
-Node: Edebug Execution Modes\7f615784
-Node: Jumping\7f618894
-Node: Edebug Misc\7f621237
-Node: Breakpoints\7f622626
-Node: Global Break Condition\7f625432
-Node: Embedded Breakpoints\7f626387
-Node: Trapping Errors\7f627342
-Node: Edebug Views\7f629418
-Node: Edebug Eval\7f631383
-Node: Eval List\7f632560
-Node: Reading in Edebug\7f635945
-Node: Printing in Edebug\7f636744
-Node: Tracing\7f638459
-Node: Coverage Testing\7f640345
-Node: The Outside Context\7f642386
-Node: Checking Whether to Stop\7f643335
-Node: Edebug Display Update\7f643982
-Node: Edebug Recursive Edit\7f646005
-Node: Instrumenting Macro Calls\7f647660
-Node: Specification List\7f650142
-Node: Backtracking\7f659553
-Node: Debugging Backquote\7f661491
-Node: Specification Examples\7f665197
-Node: Edebug Options\7f667264
-Node: Read and Print\7f672601
-Node: Streams Intro\7f673578
-Node: Input Streams\7f675596
-Node: Input Functions\7f680497
-Node: Output Streams\7f682557
-Node: Output Functions\7f686608
-Node: Output Variables\7f690908
-Node: Minibuffers\7f695707
-Node: Intro to Minibuffers\7f696792
-Node: Text from Minibuffer\7f699118
-Node: Object from Minibuffer\7f703780
-Node: Minibuffer History\7f706997
-Node: Completion\7f709907
-Node: Basic Completion\7f711882
-Node: Minibuffer Completion\7f716906
-Node: Completion Commands\7f720151
-Node: High-Level Completion\7f724798
-Node: Reading File Names\7f728822
-Node: Programmed Completion\7f732511
-Node: Yes-or-No Queries\7f734721
-Node: Multiple Queries\7f740458
-Node: Minibuffer Misc\7f744522
-Node: Command Loop\7f749388
-Node: Command Overview\7f750732
-Node: Defining Commands\7f754010
-Node: Using Interactive\7f754758
-Node: Interactive Codes\7f759531
-Node: Interactive Examples\7f765323
-Node: Interactive Call\7f766637
-Node: Command Loop Info\7f772038
-Node: Events\7f777017
-Node: Event Types\7f778477
-Node: Event Contents\7f780400
-Node: Event Predicates\7f784876
-Node: Accessing Mouse Event Positions\7f786201
-Node: Frame-Level Event Position Info\7f786900
-Node: Window-Level Event Position Info\7f787940
-Node: Event Text Position Info\7f789704
-Node: Event Glyph Position Info\7f792196
-Node: Event Toolbar Position Info\7f793519
-Node: Other Event Position Info\7f794190
-Node: Accessing Other Event Info\7f794599
-Node: Working With Events\7f796219
-Node: Converting Events\7f802207
-Node: Reading Input\7f805160
-Node: Key Sequence Input\7f806162
-Node: Reading One Event\7f808116
-Node: Dispatching an Event\7f810877
-Node: Quoted Character Input\7f811328
-Node: Peeking and Discarding\7f812676
-Node: Waiting\7f816580
-Node: Quitting\7f818888
-Node: Prefix Command Arguments\7f823296
-Node: Recursive Editing\7f828383
-Node: Disabling Commands\7f833179
-Node: Command History\7f835247
-Node: Keyboard Macros\7f836984
-Node: Keymaps\7f839201
-Node: Keymap Terminology\7f840778
-Node: Format of Keymaps\7f843707
-Node: Creating Keymaps\7f844118
-Node: Inheritance and Keymaps\7f846197
-Node: Key Sequences\7f848569
-Node: Prefix Keys\7f853139
-Node: Active Keymaps\7f856724
-Node: Key Lookup\7f865939
-Node: Functions for Key Lookup\7f871102
-Node: Changing Key Bindings\7f876799
-Node: Key Binding Commands\7f883696
-Node: Scanning Keymaps\7f885761
-Node: Other Keymap Functions\7f894272
-Node: Menus\7f894894
-Node: Menu Format\7f895436
-Node: Menubar Format\7f904021
-Node: Menubar\7f904646
-Node: Modifying Menus\7f907759
-Node: Menu Filters\7f912773
-Node: Pop-Up Menus\7f914669
-Node: Menu Accelerators\7f916874
-Node: Creating Menu Accelerators\7f917596
-Node: Keyboard Menu Traversal\7f918914
-Node: Menu Accelerator Functions\7f919641
-Node: Buffers Menu\7f922676
-Node: Dialog Boxes\7f923970
-Node: Dialog Box Format\7f924137
-Node: Dialog Box Functions\7f925507
-Node: Toolbar\7f925904
-Node: Toolbar Intro\7f926229
-Node: Toolbar Descriptor Format\7f928639
-Node: Specifying the Toolbar\7f933133
-Node: Other Toolbar Variables\7f936738
-Node: Scrollbars\7f941165
-Node: Drag and Drop\7f941301
-Node: Supported Protocols\7f942377
-Node: OffiX DND\7f942880
-Node: CDE dt\7f943887
-Node: MSWindows OLE\7f944478
-Node: Loose ends\7f944649
-Node: Drop Interface\7f945041
-Node: Drag Interface\7f946063
-Node: Modes\7f946237
-Node: Major Modes\7f947188
-Node: Major Mode Conventions\7f950103
-Node: Example Major Modes\7f956058
-Node: Auto Major Mode\7f964091
-Node: Mode Help\7f971539
-Node: Derived Modes\7f972640
-Node: Minor Modes\7f974831
-Node: Minor Mode Conventions\7f976133
-Node: Keymaps and Minor Modes\7f978996
-Node: Modeline Format\7f979831
-Node: Modeline Data\7f981599
-Node: Modeline Variables\7f985869
-Node: %-Constructs\7f990585
-Node: Hooks\7f993496
-Node: Documentation\7f1000258
-Node: Documentation Basics\7f1001681
-Node: Accessing Documentation\7f1004731
-Node: Keys in Documentation\7f1011010
-Node: Describing Characters\7f1014489
-Node: Help Functions\7f1016838
-Node: Obsoleteness\7f1023289
-Node: Files\7f1026283
-Node: Visiting Files\7f1028208
-Node: Visiting Functions\7f1029713
-Node: Subroutines of Visiting\7f1034760
-Node: Saving Buffers\7f1036833
-Node: Reading from Files\7f1042926
-Node: Writing to Files\7f1045083
-Node: File Locks\7f1047800
-Node: Information about Files\7f1050853
-Node: Testing Accessibility\7f1051614
-Node: Kinds of Files\7f1055354
-Node: Truenames\7f1057035
-Node: File Attributes\7f1058037
-Node: Changing File Attributes\7f1063176
-Node: File Names\7f1068582
-Node: File Name Components\7f1070191
-Node: Directory Names\7f1073292
-Node: Relative File Names\7f1076745
-Node: File Name Expansion\7f1077823
-Node: Unique File Names\7f1081730
-Node: File Name Completion\7f1083345
-Node: User Name Completion\7f1086006
-Node: Contents of Directories\7f1087346
-Node: Create/Delete Dirs\7f1090659
-Node: Magic File Names\7f1091765
-Node: Partial Files\7f1097395
-Node: Intro to Partial Files\7f1097623
-Node: Creating a Partial File\7f1098863
-Node: Detached Partial Files\7f1099798
-Node: Format Conversion\7f1100920
-Node: Files and MS-DOS\7f1107436
-Node: Backups and Auto-Saving\7f1109500
-Node: Backup Files\7f1110175
-Node: Making Backups\7f1111572
-Node: Rename or Copy\7f1114321
-Node: Numbered Backups\7f1116814
-Node: Backup Names\7f1119058
-Node: Auto-Saving\7f1122350
-Node: Reverting\7f1130492
-Node: Buffers\7f1133650
-Node: Buffer Basics\7f1135067
-Node: Current Buffer\7f1137120
-Node: Buffer Names\7f1141808
-Node: Buffer File Name\7f1145013
-Node: Buffer Modification\7f1149132
-Node: Modification Time\7f1151325
-Node: Read Only Buffers\7f1154700
-Node: The Buffer List\7f1157118
-Node: Creating Buffers\7f1161948
-Node: Killing Buffers\7f1164094
-Node: Indirect Buffers\7f1167825
-Node: Windows\7f1170397
-Node: Basic Windows\7f1171875
-Node: Splitting Windows\7f1174973
-Node: Deleting Windows\7f1181862
-Node: Selecting Windows\7f1184542
-Node: Cyclic Window Ordering\7f1187671
-Node: Buffers and Windows\7f1192295
-Node: Displaying Buffers\7f1194136
-Node: Choosing Window\7f1199312
-Node: Window Point\7f1207028
-Node: Window Start\7f1209074
-Node: Vertical Scrolling\7f1213564
-Node: Horizontal Scrolling\7f1219701
-Node: Size of Window\7f1223210
-Node: Position of Window\7f1227928
-Node: Resizing Windows\7f1230168
-Node: Window Configurations\7f1235597
-Node: Frames\7f1239022
-Node: Creating Frames\7f1240791
-Node: Frame Properties\7f1242132
-Node: Property Access\7f1242948
-Node: Initial Properties\7f1243797
-Node: X Frame Properties\7f1246283
-Node: Size and Position\7f1250917
-Node: Frame Name\7f1252913
-Node: Frame Titles\7f1253827
-Node: Deleting Frames\7f1255651
-Node: Finding All Frames\7f1256251
-Node: Frames and Windows\7f1258245
-Node: Minibuffers and Frames\7f1259950
-Node: Input Focus\7f1260868
-Node: Visibility of Frames\7f1263945
-Node: Raising and Lowering\7f1265864
-Node: Frame Configurations\7f1268240
-Node: Frame Hooks\7f1268834
-Node: Consoles and Devices\7f1270639
-Node: Basic Console Functions\7f1273383
-Node: Basic Device Functions\7f1273806
-Node: Console Types and Device Classes\7f1274522
-Node: Connecting to a Console or Device\7f1276719
-Node: The Selected Console and Device\7f1278882
-Node: Console and Device I/O\7f1279908
-Node: Positions\7f1280672
-Node: Point\7f1281641
-Node: Motion\7f1284731
-Node: Character Motion\7f1285498
-Node: Word Motion\7f1287735
-Node: Buffer End Motion\7f1289236
-Node: Text Lines\7f1290733
-Node: Screen Lines\7f1295328
-Node: List Motion\7f1299391
-Node: Skipping Characters\7f1302799
-Node: Excursions\7f1305018
-Node: Narrowing\7f1308050
-Node: Markers\7f1313375
-Node: Overview of Markers\7f1314281
-Node: Predicates on Markers\7f1318973
-Node: Creating Markers\7f1320219
-Node: Information from Markers\7f1324256
-Node: Changing Markers\7f1325354
-Node: The Mark\7f1326732
-Node: The Region\7f1335226
-Node: Text\7f1340913
-Node: Near Point\7f1343612
-Node: Buffer Contents\7f1347334
-Node: Comparing Text\7f1348740
-Node: Insertion\7f1350148
-Node: Commands for Insertion\7f1353990
-Node: Deletion\7f1356946
-Node: User-Level Deletion\7f1360541
-Node: The Kill Ring\7f1364702
-Node: Kill Ring Concepts\7f1366876
-Node: Kill Functions\7f1367930
-Node: Yank Commands\7f1369835
-Node: Low-Level Kill Ring\7f1371706
-Node: Internals of Kill Ring\7f1374492
-Node: Undo\7f1377272
-Node: Maintaining Undo\7f1381601
-Node: Filling\7f1384221
-Node: Margins\7f1390215
-Node: Auto Filling\7f1394144
-Node: Sorting\7f1395325
-Node: Columns\7f1404625
-Node: Indentation\7f1407141
-Node: Primitive Indent\7f1407920
-Node: Mode-Specific Indent\7f1409164
-Node: Region Indent\7f1411675
-Node: Relative Indent\7f1414623
-Node: Indent Tabs\7f1417005
-Node: Motion by Indent\7f1418326
-Node: Case Changes\7f1419105
-Node: Text Properties\7f1422356
-Node: Examining Properties\7f1424169
-Node: Changing Properties\7f1426036
-Node: Property Search\7f1429627
-Node: Special Properties\7f1434338
-Node: Saving Properties\7f1434619
-Node: Substitution\7f1437761
-Node: Registers\7f1441031
-Node: Transposition\7f1443574
-Node: Change Hooks\7f1444468
-Node: Transformations\7f1446508
-Node: Searching and Matching\7f1450893
-Node: String Search\7f1452024
-Node: Regular Expressions\7f1456748
-Node: Syntax of Regexps\7f1458115
-Node: Regexp Example\7f1472494
-Node: Regexp Search\7f1474664
-Node: POSIX Regexps\7f1480752
-Node: Search and Replace\7f1482587
-Node: Match Data\7f1485952
-Node: Simple Match Data\7f1487082
-Node: Replacing Match\7f1491347
-Node: Entire Match Data\7f1493681
-Node: Saving Match Data\7f1495672
-Node: Searching and Case\7f1497053
-Node: Standard Regexps\7f1499087
-Node: Syntax Tables\7f1501285
-Node: Syntax Basics\7f1502399
-Node: Syntax Descriptors\7f1505371
-Node: Syntax Class Table\7f1507221
-Node: Syntax Flags\7f1513259
-Node: Syntax Table Functions\7f1516476
-Node: Motion and Syntax\7f1520340
-Node: Parsing Expressions\7f1521792
-Node: Standard Syntax Tables\7f1527861
-Node: Syntax Table Internals\7f1528705
-Node: Abbrevs\7f1529731
-Node: Abbrev Mode\7f1531534
-Node: Abbrev Tables\7f1532254
-Node: Defining Abbrevs\7f1533787
-Node: Abbrev Files\7f1535692
-Node: Abbrev Expansion\7f1537465
-Node: Standard Abbrev Tables\7f1542096
-Node: Extents\7f1543255
-Node: Intro to Extents\7f1544498
-Node: Creating and Modifying Extents\7f1548492
-Node: Extent Endpoints\7f1549999
-Node: Finding Extents\7f1553262
-Node: Mapping Over Extents\7f1557011
-Node: Extent Properties\7f1563128
-Node: Detached Extents\7f1573272
-Node: Extent Parents\7f1575131
-Node: Duplicable Extents\7f1576826
-Node: Extents and Events\7f1580047
-Node: Atomic Extents\7f1581954
-Node: Specifiers\7f1582401
-Node: Introduction to Specifiers\7f1584208
-Node: Specifiers In-Depth\7f1586518
-Node: Specifier Instancing\7f1591432
-Node: Specifier Types\7f1594694
-Node: Adding Specifications\7f1599768
-Node: Retrieving Specifications\7f1609130
-Node: Specifier Tag Functions\7f1612865
-Node: Specifier Instancing Functions\7f1616099
-Node: Specifier Example\7f1619506
-Node: Creating Specifiers\7f1622612
-Node: Specifier Validation Functions\7f1624861
-Node: Other Specification Functions\7f1627245
-Node: Faces and Window-System Objects\7f1631064
-Node: Faces\7f1631388
-Node: Merging Faces\7f1633005
-Node: Basic Face Functions\7f1634966
-Node: Face Properties\7f1637064
-Node: Face Convenience Functions\7f1646623
-Node: Other Face Display Functions\7f1649753
-Node: Fonts\7f1650566
-Node: Font Specifiers\7f1651267
-Node: Font Instances\7f1651508
-Node: Font Instance Names\7f1652475
-Node: Font Instance Size\7f1653316
-Node: Font Instance Characteristics\7f1654602
-Node: Font Convenience Functions\7f1655771
-Node: Colors\7f1657061
-Node: Color Specifiers\7f1657501
-Node: Color Instances\7f1657728
-Node: Color Instance Properties\7f1658472
-Node: Color Convenience Functions\7f1659098
-Node: Glyphs\7f1660151
-Node: Glyph Functions\7f1661743
-Node: Creating Glyphs\7f1662150
-Node: Glyph Properties\7f1663737
-Node: Glyph Convenience Functions\7f1672904
-Node: Glyph Dimensions\7f1676851
-Node: Images\7f1677931
-Node: Image Specifiers\7f1678380
-Node: Image Instantiator Conversion\7f1689802
-Node: Image Instances\7f1691167
-Node: Image Instance Types\7f1691918
-Node: Image Instance Functions\7f1694573
-Node: Glyph Types\7f1699142
-Node: Mouse Pointer\7f1700914
-Node: Redisplay Glyphs\7f1703917
-Node: Subwindows\7f1704950
-Node: Annotations\7f1705193
-Node: Annotation Basics\7f1706209
-Node: Annotation Primitives\7f1710147
-Node: Annotation Properties\7f1711476
-Node: Locating Annotations\7f1714516
-Node: Margin Primitives\7f1715353
-Node: Annotation Hooks\7f1717247
-Node: Display\7f1717907
-Node: Refresh Screen\7f1718885
-Node: Truncation\7f1720796
-Node: The Echo Area\7f1723321
-Node: Warnings\7f1729756
-Node: Invisible Text\7f1734192
-Node: Selective Display\7f1736771
-Node: Overlay Arrow\7f1740897
-Node: Temporary Displays\7f1742250
-Node: Blinking\7f1746371
-Node: Usual Display\7f1748556
-Node: Display Tables\7f1751105
-Node: Display Table Format\7f1751909
-Node: Active Display Table\7f1753351
-Node: Character Descriptors\7f1754543
-Node: Beeping\7f1755300
-Node: Hash Tables\7f1760066
-Node: Introduction to Hash Tables\7f1760674
-Node: Working With Hash Tables\7f1766697
-Node: Weak Hash Tables\7f1767814
-Node: Range Tables\7f1769613
-Node: Introduction to Range Tables\7f1770302
-Node: Working With Range Tables\7f1770733
-Node: Databases\7f1771618
-Node: Connecting to a Database\7f1771917
-Node: Working With a Database\7f1773008
-Node: Other Database Functions\7f1773866
-Node: Processes\7f1774440
-Node: Subprocess Creation\7f1776664
-Node: Synchronous Processes\7f1779953
-Node: MS-DOS Subprocesses\7f1786671
-Node: Asynchronous Processes\7f1787745
-Node: Deleting Processes\7f1791458
-Node: Process Information\7f1793329
-Node: Input to Processes\7f1797255
-Node: Signals to Processes\7f1799545
-Node: Output from Processes\7f1803965
-Node: Process Buffers\7f1804777
-Node: Filter Functions\7f1807644
-Node: Accepting Output\7f1813214
-Node: Sentinels\7f1814741
-Node: Process Window Size\7f1818231
-Node: Transaction Queues\7f1818580
-Node: Network\7f1820278
-Node: System Interface\7f1822112
-Node: Starting Up\7f1823382
-Node: Start-up Summary\7f1823976
-Node: Init File\7f1827530
-Node: Terminal-Specific\7f1829911
-Node: Command Line Arguments\7f1833070
-Node: Getting Out\7f1836559
-Node: Killing XEmacs\7f1837128
-Node: Suspending XEmacs\7f1838797
-Node: System Environment\7f1842139
-Node: User Identification\7f1848806
-Node: Time of Day\7f1852335
-Node: Time Conversion\7f1855122
-Node: Timers\7f1860162
-Node: Terminal Input\7f1862335
-Node: Input Modes\7f1862838
-Node: Translating Input\7f1865251
-Node: Recording Input\7f1869416
-Node: Terminal Output\7f1871516
-Node: Flow Control\7f1875139
-Node: Batch Mode\7f1878931
-Node: X-Windows\7f1880313
-Node: X Selections\7f1881125
-Node: X Server\7f1883335
-Node: Resources\7f1883736
-Node: Server Data\7f1888877
-Node: Grabs\7f1890084
-Node: X Miscellaneous\7f1891665
-Node: ToolTalk Support\7f1894050
-Node: XEmacs ToolTalk API Summary\7f1894267
-Node: Sending Messages\7f1895567
-Node: Example of Sending Messages\7f1895818
-Node: Elisp Interface for Sending Messages\7f1896880
-Node: Receiving Messages\7f1903273
-Node: Example of Receiving Messages\7f1903496
-Node: Elisp Interface for Receiving Messages\7f1904332
-Node: LDAP Support\7f1908157
-Node: Building XEmacs with LDAP support\7f1908653
-Node: XEmacs LDAP API\7f1909631
-Node: LDAP Variables\7f1910361
-Node: The High-Level LDAP API\7f1912837
-Node: The Low-Level LDAP API\7f1913942
-Node: The LDAP Lisp Object\7f1914216
-Node: Opening and Closing a LDAP Connection\7f1914769
-Node: Searching on a LDAP Server (Low-level)\7f1916552
-Node: Syntax of Search Filters\7f1917945
-Node: Internationalization\7f1919243
-Node: I18N Levels 1 and 2\7f1919580
-Node: I18N Level 3\7f1920286
-Node: Level 3 Basics\7f1920567
-Node: Level 3 Primitives\7f1921400
-Node: Dynamic Messaging\7f1923006
-Node: Domain Specification\7f1923469
-Node: Documentation String Extraction\7f1925372
-Node: I18N Level 4\7f1926290
-Node: MULE\7f1926482
-Node: Internationalization Terminology\7f1927593
-Node: Charsets\7f1936132
-Node: Charset Properties\7f1936828
-Node: Basic Charset Functions\7f1941514
-Node: Charset Property Functions\7f1943695
-Node: Predefined Charsets\7f1945738
-Node: MULE Characters\7f1948658
-Node: Composite Characters\7f1949505
-Node: ISO 2022\7f1950759
-Node: Coding Systems\7f1956481
-Node: Coding System Types\7f1958403
-Node: EOL Conversion\7f1960222
-Node: Coding System Properties\7f1961405
-Node: Basic Coding System Functions\7f1965257
-Node: Coding System Property Functions\7f1967161
-Node: Encoding and Decoding Text\7f1967719
-Node: Detection of Textual Encoding\7f1968855
-Node: Big5 and Shift-JIS Functions\7f1970391
-Node: CCL\7f1971479
-Node: CCL Syntax\7f1974583
-Node: CCL Statements\7f1976171
-Node: CCL Expressions\7f1980819
-Node: Calling CCL\7f1983358
-Node: CCL Examples\7f1986347
-Node: Category Tables\7f1986484
-Node: Tips\7f1988843
-Node: Style Tips\7f1989484
-Node: Compilation Tips\7f1999003
-Node: Documentation Tips\7f2000917
-Node: Comment Tips\7f2006426
-Node: Library Headers\7f2009428
-Node: Building XEmacs and Object Allocation\7f2013400
-Node: Building XEmacs\7f2014283
-Node: Pure Storage\7f2020618
-Node: Garbage Collection\7f2023406
-Node: Standard Errors\7f2034545
-Node: Standard Buffer-Local Variables\7f2038754
-Node: Standard Keymaps\7f2041387
-Node: Standard Hooks\7f2045119
-Node: Index\7f2052619
+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
 \1f
 End Tag Table
index 75b5ce0..1ee1532 100644 (file)
@@ -444,12 +444,12 @@ widget specific way.
 
     `%{'
     `%}'
-          The text inside will be displayed with the face specified by
+          The text inside will be displayed in the face specified by
           `:sample-face'.
 
     `%v'
-          This will be replaces with the buffer representation of the
-          widgets value.  What this is depends on the widget type.
+          This will be replaced with the buffer representation of the
+          widget's value.  What this is depends on the widget type.
 
     `%d'
           Insert the string specified by `:doc' here.
@@ -539,9 +539,9 @@ widget specific way.
 
 `:validate'
      A function which takes a widget as an argument, and return nil if
-     the widgets current value is valid for the widget.  Otherwise, it
+     the widget's current value is valid for the widget.  Otherwise it
      should return the widget containing the invalid data, and set that
-     widgets `:error' property to a string explaining the error.
+     widget's `:error' property to a string explaining the error.
 
      The following predefined function can be used:
 
@@ -728,10 +728,9 @@ The `menu-choice' Widget
 
      TYPE ::= (menu-choice [KEYWORD ARGUMENT]... TYPE ... )
 
-   The TYPE arguments represents each possible choice.  The widgets
-value of will be the value of the chosen TYPE argument.  This widget
-will match any value that matches at least one of the specified TYPE
-arguments.
+   The TYPE argument represents each possible choice.  The widget's
+value will be that of the chosen TYPE argument.  This widget will match
+any value matching at least one of the specified TYPE arguments.
 
 `:void'
      Widget type used as a fallback when the value does not match any
@@ -761,10 +760,9 @@ The `radio-button-choice' Widget
 
      TYPE ::= (radio-button-choice [KEYWORD ARGUMENT]...  TYPE ... )
 
-   The TYPE arguments represents each possible choice.  The widgets
-value of will be the value of the chosen TYPE argument.  This widget
-will match any value that matches at least one of the specified TYPE
-arguments.
+   The TYPE argument represents each possible choice.  The widget's
+value will be that of the chosen TYPE argument.  This widget will match
+any value matching at least one of the specified TYPE arguments.
 
    The following extra properties are recognized.
 
@@ -848,8 +846,8 @@ The `toggle' Widget
 
      TYPE ::= (toggle [KEYWORD ARGUMENT]...)
 
-   The widget has two possible states, `on' and `off', which
-corresponds to a `t' or `nil' value.
+   The widget has two possible states, `on' and `off', which correspond
+to a `t' or `nil' value respectively.
 
    The following extra properties are recognized.
 
@@ -890,10 +888,10 @@ The `checklist' Widget
 
      TYPE ::= (checklist [KEYWORD ARGUMENT]...  TYPE ... )
 
-   The TYPE arguments represents each checklist item.  The widgets
-value of will be a list containing the value of each ticked TYPE
-argument.  The checklist widget will match a list whose elements all
-matches at least one of the specified TYPE arguments.
+   The TYPE arguments represents each checklist item.  The widget's
+value will be a list containing the values of all ticked TYPE
+arguments.  The checklist widget will match a list whose elements all
+match at least one of the specified TYPE arguments.
 
    The following extra properties are recognized.
 
@@ -910,11 +908,11 @@ matches at least one of the specified TYPE arguments.
           Insert a literal `%'.
 
 `:greedy'
-     Usually, a checklist will only match if the items are in the exact
+     Usually a checklist will only match if the items are in the exact
      sequence given in the specification.  By setting `:greedy' to
-     non-nil, it will allow the items to come in any sequence.
-     However, if you extract the value they will be in the sequence
-     given in the checklist. I.e. the original sequence is forgotten.
+     non-nil, it will allow the items to appear in any sequence.
+     However, if you extract the values they will be in the sequence
+     given in the checklist.  I.e. the original sequence is forgotten.
 
 `button-args'
      A list of keywords to pass to the checkboxes.  Useful for setting
@@ -1170,11 +1168,11 @@ files, you can use the following widget specification:
 t)' or `(file string string)'.
 
    This concept of inline is probably hard to understand.  It was
-certainly hard to implement so instead of confuse you more by trying to
-explain it here, I'll just suggest you meditate over it for a while.
+certainly hard to implement so instead of confusing you more by trying
+to explain it here, I'll just suggest you meditate over it for a while.
 
  - Widget: choice
-     Allows you to edit a sexp which may have one of fixed set of
+     Allows you to edit a sexp which may have one of a fixed set of
      types.  It is currently implemented with the `choice-menu' basic
      widget, and has a similar syntax.
 
@@ -1251,9 +1249,9 @@ following code:
      ;; Make WIDGET active.
      (widget-apply WIDGET :activate)
 
-   A widget is inactive if itself, or any of its ancestors (found by
+   A widget is inactive if itself or any of its ancestors (found by
 following the `:parent' link) have been deactivated.  To make sure a
-widget is really active, you must therefore activate both itself, and
+widget is really active, you must therefore activate both itself and
 all its ancestors.
 
      (while widget
@@ -1261,11 +1259,11 @@ all its ancestors.
        (setq widget (widget-get widget :parent)))
 
    You can check if a widget has been made inactive by examining the
-value of `:inactive' keyword.  If this is non-nil, the widget itself has
-been deactivated.  This is different from using the `:active' keyword,
-in that the later tell you if the widget *or* any of its ancestors have
-been deactivated.   Do not attempt to set the `:inactive' keyword
-directly.  Use the `:activate' `:deactivated' keywords instead.
+value of the `:inactive' keyword.  If this is non-nil, the widget itself
+has been deactivated.  This is different from using the `:active'
+keyword, in that the latter tells you if the widget *or* any of its
+ancestors have been deactivated.  Do not attempt to set the `:inactive'
+keyword directly.  Use the `:activate' `:deactivate' keywords instead.
 
 \1f
 File: widget.info,  Node: Defining New Widgets,  Next: Widget Browser,  Prev: Widget Properties,  Up: Top
@@ -1274,8 +1272,8 @@ Defining New Widgets
 ====================
 
    You can define specialized widgets with `define-widget'.  It allows
-you to create a shorthand for more complex widgets, including specifying
-component widgets and default new default values for the keyword
+you to create a shorthand for more complex widgets.  This includes
+specifying component widgets and new default values for the keyword
 arguments.
 
  - Function: widget-define name class doc &rest args
@@ -1286,7 +1284,7 @@ arguments.
 
      The third argument DOC is a documentation string for the widget.
 
-     After the new widget has been defined, the following two calls will
+     After the new widget has been defined the following two calls will
      create identical widgets:
 
         *      (widget-create NAME)
@@ -1294,9 +1292,9 @@ arguments.
         *      (apply widget-create CLASS ARGS)
 
 
-   Using `widget-define' does just store the definition of the widget
-type in the `widget-type' property of NAME, which is what
-`widget-create' uses.
+   Using `widget-define' just stores the definition of the widget type
+in the `widget-type' property of NAME, which is what `widget-create'
+uses.
 
    If you just want to specify defaults for keywords with no complex
 conversions, you can use `identity' as your conversion function.
@@ -1307,7 +1305,7 @@ new widgets:
      Function to convert a widget type before creating a widget of that
      type.  It takes a widget type as an argument, and returns the
      converted widget type.  When a widget is created, this function is
-     called for the widget type and all the widgets parent types, most
+     called for the widget type and all the widget's parent types, most
      derived first.
 
      The following predefined functions can be used here:
@@ -1320,7 +1318,7 @@ new widgets:
 
 `:value-to-internal'
      Function to convert the value to the internal format.  The function
-     takes two arguments, a widget and an external value, and returns
+     takes two arguments, a widget and an external value.  It returns
      the internal value.  The function is called on the present `:value'
      when the widget is created, and on any value set later with
      `widget-value-set'.
@@ -1334,8 +1332,8 @@ new widgets:
 
 `:create'
      Function to create a widget from scratch.  The function takes one
-     argument, a widget type, and create a widget of that type, insert
-     it in the buffer, and return a widget object.
+     argument, a widget type, and creates a widget of that type,
+     inserts it in the buffer, and returns a widget object.
 
 `:delete'
      Function to delete a widget.  The function takes one argument, a
@@ -1343,14 +1341,14 @@ new widgets:
 
 `:value-create'
      Function to expand the `%v' escape in the format string.  It will
-     be called with the widget as its argument.  Should insert a
-     representation of the widgets value in the buffer.
+     be called with the widget as its argument and should insert a
+     representation of the widget's value in the buffer.
 
 `:value-delete'
-     Should remove the representation of the widgets value from the
+     Should remove the representation of the widget's value from the
      buffer.  It will be called with the widget as its argument.  It
      doesn't have to remove the text, but it should release markers and
-     delete nested widgets if such has been used.
+     delete nested widgets if such have been used.
 
      The following predefined function can be used here:
 
@@ -1373,8 +1371,8 @@ new widgets:
      non-standard escapes.
 
      You should end up calling `widget-default-format-handler' to handle
-     unknown escape sequences, which will handle the `%h' and any future
-     escape sequences, as well as give an error for unknown escapes.
+     unknown escape sequences.  It will handle the `%h' and any future
+     escape sequences as well as give an error for unknown escapes.
 
 `:action'
      Function to handle user initiated events.  By default, `:notify'
@@ -1391,9 +1389,9 @@ new widgets:
      should take four arguments, WIDGET, PROMPT, VALUE, and UNBOUND and
      should return a value for widget entered by the user.  PROMPT is
      the prompt to use.  VALUE is the default value to use, unless
-     UNBOUND is non-nil in which case there are no default value.  The
+     UNBOUND is non-nil.  In this case there is no default value.  The
      function should read the value using the method most natural for
-     this widget, and does not have to check that it matches.
+     this widget and does not have to check whether it matches.
 
    If you want to define a new widget from scratch, use the `default'
 widget as its base.
@@ -1530,24 +1528,24 @@ Node: push-button\7f21155
 Node: editable-field\7f21728
 Node: text\7f23067
 Node: menu-choice\7f23365
-Node: radio-button-choice\7f24230
-Node: item\7f25809
-Node: choice-item\7f26197
-Node: toggle\7f26695
-Node: checkbox\7f27420
-Node: checklist\7f27726
-Node: editable-list\7f29170
-Node: group\7f30352
-Node: Sexp Types\7f30639
-Node: constants\7f30952
-Node: generic\7f32031
-Node: atoms\7f32564
-Node: composite\7f34511
-Node: Widget Properties\7f36977
-Node: Defining New Widgets\7f40040
-Node: Widget Browser\7f45340
-Node: Widget Minor Mode\7f46198
-Node: Utilities\7f46755
-Node: Widget Wishlist\7f47236
+Node: radio-button-choice\7f24218
+Node: item\7f25785
+Node: choice-item\7f26173
+Node: toggle\7f26671
+Node: checkbox\7f27408
+Node: checklist\7f27714
+Node: editable-list\7f29158
+Node: group\7f30340
+Node: Sexp Types\7f30627
+Node: constants\7f30940
+Node: generic\7f32019
+Node: atoms\7f32552
+Node: composite\7f34499
+Node: Widget Properties\7f36969
+Node: Defining New Widgets\7f40034
+Node: Widget Browser\7f45334
+Node: Widget Minor Mode\7f46192
+Node: Utilities\7f46749
+Node: Widget Wishlist\7f47230
 \1f
 End Tag Table
index cd678b0..40abb30 100644 (file)
@@ -9,258 +9,259 @@ END-INFO-DIR-ENTRY
 \1f
 Indirect:
 xemacs-faq.info-1: 195
-xemacs-faq.info-2: 47856
-xemacs-faq.info-3: 94965
-xemacs-faq.info-4: 144800
-xemacs-faq.info-5: 194688
+xemacs-faq.info-2: 47990
+xemacs-faq.info-3: 95703
+xemacs-faq.info-4: 145538
+xemacs-faq.info-5: 195121
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f195
-Node: Introduction\7f16711
-Node: Q1.0.1\7f20230
-Node: Q1.0.2\7f20766
-Node: Q1.0.3\7f21261
-Node: Q1.0.4\7f21523
-Node: Q1.0.5\7f22973
-Node: Q1.0.6\7f23662
-Node: Q1.0.7\7f24668
-Node: Q1.0.8\7f24917
-Node: Q1.0.9\7f25132
-Node: Q1.0.10\7f25410
-Node: Q1.0.11\7f25653
-Node: Q1.0.12\7f26110
-Node: Q1.0.13\7f26478
-Node: Q1.0.14\7f26713
-Node: Q1.1.1\7f27187
-Node: Q1.1.2\7f28149
-Node: Q1.1.3\7f28542
-Node: Q1.2.1\7f29493
-Node: Q1.2.2\7f30549
-Node: Q1.2.3\7f30983
-Node: Q1.3.1\7f31934
-Node: Q1.3.2\7f35852
-Node: Q1.3.3\7f36407
-Node: Q1.3.4\7f36648
-Node: Q1.3.5\7f37412
-Node: Q1.3.6\7f39827
-Node: Q1.3.7\7f41322
-Node: Q1.4.1\7f42257
-Node: Q1.4.2\7f43119
-Node: Q1.4.3\7f43460
-Node: Q1.4.4\7f43879
-Node: Q1.4.5\7f45419
-Node: Q1.4.6\7f45723
-Node: Q1.4.7\7f46731
-Node: Installation\7f47856
-Node: Q2.0.1\7f50262
-Node: Q2.0.2\7f51135
-Node: Q2.0.3\7f58338
-Node: Q2.0.4\7f59636
-Node: Q2.0.5\7f60228
-Node: Q2.0.6\7f60596
-Node: Q2.0.7\7f60977
-Node: Q2.0.8\7f61358
-Node: Q2.0.9\7f62936
-Node: Q2.0.10\7f64374
-Node: Q2.0.11\7f65218
-Node: Q2.0.12\7f66159
-Node: Q2.0.13\7f67682
-Node: Q2.0.14\7f68340
-Node: Q2.1.1\7f68908
-Node: Q2.1.2\7f71650
-Node: Q2.1.3\7f72827
-Node: Q2.1.4\7f74120
-Node: Q2.1.5\7f74919
-Node: Q2.1.6\7f75281
-Node: Q2.1.7\7f75758
-Node: Q2.1.8\7f76111
-Node: Q2.1.9\7f77627
-Node: Q2.1.10\7f78049
-Node: Q2.1.11\7f78806
-Node: Q2.1.12\7f79671
-Node: Q2.1.13\7f80626
-Node: Q2.1.14\7f81657
-Node: Q2.1.15\7f82768
-Node: Q2.1.16\7f88726
-Node: Q2.1.17\7f89420
-Node: Q2.1.18\7f90017
-Node: Q2.1.19\7f91814
-Node: Q2.1.20\7f92344
-Node: Q2.1.21\7f92726
-Node: Q2.1.22\7f93016
-Node: Q2.1.23\7f94313
-Node: Customization\7f94965
-Node: Q3.0.1\7f99852
-Node: Q3.0.2\7f100558
-Node: Q3.0.3\7f101122
-Node: Q3.0.4\7f101539
-Node: Q3.0.5\7f102372
-Node: Q3.0.6\7f103153
-Node: Q3.0.7\7f103733
-Node: Q3.0.8\7f104397
-Node: Q3.0.9\7f105243
-Node: Q3.1.1\7f105804
-Node: Q3.1.2\7f106541
-Node: Q3.1.3\7f106972
-Node: Q3.1.4\7f107557
-Node: Q3.1.5\7f108093
-Node: Q3.1.6\7f108477
-Node: Q3.1.7\7f109158
-Node: Q3.1.8\7f111382
-Node: Q3.2.1\7f111924
-Node: Q3.2.2\7f113332
-Node: Q3.2.3\7f114131
-Node: Q3.2.4\7f114733
-Node: Q3.2.5\7f115767
-Node: Q3.2.6\7f116234
-Node: Q3.3.1\7f117196
-Node: Q3.3.2\7f117589
-Node: Q3.3.3\7f118220
-Node: Q3.3.4\7f118601
-Node: Q3.3.5\7f119695
-Node: Q3.4.1\7f121189
-Node: Q3.4.2\7f121832
-Node: Q3.5.1\7f122344
-Node: Q3.5.2\7f123798
-Node: Q3.5.3\7f124216
-Node: Q3.5.4\7f125056
-Node: Q3.5.5\7f125888
-Node: Q3.5.6\7f127028
-Node: Q3.5.7\7f128018
-Node: Q3.5.8\7f129370
-Node: Q3.5.9\7f130117
-Node: Q3.5.10\7f130897
-Node: Q3.5.11\7f131533
-Node: Q3.6.1\7f132086
-Node: Q3.6.2\7f132826
-Node: Q3.6.3\7f133254
-Node: Q3.7.1\7f133754
-Node: Q3.7.2\7f134642
-Node: Q3.7.3\7f135301
-Node: Q3.7.4\7f135723
-Node: Q3.7.5\7f136066
-Node: Q3.7.6\7f136534
-Node: Q3.7.7\7f137249
-Node: Q3.7.8\7f138269
-Node: Q3.8.1\7f138688
-Node: Q3.8.2\7f139148
-Node: Q3.8.3\7f139611
-Node: Q3.8.4\7f140217
-Node: Q3.8.5\7f140936
-Node: Q3.9.1\7f141721
-Node: Q3.9.2\7f142661
-Node: Q3.9.3\7f143259
-Node: Q3.9.4\7f143921
-Node: Q3.10.1\7f144800
-Node: Q3.10.2\7f145618
-Node: Q3.10.3\7f146399
-Node: Q3.10.4\7f147127
-Node: Q3.10.5\7f147510
-Node: Subsystems\7f148520
-Node: Q4.0.1\7f151005
-Node: Q4.0.2\7f151530
-Node: Q4.0.3\7f152088
-Node: Q4.0.4\7f152409
-Node: Q4.0.5\7f152651
-Node: Q4.0.6\7f152882
-Node: Q4.0.7\7f153463
-Node: Q4.0.8\7f153788
-Node: Q4.0.9\7f155015
-Node: Q4.0.10\7f157053
-Node: Q4.0.11\7f157507
-Node: Q4.0.12\7f158357
-Node: Q4.1.1\7f159330
-Node: Q4.1.2\7f159733
-Node: Q4.1.3\7f160060
-Node: Q4.2.1\7f160369
-Node: Q4.2.2\7f160999
-Node: Q4.2.3\7f161239
-Node: Q4.2.4\7f161783
-Node: Q4.3.1\7f162436
-Node: Q4.3.2\7f163020
-Node: Q4.3.3\7f164501
-Node: Q4.3.4\7f164773
-Node: Q4.3.5\7f165450
-Node: Q4.4.1\7f166078
-Node: Q4.4.2\7f167564
-Node: Q4.5.1\7f168768
-Node: Q4.6.1\7f169537
-Node: Q4.7.1\7f174797
-Node: Q4.7.2\7f175752
-Node: Q4.7.3\7f176049
-Node: Q4.7.4\7f176395
-Node: Q4.7.5\7f177279
-Node: Q4.7.6\7f178921
-Node: Miscellaneous\7f179515
-Node: Q5.0.1\7f182935
-Node: Q5.0.2\7f183669
-Node: Q5.0.3\7f184523
-Node: Q5.0.4\7f185225
-Node: Q5.0.5\7f186164
-Node: Q5.0.6\7f188144
-Node: Q5.0.7\7f188801
-Node: Q5.0.8\7f189406
-Node: Q5.0.9\7f189925
-Node: Q5.0.10\7f190439
-Node: Q5.0.11\7f190687
-Node: Q5.0.12\7f191248
-Node: Q5.0.13\7f192165
-Node: Q5.0.14\7f192849
-Node: Q5.0.15\7f193614
-Node: Q5.0.16\7f193911
-Node: Q5.0.17\7f194423
-Node: Q5.0.18\7f194688
-Node: Q5.0.19\7f195214
-Node: Q5.0.20\7f195638
-Node: Q5.1.1\7f196553
-Node: Q5.1.2\7f198622
-Node: Q5.1.3\7f199358
-Node: Q5.1.4\7f202752
-Node: Q5.1.5\7f203287
-Node: Q5.1.6\7f205381
-Node: Q5.1.7\7f206770
-Node: Q5.1.8\7f208371
-Node: Q5.1.9\7f208923
-Node: Q5.1.10\7f209808
-Node: Q5.1.11\7f210939
-Node: Q5.2.1\7f211488
-Node: Q5.2.2\7f212059
-Node: Q5.2.3\7f212476
-Node: Q5.2.4\7f212711
-Node: Q5.3.1\7f213621
-Node: Q5.3.2\7f214842
-Node: Q5.3.3\7f215618
-Node: Q5.3.4\7f216102
-Node: Q5.3.5\7f216769
-Node: Q5.3.6\7f217638
-Node: Q5.3.7\7f217883
-Node: Q5.3.8\7f220073
-Node: Q5.3.9\7f220320
-Node: Q5.3.10\7f221273
-Node: Q5.3.11\7f223357
-Node: Q5.3.12\7f224906
-Node: MS Windows\7f226180
-Node: Q6.0.1\7f227511
-Node: Q6.0.2\7f228258
-Node: Q6.0.3\7f228723
-Node: Q6.0.4\7f229003
-Node: Q6.1.1\7f231284
-Node: Q6.1.2\7f232155
-Node: Q6.1.3\7f232436
-Node: Q6.1.4\7f232718
-Node: Q6.1.5\7f233096
-Node: Q6.1.6\7f233928
-Node: Q6.2.1\7f234512
-Node: Q6.2.2\7f235413
-Node: Q6.2.3\7f235814
-Node: Q6.3.1\7f236103
-Node: Q6.3.2\7f237197
-Node: Q6.3.3\7f240378
-Node: Current Events\7f240632
-Node: Q7.0.1\7f241286
-Node: Q7.0.2\7f241925
-Node: Q7.0.3\7f242999
-Node: Q7.0.4\7f243227
+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
 \1f
 End Tag Table
index 6d7aef0..ccd10c3 100644 (file)
@@ -131,6 +131,7 @@ Trouble Shooting:
 * 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)
 
 Customization and Options
 
@@ -375,24 +376,21 @@ wondering what to do next.  It is also useful as a reference to
 available resources.
 
    The previous maintainer of the FAQ was Anthony Rossini
-<rossini@stat.sc.edu>, who started it, after getting tired of hearing
-JWZ complain about repeatedly having to answer questions.  Ben Wing
-<ben@xemacs.org> and Chuck Thompson <cthomp@xemacs.org>, the principal
-authors of XEmacs, then took over and Ben did a massive update
-reorganizing the whole thing.  At which point Anthony took back over,
-but then had to give it up again.  Some of the other contributors to
-this FAQ are listed later in this document.
+<rossini@biostat.washington.edu>, who started it, after getting tired
+of hearing JWZ complain about repeatedly having to answer questions.
+Ben Wing <ben@xemacs.org> and Chuck Thompson <cthomp@xemacs.org>, the
+principal authors of XEmacs, then took over and Ben did a massive
+update reorganizing the whole thing.  At which point Anthony took back
+over, but then had to give it up again.  Some of the other contributors
+to this FAQ are listed later in this document.
 
    The previous version was converted to hypertext format, and edited by
 Steven L. Baur <steve@xemacs.org>.  It was converted back to texinfo by
-Hrvoje Niksic <hniksic@xemacs.org>.
-
-   The FAQ was then maintained by Andreas Kaempf <andreas@sccon.com>,
-who passed it on to Christian Nyb/o <faq@xemacs.org>, the current FAQ
-maintainer.
+Hrvoje Niksic <hniksic@xemacs.org>.  The FAQ was then maintained by
+Andreas Kaempf <andreas@sccon.com>, who passed it on to ChristianNyb/o.
 
    If you notice any errors or items which should be added or amended to
-this FAQ please send email to Christian Nyb/o <faq@xemacs.org>. Include
+this FAQ please send email to Sandra Wambold <faq@xemacs.org>.  Include
 `XEmacs FAQ' on the Subject: line.
 
 * Menu:
@@ -660,8 +658,10 @@ Q1.1.1: What is the FAQ editorial policy?
 -----------------------------------------
 
    The FAQ is actively maintained and modified regularly.  All links
-should be up to date.  All submissions are welcome.  E-mail submissions
-to XEmacs FAQ maintainers <faq@xemacs.org>.
+should be up to date.  Unfortunately, some of the information is out of
+date - a situation which the FAQ maintainer is working on.  All
+submissions are welcome, please e-mail submissions to XEmacs FAQ
+maintainers <faq@xemacs.org>.
 
    Please make sure that `XEmacs FAQ' appears on the Subject: line.  If
 you think you have a better way of answering a question, or think a
index 2ea10ef..21af251 100644 (file)
@@ -57,6 +57,7 @@ Trouble Shooting:
 * 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
@@ -1189,7 +1190,7 @@ Q2.1.22: XEmacs seems to take a really long time to do some things
      or in some other strange cases.
 
 \1f
-File: xemacs-faq.info,  Node: Q2.1.23,  Prev: Q2.1.22,  Up: Installation
+File: xemacs-faq.info,  Node: Q2.1.23,  Next: Q2.1.24,  Prev: Q2.1.22,  Up: Installation
 
 Q2.1.23:  Movemail on Linux does not work for XEmacs 19.15 and later.
 ---------------------------------------------------------------------
@@ -1206,3 +1207,19 @@ and 20.x.  I am using Linux.
 
           #define MAIL_USE_FLOCK
 
+\1f
+File: xemacs-faq.info,  Node: Q2.1.24,  Prev: Q2.1.23,  Up: Installation
+
+Q2.1.24:  XEmacs won't start without network. (NEW)
+---------------------------------------------------
+
+   Q2.1.23:  Movemail on Linux does not work for XEmacs 19.15 and later.
+
+   If XEmacs starts when you're on the network, but fails when you're
+not on the network, you may be missing a "localhost" entry in your
+`/etc/hosts' file.  The file should contain an entry like:
+
+     127.0.0.1        localhost
+
+   Add that line, and XEmacs will be happy.
+
index ae4dbc1..603aea1 100644 (file)
@@ -1,3 +1,19 @@
+1999-12-24  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.25 is released.
+
+1999-12-21  Martin Buchholz  <martin@xemacs.org>
+
+       * fakemail.c (cuserid): ((expr)) ==> (expr)
+
+       * fakemail.c (xmalloc): ANSIfy.
+
+1999-12-14  Martin Buchholz  <martin@xemacs.org>
+
+       * config.values.sh: Only update config.values.in if changed.
+       No external dependencies except perl.
+       No temporary files.
+
 1999-12-14  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.24 is released.
index fc22128..f723043 100644 (file)
@@ -1,4 +1,7 @@
-#! /bin/sh
+: #-*- Perl -*-
+eval 'exec perl -w -S $0 ${1+"$@"}' # Portability kludge
+    if 0;
+
 # config.values.sh --- create config.values.in from ../configure
 
 # Author:      Martin Buchholz
 ## by an XEmacs Maintainer (consider yourself so blessed, if you are
 ## actually reading this commentary).
 ##
-if test ! -r ./configure; then
-  cd ..
-  if test ! -r ./configure; then
-    echo "Can't find configure!";
-    exit 1;
-  fi
-fi
-
-exec < ./configure > "lib-src/config.values.in"
-cat <<\EOF
-;;; Do not edit this file!
+
+if (! -r "./configure") {
+  chdir ".." or die "Can't chdir: $!";
+  if (! -r "./configure") {
+    die "Can't find configure!";
+  }
+}
+
+sub FileContents {
+  local $/ = undef; # Slurp mode
+  open (FILE, "< $_[0]") or die "$_[0]: $!";
+  my $contents = <FILE>;
+  close FILE or die "$_[0]: $!";
+  return $contents;
+}
+
+my $configure_contents = FileContents "./configure";
+my $cvi_contents = FileContents "lib-src/config.values.in";
+
+my $new_cvi_contents =
+";;; Do not edit this file!
 ;;; This file was automatically generated, by the config.values.sh script,
 ;;; from configure, which was itself automatically generated from configure.in.
 ;;;
@@ -62,15 +75,27 @@ cat <<\EOF
 ;;; Variables defined in configure by AC_SUBST follow:
 ;;; (These are used in Makefiles)
 
-EOF
-sed -n '/^s%@\([A-Za-z_][A-Za-z_]*\)@%\$\1%g$/ {
-  s/^s%@\([A-Za-z_][A-Za-z_]*\)@%\$\1%g$/\1 "@\1@"/
-  p
-}' | \
-sort -u
-cat <<\EOF
+";
+
+my %done;
+for my $var (sort { $a cmp $b }
+            $configure_contents =~
+            /^s\%\@([A-Za-z0-9_]+)\@\%\$[A-Za-z0-9_]+\%g/mg) {
+  $new_cvi_contents .= "$var \"\@$var\@\"\n" unless exists $done{$var};
+  $done{$var} = 1;
+}
 
+$new_cvi_contents .= "
 ;;; Variables defined in configure by AC_DEFINE and AC_DEFINE_UNQUOTED follow:
 ;;; (These are used in C code)
 
-EOF
+";
+
+if ($cvi_contents ne $new_cvi_contents) {
+  unlink "lib-src/config.values.in";
+  open (CVI, "> lib-src/config.values.in")
+    or die "lib-src/config.values.in: $!";
+  print CVI $new_cvi_contents;
+  close CVI
+    or die "lib-src/config.values.in: $!";
+}
index 5397d7c..d3e4786 100644 (file)
@@ -162,7 +162,7 @@ extern struct passwd *getpwuid ();
 extern unsigned short geteuid ();
 static struct passwd *my_entry;
 #define cuserid(s)                             \
-(my_entry = getpwuid (((int) geteuid ())),     \
+(my_entry = getpwuid ((int) geteuid ()),       \
  my_entry->pw_name)
 #endif
 \f
@@ -193,7 +193,7 @@ fatal (CONST char *s1, CONST char *s2)
 static char *
 xmalloc (size_t size)
 {
-  char *result = malloc (((unsigned) size));
+  char *result = (char *) malloc (size);
   if (result == ((char *) NULL))
     fatal ("virtual memory exhausted", (char *) 0);
   return result;
index 610a833..681cb60 100644 (file)
@@ -1,3 +1,60 @@
+1999-12-24  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.25 is released.
+
+1999-12-24  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * hyper-apropos.el (hyper-apropos): Toggle
+       hyper-apropos-programming-apropos correctly.
+       Set REGEXP when user accepts default value.
+
+1999-12-22  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * minibuf.el (read-from-minibuffer): Bind minibuffer-default.
+       (read-file-name-2): Use DEFAULT argument of read-from-minibuffer.
+
+1999-12-22  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * mule/mule-category.el (undefined-category-designator):
+       Return char instead of character.  Search for undefined one.
+       (describe-category): Use with-displaying-help-buffer.
+
+1999-12-21  Martin Buchholz  <martin@xemacs.org>
+
+       * 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).
+
+       * byte-optimize.el (byte-compile-butlast): Remove.  Use butlast instead.
+
+       * byte-optimize.el (byte-optimize-char-before): New function.
+       Remove performance penalty for using (char-before) instead of (char-after).
+
+1999-12-20  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * mule/mule-category.el (char-category-list): Return character
+       instead of integer.
+
+1999-12-17  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * minibuf.el (read-buffer): Check default is buffer object.
+
+1999-11-25  Andy Piper  <andy@xemacs.org>
+
+       * cus-edit.el (custom-buffer-create-buttons): Use native widgets
+       for buttons.
+
+1999-12-16  Andreas Jaeger  <aj@suse.de>
+
+       * package-get.el (package-get-maybe-save-index): Fixed typo.
+       Patch by Jeff Miller <jmiller@smart.net>.
+
+1999-12-13  Charles G Waldman  <cgw@alum.mit.edu>
+
+       * 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>
 
        * XEmacs 21.2.24 is released.
@@ -28,7 +85,7 @@
        completing-read returns.
        (describe-variable): Ditto.
 
-1999-11-16  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-11-16  Adrian Aichner  <adrian@xemacs.org>
 
        * hyper-apropos.el (hyper-apropos-this-symbol): Handle
        `hyper-apropos-help-mode' here to find symbol to customize
 
        * files.el (recover-file): Don't use ls under windows for revert buffer. 
 
-1999-09-25  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-09-25  Adrian Aichner  <adrian@xemacs.org>
 
        * package-get.el (package-get-download-menu): Make menu really
        toggle download sites.
        Installation.el needs to be loaded before `dump-paths', otherwise
        the dumping process won't find it.
 
-1999-03-13  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-03-13  Adrian Aichner  <adrian@xemacs.org>
 
        * dumped-lisp.el (preloaded-file-list): Load Installation.el after
        subr so that we can use `replace-in-string' in Installation.el to
        * x-faces.el (x-init-face-from-resources):
        Only set fonts in the 'x locale.
 
-1999-03-04  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-03-04  Adrian Aichner  <adrian@xemacs.org>
 
        * package-ui.el (pui-install-selected-packages): Don't throw on
        `package-admin-delete-binary-package' returning nil since it's
        * dumped-lisp.el (preloaded-file-list): Core mule files moved out
        of mule-base into lisp/mule.
 
-1999-02-10  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-02-10  Adrian Aichner  <adrian@xemacs.org>
 
        * process.el (exec-to-string): Use `shell-command-switch' in place
        of hard-wired "-c" (for WindowsNT).
        * about.el (about-url-alist): Update my entry.
        (xemacs-hackers): Ditto.
 
-1999-01-14  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-01-14  Adrian Aichner  <adrian@xemacs.org>
 
        * buffer.el (switch-to-buffer): Fixing documentation.
        * minibuf.el (minibuffer-completion-table): ditto.
 
        * subr.el (buffer-substring-no-properties): Comment out.
 
-1998-11-07  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-11-07  Adrian Aichner  <adrian@xemacs.org>
 
        * msw-faces.el (mswindows-find-smaller-font): Turning font names
          into font instances first, like `x-frob-font-size' does.
        * ldap.el (ldap-host-parameters-alist): New name of
        `ldap-host-parameters-plist'
 
-1998-06-26  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-06-26  Adrian Aichner  <adrian@xemacs.org>
 
        * package-get.el: Using (require 'package-get-base), now that it
        provides itself.  Consequently removed all instances of (load
        (font-lock-match-c++-style-declaration-item-and-skip-to-next):
        Let declaration items contain non-word symbol characters.
 
-1998-06-15  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-06-15  Adrian Aichner  <adrian@xemacs.org>
 
        * package-get.el (package-get-package-provider): Added autoload
        cookie.  Loading "package-get-base.el" in ALL functions that use
@@ -4015,7 +4072,7 @@ Wed May 27, 1998  Darryl Okahata  <darrylo@sr.hp.com>
 
        * dumped-lisp.el (preloaded-file-list): Added msw-mouse.el
 
-1998-05-17  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-05-17  Adrian Aichner  <adrian@xemacs.org>
 
        * itimer.el (activate-itimer): Fixed usage of integers
        as argument to `concat'.
index 5e33dc5..66ef27f 100644 (file)
@@ -2,8 +2,8 @@
 
 ;; Copyright (C) 1997 Adrian Aichner
 
-;; Author: Adrian Aichner, Teradyne GmbH Munich <aichner@ecf.teradyne.com>
-;; Date: Sun., Apr. 20, 1997.
+;; Author: Adrian Aichner <adrian@xemacs.org>
+;; Date: Sun., Apr. 20, 1997, 1998, 1999.
 ;; Version: 1.35
 ;; Keywords: internal
 
index 9d34537..4c57efb 100644 (file)
   (setq form (byte-optimize-delay-constants-math form 1 '+))
   (if (memq 0 form) (setq form (delq 0 (copy-sequence form))))
   ;;(setq form (byte-optimize-associative-two-args-math form))
-  (cond ((null (cdr form))
-        (condition-case ()
-            (eval form)
-          (error form)))
-
-       ;; `add1' and `sub1' are a marginally fewer instructions
-       ;; than `plus' and `minus', so use them when possible.
-       ((and (null (nthcdr 3 form))
-             (eq (nth 2 form) 1))
-        (list '1+ (nth 1 form)))       ; (+ x 1)  -->  (1+ x)
-       ((and (null (nthcdr 3 form))
-             (eq (nth 1 form) 1))
-        (list '1+ (nth 2 form)))       ; (+ 1 x)  -->  (1+ x)
-       ((and (null (nthcdr 3 form))
-             (eq (nth 2 form) -1))
-        (list '1- (nth 1 form)))       ; (+ x -1)  -->  (1- x)
-       ((and (null (nthcdr 3 form))
-             (eq (nth 1 form) -1))
-        (list '1- (nth 2 form)))       ; (+ -1 x)  -->  (1- x)
-
-;;; It is not safe to delete the function entirely
-;;; (actually, it would be safe if we know the sole arg
-;;; is not a marker).
-;;     ((null (cdr (cdr form))) (nth 1 form))
-       (t form)))
+  (case (length (cdr form))
+    ((0)
+     (condition-case ()
+        (eval form)
+       (error form)))
+
+    ;; `add1' and `sub1' are a marginally fewer instructions
+    ;; than `plus' and `minus', so use them when possible.
+    ((2)
+     (cond
+      ((eq (nth 1 form)  1) `(1+ ,(nth 2 form))) ; (+ 1 x)   -->  (1+ x)
+      ((eq (nth 2 form)  1) `(1+ ,(nth 1 form))) ; (+ x 1)   -->  (1+ x)
+      ((eq (nth 1 form) -1) `(1- ,(nth 2 form))) ; (+ -1 x)  -->  (1- x)
+      ((eq (nth 2 form) -1) `(1- ,(nth 1 form))) ; (+ x -1)  -->  (1- x)
+      (t form)))
+
+    ;; It is not safe to delete the function entirely
+    ;; (actually, it would be safe if we know the sole arg
+    ;; is not a marker).
+    ;; ((null (cdr (cdr form))) (nth 1 form))
+    (t form)))
 
 (defun byte-optimize-minus (form)
   ;; Put constants at the end, except the last constant.
                    (setcar form (list '+ (car form) (car form)))))
                 (form))))))
 
-(defsubst byte-compile-butlast (form)
-  (nreverse (cdr (reverse form))))
-
 (defun byte-optimize-divide (form)
   (setq form (byte-optimize-delay-constants-math form 2 '*))
   (let ((last (car (reverse (cdr (cdr form))))))
                          (error nil)))
                   (setq form (list 'progn (/ (nth 1 form) last)))))
              ((= last 1)
-              (setq form (byte-compile-butlast form)))
+              (setq form (butlast form)))
              ((numberp (nth 1 form))
               (setq form (cons (car form)
                                (cons (/ (nth 1 form) last)
-                                     (byte-compile-butlast (cdr (cdr form)))))
+                                     (butlast (cdr (cdr form)))))
                     last nil))))
     (cond 
 ;;;      ((null (cdr (cdr form)))
           (append '(progn) (cdr (cdr form)) '(0)))
          ((eq last -1)
           (list '- (if (nthcdr 3 form)
-                       (byte-compile-butlast form)
+                       (butlast form)
                      (nth 1 form))))
          (form))))
 
 (put 'if    'byte-optimizer 'byte-optimize-if)
 (put 'while 'byte-optimizer 'byte-optimize-while)
 
+;; Remove any reason for avoiding `char-before'.
+(defun byte-optimize-char-before (form)
+  `(char-after (1- ,(or (nth 1 form) '(point))) ,@(cdr (cdr form))))
+     
+(put 'char-before 'byte-optimizer 'byte-optimize-char-before)
+
 ;; byte-compile-negation-optimizer lives in bytecomp.el
 ;(put '/= 'byte-optimizer 'byte-compile-negation-optimizer)
 (put 'atom 'byte-optimizer 'byte-compile-negation-optimizer)
index 897dd49..983bace 100644 (file)
@@ -1033,7 +1033,6 @@ This works by calling the function specified by
   (widget-insert "\nOperate on everything in this buffer:\n ")
   (widget-create 'push-button
                 :tag "Set"
-                :tag-glyph '("set-up" "set-down")
                 :help-echo "\
 Make your editing in this buffer take effect for this session"
                 :action (lambda (widget &optional event)
@@ -1041,7 +1040,6 @@ Make your editing in this buffer take effect for this session"
   (widget-insert " ")
   (widget-create 'push-button
                 :tag "Save"
-                :tag-glyph '("save-up" "save-down")
                 :help-echo "\
 Make your editing in this buffer take effect for future Emacs sessions"
                 :action (lambda (widget &optional event)
@@ -1077,7 +1075,6 @@ Reset all values in this buffer to their standard settings"
   (widget-insert "  ")
   (widget-create 'push-button
                 :tag "Done"
-                :tag-glyph '("done-up" "done-down")
                 :help-echo "Remove the buffer"
                 :action (lambda (widget &optional event)
                           (Custom-buffer-done)))
index e3760a7..e643925 100644 (file)
@@ -2213,19 +2213,21 @@ After saving the buffer, run `after-save-hook'."
              (error "Save not confirmed"))
          (save-restriction
            (widen)
-           (and (> (point-max) 1)
-                (/= (char-after (1- (point-max))) ?\n)
-                (not (and (eq selective-display t)
-                          (= (char-after (1- (point-max))) ?\r)))
-                (or (eq require-final-newline t)
-                    (and require-final-newline
-                         (y-or-n-p
-                          (format "Buffer %s does not end in newline.  Add one? "
-                                  (buffer-name)))))
-                (save-excursion
-                  (goto-char (point-max))
-                  (insert ?\n)))
-           ;;
+
+           ;; Add final newline if required.  See `require-final-newline'.
+           (when (and (not (eq (char-before (point-max)) ?\n)) ; common case
+                      (char-before (point-max))                ; empty buffer?
+                      (not (and (eq selective-display t)
+                                (eq (char-before (point-max)) ?\r)))
+                      (or (eq require-final-newline t)
+                          (and require-final-newline
+                               (y-or-n-p
+                                (format "Buffer %s does not end in newline.  Add one? "
+                                        (buffer-name))))))
+             (save-excursion
+               (goto-char (point-max))
+               (insert ?\n)))
+
            ;; Run the write-file-hooks until one returns non-null.
            ;; Bind after-save-hook to nil while running the
            ;; write-file-hooks so that if this function is called
index 8da403c..04bf42a 100644 (file)
@@ -348,11 +348,13 @@ visual screen.  Totally visible frames are preferred.  If none found, return nil
               ;; In case of an error, write the description to the
               ;; client, and then signal it.
               (error (setq gnuserv-string "")
-                     (gnuserv-write-to-client gnuserv-current-client oops)
+                     (when gnuserv-current-client
+                       (gnuserv-write-to-client gnuserv-current-client oops))
                      (setq gnuserv-current-client nil)
                      (signal (car oops) (cdr oops)))
               (quit (setq gnuserv-string "")
-                    (gnuserv-write-to-client gnuserv-current-client oops)
+                    (when gnuserv-current-client
+                      (gnuserv-write-to-client gnuserv-current-client oops))
                     (setq gnuserv-current-client nil)
                     (signal 'quit nil)))
             (setq gnuserv-string "")))
index af739d8..dd3397a 100644 (file)
@@ -243,16 +243,22 @@ See also `hyper-apropos-mode'."
       (setq hyper-apropos-prev-wconfig (current-window-configuration)))
   (if (string= "" regexp)
       (if (get-buffer hyper-apropos-apropos-buf)
-         (if toggle-apropos
-             (hyper-apropos-toggle-programming-flag)
-           (message "Using last search results"))
+         (progn
+           (setq regexp hyper-apropos-last-regexp)
+           (if toggle-apropos
+               (hyper-apropos-toggle-programming-flag)
+             (message "Using last search results")))
        (error "Be more specific..."))
     (set-buffer (get-buffer-create hyper-apropos-apropos-buf))
     (setq buffer-read-only nil)
     (erase-buffer)
     (if toggle-apropos
-       (set (make-local-variable 'hyper-apropos-programming-apropos)
-            (not (default-value 'hyper-apropos-programming-apropos))))
+       (if (local-variable-p 'hyper-apropos-programming-apropos
+                             (current-buffer))
+           (setq hyper-apropos-programming-apropos
+                 (not hyper-apropos-programming-apropos))
+         (set (make-local-variable 'hyper-apropos-programming-apropos)
+              (not (default-value 'hyper-apropos-programming-apropos)))))
     (let ((flist (apropos-internal regexp
                                   (if hyper-apropos-programming-apropos
                                       #'fboundp
index 7b83a3c..9f26bc5 100644 (file)
@@ -415,7 +415,8 @@ See also the variable completion-highlight-first-word-only for control over
         ;; `M-x doctor' makes history a local variable, and thus
         ;; our binding above is buffer-local and doesn't apply
         ;; once we switch buffers!!!!  We demand better scope!
-        (_history_ history))
+        (_history_ history)
+        (minibuffer-default default))
     (unwind-protect
          (progn
            (set-buffer (reset-buffer buffer))
@@ -1445,7 +1446,9 @@ only existing buffer names are allowed."
     (while (progn
              (setq result (completing-read prompt alist nil require-match
                                           nil 'buffer-history 
-                                          (if default (buffer-name default))))
+                                          (if (bufferp default)
+                                              (buffer-name default)
+                                            default)))
              (cond ((not (equal result ""))
                     nil)
                    ((not require-match)
@@ -1548,8 +1551,9 @@ only existing buffer names are allowed."
                                      read-file-name-map
                                    read-file-name-must-match-map)
                                  nil
-                                 history))
-             ))
+                                 history
+                                 nil
+                                 default))))
 ;;;     ;; Kludge!  Put "/foo/bar" on history rather than "/default//foo/bar"
 ;;;     (let ((hist (cond ((not history) 'minibuffer-history)
 ;;;                       ((consp history) (car history))
index 31bc242..160c91d 100644 (file)
@@ -69,8 +69,8 @@ Categories are given by their designators."
   "Return an undefined category designator, or nil if there are none."
   (let ((a 32) found)
     (while (and (< a 127) (not found))
-      (if (gethash a defined-category-hashtable)
-         (setq found a))
+      (unless (gethash a defined-category-hashtable)
+       (setq found (make-char 'ascii a)))
       (setq a (1+ a)))
     found))
 
@@ -117,7 +117,7 @@ The categories are given by their designators."
       (let ((a 32) list)
        (while (< a 127)
          (if (= 1 (aref vec (- a 32)))
-             (setq list (cons a list)))
+             (setq list (cons (make-char 'ascii a) list)))
          (setq a (1+ a)))
        (nreverse list)))))
 
@@ -137,8 +137,9 @@ The categories are given by their designators."
   "Describe the category specifications in the category table.
 The descriptions are inserted in a buffer, which is then displayed."
   (interactive)
-  (with-output-to-temp-buffer "*Help*"
-    (describe-category-table (category-table) standard-output)))
+  (with-displaying-help-buffer
+   (lambda ()
+     (describe-category-table (category-table) standard-output))))
 
 (defun describe-category-table (table stream)
   (let (first-char
index ab3654e..c308d83 100644 (file)
@@ -371,7 +371,7 @@ if different."
                            (md5 (current-buffer)))))
        (unless (and location (file-writable-p location))
          (setq location package-get-user-index-filename))
-       (when (y-or-n-p (concat "Update package index in" location "? "))
+       (when (y-or-n-p (concat "Update package index in " location "? "))
          (write-file location))))))
       
 
index 545f2c0..77bcc4c 100644 (file)
@@ -1,3 +1,39 @@
+1999-12-24  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.25 is released.
+
+1999-12-23  Andy Piper  <andy@xemacs.org>
+
+       * lwlib.c (lw_copy_widget_value_args): don't create empty
+       widget_args just because someone might use them later. This makes
+       all widgets look like they've changed.
+
+1999-12-22  Andy Piper  <andy@xemacs.org>
+
+       * xlwtabs.c: Fix for X11R5 from Damon Lipparelli
+       <lipp@primus.com>.
+
+1999-12-21  Martin Buchholz  <martin@xemacs.org>
+
+       * xlwscrollbar.c (seg_pixel_sizes): ((expr)) ==> (expr)
+
+1999-12-12  Daniel Pittman  <daniel@danann.net>
+
+       * lwlib-Xaw.c: 
+       * xlwcheckbox.c:
+       * xlwgauge.h:
+       * xlwgaugeP.h:
+       * xlwradio.c:
+       * xlwradio.h:
+       * xlwradioP.h:
+       Clean up Athena widget support:
+       - Athena headers now use dynamic include paths.
+
+1999-12-08  Andy Piper  <andy@xemacs.org>
+
+       * xlwtabs.c: sync with Tabs 2.2.
+       * xlwtabP.h: ditto.
+
 1999-12-14  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.24 is released.
index 84c6efe..d94cb09 100644 (file)
@@ -29,4 +29,12 @@ Boston, MA 02111-1307, USA.  */
 #undef NEED_ATHENA
 #undef NEED_LUCID
 
+/* 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>
+
+
 #endif /* _LWLIB_CONFIG_H_ */
index b19dd8c..77aeb48 100644 (file)
@@ -33,21 +33,21 @@ Boston, MA 02111-1307, USA.  */
 #include <X11/Shell.h>
 
 #ifdef LWLIB_SCROLLBARS_ATHENA
-#include <X11/Xaw/Scrollbar.h>
+#include ATHENA_INCLUDE(Scrollbar.h)
 #endif
 #ifdef LWLIB_DIALOGS_ATHENA
-#include <X11/Xaw/Dialog.h>
-#include <X11/Xaw/Form.h>
-#include <X11/Xaw/Command.h>
-#include <X11/Xaw/Label.h>
+#include ATHENA_INCLUDE(Dialog.h)
+#include ATHENA_INCLUDE(Form.h)
+#include ATHENA_INCLUDE(Command.h)
+#include ATHENA_INCLUDE(Label.h)
 #endif
 #ifdef LWLIB_WIDGETS_ATHENA
-#include <X11/Xaw/Toggle.h>
+#include ATHENA_INCLUDE(Toggle.h)
 #include "xlwradio.h"
 #include "xlwcheckbox.h"
 #include "xlwgauge.h"
 #ifndef NEED_MOTIF
-#include <X11/Xaw/AsciiText.h>
+#include ATHENA_INCLUDE(AsciiText.h)
 #endif
 #endif
 #include <X11/Xatom.h>
@@ -126,8 +126,8 @@ void
 xaw_update_one_widget (widget_instance *instance, Widget widget,
                       widget_value *val, Boolean deep_p)
 {
-  if (val->nargs)
-    XtSetValues (widget, val->args, val->nargs);
+  if (val->args && val->args->nargs)
+    XtSetValues (widget, val->args->args, val->args->nargs);
 
   if (0)
     ;
@@ -146,7 +146,7 @@ xaw_update_one_widget (widget_instance *instance, Widget widget,
       }
 #endif /* LWLIB_DIALOGS_ATHENA */
 #ifdef LWLIB_WIDGETS_ATHENA
-  else if (XtClass (widget) == labelWidgetClass)
+  else if (XtIsSubclass (widget, labelWidgetClass))
       {
        Arg al [1];
        XtSetArg (al [0], XtNlabel, val->value);
index 69a5c04..f55f092 100644 (file)
@@ -40,6 +40,9 @@ Boston, MA 02111-1307, USA.  */
 #endif
 #ifdef NEED_MOTIF
 #include "lwlib-Xm.h"
+#ifdef LWLIB_WIDGETS_MOTIF
+#include <Xm/Xm.h>
+#endif
 #endif
 #ifdef NEED_ATHENA
 #include "lwlib-Xaw.h"
@@ -67,8 +70,8 @@ int lw_menu_accelerate = False;
 
 \f
 /* Forward declarations */
-static void
-instantiate_widget_instance (widget_instance *instance);
+static void instantiate_widget_instance (widget_instance *instance);
+static void free_widget_value_args (widget_value* wv);
 
 \f
 /* utility functions for widget_instance and widget_info */
@@ -153,14 +156,9 @@ free_widget_value_contents (widget_value *wv)
       free_widget_value_tree (wv->contents);
       wv->contents = (widget_value *) 0xDEADBEEF;
     }
-  if (wv->args && wv->nargs)
-    {
-      if (wv->free_args)
-       free (wv->args);
-      wv->args = (ArgList) 0xDEADBEEF;
-      wv->nargs = 0;
-      wv->free_args = 0;
-    }
+
+  free_widget_value_args (wv);
+
   if (wv->next)
     {
       free_widget_value_tree (wv->next);
@@ -237,6 +235,41 @@ merge_scrollbar_values (widget_value *old, widget_value *new)
 
 #endif /* NEED_SCROLLBARS */
 
+#ifdef HAVE_WIDGETS
+/*
+ * Return true if old->args was not equivalent
+ * to new->args.
+ */
+static Boolean
+merge_widget_value_args (widget_value *old, widget_value *new)
+{
+  Boolean changed = False;
+
+  if (new->args && !old->args)
+    {
+      lw_copy_widget_value_args (new, old);
+      changed = True;
+    }
+  /* Generally we don't want to lose values that are already in the
+     widget. */
+  else if (!new->args && old->args)
+    {
+      lw_copy_widget_value_args (old, new);
+      changed = True;
+    }
+  else if (new->args && old->args)
+    {
+      /* #### Do something more sensible here than just copying the
+         new values (like actually merging the values). */
+      free_widget_value_args (old);
+      lw_copy_widget_value_args (new, old);
+      changed = True;
+    }
+
+  return changed;
+}
+#endif /* HAVE_WIDGETS */
+
 /* Make a complete copy of a widget_value tree.  Store CHANGE into
    the widget_value tree's `change' field. */
 
@@ -269,13 +302,8 @@ copy_widget_value_tree (widget_value *val, change_type change)
       copy->next = copy_widget_value_tree (val->next, change);
       copy->toolkit_data = NULL;
       copy->free_toolkit_data = False;
-      if (val->nargs)
-       {
-         copy->args = (ArgList)malloc (sizeof (Arg) * val->nargs);
-         memcpy (copy->args, val->args, sizeof(Arg) * val->nargs);
-         copy->nargs = val->nargs;
-         copy->free_args = True;
-       }
+
+      lw_copy_widget_value_args (val, copy);
 #ifdef NEED_SCROLLBARS
       copy_scrollbar_values (val, copy);
 #endif
@@ -590,6 +618,14 @@ merge_widget_value (widget_value *val1, widget_value *val2, int level)
       change = max (change, INVISIBLE_CHANGE);
       val1->call_data = val2->call_data;
     }
+#ifdef HAVE_WIDGETS
+  if (merge_widget_value_args (val1, val2))
+    {
+      EXPLAIN (val1->name, change, VISIBLE_CHANGE, "widget change", 0, 0);
+      change = max (change, VISIBLE_CHANGE);
+    }
+#endif
+
 #ifdef NEED_SCROLLBARS
   if (merge_scrollbar_values (val1, val2))
     {
@@ -1317,13 +1353,67 @@ lw_show_busy (Widget w, Boolean busy)
 void lw_add_value_args_to_args (widget_value* wv, ArgList addto, int* offset)
 {
   int i;
-  if (wv->nargs && wv->args)
+  if (wv->args && wv->args->nargs)
     {
-      for (i = 0; i<wv->nargs; i++)
+      for (i = 0; i<wv->args->nargs; i++)
        {
-         addto[i + *offset] = wv->args[i];
+         addto[i + *offset] = wv->args->args[i];
        }
-      *offset += wv->nargs;
+      *offset += wv->args->nargs;
+    }
+}
+
+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));
+      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);
+    }
+  
+  if (wv->args->nargs > 10)
+    return;
+
+  XtSetArg (wv->args->args [wv->args->nargs], name, value);   wv->args->nargs++;
+}
+
+static void free_widget_value_args (widget_value* wv)
+{
+  if (wv->args)
+    {
+      if (--wv->args->ref_count <= 0)
+       {
+#ifdef LWLIB_WIDGETS_MOTIF
+         int i;
+         for (i = 0; i < wv->args->nargs; i++)
+           {
+             if (!strcmp (wv->args->args[i].name, XmNfontList))
+               XmFontListFree ((XmFontList)wv->args->args[i].value);
+           }
+#endif
+         free (wv->args->args);
+         free (wv->args);
+         wv->args = (widget_args*)0xDEADBEEF;
+       }
+    }
+}
+
+void lw_copy_widget_value_args (widget_value* val, widget_value* copy)
+{
+  if (!val->args)
+    {
+      if (copy->args)
+       free_widget_value_args (copy);
+      copy->args = 0;
+    }
+  else
+    {
+      copy->args = val->args;
+      copy->args->ref_count++;
     }
 }
 
index bca2d64..882348d 100644 (file)
@@ -106,6 +106,17 @@ typedef struct _scrollbar_values
   int scrollbar_x, scrollbar_y;
 } scrollbar_values;
 
+typedef struct _widget_args
+{
+  /* some things are only possible at creation time. args are applied
+     to widgets at creation time.  */
+  ArgList args;
+  int  nargs;
+  /* Copying args is impossible so we make the caller give us heap allocated
+     args and free them when on-one wants them any more. */
+  int  ref_count;
+} widget_args;
+
 typedef struct _widget_value
 {
   /* This slot is only partially utilized right now. */
@@ -147,15 +158,12 @@ typedef struct _widget_value
   /* data defining a scrollbar; only valid if type == "scrollbar" */
   scrollbar_values *scrollbar_data;
 
+  /* A reference counted arg structure. */
+  struct _widget_args *args;
   /* we resource the widget_value structures; this points to the next
      one on the free list if this one has been deallocated.  */
   struct _widget_value *free_list;
 
-  /* some things are only possible at creation time. args are applied
-     to widgets at creation time.  */
-  ArgList args;
-  int  nargs;
-  Boolean      free_args;
 } widget_value;
 
 
@@ -211,6 +219,8 @@ Boolean lw_get_some_values (LWLIB_ID id, widget_value* val);
 void lw_pop_up_all_widgets (LWLIB_ID id);
 void lw_pop_down_all_widgets (LWLIB_ID id);
 void lw_add_value_args_to_args (widget_value* wv, ArgList addto, int* offset);
+void lw_add_widget_value_arg (widget_value* wv, String name, XtArgVal value);
+void lw_copy_widget_value_args (widget_value* copy, widget_value* val);
 
 widget_value *malloc_widget_value (void);
 void free_widget_value (widget_value *);
index 16ab1fd..50f8bb6 100644 (file)
@@ -38,7 +38,7 @@ Boston, MA 02111-1307, USA.  */
 
 #include <X11/IntrinsicP.h>
 #include <X11/StringDefs.h>
-#include <X11/Xaw/XawInit.h>
+#include ATHENA_INCLUDE(XawInit.h)
 #include "../src/xmu.h"
 #include "xlwcheckboxP.h"
 
index a6c223b..8808ca5 100644 (file)
@@ -52,7 +52,7 @@ Boston, MA 02111-1307, USA.  */
 #include <X11/IntrinsicP.h>
 #include <X11/Xatom.h>
 #include <X11/StringDefs.h>
-#include <X11/Xaw/XawInit.h>
+#include ATHENA_INCLUDE(XawInit.h)
 #include "xlwgaugeP.h"
 #include "../src/xmu.h"
 #ifdef HAVE_XMU
index fb4875d..ad9d12c 100644 (file)
@@ -42,7 +42,7 @@ Boston, MA 02111-1307, USA.  */
  *
  ***********************************************************************/
 
-#include <X11/Xaw/Label.h>
+#include ATHENA_INCLUDE(Label.h)
 
 /* Resources:
 
index 3a14e41..36de7f7 100644 (file)
@@ -40,7 +40,7 @@ Boston, MA 02111-1307, USA.  */
  ***********************************************************************/
 
 #include "xlwgauge.h"
-#include <X11/Xaw/LabelP.h>
+#include ATHENA_INCLUDE(LabelP.h)
 
 /* New fields for the Gauge widget class record */
 
index 18f9cdd..17405c4 100644 (file)
@@ -53,7 +53,7 @@ Boston, MA 02111-1307, USA.  */
 
 #include <X11/IntrinsicP.h>
 #include <X11/StringDefs.h>
-#include <X11/Xaw/XawInit.h>
+#include ATHENA_INCLUDE(XawInit.h)
 #include "../src/xmu.h"
 #include "xlwradioP.h"
 
index c23a714..d0b8f62 100644 (file)
@@ -42,7 +42,7 @@ Boston, MA 02111-1307, USA.  */
  *
  ***********************************************************************/
 
-#include <X11/Xaw/Toggle.h>
+#include ATHENA_INCLUDE(Toggle.h)
 
 /* Resources:
 
index 9983c8e..78ea2cd 100644 (file)
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA.  */
 #define _XawRadioP_h
 
 #include "xlwradio.h"
-#include <X11/Xaw/ToggleP.h>
+#include ATHENA_INCLUDE(ToggleP.h)
 
 /***********************************************************************
  *
index 81f8cdb..88f7cc1 100644 (file)
@@ -979,7 +979,7 @@ seg_pixel_sizes (XlwScrollBarWidget w, int *above_return,
   if (ss < SS_MIN)
     {
       /* add a percent amount for integer rounding */
-      float tmp = ((((float) (SS_MIN - ss) * (float) value)) / total) + 0.5;
+      float tmp = (((float) (SS_MIN - ss) * (float) value) / total) + 0.5;
 
       above -= (int) tmp;
       ss = SS_MIN;
index fa10a60..efc2954 100644 (file)
@@ -18,7 +18,7 @@
  the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
- /* Synched up with: Tabs.c 1.25 */
+ /* Synched up with: Tabs.c 1.27 */
  
  /*
  * Tabs.c - Index Tabs composite widget
@@ -51,8 +51,8 @@
  * the frame.
  */
 
-/* TODO: min child height = tab height
- *
+/*
+ * TODO: min child height = tab height
  */
 
 #include       <config.h>
@@ -189,6 +189,7 @@ static      void    TabsExpose();
 static void    TabsDestroy();
 static void    TabsRealize();
 static Boolean TabsSetValues();
+static Boolean TabsAcceptFocus();
 static XtGeometryResult        TabsQueryGeometry();
 static XtGeometryResult        TabsGeometryManager();
 static void    TabsChangeManaged();
@@ -237,6 +238,7 @@ static      void    TabsDestroy( Widget w) ;
 static void    TabsResize( Widget w) ;
 static void    TabsExpose( Widget w, XEvent *event, Region region) ;
 static Boolean TabsSetValues(Widget, Widget, Widget, ArgList, Cardinal *) ;
+static Boolean TabsAcceptFocus(Widget, Time *);
 static Boolean TabsConstraintSetValues(Widget, Widget, Widget,
                        ArgList, Cardinal *) ;
 static XtGeometryResult TabsQueryGeometry(Widget,
@@ -263,7 +265,7 @@ static      void    TabWidth( Widget w) ;
 static int     TabLayout( TabsWidget, int wid, int hgt, Dimension *r_hgt,
                        Bool query_only) ;
 static void    GetPreferredSizes(TabsWidget) ;
-static void    MaxChild(TabsWidget) ;
+static void    MaxChild(TabsWidget, Widget except, Dimension, Dimension) ;
 static void    TabsShuffleRows( TabsWidget tw) ;
 static int     PreferredSize( TabsWidget,
                        Dimension *reply_width, Dimension *reply_height,
@@ -325,9 +327,13 @@ TabsClassRec tabsClassRec = {
     /* num_resources      */    XtNumber(resources),
     /* xrm_class          */    NULLQUARK,
     /* compress_motion   */    TRUE,
-    /* compress_exposure  */   TRUE,
+#if XtSpecificationRelease < 6
+    /* compress_exposure  */   XtExposeCompressMaximal,
+#else
+    /* compress_exposure  */   XtExposeCompressMaximal|XtExposeNoRegion,
+#endif
     /* compress_enterleave*/   TRUE,
-    /* visible_interest   */    FALSE,
+    /* visible_interest   */    TRUE,
     /* destroy            */    TabsDestroy,
     /* resize             */    TabsResize,
     /* expose             */    TabsExpose,
@@ -335,7 +341,7 @@ TabsClassRec tabsClassRec = {
     /* set_values_hook    */   NULL,
     /* set_values_almost  */    XtInheritSetValuesAlmost,
     /* get_values_hook    */   NULL,
-    /* accept_focus       */    NULL,
+    /* accept_focus       */    TabsAcceptFocus,
     /* version            */   XtVersion,
     /* callback_private   */    NULL,
     /* tm_table           */    defaultTranslations,
@@ -460,7 +466,7 @@ TabsInit(Widget request, Widget new, ArgList args, Cardinal *num_args)
     newTw->tabs.grey50 = None ;
 
     newTw->tabs.needs_layout = False ;
-    
+
     newTw->tabs.hilight = NULL ;
 
 #ifdef NEED_MOTIF
@@ -480,7 +486,6 @@ TabsConstraintInitialize(Widget request, Widget new,
 {
        TabsConstraints tab = (TabsConstraints) new->core.constraints ;
        tab->tabs.greyAlloc = False ;   /* defer allocation of pixel */
-       tab->tabs.queried = False ;     /* defer size query */
 
        getBitmapInfo((TabsWidget)XtParent(new), tab) ;
        TabWidth(new) ;
@@ -539,6 +544,8 @@ TabsResize(Widget w)
         * to the bottom row.
         */
 
+       tw->tabs.needs_layout = False ;
+
        if( num_children > 0 && tw->composite.children != NULL )
        {
          /* Loop through the tabs and assign rows & x positions */
@@ -554,28 +561,27 @@ TabsResize(Widget w)
 
          tw->tabs.child_width = cw = tw->core.width - 2 * SHADWID ;
          tw->tabs.child_height = ch =
-                       tw->core.height - tw->tabs.tab_total - 2 * SHADWID ;
+                       tw->core.height - tw->tabs.tab_total - 2 * SHADWID ;
 
 
          for(i=0, childP=tw->composite.children;
-               i < num_children;
+               i < num_children;
                ++i, ++childP)
            if( XtIsManaged(*childP) )
            {
              tab = (TabsConstraints) (*childP)->core.constraints ;
-             bw = tab->tabs.bwid ;
+             bw = (*childP)->core.border_width ;
              XtConfigureWidget(*childP, SHADWID,tw->tabs.tab_total+SHADWID,
                          cw-bw*2,ch-bw*2, bw) ;
            }
-         if( XtIsRealized(w) )
-           {
-             XClearWindow(XtDisplay((Widget)tw), XtWindow((Widget)tw)) ;
-             tw->tabs.needs_layout = False ;
-             XtClass(tw)->core_class.expose((Widget)tw,NULL,None) ;
-           }
+         if( XtIsRealized(w) ) {
+           XClearWindow(XtDisplay((Widget)tw), XtWindow((Widget)tw)) ;
+           /* should not be necessary to explicitly repaint after a
+            * resize, but XEmacs folks tell me it is.
+            */
+           XtClass(tw)->core_class.expose((Widget)tw,NULL,None) ;
+         }
        }
-
-       tw->tabs.needs_layout = False ;
 } /* Resize */
 
 
@@ -731,6 +737,22 @@ TabsConstraintSetValues(Widget current, Widget request, Widget new,
 }
 
 
+static Boolean
+TabsAcceptFocus(Widget w, Time *t)
+{
+       if( !w->core.being_destroyed && XtIsRealized(w) &&
+           XtIsSensitive(w) && XtIsManaged(w) && w->core.visible )
+       {
+         Widget p ;
+         for(p = XtParent(w); !XtIsShell(p); p = XtParent(p)) ;
+         XtSetKeyboardFocus(p,w) ;
+         return True ;
+       }
+       else
+         return False ;
+}
+
+
 
 /*
  * Return preferred size.  Happily accept anything >= our preferred size.
@@ -752,11 +774,9 @@ TabsQueryGeometry(Widget w,
         (!(mode & CWHeight) || intended->height == w->core.height) )
       return XtGeometryNo ;
 
-#ifdef COMMENT
     if( (!(mode & CWWidth) || intended->width >= preferred->width)  &&
        (!(mode & CWHeight) || intended->height >= preferred->height) )
       return XtGeometryYes;
-#endif /* COMMENT */
 
     return XtGeometryAlmost;
 }
@@ -774,6 +794,7 @@ TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply)
        Dimension               s = SHADWID ;
        TabsConstraints         tab = (TabsConstraints)w->core.constraints;
        XtGeometryResult        result ;
+       Dimension               rw, rh ;
 
        /* Position request always denied */
 
@@ -795,11 +816,11 @@ TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply)
            req->border_width == w->core.border_width )
          return XtGeometryNo ;
 
-       /* updated cached preferred size of the child */
-       tab->tabs.bwid = req->border_width ;
-       tab->tabs.wid = req->width + req->border_width * 2 ;
-       tab->tabs.hgt = req->height + req->border_width * 2 ;
-       MaxChild(tw) ;
+       rw = req->width + 2 * req->border_width ;
+       rh = req->height + 2 * req->border_width ;
+
+       /* find out how big the children want to be now */
+       MaxChild(tw, w, rw, rh) ;
 
 
        /* Size changes must see if the new size can be accommodated.
@@ -807,7 +828,9 @@ TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply)
         * size.  A request to shrink will be accepted only if the
         * new size is still big enough for all other children.  A
         * request to shrink that is not big enough for all children
-        * returns an "almost" response with the new proposed size.
+        * returns an "almost" response with the new proposed size
+        * or a "no" response if unable to shrink at all.
+        *
         * A request to grow will be accepted only if the Tabs parent can
         * grow to accommodate.
         *
@@ -819,24 +842,19 @@ TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply)
 
        if (req->request_mode & (CWWidth | CWHeight | CWBorderWidth))
        {
-         Dimension     rw,rh ;         /* child's requested width, height */
          Dimension     cw,ch ;         /* children's preferred size */
          Dimension     aw,ah ;         /* available size we can give child */
          Dimension     th ;            /* space used by tabs */
          Dimension     wid,hgt ;       /* Tabs widget size */
 
-         rw = cw = tab->tabs.wid ;
-         rh = ch = tab->tabs.hgt ;
+         cw = tw->tabs.max_cw ;
+         ch = tw->tabs.max_ch ;
 
-         /* find out what the resulting preferred size would be */
+         /* find out what *my* resulting preferred size would be */
 
-#ifdef COMMENT
-         MaxChild(tw, &cw, &ch) ;
-#endif /* COMMENT */
-         PreferredSize2(tw,
-               cw=tw->tabs.max_cw, ch=tw->tabs.max_ch, &wid, &hgt) ;
+         PreferredSize2(tw, cw, ch, &wid, &hgt) ;
 
-         /* Ask to be resized to accommodate. */
+         /* Would my size change?  If so, ask to be resized. */
 
          if( wid != tw->core.width || hgt != tw->core.height )
          {
@@ -856,7 +874,7 @@ TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply)
 
            result = XtMakeGeometryRequest((Widget)tw, &myrequest, &myreply) ;
 
-           /* !$@# Box widget changes the core size even if QueryOnly
+           /* !$@# Athena Box widget changes the core size even if QueryOnly
             * is set.  I'm convinced this is a bug.  At any rate, to work
             * around the bug, we need to restore the core size after every
             * query geometry request.  This is only partly effective,
@@ -874,6 +892,7 @@ TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply)
            switch( result ) {
              case XtGeometryYes:
              case XtGeometryDone:
+               tw->tabs.needs_layout = True ;
                break ;
 
              case XtGeometryNo:
@@ -884,6 +903,8 @@ TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply)
              case XtGeometryAlmost:
                wid = myreply.width ;
                hgt = myreply.height ;
+               tw->tabs.needs_layout = True ;
+               break ;
            }
          }
 
@@ -995,9 +1016,6 @@ TabsChangeManaged(Widget w)
     if( tw->tabs.topWidget != NULL )
       XtVaSetValues(tw->tabs.topWidget, XmNtraversalOn, True, 0) ;
 #endif
-
-
-
 }
 
 
@@ -1224,15 +1242,15 @@ XawTabsSetTop(Widget w, Bool callCallbacks)
 
        if( !XtIsSubclass(w->core.parent, tabsWidgetClass) )
        {
-         char line[1024] ;
-         sprintf(line, "XawTabsSetTop: widget \"%s\" is not the child of a tabs widget.", XtName(w)) ;
+         char line[256] ;
+         sprintf(line, "XawTabsSetTop: widget \"%.64s\" is not the child of a tabs widget.", XtName(w)) ;
          XtAppWarning(XtWidgetToApplicationContext(w), line) ;
          return ;
        }
 
        if( callCallbacks )
          XtCallCallbackList(w, tw->tabs.popdownCallbacks,
-               (XtPointer)tw->tabs.topWidget) ;
+               (XtPointer)tw->tabs.topWidget) ;
 
        if( !XtIsRealized(w) ) {
          tw->tabs.topWidget = w ;
@@ -1437,11 +1455,11 @@ DrawTab(TabsWidget tw, Widget child, Bool labels)
          {
            if( tab->tabs.lbm_depth == 1 )
              XCopyPlane(dpy, tab->tabs.left_bitmap, win,gc,
-               0,0, tab->tabs.lbm_width, tab->tabs.lbm_height,
+               0,0, tab->tabs.lbm_width, tab->tabs.lbm_height,
                x+tab->tabs.lbm_x, y+tab->tabs.lbm_y, 1L) ;
            else
              XCopyArea(dpy, tab->tabs.left_bitmap, win,gc,
-               0,0, tab->tabs.lbm_width, tab->tabs.lbm_height,
+               0,0, tab->tabs.lbm_width, tab->tabs.lbm_height,
                x+tab->tabs.lbm_x, y+tab->tabs.lbm_y) ;
          }
 
@@ -1600,8 +1618,27 @@ UndrawTab(TabsWidget tw, Widget child)
 \f
        /* GEOMETRY UTILITIES */
 
+       /* Overview:
+        *
+        *  MaxChild(): ask all children (except possibly one) their
+        *  preferred sizes, set max_cw, max_ch accordingly.
+        *
+        *  GetPreferredSizes(): ask all children their preferred sizes,
+        *  set max_cw, max_ch accordingly.
+        *
+        *  PreferredSize(): given max_cw, max_ch, return tabs widget
+        *  preferred size.  Iterate with other widths in order to get
+        *  a reasonable aspect ratio.
+        *
+        *  PreferredSize2(): Given child dimensions, return Tabs
+        *  widget dimensions.
+        *
+        *  PreferredSize3(): Same, except given child dimensions plus
+        *  shadow.
+        */
+
 
-       /* Compute the size of one child's tab.  Positions will be computed
+       /* Compute the width of one child's tab.  Positions will be computed
         * elsewhere.
         *
         *      height: font height + vertical_space*2 + shadowWid*2
@@ -1634,7 +1671,7 @@ TabWidth(Widget w)
        {
          tab->tabs.width += XTextWidth( font, lbl, (int)strlen(lbl) ) + iw ;
          tab->tabs.l_y = (tw->tabs.tab_height +
-                tw->tabs.font->max_bounds.ascent -
+                tw->tabs.font->max_bounds.ascent -
                 tw->tabs.font->max_bounds.descent)/2 ;
        }
 }
@@ -1731,59 +1768,34 @@ TabLayout(TabsWidget tw, int wid, int hgt, Dimension *reply_height, Bool query_o
 
 
        /* Find max preferred child size.  Returned sizes include child
-        * border widths.  We only ever ask a child its preferred
-        * size once.  After that, the preferred size is updated only
-        * if the child makes a geometry request.
+        * border widths.
         */
 
 static void
 GetPreferredSizes(TabsWidget tw)
 {
-       int                     i ;
-       Widget                  *childP = tw->composite.children ;
-       XtWidgetGeometry        preferred ;
-       TabsConstraints         tab ;
-       Dimension               cw = 0, ch = 0 ;
-
-       for(i=tw->tabs.displayChildren; --i >= 0; ++childP)
-         if( XtIsManaged(*childP) )
-         {
-           tab = (TabsConstraints) (*childP)->core.constraints ;
-           if( !tab->tabs.queried ) {
-             (void) XtQueryGeometry(*childP, NULL, &preferred) ;
-             tab->tabs.bwid = preferred.border_width ;
-             tab->tabs.wid = preferred.width + preferred.border_width * 2 ;
-             tab->tabs.hgt = preferred.height + preferred.border_width * 2 ;
-             tab->tabs.queried = True ;
-           }
-           cw = Max(cw, tab->tabs.wid ) ;
-           ch = Max(ch, tab->tabs.hgt ) ;
-         }
-       tw->tabs.max_cw = cw ;
-       tw->tabs.max_ch = ch ;
+       MaxChild(tw, NULL, 0,0) ;
 }
 
 
 
        /* Find max preferred child size.  Returned sizes include child
-        * border widths. */
+        * border widths.  If except is non-null, don't ask that one.
+        */
 
 static void
-MaxChild(TabsWidget tw)
+MaxChild(TabsWidget tw, Widget except, Dimension cw, Dimension ch)
 {
-       Dimension       cw,ch ; /* child width, height */
-       int             i ;
-       Widget          *childP = tw->composite.children ;
-       TabsConstraints tab ;
-
-       cw = ch = 0 ;
+       int                     i ;
+       Widget                  *childP = tw->composite.children ;
+       XtWidgetGeometry        preferred ;
 
        for(i=tw->composite.num_children; --i >=0; ++childP)
-         if( XtIsManaged(*childP) )
+         if( XtIsManaged(*childP)  &&  *childP != except )
          {
-           tab = (TabsConstraints) (*childP)->core.constraints ;
-           cw = Max(cw, tab->tabs.wid ) ;
-           ch = Max(ch, tab->tabs.hgt ) ;
+           (void) XtQueryGeometry(*childP, NULL, &preferred) ;
+           cw = Max(cw, preferred.width + preferred.border_width * 2 ) ;
+           ch = Max(ch, preferred.height + preferred.border_width * 2 ) ;
          }
 
        tw->tabs.max_cw = cw ;
@@ -1845,10 +1857,12 @@ TabsShuffleRows(TabsWidget tw)
 }
 
 
-       /* find preferred size.  Ask children, find size of largest,
+       /* Find preferred size.  Ask children, find size of largest,
         * add room for tabs & return.  This can get a little involved,
         * as we don't want to have too many rows of tabs; we may widen
         * the widget to reduce # of rows.
+        *
+        * This function requires that max_cw, max_ch already be set.
         */
 
 static int
@@ -1864,12 +1878,6 @@ PreferredSize(
        Dimension       rwid,rhgt ;
        int             nrow ;
 
-
-       /* find max desired child height */
-#ifdef COMMENT
-       MaxChild(tw, &cw, &ch) ;
-#endif /* COMMENT */
-
        wid = cw = tw->tabs.max_cw ;
        hgt = ch = tw->tabs.max_ch ;
 
@@ -1883,6 +1891,7 @@ PreferredSize(
        if( nrow > 2 && rhgt > rwid )
        {
          Dimension w0, w1 ;
+         int maxloop = 20 ;
 
          /* step 1: start doubling size until it's too big */
          do {
@@ -1895,7 +1904,7 @@ PreferredSize(
          /* step 2: use Newton's method to find ideal size.  Stop within
           * 8 pixels.
           */
-         while( w1 > w0 + 8 )
+         while( --maxloop > 0 && w1 > w0 + 8 )
          {
            wid = (w0+w1)/2 ;
            nrow = PreferredSize2(tw, wid,hgt, &rwid,&rhgt) ;
@@ -2013,7 +2022,7 @@ getBitmapInfo(TabsWidget tw, TabsConstraints tab)
 
        if( tab->tabs.left_bitmap == None  ||
            !XGetGeometry(XtDisplay(tw), tab->tabs.left_bitmap, &root, &x, &y,
-               &tab->tabs.lbm_width, &tab->tabs.lbm_height,
+               &tab->tabs.lbm_width, &tab->tabs.lbm_height,
                &bw, &tab->tabs.lbm_depth) )
          tab->tabs.lbm_width = tab->tabs.lbm_height = 0 ;
 }
index 48b0c0e..ca1b1e5 100644 (file)
@@ -18,7 +18,7 @@ along with XEmacs; see the file COPYING.  If not, write to
 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-/* Synched up with: TabsP.h 1.7 */
+/* Synched up with: TabsP.h 1.8 */
 
 /*
  * TabsP.h - Private definitions for Index Tabs widget
@@ -132,9 +132,6 @@ typedef     struct _TabsConstraintsPart {
        Dimension       width ;         /* tab width */
        Position        x,y ;           /* tab base position */
        short           row ;           /* tab row */
-       Dimension       wid,hgt ;       /* desired size */
-       Dimension       bwid ;          /* desired border width */
-       Boolean         queried ;       /* we've asked child it's pref. size */
        Position        l_x, l_y ;      /* label position */
        Position        lbm_x, lbm_y ;  /* bitmap position */
        unsigned int    lbm_width, lbm_height, lbm_depth ;
index 796c1b0..4c404a1 100644 (file)
@@ -1,3 +1,25 @@
+1999-12-24  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.25 is released.
+
+1999-12-21  Martin Buchholz  <martin@xemacs.org>
+
+       * lispref/text.texi (Near Point): Document `char-before'.
+
+1999-12-20  Adrian Aichner  <adrian@xemacs.org>
+
+       * widget.texi: Fix typos and possessive singular errors.  Break
+       long sentences for readability.  Remove some redundant commas.
+
+1999-12-18  Martin Buchholz  <martin@xemacs.org>
+
+       * lispref/functions.texi (Mapping Functions): 
+       Warn about mapping functions modifying their sequences.
+
+1999-12-15  Sandra Wambold  <wambold@xemacs.org>
+
+       * xemacs-faq.texi: link to matlab.el added; misc. address changes
+
 1999-12-14  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.24 is released.
 
        * xemacs-faq.texi (Q5.0.6): Describe `shell-multiple-shells'
 
-1999-08-01  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-08-01  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs/programs.texi (Balanced Editing): Remove broken
        line-break.
 
        * XEmacs 21.2.19 is released
 
-1999-07-10  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-07-10  Adrian Aichner  <adrian@xemacs.org>
 
        * emodules.texi: Use @set emacs and @value{emacs} instead of
        @macro (unsupported by texinfo package).  Remove stray @code.
 
        * XEmacs 21.2.9 is released
 
-1999-01-14  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-01-14  Adrian Aichner  <adrian@xemacs.org>
 
        * internals\internals.texi (Techniques for XEmacs Developers):
        Fixing documentation.
 
        * lispref/files.texi (User Name Completion): new section.
 
-1998-07-23  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-07-23  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs/packages.texi (Packages): Changing @itemize @emph to
        @itemize @bullet (this is what all other files included in
        * standards.texi (Preface): Revert previous change to @node
        because it doesn't pass makeinfo.
 
-1998-06-27  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-06-27  Adrian Aichner  <adrian@xemacs.org>
 
        * cl.texi: See ALL.
        * info-stnd.texi: Fixed @setfilename.
        * xemacs/startup.texi:
        * xemacs/packages.texi: Created.
 
-1998-06-10  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-06-10  Adrian Aichner  <adrian@xemacs.org>
 
        * texinfo.texi: added ../info/ to @setfilename, broke line after
        @noindent.  Changed @var{arg-not-used-by-@TeX{}} to
        * lispref/dragndrop.texi: naming changed to Drag and Drop
        added some docu about the drop procedure
 
-1998-06-09  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-06-09  Adrian Aichner  <adrian@xemacs.org>
 
        * info-stnd.texi: added ../info/ to @setfilename.
        * info.texi: added ../info/ to @setfilename.
 
        * xemacs/custom.texi (Init Syntax): document #b, #o, and #x reader
        syntax for integers.
-       From Adrian Aichner <aichner@ecf.teradyne.com>
+       From Adrian Aichner <adrian@xemacs.org>
        * cl.texi (Porting Common Lisp): ' '
        * lispref/numbers.texi (Numbers): ' '
 
index 63b964a..c2e6bb4 100644 (file)
@@ -680,18 +680,21 @@ This function ignores any arguments and returns @code{nil}.
 @cindex mapping functions
 
   A @dfn{mapping function} applies a given function to each element of a
-list or other collection.  XEmacs Lisp has three such functions;
+list or other collection.  XEmacs Lisp has several such functions;
 @code{mapcar} and @code{mapconcat}, which scan a list, are described
-here.  For the third mapping function, @code{mapatoms}, see
-@ref{Creating Symbols}.
+here.   @xref{Creating Symbols}, for the function @code{mapatoms} which
+maps over the symbols in an obarray.
+
+Mapping functions should never modify the sequence being mapped over.
+The results are unpredictable.
 
 @defun mapcar function sequence
 @code{mapcar} applies @var{function} to each element of @var{sequence}
 in turn, and returns a list of the results.
 
-The argument @var{sequence} may be a list, a vector, or a string.  The
-result is always a list.  The length of the result is the same as the
-length of @var{sequence}.
+The argument @var{sequence} can be any kind of sequence; that is, a
+list, a vector, a bit vector, or a string.  The result is always a list.
+The length of the result is the same as the length of @var{sequence}.
 
 @smallexample
 @group
@@ -738,7 +741,8 @@ Between each pair of result strings, @code{mapconcat} inserts the string
 other suitable punctuation.
 
 The argument @var{function} must be a function that can take one
-argument and return a string.
+argument and return a string.  The argument @var{sequence} can be any
+kind of sequence; that is, a list, a vector, a bit vector, or a string.
   
 @smallexample
 @group
index 4e66083..1e1e9ed 100644 (file)
@@ -25,6 +25,7 @@ use for reading an argument.
 * Completion::                How to invoke and customize completion.
 * Yes-or-No Queries::         Asking a question with a simple answer.
 * Multiple Queries::         Asking a series of similar questions.
+* Reading a Password::       Reading a password from the terminal.
 * Minibuffer Misc::           Various customization hooks and variables.
 @end menu
 
@@ -37,7 +38,7 @@ minibuffer.  However, many operations for managing buffers do not apply
 to minibuffers.  The name of a minibuffer always has the form @w{@samp{
 *Minibuf-@var{number}}}, and it cannot be changed.  Minibuffers are
 displayed only in special windows used only for minibuffers; these
-windows always appear at the bottom of a frame.  (Sometime frames have
+windows always appear at the bottom of a frame.  (Sometimes frames have
 no minibuffer window, and sometimes a special kind of frame contains
 nothing but a minibuffer window; see @ref{Minibuffers and Frames}.)
 
@@ -67,10 +68,6 @@ completion commands (@pxref{Completion}).
 @code{minibuffer-local-map} is for ordinary input (no completion).
 
 @item
-@code{minibuffer-local-ns-map} is similar, except that @key{SPC} exits
-just like @key{RET}.  This is used mainly for Mocklisp compatibility.
-
-@item
 @code{minibuffer-local-completion-map} is for permissive completion.
 
 @item
@@ -91,7 +88,7 @@ middle of a Lisp function.  Instead, do all minibuffer input as part of
 reading the arguments for a command, in the @code{interactive} spec.
 @xref{Defining Commands}.
 
-@defun read-from-minibuffer prompt-string &optional initial-contents keymap read hist
+@defun read-from-minibuffer prompt-string &optional initial-contents keymap read hist abbrev-table default
 This function is the most general way to get input through the
 minibuffer.  By default, it accepts arbitrary text and returns it as a
 string; however, if @var{read} is non-@code{nil}, then it uses
@@ -112,12 +109,25 @@ The value of @var{initial-contents} may also be a cons cell of the form
 @var{string} in the minibuffer but put point @var{position} characters
 from the beginning, rather than at the end.
 
+When the user types a command to exit the minibuffer,
+@code{read-from-minibuffer} constructs the return value from the text in
+the minibuffer.  Normally it returns a string containing that text.
+However, if @var{read} is non-@code{nil}, @code{read-from-minibuffer}
+reads the text and returns the resulting Lisp object, unevaluated.
+(@xref{Input Functions}, for information about reading.)
+
+The argument @var{default} specifies a default value to make available
+through the history commands.  It should be a string, or @code{nil}.
+
 If @var{keymap} is non-@code{nil}, that keymap is the local keymap to
 use in the minibuffer.  If @var{keymap} is omitted or @code{nil}, the
 value of @code{minibuffer-local-map} is used as the keymap.  Specifying
 a keymap is the most important way to customize the minibuffer for
 various applications such as completion.
 
+The argument @var{abbrev-table} specifies @code{local-abbrev-table} in
+the minibuffer (@pxref{Standard Abbrev Tables}).
+
 The argument @var{hist} specifies which history list variable to use
 for saving the input and for history commands used in the minibuffer.
 It defaults to @code{minibuffer-history}.  @xref{Minibuffer History}.
@@ -129,15 +139,27 @@ text.  However, if @var{read} is non-@code{nil},
 @code{read-from-minibuffer} reads the text and returns the resulting
 Lisp object, unevaluated.  (@xref{Input Functions}, for information
 about reading.)
+
+@strong{Usage note:} The @var{initial-contents} argument and the
+@var{default} argument are two alternative features for more or less the
+same job.  It does not make sense to use both features in a single call
+to @code{read-from-minibuffer}.  In general, we recommend using
+@var{default}, since this permits the user to insert the default value
+when it is wanted, but does not burden the user with deleting it from
+the minibuffer on other occasions.  However, if user is supposed to edit
+default value, @var{initial-contents} may be preferred.
 @end defun
 
-@defun read-string prompt &optional initial
+@defun read-string prompt &optional initial history
 This function reads a string from the minibuffer and returns it.  The
 arguments @var{prompt} and @var{initial} are used as in
 @code{read-from-minibuffer}.  The keymap used is
 @code{minibuffer-local-map}.
 
-This is a simplified interface to the
+The optional argument @var{history}, if non-nil, specifies a history
+list and optionally the initial position in the list.
+
+This function is a simplified interface to the
 @code{read-from-minibuffer} function:
 
 @smallexample
@@ -154,7 +176,7 @@ This is the default local keymap for reading from the minibuffer.  By
 default, it makes the following bindings:
 
 @table @asis
-@item @key{LFD}
+@item @kbd{C-j}
 @code{exit-minibuffer}
 
 @item @key{RET}
@@ -177,49 +199,6 @@ default, it makes the following bindings:
 @end table
 @end defvar
 
-@c In version 18, initial is required
-@c Emacs 19 feature
-@defun read-no-blanks-input prompt &optional initial
-This function reads a string from the minibuffer, but does not allow
-whitespace characters as part of the input: instead, those characters
-terminate the input.  The arguments @var{prompt} and @var{initial} are
-used as in @code{read-from-minibuffer}.
-
-This is a simplified interface to the @code{read-from-minibuffer}
-function, and passes the value of the @code{minibuffer-local-ns-map}
-keymap as the @var{keymap} argument for that function.  Since the keymap
-@code{minibuffer-local-ns-map} does not rebind @kbd{C-q}, it @emph{is}
-possible to put a space into the string, by quoting it.
-
-@smallexample
-@group
-(read-no-blanks-input @var{prompt} @var{initial})
-@equiv{}
-(read-from-minibuffer @var{prompt} @var{initial} minibuffer-local-ns-map)
-@end group
-@end smallexample
-@end defun
-
-@defvar minibuffer-local-ns-map
-This built-in variable is the keymap used as the minibuffer local keymap
-in the function @code{read-no-blanks-input}.  By default, it makes the
-following bindings, in addition to those of @code{minibuffer-local-map}:
-
-@table @asis
-@item @key{SPC}
-@cindex @key{SPC} in minibuffer
-@code{exit-minibuffer}
-
-@item @key{TAB}
-@cindex @key{TAB} in minibuffer
-@code{exit-minibuffer}
-
-@item @kbd{?}
-@cindex @kbd{?} in minibuffer
-@code{self-insert-and-exit}
-@end table
-@end defvar
-
 @node Object from Minibuffer
 @section Reading Lisp Objects with the Minibuffer
 
@@ -227,7 +206,7 @@ following bindings, in addition to those of @code{minibuffer-local-map}:
 minibuffer.
 
 @defun read-minibuffer prompt &optional initial
-This function reads a Lisp object in the minibuffer and returns it,
+This function reads a Lisp object using the minibuffer, and returns it
 without evaluating it.  The arguments @var{prompt} and @var{initial} are
 used as in @code{read-from-minibuffer}.
 
@@ -266,9 +245,9 @@ default, or can edit the input.
 @end defun
 
 @defun eval-minibuffer prompt &optional initial
-This function reads a Lisp expression in the minibuffer, evaluates it,
-then returns the result.  The arguments @var{prompt} and @var{initial}
-are used as in @code{read-from-minibuffer}.
+This function reads a Lisp expression using the minibuffer, evaluates
+it, then returns the result.  The arguments @var{prompt} and
+@var{initial} are used as in @code{read-from-minibuffer}.
 
 This function simply evaluates the result of a call to
 @code{read-minibuffer}:
@@ -293,7 +272,7 @@ appear in the initial text.  @xref{Output Functions}.
 
 The first thing @code{edit-and-eval-command} does is to activate the
 minibuffer with @var{prompt} as the prompt.  Then it inserts the printed
-representation of @var{form} in the minibuffer, and lets the user edit.
+representation of @var{form} in the minibuffer, and lets the user edit it.
 When the user exits the minibuffer, the edited text is read with
 @code{read} and then evaluated.  The resulting value becomes the value
 of @code{edit-and-eval-command}.
@@ -366,6 +345,8 @@ needs to do to use a history list is to initialize it and to pass its
 name to the input functions when you wish.  But it is safe to modify the
 list by hand when the minibuffer input functions are not using it.
 
+  Here are some of the standard minibuffer history list variables:
+
 @defvar minibuffer-history
 The default history list for minibuffer history input.
 @end defvar
@@ -551,7 +532,7 @@ too short).  Both of those begin with the string @samp{foobar}.
 
 @defun all-completions string collection &optional predicate nospace
 This function returns a list of all possible completions of
-@var{string}.  The parameters to this function are the same as to
+@var{string}.  The arguments to this function are the same as those of
 @code{try-completion}.
 
 If @var{collection} is a function, it is called with three arguments:
@@ -592,7 +573,7 @@ non-@code{nil}, XEmacs does not consider case significant in completion.
   This section describes the basic interface for reading from the
 minibuffer with completion.
 
-@defun completing-read prompt collection &optional predicate require-match initial hist
+@defun completing-read prompt collection &optional predicate require-match initial hist default
 This function reads a string in the minibuffer, assisting the user by
 providing completion.  It activates the minibuffer with prompt
 @var{prompt}, which must be a string.  If @var{initial} is
@@ -611,11 +592,17 @@ commands won't exit unless the input typed is itself an element of
 @var{collection}.  If @var{require-match} is @code{nil}, the exit
 commands work regardless of the input in the minibuffer.
 
+However, empty input is always permitted, regardless of the value of
+@var{require-match}; in that case, @code{completing-read} returns
+@var{default}.  The value of @var{default} (if non-@code{nil}) is also
+available to the user through the history commands.
+
 The user can exit with null input by typing @key{RET} with an empty
-minibuffer.  Then @code{completing-read} returns @code{nil}.  This is
-how the user requests whatever default the command uses for the value
-being read.  The user can return using @key{RET} in this way regardless
-of the value of @var{require-match}.
+minibuffer.  Then @code{completing-read} returns @code{""}.  This is how
+the user requests whatever default the command uses for the value being
+read.  The user can return using @key{RET} in this way regardless of the
+value of @var{require-match}, and regardless of whether the empty string
+is included in @var{collection}.
 
 The function @code{completing-read} works by calling
 @code{read-minibuffer}.  It uses @code{minibuffer-local-completion-map}
@@ -707,7 +694,7 @@ bindings:
 @item @key{TAB}
 @code{minibuffer-complete}
 
-@item @key{LFD}
+@item @kbd{C-j}
 @code{minibuffer-complete-and-exit}
 
 @item @key{RET}
@@ -745,7 +732,7 @@ This function completes the minibuffer contents as far as possible.
 @deffn Command minibuffer-complete-and-exit
 This function completes the minibuffer contents, and exits if
 confirmation is not required, i.e., if
-@code{minibuffer-completion-confirm} is non-@code{nil}.  If confirmation
+@code{minibuffer-completion-confirm} is @code{nil}.  If confirmation
 @emph{is} required, it is given by repeating this command
 immediately---the command is programmed to work without confirmation
 when run twice in succession.
@@ -956,7 +943,7 @@ initial input.  It defaults to the current buffer's value of
 
 @c Emacs 19 feature
 If you specify @var{initial}, that is an initial file name to insert in
-the buffer (after with @var{directory}, if that is inserted).  In this
+the buffer (after @var{directory}, if that is inserted).  In this
 case, point goes at the beginning of @var{initial}.  The default for
 @var{initial} is @code{nil}---don't insert any file name.  To see what
 @var{initial} does, try the command @kbd{C-x C-v}.
@@ -1071,8 +1058,12 @@ A flag specifying the type of operation.
 @item
 @code{nil} specifies @code{try-completion}.  The completion function
 should return the completion of the specified string, or @code{t} if the
-string is an exact match already, or @code{nil} if the string matches no
-possibility.
+string is a unique and exact match already, or @code{nil} if the string
+matches no possibility.
+
+If the string is an exact match for one possibility, but also matches
+other longer possibilities, the function should return the string, not
+@code{t}.
 
 @item
 @code{t} specifies @code{all-completions}.  The completion function
@@ -1343,6 +1334,40 @@ value around the call.
 The return value of @code{map-y-or-n-p} is the number of objects acted on.
 @end defun
 
+@node Reading a Password
+@section Reading a Password
+@cindex passwords, reading
+
+  To read a password to pass to another program, you can use the
+function @code{read-passwd}.
+
+@defun read-passwd prompt &optional confirm default
+This function reads a password, prompting with @var{prompt}.  It does
+not echo the password as the user types it; instead, it echoes @samp{.}
+for each character in the password.
+
+The optional argument @var{confirm}, if non-@code{nil}, says to read the
+password twice and insist it must be the same both times.  If it isn't
+the same, the user has to type it over and over until the last two
+times match.
+
+The optional argument @var{default} specifies the default password to
+return if the user enters empty input.  It is translated to @samp{.}
+and inserted in the minibuffer. If @var{default} is @code{nil}, then
+@code{read-passwd} returns the null string in that case.
+@end defun
+
+@defopt passwd-invert-frame-when-keyboard-grabbed
+If non-nil swap the foreground and background colors of all faces while
+reading a password.  Default values is @code{t} unless feature
+@code{infodock} is provided.
+@end defopt
+
+@defopt passwd-echo
+This specifies the character echoed when typing a password.  When nil,
+nothing is echoed.
+@end defopt
+
 @node Minibuffer Misc
 @section Minibuffer Miscellany
 
@@ -1452,8 +1477,8 @@ returns zero.
 
 @defopt enable-recursive-minibuffers
 If this variable is non-@code{nil}, you can invoke commands (such as
-@code{find-file}) that use minibuffers even while in the minibuffer
-window.  Such invocation produces a recursive editing level for a new
+@code{find-file}) that use minibuffers even while the minibuffer window
+is active.  Such invocation produces a recursive editing level for a new
 minibuffer.  The outer-level minibuffer is invisible while you are
 editing the inner one.
 
@@ -1476,4 +1501,4 @@ want to explicitly set the value of @code{enable-recursive-minibuffers}
 in this fashion, just use an evaluated interactive spec and bind
 @code{enable-recursive-minibuffers} while reading from the minibuffer.
 See the definition of @code{next-matching-history-element} in
-@file{lisp/prim/minibuf.el}.
+@file{lisp/minibuf.el}.
index 1fdb63f..7aad873 100644 (file)
@@ -70,12 +70,13 @@ functions usually did not have these optional @var{buffer} arguments
 and always operated on the current buffer.)
 
 
-@defun char-after position &optional buffer
+@defun char-after &optional position buffer
 This function returns the character in the buffer at (i.e.,
 immediately after) position @var{position}.  If @var{position} is out of
 range for this purpose, either before the beginning of the buffer, or at
-or beyond the end, then the value is @code{nil}.  If optional argument
-@var{buffer} is @code{nil}, the current buffer is assumed.
+or beyond the end, then the value is @code{nil}.  The default for
+@var{position} is point.  If optional argument @var{buffer} is
+@code{nil}, the current buffer is assumed.
 
 In the following example, assume that the first character in the
 buffer is @samp{@@}:
@@ -88,6 +89,15 @@ buffer is @samp{@@}:
 @end example
 @end defun
 
+@defun char-before &optional position buffer
+This function returns the character in the current buffer immediately
+before position @var{position}.  If @var{position} is out of range for
+this purpose, either at or before the beginning of the buffer, or beyond
+the end, then the value is @code{nil}.  The default for
+@var{position} is point.  If optional argument @var{buffer} is
+@code{nil}, the current buffer is assumed.
+@end defun
+
 @defun following-char &optional buffer
 This function returns the character following point in the buffer.
 This is similar to @code{(char-after (point))}.  However, if point is at
index 46f2771..ecf9f33 100644 (file)
@@ -462,11 +462,11 @@ String to suffix buttons.
 
 @item %@{
 @itemx %@}
-The text inside will be displayed with the face specified by
-@code{:sample-face}. 
+The text inside will be displayed in the face specified by
+@code{:sample-face}.
 
 @item %v
-This will be replaces with the buffer representation of the widgets
+This will be replaced with the buffer representation of the widget's
 value.  What this is depends on the widget type.
 
 @item %d
@@ -560,8 +560,8 @@ and returning non-nil if the widget can represent the specified value.
 
 @item :validate
 A function which takes a widget as an argument, and return nil if the
-widgets current value is valid for the widget.  Otherwise, it should
-return the widget containing the invalid data, and set that widgets
+widget's current value is valid for the widget.  Otherwise it should
+return the widget containing the invalid data, and set that widget's
 @code{:error} property to a string explaining the error.
 
 The following predefined function can be used:
@@ -764,10 +764,10 @@ Syntax:
 TYPE ::= (menu-choice [KEYWORD ARGUMENT]... TYPE ... )
 @end example
 
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
+The @var{type} argument represents each possible choice.  The widget's
+value will be that of the chosen @var{type} argument.  This widget will
+match any value matching at least one of the specified @var{type}
+arguments.
 
 @table @code
 @item :void 
@@ -799,10 +799,10 @@ Syntax:
 TYPE ::= (radio-button-choice [KEYWORD ARGUMENT]...  TYPE ... )
 @end example
 
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
+The @var{type} argument represents each possible choice.  The widget's
+value will be that of the chosen @var{type} argument.  This widget will
+match any value matching at least one of the specified @var{type}
+arguments.
 
 The following extra properties are recognized.
 
@@ -889,8 +889,8 @@ Syntax:
 TYPE ::= (toggle [KEYWORD ARGUMENT]...)
 @end example
 
-The widget has two possible states, `on' and `off', which corresponds to
-a @code{t} or @code{nil} value.
+The widget has two possible states, `on' and `off', which correspond to
+a @code{t} or @code{nil} value respectively.
 
 The following extra properties are recognized.
 
@@ -930,10 +930,10 @@ Syntax:
 TYPE ::= (checklist [KEYWORD ARGUMENT]...  TYPE ... )
 @end example
 
-The @var{type} arguments represents each checklist item.  The widgets
-value of will be a list containing the value of each ticked @var{type}
-argument.  The checklist widget will match a list whose elements all
-matches at least one of the specified @var{type} arguments.
+The @var{type} arguments represents each checklist item.  The widget's
+value will be a list containing the values of all ticked @var{type}
+arguments.  The checklist widget will match a list whose elements all
+match at least one of the specified @var{type} arguments.
 
 The following extra properties are recognized.
 
@@ -951,11 +951,11 @@ Insert a literal @samp{%}.
 @end table
 
 @item :greedy
-Usually, a checklist will only match if the items are in the exact
+Usually a checklist will only match if the items are in the exact
 sequence given in the specification.  By setting @code{:greedy} to
-non-nil, it will allow the items to come in any sequence.  However, if
-you extract the value they will be in the sequence given in the
-checklist. I.e. the original sequence is forgotten.
+non-nil, it will allow the items to appear in any sequence.  However, if
+you extract the values they will be in the sequence given in the
+checklist.  I.e. the original sequence is forgotten.
 
 @item button-args
 A list of keywords to pass to the checkboxes.  Useful for setting
@@ -1236,13 +1236,13 @@ The value of a widget of this type will either have the form
 @samp{(file t)} or @code{(file string string)}.
 
 This concept of inline is probably hard to understand.  It was certainly
-hard to implement so instead of confuse you more by trying to explain it
-here, I'll just suggest you meditate over it for a while.
+hard to implement so instead of confusing you more by trying to explain
+it here, I'll just suggest you meditate over it for a while.
 
 @deffn Widget choice
-Allows you to edit a sexp which may have one of fixed set of types.  It
-is currently implemented with the @code{choice-menu} basic widget, and
-has a similar syntax.
+Allows you to edit a sexp which may have one of a fixed set of types.
+It is currently implemented with the @code{choice-menu} basic widget,
+and has a similar syntax.
 @end deffn
 
 @deffn Widget set
@@ -1326,9 +1326,9 @@ You can query or set the state with the following code:
 (widget-apply @var{widget} :activate)
 @end lisp
 
-A widget is inactive if itself, or any of its ancestors (found by
+A widget is inactive if itself or any of its ancestors (found by
 following the @code{:parent} link) have been deactivated.  To make sure
-a widget is really active, you must therefore activate both itself, and
+a widget is really active, you must therefore activate both itself and
 all its ancestors.
 
 @lisp
@@ -1338,12 +1338,12 @@ all its ancestors.
 @end lisp
 
 You can check if a widget has been made inactive by examining the value
-of @code{:inactive} keyword.  If this is non-nil, the widget itself has
-been deactivated.  This is different from using the @code{:active}
-keyword, in that the later tell you if the widget @strong{or} any of its
-ancestors have been deactivated.   Do not attempt to set the
+of the @code{:inactive} keyword.  If this is non-nil, the widget itself
+has been deactivated.  This is different from using the @code{:active}
+keyword, in that the latter tells you if the widget @strong{or} any of
+its ancestors have been deactivated.  Do not attempt to set the
 @code{:inactive} keyword directly.  Use the @code{:activate}
-@code{:deactivated} keywords instead.
+@code{:deactivate} keywords instead.
 
 
 @node Defining New Widgets, Widget Browser, Widget Properties, Top
@@ -1351,9 +1351,9 @@ ancestors have been deactivated.   Do not attempt to set the
 @section Defining New Widgets
 
 You can define specialized widgets with @code{define-widget}.  It allows
-you to create a shorthand for more complex widgets, including specifying
-component widgets and default new default values for the keyword
-arguments. 
+you to create a shorthand for more complex widgets.  This includes
+specifying component widgets and new default values for the keyword
+arguments.
 
 @defun widget-define name class doc &rest args
 Define a new widget type named @var{name} from @code{class}.
@@ -1363,7 +1363,7 @@ of the existing widget types.
 
 The third argument @var{DOC} is a documentation string for the widget.
 
-After the new widget has been defined, the following two calls will
+After the new widget has been defined the following two calls will
 create identical widgets:
 
 @itemize @bullet
@@ -1380,8 +1380,8 @@ create identical widgets:
 
 @end defun
 
-Using @code{widget-define} does just store the definition of the widget
-type in the @code{widget-type} property of @var{name}, which is what
+Using @code{widget-define} just stores the definition of the widget type
+in the @code{widget-type} property of @var{name}, which is what
 @code{widget-create} uses.
 
 If you just want to specify defaults for keywords with no complex
@@ -1394,7 +1394,7 @@ widgets:
 Function to convert a widget type before creating a widget of that
 type.  It takes a widget type as an argument, and returns the converted
 widget type.  When a widget is created, this function is called for the
-widget type and all the widgets parent types, most derived first. 
+widget type and all the widget's parent types, most derived first. 
 
 The following predefined functions can be used here:
 
@@ -1408,7 +1408,7 @@ Initialize @code{:value} from @code{:args} in @var{widget}.
 
 @item :value-to-internal
 Function to convert the value to the internal format.  The function
-takes two arguments, a widget and an external value, and returns the
+takes two arguments, a widget and an external value.  It returns the
 internal value.  The function is called on the present @code{:value}
 when the widget is created, and on any value set later with
 @code{widget-value-set}.
@@ -1422,8 +1422,8 @@ when the widget is created, and on any value set later with
 
 @item :create
 Function to create a widget from scratch.  The function takes one
-argument, a widget type, and create a widget of that type, insert it in
-the buffer, and return a widget object.
+argument, a widget type, and creates a widget of that type, inserts it
+in the buffer, and returns a widget object.
 
 @item :delete
 Function to delete a widget.  The function takes one argument, a widget,
@@ -1431,14 +1431,14 @@ and should remove all traces of the widget from the buffer.
 
 @item :value-create
 Function to expand the @samp{%v} escape in the format string.  It will
-be called with the widget as its argument.  Should
-insert a representation of the widgets value in the buffer.
+be called with the widget as its argument and should insert a
+representation of the widget's value in the buffer.
 
 @item :value-delete
-Should remove the representation of the widgets value from the buffer.
+Should remove the representation of the widget's value from the buffer.
 It will be called with the widget as its argument.  It doesn't have to
 remove the text, but it should release markers and delete nested widgets
-if such has been used.
+if such have been used.
 
 The following predefined function can be used here:
 
@@ -1462,8 +1462,8 @@ will be called with the widget and the escape character as arguments.
 You can set this to allow your widget to handle non-standard escapes.
 
 You should end up calling @code{widget-default-format-handler} to handle
-unknown escape sequences, which will handle the @samp{%h} and any future
-escape sequences, as well as give an error for unknown escapes.
+unknown escape sequences.  It will handle the @samp{%h} and any future
+escape sequences as well as give an error for unknown escapes.
 
 @item :action
 Function to handle user initiated events.  By default, @code{:notify}
@@ -1481,9 +1481,9 @@ Function to prompt for a value in the minibuffer.  The function should
 take four arguments, @var{widget}, @var{prompt}, @var{value}, and
 @var{unbound} and should return a value for widget entered by the user.
 @var{prompt} is the prompt to use.  @var{value} is the default value to
-use, unless @var{unbound} is non-nil in which case there are no default
+use, unless @var{unbound} is non-nil.  In this case there is no default
 value.  The function should read the value using the method most natural
-for this widget, and does not have to check that it matches.
+for this widget and does not have to check whether it matches.
 @end table
 
 If you want to define a new widget from scratch, use the @code{default}
index ef0b785..65ef9d5 100644 (file)
@@ -7,15 +7,15 @@
 @finalout
 @titlepage
 @title XEmacs FAQ
-@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1999/12/07 03:11:46 $
+@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1999/12/23 01:50:47 $
 @sp 1
-@author Tony Rossini <arossini@@stat.sc.edu>
+@author Tony Rossini <rossini@@biostat.washington.edu>
 @author Ben Wing <ben@@xemacs.org>
 @author Chuck Thompson <cthomp@@xemacs.org>
 @author Steve Baur <steve@@xemacs.org>
 @author Andreas Kaempf <andreas@@sccon.com>
 @author Christian Nyb@o{} <chr@@mediascience.no>
-@author Sandra Wambold <wambold@@pobox.com>
+@author Sandra Wambold <wambold@@xemacs.org>
 @page
 @end titlepage
 
@@ -182,6 +182,7 @@ Trouble Shooting:
 * 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)
 
 Customization and Options
 
@@ -424,7 +425,7 @@ considering XEmacs for their own use, or has just obtained it and is
 wondering what to do next.  It is also useful as a reference to
 available resources.
 
-The previous maintainer of the FAQ was @email{rossini@@stat.sc.edu,
+The previous maintainer of the FAQ was @email{rossini@@biostat.washington.edu,
 Anthony Rossini}, who started it, after getting tired of hearing JWZ
 complain about repeatedly having to answer questions.
 @email{ben@@xemacs.org, Ben Wing} and @email{cthomp@@xemacs.org, Chuck
@@ -435,15 +436,13 @@ contributors to this FAQ are listed later in this document.
 
 The previous version was converted to hypertext format, and edited by
 @email{steve@@xemacs.org, Steven L. Baur}.  It was converted back to
-texinfo by @email{hniksic@@xemacs.org, Hrvoje Niksic}.
-
-The FAQ was then maintained by @email{andreas@@sccon.com, Andreas
-Kaempf}, who passed it on to @email{faq@@xemacs.org, Christian
-Nyb@o{}}, the current FAQ maintainer.
+texinfo by @email{hniksic@@xemacs.org, Hrvoje Niksic}.  The FAQ was then
+maintained by @email{andreas@@sccon.com, Andreas Kaempf}, who passed it
+on to ChristianNyb@o{}.
 
 If you notice any errors or items which should be added or amended to
-this FAQ please send email to @email{faq@@xemacs.org, Christian
-Nyb@o{}}. Include @samp{XEmacs FAQ} on the Subject: line.
+this FAQ please send email to @email{faq@@xemacs.org, Sandra
+Wambold}.  Include @samp{XEmacs FAQ} on the Subject: line.
 
 @menu
 Introduction:
@@ -728,8 +727,10 @@ XEmacs web site in the future.
 @unnumberedsubsec Q1.1.1: What is the FAQ editorial policy?
 
 The FAQ is actively maintained and modified regularly.  All links should
-be up to date.  All submissions are welcome.  E-mail submissions to
-@email{faq@@xemacs.org, XEmacs FAQ maintainers}.
+be up to date.  Unfortunately, some of the information is out of date --
+a situation which the FAQ maintainer is working on.  All submissions are
+welcome, please e-mail submissions to @email{faq@@xemacs.org, XEmacs FAQ
+maintainers}.
 
 Please make sure that @samp{XEmacs FAQ} appears on the Subject: line.
 If you think you have a better way of answering a question, or think a
@@ -1331,6 +1332,7 @@ Trouble Shooting:
 * 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)
 @end menu
 
 @node Q2.0.1, Q2.0.2, Installation, Installation
@@ -2547,7 +2549,7 @@ debug-on-quit doesn't work if something's turned on inhibit-quit or in
 some other strange cases.
 @end quotation
 
-@node Q2.1.23,  , Q2.1.22, Installation
+@node Q2.1.23, Q2.1.24, Q2.1.22, Installation
 @unnumberedsubsec Q2.1.23:  Movemail on Linux does not work for XEmacs 19.15 and later.
 
 Movemail used to work fine in 19.14 but has stopped working in 19.15
@@ -2566,6 +2568,20 @@ and uncomment the line that reads:
 @end example
 @end quotation
 
+@node Q2.1.24,  , Q2.1.23, Installation
+@unnumberedsubsec Q2.1.24:  XEmacs won't start without network. (NEW)
+Q2.1.23:  Movemail on Linux does not work for XEmacs 19.15 and later.
+
+If XEmacs starts when you're on the network, but fails when you're not
+on the network, you may be missing a "localhost" entry in your
+@file{/etc/hosts} file.  The file should contain an entry like:
+
+@example
+127.0.0.1        localhost
+@end example
+
+Add that line, and XEmacs will be happy.
+
 @node Customization, Subsystems, Installation, Top
 @unnumbered 3 Customization and Options
 
@@ -4925,23 +4941,10 @@ appreciated.
 
 @node Q4.7.6,  , Q4.7.5, Subsystems
 @unnumberedsubsec Q4.7.5: Is there a MatLab mode?
-@c New
-Is there any way I can get syntax highlighting for MatLab .m files?
-Can I "teach" emacs what words are MatLab commands, comments, etc. ?
-
-@email{elsner@@mathematik.tu-chemnitz.de, Ulrich Elsner} writes:
-@quotation
-One way to do this (and much more) is by using the
-@iftex
-@*
-@end iftex
-@comment @uref{ftp://ftp.mathworks.com/pub/contrib/v5/tools/matlab.el, matlab mode}.
-matlab mode.  (If someone knows where this can be found, please contact
-the @email{faq@@xemacs.org,XEmacs FAQ maintainer}.
-
-Instructions on how to install this mode are included in this file.
-@end quotation
 
+Yes, a matlab mode and other items are available at the
+@uref{ftp://ftp.mathworks.com/pub/contrib/emacs_add_ons,
+MathWorks' emacs_add_ons ftp directory}.
 
 @node Miscellaneous, MS Windows, Subsystems, Top
 @unnumbered 5 The Miscellaneous Stuff
index 3f537e4..994629c 100644 (file)
@@ -1,8 +1,17 @@
+1999-12-24  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.25 is released.
+
+1999-12-15  Scott Blachowicz  <Scott.Blachowicz@seaslug.org>
+
+       * minitar.c (main): Add explicit exit(0) to get successful return
+       code.
+
 1999-12-14  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.24 is released.
 
-1999-11-28  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-11-28  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak (depend): Only update `depend' if there were changes.
        Use "perl ./make-src-depend" instead of "mkdepend".
@@ -11,7 +20,7 @@
 
        * XEmacs 21.2.23 is released.
 
-1999-11-27  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-11-27  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak (SRCDIR): Make path to xemacs absolute to
        facilitate building info in man subdirs.  Echo all cd commands,
@@ -48,7 +57,7 @@
        * xemacs.mak: Ignore return code of 'del' calls. Use a make
        variable for 'del'.
 
-1999-09-26  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-09-26  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak (all): Update $(LISP)/auto-autoloads.elc? and
        $(LISP)/custom-load.el using XEmacs itself, like xemacs-packages
@@ -60,7 +69,7 @@
 
        * xemacs.mak (HAVE_WIDGETS): add define to appropriate places.
 
-1999-07-26  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-07-26  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak ($(MANDIR)\lispref\lispref.texi): Replace bad
        dependency.
@@ -69,7 +78,7 @@
 
        * XEmacs 21.2.19 is released
 
-1999-07-10  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-07-10  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak (.SUFFIXES): Add .texi.
        (check): Improve automated test section.
@@ -88,7 +97,7 @@
 
        * XEmacs 21.2.17 is released
 
-1999-06-13  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-06-13  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak (DOC_SRC8): Remove mule-coding.c.
        (TEMACS_MULE_OBJS): Remove mule-coding.obj
 
        * XEmacs 21.2.16 is released
 
-1999-05-14  Adrian Aichner  &lt;aichner@ecf.teradyne.com&gt;
+1999-05-14  Adrian Aichner  &lt;adrian@xemacs.org&gt;
 
        * xemacs.mak (GUNG_HO): Explicitly default to 0.
        Fix some comment typos.
        * xemacs.mak ($(LISP)\Installation.el): Don't use
        `replace-in-string'.
 
-1999-03-17  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-03-17  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak: Remove ESC macro -- no longer needed.
        Remove small configuration report.  Remove simplified version of
 
        * XEmacs 21.2.9 is released
 
-1999-01-14  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-01-14  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak (MODULES): Adding variable.
        (update-elc): Setting EMACSBOOTSTRAPMODULEPATH.
 
        * XEmacs 21.2.6 is released
 
-1998-12-11  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-12-11  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak (DOC_SRC2): CLASH_DETECTION is not supported under
        native Windows NT.  Therefore src\filelock.c is not to be
        (DOC_SRC4): 
        - Remove pure.c, pure.obj
 
-1998-11-04  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-11-04  Adrian Aichner  <adrian@xemacs.org>
 
        * xemacs.mak: Creating minimal versions of Installation,
        Installation.el, and config.values to make
 
        * XEmacs 21.2-beta2 is released.
 
-1998-09-19  Adrian Aichner  <aichner@ecf.teradyne.com>
+1998-09-19  Adrian Aichner  <adrian@xemacs.org>
 
        * tiff.mak: New file provided by Charles Wilson
          <cwilson@ee.gatech.edu>
 
        * config.h:
        * xemacs.mak: NT native sound fixes
-       From Fabrice POPINEAU via Adrian Aichner <aichner@ecf.teradyne.com>
+       From Fabrice POPINEAU via Adrian Aichner <adrian@xemacs.org>
 
 1998-06-21  Martin Buchholz  <martin@xemacs.org>
 
 
        * xemacs.mak (distclean): Reorder when puresize-adjust.h gets
        deleted.
-       From Adrian Aichner <aichner@ecf.teradyne.com>
+       From Adrian Aichner <adrian@xemacs.org>
 
 1998-06-08  Kirill M. Katsnelson  <kkm@kis.ru>
 
index 4d89875..75127f6 100644 (file)
@@ -204,6 +204,7 @@ main(int argc, char **argv)
        in_block = 0;
     }
   }
+  exit (0);
 }      
 
 
index 03a4b77..df89f68 100644 (file)
@@ -1,3 +1,180 @@
+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.
        * fileio.c (vars_of_fileio): directory separator fix from Mike Alexander.
        * windowsnt.h (ditto):
 
-1999-11-27  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-11-27  Adrian Aichner  <adrian@xemacs.org>
 
        * sysfile.h: Encapsulate `fstat' for Windows NT just like stat to
        get consistent file modification times.
 
        * esd.c: New file
 
-1999-10-24  Adrian Aichner <aichner@ecf.teradyne.com>
+1999-10-24  Adrian Aichner <adrian@xemacs.org>
 
        * lisp.h (Dynarr_declare): Fix boo-boo.
 
        (image_instantiator_format_create): xface declarations moved from
        glyphs-x.c.
 
-1999-01-14  Adrian Aichner  <aichner@ecf.teradyne.com>
+1999-01-14  Adrian Aichner  <adrian@xemacs.org>
 
        * event-stream.c (vars_of_event_stream): Fixing documentation.
 
          substitute-in-file-name because we don't know that the
          filename refers to a local file.
 
-1998-06-24  Adrian Aichner  <aichner@ecf.teradyne.com>
+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.
index cef8f86..36aede3 100644 (file)
@@ -320,6 +320,7 @@ DUMPENV = $(LOADPATH) $(MODULEPATH)
 temacs_loadup = $(DUMPENV) ./temacs -batch -l ${srcdir}/../lisp/loadup.el
 dump_temacs   = ${temacs_loadup} dump
 run_temacs    = ${temacs_loadup} run-temacs
+debug_temacs = $(DUMPENV) gdb temacs
 
 release: temacs ${libsrc}DOC $(mo_file) ${other_files}
 #ifdef CANNOT_DUMP
@@ -492,6 +493,9 @@ run-rtcmacs: rtcmacs
        runargs -batch -l ${srcdir}/../lisp/loadup.el run-temacs -q; \
        run' rtcmacs
 
+debug-temacs: temacs
+       -${debug_temacs}
+
 ## Purify, Quantify, PureCoverage are software quality products from
 ## Rational, formerly Pure Atria, formerly Pure Software.
 ##
index ec6afef..19d6345 100644 (file)
@@ -1624,6 +1624,8 @@ thus, the least likely buffer for \\[switch-to-buffer] to select by default.
 If BUFFER is nil or omitted, bury the current buffer.
 Also, if BUFFER is nil or omitted, remove the current buffer from the
 selected window if it is displayed there.
+Because of this, you may need to specify (current-buffer) as
+BUFFER when calling from minibuffer.
 If BEFORE is non-nil, it specifies a buffer before which BUFFER
 will be placed, instead of being placed at the end.
 */
index 6e3d980..f533083 100644 (file)
@@ -1441,7 +1441,7 @@ do                                                \
 
 #define POINT_MARKER_P(marker) \
    (XMARKER (marker)->buffer != 0 && \
-    EQ ((marker), XMARKER (marker)->buffer->point_marker))
+    EQ (marker, XMARKER (marker)->buffer->point_marker))
 
 #define BUF_MARKERS(buf) ((buf)->markers)
 
index 4d0cab8..eba7f4d 100644 (file)
@@ -518,8 +518,8 @@ Don't call this unless you know what you're doing.
      like the real thing.  This is slightly bogus, but it's in here for
      compatibility with Emacs 18.  It's not even clear what the "right
      thing" is. */
-  if (!(((STRINGP (Vexecuting_macro) || VECTORP (Vexecuting_macro))
-         && XINT (Flength (Vexecuting_macro)) == 1)))
+  if (!((STRINGP (Vexecuting_macro) || VECTORP (Vexecuting_macro))
+       && XINT (Flength (Vexecuting_macro)) == 1))
     Vlast_command = Qt;
 
 #ifndef LISP_COMMAND_LOOP
@@ -533,7 +533,7 @@ Don't call this unless you know what you're doing.
          focus is selected. */
       if (focus_follows_mouse)
         investigate_frame_change ();
-      
+
       /* Make sure the current window's buffer is selected.  */
       {
        Lisp_Object selected_window = Fselected_window (Qnil);
index 3aa4aba..361563f 100644 (file)
@@ -499,6 +499,16 @@ char *alloca();
 
 #define CONST const
 
+/* Allow the source to use standard types. Include these before the
+ s&m files so that they can use them. */
+#undef ssize_t
+#undef size_t
+#undef pid_t
+#undef mode_t
+#undef off_t
+#undef uid_t
+#undef gid_t
+
 /* If defined, use unions instead of ints.  A few systems (DEC Alpha)
    seem to require this, probably because something with the int
    definitions isn't right with 64-bit systems.  */
@@ -550,15 +560,6 @@ extern "C" {
 #define SIGRETURN return
 #endif
 
-/* Allow the source to use standard types */
-#undef ssize_t
-#undef size_t
-#undef pid_t
-#undef mode_t
-#undef off_t
-#undef uid_t
-#undef gid_t
-
 /* Define DYNODUMP if it is necessary to properly dump on this system.
    Currently this is only Solaris 2.x, for x < 6. */
 #undef DYNODUMP
index 31739ab..b710015 100644 (file)
@@ -113,7 +113,6 @@ struct Lisp_Database
 #define XDATABASE(x) XRECORD (x, database, Lisp_Database)
 #define XSETDATABASE(x, p) XSETRECORD (x, p, database)
 #define DATABASEP(x) RECORDP (x, database)
-#define GC_DATABASEP(x) GC_RECORDP (x, database)
 #define CHECK_DATABASE(x) CHECK_RECORD (x, database)
 #define CONCHECK_DATABASE(x) CONCHECK_RECORD (x, database)
 #define DATABASE_LIVE_P(x) (x->live_p)
index 30b173d..6866bef 100644 (file)
@@ -440,7 +440,8 @@ If BUFFER is nil, the current buffer is assumed.
 
 DEFUN ("point-min", Fpoint_min, 0, 1, 0, /*
 Return the minimum permissible value of point in BUFFER.
-This is 1, unless narrowing (a buffer restriction) is in effect.
+This is 1, unless narrowing (a buffer restriction)
+is in effect, in which case it may be greater.
 If BUFFER is nil, the current buffer is assumed.
 */
        (buffer))
@@ -451,7 +452,8 @@ If BUFFER is nil, the current buffer is assumed.
 
 DEFUN ("point-min-marker", Fpoint_min_marker, 0, 1, 0, /*
 Return a marker to the minimum permissible value of point in BUFFER.
-This is the beginning, unless narrowing (a buffer restriction) is in effect.
+This is the beginning, unless narrowing (a buffer restriction)
+is in effect, in which case it may be greater.
 If BUFFER is nil, the current buffer is assumed.
 */
        (buffer))
@@ -463,7 +465,7 @@ If BUFFER is nil, the current buffer is assumed.
 DEFUN ("point-max", Fpoint_max, 0, 1, 0, /*
 Return the maximum permissible value of point in BUFFER.
 This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
-is in effect, in which case it is less.
+is in effect, in which case it may be less.
 If BUFFER is nil, the current buffer is assumed.
 */
        (buffer))
@@ -473,9 +475,9 @@ If BUFFER is nil, the current buffer is assumed.
 }
 
 DEFUN ("point-max-marker", Fpoint_max_marker, 0, 1, 0, /*
-Return a marker to the maximum permissible value of point BUFFER.
+Return a marker to the maximum permissible value of point in BUFFER.
 This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
-is in effect, in which case it is less.
+is in effect, in which case it may be less.
 If BUFFER is nil, the current buffer is assumed.
 */
        (buffer))
@@ -564,11 +566,11 @@ If BUFFER is nil, the current buffer is assumed.
 }
 
 DEFUN ("char-after", Fchar_after, 0, 2, 0, /*
-Return character in BUFFER at position POS.
-POS is an integer or a buffer pointer.
+Return the character at position POS in BUFFER.
+POS is an integer or a marker.
 If POS is out of range, the value is nil.
-If BUFFER is nil, the current buffer is assumed.
 if POS is nil, the value of point is assumed.
+If BUFFER is nil, the current buffer is assumed.
 */
        (pos, buffer))
 {
@@ -582,17 +584,17 @@ if POS is nil, the value of point is assumed.
 }
 
 DEFUN ("char-before", Fchar_before, 0, 2, 0, /*
-Return character in BUFFER before position POS.
-POS is an integer or a buffer pointer.
+Return the character preceding position POS in BUFFER.
+POS is an integer or a marker.
 If POS is out of range, the value is nil.
-If BUFFER is nil, the current buffer is assumed.
 if POS is nil, the value of point is assumed.
+If BUFFER is nil, the current buffer is assumed.
 */
        (pos, buffer))
 {
   struct buffer *b = decode_buffer (buffer, 1);
-  Bufpos n = ((NILP (pos) ? BUF_PT (b) :
-              get_buffer_pos_char (b, pos, GB_NO_ERROR_IF_BAD)));
+  Bufpos n = (NILP (pos) ? BUF_PT (b) :
+             get_buffer_pos_char (b, pos, GB_NO_ERROR_IF_BAD));
 
   n--;
 
@@ -2231,17 +2233,16 @@ If BUFFER is nil, the current buffer is assumed.
     ? Qt : Qnil;
 }
 
-DEFUN ("char=", Fchar_Equal, 2, 3, 0, /*
+DEFUN ("char=", Fchar_Equal, 2, 2, 0, /*
 Return t if two characters match, case is significant.
 Both arguments must be characters (i.e. NOT integers).
-The optional buffer argument is for symmetry and is ignored.
 */
-       (c1, c2, buffer))
+       (c1, c2))
 {
   CHECK_CHAR_COERCE_INT (c1);
   CHECK_CHAR_COERCE_INT (c2);
 
-  return XCHAR(c1) == XCHAR(c2) ? Qt : Qnil;
+  return EQ (c1, c2) ? Qt : Qnil;
 }
 \f
 #if 0 /* Undebugged FSFmacs code */
index 384b1e5..29fe779 100644 (file)
@@ -70,13 +70,13 @@ typedef struct Lisp_Hash_Table Lisp_Hash_Table;
 #define HASH_TABLE_DEFAULT_REHASH_SIZE 1.3
 #define HASH_TABLE_MIN_SIZE 10
 
-#define HASH_CODE(key, ht)                                                     \
-  (((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key))       \
-     * (ht)->golden_ratio)                                                             \
-    % (ht)->size))
+#define HASH_CODE(key, ht)                                             \
+((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key))  \
+  * (ht)->golden_ratio)                                                        \
+ % (ht)->size)
 
 #define KEYS_EQUAL_P(key1, key2, testfun) \
-  (EQ ((key1), (key2)) || ((testfun) && (testfun) ((key1), (key2))))
+  (EQ (key1, key2) || ((testfun) && (testfun) (key1, key2)))
 
 #define LINEAR_PROBING_LOOP(probe, entries, size)              \
   for (;                                                       \
index 6a0c91c..3911ef6 100644 (file)
@@ -73,7 +73,7 @@ typedef unsigned int SOCKET;
 #include <io.h>
 #include <errno.h>
 
-#if defined (__CYGWIN32__) && !defined (CYGWIN_VERSION_DLL_MAJOR)
+#if defined (__CYGWIN32__) && (CYGWIN_VERSION_DLL_MAJOR < 20)
 typedef NMHDR *LPNMHDR;
 #endif
 
index 48bd9fc..6cd03cd 100644 (file)
@@ -384,7 +384,6 @@ static Lisp_Object recursive_sit_for;
   XRECORD (x, command_builder, struct command_builder)
 #define XSETCOMMAND_BUILDER(x, p) XSETRECORD (x, p, command_builder)
 #define COMMAND_BUILDERP(x) RECORDP (x, command_builder)
-#define GC_COMMAND_BUILDERP(x) GC_RECORDP (x, command_builder)
 #define CHECK_COMMAND_BUILDER(x) CHECK_RECORD (x, command_builder)
 
 static Lisp_Object
index 49bda9a..97573bb 100644 (file)
@@ -371,7 +371,7 @@ unlock_all_files ()
   register Lisp_Object tail;
   register struct buffer *b;
 
-  for (tail = Vbuffer_alist; GC_CONSP (tail); tail = XCDR (tail))
+  for (tail = Vbuffer_alist; CONSP (tail); tail = XCDR (tail))
     {
       b = XBUFFER (XCDR (XCAR (tail)));
       if (STRINGP (b->file_truename) && BUF_SAVE_MODIFF (b) < BUF_MODIFF (b))
index 5dd8496..21c819d 100644 (file)
@@ -705,19 +705,19 @@ This is the same as the exponent of a float.
   double f = extract_float (arg);
 
   if (f == 0.0)
-    return make_int (- (int)((((EMACS_UINT) 1) << (VALBITS - 1)))); /* most-negative-fixnum */
+    return make_int (- (EMACS_INT)(((EMACS_UINT) 1) << (VALBITS - 1))); /* most-negative-fixnum */
 #ifdef HAVE_LOGB
   {
     Lisp_Object val;
-    IN_FLOAT (val = make_int ((int) logb (f)), "logb", arg);
-    return (val);
+    IN_FLOAT (val = make_int ((EMACS_INT) logb (f)), "logb", arg);
+    return val;
   }
 #else
 #ifdef HAVE_FREXP
   {
     int exqp;
     IN_FLOAT (frexp (f, &exqp), "logb", arg);
-    return (make_int (exqp - 1));
+    return make_int (exqp - 1);
   }
 #else
   {
@@ -741,7 +741,7 @@ This is the same as the exponent of a float.
         f /= d;
         val += i;
       }
-    return (make_int (val));
+    return make_int (val);
   }
 #endif /* ! HAVE_FREXP */
 #endif /* ! HAVE_LOGB */
index 0b110e8..6cbc1be 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -1894,10 +1894,10 @@ plists_differ (Lisp_Object a, Lisp_Object b, int nil_means_not_present,
        {
          if (!laxp ? EQ (k, keys [i]) : internal_equal (k, keys [i], depth))
            {
-             if ((eqp
-                  /* We narrowly escaped being Ebolified here. */
-                  ? !EQ_WITH_EBOLA_NOTICE (v, vals [i])
-                  : !internal_equal (v, vals [i], depth)))
+             if (eqp
+                 /* We narrowly escaped being Ebolified here. */
+                 ? !EQ_WITH_EBOLA_NOTICE (v, vals [i])
+                 : !internal_equal (v, vals [i], depth))
                /* a property in B has a different value than in A */
                goto MISMATCH;
              flags [i] = 1;
@@ -2864,7 +2864,7 @@ Do not use it.
 
 \f
 DEFUN ("fillarray", Ffillarray, 2, 2, 0, /*
-Store each element of ARRAY with ITEM.
+Destructively modify ARRAY by replacing each element with ITEM.
 ARRAY is a vector, bit vector, or string.
 */
        (array, item))
@@ -2872,15 +2872,28 @@ ARRAY is a vector, bit vector, or string.
  retry:
   if (STRINGP (array))
     {
-      Emchar charval;
       struct Lisp_String *s = XSTRING (array);
-      Charcount len = string_char_length (s);
-      Charcount i;
+      Bytecount old_bytecount = string_length (s);
+      Bytecount new_bytecount;
+      Bytecount item_bytecount;
+      Bufbyte item_buf[MAX_EMCHAR_LEN];
+      Bufbyte *p;
+      Bufbyte *end;
+
       CHECK_CHAR_COERCE_INT (item);
       CHECK_LISP_WRITEABLE (array);
-      charval = XCHAR (item);
-      for (i = 0; i < len; i++)
-       set_string_char (s, i, charval);
+
+      item_bytecount = set_charptr_emchar (item_buf, XCHAR (item));
+      new_bytecount = item_bytecount * string_char_length (s);
+
+      resize_string (s, -1, new_bytecount - old_bytecount);
+
+      for (p = string_data (s), end = p + new_bytecount;
+          p < end;
+          p += item_bytecount)
+       memcpy (p, item_buf, item_bytecount);
+      *p = '\0';
+
       bump_string_modiff (array);
     }
   else if (VECTORP (array))
@@ -3043,15 +3056,16 @@ changing the value of `foo'.
 }
 
 \f
-/* This is the guts of all mapping functions.
-   Apply fn to each element of seq, one by one,
-   storing the results into elements of vals, a C vector of Lisp_Objects.
-   leni is the length of vals, which should also be the length of seq.
+/* This is the guts of several mapping functions.
+   Apply FUNCTION to each element of SEQUENCE, one by one,
+   storing the results into elements of VALS, a C vector of Lisp_Objects.
+   LENI is the length of VALS, which should also be the length of SEQUENCE.
 
    If VALS is a null pointer, do not accumulate the results. */
 
 static void
-mapcar1 (size_t leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
+mapcar1 (size_t leni, Lisp_Object *vals,
+        Lisp_Object function, Lisp_Object sequence)
 {
   Lisp_Object result;
   Lisp_Object args[2];
@@ -3064,21 +3078,61 @@ mapcar1 (size_t leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
       gcpro1.nvars = 0;
     }
 
-  args[0] = fn;
+  args[0] = function;
 
-  if (LISTP (seq))
+  if (LISTP (sequence))
     {
-      for (i = 0; i < leni; i++)
+      /* A devious `function' could either:
+        - insert garbage into the list in front of us, causing XCDR to crash
+        - amputate the list behind us using (setcdr), causing the remaining
+          elts to lose their GCPRO status.
+
+        if (vals != 0) we avoid this by copying the elts into the
+        `vals' array.  By a stroke of luck, `vals' is exactly large
+        enough to hold the elts left to be traversed as well as the
+        results computed so far.
+
+        if (vals == 0) we don't have any free space available and
+        don't want to eat up any more stack with alloca().
+        So we use EXTERNAL_LIST_LOOP_3 and GCPRO the tail. */
+
+      if (vals)
        {
-         args[1] = XCAR (seq);
-         seq = XCDR (seq);
-         result = Ffuncall (2, args);
-         if (vals) vals[gcpro1.nvars++] = result;
+         Lisp_Object *val = vals;
+         Lisp_Object elt;
+
+         LIST_LOOP_2 (elt, sequence)
+             *val++ = elt;
+
+         gcpro1.nvars = leni;
+
+         for (i = 0; i < leni; i++)
+           {
+             args[1] = vals[i];
+             vals[i] = Ffuncall (2, args);
+           }
+       }
+      else
+       {
+         Lisp_Object elt, tail;
+         struct gcpro ngcpro1;
+
+         NGCPRO1 (tail);
+
+         {
+           EXTERNAL_LIST_LOOP_3 (elt, sequence, tail)
+             {
+               args[1] = elt;
+               Ffuncall (2, args);
+             }
+         }
+
+         NUNGCPRO;
        }
     }
-  else if (VECTORP (seq))
+  else if (VECTORP (sequence))
     {
-      Lisp_Object *objs = XVECTOR_DATA (seq);
+      Lisp_Object *objs = XVECTOR_DATA (sequence);
       for (i = 0; i < leni; i++)
        {
          args[1] = *objs++;
@@ -3086,10 +3140,16 @@ mapcar1 (size_t leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
          if (vals) vals[gcpro1.nvars++] = result;
        }
     }
-  else if (STRINGP (seq))
+  else if (STRINGP (sequence))
     {
-      Bufbyte *p = XSTRING_DATA (seq);
-      for (i = 0; i < leni; i++)
+      /* The string data of `sequence' might be relocated during GC. */
+      Bytecount slen = XSTRING_LENGTH (sequence);
+      Bufbyte *p = alloca_array (Bufbyte, slen);
+      Bufbyte *end = p + slen;
+
+      memcpy (p, XSTRING_DATA (sequence), slen);
+
+      while (p < end)
        {
          args[1] = make_char (charptr_emchar (p));
          INC_CHARPTR (p);
@@ -3097,9 +3157,9 @@ mapcar1 (size_t leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
          if (vals) vals[gcpro1.nvars++] = result;
        }
     }
-  else if (BIT_VECTORP (seq))
+  else if (BIT_VECTORP (sequence))
     {
-      struct Lisp_Bit_Vector *v = XBIT_VECTOR (seq);
+      struct Lisp_Bit_Vector *v = XBIT_VECTOR (sequence);
       for (i = 0; i < leni; i++)
        {
          args[1] = make_int (bit_vector_bit (v, i));
@@ -3108,20 +3168,21 @@ mapcar1 (size_t leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
        }
     }
   else
-    abort(); /* cannot get here since Flength(seq) did not get an error */
+    abort(); /* cannot get here since Flength(sequence) did not get an error */
 
   if (vals)
     UNGCPRO;
 }
 
 DEFUN ("mapconcat", Fmapconcat, 3, 3, 0, /*
-Apply FN to each element of SEQ, and concat the results as strings.
-In between each pair of results, stick in SEP.
-Thus, " " as SEP results in spaces between the values returned by FN.
+Apply FUNCTION to each element of SEQUENCE, and concat the results as strings.
+In between each pair of results, insert SEPARATOR.  Thus, using " " as
+SEPARATOR results in spaces between the values returned by FUNCTION.
+SEQUENCE may be a list, a vector, a bit vector, or a string.
 */
-       (fn, seq, sep))
+       (function, sequence, separator))
 {
-  size_t len = XINT (Flength (seq));
+  size_t len = XINT (Flength (sequence));
   Lisp_Object *args;
   int i;
   struct gcpro gcpro1;
@@ -3131,47 +3192,47 @@ Thus, " " as SEP results in spaces between the values returned by FN.
 
   args = alloca_array (Lisp_Object, nargs);
 
-  GCPRO1 (sep);
-  mapcar1 (len, args, fn, seq);
+  GCPRO1 (separator);
+  mapcar1 (len, args, function, sequence);
   UNGCPRO;
 
   for (i = len - 1; i >= 0; i--)
     args[i + i] = args[i];
 
   for (i = 1; i < nargs; i += 2)
-    args[i] = sep;
+    args[i] = separator;
 
   return Fconcat (nargs, args);
 }
 
 DEFUN ("mapcar", Fmapcar, 2, 2, 0, /*
-Apply FUNCTION to each element of SEQUENCE, and make a list of the results.
-The result is a list just as long as SEQUENCE.
+Apply FUNCTION to each element of SEQUENCE; return a list of the results.
+The result is a list of the same length as SEQUENCE.
 SEQUENCE may be a list, a vector, a bit vector, or a string.
 */
-       (fn, seq))
+       (function, sequence))
 {
-  size_t len = XINT (Flength (seq));
+  size_t len = XINT (Flength (sequence));
   Lisp_Object *args = alloca_array (Lisp_Object, len);
 
-  mapcar1 (len, args, fn, seq);
+  mapcar1 (len, args, function, sequence);
 
   return Flist (len, args);
 }
 
 DEFUN ("mapvector", Fmapvector, 2, 2, 0, /*
-Apply FUNCTION to each element of SEQUENCE, making a vector of the results.
+Apply FUNCTION to each element of SEQUENCE; return a vector of the results.
 The result is a vector of the same length as SEQUENCE.
-SEQUENCE may be a list, a vector or a string.
+SEQUENCE may be a list, a vector, a bit vector, or a string.
 */
-       (fn, seq))
+       (function, sequence))
 {
-  size_t len = XINT (Flength (seq));
+  size_t len = XINT (Flength (sequence));
   Lisp_Object result = make_vector (len, Qnil);
   struct gcpro gcpro1;
 
   GCPRO1 (result);
-  mapcar1 (len, XVECTOR_DATA (result), fn, seq);
+  mapcar1 (len, XVECTOR_DATA (result), function, sequence);
   UNGCPRO;
 
   return result;
@@ -3186,11 +3247,11 @@ which is more efficient if you do not use the results.
 The difference between this and `mapc' is that `mapc' supports all
 the spiffy Common Lisp arguments.  You should normally use `mapc'.
 */
-       (fn, seq))
+       (function, sequence))
 {
-  mapcar1 (XINT (Flength (seq)), 0, fn, seq);
+  mapcar1 (XINT (Flength (sequence)), 0, function, sequence);
 
-  return seq;
+  return sequence;
 }
 
 \f
index fd318b3..00506b5 100644 (file)
@@ -1,6 +1,6 @@
 /* mswindows-specific glyph objects.
    Copyright (C) 1998, 1999 Andy Piper.
-   
+
 This file is part of XEmacs.
 
 XEmacs is free software; you can redistribute it and/or modify it
@@ -63,13 +63,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 (mswindows, xpm);
 #endif
@@ -102,7 +102,7 @@ mswindows_initialize_dibitmap_image_instance (struct Lisp_Image_Instance *ii,
                                             int slices,
                                             enum image_instance_type type);
 static void
-mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image, 
+mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
                                          struct frame* f);
 
 COLORREF mswindows_string_to_color (CONST char *name);
@@ -137,7 +137,7 @@ static BITMAPINFO* convert_EImage_to_DIBitmap (Lisp_Object device,
        * structure - unless it has memory / color allocation implications
        * .... */
       bmp_info=xnew_and_zero (BITMAPINFO);
-      
+
       if (!bmp_info)
        {
          return NULL;
@@ -145,7 +145,7 @@ static BITMAPINFO* convert_EImage_to_DIBitmap (Lisp_Object device,
 
       bmp_info->bmiHeader.biBitCount=24; /* just RGB triples for now */
       bmp_info->bmiHeader.biCompression=BI_RGB; /* just RGB triples for now */
-      bmp_info->bmiHeader.biSizeImage=width*height*3; 
+      bmp_info->bmiHeader.biSizeImage=width*height*3;
 
       /* bitmap data needs to be in blue, green, red triples - in that
         order, eimage is in RGB format so we need to convert */
@@ -181,7 +181,7 @@ static BITMAPINFO* convert_EImage_to_DIBitmap (Lisp_Object device,
 
       /* use our quantize table to allocate the colors */
       ncolors = qtable->num_active_colors;
-      bmp_info=(BITMAPINFO*)xmalloc_and_zero (sizeof(BITMAPINFOHEADER) + 
+      bmp_info=(BITMAPINFO*)xmalloc_and_zero (sizeof(BITMAPINFOHEADER) +
                                             sizeof(RGBQUAD) * ncolors);
       if (!bmp_info)
        {
@@ -191,12 +191,12 @@ static BITMAPINFO* convert_EImage_to_DIBitmap (Lisp_Object device,
 
       colortbl=(RGBQUAD*)(((unsigned char*)bmp_info)+sizeof(BITMAPINFOHEADER));
 
-      bmp_info->bmiHeader.biBitCount=8; 
-      bmp_info->bmiHeader.biCompression=BI_RGB; 
+      bmp_info->bmiHeader.biBitCount=8;
+      bmp_info->bmiHeader.biCompression=BI_RGB;
       bmp_info->bmiHeader.biSizeImage=bpline*height;
-      bmp_info->bmiHeader.biClrUsed=ncolors; 
-      bmp_info->bmiHeader.biClrImportant=ncolors; 
-      
+      bmp_info->bmiHeader.biClrUsed=ncolors;
+      bmp_info->bmiHeader.biClrImportant=ncolors;
+
       *bmp_data = (unsigned char *) xmalloc_and_zero (bpline * height);
       *bit_count = bpline * height;
 
@@ -206,7 +206,7 @@ static BITMAPINFO* convert_EImage_to_DIBitmap (Lisp_Object device,
          xfree (bmp_info);
          return NULL;
        }
-      
+
       /* build up an RGBQUAD colortable */
       for (i = 0; i < qtable->num_active_colors; i++) {
        colortbl[i].rgbRed = (BYTE) qtable->rm[i];
@@ -228,14 +228,14 @@ static BITMAPINFO* convert_EImage_to_DIBitmap (Lisp_Object device,
        }
       }
       xfree (qtable);
-    } 
+    }
   /* fix up the standard stuff */
   bmp_info->bmiHeader.biWidth=width;
   bmp_info->bmiHeader.biHeight=height;
   bmp_info->bmiHeader.biPlanes=1;
   bmp_info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
   bmp_info->bmiHeader.biXPelsPerMeter=0; /* unless you know better */
-  bmp_info->bmiHeader.biYPelsPerMeter=0; 
+  bmp_info->bmiHeader.biYPelsPerMeter=0;
 
   return bmp_info;
 }
@@ -273,7 +273,7 @@ mswindows_locate_pixmap_file (Lisp_Object name)
       locate_file (temp, name, Qnil, &found, R_OK);
       UNGCPRO;
     }
-    
+
   return found;
 }
 
@@ -292,7 +292,7 @@ init_image_instance_from_dibitmap (struct Lisp_Image_Instance *ii,
                                   void *bmp_data,
                                   int bmp_bits,
                                   int slices,
-                                  Lisp_Object instantiator, 
+                                  Lisp_Object instantiator,
                                   int x_hot, int y_hot,
                                   int create_mask)
 {
@@ -311,20 +311,20 @@ init_image_instance_from_dibitmap (struct Lisp_Image_Instance *ii,
     signal_simple_error ("No selected frame on mswindows device", device);
 
   f = XFRAME (DEVICE_SELECTED_FRAME (d));
-  
+
   if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
     type = IMAGE_COLOR_PIXMAP;
   else if (dest_mask & IMAGE_POINTER_MASK)
     type = IMAGE_POINTER;
-  else 
+  else
     incompatible_image_types (instantiator, dest_mask,
                              IMAGE_COLOR_PIXMAP_MASK | IMAGE_POINTER_MASK);
   hdc = FRAME_MSWINDOWS_CDC (f);
 
-  bitmap=CreateDIBSection (hdc,  
+  bitmap=CreateDIBSection (hdc,
                          bmp_info,
                          DIB_RGB_COLORS,
-                         &bmp_buf, 
+                         &bmp_buf,
                          0,0);
 
   if (!bitmap || !bmp_buf)
@@ -352,7 +352,7 @@ init_image_instance_from_dibitmap (struct Lisp_Image_Instance *ii,
     {
       mswindows_initialize_image_instance_mask (ii, f);
     }
-  
+
   if (type == IMAGE_POINTER)
     {
       mswindows_initialize_image_instance_icon(ii, TRUE);
@@ -372,12 +372,12 @@ image_instance_add_dibitmap (struct Lisp_Image_Instance *ii,
   struct frame *f = XFRAME (DEVICE_SELECTED_FRAME (d));
   void* bmp_buf=0;
   HDC hdc = FRAME_MSWINDOWS_CDC (f);
-  HBITMAP bitmap = CreateDIBSection (hdc,  
+  HBITMAP bitmap = CreateDIBSection (hdc,
                                     bmp_info,
                                     DIB_RGB_COLORS,
-                                    &bmp_buf, 
+                                    &bmp_buf,
                                     0,0);
-  
+
   if (!bitmap || !bmp_buf)
     signal_simple_error ("Unable to create bitmap", instantiator);
 
@@ -390,7 +390,7 @@ static void
 mswindows_init_image_instance_from_eimage (struct Lisp_Image_Instance *ii,
                                           int width, int height,
                                           int slices,
-                                          unsigned char *eimage, 
+                                          unsigned char *eimage,
                                           int dest_mask,
                                           Lisp_Object instantiator,
                                           Lisp_Object domain)
@@ -401,19 +401,19 @@ mswindows_init_image_instance_from_eimage (struct Lisp_Image_Instance *ii,
   int                  bmp_bits;
   COLORREF             bkcolor;
   int slice;
-  
+
   if (!DEVICE_MSWINDOWS_P (XDEVICE (device)))
     signal_simple_error ("Not an mswindows device", device);
 
   /* this is a hack but MaskBlt and TransparentBlt are not supported
      on most windows variants */
-  bkcolor = COLOR_INSTANCE_MSWINDOWS_COLOR 
+  bkcolor = COLOR_INSTANCE_MSWINDOWS_COLOR
     (XCOLOR_INSTANCE (FACE_BACKGROUND (Vdefault_face, domain)));
 
   for (slice = 0; slice < slices; slice++)
     {
       /* build a bitmap from the eimage */
-      if (!(bmp_info=convert_EImage_to_DIBitmap (device, width, height, 
+      if (!(bmp_info=convert_EImage_to_DIBitmap (device, width, height,
                                                 eimage + (width * height * 3 * slice),
                                                 &bmp_bits, &bmp_data)))
        {
@@ -429,46 +429,46 @@ mswindows_init_image_instance_from_eimage (struct Lisp_Image_Instance *ii,
       else
        image_instance_add_dibitmap (ii, bmp_info, bmp_data, bmp_bits, slice,
                                     instantiator);
-      
+
       xfree (bmp_info);
       xfree (bmp_data);
     }
 }
 
-static void set_mono_pixel ( unsigned char* bits, 
-                            int bpline, int height, 
-                            int x, int y, int white ) 
-{ 
+static void set_mono_pixel ( unsigned char* bits,
+                            int bpline, int height,
+                            int x, int y, int white )
+{
   int index;
-  unsigned char    bitnum;  
+  unsigned char    bitnum;
   /* Find the byte on which this scanline begins */
-  index = (height - y - 1) * bpline; 
+  index = (height - y - 1) * bpline;
   /* Find the byte containing this pixel */
-  index += (x >> 3); 
+  index += (x >> 3);
   /* Which bit is it? */
-  bitnum = (unsigned char)( 7 - (x % 8) );  
+  bitnum = (unsigned char)( 7 - (x % 8) );
   if( white )         /* Turn it on */
     bits[index] |= (1<<bitnum);
   else         /* Turn it off */
-    bits[index] &= ~(1<<bitnum); 
-} 
+    bits[index] &= ~(1<<bitnum);
+}
 
 static void
-mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image, 
+mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
                                          struct frame* f)
 {
   HBITMAP mask;
   HGDIOBJ old = NULL;
   HDC hcdc = FRAME_MSWINDOWS_CDC (f);
   unsigned char* dibits;
-  BITMAPINFO* bmp_info = 
+  BITMAPINFO* bmp_info =
     xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
   int i, j;
   int height = IMAGE_INSTANCE_PIXMAP_HEIGHT (image);
-  
-  void* and_bits; 
-  int maskbpline = BPLINE (((IMAGE_INSTANCE_PIXMAP_WIDTH (image)+7)/8));
-  int bpline = BPLINE (IMAGE_INSTANCE_PIXMAP_WIDTH (image) * 3); 
+
+  void* and_bits;
+  int maskbpline = BPLINE ((IMAGE_INSTANCE_PIXMAP_WIDTH (image)+7)/8);
+  int bpline = BPLINE (IMAGE_INSTANCE_PIXMAP_WIDTH (image) * 3);
 
   if (!bmp_info)
     return;
@@ -477,11 +477,11 @@ mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
   bmp_info->bmiHeader.biHeight = height;
   bmp_info->bmiHeader.biPlanes=1;
   bmp_info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
-  bmp_info->bmiHeader.biBitCount=1; 
-  bmp_info->bmiHeader.biCompression=BI_RGB; 
-  bmp_info->bmiHeader.biClrUsed = 2; 
-  bmp_info->bmiHeader.biClrImportant = 2; 
-  bmp_info->bmiHeader.biSizeImage = height * maskbpline; 
+  bmp_info->bmiHeader.biBitCount=1;
+  bmp_info->bmiHeader.biCompression=BI_RGB;
+  bmp_info->bmiHeader.biClrUsed = 2;
+  bmp_info->bmiHeader.biClrImportant = 2;
+  bmp_info->bmiHeader.biSizeImage = height * maskbpline;
   bmp_info->bmiColors[0].rgbRed = 0;
   bmp_info->bmiColors[0].rgbGreen = 0;
   bmp_info->bmiColors[0].rgbBlue = 0;
@@ -490,11 +490,11 @@ mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
   bmp_info->bmiColors[1].rgbGreen = 255;
   bmp_info->bmiColors[1].rgbBlue = 255;
   bmp_info->bmiColors[0].rgbReserved = 0;
-    
-  if (!(mask = CreateDIBSection (hcdc,  
+
+  if (!(mask = CreateDIBSection (hcdc,
                                 bmp_info,
                                 DIB_RGB_COLORS,
-                                &and_bits, 
+                                &and_bits,
                                 0,0)))
     {
       xfree (bmp_info);
@@ -509,10 +509,10 @@ mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
   bmp_info->bmiHeader.biHeight = -height;
   bmp_info->bmiHeader.biPlanes=1;
   bmp_info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
-  bmp_info->bmiHeader.biBitCount=24; 
-  bmp_info->bmiHeader.biCompression=BI_RGB; 
-  bmp_info->bmiHeader.biClrUsed = 0; 
-  bmp_info->bmiHeader.biClrImportant = 0; 
+  bmp_info->bmiHeader.biBitCount=24;
+  bmp_info->bmiHeader.biCompression=BI_RGB;
+  bmp_info->bmiHeader.biClrUsed = 0;
+  bmp_info->bmiHeader.biClrImportant = 0;
   bmp_info->bmiHeader.biSizeImage = height * bpline;
 
   dibits = xmalloc_and_zero (bpline * height);
@@ -530,19 +530,19 @@ mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
 
   /* now set the colored bits in the mask and transparent ones to
      black in the original */
-  for(i=0; i<IMAGE_INSTANCE_PIXMAP_WIDTH (image); i++)     
-    { 
-      for(j=0; j<height; j++)         
-       { 
+  for(i=0; i<IMAGE_INSTANCE_PIXMAP_WIDTH (image); i++)
+    {
+      for(j=0; j<height; j++)
+       {
          unsigned char* idx = &dibits[j * bpline + i * 3];
 
          if( RGB (idx[2], idx[1], idx[0]) == transparent_color )
-           { 
+           {
              idx[0] = idx[1] = idx[2] = 0;
              set_mono_pixel( and_bits, maskbpline, height, i, j, TRUE );
            }
-         else             
-           { 
+         else
+           {
              set_mono_pixel( and_bits, maskbpline, height, i, j, FALSE );
             }
        }
@@ -558,7 +558,7 @@ mswindows_initialize_image_instance_mask (struct Lisp_Image_Instance* image,
 
   xfree (bmp_info);
   xfree (dibits);
-  
+
   SelectObject(hcdc, old);
 
   IMAGE_INSTANCE_MSWINDOWS_MASK (image) = mask;
@@ -576,7 +576,7 @@ mswindows_initialize_image_instance_icon (struct Lisp_Image_Instance* image,
   x_icon.yHotspot=XINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (image));
   x_icon.hbmMask=IMAGE_INSTANCE_MSWINDOWS_MASK (image);
   x_icon.hbmColor=IMAGE_INSTANCE_MSWINDOWS_BITMAP (image);
-  
+
   IMAGE_INSTANCE_MSWINDOWS_ICON (image)=
     CreateIconIndirect (&x_icon);
 }
@@ -589,18 +589,18 @@ mswindows_create_resized_bitmap (struct Lisp_Image_Instance* ii,
   HBITMAP newbmp;
   HGDIOBJ old1, old2;
   HDC hcdc = FRAME_MSWINDOWS_CDC (f);
-  HDC hdcDst = CreateCompatibleDC (hcdc);  
-  
-  old1 = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii)); 
-  
+  HDC hdcDst = CreateCompatibleDC (hcdc);
+
+  old1 = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii));
+
   newbmp = CreateCompatibleBitmap (hcdc, newx, newy);
 
   old2 = SelectObject (hdcDst, newbmp);
-  
+
   if (!StretchBlt (hdcDst, 0, 0, newx, newy,
-                  hcdc, 0, 0, 
-                  IMAGE_INSTANCE_PIXMAP_WIDTH (ii), 
-                  IMAGE_INSTANCE_PIXMAP_HEIGHT (ii), 
+                  hcdc, 0, 0,
+                  IMAGE_INSTANCE_PIXMAP_WIDTH (ii),
+                  IMAGE_INSTANCE_PIXMAP_HEIGHT (ii),
                   SRCCOPY))
     {
       DeleteObject (newbmp);
@@ -625,23 +625,23 @@ mswindows_create_resized_mask (struct Lisp_Image_Instance* ii,
       HBITMAP newmask;
       HGDIOBJ old1, old2;
       HDC hcdc = FRAME_MSWINDOWS_CDC (f);
-      HDC hdcDst = CreateCompatibleDC (hcdc);  
-  
-      old1 = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_MASK (ii)); 
+      HDC hdcDst = CreateCompatibleDC (hcdc);
+
+      old1 = SelectObject (hcdc, IMAGE_INSTANCE_MSWINDOWS_MASK (ii));
       newmask = CreateCompatibleBitmap(hcdc, newx, newy);
       old2 = SelectObject (hdcDst, newmask);
 
       if (!StretchBlt(hdcDst, 0, 0, newx, newy,
-                     hcdc, 0, 0, 
-                     IMAGE_INSTANCE_PIXMAP_WIDTH (ii), 
-                     IMAGE_INSTANCE_PIXMAP_HEIGHT (ii), 
+                     hcdc, 0, 0,
+                     IMAGE_INSTANCE_PIXMAP_WIDTH (ii),
+                     IMAGE_INSTANCE_PIXMAP_HEIGHT (ii),
                      SRCCOPY))
        {
          DeleteObject (newmask);
          DeleteDC (hdcDst);
          return NULL;
        }
-      
+
       SelectObject (hdcDst, old2);
       SelectObject (hcdc, old1);
 
@@ -663,7 +663,7 @@ mswindows_resize_dibitmap_instance (struct Lisp_Image_Instance* ii,
 
   if (!newbmp)
     return FALSE;
-  
+
   if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii))
     DeleteObject (IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii));
   if (IMAGE_INSTANCE_MSWINDOWS_MASK (ii))
@@ -739,7 +739,7 @@ extract_xpm_color_names (Lisp_Object device,
   for (j=0; j<i; j++)
     {
       Lisp_Object cons = XCAR (results);
-      colortbl[j].color = 
+      colortbl[j].color =
        COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (XCDR (cons)));
 
       GET_C_STRING_OS_DATA_ALLOCA (XCAR (cons), colortbl[j].name);
@@ -766,7 +766,7 @@ static int xpm_to_eimage (Lisp_Object image, CONST Extbyte *buffer,
   unsigned char* dptr;
   unsigned int* sptr;
   COLORREF color; /* the american spelling virus hits again .. */
-  COLORREF* colortbl; 
+  COLORREF* colortbl;
 
   xzero (xpmimage);
   xzero (xpminfo);
@@ -796,11 +796,11 @@ static int xpm_to_eimage (Lisp_Object image, CONST Extbyte *buffer,
                                    make_int (result), image);
       }
     }
-  
+
   *width = xpmimage.width;
   *height = xpmimage.height;
-  maskbpline = BPLINE (((~7UL & (unsigned long)(*width + 7)) / 8));
-  
+  maskbpline = BPLINE ((~7UL & (unsigned long)(*width + 7)) / 8);
+
   *data = xnew_array_and_zero (unsigned char, *width * *height * 3);
 
   if (!*data)
@@ -831,7 +831,7 @@ static int xpm_to_eimage (Lisp_Object image, CONST Extbyte *buffer,
              !strcasecmp (xpmimage.colorTable[i].symbolic,"None"))
            {
              *transp=TRUE;
-             colortbl[i]=transparent_color; 
+             colortbl[i]=transparent_color;
              transp_idx=i;
              goto label_found_color;
            }
@@ -856,7 +856,7 @@ static int xpm_to_eimage (Lisp_Object image, CONST Extbyte *buffer,
       if (!strcasecmp (xpmimage.colorTable[i].c_color,"None"))
        {
          *transp=TRUE;
-         colortbl[i]=transparent_color; 
+         colortbl[i]=transparent_color;
          transp_idx=i;
          goto label_found_color;
        }
@@ -867,14 +867,14 @@ static int xpm_to_eimage (Lisp_Object image, CONST Extbyte *buffer,
            mswindows_string_to_color (xpmimage.colorTable[i].c_color);
          goto label_found_color;
        }
-      
+
     label_no_color:
       xfree (*data);
       xfree (colortbl);
       XpmFreeXpmImage (&xpmimage);
       XpmFreeXpmInfo (&xpminfo);
       return 0;
-      
+
     label_found_color:;
     }
 
@@ -917,7 +917,7 @@ mswindows_xpm_instantiate (Lisp_Object image_instance,
   int                  bmp_bits;
   int                  nsymbols=0, transp;
   struct color_symbol* color_symbols=NULL;
-  
+
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   Lisp_Object color_symbol_alist = find_keyword_in_vector (instantiator,
                                                           Q_color_symbols);
@@ -937,10 +937,10 @@ mswindows_xpm_instantiate (Lisp_Object image_instance,
   if (!xpm_to_eimage (image_instance, bytes, &eimage, &width, &height,
                      &x_hot, &y_hot, &transp, color_symbols, nsymbols))
     {
-      signal_simple_error ("XPM to EImage conversion failed", 
+      signal_simple_error ("XPM to EImage conversion failed",
                           image_instance);
     }
-  
+
   if (color_symbols)
     {
       while (nsymbols--)
@@ -949,7 +949,7 @@ mswindows_xpm_instantiate (Lisp_Object image_instance,
        }
       xfree(color_symbols);
     }
-  
+
   /* build a bitmap from the eimage */
   if (!(bmp_info=convert_EImage_to_DIBitmap (device, width, height, eimage,
                                             &bmp_bits, &bmp_data)))
@@ -1012,11 +1012,11 @@ bmp_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   assert (!NILP (data));
 
   GET_STRING_BINARY_DATA_ALLOCA (data, bytes, len);
-  
+
   /* Then slurp the image into memory, decoding along the way.
      The result is the image in a simple one-byte-per-pixel
      format. */
-  
+
   bmp_file_header=(BITMAPFILEHEADER*)bytes;
   bmp_info = (BITMAPINFO*)(bytes + sizeof(BITMAPFILEHEADER));
   bmp_data = (Extbyte*)bytes + bmp_file_header->bfOffBits;
@@ -1036,9 +1036,9 @@ bmp_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 static void
 mswindows_resource_validate (Lisp_Object instantiator)
 {
-  if ((NILP (find_keyword_in_vector (instantiator, Q_file)) 
+  if ((NILP (find_keyword_in_vector (instantiator, Q_file))
        &&
-       NILP (find_keyword_in_vector (instantiator, Q_resource_id))) 
+       NILP (find_keyword_in_vector (instantiator, Q_resource_id)))
       ||
       NILP (find_keyword_in_vector (instantiator, Q_resource_type)))
     signal_simple_error ("Must supply :file, :resource-id and :resource-type",
@@ -1055,7 +1055,7 @@ mswindows_resource_normalize (Lisp_Object inst, Lisp_Object console_type)
 
   GCPRO2 (file, alist);
 
-  file = potential_pixmap_file_instantiator (inst, Q_file, Q_data, 
+  file = potential_pixmap_file_instantiator (inst, Q_file, Q_data,
                                             console_type);
 
   if (CONSP (file)) /* failure locating filename */
@@ -1086,7 +1086,7 @@ mswindows_resource_possible_dest_types (void)
   return IMAGE_POINTER_MASK | IMAGE_COLOR_PIXMAP_MASK;
 }
 
-typedef struct 
+typedef struct
 {
   char *name;
   int  resource_id;
@@ -1105,7 +1105,7 @@ typedef struct
 #endif
 #endif
 
-static CONST resource_t bitmap_table[] = 
+static CONST resource_t bitmap_table[] =
 {
   /* bitmaps */
   { "close", OBM_CLOSE },
@@ -1137,7 +1137,7 @@ static CONST resource_t bitmap_table[] =
   {0}
 };
 
-static CONST resource_t cursor_table[] = 
+static CONST resource_t cursor_table[] =
 {
   /* cursors */
   { "normal", OCR_NORMAL },
@@ -1156,7 +1156,7 @@ static CONST resource_t cursor_table[] =
   { 0 }
 };
 
-static CONST resource_t icon_table[] = 
+static CONST resource_t icon_table[] =
 {
   /* icons */
   { "sample", OIC_SAMPLE },
@@ -1170,8 +1170,8 @@ static CONST resource_t icon_table[] =
 
 static int resource_name_to_resource (Lisp_Object name, int type)
 {
-  CONST resource_t* res = (type == IMAGE_CURSOR ? cursor_table 
-                          : type == IMAGE_ICON ? icon_table 
+  CONST resource_t* res = (type == IMAGE_CURSOR ? cursor_table
+                          : type == IMAGE_ICON ? icon_table
                           : bitmap_table);
 
   if (INTP (name))
@@ -1182,7 +1182,7 @@ static int resource_name_to_resource (Lisp_Object name, int type)
     {
       signal_simple_error ("invalid resource identifier", name);
     }
-  
+
   do {
     Extbyte* nm=0;
     GET_C_STRING_OS_DATA_ALLOCA (name, nm);
@@ -1221,9 +1221,9 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
 
   Lisp_Object file = find_keyword_in_vector (instantiator, Q_file);
-  Lisp_Object resource_type = find_keyword_in_vector (instantiator, 
+  Lisp_Object resource_type = find_keyword_in_vector (instantiator,
                                                      Q_resource_type);
-  Lisp_Object resource_id = find_keyword_in_vector (instantiator, 
+  Lisp_Object resource_id = find_keyword_in_vector (instantiator,
                                                    Q_resource_id);
 
   xzero (iconinfo);
@@ -1237,7 +1237,7 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
     iitype = IMAGE_POINTER;
   else if (dest_mask & IMAGE_COLOR_PIXMAP_MASK)
     iitype = IMAGE_COLOR_PIXMAP;
-  else 
+  else
     incompatible_image_types (instantiator, dest_mask,
                              IMAGE_COLOR_PIXMAP_MASK | IMAGE_POINTER_MASK);
 
@@ -1251,7 +1251,7 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
 #else
       fname = f;
 #endif
-      
+
       if (NILP (resource_id))
        resid = (LPCTSTR)fname;
       else
@@ -1260,7 +1260,7 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
                                 LOAD_LIBRARY_AS_DATAFILE);
          resid = MAKEINTRESOURCE (resource_name_to_resource (resource_id,
                                                           type));
-         
+
          if (!resid)
            GET_C_STRING_OS_DATA_ALLOCA (resource_id, resid);
        }
@@ -1268,11 +1268,11 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
   else if (!(resid = MAKEINTRESOURCE (resource_name_to_resource (resource_id,
                                                               type))))
     signal_simple_error ("Invalid resource identifier", resource_id);
-  
+
   /* load the image */
   if (!(himage = LoadImage (hinst, resid, type, 0, 0,
-                           LR_CREATEDIBSECTION | LR_DEFAULTSIZE | 
-                           LR_SHARED |      
+                           LR_CREATEDIBSECTION | LR_DEFAULTSIZE |
+                           LR_SHARED |
                            (!NILP (file) ? LR_LOADFROMFILE : 0))))
     {
       signal_simple_error ("Cannot load image", instantiator);
@@ -1284,9 +1284,9 @@ mswindows_resource_instantiate (Lisp_Object image_instance, Lisp_Object instanti
   mswindows_initialize_dibitmap_image_instance (ii, 1, iitype);
 
   IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = file;
-  IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = 
+  IMAGE_INSTANCE_PIXMAP_WIDTH (ii) =
     GetSystemMetrics (type == IMAGE_CURSOR ? SM_CXCURSOR : SM_CXICON);
-  IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) = 
+  IMAGE_INSTANCE_PIXMAP_HEIGHT (ii) =
     GetSystemMetrics (type == IMAGE_CURSOR ? SM_CYCURSOR : SM_CYICON);
   IMAGE_INSTANCE_PIXMAP_DEPTH (ii) = 1;
 
@@ -1383,7 +1383,7 @@ in this Software without prior written authorization from the X Consortium.
  *                                     and return data
  *
  * Note that this file and ../X/XRdBitF.c look very similar....  Keep them
- * that way (but don't use common source code so that people can have one 
+ * that way (but don't use common source code so that people can have one
  * without the other).
  */
 
@@ -1433,7 +1433,7 @@ static void initHexTable()
     hexTable[' '] = -1;        hexTable[','] = -1;
     hexTable['}'] = -1;        hexTable['\n'] = -1;
     hexTable['\t'] = -1;
-       
+
     initialized = TRUE;
 }
 
@@ -1446,7 +1446,7 @@ static int NextInt ( FILE *fstream )
     int        value = 0;
     int gotone = 0;
     int done = 0;
-    
+
     /* loop, accumulate hex value until find delimiter  */
     /* skip any initial delimiters found in read stream */
 
@@ -1527,7 +1527,7 @@ int read_bitmap_data (fstream, width, height, datap, x_hot, y_hot)
            }
            continue;
        }
-    
+
        if (sscanf(line, "static short %s = {", name_and_type) == 1)
          version10p = 1;
        else if (sscanf(line,"static unsigned char %s = {",name_and_type) == 1)
@@ -1544,7 +1544,7 @@ int read_bitmap_data (fstream, width, height, datap, x_hot, y_hot)
 
        if (strcmp("bits[]", type))
          continue;
-    
+
        if (!ww || !hh)
          RETURN (BitmapFileInvalid);
 
@@ -1557,7 +1557,7 @@ int read_bitmap_data (fstream, width, height, datap, x_hot, y_hot)
 
        size = bytes_per_line * hh;
        data = (unsigned char *) Xmalloc ((unsigned int) size);
-       if (!data) 
+       if (!data)
          RETURN (BitmapNoMemory);
 
        if (version10p) {
@@ -1576,7 +1576,7 @@ int read_bitmap_data (fstream, width, height, datap, x_hot, y_hot)
            int bytes;
 
            for (bytes=0, ptr=data; bytes<size; bytes++, ptr++) {
-               if ((value = NextInt(fstream)) < 0) 
+               if ((value = NextInt(fstream)) < 0)
                  RETURN (BitmapFileInvalid);
                *ptr=value;
            }
@@ -1599,7 +1599,7 @@ int read_bitmap_data (fstream, width, height, datap, x_hot, y_hot)
 }
 
 
-int read_bitmap_data_from_file (CONST char *filename, unsigned int *width, 
+int read_bitmap_data_from_file (CONST char *filename, unsigned int *width,
                                unsigned int *height, unsigned char **datap,
                                int *x_hot, int *y_hot)
 {
@@ -1639,21 +1639,21 @@ xbm_create_bitmap_from_data (HDC hdc, char *data,
   void *bmp_buf = 0;
   unsigned char *new_data, *new_offset;
   int i, j;
-  BITMAPINFO* bmp_info = 
+  BITMAPINFO* bmp_info =
     xmalloc_and_zero (sizeof(BITMAPINFO) + sizeof(RGBQUAD));
   HBITMAP bitmap;
 
   if (!bmp_info)
     return NULL;
-  
+
   new_data = (unsigned char *) xmalloc_and_zero (height * new_width);
-      
+
   if (!new_data)
     {
       xfree (bmp_info);
       return NULL;
     }
-  
+
   for (i=0; i<height; i++)
     {
       offset = data + i*old_width;
@@ -1681,11 +1681,11 @@ xbm_create_bitmap_from_data (HDC hdc, char *data,
   bmp_info->bmiHeader.biHeight=-(LONG)height;
   bmp_info->bmiHeader.biPlanes=1;
   bmp_info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
-  bmp_info->bmiHeader.biBitCount=1; 
+  bmp_info->bmiHeader.biBitCount=1;
   bmp_info->bmiHeader.biCompression=BI_RGB;
-  bmp_info->bmiHeader.biClrUsed = 2; 
-  bmp_info->bmiHeader.biClrImportant = 2; 
-  bmp_info->bmiHeader.biSizeImage = height * new_width; 
+  bmp_info->bmiHeader.biClrUsed = 2;
+  bmp_info->bmiHeader.biClrImportant = 2;
+  bmp_info->bmiHeader.biSizeImage = height * new_width;
   bmp_info->bmiColors[0].rgbRed = GetRValue (fg);
   bmp_info->bmiColors[0].rgbGreen = GetGValue (fg);
   bmp_info->bmiColors[0].rgbBlue = GetBValue (fg);
@@ -1694,21 +1694,21 @@ xbm_create_bitmap_from_data (HDC hdc, char *data,
   bmp_info->bmiColors[1].rgbGreen = GetGValue (bg);
   bmp_info->bmiColors[1].rgbBlue = GetBValue (bg);
   bmp_info->bmiColors[1].rgbReserved = 0;
-  
-  bitmap = CreateDIBSection (hdc,  
+
+  bitmap = CreateDIBSection (hdc,
                             bmp_info,
                             DIB_RGB_COLORS,
-                            &bmp_buf, 
+                            &bmp_buf,
                             0,0);
 
   xfree (bmp_info);
-  
+
   if (!bitmap || !bmp_buf)
     {
       xfree (new_data);
       return NULL;
     }
-  
+
   /* copy in the actual bitmap */
   memcpy (bmp_buf, new_data, height * new_width);
   xfree (new_data);
@@ -1764,7 +1764,7 @@ init_image_instance_from_xbm_inline (struct Lisp_Image_Instance *ii,
                              | IMAGE_POINTER_MASK);
 
   mswindows_initialize_dibitmap_image_instance (ii, 1, type);
-  
+
   IMAGE_INSTANCE_PIXMAP_FILENAME (ii) =
     find_keyword_in_vector (instantiator, Q_file);
   IMAGE_INSTANCE_PIXMAP_WIDTH (ii) = width;
@@ -1773,14 +1773,14 @@ init_image_instance_from_xbm_inline (struct Lisp_Image_Instance *ii,
   XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii), 0);
   XSETINT (IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii), 0);
   IMAGE_INSTANCE_MSWINDOWS_MASK (ii) = mask ? mask :
-    xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height, 
+    xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height,
                                 TRUE, black, white);
 
   switch (type)
     {
     case IMAGE_MONO_PIXMAP:
-      IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = 
-       xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height, 
+      IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) =
+       xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height,
                                     FALSE, black, black);
       break;
 
@@ -1808,8 +1808,8 @@ init_image_instance_from_xbm_inline (struct Lisp_Image_Instance *ii,
        IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
        IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
 
-       IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = 
-         xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height, 
+       IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) =
+         xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height,
                                       FALSE, fg, black);
       }
       break;
@@ -1824,9 +1824,9 @@ init_image_instance_from_xbm_inline (struct Lisp_Image_Instance *ii,
        if (NILP (background))
          background = pointer_bg;
 
-       IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = 
+       IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) =
          find_keyword_in_vector (instantiator, Q_hotspot_x);
-       IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = 
+       IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) =
          find_keyword_in_vector (instantiator, Q_hotspot_y);
        IMAGE_INSTANCE_PIXMAP_FG (ii) = foreground;
        IMAGE_INSTANCE_PIXMAP_BG (ii) = background;
@@ -1835,8 +1835,8 @@ init_image_instance_from_xbm_inline (struct Lisp_Image_Instance *ii,
        if (COLOR_INSTANCEP (background))
          bg = COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (background));
 
-       IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) = 
-         xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height, 
+       IMAGE_INSTANCE_MSWINDOWS_BITMAP (ii) =
+         xbm_create_bitmap_from_data (hdc, (Extbyte *) bits, width, height,
                                       TRUE, fg, black);
        mswindows_initialize_image_instance_icon (ii, TRUE);
       }
@@ -1857,7 +1857,7 @@ xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
   Lisp_Object mask_data = find_keyword_in_vector (instantiator, Q_mask_data);
   Lisp_Object mask_file = find_keyword_in_vector (instantiator, Q_mask_file);
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  struct frame* f = XFRAME (DEVICE_SELECTED_FRAME 
+  struct frame* f = XFRAME (DEVICE_SELECTED_FRAME
                            (XDEVICE (IMAGE_INSTANCE_DEVICE (ii))));
   HDC hdc = FRAME_MSWINDOWS_CDC (f);
   HBITMAP mask = 0;
@@ -1885,7 +1885,7 @@ xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
 /* Instantiate method for XBM's. */
 
 static void
-mswindows_xbm_instantiate (Lisp_Object image_instance, 
+mswindows_xbm_instantiate (Lisp_Object image_instance,
                           Lisp_Object instantiator,
                           Lisp_Object pointer_fg, Lisp_Object pointer_bg,
                           int dest_mask, Lisp_Object domain)
@@ -2007,12 +2007,12 @@ mswindows_print_image_instance (struct Lisp_Image_Instance *p,
     case IMAGE_MONO_PIXMAP:
     case IMAGE_COLOR_PIXMAP:
     case IMAGE_POINTER:
-      sprintf (buf, " (0x%lx", 
+      sprintf (buf, " (0x%lx",
               (unsigned long) IMAGE_INSTANCE_MSWINDOWS_BITMAP (p));
       write_c_string (buf, printcharfun);
       if (IMAGE_INSTANCE_MSWINDOWS_MASK (p))
        {
-         sprintf (buf, "/0x%lx", 
+         sprintf (buf, "/0x%lx",
                   (unsigned long) IMAGE_INSTANCE_MSWINDOWS_MASK (p));
          write_c_string (buf, printcharfun);
        }
@@ -2034,7 +2034,7 @@ mswindows_finalize_image_instance (struct Lisp_Image_Instance *p)
   if (DEVICE_LIVE_P (XDEVICE (p->device)))
     {
       if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET
-         || 
+         ||
          IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
        {
 #ifdef DEBUG_WIDGETS
@@ -2092,8 +2092,8 @@ mswindows_unmap_subwindow (struct Lisp_Image_Instance *p)
 {
   if (IMAGE_INSTANCE_SUBWINDOW_ID (p))
     {
-      SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p), 
-                   NULL, 
+      SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
+                   NULL,
                    0, 0, 0, 0,
                    SWP_HIDEWINDOW | SWP_NOMOVE | SWP_NOSIZE
                    | SWP_NOSENDCHANGING);
@@ -2108,32 +2108,32 @@ mswindows_map_subwindow (struct Lisp_Image_Instance *p, int x, int y,
 {
   /* move the window before mapping it ... */
   SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
-               NULL, 
+               NULL,
                x, y, dga->width, dga->height,
-               SWP_NOZORDER 
+               SWP_NOZORDER
                | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
   /* ... adjust the child ... */
   SetWindowPos (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
-               NULL, 
+               NULL,
                -dga->xoffset, -dga->yoffset, 0, 0,
                SWP_NOZORDER | SWP_NOSIZE
                | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
   /* ... now map it - we are not allowed to move it at the same time. */
-  SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p), 
-               NULL, 
+  SetWindowPos (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (p),
+               NULL,
                0, 0, 0, 0,
                SWP_NOZORDER | SWP_NOSIZE | SWP_NOMOVE
-               | SWP_SHOWWINDOW | SWP_NOCOPYBITS 
+               | SWP_SHOWWINDOW | SWP_NOCOPYBITS
                | SWP_NOSENDCHANGING);
 }
 
 /* resize the subwindow instance */
-static void 
+static void
 mswindows_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h)
 {
   /* Set the size of the control .... */
-  SetWindowPos (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii), 
-               NULL, 
+  SetWindowPos (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
+               NULL,
                0, 0, w, h,
                SWP_NOZORDER | SWP_NOMOVE
                | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
@@ -2150,8 +2150,8 @@ mswindows_update_subwindow (struct Lisp_Image_Instance *p)
       if ( EQ (IMAGE_INSTANCE_WIDGET_TYPE (p), Qbutton))
        {
          if (gui_item_selected_p (IMAGE_INSTANCE_WIDGET_ITEM (p)))
-           SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p), 
-                        BM_SETCHECK, (WPARAM)BST_CHECKED, 0); 
+           SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
+                        BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
          else
            SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
                         BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
@@ -2159,12 +2159,12 @@ mswindows_update_subwindow (struct Lisp_Image_Instance *p)
 
       /* set the widget font from the widget face */
       SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
-                  WM_SETFONT, 
-                  (WPARAM)FONT_INSTANCE_MSWINDOWS_HFONT 
+                  WM_SETFONT,
+                  (WPARAM)FONT_INSTANCE_MSWINDOWS_HFONT
                   (XFONT_INSTANCE (widget_face_font_info
-                                   (IMAGE_INSTANCE_SUBWINDOW_FRAME (p), 
+                                   (IMAGE_INSTANCE_SUBWINDOW_FRAME (p),
                                     IMAGE_INSTANCE_WIDGET_FACE (p),
-                                    0, 0))), 
+                                    0, 0))),
                   MAKELPARAM (TRUE, 0));
     }
 }
@@ -2228,21 +2228,21 @@ mswindows_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instant
                        NULL,       /* No menu */
                        NULL, /* must be null for this class */
                        NULL)) == NULL)
-    signal_simple_error ("window creation failed with code", 
+    signal_simple_error ("window creation failed with code",
                         make_int (GetLastError()));
 
-  wnd = CreateWindow( "STATIC",  
+  wnd = CreateWindow( "STATIC",
                      "",
-                     WS_CHILD,  
+                     WS_CHILD,
                      0,         /* starting x position */
                      0,         /* starting y position */
                      IMAGE_INSTANCE_WIDGET_WIDTH (ii),
                      IMAGE_INSTANCE_WIDGET_HEIGHT (ii),
                      IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (ii),
                      0,
-                     (HINSTANCE) 
+                     (HINSTANCE)
                      GetWindowLong (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)),
-                                    GWL_HINSTANCE), 
+                                    GWL_HINSTANCE),
                      NULL);
 
   SetWindowLong (wnd, GWL_USERDATA, (LONG)LISP_TO_VOID(image_instance));
@@ -2258,11 +2258,11 @@ mswindows_image_instance_equal (struct Lisp_Image_Instance *p1,
     case IMAGE_MONO_PIXMAP:
     case IMAGE_COLOR_PIXMAP:
     case IMAGE_POINTER:
-      if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (p1) 
+      if (IMAGE_INSTANCE_MSWINDOWS_BITMAP (p1)
          != IMAGE_INSTANCE_MSWINDOWS_BITMAP (p2))
        return 0;
       break;
-    
+
     default:
       break;
     }
@@ -2279,7 +2279,7 @@ mswindows_image_instance_hash (struct Lisp_Image_Instance *p, int depth)
     case IMAGE_COLOR_PIXMAP:
     case IMAGE_POINTER:
       return (unsigned long) IMAGE_INSTANCE_MSWINDOWS_BITMAP (p);
-    
+
     default:
       return 0;
     }
@@ -2305,7 +2305,7 @@ mswindows_initialize_dibitmap_image_instance (struct Lisp_Image_Instance *ii,
   IMAGE_INSTANCE_PIXMAP_FG (ii) = Qnil;
   IMAGE_INSTANCE_PIXMAP_BG (ii) = Qnil;
   IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices;
-  IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (ii) = 
+  IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (ii) =
     xnew_array_and_zero (HBITMAP, slices);
 }
 
@@ -2368,12 +2368,12 @@ mswindows_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
                        (HMENU)id,       /* No menu */
                        NULL, /* must be null for this class */
                        NULL)) == NULL)
-    signal_simple_error ("window creation failed with code", 
+    signal_simple_error ("window creation failed with code",
                         make_int (GetLastError()));
 
-  if ((wnd = CreateWindowEx( 
+  if ((wnd = CreateWindowEx(
                            exflags /* | WS_EX_NOPARENTNOTIFY*/,
-                           class,  
+                           class,
                            nm,
                            flags | WS_CHILD | WS_VISIBLE,
                            0,         /* starting x position */
@@ -2383,23 +2383,23 @@ mswindows_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
                            /* parent window */
                            IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW (ii),
                            (HMENU)id,       /* No menu */
-                           (HINSTANCE) 
-                           GetWindowLong 
+                           (HINSTANCE)
+                           GetWindowLong
                            (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)),
-                            GWL_HINSTANCE), 
+                            GWL_HINSTANCE),
                            NULL)) == NULL)
-    signal_simple_error ("window creation failed with code", 
+    signal_simple_error ("window creation failed with code",
                         make_int (GetLastError()));
 
   IMAGE_INSTANCE_SUBWINDOW_ID (ii) = wnd;
   SetWindowLong (wnd, GWL_USERDATA, (LONG)LISP_TO_VOID(image_instance));
   /* set the widget font from the widget face */
-  SendMessage (wnd, WM_SETFONT, 
-              (WPARAM)FONT_INSTANCE_MSWINDOWS_HFONT 
-              (XFONT_INSTANCE (widget_face_font_info 
-                               (domain, 
+  SendMessage (wnd, WM_SETFONT,
+              (WPARAM)FONT_INSTANCE_MSWINDOWS_HFONT
+              (XFONT_INSTANCE (widget_face_font_info
+                               (domain,
                                 IMAGE_INSTANCE_WIDGET_FACE (ii),
-                                0, 0))), 
+                                0, 0))),
               MAKELPARAM (TRUE, 0));
 }
 
@@ -2432,7 +2432,7 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
        glyph = glyph_image_instance (glyph, domain, ERROR_ME, 1);
 
       if (IMAGE_INSTANCEP (glyph))
-       flags |= XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ? 
+       flags |= XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ?
          BS_BITMAP : BS_ICON;
     }
 
@@ -2450,20 +2450,20 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
     flags |= BS_DEFPUSHBUTTON;
 
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, "BUTTON", flags, 
+                               pointer_bg, dest_mask, domain, "BUTTON", flags,
                                WS_EX_CONTROLPARENT);
 
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* set the checked state */
   if (gui_item_selected_p (gui))
-    SendMessage (wnd, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); 
+    SendMessage (wnd, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
   else
     SendMessage (wnd, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
   /* add the image if one was given */
   if (!NILP (glyph) && IMAGE_INSTANCEP (glyph))
     {
-      SendMessage (wnd, BM_SETIMAGE, 
-                  (WPARAM) (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ? 
+      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) :
@@ -2478,7 +2478,7 @@ mswindows_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instan
                            int dest_mask, Lisp_Object domain)
 {
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, "EDIT", 
+                               pointer_bg, dest_mask, domain, "EDIT",
                                ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP
                                | WS_BORDER,
                                WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT);
@@ -2493,24 +2493,24 @@ mswindows_progress_gauge_instantiate (Lisp_Object image_instance, Lisp_Object in
   HWND wnd;
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, PROGRESS_CLASS, 
+                               pointer_bg, dest_mask, domain, PROGRESS_CLASS,
                                WS_TABSTOP | WS_BORDER | PBS_SMOOTH,
                                WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT);
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* set the colors */
 #ifdef PBS_SETBKCOLOR
-  SendMessage (wnd, PBS_SETBKCOLOR, 0, 
-              (LPARAM) (COLOR_INSTANCE_MSWINDOWS_COLOR 
-                        (XCOLOR_INSTANCE 
-                         (FACE_BACKGROUND 
+  SendMessage (wnd, PBS_SETBKCOLOR, 0,
+              (LPARAM) (COLOR_INSTANCE_MSWINDOWS_COLOR
+                        (XCOLOR_INSTANCE
+                         (FACE_BACKGROUND
                           (XIMAGE_INSTANCE_WIDGET_FACE (ii),
                            XIMAGE_INSTANCE_SUBWINDOW_FRAME (ii))))));
 #endif
 #ifdef PBS_SETBARCOLOR
-  SendMessage (wnd, PBS_SETBARCOLOR, 0, 
-              (L:PARAM) (COLOR_INSTANCE_MSWINDOWS_COLOR 
-                         (XCOLOR_INSTANCE 
-                          (FACE_FOREGROUND 
+  SendMessage (wnd, PBS_SETBARCOLOR, 0,
+              (L:PARAM) (COLOR_INSTANCE_MSWINDOWS_COLOR
+                         (XCOLOR_INSTANCE
+                          (FACE_FOREGROUND
                            (XIMAGE_INSTANCE_WIDGET_FACE (ii),
                             XIMAGE_INSTANCE_SUBWINDOW_FRAME (ii))))));
 #endif
@@ -2528,12 +2528,12 @@ static HTREEITEM add_tree_item (Lisp_Object image_instance,
   tvitem.hInsertAfter = TVI_LAST;
   tvitem.item.mask = TVIF_TEXT | TVIF_CHILDREN;
   tvitem.item.cChildren = children;
-      
+
   if (GUI_ITEMP (item))
     {
       tvitem.item.lParam = mswindows_register_gui_item (item, domain);
       tvitem.item.mask |= TVIF_PARAM;
-      GET_C_STRING_OS_DATA_ALLOCA (XGUI_ITEM (item)->name, 
+      GET_C_STRING_OS_DATA_ALLOCA (XGUI_ITEM (item)->name,
                                   tvitem.item.pszText);
     }
   else
@@ -2541,7 +2541,7 @@ static HTREEITEM add_tree_item (Lisp_Object image_instance,
 
   tvitem.item.cchTextMax = strlen (tvitem.item.pszText);
 
-  if ((ret = (HTREEITEM)SendMessage (wnd, TVM_INSERTITEM, 
+  if ((ret = (HTREEITEM)SendMessage (wnd, TVM_INSERTITEM,
                                     0, (LPARAM)&tvitem)) == 0)
     signal_simple_error ("error adding tree view entry", item);
 
@@ -2576,18 +2576,18 @@ mswindows_tree_view_instantiate (Lisp_Object image_instance, Lisp_Object instant
   HTREEITEM parent;
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, WC_TREEVIEW, 
+                               pointer_bg, dest_mask, domain, WC_TREEVIEW,
                                WS_TABSTOP | WS_BORDER | PBS_SMOOTH
                                | TVS_HASLINES | TVS_HASBUTTONS,
                                WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT);
 
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
+
   /* define a root */
-  parent = add_tree_item (image_instance, wnd, NULL, 
-                         XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)), 
+  parent = add_tree_item (image_instance, wnd, NULL,
+                         XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
                          TRUE, domain);
+
   /* recursively add items to the tree view */
   /* add items to the tab */
   LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
@@ -2607,12 +2607,12 @@ static TC_ITEM* add_tab_item (Lisp_Object image_instance,
   TC_ITEM tvitem, *ret;
 
   tvitem.mask = TCIF_TEXT;
-      
+
   if (GUI_ITEMP (item))
     {
       tvitem.lParam = mswindows_register_gui_item (item, domain);
       tvitem.mask |= TCIF_PARAM;
-      GET_C_STRING_OS_DATA_ALLOCA (XGUI_ITEM (item)->name, 
+      GET_C_STRING_OS_DATA_ALLOCA (XGUI_ITEM (item)->name,
                                   tvitem.pszText);
     }
   else
@@ -2623,7 +2623,7 @@ static TC_ITEM* add_tab_item (Lisp_Object image_instance,
 
   tvitem.cchTextMax = strlen (tvitem.pszText);
 
-  if ((ret = (TC_ITEM*)SendMessage (wnd, TCM_INSERTITEM, 
+  if ((ret = (TC_ITEM*)SendMessage (wnd, TCM_INSERTITEM,
                                    index, (LPARAM)&tvitem)) < 0)
     signal_simple_error ("error adding tab entry", item);
 
@@ -2640,7 +2640,7 @@ mswindows_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object insta
   int index = 0;
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, WC_TABCONTROL, 
+                               pointer_bg, dest_mask, domain, WC_TABCONTROL,
                                /* borders don't suit tabs so well */
                                WS_TABSTOP,
                                WS_EX_CONTROLPARENT);
@@ -2670,15 +2670,15 @@ mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop
 
       /* delete the pre-existing items */
       SendMessage (wnd, TCM_DELETEALLITEMS, 0, 0);
-  
-      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));
 
       /* add items to the tab */
       LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
        {
-         add_tab_item (image_instance, wnd, XCAR (rest), 
+         add_tab_item (image_instance, wnd, XCAR (rest),
                        IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), index);
          index++;
        }
@@ -2695,7 +2695,7 @@ mswindows_label_instantiate (Lisp_Object image_instance, Lisp_Object instantiato
                             int dest_mask, Lisp_Object domain)
 {
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, "STATIC", 
+                               pointer_bg, dest_mask, domain, "STATIC",
                                0, WS_EX_STATICEDGE);
 }
 
@@ -2706,7 +2706,7 @@ mswindows_scrollbar_instantiate (Lisp_Object image_instance, Lisp_Object instant
                                 int dest_mask, Lisp_Object domain)
 {
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, "SCROLLBAR", 
+                               pointer_bg, dest_mask, domain, "SCROLLBAR",
                                0,
                                WS_EX_CLIENTEDGE );
 }
@@ -2735,14 +2735,14 @@ mswindows_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instant
                        pointer_bg, dest_mask, domain, len + 1, 0, 0);
 
   mswindows_widget_instantiate (image_instance, instantiator, pointer_fg,
-                               pointer_bg, dest_mask, domain, "COMBOBOX", 
+                               pointer_bg, dest_mask, domain, "COMBOBOX",
                                WS_BORDER | WS_TABSTOP | CBS_DROPDOWN
-                               | CBS_AUTOHSCROLL  
+                               | 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, 
+  widget_text_to_pixel_conversion (domain,
+                                  IMAGE_INSTANCE_WIDGET_FACE (ii), 1, 0,
                                   &IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii), 0);
   wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
   /* add items to the combo box */
@@ -2767,7 +2767,7 @@ mswindows_widget_property (Lisp_Object image_instance, Lisp_Object prop)
     {
       Extcount len = SendMessage (wnd, WM_GETTEXTLENGTH, 0, 0);
       Extbyte* buf =alloca (len+1);
-      
+
       SendMessage (wnd, WM_GETTEXT, (WPARAM)len+1, (LPARAM) buf);
       return build_ext_string (buf, FORMAT_OS);
     }
@@ -2920,13 +2920,13 @@ image_instantiator_format_create_glyphs_mswindows (void)
 #endif
 #ifdef HAVE_TIFF
   IIFORMAT_VALID_CONSOLE (mswindows, tiff);
-#endif  
+#endif
 #ifdef HAVE_PNG
   IIFORMAT_VALID_CONSOLE (mswindows, png);
-#endif  
+#endif
 #ifdef HAVE_GIF
   IIFORMAT_VALID_CONSOLE (mswindows, gif);
-#endif  
+#endif
 #ifdef HAVE_WIDGETS
   /* button widget */
   INITIALIZE_DEVICE_IIFORMAT (mswindows, button);
@@ -2935,7 +2935,7 @@ image_instantiator_format_create_glyphs_mswindows (void)
 
   INITIALIZE_DEVICE_IIFORMAT (mswindows, edit_field);
   IIFORMAT_HAS_DEVMETHOD (mswindows, edit_field, instantiate);
-  
+
   INITIALIZE_DEVICE_IIFORMAT (mswindows, subwindow);
   IIFORMAT_HAS_DEVMETHOD (mswindows, subwindow, instantiate);
 
@@ -2991,7 +2991,7 @@ image_instantiator_format_create_glyphs_mswindows (void)
   IIFORMAT_HAS_METHOD (mswindows_resource, possible_dest_types);
   IIFORMAT_HAS_METHOD (mswindows_resource, instantiate);
 
-  IIFORMAT_VALID_KEYWORD (mswindows_resource, Q_resource_type, 
+  IIFORMAT_VALID_KEYWORD (mswindows_resource, Q_resource_type,
                          check_valid_resource_symbol);
   IIFORMAT_VALID_KEYWORD (mswindows_resource, Q_resource_id, check_valid_resource_id);
   IIFORMAT_VALID_KEYWORD (mswindows_resource, Q_file, check_valid_string);
index 69c3efe..eb399c1 100644 (file)
@@ -599,7 +599,49 @@ layout_normalize (Lisp_Object inst, Lisp_Object console_type)
   return inst;
 }
 
-/* Instantiate a layout widget. */
+/* Instantiate a layout widget. Sizing commentary: we have a number of
+   problems that we would like to address. Some consider some of these
+   more important than others. Currently size information is
+   determined at instantiation time and is then fixed forever
+   after. Generally this is not what we want. Users want size to be
+   "big enough" to accommodate whatever they are trying to show and
+   this is dependent on text length, lines, font metrics etc. Of
+   course these attributes can change dynamically and so the size
+   should changed dynamically also. Only in a few limited cases should
+   the size be fixed and remain fixed. Of course this actually means
+   that we don't really want to specifiy the size *at all* for most
+   widgets - we want it to be discovered dynamically. Thus we can
+   envisage the following scenarios:
+   
+   1. A button is sized to accommodate its text, the text changes and the
+   button should change size also.  
+
+   2. A button is given an explicit size. Its size should never change.
+
+   3. Layout is put inside an area. The size of the area changes, the
+   layout should change with it. 
+
+   4. A button grows to accommodate additional text. The whitespace
+   around it should be modified to cope with the new layout
+   requirements. 
+
+   5. A button grows. The area surrounding it should grow also if
+   possible. 
+
+   What metrics are important?
+   1. Actual width and height.
+   
+   2. Whether the width and height are what the widget actually wants, or
+   whether it can grow or shrink. 
+
+   Text glyphs are particularly troublesome since their metrics depend
+   on the context in which they are being viewed. For instance they
+   can appear differently depending on the window face, frame face or
+   glyph face. All other glyphs are essentially fixed in
+   appearance. Perhaps the problem is that text glyphs are cached on a
+   device basis like most other glyphs. Instead they should be cached
+   per-window and then the instance would be fixed and we wouldn't
+   have to mess around with font metrics and the rest. */
 static void
 layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                    Lisp_Object pointer_fg, Lisp_Object pointer_bg,
@@ -795,19 +837,19 @@ void
 image_instantiator_format_create_glyphs_widget (void)
 {
 #define VALID_GUI_KEYWORDS(type) \
-  IIFORMAT_VALID_KEYWORD (type, Q_active, check_valid_anything); \
-  IIFORMAT_VALID_KEYWORD (type, Q_suffix, check_valid_anything); \
+  IIFORMAT_VALID_NONCOPY_KEYWORD (type, Q_active, check_valid_anything); \
+  IIFORMAT_VALID_KEYWORD (type, Q_suffix, check_valid_anything);               \
   IIFORMAT_VALID_KEYWORD (type, Q_keys, check_valid_string);           \
   IIFORMAT_VALID_KEYWORD (type, Q_style, check_valid_symbol);          \
-  IIFORMAT_VALID_KEYWORD (type, Q_selected, check_valid_anything);     \
+  IIFORMAT_VALID_NONCOPY_KEYWORD (type, Q_selected, check_valid_anything); \
   IIFORMAT_VALID_KEYWORD (type, Q_filter, check_valid_anything);               \
   IIFORMAT_VALID_KEYWORD (type, Q_config, check_valid_symbol);         \
   IIFORMAT_VALID_KEYWORD (type, Q_included, check_valid_anything);     \
   IIFORMAT_VALID_KEYWORD (type, Q_key_sequence, check_valid_string);   \
-  IIFORMAT_VALID_KEYWORD (type, Q_accelerator, check_valid_string);    \
+  IIFORMAT_VALID_KEYWORD (type, Q_accelerator, check_valid_string);            \
   IIFORMAT_VALID_KEYWORD (type, Q_label, check_valid_anything);                \
-  IIFORMAT_VALID_KEYWORD (type, Q_callback, check_valid_callback);             \
-  IIFORMAT_VALID_KEYWORD (type, Q_descriptor, check_valid_string_or_vector)
+  IIFORMAT_VALID_NONCOPY_KEYWORD (type, Q_callback, check_valid_callback); \
+  IIFORMAT_VALID_NONCOPY_KEYWORD (type, Q_descriptor, check_valid_string_or_vector)
 
 #define VALID_WIDGET_KEYWORDS(type) \
   IIFORMAT_VALID_KEYWORD (type, Q_width, check_valid_int);             \
index d229d67..e837548 100644 (file)
@@ -148,7 +148,11 @@ static void cursor_font_instantiate (Lisp_Object image_instance,
 
 #ifdef HAVE_WIDGETS
 static void
-update_widget_face (struct Lisp_Image_Instance* ii, Lisp_Object domain);
+update_widget_face (widget_value* wv,
+                   struct Lisp_Image_Instance* ii, Lisp_Object domain);
+static void
+update_tab_widget_face (widget_value* wv,
+                       struct Lisp_Image_Instance* ii, Lisp_Object domain);
 #endif
 
 #include "bitmaps.h"
@@ -2163,30 +2167,16 @@ x_update_subwindow (struct Lisp_Image_Instance *p)
       /* This seems ugly, but I'm not sure what else to do. */
       if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (p), Qtab_control))
        {
-         widget_value* cur = 0;
-         /* Give each child label the correct foreground color. */
-         Lisp_Object pixel = FACE_FOREGROUND 
-           (IMAGE_INSTANCE_WIDGET_FACE (p),
-            IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
-         XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
-         XtSetArg (al [0], XtNtabForeground, fcolor.pixel);
-      
-         for (cur = wv->contents; cur; cur = cur->next)
-           {
-             if (cur->value)
-               {
-                 cur->nargs = 1;
-                 cur->args = al;
-               }
-           }
+         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), 
                             wv, True);
       free_widget_value_tree (wv);
-      /* update the colors and font */
-      update_widget_face (p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
       /* 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));
@@ -2314,45 +2304,59 @@ x_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h)
 /************************************************************************/
 
 static void
-update_widget_face (struct Lisp_Image_Instance* ii, Lisp_Object domain)
+update_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii,
+                   Lisp_Object domain)
 {
-  Arg al[3];
 #ifdef LWLIB_WIDGETS_MOTIF
   XmFontList fontList;
 #endif
-  
+
   Lisp_Object pixel = FACE_FOREGROUND 
     (IMAGE_INSTANCE_WIDGET_FACE (ii),
-     IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
+     domain);
   XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
-  XColor bcolor;
-
-  pixel = FACE_BACKGROUND
-    (IMAGE_INSTANCE_WIDGET_FACE (ii),
-     IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
-  bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
-
-  XtSetArg (al [0], XtNbackground, bcolor.pixel);
-  XtSetArg (al [1], XtNforeground, fcolor.pixel);
 
+  lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
 #ifdef LWLIB_WIDGETS_MOTIF
   fontList = XmFontListCreate
     (FONT_INSTANCE_X_FONT 
      (XFONT_INSTANCE (widget_face_font_info 
-                     (domain, IMAGE_INSTANCE_WIDGET_FACE (ii),
+                     (domain,
+                      IMAGE_INSTANCE_WIDGET_FACE (ii),
                       0, 0))), XmSTRING_DEFAULT_CHARSET);
-  XtSetArg (al [2], XmNfontList, fontList );
-#else
-  XtSetArg (al [2], XtNfont, (void*)FONT_INSTANCE_X_FONT 
-           (XFONT_INSTANCE (widget_face_font_info 
-                            (domain, 
-                             IMAGE_INSTANCE_WIDGET_FACE (ii),
-                             0, 0))));
-#endif
-  XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, 3);
-#ifdef LWLIB_WIDGETS_MOTIF
-  XmFontListFree (fontList);
+  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,
+                      IMAGE_INSTANCE_WIDGET_FACE (ii),
+                      0, 0))));
+}
+
+static void
+update_tab_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii,
+                       Lisp_Object domain)
+{
+  if (wv->contents)
+    {
+      widget_value* val = wv->contents, *cur;
+      
+      /* Give each child label the correct foreground color. */
+      Lisp_Object pixel = FACE_FOREGROUND 
+       (IMAGE_INSTANCE_WIDGET_FACE (ii),
+        domain);
+      XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
+      lw_add_widget_value_arg (val, XtNtabForeground, fcolor.pixel);
+
+      for (cur = val->next; cur; cur = cur->next)
+       {
+         if (cur->value)
+           {
+             lw_copy_widget_value_args (val, cur);
+           }
+       }
+    }
 }
 
 static void
@@ -2393,15 +2397,13 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
      required. */
   clip_wv = xmalloc_widget_value ();
 
-  XtSetArg (al [ac], XtNresize, False);                        ac++;
-  XtSetArg (al [ac], XtNwidth, 
-           (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); ac++;
-  XtSetArg (al [ac], XtNheight, 
-           (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); ac++;
-
+  lw_add_widget_value_arg (clip_wv, XtNresize, False);
+  lw_add_widget_value_arg (clip_wv, XtNwidth, 
+                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
+  lw_add_widget_value_arg (clip_wv, XtNheight, 
+                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
   clip_wv->enabled = True;
-  clip_wv->nargs = ac;
-  clip_wv->args = al;
+
   clip_wv->name = xstrdup ("clip-window");
   clip_wv->value = xstrdup ("clip-window");
 
@@ -2414,9 +2416,7 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 
   /* copy any args we were given */
   ac = 0;
-
-  if (wv->nargs)
-    lw_add_value_args_to_args (wv, al, &ac);
+  lw_add_value_args_to_args (wv, al, &ac);
 
   /* Fixup the colors. We have to do this *before* the widget gets
      created so that Motif will fix up the shadow colors
@@ -2432,17 +2432,16 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
      IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
   bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
 
-  XtSetArg (al [ac], XtNbackground, bcolor.pixel);             ac++;
-  XtSetArg (al [ac], XtNforeground, fcolor.pixel);             ac++;
+  lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel);
+  lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel);
   /* we cannot allow widgets to resize themselves */
-  XtSetArg (al [ac], XtNresize, False);                        ac++;
-  XtSetArg (al [ac], XtNwidth, 
-           (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); ac++;
-  XtSetArg (al [ac], XtNheight, 
-           (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); ac++;
-
-  wv->nargs = ac;
-  wv->args = al;
+  lw_add_widget_value_arg (wv, XtNresize, False);
+  lw_add_widget_value_arg (wv, XtNwidth, 
+                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii));
+  lw_add_widget_value_arg (wv, XtNheight, 
+                          (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii));
+  /* update the font. */
+  update_widget_face (wv, ii, domain);
 
   wid = lw_create_widget (type, wv->name, id, wv, IMAGE_INSTANCE_X_CLIPWIDGET (ii),
                          False, 0, popup_selection_callback, 0);
@@ -2450,9 +2449,6 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)wid;
   IMAGE_INSTANCE_X_WIDGET_LWID (ii) = id;
 
-  /* update the font. */
-  update_widget_face (ii, domain);
-
   /* Resize the widget here so that the values do not get copied by
      lwlib. */
   ac = 0;
@@ -2480,6 +2476,7 @@ x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
+  /* Modify the text properties of the widget */
   if (EQ (prop, Q_text))
     {
       char* str;
@@ -2490,10 +2487,13 @@ x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
       lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False);
       return Qt;
     }
-  /* Modify the face properties of the widget */
-  if (EQ (prop, Q_face))
+
+  /* Modify the text properties of the widget */
+  else if (EQ (prop, Q_face))
     {
-      update_widget_face (ii, IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
+      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;
@@ -2650,29 +2650,11 @@ 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);
-  Arg al [1];
-  XColor fcolor;
-  Lisp_Object pixel;
-  widget_value* cur;
-
   widget_value * wv = 
     gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
 
-  /* Give each child label the correct foreground color. */
-  pixel = FACE_FOREGROUND 
-    (IMAGE_INSTANCE_WIDGET_FACE (ii),
-     IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
-  fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
-  XtSetArg (al [0], XtNtabForeground, fcolor.pixel);
-
-  for (cur = wv->contents; cur; cur = cur->next)
-    {
-      if (cur->value)
-       {
-         cur->nargs = 1;
-         cur->args = al;
-       }
-    }
+  update_tab_widget_face (wv, ii, 
+                         IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
 
   x_widget_instantiate (image_instance, instantiator, pointer_fg,
                        pointer_bg, dest_mask, domain, "tab-control", wv);
@@ -2687,11 +2669,7 @@ x_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop,
   
   if (EQ (prop, Q_items))
     {
-      widget_value * wv = 0, *cur;
-      Arg al [1];
-      XColor fcolor;
-      Lisp_Object pixel;
-
+      widget_value * wv = 0;
       check_valid_item_list_1 (val);
 
       IMAGE_INSTANCE_WIDGET_ITEMS (ii) = 
@@ -2699,22 +2677,9 @@ x_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop,
               parse_gui_item_tree_children (val));
 
       wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
-
-      /* Give each child label the correct foreground color. */
-      pixel = FACE_FOREGROUND 
-       (IMAGE_INSTANCE_WIDGET_FACE (ii),
-        IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
-      fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
-      XtSetArg (al [0], XtNtabForeground, fcolor.pixel);
       
-      for (cur = wv->contents; cur; cur = cur->next)
-       {
-         if (cur->value)
-           {
-             cur->nargs = 1;
-             cur->args = al;
-           }
-       }
+      update_tab_widget_face (wv, ii, 
+                             IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
 
       lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True);
 
index 0e327f4..e10c23f 100644 (file)
@@ -1724,14 +1724,14 @@ string_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 = find_keyword_in_vector (instantiator, Q_data);
+  Lisp_Object string = find_keyword_in_vector (instantiator, Q_data);
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
-  assert (!NILP (data));
+  assert (!NILP (string));
   if (dest_mask & IMAGE_TEXT_MASK)
     {
       IMAGE_INSTANCE_TYPE (ii) = IMAGE_TEXT;
-      IMAGE_INSTANCE_TEXT_STRING (ii) = data;
+      IMAGE_INSTANCE_TEXT_STRING (ii) = string;
     }
   else
     incompatible_image_types (instantiator, dest_mask, IMAGE_TEXT_MASK);
@@ -2536,10 +2536,12 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
             round it. */
          if (UNBOUNDP (instance)
              &&
-             dest_mask & (IMAGE_SUBWINDOW_MASK | IMAGE_WIDGET_MASK))
+             dest_mask & (IMAGE_SUBWINDOW_MASK 
+                          | IMAGE_WIDGET_MASK
+                          | IMAGE_TEXT_MASK))
            {
              if (!WINDOWP (domain))
-               signal_simple_error ("Can't instantiate subwindow outside a window",
+               signal_simple_error ("Can't instantiate text or subwindow outside a window",
                                     instantiator);
              instance = Fgethash (instantiator, 
                                   XWINDOW (domain)->subwindow_instance_cache, 
@@ -2733,6 +2735,76 @@ image_going_to_add (Lisp_Object specifier, Lisp_Object locale,
   return retlist;
 }
 
+/* Copy an image instantiator. We can't use Fcopy_tree since widgets
+   may contain circular references which would send Fcopy_tree into
+   infloop death. */
+static Lisp_Object
+image_copy_vector_instantiator (Lisp_Object instantiator)
+{
+  int i;
+  struct image_instantiator_methods *meths;
+  Lisp_Object *elt;
+  int instantiator_len;
+
+  CHECK_VECTOR (instantiator);
+
+  instantiator = Fcopy_sequence (instantiator);
+  elt = XVECTOR_DATA (instantiator);
+  instantiator_len = XVECTOR_LENGTH (instantiator);
+  
+  meths = decode_image_instantiator_format (elt[0], ERROR_ME);
+
+  for (i = 1; i < instantiator_len; i += 2)
+    {
+      int j;
+      Lisp_Object keyword = elt[i];
+      Lisp_Object value = elt[i+1];
+
+      /* Find the keyword entry. */
+      for (j = 0; j < Dynarr_length (meths->keywords); j++)
+       {
+         if (EQ (keyword, Dynarr_at (meths->keywords, j).keyword))
+           break;
+       }
+
+      /* Only copy keyword values that should be copied. */
+      if (Dynarr_at (meths->keywords, j).copy_p
+         &&
+         (CONSP (value) || VECTORP (value)))
+       {
+         elt [i+1] = Fcopy_tree (value, Qt);
+       }
+    }
+
+  return instantiator;
+}
+
+static Lisp_Object
+image_copy_instantiator (Lisp_Object arg)
+{
+  if (CONSP (arg))
+    {
+      Lisp_Object rest;
+      rest = arg = Fcopy_sequence (arg);
+      while (CONSP (rest))
+       {
+         Lisp_Object elt = XCAR (rest);
+         if (CONSP (elt))
+           XCAR (rest) = Fcopy_tree (elt, Qt);
+         else if (VECTORP (elt))
+           XCAR (rest) = image_copy_vector_instantiator (elt);
+         if (VECTORP (XCDR (rest))) /* hack for (a b . [c d]) */
+           XCDR (rest) = Fcopy_tree (XCDR (rest), Qt);
+         rest = XCDR (rest);
+       }
+    }
+  else if (VECTORP (arg))
+    {
+      arg = image_copy_vector_instantiator (arg);
+    }
+  return arg;
+}
+
 DEFUN ("image-specifier-p", Fimage_specifier_p, 1, 1, 0, /*
 Return non-nil if OBJECT is an image specifier.
 
@@ -4473,6 +4545,7 @@ specifier_type_create_image (void)
   SPECIFIER_HAS_METHOD (image, validate);
   SPECIFIER_HAS_METHOD (image, after_change);
   SPECIFIER_HAS_METHOD (image, going_to_add);
+  SPECIFIER_HAS_METHOD (image, copy_instantiator);
 }
 
 void
index b0e65f1..c8bb105 100644 (file)
@@ -74,6 +74,7 @@ struct ii_keyword_entry
   Lisp_Object keyword;
   void (*validate) (Lisp_Object data);
   int multiple_p;
+  int copy_p;
 };
 
 typedef struct
@@ -130,6 +131,13 @@ struct image_instantiator_methods
   Lisp_Object (*set_property_method) (Lisp_Object image_instance,
                                      Lisp_Object property,
                                      Lisp_Object val);
+
+  /* Find out the geometry of this 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);
 };
 
 /***** Calling an image-instantiator method *****/
@@ -202,29 +210,31 @@ do {                                                              \
 /* Declare that KEYW is a valid keyword for image-instantiator format
    FORMAT.  VALIDATE_FUN if a function that returns whether the data
    is valid.  The keyword may not appear more than once. */
-#define IIFORMAT_VALID_KEYWORD(format, keyw, validate_fun)     \
-  do {                                                         \
+#define IIFORMAT_VALID_GENERIC_KEYWORD(format, keyw, validate_fun, copy, multi) \
+  do {                                                 \
     struct ii_keyword_entry entry;                             \
-                                                               \
-    entry.keyword = keyw;                                      \
+                                                       \
+    entry.keyword = keyw;                              \
     entry.validate = validate_fun;                             \
-    entry.multiple_p = 0;                                      \
+    entry.multiple_p = multi;                          \
+    entry.copy_p = copy;                                       \
     Dynarr_add (format##_image_instantiator_methods->keywords, \
                entry);                                         \
   } while (0)
 
+#define IIFORMAT_VALID_KEYWORD(format, keyw, validate_fun)     \
+IIFORMAT_VALID_GENERIC_KEYWORD(format, keyw, validate_fun, 1, 0)
+
 /* Same as IIFORMAT_VALID_KEYWORD except that the keyword may
    appear multiple times. */
-#define IIFORMAT_VALID_MULTI_KEYWORD(format, keyword, validate_fun)    \
-  do {                                                                 \
-    struct ii_keyword_entry entry;                                     \
-                                                                       \
-    entry.keyword = keyword;                                           \
-    entry.validate = validate_fun;                                     \
-    entry.multiple_p = 1;                                              \
-    Dynarr_add (format##_image_instantiator_methods->keywords,         \
-               entry);                                                 \
-  } while (0)
+#define IIFORMAT_VALID_MULTI_KEYWORD(format, keyw, validate_fun)       \
+IIFORMAT_VALID_GENERIC_KEYWORD(format, keyw, validate_fun, 1, 1)
+
+/* Same as IIFORMAT_VALID_KEYWORD execpt that the argument is not
+   copied by the specifier functions. This is necessary for things
+   like callbacks etc. */
+#define IIFORMAT_VALID_NONCOPY_KEYWORD(format, keyw, validate_fun)     \
+IIFORMAT_VALID_GENERIC_KEYWORD(format, keyw, validate_fun, 0, 0)
 
 /* Declare that image-instantiator format FORMAT is supported on 
    CONSOLE type. */
@@ -362,6 +372,14 @@ 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)
@@ -446,18 +464,20 @@ struct Lisp_Image_Instance
   Lisp_Object device;
   Lisp_Object name;
   enum image_instance_type type;
-  int x_offset, y_offset;      /* for layout purposes */
+  unsigned int x_offset, y_offset;     /* for layout purposes */
+  unsigned int width, height;
   unsigned int dirty : 1;
   union
   {
     struct
     {
+      unsigned int descent;
       Lisp_Object string;
     } text;
     struct
     {
-      int width, height, depth;
-      int slice, maxslice, timeout;
+      unsigned int depth;
+      unsigned int slice, maxslice, timeout;
       Lisp_Object hotspot_x, hotspot_y; /* integer or Qnil */
       Lisp_Object filename;     /* string or Qnil */
       Lisp_Object mask_filename; /* string or Qnil */
@@ -471,7 +491,6 @@ struct Lisp_Image_Instance
     struct
     {
       Lisp_Object frame;
-      unsigned int width, height;
       void* subwindow;         /* specific devices can use this as necessary */
       unsigned int being_displayed : 1;        /* used to detect when needs to be unmapped */
       union
@@ -501,15 +520,24 @@ struct Lisp_Image_Instance
 #define IMAGE_INSTANCE_TYPE(i) ((i)->type)
 #define IMAGE_INSTANCE_XOFFSET(i) ((i)->x_offset)
 #define IMAGE_INSTANCE_YOFFSET(i) ((i)->y_offset)
+#define IMAGE_INSTANCE_WIDTH(i) ((i)->width)
+#define IMAGE_INSTANCE_HEIGHT(i) ((i)->height)
 #define IMAGE_INSTANCE_PIXMAP_TYPE_P(i)                                        \
  ((IMAGE_INSTANCE_TYPE (i) == IMAGE_MONO_PIXMAP)                       \
   || (IMAGE_INSTANCE_TYPE (i) == IMAGE_COLOR_PIXMAP))
 #define IMAGE_INSTANCE_DIRTYP(i) ((i)->dirty)
 
 #define IMAGE_INSTANCE_TEXT_STRING(i) ((i)->u.text.string)
-
-#define IMAGE_INSTANCE_PIXMAP_WIDTH(i) ((i)->u.pixmap.width)
-#define IMAGE_INSTANCE_PIXMAP_HEIGHT(i) ((i)->u.pixmap.height)
+#define IMAGE_INSTANCE_TEXT_WIDTH(i) \
+  IMAGE_INSTANCE_WIDTH(i)
+#define IMAGE_INSTANCE_TEXT_HEIGHT(i) \
+  IMAGE_INSTANCE_HEIGHT(i)
+#define IMAGE_INSTANCE_TEXT_DESCENT(i) ((i)->u.text.descent)
+
+#define IMAGE_INSTANCE_PIXMAP_WIDTH(i) \
+  IMAGE_INSTANCE_WIDTH(i)
+#define IMAGE_INSTANCE_PIXMAP_HEIGHT(i) \
+  IMAGE_INSTANCE_HEIGHT(i)
 #define IMAGE_INSTANCE_PIXMAP_DEPTH(i) ((i)->u.pixmap.depth)
 #define IMAGE_INSTANCE_PIXMAP_FILENAME(i) ((i)->u.pixmap.filename)
 #define IMAGE_INSTANCE_PIXMAP_MASK_FILENAME(i) ((i)->u.pixmap.mask_filename)
@@ -523,17 +551,19 @@ struct Lisp_Image_Instance
 #define IMAGE_INSTANCE_PIXMAP_MAXSLICE(i) ((i)->u.pixmap.maxslice)
 #define IMAGE_INSTANCE_PIXMAP_TIMEOUT(i) ((i)->u.pixmap.timeout)
 
-#define IMAGE_INSTANCE_SUBWINDOW_WIDTH(i) ((i)->u.subwindow.width)
-#define IMAGE_INSTANCE_SUBWINDOW_HEIGHT(i) ((i)->u.subwindow.height)
+#define IMAGE_INSTANCE_SUBWINDOW_WIDTH(i) \
+ IMAGE_INSTANCE_WIDTH(i)
+#define IMAGE_INSTANCE_SUBWINDOW_HEIGHT(i) \
+  IMAGE_INSTANCE_HEIGHT(i)
 #define IMAGE_INSTANCE_SUBWINDOW_ID(i) ((i)->u.subwindow.subwindow)
 #define IMAGE_INSTANCE_SUBWINDOW_FRAME(i) ((i)->u.subwindow.frame)
 #define IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP(i) \
 ((i)->u.subwindow.being_displayed)
 
 #define IMAGE_INSTANCE_WIDGET_WIDTH(i) \
-  IMAGE_INSTANCE_SUBWINDOW_WIDTH(i)
+  IMAGE_INSTANCE_WIDTH(i)
 #define IMAGE_INSTANCE_WIDGET_HEIGHT(i) \
-  IMAGE_INSTANCE_SUBWINDOW_HEIGHT(i)
+  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)
index 8e31dd5..ccb8746 100644 (file)
@@ -25,8 +25,7 @@ Boston, MA 02111-1307, USA.  */
 
 #include "specifier.h"
 
-#define DEVICE_SUPPORTS_GUTTERS_P(d)           \
-  (HAS_DEVMETH_P ((d), output_frame_gutters))
+#define DEVICE_SUPPORTS_GUTTERS_P(d) HAS_DEVMETH_P (d, output_frame_gutters)
 
 DECLARE_SPECIFIER_TYPE (gutter);
 #define XGUTTER_SPECIFIER(x) XSPECIFIER_TYPE (x, gutter)
index 883070a..e61b07e 100644 (file)
@@ -2887,7 +2887,8 @@ extern Lisp_Object Vconfigure_site_directory, Vconfigure_site_module_directory;
 extern Lisp_Object Vconsole_list, Vcontrolling_terminal;
 extern Lisp_Object Vcurrent_compiled_function_annotation, Vcurrent_load_list;
 extern Lisp_Object Vcurrent_mouse_event, Vcurrent_prefix_arg, Vdata_directory;
-extern Lisp_Object Vdisabled_command_hook, Vdoc_directory, Vinternal_doc_file_name;
+extern Lisp_Object Vdirectory_sep_char, Vdisabled_command_hook;
+extern Lisp_Object Vdoc_directory, Vinternal_doc_file_name;
 extern Lisp_Object Vecho_area_buffer, Vemacs_major_version;
 extern Lisp_Object Vemacs_minor_version, Vexec_directory, Vexec_path;
 extern Lisp_Object Vexecuting_macro, Vfeatures, Vfile_domain;
index 2616896..5b828ca 100644 (file)
@@ -1106,7 +1106,9 @@ print_internal (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
     case Lisp_Type_Int_Even:
     case Lisp_Type_Int_Odd:
       {
-       char buf[24];
+       /* ASCII Decimal representation uses 2.4 times as many bits as
+          machine binary.  */
+       char buf[3 * sizeof (EMACS_INT) + 5];
        long_to_string (buf, XINT (obj));
        write_c_string (buf, printcharfun);
        break;
@@ -1119,36 +1121,61 @@ print_internal (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
        Emchar ch = XCHAR (obj);
        char *p = buf;
        *p++ = '?';
-       if (ch == '\n')
-         *p++ = '\\', *p++ = 'n';
-       else if (ch == '\r')
-         *p++ = '\\', *p++ = 'r';
-       else if (ch == '\t')
-         *p++ = '\\', *p++ = 't';
-       else if (ch < 32)
+       if (ch < 32)
          {
-           *p++ = '\\', *p++ = '^';
-           *p++ = ch + 64;
-           if ((ch + 64) == '\\')
-             *p++ = '\\';
+           *p++ = '\\';
+           switch (ch)
+             {
+             case '\t': *p++ = 't'; break;
+             case '\n': *p++ = 'n'; break;
+             case '\r': *p++ = 'r'; break;
+             default:
+               *p++ = '^';
+               *p++ = ch + 64;
+               if ((ch + 64) == '\\')
+                 *p++ = '\\';
+               break;
+             }
+         }
+       else if (ch < 127)
+         {
+           /* syntactically special characters should be escaped. */
+           switch (ch)
+             {
+             case ' ':
+             case '"':
+             case '#':
+             case '\'':
+             case '(':
+             case ')':
+             case ',':
+             case '.':
+             case ';':
+             case '?':
+             case '[':
+             case '\\':
+             case ']':
+             case '`':
+               *p++ = '\\';
+             }
+           *p++ = ch;
          }
        else if (ch == 127)
-         *p++ = '\\', *p++ = '^', *p++ = '?';
-       else if (ch >= 128 && ch < 160)
+         {
+           *p++ = '\\', *p++ = '^', *p++ = '?';
+         }
+       else if (ch < 160)
          {
            *p++ = '\\', *p++ = '^';
-           p += set_charptr_emchar ((Bufbyte *)p, ch + 64);
+           p += set_charptr_emchar ((Bufbyte *) p, ch + 64);
          }
-       else if (ch < 127
-                && !isdigit (ch)
-                && !isalpha (ch)
-                && ch != '^') /* must not backslash this or it will
-                                 be interpreted as the start of a
-                                 control char */
-         *p++ = '\\', *p++ = ch;
        else
-         p += set_charptr_emchar ((Bufbyte *)p, ch);
-       output_string (printcharfun, (Bufbyte *)buf, Qnil, 0, p - buf);
+         {
+           p += set_charptr_emchar ((Bufbyte *) p, ch);
+         }
+         
+       output_string (printcharfun, (Bufbyte *) buf, Qnil, 0, p - buf);
+
        break;
       }
 
index 648026f..111575b 100644 (file)
@@ -119,9 +119,10 @@ sigprof_handler (int signo)
        {
          fun = *backtrace_list->function;
 
-         if (!SYMBOLP       (fun) &&
-             !COMPILED_FUNCTIONP (fun) &&
-             !SUBRP                 (fun))
+         if (!SYMBOLP (fun)
+             && !COMPILED_FUNCTIONP (fun)
+             && !SUBRP (fun)
+             && !CONSP (fun))
             fun = QSunknown;
        }
       else
index f767790..16a27f2 100644 (file)
@@ -47,16 +47,16 @@ static void redraw_cursor_in_window (struct window *w,
                                     int run_end_begin_glyphs);
 static void redisplay_output_display_block (struct window *w, struct display_line *dl,
                                            int block, int start, int end, int start_pixpos,
-                                           int cursor_start, int cursor_width, 
+                                           int cursor_start, int cursor_width,
                                            int cursor_height);
-static void redisplay_normalize_display_box (struct display_box* dest, 
+static void redisplay_normalize_display_box (struct display_box* dest,
                                             struct display_glyph_area* src);
 static int redisplay_display_boxes_in_window_p (struct window* w,
                                                struct display_box* db,
                                                struct display_glyph_area* dga);
-static void redisplay_clear_clipped_region (Lisp_Object locale, face_index findex, 
-                                           struct display_box* dest, 
-                                           struct display_glyph_area* glyphsrc, 
+static void redisplay_clear_clipped_region (Lisp_Object locale, face_index findex,
+                                           struct display_box* dest,
+                                           struct display_glyph_area* glyphsrc,
                                            int fullheight_p, Lisp_Object);
 
 /*****************************************************************************
@@ -210,7 +210,7 @@ compare_runes (struct window *w, struct rune *crb, struct rune *drb)
 
      #### It would really be worth it to arrange for this function to
      be (almost) a single call to memcmp. */
-  
+
   if ((crb->findex != drb->findex) ||
       (WINDOW_FACE_CACHEL_DIRTY (w, drb->findex)))
     return 0;
@@ -229,7 +229,7 @@ compare_runes (struct window *w, struct rune *crb, struct rune *drb)
           (crb->object.hline.thickness != drb->object.hline.thickness ||
            crb->object.hline.yoffset != drb->object.hline.yoffset))
     return 0;
-  else if (crb->type == RUNE_DGLYPH && 
+  else if (crb->type == RUNE_DGLYPH &&
           (!EQ (crb->object.dglyph.glyph, drb->object.dglyph.glyph) ||
            !EQ (crb->object.dglyph.extent, drb->object.dglyph.extent) ||
            crb->object.dglyph.xoffset != drb->object.dglyph.xoffset))
@@ -244,7 +244,7 @@ compare_runes (struct window *w, struct rune *crb, struct rune *drb)
         up-to-date. */
       if (GLYPH_CACHEL_DIRTYP (w, gindex))
        return 0;
-      else 
+      else
        return 1;
     }
   else
@@ -657,7 +657,7 @@ output_display_line (struct window *w, display_line_dynarr *cdla,
                  if (x < ddl->bounds.left_in)
                    {
                      findex = ddl->left_margin_findex ?
-                       ddl->left_margin_findex 
+                       ddl->left_margin_findex
                        : get_builtin_face_cache_index (w, Vleft_margin_face);
                    }
                  else if (x < ddl->bounds.right_in)
@@ -668,7 +668,7 @@ output_display_line (struct window *w, display_line_dynarr *cdla,
                  else if (x < ddl->bounds.right_out)
                    {
                      findex = ddl->right_margin_findex ?
-                       ddl->right_margin_findex 
+                       ddl->right_margin_findex
                        : get_builtin_face_cache_index (w, Vright_margin_face);
                    }
                  else
@@ -712,10 +712,10 @@ output_display_line (struct window *w, display_line_dynarr *cdla,
             region or if it was a block of a different type, then
             output the entire ddb.  Otherwise, compare cdb and
             ddb and output only the changed region. */
-         if (!force && cdb && ddb->type == cdb->type 
+         if (!force && cdb && ddb->type == cdb->type
              /* If there was no buffer being display before the
                  compare anyway as we might be outputting a gutter. */
-             && 
+             &&
              (b == old_b || !old_b))
            {
              must_sync |= compare_display_blocks (w, cdl, ddl, old_block,
@@ -754,7 +754,7 @@ output_display_line (struct window *w, display_line_dynarr *cdla,
                                              cursor_start, cursor_width,
                                              cursor_height);
            }
-         
+
          start_pixpos = next_start_pixpos;
        }
     }
@@ -778,7 +778,7 @@ output_display_line (struct window *w, display_line_dynarr *cdla,
              y -= MODELINE_SHADOW_THICKNESS (w);
              height += (2 * MODELINE_SHADOW_THICKNESS (w));
            }
-         
+
          if (window_is_leftmost (w))
            clear_left_border (w, y, height);
          if (window_is_rightmost (w))
@@ -924,7 +924,7 @@ redisplay_move_cursor (struct window *w, Bufpos new_point, int no_output_end)
            }
        }
 
-      while ((up ? (cur_dl < Dynarr_length (cla)) : (cur_dl >= 0)))
+      while (up ? (cur_dl < Dynarr_length (cla)) : (cur_dl >= 0))
        {
          dl = Dynarr_atp (cla, cur_dl);
          db = get_display_block_from_line (dl, TEXT);
@@ -1112,7 +1112,7 @@ static void redisplay_unmap_subwindows (struct frame* f, int x, int y, int width
          cachel->x + cachel->width > x && cachel->x < x + width
          &&
          cachel->y + cachel->height > y && cachel->y < y + height
-         && 
+         &&
          !EQ (cachel->subwindow, ignored_window))
        {
          unmap_subwindow (cachel->subwindow);
@@ -1134,7 +1134,7 @@ void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, int width,
     }
 }
 
-static void redisplay_unmap_subwindows_except_us (struct frame* f, int x, int y, int width, 
+static void redisplay_unmap_subwindows_except_us (struct frame* f, int x, int y, int width,
                                                  int height, Lisp_Object subwindow)
 {
   if (Dynarr_length (FRAME_SUBWINDOW_CACHE (f)))
@@ -1151,7 +1151,7 @@ static void redisplay_unmap_subwindows_except_us (struct frame* f, int x, int y,
  pixmaps, backgrounds etc.
  ****************************************************************************/
 void
-redisplay_output_subwindow (struct window *w, 
+redisplay_output_subwindow (struct window *w,
                            Lisp_Object image_instance,
                            struct display_box* db, struct display_glyph_area* dga,
                            face_index findex, int cursor_start, int cursor_width,
@@ -1189,7 +1189,7 @@ redisplay_output_subwindow (struct window *w,
   sdga.yoffset = -dga->yoffset;
   sdga.height = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (p);
   sdga.width = IMAGE_INSTANCE_SUBWINDOW_WIDTH (p);
-  
+
   if (redisplay_display_boxes_in_window_p (w, db, &sdga) < 0)
     {
       map_subwindow (image_instance, db->xpos, db->ypos, dga);
@@ -1197,7 +1197,7 @@ redisplay_output_subwindow (struct window *w,
   else
     {
       sdga.xoffset = sdga.yoffset = 0;
-      map_subwindow (image_instance, db->xpos - dga->xoffset, 
+      map_subwindow (image_instance, db->xpos - dga->xoffset,
                     db->ypos - dga->yoffset, &sdga);
     }
 }
@@ -1208,7 +1208,7 @@ redisplay_output_subwindow (struct window *w,
  Output a widget hierarchy. This can safely call itself recursively.
  ****************************************************************************/
 void
-redisplay_output_layout (struct window *w, 
+redisplay_output_layout (struct window *w,
                         Lisp_Object image_instance,
                         struct display_box* db, struct display_glyph_area* dga,
                         face_index findex, int cursor_start, int cursor_width,
@@ -1252,7 +1252,7 @@ redisplay_output_layout (struct window *w,
         thing to do since we have many gaps that we have to make sure are
         filled in. */
       redisplay_clear_clipped_region (window, findex, db, dga, 1, Qnil);
-      
+
       /* Output a border if required */
       if (!NILP (IMAGE_INSTANCE_LAYOUT_BORDER (p)))
        {
@@ -1260,7 +1260,7 @@ redisplay_output_layout (struct window *w,
          enum edge_style style;
          int ypos = db->ypos;
          int height = dga->height;
-         
+
          if (dga->xoffset >= 0)
            edges |= EDGE_LEFT;
          if (dga->width - dga->xoffset == layout_width)
@@ -1269,7 +1269,7 @@ redisplay_output_layout (struct window *w,
            edges |= EDGE_TOP;
          if (dga->height - dga->yoffset == layout_height)
            edges |= EDGE_BOTTOM;
-         
+
          if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qetched_in))
            style = EDGE_ETCHED_IN;
          else if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qetched_out))
@@ -1288,13 +1288,13 @@ redisplay_output_layout (struct window *w,
          else
            style = EDGE_BEVEL_OUT;
 
-         MAYBE_DEVMETH (d, bevel_area, 
+         MAYBE_DEVMETH (d, bevel_area,
                         (w, findex, db->xpos,
-                         ypos, 
+                         ypos,
                          dga->width, height, 2, edges, style));
        }
     }
-    
+
   /* This shrinks the display box to exactly enclose the glyph
      area. */
   redisplay_normalize_display_box (db, dga);
@@ -1346,8 +1346,8 @@ redisplay_output_layout (struct window *w,
                  {
                    /* #### This is well hacked and could use some
                       generalisation.*/
-                   if (redisplay_normalize_glyph_area (&cdb, &cdga) 
-                       &&  
+                   if (redisplay_normalize_glyph_area (&cdb, &cdga)
+                       &&
                        (frame_really_changed || IMAGE_INSTANCE_DIRTYP (childii)))
                      {
                        struct display_line dl; /* this is fake */
@@ -1355,7 +1355,7 @@ redisplay_output_layout (struct window *w,
                          IMAGE_INSTANCE_TEXT_STRING (childii);
                        convert_bufbyte_string_into_emchar_dynarr
                          (XSTRING_DATA (string), XSTRING_LENGTH (string), buf);
-                       
+
                        redisplay_normalize_display_box (&cdb, &cdga);
                        /* Offsets are now +ve again so be careful
                           when fixing up the display line. */
@@ -1379,30 +1379,30 @@ redisplay_output_layout (struct window *w,
                      }
                  }
                  break;
-                 
+
                case IMAGE_MONO_PIXMAP:
                case IMAGE_COLOR_PIXMAP:
                  if (frame_really_changed || IMAGE_INSTANCE_DIRTYP (childii))
                    redisplay_output_pixmap (w, child, &cdb, &cdga, findex,
                                             0, 0, 0, 0);
                  break;
-             
+
                case IMAGE_WIDGET:
                case IMAGE_SUBWINDOW:
                  if (frame_really_changed || IMAGE_INSTANCE_DIRTYP (childii))
                    redisplay_output_subwindow (w, child, &cdb, &cdga, findex,
                                                0, 0, 0);
                  break;
-             
+
                case IMAGE_LAYOUT:
                  redisplay_output_layout (w, child, &cdb, &cdga, findex,
                                           0, 0, 0);
                  break;
-             
+
                case IMAGE_NOTHING:
                  /* nothing is as nothing does */
                  break;
-                 
+
                case IMAGE_POINTER:
                default:
                  abort ();
@@ -1420,7 +1420,7 @@ redisplay_output_layout (struct window *w,
  output a pixmap.
  ****************************************************************************/
 void
-redisplay_output_pixmap (struct window *w, 
+redisplay_output_pixmap (struct window *w,
                         Lisp_Object image_instance,
                         struct display_box* db, struct display_glyph_area* dga,
                         face_index findex, int cursor_start, int cursor_width,
@@ -1449,7 +1449,7 @@ redisplay_output_pixmap (struct window *w,
   if (!offset_bitmap)
     {
       redisplay_clear_clipped_region (window, findex,
-                                     db, dga, 
+                                     db, dga,
                                      (int)IMAGE_INSTANCE_PIXMAP_MASK (p),
                                      Qnil);
 
@@ -1506,7 +1506,7 @@ redisplay_clear_region (Lisp_Object locale, face_index findex, int x, int y,
 
   /* #### This isn't quite right for when this function is called
      from the toolbar code. */
-  
+
   /* Don't use a backing pixmap in the border area */
   if (x >= FRAME_LEFT_BORDER_END (f)
       && x < FRAME_RIGHT_BORDER_START (f)
@@ -1514,11 +1514,11 @@ redisplay_clear_region (Lisp_Object locale, face_index findex, int x, int y,
       && y < FRAME_BOTTOM_BORDER_START (f))
     {
       Lisp_Object temp;
-      
+
       if (w)
        {
          temp = WINDOW_FACE_CACHEL_BACKGROUND_PIXMAP (w, findex);
-         
+
          if (IMAGE_INSTANCEP (temp)
              && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (temp)))
            {
@@ -1530,14 +1530,14 @@ redisplay_clear_region (Lisp_Object locale, face_index findex, int x, int y,
       else
        {
          temp = FACE_BACKGROUND_PIXMAP (Vdefault_face, locale);
-         
+
          if (IMAGE_INSTANCEP (temp)
              && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (temp)))
            {
              background_pixmap = temp;
            }
        }
-    }      
+    }
 
   if (!UNBOUNDP (background_pixmap) &&
       XIMAGE_INSTANCE_PIXMAP_DEPTH (background_pixmap) == 0)
@@ -1558,13 +1558,13 @@ redisplay_clear_region (Lisp_Object locale, face_index findex, int x, int y,
       fcolor = (w ?
                WINDOW_FACE_CACHEL_BACKGROUND (w, findex) :
                FACE_BACKGROUND (Vdefault_face, locale));
-      
+
     }
-  
+
   if (UNBOUNDP (background_pixmap))
     background_pixmap = Qnil;
-  
-  DEVMETH (d, clear_region, 
+
+  DEVMETH (d, clear_region,
           (locale, d, f, findex, x, y, width, height, fcolor, bcolor, background_pixmap));
 }
 
@@ -1577,8 +1577,8 @@ redisplay_clear_region (Lisp_Object locale, face_index findex, int x, int y,
  around with by altering these. glyphsrc should be normalized.
  ****************************************************************************/
 static void
-redisplay_clear_clipped_region (Lisp_Object window, face_index findex, 
-       struct display_box* dest, struct display_glyph_area* glyphsrc, 
+redisplay_clear_clipped_region (Lisp_Object window, face_index findex,
+       struct display_box* dest, struct display_glyph_area* glyphsrc,
        int fullheight_p, Lisp_Object ignored_subwindow)
 {
   /* assume dest->xpos >= 0 */
@@ -1602,8 +1602,8 @@ redisplay_clear_clipped_region (Lisp_Object window, face_index findex,
     }
   else
     {
-      int yoffset = (glyphsrc->yoffset > 0 ? glyphsrc->yoffset : 0); 
-      
+      int yoffset = (glyphsrc->yoffset > 0 ? glyphsrc->yoffset : 0);
+
       /* We need to make sure that subwindows are unmapped from the
          whole area. */
       redisplay_unmap_subwindows_except_us (f, clear_x, dest->ypos,
@@ -1614,14 +1614,14 @@ redisplay_clear_clipped_region (Lisp_Object window, face_index findex,
        {
          redisplay_clear_region (window, findex, clear_x, dest->ypos,
                                  glyphsrc->width, yoffset);
-         
+
        }
       /* Then the bottom box */
       if (yoffset + glyphsrc->height < dest->height)
        {
          redisplay_clear_region (window, findex, clear_x,
                                  dest->ypos + yoffset + glyphsrc->height,
-                                 glyphsrc->width, 
+                                 glyphsrc->width,
                                  dest->height - (yoffset + glyphsrc->height));
 
        }
@@ -1635,7 +1635,7 @@ redisplay_clear_clipped_region (Lisp_Object window, face_index findex,
  Calculate the visible box for displaying src in dest.
  ****************************************************************************/
 int
-redisplay_normalize_glyph_area (struct display_box* dest, 
+redisplay_normalize_glyph_area (struct display_box* dest,
                                struct display_glyph_area* glyphsrc)
 {
   if (dest->xpos + glyphsrc->xoffset > dest->xpos + dest->width
@@ -1678,7 +1678,7 @@ redisplay_normalize_glyph_area (struct display_box* dest,
 }
 
 static void
-redisplay_normalize_display_box (struct display_box* dest, 
+redisplay_normalize_display_box (struct display_box* dest,
                                 struct display_glyph_area* glyphsrc)
 {
   /* Adjust the destination area. At the end of this the destination
@@ -1735,7 +1735,7 @@ redisplay_display_boxes_in_window_p (struct window* w,
       || db->ypos + db->height > bottom)
     /* We are not displaying in a window at all */
     return 0;
-  
+
   if (db->xpos + dga->xoffset >= left
       &&
       db->ypos + dga->yoffset >= top
@@ -1757,7 +1757,7 @@ redisplay_display_boxes_in_window_p (struct window* w,
 int
 redisplay_calculate_display_boxes (struct display_line *dl, int xpos,
                                   int xoffset, int start_pixpos, int width,
-                                  struct display_box* dest, 
+                                  struct display_box* dest,
                                   struct display_glyph_area* src)
 {
   dest->xpos = xpos;
@@ -1838,38 +1838,38 @@ redisplay_clear_to_window_end (struct window *w, int ypos1, int ypos2)
   else
     {
       int height = ypos2 - ypos1;
-      
+
       if (height)
        {
          Lisp_Object window;
          int bflag = 0 ; /* (window_needs_vertical_divider (w) ? 0 : 1);*/
          layout_bounds bounds;
-         
+
          bounds = calculate_display_line_boundaries (w, bflag);
          XSETWINDOW (window, w);
 
          if (window_is_leftmost (w))
            redisplay_clear_region (window, DEFAULT_INDEX, FRAME_LEFT_BORDER_START (f),
                                    ypos1, FRAME_BORDER_WIDTH (f), height);
-         
+
          if (bounds.left_in - bounds.left_out > 0)
            redisplay_clear_region (window,
                                    get_builtin_face_cache_index (w, Vleft_margin_face),
                                    bounds.left_out, ypos1,
                                    bounds.left_in - bounds.left_out, height);
-         
+
          if (bounds.right_in - bounds.left_in > 0)
-           redisplay_clear_region (window, 
+           redisplay_clear_region (window,
                                    DEFAULT_INDEX,
                                    bounds.left_in, ypos1,
                                    bounds.right_in - bounds.left_in, height);
-         
+
          if (bounds.right_out - bounds.right_in > 0)
            redisplay_clear_region (window,
                                    get_builtin_face_cache_index (w, Vright_margin_face),
                                    bounds.right_in, ypos1,
                                    bounds.right_out - bounds.right_in, height);
-         
+
          if (window_is_rightmost (w))
            redisplay_clear_region (window, DEFAULT_INDEX, FRAME_RIGHT_BORDER_START (f),
                                    ypos1, FRAME_BORDER_WIDTH (f), height);
@@ -2256,7 +2256,7 @@ bevel_modeline (struct window *w, struct display_line *dl)
       style = EDGE_BEVEL_OUT;
     }
 
-  MAYBE_DEVMETH (d, bevel_area, 
+  MAYBE_DEVMETH (d, bevel_area,
                 (w, MODELINE_INDEX, x, y, width, height, shadow_thickness,
                  EDGE_ALL, style));
 }
index fa3e3b3..7e29d59 100644 (file)
@@ -156,7 +156,7 @@ typedef struct position_redisplay_data_type
   Bytind bi_start_col_enabled;
   int start_col_xoffset;       /* Number of pixels that still need to
                           be skipped.  This is used for
-                          horizontal scrolling of glyphs, where we want 
+                          horizontal scrolling of glyphs, where we want
                           to be able to scroll over part of the glyph. */
 
   int hscroll_glyph_width_adjust;  /* how much the width of the hscroll
@@ -1815,7 +1815,7 @@ create_text_block (struct window *w, struct display_line *dl,
      after a ^M is invisible. */
   int selective = (INTP (b->selective_display)
                   ? XINT (b->selective_display)
-                  : ((!NILP (b->selective_display) ? -1 : 0)));
+                  : (!NILP (b->selective_display) ? -1 : 0));
 
   /* The variable ctl-arrow allows the user to specify what characters
      can actually be displayed and which octal should be used for.
@@ -2288,7 +2288,7 @@ create_text_block (struct window *w, struct display_line *dl,
              int prop_width = 0;
 
              if (data.start_col > 1)
-               tab_start_pixpos -= (space_width (w) * (data.start_col - 1)) 
+               tab_start_pixpos -= (space_width (w) * (data.start_col - 1))
                  + data.start_col_xoffset;
 
              next_tab_start =
@@ -4341,9 +4341,9 @@ create_string_text_block (struct window *w, Lisp_Object disp_string,
     }
   else
     {
-      dl->left_margin_findex = 
+      dl->left_margin_findex =
        get_builtin_face_cache_index (w, Vleft_margin_face);
-      dl->right_margin_findex = 
+      dl->right_margin_findex =
        get_builtin_face_cache_index (w, Vright_margin_face);
     }
 
@@ -4380,7 +4380,7 @@ create_string_text_block (struct window *w, Lisp_Object disp_string,
 
   data.start_col = 0;
   /* I don't think we want this, string areas should not scroll with
-     the window 
+     the window
   data.start_col = w->hscroll;
   data.bi_start_col_enabled = (w->hscroll ? bi_start_pos : 0);
   */
@@ -4849,7 +4849,7 @@ done:
   else
     dl->end_bufpos = buffer_or_string_bytind_to_bufpos (disp_string, data.bi_bufpos) - 1;
   if (truncate_win)
-    data.dl->num_chars = 
+    data.dl->num_chars =
       string_column_at_point (s, dl->end_bufpos, b ? XINT (b->tab_width) : 8);
   else
     /* This doesn't correctly take into account tabs and control
@@ -4889,8 +4889,8 @@ done:
    representation of the buffer contents starting from the given
    position when displayed in the given window.  The display line ends
    when the contents of the line reach the right boundary of the given
-   window. 
-   
+   window.
+
    This is very similar to generate_display_line but with the same
    limitations as create_string_text_block. I have taken the liberty
    of fixing the bytind stuff though.*/
@@ -4905,7 +4905,7 @@ generate_string_display_line (struct window *w, Lisp_Object disp_string,
   Bufpos ret_bufpos;
 
   /* you must set bounds before calling this. */
-  
+
   /* Reset what this line is using. */
   if (dl->display_blocks)
     Dynarr_reset (dl->display_blocks);
@@ -5151,7 +5151,7 @@ regenerate_window (struct window *w, Bufpos start_pos, Bufpos point, int type)
 
       /* See if we've been asked to start midway through a line, for
          partial display line scrolling. */
-      if (yclip)               
+      if (yclip)
        {
          dlp->top_clip = yclip;
          yclip = 0;
@@ -6311,6 +6311,7 @@ redisplay_frame (struct frame *f, int preemption_check)
      process.*/
   if (!Dynarr_length (f->subwindow_cachels)
       || f->subwindows_changed
+      || f->faces_changed
       || f->frame_changed)
     {
       reset_subwindow_cachels (f);
@@ -7136,7 +7137,7 @@ update_internal_cache_list (struct window *w, int type)
       else
        {
          struct line_start_cache lsc;
-         
+
          lsc.start = dl->bufpos;
          lsc.end = dl->end_bufpos;
          lsc.height = dl->ascent + dl->descent;
@@ -7657,7 +7658,7 @@ start_with_line_at_pixpos (struct window *w, Bufpos point, int pixpos)
          assert (cur_elt >= -1);
          /* This used to be cur_elt>=0 under the assumption that if
             point is in the top line and not at BUF_BEGV, then
-            setting the window_start to a newline before the start of 
+            setting the window_start to a newline before the start of
             the first line will always cause scrolling.
 
             However in my (jv) opinion this is wrong.  That new line
@@ -7667,7 +7668,7 @@ start_with_line_at_pixpos (struct window *w, Bufpos point, int pixpos)
             on that assert.  So we have no option but to continue the
             search if we found point at the top of the line_start_cache
             again. */
-         cur_pos = Dynarr_atp (w->line_start_cache,0)->start;       
+         cur_pos = Dynarr_atp (w->line_start_cache,0)->start;
        }
       prev_pos = cur_pos;
     }
index d7618d1..e44eb13 100644 (file)
@@ -352,7 +352,7 @@ char *alloca ();
 
 #define BYTEWIDTH 8 /* In bits.  */
 
-#define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
+#define STREQ(s1, s2) (strcmp (s1, s2) == 0)
 
 #undef MAX
 #undef MIN
index f602178..ebbcf69 100644 (file)
@@ -125,8 +125,7 @@ typedef int pid_t;
 /* XEmacs file I/O for DOS text files requires FILE_CODING */
 #define FILE_CODING
 
-extern Lisp_Object Vdirectory_sep_char;
-#define DIRECTORY_SEP ((char)XCHARVAL(Vdirectory_sep_char))
+#define DIRECTORY_SEP ((char)XCHAR(Vdirectory_sep_char))
 
 /* Define this to be the separator between devices and paths */
 #define DEVICE_SEP ':'
index b344d5f..d81e55e 100644 (file)
@@ -1648,10 +1648,16 @@ build_up_processed_list (Lisp_Object specifier, Lisp_Object locale,
   LIST_LOOP (rest, inst_list)
     {
       Lisp_Object tag_set = XCAR (XCAR (rest));
-      Lisp_Object instantiator = Fcopy_tree (XCDR (XCAR (rest)), Qt);
       Lisp_Object sub_inst_list = Qnil;
+      Lisp_Object instantiator;
       struct gcpro ngcpro1, ngcpro2;
 
+      if (HAS_SPECMETH_P (sp, copy_instantiator))
+       instantiator = SPECMETH (sp, copy_instantiator,
+                                (XCDR (XCAR (rest))));
+      else
+       instantiator = Fcopy_tree (XCDR (XCAR (rest)), Qt);
+
       NGCPRO2 (instantiator, sub_inst_list);
       /* call the will-add method; it may GC */
       sub_inst_list = HAS_SPECMETH_P (sp, going_to_add) ?
@@ -2539,7 +2545,7 @@ specifier_instance (Lisp_Object specifier, Lisp_Object matchspec,
       goto do_fallback;
     }
 
-retry:
+ retry:
   /* First see if we can generate one from the window specifiers. */
   if (!NILP (window))
     CHECK_INSTANCE_ENTRY (window, matchspec, LOCALE_WINDOW);
@@ -2558,7 +2564,7 @@ retry:
   /* Last and least try the global specifiers. */
   CHECK_INSTANCE_ENTRY (Qglobal, matchspec, LOCALE_GLOBAL);
 
-do_fallback:
+ do_fallback:
   /* We're out of specifiers and we still haven't generated an
      instance.  At least try the fallback ...  If this fails,
      then we just return Qunbound. */
index 506319e..e447d5c 100644 (file)
@@ -124,6 +124,13 @@ struct specifier_methods
      valid. */
   void (*validate_method) (Lisp_Object instantiator);
 
+
+  /* Copy method: Given an instantiator, copy the bits that we need to
+     for this specifier type.
+
+     If this function is not present, then Fcopy_tree is used. */
+  Lisp_Object (*copy_instantiator_method) (Lisp_Object instantiator);
+
   /* Validate-matchspec method: Given a matchspec, verify that it's
      valid for this specifier type.  If not, signal an error.
 
index 2e0dde9..d4cd963 100644 (file)
@@ -385,12 +385,12 @@ scan_words (struct buffer *buf, Bufpos from, int count)
            if (code != Sword
 #ifdef MULE
                || WORD_BOUNDARY_P (ch0, ch1)
-#endif         
+#endif
                )
              break;
 #ifdef MULE
          ch0 = ch1;
-#endif   
+#endif
          from++;
        }
       count--;
@@ -1027,7 +1027,7 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth,
          if (SYNTAX_PREFIX_UNSAFE (mirrortab, c))
            continue;
 
-         switch (((quoted) ? Sword : code))
+         switch (quoted ? Sword : code)
            {
            case Sword:
            case Ssymbol:
@@ -1681,11 +1681,12 @@ vars_of_syntax (void)
   DEFVAR_BOOL ("parse-sexp-ignore-comments", &parse_sexp_ignore_comments /*
 Non-nil means `forward-sexp', etc., should treat comments as whitespace.
 */ );
+  parse_sexp_ignore_comments = 0;
 
-  words_include_escapes = 0;
   DEFVAR_BOOL ("words-include-escapes", &words_include_escapes /*
 Non-nil means `forward-word', etc., should treat escape chars part of words.
 */ );
+  words_include_escapes = 0;
 
   no_quit_in_re_search = 0;
 }
index 6440767..7e3376f 100644 (file)
@@ -34,7 +34,7 @@ Boston, MA 02111-1307, USA.  */
 #define FRAME_CURRENT_TOOLBAR_SIZE(frame, pos) \
   ((frame)->current_toolbar_size[pos])
 #define DEVICE_SUPPORTS_TOOLBARS_P(d)          \
-  (HAS_DEVMETH_P ((d), output_frame_toolbars))
+  HAS_DEVMETH_P (d, output_frame_toolbars)
 
 struct toolbar_button
 {
index 7a3a9e6..2b80241 100644 (file)
@@ -101,7 +101,7 @@ ARGS are passed as extra arguments to the function.
   newargs[0] = Fwidget_get (args[0], args[1]);
   newargs[1] = args[0];
   newargs[2] = Flist (nargs - 2, args + 2);
-  GCPRO1 ((newargs[2]));
+  GCPRO1 (newargs[2]);
   RETURN_UNGCPRO (Fapply (3, newargs));
 }
 
index cdf35a0..80934b9 100644 (file)
@@ -4731,7 +4731,6 @@ struct window_config
 #define XWINDOW_CONFIGURATION(x) XRECORD (x, window_configuration, struct window_config)
 #define XSETWINDOW_CONFIGURATION(x, p) XSETRECORD (x, p, window_configuration)
 #define WINDOW_CONFIGURATIONP(x) RECORDP (x, window_configuration)
-#define GC_WINDOW_CONFIGURATIONP(x) GC_RECORDP (x, window_configuration)
 #define CHECK_WINDOW_CONFIGURATION(x) CHECK_RECORD (x, window_configuration)
 
 static Lisp_Object
index d238bff..f14354d 100644 (file)
@@ -1,3 +1,22 @@
+1999-12-24  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.25 is released.
+
+1999-12-21  Martin Buchholz  <martin@xemacs.org>
+
+       * automated/byte-compiler-tests.el: Add Jan's tests for equal
+       effect of bytecode and interpreted code.
+
+       * automated/lisp-tests.el: Add tests for near-text functions.
+
+1999-12-19  Martin Buchholz  <martin@xemacs.org>
+
+       * automated/mule-tests.el: Add tests for fillarray, aset.
+
+1999-12-17  Martin Buchholz  <martin@xemacs.org>
+
+       * automated/lisp-tests.el:  Add tests for mapcar1() crashes.
+
 1999-12-14  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.24 is released.
index 3c11ec2..fee7225 100644 (file)
@@ -174,11 +174,12 @@ oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX
 (defconst bt-nonbase64-chars (set-difference (mapcar #'identity bt-allchars)
                                             bt-base64-chars))
 
-(when nil
-  ;; This code crashes XEmacs!  This requires further investigation.
-  ;; I'm running Linux, and for me, XEmacs crashes in
-  ;; Fmapconcat()->mapcar1(), after a GC that thrashes the stack.
-  ;; Raymond Toy reports a similar crash under Solaris.
+(when t
+  ;; This code crashes some versions of XEmacs 21.2!  This requires
+  ;; further investigation.  I (hniksic) am running Linux, and for me,
+  ;; XEmacs used to crash in Fmapconcat()->mapcar1(), after a GC that
+  ;; thrashes the stack.  Raymond Toy reported a similar crash under
+  ;; Solaris.  I can no longer repeat the bug, so I cannot fix it now.
   (loop for (raw encoded) in bt-test-strings do
     (unless (equal raw "")
       (let* ((middlepos (/ (1+ (length encoded)) 2))
index 87612ae..21c110f 100644 (file)
  error "`let' bindings can have only one value-form"
  (eval '(let* ((x 1 2)) 3)))
 
+(defmacro before-and-after-compile-equal (&rest form)
+  `(Assert (equal (funcall (quote (lambda () ,@form)))
+                (funcall (byte-compile (quote (lambda () ,@form)))))))
+
+(defvar simplyamarker (point-min-marker))
+
+;; The byte optimizer must be careful with +/- with a single argument.
+
+(before-and-after-compile-equal (+))
+(before-and-after-compile-equal (+ 2 2))
+(before-and-after-compile-equal (+ 2 1))
+(before-and-after-compile-equal (+ 1 2))
+;; (+ 1) is OK. but (+1) signals an error.
+(before-and-after-compile-equal (+ 1))
+(before-and-after-compile-equal (+ 3))
+(before-and-after-compile-equal (+ simplyamarker 1))
+;; The optimization (+ m) --> m is invalid when m is a marker.
+;; Currently the following test fails - controversial.
+;; (before-and-after-compile-equal (+ simplyamarker))
+;; Same tests for minus.
+(before-and-after-compile-equal (- 2 2))
+(before-and-after-compile-equal (- 2 1))
+(before-and-after-compile-equal (- 1 2))
+(before-and-after-compile-equal (- 1))
+(before-and-after-compile-equal (- 3))
+(before-and-after-compile-equal (- simplyamarker 1))
+(before-and-after-compile-equal (- simplyamarker))
index 2ace595..1fba118 100644 (file)
 (Assert (equal (mapconcat #'identity '("1" "2" "3") "|") "1|2|3"))
 (Assert (equal (mapconcat #'identity ["1" "2" "3"]  "|") "1|2|3"))
 
+;; The following 2 functions used to crash XEmacs via mapcar1().
+;; We don't test the actual values of the mapcar, since they're undefined.
+(Assert 
+ (let ((x (list (cons 1 1) (cons 2 2) (cons 3 3))))
+   (mapcar
+    (lambda (y)
+      "Devious evil mapping function"
+      (when (eq (car y) 2) ; go out onto a limb
+       (setcdr x nil)     ; cut it off behind us
+       (garbage-collect)) ; are we riding a magic broomstick?
+      (car y))             ; sorry, hard landing
+    x)))
+
+(Assert 
+ (let ((x (list (cons 1 1) (cons 2 2) (cons 3 3))))
+   (mapcar
+    (lambda (y)
+      "Devious evil mapping function"
+      (when (eq (car y) 1)
+       (setcdr (cdr x) 42)) ; drop a brick wall onto the freeway
+      (car y))
+    x)))
+
 ;;-----------------------------------------------------
 ;; Test vector functions
 ;;-----------------------------------------------------
 (Assert (equal (split-string "foo,,bar,," ",") '("foo" "" "bar" "" "")))
 (Assert (equal (split-string "foo,,bar" ",+") '("foo" "bar")))
 (Assert (equal (split-string ",foo,,bar," ",+") '("" "foo" "bar" "")))
+
+;;-----------------------------------------------------
+;; Test near-text buffer functions.
+;;-----------------------------------------------------
+(with-temp-buffer
+  (erase-buffer)
+  (Assert (eq (char-before) nil))
+  (Assert (eq (char-before (point)) nil))
+  (Assert (eq (char-before (point-marker)) nil))
+  (Assert (eq (char-before (point) (current-buffer)) nil))
+  (Assert (eq (char-before (point-marker) (current-buffer)) nil))
+  (Assert (eq (char-after) nil))
+  (Assert (eq (char-after (point)) nil))
+  (Assert (eq (char-after (point-marker)) nil))
+  (Assert (eq (char-after (point) (current-buffer)) nil))
+  (Assert (eq (char-after (point-marker) (current-buffer)) nil))
+  (Assert (eq (preceding-char) 0))
+  (Assert (eq (preceding-char (current-buffer)) 0))
+  (Assert (eq (following-char) 0))
+  (Assert (eq (following-char (current-buffer)) 0))
+  (insert "foobar")
+  (Assert (eq (char-before) ?r))
+  (Assert (eq (char-after) nil))
+  (Assert (eq (preceding-char) ?r))
+  (Assert (eq (following-char) 0))
+  (goto-char (point-min))
+  (Assert (eq (char-before) nil))
+  (Assert (eq (char-after) ?f))
+  (Assert (eq (preceding-char) 0))
+  (Assert (eq (following-char) ?f))
+  )
index 729d134..dea33ef 100644 (file)
@@ -29,6 +29,9 @@
 ;; Test some Mule functionality (most of these remain to be written) .
 ;; See test-harness.el for instructions on how to run these tests.
 
+;; This file will be (read)ed by a non-mule XEmacs, so don't use
+;; literal non-Latin1 characters.  Use (make-char) instead.
+
 ;;-----------------------------------------------------------------
 ;; Test whether all legal chars may be safely inserted to a buffer.
 ;;-----------------------------------------------------------------
@@ -73,3 +76,31 @@ the Assert macro checks for correctness."
 ;; time-consuming tests like this one run twice, once interpreted and
 ;; once compiled, for no good reason.
 (test-chars t)
+
+;;-----------------------------------------------------------------
+;; Test string modification functions that modify the length of a char.
+;;-----------------------------------------------------------------
+
+(when (featurep 'mule)
+  ;; Test fillarray
+  (macrolet
+      ((fillarray-test
+       (charset1 charset2)
+       (let ((char1 (make-char charset1 69))
+             (char2 (make-char charset2 69)))
+         `(let ((string (make-string 1000 ,char1)))
+            (fillarray string ,char2)
+            (Assert (eq (aref string 0) ,char2))
+            (Assert (eq (aref string (1- (length string))) ,char2))
+            (Assert (eq (length string) 1000))))))
+    (fillarray-test ascii latin-iso8859-1)
+    (fillarray-test ascii latin-iso8859-2)
+    (fillarray-test latin-iso8859-1 ascii)
+    (fillarray-test latin-iso8859-2 ascii))
+
+  ;; Test aset
+  (let ((string (string (make-char 'ascii 69) (make-char 'latin-iso8859-2 69))))
+    (aset string 0 (make-char 'latin-iso8859-2 42))
+    (Assert (eq (aref string 1) (make-char 'latin-iso8859-2 69))))
+
+  )
index 365322c..67533cc 100644 (file)
 (set-glyph-face layout 'gui-element)
 (set-extent-begin-glyph
  (make-extent (point) (point)) layout)
-                              
+
+(setq test-toggle-widget nil)
+       
+(defun test-toggle (widget)
+  (set-extent-begin-glyph 
+   (make-extent (point) (point))
+   (make-glyph (vector 'button
+                      :descriptor "ok"
+                      :style 'toggle
+                      :selected `(funcall test-toggle-value
+                                          ,widget)
+                      :callback `(funcall test-toggle-action
+                                          ,widget)))))
+
+(defun test-toggle-action (widget &optional event)
+  (if widget
+      (message "Widget is t")
+    (message "Widget is nil")))
+
+(defun test-toggle-value (widget)
+  (setq widget (not widget))
+  (not widget))
index d9dac41..81f4da1 100644 (file)
@@ -2,8 +2,8 @@
 emacs_is_beta=t
 emacs_major_version=21
 emacs_minor_version=2
-emacs_beta_version=24
-xemacs_codename="Hecate"
+emacs_beta_version=25
+xemacs_codename="Hephaestus"
 infodock_major_version=4
 infodock_minor_version=0
 infodock_build_version=8