XEmacs 21.2.29 "Hestia".
authortomo <tomo>
Tue, 2 May 2000 12:33:58 +0000 (12:33 +0000)
committertomo <tomo>
Tue, 2 May 2000 12:33:58 +0000 (12:33 +0000)
222 files changed:
.cvsignore
CHANGES-beta
ChangeLog
aclocal.m4
configure
configure.in
etc/OONEWS
info/cl.info
info/emodules.info
info/internals.info
info/internals.info-1
info/internals.info-2
info/lispref.info
info/lispref.info-5
info/lispref.info-7
info/lispref.info-8
lib-src/ChangeLog
lib-src/cvtmail.c
lib-src/ellcc.c
lib-src/etags.c
lib-src/fakemail.c
lib-src/gnuclient.c
lib-src/gnuserv.h
lib-src/gnuslib.c
lib-src/make-docfile.c
lib-src/sorted-doc.c
lisp/ChangeLog
lisp/cl-extra.el
lisp/cl-macs.el
lisp/etags.el
lisp/frame.el
lisp/gutter-items.el
lisp/toolbar.el
lwlib/ChangeLog
lwlib/config.h.in
lwlib/lwlib-Xaw.c
lwlib/lwlib-Xm.c
lwlib/lwlib-internal.h
lwlib/lwlib.c
lwlib/lwlib.h
lwlib/xlwmenu.c
man/ChangeLog
man/cl.texi
man/emodules.texi
man/internals/internals.texi
man/lispref/strings.texi
man/lispref/symbols.texi
nt/ChangeLog
nt/config.h
nt/xemacs.mak
src/.cvsignore
src/ChangeLog
src/README
src/alloc.c
src/balloon-x.c
src/balloon_help.c
src/balloon_help.h
src/broken-sun.h
src/buffer.c
src/buffer.h
src/bytecode.c
src/callint.c
src/callproc.c
src/cm.c
src/cm.h
src/config.h.in
src/console-msw.h
src/console-stream.c
src/console-tty.h
src/console-x.c
src/console-x.h
src/console.c
src/console.h
src/data.c
src/device-x.c
src/device.c
src/device.h
src/dialog-x.c
src/dired.c
src/doc.c
src/doprnt.c
src/dynarr.c
src/editfns.c
src/elhash.c
src/emacs.c
src/emodules.c
src/emodules.h
src/eval.c
src/event-Xt.c
src/event-msw.c
src/event-stream.c
src/events.c
src/extents.c
src/extw-Xt.c
src/faces.c
src/file-coding.c
src/fileio.c
src/floatfns.c
src/fns.c
src/frame-msw.c
src/frame-x.c
src/frame.c
src/frame.h
src/free-hook.c
src/general.c
src/glyphs-eimage.c
src/glyphs-msw.c
src/glyphs-widget.c
src/glyphs-x.c
src/glyphs-x.h
src/glyphs.c
src/glyphs.h
src/gmalloc.c
src/gui-msw.c
src/gui-x.c
src/gui-x.h
src/gui.c
src/gui.h
src/hash.c
src/hash.h
src/input-method-xlib.c
src/insdel.c
src/insdel.h
src/intl.c
src/keymap.c
src/line-number.c
src/line-number.h
src/linuxplay.c
src/lisp-disunion.h
src/lisp-union.h
src/lisp.h
src/lread.c
src/lrecord.h
src/lstream.c
src/lstream.h
src/md5.c
src/menubar.c
src/menubar.h
src/minibuf.c
src/mule-ccl.c
src/mule-ccl.h
src/mule-charset.c
src/mule-charset.h
src/nas.c
src/ndir.h
src/nt.c
src/ntheap.h
src/ntplay.c
src/ntproc.c
src/objects-msw.c
src/objects-tty.c
src/objects-x.c
src/objects.c
src/objects.h
src/opaque.c
src/opaque.h
src/print.c
src/process-nt.c
src/process-unix.c
src/process.c
src/process.h
src/procimpl.h
src/profile.c
src/ralloc.c
src/redisplay-msw.c
src/redisplay-output.c
src/redisplay-tty.c
src/redisplay-x.c
src/redisplay.c
src/redisplay.h
src/regex.c
src/regex.h
src/s/aix4.h
src/s/mingw32.h
src/s/sol2.h
src/s/windowsnt.h
src/search.c
src/select-x.c
src/sgiplay.c
src/sound.c
src/specifier.c
src/specifier.h
src/strcat.c
src/strcmp.c
src/strcpy.c
src/strftime.c
src/sunOS-fix.c
src/sunplay.c
src/symbols.c
src/symeval.h
src/syntax.c
src/syntax.h
src/sysdep.c
src/sysdep.h
src/sysdir.h
src/sysdll.c
src/sysdll.h
src/sysfile.h
src/syssignal.h
src/systime.h
src/termcap.c
src/terminfo.c
src/tooltalk.c
src/tparam.c
src/unexcw.c
src/unexec.c
src/unexelf.c
src/unexfreebsd.c
src/unexhp9k3.c
src/unexnt.c
src/unexsunos4.c
src/vm-limit.c
src/window.c
src/xgccache.c
src/xintrinsic.h
src/xintrinsicp.h
src/xmu.c
src/xmu.h
tests/ChangeLog
tests/automated/base64-tests.el
tests/automated/lisp-tests.el
version.sh

index 4c21e36..7a7fc50 100644 (file)
@@ -10,3 +10,4 @@ so_locations
 xemacs-packages
 mule-packages
 site-packages
+gmon.out
index 18edb09..14854dc 100644 (file)
@@ -1,3 +1,23 @@
+to 21.2.29 "Hestia"
+-- Fix compile errors on pre-X11R6 systems, introduced in 21.2.28.
+-- Fix autodetection of Berkeley DB on Linux Glibc 2 systems.  
+   (but more work needed)
+-- Allow non-symbols (anything compared with `eq') in object plists.
+-- Cleanup of property frobbing code.
+-- Various AIX 4 fixes, including port of PDUMP.
+-- Unconditionally define _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED.
+-- MS-Windows redisplay and font fixes from Jonathan Harris.
+-- various fixes from Craig Lanning, Daiki Ueno.
+-- Asynchronous widget updates from Andy Piper.
+-- More widget fixes from Andy Piper.
+-- Don't use rel_alloc on glibc systems, including Linux
+-- Upgrade etags.c to version 13.44, Francesco Potorti
+-- etags does a better job of finding the exact match first, Kyle Jones
+-- Portable dumper now described in Internals manual, Olivier and Martin
+-- Object Plist documentation in lispref updated, Martin Buchholz
+-- Just use standard `const' everywhere, instead of CONST
+-- More pdump changes, Olivier Galibert
+
 to 21.2.28 "Hermes"
 -- Add configure support for NetWinders, Sean MacLennan
 -- Make the "Load .emacs" menu item work again, Kirill Katsnelson
@@ -32,6 +52,8 @@ to 21.2.28 "Hermes"
 
 to 21.2.27 "Hera"
 -- Dynamic layout for widgets from Andy Piper
+-- Vertical tab widgets for MS-Windows from Andy Piper
+-- pdump fixes for MS-Windows from Big K
 -- config.sub, config.guess major upgrade, Marcus Thiessel
 -- gdbinit renamed to .gdbinit
 -- dbxrc renamed to .dbxrc
index 1bb1ff2..b79bbea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,48 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-16  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: Don't use rel_alloc if malloc() calls mmap().
+       Discover this by looking for M_MMAP_THRESHOLD.
+
+       * configure.in: Don't define POSIX_C_SOURCE on Solaris, due to
+       bugs in (at least) Solaris 2.5 headers.
+
+2000-01-29  Craig Lanning  <CraigL@DyCon.com>
+
+       * configure.in: Fix detection of XPM on systems without X11.
+
+2000-02-11  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: 
+       * src/config.h.in:
+       Define _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED,
+       but only on tested Operating systems - Linux && SunOS >= 5.5.
+
+2000-02-09  Valdis Kletnieks  <Valdis.Kletnieks@vt.edu>
+
+       * aclocal.m4: Support dlls on aix[34].
+
+2000-02-09  Martin Buchholz  <martin@xemacs.org>
+
+       * .cvsignore: Ignore gmon.out
+
+2000-02-08  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: Sync Berkeley db autodetection with src/database.c
+
+2000-02-07  Martin Buchholz  <martin@xemacs.org>
+
+       * configure.in: check for XConvertCase.
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
 
 2000-01-27  URA Hiroshi <ura@hiru.aoba.yokohama.jp>
+
        * configure.in: added getaddrinfo and getnameinfo to AC_FUNC.
 
 2000-01-26  Martin Buchholz  <martin@xemacs.org>
index e1a8e77..721d768 100644 (file)
@@ -92,7 +92,7 @@ if test "$XEGCC" = yes; then
     # PIC is the default for these OSes.
     ;;
 
-  os2*)
+  aix3* | aix4* | os2*)
     # We can build DLLs from non-PIC.
     ;;
   amigaos*)
index 09b367e..e526103 100755 (executable)
--- a/configure
+++ b/configure
@@ -358,7 +358,6 @@ while test $# != 0; do
        external_widget | \
        verbose         | \
        extra_verbose   | \
-       const_is_losing | \
        usage_tracking  | \
        use_union_type  | \
        pdump           | \
@@ -740,6 +739,7 @@ echo "  Use \`$progname --help' to show usage.") >&2 && exit 1 ;;
                "use_minimal_tagbits" | \
        "use_indexed_lrecord_implementation" | \
        "run_in_place"  | \
+       "const_is_losing" | \
        "with_gnu_make" )
          echo "configure: warning: Obsolete option \`--$optname' ignored." 1>&2
        ;;
@@ -2296,10 +2296,12 @@ fi
 echo "$ac_t""$CPP" 1>&6
 
 
+
+
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:2301: checking for AIX" >&5
+echo "configure:2303: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2303 "configure"
+#line 2305 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -2323,12 +2325,11 @@ else
 fi
 rm -f conftest*
 
-
-
 echo $ac_n "checking for GNU libc""... $ac_c" 1>&6
-echo "configure:2330: checking for GNU libc" >&5
+echo "configure:2331: checking for GNU libc" >&5
 cat > conftest.$ac_ext <<EOF
-#line 2332 "configure"
+#line 2333 "configure"
 #include "confdefs.h"
 #include <features.h>
 int main() {
@@ -2340,7 +2341,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   have_glibc=yes
 else
@@ -2360,9 +2361,64 @@ EOF
 }
 
 
+case "$opsys" in
+  sol2) 
+   { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining __EXTENSIONS__
+EOF
+cat >> confdefs.h <<\EOF
+#define __EXTENSIONS__ 1
+EOF
+}
+
+      if test "$os_release" -ge 55; then
+     { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining _XOPEN_SOURCE = 500
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE 500
+EOF
+}
+
+     { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining _XOPEN_SOURCE_EXTENDED
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE_EXTENDED 1
+EOF
+}
+
+   fi ;;
+  linux)
+    { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining _POSIX_C_SOURCE = 199506L
+EOF
+cat >> confdefs.h <<\EOF
+#define _POSIX_C_SOURCE 199506L
+EOF
+}
+
+    { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining _XOPEN_SOURCE = 500
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE 500
+EOF
+}
+
+    { test "$extra_verbose" = "yes" && cat << \EOF
+    Defining _XOPEN_SOURCE_EXTENDED
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE_EXTENDED 1
+EOF
+}
+
+    ;;
+esac
 
 cat > conftest.$ac_ext <<EOF
-#line 2366 "configure"
+#line 2422 "configure"
 #include "confdefs.h"
 int main () {
 #if defined __SUNPRO_C
@@ -2374,7 +2430,7 @@ return 0;
 #endif
 }
 EOF
-if { (eval echo configure:2378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:2434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -2660,7 +2716,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:2664: checking for dynodump" >&5
+echo "configure:2720: checking for dynodump" >&5
 if test "$unexec" != "unexsol2.o"; then
   echo "$ac_t""no" 1>&6
 else
@@ -2698,12 +2754,12 @@ if test "$unexec" = "unexaix.o"; then
   done
   
 echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6
-echo "configure:2702: checking for terminateAndUnload in -lC" >&5
+echo "configure:2758: 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 2707 "configure"
+#line 2763 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2714,7 +2770,7 @@ int main() {
 terminateAndUnload()
 ; return 0; }
 EOF
-if { (eval echo configure:2718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2822,7 +2878,7 @@ fi
 
 if test "$add_runtime_path" = "yes"; then
       echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6
-echo "configure:2826: checking "for runtime libraries flag"" >&5
+echo "configure:2882: checking "for runtime libraries flag"" >&5
   case "$opsys" in
     sol2 ) dash_r="-R" ;;
     decosf* | linux* | irix*) dash_r="-rpath " ;;
@@ -2844,14 +2900,14 @@ if test "$GCC" = "yes"; then
   done
 fi
         cat > conftest.$ac_ext <<EOF
-#line 2848 "configure"
+#line 2904 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   dash_r="$try_dash_r"
 else
@@ -2953,10 +3009,10 @@ else
 fi
 after_morecore_hook_exists=yes
 echo $ac_n "checking for malloc_get_state""... $ac_c" 1>&6
-echo "configure:2957: checking for malloc_get_state" >&5
+echo "configure:3013: checking for malloc_get_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2960 "configure"
+#line 3016 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_get_state(); below.  */
@@ -2979,7 +3035,7 @@ malloc_get_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:2983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3039: \"$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
@@ -2999,10 +3055,10 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6
-echo "configure:3003: checking for malloc_set_state" >&5
+echo "configure:3059: checking for malloc_set_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3006 "configure"
+#line 3062 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_set_state(); below.  */
@@ -3025,7 +3081,7 @@ malloc_set_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3085: \"$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
@@ -3045,16 +3101,16 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6
-echo "configure:3049: checking whether __after_morecore_hook exists" >&5
+echo "configure:3105: checking whether __after_morecore_hook exists" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3051 "configure"
+#line 3107 "configure"
 #include "confdefs.h"
 extern void (* __after_morecore_hook)();
 int main() {
 __after_morecore_hook = 0
 ; return 0; }
 EOF
-if { (eval echo configure:3058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3114: \"$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
@@ -3113,7 +3169,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:3117: checking for $ac_word" >&5
+echo "configure:3173: checking for $ac_word" >&5
 
 if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3168,7 +3224,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:3172: checking for a BSD compatible install" >&5
+echo "configure:3228: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 
   IFS="${IFS=  }"; ac_save_IFS="$IFS"; IFS=":"
@@ -3222,7 +3278,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:3226: checking for $ac_word" >&5
+echo "configure:3282: checking for $ac_word" >&5
 
 if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -3254,15 +3310,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:3258: checking for $ac_hdr" >&5
+echo "configure:3314: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3261 "configure"
+#line 3317 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3266: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3322: \"$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*
@@ -3295,15 +3351,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:3299: checking for $ac_hdr" >&5
+echo "configure:3355: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3302 "configure"
+#line 3358 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3307: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3363: \"$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*
@@ -3336,15 +3392,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:3340: checking for $ac_hdr" >&5
+echo "configure:3396: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3343 "configure"
+#line 3399 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3348: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3404: \"$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*
@@ -3374,10 +3430,10 @@ fi
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:3378: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3434: checking for sys/wait.h that is POSIX.1 compatible" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3381 "configure"
+#line 3437 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -3393,7 +3449,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:3397: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3453: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -3417,10 +3473,10 @@ EOF
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3421: checking for ANSI C header files" >&5
+echo "configure:3477: checking for ANSI C header files" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3424 "configure"
+#line 3480 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3428,7 +3484,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:3432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3488: \"$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*
@@ -3445,7 +3501,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 3449 "configure"
+#line 3505 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3463,7 +3519,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 3467 "configure"
+#line 3523 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3481,7 +3537,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 3485 "configure"
+#line 3541 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3492,7 +3548,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:3552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -3518,10 +3574,10 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3522: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3578: checking whether time.h and sys/time.h may both be included" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3525 "configure"
+#line 3581 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -3530,7 +3586,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:3534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3590: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -3554,10 +3610,10 @@ EOF
 fi
 
 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:3558: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:3614: checking for sys_siglist declaration in signal.h or unistd.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3561 "configure"
+#line 3617 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3569,7 +3625,7 @@ int main() {
 char *msg = *(sys_siglist + 1);
 ; return 0; }
 EOF
-if { (eval echo configure:3573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_decl_sys_siglist=yes
 else
@@ -3594,9 +3650,9 @@ fi
 
 
 echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6
-echo "configure:3598: checking for struct utimbuf" >&5
+echo "configure:3654: checking for struct utimbuf" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3600 "configure"
+#line 3656 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3615,7 +3671,7 @@ int main() {
 static struct utimbuf x; x.actime = x.modtime;
 ; return 0; }
 EOF
-if { (eval echo configure:3619: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3675: \"$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
@@ -3635,10 +3691,10 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3639: checking return type of signal handlers" >&5
+echo "configure:3695: checking return type of signal handlers" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3642 "configure"
+#line 3698 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3655,7 +3711,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:3659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3715: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -3677,10 +3733,10 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3681: checking for size_t" >&5
+echo "configure:3737: checking for size_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3684 "configure"
+#line 3740 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3711,10 +3767,10 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3715: checking for pid_t" >&5
+echo "configure:3771: checking for pid_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3718 "configure"
+#line 3774 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3745,10 +3801,10 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3749: checking for uid_t in sys/types.h" >&5
+echo "configure:3805: checking for uid_t in sys/types.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3752 "configure"
+#line 3808 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -3784,10 +3840,10 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:3788: checking for mode_t" >&5
+echo "configure:3844: checking for mode_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3791 "configure"
+#line 3847 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3818,10 +3874,10 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3822: checking for off_t" >&5
+echo "configure:3878: checking for off_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3825 "configure"
+#line 3881 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3852,10 +3908,10 @@ EOF
 fi
 
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3856: checking for ssize_t" >&5
+echo "configure:3912: checking for ssize_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3859 "configure"
+#line 3915 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3887,9 +3943,9 @@ fi
 
 
 echo $ac_n "checking for struct timeval""... $ac_c" 1>&6
-echo "configure:3891: checking for struct timeval" >&5
+echo "configure:3947: checking for struct timeval" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3893 "configure"
+#line 3949 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -3905,7 +3961,7 @@ int main() {
 static struct timeval x; x.tv_sec = x.tv_usec;
 ; return 0; }
 EOF
-if { (eval echo configure:3909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
   HAVE_TIMEVAL=yes
@@ -3927,10 +3983,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:3931: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:3987: checking whether struct tm is in sys/time.h or time.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3934 "configure"
+#line 3990 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
@@ -3938,7 +3994,7 @@ int main() {
 struct tm *tp; tp->tm_sec;
 ; return 0; }
 EOF
-if { (eval echo configure:3942: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm=time.h
 else
@@ -3962,10 +4018,10 @@ EOF
 fi
 
 echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:3966: checking for tm_zone in struct tm" >&5
+echo "configure:4022: checking for tm_zone in struct tm" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3969 "configure"
+#line 4025 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -3973,7 +4029,7 @@ int main() {
 struct tm tm; tm.tm_zone;
 ; return 0; }
 EOF
-if { (eval echo configure:3977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4033: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_zone=yes
 else
@@ -3996,10 +4052,10 @@ EOF
 
 else
   echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:4000: checking for tzname" >&5
+echo "configure:4056: checking for tzname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4003 "configure"
+#line 4059 "configure"
 #include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
@@ -4009,7 +4065,7 @@ int main() {
 atoi(*tzname);
 ; return 0; }
 EOF
-if { (eval echo configure:4013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_var_tzname=yes
 else
@@ -4035,10 +4091,10 @@ fi
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4039: checking for working const" >&5
+echo "configure:4095: checking for working const" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4042 "configure"
+#line 4098 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4087,7 +4143,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:4091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4112,7 +4168,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:4116: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:4172: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 
 cat > conftestmake <<\EOF
@@ -4137,12 +4193,12 @@ fi
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4141: checking whether byte ordering is bigendian" >&5
+echo "configure:4197: 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 4146 "configure"
+#line 4202 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4153,11 +4209,11 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4213: \"$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 4161 "configure"
+#line 4217 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4168,7 +4224,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -4185,7 +4241,7 @@ fi
 rm -f conftest*
 if test $ac_cv_c_bigendian = unknown; then
 cat > conftest.$ac_ext <<EOF
-#line 4189 "configure"
+#line 4245 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -4198,7 +4254,7 @@ main () {
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:4202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_bigendian=no
 else
@@ -4225,10 +4281,10 @@ fi
 
 
 echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4229: checking size of short" >&5
+echo "configure:4285: checking size of short" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4232 "configure"
+#line 4288 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4239,7 +4295,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -4267,10 +4323,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:4271: checking size of int" >&5
+echo "configure:4327: checking size of int" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4274 "configure"
+#line 4330 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4281,7 +4337,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -4303,10 +4359,10 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4307: checking size of long" >&5
+echo "configure:4363: checking size of long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4310 "configure"
+#line 4366 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4317,7 +4373,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -4339,10 +4395,10 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4343: checking size of long long" >&5
+echo "configure:4399: checking size of long long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4346 "configure"
+#line 4402 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4353,7 +4409,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4413: \"$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
@@ -4375,10 +4431,10 @@ EOF
 
 
 echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4379: checking size of void *" >&5
+echo "configure:4435: checking size of void *" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4382 "configure"
+#line 4438 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4389,7 +4445,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4449: \"$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
@@ -4412,7 +4468,7 @@ EOF
 
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:4416: checking for long file names" >&5
+echo "configure:4472: 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:
@@ -4458,10 +4514,10 @@ fi
 
 
 echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:4462: checking for sin" >&5
+echo "configure:4518: checking for sin" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4465 "configure"
+#line 4521 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char sin(); below.  */
@@ -4484,7 +4540,7 @@ sin();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4544: \"$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
@@ -4502,12 +4558,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:4506: checking for sin in -lm" >&5
+echo "configure:4562: 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 4511 "configure"
+#line 4567 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4518,7 +4574,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:4522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4562,14 +4618,14 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4566 "configure"
+#line 4622 "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:4573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4629: \"$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
@@ -4586,14 +4642,14 @@ fi
 rm -f conftest*
 
 echo "checking type of mail spool file locking" 1>&6
-echo "configure:4590: checking type of mail spool file locking" >&5
+echo "configure:4646: checking type of mail spool file locking" >&5
 for ac_func in lockf flock
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4594: checking for $ac_func" >&5
+echo "configure:4650: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4597 "configure"
+#line 4653 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4616,7 +4672,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4676: \"$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
@@ -4689,12 +4745,12 @@ test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \
 case "$opsys" in decosf*)
   
 echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6
-echo "configure:4693: checking for cma_open in -lpthreads" >&5
+echo "configure:4749: 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 4698 "configure"
+#line 4754 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4705,7 +4761,7 @@ int main() {
 cma_open()
 ; return 0; }
 EOF
-if { (eval echo configure:4709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4741,7 +4797,7 @@ fi
 esac
 
 echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6
-echo "configure:4745: checking whether the -xildoff compiler flag is required" >&5
+echo "configure:4801: 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;
@@ -4750,9 +4806,9 @@ if   ${CC-cc} '-###' -xildon  no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/nu
   else echo "$ac_t""no" 1>&6
 fi
 
-if test "$opsys" = "sol2" && test "$OS_RELEASE" -ge 56; then
+if test "$opsys" = "sol2" -a "$os_release" -ge 56; then
   echo $ac_n "checking for \"-z ignore\" linker flag""... $ac_c" 1>&6
-echo "configure:4756: checking for \"-z ignore\" linker flag" >&5
+echo "configure:4812: 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 ;;
@@ -4762,7 +4818,7 @@ fi
 
 
 echo "checking "for specified window system"" 1>&6
-echo "configure:4766: checking "for specified window system"" >&5
+echo "configure:4822: checking "for specified window system"" >&5
 
 if test "$with_x11" != "no"; then
     test "$x_includes $x_libraries" != "NONE NONE" && \
@@ -4795,7 +4851,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:4799: checking for X" >&5
+echo "configure:4855: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -4855,12 +4911,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 4859 "configure"
+#line 4915 "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:4864: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4920: \"$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*
@@ -4929,14 +4985,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 4933 "configure"
+#line 4989 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:4940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4996: \"$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.
@@ -5045,17 +5101,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:5049: checking whether -R must be followed by a space" >&5
+echo "configure:5105: 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 5052 "configure"
+#line 5108 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; 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:5115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -5071,14 +5127,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 5075 "configure"
+#line 5131 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -5114,12 +5170,12 @@ ac_cv_lib_dnet_dnet_ntoa=no
 else
 
 echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:5118: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:5174: 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 5123 "configure"
+#line 5179 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5130,7 +5186,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5154,12 +5210,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:5158: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:5214: 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 5163 "configure"
+#line 5219 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5170,7 +5226,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5199,10 +5255,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:5203: checking for gethostbyname" >&5
+echo "configure:5259: checking for gethostbyname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5206 "configure"
+#line 5262 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -5225,7 +5281,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5285: \"$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
@@ -5246,12 +5302,12 @@ fi
     if test $ac_cv_func_gethostbyname = no; then
       
 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:5250: checking for gethostbyname in -lnsl" >&5
+echo "configure:5306: 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 5255 "configure"
+#line 5311 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5262,7 +5318,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:5266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5292,10 +5348,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:5296: checking for connect" >&5
+echo "configure:5352: checking for connect" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5299 "configure"
+#line 5355 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -5318,7 +5374,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5378: \"$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
@@ -5341,12 +5397,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:5345: checking "$xe_msg_checking"" >&5
+echo "configure:5401: 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 5350 "configure"
+#line 5406 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5357,7 +5413,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:5361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5381,10 +5437,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:5385: checking for remove" >&5
+echo "configure:5441: checking for remove" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5388 "configure"
+#line 5444 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -5407,7 +5463,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5467: \"$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
@@ -5428,12 +5484,12 @@ fi
     if test $ac_cv_func_remove = no; then
       
 echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:5432: checking for remove in -lposix" >&5
+echo "configure:5488: 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 5437 "configure"
+#line 5493 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5444,7 +5500,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:5448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5468,10 +5524,10 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:5472: checking for shmat" >&5
+echo "configure:5528: checking for shmat" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5475 "configure"
+#line 5531 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -5494,7 +5550,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5554: \"$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
@@ -5515,12 +5571,12 @@ fi
     if test $ac_cv_func_shmat = no; then
       
 echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:5519: checking for shmat in -lipc" >&5
+echo "configure:5575: 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 5524 "configure"
+#line 5580 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5531,7 +5587,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:5535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5567,12 +5623,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:5571: checking "$xe_msg_checking"" >&5
+echo "configure:5627: 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 5576 "configure"
+#line 5632 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5583,7 +5639,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:5587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5752,7 +5808,7 @@ EOF
 
 
     echo "checking for X defines extracted by xmkmf" 1>&6
-echo "configure:5756: checking for X defines extracted by xmkmf" >&5
+echo "configure:5812: checking for X defines extracted by xmkmf" >&5
   rm -fr conftestdir
   if mkdir conftestdir; then
     cd conftestdir
@@ -5784,15 +5840,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:5788: checking for X11/Intrinsic.h" >&5
+echo "configure:5844: checking for X11/Intrinsic.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5791 "configure"
+#line 5847 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5852: \"$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*
@@ -5816,12 +5872,12 @@ fi
 
       
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:5820: checking for XOpenDisplay in -lX11" >&5
+echo "configure:5876: 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 5825 "configure"
+#line 5881 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5832,7 +5888,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5857,12 +5913,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:5861: checking "$xe_msg_checking"" >&5
+echo "configure:5917: 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 5866 "configure"
+#line 5922 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5873,7 +5929,7 @@ int main() {
 XGetFontProperty()
 ; return 0; }
 EOF
-if { (eval echo configure:5877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5900,12 +5956,12 @@ fi
 
     
 echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6
-echo "configure:5904: checking for XShapeSelectInput in -lXext" >&5
+echo "configure:5960: 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 5909 "configure"
+#line 5965 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5916,7 +5972,7 @@ int main() {
 XShapeSelectInput()
 ; return 0; }
 EOF
-if { (eval echo configure:5920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5939,12 +5995,12 @@ fi
 
     
 echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6
-echo "configure:5943: checking for XtOpenDisplay in -lXt" >&5
+echo "configure:5999: 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 5948 "configure"
+#line 6004 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5955,7 +6011,7 @@ int main() {
 XtOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:5959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5978,14 +6034,14 @@ fi
 
 
   echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6
-echo "configure:5982: checking the version of X11 being used" >&5
+echo "configure:6038: checking the version of X11 being used" >&5
   cat > conftest.$ac_ext <<EOF
-#line 5984 "configure"
+#line 6040 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
     int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }
 EOF
-if { (eval echo configure:5989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest foobar; x11_release=$?
 else
@@ -6006,19 +6062,76 @@ EOF
 }
 
 
+  for ac_func in XConvertCase
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6069: checking for $ac_func" >&5
+
+cat > conftest.$ac_ext <<EOF
+#line 6072 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  { test "$extra_verbose" = "yes" && cat << EOF
+    Defining $ac_tr_func
+EOF
+cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+}
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
   for ac_hdr in X11/Xlocale.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6014: checking for $ac_hdr" >&5
+echo "configure:6127: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6017 "configure"
+#line 6130 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6135: \"$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*
@@ -6049,7 +6162,7 @@ done
 
 
     echo $ac_n "checking for XFree86""... $ac_c" 1>&6
-echo "configure:6053: checking for XFree86" >&5
+echo "configure:6166: checking for XFree86" >&5
   if test -d "/usr/X386/include" -o \
           -f "/etc/XF86Config"    -o \
          -f "/etc/X11/XF86Config" -o \
@@ -6069,12 +6182,12 @@ EOF
 
     test -z "$with_xmu" && { 
 echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6
-echo "configure:6073: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
+echo "configure:6186: 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 6078 "configure"
+#line 6191 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6085,7 +6198,7 @@ int main() {
 XmuReadBitmapDataFromFile()
 ; return 0; }
 EOF
-if { (eval echo configure:6089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6124,19 +6237,19 @@ EOF
 
       
 echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6
-echo "configure:6128: checking for main in -lXbsd" >&5
+echo "configure:6241: 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 6133 "configure"
+#line 6246 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6173,22 +6286,22 @@ fi
 fi 
 if test "$with_msw" != "no"; then
   echo "checking for MS-Windows" 1>&6
-echo "configure:6177: checking for MS-Windows" >&5
+echo "configure:6290: checking for MS-Windows" >&5
   
 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6
-echo "configure:6180: checking for main in -lgdi32" >&5
+echo "configure:6293: 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 6185 "configure"
+#line 6298 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:6192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6254,12 +6367,12 @@ EOF
  fi
     fi
         cat > conftest.$ac_ext <<EOF
-#line 6258 "configure"
+#line 6371 "configure"
 #include "confdefs.h"
 #include <fcntl.h>
     int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }
 EOF
-if { (eval echo configure:6263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6376: \"$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
@@ -6275,7 +6388,6 @@ else
   cat conftest.$ac_ext >&5
 fi
 rm -fr conftest*
-    const_is_losing=no
     with_file_coding=yes
     extra_objs="$extra_objs console-msw.o device-msw.o event-msw.o frame-msw.o objects-msw.o select-msw.o redisplay-msw.o glyphs-msw.o gui-msw.o" &&  if test "$extra_verbose" = "yes"; then
    echo "    xemacs will be linked with \"console-msw.o device-msw.o event-msw.o frame-msw.o objects-msw.o select-msw.o redisplay-msw.o glyphs-msw.o gui-msw.o\""
@@ -6335,7 +6447,7 @@ case "$x_libraries" in *X11R4* )
 esac
 
 echo "checking for WM_COMMAND option" 1>&6
-echo "configure:6339: checking for WM_COMMAND option" >&5;
+echo "configure:6451: checking for WM_COMMAND option" >&5;
 if test "$with_wmcommand" != "no"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_WMCOMMAND
@@ -6350,15 +6462,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:6354: checking for X11/Xauth.h" >&5
+echo "configure:6466: checking for X11/Xauth.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6357 "configure"
+#line 6469 "configure"
 #include "confdefs.h"
 #include <X11/Xauth.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6474: \"$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*
@@ -6381,12 +6493,12 @@ fi
  }
 test -z "$with_xauth" && { 
 echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6
-echo "configure:6385: checking for XauGetAuthByAddr in -lXau" >&5
+echo "configure:6497: 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 6390 "configure"
+#line 6502 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6397,7 +6509,7 @@ int main() {
 XauGetAuthByAddr()
 ; return 0; }
 EOF
-if { (eval echo configure:6401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6442,15 +6554,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:6446: checking for ${dir}tt_c.h" >&5
+echo "configure:6558: checking for ${dir}tt_c.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6449 "configure"
+#line 6561 "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:6454: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6566: \"$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*
@@ -6486,12 +6598,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:6490: checking "$xe_msg_checking"" >&5
+echo "configure:6602: 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 6495 "configure"
+#line 6607 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6502,7 +6614,7 @@ int main() {
 tt_message_create()
 ; return 0; }
 EOF
-if { (eval echo configure:6506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6559,15 +6671,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:6563: checking for Dt/Dt.h" >&5
+echo "configure:6675: checking for Dt/Dt.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6566 "configure"
+#line 6678 "configure"
 #include "confdefs.h"
 #include <Dt/Dt.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6571: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6683: \"$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*
@@ -6590,12 +6702,12 @@ fi
  }
 test -z "$with_cde" && { 
 echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6
-echo "configure:6594: checking for DtDndDragStart in -lDtSvc" >&5
+echo "configure:6706: 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 6599 "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
@@ -6606,7 +6718,7 @@ int main() {
 DtDndDragStart()
 ; return 0; }
 EOF
-if { (eval echo configure:6610: \"$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
@@ -6675,7 +6787,7 @@ EOF
 fi
 
 echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6
-echo "configure:6679: checking if drag and drop API is needed" >&5
+echo "configure:6791: checking if drag and drop API is needed" >&5
 if test "$with_dragndrop" != "no" ; then
   if test -n "$dragndrop_proto" ; then
     with_dragndrop=yes
@@ -6696,18 +6808,18 @@ EOF
 fi
 
 echo "checking for LDAP" 1>&6
-echo "configure:6700: checking for LDAP" >&5
+echo "configure:6812: 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:6703: checking for ldap.h" >&5
+echo "configure:6815: checking for ldap.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6706 "configure"
+#line 6818 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6823: \"$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*
@@ -6730,15 +6842,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:6734: checking for lber.h" >&5
+echo "configure:6846: checking for lber.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6737 "configure"
+#line 6849 "configure"
 #include "confdefs.h"
 #include <lber.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6742: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6854: \"$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*
@@ -6762,12 +6874,12 @@ fi
 if test "$with_ldap" != "no"; then
   
 echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6
-echo "configure:6766: checking for ldap_search in -lldap" >&5
+echo "configure:6878: 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 6771 "configure"
+#line 6883 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6778,7 +6890,7 @@ int main() {
 ldap_search()
 ; return 0; }
 EOF
-if { (eval echo configure:6782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6803,12 +6915,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:6807: checking "$xe_msg_checking"" >&5
+echo "configure:6919: 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 6812 "configure"
+#line 6924 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6819,7 +6931,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6844,12 +6956,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:6848: checking "$xe_msg_checking"" >&5
+echo "configure:6960: 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 6853 "configure"
+#line 6965 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6860,7 +6972,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6885,12 +6997,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:6889: checking "$xe_msg_checking"" >&5
+echo "configure:7001: 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 6894 "configure"
+#line 7006 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6901,7 +7013,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:6905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6952,10 +7064,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:6956: checking for $ac_func" >&5
+echo "configure:7068: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6959 "configure"
+#line 7071 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6978,7 +7090,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7094: \"$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
@@ -7010,23 +7122,24 @@ fi
 
 if test "$window_system" != "none"; then
   echo "checking for graphics libraries" 1>&6
-echo "configure:7014: checking for graphics libraries" >&5
+echo "configure:7126: 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:7019: checking for Xpm - no older than 3.4f" >&5
+echo "configure:7131: checking for Xpm - no older than 3.4f" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 7022 "configure"
+#line 7134 "configure"
 #include "confdefs.h"
+#define XPM_NUMBERS
 #include <X11/xpm.h>
     int main(int c, char **v) {
     return c == 1 ? 0 :
       XpmIncludeVersion != XpmLibraryVersion() ? 1 :
       XpmIncludeVersion < 30406 ? 2 : 0 ;}
 EOF
-if { (eval echo configure:7030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7143: \"$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
@@ -7068,17 +7181,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:7072: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:7185: checking for \"FOR_MSW\" xpm" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 7075 "configure"
+#line 7188 "configure"
 #include "confdefs.h"
 
 int main() {
 XpmCreatePixmapFromData()
 ; return 0; }
 EOF
-if { (eval echo configure:7082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   xpm_for_msw=no
 else
@@ -7104,15 +7217,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:7108: checking for compface.h" >&5
+echo "configure:7221: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7111 "configure"
+#line 7224 "configure"
 #include "confdefs.h"
 #include <compface.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7116: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7229: \"$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*
@@ -7135,12 +7248,12 @@ fi
  }
   test -z "$with_xface" && { 
 echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:7139: checking for UnGenFace in -lcompface" >&5
+echo "configure:7252: 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 7144 "configure"
+#line 7257 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7151,7 +7264,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:7155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7203,12 +7316,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:7207: checking for inflate in -lc" >&5
+echo "configure:7320: 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 7212 "configure"
+#line 7325 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7219,7 +7332,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7238,12 +7351,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6
-echo "configure:7242: checking for inflate in -lz" >&5
+echo "configure:7355: 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 7247 "configure"
+#line 7360 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7254,7 +7367,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7273,12 +7386,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6
-echo "configure:7277: checking for inflate in -lgz" >&5
+echo "configure:7390: 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 7282 "configure"
+#line 7395 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7289,7 +7402,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:7293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7319,15 +7432,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:7323: checking for jpeglib.h" >&5
+echo "configure:7436: checking for jpeglib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7326 "configure"
+#line 7439 "configure"
 #include "confdefs.h"
 #include <jpeglib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7444: \"$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*
@@ -7350,12 +7463,12 @@ fi
  }
   test -z "$with_jpeg" && { 
 echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6
-echo "configure:7354: checking for jpeg_destroy_decompress in -ljpeg" >&5
+echo "configure:7467: 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 7359 "configure"
+#line 7472 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7366,7 +7479,7 @@ int main() {
 jpeg_destroy_decompress()
 ; return 0; }
 EOF
-if { (eval echo configure:7370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7402,10 +7515,10 @@ EOF
 
     png_problem=""
   test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:7406: checking for pow" >&5
+echo "configure:7519: checking for pow" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7409 "configure"
+#line 7522 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pow(); below.  */
@@ -7428,7 +7541,7 @@ pow();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7545: \"$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
@@ -7449,15 +7562,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:7453: checking for png.h" >&5
+echo "configure:7566: checking for png.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7456 "configure"
+#line 7569 "configure"
 #include "confdefs.h"
 #include <png.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7461: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7574: \"$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*
@@ -7480,12 +7593,12 @@ fi
  }
   test -z "$with_png" && { 
 echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:7484: checking for png_read_image in -lpng" >&5
+echo "configure:7597: 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 7489 "configure"
+#line 7602 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7496,7 +7609,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:7500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7519,10 +7632,10 @@ fi
  }
   if test -z "$with_png"; then
     echo $ac_n "checking for workable png version information""... $ac_c" 1>&6
-echo "configure:7523: checking for workable png version information" >&5
+echo "configure:7636: checking for workable png version information" >&5
     xe_check_libs="-lpng -lz"
     cat > conftest.$ac_ext <<EOF
-#line 7526 "configure"
+#line 7639 "configure"
 #include "confdefs.h"
 #include <png.h>
     int main(int c, char **v) {
@@ -7530,7 +7643,7 @@ echo "configure:7523: 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:7534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7647: \"$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
@@ -7573,15 +7686,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:7577: checking for tiffio.h" >&5
+echo "configure:7690: checking for tiffio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7580 "configure"
+#line 7693 "configure"
 #include "confdefs.h"
 #include <tiffio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7698: \"$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*
@@ -7604,12 +7717,12 @@ fi
  }
   test -z "$with_tiff" && { 
 echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:7608: checking for TIFFClientOpen in -ltiff" >&5
+echo "configure:7721: 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 7613 "configure"
+#line 7726 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7620,7 +7733,7 @@ int main() {
 TIFFClientOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:7624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7659,10 +7772,10 @@ fi
 if test "$with_x11" = "yes"; then
 
   echo "checking for X11 graphics libraries" 1>&6
-echo "configure:7663: checking for X11 graphics libraries" >&5
+echo "configure:7776: checking for X11 graphics libraries" >&5
 
   echo "checking for the Athena widgets" 1>&6
-echo "configure:7666: checking for the Athena widgets" >&5
+echo "configure:7779: checking for the Athena widgets" >&5
 
     case "$with_athena" in
         "xaw" | "")    athena_variant=Xaw      athena_3d=no  ;;
@@ -7676,12 +7789,12 @@ echo "configure:7666: checking for the Athena widgets" >&5
     if test "$athena_3d" = "no"; then
     
 echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7680: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
+echo "configure:7793: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
 ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 7685 "configure"
+#line 7798 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7692,7 +7805,7 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:7696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7708,12 +7821,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
           
 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7712: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7825: 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 7717 "configure"
+#line 7830 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7724,7 +7837,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7755,12 +7868,12 @@ fi
   else
         
 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7759: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7872: 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 7764 "configure"
+#line 7877 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7771,7 +7884,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7789,12 +7902,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for threeDClassRec in -lXaw""... $ac_c" 1>&6
-echo "configure:7793: checking for threeDClassRec in -lXaw" >&5
+echo "configure:7906: 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 7798 "configure"
+#line 7911 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7805,7 +7918,7 @@ int main() {
 threeDClassRec()
 ; return 0; }
 EOF
-if { (eval echo configure:7809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7836,15 +7949,15 @@ fi
     if test "$athena_3d" = "no"; then
     ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7840: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:7953: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7843 "configure"
+#line 7956 "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:7848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7961: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7864,15 +7977,15 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6
-echo "configure:7868: checking for X11/Xaw/XawInit.h" >&5
+echo "configure:7981: checking for X11/Xaw/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7871 "configure"
+#line 7984 "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:7876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7989: \"$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*
@@ -7898,15 +8011,15 @@ fi
   else
             ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:7902: checking for X11/$athena_variant/XawInit.h" >&5
+echo "configure:8015: checking for X11/$athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7905 "configure"
+#line 8018 "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:7910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7923,15 +8036,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7927: checking for X11/$athena_variant/ThreeD.h" >&5
+echo "configure:8040: checking for X11/$athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7930 "configure"
+#line 8043 "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:7935: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8048: \"$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*
@@ -7959,15 +8072,15 @@ fi
         if test -z "$athena_h_path"; then
       ac_safe=`echo "$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:7963: checking for $athena_variant/XawInit.h" >&5
+echo "configure:8076: checking for $athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7966 "configure"
+#line 8079 "configure"
 #include "confdefs.h"
 #include <$athena_variant/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7971: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8084: \"$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*
@@ -7984,15 +8097,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7988: checking for $athena_variant/ThreeD.h" >&5
+echo "configure:8101: checking for $athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7991 "configure"
+#line 8104 "configure"
 #include "confdefs.h"
 #include <$athena_variant/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7996: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8109: \"$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*
@@ -8021,15 +8134,15 @@ fi
         if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
       ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:8025: checking for X11/Xaw3d/XawInit.h" >&5
+echo "configure:8138: checking for X11/Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8028 "configure"
+#line 8141 "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:8033: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8146: \"$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*
@@ -8046,15 +8159,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8050: checking for X11/Xaw3d/ThreeD.h" >&5
+echo "configure:8163: checking for X11/Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8053 "configure"
+#line 8166 "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:8058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8171: \"$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*
@@ -8086,15 +8199,15 @@ fi
         if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
       ac_safe=`echo "Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:8090: checking for Xaw3d/XawInit.h" >&5
+echo "configure:8203: checking for Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8093 "configure"
+#line 8206 "configure"
 #include "confdefs.h"
 #include <Xaw3d/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8211: \"$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*
@@ -8111,15 +8224,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8115: checking for Xaw3d/ThreeD.h" >&5
+echo "configure:8228: checking for Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8118 "configure"
+#line 8231 "configure"
 #include "confdefs.h"
 #include <Xaw3d/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8123: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8236: \"$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*
@@ -8151,15 +8264,15 @@ fi
             if test -z "$athena_h_path"; then
       ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8155: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:8268: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8158 "configure"
+#line 8271 "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:8163: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8276: \"$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*
@@ -8194,15 +8307,15 @@ fi
 
     ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:8198: checking for Xm/Xm.h" >&5
+echo "configure:8311: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8201 "configure"
+#line 8314 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8319: \"$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*
@@ -8219,12 +8332,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:8223: checking for XmStringFree in -lXm" >&5
+echo "configure:8336: 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 8228 "configure"
+#line 8341 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8235,7 +8348,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:8239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8264,9 +8377,9 @@ fi
 
   if test "$have_motif" = "yes"; then
         echo $ac_n "checking for Lesstif""... $ac_c" 1>&6
-echo "configure:8268: checking for Lesstif" >&5
+echo "configure:8381: checking for Lesstif" >&5
     cat > conftest.$ac_ext <<EOF
-#line 8270 "configure"
+#line 8383 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 #ifdef LESSTIF_VERSION
@@ -8599,7 +8712,7 @@ fi
 
 if test "$with_mule" = "yes" ; then
   echo "checking for Mule-related features" 1>&6
-echo "configure:8603: checking for Mule-related features" >&5
+echo "configure:8716: checking for Mule-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining MULE
 EOF
@@ -8624,15 +8737,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8628: checking for $ac_hdr" >&5
+echo "configure:8741: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8631 "configure"
+#line 8744 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8636: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8749: \"$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*
@@ -8663,12 +8776,12 @@ done
 
   
 echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6
-echo "configure:8667: checking for strerror in -lintl" >&5
+echo "configure:8780: 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 8672 "configure"
+#line 8785 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8679,7 +8792,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:8683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8712,18 +8825,18 @@ fi
 
 
   echo "checking for Mule input methods" 1>&6
-echo "configure:8716: checking for Mule input methods" >&5
+echo "configure:8829: checking for Mule input methods" >&5
         case "$with_xim" in "" | "yes" )
     echo "checking for XIM" 1>&6
-echo "configure:8719: checking for XIM" >&5
+echo "configure:8832: checking for XIM" >&5
     
 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6
-echo "configure:8722: checking for XOpenIM in -lX11" >&5
+echo "configure:8835: 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 8727 "configure"
+#line 8840 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8734,7 +8847,7 @@ int main() {
 XOpenIM()
 ; return 0; }
 EOF
-if { (eval echo configure:8738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8758,12 +8871,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:8762: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:8875: 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 8767 "configure"
+#line 8880 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8774,7 +8887,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:8778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8839,15 +8952,15 @@ EOF
 
     if test "$with_xfs" = "yes" ; then
     echo "checking for XFontSet" 1>&6
-echo "configure:8843: checking for XFontSet" >&5
+echo "configure:8956: checking for XFontSet" >&5
     
 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6
-echo "configure:8846: checking for XmbDrawString in -lX11" >&5
+echo "configure:8959: 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 8851 "configure"
+#line 8964 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8858,7 +8971,7 @@ int main() {
 XmbDrawString()
 ; return 0; }
 EOF
-if { (eval echo configure:8862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8898,15 +9011,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:8902: checking for wnn/jllib.h" >&5
+echo "configure:9015: checking for wnn/jllib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8905 "configure"
+#line 9018 "configure"
 #include "confdefs.h"
 #include <wnn/jllib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9023: \"$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*
@@ -8931,10 +9044,10 @@ fi
     for ac_func in crypt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8935: checking for $ac_func" >&5
+echo "configure:9048: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8938 "configure"
+#line 9051 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8957,7 +9070,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9074: \"$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
@@ -8986,12 +9099,12 @@ done
 
     test "$ac_cv_func_crypt" != "yes" && { 
 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:8990: checking for crypt in -lcrypt" >&5
+echo "configure:9103: 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 8995 "configure"
+#line 9108 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9002,7 +9115,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:9006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9037,12 +9150,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:9041: checking for jl_dic_list_e in -lwnn" >&5
+echo "configure:9154: 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 9046 "configure"
+#line 9159 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9053,7 +9166,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9071,12 +9184,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:9075: checking for jl_dic_list_e in -lwnn4" >&5
+echo "configure:9188: 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 9080 "configure"
+#line 9193 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9087,7 +9200,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9105,12 +9218,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:9109: checking for jl_dic_list_e in -lwnn6" >&5
+echo "configure:9222: 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 9114 "configure"
+#line 9227 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9121,7 +9234,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9139,12 +9252,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:9143: checking for dic_list_e in -lwnn6_fromsrc" >&5
+echo "configure:9256: 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 9148 "configure"
+#line 9261 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9155,7 +9268,7 @@ int main() {
 dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:9159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9203,12 +9316,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:9207: checking for jl_fi_dic_list in -l$libwnn" >&5
+echo "configure:9320: 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 9212 "configure"
+#line 9325 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9219,7 +9332,7 @@ int main() {
 jl_fi_dic_list()
 ; return 0; }
 EOF
-if { (eval echo configure:9223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9254,15 +9367,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:9258: checking for canna/jrkanji.h" >&5
+echo "configure:9371: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9261 "configure"
+#line 9374 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9266: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9379: \"$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*
@@ -9289,15 +9402,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:9293: checking for canna/jrkanji.h" >&5
+echo "configure:9406: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9296 "configure"
+#line 9409 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9301: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9414: \"$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*
@@ -9325,15 +9438,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:9329: checking for canna/RK.h" >&5
+echo "configure:9442: checking for canna/RK.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9332 "configure"
+#line 9445 "configure"
 #include "confdefs.h"
 #include <canna/RK.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9450: \"$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*
@@ -9356,12 +9469,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6
-echo "configure:9360: checking for RkBgnBun in -lRKC" >&5
+echo "configure:9473: 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 9365 "configure"
+#line 9478 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9372,7 +9485,7 @@ int main() {
 RkBgnBun()
 ; return 0; }
 EOF
-if { (eval echo configure:9376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9395,12 +9508,12 @@ fi
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6
-echo "configure:9399: checking for jrKanjiControl in -lcanna" >&5
+echo "configure:9512: 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 9404 "configure"
+#line 9517 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9411,7 +9524,7 @@ int main() {
 jrKanjiControl()
 ; return 0; }
 EOF
-if { (eval echo configure:9415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9460,12 +9573,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:9464: checking for layout_object_getvalue in -li18n" >&5
+echo "configure:9577: 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 9469 "configure"
+#line 9582 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9476,7 +9589,7 @@ int main() {
 layout_object_getvalue()
 ; return 0; }
 EOF
-if { (eval echo configure:9480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9562,10 +9675,10 @@ fi
 for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf fsync ftruncate umask
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9566: checking for $ac_func" >&5
+echo "configure:9679: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9569 "configure"
+#line 9682 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9588,7 +9701,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9705: \"$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
@@ -9623,10 +9736,10 @@ extra_objs="$extra_objs realpath.o" &&  if test "$extra_verbose" = "yes"; then
 for ac_func in getloadavg
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9627: checking for $ac_func" >&5
+echo "configure:9740: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9630 "configure"
+#line 9743 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -9649,7 +9762,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9685,12 +9798,12 @@ then
 
     
 echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6
-echo "configure:9689: checking for kstat_open in -lkstat" >&5
+echo "configure:9802: 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 9694 "configure"
+#line 9807 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9701,7 +9814,7 @@ int main() {
 kstat_open()
 ; return 0; }
 EOF
-if { (eval echo configure:9705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9735,12 +9848,12 @@ fi
 
     
 echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6
-echo "configure:9739: checking for kvm_read in -lkvm" >&5
+echo "configure:9852: 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 9744 "configure"
+#line 9857 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9751,7 +9864,7 @@ int main() {
 kvm_read()
 ; return 0; }
 EOF
-if { (eval echo configure:9755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9785,16 +9898,16 @@ fi
 fi
 
 echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:9789: checking whether netdb declares h_errno" >&5
+echo "configure:9902: checking whether netdb declares h_errno" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9791 "configure"
+#line 9904 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 int main() {
 return h_errno;
 ; return 0; }
 EOF
-if { (eval echo configure:9798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9911: \"$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
@@ -9814,16 +9927,16 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:9818: checking for sigsetjmp" >&5
+echo "configure:9931: checking for sigsetjmp" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9820 "configure"
+#line 9933 "configure"
 #include "confdefs.h"
 #include <setjmp.h>
 int main() {
 sigjmp_buf bar; sigsetjmp (bar, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:9827: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9940: \"$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
@@ -9843,11 +9956,11 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6
-echo "configure:9847: checking whether localtime caches TZ" >&5
+echo "configure:9960: checking whether localtime caches TZ" >&5
 
 if test "$ac_cv_func_tzset" = "yes"; then
 cat > conftest.$ac_ext <<EOF
-#line 9851 "configure"
+#line 9964 "configure"
 #include "confdefs.h"
 #include <time.h>
 #if STDC_HEADERS
@@ -9882,7 +9995,7 @@ main()
   exit (0);
 }
 EOF
-if { (eval echo configure:9886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:9999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   emacs_cv_localtime_cache=no
 else
@@ -9912,9 +10025,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:9916: checking whether gettimeofday accepts one or two arguments" >&5
+echo "configure:10029: checking whether gettimeofday accepts one or two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 9918 "configure"
+#line 10031 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -9931,12 +10044,11 @@ cat > conftest.$ac_ext <<EOF
 int main() {
 
   struct timeval time;
-  struct timezone dummy;
-  gettimeofday (&time, &dummy);
+  gettimeofday (&time, 0);
 
 ; return 0; }
 EOF
-if { (eval echo configure:9940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10052: \"$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
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:9962: checking for inline" >&5
+echo "configure:10074: checking for inline" >&5
 
 ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 9967 "configure"
+#line 10079 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:9974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
 # 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:10024: checking for working alloca.h" >&5
+echo "configure:10136: checking for working alloca.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10027 "configure"
+#line 10139 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:10034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10146: \"$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
@@ -10054,10 +10166,10 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:10058: checking for alloca" >&5
+echo "configure:10170: checking for alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10061 "configure"
+#line 10173 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -10085,7 +10197,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:10089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10201: \"$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
@@ -10124,10 +10236,10 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:10128: checking whether alloca needs Cray hooks" >&5
+echo "configure:10240: checking whether alloca needs Cray hooks" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10131 "configure"
+#line 10243 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -10151,10 +10263,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:10155: checking for $ac_func" >&5
+echo "configure:10267: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10158 "configure"
+#line 10270 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10177,7 +10289,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10293: \"$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
@@ -10207,10 +10319,10 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:10211: checking stack direction for C alloca" >&5
+echo "configure:10323: checking stack direction for C alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10214 "configure"
+#line 10326 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -10229,7 +10341,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:10233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_stack_direction=1
 else
@@ -10258,15 +10370,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:10262: checking for vfork.h" >&5
+echo "configure:10374: checking for vfork.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10265 "configure"
+#line 10377 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10382: \"$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*
@@ -10294,10 +10406,10 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:10298: checking for working vfork" >&5
+echo "configure:10410: checking for working vfork" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10301 "configure"
+#line 10413 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -10392,7 +10504,7 @@ main() {
   }
 }
 EOF
-if { (eval echo configure:10396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10508: \"$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:10422: checking for working strcoll" >&5
+echo "configure:10534: checking for working strcoll" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10425 "configure"
+#line 10537 "configure"
 #include "confdefs.h"
 #include <string.h>
 main ()
@@ -10431,7 +10543,7 @@ main ()
        strcoll ("123", "456") >= 0);
 }
 EOF
-if { (eval echo configure:10435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10547: \"$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:10463: checking for $ac_func" >&5
+echo "configure:10575: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10466 "configure"
+#line 10578 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10485,7 +10597,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10601: \"$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:10517: checking whether getpgrp takes no argument" >&5
+echo "configure:10629: checking whether getpgrp takes no argument" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10520 "configure"
+#line 10632 "configure"
 #include "confdefs.h"
 
 /*
@@ -10571,7 +10683,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:10575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10687: \"$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:10602: checking for working mmap" >&5
+echo "configure:10714: checking for working mmap" >&5
 case "$opsys" in ultrix* ) have_mmap=no ;; *)
 cat > conftest.$ac_ext <<EOF
-#line 10605 "configure"
+#line 10717 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <unistd.h>
@@ -10634,7 +10746,7 @@ int main (int argc, char *argv[])
   return 1;
 }
 EOF
-if { (eval echo configure:10638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   have_mmap=yes
 else
@@ -10656,8 +10768,38 @@ EOF
 }
 
 
-test "$GNU_MALLOC" != "yes"   -a "$have_mmap" != "yes" && rel_alloc=no
-test "$rel_alloc" = "default" -a "$have_mmap"  = "yes" && rel_alloc=yes
+test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
+if test "$rel_alloc $have_mmap" = "default yes"; then
+  if test "$doug_lea_malloc" = "yes"; then
+        echo $ac_n "checking for M_MMAP_THRESHOLD""... $ac_c" 1>&6
+echo "configure:10776: checking for M_MMAP_THRESHOLD" >&5
+    cat > conftest.$ac_ext <<EOF
+#line 10778 "configure"
+#include "confdefs.h"
+#include <malloc.h>
+int main() {
+
+#ifndef M_MMAP_THRESHOLD
+#error No M_MMAP_THRESHOLD :-(
+!@+$%^&*_)(_ - unlikely to compile...
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:10790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  rel_alloc=no; echo "$ac_t""yes" 1>&6;
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  rel_alloc=yes; echo "$ac_t""no" 1>&6;
+fi
+rm -f conftest*
+  else
+    rel_alloc=yes
+  fi
+fi
 test "$rel_alloc" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF
     Defining REL_ALLOC
 EOF
@@ -10669,15 +10811,15 @@ EOF
 
 ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termios.h""... $ac_c" 1>&6
-echo "configure:10673: checking for termios.h" >&5
+echo "configure:10815: checking for termios.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10676 "configure"
+#line 10818 "configure"
 #include "confdefs.h"
 #include <termios.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10823: \"$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*
@@ -10720,15 +10862,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:10724: checking for termio.h" >&5
+echo "configure:10866: checking for termio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10727 "configure"
+#line 10869 "configure"
 #include "confdefs.h"
 #include <termio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10732: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10874: \"$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:10764: checking for socket" >&5
+echo "configure:10906: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10767 "configure"
+#line 10909 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -10786,7 +10928,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10932: \"$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
@@ -10801,15 +10943,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:10805: checking for netinet/in.h" >&5
+echo "configure:10947: checking for netinet/in.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10808 "configure"
+#line 10950 "configure"
 #include "confdefs.h"
 #include <netinet/in.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10955: \"$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*
@@ -10826,15 +10968,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:10830: checking for arpa/inet.h" >&5
+echo "configure:10972: checking for arpa/inet.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10833 "configure"
+#line 10975 "configure"
 #include "confdefs.h"
 #include <arpa/inet.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10980: \"$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*
@@ -10859,9 +11001,9 @@ EOF
 }
 
       echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:10863: checking "for sun_len member in struct sockaddr_un"" >&5
+echo "configure:11005: checking "for sun_len member in struct sockaddr_un"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10865 "configure"
+#line 11007 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10872,7 +11014,7 @@ int main() {
 static struct sockaddr_un x; x.sun_len = 1;
 ; return 0; }
 EOF
-if { (eval echo configure:10876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11018: \"$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
@@ -10890,9 +11032,9 @@ else
 fi
 rm -f conftest*
       echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6
-echo "configure:10894: checking "for ip_mreq struct in netinet/in.h"" >&5
+echo "configure:11036: checking "for ip_mreq struct in netinet/in.h"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 10896 "configure"
+#line 11038 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10902,7 +11044,7 @@ int main() {
 static struct ip_mreq x;
 ; return 0; }
 EOF
-if { (eval echo configure:10906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11048: \"$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:10937: checking for msgget" >&5
+echo "configure:11079: checking for msgget" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10940 "configure"
+#line 11082 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char msgget(); below.  */
@@ -10959,7 +11101,7 @@ msgget();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11105: \"$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
@@ -10974,15 +11116,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:10978: checking for sys/ipc.h" >&5
+echo "configure:11120: checking for sys/ipc.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10981 "configure"
+#line 11123 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10999,15 +11141,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:11003: checking for sys/msg.h" >&5
+echo "configure:11145: checking for sys/msg.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11006 "configure"
+#line 11148 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11011: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11153: \"$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:11049: checking for dirent.h" >&5
+echo "configure:11191: checking for dirent.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11052 "configure"
+#line 11194 "configure"
 #include "confdefs.h"
 #include <dirent.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11057: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11199: \"$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*
@@ -11080,15 +11222,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:11084: checking for sys/dir.h" >&5
+echo "configure:11226: checking for sys/dir.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11087 "configure"
+#line 11229 "configure"
 #include "confdefs.h"
 #include <sys/dir.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11092: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11234: \"$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:11125: checking for nlist.h" >&5
+echo "configure:11267: checking for nlist.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11128 "configure"
+#line 11270 "configure"
 #include "confdefs.h"
 #include <nlist.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11133: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11275: \"$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:11163: checking "for sound support"" >&5
+echo "configure:11305: 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:11170: checking for multimedia/audio_device.h" >&5
+echo "configure:11312: checking for multimedia/audio_device.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11173 "configure"
+#line 11315 "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:11178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11320: \"$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:11226: checking for ALopenport in -laudio" >&5
+echo "configure:11368: 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 11231 "configure"
+#line 11373 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11238,7 +11380,7 @@ int main() {
 ALopenport()
 ; return 0; }
 EOF
-if { (eval echo configure:11242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11384: \"$ac_link\") 1>&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:11273: checking for AOpenAudio in -lAlib" >&5
+echo "configure:11415: 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 11278 "configure"
+#line 11420 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11285,7 +11427,7 @@ int main() {
 AOpenAudio()
 ; return 0; }
 EOF
-if { (eval echo configure:11289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11431: \"$ac_link\") 1>&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:11327: checking for ${dir}/soundcard.h" >&5
+echo "configure:11469: checking for ${dir}/soundcard.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11330 "configure"
+#line 11472 "configure"
 #include "confdefs.h"
 #include <${dir}/soundcard.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11477: \"$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:11389: checking for audio/audiolib.h" >&5
+echo "configure:11531: checking for audio/audiolib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11392 "configure"
+#line 11534 "configure"
 #include "confdefs.h"
 #include <audio/audiolib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11397: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11539: \"$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*
@@ -11411,12 +11553,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:11415: checking for AuOpenServer in -laudio" >&5
+echo "configure:11557: 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 11420 "configure"
+#line 11562 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11427,7 +11569,7 @@ int main() {
 AuOpenServer()
 ; return 0; }
 EOF
-if { (eval echo configure:11431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11466,7 +11608,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 11470 "configure"
+#line 11612 "configure"
 #include "confdefs.h"
 #include <audio/Xtutil.h>
 EOF
@@ -11497,7 +11639,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:11501: checking for $ac_word" >&5
+echo "configure:11643: 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:11530: checking for esd_play_stream" >&5
+echo "configure:11672: checking for esd_play_stream" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11533 "configure"
+#line 11675 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char esd_play_stream(); below.  */
@@ -11552,7 +11694,7 @@ esd_play_stream();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11698: \"$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
@@ -11603,7 +11745,7 @@ test -z "$with_tty" && with_tty=yes
 
 if test "$with_tty" = "yes"  ; then
   echo "checking for TTY-related features" 1>&6
-echo "configure:11607: checking for TTY-related features" >&5
+echo "configure:11749: checking for TTY-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_TTY
 EOF
@@ -11619,12 +11761,12 @@ EOF
     if test -z "$with_ncurses"; then
     
 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:11623: checking for tgetent in -lncurses" >&5
+echo "configure:11765: 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 11628 "configure"
+#line 11770 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11635,7 +11777,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11668,15 +11810,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:11672: checking for ncurses/curses.h" >&5
+echo "configure:11814: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11675 "configure"
+#line 11817 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11680: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11822: \"$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:11702: checking for ncurses/term.h" >&5
+echo "configure:11844: checking for ncurses/term.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11705 "configure"
+#line 11847 "configure"
 #include "confdefs.h"
 #include <ncurses/term.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11852: \"$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:11740: checking for ncurses/curses.h" >&5
+echo "configure:11882: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11743 "configure"
+#line 11885 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11748: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11890: \"$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:11783: checking for tgetent in -l$lib" >&5
+echo "configure:11925: 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 11788 "configure"
+#line 11930 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11795,7 +11937,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11941: \"$ac_link\") 1>&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:11830: checking for tgetent in -lcurses" >&5
+echo "configure:11972: 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 11835 "configure"
+#line 11977 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11842,7 +11984,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11860,12 +12002,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:11864: checking for tgetent in -ltermcap" >&5
+echo "configure:12006: 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 11869 "configure"
+#line 12011 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11876,7 +12018,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:11880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11924,15 +12066,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:11928: checking for gpm.h" >&5
+echo "configure:12070: checking for gpm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11931 "configure"
+#line 12073 "configure"
 #include "confdefs.h"
 #include <gpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11936: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12078: \"$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:11959: checking for Gpm_Open in -lgpm" >&5
+echo "configure:12101: 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 11964 "configure"
+#line 12106 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11971,7 +12113,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:11975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12021,20 +12163,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:12025: checking for database support" >&5
+echo "configure:12167: 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:12030: checking for ndbm.h" >&5
+echo "configure:12172: checking for ndbm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12033 "configure"
+#line 12175 "configure"
 #include "confdefs.h"
 #include <ndbm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12180: \"$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:12068: checking for dbm_open in -lgdbm" >&5
+echo "configure:12210: 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 12073 "configure"
+#line 12215 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12080,7 +12222,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:12084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12226: \"$ac_link\") 1>&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:12112: checking for dbm_open" >&5
+echo "configure:12254: checking for dbm_open" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12115 "configure"
+#line 12257 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dbm_open(); below.  */
@@ -12134,7 +12276,7 @@ dbm_open();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12280: \"$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
@@ -12153,12 +12295,12 @@ else
 
     
 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6
-echo "configure:12157: checking for dbm_open in -ldbm" >&5
+echo "configure:12299: 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 12162 "configure"
+#line 12304 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12169,7 +12311,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:12173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12210,11 +12352,14 @@ EOF
 
 if test "$with_database_berkdb" != "no"; then
   echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6
-echo "configure:12214: checking for Berkeley db.h" >&5
+echo "configure:12356: checking for Berkeley db.h" >&5
   for path in "db/db.h" "db.h"; do
     cat > conftest.$ac_ext <<EOF
-#line 12217 "configure"
+#line 12359 "configure"
 #include "confdefs.h"
+
+#include <stdlib.h>
+#if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1)
 #ifdef HAVE_INTTYPES_H
 #define __BIT_TYPES_DEFINED__
 #include <inttypes.h>
@@ -12225,13 +12370,14 @@ typedef uint32_t u_int32_t;
 typedef uint64_t u_int64_t;
 #endif
 #endif
+#endif
 #include <$path>
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12235: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   db_h_path="$path"; break
 else
@@ -12247,9 +12393,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:12251: checking for Berkeley DB version" >&5
+echo "configure:12397: checking for Berkeley DB version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 12253 "configure"
+#line 12399 "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:12272: checking for $dbfunc" >&5
+echo "configure:12418: checking for $dbfunc" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12275 "configure"
+#line 12421 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $dbfunc(); below.  */
@@ -12294,7 +12440,7 @@ $dbfunc();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12298: \"$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_func_$dbfunc=yes"
 else
@@ -12313,12 +12459,12 @@ else
 
     
 echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6
-echo "configure:12317: checking for $dbfunc in -ldb" >&5
+echo "configure:12463: 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 12322 "configure"
+#line 12468 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12329,7 +12475,7 @@ int main() {
 $dbfunc()
 ; return 0; }
 EOF
-if { (eval echo configure:12333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12479: \"$ac_link\") 1>&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:12397: checking for SOCKSinit in -lsocks" >&5
+echo "configure:12543: 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 12402 "configure"
+#line 12548 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12409,7 +12555,7 @@ int main() {
 SOCKSinit()
 ; return 0; }
 EOF
-if { (eval echo configure:12413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12559: \"$ac_link\") 1>&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:12468: checking for module support" >&5
+echo "configure:12614: 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:12472: checking for dlfcn.h" >&5
+echo "configure:12618: checking for dlfcn.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12475 "configure"
+#line 12621 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12626: \"$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*
@@ -12494,12 +12640,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:12498: checking for dlopen in -ldl" >&5
+echo "configure:12644: 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 12503 "configure"
+#line 12649 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12510,7 +12656,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12529,12 +12675,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6
-echo "configure:12533: checking for dlopen in -lc" >&5
+echo "configure:12679: 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 12538 "configure"
+#line 12684 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12545,7 +12691,7 @@ int main() {
 dlopen()
 ; return 0; }
 EOF
-if { (eval echo configure:12549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12584,12 +12730,12 @@ EOF
   else
     
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:12588: checking for shl_load in -ldld" >&5
+echo "configure:12734: 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 12593 "configure"
+#line 12739 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12600,7 +12746,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:12604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12627,12 +12773,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6
-echo "configure:12631: checking for dld_init in -ldld" >&5
+echo "configure:12777: 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 12636 "configure"
+#line 12782 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12643,7 +12789,7 @@ int main() {
 dld_init()
 ; return 0; }
 EOF
-if { (eval echo configure:12647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12688,7 +12834,7 @@ xehost=$canonical
 xealias=$internal_configuration
 
 echo "checking how to build dynamic libraries for ${xehost}" 1>&6
-echo "configure:12692: checking how to build dynamic libraries for ${xehost}" >&5
+echo "configure:12838: checking how to build dynamic libraries for ${xehost}" >&5
 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
 case "$xehost" in
 *-*-linux-gnu*) ;;
@@ -12716,9 +12862,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:12720: checking checking whether we are using GNU C" >&5
+echo "configure:12866: checking checking whether we are using GNU C" >&5
   cat > conftest.$ac_ext <<EOF
-#line 12722 "configure"
+#line 12868 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -12740,7 +12886,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6
-echo "configure:12744: checking how to produce PIC code" >&5
+echo "configure:12890: checking how to produce PIC code" >&5
 wl=
 
 can_build_shared=yes
@@ -12752,7 +12898,7 @@ if test "$XEGCC" = yes; then
     # PIC is the default for these OSes.
     ;;
 
-  os2*)
+  aix3* | aix4* | os2*)
     # We can build DLLs from non-PIC.
     ;;
   amigaos*)
@@ -12833,18 +12979,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:12837: checking if PIC flag ${dll_cflags} really works" >&5
+echo "configure:12983: checking if PIC flag ${dll_cflags} really works" >&5
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $dll_cflags -DPIC"
   cat > conftest.$ac_ext <<EOF
-#line 12841 "configure"
+#line 12987 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12994: \"$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
@@ -12875,7 +13021,7 @@ cc_produces_so=no
 xldf=
 xcldf=
 echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6
-echo "configure:12879: checking if C compiler can produce shared libraries" >&5
+echo "configure:13025: checking if C compiler can produce shared libraries" >&5
 if test "$XEGCC" = yes; then
   xcldf="-shared"
   xldf="-shared"
@@ -12926,14 +13072,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 12930 "configure"
+#line 13076 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:12937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cc_produces_so=yes
 else
@@ -12958,7 +13104,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:12962: checking for ld used by GCC" >&5
+echo "configure:13108: checking for ld used by GCC" >&5
     ac_prog=`($CC -print-prog-name=ld) 2>&5`
     case "$ac_prog" in
     # Accept absolute paths.
@@ -12983,7 +13129,7 @@ echo "configure:12962: checking for ld used by GCC" >&5
     esac
   else
     echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:12987: checking for GNU ld" >&5
+echo "configure:13133: checking for GNU ld" >&5
   fi
 
   if test -z "$LTLD"; then
@@ -13021,7 +13167,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:13025: checking if the linker is GNU ld" >&5
+echo "configure:13171: 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
@@ -13048,7 +13194,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:13052: checking whether the linker supports shared libraries" >&5
+echo "configure:13198: checking whether the linker supports shared libraries" >&5
   dll_ld=$CC
   dll_ldflags=$LDFLAGS
   ld_shlibs=yes
@@ -13263,10 +13409,10 @@ EOF
     for ac_func in dlerror _dlerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13267: checking for $ac_func" >&5
+echo "configure:13413: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13270 "configure"
+#line 13416 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -13289,7 +13435,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13439: \"$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
@@ -13328,11 +13474,11 @@ done
 fi
 
 cat > conftest.$ac_ext <<EOF
-#line 13332 "configure"
+#line 13478 "configure"
 #include "confdefs.h"
 int main(int c,char *v[]){return 0;}
 EOF
-if { (eval echo configure:13336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:13482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
index 97863cc..d3cb65d 100644 (file)
@@ -368,9 +368,6 @@ with_scrollbars=''
 with_widgets=''
 with_dialogs=''
 with_file_coding=''
-dnl const_is_losing is removed - we rely on AC_C_CONST instead.
-dnl We accept (and ignore) the --const-is-losing option for compatibility.
-dnl const_is_losing='yes'
 cpp='' cppflags='' libs='' ldflags=''
 dynamic=''
 with_x11=''
@@ -516,7 +513,6 @@ while test $# != 0; do
        external_widget | \
        verbose         | \
        extra_verbose   | \
-       const_is_losing | \
        usage_tracking  | \
        use_union_type  | \
        pdump           | \
@@ -804,6 +800,7 @@ The default is to autodetect all sound support."])
        "use_minimal_tagbits" | \
        "use_indexed_lrecord_implementation" | \
        "run_in_place"  | \
+       "const_is_losing" | \
        "with_gnu_make" )
          AC_MSG_WARN([Obsolete option \`--$optname' ignored.])
        ;;
@@ -1644,7 +1641,14 @@ test -n "$NON_GNU_CPP" -a "$GCC" != "yes" -a -z "$CPP" && CPP="$NON_GNU_CPP"
 
 AC_PROG_CPP
 
-AC_AIX
+dnl --------------------------------------------------------------------
+dnl Compiler feature macros
+dnl --------------------------------------------------------------------
+
+dnl We want feature macros defined here and in config.h.in, so that
+dnl the compilation environment at configure time and compile time agree.
+
+AC_AIX dnl Defines _ALL_SOURCE on AIX.
 
 AC_MSG_CHECKING(for GNU libc)
 AC_TRY_COMPILE([#include <features.h>],[
@@ -1658,6 +1662,23 @@ dnl I'm tired of pop being broken with GLIBC -slb
 dnl Well. then why not fix fucking pop?
 test "$have_glibc" = "yes" && AC_DEFINE(_GNU_SOURCE)
 
+dnl We'd like to use vendor extensions, where available.
+dnl We'd like to use functions from the latest Unix98 standards.
+dnl See http://www.opengroup.org/onlinepubs/007908799/xsh/compilation.html
+case "$opsys" in
+  sol2) 
+   AC_DEFINE(__EXTENSIONS__)
+   dnl Solaris 2 before 2.5 had some bugs with feature test macro interaction.
+   if test "$os_release" -ge 55; then
+     AC_DEFINE(_XOPEN_SOURCE,500)
+     AC_DEFINE(_XOPEN_SOURCE_EXTENDED)
+   fi ;;
+  linux)
+    AC_DEFINE(_POSIX_C_SOURCE,199506L)
+    AC_DEFINE(_XOPEN_SOURCE,500)
+    AC_DEFINE(_XOPEN_SOURCE_EXTENDED)
+    ;;
+esac
 
 dnl Identify compilers to enable compiler-specific hacks.
 dnl Add support for other compilers HERE!
@@ -2323,7 +2344,7 @@ if   ${CC-cc} '-###' -xildon  no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/nu
 fi
 
 dnl Link with "-z ignore" on Solaris if supported
-if test "$opsys" = "sol2" && test "$OS_RELEASE" -ge 56; then
+if test "$opsys" = "sol2" -a "$os_release" -ge 56; then
   AC_MSG_CHECKING(for \"-z ignore\" linker flag)
   case "`ld -h 2>&1`" in
     *-z\ ignore\|record* ) AC_MSG_RESULT(yes)
@@ -2511,6 +2532,8 @@ EOF
   AC_MSG_RESULT(R${x11_release})
   AC_DEFINE_UNQUOTED(THIS_IS_X11R${x11_release})
 
+  AC_CHECK_FUNCS(XConvertCase)
+
   AC_CHECK_HEADERS(X11/Xlocale.h)
 
   dnl remove this - we should avoid checking for specific OS
@@ -2585,7 +2608,6 @@ if test "$with_msw" != "no"; then
     AC_TRY_RUN([#include <fcntl.h>
     int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }],
     [AC_DEFINE(HAVE_MSG_SELECT)])
-    const_is_losing=no
     with_file_coding=yes
     XE_ADD_OBJS(console-msw.o device-msw.o event-msw.o frame-msw.o objects-msw.o select-msw.o redisplay-msw.o glyphs-msw.o gui-msw.o)
   fi
@@ -2807,7 +2829,8 @@ if test "$window_system" != "none"; then
   if test -z "$with_xpm"; then
     AC_MSG_CHECKING(for Xpm - no older than 3.4f)
     xe_check_libs=-lXpm
-    AC_TRY_RUN([#include <X11/xpm.h>
+    AC_TRY_RUN([#define XPM_NUMBERS
+#include <X11/xpm.h>
     int main(int c, char **v) {
     return c == 1 ? 0 :
       XpmIncludeVersion != XpmLibraryVersion() ? 1 :
@@ -3402,8 +3425,7 @@ AC_TRY_LINK([
   ],
   [
   struct timeval time;
-  struct timezone dummy;
-  gettimeofday (&time, &dummy);
+  gettimeofday (&time, 0);
 ],
   [AC_MSG_RESULT(two)],
   [AC_MSG_RESULT(one)
@@ -3480,8 +3502,21 @@ test "$have_mmap" = "yes" && AC_DEFINE(HAVE_MMAP)
 
 dnl rel_alloc requires either GNU malloc or system malloc with mmap
 dnl We only turn rel_alloc on by default if mmap is available.
-test "$GNU_MALLOC" != "yes"   -a "$have_mmap" != "yes" && rel_alloc=no
-test "$rel_alloc" = "default" -a "$have_mmap"  = "yes" && rel_alloc=yes
+test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
+if test "$rel_alloc $have_mmap" = "default yes"; then
+  if test "$doug_lea_malloc" = "yes"; then
+    dnl Check if malloc() calls mmap(), making rel_alloc pointless.
+    AC_MSG_CHECKING(for M_MMAP_THRESHOLD)
+    AC_TRY_COMPILE([#include <malloc.h>],[
+#ifndef M_MMAP_THRESHOLD
+#error No M_MMAP_THRESHOLD :-(
+!@+$%^&*_)(_ - unlikely to compile...
+#endif
+], [rel_alloc=no; AC_MSG_RESULT(yes);], [rel_alloc=yes; AC_MSG_RESULT(no);])
+  else
+    rel_alloc=yes
+  fi
+fi
 test "$rel_alloc" = "yes" && AC_DEFINE(REL_ALLOC)
 
 dnl Check for terminal I/O variants
@@ -3780,7 +3815,10 @@ dnl Check for Berkeley DB.
 if test "$with_database_berkdb" != "no"; then
   AC_MSG_CHECKING(for Berkeley db.h)
   for path in "db/db.h" "db.h"; do
-    AC_TRY_COMPILE([#ifdef HAVE_INTTYPES_H
+    AC_TRY_COMPILE([
+#include <stdlib.h>
+#if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1)
+#ifdef HAVE_INTTYPES_H
 #define __BIT_TYPES_DEFINED__
 #include <inttypes.h>
 typedef uint8_t  u_int8_t;
@@ -3790,6 +3828,7 @@ typedef uint32_t u_int32_t;
 typedef uint64_t u_int64_t;
 #endif
 #endif
+#endif
 #include <$path>
 ],[], db_h_path="$path"; break)
   done
@@ -4241,7 +4280,6 @@ test "$with_i18n3"         = "yes" && AC_DEFINE(I18N3)
 test "$GCC"                = "yes" && AC_DEFINE(USE_GCC)
 test "$external_widget"    = "yes" && AC_DEFINE(EXTERNAL_WIDGET)
 test "$no_doc_file"        = "yes" && AC_DEFINE(NO_DOC_FILE)
-dnl test "$const_is_losing"    = "yes" && AC_DEFINE(CONST_IS_LOSING)
 test "$with_purify"        = "yes" && AC_DEFINE(PURIFY)
 test "$with_quantify"      = "yes" && AC_DEFINE(QUANTIFY)
 test "$with_pop"           = "yes" && AC_DEFINE(MAIL_USE_POP)
index 57b3174..5ed4498 100644 (file)
@@ -4568,7 +4568,7 @@ whether a symbol begins with a colon.
 `get', `put', and `remprop' have been generalized to allow you to set
 and retrieve properties on many different kinds of objects: symbols,
 strings, faces, glyphs, and extents (for extents, however, this is not
-yet implemented).  They are joined by a new function `object-props'
+yet implemented).  They are joined by a new function `object-plist'
 that returns all of the properties that have been set on an object.
 
 New functions `plists-eq' and `plists-equal' are provided for
index 555ceba..6cef740 100644 (file)
@@ -31,9 +31,9 @@ Indirect:
 cl.info-1: 1164
 cl.info-2: 46306
 cl.info-3: 89087
-cl.info-4: 138385
-cl.info-5: 176381
-cl.info-6: 218986
+cl.info-4: 137816
+cl.info-5: 175812
+cl.info-6: 218417
 \1f
 Tag Table:
 (Indirect)
@@ -75,32 +75,32 @@ Node: Multiple Values\7f111218
 Node: Macros\7f113111
 Node: Declarations\7f116329
 Node: Symbols\7f124821
-Node: Property Lists\7f125113
-Node: Creating Symbols\7f127862
-Node: Numbers\7f129940
-Node: Predicates on Numbers\7f130420
-Node: Numerical Functions\7f131449
-Node: Random Numbers\7f135676
-Node: Implementation Parameters\7f138385
-Node: Sequences\7f141957
-Node: Sequence Basics\7f142630
-Node: Mapping over Sequences\7f146208
-Node: Sequence Functions\7f152062
-Node: Searching Sequences\7f158237
-Node: Sorting Sequences\7f161274
-Node: Lists\7f163822
-Node: List Functions\7f164247
-Node: Substitution of Expressions\7f168510
-Node: Lists as Sets\7f170396
-Node: Association Lists\7f174458
-Node: Hash Tables\7f176161
-Node: Structures\7f176381
-Node: Assertions\7f191164
-Node: Efficiency Concerns\7f194107
-Node: Common Lisp Compatibility\7f200434
-Node: Old CL Compatibility\7f203590
-Node: Porting Common Lisp\7f207973
-Node: Function Index\7f218986
-Node: Variable Index\7f230192
+Node: Property Lists\7f125102
+Node: Creating Symbols\7f127293
+Node: Numbers\7f129371
+Node: Predicates on Numbers\7f129851
+Node: Numerical Functions\7f130880
+Node: Random Numbers\7f135107
+Node: Implementation Parameters\7f137816
+Node: Sequences\7f141388
+Node: Sequence Basics\7f142061
+Node: Mapping over Sequences\7f145639
+Node: Sequence Functions\7f151493
+Node: Searching Sequences\7f157668
+Node: Sorting Sequences\7f160705
+Node: Lists\7f163253
+Node: List Functions\7f163678
+Node: Substitution of Expressions\7f167941
+Node: Lists as Sets\7f169827
+Node: Association Lists\7f173889
+Node: Hash Tables\7f175592
+Node: Structures\7f175812
+Node: Assertions\7f190595
+Node: Efficiency Concerns\7f193538
+Node: Common Lisp Compatibility\7f199865
+Node: Old CL Compatibility\7f203021
+Node: Porting Common Lisp\7f207404
+Node: Function Index\7f218417
+Node: Variable Index\7f229566
 \1f
 End Tag Table
index 3ec19ca..97f2f4c 100644 (file)
@@ -334,9 +334,9 @@ on other modules, then this function can be left empty or even
 undeclared.  However, if it does have dependnacies, it must call
 `emodules_load':
 
-     int emodules_load (CONST char *module,
-                        CONST char *modname,
-                        CONST char *modver)
+     int emodules_load (const char *module,
+                        const char *modname,
+                        const char *modver)
 
    The first argument MODULE is the name of the actual shared object or
 DLL.  You can omit the `.so', `.ell' or `.dll' extension of you wish.
index 50efcfe..4c211f0 100644 (file)
@@ -40,140 +40,152 @@ Foundation instead of in the original English.
 \1f
 Indirect:
 internals.info-1: 1776
-internals.info-2: 45928
-internals.info-3: 93572
-internals.info-4: 141935
-internals.info-5: 183963
-internals.info-6: 233381
-internals.info-7: 282110
-internals.info-8: 331561
+internals.info-2: 46607
+internals.info-3: 94313
+internals.info-4: 142724
+internals.info-5: 184821
+internals.info-6: 234636
+internals.info-7: 281302
+internals.info-8: 328518
+internals.info-9: 374004
 \1f
 Tag Table:
 (Indirect)
 Node: Top\7f1776
-Node: A History of Emacs\7f6358
-Node: Through Version 18\7f7883
-Node: Lucid Emacs\7f11304
-Node: GNU Emacs 19\7f14322
-Node: GNU Emacs 20\7f16505
-Node: XEmacs\7f16932
-Node: XEmacs From the Outside\7f20111
-Node: The Lisp Language\7f21878
-Node: XEmacs From the Perspective of Building\7f31420
-Node: XEmacs From the Inside\7f37545
-Node: The XEmacs Object System (Abstractly Speaking)\7f45928
-Node: How Lisp Objects Are Represented in C\7f60014
-Node: Rules When Writing New C Code\7f68572
-Node: General Coding Rules\7f69376
-Node: Writing Lisp Primitives\7f75113
-Node: Adding Global Lisp Variables\7f86282
-Node: Coding for Mule\7f89920
-Node: Character-Related Data Types\7f90899
-Node: Working With Character and Byte Positions\7f93572
-Node: Conversion to and from External Data\7f97322
-Node: General Guidelines for Writing Mule-Aware Code\7f102203
-Node: An Example of Mule-Aware Code\7f104234
-Node: Techniques for XEmacs Developers\7f106221
-Node: A Summary of the Various XEmacs Modules\7f109988
-Node: Low-Level Modules\7f110808
-Node: Basic Lisp Modules\7f118330
-Node: Modules for Standard Editing Operations\7f126651
-Node: Editor-Level Control Flow Modules\7f132539
-Node: Modules for the Basic Displayable Lisp Objects\7f135985
-Node: Modules for other Display-Related Lisp Objects\7f138507
-Node: Modules for the Redisplay Mechanism\7f139584
-Node: Modules for Interfacing with the File System\7f141935
-Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145633
-Node: Modules for Interfacing with the Operating System\7f151086
-Node: Modules for Interfacing with X Windows\7f158747
-Node: Modules for Internationalization\7f162183
-Node: Allocation of Objects in XEmacs Lisp\7f164820
-Node: Introduction to Allocation\7f165374
-Node: Garbage Collection\7f170836
-Node: GCPROing\7f173789
-Node: Garbage Collection - Step by Step\7f180599
-Node: Invocation\7f180991
-Node: garbage_collect_1\7f183963
-Node: mark_object\7f193443
-Node: gc_sweep\7f195255
-Node: sweep_lcrecords_1\7f200318
-Node: compact_string_chars\7f201313
-Node: sweep_strings\7f203493
-Node: sweep_bit_vectors_1\7f204458
-Node: Integers and Characters\7f205134
-Node: Allocation from Frob Blocks\7f205886
-Node: lrecords\7f207490
-Node: Low-level allocation\7f219952
-Node: Pure Space\7f224120
-Node: Cons\7f224295
-Node: Vector\7f225011
-Node: Bit Vector\7f225588
-Node: Symbol\7f226081
-Node: Marker\7f226650
-Node: String\7f227205
-Node: Compiled Function\7f230818
-Node: Events and the Event Loop\7f230987
-Node: Introduction to Events\7f231466
-Node: Main Loop\7f233381
-Node: Specifics of the Event Gathering Mechanism\7f236956
-Node: Specifics About the Emacs Event\7f249409
-Node: The Event Stream Callback Routines\7f249664
-Node: Other Event Loop Functions\7f249909
-Node: Converting Events\7f251049
-Node: Dispatching Events; The Command Builder\7f251658
-Node: Evaluation; Stack Frames; Bindings\7f251893
-Node: Evaluation\7f252235
-Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258775
-Node: Simple Special Forms\7f261159
-Node: Catch and Throw\7f261941
-Node: Symbols and Variables\7f264516
-Node: Introduction to Symbols\7f264780
-Node: Obarrays\7f265818
-Node: Symbol Values\7f269351
-Node: Buffers and Textual Representation\7f271639
-Node: Introduction to Buffers\7f272297
-Node: The Text in a Buffer\7f274960
-Node: Buffer Lists\7f282110
-Node: Markers and Extents\7f284061
-Node: Bufbytes and Emchars\7f286326
-Node: The Buffer Object\7f286541
-Node: MULE Character Sets and Encodings\7f290021
-Node: Character Sets\7f291083
-Node: Encodings\7f294526
-Node: Japanese EUC (Extended Unix Code)\7f295593
-Node: JIS7\7f296407
-Node: Internal Mule Encodings\7f297757
-Node: Internal String Encoding\7f299587
-Node: Internal Character Encoding\7f301700
-Node: CCL\7f303424
-Node: The Lisp Reader and Compiler\7f310176
-Node: Lstreams\7f310389
-Node: Creating an Lstream\7f311420
-Node: Lstream Types\7f312630
-Node: Lstream Functions\7f312882
-Node: Lstream Methods\7f316448
-Node: Consoles; Devices; Frames; Windows\7f319590
-Node: Introduction to Consoles; Devices; Frames; Windows\7f319905
-Node: Point\7f322397
-Node: Window Hierarchy\7f323676
-Node: The Window Object\7f328124
-Node: The Redisplay Mechanism\7f331561
-Node: Critical Redisplay Sections\7f332353
-Node: Line Start Cache\7f333308
-Node: Redisplay Piece by Piece\7f336544
-Node: Extents\7f338580
-Node: Introduction to Extents\7f339118
-Node: Extent Ordering\7f340244
-Node: Format of the Extent Info\7f341485
-Node: Zero-Length Extents\7f343372
-Node: Mathematics of Extent Ordering\7f344770
-Node: Extent Fragments\7f349527
-Node: Faces\7f350613
-Node: Glyphs\7f350729
-Node: Specifiers\7f353747
-Node: Menus\7f353876
-Node: Subprocesses\7f356134
-Node: Interface to X Windows\7f358110
-Node: Index\7f358281
+Node: A History of Emacs\7f7010
+Node: Through Version 18\7f8535
+Node: Lucid Emacs\7f11983
+Node: GNU Emacs 19\7f15001
+Node: GNU Emacs 20\7f17184
+Node: XEmacs\7f17611
+Node: XEmacs From the Outside\7f20790
+Node: The Lisp Language\7f22557
+Node: XEmacs From the Perspective of Building\7f32099
+Node: XEmacs From the Inside\7f38224
+Node: The XEmacs Object System (Abstractly Speaking)\7f46607
+Node: How Lisp Objects Are Represented in C\7f60693
+Node: Rules When Writing New C Code\7f69251
+Node: General Coding Rules\7f70055
+Node: Writing Lisp Primitives\7f75830
+Node: Adding Global Lisp Variables\7f86999
+Node: Coding for Mule\7f90637
+Node: Character-Related Data Types\7f91616
+Node: Working With Character and Byte Positions\7f94313
+Node: Conversion to and from External Data\7f98063
+Node: General Guidelines for Writing Mule-Aware Code\7f102944
+Node: An Example of Mule-Aware Code\7f104975
+Node: Techniques for XEmacs Developers\7f106962
+Node: A Summary of the Various XEmacs Modules\7f110729
+Node: Low-Level Modules\7f111549
+Node: Basic Lisp Modules\7f119119
+Node: Modules for Standard Editing Operations\7f127440
+Node: Editor-Level Control Flow Modules\7f133328
+Node: Modules for the Basic Displayable Lisp Objects\7f136774
+Node: Modules for other Display-Related Lisp Objects\7f139296
+Node: Modules for the Redisplay Mechanism\7f140373
+Node: Modules for Interfacing with the File System\7f142724
+Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f146422
+Node: Modules for Interfacing with the Operating System\7f151875
+Node: Modules for Interfacing with X Windows\7f159536
+Node: Modules for Internationalization\7f162972
+Node: Allocation of Objects in XEmacs Lisp\7f165609
+Node: Introduction to Allocation\7f166145
+Node: Garbage Collection\7f171652
+Node: GCPROing\7f174605
+Node: Garbage Collection - Step by Step\7f181415
+Node: Invocation\7f181807
+Node: garbage_collect_1\7f184821
+Node: mark_object\7f194301
+Node: gc_sweep\7f196113
+Node: sweep_lcrecords_1\7f201176
+Node: compact_string_chars\7f202171
+Node: sweep_strings\7f204351
+Node: sweep_bit_vectors_1\7f205316
+Node: Integers and Characters\7f205992
+Node: Allocation from Frob Blocks\7f206744
+Node: lrecords\7f208348
+Node: Low-level allocation\7f220810
+Node: Pure Space\7f224978
+Node: Cons\7f225153
+Node: Vector\7f225869
+Node: Bit Vector\7f226446
+Node: Symbol\7f226939
+Node: Marker\7f227508
+Node: String\7f228063
+Node: Compiled Function\7f231676
+Node: Dumping\7f231845
+Node: Overview\7f234066
+Node: Data descriptions\7f234636
+Node: Dumping phase\7f236641
+Node: Object inventory\7f237043
+Node: Address allocation\7f239897
+Node: The header\7f241284
+Node: Data dumping\7f241792
+Node: Pointers dumping\7f242453
+Node: Reloading phase\7f243671
+Node: Remaining issues\7f245432
+Node: Events and the Event Loop\7f246393
+Node: Introduction to Events\7f246843
+Node: Main Loop\7f248792
+Node: Specifics of the Event Gathering Mechanism\7f252367
+Node: Specifics About the Emacs Event\7f264820
+Node: The Event Stream Callback Routines\7f265075
+Node: Other Event Loop Functions\7f265320
+Node: Converting Events\7f266460
+Node: Dispatching Events; The Command Builder\7f267069
+Node: Evaluation; Stack Frames; Bindings\7f267304
+Node: Evaluation\7f267646
+Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f274229
+Node: Simple Special Forms\7f276613
+Node: Catch and Throw\7f277395
+Node: Symbols and Variables\7f279970
+Node: Introduction to Symbols\7f280234
+Node: Obarrays\7f281302
+Node: Symbol Values\7f284835
+Node: Buffers and Textual Representation\7f287123
+Node: Introduction to Buffers\7f287781
+Node: The Text in a Buffer\7f290487
+Node: Buffer Lists\7f297637
+Node: Markers and Extents\7f299588
+Node: Bufbytes and Emchars\7f301853
+Node: The Buffer Object\7f302068
+Node: MULE Character Sets and Encodings\7f305548
+Node: Character Sets\7f306610
+Node: Encodings\7f310095
+Node: Japanese EUC (Extended Unix Code)\7f311162
+Node: JIS7\7f311994
+Node: Internal Mule Encodings\7f313344
+Node: Internal String Encoding\7f315174
+Node: Internal Character Encoding\7f317319
+Node: CCL\7f319043
+Node: The Lisp Reader and Compiler\7f325795
+Node: Lstreams\7f326008
+Node: Creating an Lstream\7f327039
+Node: Lstream Types\7f328266
+Node: Lstream Functions\7f328518
+Node: Lstream Methods\7f332084
+Node: Consoles; Devices; Frames; Windows\7f335226
+Node: Introduction to Consoles; Devices; Frames; Windows\7f335541
+Node: Point\7f338076
+Node: Window Hierarchy\7f339355
+Node: The Window Object\7f343803
+Node: The Redisplay Mechanism\7f347240
+Node: Critical Redisplay Sections\7f348032
+Node: Line Start Cache\7f349019
+Node: Redisplay Piece by Piece\7f352255
+Node: Extents\7f354291
+Node: Introduction to Extents\7f354825
+Node: Extent Ordering\7f355967
+Node: Format of the Extent Info\7f357208
+Node: Zero-Length Extents\7f359095
+Node: Mathematics of Extent Ordering\7f360493
+Node: Extent Fragments\7f365250
+Node: Faces\7f366336
+Node: Glyphs\7f366452
+Node: Specifiers\7f369470
+Node: Menus\7f369599
+Node: Subprocesses\7f371857
+Node: Interface to X Windows\7f373833
+Node: Index\7f374004
 \1f
 End Tag Table
index c385b18..20db3d2 100644 (file)
@@ -54,6 +54,7 @@ File: internals.info,  Node: Top,  Next: A History of Emacs,  Prev: (dir),  Up:
 * Rules When Writing New C Code::
 * A Summary of the Various XEmacs Modules::
 * Allocation of Objects in XEmacs Lisp::
+* Dumping::
 * Events and the Event Loop::
 * Evaluation; Stack Frames; Bindings::
 * Symbols and Variables::
@@ -70,19 +71,15 @@ File: internals.info,  Node: Top,  Next: A History of Emacs,  Prev: (dir),  Up:
 * Menus::
 * Subprocesses::
 * Interface to X Windows::
-* Index::                   Index including concepts, functions, variables,
-                              and other terms.
+* Index::
 
-      --- The Detailed Node Listing ---
-
-Here are other nodes that are inferiors of those already listed,
-mentioned here so you can get to them in one step:
 
 A History of Emacs
 
 * Through Version 18::          Unification prevails.
 * Lucid Emacs::                 One version 19 Emacs.
 * GNU Emacs 19::                The other version 19 Emacs.
+* GNU Emacs 20::                The other version 20 Emacs.
 * XEmacs::                      The continuation of Lucid Emacs.
 
 Rules When Writing New C Code
@@ -90,8 +87,17 @@ Rules When Writing New C Code
 * General Coding Rules::
 * Writing Lisp Primitives::
 * Adding Global Lisp Variables::
+* Coding for Mule::
 * Techniques for XEmacs Developers::
 
+Coding for Mule
+
+* Character-Related Data Types::
+* Working With Character and Byte Positions::
+* Conversion to and from External Data::
+* General Guidelines for Writing Mule-Aware Code::
+* An Example of Mule-Aware Code::
+
 A Summary of the Various XEmacs Modules
 
 * Low-Level Modules::
@@ -126,6 +132,32 @@ Allocation of Objects in XEmacs Lisp
 * String::
 * Compiled Function::
 
+Garbage Collection - Step by Step
+
+* Invocation::
+* garbage_collect_1::
+* mark_object::
+* gc_sweep::
+* sweep_lcrecords_1::
+* compact_string_chars::
+* sweep_strings::
+* sweep_bit_vectors_1::
+
+Dumping
+
+* Overview::
+* Data descriptions::
+* Dumping phase::
+* Reloading phase::
+
+Dumping phase
+
+* Object inventory::
+* Address allocation::
+* The header::
+* Data dumping::
+* Pointers dumping::
+
 Events and the Event Loop
 
 * Introduction to Events::
@@ -164,6 +196,7 @@ MULE Character Sets and Encodings
 * Character Sets::
 * Encodings::
 * Internal Mule Encodings::
+* CCL::
 
 Encodings
 
@@ -175,20 +208,25 @@ Internal Mule Encodings
 * Internal String Encoding::
 * Internal Character Encoding::
 
-The Lisp Reader and Compiler
-
 Lstreams
 
+* Creating an Lstream::         Creating an lstream object.
+* Lstream Types::               Different sorts of things that are streamed.
+* Lstream Functions::           Functions for working with lstreams.
+* Lstream Methods::             Creating new lstream types.
+
 Consoles; Devices; Frames; Windows
 
 * Introduction to Consoles; Devices; Frames; Windows::
 * Point::
 * Window Hierarchy::
+* The Window Object::
 
 The Redisplay Mechanism
 
 * Critical Redisplay Sections::
 * Line Start Cache::
+* Redisplay Piece by Piece::
 
 Extents
 
@@ -196,21 +234,9 @@ Extents
 * Extent Ordering::             How extents are ordered internally.
 * Format of the Extent Info::   The extent information in a buffer or string.
 * Zero-Length Extents::         A weird special case.
-* Mathematics of Extent Ordering::      A rigorous foundation.
+* Mathematics of Extent Ordering::  A rigorous foundation.
 * Extent Fragments::            Cached information useful for redisplay.
 
-Faces
-
-Glyphs
-
-Specifiers
-
-Menus
-
-Subprocesses
-
-Interface to X Windows
-
 \1f
 File: internals.info,  Node: A History of Emacs,  Next: XEmacs From the Outside,  Prev: Top,  Up: Top
 
@@ -243,7 +269,7 @@ language developed at MIT that underlies Emacs.)
 * XEmacs::                      The continuation of Lucid Emacs.
 
 \1f
-File: internals.info,  Node: Through Version 18,  Next: Lucid Emacs,  Up: A History of Emacs
+File: internals.info,  Node: Through Version 18,  Next: Lucid Emacs,  Prev: A History of Emacs,  Up: A History of Emacs
 
 Through Version 18
 ==================
index e69dc42..17e7222 100644 (file)
@@ -572,7 +572,7 @@ situations, often in code far away from where the actual breakage is.
 * Techniques for XEmacs Developers::
 
 \1f
-File: internals.info,  Node: General Coding Rules,  Next: Writing Lisp Primitives,  Up: Rules When Writing New C Code
+File: internals.info,  Node: General Coding Rules,  Next: Writing Lisp Primitives,  Prev: Rules When Writing New C Code,  Up: Rules When Writing New C Code
 
 General Coding Rules
 ====================
@@ -1000,7 +1000,7 @@ of code generalization for future I18N work.
 * An Example of Mule-Aware Code::
 
 \1f
-File: internals.info,  Node: Character-Related Data Types,  Next: Working With Character and Byte Positions,  Up: Coding for Mule
+File: internals.info,  Node: Character-Related Data Types,  Next: Working With Character and Byte Positions,  Prev: Coding for Mule,  Up: Coding for Mule
 
 Character-Related Data Types
 ----------------------------
index 87a898d..256af14 100644 (file)
@@ -56,45 +56,45 @@ lispref.info-2: 48386
 lispref.info-3: 96925
 lispref.info-4: 146765
 lispref.info-5: 195599
-lispref.info-6: 243284
-lispref.info-7: 291562
-lispref.info-8: 340698
-lispref.info-9: 387512
-lispref.info-10: 436964
-lispref.info-11: 485192
-lispref.info-12: 534964
-lispref.info-13: 582863
-lispref.info-14: 631086
-lispref.info-15: 679340
-lispref.info-16: 729096
-lispref.info-17: 777847
-lispref.info-18: 824752
-lispref.info-19: 872135
-lispref.info-20: 920976
-lispref.info-21: 970569
-lispref.info-22: 1017488
-lispref.info-23: 1064515
-lispref.info-24: 1113914
-lispref.info-25: 1163596
-lispref.info-26: 1213506
-lispref.info-27: 1262729
-lispref.info-28: 1311495
-lispref.info-29: 1360931
-lispref.info-30: 1402266
-lispref.info-31: 1451409
-lispref.info-32: 1500622
-lispref.info-33: 1550196
-lispref.info-34: 1598675
-lispref.info-35: 1644357
-lispref.info-36: 1686356
-lispref.info-37: 1731296
-lispref.info-38: 1780983
-lispref.info-39: 1830087
-lispref.info-40: 1879491
-lispref.info-41: 1928817
-lispref.info-42: 1977518
-lispref.info-43: 2022945
-lispref.info-44: 2061281
+lispref.info-6: 243286
+lispref.info-7: 291564
+lispref.info-8: 340173
+lispref.info-9: 388500
+lispref.info-10: 437952
+lispref.info-11: 486180
+lispref.info-12: 535952
+lispref.info-13: 583851
+lispref.info-14: 632074
+lispref.info-15: 680328
+lispref.info-16: 730084
+lispref.info-17: 778835
+lispref.info-18: 825740
+lispref.info-19: 873123
+lispref.info-20: 921964
+lispref.info-21: 971557
+lispref.info-22: 1018476
+lispref.info-23: 1065503
+lispref.info-24: 1114902
+lispref.info-25: 1164584
+lispref.info-26: 1214494
+lispref.info-27: 1263717
+lispref.info-28: 1312483
+lispref.info-29: 1361919
+lispref.info-30: 1403254
+lispref.info-31: 1452397
+lispref.info-32: 1501610
+lispref.info-33: 1551184
+lispref.info-34: 1599663
+lispref.info-35: 1645345
+lispref.info-36: 1687344
+lispref.info-37: 1732284
+lispref.info-38: 1781971
+lispref.info-39: 1831075
+lispref.info-40: 1880479
+lispref.info-41: 1929805
+lispref.info-42: 1978506
+lispref.info-43: 2023933
+lispref.info-44: 2062269
 \1f
 Tag Table:
 (Indirect)
@@ -193,697 +193,697 @@ Node: Text Comparison\7f206581
 Node: String Conversion\7f209943
 Node: Modifying Strings\7f213619
 Node: String Properties\7f214260
-Node: Formatting Strings\7f214903
-Node: Character Case\7f224521
-Node: Case Tables\7f227667
-Node: Char Tables\7f231565
-Node: Char Table Types\7f232957
-Node: Working With Char Tables\7f234532
-Node: Lists\7f236481
-Node: Cons Cells\7f237604
-Node: Lists as Boxes\7f238940
-Node: List-related Predicates\7f241582
-Node: List Elements\7f243284
-Node: Building Lists\7f248313
-Node: Modifying Lists\7f254305
-Node: Setcar\7f255117
-Node: Setcdr\7f257538
-Node: Rearrangement\7f260049
-Node: Sets And Lists\7f265635
-Node: Association Lists\7f269863
-Ref: Association Lists-Footnote-1\7f279154
-Node: Property Lists\7f279359
-Node: Working With Normal Plists\7f280907
-Node: Working With Lax Plists\7f283175
-Node: Converting Plists To/From Alists\7f285415
-Node: Weak Lists\7f286763
-Node: Sequences Arrays Vectors\7f288926
-Node: Sequence Functions\7f291562
-Node: Arrays\7f295221
-Node: Array Functions\7f298285
-Node: Vectors\7f300818
-Node: Vector Functions\7f302316
-Node: Bit Vectors\7f304887
-Node: Bit Vector Functions\7f305732
-Node: Symbols\7f307982
-Node: Symbol Components\7f309031
-Node: Definitions\7f313204
-Node: Creating Symbols\7f315429
-Node: Symbol Properties\7f322463
-Node: Plists and Alists\7f323979
-Node: Symbol Plists\7f325728
-Node: Other Plists\7f327537
-Node: Evaluation\7f329315
-Node: Intro Eval\7f330120
-Ref: Intro Eval-Footnote-1\7f333473
-Node: Eval\7f333608
-Node: Forms\7f338026
-Node: Self-Evaluating Forms\7f339185
-Node: Symbol Forms\7f340698
-Node: Classifying Lists\7f341615
-Node: Function Indirection\7f342371
-Node: Function Forms\7f345482
-Node: Macro Forms\7f346479
-Node: Special Forms\7f348079
-Node: Autoloading\7f350388
-Node: Quoting\7f350886
-Node: Control Structures\7f352247
-Node: Sequencing\7f353867
-Node: Conditionals\7f356732
-Node: Combining Conditions\7f360155
-Node: Iteration\7f363425
-Node: Nonlocal Exits\7f365204
-Node: Catch and Throw\7f365906
-Node: Examples of Catch\7f369745
-Node: Errors\7f371764
-Node: Signaling Errors\7f373253
-Node: Processing of Errors\7f377992
-Node: Handling Errors\7f380271
-Node: Error Symbols\7f387512
-Node: Cleanups\7f391468
-Node: Variables\7f395246
-Node: Global Variables\7f397015
-Node: Constant Variables\7f398091
-Node: Local Variables\7f398717
-Node: Void Variables\7f403654
-Node: Defining Variables\7f407170
-Node: Accessing Variables\7f414334
-Node: Setting Variables\7f415759
-Node: Variable Scoping\7f420278
-Node: Scope\7f421877
-Node: Extent\7f423402
-Node: Impl of Scope\7f424881
-Node: Using Scoping\7f426844
-Node: Buffer-Local Variables\7f428366
-Node: Intro to Buffer-Local\7f429202
-Node: Creating Buffer-Local\7f431745
-Node: Default Value\7f436964
-Node: Variable Aliases\7f440107
-Node: Functions\7f441892
-Node: What Is a Function\7f442986
-Node: Lambda Expressions\7f447032
-Node: Lambda Components\7f447942
-Node: Simple Lambda\7f449774
-Node: Argument List\7f451431
-Node: Function Documentation\7f455159
-Node: Function Names\7f457101
-Node: Defining Functions\7f459674
-Node: Calling Functions\7f462714
-Node: Mapping Functions\7f466563
-Node: Anonymous Functions\7f469251
-Node: Function Cells\7f472496
-Node: Inline Functions\7f477306
-Node: Related Topics\7f479116
-Node: Macros\7f480169
-Node: Simple Macro\7f481453
-Node: Expansion\7f482188
-Node: Compiling Macros\7f485192
-Node: Defining Macros\7f487028
-Node: Backquote\7f488345
-Node: Problems with Macros\7f490742
-Node: Argument Evaluation\7f491437
-Node: Surprising Local Vars\7f494352
-Node: Eval During Expansion\7f496420
-Node: Repeated Expansion\7f498113
-Node: Customization\7f500029
-Node: Common Keywords\7f500498
-Node: Group Definitions\7f503343
-Node: Variable Definitions\7f505535
-Node: Customization Types\7f510525
-Node: Simple Types\7f511960
-Node: Composite Types\7f514117
-Node: Splicing into Lists\7f518807
-Node: Type Keywords\7f520642
-Node: Loading\7f524162
-Node: How Programs Do Loading\7f525837
-Node: Autoload\7f534964
-Node: Repeated Loading\7f541043
-Node: Named Features\7f543156
-Node: Unloading\7f549588
-Node: Hooks for Loading\7f551744
-Node: Byte Compilation\7f552461
-Node: Speed of Byte-Code\7f554378
-Node: Compilation Functions\7f555585
-Node: Docs and Compilation\7f561972
-Node: Dynamic Loading\7f564625
-Node: Eval During Compile\7f566989
-Node: Compiled-Function Objects\7f568254
-Node: Disassembly\7f573052
-Node: Debugging\7f580306
-Node: Debugger\7f581718
-Node: Error Debugging\7f582863
-Node: Infinite Loops\7f585616
-Node: Function Debugging\7f586860
-Node: Explicit Debug\7f589650
-Node: Using Debugger\7f590421
-Node: Debugger Commands\7f592283
-Node: Invoking the Debugger\7f596600
-Node: Internals of Debugger\7f600515
-Node: Syntax Errors\7f605402
-Node: Excess Open\7f606650
-Node: Excess Close\7f608525
-Node: Compilation Errors\7f609946
-Node: Edebug\7f611234
-Node: Using Edebug\7f613342
-Node: Instrumenting\7f616039
-Node: Edebug Execution Modes\7f619528
-Node: Jumping\7f622638
-Node: Edebug Misc\7f624981
-Node: Breakpoints\7f626370
-Node: Global Break Condition\7f629176
-Node: Embedded Breakpoints\7f630131
-Node: Trapping Errors\7f631086
-Node: Edebug Views\7f633162
-Node: Edebug Eval\7f635127
-Node: Eval List\7f636304
-Node: Reading in Edebug\7f639689
-Node: Printing in Edebug\7f640488
-Node: Tracing\7f642203
-Node: Coverage Testing\7f644089
-Node: The Outside Context\7f646130
-Node: Checking Whether to Stop\7f647079
-Node: Edebug Display Update\7f647726
-Node: Edebug Recursive Edit\7f649749
-Node: Instrumenting Macro Calls\7f651404
-Node: Specification List\7f653886
-Node: Backtracking\7f663297
-Node: Debugging Backquote\7f665235
-Node: Specification Examples\7f668941
-Node: Edebug Options\7f671008
-Node: Read and Print\7f676345
-Node: Streams Intro\7f677322
-Node: Input Streams\7f679340
-Node: Input Functions\7f684241
-Node: Output Streams\7f686301
-Node: Output Functions\7f690352
-Node: Output Variables\7f694652
-Node: Minibuffers\7f699451
-Node: Intro to Minibuffers\7f700603
-Node: Text from Minibuffer\7f702791
-Node: Object from Minibuffer\7f707666
-Node: Minibuffer History\7f710893
-Node: Completion\7f713872
-Node: Basic Completion\7f715847
-Node: Minibuffer Completion\7f720876
-Node: Completion Commands\7f724453
-Node: High-Level Completion\7f729096
-Node: Reading File Names\7f733120
-Node: Programmed Completion\7f736804
-Node: Yes-or-No Queries\7f739186
-Node: Multiple Queries\7f744923
-Node: Reading a Password\7f748990
-Node: Minibuffer Misc\7f750327
-Node: Command Loop\7f755197
-Node: Command Overview\7f756541
-Node: Defining Commands\7f759819
-Node: Using Interactive\7f760567
-Node: Interactive Codes\7f765340
-Node: Interactive Examples\7f771132
-Node: Interactive Call\7f772446
-Node: Command Loop Info\7f777847
-Node: Events\7f782826
-Node: Event Types\7f784286
-Node: Event Contents\7f786209
-Node: Event Predicates\7f790685
-Node: Accessing Mouse Event Positions\7f792010
-Node: Frame-Level Event Position Info\7f792709
-Node: Window-Level Event Position Info\7f793749
-Node: Event Text Position Info\7f795513
-Node: Event Glyph Position Info\7f798005
-Node: Event Toolbar Position Info\7f799328
-Node: Other Event Position Info\7f799999
-Node: Accessing Other Event Info\7f800408
-Node: Working With Events\7f802028
-Node: Converting Events\7f808016
-Node: Reading Input\7f810968
-Node: Key Sequence Input\7f811970
-Node: Reading One Event\7f813924
-Node: Dispatching an Event\7f816741
-Node: Quoted Character Input\7f817192
-Node: Peeking and Discarding\7f818540
-Node: Waiting\7f822444
-Node: Quitting\7f824752
-Node: Prefix Command Arguments\7f829160
-Node: Recursive Editing\7f834247
-Node: Disabling Commands\7f839043
-Node: Command History\7f841111
-Node: Keyboard Macros\7f842848
-Node: Keymaps\7f845065
-Node: Keymap Terminology\7f846642
-Node: Format of Keymaps\7f849571
-Node: Creating Keymaps\7f849982
-Node: Inheritance and Keymaps\7f852061
-Node: Key Sequences\7f854433
-Node: Prefix Keys\7f859229
-Node: Active Keymaps\7f862814
-Node: Key Lookup\7f872135
-Node: Functions for Key Lookup\7f877298
-Node: Changing Key Bindings\7f882995
-Node: Key Binding Commands\7f889892
-Node: Scanning Keymaps\7f891957
-Node: Other Keymap Functions\7f900468
-Node: Menus\7f901090
-Node: Menu Format\7f901682
-Node: Menubar Format\7f910328
-Node: Menubar\7f910953
-Node: Modifying Menus\7f914066
-Node: Menu Filters\7f919080
-Node: Pop-Up Menus\7f920976
-Node: Menu Accelerators\7f923181
-Node: Creating Menu Accelerators\7f923937
-Node: Keyboard Menu Traversal\7f925297
-Node: Menu Accelerator Functions\7f926024
-Node: Buffers Menu\7f929101
-Node: Dialog Boxes\7f930395
-Node: Dialog Box Format\7f930562
-Node: Dialog Box Functions\7f931987
-Node: Toolbar\7f932384
-Node: Toolbar Intro\7f932709
-Node: Toolbar Descriptor Format\7f935118
-Node: Specifying the Toolbar\7f939612
-Node: Other Toolbar Variables\7f943217
-Node: Scrollbars\7f947643
-Node: Drag and Drop\7f947779
-Node: Supported Protocols\7f948855
-Node: OffiX DND\7f949358
-Node: CDE dt\7f950365
-Node: MSWindows OLE\7f950956
-Node: Loose ends\7f951127
-Node: Drop Interface\7f951519
-Node: Drag Interface\7f952541
-Node: Modes\7f952715
-Node: Major Modes\7f953666
-Node: Major Mode Conventions\7f956581
-Node: Example Major Modes\7f962536
-Node: Auto Major Mode\7f970569
-Node: Mode Help\7f978017
-Node: Derived Modes\7f979118
-Node: Minor Modes\7f981309
-Node: Minor Mode Conventions\7f982611
-Node: Keymaps and Minor Modes\7f985474
-Node: Modeline Format\7f986309
-Node: Modeline Data\7f988077
-Node: Modeline Variables\7f992347
-Node: %-Constructs\7f997063
-Node: Hooks\7f999974
-Node: Documentation\7f1006736
-Node: Documentation Basics\7f1008159
-Node: Accessing Documentation\7f1011209
-Node: Keys in Documentation\7f1017488
-Node: Describing Characters\7f1020967
-Node: Help Functions\7f1023316
-Node: Obsoleteness\7f1029767
-Node: Files\7f1032761
-Node: Visiting Files\7f1034686
-Node: Visiting Functions\7f1036191
-Node: Subroutines of Visiting\7f1041238
-Node: Saving Buffers\7f1043311
-Node: Reading from Files\7f1049404
-Node: Writing to Files\7f1051561
-Node: File Locks\7f1054278
-Node: Information about Files\7f1057331
-Node: Testing Accessibility\7f1058092
-Node: Kinds of Files\7f1061832
-Node: Truenames\7f1063513
-Node: File Attributes\7f1064515
-Node: Changing File Attributes\7f1069654
-Node: File Names\7f1075060
-Node: File Name Components\7f1076669
-Node: Directory Names\7f1079770
-Node: Relative File Names\7f1083223
-Node: File Name Expansion\7f1084301
-Node: Unique File Names\7f1088208
-Node: File Name Completion\7f1089823
-Node: User Name Completion\7f1092484
-Node: Contents of Directories\7f1093824
-Node: Create/Delete Dirs\7f1097137
-Node: Magic File Names\7f1098243
-Node: Partial Files\7f1103873
-Node: Intro to Partial Files\7f1104101
-Node: Creating a Partial File\7f1105341
-Node: Detached Partial Files\7f1106276
-Node: Format Conversion\7f1107398
-Node: Files and MS-DOS\7f1113914
-Node: Backups and Auto-Saving\7f1115978
-Node: Backup Files\7f1116653
-Node: Making Backups\7f1118050
-Node: Rename or Copy\7f1120799
-Node: Numbered Backups\7f1123292
-Node: Backup Names\7f1125536
-Node: Auto-Saving\7f1128828
-Node: Reverting\7f1136970
-Node: Buffers\7f1140128
-Node: Buffer Basics\7f1141545
-Node: Current Buffer\7f1143598
-Node: Buffer Names\7f1148286
-Node: Buffer File Name\7f1151491
-Node: Buffer Modification\7f1155610
-Node: Modification Time\7f1157803
-Node: Read Only Buffers\7f1161178
-Node: The Buffer List\7f1163596
-Node: Creating Buffers\7f1168426
-Node: Killing Buffers\7f1170572
-Node: Indirect Buffers\7f1174303
-Node: Windows\7f1176875
-Node: Basic Windows\7f1178353
-Node: Splitting Windows\7f1181451
-Node: Deleting Windows\7f1188340
-Node: Selecting Windows\7f1191020
-Node: Cyclic Window Ordering\7f1194149
-Node: Buffers and Windows\7f1198773
-Node: Displaying Buffers\7f1200614
-Node: Choosing Window\7f1205790
-Node: Window Point\7f1213506
-Node: Window Start\7f1215552
-Node: Vertical Scrolling\7f1220042
-Node: Horizontal Scrolling\7f1226179
-Node: Size of Window\7f1229688
-Node: Position of Window\7f1234406
-Node: Resizing Windows\7f1236646
-Node: Window Configurations\7f1242075
-Node: Frames\7f1245500
-Node: Creating Frames\7f1247269
-Node: Frame Properties\7f1248610
-Node: Property Access\7f1249426
-Node: Initial Properties\7f1250275
-Node: X Frame Properties\7f1252761
-Node: Size and Position\7f1257395
-Node: Frame Name\7f1259391
-Node: Frame Titles\7f1260305
-Node: Deleting Frames\7f1262129
-Node: Finding All Frames\7f1262729
-Node: Frames and Windows\7f1264723
-Node: Minibuffers and Frames\7f1266428
-Node: Input Focus\7f1267346
-Node: Visibility of Frames\7f1270423
-Node: Raising and Lowering\7f1272342
-Node: Frame Configurations\7f1274718
-Node: Frame Hooks\7f1275312
-Node: Consoles and Devices\7f1277117
-Node: Basic Console Functions\7f1279860
-Node: Basic Device Functions\7f1280283
-Node: Console Types and Device Classes\7f1280999
-Node: Connecting to a Console or Device\7f1283196
-Node: The Selected Console and Device\7f1285359
-Node: Console and Device I/O\7f1286385
-Node: Positions\7f1287149
-Node: Point\7f1288118
-Node: Motion\7f1291208
-Node: Character Motion\7f1291975
-Node: Word Motion\7f1294212
-Node: Buffer End Motion\7f1295713
-Node: Text Lines\7f1297210
-Node: Screen Lines\7f1301805
-Node: List Motion\7f1305868
-Node: Skipping Characters\7f1309276
-Node: Excursions\7f1311495
-Node: Narrowing\7f1314527
-Node: Markers\7f1319852
-Node: Overview of Markers\7f1320758
-Node: Predicates on Markers\7f1325450
-Node: Creating Markers\7f1326696
-Node: Information from Markers\7f1330733
-Node: Changing Markers\7f1331831
-Node: The Mark\7f1333209
-Node: The Region\7f1341703
-Node: Text\7f1347389
-Node: Near Point\7f1350088
-Node: Buffer Contents\7f1354275
-Node: Comparing Text\7f1355681
-Node: Insertion\7f1357089
-Node: Commands for Insertion\7f1360931
-Node: Deletion\7f1363887
-Node: User-Level Deletion\7f1367482
-Node: The Kill Ring\7f1371643
-Node: Kill Ring Concepts\7f1373817
-Node: Kill Functions\7f1374871
-Node: Yank Commands\7f1376776
-Node: Low-Level Kill Ring\7f1378647
-Node: Internals of Kill Ring\7f1381433
-Node: Undo\7f1384213
-Node: Maintaining Undo\7f1388542
-Node: Filling\7f1391162
-Node: Margins\7f1397156
-Node: Auto Filling\7f1401085
-Node: Sorting\7f1402266
-Node: Columns\7f1411566
-Node: Indentation\7f1414082
-Node: Primitive Indent\7f1414861
-Node: Mode-Specific Indent\7f1416105
-Node: Region Indent\7f1418616
-Node: Relative Indent\7f1421564
-Node: Indent Tabs\7f1423946
-Node: Motion by Indent\7f1425267
-Node: Case Changes\7f1426046
-Node: Text Properties\7f1429297
-Node: Examining Properties\7f1431110
-Node: Changing Properties\7f1432977
-Node: Property Search\7f1436568
-Node: Special Properties\7f1441279
-Node: Saving Properties\7f1441560
-Node: Substitution\7f1444702
-Node: Registers\7f1447972
-Node: Transposition\7f1450515
-Node: Change Hooks\7f1451409
-Node: Transformations\7f1453449
-Node: Searching and Matching\7f1457834
-Node: String Search\7f1458965
-Node: Regular Expressions\7f1463689
-Node: Syntax of Regexps\7f1465056
-Node: Regexp Example\7f1479435
-Node: Regexp Search\7f1481605
-Node: POSIX Regexps\7f1487693
-Node: Search and Replace\7f1489528
-Node: Match Data\7f1492893
-Node: Simple Match Data\7f1494023
-Node: Replacing Match\7f1498288
-Node: Entire Match Data\7f1500622
-Node: Saving Match Data\7f1502613
-Node: Searching and Case\7f1503994
-Node: Standard Regexps\7f1506028
-Node: Syntax Tables\7f1508226
-Node: Syntax Basics\7f1509340
-Node: Syntax Descriptors\7f1512312
-Node: Syntax Class Table\7f1514162
-Node: Syntax Flags\7f1520200
-Node: Syntax Table Functions\7f1523417
-Node: Motion and Syntax\7f1527281
-Node: Parsing Expressions\7f1528733
-Node: Standard Syntax Tables\7f1534802
-Node: Syntax Table Internals\7f1535646
-Node: Abbrevs\7f1536672
-Node: Abbrev Mode\7f1538475
-Node: Abbrev Tables\7f1539195
-Node: Defining Abbrevs\7f1540728
-Node: Abbrev Files\7f1542633
-Node: Abbrev Expansion\7f1544406
-Node: Standard Abbrev Tables\7f1549037
-Node: Extents\7f1550196
-Node: Intro to Extents\7f1551439
-Node: Creating and Modifying Extents\7f1555433
-Node: Extent Endpoints\7f1556940
-Node: Finding Extents\7f1560203
-Node: Mapping Over Extents\7f1563951
-Node: Extent Properties\7f1570068
-Node: Detached Extents\7f1580212
-Node: Extent Parents\7f1582071
-Node: Duplicable Extents\7f1583765
-Node: Extents and Events\7f1586986
-Node: Atomic Extents\7f1588893
-Node: Specifiers\7f1589340
-Node: Introduction to Specifiers\7f1591453
-Node: Specifiers In-Depth\7f1593763
-Node: Specifier Instancing\7f1598675
-Node: Specifier Types\7f1601937
-Node: Adding Specifications\7f1607011
-Node: Retrieving Specifications\7f1616373
-Node: Specifier Tag Functions\7f1620108
-Node: Specifier Instancing Functions\7f1623342
-Node: Specifier Example\7f1626749
-Node: Creating Specifiers\7f1629905
-Node: Specifier Validation Functions\7f1632154
-Node: Other Specification Functions\7f1634538
-Node: Faces and Window-System Objects\7f1638357
-Node: Faces\7f1638681
-Node: Merging Faces\7f1640298
-Node: Basic Face Functions\7f1642259
-Node: Face Properties\7f1644357
-Node: Face Convenience Functions\7f1654599
-Node: Other Face Display Functions\7f1657729
-Node: Fonts\7f1658542
-Node: Font Specifiers\7f1659243
-Node: Font Instances\7f1659484
-Node: Font Instance Names\7f1660451
-Node: Font Instance Size\7f1661292
-Node: Font Instance Characteristics\7f1662578
-Node: Font Convenience Functions\7f1663747
-Node: Colors\7f1665037
-Node: Color Specifiers\7f1665477
-Node: Color Instances\7f1665704
-Node: Color Instance Properties\7f1666448
-Node: Color Convenience Functions\7f1667074
-Node: Glyphs\7f1668127
-Node: Glyph Functions\7f1669719
-Node: Creating Glyphs\7f1670126
-Node: Glyph Properties\7f1671713
-Node: Glyph Convenience Functions\7f1680880
-Node: Glyph Dimensions\7f1684827
-Node: Images\7f1685907
-Node: Image Specifiers\7f1686356
-Node: Image Instantiator Conversion\7f1697777
-Node: Image Instances\7f1699142
-Node: Image Instance Types\7f1699893
-Node: Image Instance Functions\7f1702548
-Node: Glyph Types\7f1707117
-Node: Mouse Pointer\7f1708889
-Node: Redisplay Glyphs\7f1711892
-Node: Subwindows\7f1712925
-Node: Annotations\7f1713168
-Node: Annotation Basics\7f1714184
-Node: Annotation Primitives\7f1718122
-Node: Annotation Properties\7f1719451
-Node: Locating Annotations\7f1722491
-Node: Margin Primitives\7f1723328
-Node: Annotation Hooks\7f1725222
-Node: Display\7f1725882
-Node: Refresh Screen\7f1726860
-Node: Truncation\7f1728771
-Node: The Echo Area\7f1731296
-Node: Warnings\7f1737731
-Node: Invisible Text\7f1742167
-Node: Selective Display\7f1744746
-Node: Overlay Arrow\7f1748872
-Node: Temporary Displays\7f1750225
-Node: Blinking\7f1754346
-Node: Usual Display\7f1756531
-Node: Display Tables\7f1759080
-Node: Display Table Format\7f1759884
-Node: Active Display Table\7f1761326
-Node: Character Descriptors\7f1762518
-Node: Beeping\7f1763275
-Node: Hash Tables\7f1768041
-Node: Introduction to Hash Tables\7f1768649
-Node: Working With Hash Tables\7f1774672
-Node: Weak Hash Tables\7f1775789
-Node: Range Tables\7f1777588
-Node: Introduction to Range Tables\7f1778277
-Node: Working With Range Tables\7f1778708
-Node: Databases\7f1779593
-Node: Connecting to a Database\7f1779892
-Node: Working With a Database\7f1780983
-Node: Other Database Functions\7f1781841
-Node: Processes\7f1782415
-Node: Subprocess Creation\7f1784639
-Node: Synchronous Processes\7f1787928
-Node: MS-DOS Subprocesses\7f1794646
-Node: Asynchronous Processes\7f1795720
-Node: Deleting Processes\7f1799433
-Node: Process Information\7f1801304
-Node: Input to Processes\7f1805230
-Node: Signals to Processes\7f1807520
-Node: Output from Processes\7f1811940
-Node: Process Buffers\7f1812752
-Node: Filter Functions\7f1815619
-Node: Accepting Output\7f1821189
-Node: Sentinels\7f1822716
-Node: Process Window Size\7f1826206
-Node: Transaction Queues\7f1826555
-Node: Network\7f1828253
-Node: System Interface\7f1830087
-Node: Starting Up\7f1831357
-Node: Start-up Summary\7f1831951
-Node: Init File\7f1835505
-Node: Terminal-Specific\7f1837886
-Node: Command Line Arguments\7f1841045
-Node: Getting Out\7f1844534
-Node: Killing XEmacs\7f1845103
-Node: Suspending XEmacs\7f1846772
-Node: System Environment\7f1850114
-Node: User Identification\7f1856781
-Node: Time of Day\7f1860310
-Node: Time Conversion\7f1863097
-Node: Timers\7f1868137
-Node: Terminal Input\7f1870310
-Node: Input Modes\7f1870813
-Node: Translating Input\7f1873226
-Node: Recording Input\7f1877391
-Node: Terminal Output\7f1879491
-Node: Flow Control\7f1883114
-Node: Batch Mode\7f1886906
-Node: X-Windows\7f1888288
-Node: X Selections\7f1889159
-Node: X Server\7f1891369
-Node: Resources\7f1891820
-Node: Server Data\7f1897129
-Node: Grabs\7f1898336
-Node: X Miscellaneous\7f1899916
-Node: ToolTalk Support\7f1902301
-Node: XEmacs ToolTalk API Summary\7f1902518
-Node: Sending Messages\7f1903818
-Node: Example of Sending Messages\7f1904069
-Node: Elisp Interface for Sending Messages\7f1905131
-Node: Receiving Messages\7f1911523
-Node: Example of Receiving Messages\7f1911746
-Node: Elisp Interface for Receiving Messages\7f1912582
-Node: LDAP Support\7f1916407
-Node: Building XEmacs with LDAP support\7f1916903
-Node: XEmacs LDAP API\7f1917881
-Node: LDAP Variables\7f1918611
-Node: The High-Level LDAP API\7f1921087
-Node: The Low-Level LDAP API\7f1922192
-Node: The LDAP Lisp Object\7f1922466
-Node: Opening and Closing a LDAP Connection\7f1923019
-Node: Searching on a LDAP Server (Low-level)\7f1924802
-Node: Syntax of Search Filters\7f1926195
-Node: Internationalization\7f1927493
-Node: I18N Levels 1 and 2\7f1927830
-Node: I18N Level 3\7f1928536
-Node: Level 3 Basics\7f1928817
-Node: Level 3 Primitives\7f1929650
-Node: Dynamic Messaging\7f1931256
-Node: Domain Specification\7f1931719
-Node: Documentation String Extraction\7f1933622
-Node: I18N Level 4\7f1934540
-Node: MULE\7f1934732
-Node: Internationalization Terminology\7f1935843
-Node: Charsets\7f1944377
-Node: Charset Properties\7f1945073
-Node: Basic Charset Functions\7f1949759
-Node: Charset Property Functions\7f1951940
-Node: Predefined Charsets\7f1953982
-Node: MULE Characters\7f1956902
-Node: Composite Characters\7f1957749
-Node: ISO 2022\7f1959003
-Node: Coding Systems\7f1965145
-Node: Coding System Types\7f1967066
-Node: EOL Conversion\7f1968885
-Node: Coding System Properties\7f1970068
-Node: Basic Coding System Functions\7f1973920
-Node: Coding System Property Functions\7f1975824
-Node: Encoding and Decoding Text\7f1976382
-Node: Detection of Textual Encoding\7f1977518
-Node: Big5 and Shift-JIS Functions\7f1979054
-Node: CCL\7f1980142
-Node: CCL Syntax\7f1983246
-Node: CCL Statements\7f1984834
-Node: CCL Expressions\7f1989482
-Node: Calling CCL\7f1992021
-Node: CCL Examples\7f1995010
-Node: Category Tables\7f1995147
-Node: Tips\7f1997505
-Node: Style Tips\7f1998146
-Node: Compilation Tips\7f2007665
-Node: Documentation Tips\7f2009579
-Node: Comment Tips\7f2015088
-Node: Library Headers\7f2018090
-Node: Building XEmacs and Object Allocation\7f2022062
-Node: Building XEmacs\7f2022945
-Node: Pure Storage\7f2029280
-Node: Garbage Collection\7f2032068
-Node: Standard Errors\7f2043207
-Node: Standard Buffer-Local Variables\7f2047416
-Node: Standard Keymaps\7f2050049
-Node: Standard Hooks\7f2053781
-Node: Index\7f2061281
+Node: Formatting Strings\7f214905
+Node: Character Case\7f224523
+Node: Case Tables\7f227669
+Node: Char Tables\7f231567
+Node: Char Table Types\7f232959
+Node: Working With Char Tables\7f234534
+Node: Lists\7f236483
+Node: Cons Cells\7f237606
+Node: Lists as Boxes\7f238942
+Node: List-related Predicates\7f241584
+Node: List Elements\7f243286
+Node: Building Lists\7f248315
+Node: Modifying Lists\7f254307
+Node: Setcar\7f255119
+Node: Setcdr\7f257540
+Node: Rearrangement\7f260051
+Node: Sets And Lists\7f265637
+Node: Association Lists\7f269865
+Ref: Association Lists-Footnote-1\7f279156
+Node: Property Lists\7f279361
+Node: Working With Normal Plists\7f280909
+Node: Working With Lax Plists\7f283177
+Node: Converting Plists To/From Alists\7f285417
+Node: Weak Lists\7f286765
+Node: Sequences Arrays Vectors\7f288928
+Node: Sequence Functions\7f291564
+Node: Arrays\7f295223
+Node: Array Functions\7f298287
+Node: Vectors\7f300820
+Node: Vector Functions\7f302318
+Node: Bit Vectors\7f304889
+Node: Bit Vector Functions\7f305734
+Node: Symbols\7f307984
+Node: Symbol Components\7f309033
+Node: Definitions\7f313206
+Node: Creating Symbols\7f315431
+Node: Symbol Properties\7f322465
+Node: Plists and Alists\7f323992
+Node: Object Plists\7f325741
+Node: Other Plists\7f328501
+Node: Evaluation\7f330303
+Node: Intro Eval\7f331108
+Ref: Intro Eval-Footnote-1\7f334461
+Node: Eval\7f334596
+Node: Forms\7f339014
+Node: Self-Evaluating Forms\7f340173
+Node: Symbol Forms\7f341686
+Node: Classifying Lists\7f342603
+Node: Function Indirection\7f343359
+Node: Function Forms\7f346470
+Node: Macro Forms\7f347467
+Node: Special Forms\7f349067
+Node: Autoloading\7f351376
+Node: Quoting\7f351874
+Node: Control Structures\7f353235
+Node: Sequencing\7f354855
+Node: Conditionals\7f357720
+Node: Combining Conditions\7f361143
+Node: Iteration\7f364413
+Node: Nonlocal Exits\7f366192
+Node: Catch and Throw\7f366894
+Node: Examples of Catch\7f370733
+Node: Errors\7f372752
+Node: Signaling Errors\7f374241
+Node: Processing of Errors\7f378980
+Node: Handling Errors\7f381259
+Node: Error Symbols\7f388500
+Node: Cleanups\7f392456
+Node: Variables\7f396234
+Node: Global Variables\7f398003
+Node: Constant Variables\7f399079
+Node: Local Variables\7f399705
+Node: Void Variables\7f404642
+Node: Defining Variables\7f408158
+Node: Accessing Variables\7f415322
+Node: Setting Variables\7f416747
+Node: Variable Scoping\7f421266
+Node: Scope\7f422865
+Node: Extent\7f424390
+Node: Impl of Scope\7f425869
+Node: Using Scoping\7f427832
+Node: Buffer-Local Variables\7f429354
+Node: Intro to Buffer-Local\7f430190
+Node: Creating Buffer-Local\7f432733
+Node: Default Value\7f437952
+Node: Variable Aliases\7f441095
+Node: Functions\7f442880
+Node: What Is a Function\7f443974
+Node: Lambda Expressions\7f448020
+Node: Lambda Components\7f448930
+Node: Simple Lambda\7f450762
+Node: Argument List\7f452419
+Node: Function Documentation\7f456147
+Node: Function Names\7f458089
+Node: Defining Functions\7f460662
+Node: Calling Functions\7f463702
+Node: Mapping Functions\7f467551
+Node: Anonymous Functions\7f470239
+Node: Function Cells\7f473484
+Node: Inline Functions\7f478294
+Node: Related Topics\7f480104
+Node: Macros\7f481157
+Node: Simple Macro\7f482441
+Node: Expansion\7f483176
+Node: Compiling Macros\7f486180
+Node: Defining Macros\7f488016
+Node: Backquote\7f489333
+Node: Problems with Macros\7f491730
+Node: Argument Evaluation\7f492425
+Node: Surprising Local Vars\7f495340
+Node: Eval During Expansion\7f497408
+Node: Repeated Expansion\7f499101
+Node: Customization\7f501017
+Node: Common Keywords\7f501486
+Node: Group Definitions\7f504331
+Node: Variable Definitions\7f506523
+Node: Customization Types\7f511513
+Node: Simple Types\7f512948
+Node: Composite Types\7f515105
+Node: Splicing into Lists\7f519795
+Node: Type Keywords\7f521630
+Node: Loading\7f525150
+Node: How Programs Do Loading\7f526825
+Node: Autoload\7f535952
+Node: Repeated Loading\7f542031
+Node: Named Features\7f544144
+Node: Unloading\7f550576
+Node: Hooks for Loading\7f552732
+Node: Byte Compilation\7f553449
+Node: Speed of Byte-Code\7f555366
+Node: Compilation Functions\7f556573
+Node: Docs and Compilation\7f562960
+Node: Dynamic Loading\7f565613
+Node: Eval During Compile\7f567977
+Node: Compiled-Function Objects\7f569242
+Node: Disassembly\7f574040
+Node: Debugging\7f581294
+Node: Debugger\7f582706
+Node: Error Debugging\7f583851
+Node: Infinite Loops\7f586604
+Node: Function Debugging\7f587848
+Node: Explicit Debug\7f590638
+Node: Using Debugger\7f591409
+Node: Debugger Commands\7f593271
+Node: Invoking the Debugger\7f597588
+Node: Internals of Debugger\7f601503
+Node: Syntax Errors\7f606390
+Node: Excess Open\7f607638
+Node: Excess Close\7f609513
+Node: Compilation Errors\7f610934
+Node: Edebug\7f612222
+Node: Using Edebug\7f614330
+Node: Instrumenting\7f617027
+Node: Edebug Execution Modes\7f620516
+Node: Jumping\7f623626
+Node: Edebug Misc\7f625969
+Node: Breakpoints\7f627358
+Node: Global Break Condition\7f630164
+Node: Embedded Breakpoints\7f631119
+Node: Trapping Errors\7f632074
+Node: Edebug Views\7f634150
+Node: Edebug Eval\7f636115
+Node: Eval List\7f637292
+Node: Reading in Edebug\7f640677
+Node: Printing in Edebug\7f641476
+Node: Tracing\7f643191
+Node: Coverage Testing\7f645077
+Node: The Outside Context\7f647118
+Node: Checking Whether to Stop\7f648067
+Node: Edebug Display Update\7f648714
+Node: Edebug Recursive Edit\7f650737
+Node: Instrumenting Macro Calls\7f652392
+Node: Specification List\7f654874
+Node: Backtracking\7f664285
+Node: Debugging Backquote\7f666223
+Node: Specification Examples\7f669929
+Node: Edebug Options\7f671996
+Node: Read and Print\7f677333
+Node: Streams Intro\7f678310
+Node: Input Streams\7f680328
+Node: Input Functions\7f685229
+Node: Output Streams\7f687289
+Node: Output Functions\7f691340
+Node: Output Variables\7f695640
+Node: Minibuffers\7f700439
+Node: Intro to Minibuffers\7f701591
+Node: Text from Minibuffer\7f703779
+Node: Object from Minibuffer\7f708654
+Node: Minibuffer History\7f711881
+Node: Completion\7f714860
+Node: Basic Completion\7f716835
+Node: Minibuffer Completion\7f721864
+Node: Completion Commands\7f725441
+Node: High-Level Completion\7f730084
+Node: Reading File Names\7f734108
+Node: Programmed Completion\7f737792
+Node: Yes-or-No Queries\7f740174
+Node: Multiple Queries\7f745911
+Node: Reading a Password\7f749978
+Node: Minibuffer Misc\7f751315
+Node: Command Loop\7f756185
+Node: Command Overview\7f757529
+Node: Defining Commands\7f760807
+Node: Using Interactive\7f761555
+Node: Interactive Codes\7f766328
+Node: Interactive Examples\7f772120
+Node: Interactive Call\7f773434
+Node: Command Loop Info\7f778835
+Node: Events\7f783814
+Node: Event Types\7f785274
+Node: Event Contents\7f787197
+Node: Event Predicates\7f791673
+Node: Accessing Mouse Event Positions\7f792998
+Node: Frame-Level Event Position Info\7f793697
+Node: Window-Level Event Position Info\7f794737
+Node: Event Text Position Info\7f796501
+Node: Event Glyph Position Info\7f798993
+Node: Event Toolbar Position Info\7f800316
+Node: Other Event Position Info\7f800987
+Node: Accessing Other Event Info\7f801396
+Node: Working With Events\7f803016
+Node: Converting Events\7f809004
+Node: Reading Input\7f811956
+Node: Key Sequence Input\7f812958
+Node: Reading One Event\7f814912
+Node: Dispatching an Event\7f817729
+Node: Quoted Character Input\7f818180
+Node: Peeking and Discarding\7f819528
+Node: Waiting\7f823432
+Node: Quitting\7f825740
+Node: Prefix Command Arguments\7f830148
+Node: Recursive Editing\7f835235
+Node: Disabling Commands\7f840031
+Node: Command History\7f842099
+Node: Keyboard Macros\7f843836
+Node: Keymaps\7f846053
+Node: Keymap Terminology\7f847630
+Node: Format of Keymaps\7f850559
+Node: Creating Keymaps\7f850970
+Node: Inheritance and Keymaps\7f853049
+Node: Key Sequences\7f855421
+Node: Prefix Keys\7f860217
+Node: Active Keymaps\7f863802
+Node: Key Lookup\7f873123
+Node: Functions for Key Lookup\7f878286
+Node: Changing Key Bindings\7f883983
+Node: Key Binding Commands\7f890880
+Node: Scanning Keymaps\7f892945
+Node: Other Keymap Functions\7f901456
+Node: Menus\7f902078
+Node: Menu Format\7f902670
+Node: Menubar Format\7f911316
+Node: Menubar\7f911941
+Node: Modifying Menus\7f915054
+Node: Menu Filters\7f920068
+Node: Pop-Up Menus\7f921964
+Node: Menu Accelerators\7f924169
+Node: Creating Menu Accelerators\7f924925
+Node: Keyboard Menu Traversal\7f926285
+Node: Menu Accelerator Functions\7f927012
+Node: Buffers Menu\7f930089
+Node: Dialog Boxes\7f931383
+Node: Dialog Box Format\7f931550
+Node: Dialog Box Functions\7f932975
+Node: Toolbar\7f933372
+Node: Toolbar Intro\7f933697
+Node: Toolbar Descriptor Format\7f936106
+Node: Specifying the Toolbar\7f940600
+Node: Other Toolbar Variables\7f944205
+Node: Scrollbars\7f948631
+Node: Drag and Drop\7f948767
+Node: Supported Protocols\7f949843
+Node: OffiX DND\7f950346
+Node: CDE dt\7f951353
+Node: MSWindows OLE\7f951944
+Node: Loose ends\7f952115
+Node: Drop Interface\7f952507
+Node: Drag Interface\7f953529
+Node: Modes\7f953703
+Node: Major Modes\7f954654
+Node: Major Mode Conventions\7f957569
+Node: Example Major Modes\7f963524
+Node: Auto Major Mode\7f971557
+Node: Mode Help\7f979005
+Node: Derived Modes\7f980106
+Node: Minor Modes\7f982297
+Node: Minor Mode Conventions\7f983599
+Node: Keymaps and Minor Modes\7f986462
+Node: Modeline Format\7f987297
+Node: Modeline Data\7f989065
+Node: Modeline Variables\7f993335
+Node: %-Constructs\7f998051
+Node: Hooks\7f1000962
+Node: Documentation\7f1007724
+Node: Documentation Basics\7f1009147
+Node: Accessing Documentation\7f1012197
+Node: Keys in Documentation\7f1018476
+Node: Describing Characters\7f1021955
+Node: Help Functions\7f1024304
+Node: Obsoleteness\7f1030755
+Node: Files\7f1033749
+Node: Visiting Files\7f1035674
+Node: Visiting Functions\7f1037179
+Node: Subroutines of Visiting\7f1042226
+Node: Saving Buffers\7f1044299
+Node: Reading from Files\7f1050392
+Node: Writing to Files\7f1052549
+Node: File Locks\7f1055266
+Node: Information about Files\7f1058319
+Node: Testing Accessibility\7f1059080
+Node: Kinds of Files\7f1062820
+Node: Truenames\7f1064501
+Node: File Attributes\7f1065503
+Node: Changing File Attributes\7f1070642
+Node: File Names\7f1076048
+Node: File Name Components\7f1077657
+Node: Directory Names\7f1080758
+Node: Relative File Names\7f1084211
+Node: File Name Expansion\7f1085289
+Node: Unique File Names\7f1089196
+Node: File Name Completion\7f1090811
+Node: User Name Completion\7f1093472
+Node: Contents of Directories\7f1094812
+Node: Create/Delete Dirs\7f1098125
+Node: Magic File Names\7f1099231
+Node: Partial Files\7f1104861
+Node: Intro to Partial Files\7f1105089
+Node: Creating a Partial File\7f1106329
+Node: Detached Partial Files\7f1107264
+Node: Format Conversion\7f1108386
+Node: Files and MS-DOS\7f1114902
+Node: Backups and Auto-Saving\7f1116966
+Node: Backup Files\7f1117641
+Node: Making Backups\7f1119038
+Node: Rename or Copy\7f1121787
+Node: Numbered Backups\7f1124280
+Node: Backup Names\7f1126524
+Node: Auto-Saving\7f1129816
+Node: Reverting\7f1137958
+Node: Buffers\7f1141116
+Node: Buffer Basics\7f1142533
+Node: Current Buffer\7f1144586
+Node: Buffer Names\7f1149274
+Node: Buffer File Name\7f1152479
+Node: Buffer Modification\7f1156598
+Node: Modification Time\7f1158791
+Node: Read Only Buffers\7f1162166
+Node: The Buffer List\7f1164584
+Node: Creating Buffers\7f1169414
+Node: Killing Buffers\7f1171560
+Node: Indirect Buffers\7f1175291
+Node: Windows\7f1177863
+Node: Basic Windows\7f1179341
+Node: Splitting Windows\7f1182439
+Node: Deleting Windows\7f1189328
+Node: Selecting Windows\7f1192008
+Node: Cyclic Window Ordering\7f1195137
+Node: Buffers and Windows\7f1199761
+Node: Displaying Buffers\7f1201602
+Node: Choosing Window\7f1206778
+Node: Window Point\7f1214494
+Node: Window Start\7f1216540
+Node: Vertical Scrolling\7f1221030
+Node: Horizontal Scrolling\7f1227167
+Node: Size of Window\7f1230676
+Node: Position of Window\7f1235394
+Node: Resizing Windows\7f1237634
+Node: Window Configurations\7f1243063
+Node: Frames\7f1246488
+Node: Creating Frames\7f1248257
+Node: Frame Properties\7f1249598
+Node: Property Access\7f1250414
+Node: Initial Properties\7f1251263
+Node: X Frame Properties\7f1253749
+Node: Size and Position\7f1258383
+Node: Frame Name\7f1260379
+Node: Frame Titles\7f1261293
+Node: Deleting Frames\7f1263117
+Node: Finding All Frames\7f1263717
+Node: Frames and Windows\7f1265711
+Node: Minibuffers and Frames\7f1267416
+Node: Input Focus\7f1268334
+Node: Visibility of Frames\7f1271411
+Node: Raising and Lowering\7f1273330
+Node: Frame Configurations\7f1275706
+Node: Frame Hooks\7f1276300
+Node: Consoles and Devices\7f1278105
+Node: Basic Console Functions\7f1280848
+Node: Basic Device Functions\7f1281271
+Node: Console Types and Device Classes\7f1281987
+Node: Connecting to a Console or Device\7f1284184
+Node: The Selected Console and Device\7f1286347
+Node: Console and Device I/O\7f1287373
+Node: Positions\7f1288137
+Node: Point\7f1289106
+Node: Motion\7f1292196
+Node: Character Motion\7f1292963
+Node: Word Motion\7f1295200
+Node: Buffer End Motion\7f1296701
+Node: Text Lines\7f1298198
+Node: Screen Lines\7f1302793
+Node: List Motion\7f1306856
+Node: Skipping Characters\7f1310264
+Node: Excursions\7f1312483
+Node: Narrowing\7f1315515
+Node: Markers\7f1320840
+Node: Overview of Markers\7f1321746
+Node: Predicates on Markers\7f1326438
+Node: Creating Markers\7f1327684
+Node: Information from Markers\7f1331721
+Node: Changing Markers\7f1332819
+Node: The Mark\7f1334197
+Node: The Region\7f1342691
+Node: Text\7f1348377
+Node: Near Point\7f1351076
+Node: Buffer Contents\7f1355263
+Node: Comparing Text\7f1356669
+Node: Insertion\7f1358077
+Node: Commands for Insertion\7f1361919
+Node: Deletion\7f1364875
+Node: User-Level Deletion\7f1368470
+Node: The Kill Ring\7f1372631
+Node: Kill Ring Concepts\7f1374805
+Node: Kill Functions\7f1375859
+Node: Yank Commands\7f1377764
+Node: Low-Level Kill Ring\7f1379635
+Node: Internals of Kill Ring\7f1382421
+Node: Undo\7f1385201
+Node: Maintaining Undo\7f1389530
+Node: Filling\7f1392150
+Node: Margins\7f1398144
+Node: Auto Filling\7f1402073
+Node: Sorting\7f1403254
+Node: Columns\7f1412554
+Node: Indentation\7f1415070
+Node: Primitive Indent\7f1415849
+Node: Mode-Specific Indent\7f1417093
+Node: Region Indent\7f1419604
+Node: Relative Indent\7f1422552
+Node: Indent Tabs\7f1424934
+Node: Motion by Indent\7f1426255
+Node: Case Changes\7f1427034
+Node: Text Properties\7f1430285
+Node: Examining Properties\7f1432098
+Node: Changing Properties\7f1433965
+Node: Property Search\7f1437556
+Node: Special Properties\7f1442267
+Node: Saving Properties\7f1442548
+Node: Substitution\7f1445690
+Node: Registers\7f1448960
+Node: Transposition\7f1451503
+Node: Change Hooks\7f1452397
+Node: Transformations\7f1454437
+Node: Searching and Matching\7f1458822
+Node: String Search\7f1459953
+Node: Regular Expressions\7f1464677
+Node: Syntax of Regexps\7f1466044
+Node: Regexp Example\7f1480423
+Node: Regexp Search\7f1482593
+Node: POSIX Regexps\7f1488681
+Node: Search and Replace\7f1490516
+Node: Match Data\7f1493881
+Node: Simple Match Data\7f1495011
+Node: Replacing Match\7f1499276
+Node: Entire Match Data\7f1501610
+Node: Saving Match Data\7f1503601
+Node: Searching and Case\7f1504982
+Node: Standard Regexps\7f1507016
+Node: Syntax Tables\7f1509214
+Node: Syntax Basics\7f1510328
+Node: Syntax Descriptors\7f1513300
+Node: Syntax Class Table\7f1515150
+Node: Syntax Flags\7f1521188
+Node: Syntax Table Functions\7f1524405
+Node: Motion and Syntax\7f1528269
+Node: Parsing Expressions\7f1529721
+Node: Standard Syntax Tables\7f1535790
+Node: Syntax Table Internals\7f1536634
+Node: Abbrevs\7f1537660
+Node: Abbrev Mode\7f1539463
+Node: Abbrev Tables\7f1540183
+Node: Defining Abbrevs\7f1541716
+Node: Abbrev Files\7f1543621
+Node: Abbrev Expansion\7f1545394
+Node: Standard Abbrev Tables\7f1550025
+Node: Extents\7f1551184
+Node: Intro to Extents\7f1552427
+Node: Creating and Modifying Extents\7f1556421
+Node: Extent Endpoints\7f1557928
+Node: Finding Extents\7f1561191
+Node: Mapping Over Extents\7f1564939
+Node: Extent Properties\7f1571056
+Node: Detached Extents\7f1581200
+Node: Extent Parents\7f1583059
+Node: Duplicable Extents\7f1584753
+Node: Extents and Events\7f1587974
+Node: Atomic Extents\7f1589881
+Node: Specifiers\7f1590328
+Node: Introduction to Specifiers\7f1592441
+Node: Specifiers In-Depth\7f1594751
+Node: Specifier Instancing\7f1599663
+Node: Specifier Types\7f1602925
+Node: Adding Specifications\7f1607999
+Node: Retrieving Specifications\7f1617361
+Node: Specifier Tag Functions\7f1621096
+Node: Specifier Instancing Functions\7f1624330
+Node: Specifier Example\7f1627737
+Node: Creating Specifiers\7f1630893
+Node: Specifier Validation Functions\7f1633142
+Node: Other Specification Functions\7f1635526
+Node: Faces and Window-System Objects\7f1639345
+Node: Faces\7f1639669
+Node: Merging Faces\7f1641286
+Node: Basic Face Functions\7f1643247
+Node: Face Properties\7f1645345
+Node: Face Convenience Functions\7f1655587
+Node: Other Face Display Functions\7f1658717
+Node: Fonts\7f1659530
+Node: Font Specifiers\7f1660231
+Node: Font Instances\7f1660472
+Node: Font Instance Names\7f1661439
+Node: Font Instance Size\7f1662280
+Node: Font Instance Characteristics\7f1663566
+Node: Font Convenience Functions\7f1664735
+Node: Colors\7f1666025
+Node: Color Specifiers\7f1666465
+Node: Color Instances\7f1666692
+Node: Color Instance Properties\7f1667436
+Node: Color Convenience Functions\7f1668062
+Node: Glyphs\7f1669115
+Node: Glyph Functions\7f1670707
+Node: Creating Glyphs\7f1671114
+Node: Glyph Properties\7f1672701
+Node: Glyph Convenience Functions\7f1681868
+Node: Glyph Dimensions\7f1685815
+Node: Images\7f1686895
+Node: Image Specifiers\7f1687344
+Node: Image Instantiator Conversion\7f1698765
+Node: Image Instances\7f1700130
+Node: Image Instance Types\7f1700881
+Node: Image Instance Functions\7f1703536
+Node: Glyph Types\7f1708105
+Node: Mouse Pointer\7f1709877
+Node: Redisplay Glyphs\7f1712880
+Node: Subwindows\7f1713913
+Node: Annotations\7f1714156
+Node: Annotation Basics\7f1715172
+Node: Annotation Primitives\7f1719110
+Node: Annotation Properties\7f1720439
+Node: Locating Annotations\7f1723479
+Node: Margin Primitives\7f1724316
+Node: Annotation Hooks\7f1726210
+Node: Display\7f1726870
+Node: Refresh Screen\7f1727848
+Node: Truncation\7f1729759
+Node: The Echo Area\7f1732284
+Node: Warnings\7f1738719
+Node: Invisible Text\7f1743155
+Node: Selective Display\7f1745734
+Node: Overlay Arrow\7f1749860
+Node: Temporary Displays\7f1751213
+Node: Blinking\7f1755334
+Node: Usual Display\7f1757519
+Node: Display Tables\7f1760068
+Node: Display Table Format\7f1760872
+Node: Active Display Table\7f1762314
+Node: Character Descriptors\7f1763506
+Node: Beeping\7f1764263
+Node: Hash Tables\7f1769029
+Node: Introduction to Hash Tables\7f1769637
+Node: Working With Hash Tables\7f1775660
+Node: Weak Hash Tables\7f1776777
+Node: Range Tables\7f1778576
+Node: Introduction to Range Tables\7f1779265
+Node: Working With Range Tables\7f1779696
+Node: Databases\7f1780581
+Node: Connecting to a Database\7f1780880
+Node: Working With a Database\7f1781971
+Node: Other Database Functions\7f1782829
+Node: Processes\7f1783403
+Node: Subprocess Creation\7f1785627
+Node: Synchronous Processes\7f1788916
+Node: MS-DOS Subprocesses\7f1795634
+Node: Asynchronous Processes\7f1796708
+Node: Deleting Processes\7f1800421
+Node: Process Information\7f1802292
+Node: Input to Processes\7f1806218
+Node: Signals to Processes\7f1808508
+Node: Output from Processes\7f1812928
+Node: Process Buffers\7f1813740
+Node: Filter Functions\7f1816607
+Node: Accepting Output\7f1822177
+Node: Sentinels\7f1823704
+Node: Process Window Size\7f1827194
+Node: Transaction Queues\7f1827543
+Node: Network\7f1829241
+Node: System Interface\7f1831075
+Node: Starting Up\7f1832345
+Node: Start-up Summary\7f1832939
+Node: Init File\7f1836493
+Node: Terminal-Specific\7f1838874
+Node: Command Line Arguments\7f1842033
+Node: Getting Out\7f1845522
+Node: Killing XEmacs\7f1846091
+Node: Suspending XEmacs\7f1847760
+Node: System Environment\7f1851102
+Node: User Identification\7f1857769
+Node: Time of Day\7f1861298
+Node: Time Conversion\7f1864085
+Node: Timers\7f1869125
+Node: Terminal Input\7f1871298
+Node: Input Modes\7f1871801
+Node: Translating Input\7f1874214
+Node: Recording Input\7f1878379
+Node: Terminal Output\7f1880479
+Node: Flow Control\7f1884102
+Node: Batch Mode\7f1887894
+Node: X-Windows\7f1889276
+Node: X Selections\7f1890147
+Node: X Server\7f1892357
+Node: Resources\7f1892808
+Node: Server Data\7f1898117
+Node: Grabs\7f1899324
+Node: X Miscellaneous\7f1900904
+Node: ToolTalk Support\7f1903289
+Node: XEmacs ToolTalk API Summary\7f1903506
+Node: Sending Messages\7f1904806
+Node: Example of Sending Messages\7f1905057
+Node: Elisp Interface for Sending Messages\7f1906119
+Node: Receiving Messages\7f1912511
+Node: Example of Receiving Messages\7f1912734
+Node: Elisp Interface for Receiving Messages\7f1913570
+Node: LDAP Support\7f1917395
+Node: Building XEmacs with LDAP support\7f1917891
+Node: XEmacs LDAP API\7f1918869
+Node: LDAP Variables\7f1919599
+Node: The High-Level LDAP API\7f1922075
+Node: The Low-Level LDAP API\7f1923180
+Node: The LDAP Lisp Object\7f1923454
+Node: Opening and Closing a LDAP Connection\7f1924007
+Node: Searching on a LDAP Server (Low-level)\7f1925790
+Node: Syntax of Search Filters\7f1927183
+Node: Internationalization\7f1928481
+Node: I18N Levels 1 and 2\7f1928818
+Node: I18N Level 3\7f1929524
+Node: Level 3 Basics\7f1929805
+Node: Level 3 Primitives\7f1930638
+Node: Dynamic Messaging\7f1932244
+Node: Domain Specification\7f1932707
+Node: Documentation String Extraction\7f1934610
+Node: I18N Level 4\7f1935528
+Node: MULE\7f1935720
+Node: Internationalization Terminology\7f1936831
+Node: Charsets\7f1945365
+Node: Charset Properties\7f1946061
+Node: Basic Charset Functions\7f1950747
+Node: Charset Property Functions\7f1952928
+Node: Predefined Charsets\7f1954970
+Node: MULE Characters\7f1957890
+Node: Composite Characters\7f1958737
+Node: ISO 2022\7f1959991
+Node: Coding Systems\7f1966133
+Node: Coding System Types\7f1968054
+Node: EOL Conversion\7f1969873
+Node: Coding System Properties\7f1971056
+Node: Basic Coding System Functions\7f1974908
+Node: Coding System Property Functions\7f1976812
+Node: Encoding and Decoding Text\7f1977370
+Node: Detection of Textual Encoding\7f1978506
+Node: Big5 and Shift-JIS Functions\7f1980042
+Node: CCL\7f1981130
+Node: CCL Syntax\7f1984234
+Node: CCL Statements\7f1985822
+Node: CCL Expressions\7f1990470
+Node: Calling CCL\7f1993009
+Node: CCL Examples\7f1995998
+Node: Category Tables\7f1996135
+Node: Tips\7f1998493
+Node: Style Tips\7f1999134
+Node: Compilation Tips\7f2008653
+Node: Documentation Tips\7f2010567
+Node: Comment Tips\7f2016076
+Node: Library Headers\7f2019078
+Node: Building XEmacs and Object Allocation\7f2023050
+Node: Building XEmacs\7f2023933
+Node: Pure Storage\7f2030268
+Node: Garbage Collection\7f2033056
+Node: Standard Errors\7f2044195
+Node: Standard Buffer-Local Variables\7f2048404
+Node: Standard Keymaps\7f2051037
+Node: Standard Hooks\7f2054769
+Node: Index\7f2062269
 \1f
 End Tag Table
index 9b6e82b..b423272 100644 (file)
@@ -539,14 +539,14 @@ File: lispref.info,  Node: String Properties,  Next: Formatting Strings,  Prev:
 String Properties
 =================
 
-   Similar to symbols, extents, faces, and glyphs, you can attach
+   Just as with symbols, extents, faces, and glyphs, you can attach
 additional information to strings in the form of "string properties".
 These differ from text properties, which are logically attached to
 particular characters in the string.
 
    To attach a property to a string, use `put'.  To retrieve a property
 from a string, use `get'.  You can also use `remprop' to remove a
-property from a string and `object-props' to retrieve a list of all the
+property from a string and `object-plist' to retrieve a list of all the
 properties in a string.
 
 \1f
index b24b1a9..2e16da4 100644 (file)
@@ -853,17 +853,17 @@ File: lispref.info,  Node: Symbol Properties,  Prev: Creating Symbols,  Up: Symb
 Symbol Properties
 =================
 
-   A "property list" ("plist" for short) is a list of paired elements
-stored in the property list cell of a symbol.  Each of the pairs
+   A "property list" ("plist" for short) is a list of paired elements,
+often stored in the property list cell of a symbol.  Each of the pairs
 associates a property name (usually a symbol) with a property or value.
 Property lists are generally used to record information about a
 symbol, such as its documentation as a variable, the name of the file
 where it was defined, or perhaps even the grammatical class of the
 symbol (representing a word) in a language-understanding system.
 
-   Many objects other than symbols can have property lists associated
-with them, and XEmacs provides a full complement of functions for
-working with property lists.  *Note Property Lists::.
+   Some objects which are not symbols also have property lists
+associated with them, and XEmacs provides a full complement of
+functions for working with property lists.  *Note Property Lists::.
 
    The property names and values in a property list can be any Lisp
 objects, but the names are usually symbols.  They are compared using
@@ -879,11 +879,11 @@ the other two elements are the corresponding values.
 
 * Plists and Alists::           Comparison of the advantages of property
                                   lists and association lists.
-* Symbol Plists::               Functions to access symbols' property lists.
+* Object Plists::               Functions to access objects' property lists.
 * Other Plists::                Accessing property lists stored elsewhere.
 
 \1f
-File: lispref.info,  Node: Plists and Alists,  Next: Symbol Plists,  Up: Symbol Properties
+File: lispref.info,  Node: Plists and Alists,  Next: Object Plists,  Up: Symbol Properties
 
 Property Lists and Association Lists
 ------------------------------------
@@ -916,14 +916,22 @@ are pushed on the front of the list and later discarded; this is not
 possible with a property list.
 
 \1f
-File: lispref.info,  Node: Symbol Plists,  Next: Other Plists,  Prev: Plists and Alists,  Up: Symbol Properties
+File: lispref.info,  Node: Object Plists,  Next: Other Plists,  Prev: Plists and Alists,  Up: Symbol Properties
 
-Property List Functions for Symbols
+Property List Functions for Objects
 -----------------------------------
 
+   Once upon a time, only symbols had property lists.  Now, several
+other object types, including strings, extents, faces and glyphs also
+have property lists.
+
  - Function: symbol-plist symbol
      This function returns the property list of SYMBOL.
 
+ - Function: object-plist object
+     This function returns the property list of OBJECT.  If OBJECT is a
+     symbol, this is identical to `symbol-plist'.
+
  - Function: setplist symbol plist
      This function sets SYMBOL's property list to PLIST.  Normally,
      PLIST should be a well-formed property list, but this is not
@@ -937,21 +945,22 @@ Property List Functions for Symbols
      For symbols in special obarrays, which are not used for ordinary
      purposes, it may make sense to use the property list cell in a
      nonstandard fashion; in fact, the abbrev mechanism does so (*note
-     Abbrevs::).
+     Abbrevs::).  But generally, its use is discouraged.  Use `put'
+     instead.  `setplist' can only be used with symbols, not other
+     object types.
 
- - Function: get symbol property
+ - Function: get object property &optional default
      This function finds the value of the property named PROPERTY in
-     SYMBOL's property list.  If there is no such property, `nil' is
-     returned.  Thus, there is no distinction between a value of `nil'
-     and the absence of the property.
+     OBJECT's property list.  If there is no such property, `default'
+     (which itself defaults to `nil') is returned.
 
-     The name PROPERTY is compared with the existing property names
-     using `eq', so any object is a legitimate property.
+     PROPERTY is compared with the existing properties using `eq', so
+     any object is a legitimate property.
 
      See `put' for an example.
 
- - Function: put symbol property value
-     This function puts VALUE onto SYMBOL's property list under the
+ - Function: put object property value
+     This function puts VALUE onto OBJECT's property list under the
      property name PROPERTY, replacing any previous property value.
      The `put' function returns VALUE.
 
@@ -961,14 +970,24 @@ Property List Functions for Symbols
                => (a buzzing little bug)
           (get 'fly 'verb)
                => transitive
-          (symbol-plist 'fly)
+          (object-plist 'fly)
                => (verb transitive noun (a buzzing little bug))
 
+ - Function: remprop object property
+     This function removes the entry for PROPERTY from the property
+     list of OBJECT.  It returns `t' if the property was indeed found
+     and removed, or `nil' if there was no such property.  (This
+     function was probably omitted from Emacs originally because, since
+     `get' did not allow a DEFAULT, it was very difficult to
+     distinguish between a missing property and a property whose value
+     was `nil'; thus, setting a property to `nil' was close enough to
+     `remprop' for most purposes.)
+
 \1f
-File: lispref.info,  Node: Other Plists,  Prev: Symbol Plists,  Up: Symbol Properties
+File: lispref.info,  Node: Other Plists,  Prev: Object Plists,  Up: Symbol Properties
 
-Property Lists Outside Symbols
-------------------------------
+Property Lists Not Associated with Objects
+------------------------------------------
 
    These functions are useful for manipulating property lists that are
 stored in places other than symbols:
@@ -1245,40 +1264,3 @@ starting with "all other types" which are self-evaluating forms.
 * Autoloading::             Functions set up to load files
                               containing their real definitions.
 
-\1f
-File: lispref.info,  Node: Self-Evaluating Forms,  Next: Symbol Forms,  Up: Forms
-
-Self-Evaluating Forms
----------------------
-
-   A "self-evaluating form" is any form that is not a list or symbol.
-Self-evaluating forms evaluate to themselves: the result of evaluation
-is the same object that was evaluated.  Thus, the number 25 evaluates to
-25, and the string `"foo"' evaluates to the string `"foo"'.  Likewise,
-evaluation of a vector does not cause evaluation of the elements of the
-vector--it returns the same vector with its contents unchanged.
-
-     '123               ; An object, shown without evaluation.
-          => 123
-     123                ; Evaluated as usual--result is the same.
-          => 123
-     (eval '123)        ; Evaluated "by hand"--result is the same.
-          => 123
-     (eval (eval '123)) ; Evaluating twice changes nothing.
-          => 123
-
-   It is common to write numbers, characters, strings, and even vectors
-in Lisp code, taking advantage of the fact that they self-evaluate.
-However, it is quite unusual to do this for types that lack a read
-syntax, because there's no way to write them textually.  It is possible
-to construct Lisp expressions containing these types by means of a Lisp
-program.  Here is an example:
-
-     ;; Build an expression containing a buffer object.
-     (setq buffer (list 'print (current-buffer)))
-          => (print #<buffer eval.texi>)
-     ;; Evaluate it.
-     (eval buffer)
-          -| #<buffer eval.texi>
-          => #<buffer eval.texi>
-
index 445d0fc..e9ddbe6 100644 (file)
@@ -50,6 +50,43 @@ may be included in a translation approved by the Free Software
 Foundation instead of in the original English.
 
 \1f
+File: lispref.info,  Node: Self-Evaluating Forms,  Next: Symbol Forms,  Up: Forms
+
+Self-Evaluating Forms
+---------------------
+
+   A "self-evaluating form" is any form that is not a list or symbol.
+Self-evaluating forms evaluate to themselves: the result of evaluation
+is the same object that was evaluated.  Thus, the number 25 evaluates to
+25, and the string `"foo"' evaluates to the string `"foo"'.  Likewise,
+evaluation of a vector does not cause evaluation of the elements of the
+vector--it returns the same vector with its contents unchanged.
+
+     '123               ; An object, shown without evaluation.
+          => 123
+     123                ; Evaluated as usual--result is the same.
+          => 123
+     (eval '123)        ; Evaluated "by hand"--result is the same.
+          => 123
+     (eval (eval '123)) ; Evaluating twice changes nothing.
+          => 123
+
+   It is common to write numbers, characters, strings, and even vectors
+in Lisp code, taking advantage of the fact that they self-evaluate.
+However, it is quite unusual to do this for types that lack a read
+syntax, because there's no way to write them textually.  It is possible
+to construct Lisp expressions containing these types by means of a Lisp
+program.  Here is an example:
+
+     ;; Build an expression containing a buffer object.
+     (setq buffer (list 'print (current-buffer)))
+          => (print #<buffer eval.texi>)
+     ;; Evaluate it.
+     (eval buffer)
+          -| #<buffer eval.texi>
+          => #<buffer eval.texi>
+
+\1f
 File: lispref.info,  Node: Symbol Forms,  Next: Classifying Lists,  Prev: Self-Evaluating Forms,  Up: Forms
 
 Symbol Forms
index 354d52c..07877cd 100644 (file)
@@ -1,3 +1,12 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-13  Martin Buchholz  <martin@xemacs.org>
+
+       * etags.c: Upgrade to version 13.44.
+       Only added (unsigned char) casts to calls like isspace (*cp).
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
index 7c689b8..15099ce 100644 (file)
@@ -44,8 +44,8 @@ Boston, MA 02111-1307, USA.  */
 static void *xmalloc (size_t);
 static void *xrealloc (void *, size_t);
 static void skip_to_lf (FILE *stream);
-static void fatal (CONST char *s1, CONST char *s2);
-static void error (CONST char *s1, CONST char *s2);
+static void fatal (const char *s1, const char *s2);
+static void error (const char *s1, const char *s2);
 
 int
 main (int argc, char *argv[])
@@ -139,14 +139,14 @@ xrealloc (void *ptr, size_t size)
 /* Print error message and exit.  */
 
 static void
-fatal (CONST char *s1, CONST char *s2)
+fatal (const char *s1, const char *s2)
 {
   error (s1, s2);
   exit (1);
 }
 
 static void
-error (CONST char *s1, CONST char *s2)
+error (const char *s1, const char *s2)
 {
   fprintf (stderr, "cvtmail: ");
   fprintf (stderr, s1, s2);
index c8bfb8c..0207a92 100644 (file)
@@ -109,7 +109,7 @@ main (int argc, char *argv[])
 #endif
 static void *xmalloc (size_t);
 static void fatal (char *, char *);
-static void add_to_argv (CONST char *);
+static void add_to_argv (const char *);
 static void do_compile_mode (void);
 static void do_link_mode (void);
 static void do_init_mode (void);
@@ -346,12 +346,12 @@ fatal (char *s1, char *s2)
  * arguments, taking quoting into account. This can get ugly.
  */
 static void
-add_to_argv (CONST char *str)
+add_to_argv (const char *str)
 {
   int sm = 0;
-  CONST char *s = (CONST char *)0;
+  const char *s = (const char *)0;
 
-  if ((str == (CONST char *)0) || (str[0] == '\0'))
+  if ((str == (const char *)0) || (str[0] == '\0'))
     return;
 
   while (*str)
@@ -378,7 +378,7 @@ add_to_argv (CONST char *str)
               exec_argv[real_argc][l] = '\0';
               real_argc++;
               sm = 0; /* Back to start state */
-              s = (CONST char *)0;
+              s = (const char *)0;
               break;
             }
           else if (*str == '\\')
@@ -423,14 +423,14 @@ add_to_argv (CONST char *str)
         }
     }
 
-  if (s != (CONST char *)0)
+  if (s != (const char *)0)
     {
       int l = str-s;
       exec_argv[real_argc] = xnew (l+2, char);
       strncpy (exec_argv[real_argc], s, l);
       exec_argv[real_argc][l] = '\0';
       real_argc++;
-      s = (CONST char *)0;
+      s = (const char *)0;
     }
 }
 
index 12bdc61..680f145 100644 (file)
@@ -29,10 +29,9 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  *     Regexp tags by Tom Tromey.
  *
  *     Francesco Potorti` (pot@gnu.org) is the current maintainer.
- *     Ansified by Martin Buchholz, 19991105.
  */
 
-char pot_etags_version[] = "@(#) pot revision number is 13.33";
+char pot_etags_version[] = "@(#) pot revision number is 13.44";
 
 #define        TRUE    1
 #define        FALSE   0
@@ -41,6 +40,12 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33";
 # define DEBUG FALSE
 #endif
 
+#if defined(__STDC__) && (__STDC__ || defined(__SUNPRO_C))
+# define P_(proto) proto
+#else
+# define P_(proto) ()
+#endif
+
 #ifdef HAVE_CONFIG_H
 # include <config.h>
   /* On some systems, Emacs defines static as nothing for the sake
@@ -55,6 +60,8 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33";
 #endif
 
 #ifdef MSDOS
+# undef MSDOS
+# define MSDOS TRUE
 # include <fcntl.h>
 # include <sys/param.h>
 # include <io.h>
@@ -62,12 +69,15 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33";
 #   define DOS_NT
 #   include <sys/config.h>
 # endif
+#else
+# define MSDOS FALSE
 #endif /* MSDOS */
 
 #ifdef WINDOWSNT
 # include <stdlib.h>
 # include <fcntl.h>
 # include <string.h>
+# include <direct.h>
 # include <io.h>
 # define MAXPATHLEN _MAX_PATH
 # ifdef HAVE_CONFIG_H
@@ -78,24 +88,29 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33";
 # ifndef HAVE_GETCWD
 #   define HAVE_GETCWD
 # endif /* undef HAVE_GETCWD */
-#endif /* WINDOWSNT */
-
-#if !defined (WINDOWSNT) && defined (STDC_HEADERS)
-#include <stdlib.h>
-#include <string.h>
-#endif
+#else /* !WINDOWSNT */
+# ifdef STDC_HEADERS
+#  include <stdlib.h>
+#  include <string.h>
+# else
+    extern char *getenv ();
+# endif
+#endif /* !WINDOWSNT */
 
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #else
-# ifdef HAVE_GETCWD
-    extern char *getcwd ();
+# if defined (HAVE_GETCWD) && !WINDOWSNT
+    extern char *getcwd (char *buf, size_t size);
 # endif
 #endif /* HAVE_UNISTD_H */
 
 #include <stdio.h>
 #include <ctype.h>
 #include <errno.h>
+#ifndef errno
+  extern int errno;
+#endif
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -175,7 +190,7 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33";
 
 typedef int bool;
 
-typedef void Lang_function ();
+typedef void Lang_function P_((FILE *));
 
 typedef struct
 {
@@ -220,74 +235,80 @@ typedef struct
 /* Many compilers barf on this:
        Lang_function Ada_funcs;
    so let's write it this way */
-void Ada_funcs (FILE *inf);
-void Asm_labels (FILE *inf);
-void C_entries (int c_ext, FILE *inf);
-void default_C_entries (FILE *inf);
-void plain_C_entries (FILE *inf);
-void Cjava_entries (FILE *inf);
-void Cobol_paragraphs (FILE *inf);
-void Cplusplus_entries (FILE *inf);
-void Cstar_entries (FILE *inf);
-void Erlang_functions (FILE *inf);
-void Fortran_functions (FILE *inf);
-void Yacc_entries (FILE *inf);
-void Lisp_functions (FILE *inf);
-void Pascal_functions (FILE *inf);
-void Perl_functions (FILE *inf);
-void Postscript_functions (FILE *inf);
-void Prolog_functions (FILE *inf);
-void Python_functions (FILE *inf);
-void Scheme_functions (FILE *inf);
-void TeX_functions (FILE *inf);
-void just_read_file (FILE *inf);
-
-compressor *get_compressor_from_suffix (char *file, char **extptr);
-language *get_language_from_name (char *name);
-language *get_language_from_interpreter (char *interpreter);
-language *get_language_from_suffix (char *file);
-int total_size_of_entries (register node *np);
-long readline (linebuffer *lbp, FILE *stream);
-long readline_internal (linebuffer *lbp, register FILE *stream);
-void get_tag (register char *bp);
+static void Ada_funcs P_((FILE *));
+static void Asm_labels P_((FILE *));
+static void C_entries P_((int c_ext, FILE *));
+static void default_C_entries P_((FILE *));
+static void plain_C_entries P_((FILE *));
+static void Cjava_entries P_((FILE *));
+static void Cobol_paragraphs P_((FILE *));
+static void Cplusplus_entries P_((FILE *));
+static void Cstar_entries P_((FILE *));
+static void Erlang_functions P_((FILE *));
+static void Fortran_functions P_((FILE *));
+static void Yacc_entries P_((FILE *));
+static void Lisp_functions P_((FILE *));
+static void Pascal_functions P_((FILE *));
+static void Perl_functions P_((FILE *));
+static void Postscript_functions P_((FILE *));
+static void Prolog_functions P_((FILE *));
+static void Python_functions P_((FILE *));
+static void Scheme_functions P_((FILE *));
+static void TeX_functions P_((FILE *));
+static void just_read_file P_((FILE *));
+
+static void print_language_names P_((void));
+static void print_version P_((void));
+static void print_help P_((void));
+int main P_((int, char **));
+static int number_len P_((long));
+
+static compressor *get_compressor_from_suffix P_((char *, char **));
+static language *get_language_from_name P_((char *));
+static language *get_language_from_interpreter P_((char *));
+static language *get_language_from_suffix P_((char *));
+static int total_size_of_entries P_((node *));
+static long readline P_((linebuffer *, FILE *));
+static long readline_internal P_((linebuffer *, FILE *));
+static void get_tag P_((char *));
 
 #ifdef ETAGS_REGEXPS
-void analyse_regex (char *regex_arg, bool ignore_case);
-void add_regex (char *regexp_pattern, bool ignore_case, language *lan);
-void free_patterns (void);
+static void analyse_regex P_((char *, bool));
+static void add_regex P_((char *, bool, language *));
+static void free_patterns P_((void));
 #endif /* ETAGS_REGEXPS */
-void error (const char *s1, const char *s2);
-void suggest_asking_for_help (void);
-void fatal (char *s1, char *s2);
-void pfatal (char *s1);
-void add_node (node *np, node **cur_node_p);
-
-void init (void);
-void initbuffer (linebuffer *lbp);
-void find_entries (char *file, FILE *inf);
-void free_tree (register node *np);
-void pfnote (char *name, bool is_func, char *linestart, int linelen, int lno, long int cno);
-void new_pfnote (char *name, int namelen, bool is_func, char *linestart, int linelen, int lno, long int cno);
-void process_file (char *file);
-void put_entries (register node *np);
-void takeprec (void);
-
-char *concat (char *s1, char *s2, char *s3);
-char *skip_spaces (char *cp);
-char *skip_non_spaces (char *cp);
-char *savenstr (char *cp, int len);
-char *savestr (char *cp);
-char *etags_strchr (const char *sp, int c);
-char *etags_strrchr (const char *sp, int c);
-char *etags_getcwd (void);
-char *relative_filename (char *file, char *dir);
-char *absolute_filename (char *file, char *dir);
-char *absolute_dirname (char *file, char *dir);
-bool filename_is_absolute (char *fn);
-void canonicalize_filename (register char *fn);
-void grow_linebuffer (linebuffer *lbp, int toksize);
-long *xmalloc (unsigned int size);
-long *xrealloc (char *ptr, unsigned int size);
+static void error P_((const char *, const char *));
+static void suggest_asking_for_help P_((void));
+static void fatal P_((char *, char *));
+static void pfatal P_((char *));
+static void add_node P_((node *, node **));
+
+static void init P_((void));
+static void initbuffer P_((linebuffer *));
+static void find_entries P_((char *, FILE *));
+static void free_tree P_((node *));
+static void pfnote P_((char *, bool, char *, int, int, long));
+static void new_pfnote P_((char *, int, bool, char *, int, int, long));
+static void process_file P_((char *));
+static void put_entries P_((node *));
+static void takeprec P_((void));
+
+static char *concat P_((char *, char *, char *));
+static char *skip_spaces P_((char *));
+static char *skip_non_spaces P_((char *));
+static char *savenstr P_((char *, int));
+static char *savestr P_((char *));
+static char *etags_strchr P_((const char *, int));
+static char *etags_strrchr P_((const char *, int));
+static char *etags_getcwd P_((void));
+static char *relative_filename P_((char *, char *));
+static char *absolute_filename P_((char *, char *));
+static char *absolute_dirname P_((char *, char *));
+static bool filename_is_absolute P_((char *f));
+static void canonicalize_filename P_((char *));
+static void grow_linebuffer P_((linebuffer *, int));
+static long *xmalloc P_((unsigned int));
+static long *xrealloc P_((char *, unsigned int));
 
 \f
 char searchar = '/';           /* use /.../ searches */
@@ -320,7 +341,7 @@ struct
 bool _wht[CHARS], _nin[CHARS], _itk[CHARS], _btk[CHARS], _etk[CHARS];
 char
   /* white chars */
-  *white = " \f\t\n\r",
+  *white = " \f\t\n\r\v",
   /* not in a name */
   *nonam = " \f\t\n\r(=,[;",
   /* token ending chars */
@@ -562,19 +583,16 @@ Fortran is tried first; if no tags are found, C is tried next.\n\
 Compressed files are supported using gzip and bzip2.");
 }
 
-#ifdef XEMACS
-# define EMACS_NAME "XEmacs"
-#else
+#ifndef EMACS_NAME
 # define EMACS_NAME "GNU Emacs"
 #endif
-
 #ifndef VERSION
-# define VERSION "20"
+# define VERSION "21"
 #endif
 static void
 print_version ()
 {
-  printf ("%s (" EMACS_NAME " %s)\n", (CTAGS) ? "ctags" : "etags", VERSION);
+  printf ("%s (%s %s)\n", (CTAGS) ? "ctags" : "etags", EMACS_NAME, VERSION);
   puts ("Copyright (C) 1999 Free Software Foundation, Inc. and Ken Arnold");
   puts ("This program is distributed under the same terms as Emacs");
 
@@ -762,7 +780,7 @@ typedef struct      {
 #include       <rmsdef.h>
 #include       <descrip.h>
 #define                OUTSIZE MAX_FILE_SPEC_LEN
-short
+static short
 fn_exp (out, in)
      vspec *out;
      char *in;
@@ -807,7 +825,7 @@ fn_exp (out, in)
   v1.01 nmm 19-Aug-85 gfnames - return in successive calls the
   name of each file specified by the provided arg expanding wildcards.
 */
-char *
+static char *
 gfnames (arg, p_error)
      char *arg;
      bool *p_error;
@@ -1183,7 +1201,7 @@ main (argc, argv)
  * and EXTPTR is not significant.
  * Idea by Vladimir Alexiev <vladimir@cs.ualberta.ca>
  */
-compressor *
+static compressor *
 get_compressor_from_suffix (file, extptr)
      char *file;
      char **extptr;
@@ -1203,21 +1221,16 @@ get_compressor_from_suffix (file, extptr)
   /* Let those poor souls who live with DOS 8+3 file name limits get
      some solace by treating foo.cgz as if it were foo.c.gz, etc.
      Only the first do loop is run if not MSDOS */
-#ifdef MSDOS
   do
     {
       for (compr = compressors; compr->suffix != NULL; compr++)
        if (streq (compr->suffix, suffix))
          return compr;
+      if (!MSDOS)
+       break;                  /* do it only once: not really a loop */
       if (extptr != NULL)
        *extptr = ++suffix;
     } while (*suffix != '\0');
-#else
-  for (compr = compressors; compr->suffix != NULL; compr++)
-    if (streq (compr->suffix, suffix))
-      return compr;
-#endif
-
   return NULL;
 }
 
@@ -1226,7 +1239,7 @@ get_compressor_from_suffix (file, extptr)
 /*
  * Return a language given the name.
  */
-language *
+static language *
 get_language_from_name (name)
      char *name;
 {
@@ -1249,7 +1262,7 @@ get_language_from_name (name)
 /*
  * Return a language given the interpreter name.
  */
-language *
+static language *
 get_language_from_interpreter (interpreter)
      char *interpreter;
 {
@@ -1272,7 +1285,7 @@ get_language_from_interpreter (interpreter)
 /*
  * Return a language given the file name.
  */
-language *
+static language *
 get_language_from_suffix (file)
      char *file;
 {
@@ -1296,7 +1309,7 @@ get_language_from_suffix (file)
 /*
  * This routine is called on each file argument.
  */
-void
+static void
 process_file (file)
      char *file;
 {
@@ -1360,21 +1373,22 @@ process_file (file)
              compressed_name = concat (file, ".", compr->suffix);
              if (stat (compressed_name, &stat_buf) != 0)
                {
-#ifdef MSDOS
-                 char *suf = compressed_name + strlen (file);
-                 size_t suflen = strlen (compr->suffix) + 1;
-                 for ( ; suf[1]; suf++, suflen--)
+                 if (MSDOS)
                    {
-                     memmove (suf, suf + 1, suflen);
-                     if (stat (compressed_name, &stat_buf) == 0)
+                     char *suf = compressed_name + strlen (file);
+                     size_t suflen = strlen (compr->suffix) + 1;
+                     for ( ; suf[1]; suf++, suflen--)
                        {
-                         real_name = compressed_name;
-                         break;
+                         memmove (suf, suf + 1, suflen);
+                         if (stat (compressed_name, &stat_buf) == 0)
+                           {
+                             real_name = compressed_name;
+                             break;
+                           }
                        }
-                   }
-                 if (real_name != NULL)
-                   break;
-#endif
+                     if (real_name != NULL)
+                       break;
+                   } /* MSDOS */
                  free (compressed_name);
                  compressed_name = NULL;
                }
@@ -1454,7 +1468,7 @@ process_file (file)
  * subscripted by the chars in "white" are set to TRUE.  Thus "_wht"
  * of a char is TRUE if it is the string "white", else FALSE.
  */
-void
+static void
 init ()
 {
   register char *sp;
@@ -1464,13 +1478,12 @@ init ()
     iswhite(i) = notinname(i) = begtoken(i) = intoken(i) = endtoken(i) = FALSE;
   for (sp = white; *sp != '\0'; sp++) iswhite (*sp) = TRUE;
   for (sp = nonam; *sp != '\0'; sp++) notinname (*sp) = TRUE;
-  for (sp = begtk; *sp != '\0'; sp++) begtoken (*sp) = TRUE;
-  for (sp = midtk; *sp != '\0'; sp++) intoken (*sp) = TRUE;
-  for (sp = endtk; *sp != '\0'; sp++) endtoken (*sp) = TRUE;
-  iswhite('\0') = iswhite('\n');
   notinname('\0') = notinname('\n');
+  for (sp = begtk; *sp != '\0'; sp++) begtoken (*sp) = TRUE;
   begtoken('\0') = begtoken('\n');
+  for (sp = midtk; *sp != '\0'; sp++) intoken (*sp) = TRUE;
   intoken('\0') = intoken('\n');
+  for (sp = endtk; *sp != '\0'; sp++) endtoken (*sp) = TRUE;
   endtoken('\0') = endtoken('\n');
 }
 
@@ -1480,7 +1493,7 @@ init ()
  */
 node *last_node = NULL;
 
-void
+static void
 find_entries (file, inf)
      char *file;
      FILE *inf;
@@ -1567,7 +1580,7 @@ find_entries (file, inf)
 }
 \f
 /* Record a tag. */
-void
+static void
 pfnote (name, is_func, linestart, linelen, lno, cno)
      char *name;               /* tag name, or NULL if unnamed */
      bool is_func;             /* tag is a function */
@@ -1637,7 +1650,7 @@ pfnote (name, is_func, linestart, linelen, lno, cno)
  * `nonam'.
  */
 #define traditional_tag_style TRUE
-void
+static void
 new_pfnote (name, namelen, is_func, linestart, linelen, lno, cno)
      char *name;               /* tag name, or NULL if unnamed */
      int namelen;              /* tag length */
@@ -1679,7 +1692,7 @@ new_pfnote (name, namelen, is_func, linestart, linelen, lno, cno)
  * free_tree ()
  *     recurse on left children, iterate on right children.
  */
-void
+static void
 free_tree (np)
      register node *np;
 {
@@ -1704,7 +1717,7 @@ free_tree (np)
  *     add_node is the only function allowed to add nodes, so it can
  *     maintain state.
  */
-void
+static void
 add_node (np, cur_node_p)
      node *np, **cur_node_p;
 {
@@ -1762,7 +1775,7 @@ add_node (np, cur_node_p)
     }
 }
 \f
-void
+static void
 put_entries (np)
      register node *np;
 {
@@ -1846,7 +1859,7 @@ number_len (num)
  * is irrelevant with the new tags.el, but is still supplied for
  * backward compatibility.
  */
-int
+static int
 total_size_of_entries (np)
      register node *np;
 {
@@ -1884,6 +1897,10 @@ enum sym_type
   st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef, st_C_typespec
 };
 
+static unsigned int hash P_((const char *, unsigned int));
+static struct C_stab_entry * in_word_set P_((const char *, unsigned int));
+static enum sym_type C_symtype P_((char *, int, int));
+
 /* Feed stuff between (but not including) %[ and %] lines to:
       gperf -c -k 1,3 -o -p -r -t
 %[
@@ -2245,6 +2262,9 @@ bool yacc_rules;
  */
 int methodlen;
 
+static bool consider_token P_((char *, int, int, int, int, int, bool *));
+static void make_C_tag P_((bool));
+
 /*
  * consider_token ()
  *     checks to see if the current token is at the start of a
@@ -2267,7 +2287,7 @@ static bool
 consider_token (str, len, c, c_ext, cblev, parlev, is_func_or_var)
      register char *str;       /* IN: token pointer */
      register int len;         /* IN: token length */
-     register char c;          /* IN: first char after the token */
+     register int c;           /* IN: first char after the token */
      int c_ext;                        /* IN: C extensions mask */
      int cblev;                        /* IN: curly brace level */
      int parlev;               /* IN: parenthesis level */
@@ -2597,7 +2617,7 @@ make_C_tag (isfun)
 }
 
 
-void
+static void
 C_entries (c_ext, inf)
      int c_ext;                        /* extension of C */
      FILE *inf;                        /* input file */
@@ -2819,7 +2839,7 @@ C_entries (c_ext, inf)
                              if (*lp != '\0')
                                lp += 1;
                              while (*lp != '\0'
-                                    && !isspace (*lp) && *lp != '(')
+                                    && !iswhite (*lp) && *lp != '(')
                                lp += 1;
                              c = *lp++;
                              toklen += lp - oldlp;
@@ -3270,7 +3290,7 @@ C_entries (c_ext, inf)
  * Process either a C++ file or a C file depending on the setting
  * of a global flag.
  */
-void
+static void
 default_C_entries (inf)
      FILE *inf;
 {
@@ -3278,7 +3298,7 @@ default_C_entries (inf)
 }
 
 /* Always do plain ANSI C. */
-void
+static void
 plain_C_entries (inf)
      FILE *inf;
 {
@@ -3286,7 +3306,7 @@ plain_C_entries (inf)
 }
 
 /* Always do C++. */
-void
+static void
 Cplusplus_entries (inf)
      FILE *inf;
 {
@@ -3294,7 +3314,7 @@ Cplusplus_entries (inf)
 }
 
 /* Always do Java. */
-void
+static void
 Cjava_entries (inf)
      FILE *inf;
 {
@@ -3302,7 +3322,7 @@ Cjava_entries (inf)
 }
 
 /* Always do C*. */
-void
+static void
 Cstar_entries (inf)
      FILE *inf;
 {
@@ -3310,7 +3330,7 @@ Cstar_entries (inf)
 }
 
 /* Always do Yacc. */
-void
+static void
 Yacc_entries (inf)
      FILE *inf;
 {
@@ -3333,7 +3353,7 @@ Yacc_entries (inf)
  * Read a file, but do no processing.  This is used to do regexp
  * matching on files that have no language defined.
  */
-void
+static void
 just_read_file (inf)
      FILE *inf;
 {
@@ -3345,6 +3365,10 @@ just_read_file (inf)
 \f
 /* Fortran parsing */
 
+static bool tail P_((char *));
+static void takeprec P_((void));
+static void getit P_((FILE *));
+
 static bool
 tail (cp)
      char *cp;
@@ -3361,7 +3385,7 @@ tail (cp)
   return FALSE;
 }
 
-void
+static void
 takeprec ()
 {
   dbp = skip_spaces (dbp);
@@ -3374,14 +3398,14 @@ takeprec ()
       dbp += 3;
       return;
     }
-  if (!isdigit (*dbp))
+  if (!isdigit ((unsigned char) *dbp))
     {
       --dbp;                   /* force failure */
       return;
     }
   do
     dbp++;
-  while (isdigit (*dbp));
+  while (isdigit ((unsigned char) *dbp));
 }
 
 static void
@@ -3402,7 +3426,7 @@ getit (inf)
       dbp += 6;
       dbp = skip_spaces (dbp);
     }
-  if (!isalpha (*dbp) && *dbp != '_' && *dbp != '$')
+  if (!isalpha ((unsigned char) *dbp) && *dbp != '_' && *dbp != '$')
     return;
   for (cp = dbp + 1; *cp != '\0' && intoken (*cp); cp++)
     continue;
@@ -3411,7 +3435,7 @@ getit (inf)
 }
 
 
-void
+static void
 Fortran_functions (inf)
      FILE *inf;
 {
@@ -3488,6 +3512,9 @@ Fortran_functions (inf)
  * Philippe Waroquiers <philippe.waroquiers@eurocontrol.be>, 1998-04-24
  * Ada parsing
  */
+
+static void adagetit P_((FILE *, char *));
+
 /* Once we are positioned after an "interesting" keyword, let's get
    the real tag value necessary. */
 static void
@@ -3540,7 +3567,7 @@ adagetit (inf, name_qualifier)
          dbp = skip_spaces (dbp);
          for (cp = dbp;
               (*cp != '\0'
-               && (isalpha (*cp) || isdigit (*cp) || *cp == '_' || *cp == '.'));
+               && (isalpha ((unsigned char) *cp) || isdigit ((unsigned char) *cp) || *cp == '_' || *cp == '.'));
               cp++)
            continue;
          if (cp == dbp)
@@ -3557,7 +3584,7 @@ adagetit (inf, name_qualifier)
     }
 }
 
-void
+static void
 Ada_funcs (inf)
      FILE *inf;
 {
@@ -3654,7 +3681,7 @@ Ada_funcs (inf)
  * Unix and microcontroller assembly tag handling
  * look for '^[a-zA-Z_.$][a-zA_Z0-9_.$]*[: ^I^J]'
  */
-void
+static void
 Asm_labels (inf)
      FILE *inf;
 {
@@ -3664,13 +3691,13 @@ Asm_labels (inf)
     {
       /* If first char is alphabetic or one of [_.$], test for colon
         following identifier. */
-      if (isalpha (*cp) || *cp == '_' || *cp == '.' || *cp == '$')
+      if (isalpha ((unsigned char) *cp) || *cp == '_' || *cp == '.' || *cp == '$')
        {
          /* Read past label. */
          cp++;
-         while (isalnum (*cp) || *cp == '_' || *cp == '.' || *cp == '$')
+         while (isalnum ((unsigned char) *cp) || *cp == '_' || *cp == '.' || *cp == '$')
            cp++;
-         if (*cp == ':' || isspace (*cp))
+         if (*cp == ':' || iswhite (*cp))
            {
              /* Found end of label, so copy it and add it to the table. */
              pfnote (savenstr(lb.buffer, cp-lb.buffer), TRUE,
@@ -3686,7 +3713,7 @@ Asm_labels (inf)
  * Perl sub names: look for /^sub[ \t\n]+[^ \t\n{]+/
  * Perl variable names: /^(my|local).../
  */
-void
+static void
 Perl_functions (inf)
      FILE *inf;
 {
@@ -3696,14 +3723,14 @@ Perl_functions (inf)
     {
       if (*cp++ == 's'
          && *cp++ == 'u'
-         && *cp++ == 'b' && isspace (*cp++))
+         && *cp++ == 'b' && iswhite (*cp++))
        {
          cp = skip_spaces (cp);
          if (*cp != '\0')
            {
              char *sp = cp;
              while (*cp != '\0'
-                    && !isspace (*cp) && *cp != '{' && *cp != '(')
+                    && !iswhite (*cp) && *cp != '{' && *cp != '(')
                cp++;
              pfnote (savenstr (sp, cp-sp), TRUE,
                      lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
@@ -3719,7 +3746,7 @@ Perl_functions (inf)
                        && *cp++ == 'c'
                        && *cp++ == 'a'
                        && *cp++ == 'l'))
-               && (*cp == '(' || isspace (*cp)))
+               && (*cp == '(' || iswhite (*cp)))
        {
          /* After "my" or "local", but before any following paren or space. */
          char *varname = NULL;
@@ -3728,7 +3755,7 @@ Perl_functions (inf)
          if (*cp == '$' || *cp == '@' || *cp == '%')
            {
              char* varstart = ++cp;
-             while (isalnum (*cp) || *cp == '_')
+             while (isalnum ((unsigned char) *cp) || *cp == '_')
                cp++;
              varname = savenstr (varstart, cp-varstart);
            }
@@ -3752,7 +3779,7 @@ Perl_functions (inf)
  * Python support by Eric S. Raymond <esr@thyrsus.com>
  * Look for /^def[ \t\n]+[^ \t\n(:]+/ or /^class[ \t\n]+[^ \t\n(:]+/
  */
-void
+static void
 Python_functions (inf)
      FILE *inf;
 {
@@ -3762,10 +3789,10 @@ Python_functions (inf)
     {
       if (*cp++ == 'd'
          && *cp++ == 'e'
-         && *cp++ == 'f' && isspace (*cp++))
+         && *cp++ == 'f' && iswhite (*cp++))
        {
          cp = skip_spaces (cp);
-         while (*cp != '\0' && !isspace (*cp) && *cp != '(' && *cp != ':')
+         while (*cp != '\0' && !iswhite (*cp) && *cp != '(' && *cp != ':')
            cp++;
          pfnote (NULL, TRUE,
                  lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
@@ -3776,10 +3803,10 @@ Python_functions (inf)
          && *cp++ == 'l'
          && *cp++ == 'a'
          && *cp++ == 's'
-         && *cp++ == 's' && isspace (*cp++))
+         && *cp++ == 's' && iswhite (*cp++))
        {
          cp = skip_spaces (cp);
-         while (*cp != '\0' && !isspace (*cp) && *cp != '(' && *cp != ':')
+         while (*cp != '\0' && !iswhite (*cp) && *cp != '(' && *cp != ':')
            cp++;
          pfnote (NULL, TRUE,
                  lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
@@ -3792,7 +3819,7 @@ Python_functions (inf)
  * We could look for anything that could be a paragraph name.
  * i.e. anything that starts in column 8 is one word and ends in a full stop.
  */
-void
+static void
 Cobol_paragraphs (inf)
      FILE *inf;
 {
@@ -3805,10 +3832,10 @@ Cobol_paragraphs (inf)
       bp += 8;
 
       /* If eoln, compiler option or comment ignore whole line. */
-      if (bp[-1] != ' ' || !isalnum (bp[0]))
+      if (bp[-1] != ' ' || !isalnum ((unsigned char) bp[0]))
         continue;
 
-      for (ep = bp; isalnum (*ep) || *ep == '-'; ep++)
+      for (ep = bp; isalnum ((unsigned char) *ep) || *ep == '-'; ep++)
        continue;
       if (*ep++ == '.')
        pfnote (savenstr (bp, ep-bp), TRUE,
@@ -3825,7 +3852,7 @@ Cobol_paragraphs (inf)
  *  "forward" immediately following the procedure statement; if found,
  *  the tag is skipped.
  */
-void
+static void
 Pascal_functions (inf)
      FILE *inf;
 {
@@ -4002,6 +4029,11 @@ Pascal_functions (inf)
  * lisp tag functions
  *  look for (def or (DEF, quote or QUOTE
  */
+
+static int L_isdef P_((char *));
+static int L_isquote P_((char *));
+static void L_getit P_((void));
+
 static int
 L_isdef (strp)
      register char *strp;
@@ -4020,7 +4052,7 @@ L_isquote (strp)
          && (*++strp == 'o' || *strp == 'O')
          && (*++strp == 't' || *strp == 'T')
          && (*++strp == 'e' || *strp == 'E')
-         && isspace (*++strp));
+         && iswhite (*++strp));
 }
 
 static void
@@ -4040,7 +4072,7 @@ L_getit ()
   }
 
   for (cp = dbp /*+1*/;
-       *cp != '\0' && *cp != '(' && !isspace(*cp) && *cp != ')';
+       *cp != '\0' && *cp != '(' && !iswhite(*cp) && *cp != ')';
        cp++)
     continue;
   if (cp == dbp)
@@ -4050,7 +4082,7 @@ L_getit ()
          lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
 }
 
-void
+static void
 Lisp_functions (inf)
      FILE *inf;
 {
@@ -4069,7 +4101,7 @@ Lisp_functions (inf)
              /* Check for (foo::defmumble name-defined ... */
              do
                dbp++;
-             while (*dbp != '\0' && !isspace (*dbp)
+             while (*dbp != '\0' && !iswhite (*dbp)
                     && *dbp != ':' && *dbp != '(' && *dbp != ')');
              if (*dbp == ':')
                {
@@ -4096,7 +4128,7 @@ Lisp_functions (inf)
  * Also look at "defineps" for PSWrap
  * suggested by Masatake YAMATO <masata-y@is.aist-nara.ac.jp>
  */
-void
+static void
 Postscript_functions (inf)
      FILE *inf;
 {
@@ -4131,7 +4163,7 @@ Postscript_functions (inf)
  * look for (set! xyzzy
  */
 
-void
+static void
 Scheme_functions (inf)
      FILE *inf;
 {
@@ -4146,7 +4178,7 @@ Scheme_functions (inf)
        {
          bp = skip_non_spaces (bp);
          /* Skip over open parens and white space */
-         while (isspace (*bp) || *bp == '(')
+         while (iswhite (*bp) || *bp == '(')
            bp++;
          get_tag (bp);
        }
@@ -4155,7 +4187,7 @@ Scheme_functions (inf)
          && (bp[2] == 'E' || bp[2] == 'e')
          && (bp[3] == 'T' || bp[3] == 't')
          && (bp[4] == '!' || bp[4] == '!')
-         && (isspace (bp[5])))
+         && (iswhite (bp[5])))
        {
          bp = skip_non_spaces (bp);
          bp = skip_spaces (bp);
@@ -4184,9 +4216,9 @@ char *TEX_defenv = "\
 :chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
 :part:appendix:entry:index";
 
-void TEX_mode (FILE *inf);
-struct TEX_tabent *TEX_decode_env (char *evarname, char *defenv);
-int TEX_Token (char *cp);
+static void TEX_mode P_((FILE *));
+static struct TEX_tabent *TEX_decode_env P_((char *, char *));
+static int TEX_Token P_((char *));
 
 char TEX_esc = '\\';
 char TEX_opgrp = '{';
@@ -4195,7 +4227,7 @@ char TEX_clgrp = '}';
 /*
  * TeX/LaTeX scanning loop.
  */
-void
+static void
 TeX_functions (inf)
      FILE *inf;
 {
@@ -4242,7 +4274,7 @@ TeX_functions (inf)
 
 /* Figure out whether TeX's escapechar is '\\' or '!' and set grouping
    chars accordingly. */
-void
+static void
 TEX_mode (inf)
      FILE *inf;
 {
@@ -4277,7 +4309,7 @@ TEX_mode (inf)
 
 /* Read environment and prepend it to the default string.
    Build token table. */
-struct TEX_tabent *
+static struct TEX_tabent *
 TEX_decode_env (evarname, defenv)
      char *evarname;
      char *defenv;
@@ -4334,7 +4366,7 @@ TEX_decode_env (evarname, defenv)
    Otherwise return -1.
    Keep the capital `T' in `token' for dumb truncating compilers
    (this distinguishes it from `TEX_toktab' */
-int
+static int
 TEX_Token (cp)
      char *cp;
 {
@@ -4352,11 +4384,11 @@ TEX_Token (cp)
  * Assumes that the predicate starts at column 0.
  * Only the first clause of a predicate is added.
  */
-int prolog_pred (char *s, char *last);
-void prolog_skip_comment (linebuffer *plb, FILE *inf);
-int prolog_atom (char *s, int pos);
+static int prolog_pred P_((char *, char *));
+static void prolog_skip_comment P_((linebuffer *, FILE *));
+static int prolog_atom P_((char *, int));
 
-void
+static void
 Prolog_functions (inf)
      FILE *inf;
 {
@@ -4372,7 +4404,7 @@ Prolog_functions (inf)
     {
       if (cp[0] == '\0')       /* Empty line */
        continue;
-      else if (isspace (cp[0])) /* Not a predicate */
+      else if (iswhite (cp[0])) /* Not a predicate */
        continue;
       else if (cp[0] == '/' && cp[1] == '*')   /* comment. */
        prolog_skip_comment (&lb, inf);
@@ -4392,7 +4424,7 @@ Prolog_functions (inf)
 }
 
 
-void
+static void
 prolog_skip_comment (plb, inf)
      linebuffer *plb;
      FILE *inf;
@@ -4420,7 +4452,7 @@ prolog_skip_comment (plb, inf)
  * Return the size of the name of the predicate, or 0 if no header
  * was found.
  */
-int
+static int
 prolog_pred (s, last)
      char *s;
      char *last;               /* Name of last clause. */
@@ -4461,7 +4493,7 @@ prolog_pred (s, last)
  * - A quoted arbitrary string. Single quotes can escape themselves.
  *   Backslash quotes everything.
  */
-int
+static int
 prolog_atom (s, pos)
      char *s;
      int pos;
@@ -4470,11 +4502,11 @@ prolog_atom (s, pos)
 
   origpos = pos;
 
-  if (islower(s[pos]) || (s[pos] == '_'))
+  if (islower((unsigned char) s[pos]) || (s[pos] == '_'))
     {
       /* The atom is unquoted. */
       pos++;
-      while (isalnum(s[pos]) || (s[pos] == '_'))
+      while (isalnum((unsigned char) s[pos]) || (s[pos] == '_'))
        {
          pos++;
        }
@@ -4518,11 +4550,11 @@ prolog_atom (s, pos)
  *
  * Assumes that Erlang functions start at column 0.
  */
-int erlang_func (char *s, char *last);
-void erlang_attribute (char *s);
-int erlang_atom (char *s, int pos);
+static int erlang_func P_((char *, char *));
+static void erlang_attribute P_((char *));
+static int erlang_atom P_((char *, int));
 
-void
+static void
 Erlang_functions (inf)
      FILE *inf;
 {
@@ -4538,7 +4570,7 @@ Erlang_functions (inf)
     {
       if (cp[0] == '\0')       /* Empty line */
        continue;
-      else if (isspace (cp[0])) /* Not function nor attribute */
+      else if (iswhite (cp[0])) /* Not function nor attribute */
        continue;
       else if (cp[0] == '%')   /* comment */
        continue;
@@ -4577,7 +4609,7 @@ Erlang_functions (inf)
  * Return the size of the name of the function, or 0 if no function
  * was found.
  */
-int
+static int
 erlang_func (s, last)
      char *s;
      char *last;               /* Name of last clause. */
@@ -4615,7 +4647,7 @@ erlang_func (s, last)
  * -define(Foo(M, N), M+N).
  * -record(graph, {vtab = notable, cyclic = true}).
  */
-void
+static void
 erlang_attribute (s)
      char *s;
 {
@@ -4642,7 +4674,7 @@ erlang_attribute (s)
  * Consume an Erlang atom (or variable).
  * Return the number of bytes consumed, or -1 if there was an error.
  */
-int
+static int
 erlang_atom (s, pos)
      char *s;
      int pos;
@@ -4651,11 +4683,11 @@ erlang_atom (s, pos)
 
   origpos = pos;
 
-  if (isalpha (s[pos]) || s[pos] == '_')
+  if (isalpha ((unsigned char) s[pos]) || s[pos] == '_')
     {
       /* The atom is unquoted. */
       pos++;
-      while (isalnum (s[pos]) || s[pos] == '_')
+      while (isalnum ((unsigned char) s[pos]) || s[pos] == '_')
        pos++;
       return pos - origpos;
     }
@@ -4690,6 +4722,11 @@ erlang_atom (s, pos)
 \f
 #ifdef ETAGS_REGEXPS
 
+static char *scan_separators P_((char *));
+static void analyse_regex P_((char *, bool));
+static void add_regex P_((char *, bool, language *));
+static char *substitute P_((char *, char *, struct re_registers *));
+
 /* Take a string like "/blah/" and turn it into "blah", making sure
    that the first and last characters are the same, and handling
    quoted separator characters.  Actually, stops on the occurrence of
@@ -4735,7 +4772,7 @@ scan_separators (name)
 
 /* Look at the argument of --regex or --no-regex and do the right
    thing.  Same for each line of a regexp file. */
-void
+static void
 analyse_regex (regex_arg, ignore_case)
      char *regex_arg;
      bool ignore_case;
@@ -4805,7 +4842,7 @@ analyse_regex (regex_arg, ignore_case)
 
 /* Turn a name, which is an ed-style (but Emacs syntax) regular
    expression, into a real regular expression by compiling it. */
-void
+static void
 add_regex (regexp_pattern, ignore_case, lang)
      char *regexp_pattern;
      bool ignore_case;
@@ -4875,7 +4912,7 @@ substitute (in, out, regs)
   for (t = etags_strchr (out, '\\');
        t != NULL;
        t = etags_strchr (t + 2, '\\'))
-    if (isdigit (t[1]))
+    if (isdigit ((unsigned char) t[1]))
       {
        dig = t[1] - '0';
        diglen = regs->end[dig] - regs->start[dig];
@@ -4888,7 +4925,7 @@ substitute (in, out, regs)
   result = xnew (size + 1, char);
 
   for (t = result; *out != '\0'; out++)
-    if (*out == '\\' && isdigit (*++out))
+    if (*out == '\\' && isdigit ((unsigned char) *++out))
       {
        /* Using "dig2" satisfies my debugger.  Bleah. */
        dig = *out - '0';
@@ -4907,7 +4944,7 @@ substitute (in, out, regs)
 }
 
 /* Deallocate all patterns. */
-void
+static void
 free_patterns ()
 {
   pattern *pp;
@@ -4922,7 +4959,7 @@ free_patterns ()
   return;
 }
 \f
-void
+static void
 get_tag (bp)
      register char *bp;
 {
@@ -4932,7 +4969,7 @@ get_tag (bp)
     return;
   /* Go till you get to white space or a syntactic break */
   for (cp = bp + 1;
-       *cp != '\0' && *cp != '(' && *cp != ')' && !isspace (*cp);
+       *cp != '\0' && *cp != '(' && *cp != ')' && !iswhite (*cp);
        cp++)
     continue;
   pfnote (savenstr (bp, cp-bp), TRUE,
@@ -4941,7 +4978,7 @@ get_tag (bp)
 
 #endif /* ETAGS_REGEXPS */
 /* Initialize a linebuffer for use */
-void
+static void
 initbuffer (lbp)
      linebuffer *lbp;
 {
@@ -4959,7 +4996,7 @@ initbuffer (lbp)
  * platforms (for text files, it translates CR-NL to NL as it reads in the
  * file).
  */
-long
+static long
 readline_internal (lbp, stream)
      linebuffer *lbp;
      register FILE *stream;
@@ -5023,7 +5060,7 @@ readline_internal (lbp, stream)
  * Like readline_internal, above, but in addition try to match the
  * input line against relevant regular expressions.
  */
-long
+static long
 readline (lbp, stream)
      linebuffer *lbp;
      FILE *stream;
@@ -5084,7 +5121,7 @@ readline (lbp, stream)
  * Return a pointer to a space of size strlen(cp)+1 allocated
  * with xnew where the string CP has been copied.
  */
-char *
+static char *
 savestr (cp)
      char *cp;
 {
@@ -5095,7 +5132,7 @@ savestr (cp)
  * Return a pointer to a space of size LEN+1 allocated with xnew where
  * the string CP has been copied for at most the first LEN characters.
  */
-char *
+static char *
 savenstr (cp, len)
      char *cp;
      int len;
@@ -5111,11 +5148,13 @@ savenstr (cp, len)
 /*
  * Return the ptr in sp at which the character c last
  * appears; NULL if not found
+ *
+ * Identical to POSIX strrchr, included for portability.
  */
-char *
+static char *
 etags_strrchr (sp, c)
-     const char *sp;
-     int c;
+     register const char *sp;
+     register int c;
 {
   register const char *r;
 
@@ -5125,49 +5164,51 @@ etags_strrchr (sp, c)
       if (*sp == c)
        r = sp;
   } while (*sp++);
-  return (char *) r;
+  return (char *)r;
 }
 
 
 /*
  * Return the ptr in sp at which the character c first
  * appears; NULL if not found
+ *
+ * Identical to POSIX strchr, included for portability.
  */
-char *
+static char *
 etags_strchr (sp, c)
-     const char *sp;
-     int c;
+     register const char *sp;
+     register int c;
 {
   do
     {
       if (*sp == c)
-       return (char *) sp;
+       return (char *)sp;
     } while (*sp++);
   return NULL;
 }
 
 /* Skip spaces, return new pointer. */
-char *
+static char *
 skip_spaces (cp)
      char *cp;
 {
-  while (isspace (*cp))                /* isspace('\0')==FALSE */
+  while (iswhite (*cp))
     cp++;
   return cp;
 }
 
 /* Skip non spaces, return new pointer. */
-char *
+static char *
 skip_non_spaces (cp)
      char *cp;
 {
-  while (!iswhite (*cp))       /* iswhite('\0')==TRUE */
+  while (*cp != '\0' && !iswhite (*cp))
     cp++;
   return cp;
 }
 
 /* Print error message and exit.  */
-void
+static void
 fatal (s1, s2)
      char *s1, *s2;
 {
@@ -5175,7 +5216,7 @@ fatal (s1, s2)
   exit (BAD);
 }
 
-void
+static void
 pfatal (s1)
      char *s1;
 {
@@ -5183,7 +5224,7 @@ pfatal (s1)
   exit (BAD);
 }
 
-void
+static void
 suggest_asking_for_help ()
 {
   fprintf (stderr, "\tTry `%s %s' for a complete list of options.\n",
@@ -5198,7 +5239,7 @@ suggest_asking_for_help ()
 }
 
 /* Print error message.  `s1' is printf control string, `s2' is arg for it. */
-void
+static void
 error (s1, s2)
      const char *s1, *s2;
 {
@@ -5209,7 +5250,7 @@ error (s1, s2)
 
 /* Return a newly-allocated string whose contents
    concatenate those of s1, s2, s3.  */
-char *
+static char *
 concat (s1, s2, s3)
      char *s1, *s2, *s3;
 {
@@ -5226,7 +5267,7 @@ concat (s1, s2, s3)
 \f
 /* Does the same work as the system V getcwd, but does not need to
    guess the buffer size in advance. */
-char *
+static char *
 etags_getcwd ()
 {
 #ifdef HAVE_GETCWD
@@ -5275,7 +5316,7 @@ etags_getcwd ()
 
 /* Return a newly allocated string containing the file name of FILE
    relative to the absolute directory DIR (which should end with a slash). */
-char *
+static char *
 relative_filename (file, dir)
      char *file, *dir;
 {
@@ -5315,7 +5356,7 @@ relative_filename (file, dir)
 
 /* Return a newly allocated string containing the absolute file name
    of FILE given DIR (which should end with a slash). */
-char *
+static char *
 absolute_filename (file, dir)
      char *file, *dir;
 {
@@ -5377,7 +5418,7 @@ absolute_filename (file, dir)
 /* Return a newly allocated string containing the absolute
    file name of dir where FILE resides given DIR (which should
    end with a slash). */
-char *
+static char *
 absolute_dirname (file, dir)
      char *file, *dir;
 {
@@ -5398,7 +5439,7 @@ absolute_dirname (file, dir)
 
 /* Whether the argument string is an absolute file name.  The argument
    string must have been canonicalized with canonicalize_filename. */
-bool
+static bool
 filename_is_absolute (fn)
      char *fn;
 {
@@ -5410,7 +5451,7 @@ filename_is_absolute (fn)
 }
 
 /* Translate backslashes into slashes.  Works in place. */
-void
+static void
 canonicalize_filename (fn)
      register char *fn;
 {
@@ -5429,7 +5470,7 @@ canonicalize_filename (fn)
 }
 
 /* Increase the size of a linebuffer. */
-void
+static void
 grow_linebuffer (lbp, toksize)
      linebuffer *lbp;
      int toksize;
@@ -5440,7 +5481,7 @@ grow_linebuffer (lbp, toksize)
 }
 
 /* Like malloc but get fatal error if memory is exhausted.  */
-long *
+static long *
 xmalloc (size)
      unsigned int size;
 {
@@ -5450,7 +5491,7 @@ xmalloc (size)
   return result;
 }
 
-long *
+static long *
 xrealloc (ptr, size)
      char *ptr;
      unsigned int size;
index 8467c02..a78036e 100644 (file)
@@ -144,7 +144,7 @@ struct linebuffer lb;
 #define MAIL_PROGRAM_NAME "/bin/mail"
 #endif
 
-static CONST char *my_name;
+static const char *my_name;
 static char *the_date;
 static char *the_user;
 static line_list file_preface;
@@ -171,7 +171,7 @@ static struct passwd *my_entry;
 /* Print error message.  `s1' is printf control string, `s2' is arg for it. */
 
 static void
-error (CONST char *s1, CONST char *s2)
+error (const char *s1, const char *s2)
 {
   printf ("%s: ", my_name);
   printf (s1, s2);
@@ -182,7 +182,7 @@ error (CONST char *s1, CONST char *s2)
 /* Print error message and exit.  */
 
 static void
-fatal (CONST char *s1, CONST char *s2)
+fatal (const char *s1, const char *s2)
 {
   error (s1, s2);
   exit (1);
@@ -419,20 +419,20 @@ put_string (char *s)
 }
 
 static void
-put_line (CONST char *string)
+put_line (const char *string)
 {
   register stream_list rem;
   for (rem = the_streams;
        rem != ((stream_list) NULL);
        rem = rem->rest_streams)
     {
-      CONST char *s = string;
+      const char *s = string;
       int column = 0;
 
       /* Divide STRING into lines.  */
       while (*s != 0)
        {
-         CONST char *breakpos;
+         const char *breakpos;
 
          /* Find the last char that fits.  */
          for (breakpos = s; *breakpos && column < 78; ++breakpos)
index 1954be4..b2f5c19 100644 (file)
@@ -231,13 +231,13 @@ filename_expand (char *fullpath, char *filename)
 /* Encase the string in quotes, escape all the backslashes and quotes
    in string.  */
 static char *
-clean_string (CONST char *s)
+clean_string (const char *s)
 {
   int i = 0;
   char *p, *res;
 
   {
-    CONST char *const_p;
+    const char *const_p;
     for (const_p = s; *const_p; const_p++, i++)
       {
        if (*const_p == '\\' || *const_p == '\"')
@@ -293,7 +293,7 @@ clean_string (CONST char *s)
 
 /* A strdup imitation. */
 static char *
-my_strdup (CONST char *s)
+my_strdup (const char *s)
 {
   char *new_s = (char *) malloc (strlen (s) + 1);
   if (new_s)
index 4e2ac5a..df53605 100644 (file)
@@ -216,7 +216,7 @@ int make_connection (char *hostarg, int portarg, int *s);
 void disconnect_from_ipc_server();
 #endif
 #if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
-void send_string (int s, CONST char *msg);
+void send_string (int s, const char *msg);
 void disconnect_from_server (int s, int echo);
 int read_line (int s, char *dest);
 #endif
index 9022d48..c16aa31 100644 (file)
@@ -194,7 +194,7 @@ disconnect_from_ipc_server (int s, struct msgbuf *msgp, int echo)
   send_string -- send string to socket.
 */
 void
-send_string (int s, CONST char *msg)
+send_string (int s, const char *msg)
 {
 #if 0
   if (send(s,msg,strlen(msg),0) < 0) {
index cc55e8c..141287a 100644 (file)
@@ -91,14 +91,14 @@ enum
   c_file
 } Current_file_type;
 
-static int scan_file (CONST char *filename);
+static int scan_file (const char *filename);
 static int read_c_string (FILE *, int, int);
-static void write_c_args (FILE *out, CONST char *func, char *buf, int minargs,
+static void write_c_args (FILE *out, const char *func, char *buf, int minargs,
                          int maxargs);
-static int scan_c_file (CONST char *filename, CONST char *mode);
+static int scan_c_file (const char *filename, const char *mode);
 static void skip_white (FILE *);
 static void read_lisp_symbol (FILE *, char *);
-static int scan_lisp_file (CONST char *filename, CONST char *mode);
+static int scan_lisp_file (const char *filename, const char *mode);
 
 #define C_IDENTIFIER_CHAR_P(c) \
  (('A' <= c && c <= 'Z') || \
@@ -115,7 +115,7 @@ int ellcc = 0;
 /* Print error message.  `s1' is printf control string, `s2' is arg for it. */
 
 static void
-error (CONST char *s1, CONST char *s2)
+error (const char *s1, const char *s2)
 {
   fprintf (stderr, "%s: ", progname);
   fprintf (stderr, s1, s2);
@@ -125,7 +125,7 @@ error (CONST char *s1, CONST char *s2)
 /* Print error message and exit.  */
 
 static void
-fatal (CONST char *s1, CONST char *s2)
+fatal (const char *s1, const char *s2)
 {
   error (s1, s2);
   exit (1);
@@ -274,7 +274,7 @@ main (int argc, char **argv)
 /* Return 1 if file is not found, 0 if it is found.  */
 
 static int
-scan_file (CONST char *filename)
+scan_file (const char *filename)
 {
   int len = strlen (filename);
   if (ellcc == 0 && len > 4 && !strcmp (filename + len - 4, ".elc"))
@@ -396,7 +396,7 @@ read_c_string (FILE *infile, int printflag, int c_docstring)
    MINARGS and MAXARGS are the minimum and maximum number of arguments.  */
 
 static void
-write_c_args (FILE *out, CONST char *func, char *buff, int minargs,
+write_c_args (FILE *out, const char *func, char *buff, int minargs,
              int maxargs)
 {
   register char *p;
@@ -496,7 +496,7 @@ write_c_args (FILE *out, CONST char *func, char *buff, int minargs,
    Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED.  */
 
 static int
-scan_c_file (CONST char *filename, CONST char *mode)
+scan_c_file (const char *filename, const char *mode)
 {
   FILE *infile;
   register int c;
@@ -787,7 +787,7 @@ read_lisp_symbol (FILE *infile, char *buffer)
 }
 
 static int
-scan_lisp_file (CONST char *filename, CONST char *mode)
+scan_lisp_file (const char *filename, const char *mode)
 {
   FILE *infile;
   register int c;
index 0b77c45..d66ce77 100644 (file)
@@ -14,9 +14,6 @@
 #include <stdlib.h> /* for qsort() and malloc() */
 #include <string.h>
 static void *xmalloc (size_t);
-#ifndef CONST
-# define CONST const
-#endif
 
 #define NUL    '\0'
 #define MARKER '\037'
@@ -96,7 +93,7 @@ enum state
   WAITING, BEG_NAME, NAME_GET, BEG_DESC, DESC_GET
 };
 
-CONST char *states[] =
+const char *states[] =
 {
   "WAITING", "BEG_NAME", "NAME_GET", "BEG_DESC", "DESC_GET"
 };
@@ -201,12 +198,7 @@ main (int argc, char *argv[])
     /* sort the array by name; within each name, by type */
 
     qsort ((char*)array, cnt, sizeof (DOCSTR*),
-          /* was cast to (int (*)(CONST void *, CONST void *))
-             but that loses on HP because CONST_IS_LOSING. */
-          /* This one loses too: (int (*)()) */
-          /* Ok, so let's try const instead of CONST.  Fuck me!!! */
-          (int (*)(const void *, const void *))
-          cmpdoc);
+          (int (*)(const void *, const void *)) cmpdoc);
 
     /* write the output header */
 
index 739317e..d61cb8d 100644 (file)
@@ -1,3 +1,30 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-09  Martin Buchholz  <martin@xemacs.org>
+
+       * cl-extra.el (getf): This is now identical to `plist-get', so
+       just defalias it.
+       * cl-macs.el: Make getf an alias to plist-get, at the
+       byte-compiler level, using define-compiler-macro.
+
+2000-02-08  Martin Buchholz  <martin@xemacs.org>
+
+       * cl-extra.el (cl-remprop): Remove. remprop is now in C.
+
+2000-02-07  Kyle Jones  <kyle_jones@wonderworks.com>
+
+       * lisp/etags.el (find-tag-internal): set exact-tagname to
+         a regular expression that matches against the tagname
+         part of the tag entry first instead of only looking in
+         the context area.
+
+2000-01-23  Björn Torkelsson  <torkel@hpc2n.umu.se>
+
+       * gutter-items.el: fixed typo(s) in customizing default-gutter-position
+       * toobar.el: fixed typo(s) in customizing default-toolbar-position
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
index cac76f9..97ca310 100644 (file)
@@ -638,12 +638,7 @@ argument VECP, this copies vectors as well as conses."
 
 ;; XEmacs: our `get' groks DEFAULT.
 (defalias 'get* 'get)
-
-(defun getf (plist property &optional default)
-  "Search PLIST for property PROPERTY; return its value or DEFAULT.
-PLIST is a list of the sort returned by `symbol-plist'."
-  (setplist '--cl-getf-symbol-- plist)
-  (get '--cl-getf-symbol-- property default))
+(defalias 'getf 'plist-get)
 
 (defun cl-set-getf (plist tag val)
   (let ((p plist))
@@ -655,17 +650,6 @@ PLIST is a list of the sort returned by `symbol-plist'."
     (while (and (cdr p) (not (eq (car (cdr p)) tag))) (setq p (cdr (cdr p))))
     (and (cdr p) (progn (setcdr p (cdr (cdr (cdr p)))) t))))
 
-(defun cl-remprop (sym tag)
-  "Remove from SYMBOL's plist the property PROP and its value."
-  (let ((plist (symbol-plist sym)))
-    (if (and plist (eq tag (car plist)))
-       (progn (setplist sym (cdr (cdr plist))) t)
-      (cl-do-remf plist tag))))
-(or (and (fboundp 'remprop) (subrp (symbol-function 'remprop)))
-    (defalias 'remprop 'cl-remprop))
-
-
-
 ;;; Hash tables.
 
 ;; The `regular' Common Lisp hash-table stuff has been moved into C.
index 744ecc6..841d5e0 100644 (file)
@@ -2747,6 +2747,9 @@ surrounded by (block NAME ...)."
 (define-compiler-macro get* (sym prop &optional default)
   (list 'get sym prop default))
 
+(define-compiler-macro getf (sym prop &optional default)
+  (list 'plist-get sym prop default))
+
 (define-compiler-macro typep (&whole form val type)
   (if (cl-const-expr-p type)
       (let ((res (cl-make-type-test val (cl-const-expr-val type))))
index 3414298..cba03e0 100644 (file)
@@ -638,7 +638,7 @@ If it returns non-nil, this file needs processing by evalling
          (t
           (setq tag-table-currently-matching-exact t)))
     ;; \_ in the tagname is used to indicate a symbol boundary.
-    (setq exact-tagname (concat "\\_" tagname "\\_"))
+    (setq exact-tagname (format "\C-?\\_%s\\_\C-a\\|\\_%s\\_" tagname tagname))
     (while (string-match "\\\\_" exact-tagname)
       (aset exact-tagname (1- (match-end 0)) ?b))
     (save-excursion
@@ -671,7 +671,9 @@ If it returns non-nil, this file needs processing by evalling
                ;; tag searches?
                (while (re-search-forward tag-target nil t)
                  (and (save-match-data
-                        (looking-at "[^\n\C-?]*\C-?"))
+                        (save-excursion
+                          (goto-char (match-beginning 0))
+                          (looking-at "[^\n\C-?]*\C-?")))
                       ;; If we're looking for inexact matches, skip
                       ;; exact matches since we've visited them
                       ;; already.
@@ -690,6 +692,7 @@ If it returns non-nil, this file needs processing by evalling
               (if next "more " "")
               (if exact "matching" "containing")
               tagname))
+      (beginning-of-line)
       (search-forward "\C-?")
       (setq file (expand-file-name (file-of-tag)
                                   ;; In XEmacs, this needs to be
index 2e40d57..8224377 100644 (file)
@@ -502,14 +502,14 @@ This deletes all bindings in PLIST for `top', `left', `width',
 Emacs uses this to avoid overriding explicit moves and resizings from
 the user during startup."
   (setq plist (canonicalize-lax-plist (copy-sequence plist)))
-  (mapcar #'(lambda (propname)
-             (if (lax-plist-member plist propname)
+  (mapcar #'(lambda (property)
+             (if (lax-plist-member plist property)
                  (progn
                    (setq frame-initial-geometry-arguments
-                         (cons propname
-                               (cons (lax-plist-get plist propname)
+                         (cons property
+                               (cons (lax-plist-get plist property)
                                      frame-initial-geometry-arguments)))
-                   (setq plist (lax-plist-remprop plist propname)))))
+                   (setq plist (lax-plist-remprop plist property)))))
          '(height width top left user-size user-position))
   plist)
 
index 7f50e18..fd8905c 100644 (file)
@@ -39,7 +39,7 @@ Do not set this. Use `glyph-image-instance' and
   (specifier-instance default-gutter-visible-p)
   "Whether the default gutter is globally visible. This option can be
 customized through the options menu."
-  :group 'display
+  :group 'gutter
   :type 'boolean
   :set #'(lambda (var val)
           (set-specifier default-gutter-visible-p val)
@@ -50,11 +50,11 @@ customized through the options menu."
   (default-gutter-position)
   "The location of the default gutter. It can be 'top, 'bottom, 'left or
 'right. This option can be customized through the options menu."
-  :group 'display
-  :type '(choice (const :tag "top" 'top)
-                (const :tag "bottom" 'bottom)
-                (const :tag "left" 'left)
-                (const :tag "right" 'right))
+  :group 'gutter
+  :type '(choice (const :tag "top" top)
+                (const :tag "bottom" bottom)
+                (const :tag "left" left)
+                (const :tag "right" right))
   :set #'(lambda (var val)
           (set-default-gutter-position val)
           (setq default-gutter-position val)
@@ -340,7 +340,7 @@ This just removes the progress gauge and calls quit."
   (make-glyph
    (vector 'progress-gauge
           :pixel-height (- progress-glyph-height 8)
-          :pixel-width 50
+          :pixel-width 250
           :descriptor "Progress")))
 
 (defvar progress-text-glyph
index 5c80dda..772abf5 100644 (file)
@@ -57,10 +57,10 @@ customized through the options menu."
   "The location of the default toolbar. It can be 'top, 'bottom, 'left or
 'right. This option can be customized through the options menu."
   :group 'display
-  :type '(choice (const :tag "top" 'top)
-                (const :tag "bottom" 'bottom)
-                (const :tag "left" 'left)
-                (const :tag "right" 'right))
+  :type '(choice (const :tag "top" top)
+                (const :tag "bottom" bottom)
+                (const :tag "left" left)
+                (const :tag "right" right))
   :set #'(lambda (var val)
           (set-default-toolbar-position val)
           (setq default-toolbar-position val))
index 36da340..3424d79 100644 (file)
@@ -1,3 +1,12 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-09  Valdis Kletnieks  <Valdis.Kletnieks@vt.edu>
+
+       * config.h.in (ATHENA_INCLUDE): Workaround bugs in both xlc and
+       old gccs.
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
index de51ba5..af8ab48 100644 (file)
@@ -34,10 +34,14 @@ Boston, MA 02111-1307, USA.  */
 
 /* For use in #include statements.
    You can't use macros directly within the <> of a #include statement.
-   The multiply nested macros are necessary to make old gcc's happy. */
+   The multiply nested macros are necessary to make old gcc's happy.
+   However, those nested macros are too much for AIX xlc to deal with. */
+#if defined(_AIX) && !defined(__GNUC__)
+#define ATHENA_INCLUDE(header_file) <ATHENA_H_PATH/header_file>
+#else
 #define INCLUDE_GLUE_2(dirname,basename) <##dirname##/##basename##>
 #define INCLUDE_GLUE_1(dirname,basename) INCLUDE_GLUE_2(dirname,basename)
 #define ATHENA_INCLUDE(header_file) INCLUDE_GLUE_1(ATHENA_H_PATH,header_file)
-
+#endif
 
 #endif /* _LWLIB_CONFIG_H_ */
index 5329976..3ff9460 100644 (file)
@@ -329,8 +329,8 @@ static XtActionsRec xaw_actions [] = {
 static Boolean actions_initted = False;
 
 static Widget
-make_dialog (CONST char* name, Widget parent, Boolean pop_up_p,
-            CONST char* shell_title, CONST char* icon_name,
+make_dialog (const char* name, Widget parent, Boolean pop_up_p,
+            const char* shell_title, const char* icon_name,
              Boolean text_input_slot,
             Boolean radio_box, Boolean list,
             int left_buttons, int right_buttons)
@@ -438,8 +438,8 @@ xaw_create_dialog (widget_instance* instance)
   Widget parent = instance->parent;
   Widget widget;
   Boolean pop_up_p = instance->pop_up_p;
-  CONST char *shell_name = 0;
-  CONST char *icon_name = 0;
+  const char *shell_name = 0;
+  const char *icon_name = 0;
   Boolean text_input_slot = False;
   Boolean radio_box = False;
   Boolean list = False;
index 99db011..87008b5 100644 (file)
@@ -1038,7 +1038,7 @@ static char disable_dnd_trans[] = "<Btn2Down>: ";
 
 static Widget
 make_dialog (char* name, Widget parent, Boolean pop_up_p,
-            CONST char* shell_title, CONST char* icon_name,
+            const char* shell_title, const char* icon_name,
             Boolean text_input_slot, Boolean radio_box, Boolean list,
             int left_buttons, int right_buttons)
 {
@@ -1438,8 +1438,8 @@ xm_create_dialog (widget_instance* instance)
   Widget       parent = instance->parent;
   Widget       widget;
   Boolean      pop_up_p = instance->pop_up_p;
-  CONST char*  shell_name = 0;
-  CONST char*  icon_name = 0;
+  const char*  shell_name = 0;
+  const char*  icon_name = 0;
   Boolean      text_input_slot = False;
   Boolean      radio_box = False;
   Boolean      list = False;
index df3d66d..5ec3bc9 100644 (file)
@@ -39,7 +39,7 @@ typedef Widget
 
 typedef struct _widget_creation_entry
 {
-  CONST char*                  type;
+  const char*                  type;
   widget_creation_function     function;
 } widget_creation_entry;
 
index 1ecef08..35be751 100644 (file)
@@ -76,7 +76,7 @@ static void free_widget_value_args (widget_value* wv);
 \f
 /* utility functions for widget_instance and widget_info */
 static char *
-safe_strdup (CONST char *s)
+safe_strdup (const char *s)
 {
   char *result;
   if (! s) return 0;
@@ -330,7 +330,7 @@ replace_widget_value_tree (widget_value *node, widget_value *newtree)
 }
 
 static widget_info *
-allocate_widget_info (CONST char *type, CONST char *name,
+allocate_widget_info (const char *type, const char *name,
                       LWLIB_ID id, widget_value *val,
                      lw_callback pre_activate_cb, lw_callback selection_cb,
                      lw_callback post_activate_cb)
@@ -503,7 +503,7 @@ find_instance (LWLIB_ID id, Widget parent, Boolean pop_up_p)
 \f
 /* utility function for widget_value */
 static Boolean
-safe_strcmp (CONST char *s1, CONST char *s2)
+safe_strcmp (const char *s1, const char *s2)
 {
   if (!!s1 ^ !!s2) return True;
   return (s1 && s2) ? strcmp (s1, s2) : s1 ? False : !!s2;
@@ -690,7 +690,7 @@ merge_widget_value (widget_value *val1, widget_value *val2, int level)
 \f
 /* modifying the widgets */
 static Widget
-name_to_widget (widget_instance *instance, CONST char *name)
+name_to_widget (widget_instance *instance, const char *name)
 {
   Widget widget = NULL;
 
@@ -827,7 +827,7 @@ initialize_widget_instance (widget_instance *instance)
 
 
 static widget_creation_function
-find_in_table (CONST char *type, widget_creation_entry *table)
+find_in_table (const char *type, widget_creation_entry *table)
 {
   widget_creation_entry *cur;
   for (cur = table; cur->type; cur++)
@@ -837,7 +837,7 @@ find_in_table (CONST char *type, widget_creation_entry *table)
 }
 
 static Boolean
-dialog_spec_p (CONST char *name)
+dialog_spec_p (const char *name)
 {
   /* return True if name matches [EILPQeilpq][1-9][Bb] or
      [EILPQeilpq][1-9][Bb][Rr][1-9] */
@@ -921,7 +921,7 @@ instantiate_widget_instance (widget_instance *instance)
 }
 
 void
-lw_register_widget (CONST char *type, CONST char *name,
+lw_register_widget (const char *type, const char *name,
                     LWLIB_ID id, widget_value *val,
                    lw_callback pre_activate_cb, lw_callback selection_cb,
                    lw_callback post_activate_cb)
@@ -957,7 +957,7 @@ lw_make_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p)
 }
 
 Widget
-lw_create_widget (CONST char *type, CONST char *name,
+lw_create_widget (const char *type, const char *name,
                   LWLIB_ID id, widget_value *val,
                  Widget parent, Boolean pop_up_p, lw_callback pre_activate_cb,
                  lw_callback selection_cb, lw_callback post_activate_cb)
index 9e4b20b..458e499 100644 (file)
@@ -1,17 +1,8 @@
 #ifndef INCLUDED_lwlib_h_
 #define INCLUDED_lwlib_h_
 
-#undef CONST
-
 #include <X11/Intrinsic.h>
 
-/* To eliminate use of `const' in the lwlib sources, define CONST_IS_LOSING. */
-#ifdef CONST_IS_LOSING
-# define CONST
-#else
-# define CONST const
-#endif
-
 #if defined (LWLIB_MENUBARS_LUCID) || defined (LWLIB_MENUBARS_MOTIF) || defined (LWLIB_MENUBARS_ATHENA)
 #define NEED_MENUBARS
 #endif
@@ -193,13 +184,13 @@ extern int lw_menu_active;
 #include "xlwtabs.h"
 #endif
 
-void  lw_register_widget (CONST char* type, CONST char* name, LWLIB_ID id,
+void  lw_register_widget (const char* type, const char* name, LWLIB_ID id,
                          widget_value* val, lw_callback pre_activate_cb,
                          lw_callback selection_cb,
                          lw_callback post_activate_cb);
 Widget lw_get_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p);
 Widget lw_make_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p);
-Widget lw_create_widget (CONST char* type, CONST char* name, LWLIB_ID id,
+Widget lw_create_widget (const char* type, const char* name, LWLIB_ID id,
                         widget_value* val, Widget parent, Boolean pop_up_p,
                         lw_callback pre_activate_cb,
                         lw_callback selection_cb,
index e6d31ae..c7ef3b4 100644 (file)
@@ -457,7 +457,7 @@ string_width_u (XlwMenuWidget mw,
 }
 
 static void
-massage_resource_name (CONST char *in, char *out)
+massage_resource_name (const char *in, char *out)
 {
   /* Turn a random string into something suitable for using as a resource.
      For example:
@@ -520,7 +520,7 @@ nameResource[] =
  *    not inserted if value is a zero length string.
  */
 static char*
-parameterize_string (CONST char *string, CONST char *value)
+parameterize_string (const char *string, const char *value)
 {
   char *percent;
   char *result;
@@ -1873,7 +1873,7 @@ radio_button_draw (XlwMenuWidget mw,
 
 static struct _shadow_names
 {
-  CONST char *      name;
+  const char *      name;
   shadow_type type;
 } shadow_names[] =
 {
index 63f736f..c548505 100644 (file)
@@ -1,3 +1,18 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-16  Martin Buchholz  <martin@xemacs.org>
+
+       * internals/internals.texi: Integrate Olivier's portable dumping docs.
+
+2000-02-09  Martin Buchholz  <martin@xemacs.org>
+
+       * lispref/symbols.texi (Object Plists): 
+       Document `object-plist'.
+       Document `remprop'.
+       Rework all plist frobbing docs for accuracy.
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
index 8250898..a3c3100 100644 (file)
@@ -3297,7 +3297,7 @@ This package defines several symbol-related features that were
 missing from Emacs Lisp.
 
 @menu
-* Property Lists::       `remprop', `getf', `remf'
+* Property Lists::       `getf', `remf'
 * Creating Symbols::     `gensym', `gentemp'
 @end menu
 
@@ -3306,20 +3306,9 @@ missing from Emacs Lisp.
 
 @noindent
 These functions augment the standard Emacs Lisp functions @code{get}
-and @code{put} for operating on properties attached to symbols.
+and @code{put} for operating on properties attached to objects.
 There are also functions for working with property lists as
-first-class data structures not attached to particular symbols.
-
-@defun remprop symbol property
-This function removes the entry for @var{property} from the property
-list of @var{symbol}.  It returns a true value if the property was
-indeed found and removed, or @code{nil} if there was no such property.
-(This function was probably omitted from Emacs originally because,
-since @code{get} did not allow a @var{default}, it was very difficult
-to distinguish between a missing property and a property whose value
-was @code{nil}; thus, setting a property to @code{nil} was close
-enough to @code{remprop} for most purposes.)
-@end defun
+first-class data structures not attached to particular objects.
 
 @defun getf place property &optional default
 This function scans the list @var{place} as if it were a property
index 2e52fa2..5ca73df 100644 (file)
@@ -438,9 +438,9 @@ However, if it does have dependnacies, it must call
 
 @example
 @cartouche
-int emodules_load (CONST char *module,
-                   CONST char *modname,
-                   CONST char *modver)
+int emodules_load (const char *module,
+                   const char *modname,
+                   const char *modver)
 @end cartouche
 @end example
 
index 92819b7..c858f39 100644 (file)
@@ -69,6 +69,7 @@ instead of in the original English.
 @author Martin Buchholz
 @author Hrvoje Niksic
 @author Matthias Neubauer
+@author Olivier Galibert
 @page
 @vskip 0pt plus 1fill
 
@@ -118,6 +119,7 @@ This Info file contains v1.0 of the XEmacs Internals Manual.
 * Rules When Writing New C Code::
 * A Summary of the Various XEmacs Modules::
 * Allocation of Objects in XEmacs Lisp::
+* Dumping::
 * Events and the Event Loop::
 * Evaluation; Stack Frames; Bindings::
 * Symbols and Variables::
@@ -134,19 +136,16 @@ This Info file contains v1.0 of the XEmacs Internals Manual.
 * Menus::
 * Subprocesses::
 * Interface to X Windows::
-* Index::                   Index including concepts, functions, variables,
-                              and other terms.
+* Index::
 
-      --- The Detailed Node Listing ---
-
-Here are other nodes that are inferiors of those already listed,
-mentioned here so you can get to them in one step:
+@detailmenu --- The Detailed Node Listing ---
 
 A History of Emacs
 
 * Through Version 18::          Unification prevails.
 * Lucid Emacs::                 One version 19 Emacs.
 * GNU Emacs 19::                The other version 19 Emacs.
+* GNU Emacs 20::                The other version 20 Emacs.
 * XEmacs::                      The continuation of Lucid Emacs.
 
 Rules When Writing New C Code
@@ -154,8 +153,17 @@ Rules When Writing New C Code
 * General Coding Rules::
 * Writing Lisp Primitives::
 * Adding Global Lisp Variables::
+* Coding for Mule::
 * Techniques for XEmacs Developers::
 
+Coding for Mule
+
+* Character-Related Data Types::
+* Working With Character and Byte Positions::
+* Conversion to and from External Data::
+* General Guidelines for Writing Mule-Aware Code::
+* An Example of Mule-Aware Code::
+
 A Summary of the Various XEmacs Modules
 
 * Low-Level Modules::
@@ -190,6 +198,32 @@ Allocation of Objects in XEmacs Lisp
 * String::
 * Compiled Function::
 
+Garbage Collection - Step by Step
+
+* Invocation::
+* garbage_collect_1::
+* mark_object::
+* gc_sweep::
+* sweep_lcrecords_1::
+* compact_string_chars::
+* sweep_strings::
+* sweep_bit_vectors_1::
+
+Dumping
+
+* Overview::
+* Data descriptions::
+* Dumping phase::
+* Reloading phase::
+
+Dumping phase
+
+* Object inventory::
+* Address allocation::
+* The header::
+* Data dumping::
+* Pointers dumping::
+
 Events and the Event Loop
 
 * Introduction to Events::
@@ -228,6 +262,7 @@ MULE Character Sets and Encodings
 * Character Sets::
 * Encodings::
 * Internal Mule Encodings::
+* CCL::
 
 Encodings
 
@@ -239,20 +274,25 @@ Internal Mule Encodings
 * Internal String Encoding::
 * Internal Character Encoding::
 
-The Lisp Reader and Compiler
-
 Lstreams
 
+* Creating an Lstream::         Creating an lstream object.
+* Lstream Types::               Different sorts of things that are streamed.
+* Lstream Functions::           Functions for working with lstreams.
+* Lstream Methods::             Creating new lstream types.
+
 Consoles; Devices; Frames; Windows
 
 * Introduction to Consoles; Devices; Frames; Windows::
 * Point::
 * Window Hierarchy::
+* The Window Object::
 
 The Redisplay Mechanism
 
 * Critical Redisplay Sections::
 * Line Start Cache::
+* Redisplay Piece by Piece::
 
 Extents
 
@@ -260,21 +300,10 @@ Extents
 * Extent Ordering::             How extents are ordered internally.
 * Format of the Extent Info::   The extent information in a buffer or string.
 * Zero-Length Extents::         A weird special case.
-* Mathematics of Extent Ordering::      A rigorous foundation.
+* Mathematics of Extent Ordering::  A rigorous foundation.
 * Extent Fragments::            Cached information useful for redisplay.
 
-Faces
-
-Glyphs
-
-Specifiers
-
-Menus
-
-Subprocesses
-
-Interface to X Windows
-
+@end detailmenu
 @end menu
 
 @node A History of Emacs, XEmacs From the Outside, Top, Top
@@ -315,7 +344,7 @@ Lisp, a programming language developed at MIT that underlies Emacs.)
 * XEmacs::                      The continuation of Lucid Emacs.
 @end menu
 
-@node Through Version 18
+@node Through Version 18, Lucid Emacs, A History of Emacs, A History of Emacs
 @section Through Version 18
 @cindex Gosling, James
 @cindex Great Usenet Renaming
@@ -428,7 +457,7 @@ version 18.58 released ?????.
 version 18.59 released October 31, 1992.
 @end itemize
 
-@node Lucid Emacs
+@node Lucid Emacs, GNU Emacs 19, Through Version 18, A History of Emacs
 @section Lucid Emacs
 @cindex Lucid Emacs
 @cindex Lucid Inc.
@@ -516,7 +545,7 @@ version 20.3 (the first stable version of XEmacs 20.x) released November 30,
 version 20.4 released February 28, 1998.
 @end itemize
 
-@node GNU Emacs 19
+@node GNU Emacs 19, GNU Emacs 20, Lucid Emacs, A History of Emacs
 @section GNU Emacs 19
 @cindex GNU Emacs 19
 @cindex FSF Emacs
@@ -593,7 +622,7 @@ Lucid Emacs; the work was mostly done by Richard Mlynarik, who had been
 working on and using GNU Emacs for a long time (back as far as version
 16 or 17).
 
-@node GNU Emacs 20
+@node GNU Emacs 20, XEmacs, GNU Emacs 19, A History of Emacs
 @section GNU Emacs 20
 @cindex GNU Emacs 20
 @cindex FSF Emacs
@@ -612,7 +641,7 @@ version 20.2 released September 20, 1997.
 version 20.3 released August 19, 1998.
 @end itemize
 
-@node XEmacs
+@node XEmacs,  , GNU Emacs 20, A History of Emacs
 @section XEmacs
 @cindex XEmacs
 
@@ -1765,7 +1794,7 @@ situations, often in code far away from where the actual breakage is.
 * Techniques for XEmacs Developers::
 @end menu
 
-@node General Coding Rules
+@node General Coding Rules, Writing Lisp Primitives, Rules When Writing New C Code, Rules When Writing New C Code
 @section General Coding Rules
 
 The C code is actually written in a dialect of C called @dfn{Clean C},
@@ -1880,7 +1909,7 @@ the list.  The macros @code{EXTERNAL_LIST_LOOP_DELETE_IF} and
 @code{LIST_LOOP_DELETE_IF} delete elements from a lisp list satisfying some
 predicate.
 
-@node Writing Lisp Primitives
+@node Writing Lisp Primitives, Adding Global Lisp Variables, General Coding Rules, Rules When Writing New C Code
 @section Writing Lisp Primitives
 
 Lisp primitives are Lisp functions implemented in C.  The details of
@@ -2124,7 +2153,7 @@ number of arguments.  They work by calling @code{Ffuncall}.
 @file{lisp.h} contains the definitions for important macros and
 functions.
 
-@node Adding Global Lisp Variables
+@node Adding Global Lisp Variables, Coding for Mule, Writing Lisp Primitives, Rules When Writing New C Code
 @section Adding Global Lisp Variables
 
 Global variables whose names begin with @samp{Q} are constants whose
@@ -2186,7 +2215,7 @@ is in use, and will happily collect it and reuse its storage for another
 Lisp object, and you will be the one who's unhappy when you can't figure
 out how your variable got overwritten.
 
-@node Coding for Mule
+@node Coding for Mule, Techniques for XEmacs Developers, Adding Global Lisp Variables, Rules When Writing New C Code
 @section Coding for Mule
 @cindex Coding for Mule
 
@@ -2209,7 +2238,7 @@ code generalization for future I18N work.
 * An Example of Mule-Aware Code::
 @end menu
 
-@node Character-Related Data Types
+@node Character-Related Data Types, Working With Character and Byte Positions, Coding for Mule, Coding for Mule
 @subsection Character-Related Data Types
 
 First, let's review the basic character-related datatypes used by
@@ -2283,7 +2312,7 @@ which are equivalent to @code{unsigned char}.  Obviously, an
 and Extcounts are not all that frequent in XEmacs code.
 @end table
 
-@node Working With Character and Byte Positions
+@node Working With Character and Byte Positions, Conversion to and from External Data, Character-Related Data Types, Coding for Mule
 @subsection Working With Character and Byte Positions
 
 Now that we have defined the basic character-related types, we can look
@@ -2407,7 +2436,7 @@ Bufbyte *charptr_n_addr (Bufbyte *p, Charcount cc);
 @end example
 @end table
 
-@node Conversion to and from External Data
+@node Conversion to and from External Data, General Guidelines for Writing Mule-Aware Code, Working With Character and Byte Positions, Coding for Mule
 @subsection Conversion to and from External Data
 
 When an external function, such as a C library function, returns a
@@ -2521,7 +2550,7 @@ representation, with the external format being incoded into the name of
 the macro.
 @end table
 
-@node General Guidelines for Writing Mule-Aware Code
+@node General Guidelines for Writing Mule-Aware Code, An Example of Mule-Aware Code, Conversion to and from External Data, Coding for Mule
 @subsection General Guidelines for Writing Mule-Aware Code
 
 This section contains some general guidance on how to write Mule-aware
@@ -2560,7 +2589,7 @@ needs to be decoded only once, when it is read.  After that, it is
 passed around in internal format.
 @end table
 
-@node An Example of Mule-Aware Code
+@node An Example of Mule-Aware Code,  , General Guidelines for Writing Mule-Aware Code, Coding for Mule
 @subsection An Example of Mule-Aware Code
 
 As an example of Mule-aware code, we shall will analyze the
@@ -2611,7 +2640,7 @@ over the XEmacs code.  For starters, I recommend
 understood this section of the manual and studied the examples, you can
 proceed writing new Mule-aware code.
 
-@node Techniques for XEmacs Developers
+@node Techniques for XEmacs Developers,  , Coding for Mule, Rules When Writing New C Code
 @section Techniques for XEmacs Developers
 
 To make a quantified XEmacs, do: @code{make quantmacs}.
@@ -2733,7 +2762,7 @@ make check
 * Modules for Internationalization::
 @end menu
 
-@node Low-Level Modules
+@node Low-Level Modules, Basic Lisp Modules, A Summary of the Various XEmacs Modules, A Summary of the Various XEmacs Modules
 @section Low-Level Modules
 
 @example
@@ -2957,7 +2986,7 @@ This is not currently used.
 
 
 
-@node Basic Lisp Modules
+@node Basic Lisp Modules, Modules for Standard Editing Operations, Low-Level Modules, A Summary of the Various XEmacs Modules
 @section Basic Lisp Modules
 
 @example
@@ -3163,7 +3192,7 @@ structures.  Note that the byte-code @emph{compiler} is written in Lisp.
 
 
 
-@node Modules for Standard Editing Operations
+@node Modules for Standard Editing Operations, Editor-Level Control Flow Modules, Basic Lisp Modules, A Summary of the Various XEmacs Modules
 @section Modules for Standard Editing Operations
 
 @example
@@ -3333,7 +3362,7 @@ Most of this could be implemented in Lisp.
 
 
 
-@node Editor-Level Control Flow Modules
+@node Editor-Level Control Flow Modules, Modules for the Basic Displayable Lisp Objects, Modules for Standard Editing Operations, A Summary of the Various XEmacs Modules
 @section Editor-Level Control Flow Modules
 
 @example
@@ -3431,7 +3460,7 @@ code is loaded).
 
 
 
-@node Modules for the Basic Displayable Lisp Objects
+@node Modules for the Basic Displayable Lisp Objects, Modules for other Display-Related Lisp Objects, Editor-Level Control Flow Modules, A Summary of the Various XEmacs Modules
 @section Modules for the Basic Displayable Lisp Objects
 
 @example
@@ -3505,7 +3534,7 @@ types such as scrollbars.
 
 
 
-@node Modules for other Display-Related Lisp Objects
+@node Modules for other Display-Related Lisp Objects, Modules for the Redisplay Mechanism, Modules for the Basic Displayable Lisp Objects, A Summary of the Various XEmacs Modules
 @section Modules for other Display-Related Lisp Objects
 
 @example
@@ -3584,7 +3613,7 @@ These modules decode GIF-format image files, for use with glyphs.
 
 
 
-@node Modules for the Redisplay Mechanism
+@node Modules for the Redisplay Mechanism, Modules for Interfacing with the File System, Modules for other Display-Related Lisp Objects, A Summary of the Various XEmacs Modules
 @section Modules for the Redisplay Mechanism
 
 @example
@@ -3656,7 +3685,7 @@ probably be merged into @file{redisplay-tty.c}.
 
 
 
-@node Modules for Interfacing with the File System
+@node Modules for Interfacing with the File System, Modules for Other Aspects of the Lisp Interpreter and Object System, Modules for the Redisplay Mechanism, A Summary of the Various XEmacs Modules
 @section Modules for Interfacing with the File System
 
 @example
@@ -3757,7 +3786,7 @@ a broken implementation.
 
 
 
-@node Modules for Other Aspects of the Lisp Interpreter and Object System
+@node Modules for Other Aspects of the Lisp Interpreter and Object System, Modules for Interfacing with the Operating System, Modules for Interfacing with the File System, A Summary of the Various XEmacs Modules
 @section Modules for Other Aspects of the Lisp Interpreter and Object System
 
 @example
@@ -3919,7 +3948,7 @@ various security applications on the Internet.
 
 
 
-@node Modules for Interfacing with the Operating System
+@node Modules for Interfacing with the Operating System, Modules for Interfacing with X Windows, Modules for Other Aspects of the Lisp Interpreter and Object System, A Summary of the Various XEmacs Modules
 @section Modules for Interfacing with the Operating System
 
 @example
@@ -4158,7 +4187,7 @@ XEmacs.
 
 
 
-@node Modules for Interfacing with X Windows
+@node Modules for Interfacing with X Windows, Modules for Internationalization, Modules for Interfacing with the Operating System, A Summary of the Various XEmacs Modules
 @section Modules for Interfacing with X Windows
 
 @example
@@ -4300,7 +4329,7 @@ Don't touch this code; something is liable to break if you do.
 
 
 
-@node Modules for Internationalization
+@node Modules for Internationalization,  , Modules for Interfacing with X Windows, A Summary of the Various XEmacs Modules
 @section Modules for Internationalization
 
 @example
@@ -4377,7 +4406,7 @@ Asian-language support, and is not currently used.
 
 
 
-@node Allocation of Objects in XEmacs Lisp, Events and the Event Loop, A Summary of the Various XEmacs Modules, Top
+@node Allocation of Objects in XEmacs Lisp, Dumping, A Summary of the Various XEmacs Modules, Top
 @chapter Allocation of Objects in XEmacs Lisp
 
 @menu
@@ -4399,7 +4428,7 @@ Asian-language support, and is not currently used.
 * Compiled Function::
 @end menu
 
-@node Introduction to Allocation
+@node Introduction to Allocation, Garbage Collection, Allocation of Objects in XEmacs Lisp, Allocation of Objects in XEmacs Lisp
 @section Introduction to Allocation
 
   Emacs Lisp, like all Lisps, has garbage collection.  This means that
@@ -4502,7 +4531,7 @@ extend. (FSF calls items of type (c) @code{Lisp_Misc} and items of type
 (d) @code{Lisp_Vectorlike}, with separate tags for each, although
 @code{Lisp_Vectorlike} is also used for vectors.)
 
-@node Garbage Collection
+@node Garbage Collection, GCPROing, Introduction to Allocation, Allocation of Objects in XEmacs Lisp
 @section Garbage Collection
 @cindex garbage collection
 
@@ -4576,7 +4605,7 @@ by calling @code{garbage-collect} but is also called automatically
 by @code{eval}, once a certain amount of memory has been allocated
 since the last garbage collection (according to @code{gc-cons-threshold}).
 
-@node GCPROing
+@node GCPROing, Garbage Collection - Step by Step, Garbage Collection, Allocation of Objects in XEmacs Lisp
 @section @code{GCPRO}ing
 
 @code{GCPRO}ing is one of the ugliest and trickiest parts of Emacs
@@ -4729,7 +4758,7 @@ will result in a few objects not getting collected when they should, but
 it obviates the need for @code{GCPRO}ing, and allows garbage collection
 to happen at any point at all, such as during object allocation.
 
-@node Garbage Collection - Step by Step
+@node Garbage Collection - Step by Step, Integers and Characters, GCPROing, Allocation of Objects in XEmacs Lisp
 @section Garbage Collection - Step by Step
 @cindex garbage collection step by step
 
@@ -4744,12 +4773,12 @@ to happen at any point at all, such as during object allocation.
 * sweep_bit_vectors_1::
 @end menu
 
-@node Invocation
+@node Invocation, garbage_collect_1, Garbage Collection - Step by Step, Garbage Collection - Step by Step
 @subsection Invocation
 @cindex garbage collection, invocation
 
 The first thing that anyone should know about garbage collection is:
-when and how the garbage collector is invoked. One might think that this 
+when and how the garbage collector is invoked. One might think that this
 could happen every time new memory is allocated, e.g. new objects are
 created, but this is @emph{not} the case. Instead, we have the following
 situation:
@@ -4758,7 +4787,7 @@ The entry point of any process of garbage collection is an invocation
 of the function @code{garbage_collect_1} in file @code{alloc.c}. The
 invocation can occur @emph{explicitly} by calling the function
 @code{Fgarbage_collect} (in addition this function provides information
-about the freed memory), or can occur @emph{implicitly} in four different 
+about the freed memory), or can occur @emph{implicitly} in four different
 situations:
 @enumerate
 @item
@@ -4769,7 +4798,7 @@ checking-constant @code{ERROR_CHECK_GC} is defined.
 @item
 In function @code{disksave_object_finalization} in file
 @code{alloc.c}. The only purpose of this function is to clear the
-objects from memory which need not be stored with xemacs when we dump out 
+objects from memory which need not be stored with xemacs when we dump out
 an executable. This is only done by @code{Fdump_emacs} or by
 @code{Fdump_emacs_data} respectively (both in @code{emacs.c}). The
 actual clearing is accomplished by making these objects unreachable and
@@ -4804,7 +4833,7 @@ miscellaneous @code{gui_item_...} functions, everything related to
 @code{Fsignal}. The latter is used to handle signals, as for example the
 ones raised by every @code{QUITE}-macro triggered after pressing Ctrl-g.
 
-@node garbage_collect_1
+@node garbage_collect_1, mark_object, Invocation, Garbage Collection - Step by Step
 @subsection @code{garbage_collect_1}
 @cindex @code{garbage_collect_1}
 
@@ -4812,7 +4841,7 @@ We can now describe exactly what happens after the invocation takes
 place.
 @enumerate
 @item
-There are several cases in which the garbage collector is left immediately: 
+There are several cases in which the garbage collector is left immediately:
 when we are already garbage collecting (@code{gc_in_progress}), when
 the garbage collection is somehow forbidden
 (@code{gc_currently_forbidden}), when we are currently displaying something
@@ -4830,7 +4859,7 @@ The state of @code{gc_currently_forbidden} must be restored after
 the garbage collection, no matter what happens during the process. We
 accomplish this by @code{record_unwind_protect}ing the suitable function
 @code{restore_gc_inhibit} together with the current value of
-@code{gc_currently_forbidden}. 
+@code{gc_currently_forbidden}.
 @item
 If we are concurrently running an interactive xemacs session, the next step
 is simply to show the garbage collector's cursor/message.
@@ -4844,7 +4873,7 @@ frame. However, this seems to be a currently unused feature.
 Before actually starting to go over all live objects, references to
 objects that are no longer used are pruned. We only have to do this for events
 (@code{clear_event_resource}) and for specifiers
-(@code{cleanup_specifiers}). 
+(@code{cleanup_specifiers}).
 @item
 Now the mark phase begins and marks all accessible elements. In order to
 start from
@@ -4856,13 +4885,13 @@ shown in their processed order:
 @item
 all constant symbols and static variables that are registered via
 @code{staticpro}@ in the array @code{staticvec}.
-@xref{Adding Global Lisp Variables}. 
+@xref{Adding Global Lisp Variables}.
 @item
 all Lisp objects that are created in C functions and that must be
 protected from freeing them. They are registered in the global
 list @code{gcprolist}.
 @xref{GCPROing}.
-@item 
+@item
 all local variables (i.e. their name fields @code{symbol} and old
 values @code{old_values}) that are bound during the evaluation by the Lisp
 engine. They are stored in @code{specbinding} structs pushed on a stack
@@ -4875,13 +4904,13 @@ cause the creation of structs @code{catchtag} inserted in the list
 are freshly created objects and therefore have to be marked.
 @xref{Catch and Throw}.
 @item
-every function application pushes new structs @code{backtrace} 
-on the call stack of the Lisp engine (@code{backtrace_list}). The unique 
+every function application pushes new structs @code{backtrace}
+on the call stack of the Lisp engine (@code{backtrace_list}). The unique
 parts that have to be marked are the fields for each function
 (@code{function}) and all their arguments (@code{args}).
 @xref{Evaluation}.
 @item
-all objects that are used by the redisplay engine that must not be freed 
+all objects that are used by the redisplay engine that must not be freed
 are marked by a special function called @code{mark_redisplay} (in
 @code{redisplay.c}).
 @item
@@ -4899,8 +4928,8 @@ Any object referenced only by weak pointers is collected
 anyway, and the reference to it is cleared. In hash tables there are
 different usage patterns of them, manifesting in different types of hash
 tables, namely 'non-weak', 'weak', 'key-weak' and 'value-weak'
-(internally also 'key-car-weak' and 'value-car-weak') hash tables, each 
-clearing entries depending on different conditions. More information can 
+(internally also 'key-car-weak' and 'value-car-weak') hash tables, each
+clearing entries depending on different conditions. More information can
 be found in the documentation to the function @code{make-hash-table}.
 
 Because there are complicated dependency rules about when and what to
@@ -4911,13 +4940,13 @@ while marking. Instead their marking is done each separately by the
 function @code{finish_marking_weak_hash_tables}. This function iterates
 over each hash table entry @code{hentries} for each weak hash table in
 @code{Vall_weak_hash_tables}. Depending on the type of a table, the
-appropriate action is performed. 
+appropriate action is performed.
 If a table is acting as @code{HASH_TABLE_KEY_WEAK}, and a key already marked,
-everything reachable from the @code{value} component is marked. If it is 
+everything reachable from the @code{value} component is marked. If it is
 acting as a @code{HASH_TABLE_VALUE_WEAK} and the value component is
-already marked, the marking starts beginning only from the 
+already marked, the marking starts beginning only from the
 @code{key} component.
-If it is a @code{HASH_TABLE_KEY_CAR_WEAK} and the car 
+If it is a @code{HASH_TABLE_KEY_CAR_WEAK} and the car
 of the key entry is already marked, we mark both the @code{key} and
 @code{value} components.
 Finally, if the table is of the type @code{HASH_TABLE_VALUE_CAR_WEAK}
@@ -4929,9 +4958,9 @@ lists. There exist different peculiarities of their types called
 @code{simple}, @code{assoc}, @code{key-assoc} and
 @code{value-assoc}. You can find further details about them in the
 description to the function @code{make-weak-list}. The scheme of their
-marking is similar: all weak lists are listed in @code{Qall_weak_lists}, 
+marking is similar: all weak lists are listed in @code{Qall_weak_lists},
 therefore we iterate over them. The marking is advanced until we hit an
-already marked pair. Then we know that during a former run all 
+already marked pair. Then we know that during a former run all
 the rest has been marked completely. Again, depending on the special
 type of the weak list, our jobs differ. If it is a @code{WEAK_LIST_SIMPLE}
 and the elem is marked, we mark the @code{cons} part. If it is a
@@ -4944,7 +4973,7 @@ cdr of the elem, we mark both the @code{cons} and the @code{elem}.
 
 Since, by marking objects in reach from weak hash tables and weak lists,
 other objects could get marked, this perhaps implies further marking of
-other weak objects, both finishing functions are redone as long as 
+other weak objects, both finishing functions are redone as long as
 yet unmarked objects get freshly marked.
 
 @item
@@ -4956,7 +4985,7 @@ the table or the list.
 The function @code{prune_weak_hash_tables} does the job for weak hash
 tables. Totally unmarked hash tables are removed from the list
 @code{Vall_weak_hash_tables}. The other ones are treated more carefully
-by scanning over all entries and removing one as soon as one of 
+by scanning over all entries and removing one as soon as one of
 the components @code{key} and @code{value} is unmarked.
 
 The same idea applies to the weak lists. It is accomplished by
@@ -4966,12 +4995,12 @@ carefully by going over it and removing just the unmarked pairs.
 
 @item
 The function @code{prune_specifiers} checks all listed specifiers held
-in @code{Vall_speficiers} and removes the ones from the lists that are 
+in @code{Vall_speficiers} and removes the ones from the lists that are
 unmarked.
 
 @item
 All syntax tables are stored in a list called
-@code{Vall_syntax_tables}. The function @code{prune_syntax_tables} walks 
+@code{Vall_syntax_tables}. The function @code{prune_syntax_tables} walks
 through it and unlinks the tables that are unmarked.
 
 @item
@@ -4979,11 +5008,11 @@ Next, we will attack the complete sweeping - the function
 @code{gc_sweep} which holds the predominance.
 @item
 First, all the variables with respect to garbage collection are
-reset. @code{consing_since_gc} - the counter of the created cells since 
+reset. @code{consing_since_gc} - the counter of the created cells since
 the last garbage collection - is set back to 0, and
 @code{gc_in_progress} is not @code{true} anymore.
 @item
-In case the session is interactive, the displayed cursor and message are 
+In case the session is interactive, the displayed cursor and message are
 removed again.
 @item
 The state of @code{gc_inhibit} is restored to the former value by
@@ -4991,10 +5020,10 @@ unwinding the stack.
 @item
 A small memory reserve is always held back that can be reached by
 @code{breathing_space}. If nothing more is left, we create a new reserve
-and exit. 
+and exit.
 @end enumerate
 
-@node mark_object
+@node mark_object, gc_sweep, garbage_collect_1, Garbage Collection - Step by Step
 @subsection @code{mark_object}
 @cindex @code{mark_object}
 
@@ -5002,7 +5031,7 @@ The first thing that is checked while marking an object is whether the
 object is a real Lisp object @code{Lisp_Type_Record} or just an integer
 or a character. Integers and characters are the only two types that are
 stored directly - without another level of indirection, and therefore they
-don't have to be marked and collected. 
+don't have to be marked and collected.
 @xref{How Lisp Objects Are Represented in C}.
 
 The second case is the one we have to handle. It is the one when we are
@@ -5013,14 +5042,14 @@ i.e. marked (@code{C_READONLY_RECORD_HEADER}). The object in question is
 already marked, and need not be marked for the second time (checked by
 @code{MARKED_RECORD_HEADER_P}). If it is a special, unmarkable object
 (@code{UNMARKABLE_RECORD_HEADER_P}, apparently, these are objects that
-sit in some CONST space, and can therefore not be marked, see
+sit in some const space, and can therefore not be marked, see
 @code{this_one_is_unmarkable} in @code{alloc.c}).
 
 Now, the actual marking is feasible. We do so by once using the macro
 @code{MARK_RECORD_HEADER} to mark the object itself (actually the
 special flag in the lrecord header), and calling its special marker
 "method" @code{marker} if available. The marker method marks every
-other object that is in reach from our current object. Note, that these 
+other object that is in reach from our current object. Note, that these
 marker methods should not call @code{mark_object} recursively, but
 instead should return the next object from where further marking has to
 be performed.
@@ -5028,11 +5057,11 @@ be performed.
 In case another object was returned, as mentioned before, we reiterate
 the whole @code{mark_object} process beginning with this next object.
 
-@node gc_sweep
+@node gc_sweep, sweep_lcrecords_1, mark_object, Garbage Collection - Step by Step
 @subsection @code{gc_sweep}
 @cindex @code{gc_sweep}
 
-The job of this function is to free all unmarked records from memory. As 
+The job of this function is to free all unmarked records from memory. As
 we know, there are different types of objects implemented and managed, and
 consequently different ways to free them from memory.
 @xref{Introduction to Allocation}.
@@ -5041,7 +5070,7 @@ We start with all objects stored through @code{lcrecords}. All
 bulkier objects are allocated and handled using that scheme of
 @code{lcrecords}. Each object is @code{malloc}ed separately
 instead of placing it in one of the contiguous frob blocks. All types
-that are currently stored 
+that are currently stored
 using @code{lcrecords}'s  @code{alloc_lcrecord} and
 @code{make_lcrecord_list} are the types: vectors, buffers,
 char-table, char-table-entry, console, weak-list, database, device,
@@ -5076,12 +5105,12 @@ After that, the other types are swept step by step using functions
 compiled-functions, symbol, marker, extent, and event stored in
 so-called "frob blocks", and therefore we can basically do the same on
 every type objects, using the same macros, especially defined only to
-handle everything with respect to fixed-size blocks. The only fixed-size 
+handle everything with respect to fixed-size blocks. The only fixed-size
 type that is not handled here are the fixed-size portion of strings,
 because we took special care of them earlier.
 
 The only big exceptions are bit vectors stored differently and
-therefore treated differently by the function @code{sweep_bit_vectors_1} 
+therefore treated differently by the function @code{sweep_bit_vectors_1}
 described later.
 
 At first, we need some brief information about how
@@ -5090,7 +5119,7 @@ how the sweeping is done. They have all a fixed size, and are therefore
 stored in big blocks of memory - allocated at once - that can hold a
 certain amount of objects of one type. The macro
 @code{DECLARE_FIXED_TYPE_ALLOC} creates the suitable structures for
-every type. More precisely, we have the block struct 
+every type. More precisely, we have the block struct
 (holding a pointer to the previous block @code{prev} and the
 objects in @code{block[]}), a pointer to current block
 (@code{current_..._block)}) and its last index
@@ -5106,45 +5135,45 @@ macro @code{UNMARK_...} that is used to unmark the object. They define a
 macro @code{ADDITIONAL_FREE_...} that defines additional work that has
 to be done when converting an object from in use to not in use (so far,
 only markers use it in order to unchain them). Then, they all call
-the macro @code{SWEEP_FIXED_TYPE_BLOCK} instantiated with their type name 
+the macro @code{SWEEP_FIXED_TYPE_BLOCK} instantiated with their type name
 and their struct name.
 
 This call in particular does the following: we go over all blocks
 starting with the current moving towards the oldest.
 For each block, we look at every object in it. If the object already
 freed (checked with @code{FREE_STRUCT_P} using the first pointer of the
-object), or if it is 
+object), or if it is
 set to read only (@code{C_READONLY_RECORD_HEADER_P}, nothing must be
 done. If it is unmarked (checked with @code{MARKED_RECORD_HEADER_P}), it
 is put in the free list and set free (using the macro
-@code{FREE_FIXED_TYPE}, otherwise it stays in the block, but is unmarked 
+@code{FREE_FIXED_TYPE}, otherwise it stays in the block, but is unmarked
 (by @code{UNMARK_...}). While going through one block, we note if the
 whole block is empty. If so, the whole block is freed (using
 @code{xfree}) and the free list state is set to the state it had before
 handling this block.
 
-@node sweep_lcrecords_1
+@node sweep_lcrecords_1, compact_string_chars, gc_sweep, Garbage Collection - Step by Step
 @subsection @code{sweep_lcrecords_1}
 @cindex @code{sweep_lcrecords_1}
 
 After nullifying the complete lcrecord statistics, we go over all
-lcrecords two separate times. They are all chained together in a list with 
-a head called @code{all_lcrecords}. 
+lcrecords two separate times. They are all chained together in a list with
+a head called @code{all_lcrecords}.
 
-The first loop calls for each object its @code{finalizer} method, but only 
+The first loop calls for each object its @code{finalizer} method, but only
 in the case that it is not read only
 (@code{C_READONLY_RECORD_HEADER_P)}, it is not already marked
 (@code{MARKED_RECORD_HEADER_P}), it is not already in a free list (list of
 freed objects, field @code{free}) and finally it owns a finalizer
 method.
-The second loop actually frees the appropriate objects again by iterating 
-through the whole list. In case an object is read only or marked, it 
+
+The second loop actually frees the appropriate objects again by iterating
+through the whole list. In case an object is read only or marked, it
 has to persist, otherwise it is manually freed by calling
 @code{xfree}. During this loop, the lcrecord statistics are kept up to
-date by calling @code{tick_lcrecord_stats} with the right arguments, 
+date by calling @code{tick_lcrecord_stats} with the right arguments,
 
-@node compact_string_chars
+@node compact_string_chars, sweep_strings, sweep_lcrecords_1, Garbage Collection - Step by Step
 @subsection @code{compact_string_chars}
 @cindex @code{compact_string_chars}
 
@@ -5156,7 +5185,7 @@ The procedure with which this is done is as follows. We are keeping two
 positions in the @code{string_chars_block}s using two pointer/integer
 pairs, namely @code{from_sb}/@code{from_pos} and
 @code{to_sb}/@code{to_pos}. They stand for the actual positions, from
-where to where, to copy the actually handled string. 
+where to where, to copy the actually handled string.
 
 While going over all chained @code{string_char_block}s and their held
 strings, staring at @code{first_string_chars_block}, both pointers
@@ -5167,7 +5196,7 @@ More precisely, we can distinguish between the following actions.
 @itemize @bullet
 @item
 The string at @code{from_sb}'s position could be marked as free, which
-is indicated by an invalid pointer to the pointer that should point back 
+is indicated by an invalid pointer to the pointer that should point back
 to the fixed size string object, and which is checked by
 @code{FREE_STRUCT_P}. In this case, the @code{from_sb}/@code{from_pos}
 is advanced to the next string, and nothing has to be copied.
@@ -5176,7 +5205,7 @@ Also, if a string object itself is unmarked, nothing has to be
 copied. We likewise advance the @code{from_sb}/@code{from_pos}
 pair as described above.
 @item
-In all other cases, we have a marked string at hand. The string data 
+In all other cases, we have a marked string at hand. The string data
 must be moved from the from-position to the to-position. In case
 there is not enough space in the actual @code{to_sb}-block, we advance
 this pointer to the beginning of the next block before copying. In case the
@@ -5190,7 +5219,7 @@ is reset on the last block to which we moved a string,
 i.e. @code{to_block}, and all remaining blocks (we know that they just
 carry garbage) are explicitly @code{xfree}d.
 
-@node sweep_strings
+@node sweep_strings, sweep_bit_vectors_1, compact_string_chars, Garbage Collection - Step by Step
 @subsection @code{sweep_strings}
 @cindex @code{sweep_strings}
 
@@ -5202,7 +5231,7 @@ into the suitable free list is done by using the macro
 definitions are a little bit special compared to the ones used
 for the other fixed size types.
 
-@code{UNMARK_string} is defined the same way except some additional code 
+@code{UNMARK_string} is defined the same way except some additional code
 used for updating the bookkeeping information.
 
 For strings, @code{ADDITIONAL_FREE_string} has to do something in
@@ -5211,7 +5240,7 @@ addition: in case, the string was not allocated in a
 therefore it was @code{malloc}ed separately, we know also @code{xfree}
 it explicitly.
 
-@node sweep_bit_vectors_1
+@node sweep_bit_vectors_1,  , sweep_strings, Garbage Collection - Step by Step
 @subsection @code{sweep_bit_vectors_1}
 @cindex @code{sweep_bit_vectors_1}
 
@@ -5220,12 +5249,12 @@ individually. Consequently, while sweeping, all further needless
 bit vectors must be freed by hand. This is done, as one might imagine,
 the expected way: since they are all registered in a list called
 @code{all_bit_vectors}, all elements of that list are traversed,
-all unmarked bit vectors are unlinked by calling @code{xfree} and all of 
+all unmarked bit vectors are unlinked by calling @code{xfree} and all of
 them become unmarked.
-In addition, the bookkeeping information used for garbage 
+In addition, the bookkeeping information used for garbage
 collector's output purposes is updated.
 
-@node Integers and Characters
+@node Integers and Characters, Allocation from Frob Blocks, Garbage Collection - Step by Step, Allocation of Objects in XEmacs Lisp
 @section Integers and Characters
 
   Integer and character Lisp objects are created from integers using the
@@ -5239,7 +5268,7 @@ directly in the @code{Lisp_Object}.
 are too big; i.e. you won't get the value you expected but the tag bits
 will at least be correct.
 
-@node Allocation from Frob Blocks
+@node Allocation from Frob Blocks, lrecords, Integers and Characters, Allocation of Objects in XEmacs Lisp
 @section Allocation from Frob Blocks
 
 The uninitialized memory required by a @code{Lisp_Object} of a particular type
@@ -5266,7 +5295,7 @@ last frob block for space, and creates a new frob block if there is
 none. (There are actually two versions of these macros, one of which is
 more defensive but less efficient and is used for error-checking.)
 
-@node lrecords
+@node lrecords, Low-level allocation, Allocation from Frob Blocks, Allocation of Objects in XEmacs Lisp
 @section lrecords
 
   [see @file{lrecord.h}]
@@ -5505,7 +5534,7 @@ simply return the object's size in bytes, exactly as you might expect.
 For an example, see the methods for window configurations and opaques.
 @end enumerate
 
-@node Low-level allocation
+@node Low-level allocation, Pure Space, lrecords, Allocation of Objects in XEmacs Lisp
 @section Low-level allocation
 
   Memory that you want to allocate directly should be allocated using
@@ -5577,12 +5606,12 @@ appropriate times; this keeps statistics on how much memory is
 allocated, so that garbage-collection can be invoked when the
 threshold is reached.
 
-@node Pure Space
+@node Pure Space, Cons, Low-level allocation, Allocation of Objects in XEmacs Lisp
 @section Pure Space
 
   Not yet documented.
 
-@node Cons
+@node Cons, Vector, Pure Space, Allocation of Objects in XEmacs Lisp
 @section Cons
 
   Conses are allocated in standard frob blocks.  The only thing to
@@ -5596,7 +5625,7 @@ However, you have to be @emph{extremely} careful when doing this.
 If you mess this up, you will get BADLY BURNED, and it has happened
 before.
 
-@node Vector
+@node Vector, Bit Vector, Cons, Allocation of Objects in XEmacs Lisp
 @section Vector
 
   As mentioned above, each vector is @code{malloc()}ed individually, and
@@ -5607,7 +5636,7 @@ Note that the @code{struct Lisp_Vector} is declared with its
 is actually @code{malloc()}ed with the right size, however, and access
 to any element through the @code{contents} array works fine.
 
-@node Bit Vector
+@node Bit Vector, Symbol, Vector, Allocation of Objects in XEmacs Lisp
 @section Bit Vector
 
   Bit vectors work exactly like vectors, except for more complicated
@@ -5617,7 +5646,7 @@ that there's an lrecord implementation pointer at the beginning and the
 tag field in bit vector Lisp words is ``lrecord'' rather than
 ``vector''.)
 
-@node Symbol
+@node Symbol, Marker, Bit Vector, Allocation of Objects in XEmacs Lisp
 @section Symbol
 
   Symbols are also allocated in frob blocks.  Note that the code
@@ -5631,7 +5660,7 @@ chained through their @code{next} field.
 Remember that @code{intern} looks up a symbol in an obarray, creating
 one if necessary.
 
-@node Marker
+@node Marker, String, Symbol, Allocation of Objects in XEmacs Lisp
 @section Marker
 
   Markers are allocated in frob blocks, as usual.  They are kept
@@ -5642,7 +5671,7 @@ long time due to the O(N^2) time required to remove lots of
 markers from a buffer.) Markers are removed from a buffer in
 the finalize stage, in @code{ADDITIONAL_FREE_marker()}.
 
-@node String
+@node String, Compiled Function, Marker, Allocation of Objects in XEmacs Lisp
 @section String
 
   As mentioned above, strings are a special case.  A string is logically
@@ -5703,12 +5732,374 @@ string data (which would normally be obtained from the now-non-existent
 The string compactor recognizes this special 0xFFFFFFFF marker and
 handles it correctly.
 
-@node Compiled Function
+@node Compiled Function,  , String, Allocation of Objects in XEmacs Lisp
 @section Compiled Function
 
   Not yet documented.
 
-@node Events and the Event Loop, Evaluation; Stack Frames; Bindings, Allocation of Objects in XEmacs Lisp, Top
+
+@node Dumping, Events and the Event Loop, Allocation of Objects in XEmacs Lisp, Top
+@chapter Dumping
+
+@section What is dumping and its justification
+
+The C code of XEmacs is just a Lisp engine with a lot of built-in
+primitives useful for writing an editor.  The editor itself is written
+mostly in Lisp, and represents around 100K lines of code.  Loading and
+executing the initialization of all this code takes a bit a time (five
+to ten times the usual startup time of current xemacs) and requires
+having all the lisp source files around.  Having to reload them each
+time the editor is started would not be acceptable.
+
+The traditional solution to this problem is called dumping: the build
+process first creates the lisp engine under the name @file{temacs}, then
+runs it until it has finished loading and initializing all the lisp
+code, and eventually creates a new executable called @file{xemacs}
+including both the object code in @file{temacs} and all the contents of
+the memory after the initialization.
+
+This solution, while working, has a huge problem: the creation of the
+new executable from the actual contents of memory is an extremely
+system-specific process, quite error-prone, and which interferes with a
+lot of system libraries (like malloc).  It is even getting worse
+nowadays with libraries using constructors which are automatically
+called when the program is started (even before main()) which tend to
+crash when they are called multiple times, once before dumping and once
+after (IRIX 6.x libz.so pulls in some C++ image libraries thru
+dependencies which have this problem).  Writing the dumper is also one
+of the most difficult parts of porting XEmacs to a new operating system.
+Basically, `dumping' is an operation that is just not officially
+supported on many operating systems.
+
+The aim of the portable dumper is to solve the same problem as the
+system-specific dumper, that is to be able to reload quickly, using only
+a small number of files, the fully initialized lisp part of the editor,
+without any system-specific hacks.
+
+@menu
+* Overview::
+* Data descriptions::
+* Dumping phase::
+* Reloading phase::
+* Remaining issues::
+@end menu
+
+@node Overview, Data descriptions, Dumping, Dumping
+@section Overview
+
+The portable dumping system has to:
+
+@enumerate
+@item
+At dump time, write all initialized, non-quickly-rebuildable data to a
+file [Note: currently named @file{xemacs.dmp}, but the name will
+change], along with all informations needed for the reloading.
+
+@item
+When starting xemacs, reload the dump file, relocate it to its new
+starting address if needed, and reinitialize all pointers to this
+data.  Also, rebuild all the quickly rebuildable data.
+@end enumerate
+
+@node Data descriptions, Dumping phase, Overview, Dumping
+@section Data descriptions
+
+The more complex task of the dumper is to be able to write lisp objects
+(lrecords) and C structs to disk and reload them at a different address,
+updating all the pointers they include in the process.  This is done by
+using external data descriptions that give information about the layout
+of the structures in memory.
+
+The specification of these descriptions is in lrecord.h.  A description
+of an lrecord is an array of struct lrecord_description.  Each of these
+structs include a type, an offset in the structure and some optional
+parameters depending on the type.  For instance, here is the string
+description:
+
+@example
+static const struct lrecord_description string_description[] = @{
+  @{ XD_BYTECOUNT,         offsetof (Lisp_String, size) @},
+  @{ XD_OPAQUE_DATA_PTR,   offsetof (Lisp_String, data), XD_INDIRECT(0, 1) @},
+  @{ XD_LISP_OBJECT,       offsetof (Lisp_String, plist) @},
+  @{ XD_END @}
+@};
+@end example
+
+The first line indicates a member of type Bytecount, which is used by
+the next, indirect directive.  The second means "there is a pointer to
+some opaque data in the field @code{data}".  The length of said data is
+given by the expression @code{XD_INDIRECT(0, 1)}, which means "the value
+in the 0th line of the description (welcome to C) plus one".  The third
+line means "there is a Lisp_Object member @code{plist} in the Lisp_String
+structure".  @code{XD_END} then ends the description.
+
+This gives us all the information we need to move around what is pointed
+to by a structure (C or lrecord) and, by transitivity, everything that
+it points to.  The only missing information for dumping is the size of
+the structure.  For lrecords, this is part of the
+lrecord_implementation, so we don't need to duplicate it.  For C
+structures we use a struct struct_description, which includes a size
+field and a pointer to an associated array of lrecord_description.
+
+@node Dumping phase, Reloading phase, Data descriptions, Dumping
+@section Dumping phase
+
+Dumping is done by calling the function pdump() (in alloc.c) which is
+invoked from Fdump_emacs (in emacs.c).  This function performs a number
+of tasks.
+
+@menu
+* Object inventory::
+* Address allocation::
+* The header::
+* Data dumping::
+* Pointers dumping::
+@end menu
+
+@node Object inventory, Address allocation, Dumping phase, Dumping phase
+@subsection Object inventory
+
+The first task is to build the list of the objects to dump.  This
+includes:
+
+@itemize @bullet
+@item lisp objects
+@item C structures
+@end itemize
+
+We end up with one @code{pdump_entry_list_elmt} per object group (arrays
+of C structs are kept together) which includes a pointer to the first
+object of the group, the per-object size and the count of objects in the
+group, along with some other information which is initialized later.
+
+These entries are linked together in @code{pdump_entry_list} structures
+and can be enumerated thru either:
+
+@enumerate
+@item
+the @code{pdump_object_table}, an array of @code{pdump_entry_list}, one
+per lrecord type, indexed by type number.
+
+@item
+the @code{pdump_opaque_data_list}, used for the opaque data which does
+not include pointers, and hence does not need descriptions.
+
+@item
+the @code{pdump_struct_table}, which is a vector of
+@code{struct_description}/@code{pdump_entry_list} pairs, used for
+non-opaque C structures.
+@end enumerate
+
+This uses a marking strategy similar to the garbage collector.  Some
+differences though:
+
+@enumerate
+@item
+We do not use the mark bit (which does not exist for C structures
+anyway), we use a big hash table instead.
+
+@item
+We do not use the mark function of lrecords but instead rely on the
+external descriptions.  This happens essentially because we need to
+follow pointers to C structures and opaque data in addition to
+Lisp_Object members.
+@end enumerate
+
+This is done by @code{pdump_register_object}, which handles Lisp_Object
+variables, and pdump_register_struct which handles C structures, which
+both delegate the description management to pdump_register_sub.
+
+The hash table doubles as a map object to pdump_entry_list_elmt (i.e.
+allows us to look up a pdump_entry_list_elmt with the object it points
+to).  Entries are added with @code{pdump_add_entry()} and looked up with
+@code{pdump_get_entry()}.  There is no need for entry removal.  The hash
+value is computed quite basically from the object pointer by
+@code{pdump_make_hash()}.
+
+The roots for the marking are:
+
+@enumerate
+@item
+the @code{staticpro}'ed variables (there is a special @code{staticpro_nodump()}
+call for protected variables we do not want to dump).
+
+@item
+the @code{pdump_wire}'d variables (@code{staticpro} is equivalent to
+@code{staticpro_nodump()} + @code{pdump_wire()}).
+
+@item
+the @code{dumpstruct}'ed variables, which points to C structures.
+@end enumerate
+
+This does not include the GCPRO'ed variables, the specbinds, the
+catchtags, the backlist, the redisplay or the profiling info, since we
+do not want to rebuild the actual chain of lisp calls which end up to
+the dump-emacs call, only the global variables.
+
+Weak lists and weak hash tables are dumped as if they were their
+non-weak equivalent (without changing their type, of course).  This has
+not yet been a problem.
+
+@node Address allocation, The header, Object inventory, Dumping phase
+@subsection Address allocation
+
+
+The next step is to allocate the offsets of each of the objects in the
+final dump file.  This is done by @code{pdump_allocate_offset()} which
+is called indirectly by @code{pdump_scan_by_alignment()}.
+
+The strategy to deal with alignment problems uses these facts:
+
+@enumerate
+@item
+real world alignment requirements are powers of two.
+
+@item
+the C compiler is required to adjust the size of a struct so that you
+can have an array of them next to each other.  This means you can have a
+upper bound of the alignment requirements of a given structure by
+looking at which power of two its size is a multiple.
+
+@item
+the non-variant part of variable size lrecords has an alignment
+requirement of 4.
+@end enumerate
+
+Hence, for each lrecord type, C struct type or opaque data block the
+alignment requirement is computed as a power of two, with a minimum of
+2^2 for lrecords.  @code{pdump_scan_by_alignment()} then scans all the
+@code{pdump_entry_list_elmt}'s, the ones with the highest requirements
+first.  This ensures the best packing.
+
+The maximum alignment requirement we take into account is 2^8.
+
+@code{pdump_allocate_offset()} only has to do a linear allocation,
+starting at offset 256 (this leaves room for the header and keep the
+alignments happy).
+
+@node The header, Data dumping, Address allocation, Dumping phase
+@subsection The header
+
+The next step creates the file and writes a header with a signature and
+some random informations in it (number of staticpro, number of assigned
+lrecord types, etc...).  The reloc_address field, which indicates at
+which address the file should be loaded if we want to avoid post-reload
+relocation, is set to 0.  It then seeks to offset 256 (base offset for
+the objects).
+
+@node Data dumping, Pointers dumping, The header, Dumping phase
+@subsection Data dumping
+
+The data is dumped in the same order as the addresses were allocated by
+@code{pdump_dump_data()}, called from @code{pdump_scan_by_alignment()}.
+This function copies the data to a temporary buffer, relocates all
+pointers in the object to the addresses allocated in step Address
+Allocation, and writes it to the file.  Using the same order means that,
+if we are careful with lrecords whose size is not a multiple of 4, we
+are ensured that the object is always written at the offset in the file
+allocated in step Address Allocation.
+
+@node Pointers dumping,  , Data dumping, Dumping phase
+@subsection Pointers dumping
+
+A bunch of tables needed to reassign properly the global pointers are
+then written.  They are:
+
+@enumerate
+@item the staticpro array
+@item the dumpstruct array
+@item the lrecord_implementation_table array
+@item a vector of all the offsets to the objects in the file that include a
+description (for faster relocation at reload time)
+@item the pdump_wired and pdump_wired_list arrays
+@end enumerate
+
+For each of the arrays we write both the pointer to the variables and
+the relocated offset of the object they point to.  Since these variables
+are global, the pointers are still valid when restarting the program and
+are used to regenerate the global pointers.
+
+The @code{pdump_wired_list} array is a special case.  The variables it
+points to are the head of weak linked lists of lisp objects of the same
+type.  Not all objects of this list are dumped so the relocated pointer
+we associate with them points to the first dumped object of the list, or
+Qnil if none is available.  This is also the reason why they are not
+used as roots for the purpose of object enumeration.
+
+This is the end of the dumping part.
+
+@node Reloading phase, Remaining issues, Dumping phase, Dumping
+@section Reloading phase
+
+@subsection File loading
+
+The file is mmap'ed in memory (which ensures a PAGESIZE alignment, at
+least 4096), or if mmap is unavailable or fails, a 256-bytes aligned
+malloc is done and the file is loaded.
+
+Some variables are reinitialized from the values found in the header.
+
+The difference between the actual loading address and the reloc_address
+is computed and will be used for all the relocations.
+
+
+@subsection Putting back the staticvec
+
+The staticvec array is memcpy'd from the file and the variables it
+points to are reset to the relocated objects addresses.
+
+
+@subsection Putting back the dumpstructed variables
+
+The variables pointed to by dumpstruct in the dump phase are reset to
+the right relocated object addresses.
+
+
+@subsection lrecord_implementations_table
+
+The lrecord_implementations_table is reset to its dump time state and
+the right lrecord_type_index values are put in.
+
+
+@subsection Object relocation
+
+All the objects are relocated using their description and their offset
+by @code{pdump_reloc_one}.  This step is unnecessary if the
+reloc_address is equal to the file loading address.
+
+
+@subsection Putting back the pdump_wire and pdump_wire_list variables
+
+Same as Putting back the dumpstructed variables.
+
+
+@subsection Reorganize the hash tables
+
+Since some of the hash values in the lisp hash tables are
+address-dependent, their layout is now wrong.  So we go through each of
+them and have them resorted by calling @code{pdump_reorganize_hash_table}.
+
+@node Remaining issues,  , Reloading phase, Dumping
+@section Remaining issues
+
+The build process will have to start a post-dump xemacs, ask it the
+loading address (which will, hopefully, be always the same between
+different xemacs invocations) and relocate the file to the new address.
+This way the object relocation phase will not have to be done, which
+means no writes in the objects and that, because of the use of mmap, the
+dumped data will be shared between all the xemacs running on the
+computer.
+
+Some executable signature will be necessary to ensure that a given dump
+file is really associated with a given executable, or random crashes
+will occur.  Maybe a random number set at compile or configure time thru
+a define.  This will also allow for having differently-compiled xemacsen
+on the same system (mule and no-mule comes to mind).
+
+The DOC file contents should probably end up in the dump file.
+
+
+@node Events and the Event Loop, Evaluation; Stack Frames; Bindings, Dumping, Top
 @chapter Events and the Event Loop
 
 @menu
@@ -5722,7 +6113,7 @@ handles it correctly.
 * Dispatching Events; The Command Builder::
 @end menu
 
-@node Introduction to Events
+@node Introduction to Events, Main Loop, Events and the Event Loop, Events and the Event Loop
 @section Introduction to Events
 
   An event is an object that encapsulates information about an
@@ -5761,7 +6152,7 @@ Emacs events---there may not be a one-to-one correspondence.
   Emacs events are documented in @file{events.h}; I'll discuss them
 later.
 
-@node Main Loop
+@node Main Loop, Specifics of the Event Gathering Mechanism, Introduction to Events, Events and the Event Loop
 @section Main Loop
 
   The @dfn{command loop} is the top-level loop that the editor is always
@@ -5828,7 +6219,7 @@ wrapper similar to @code{command_loop_2()}.  Note also that
 invoking @code{top_level_1()}, just like when it invokes
 @code{command_loop_2()}.
 
-@node Specifics of the Event Gathering Mechanism
+@node Specifics of the Event Gathering Mechanism, Specifics About the Emacs Event, Main Loop, Events and the Event Loop
 @section Specifics of the Event Gathering Mechanism
 
   Here is an approximate diagram of the collection processes
@@ -6067,13 +6458,13 @@ a SIGINT?   emacs_Xt_next_event()
             using `dispatch-event'
 @end example
 
-@node Specifics About the Emacs Event
+@node Specifics About the Emacs Event, The Event Stream Callback Routines, Specifics of the Event Gathering Mechanism, Events and the Event Loop
 @section Specifics About the Emacs Event
 
-@node The Event Stream Callback Routines
+@node The Event Stream Callback Routines, Other Event Loop Functions, Specifics About the Emacs Event, Events and the Event Loop
 @section The Event Stream Callback Routines
 
-@node Other Event Loop Functions
+@node Other Event Loop Functions, Converting Events, The Event Stream Callback Routines, Events and the Event Loop
 @section Other Event Loop Functions
 
   @code{detect_input_pending()} and @code{input-pending-p} look for
@@ -6095,7 +6486,7 @@ or scrollbar action), calling @code{dispatch-event} on any others.
 the right kind of input method support, it is possible for (read-char)
 to return a Kanji character.
 
-@node Converting Events
+@node Converting Events, Dispatching Events; The Command Builder, Other Event Loop Functions, Events and the Event Loop
 @section Converting Events
 
   @code{character_to_event()}, @code{event_to_character()},
@@ -6106,7 +6497,7 @@ event was not a keypress, @code{event_to_character()} returns -1 and
 between character representation and the split-up event representation
 (keysym plus mod keys).
 
-@node Dispatching Events; The Command Builder
+@node Dispatching Events; The Command Builder,  , Converting Events, Events and the Event Loop
 @section Dispatching Events; The Command Builder
 
 Not yet documented.
@@ -6121,7 +6512,7 @@ Not yet documented.
 * Catch and Throw::
 @end menu
 
-@node Evaluation
+@node Evaluation, Dynamic Binding; The specbinding Stack; Unwind-Protects, Evaluation; Stack Frames; Bindings, Evaluation; Stack Frames; Bindings
 @section Evaluation
 
   @code{Feval()} evaluates the form (a Lisp object) that is passed to
@@ -6251,7 +6642,7 @@ arguments are given as separate C arguments rather than being passed as
 an array).  @code{apply1()} uses @code{Fapply()} while the others use
 @code{Ffuncall()} to do the real work.
 
-@node Dynamic Binding; The specbinding Stack; Unwind-Protects
+@node Dynamic Binding; The specbinding Stack; Unwind-Protects, Simple Special Forms, Evaluation, Evaluation; Stack Frames; Bindings
 @section Dynamic Binding; The specbinding Stack; Unwind-Protects
 
 @example
@@ -6305,7 +6696,7 @@ a local-variable binding (@code{func} is 0, @code{symbol} is not
 the symbol's value).
 @end enumerate
 
-@node Simple Special Forms
+@node Simple Special Forms, Catch and Throw, Dynamic Binding; The specbinding Stack; Unwind-Protects, Evaluation; Stack Frames; Bindings
 @section Simple Special Forms
 
 @code{or}, @code{and}, @code{if}, @code{cond}, @code{progn},
@@ -6322,7 +6713,7 @@ typically called in real life only in interpreted code, since the byte
 compiler knows how to convert calls to these functions directly into
 byte code.
 
-@node Catch and Throw
+@node Catch and Throw,  , Simple Special Forms, Evaluation; Stack Frames; Bindings
 @section Catch and Throw
 
 @example
@@ -6390,7 +6781,7 @@ created since the catch.
 * Symbol Values::
 @end menu
 
-@node Introduction to Symbols
+@node Introduction to Symbols, Obarrays, Symbols and Variables, Symbols and Variables
 @section Introduction to Symbols
 
   A symbol is basically just an object with four fields: a name (a
@@ -6407,7 +6798,7 @@ property list is used as a more general mechanism of associating
 additional values with particular names, and once again the namespace is
 independent of the function and variable namespaces.
 
-@node Obarrays
+@node Obarrays, Symbol Values, Introduction to Symbols, Symbols and Variables
 @section Obarrays
 
   The identity of symbols with their names is accomplished through a
@@ -6474,7 +6865,7 @@ returns the removed symbol. (Remember: You can't put the symbol back
 into any obarray.) Finally, @code{mapatoms} maps over all of the symbols
 in an obarray.
 
-@node Symbol Values
+@node Symbol Values,  , Obarrays, Symbols and Variables
 @section Symbol Values
 
   The value field of a symbol normally contains a Lisp object.  However,
@@ -6529,7 +6920,7 @@ well-documented in comments in @file{buffer.c}, @file{symbols.c}, and
 * The Buffer Object::           The Lisp object corresponding to a buffer.
 @end menu
 
-@node Introduction to Buffers
+@node Introduction to Buffers, The Text in a Buffer, Buffers and Textual Representation, Buffers and Textual Representation
 @section Introduction to Buffers
 
   A buffer is logically just a Lisp object that holds some text.
@@ -6582,7 +6973,7 @@ and @dfn{buffer of the selected window}, and the distinction between
 window. (This latter distinction is explained in detail in the section
 on windows.)
 
-@node The Text in a Buffer
+@node The Text in a Buffer, Buffer Lists, Introduction to Buffers, Buffers and Textual Representation
 @section The Text in a Buffer
 
   The text in a buffer consists of a sequence of zero or more
@@ -6722,7 +7113,7 @@ in the internal Emacs buffer representation rather than in one of a
 number of possible alternative representations (e.g. EUC-encoded text,
 etc.).
 
-@node Buffer Lists
+@node Buffer Lists, Markers and Extents, The Text in a Buffer, Buffers and Textual Representation
 @section Buffer Lists
 
   Recall earlier that buffers are @dfn{permanent} objects, i.e.  that
@@ -6758,7 +7149,7 @@ respectively.  You can also force a new buffer to be created using
 a unique name from this by appending a number, and then creates the
 buffer.  This is basically like the symbol operation @code{gensym}.
 
-@node Markers and Extents
+@node Markers and Extents, Bufbytes and Emchars, Buffer Lists, Buffers and Textual Representation
 @section Markers and Extents
 
   Among the things associated with a buffer are things that are
@@ -6798,12 +7189,12 @@ given the buffer.  Extents remain in a buffer until they are detached
 (which could happen as a result of text being deleted) or the buffer is
 deleted, and primitives do exist to enumerate the extents in a buffer.
 
-@node Bufbytes and Emchars
+@node Bufbytes and Emchars, The Buffer Object, Markers and Extents, Buffers and Textual Representation
 @section Bufbytes and Emchars
 
   Not yet documented.
 
-@node The Buffer Object
+@node The Buffer Object,  , Bufbytes and Emchars, Buffers and Textual Representation
 @section The Buffer Object
 
   Buffers contain fields not directly accessible by the Lisp programmer.
@@ -6922,7 +7313,7 @@ representation is that it's compact and is compatible with ASCII.
 * CCL::
 @end menu
 
-@node Character Sets
+@node Character Sets, Encodings, MULE Character Sets and Encodings, MULE Character Sets and Encodings
 @section Character Sets
 
   A character set (or @dfn{charset}) is an ordered set of characters.  A
@@ -7003,7 +7394,7 @@ Bytes           Character set           Range
 
   This is a bit ad-hoc but gets the job done.
 
-@node Encodings
+@node Encodings, Internal Mule Encodings, Character Sets, MULE Character Sets and Encodings
 @section Encodings
 
   An @dfn{encoding} is a way of numerically representing characters from
@@ -7030,7 +7421,7 @@ encodings:
 * JIS7::
 @end menu
 
-@node Japanese EUC (Extended Unix Code)
+@node Japanese EUC (Extended Unix Code), JIS7, Encodings, Encodings
 @subsection Japanese EUC (Extended Unix Code)
 
 This encompasses the character sets Printing-ASCII, Japanese-JISX0201,
@@ -7052,7 +7443,7 @@ Japanese-JISX0212        PC1 + 0x80 | PC2 + 0x80
 @end example
 
 
-@node JIS7
+@node JIS7,  , Japanese EUC (Extended Unix Code), Encodings
 @subsection JIS7
 
 This encompasses the character sets Printing-ASCII,
@@ -7087,7 +7478,7 @@ Escape sequence   ASCII equivalent   Meaning
 
   Initially, Printing-ASCII is invoked.
 
-@node Internal Mule Encodings
+@node Internal Mule Encodings, CCL, Encodings, MULE Character Sets and Encodings
 @section Internal Mule Encodings
 
 In XEmacs/Mule, each character set is assigned a unique number, called a
@@ -7133,7 +7524,7 @@ followed later by the exact details.)
 * Internal Character Encoding::
 @end menu
 
-@node Internal String Encoding
+@node Internal String Encoding, Internal Character Encoding, Internal Mule Encodings, Internal Mule Encodings
 @subsection Internal String Encoding
 
 ASCII characters are encoded using their position code directly.  Other
@@ -7183,7 +7574,7 @@ conditions.  For example, EUC satisfies only (2) and (3), while
 Shift-JIS and Big5 (not yet described) satisfy only (2). (All
 non-modal encodings must satisfy (2), in order to be unambiguous.)
 
-@node Internal Character Encoding
+@node Internal Character Encoding,  , Internal String Encoding, Internal Mule Encodings
 @subsection Internal Character Encoding
 
   One 19-bit word represents a single character.  The word is
@@ -7218,7 +7609,7 @@ Composite                 0x1F             ?               ?
   Note that character codes 0 - 255 are the same as the ``binary encoding''
 described above.
 
-@node CCL
+@node CCL,  , Internal Mule Encodings, MULE Character Sets and Encodings
 @section CCL
 
 @example
@@ -7409,7 +7800,7 @@ blocking data together in order to achieve efficiency.
 * Lstream Methods::             Creating new lstream types.
 @end menu
 
-@node Creating an Lstream
+@node Creating an Lstream, Lstream Types, Lstreams, Lstreams
 @section Creating an Lstream
 
 Lstreams come in different types, depending on what is being interfaced
@@ -7440,7 +7831,7 @@ and he's probably right.
   Open for writing, but never writes partial MULE characters.
 @end table
 
-@node Lstream Types
+@node Lstream Types, Lstream Functions, Creating an Lstream, Lstreams
 @section Lstream Types
 
 @table @asis
@@ -7465,10 +7856,10 @@ and he's probably right.
 @item encoding
 @end table
 
-@node Lstream Functions
+@node Lstream Functions, Lstream Methods, Lstream Types, Lstreams
 @section Lstream Functions
 
-@deftypefun {Lstream *} Lstream_new (Lstream_implementation *@var{imp}, CONST char *@var{mode})
+@deftypefun {Lstream *} Lstream_new (Lstream_implementation *@var{imp}, const char *@var{mode})
 Allocate and return a new Lstream.  This function is not really meant to
 be called directly; rather, each stream type should provide its own
 stream creation function, which creates the stream and does any other
@@ -7548,7 +7939,7 @@ necessary storage structures, for example.
 Rewind the stream to the beginning.
 @end deftypefun
 
-@node Lstream Methods
+@node Lstream Methods,  , Lstream Functions, Lstreams
 @section Lstream Methods
 
 @deftypefn {Lstream Method} ssize_t reader (Lstream *@var{stream}, unsigned char *@var{data}, size_t @var{size})
@@ -7568,7 +7959,7 @@ calls @code{Lstream_read()} with a very small size.
 This function can be @code{NULL} if the stream is output-only.
 @end deftypefn
 
-@deftypefn {Lstream Method} ssize_t writer (Lstream *@var{stream}, CONST unsigned char *@var{data}, size_t @var{size})
+@deftypefn {Lstream Method} ssize_t writer (Lstream *@var{stream}, const unsigned char *@var{data}, size_t @var{size})
 Send some data to the stream's end.  Data to be sent is in @var{data}
 and is @var{size} bytes.  Return the number of bytes sent.  This
 function can send and return fewer bytes than is passed in; in that
@@ -7623,7 +8014,7 @@ Mark this object for garbage collection.  Same semantics as a standard
 * The Window Object::
 @end menu
 
-@node Introduction to Consoles; Devices; Frames; Windows
+@node Introduction to Consoles; Devices; Frames; Windows, Point, Consoles; Devices; Frames; Windows, Consoles; Devices; Frames; Windows
 @section Introduction to Consoles; Devices; Frames; Windows
 
 A window-system window that you see on the screen is called a
@@ -7665,7 +8056,7 @@ selected, and changing the selected frame causes the remembered window
 within it to become the selected window.  Similar relationships apply
 for consoles to devices and devices to frames.
 
-@node Point
+@node Point, Window Hierarchy, Introduction to Consoles; Devices; Frames; Windows, Consoles; Devices; Frames; Windows
 @section Point
 
   Recall that every buffer has a current insertion position, called
@@ -7686,7 +8077,7 @@ you must special-case on the selected window and retrieve the
 buffer's point instead.  This is related to why @code{save-window-excursion}
 does not save the selected window's value of @code{point}.
 
-@node Window Hierarchy
+@node Window Hierarchy, The Window Object, Point, Consoles; Devices; Frames; Windows
 @section Window Hierarchy
 @cindex window hierarchy
 @cindex hierarchy of windows
@@ -7784,7 +8175,7 @@ is @code{nil} but the @code{prev} points to itself. (#### This is an
 artifact that should be fixed.)
 @end enumerate
 
-@node The Window Object
+@node The Window Object,  , Window Hierarchy, Consoles; Devices; Frames; Windows
 @section The Window Object
 
   Windows have the following accessible fields:
@@ -7916,7 +8307,7 @@ It Is Better To Be Fast Than Not To Be.
 * Redisplay Piece by Piece::
 @end menu
 
-@node Critical Redisplay Sections
+@node Critical Redisplay Sections, Line Start Cache, The Redisplay Mechanism, The Redisplay Mechanism
 @section Critical Redisplay Sections
 @cindex critical redisplay sections
 
@@ -7948,7 +8339,7 @@ we simply return. #### We should abort instead.
 #### If a frame-size change does occur we should probably
 actually be preempting redisplay.
 
-@node Line Start Cache
+@node Line Start Cache, Redisplay Piece by Piece, Critical Redisplay Sections, The Redisplay Mechanism
 @section Line Start Cache
 @cindex line start cache
 
@@ -8009,7 +8400,7 @@ the part of the cache starting at where the modification occurs.
   In case you're wondering, the Second Golden Rule of Redisplay is not
 applicable.
 
-@node Redisplay Piece by Piece
+@node Redisplay Piece by Piece,  , Line Start Cache, The Redisplay Mechanism
 @section Redisplay Piece by Piece
 @cindex Redisplay Piece by Piece
 
@@ -8051,7 +8442,7 @@ display code has many bugs that the standard redisplay code does not.
 The guts of @code{display_line} generation are in
 @code{create_text_block}, which creates a single display line for the
 desired locale. This incrementally parses the characters on the current
-line and generates redisplay structures for each. 
+line and generates redisplay structures for each.
 
 Gutter redisplay is different. Because the data to display is stored in
 a string we cannot use @code{create_text_block}. Instead we use
@@ -8068,11 +8459,11 @@ display have been removed.
 * Extent Ordering::             How extents are ordered internally.
 * Format of the Extent Info::   The extent information in a buffer or string.
 * Zero-Length Extents::         A weird special case.
-* Mathematics of Extent Ordering::      A rigorous foundation.
+* Mathematics of Extent Ordering::  A rigorous foundation.
 * Extent Fragments::            Cached information useful for redisplay.
 @end menu
 
-@node Introduction to Extents
+@node Introduction to Extents, Extent Ordering, Extents, Extents
 @section Introduction to Extents
 
   Extents are regions over a buffer, with a start and an end position
@@ -8094,7 +8485,7 @@ further work needing to be done.  It didn't work out that way,
 however, and just ended up complexifying and buggifying all the
 rest of the code.)
 
-@node Extent Ordering
+@node Extent Ordering, Format of the Extent Info, Introduction to Extents, Extents
 @section Extent Ordering
 
   Extents are compared using memory indices.  There are two orderings
@@ -8128,7 +8519,7 @@ theorem about the display order also applies to the e-order if you swap
 all occurrences of ``display order'' and ``e-order'', ``less than'' and
 ``greater than'', and ``extent start'' and ``extent end''.
 
-@node Format of the Extent Info
+@node Format of the Extent Info, Zero-Length Extents, Extent Ordering, Extents
 @section Format of the Extent Info
 
   An extent-info structure consists of a list of the buffer or string's
@@ -8162,7 +8553,7 @@ not be aware of the fact that the extent list is implemented as an
 array, except for the fact that positions are integers (this should be
 generalized to handle integers and linked list equally well).
 
-@node Zero-Length Extents
+@node Zero-Length Extents, Mathematics of Extent Ordering, Format of the Extent Info, Extents
 @section Zero-Length Extents
 
   Extents can be zero-length, and will end up that way if their endpoints
@@ -8191,7 +8582,7 @@ endpoint is open, the extent remains in the buffer, moving as necessary.
 exactly like markers and that open-closed, non-detachable zero-length
 extents behave like the ``point-type'' marker in Mule.
 
-@node Mathematics of Extent Ordering
+@node Mathematics of Extent Ordering, Extent Fragments, Zero-Length Extents, Extents
 @section Mathematics of Extent Ordering
 @cindex extent mathematics
 @cindex mathematics of extents
@@ -8326,7 +8717,7 @@ greater than @math{I} and thus it is greater than any extent in
 @math{S}, including @math{F}.  Otherwise, @math{F2} includes @math{I}
 and thus is in @math{S}, and thus @math{F2 >= F}.
 
-@node Extent Fragments
+@node Extent Fragments,  , Mathematics of Extent Ordering, Extents
 @section Extent Fragments
 @cindex extent fragment
 
@@ -8545,7 +8936,7 @@ The name of the terminal that the subprocess is using,
 or @code{nil} if it is using pipes.
 @end table
 
-@node Interface to X Windows, Index, Subprocesses, Top
+@node Interface to X Windows, Index , Subprocesses, Top
 @chapter Interface to X Windows
 
 Not yet documented.
index 94b49a0..d9d00a0 100644 (file)
@@ -610,14 +610,14 @@ This function returns the tick counter for @samp{string}.
 @cindex string properties
 @cindex properties of strings
 
-Similar to symbols, extents, faces, and glyphs, you can attach
+Just as with symbols, extents, faces, and glyphs, you can attach
 additional information to strings in the form of @dfn{string
 properties}.  These differ from text properties, which are logically
 attached to particular characters in the string.
 
 To attach a property to a string, use @code{put}.  To retrieve a property
 from a string, use @code{get}.  You can also use @code{remprop} to remove
-a property from a string and @code{object-props} to retrieve a list of
+a property from a string and @code{object-plist} to retrieve a list of
 all the properties in a string.
 
 @node Formatting Strings
index 87315d5..ef25af8 100644 (file)
@@ -378,14 +378,14 @@ it returns @code{nil}.
 @cindex plist, symbol
 
   A @dfn{property list} (@dfn{plist} for short) is a list of paired
-elements stored in the property list cell of a symbol.  Each of the
-pairs associates a property name (usually a symbol) with a property or
-value.  Property lists are generally used to record information about a
-symbol, such as its documentation as a variable, the name of the file
+elements, often stored in the property list cell of a symbol.  Each of
+the pairs associates a property name (usually a symbol) with a property
+or value.  Property lists are generally used to record information about
+a symbol, such as its documentation as a variable, the name of the file
 where it was defined, or perhaps even the grammatical class of the
 symbol (representing a word) in a language-understanding system.
 
-  Many objects other than symbols can have property lists associated
+  Some objects which are not symbols also have property lists associated
 with them, and XEmacs provides a full complement of functions for
 working with property lists.  @xref{Property Lists}.
 
@@ -405,7 +405,7 @@ names, and the other two elements are the corresponding values.
 @menu
 * Plists and Alists::           Comparison of the advantages of property
                                   lists and association lists.
-* Symbol Plists::               Functions to access symbols' property lists.
+* Object Plists::               Functions to access objects' property lists.
 * Other Plists::                Accessing property lists stored elsewhere.
 @end menu
 
@@ -441,13 +441,22 @@ name.)  An association list may be used like a stack where associations
 are pushed on the front of the list and later discarded; this is not
 possible with a property list.
 
-@node Symbol Plists
-@subsection Property List Functions for Symbols
+@node Object Plists
+@subsection Property List Functions for Objects
+
+Once upon a time, only symbols had property lists.  Now, several other
+object types, including strings, extents, faces and glyphs also have
+property lists.
 
 @defun symbol-plist symbol
 This function returns the property list of @var{symbol}.
 @end defun
 
+@defun object-plist object
+This function returns the property list of @var{object}.  If
+@var{object} is a symbol, this is identical to @code{symbol-plist}.
+@end defun
+
 @defun setplist symbol plist
 This function sets @var{symbol}'s property list to @var{plist}.
 Normally, @var{plist} should be a well-formed property list, but this is
@@ -463,23 +472,24 @@ not enforced.
 For symbols in special obarrays, which are not used for ordinary
 purposes, it may make sense to use the property list cell in a
 nonstandard fashion; in fact, the abbrev mechanism does so
-(@pxref{Abbrevs}).
+(@pxref{Abbrevs}).  But generally, its use is discouraged.  Use
+@code{put} instead.  @code{setplist} can only be used with symbols, not
+other object types.
 @end defun
 
-@defun get symbol property
+@defun get object property &optional default
 This function finds the value of the property named @var{property} in
-@var{symbol}'s property list.  If there is no such property, @code{nil}
-is returned.  Thus, there is no distinction between a value of
-@code{nil} and the absence of the property.
+@var{object}'s property list.  If there is no such property,
+@code{default} (which itself defaults to @code{nil}) is returned.
 
-The name @var{property} is compared with the existing property names
-using @code{eq}, so any object is a legitimate property.
+@var{property} is compared with the existing properties using @code{eq},
+so any object is a legitimate property.
 
 See @code{put} for an example.
 @end defun
 
-@defun put symbol property value
-This function puts @var{value} onto @var{symbol}'s property list under
+@defun put object property value
+This function puts @var{value} onto @var{object}'s property list under
 the property name @var{property}, replacing any previous property value.
 The @code{put} function returns @var{value}.
 
@@ -490,13 +500,24 @@ The @code{put} function returns @var{value}.
      @result{} (a buzzing little bug)
 (get 'fly 'verb)
      @result{} transitive
-(symbol-plist 'fly)
+(object-plist 'fly)
      @result{} (verb transitive noun (a buzzing little bug))
 @end smallexample
 @end defun
 
+@defun remprop object property
+This function removes the entry for @var{property} from the property
+list of @var{object}.  It returns @code{t} if the property was
+indeed found and removed, or @code{nil} if there was no such property.
+(This function was probably omitted from Emacs originally because,
+since @code{get} did not allow a @var{default}, it was very difficult
+to distinguish between a missing property and a property whose value
+was @code{nil}; thus, setting a property to @code{nil} was close
+enough to @code{remprop} for most purposes.)
+@end defun
+
 @node Other Plists
-@subsection Property Lists Outside Symbols
+@subsection Property Lists Not Associated with Objects
 
   These functions are useful for manipulating property lists
 that are stored in places other than symbols:
index 5145ee7..7565951 100644 (file)
@@ -1,3 +1,12 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-06  Mike Alexander  <mta@arbortext.com>
+
+       * xemacs.mak (install): Copy xemacs.dmp if using the portable
+       dumper.
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
index aa27727..9a155f0 100644 (file)
@@ -420,8 +420,6 @@ Boston, MA 02111-1307, USA.  */
    compiling-running-crashing. */
 #undef NO_DOC_FILE
 
-#define CONST const
-
 /* If not 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.
index 19bed41..5b4aef6 100644 (file)
@@ -1283,6 +1283,9 @@ install:  all
        @copy $(LIB_SRC)\DOC "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
        @copy $(CONFIG_VALUES) "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
        @copy $(XEMACS)\src\xemacs.exe "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
+!if $(USE_PORTABLE_DUMPER)
+       @copy $(XEMACS)\src\xemacs.dmp "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
+!endif
        @copy $(RUNEMACS) "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
        @xcopy /e /q $(XEMACS)\etc  "$(INSTALL_DIR)\etc\"
        @xcopy /e /q $(XEMACS)\info "$(INSTALL_DIR)\info\"
index afa30ff..86278de 100644 (file)
@@ -8,6 +8,8 @@ puresize-adjust.h
 sheap-adjust.h
 temacs
 xemacs
+xemacs.dmp
 SATISFIED
 update-elc.stamp
-*.so.*
\ No newline at end of file
+*.so.*
+gmon.out
index 1bc0d94..b484860 100644 (file)
@@ -1,3 +1,328 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-15  Olivier Galibert  <galibert@pobox.com>
+
+       * fns.c (size_bit_vector): Fix computation of the size.
+
+2000-02-15  Martin Buchholz  <martin@xemacs.org>
+
+       * *.[ch]: Change CONST to const globally.
+       find -name '*.[ch]' | \
+       xargs global-replace \
+       's/(^|(?<=[^A-Za-z0-9_]))CONST((?=[^A-Za-z0-9_])|$)/const/g'
+       - Remove vestigial references to CONST_IS_LOSING
+
+2000-02-13  Jonathan Harris  <jhar@tardis.ed.ac.uk>
+
+       * event-msw.c (mswindows_drain_windows_queue): Remove hack to
+       bailout early on quit. Enqueue WM_PAINT events as XEmacs magic
+       events instead of dispatching them directly.
+       (mswindows_handle_paint): New function to do repainting.
+       (mswindows_wnd_proc):
+       (emacs_mswindows_handle_magic_event): Call above function.
+
+2000-02-13  Jonathan Harris  <jhar@tardis.ed.ac.uk>
+
+       * objects-msw.c (mswindows_create_font_variant): Return the new
+       font handle.
+       (initialize_font_instance): Get font metrics from the underlined
+       variant of the font to cope with the case where the underlined
+       font has a bigger descent.
+
+2000-02-08   Daiki Ueno  <ueno@ueda.info.waseda.ac.jp>
+
+       * gui.c (gui_item_accelerator): Return the first underlined
+       character in item name.
+
+2000-02-11  Kirill 'Big K' Katsnelson  <kkm@dtmx.com>
+
+       * lisp.h: Added Qprinter.
+
+       * general.c (syms_of_general): Initialized it.
+
+       * redisplay-msw.c (get_frame_dc): Conditionally start a new page.
+       (get_frame_dc): 
+       (get_frame_compdc): Made inline.
+
+       * console.h (struct console_methods): Added eject_page method.
+
+       * frame.h: Added FRAME_DISPLAY_P and friends.
+       Aligned backslahes in many macros in more readable fashion.
+       Added page_number to struct frame, and an accessor macro
+       for it.
+
+       * defice.h: Added DEVICE_DISPLAY_P and friends.
+
+       * device.c (Fdevice_printer_p): Used these.
+
+       * frame.c (allocate_frame_core): Initialize page number.
+       (Fprint_job_page_number): 
+       (Fprint_job_eject_page): Implemented.
+
+       * frame-msw.c (msprinter_eject_page): Added method.
+       (msprinter_start_page): Added.
+
+       * window.c (Fwindow_truncated_p): Fixed docstring.
+       (Fwindow_last_line_visible_height): Implemented.
+
+2000-02-09  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * frame.c (change_frame_size_1): Undo 2000-02-03 change.
+
+1999-12-20  Yoshiki Hayashi  <t90553@mail.ecc.u-tokyo.ac.jp>
+
+       * syntax.c (scan_words): Always advance at least one character.
+
+2000-02-13  Andy Piper  <andy@xemacs.org>
+
+       * redisplay.c (add_glyph_rune): call get_glyph_cachel_index here
+       to make sure the glyph is in the cachels.
+
+       * glyphs.h (struct Lisp_Image_Instance): make layout_changed a
+       global image instance flag.
+       (IMAGE_INSTANCE_NEEDS_LAYOUT): new macro.
+       (XIMAGE_INSTANCE_NEEDS_LAYOUT): ditto.
+
+       * glyphs.c (allocate_image_instance): set dirty bits correctly.
+       (Fset_image_instance_property): mark layout as changed.
+       (invalidate_glyph_geometry_maybe): mark layout as changed.
+       (glyph_width): use new NEEDS_LAYOUT macro.
+       (glyph_ascent): ditto.
+       (glyph_descent): ditto.
+       (glyph_height): ditto.
+       (image_instance_layout): mark layout as clean after laying out.
+       (update_subwindow): don't mark layout as clean here.
+
+       * glyphs-x.h (IMAGE_INSTANCE_X_WIDGET_ID): undo C++ changes, they
+       should no longer be needed.
+
+       * glyphs-x.c (x_update_widget): sanitize asserts.
+       (x_finalize_image_instance): sanitize assignment to widgets.
+
+       * glyphs-widget.c (widget_instantiate): don't need to clear the
+       layout flag here.
+
+2000-02-13  Martin Buchholz  <martin@xemacs.org>
+
+       * sysdep.c (getcwd): Use standard prototype.
+       * sysdep.h (getcwd): Use standard prototype.
+
+       * fns.c (Fsubseq): Change parameters to more natural ANSI Lisp
+       (sequence, start, end).
+       Remove redundant type checking.
+       (Fmapconcat): Remove useless GCPRO, a wrong-headed attempt (in
+       view of `caller-protects') to avoid a crash where the real fix was
+       found elsewhere.
+
+2000-02-12  Martin Buchholz  <martin@xemacs.org>
+
+       * glyphs-x.c (x_finalize_image_instance): Compile error fixes.
+
+       * s/sol2.h: Remove feature macro initialization.
+
+       * alloc.c (alloc_lcrecord): Add more type checking assertions.
+       (vector_hash): New.  Code from internal_hash.
+       * lrecord.h: 
+       Fix up allocation subsystem comments.
+
+       * config.h.in: Add __EXTENSIONS__ for Solaris.
+
+       * systime.h (EMACS_GETTIMEOFDAY): New.
+       (EMACS_GET_TIME): Use EMACS_GETTIMEOFDAY.
+       Remove Solaris-specific code.
+       Use void* for the (ignored) second arg for gettimeofday().
+
+       * elhash.c (hash_table_hash): Implement it, finally.
+       * elhash.c:  Use hashcode_t.
+
+       * linuxplay.c (sighandler): Fix prototypes to use SIGTYPE.
+       * sunplay.c (sighandler): Fix prototype to use SIGTYPE.
+
+       * lisp.h (STRETCHY_STRUCT_SIZEOF): Delete.
+       * fns.c (size_bit_vector): 
+       * alloc.c (size_vector): 
+       (make_vector_internal): 
+       (make_bit_vector_internal): 
+       (sweep_bit_vectors_1): 
+       Replace calls to STRETCHY_STRUCT_SIZEOF with offsetof expression.
+
+2000-02-10  Martin Buchholz  <martin@xemacs.org>
+
+       * s/aix4.h: #define MAP_FAILED if sys/mman.h didn't.
+       Include strings.h to avoid warnings for bzero and strcasecmp.
+
+2000-02-10  Olivier Galibert  <galibert@pobox.com>
+
+       * alloc.c: Move STRETCHY_STRUCT_SIZEOF from here...
+       * lisp.h (STRETCHY_STRUCT_SIZEOF): ...to here
+
+       * fns.c (size_bit_vector): New.  Declare bit vectors as a
+       sequence.
+
+2000-02-10  Olivier Galibert  <galibert@pobox.com>
+
+       * symeval.h (struct symbol_value_magic): Remove "next" kludge and
+       use a value field instead.
+       (symbol_value_forward_forward): Use value field.
+       (DEFVAR_SYMVAL_FWD): Use value field.
+       (DEFVAR_SYMVAL_FWD_INT): Added.  Dumps the int with dumpopaque.
+       (DEFVAR_INT): Use DEFVAR_SYMVAL_FWD_INT.
+       (DEFVAR_CONST_INT): Ditto.
+       (DEFVAR_BOOL): Ditto.
+       (DEFVAR_CONST_BOOL): Ditto.
+       (DEFVAR_INT_MAGIC): Ditto.
+       (DEFVAR_BOOL_MAGIC): Ditto.
+
+       * symbols.c (guts_of_unbound_marker): Use value field.
+       * console.c (DEFVAR_CONSOLE_LOCAL_1): Ditto.
+       * buffer.c (DEFVAR_BUFFER_LOCAL_1): Ditto.
+
+       * lisp.h: Declare dumpopaque and noninteractive1.
+
+       * alloc.c (dumpopaque): Added.
+       (pdump_dump_opaquevec): Added.
+       (pdump): Call pdump_dump_opaquevec to dump opaque data.
+       (pdump_load): Reload opaque data.  Sync noninteractive1 with
+       noninteractive.
+
+2000-02-10  Andy Piper  <andy@xemacs.org>
+
+       * glyphs.c (image_instance_layout): if the size changes, mark it
+       as such.
+
+       * redisplay-output.c (redisplay_output_layout): Update the
+       subwindow here.
+       (redisplay_output_subwindow): ditto.
+
+       * glyphs.c (update_subwindow): make sure we reset flags for
+       layouts as well as everything else.
+
+       * glyphs-widget.c (layout_layout): don't need to set the instances
+       dimensions here.
+
+2000-02-09  Martin Buchholz  <martin@xemacs.org>
+
+       * device-x.c (x_init_device): Wrap calls to dll_*  in HAVE_SHLIB,
+       not HAVE_DLOPEN, which is a lower-level thing.
+
+       * .cvsignore: Ignore gmon.out
+
+2000-02-09  Hamish Macdonald <hamishm@lucent.com>
+
+       * .cvsignore: Ignore portable dumper xemacs.dmp file
+
+2000-02-09  Andy Piper  <andy@xemacs.org>
+
+       * redisplay-output.c (redisplay_output_layout): be more clever
+       about when we output based on the changed flags.
+
+       * glyphs.h (struct image_instantiator_methods): add update_method.
+       (struct Lisp_Image_Instance): add changed flags. Declare new
+       macros for manipulating them.
+
+       * glyphs.c (allocate_image_instance): renamed glyph -> parent.
+       (image_instance_parent_glyph): find an image_instance's parent
+       glyph or image_instance.
+       (image_instance_layout): mark the size as changed.
+       (set_image_instance_dirty_p): new function. mark an image
+       instance, plus all of its parents, as dirty.
+       (Fset_image_instance_property): use it.
+       (Fglyph_animated_timeout_handler): use it.
+       (update_subwindow): call update_widget and device methods for
+       update_subwindow. Mark all changed flags as clean.
+       (Fresize_subwindow): mark size as changed.
+
+       * glyphs-x.c (x_finalize_image_instance): try and detect gc
+       failures.
+       (x_update_subwindow): only resize subwindows here.
+       (x_update_widget): new function. Update all changed properties of
+       a widget.
+       (x_resize_subwindow): deleted.
+       (x_widget_set_property): deleted.
+       (x_progress_gauge_set_property): deleted.
+       (x_progress_gauge_update): new function. Implement recorded
+       changes.
+       (x_tab_control_update): ditto.
+       (x_tab_control_set_property): deleted.
+       (console_type_create_glyphs_x): declare new functions.
+       (image_instantiator_format_create_glyphs_x): ditto.
+
+       * glyphs-widget.c (widget_set_property): mark text changed.
+       (update_widget): new function. Update properties of a widget.
+       (widget_instantiate): for layouts make sure we set their
+       children's parent correctly.
+       (tab_control_set_property): new function. Record changes that will
+       take place under redisplay's control.
+       (progress_gauge_set_property): ditto.
+       (image_instantiator_progress_guage): declare new functions.
+       (image_instantiator_tab_control): ditto.
+
+       * glyphs-msw.c (mswindows_update_subwindow): just do resizing here
+       now.
+       (mswindows_update_widget): new function. Update all properties on
+       a widget that have changed.
+       (mswindows_button_update): new function. Update a button's set
+       state.
+       (mswindows_tab_control_update): new function. Update the items in
+       a tab.
+       (mswindows_tab_control_set_property): deleted.
+       (mswindows_progress_gauge_update): new function. Update the
+       progress gauge's progress.
+       (mswindows_widget_set_property): deleted. This is all done
+       asynchronously now.
+       (mswindows_progress_gauge_set_property): ditto.
+       (console_type_create_glyphs_mswindows): declare new methods.
+       (image_instantiator_format_create_glyphs_mswindows): ditto.
+
+       * frame-msw.c (msprinter_init_frame_1): Remove unused variables.
+       (msprinter_set_frame_properties): ditto.
+
+       * console.h (struct console_methods): Add update_widget_method.
+
+2000-02-09  Andy Piper  <andy@xemacs.org>
+
+       * gui-msw.c (Fmswindows_shell_execute): Make
+       mswindows-shell-execute industrial strength.
+
+2000-02-08  Martin Buchholz  <martin@xemacs.org>
+
+       * lrecord.h: Make macro argument `props' match member function `plist'.
+       * fns.c (Fget):
+       * fns.c (Fput):
+       * fns.c (Fremprop):
+       * fns.c (Fobject_plist):
+       * alloc.c:
+       * symbols.c:
+       Object property list frobbing cleanup.
+       - Allow any lisp object (compared with `eq'), not just symbols, as
+         keys in object plists.
+       - Move symbol plist frobbing into symbols.c, where it belongs.
+       - Move string plist frobbing into alloc.c, where it belongs.
+       - Everything's an lrecord now, so no need to test for symbolp, etc.
+       - Fix up doc strings to refer to PROPERTY, not PROPNAME.
+
+       * extents.c: Reorder code to remove declarations.
+
+       * frame.h (store_in_alist): Remove useless declaration.
+
+2000-02-07  Martin Buchholz  <martin@xemacs.org>
+
+       * event-Xt.c (x_has_keysym): Use XConvertCase only if available.
+       * config.h.in: Add HAVE_XCONVERTCASE.
+
+2000-02-07  Andy Piper  <andy@xemacs.org>
+       
+       * glyphs.c (image_instance_layout): undo 2000-01-29 change since
+       it breaks many things.
+
+2000-02-07  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+       * src/syntax.h (SYNTAX_START_P): Check whether the two chars
+       actually can start a common comment type.
+       * src/syntax.h (SYNTAX_END_P): ditto for end.
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
index 29dbb22..2c591c1 100644 (file)
@@ -44,9 +44,6 @@ General changes for XEmacs:
 
 2. Storage classes:
 
-   -- All occurrences of `const' should get replaced by CONST.  This
-      is to work around a header conflict with X11R4.
-
    -- All occurrences of `register' should be replaced by `REGISTER'.
       It interferes with backtraces so we disable it if DEBUG_XEMACS
       is defined.
index 0dfc959..89f3040 100644 (file)
@@ -80,15 +80,6 @@ static char *pdump_rt_list = 0;
 
 EXFUN (Fgarbage_collect, 0);
 
-/* Return the true size of a struct with a variable-length array field.  */
-#define STRETCHY_STRUCT_SIZEOF(stretchy_struct_type,           \
-                              stretchy_array_field,            \
-                              stretchy_array_length)           \
-  (offsetof (stretchy_struct_type, stretchy_array_field) +     \
-   (offsetof (stretchy_struct_type, stretchy_array_field[1]) - \
-    offsetof (stretchy_struct_type, stretchy_array_field[0])) *        \
-   (stretchy_array_length))
-
 #if 0 /* this is _way_ too slow to be part of the standard debug options */
 #if defined(DEBUG_XEMACS) && defined(MULE)
 #define VERIFY_STRING_CHARS_INTEGRITY
@@ -174,7 +165,7 @@ Lisp_Object Vpost_gc_hook, Qpost_gc_hook;
 /* "Garbage collecting" */
 Lisp_Object Vgc_message;
 Lisp_Object Vgc_pointer_glyph;
-static CONST char gc_default_message[] = "Garbage collecting";
+static const char gc_default_message[] = "Garbage collecting";
 Lisp_Object Qgarbage_collecting;
 
 #ifndef VIRT_ADDR_VARIES
@@ -234,7 +225,7 @@ release_breathing_space (void)
 
 /* malloc calls this if it finds we are near exhausting storage */
 void
-malloc_warning (CONST char *str)
+malloc_warning (const char *str)
 {
   if (ignore_malloc_warnings)
     return;
@@ -357,7 +348,7 @@ deadbeef_memory (void *ptr, size_t size)
 
 #undef xstrdup
 char *
-xstrdup (CONST char *str)
+xstrdup (const char *str)
 {
   int len = strlen (str) + 1;   /* for stupid terminating 0 */
 
@@ -368,7 +359,7 @@ xstrdup (CONST char *str)
 
 #ifdef NEED_STRDUP
 char *
-strdup (CONST char *s)
+strdup (const char *s)
 {
   return xstrdup (s);
 }
@@ -382,22 +373,26 @@ allocate_lisp_storage (size_t size)
 }
 
 
-/* lrecords are chained together through their "next.v" field.
- * After doing the mark phase, the GC will walk this linked
- *  list and free any record which hasn't been marked.
- */
+/* lcrecords are chained together through their "next" field.
+   After doing the mark phase, GC will walk this linked list
+   and free any lcrecord which hasn't been marked. */
 static struct lcrecord_header *all_lcrecords;
 
 void *
-alloc_lcrecord (size_t size, CONST struct lrecord_implementation *implementation)
+alloc_lcrecord (size_t size, const struct lrecord_implementation *implementation)
 {
   struct lcrecord_header *lcheader;
 
-#ifdef ERROR_CHECK_GC
+#ifdef ERROR_CHECK_TYPECHECK
   if (implementation->static_size == 0)
     assert (implementation->size_in_bytes_method);
   else
     assert (implementation->static_size == size);
+
+  assert (! implementation->basic_p);
+
+  if (implementation->hash == NULL)
+    assert (implementation->equal == NULL);
 #endif
 
   lcheader = (struct lcrecord_header *) allocate_lisp_storage (size);
@@ -468,7 +463,7 @@ disksave_object_finalization_1 (void)
 }
 
 /* Semi-kludge -- lrecord_symbol_value_forward objects get stuck
-   in CONST space and you get SEGV's if you attempt to mark them.
+   in const space and you get SEGV's if you attempt to mark them.
    This sits in lheader->implementation->marker. */
 
 Lisp_Object
@@ -940,12 +935,13 @@ mark_cons (Lisp_Object obj)
 static int
 cons_equal (Lisp_Object ob1, Lisp_Object ob2, int depth)
 {
-  while (internal_equal (XCAR (ob1), XCAR (ob2), depth + 1))
+  depth++;
+  while (internal_equal (XCAR (ob1), XCAR (ob2), depth))
     {
       ob1 = XCDR (ob1);
       ob2 = XCDR (ob2);
       if (! CONSP (ob1) || ! CONSP (ob2))
-       return internal_equal (ob1, ob2, depth + 1);
+       return internal_equal (ob1, ob2, depth);
     }
   return 0;
 }
@@ -1138,10 +1134,9 @@ mark_vector (Lisp_Object obj)
 }
 
 static size_t
-size_vector (CONST void *lheader)
+size_vector (const void *lheader)
 {
-  return STRETCHY_STRUCT_SIZEOF (Lisp_Vector, contents,
-                                ((Lisp_Vector *) lheader)->size);
+  return offsetof (Lisp_Vector, contents[((Lisp_Vector *) lheader)->size]);
 }
 
 static int
@@ -1161,6 +1156,15 @@ vector_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
   return 1;
 }
 
+static hashcode_t
+vector_hash (Lisp_Object obj, int depth)
+{
+  return HASH2 (XVECTOR_LENGTH (obj),
+               internal_array_hash (XVECTOR_DATA (obj),
+                                    XVECTOR_LENGTH (obj),
+                                    depth + 1));
+}
+
 static const struct lrecord_description vector_description[] = {
   { XD_LONG,              offsetof (Lisp_Vector, size) },
   { XD_LISP_OBJECT_ARRAY, offsetof (Lisp_Vector, contents), XD_INDIRECT(0, 0) },
@@ -1170,12 +1174,7 @@ static const struct lrecord_description vector_description[] = {
 DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION("vector", vector,
                                       mark_vector, print_vector, 0,
                                       vector_equal,
-                                      /*
-                                       * No `hash' method needed for
-                                       * vectors.  internal_hash
-                                       * knows how to handle vectors.
-                                       */
-                                      0,
+                                      vector_hash,
                                       vector_description,
                                       size_vector, Lisp_Vector);
 
@@ -1184,7 +1183,7 @@ static Lisp_Vector *
 make_vector_internal (size_t sizei)
 {
   /* no vector_next */
-  size_t sizem = STRETCHY_STRUCT_SIZEOF (Lisp_Vector, contents, sizei);
+  size_t sizem = offsetof (Lisp_Vector, contents[sizei]);
   Lisp_Vector *p = (Lisp_Vector *) alloc_lcrecord (sizem, &lrecord_vector);
 
   p->size = sizei;
@@ -1347,7 +1346,7 @@ static Lisp_Bit_Vector *
 make_bit_vector_internal (size_t sizei)
 {
   size_t num_longs = BIT_VECTOR_LONG_STORAGE (sizei);
-  size_t sizem = STRETCHY_STRUCT_SIZEOF (Lisp_Bit_Vector, bits, num_longs);
+  size_t sizem = offsetof (Lisp_Bit_Vector, bits[num_longs]);
   Lisp_Bit_Vector *p = (Lisp_Bit_Vector *) allocate_lisp_storage (sizem);
   set_lheader_implementation (&(p->lheader), &lrecord_bit_vector);
 
@@ -1752,21 +1751,67 @@ static const struct lrecord_description string_description[] = {
   { XD_END }
 };
 
-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("string", string,
-                                    mark_string, print_string,
-                                    /*
-                                     * No `finalize', or `hash' methods.
-                                     * internal_hash already knows how
-                                     * to hash strings and finalization
-                                     * is done with the
-                                     * ADDITIONAL_FREE_string macro,
-                                     * which is the standard way to do
-                                     * finalization when using
-                                     * SWEEP_FIXED_TYPE_BLOCK().
-                                     */
-                                    0, string_equal, 0,
-                                    string_description,
-                                    Lisp_String);
+/* We store the string's extent info as the first element of the string's
+   property list; and the string's MODIFF as the first or second element
+   of the string's property list (depending on whether the extent info
+   is present), but only if the string has been modified.  This is ugly
+   but it reduces the memory allocated for the string in the vast
+   majority of cases, where the string is never modified and has no
+   extent info.
+
+   #### This means you can't use an int as a key in a string's plist. */
+
+static Lisp_Object *
+string_plist_ptr (Lisp_Object string)
+{
+  Lisp_Object *ptr = &XSTRING (string)->plist;
+
+  if (CONSP (*ptr) && EXTENT_INFOP (XCAR (*ptr)))
+    ptr = &XCDR (*ptr);
+  if (CONSP (*ptr) && INTP (XCAR (*ptr)))
+    ptr = &XCDR (*ptr);
+  return ptr;
+}
+
+static Lisp_Object
+string_getprop (Lisp_Object string, Lisp_Object property)
+{
+  return external_plist_get (string_plist_ptr (string), property, 0, ERROR_ME);
+}
+
+static int
+string_putprop (Lisp_Object string, Lisp_Object property, Lisp_Object value)
+{
+  external_plist_put (string_plist_ptr (string), property, value, 0, ERROR_ME);
+  return 1;
+}
+
+static int
+string_remprop (Lisp_Object string, Lisp_Object property)
+{
+  return external_remprop (string_plist_ptr (string), property, 0, ERROR_ME);
+}
+
+static Lisp_Object
+string_plist (Lisp_Object string)
+{
+  return *string_plist_ptr (string);
+}
+
+/* No `finalize', or `hash' methods.
+   internal_hash() already knows how to hash strings and finalization
+   is done with the ADDITIONAL_FREE_string macro, which is the
+   standard way to do finalization when using
+   SWEEP_FIXED_TYPE_BLOCK(). */
+DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("string", string,
+                                               mark_string, print_string,
+                                               0, string_equal, 0,
+                                               string_description,
+                                               string_getprop,
+                                               string_putprop,
+                                               string_remprop,
+                                               string_plist,
+                                               Lisp_String);
 
 /* String blocks contain this many useful bytes. */
 #define STRING_CHARS_BLOCK_SIZE                                        \
@@ -2111,7 +2156,7 @@ Concatenate all the argument characters and make the result a string.
 /* Take some raw memory, which MUST already be in internal format,
    and package it up into a Lisp string. */
 Lisp_Object
-make_string (CONST Bufbyte *contents, Bytecount length)
+make_string (const Bufbyte *contents, Bytecount length)
 {
   Lisp_Object val;
 
@@ -2128,7 +2173,7 @@ make_string (CONST Bufbyte *contents, Bytecount length)
 /* Take some raw memory, encoded in some external data format,
    and convert it into a Lisp string. */
 Lisp_Object
-make_ext_string (CONST Extbyte *contents, EMACS_INT length,
+make_ext_string (const Extbyte *contents, EMACS_INT length,
                 Lisp_Object coding_system)
 {
   Lisp_Object string;
@@ -2139,28 +2184,28 @@ make_ext_string (CONST Extbyte *contents, EMACS_INT length,
 }
 
 Lisp_Object
-build_string (CONST char *str)
+build_string (const char *str)
 {
   /* Some strlen's crash and burn if passed null. */
-  return make_string ((CONST Bufbyte *) str, (str ? strlen(str) : 0));
+  return make_string ((const Bufbyte *) str, (str ? strlen(str) : 0));
 }
 
 Lisp_Object
-build_ext_string (CONST char *str, Lisp_Object coding_system)
+build_ext_string (const char *str, Lisp_Object coding_system)
 {
   /* Some strlen's crash and burn if passed null. */
-  return make_ext_string ((CONST Extbyte *) str, (str ? strlen(str) : 0),
+  return make_ext_string ((const Extbyte *) str, (str ? strlen(str) : 0),
                          coding_system);
 }
 
 Lisp_Object
-build_translated_string (CONST char *str)
+build_translated_string (const char *str)
 {
   return build_string (GETTEXT (str));
 }
 
 Lisp_Object
-make_string_nocopy (CONST Bufbyte *contents, Bytecount length)
+make_string_nocopy (const Bufbyte *contents, Bytecount length)
 {
   Lisp_String *s;
   Lisp_Object val;
@@ -2228,7 +2273,7 @@ mark_lcrecord_list (Lisp_Object obj)
        (struct free_lcrecord_header *) lheader;
 
 #ifdef ERROR_CHECK_GC
-      CONST struct lrecord_implementation *implementation
+      const struct lrecord_implementation *implementation
        = LHEADER_IMPLEMENTATION(lheader);
 
       /* There should be no other pointers to the free list. */
@@ -2256,7 +2301,7 @@ DEFINE_LRECORD_IMPLEMENTATION ("lcrecord-list", lcrecord_list,
                               0, 0, 0, 0, struct lcrecord_list);
 Lisp_Object
 make_lcrecord_list (size_t size,
-                   CONST struct lrecord_implementation *implementation)
+                   const struct lrecord_implementation *implementation)
 {
   struct lcrecord_list *p = alloc_lcrecord_type (struct lcrecord_list,
                                                 &lrecord_lcrecord_list);
@@ -2282,7 +2327,7 @@ allocate_managed_lcrecord (Lisp_Object lcrecord_list)
 #ifdef ERROR_CHECK_GC
       struct lrecord_header *lheader =
        (struct lrecord_header *) free_header;
-      CONST struct lrecord_implementation *implementation
+      const struct lrecord_implementation *implementation
        = LHEADER_IMPLEMENTATION (lheader);
 
       /* There should be no other pointers to the free list. */
@@ -2319,7 +2364,7 @@ free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord)
     (struct free_lcrecord_header *) XPNTR (lcrecord);
   struct lrecord_header *lheader =
     (struct lrecord_header *) free_header;
-  CONST struct lrecord_implementation *implementation
+  const struct lrecord_implementation *implementation
     = LHEADER_IMPLEMENTATION (lheader);
 
 #ifdef ERROR_CHECK_GC
@@ -2362,7 +2407,7 @@ Does not copy symbols.
 /* This will be used more extensively In The Future */
 static int last_lrecord_type_index_assigned;
 
-CONST struct lrecord_implementation *lrecord_implementations_table[128];
+const struct lrecord_implementation *lrecord_implementations_table[128];
 #define max_lrecord_type (countof (lrecord_implementations_table) - 1)
 
 struct gcpro *gcprolist;
@@ -2432,6 +2477,27 @@ dumpstruct (void *varaddress, const struct struct_description *desc)
   dumpstructidx++;
 }
 
+/* Not "static" because of linker lossage on some systems */
+struct dumpopaque_info
+{
+  void *data;
+  size_t size;
+} dumpopaquevec[200];
+
+static int dumpopaqueidx;
+
+/* Put an entry in dumpopaquevec, pointing at the variable whose address is given
+ */
+void
+dumpopaque (void *varaddress, size_t size)
+{
+  if (dumpopaqueidx >= countof (dumpopaquevec))
+    abort ();
+  dumpopaquevec[dumpopaqueidx].data = varaddress;
+  dumpopaquevec[dumpopaqueidx].size = size;
+  dumpopaqueidx++;
+}
+
 Lisp_Object *pdump_wirevec[50];
 static int pdump_wireidx;
 
@@ -2488,7 +2554,7 @@ mark_object (Lisp_Object obj)
       if (! MARKED_RECORD_HEADER_P (lheader) &&
          ! UNMARKABLE_RECORD_HEADER_P (lheader))
        {
-         CONST struct lrecord_implementation *implementation =
+         const struct lrecord_implementation *implementation =
            LHEADER_IMPLEMENTATION (lheader);
          MARK_RECORD_HEADER (lheader);
 #ifdef ERROR_CHECK_GC
@@ -2538,7 +2604,7 @@ static int gc_count_short_string_total_size;
 
 \f
 int
-lrecord_type_index (CONST struct lrecord_implementation *implementation)
+lrecord_type_index (const struct lrecord_implementation *implementation)
 {
   int type_index = *(implementation->lrecord_type_index);
   /* Have to do this circuitous validation test because of problems
@@ -2567,9 +2633,9 @@ static struct
 } lcrecord_stats [countof (lrecord_implementations_table)];
 
 static void
-tick_lcrecord_stats (CONST struct lrecord_header *h, int free_p)
+tick_lcrecord_stats (const struct lrecord_header *h, int free_p)
 {
-  CONST struct lrecord_implementation *implementation =
+  const struct lrecord_implementation *implementation =
     LHEADER_IMPLEMENTATION (h);
   int type_index = lrecord_type_index (implementation);
 
@@ -2681,8 +2747,7 @@ sweep_bit_vectors_1 (Lisp_Object *prev,
          total_size += len;
           total_storage +=
            MALLOC_OVERHEAD +
-           STRETCHY_STRUCT_SIZEOF (Lisp_Bit_Vector, bits,
-                                   BIT_VECTOR_LONG_STORAGE (len));
+           offsetof (Lisp_Bit_Vector, bits[BIT_VECTOR_LONG_STORAGE (len)]);
          num_used++;
          /* #### May modify next on a C_READONLY bitvector */
          prev = &(bit_vector_next (v));
@@ -3439,7 +3504,7 @@ garbage_collect_1 (void)
                       : 0);
          Lisp_Object args[2], whole_msg;
          args[0] = build_string (msg ? msg :
-                                 GETTEXT ((CONST char *) gc_default_message));
+                                 GETTEXT ((const char *) gc_default_message));
          args[1] = build_string ("...");
          whole_msg = Fconcat (2, args);
          echo_area_message (f, (Bufbyte *) 0, whole_msg, 0, -1,
@@ -3591,7 +3656,7 @@ garbage_collect_1 (void)
            {
              Lisp_Object args[2], whole_msg;
              args[0] = build_string (msg ? msg :
-                                     GETTEXT ((CONST char *)
+                                     GETTEXT ((const char *)
                                               gc_default_message));
              args[1] = build_string ("... done");
              whole_msg = Fconcat (2, args);
@@ -3617,7 +3682,7 @@ garbage_collect_1 (void)
 /* Debugging aids.  */
 
 static Lisp_Object
-gc_plist_hack (CONST char *name, int value, Lisp_Object tail)
+gc_plist_hack (const char *name, int value, Lisp_Object tail)
 {
   /* C doesn't have local functions (or closures, or GC, or readable syntax,
      or portable numeric datatypes, or bit-vectors, or characters, or
@@ -3658,7 +3723,7 @@ Garbage collection happens automatically if you cons more than
          || lcrecord_stats[i].instances_on_free_list != 0)
         {
           char buf [255];
-          CONST char *name = lrecord_implementations_table[i]->name;
+          const char *name = lrecord_implementations_table[i]->name;
          int len = strlen (name);
          /* save this for the FSFmacs-compatible part of the summary */
          if (i == *lrecord_vector.lrecord_type_index)
@@ -4167,6 +4232,7 @@ typedef struct
   EMACS_UINT reloc_address;
   int nb_staticpro;
   int nb_structdmp;
+  int nb_opaquedmp;
   int last_type;
 } dump_header;
 
@@ -4848,6 +4914,17 @@ pdump_dump_structvec (void)
 }
 
 static void
+pdump_dump_opaquevec (void)
+{
+  int i;
+  for (i=0; i<dumpopaqueidx; i++)
+    {
+      write (pdump_fd, &(dumpopaquevec[i]), sizeof (dumpopaquevec[i]));
+      write (pdump_fd, dumpopaquevec[i].data, dumpopaquevec[i].size);
+    }
+}
+
+static void
 pdump_dump_itable (void)
 {
   write (pdump_fd, lrecord_implementations_table, sizeof (lrecord_implementations_table));
@@ -5002,6 +5079,7 @@ pdump (void)
   hd.reloc_address = 0;
   hd.nb_staticpro = staticidx;
   hd.nb_structdmp = dumpstructidx;
+  hd.nb_opaquedmp = dumpopaqueidx;
   hd.last_type    = last_lrecord_type_index_assigned;
 
   cur_offset = 256;
@@ -5026,6 +5104,7 @@ pdump (void)
 
   pdump_dump_staticvec ();
   pdump_dump_structvec ();
+  pdump_dump_opaquevec ();
   pdump_dump_itable ();
   pdump_dump_rtables ();
   pdump_dump_wired ();
@@ -5099,6 +5178,14 @@ pdump_load (void)
       *adr = (void *) (PDUMP_READ (p, char *) + delta);
     }
 
+  /* Put back the opaques */
+  for (i=0; i<((dump_header *)pdump_start)->nb_opaquedmp; i++)
+    {
+      struct dumpopaque_info di = PDUMP_READ (p, struct dumpopaque_info);
+      memcpy (di.data, p, di.size);
+      p += di.size;
+    }
+
   /* Put back the lrecord_implementations_table */
   memcpy (lrecord_implementations_table, p, sizeof (lrecord_implementations_table));
   p += sizeof (lrecord_implementations_table);
@@ -5161,6 +5248,10 @@ pdump_load (void)
        } else
          p += sizeof (Lisp_Object) * rt.count;
     }
+
+  /* Put back noninteractive1 to its real value */
+  noninteractive1 = noninteractive;
+
   return 1;
 }
 
index 523ddc3..deb7861 100644 (file)
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA.  */
 /* #### start of hack */
 
 static unsigned long
-alloc_color (Display* dpy, CONST char* colorname, int light)
+alloc_color (Display* dpy, const char* colorname, int light)
 {
   Colormap cmap = DEVICE_X_COLORMAP (XDEVICE(Vdefault_x_device));
   unsigned long pixel = 0;
@@ -61,7 +61,7 @@ alloc_color (Display* dpy, CONST char* colorname, int light)
 }
 
 static XFontStruct *
-open_font (Display* dpy, CONST char* font_name)
+open_font (Display* dpy, const char* font_name)
 {
   XFontStruct* fontStruct = NULL;
 
index 3410129..f0b95ef 100644 (file)
@@ -83,7 +83,7 @@ static Pixmap b_mask;
 static int    b_maskWidth, b_maskHeight;
 static GC     b_maskGC;
 
-static CONST char* b_text;
+static const char* b_text;
 static int b_width, b_height;
 
 static XtIntervalId b_timer;
@@ -214,7 +214,7 @@ grow_pixmap_mask (int width, int height)
 ============================================================================*/
 
 static void
-text_extent (XFontStruct* fontStruct, CONST char* text, int len,
+text_extent (XFontStruct* fontStruct, const char* text, int len,
             int* width, int* height)
 {
   XCharStruct extent;
@@ -227,13 +227,13 @@ text_extent (XFontStruct* fontStruct, CONST char* text, int len,
 }
 
 static void
-get_text_size (Display* dpy, XFontStruct* fontStruct, CONST char* text,
+get_text_size (Display* dpy, XFontStruct* fontStruct, const char* text,
               int* max_width, int* max_height)
 {
   int width;
   int height;
-  CONST char* start;
-  CONST char* end;
+  const char* start;
+  const char* end;
 
   *max_width = *max_height = 0;
 
@@ -257,10 +257,10 @@ get_text_size (Display* dpy, XFontStruct* fontStruct, CONST char* text,
 
 static void
 draw_text (Display* dpy, Window win, GC gc, XFontStruct* fontStruct,
-          int x, int y, CONST char* text)
+          int x, int y, const char* text)
 {
-  CONST char* start;
-  CONST char* end;
+  const char* start;
+  const char* end;
   int font_height;
 
   y += fontStruct->ascent;
@@ -538,7 +538,7 @@ balloon_help_set_delay (unsigned long milliseconds)
 }
 
 void
-balloon_help_show (CONST char* text)
+balloon_help_show (const char* text)
 {
   assert (b_dpy != NULL);
 
index 4498ab1..d36bef7 100644 (file)
@@ -29,7 +29,7 @@ void balloon_help_create (Display* dpy,
                          Pixel fg, Pixel bg, Pixel shine, Pixel shadow,
                          XFontStruct* font);
 void balloon_help_set_delay (unsigned long milliseconds);
-void balloon_help_show (CONST char* text);
+void balloon_help_show (const char* text);
 void balloon_help_hide (void);
 void balloon_help_move_to_pointer (void);
 
index eef4e80..946dddf 100644 (file)
@@ -34,15 +34,15 @@ Boston, MA 02111-1307, USA.  */
 
 /*********************** stdlib functions *********************/
 
-/* void *      memchr (CONST void *, int, size_t); */
+/* void *      memchr (const void *, int, size_t); */
 
-/* int memcmp (CONST void *, CONST void *, size_t); */
-/* void *      memcpy (void *, CONST void *, size_t); */
-/* void *      memmove (void *, CONST void *, size_t);*/
+/* int memcmp (const void *, const void *, size_t); */
+/* void *      memcpy (void *, const void *, size_t); */
+/* void *      memmove (void *, const void *, size_t);*/
 /* void *      memset (void *, int, int); */
-/* char *      strcat (char *, CONST char *); */
-/* char *      strchr (CONST char *, int); */
-/* int strcmp (CONST char *, CONST char *); */
+/* char *      strcat (char *, const char *); */
+/* char *      strchr (const char *, int); */
+/* int strcmp (const char *, const char *); */
 int    strcasecmp (char *, char *);
 
 /* Yes, they even left these functions out! */
@@ -53,39 +53,39 @@ int      toupper (int);
 
 #include <stdio.h> /* else can't declare FILE */
 
-/* FILE        *fopen (CONST char *, CONST char *); */
-/* FILE        *freopen (CONST char *, CONST char *, FILE *); */
+/* FILE        *fopen (const char *, const char *); */
+/* FILE        *freopen (const char *, const char *, FILE *); */
 FILE   *tmpfile (void);
 int    fclose (FILE *);
 char   *fgets (char *, int, FILE *);
 int      fgetc (FILE *);
 int      fflush (FILE *);
-int      fprintf (FILE *, CONST char *, ...);
+int      fprintf (FILE *, const char *, ...);
 int      fputc (char, FILE *);
-int      fputs (CONST char *, FILE *);
+int      fputs (const char *, FILE *);
 size_t   fread (void *, size_t, size_t, FILE *);
-int      fscanf (FILE *, CONST char *, ...);
+int      fscanf (FILE *, const char *, ...);
 int    fgetpos (FILE *, long *);
 int      fseek (FILE *, long, int);
-int    fsetpos (FILE *, CONST long *);
+int    fsetpos (FILE *, const long *);
 long     ftell (FILE *);
-size_t   fwrite (CONST void *, size_t, size_t, FILE *);
+size_t   fwrite (const void *, size_t, size_t, FILE *);
 char   *gets (char *);
 int    pclose (FILE *);
-void     perror (CONST char *);
-int      printf (CONST char *, ...);
-int      puts (CONST char *);
-int      remove (CONST char *);
-int      rename (CONST char *, CONST char *);
+void     perror (const char *);
+int      printf (const char *, ...);
+int      puts (const char *);
+int      remove (const char *);
+int      rename (const char *, const char *);
 int      rewind (FILE *);
-int    scanf (CONST char *, ...);
-int    sscanf (CONST char *, CONST char *, ...);
+int    scanf (const char *, ...);
+int    sscanf (const char *, const char *, ...);
 void   setbuf (FILE *, char *);
 int    setvbuf (FILE *, char *, int, size_t);
 int    ungetc (int, FILE *);
-int    vprintf (CONST char *, void *);
-int    vfprintf (FILE *, CONST char *, void *);
-char   *vsprintf (char *, CONST char *, void *);
+int    vprintf (const char *, void *);
+int    vfprintf (FILE *, const char *, void *);
+char   *vsprintf (char *, const char *, void *);
 
 /*********************** signal functions *********************/
 
@@ -101,7 +101,7 @@ int sigpause (int);
 struct timeval;
 struct timezone;
 
-int    utimes (CONST char *, struct timeval *);
+int    utimes (const char *, struct timeval *);
 void   tzset (void);
 time_t time (time_t *);
 int    gettimeofday (struct timeval *, struct timezone *);
@@ -112,12 +112,12 @@ struct stat;
 #include </usr/include/sys/types.h>
 
 int    fsync (int);
-int    lstat (CONST char *, struct stat *);
+int    lstat (const char *, struct stat *);
 int    fchmod (int, mode_t);
 char   *mktemp (char *);
-/* int creat (CONST char *, mode_t); better no decl than a conflicting one... */
-int    symlink (CONST char *, CONST char *);
-int    readlink (CONST char *, char *, int);
+/* int creat (const char *, mode_t); better no decl than a conflicting one... */
+int    symlink (const char *, const char *);
+int    readlink (const char *, char *, int);
 void   sync (void);
 int    select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
 char * getwd (char *);
@@ -146,7 +146,7 @@ int system (char *);
 
 int    ioctl (int, int, ...);
 struct nlist;
-int    nlist (CONST char *, struct nlist *);
+int    nlist (const char *, struct nlist *);
 int    munmap (void *, int);
 int    brk (void *);
 void * sbrk (int);
@@ -158,7 +158,7 @@ int mprotect (void *, int, int);
 
 /*********************** miscellaneous functions *********************/
 
-void   tputs (CONST char *cp, int affcnt, void (*)(int));
+void   tputs (const char *cp, int affcnt, void (*)(int));
 long   random (void);
 int    srandom (int seed);
 
index b7c18f9..3be44f8 100644 (file)
@@ -1186,7 +1186,7 @@ with `delete-process'.
       killp = call1
        (Qyes_or_no_p,
         (emacs_doprnt_string_c
-         ((CONST Bufbyte *) GETTEXT ("Buffer %s modified; kill anyway? "),
+         ((const Bufbyte *) GETTEXT ("Buffer %s modified; kill anyway? "),
           Qnil, -1, XSTRING_DATA (b->name))));
       UNGCPRO;
       if (NILP (killp))
@@ -2378,10 +2378,26 @@ List of functions called with no args to query before killing a buffer.
    from SunPro C's fix-and-continue feature (a way neato feature that
    makes debugging unbelievably more bearable) */
 #define DEFVAR_BUFFER_LOCAL_1(lname, field_name, forward_type, magicfun) do {  \
-  static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C               \
-    = { { { symbol_value_forward_lheader_initializer,                          \
-           (struct lcrecord_header *) &(buffer_local_flags.field_name), 69 },  \
-         forward_type }, magicfun };                                           \
+  static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C =             \
+  { /* struct symbol_value_forward */                                          \
+    { /* struct symbol_value_magic */                                          \
+      { /* struct lcrecord_header */                                           \
+       { /* struct lrecord_header */                                           \
+         1, /* type - index into lrecord_implementations_table */              \
+         0, /* mark bit */                                                     \
+         0, /* c_readonly bit */                                               \
+         0  /* lisp_readonly bit */                                            \
+       },                                                                      \
+       0, /* next */                                                           \
+       0, /* uid  */                                                           \
+       0  /* free */                                                           \
+      },                                                                       \
+      &(buffer_local_flags.field_name),                                                \
+      forward_type                                                             \
+    },                                                                         \
+    magicfun                                                                   \
+  };                                                                           \
+                                                                               \
   {                                                                            \
     int offset = ((char *)symbol_value_forward_forward (&I_hate_C) -           \
                  (char *)&buffer_local_flags);                                 \
index ae4de31..b56d8a5 100644 (file)
@@ -427,8 +427,8 @@ for (mps_bufcons = Qunbound,                                                        \
 } while (0)
 
 #define DEC_CHARPTR(ptr) do {                  \
-  CONST Bufbyte *dc_ptr1 = (ptr);              \
-  CONST Bufbyte *dc_ptr2 = dc_ptr1;            \
+  const Bufbyte *dc_ptr1 = (ptr);              \
+  const Bufbyte *dc_ptr2 = dc_ptr1;            \
   REAL_DEC_CHARPTR (dc_ptr2);                  \
   assert (dc_ptr1 - dc_ptr2 ==                 \
          REP_BYTES_BY_FIRST_BYTE (*dc_ptr2));  \
@@ -470,9 +470,9 @@ for (mps_bufcons = Qunbound,                                                        \
 /*     section of internally-formatted text                      */
 /* -------------------------------------------------------------- */
 
-INLINE CONST Bufbyte *charptr_n_addr (CONST Bufbyte *ptr, Charcount offset);
-INLINE CONST Bufbyte *
-charptr_n_addr (CONST Bufbyte *ptr, Charcount offset)
+INLINE const Bufbyte *charptr_n_addr (const Bufbyte *ptr, Charcount offset);
+INLINE const Bufbyte *
+charptr_n_addr (const Bufbyte *ptr, Charcount offset)
 {
   return ptr + charcount_to_bytecount (ptr, offset);
 }
@@ -487,13 +487,13 @@ charptr_n_addr (CONST Bufbyte *ptr, Charcount offset)
 
 #ifdef MULE
 
-Emchar non_ascii_charptr_emchar (CONST Bufbyte *ptr);
+Emchar non_ascii_charptr_emchar (const Bufbyte *ptr);
 Bytecount non_ascii_set_charptr_emchar (Bufbyte *ptr, Emchar c);
-Bytecount non_ascii_charptr_copy_char (CONST Bufbyte *ptr, Bufbyte *ptr2);
+Bytecount non_ascii_charptr_copy_char (const Bufbyte *ptr, Bufbyte *ptr2);
 
-INLINE Emchar charptr_emchar (CONST Bufbyte *ptr);
+INLINE Emchar charptr_emchar (const Bufbyte *ptr);
 INLINE Emchar
-charptr_emchar (CONST Bufbyte *ptr)
+charptr_emchar (const Bufbyte *ptr)
 {
   return BYTE_ASCII_P (*ptr) ?
     simple_charptr_emchar (ptr) :
@@ -509,9 +509,9 @@ set_charptr_emchar (Bufbyte *ptr, Emchar x)
     non_ascii_set_charptr_emchar (ptr, x);
 }
 
-INLINE Bytecount charptr_copy_char (CONST Bufbyte *ptr, Bufbyte *ptr2);
+INLINE Bytecount charptr_copy_char (const Bufbyte *ptr, Bufbyte *ptr2);
 INLINE Bytecount
-charptr_copy_char (CONST Bufbyte *ptr, Bufbyte *ptr2)
+charptr_copy_char (const Bufbyte *ptr, Bufbyte *ptr2)
 {
   return BYTE_ASCII_P (*ptr) ?
     simple_charptr_copy_char (ptr, ptr2) :
@@ -1568,17 +1568,17 @@ int beginning_of_line_p (struct buffer *b, Bufpos pt);
 /* from insdel.c */
 void set_buffer_point (struct buffer *buf, Bufpos pos, Bytind bipos);
 void find_charsets_in_bufbyte_string (unsigned char *charsets,
-                                     CONST Bufbyte *str,
+                                     const Bufbyte *str,
                                      Bytecount len);
 void find_charsets_in_emchar_string (unsigned char *charsets,
-                                    CONST Emchar *str,
+                                    const Emchar *str,
                                     Charcount len);
-int bufbyte_string_displayed_columns (CONST Bufbyte *str, Bytecount len);
-int emchar_string_displayed_columns (CONST Emchar *str, Charcount len);
-void convert_bufbyte_string_into_emchar_dynarr (CONST Bufbyte *str,
+int bufbyte_string_displayed_columns (const Bufbyte *str, Bytecount len);
+int emchar_string_displayed_columns (const Emchar *str, Charcount len);
+void convert_bufbyte_string_into_emchar_dynarr (const Bufbyte *str,
                                                Bytecount len,
                                                Emchar_dynarr *dyn);
-Charcount convert_bufbyte_string_into_emchar_string (CONST Bufbyte *str,
+Charcount convert_bufbyte_string_into_emchar_string (const Bufbyte *str,
                                                     Bytecount len,
                                                     Emchar *arr);
 void convert_emchar_string_into_bufbyte_dynarr (Emchar *arr, int nels,
index e670665..fd35a0e 100644 (file)
@@ -216,10 +216,10 @@ typedef unsigned char Opbyte;
 static void invalid_byte_code_error (char *error_message, ...);
 
 Lisp_Object * execute_rare_opcode (Lisp_Object *stack_ptr,
-                                  CONST Opbyte *program_ptr,
+                                  const Opbyte *program_ptr,
                                   Opcode opcode);
 
-static Lisp_Object execute_optimized_program (CONST Opbyte *program,
+static Lisp_Object execute_optimized_program (const Opbyte *program,
                                              int stack_depth,
                                              Lisp_Object *constants_data);
 
@@ -596,12 +596,12 @@ funcall_compiled_function (Lisp_Object fun, int nargs, Lisp_Object args[])
 
 
 static Lisp_Object
-execute_optimized_program (CONST Opbyte *program,
+execute_optimized_program (const Opbyte *program,
                           int stack_depth,
                           Lisp_Object *constants_data)
 {
   /* This function can GC */
-  REGISTER CONST Opbyte *program_ptr = (Opbyte *) program;
+  REGISTER const Opbyte *program_ptr = (Opbyte *) program;
   REGISTER Lisp_Object *stack_ptr
     = alloca_array (Lisp_Object, stack_depth + 1);
   int speccount = specpdl_depth ();
@@ -1221,7 +1221,7 @@ execute_optimized_program (CONST Opbyte *program,
    Don't make this function static, since then the compiler might inline it. */
 Lisp_Object *
 execute_rare_opcode (Lisp_Object *stack_ptr,
-                    CONST Opbyte *program_ptr,
+                    const Opbyte *program_ptr,
                     Opcode opcode)
 {
   switch (opcode)
@@ -1491,7 +1491,7 @@ invalid_byte_code_error (char *error_message, ...)
 
   sprintf (buf, "%s", error_message);
   va_start (args, error_message);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (buf), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (buf), Qnil, -1,
                                args);
   va_end (args);
 
@@ -1607,14 +1607,14 @@ optimize_byte_code (/* in */
                    Lisp_Object instructions,
                    Lisp_Object constants,
                    /* out */
-                   Opbyte * CONST program,
-                   int * CONST program_length,
-                   int * CONST varbind_count)
+                   Opbyte * const program,
+                   int * const program_length,
+                   int * const varbind_count)
 {
   size_t instructions_length = XSTRING_LENGTH (instructions);
   size_t comfy_size = 2 * instructions_length;
 
-  int * CONST icounts = alloca_array (int, comfy_size);
+  int * const icounts = alloca_array (int, comfy_size);
   int * icounts_ptr = icounts;
 
   /* We maintain a table of jumps in the source code. */
@@ -1623,13 +1623,13 @@ optimize_byte_code (/* in */
     int from;
     int to;
   };
-  struct jump * CONST jumps = alloca_array (struct jump, comfy_size);
+  struct jump * const jumps = alloca_array (struct jump, comfy_size);
   struct jump *jumps_ptr = jumps;
 
   Opbyte *program_ptr = program;
 
-  CONST Bufbyte *ptr = XSTRING_DATA (instructions);
-  CONST Bufbyte * CONST end = ptr + instructions_length;
+  const Bufbyte *ptr = XSTRING_DATA (instructions);
+  const Bufbyte * const end = ptr + instructions_length;
 
   *varbind_count = 0;
 
@@ -2069,13 +2069,13 @@ compiled_function_instructions (Lisp_Compiled_Function *f)
     /* Invert action performed by optimize_byte_code() */
     Lisp_Opaque *opaque = XOPAQUE (f->instructions);
 
-    Bufbyte * CONST buffer =
+    Bufbyte * const buffer =
       alloca_array (Bufbyte, OPAQUE_SIZE (opaque) * MAX_EMCHAR_LEN);
     Bufbyte *bp = buffer;
 
-    CONST Opbyte * CONST program = (CONST Opbyte *) OPAQUE_DATA (opaque);
-    CONST Opbyte *program_ptr = program;
-    CONST Opbyte * CONST program_end = program_ptr + OPAQUE_SIZE (opaque);
+    const Opbyte * const program = (const Opbyte *) OPAQUE_DATA (opaque);
+    const Opbyte *program_ptr = program;
+    const Opbyte * const program_end = program_ptr + OPAQUE_SIZE (opaque);
 
     while (program_ptr < program_end)
       {
index adc4160..08173ff 100644 (file)
@@ -193,8 +193,8 @@ check_mark (void)
 }
 
 static Lisp_Object
-callint_prompt (CONST Bufbyte *prompt_start, Bytecount prompt_length,
-                CONST Lisp_Object *args, int nargs)
+callint_prompt (const Bufbyte *prompt_start, Bytecount prompt_length,
+                const Lisp_Object *args, int nargs)
 {
   Lisp_Object s = make_string (prompt_start, prompt_length);
   struct gcpro gcpro1;
@@ -241,7 +241,7 @@ when reading the arguments.
 #endif
   /* If SPECS is a string, we reset prompt_data to string_data
    * (XSTRING (specs)) every time a GC might have occurred */
-  CONST char *prompt_data = 0;
+  const char *prompt_data = 0;
   int prompt_index = 0;
   int argcount;
   int set_zmacs_region_stays = 0;
@@ -425,7 +425,7 @@ when reading the arguments.
     for (;;)
       {
        if (STRINGP (specs))
-         prompt_data = (CONST char *) XSTRING_DATA (specs);
+         prompt_data = (const char *) XSTRING_DATA (specs);
 
        if (prompt_data[prompt_index] == '+')
          error ("`+' is not used in `interactive' for ordinary commands");
@@ -486,7 +486,7 @@ when reading the arguments.
      us give to the function.  */
   argcount = 0;
   {
-    CONST char *tem;
+    const char *tem;
     for (tem = prompt_data + prompt_index; *tem; )
       {
        /* 'r' specifications ("point and mark as 2 numeric args")
@@ -495,7 +495,7 @@ when reading the arguments.
          argcount += 2;
        else
          argcount += 1;
-       tem = (CONST char *) strchr (tem + 1, '\n');
+       tem = (const char *) strchr (tem + 1, '\n');
        if (!tem)
          break;
        tem++;
@@ -565,8 +565,8 @@ when reading the arguments.
 
     for (argnum = 0; ; argnum++)
       {
-       CONST char *prompt_start = prompt_data + prompt_index + 1;
-       CONST char *prompt_limit = (CONST char *) strchr (prompt_start, '\n');
+       const char *prompt_start = prompt_data + prompt_index + 1;
+       const char *prompt_limit = (const char *) strchr (prompt_start, '\n');
        int prompt_length;
        prompt_length = ((prompt_limit)
                         ? (prompt_limit - prompt_start)
@@ -580,7 +580,7 @@ when reading the arguments.
           prompts with "Set key C-x C-f to command: "instead of printing
           event objects in there.
         */
-#define PROMPT() callint_prompt ((CONST Bufbyte *) prompt_start, prompt_length, visargs, argnum)
+#define PROMPT() callint_prompt ((const Bufbyte *) prompt_start, prompt_length, visargs, argnum)
        switch (prompt_data[prompt_index])
          {
          case 'a':             /* Symbol defined as a function */
@@ -909,7 +909,7 @@ when reading the arguments.
        if (!prompt_limit)
          break;
        if (STRINGP (specs))
-         prompt_data = (CONST char *) XSTRING_DATA (specs);
+         prompt_data = (const char *) XSTRING_DATA (specs);
        prompt_index += prompt_length + 1 + 1; /* +1 to skip spec, +1 for \n */
       }
     unbind_to (speccount, Qnil);
index 54ec8d0..5b2dfea 100644 (file)
@@ -67,7 +67,7 @@ Lisp_Object Vprocess_environment;
 volatile int synch_process_alive;
 
 /* Nonzero => this is a string explaining death of synchronous subprocess.  */
-CONST char *synch_process_death;
+const char *synch_process_death;
 
 /* If synch_process_death is zero,
    this is exit code of synchronous subprocess.  */
@@ -348,7 +348,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you
       fd_error = open (NULL_DEVICE, O_WRONLY | OPEN_BINARY);
     else if (STRINGP (error_file))
       {
-       fd_error = open ((CONST char *) XSTRING_DATA (error_file),
+       fd_error = open ((const char *) XSTRING_DATA (error_file),
 #ifdef DOS_NT
                         O_WRONLY | O_TRUNC | O_CREAT | O_TEXT,
                         S_IREAD | S_IWRITE
@@ -608,7 +608,7 @@ int
 void
 #endif
 child_setup (int in, int out, int err, char **new_argv,
-            CONST char *current_dir)
+            const char *current_dir)
 {
   char **env;
   char *pwd;
@@ -763,8 +763,8 @@ child_setup (int in, int out, int err, char **new_argv,
 
 #ifdef WINDOWSNT
   /* Spawn the child.  (See ntproc.c:Spawnve).  */
-  cpid = spawnve (_P_NOWAIT, new_argv[0], (CONST char* CONST*)new_argv,
-                 (CONST char* CONST*)env);
+  cpid = spawnve (_P_NOWAIT, new_argv[0], (const char* const*)new_argv,
+                 (const char* const*)env);
   if (cpid == -1)
     /* An error occurred while trying to spawn the process.  */
     report_file_error ("Spawning child process", Qnil);
@@ -783,7 +783,7 @@ child_setup (int in, int out, int err, char **new_argv,
 }
 
 static int
-getenv_internal (CONST Bufbyte *var,
+getenv_internal (const Bufbyte *var,
                 Bytecount varlen,
                 Bufbyte **value,
                 Bytecount *valuelen)
@@ -846,12 +846,12 @@ When invoked interactively, prints the value in the echo area.
 /* A version of getenv that consults process_environment, easily
    callable from C.  */
 char *
-egetenv (CONST char *var)
+egetenv (const char *var)
 {
   Bufbyte *value;
   Bytecount valuelen;
 
-  if (getenv_internal ((CONST Bufbyte *) var, strlen (var), &value, &valuelen))
+  if (getenv_internal ((const Bufbyte *) var, strlen (var), &value, &valuelen))
     return (char *) value;
   else
     return 0;
@@ -876,10 +876,10 @@ init_callproc (void)
   {
     /* Initialize shell-file-name from environment variables or best guess. */
 #ifdef WINDOWSNT
-    CONST char *shell = egetenv ("COMSPEC");
+    const char *shell = egetenv ("COMSPEC");
     if (!shell) shell = "\\WINNT\\system32\\cmd.exe";
 #else /* not WINDOWSNT */
-    CONST char *shell = egetenv ("SHELL");
+    const char *shell = egetenv ("SHELL");
     if (!shell) shell = "/bin/sh";
 #endif
 
index c0dfd09..3e5fa89 100644 (file)
--- a/src/cm.c
+++ b/src/cm.c
@@ -36,8 +36,8 @@ Boston, MA 02111-1307, USA.  */
 #ifdef __cplusplus
 extern "C" {
 #endif
-extern char *tgoto (CONST char *cm, int hpos, int vpos);
-extern void tputs (CONST char *, int, void (*)(int));
+extern char *tgoto (const char *cm, int hpos, int vpos);
+extern void tputs (const char *, int, void (*)(int));
 #ifdef __cplusplus
 }
 #endif
index 3a70891..be215d2 100644 (file)
--- a/src/cm.h
+++ b/src/cm.h
@@ -46,25 +46,25 @@ struct cm
     int cm_curX;                       /* Current column */
 
     /* Capabilities from termcap */
-    CONST char *cm_up;         /* up (up) */
-    CONST char *cm_down;       /* down (do) */
-    CONST char *cm_left;       /* left (le) */
-    CONST char *cm_right;      /* right (nd) */
-    CONST char *cm_home;       /* home (ho) */
-    CONST char *cm_cr;         /* carriage return (cr) */
-    CONST char *cm_ll;         /* last line (ll) */
+    const char *cm_up;         /* up (up) */
+    const char *cm_down;       /* down (do) */
+    const char *cm_left;       /* left (le) */
+    const char *cm_right;      /* right (nd) */
+    const char *cm_home;       /* home (ho) */
+    const char *cm_cr;         /* carriage return (cr) */
+    const char *cm_ll;         /* last line (ll) */
 #endif /* 0 */
-    CONST char *cm_tab;                /* tab (ta) */
-    CONST char *cm_backtab;    /* backtab (bt) */
+    const char *cm_tab;                /* tab (ta) */
+    const char *cm_backtab;    /* backtab (bt) */
 #if 0
-    CONST char *cm_abs;                /* absolute (cm) */
-    CONST char *cm_habs;       /* horizontal absolute (ch) */
-    CONST char *cm_vabs;       /* vertical absolute (cv) */
-    CONST char *cm_ds;         /* "don't send" string (ds) */
-    CONST char *cm_multiup;    /* multiple up (UP) */
-    CONST char *cm_multidown;  /* multiple down (DO) */
-    CONST char *cm_multileft;  /* multiple left (LE) */
-    CONST char *cm_multiright; /* multiple right (RI) */
+    const char *cm_abs;                /* absolute (cm) */
+    const char *cm_habs;       /* horizontal absolute (ch) */
+    const char *cm_vabs;       /* vertical absolute (cv) */
+    const char *cm_ds;         /* "don't send" string (ds) */
+    const char *cm_multiup;    /* multiple up (UP) */
+    const char *cm_multidown;  /* multiple down (DO) */
+    const char *cm_multileft;  /* multiple left (LE) */
+    const char *cm_multiright; /* multiple right (RI) */
     int cm_cols;               /* number of cols on frame (co) */
     int cm_rows;               /* number of rows on frame (li) */
     int cm_tabwidth;           /* tab width (it) */
index b7d25c0..3ca219b 100644 (file)
@@ -70,12 +70,24 @@ char *alloca();
 #undef INFODOCK_MINOR_VERSION
 #undef INFODOCK_BUILD_VERSION
 
+/* Make all functions from all IEEE Stds 1003.[123] available. */
+#undef _POSIX_C_SOURCE
+
+/* Make all functions from Unix98 available. */
+#undef _XOPEN_SOURCE
+
+/* Make extensions from Unix98 available. */
+#undef _XOPEN_SOURCE_EXTENDED
+
 /* Make all functions available on AIX.  See AC_AIX. */
 #undef _ALL_SOURCE
 
 /* Make all functions available on GNU libc systems.  See features.h. */
 #undef _GNU_SOURCE
 
+/* Make all functions available on Solaris 2 systems. */
+#undef __EXTENSIONS__
+
 /* Used to identify the XEmacs version in stack traces. */
 #undef STACK_TRACE_EYE_CATCHER
 
@@ -164,6 +176,8 @@ char *alloca();
 #undef THIS_IS_X11R5
 #undef THIS_IS_X11R6
 
+#undef HAVE_XCONVERTCASE
+
 /* Where do we find bitmaps? */
 #undef BITMAPDIR
 
@@ -519,8 +533,6 @@ char *alloca();
 /* Defined by AC_C_CONST in configure.in */
 #undef const
 
-#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
index fe28e64..afbd3b2 100644 (file)
@@ -33,9 +33,6 @@ Boston, MA 02111-1307, USA.  */
 #define INCLUDED_console_msw_h_
 
 #include "console.h"
-#ifdef CONST                   /* I suspect this is safe */
-#undef CONST
-#endif
 #include <windows.h>
 #include <ddeml.h>     /* DDE management library */
 #if !defined(__CYGWIN32__) && !defined(__MINGW32__) \
@@ -136,10 +133,13 @@ struct msprinter_device
 #define CHECK_MSPRINTER_DEVICE(z) CHECK_DEVICE_TYPE (z, msprinter)
 #define CONCHECK_MSPRINTER_DEVICE(z) CONCHECK_DEVICE_TYPE (z, msprinter)
 
-/* Printer functions */
+/* Printer functions in device-msw.c */
 DEVMODE* msprinter_get_devmode_copy (struct device *d);
 void msprinter_apply_devmode (struct device *d, DEVMODE *devmode);
 
+/* Printer functions in frame-msw.c */
+void msprinter_start_page (struct frame *f);
+
 /*
  * Frame
  */
@@ -242,6 +242,7 @@ struct msprinter_frame
   int charheight, charwidth;           /* As per proplist or -1 if not gven */
   Lisp_Object orientation, duplex;     /* nil for printer's default */
   int job_started : 1;
+  int page_started : 1;
 };
 
 #define FRAME_MSPRINTER_DATA(f) FRAME_TYPE_DATA (f, msprinter)
@@ -251,6 +252,7 @@ struct msprinter_frame
 #define FRAME_MSPRINTER_BOTTOM_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->bottom_margin)
 #define FRAME_MSPRINTER_CDC(f)          (FRAME_MSPRINTER_DATA (f)->hcdc)
 #define FRAME_MSPRINTER_JOB_STARTED(f)  (FRAME_MSPRINTER_DATA (f)->job_started)
+#define FRAME_MSPRINTER_PAGE_STARTED(f)         (FRAME_MSPRINTER_DATA (f)->page_started)
 #define FRAME_MSPRINTER_ORIENTATION(f)  (FRAME_MSPRINTER_DATA (f)->orientation)
 #define FRAME_MSPRINTER_DUPLEX(f)       (FRAME_MSPRINTER_DATA (f)->duplex)
 #define FRAME_MSPRINTER_CHARWIDTH(f)    (FRAME_MSPRINTER_DATA (f)->charheight)
@@ -311,7 +313,7 @@ mswindows_handle_toolbar_wm_command (struct frame* f, HWND ctrl, WORD id);
 #endif
 Lisp_Object
 mswindows_handle_gui_wm_command (struct frame* f, HWND ctrl, DWORD id);
-COLORREF mswindows_string_to_color (CONST char *name);
+COLORREF mswindows_string_to_color (const char *name);
 USID emacs_mswindows_create_stream_pair (void* inhandle, void* outhandle,
                                         Lisp_Object* instream,
                                         Lisp_Object* outstream,
index 7899bc6..2dd05ac 100644 (file)
@@ -171,7 +171,7 @@ stream_init_frame_1 (struct frame *f, Lisp_Object props)
 \f
 static int
 stream_text_width (struct frame *f, struct face_cachel *cachel,
-                  CONST Emchar *str, Charcount len)
+                  const Emchar *str, Charcount len)
 {
   return len;
 }
index 024eaf5..ba05621 100644 (file)
@@ -93,31 +93,31 @@ struct tty_console
   struct
   {
     /* local cursor movement */
-    CONST char *up;                    /* cuu1, up */
-    CONST char *down;                  /* cud1, do */
-    CONST char *left;                  /* cub1, le */
-    CONST char *right;                 /* cuf1, nd */
-    CONST char *home;                  /* home, ho */
-    CONST char *low_left;              /* ll, ll */
-    CONST char *car_return;            /* cr, cr */
+    const char *up;                    /* cuu1, up */
+    const char *down;                  /* cud1, do */
+    const char *left;                  /* cub1, le */
+    const char *right;                 /* cuf1, nd */
+    const char *home;                  /* home, ho */
+    const char *low_left;              /* ll, ll */
+    const char *car_return;            /* cr, cr */
 
     /* parameterized local cursor movement */
-    CONST char *multi_up;              /* cuu, UP */
-    CONST char *multi_down;            /* cud, DO */
-    CONST char *multi_left;            /* cub, LE */
-    CONST char *multi_right;           /* cuf, RI */
+    const char *multi_up;              /* cuu, UP */
+    const char *multi_down;            /* cud, DO */
+    const char *multi_left;            /* cub, LE */
+    const char *multi_right;           /* cuf, RI */
 
     /* absolute cursor motion */
-    CONST char *abs;                   /* cup, cm */
-    CONST char *hor_abs;               /* hpa, ch */
-    CONST char *ver_abs;               /* vpa, cv */
+    const char *abs;                   /* cup, cm */
+    const char *hor_abs;               /* hpa, ch */
+    const char *ver_abs;               /* vpa, cv */
 
     /* scrolling */
-    CONST char *scroll_forw;           /* ind, sf */
-    CONST char *scroll_back;           /* ri, sr */
-    CONST char *multi_scroll_forw;     /* indn, SF */
-    CONST char *multi_scroll_back;     /* rin, SR */
-    CONST char *set_scroll_region;     /* csr, cs */
+    const char *scroll_forw;           /* ind, sf */
+    const char *scroll_back;           /* ri, sr */
+    const char *multi_scroll_forw;     /* indn, SF */
+    const char *multi_scroll_back;     /* rin, SR */
+    const char *set_scroll_region;     /* csr, cs */
   } cm;
 
   /* screen editing entries - each entry is commented with the
@@ -125,56 +125,56 @@ struct tty_console
   struct
   {
     /* adding to the screen */
-    CONST char *ins_line;              /* il1, al */
-    CONST char *multi_ins_line;                /* il, AL */
-    CONST char *repeat;                        /* rep, rp */
-    CONST char *begin_ins_mode;                /* smir, im */
-    CONST char *end_ins_mode;          /* rmir, ei */
-    CONST char *ins_char;              /* ich1, ic */
-    CONST char *multi_ins_char;                /* ich, IC */
-    CONST char *insert_pad;            /* ip, ip */
+    const char *ins_line;              /* il1, al */
+    const char *multi_ins_line;                /* il, AL */
+    const char *repeat;                        /* rep, rp */
+    const char *begin_ins_mode;                /* smir, im */
+    const char *end_ins_mode;          /* rmir, ei */
+    const char *ins_char;              /* ich1, ic */
+    const char *multi_ins_char;                /* ich, IC */
+    const char *insert_pad;            /* ip, ip */
 
     /* deleting from the screen */
-    CONST char *clr_frame;             /* clear, cl */
-    CONST char *clr_from_cursor;       /* ed, cd */
-    CONST char *clr_to_eol;            /* el, ce */
-    CONST char *del_line;              /* dl1, dl */
-    CONST char *multi_del_line;                /* dl, DL */
-    CONST char *del_char;              /* dch1, dc */
-    CONST char *multi_del_char;                /* dch, DC */
-    CONST char *begin_del_mode;                /* smdc, dm */
-    CONST char *end_del_mode;          /* rmdc, ed */
-    CONST char *erase_at_cursor;       /* ech, ec */
+    const char *clr_frame;             /* clear, cl */
+    const char *clr_from_cursor;       /* ed, cd */
+    const char *clr_to_eol;            /* el, ce */
+    const char *del_line;              /* dl1, dl */
+    const char *multi_del_line;                /* dl, DL */
+    const char *del_char;              /* dch1, dc */
+    const char *multi_del_char;                /* dch, DC */
+    const char *begin_del_mode;                /* smdc, dm */
+    const char *end_del_mode;          /* rmdc, ed */
+    const char *erase_at_cursor;       /* ech, ec */
   } se;
 
   /* screen display entries - each entry is commented with the
      terminfo and termcap entry */
   struct
   {
-    CONST char *begin_standout;                /* smso, so */
-    CONST char *end_standout;          /* rmso, se */
-    CONST char *begin_underline;       /* smul, us */
-    CONST char *end_underline;         /* rmul, ue */
-    CONST char *begin_alternate;       /* smacs, as */
-    CONST char *end_alternate;         /* rmacs, ae */
-
-    CONST char *turn_on_reverse;       /* rev, mr */
-    CONST char *turn_on_blinking;      /* blink, mb */
-    CONST char *turn_on_bold;          /* bold, md */
-    CONST char *turn_on_dim;           /* dim, mh */
-    CONST char *turn_off_attributes;   /* sgr0, me */
-
-    CONST char *visual_bell;           /* flash, vb */
-    CONST char *audio_bell;            /* bel, bl */
-
-    CONST char *cursor_visible;                /* cvvis, vs */
-    CONST char *cursor_normal;         /* cnorm, ve */
-    CONST char *init_motion;           /* smcup, ti */
-    CONST char *end_motion;            /* rmcup, te */
-    CONST char *keypad_on;             /* smkx, ks */
-    CONST char *keypad_off;            /* rmkx, ke */
-
-    CONST char *orig_pair;             /* op, op */
+    const char *begin_standout;                /* smso, so */
+    const char *end_standout;          /* rmso, se */
+    const char *begin_underline;       /* smul, us */
+    const char *end_underline;         /* rmul, ue */
+    const char *begin_alternate;       /* smacs, as */
+    const char *end_alternate;         /* rmacs, ae */
+
+    const char *turn_on_reverse;       /* rev, mr */
+    const char *turn_on_blinking;      /* blink, mb */
+    const char *turn_on_bold;          /* bold, md */
+    const char *turn_on_dim;           /* dim, mh */
+    const char *turn_off_attributes;   /* sgr0, me */
+
+    const char *visual_bell;           /* flash, vb */
+    const char *audio_bell;            /* bel, bl */
+
+    const char *cursor_visible;                /* cvvis, vs */
+    const char *cursor_normal;         /* cnorm, ve */
+    const char *init_motion;           /* smcup, ti */
+    const char *end_motion;            /* rmcup, te */
+    const char *keypad_on;             /* smkx, ks */
+    const char *keypad_off;            /* rmkx, ke */
+
+    const char *orig_pair;             /* op, op */
   } sd;
 
   /* costs of various operations */
index 05d9ac3..7a45d9d 100644 (file)
@@ -102,7 +102,7 @@ x_device_to_console_connection (Lisp_Object connection, Error_behavior errb)
 static Lisp_Object
 get_display_arg_connection (void)
 {
-  CONST char *disp_name;
+  const char *disp_name;
 
   /* If the user didn't explicitly specify a display to use when
      they called make-x-device, then we first check to see if a
@@ -181,7 +181,7 @@ x_semi_canonicalize_console_connection (Lisp_Object connection,
   /* Check for a couple of standard special cases */
   if (string_byte (XSTRING (connection), 0) == ':')
     connection = concat2 (build_string ("localhost"), connection);
-  else if (!strncmp ((CONST char *) XSTRING_DATA (connection),
+  else if (!strncmp ((const char *) XSTRING_DATA (connection),
                     "unix:", 5))
     connection = concat2 (build_string ("localhost:"),
                          Fsubstring (connection, make_int (5), Qnil));
@@ -260,7 +260,7 @@ x_canonicalize_device_connection (Lisp_Object connection, Error_behavior errb)
   split_up_display_spec (connection, &hostname_length, &display_length,
                         &screen_length);
 
-  screen_str = build_string ((CONST char *) XSTRING_DATA (connection)
+  screen_str = build_string ((const char *) XSTRING_DATA (connection)
                             + hostname_length + display_length);
   connection = x_canonicalize_console_connection (connection, errb);
 
index e4f9c19..6a60189 100644 (file)
@@ -405,7 +405,7 @@ void x_wm_set_shell_iconic_p (Widget shell, int iconic_p);
 void x_wm_set_cell_size (Widget wmshell, int cw, int ch);
 void x_wm_set_variable_size (Widget wmshell, int width, int height);
 
-CONST char *x_event_name (int event_type);
+const char *x_event_name (int event_type);
 int x_error_handler (Display *disp, XErrorEvent *event);
 void expect_x_error (Display *dpy);
 int x_error_occurred_p (Display *dpy);
index ae16eaa..0c7c2ad 100644 (file)
@@ -1200,10 +1200,26 @@ One argument, the to-be-deleted console.
    from SunPro C's fix-and-continue feature (a way neato feature that
    makes debugging unbelievably more bearable) */
 #define DEFVAR_CONSOLE_LOCAL_1(lname, field_name, forward_type, magicfun) do { \
-  static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C               \
-    = { { { symbol_value_forward_lheader_initializer,                          \
-           (struct lcrecord_header *) &(console_local_flags.field_name), 69 }, \
-         forward_type }, magicfun };                                           \
+  static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C =             \
+  { /* struct symbol_value_forward */                                          \
+    { /* struct symbol_value_magic */                                          \
+      { /* struct lcrecord_header */                                           \
+       { /* struct lrecord_header */                                           \
+         1, /* type - index into lrecord_implementations_table */              \
+         0, /* mark bit */                                                     \
+         0, /* c_readonly bit */                                               \
+         0  /* lisp_readonly bit */                                            \
+       },                                                                      \
+       0, /* next */                                                           \
+       0, /* uid  */                                                           \
+       0  /* free */                                                           \
+      },                                                                       \
+      &(console_local_flags.field_name),                                       \
+      forward_type                                                             \
+    },                                                                         \
+    magicfun                                                                   \
+  };                                                                           \
+                                                                               \
   {                                                                            \
     int offset = ((char *)symbol_value_forward_forward (&I_hate_C)             \
                  - (char *)&console_local_flags);                              \
@@ -1393,7 +1409,7 @@ consoles, for example), it is set to nil.
 */ );
 #endif
 
-  /* While this should be CONST it can't be because some things
+  /* While this should be const it can't be because some things
      (i.e. edebug) do manipulate it. */
   DEFVAR_CONSOLE_LOCAL ("defining-kbd-macro", defining_kbd_macro /*
 Non-nil while a console macro is being defined.  Don't set this!
index 9975bcd..27b62b7 100644 (file)
@@ -65,7 +65,7 @@ extern const struct struct_description console_methods_description;
 
 struct console_methods
 {
-  CONST char *name;    /* Used by print_console, print_device, print_frame */
+  const char *name;    /* Used by print_console, print_device, print_frame */
   Lisp_Object symbol;
   Lisp_Object predicate_symbol;
 
@@ -135,12 +135,13 @@ struct console_methods
   Lisp_Object (*get_frame_parent_method) (struct frame *f);
   void (*update_frame_external_traits_method) (struct frame *f, Lisp_Object name);
   int (*frame_size_fixed_p_method) (struct frame *f);
+  void (*eject_page_method) (struct frame *f);
 
   /* redisplay methods */
   int (*left_margin_width_method) (struct window *);
   int (*right_margin_width_method) (struct window *);
   int (*text_width_method) (struct frame *f, struct face_cachel *cachel,
-                           CONST Emchar *str, Charcount len);
+                           const Emchar *str, Charcount len);
   void (*output_display_block_method) (struct window *, struct display_line *,
                                       int, int, int, int, int, int, int);
   int (*divider_height_method) (void);
@@ -207,7 +208,7 @@ struct console_methods
                                           Lisp_Object charset);
   int (*font_spec_matches_charset_method) (struct device *d,
                                           Lisp_Object charset,
-                                          CONST Bufbyte *nonreloc,
+                                          const Bufbyte *nonreloc,
                                           Lisp_Object reloc,
                                           Bytecount offset,
                                           Bytecount length);
@@ -223,6 +224,7 @@ struct console_methods
                                struct display_glyph_area* dga);
   void (*resize_subwindow_method) (Lisp_Image_Instance *, int w, int h);
   void (*update_subwindow_method) (Lisp_Image_Instance *);
+  void (*update_widget_method) (Lisp_Image_Instance *);
   int (*image_instance_equal_method) (Lisp_Image_Instance *,
                                      Lisp_Image_Instance *,
                                      int depth);
index 8036e19..2309297 100644 (file)
@@ -357,7 +357,7 @@ If non-nil, the return value will be a list whose first element is
 */
        (subr))
 {
-  CONST char *prompt;
+  const char *prompt;
   CHECK_SUBR (subr);
   prompt = XSUBR (subr)->prompt;
   return prompt ? list2 (Qinteractive, build_string (prompt)) : Qnil;
index 8b29038..27e7daf 100644 (file)
@@ -50,9 +50,9 @@ Boston, MA 02111-1307, USA.  */
 #include "sysfile.h"
 #include "systime.h"
 
-#if defined(HAVE_DLOPEN) && defined(LWLIB_USES_ATHENA) && !defined(HAVE_ATHENA_3D)
+#if defined(HAVE_SHLIB) && defined(LWLIB_USES_ATHENA) && !defined(HAVE_ATHENA_3D)
 #include "sysdll.h"
-#endif /* HAVE_DLOPEN and LWLIB_USES_ATHENA and not HAVE_ATHENA_3D */
+#endif /* HAVE_SHLIB and LWLIB_USES_ATHENA and not HAVE_ATHENA_3D */
 
 #ifdef HAVE_OFFIX_DND
 #include "offix.h"
@@ -460,9 +460,9 @@ x_init_device (struct device *d, Lisp_Object props)
   Widget app_shell;
   int argc;
   char **argv;
-  CONST char *app_class;
-  CONST char *app_name;
-  CONST char *disp_name;
+  const char *app_class;
+  const char *app_name;
+  const char *disp_name;
   Visual *visual = NULL;
   int depth = 8;               /* shut up the compiler */
   Colormap cmap;
@@ -470,7 +470,7 @@ x_init_device (struct device *d, Lisp_Object props)
   /* */
   int best_visual_found = 0;
 
-#if defined(HAVE_DLOPEN) && defined(LWLIB_USES_ATHENA) && !defined(HAVE_ATHENA_3D)
+#if defined(HAVE_SHLIB) && defined(LWLIB_USES_ATHENA) && !defined(HAVE_ATHENA_3D)
   /*
    * In order to avoid the lossage with flat Athena widgets dynamically
    * linking to one of the ThreeD variants, using the dynamic symbol helpers
@@ -539,7 +539,7 @@ x_init_device (struct device *d, Lisp_Object props)
        dll_close (xaw_dll_handle);
       }
   }
-#endif /* HAVE_DLOPEN and LWLIB_USES_ATHENA and not HAVE_ATHENA_3D */
+#endif /* HAVE_SHLIB and LWLIB_USES_ATHENA and not HAVE_ATHENA_3D */
 
 
   XSETDEVICE (device, d);
@@ -609,10 +609,10 @@ x_init_device (struct device *d, Lisp_Object props)
        data-directory/app-defaults/$LANG/Emacs.
        This is in addition to the standard app-defaults files, and
        does not override resources defined elsewhere */
-    CONST char *data_dir;
+    const char *data_dir;
     char *path;
     XrmDatabase db = XtDatabase (dpy); /* #### XtScreenDatabase(dpy) ? */
-    CONST char *locale = XrmLocaleOfDatabase (db);
+    const char *locale = XrmLocaleOfDatabase (db);
 
     if (STRINGP (Vx_app_defaults_directory) &&
        XSTRING_LENGTH (Vx_app_defaults_directory) > 0)
@@ -913,10 +913,10 @@ x_delete_device (struct device *d)
 /*                             handle X errors                         */
 /************************************************************************/
 
-CONST char *
+const char *
 x_event_name (int event_type)
 {
-  static CONST char *events[] =
+  static const char *events[] =
   {
     "0: ERROR!",
     "1: REPLY",
@@ -1684,7 +1684,7 @@ Valid keysyms are listed in the files /usr/include/X11/keysymdef.h and in
 */
        (keysym))
 {
-  CONST char *keysym_ext;
+  const char *keysym_ext;
 
   CHECK_STRING (keysym);
   TO_EXTERNAL_FORMAT (LISP_STRING, keysym,
@@ -1890,7 +1890,7 @@ See also `x-set-font-path'.
 {
   Display *dpy = get_x_display (device);
   int ndirs_return;
-  CONST char **directories = (CONST char **) XGetFontPath (dpy, &ndirs_return);
+  const char **directories = (const char **) XGetFontPath (dpy, &ndirs_return);
   Lisp_Object font_path = Qnil;
 
   if (!directories)
@@ -1922,7 +1922,7 @@ See also `x-get-font-path'.
 {
   Display *dpy = get_x_display (device);
   Lisp_Object path_entry;
-  CONST char **directories;
+  const char **directories;
   int i=0,ndirs=0;
 
   EXTERNAL_LIST_LOOP (path_entry, font_path)
@@ -1931,7 +1931,7 @@ See also `x-get-font-path'.
       ndirs++;
     }
 
-  directories = alloca_array (CONST char *, ndirs);
+  directories = alloca_array (const char *, ndirs);
 
   EXTERNAL_LIST_LOOP (path_entry, font_path)
     {
@@ -1987,7 +1987,7 @@ void
 reinit_console_type_create_device_x (void)
 {
   /* Initialize variables to speed up X resource interactions */
-  CONST char *valid_resource_chars =
+  const char *valid_resource_chars =
     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
   while (*valid_resource_chars)
     valid_resource_char_p[(unsigned int) (*valid_resource_chars++)] = 1;
index 2de9fed..458d617 100644 (file)
@@ -925,9 +925,7 @@ to selected device if omitted, and must be live if specified.
 */
        (device))
 {
-  return (MAYBE_INT_DEVMETH (decode_device (device),
-                            device_implementation_flags, ())
-         & XDEVIMPF_IS_A_PRINTER) ? Qt : Qnil;
+  return DEVICE_PRINTER_P (decode_device (device)) ? Qt : Qnil;
 }
 
 DEFUN ("device-system-metric", Fdevice_system_metric, 1, 3, 0, /*
index 8dd7d29..a95c3df 100644 (file)
@@ -270,6 +270,47 @@ error_check_device_type (struct device *d, Lisp_Object sym)
        (type##_console_methods->predicate_symbol, x);  \
   } while (0)
 
+#define DEVICE_DISPLAY_P(dev)                          \
+  (DEVICE_LIVE_P (dev) &&                              \
+   (MAYBE_INT_DEVMETH (dev,                            \
+                      device_implementation_flags, ()) \
+    & XDEVIMPF_IS_A_PRINTER) ? 0 : 1)
+
+#define CHECK_DISPLAY_DEVICE(dev)                      \
+  do {                                                 \
+    CHECK_DEVICE (dev);                                        \
+    if (!(DEVICEP (dev)                                        \
+          && DEVICE_DISPLAY_P (XDEVICE (dev))))                \
+      dead_wrong_type_argument (Qdisplay, dev);                \
+  } while (0)
+
+#define CONCHECK_DISPLAY_DEVICE(dev)                   \
+  do {                                                 \
+    CONCHECK_DEVICE (dev);                             \
+    if (!(DEVICEP (dev)                                        \
+          && DEVICE_DISPLAY_P (XDEVICE (dev))))                \
+      wrong_type_argument (Qdisplay, dev);             \
+  } while (0)
+
+#define DEVICE_PRINTER_P(dev)                          \
+  (DEVICE_LIVE_P (dev) && !DEVICE_DISPLAY_P (dev))
+
+#define CHECK_PRINTER_DEVICE(dev)                      \
+  do {                                                 \
+    CHECK_DEVICE (dev);                                        \
+    if (!(DEVICEP (dev)                                        \
+          && DEVICE_PRINTER_P (XDEVICE (dev))))                \
+      dead_wrong_type_argument (Qprinter, dev);                \
+  } while (0)
+
+#define CONCHECK_PRINTER_DEVICE(dev)                   \
+  do {                                                 \
+    CONCHECK_DEVICE (dev);                             \
+    if (!(DEVICEP (dev)                                        \
+          && DEVICE_PRINTER_P (XDEVICE (dev))))                \
+      wrong_type_argument (Qprinter, dev);             \
+  } while (0)
+
 /* #### These should be in the device-*.h files but there are
    too many places where the abstraction is broken.  Need to
    fix. */
index dc3ee71..bd57d0d 100644 (file)
@@ -102,7 +102,7 @@ dbox_selection_callback (Widget widget, LWLIB_ID id, XtPointer client_data)
     lw_set_keyboard_focus (FRAME_X_SHELL_WIDGET (f), FRAME_X_TEXT_WIDGET (f));
 }
 
-static CONST char * CONST button_names [] = {
+static const char * const button_names [] = {
   "button1", "button2", "button3", "button4", "button5",
   "button6", "button7", "button8", "button9", "button10" };
 
index b7077e3..c987db2 100644 (file)
@@ -711,7 +711,7 @@ user_name_completion (Lisp_Object user, int all_flag, int *uniq)
 
 \f
 Lisp_Object
-make_directory_hash_table (CONST char *path)
+make_directory_hash_table (const char *path)
 {
   DIR *d;
   if ((d = opendir (path)))
index 9cf7e8b..d683fba 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -392,7 +392,7 @@ translation.
 }
 \f
 static void
-weird_doc (Lisp_Object sym, CONST char *weirdness, CONST char *type, int pos)
+weird_doc (Lisp_Object sym, const char *weirdness, const char *type, int pos)
 {
   if (!strcmp (weirdness, GETTEXT ("duplicate"))) return;
   message ("Note: Strange doc (%s) for %s %s @ %d",
index 8b5744c..fabbf99 100644 (file)
@@ -31,13 +31,13 @@ Boston, MA 02111-1307, USA.  */
 #include "buffer.h"
 #include "lstream.h"
 
-static CONST char *valid_flags = "-+ #0";
+static const char *valid_flags = "-+ #0";
 
-static CONST char *valid_converters = "diouxXfeEgGcsS";
-static CONST char *int_converters = "dic";
-static CONST char *unsigned_int_converters = "ouxX";
-static CONST char *double_converters = "feEgG";
-static CONST char *string_converters = "sS";
+static const char *valid_converters = "diouxXfeEgGcsS";
+static const char *int_converters = "dic";
+static const char *unsigned_int_converters = "ouxX";
+static const char *double_converters = "feEgG";
+static const char *string_converters = "sS";
 
 typedef struct printf_spec printf_spec;
 struct printf_spec
@@ -99,7 +99,7 @@ typedef struct
    Note that MINLEN and MAXLEN are Charcounts but LEN is a Bytecount. */
 
 static void
-doprnt_1 (Lisp_Object stream, CONST Bufbyte *string, Bytecount len,
+doprnt_1 (Lisp_Object stream, const Bufbyte *string, Bytecount len,
          Charcount minlen, Charcount maxlen, int minus_flag, int zero_flag)
 {
   Charcount cclen;
@@ -140,8 +140,8 @@ doprnt_1 (Lisp_Object stream, CONST Bufbyte *string, Bytecount len,
     }
 }
 
-static CONST Bufbyte *
-parse_off_posnum (CONST Bufbyte *start, CONST Bufbyte *end, int *returned_num)
+static const Bufbyte *
+parse_off_posnum (const Bufbyte *start, const Bufbyte *end, int *returned_num)
 {
   Bufbyte arg_convert[100];
   REGISTER Bufbyte *arg_ptr = arg_convert;
@@ -178,17 +178,17 @@ parse_off_posnum (CONST Bufbyte *start, CONST Bufbyte *end, int *returned_num)
   } while (0)
 
 static printf_spec_dynarr *
-parse_doprnt_spec (CONST Bufbyte *format, Bytecount format_length)
+parse_doprnt_spec (const Bufbyte *format, Bytecount format_length)
 {
-  CONST Bufbyte *fmt = format;
-  CONST Bufbyte *fmt_end = format + format_length;
+  const Bufbyte *fmt = format;
+  const Bufbyte *fmt_end = format + format_length;
   printf_spec_dynarr *specs = Dynarr_new (printf_spec);
   int prev_argnum = 0;
 
   while (1)
     {
       struct printf_spec spec;
-      CONST Bufbyte *text_end;
+      const Bufbyte *text_end;
       Bufbyte ch;
 
       xzero (spec);
@@ -216,7 +216,7 @@ parse_doprnt_spec (CONST Bufbyte *format, Bytecount format_length)
 
          /* Is there a field number specifier? */
          {
-           CONST Bufbyte *ptr;
+           const Bufbyte *ptr;
            int fieldspec;
 
            ptr = parse_off_posnum (fmt, fmt_end, &fieldspec);
@@ -423,11 +423,11 @@ get_doprnt_args (printf_spec_dynarr *specs, va_list vargs)
    to the arguments. */
 
 static Bytecount
-emacs_doprnt_1 (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
+emacs_doprnt_1 (Lisp_Object stream, const Bufbyte *format_nonreloc,
                Lisp_Object format_reloc, Bytecount format_length,
                int nargs,
                /* #### Gag me, gag me, gag me */
-               CONST Lisp_Object *largs, va_list vargs)
+               const Lisp_Object *largs, va_list vargs)
 {
   printf_spec_dynarr *specs = 0;
   printf_arg_dynarr *args = 0;
@@ -440,7 +440,7 @@ emacs_doprnt_1 (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
       format_length = XSTRING_LENGTH (format_reloc);
     }
   if (format_length < 0)
-    format_length = (Bytecount) strlen ((CONST char *) format_nonreloc);
+    format_length = (Bytecount) strlen ((const char *) format_nonreloc);
 
   specs = parse_doprnt_spec (format_nonreloc, format_length);
   if (largs)
@@ -697,9 +697,9 @@ emacs_doprnt_1 (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
 
 /* You really don't want to know why this is necessary... */
 static Bytecount
-emacs_doprnt_2 (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
+emacs_doprnt_2 (Lisp_Object stream, const Bufbyte *format_nonreloc,
                Lisp_Object format_reloc, Bytecount format_length, int nargs,
-               CONST Lisp_Object *largs, ...)
+               const Lisp_Object *largs, ...)
 {
   va_list vargs;
   Bytecount val;
@@ -732,7 +732,7 @@ emacs_doprnt_2 (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
    parameter, because this function can cause GC. */
 
 Bytecount
-emacs_doprnt_c (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
+emacs_doprnt_c (Lisp_Object stream, const Bufbyte *format_nonreloc,
                Lisp_Object format_reloc, Bytecount format_length,
                ...)
 {
@@ -749,7 +749,7 @@ emacs_doprnt_c (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
 /* Like emacs_doprnt_c but the args come in va_list format. */
 
 Bytecount
-emacs_doprnt_va (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
+emacs_doprnt_va (Lisp_Object stream, const Bufbyte *format_nonreloc,
                 Lisp_Object format_reloc, Bytecount format_length,
                 va_list vargs)
 {
@@ -763,9 +763,9 @@ emacs_doprnt_va (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
    See `format' for a description of this behavior. */
 
 Bytecount
-emacs_doprnt_lisp (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
+emacs_doprnt_lisp (Lisp_Object stream, const Bufbyte *format_nonreloc,
                   Lisp_Object format_reloc, Bytecount format_length,
-                  int nargs, CONST Lisp_Object *largs)
+                  int nargs, const Lisp_Object *largs)
 {
   return emacs_doprnt_2 (stream, format_nonreloc, format_reloc,
                         format_length, nargs, largs);
@@ -774,7 +774,7 @@ emacs_doprnt_lisp (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
 /* Like the previous function but takes a variable number of arguments. */
 
 Bytecount
-emacs_doprnt_lisp_2 (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
+emacs_doprnt_lisp_2 (Lisp_Object stream, const Bufbyte *format_nonreloc,
                     Lisp_Object format_reloc, Bytecount format_length,
                     int nargs, ...)
 {
@@ -796,7 +796,7 @@ emacs_doprnt_lisp_2 (Lisp_Object stream, CONST Bufbyte *format_nonreloc,
    to a stream. */
 
 Lisp_Object
-emacs_doprnt_string_c (CONST Bufbyte *format_nonreloc,
+emacs_doprnt_string_c (const Bufbyte *format_nonreloc,
                       Lisp_Object format_reloc, Bytecount format_length,
                       ...)
 {
@@ -819,7 +819,7 @@ emacs_doprnt_string_c (CONST Bufbyte *format_nonreloc,
 }
 
 Lisp_Object
-emacs_doprnt_string_va (CONST Bufbyte *format_nonreloc,
+emacs_doprnt_string_va (const Bufbyte *format_nonreloc,
                        Lisp_Object format_reloc, Bytecount format_length,
                        va_list vargs)
 {
@@ -842,9 +842,9 @@ emacs_doprnt_string_va (CONST Bufbyte *format_nonreloc,
 }
 
 Lisp_Object
-emacs_doprnt_string_lisp (CONST Bufbyte *format_nonreloc,
+emacs_doprnt_string_lisp (const Bufbyte *format_nonreloc,
                          Lisp_Object format_reloc, Bytecount format_length,
-                         int nargs, CONST Lisp_Object *largs)
+                         int nargs, const Lisp_Object *largs)
 {
   Lisp_Object obj;
   Lisp_Object stream = make_resizing_buffer_output_stream ();
@@ -862,7 +862,7 @@ emacs_doprnt_string_lisp (CONST Bufbyte *format_nonreloc,
 }
 
 Lisp_Object
-emacs_doprnt_string_lisp_2 (CONST Bufbyte *format_nonreloc,
+emacs_doprnt_string_lisp_2 (const Bufbyte *format_nonreloc,
                            Lisp_Object format_reloc, Bytecount format_length,
                            int nargs, ...)
 {
index da51455..9a173a9 100644 (file)
@@ -157,7 +157,7 @@ Dynarr_resize (void *d, int size)
 
 /* Add a number of contiguous elements to the array starting at START. */
 void
-Dynarr_insert_many (void *d, CONST void *el, int len, int start)
+Dynarr_insert_many (void *d, const void *el, int len, int start)
 {
   Dynarr *dy = (Dynarr *) d;
 
index 2b06aec..306315e 100644 (file)
@@ -764,7 +764,7 @@ value of `user-full-name' is returned.
   user_name = (STRINGP (user) ? user : Fuser_login_name (user));
   if (!NILP (user_name))       /* nil when nonexistent UID passed as arg */
     {
-      CONST char *user_name_ext;
+      const char *user_name_ext;
 
       /* Fuck me.  getpwnam() can call select() and (under IRIX at least)
         things get wedged if a SIGIO arrives during this time. */
@@ -1004,9 +1004,9 @@ time_to_lisp (time_t the_time)
   return Fcons (make_int (item >> 16), make_int (item & 0xffff));
 }
 
-size_t emacs_strftime (char *string, size_t max, CONST char *format,
-                      CONST struct tm *tm);
-static long difftm (CONST struct tm *a, CONST struct tm *b);
+size_t emacs_strftime (char *string, size_t max, const char *format,
+                      const struct tm *tm);
+static long difftm (const struct tm *a, const struct tm *b);
 
 
 DEFUN ("format-time-string", Fformat_time_string, 1, 2, 0, /*
@@ -1073,7 +1073,7 @@ characters appearing in the day and month names may be incorrect.
       char *buf = (char *) alloca (size);
       *buf = 1;
       if (emacs_strftime (buf, size,
-                         (CONST char *) XSTRING_DATA (format_string),
+                         (const char *) XSTRING_DATA (format_string),
                          localtime (&value))
          || !*buf)
        return build_ext_string (buf, Qbinary);
@@ -1237,7 +1237,7 @@ and from `file-attributes'.
 
 /* Yield A - B, measured in seconds.  */
 static long
-difftm (CONST struct tm *a, CONST struct tm *b)
+difftm (const struct tm *a, const struct tm *b)
 {
   int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
   int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
index 426f804..251e549 100644 (file)
@@ -122,7 +122,7 @@ hash_table_size (size_t requested_size)
   /* Return some prime near, but greater than or equal to, SIZE.
      Decades from the time of writing, someone will have a system large
      enough that the list below will be too short... */
-  static CONST size_t primes [] =
+  static const size_t primes [] =
   {
     19, 29, 41, 59, 79, 107, 149, 197, 263, 347, 457, 599, 787, 1031,
     1361, 1777, 2333, 3037, 3967, 5167, 6719, 8737, 11369, 14783,
@@ -252,6 +252,16 @@ hash_table_equal (Lisp_Object hash_table1, Lisp_Object hash_table2, int depth)
 
   return 1;
 }
+
+/* This is not a great hash function, but it _is_ correct and fast.
+   Examining all entries is too expensive, and examining a random
+   subset does not yield a correct hash function. */
+static hashcode_t
+hash_table_hash (Lisp_Object hash_table, int depth)
+{
+  return XHASH_TABLE (hash_table)->count;
+}
+
 \f
 /* Printing hash tables.
 
@@ -393,8 +403,7 @@ const struct lrecord_description hash_table_description[] = {
 DEFINE_LRECORD_IMPLEMENTATION ("hash-table", hash_table,
                                mark_hash_table, print_hash_table,
                               finalize_hash_table,
-                              /* #### Implement hash_table_hash()! */
-                              hash_table_equal, 0,
+                              hash_table_equal, hash_table_hash,
                               hash_table_description,
                               Lisp_Hash_Table);
 
@@ -861,7 +870,7 @@ The keys and values will not themselves be copied.
 */
        (hash_table))
 {
-  CONST Lisp_Hash_Table *ht_old = xhash_table (hash_table);
+  const Lisp_Hash_Table *ht_old = xhash_table (hash_table);
   Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table, &lrecord_hash_table);
 
   copy_lcrecord (ht, ht_old);
@@ -915,7 +924,7 @@ resize_hash_table (Lisp_Hash_Table *ht, size_t new_size)
 void
 pdump_reorganize_hash_table (Lisp_Object hash_table)
 {
-  CONST Lisp_Hash_Table *ht = xhash_table (hash_table);
+  const Lisp_Hash_Table *ht = xhash_table (hash_table);
   hentry *new_entries = xnew_array_and_zero (hentry, ht->size + 1);
   hentry *e, *sentinel;
 
@@ -942,7 +951,7 @@ enlarge_hash_table (Lisp_Hash_Table *ht)
 }
 
 static hentry *
-find_hentry (Lisp_Object key, CONST Lisp_Hash_Table *ht)
+find_hentry (Lisp_Object key, const Lisp_Hash_Table *ht)
 {
   hash_table_test_function_t test_function = ht->test_function;
   hentry *entries = ht->hentries;
@@ -961,7 +970,7 @@ If there is no corresponding value, return DEFAULT (which defaults to nil).
 */
        (key, hash_table, default_))
 {
-  CONST Lisp_Hash_Table *ht = xhash_table (hash_table);
+  const Lisp_Hash_Table *ht = xhash_table (hash_table);
   hentry *e = find_hentry (key, ht);
 
   return HENTRY_CLEAR_P (e) ? default_ : e->value;
@@ -1141,8 +1150,8 @@ may remhash or puthash the entry currently being processed by FUNCTION.
 */
        (function, hash_table))
 {
-  CONST Lisp_Hash_Table *ht = xhash_table (hash_table);
-  CONST hentry *e, *sentinel;
+  const Lisp_Hash_Table *ht = xhash_table (hash_table);
+  const hentry *e, *sentinel;
 
   for (e = ht->hentries, sentinel = e + ht->size; e < sentinel; e++)
     if (!HENTRY_CLEAR_P (e))
@@ -1167,8 +1176,8 @@ void
 elisp_maphash (maphash_function_t function,
               Lisp_Object hash_table, void *extra_arg)
 {
-  CONST Lisp_Hash_Table *ht = XHASH_TABLE (hash_table);
-  CONST hentry *e, *sentinel;
+  const Lisp_Hash_Table *ht = XHASH_TABLE (hash_table);
+  const hentry *e, *sentinel;
 
   for (e = ht->hentries, sentinel = e + ht->size; e < sentinel; e++)
     if (!HENTRY_CLEAR_P (e))
@@ -1221,9 +1230,9 @@ finish_marking_weak_hash_tables (void)
        !NILP (hash_table);
        hash_table = XHASH_TABLE (hash_table)->next_weak)
     {
-      CONST Lisp_Hash_Table *ht = XHASH_TABLE (hash_table);
-      CONST hentry *e = ht->hentries;
-      CONST hentry *sentinel = e + ht->size;
+      const Lisp_Hash_Table *ht = XHASH_TABLE (hash_table);
+      const hentry *e = ht->hentries;
+      const hentry *sentinel = e + ht->size;
 
       if (! marked_p (hash_table))
        /* The hash table is probably garbage.  Ignore it. */
@@ -1328,12 +1337,13 @@ hashcode_t
 internal_array_hash (Lisp_Object *arr, int size, int depth)
 {
   int i;
-  unsigned long hash = 0;
+  hashcode_t hash = 0;
+  depth++;
 
   if (size <= 5)
     {
       for (i = 0; i < size; i++)
-       hash = HASH2 (hash, internal_hash (arr[i], depth + 1));
+       hash = HASH2 (hash, internal_hash (arr[i], depth));
       return hash;
     }
 
@@ -1341,7 +1351,7 @@ internal_array_hash (Lisp_Object *arr, int size, int depth)
      A slightly better approach would be to offset by some
      noise factor from the points chosen below. */
   for (i = 0; i < 5; i++)
-    hash = HASH2 (hash, internal_hash (arr[i*size/5], depth + 1));
+    hash = HASH2 (hash, internal_hash (arr[i*size/5], depth));
 
   return hash;
 }
@@ -1374,16 +1384,9 @@ internal_hash (Lisp_Object obj, int depth)
     {
       return hash_string (XSTRING_DATA (obj), XSTRING_LENGTH (obj));
     }
-  if (VECTORP (obj))
-    {
-      return HASH2 (XVECTOR_LENGTH (obj),
-                   internal_array_hash (XVECTOR_DATA (obj),
-                                        XVECTOR_LENGTH (obj),
-                                        depth + 1));
-    }
   if (LRECORDP (obj))
     {
-      CONST struct lrecord_implementation
+      const struct lrecord_implementation
        *imp = XRECORD_LHEADER_IMPLEMENTATION (obj);
       if (imp->hash)
        return imp->hash (obj, depth);
@@ -1409,7 +1412,7 @@ The value is returned as (HIGH . LOW).
        (object))
 {
   /* This function is pretty 32bit-centric. */
-  unsigned long hash = internal_hash (object, 0);
+  hashcode_t hash = internal_hash (object, 0);
   return Fcons (hash >> 16, hash & 0xffff);
 }
 #endif
index cb03ac4..02ca97d 100644 (file)
@@ -171,7 +171,7 @@ int display_arg;
 /* Type of display specified.  We cannot use a Lisp symbol here because
    Lisp symbols may not initialized at the time that we set this
    variable. */
-CONST char *display_use;
+const char *display_use;
 
 /* If non-zero, then the early error handler will only print the error
    message and exit. */
@@ -256,7 +256,7 @@ fatal_error_signal (int sig)
 # if 0 /* This is evil, rarely useful, and causes grief in some cases. */
       /* Check for Sun-style stack printing via /proc */
       {
-        CONST char *pstack = "/usr/proc/bin/pstack";
+        const char *pstack = "/usr/proc/bin/pstack";
         if (access (pstack, X_OK) == 0)
           {
             char buf[100];
@@ -275,7 +275,7 @@ fatal_error_signal (int sig)
 \f
 
 DOESNT_RETURN
-fatal (CONST char *fmt, ...)
+fatal (const char *fmt, ...)
 {
   va_list args;
   va_start (args, fmt);
@@ -300,7 +300,7 @@ fatal (CONST char *fmt, ...)
    GETTEXT on the format string. */
 
 int
-stderr_out (CONST char *fmt, ...)
+stderr_out (const char *fmt, ...)
 {
   int retval;
   va_list args;
@@ -317,7 +317,7 @@ stderr_out (CONST char *fmt, ...)
    GETTEXT on the format string. */
 
 int
-stdout_out (CONST char *fmt, ...)
+stdout_out (const char *fmt, ...)
 {
   int retval;
   va_list args;
@@ -398,7 +398,7 @@ make_argc_argv (Lisp_Object argv_list, int *argc, char ***argv)
 
   for (i = 0, next = argv_list; i < n; i++, next = XCDR (next))
     {
-      CONST char *temp;
+      const char *temp;
       CHECK_STRING (XCAR (next));
 
       TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (next),
@@ -1903,8 +1903,8 @@ main_1 (int argc, char **argv, char **envp, int restart)
 
 struct standard_args
 {
-  CONST char * CONST name;
-  CONST char * CONST longname;
+  const char * const name;
+  const char * const longname;
   int priority;
   int nargs;
 };
@@ -2143,11 +2143,11 @@ Do not call this.  It will reinitialize your XEmacs.  You'll be sorry.
      (int nargs, Lisp_Object *args))
 {
   int ac;
-  CONST Extbyte *wampum;
+  const Extbyte *wampum;
   int namesize;
   int total_len;
   Lisp_Object orig_invoc_name = Fcar (Vcommand_line_args);
-  CONST Extbyte **wampum_all = alloca_array (CONST Extbyte *, nargs);
+  const Extbyte **wampum_all = alloca_array (const Extbyte *, nargs);
   int *wampum_all_len  = alloca_array (int, nargs);
 
   assert (!gc_in_progress);
@@ -2482,7 +2482,7 @@ shut_down_emacs (int sig, Lisp_Object stuff)
         "\n"
         "  gdb ");
       {
-       CONST char *name;
+       const char *name;
        char *dir = 0;
 
        /* Now try to determine the actual path to the executable,
@@ -2699,15 +2699,15 @@ and announce itself normally when it is run.
 /* Split STRING into a list of substrings.  The substrings are the
    parts of original STRING separated by SEPCHAR.  */
 static Lisp_Object
-split_string_by_emchar_1 (CONST Bufbyte *string, Bytecount size,
+split_string_by_emchar_1 (const Bufbyte *string, Bytecount size,
                          Emchar sepchar)
 {
   Lisp_Object result = Qnil;
-  CONST Bufbyte *end = string + size;
+  const Bufbyte *end = string + size;
 
   while (1)
     {
-      CONST Bufbyte *p = string;
+      const Bufbyte *p = string;
       while (p < end)
        {
          if (charptr_emchar (p) == sepchar)
@@ -2730,7 +2730,7 @@ split_string_by_emchar_1 (CONST Bufbyte *string, Bytecount size,
    converted using Qfile_name), and sepchar is hardcoded to SEPCHAR
    (':' or whatever).  */
 Lisp_Object
-decode_path (CONST char *path)
+decode_path (const char *path)
 {
   Bytecount newlen;
   Bufbyte *newpath;
@@ -2750,9 +2750,9 @@ decode_path (CONST char *path)
 }
 
 Lisp_Object
-decode_env_path (CONST char *evarname, CONST char *default_)
+decode_env_path (const char *evarname, const char *default_)
 {
-  CONST char *path = 0;
+  const char *path = 0;
   if (evarname)
     path = egetenv (evarname);
   if (!path)
@@ -2815,7 +2815,7 @@ Non-nil return value means XEmacs is running without interactive terminal.
 /* This highly dubious kludge ... shut up Jamie, I'm tired of your slagging. */
 
 DOESNT_RETURN
-assert_failed (CONST char *file, int line, CONST char *expr)
+assert_failed (const char *file, int line, const char *expr)
 {
   stderr_out ("Fatal error: assertion failed, file %s, line %d, %s\n",
              file, line, expr);
index b6ad9ba..bcd8f01 100644 (file)
@@ -49,7 +49,7 @@ static dll_handle dlhandle;
 static emodules_list *modules;
 static int modnum;
 
-static int find_make_module (CONST char *mod, CONST char *name, CONST char *ver, int make_or_find);
+static int find_make_module (const char *mod, const char *name, const char *ver, int make_or_find);
 static Lisp_Object module_load_unwind (Lisp_Object);
 static void attempt_module_delete (int mod);
 
@@ -184,7 +184,7 @@ is a bug, and you are encouraged to report it.
 }
 
 static int
-find_make_module (CONST char *mod, CONST char *name, CONST char *ver, int mof)
+find_make_module (const char *mod, const char *name, const char *ver, int mof)
 {
   int i, fs = -1;
 
@@ -304,14 +304,14 @@ module_load_unwind (Lisp_Object upto)
  * the cleaning up.
  */
 void
-emodules_load(CONST char *module, CONST char *modname, CONST char *modver)
+emodules_load(const char *module, const char *modname, const char *modver)
 {
   Lisp_Object filename;
   Lisp_Object foundname;
   int fd, x, mpx;
   char *soname, *tmod;
-  CONST char **f;
-  CONST long *ellcc_rev;
+  const char **f;
+  const long *ellcc_rev;
   char *mver, *mname, *mtitle, *symname;
   void (*modload)(void) = 0;
   void (*modsyms)(void) = 0;
@@ -326,7 +326,7 @@ emodules_load(CONST char *module, CONST char *modname, CONST char *modver)
   emodules_depth++;
   dlhandle = 0;
 
-  if ((module == (CONST char *)0) || (module[0] == '\0'))
+  if ((module == (const char *)0) || (module[0] == '\0'))
     error ("Empty module name");
 
   /* This is to get around the fact that build_string() is not declared
@@ -350,15 +350,15 @@ emodules_load(CONST char *module, CONST char *modname, CONST char *modver)
   if (dlhandle == (dll_handle)0)
     error ("Opening dynamic module: %s", dll_error (dlhandle));
 
-  ellcc_rev = (CONST long *)dll_variable (dlhandle, "emodule_compiler");
-  if ((ellcc_rev == (CONST long *)0) || (*ellcc_rev <= 0))
+  ellcc_rev = (const long *)dll_variable (dlhandle, "emodule_compiler");
+  if ((ellcc_rev == (const long *)0) || (*ellcc_rev <= 0))
     error ("Missing symbol `emodule_compiler': Invalid dynamic module");
   if (*ellcc_rev > EMODULES_REVISION)
     error ("Unsupported version `%ld(%ld)': Invalid dynamic module",
            *ellcc_rev, EMODULES_REVISION);
 
-  f = (CONST char **)dll_variable (dlhandle, "emodule_name");
-  if ((f == (CONST char **)0) || (*f == (CONST char *)0))
+  f = (const char **)dll_variable (dlhandle, "emodule_name");
+  if ((f == (const char **)0) || (*f == (const char *)0))
     error ("Missing symbol `emodule_name': Invalid dynamic module");
 
   mname = (char *)alloca (strlen (*f) + 1);
@@ -366,15 +366,15 @@ emodules_load(CONST char *module, CONST char *modname, CONST char *modver)
   if (mname[0] == '\0')
     error ("Empty value for `emodule_name': Invalid dynamic module");
 
-  f = (CONST char **)dll_variable (dlhandle, "emodule_version");
-  if ((f == (CONST char **)0) || (*f == (CONST char *)0))
+  f = (const char **)dll_variable (dlhandle, "emodule_version");
+  if ((f == (const char **)0) || (*f == (const char *)0))
     error ("Missing symbol `emodule_version': Invalid dynamic module");
 
   mver = (char *)alloca (strlen (*f) + 1);
   strcpy (mver, *f);
 
-  f = (CONST char **)dll_variable (dlhandle, "emodule_title");
-  if ((f == (CONST char **)0) || (*f == (CONST char *)0))
+  f = (const char **)dll_variable (dlhandle, "emodule_title");
+  if ((f == (const char **)0) || (*f == (const char *)0))
     error ("Missing symbol `emodule_title': Invalid dynamic module");
 
   mtitle = (char *)alloca (strlen (*f) + 1);
@@ -478,10 +478,10 @@ emodules_load(CONST char *module, CONST char *modname, CONST char *modver)
 }
 
 void
-emodules_doc_subr(CONST char *symname, CONST char *doc)
+emodules_doc_subr(const char *symname, const char *doc)
 {
   Bytecount len = strlen (symname);
-  Lisp_Object sym = oblookup (Vobarray, (CONST Bufbyte *)symname, len);
+  Lisp_Object sym = oblookup (Vobarray, (const Bufbyte *)symname, len);
   Lisp_Subr *subr;
 
   if (SYMBOLP(sym))
@@ -498,10 +498,10 @@ emodules_doc_subr(CONST char *symname, CONST char *doc)
 }
 
 void
-emodules_doc_sym (CONST char *symname, CONST char *doc)
+emodules_doc_sym (const char *symname, const char *doc)
 {
   Bytecount len = strlen (symname);
-  Lisp_Object sym = oblookup (Vobarray, (CONST Bufbyte *)symname, len);
+  Lisp_Object sym = oblookup (Vobarray, (const Bufbyte *)symname, len);
   Lisp_Object docstr;
   struct gcpro gcpro1;
 
index 575da9f..71d5726 100644 (file)
@@ -64,7 +64,7 @@ extern Lisp_Object Vemacs_minor_version;
  * specified version before. We also use these as checks when we open the
  * module to make sure we have the right module.
  */
-extern void emodules_load (CONST char *module, CONST char *name, CONST char *version);
+extern void emodules_load (const char *module, const char *name, const char *version);
 
 /*
  * Because subrs and symbols added by a dynamic module are not part of
@@ -75,8 +75,8 @@ extern void emodules_load (CONST char *module, CONST char *name, CONST char *ver
  * into the right place. These functions will be called by the module
  * init code, generated by ellcc during initialization mode.
  */
-extern void emodules_doc_subr (CONST char *objname, CONST char *docstr);
-extern void emodules_doc_sym (CONST char *objname, CONST char *docstr);
+extern void emodules_doc_subr (const char *objname, const char *docstr);
+extern void emodules_doc_sym (const char *objname, const char *docstr);
 
 #define CDOCSUBR(Fname, DOC) emodules_doc_subr (Fname, DOC)
 #define CDOCSYM(Sname, DOC)  emodules_doc_sym  (Sname, DOC)
index 962fab8..50a7d33 100644 (file)
@@ -281,10 +281,10 @@ static void
 print_subr (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
   Lisp_Subr *subr = XSUBR (obj);
-  CONST char *header =
+  const char *header =
     (subr->max_args == UNEVALLED) ? "#<special-form " : "#<subr ";
-  CONST char *name = subr_name (subr);
-  CONST char *trailer = subr->prompt ? " (interactive)>" : ">";
+  const char *name = subr_name (subr);
+  const char *trailer = subr->prompt ? " (interactive)>" : ">";
 
   if (print_readably)
     error ("printing unreadable object %s%s%s", header, name, trailer);
@@ -2214,13 +2214,13 @@ maybe_signal_continuable_error (Lisp_Object sig, Lisp_Object data,
 /* dump an error message; called like printf */
 
 DOESNT_RETURN
-error (CONST char *fmt, ...)
+error (const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2229,7 +2229,7 @@ error (CONST char *fmt, ...)
 }
 
 void
-maybe_error (Lisp_Object class, Error_behavior errb, CONST char *fmt, ...)
+maybe_error (Lisp_Object class, Error_behavior errb, const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
@@ -2239,7 +2239,7 @@ maybe_error (Lisp_Object class, Error_behavior errb, CONST char *fmt, ...)
     return;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2248,13 +2248,13 @@ maybe_error (Lisp_Object class, Error_behavior errb, CONST char *fmt, ...)
 }
 
 Lisp_Object
-continuable_error (CONST char *fmt, ...)
+continuable_error (const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2264,7 +2264,7 @@ continuable_error (CONST char *fmt, ...)
 
 Lisp_Object
 maybe_continuable_error (Lisp_Object class, Error_behavior errb,
-                        CONST char *fmt, ...)
+                        const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
@@ -2274,7 +2274,7 @@ maybe_continuable_error (Lisp_Object class, Error_behavior errb,
     return Qnil;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2291,13 +2291,13 @@ maybe_continuable_error (Lisp_Object class, Error_behavior errb,
    where the error is occurring). */
 
 DOESNT_RETURN
-signal_simple_error (CONST char *reason, Lisp_Object frob)
+signal_simple_error (const char *reason, Lisp_Object frob)
 {
   signal_error (Qerror, list2 (build_translated_string (reason), frob));
 }
 
 void
-maybe_signal_simple_error (CONST char *reason, Lisp_Object frob,
+maybe_signal_simple_error (const char *reason, Lisp_Object frob,
                           Lisp_Object class, Error_behavior errb)
 {
   /* Optimization: */
@@ -2308,13 +2308,13 @@ maybe_signal_simple_error (CONST char *reason, Lisp_Object frob,
 }
 
 Lisp_Object
-signal_simple_continuable_error (CONST char *reason, Lisp_Object frob)
+signal_simple_continuable_error (const char *reason, Lisp_Object frob)
 {
   return Fsignal (Qerror, list2 (build_translated_string (reason), frob));
 }
 
 Lisp_Object
-maybe_signal_simple_continuable_error (CONST char *reason, Lisp_Object frob,
+maybe_signal_simple_continuable_error (const char *reason, Lisp_Object frob,
                                       Lisp_Object class, Error_behavior errb)
 {
   /* Optimization: */
@@ -2335,13 +2335,13 @@ maybe_signal_simple_continuable_error (CONST char *reason, Lisp_Object frob,
 */
 
 DOESNT_RETURN
-error_with_frob (Lisp_Object frob, CONST char *fmt, ...)
+error_with_frob (Lisp_Object frob, const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2351,7 +2351,7 @@ error_with_frob (Lisp_Object frob, CONST char *fmt, ...)
 
 void
 maybe_error_with_frob (Lisp_Object frob, Lisp_Object class,
-                      Error_behavior errb, CONST char *fmt, ...)
+                      Error_behavior errb, const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
@@ -2361,7 +2361,7 @@ maybe_error_with_frob (Lisp_Object frob, Lisp_Object class,
     return;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2370,13 +2370,13 @@ maybe_error_with_frob (Lisp_Object frob, Lisp_Object class,
 }
 
 Lisp_Object
-continuable_error_with_frob (Lisp_Object frob, CONST char *fmt, ...)
+continuable_error_with_frob (Lisp_Object frob, const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2386,7 +2386,7 @@ continuable_error_with_frob (Lisp_Object frob, CONST char *fmt, ...)
 
 Lisp_Object
 maybe_continuable_error_with_frob (Lisp_Object frob, Lisp_Object class,
-                                  Error_behavior errb, CONST char *fmt, ...)
+                                  Error_behavior errb, const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
@@ -2396,7 +2396,7 @@ maybe_continuable_error_with_frob (Lisp_Object frob, Lisp_Object class,
     return Qnil;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt), Qnil, -1,
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
                                args);
   va_end (args);
 
@@ -2413,7 +2413,7 @@ maybe_continuable_error_with_frob (Lisp_Object frob, Lisp_Object class,
    is three objects, a string and two related Lisp objects. */
 
 DOESNT_RETURN
-signal_simple_error_2 (CONST char *reason,
+signal_simple_error_2 (const char *reason,
                        Lisp_Object frob0, Lisp_Object frob1)
 {
   signal_error (Qerror, list3 (build_translated_string (reason), frob0,
@@ -2421,7 +2421,7 @@ signal_simple_error_2 (CONST char *reason,
 }
 
 void
-maybe_signal_simple_error_2 (CONST char *reason, Lisp_Object frob0,
+maybe_signal_simple_error_2 (const char *reason, Lisp_Object frob0,
                             Lisp_Object frob1, Lisp_Object class,
                             Error_behavior errb)
 {
@@ -2434,7 +2434,7 @@ maybe_signal_simple_error_2 (CONST char *reason, Lisp_Object frob0,
 
 
 Lisp_Object
-signal_simple_continuable_error_2 (CONST char *reason, Lisp_Object frob0,
+signal_simple_continuable_error_2 (const char *reason, Lisp_Object frob0,
                                   Lisp_Object frob1)
 {
   return Fsignal (Qerror, list3 (build_translated_string (reason), frob0,
@@ -2442,7 +2442,7 @@ signal_simple_continuable_error_2 (CONST char *reason, Lisp_Object frob0,
 }
 
 Lisp_Object
-maybe_signal_simple_continuable_error_2 (CONST char *reason, Lisp_Object frob0,
+maybe_signal_simple_continuable_error_2 (const char *reason, Lisp_Object frob0,
                                         Lisp_Object frob1, Lisp_Object class,
                                         Error_behavior errb)
 {
@@ -2831,7 +2831,7 @@ do_autoload (Lisp_Object fundef,
 /************************************************************************/
 
 static Lisp_Object funcall_lambda (Lisp_Object fun,
-                                   int nargs, Lisp_Object args[]);
+                                  int nargs, Lisp_Object args[]);
 static int in_warnings;
 
 static Lisp_Object
@@ -4138,7 +4138,7 @@ caught_a_squirmer (Lisp_Object errordata, Lisp_Object arg)
       args[1] = errordata;
       warn_when_safe_lispobj
        (Qerror, Qwarning,
-        emacs_doprnt_string_lisp ((CONST Bufbyte *) "%s: %s",
+        emacs_doprnt_string_lisp ((const Bufbyte *) "%s: %s",
                                   Qnil, -1, 2, args));
     }
   return Qunbound;
@@ -4181,7 +4181,7 @@ catch_them_squirmers_eval_in_buffer (Lisp_Object cons)
 }
 
 Lisp_Object
-eval_in_buffer_trapping_errors (CONST char *warning_string,
+eval_in_buffer_trapping_errors (const char *warning_string,
                                struct buffer *buf, Lisp_Object form)
 {
   int speccount = specpdl_depth();
@@ -4221,7 +4221,7 @@ catch_them_squirmers_run_hook (Lisp_Object hook_symbol)
 }
 
 Lisp_Object
-run_hook_trapping_errors (CONST char *warning_string, Lisp_Object hook_symbol)
+run_hook_trapping_errors (const char *warning_string, Lisp_Object hook_symbol)
 {
   int speccount;
   Lisp_Object tem;
@@ -4254,7 +4254,7 @@ run_hook_trapping_errors (CONST char *warning_string, Lisp_Object hook_symbol)
    if an error occurs. */
 
 Lisp_Object
-safe_run_hook_trapping_errors (CONST char *warning_string,
+safe_run_hook_trapping_errors (const char *warning_string,
                               Lisp_Object hook_symbol,
                               int allow_quit)
 {
@@ -4300,7 +4300,7 @@ catch_them_squirmers_call0 (Lisp_Object function)
 }
 
 Lisp_Object
-call0_trapping_errors (CONST char *warning_string, Lisp_Object function)
+call0_trapping_errors (const char *warning_string, Lisp_Object function)
 {
   int speccount;
   Lisp_Object tem;
@@ -4347,7 +4347,7 @@ catch_them_squirmers_call2 (Lisp_Object cons)
 }
 
 Lisp_Object
-call1_trapping_errors (CONST char *warning_string, Lisp_Object function,
+call1_trapping_errors (const char *warning_string, Lisp_Object function,
                       Lisp_Object object)
 {
   int speccount = specpdl_depth();
@@ -4384,7 +4384,7 @@ call1_trapping_errors (CONST char *warning_string, Lisp_Object function,
 }
 
 Lisp_Object
-call2_trapping_errors (CONST char *warning_string, Lisp_Object function,
+call2_trapping_errors (const char *warning_string, Lisp_Object function,
                       Lisp_Object object1, Lisp_Object object2)
 {
   int speccount = specpdl_depth();
@@ -4937,13 +4937,13 @@ warn_when_safe_lispobj (Lisp_Object class, Lisp_Object level,
    automatically be called when it is safe to do so. */
 
 void
-warn_when_safe (Lisp_Object class, Lisp_Object level, CONST char *fmt, ...)
+warn_when_safe (Lisp_Object class, Lisp_Object level, const char *fmt, ...)
 {
   Lisp_Object obj;
   va_list args;
 
   va_start (args, fmt);
-  obj = emacs_doprnt_string_va ((CONST Bufbyte *) GETTEXT (fmt),
+  obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt),
                                Qnil, -1, args);
   va_end (args);
 
index e1d7006..cb0115f 100644 (file)
@@ -109,7 +109,7 @@ static int tty_events_occurred;
 /* Mask of bits indicating the descriptors that we wait for input on */
 extern SELECT_TYPE input_wait_mask, process_only_mask, tty_only_mask;
 
-static CONST String x_fallback_resources[] =
+static const String x_fallback_resources[] =
 {
   /* This file is automatically generated from the app-defaults file
      in ../etc/Emacs.ad.  These resources are consulted only if no
@@ -336,11 +336,17 @@ x_has_keysym (KeySym keysym, Lisp_Object hash_table, int with_modifiers)
 
   if (keysym < 0x80) /* Optimize for ASCII keysyms */
     return;
-  /* If you do:  xmodmap -e 'keysym NN = scaron'
+
+  /* If you execute:
+     xmodmap -e 'keysym NN = scaron'
      and then press (Shift scaron), X11 will return the different
-     keysym Scaron, but  xmodmap -pke  might not even mention Scaron.
-     So we `register' both scaron and Scaron. */
+     keysym `Scaron', but  `xmodmap -pke'  might not even mention `Scaron'.
+     So we "register" both `scaron' and `Scaron'. */
+#ifdef HAVE_XCONVERTCASE
   XConvertCase (keysym, &upper_lower[0], &upper_lower[1]);
+#else
+  upper_lower[0] = upper_lower[1] = keysym;
+#endif
 
   for (j = 0; j < (upper_lower[0] == upper_lower[1] ? 1 : 2); j++)
     {
@@ -415,7 +421,7 @@ x_reset_key_mapping (struct device *d)
     }
 }
 
-static CONST char *
+static const char *
 index_to_name (int indice)
 {
   switch (indice)
@@ -570,7 +576,7 @@ x_reset_modifier_mapping (struct device *d)
      be totally wrong. */
   if (mode_bit)
     {
-      CONST char *warn = 0;
+      const char *warn = 0;
       if      (mode_bit == meta_bit)  warn = "Meta",  meta_bit  = 0;
       else if (mode_bit == hyper_bit) warn = "Hyper", hyper_bit = 0;
       else if (mode_bit == super_bit) warn = "Super", super_bit = 0;
@@ -2294,7 +2300,7 @@ describe_event_window (Window window, Display *display)
   stderr_out ("\n");
 }
 
-static CONST char *
+static const char *
 XEvent_mode_to_string (int mode)
 {
   switch (mode)
@@ -2307,7 +2313,7 @@ XEvent_mode_to_string (int mode)
   }
 }
 
-static CONST char *
+static const char *
 XEvent_detail_to_string (int detail)
 {
   switch (detail)
@@ -2323,7 +2329,7 @@ XEvent_detail_to_string (int detail)
   }
 }
 
-static CONST char *
+static const char *
 XEvent_visibility_to_string (int state)
 {
   switch (state)
index c5c3d2f..6d37617 100644 (file)
@@ -118,6 +118,9 @@ int windows_fd;
 static Lisp_Object mswindows_u_dispatch_event_queue, mswindows_u_dispatch_event_queue_tail;
 static Lisp_Object mswindows_s_dispatch_event_queue, mswindows_s_dispatch_event_queue_tail;
 
+/* For speed: whether there is a WM_PAINT magic message in the system queue */
+static int mswindows_paint_pending = 0;
+
 /* The number of things we can wait on */
 #define MAX_WAITABLE (MAXIMUM_WAIT_OBJECTS - 1)
 
@@ -128,6 +131,7 @@ static HANDLE mswindows_waitable_handles[MAX_WAITABLE];
 /* Number of wait handles */
 static int mswindows_waitable_count=0;
 #endif /* HAVE_MSG_SELECT */
+
 /* Brush for painting widgets */
 static HBRUSH widget_brush = 0;
 static LONG    last_widget_brushed = 0;
@@ -712,7 +716,7 @@ winsock_reader (Lstream *stream, unsigned char *data, size_t size)
 }
 
 static ssize_t
-winsock_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+winsock_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct winsock_stream *str = WINSOCK_STREAM_DATA (stream);
 
@@ -785,7 +789,7 @@ winsock_was_blocked_p (Lstream *stream)
 }
 
 static Lisp_Object
-make_winsock_stream_1 (SOCKET s, LPARAM param, CONST char *mode)
+make_winsock_stream_1 (SOCKET s, LPARAM param, const char *mode)
 {
   Lisp_Object obj;
   Lstream *lstr = Lstream_new (lstream_winsock, mode);
@@ -1230,18 +1234,14 @@ mswindows_pump_outstanding_events (void)
  * QUITP, and are interesting in keyboard messages only.
  */
 static void
-mswindows_drain_windows_queue (int keyboard_only_till_quit_char_p)
+mswindows_drain_windows_queue ()
 {
   MSG msg;
 
-  /* Minimize the hassle of misordered events by not fetching
-     past quit char if called from QUITP; */
-  while (!(keyboard_only_till_quit_char_p &&
-          mswindows_quit_chars_count > 0) &&
-        PeekMessage (&msg, NULL,
-                     keyboard_only_till_quit_char_p ? WM_KEYFIRST : 0,
-                     keyboard_only_till_quit_char_p ? WM_KEYLAST : 0,
-                     PM_REMOVE))
+  /* should call mswindows_need_event_in_modal_loop() if in modal loop */
+  assert (!mswindows_in_modal_loop);
+
+  while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
     {
       /* We have to translate messages that are not sent to the main
          window. This is so that key presses work ok in things like
@@ -1251,6 +1251,23 @@ mswindows_drain_windows_queue (int keyboard_only_till_quit_char_p)
        {
          TranslateMessage (&msg);
        }
+      else if (msg.message == WM_PAINT)
+       {
+         /* hdc will be NULL unless this is a subwindow - in which case we
+            shouldn't have received a paint message for it here. */
+         assert (msg.wParam == 0);
+
+         if (!mswindows_paint_pending)
+           {
+             /* Queue a magic event for handling when safe */
+             mswindows_enqueue_magic_event (msg.hwnd, WM_PAINT);
+             mswindows_paint_pending = 1;
+           }
+
+         /* Don't dispatch. WM_PAINT is always the last message in the
+            queue so it's OK to just return. */
+         return;
+       }
       DispatchMessage (&msg);
       mswindows_unmodalize_signal_maybe ();
     }
@@ -1314,14 +1331,6 @@ mswindows_need_event (int badly_p)
       return;
     }
 
-#if 0
-  /* Have to drain Windows message queue first, otherwise, we may miss
-     quit char when called from quit_p */
-  /* #### This is, ehm, not quite true -- this function is not
-     called from quit_p. --kkm */
-  mswindows_drain_windows_queue ();
-#endif
-
   while (NILP (mswindows_u_dispatch_event_queue)
         && NILP (mswindows_s_dispatch_event_queue))
     {
@@ -1351,7 +1360,7 @@ mswindows_need_event (int badly_p)
        {
          if (FD_ISSET (windows_fd, &temp_mask))
            {
-             mswindows_drain_windows_queue (0);
+             mswindows_drain_windows_queue ();
            }
 #ifdef HAVE_TTY
          /* Look for a TTY event */
@@ -1432,7 +1441,7 @@ mswindows_need_event (int badly_p)
     else if (active == WAIT_OBJECT_0 + mswindows_waitable_count)
       {
        /* Got your message, thanks */
-       mswindows_drain_windows_queue (0);
+       mswindows_drain_windows_queue ();
       }
     else
       {
@@ -1609,6 +1618,41 @@ mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
 #endif
 
 /*
+ * Helper to do repainting - repaints can happen both from the windows
+ * procedure and from magic events
+ */
+void
+mswindows_handle_paint (struct frame *frame)
+  {
+    HWND hwnd = FRAME_MSWINDOWS_HANDLE (frame);
+
+    /* According to the docs we need to check GetUpdateRect() before
+       actually doing a WM_PAINT */
+    if (GetUpdateRect (hwnd, NULL, FALSE))
+      {
+       PAINTSTRUCT paintStruct;
+       int x, y, width, height;
+
+       BeginPaint (hwnd, &paintStruct);
+       x = paintStruct.rcPaint.left;
+       y = paintStruct.rcPaint.top;
+       width = paintStruct.rcPaint.right - paintStruct.rcPaint.left;
+       height = paintStruct.rcPaint.bottom - paintStruct.rcPaint.top;
+       /* Normally we want to ignore expose events when child
+          windows are unmapped, however once we are in the guts of
+          WM_PAINT we need to make sure that we don't register
+          unmaps then because they will not actually occur. */
+       if (!check_for_ignored_expose (frame, x, y, width, height))
+         {
+           hold_ignored_expose_registration = 1;
+           mswindows_redraw_exposed_area (frame, x, y, width, height);
+           hold_ignored_expose_registration = 0;
+         }
+       EndPaint (hwnd, &paintStruct);
+      }
+  }
+
+/*
  * Returns 1 if a key is a real modifier or special key, which 
  * is better handled by DefWindowProc
  */
@@ -2021,37 +2065,14 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     break;
 
   case WM_PAINT:
-    {
-      /* According to the docs we need to check GetUpdateRect() before
-         actually doing a WM_PAINT */
-      if (GetUpdateRect (hwnd, NULL, FALSE))
-       {
-         PAINTSTRUCT paintStruct;
-         int x, y, width, height;
-
-         frame = XFRAME (mswindows_find_frame (hwnd));
-
-         BeginPaint (hwnd, &paintStruct);
-         x = paintStruct.rcPaint.left;
-         y = paintStruct.rcPaint.top;
-         width = paintStruct.rcPaint.right - paintStruct.rcPaint.left;
-         height = paintStruct.rcPaint.bottom - paintStruct.rcPaint.top;
-         /* Normally we want to ignore expose events when child
-            windows are unmapped, however once we are in the guts of
-            WM_PAINT we need to make sure that we don't register
-            unmaps then because they will not actually occur. */
-         if (!check_for_ignored_expose (frame, x, y, width, height))
-           {
-             hold_ignored_expose_registration = 1;
-             mswindows_redraw_exposed_area (frame, x, y, width, height);
-             hold_ignored_expose_registration = 0;
-           }
-
-         EndPaint (hwnd, &paintStruct);
-       }
-      else
-       goto defproc;
-    }
+    /* hdc will be NULL unless this is a subwindow - in which case we
+       shouldn't have received a paint message for it here. */
+    assert (wParam == 0);
+
+    /* Can't queue a magic event because windows goes modal and sends paint 
+       messages directly to the windows procedure when doing solid drags
+       and the message queue doesn't get processed. */
+    mswindows_handle_paint (XFRAME (mswindows_find_frame (hwnd)));
     break;
 
   case WM_SIZE:
@@ -2702,6 +2723,11 @@ emacs_mswindows_handle_magic_event (Lisp_Event *emacs_event)
     case XM_BUMPQUEUE:
       break;
 
+    case WM_PAINT:
+      mswindows_handle_paint (XFRAME (EVENT_CHANNEL (emacs_event)));
+      mswindows_paint_pending = 0;
+      break;
+
     case WM_SETFOCUS:
     case WM_KILLFOCUS:
       {
@@ -2831,7 +2857,7 @@ emacs_mswindows_quit_p (void)
 
   /* Drain windows queue. This sets up number of quit characters in
      the queue */
-  mswindows_drain_windows_queue (1);
+  mswindows_drain_windows_queue ();
 
   if (mswindows_quit_chars_count > 0)
     {
index 5680725..5dccba3 100644 (file)
@@ -1115,7 +1115,7 @@ mark_timeout (Lisp_Object obj)
 static void
 print_timeout (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
-  CONST Lisp_Timeout *t = XTIMEOUT (obj);
+  const Lisp_Timeout *t = XTIMEOUT (obj);
   char buf[64];
 
   sprintf (buf, "#<INTERNAL OBJECT (XEmacs bug?) (timeout) 0x%lx>",
@@ -3412,7 +3412,7 @@ menu_accelerator_junk_on_error (Lisp_Object errordata, Lisp_Object ignored)
       args[1] = errordata;
       warn_when_safe_lispobj
        (Qerror, Qwarning,
-        emacs_doprnt_string_lisp ((CONST Bufbyte *) "%s: %s",
+        emacs_doprnt_string_lisp ((const Bufbyte *) "%s: %s",
                                   Qnil, -1, 2, args));
     }
 
index f4648f5..8d8026d 100644 (file)
@@ -142,7 +142,7 @@ mark_event (Lisp_Object obj)
 }
 
 static void
-print_event_1 (CONST char *str, Lisp_Object obj, Lisp_Object printcharfun)
+print_event_1 (const char *str, Lisp_Object obj, Lisp_Object printcharfun)
 {
   char buf[255];
   write_c_string (str, printcharfun);
@@ -1266,7 +1266,7 @@ format_event_object (char *buf, Lisp_Event *event, int brief)
       }
     case magic_event:
       {
-        CONST char *name = NULL;
+        const char *name = NULL;
 
 #ifdef HAVE_X_WINDOWS
        {
@@ -1314,7 +1314,7 @@ format_event_object (char *buf, Lisp_Event *event, int brief)
     }
   else if (SYMBOLP (key))
     {
-      CONST char *str = 0;
+      const char *str = 0;
       if (brief)
        {
          if      (EQ (key, QKlinefeed))  str = "LFD";
index 11cba96..686ce82 100644 (file)
@@ -2599,12 +2599,11 @@ extent_fragment_delete (struct extent_fragment *ef)
   xfree (ef);
 }
 
-/* Note:  CONST is losing, but `const' is part of the interface of qsort() */
 static int
 extent_priority_sort_function (const void *humpty, const void *dumpty)
 {
-  CONST EXTENT foo = * (CONST EXTENT *) humpty;
-  CONST EXTENT bar = * (CONST EXTENT *) dumpty;
+  const EXTENT foo = * (const EXTENT *) humpty;
+  const EXTENT bar = * (const EXTENT *) dumpty;
   if (extent_priority (foo) < extent_priority (bar))
     return -1;
   return extent_priority (foo) > extent_priority (bar);
@@ -2910,38 +2909,6 @@ extent_fragment_update (struct window *w, struct extent_fragment *ef,
    extent objects.  They are similar to the functions for other
    lrecord objects.  allocate_extent() is in alloc.c, not here. */
 
-static Lisp_Object mark_extent (Lisp_Object);
-static int extent_equal (Lisp_Object, Lisp_Object, int depth);
-static unsigned long extent_hash (Lisp_Object obj, int depth);
-static void print_extent (Lisp_Object obj, Lisp_Object printcharfun,
-                         int escapeflag);
-static Lisp_Object extent_getprop (Lisp_Object obj, Lisp_Object prop);
-static int extent_putprop (Lisp_Object obj, Lisp_Object prop,
-                          Lisp_Object value);
-static int extent_remprop (Lisp_Object obj, Lisp_Object prop);
-static Lisp_Object extent_plist (Lisp_Object obj);
-
-static const struct lrecord_description extent_description[] = {
-  { XD_LISP_OBJECT, offsetof (struct extent, object) },
-  { XD_LISP_OBJECT, offsetof (struct extent, flags.face) },
-  { XD_LISP_OBJECT, offsetof (struct extent, plist) },
-  { XD_END }
-};
-
-DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("extent", extent,
-                                               mark_extent,
-                                               print_extent,
-                                               /* NOTE: If you declare a
-                                                  finalization method here,
-                                                  it will NOT be called.
-                                                  Shaft city. */
-                                               0,
-                                               extent_equal, extent_hash,
-                                               extent_description,
-                                               extent_getprop, extent_putprop,
-                                               extent_remprop, extent_plist,
-                                               struct extent);
-
 static Lisp_Object
 mark_extent (Lisp_Object obj)
 {
@@ -3007,9 +2974,9 @@ print_extent (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
   if (escapeflag)
     {
-      CONST char *title = "";
-      CONST char *name = "";
-      CONST char *posttitle = "";
+      const char *title = "";
+      const char *name = "";
+      const char *posttitle = "";
       Lisp_Object obj2 = Qnil;
 
       /* Destroyed extents have 't' in the object field, causing
@@ -3131,6 +3098,13 @@ extent_hash (Lisp_Object obj, int depth)
                internal_hash (extent_object (e), depth + 1));
 }
 
+static const struct lrecord_description extent_description[] = {
+  { XD_LISP_OBJECT, offsetof (struct extent, object) },
+  { XD_LISP_OBJECT, offsetof (struct extent, flags.face) },
+  { XD_LISP_OBJECT, offsetof (struct extent, plist) },
+  { XD_END }
+};
+
 static Lisp_Object
 extent_getprop (Lisp_Object obj, Lisp_Object prop)
 {
@@ -3189,6 +3163,20 @@ extent_plist (Lisp_Object obj)
   return Fextent_properties (obj);
 }
 
+DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("extent", extent,
+                                               mark_extent,
+                                               print_extent,
+                                               /* NOTE: If you declare a
+                                                  finalization method here,
+                                                  it will NOT be called.
+                                                  Shaft city. */
+                                               0,
+                                               extent_equal, extent_hash,
+                                               extent_description,
+                                               extent_getprop, extent_putprop,
+                                               extent_remprop, extent_plist,
+                                               struct extent);
+
 \f
 /************************************************************************/
 /*                     basic extent accessors                          */
index eac11fe..2568fcf 100644 (file)
@@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */
 ERROR!  This ought not be getting compiled if EXTERNAL_WIDGET is undefined
 #endif
 
-void fatal (CONST char *fmt, ...);
+void fatal (const char *fmt, ...);
 #else /* not emacs */
 static void fatal (char *msg);
 #endif
index 417f170..215f67d 100644 (file)
@@ -496,7 +496,7 @@ update_inheritance_mapper_internal (Lisp_Object cur_face,
 }
 
 static int
-update_face_inheritance_mapper (CONST void *hash_key, void *hash_contents,
+update_face_inheritance_mapper (const void *hash_key, void *hash_contents,
                                void *face_inheritance_closure)
 {
   Lisp_Object key, contents;
@@ -1894,7 +1894,7 @@ complex_vars_of_faces (void)
        (#### Perhaps we should remove the stuff from x-faces.el
        and only depend on this stuff here?  That should work.)
      */
-    CONST char *fonts[] =
+    const char *fonts[] =
     {
       "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",
       "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",
@@ -1912,7 +1912,7 @@ complex_vars_of_faces (void)
       "-*-*-*-*-*-*-*-120-*-*-*-*-*-*",
       "*"
     };
-    CONST char **fontptr;
+    const char **fontptr;
 
     for (fontptr = fonts + countof(fonts) - 1; fontptr >= fonts; fontptr--)
       inst_list = Fcons (Fcons (list1 (Qx), build_string (*fontptr)),
index 78afa01..fca56b0 100644 (file)
@@ -176,67 +176,67 @@ EXFUN (Fcopy_coding_system, 2);
 #ifdef MULE
 struct detection_state;
 static int detect_coding_sjis (struct detection_state *st,
-                              CONST unsigned char *src,
+                              const unsigned char *src,
                               unsigned int n);
 static void decode_coding_sjis (Lstream *decoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst,
                                unsigned int n);
 static void encode_coding_sjis (Lstream *encoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst,
                                unsigned int n);
 static int detect_coding_big5 (struct detection_state *st,
-                              CONST unsigned char *src,
+                              const unsigned char *src,
                               unsigned int n);
 static void decode_coding_big5 (Lstream *decoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst, unsigned int n);
 static void encode_coding_big5 (Lstream *encoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst, unsigned int n);
 static int detect_coding_ucs4 (struct detection_state *st,
-                              CONST unsigned char *src,
+                              const unsigned char *src,
                               unsigned int n);
 static void decode_coding_ucs4 (Lstream *decoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst, unsigned int n);
 static void encode_coding_ucs4 (Lstream *encoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst, unsigned int n);
 static int detect_coding_utf8 (struct detection_state *st,
-                              CONST unsigned char *src,
+                              const unsigned char *src,
                               unsigned int n);
 static void decode_coding_utf8 (Lstream *decoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst, unsigned int n);
 static void encode_coding_utf8 (Lstream *encoding,
-                               CONST unsigned char *src,
+                               const unsigned char *src,
                                unsigned_char_dynarr *dst, unsigned int n);
 static int postprocess_iso2022_mask (int mask);
 static void reset_iso2022 (Lisp_Object coding_system,
                           struct iso2022_decoder *iso);
 static int detect_coding_iso2022 (struct detection_state *st,
-                                 CONST unsigned char *src,
+                                 const unsigned char *src,
                                  unsigned int n);
 static void decode_coding_iso2022 (Lstream *decoding,
-                                  CONST unsigned char *src,
+                                  const unsigned char *src,
                                   unsigned_char_dynarr *dst, unsigned int n);
 static void encode_coding_iso2022 (Lstream *encoding,
-                                  CONST unsigned char *src,
+                                  const unsigned char *src,
                                   unsigned_char_dynarr *dst, unsigned int n);
 #endif /* MULE */
 static void decode_coding_no_conversion (Lstream *decoding,
-                                        CONST unsigned char *src,
+                                        const unsigned char *src,
                                         unsigned_char_dynarr *dst,
                                         unsigned int n);
 static void encode_coding_no_conversion (Lstream *encoding,
-                                        CONST unsigned char *src,
+                                        const unsigned char *src,
                                         unsigned_char_dynarr *dst,
                                         unsigned int n);
-static void mule_decode (Lstream *decoding, CONST unsigned char *src,
+static void mule_decode (Lstream *decoding, const unsigned char *src,
                         unsigned_char_dynarr *dst, unsigned int n);
-static void mule_encode (Lstream *encoding, CONST unsigned char *src,
+static void mule_encode (Lstream *encoding, const unsigned char *src,
                         unsigned_char_dynarr *dst, unsigned int n);
 
 typedef struct codesys_prop codesys_prop;
@@ -1626,7 +1626,7 @@ mask_has_at_most_one_bit_p (int mask)
 }
 
 static eol_type_t
-detect_eol_type (struct detection_state *st, CONST unsigned char *src,
+detect_eol_type (struct detection_state *st, const unsigned char *src,
                 unsigned int n)
 {
   int c;
@@ -1671,7 +1671,7 @@ detect_eol_type (struct detection_state *st, CONST unsigned char *src,
 */
 
 static int
-detect_coding_type (struct detection_state *st, CONST Extbyte *src,
+detect_coding_type (struct detection_state *st, const Extbyte *src,
                    unsigned int n, int just_do_eol)
 {
   int c;
@@ -2109,7 +2109,7 @@ struct decoding_stream
 static ssize_t decoding_reader (Lstream *stream,
                                unsigned char *data, size_t size);
 static ssize_t decoding_writer (Lstream *stream,
-                               CONST unsigned char *data, size_t size);
+                               const unsigned char *data, size_t size);
 static int decoding_rewinder   (Lstream *stream);
 static int decoding_seekable_p (Lstream *stream);
 static int decoding_flusher    (Lstream *stream);
@@ -2204,7 +2204,7 @@ decoding_reader (Lstream *stream, unsigned char *data, size_t size)
 }
 
 static ssize_t
-decoding_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+decoding_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct decoding_stream *str = DECODING_STREAM_DATA (stream);
   ssize_t retval;
@@ -2314,7 +2314,7 @@ set_decoding_stream_coding_system (Lstream *lstr, Lisp_Object codesys)
 
 static Lisp_Object
 make_decoding_stream_1 (Lstream *stream, Lisp_Object codesys,
-                       CONST char *mode)
+                       const char *mode)
 {
   Lstream *lstr = Lstream_new (lstream_decoding, mode);
   struct decoding_stream *str = DECODING_STREAM_DATA (lstr);
@@ -2357,7 +2357,7 @@ make_decoding_output_stream (Lstream *stream, Lisp_Object codesys)
    be used for both reading and writing. */
 
 static void
-mule_decode (Lstream *decoding, CONST unsigned char *src,
+mule_decode (Lstream *decoding, const unsigned char *src,
             unsigned_char_dynarr *dst, unsigned int n)
 {
   struct decoding_stream *str = DECODING_STREAM_DATA (decoding);
@@ -2563,7 +2563,7 @@ struct encoding_stream
 };
 
 static ssize_t encoding_reader (Lstream *stream, unsigned char *data, size_t size);
-static ssize_t encoding_writer (Lstream *stream, CONST unsigned char *data,
+static ssize_t encoding_writer (Lstream *stream, const unsigned char *data,
                                size_t size);
 static int encoding_rewinder   (Lstream *stream);
 static int encoding_seekable_p (Lstream *stream);
@@ -2659,7 +2659,7 @@ encoding_reader (Lstream *stream, unsigned char *data, size_t size)
 }
 
 static ssize_t
-encoding_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+encoding_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct encoding_stream *str = ENCODING_STREAM_DATA (stream);
   ssize_t retval;
@@ -2770,7 +2770,7 @@ set_encoding_stream_coding_system (Lstream *lstr, Lisp_Object codesys)
 
 static Lisp_Object
 make_encoding_stream_1 (Lstream *stream, Lisp_Object codesys,
-                       CONST char *mode)
+                       const char *mode)
 {
   Lstream *lstr = Lstream_new (lstream_encoding, mode);
   struct encoding_stream *str = ENCODING_STREAM_DATA (lstr);
@@ -2801,7 +2801,7 @@ make_encoding_output_stream (Lstream *stream, Lisp_Object codesys)
    Store the encoded data into DST. */
 
 static void
-mule_encode (Lstream *encoding, CONST unsigned char *src,
+mule_encode (Lstream *encoding, const unsigned char *src,
             unsigned_char_dynarr *dst, unsigned int n)
 {
   struct encoding_stream *str = ENCODING_STREAM_DATA (encoding);
@@ -2948,7 +2948,7 @@ text.  BUFFER defaults to the current buffer if unspecified.
   ((c) >= 0xA1 && (c) <= 0xDF)
 
 static int
-detect_coding_sjis (struct detection_state *st, CONST unsigned char *src,
+detect_coding_sjis (struct detection_state *st, const unsigned char *src,
                    unsigned int n)
 {
   int c;
@@ -2973,7 +2973,7 @@ detect_coding_sjis (struct detection_state *st, CONST unsigned char *src,
 /* Convert Shift-JIS data to internal format. */
 
 static void
-decode_coding_sjis (Lstream *decoding, CONST unsigned char *src,
+decode_coding_sjis (Lstream *decoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   unsigned char c;
@@ -3030,7 +3030,7 @@ decode_coding_sjis (Lstream *decoding, CONST unsigned char *src,
 /* Convert internally-formatted data to Shift-JIS. */
 
 static void
-encode_coding_sjis (Lstream *encoding, CONST unsigned char *src,
+encode_coding_sjis (Lstream *encoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   unsigned char c;
@@ -3234,7 +3234,7 @@ Return the corresponding character code in SHIFT-JIS as a cons of two bytes.
 } while (0)
 
 static int
-detect_coding_big5 (struct detection_state *st, CONST unsigned char *src,
+detect_coding_big5 (struct detection_state *st, const unsigned char *src,
                    unsigned int n)
 {
   int c;
@@ -3260,7 +3260,7 @@ detect_coding_big5 (struct detection_state *st, CONST unsigned char *src,
 /* Convert Big5 data to internal format. */
 
 static void
-decode_coding_big5 (Lstream *decoding, CONST unsigned char *src,
+decode_coding_big5 (Lstream *decoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   unsigned char c;
@@ -3310,7 +3310,7 @@ decode_coding_big5 (Lstream *decoding, CONST unsigned char *src,
 /* Convert internally-formatted data to Big5. */
 
 static void
-encode_coding_big5 (Lstream *encoding, CONST unsigned char *src,
+encode_coding_big5 (Lstream *encoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   unsigned char c;
@@ -3577,7 +3577,7 @@ encode_ucs4 (Lisp_Object charset,
 }
 
 static int
-detect_coding_ucs4 (struct detection_state *st, CONST unsigned char *src,
+detect_coding_ucs4 (struct detection_state *st, const unsigned char *src,
                    unsigned int n)
 {
   while (n--)
@@ -3602,7 +3602,7 @@ detect_coding_ucs4 (struct detection_state *st, CONST unsigned char *src,
 }
 
 static void
-decode_coding_ucs4 (Lstream *decoding, CONST unsigned char *src,
+decode_coding_ucs4 (Lstream *decoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   struct decoding_stream *str = DECODING_STREAM_DATA (decoding);
@@ -3638,7 +3638,7 @@ decode_coding_ucs4 (Lstream *decoding, CONST unsigned char *src,
 }
 
 static void
-encode_coding_ucs4 (Lstream *encoding, CONST unsigned char *src,
+encode_coding_ucs4 (Lstream *encoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   struct encoding_stream *str = ENCODING_STREAM_DATA (encoding);
@@ -3651,7 +3651,7 @@ encode_coding_ucs4 (Lstream *encoding, CONST unsigned char *src,
   /* flags for handling composite chars.  We do a little switcharoo
      on the source while we're outputting the composite char. */
   unsigned int saved_n = 0;
-  CONST unsigned char *saved_src = NULL;
+  const unsigned char *saved_src = NULL;
   int in_composite = 0;
 
  back_to_square_n:
@@ -3777,7 +3777,7 @@ encode_coding_ucs4 (Lstream *encoding, CONST unsigned char *src,
 /************************************************************************/
 
 static int
-detect_coding_utf8 (struct detection_state *st, CONST unsigned char *src,
+detect_coding_utf8 (struct detection_state *st, const unsigned char *src,
                    unsigned int n)
 {
   while (n--)
@@ -3812,7 +3812,7 @@ detect_coding_utf8 (struct detection_state *st, CONST unsigned char *src,
 }
 
 static void
-decode_coding_utf8 (Lstream *decoding, CONST unsigned char *src,
+decode_coding_utf8 (Lstream *decoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   struct decoding_stream *str = DECODING_STREAM_DATA (decoding);
@@ -3926,7 +3926,7 @@ encode_utf8 (Lisp_Object charset,
 }
 
 static void
-encode_coding_utf8 (Lstream *encoding, CONST unsigned char *src,
+encode_coding_utf8 (Lstream *encoding, const unsigned char *src,
                    unsigned_char_dynarr *dst, unsigned int n)
 {
   struct encoding_stream *str = ENCODING_STREAM_DATA (encoding);
@@ -3940,7 +3940,7 @@ encode_coding_utf8 (Lstream *encoding, CONST unsigned char *src,
   /* flags for handling composite chars.  We do a little switcharoo
      on the source while we're outputting the composite char. */
   unsigned int saved_n = 0;
-  CONST unsigned char *saved_src = NULL;
+  const unsigned char *saved_src = NULL;
   int in_composite = 0;
 
  back_to_square_n:
@@ -4644,7 +4644,7 @@ parse_iso2022_esc (Lisp_Object codesys, struct iso2022_decoder *iso,
 }
 
 static int
-detect_coding_iso2022 (struct detection_state *st, CONST unsigned char *src,
+detect_coding_iso2022 (struct detection_state *st, const unsigned char *src,
                       unsigned int n)
 {
   int mask;
@@ -4835,7 +4835,7 @@ ensure_correct_direction (int direction, Lisp_Coding_System *codesys,
 /* Convert ISO2022-format data to internal format. */
 
 static void
-decode_coding_iso2022 (Lstream *decoding, CONST unsigned char *src,
+decode_coding_iso2022 (Lstream *decoding, const unsigned char *src,
                       unsigned_char_dynarr *dst, unsigned int n)
 {
   struct decoding_stream *str = DECODING_STREAM_DATA (decoding);
@@ -5076,8 +5076,8 @@ static void
 iso2022_designate (Lisp_Object charset, unsigned char reg,
                   struct encoding_stream *str, unsigned_char_dynarr *dst)
 {
-  static CONST char inter94[] = "()*+";
-  static CONST char inter96[] = ",-./";
+  static const char inter94[] = "()*+";
+  static const char inter96[] = ",-./";
   unsigned int type;
   unsigned char final;
   Lisp_Object old_charset = str->iso2022.charset[reg];
@@ -5161,7 +5161,7 @@ ensure_shift_out (struct encoding_stream *str, unsigned_char_dynarr *dst)
 /* Convert internally-formatted data to ISO2022 format. */
 
 static void
-encode_coding_iso2022 (Lstream *encoding, CONST unsigned char *src,
+encode_coding_iso2022 (Lstream *encoding, const unsigned char *src,
                       unsigned_char_dynarr *dst, unsigned int n)
 {
   unsigned char charmask, c;
@@ -5179,7 +5179,7 @@ encode_coding_iso2022 (Lstream *encoding, CONST unsigned char *src,
   /* flags for handling composite chars.  We do a little switcharoo
      on the source while we're outputting the composite char. */
   unsigned int saved_n = 0;
-  CONST unsigned char *saved_src = NULL;
+  const unsigned char *saved_src = NULL;
   int in_composite = 0;
 #endif /* ENABLE_COMPOSITE_CHARS */
 
@@ -5470,7 +5470,7 @@ encode_coding_iso2022 (Lstream *encoding, CONST unsigned char *src,
    contain all 256 possible byte values and that are not to be
    interpreted as being in any particular decoding. */
 static void
-decode_coding_no_conversion (Lstream *decoding, CONST unsigned char *src,
+decode_coding_no_conversion (Lstream *decoding, const unsigned char *src,
                             unsigned_char_dynarr *dst, unsigned int n)
 {
   unsigned char c;
@@ -5495,7 +5495,7 @@ decode_coding_no_conversion (Lstream *decoding, CONST unsigned char *src,
 }
 
 static void
-encode_coding_no_conversion (Lstream *encoding, CONST unsigned char *src,
+encode_coding_no_conversion (Lstream *encoding, const unsigned char *src,
                             unsigned_char_dynarr *dst, unsigned int n)
 {
   unsigned char c;
index 01cf988..9d1beca 100644 (file)
@@ -135,7 +135,7 @@ EXFUN (Frunning_temacs_p, 0);
 /* signal a file error when errno contains a meaningful value. */
 
 DOESNT_RETURN
-report_file_error (CONST char *string, Lisp_Object data)
+report_file_error (const char *string, Lisp_Object data)
 {
   /* #### dmoore - This uses current_buffer, better make sure no one
      has GC'd the current buffer.  File handlers are giving me a headache
@@ -148,7 +148,7 @@ report_file_error (CONST char *string, Lisp_Object data)
 }
 
 void
-maybe_report_file_error (CONST char *string, Lisp_Object data,
+maybe_report_file_error (const char *string, Lisp_Object data,
                         Lisp_Object class, Error_behavior errb)
 {
   /* Optimization: */
@@ -164,14 +164,14 @@ maybe_report_file_error (CONST char *string, Lisp_Object data,
 /* signal a file error when errno does not contain a meaningful value. */
 
 DOESNT_RETURN
-signal_file_error (CONST char *string, Lisp_Object data)
+signal_file_error (const char *string, Lisp_Object data)
 {
   signal_error (Qfile_error,
                 list2 (build_translated_string (string), data));
 }
 
 void
-maybe_signal_file_error (CONST char *string, Lisp_Object data,
+maybe_signal_file_error (const char *string, Lisp_Object data,
                         Lisp_Object class, Error_behavior errb)
 {
   /* Optimization: */
@@ -183,7 +183,7 @@ maybe_signal_file_error (CONST char *string, Lisp_Object data,
 }
 
 DOESNT_RETURN
-signal_double_file_error (CONST char *string1, CONST char *string2,
+signal_double_file_error (const char *string1, const char *string2,
                          Lisp_Object data)
 {
   signal_error (Qfile_error,
@@ -193,7 +193,7 @@ signal_double_file_error (CONST char *string1, CONST char *string2,
 }
 
 void
-maybe_signal_double_file_error (CONST char *string1, CONST char *string2,
+maybe_signal_double_file_error (const char *string1, const char *string2,
                                Lisp_Object data, Lisp_Object class,
                                Error_behavior errb)
 {
@@ -208,7 +208,7 @@ maybe_signal_double_file_error (CONST char *string1, CONST char *string2,
 }
 
 DOESNT_RETURN
-signal_double_file_error_2 (CONST char *string1, CONST char *string2,
+signal_double_file_error_2 (const char *string1, const char *string2,
                            Lisp_Object data1, Lisp_Object data2)
 {
   signal_error (Qfile_error,
@@ -218,7 +218,7 @@ signal_double_file_error_2 (CONST char *string1, CONST char *string2,
 }
 
 void
-maybe_signal_double_file_error_2 (CONST char *string1, CONST char *string2,
+maybe_signal_double_file_error_2 (const char *string1, const char *string2,
                                  Lisp_Object data1, Lisp_Object data2,
                                  Lisp_Object class, Error_behavior errb)
 {
@@ -289,7 +289,7 @@ read_allowing_quit (int fildes, void *buf, size_t size)
 }
 
 ssize_t
-write_allowing_quit (int fildes, CONST void *buf, size_t size)
+write_allowing_quit (int fildes, const void *buf, size_t size)
 {
   QUIT;
   return sys_write_1 (fildes, buf, size, 1);
@@ -581,7 +581,7 @@ except for (file-name-as-directory \"\") => \"./\".
  */
 
 static int
-directory_file_name (CONST char *src, char *dst)
+directory_file_name (const char *src, char *dst)
 {
   long slen = strlen (src);
   /* Process as Unix format: just remove any final slash.
@@ -723,7 +723,7 @@ be an absolute file name.
 
       QUIT;
 
-      if (stat ((CONST char *) data, &ignored) < 0)
+      if (stat ((const char *) data, &ignored) < 0)
        {
          /* We want to return only if errno is ENOENT.  */
          if (errno == ENOENT)
@@ -1611,7 +1611,7 @@ expand_and_dir_to_file (Lisp_Object filename, Lisp_Object defdir)
    If the file does not exist, STATPTR->st_mode is set to 0.  */
 
 static void
-barf_or_query_if_file_exists (Lisp_Object absname, CONST char *querystring,
+barf_or_query_if_file_exists (Lisp_Object absname, const char *querystring,
                              int interactive, struct stat *statptr)
 {
   /* This function can GC.  GC checked 1997.04.06. */
@@ -1629,7 +1629,7 @@ barf_or_query_if_file_exists (Lisp_Object absname, CONST char *querystring,
          struct gcpro gcpro1;
 
          prompt = emacs_doprnt_string_c
-           ((CONST Bufbyte *) GETTEXT ("File %s already exists; %s anyway? "),
+           ((const Bufbyte *) GETTEXT ("File %s already exists; %s anyway? "),
             Qnil, -1, XSTRING_DATA (absname),
             GETTEXT (querystring));
 
@@ -1721,7 +1721,7 @@ A prefix arg makes KEEP-TIME non-nil.
       || INTP (ok_if_already_exists))
     barf_or_query_if_file_exists (newname, "copy to it",
                                  INTP (ok_if_already_exists), &out_st);
-  else if (stat ((CONST char *) XSTRING_DATA (newname), &out_st) < 0)
+  else if (stat ((const char *) XSTRING_DATA (newname), &out_st) < 0)
     out_st.st_mode = 0;
 
   ifd = interruptible_open ((char *) XSTRING_DATA (filename), O_RDONLY | OPEN_BINARY, 0);
@@ -1794,7 +1794,7 @@ A prefix arg makes KEEP-TIME non-nil.
                            mtime))
          report_file_error ("I/O error", list1 (newname));
       }
-      chmod ((CONST char *) XSTRING_DATA (newname),
+      chmod ((const char *) XSTRING_DATA (newname),
             st.st_mode & 07777);
     }
 
@@ -2186,7 +2186,7 @@ check_executable (char *filename)
 /* Return nonzero if file FILENAME exists and can be written.  */
 
 static int
-check_writable (CONST char *filename)
+check_writable (const char *filename)
 {
 #ifdef HAVE_EACCESS
   return (eaccess (filename, 2) >= 0);
@@ -3954,10 +3954,10 @@ Non-nil second argument means save only current buffer.
              set_buffer_internal (b);
              if (!auto_saved && NILP (no_message))
                {
-                 static CONST unsigned char *msg
-                   = (CONST unsigned char *) "Auto-saving...";
+                 static const unsigned char *msg
+                   = (const unsigned char *) "Auto-saving...";
                  echo_area_message (selected_frame (), msg, Qnil,
-                                    0, strlen ((CONST char *) msg),
+                                    0, strlen ((const char *) msg),
                                     Qauto_saving);
                }
 
@@ -3983,7 +3983,7 @@ Non-nil second argument means save only current buffer.
                 auto save name.  */
              if (listdesc >= 0)
                {
-                 CONST Extbyte *auto_save_file_name_ext;
+                 const Extbyte *auto_save_file_name_ext;
                  Extcount auto_save_file_name_ext_len;
 
                  TO_EXTERNAL_FORMAT (LISP_STRING, b->auto_save_file_name,
@@ -3992,7 +3992,7 @@ Non-nil second argument means save only current buffer.
                                      Qfile_name);
                  if (!NILP (b->filename))
                    {
-                     CONST Extbyte *filename_ext;
+                     const Extbyte *filename_ext;
                      Extcount filename_ext_len;
 
                      TO_EXTERNAL_FORMAT (LISP_STRING, b->filename,
@@ -4061,10 +4061,10 @@ Non-nil second argument means save only current buffer.
   if (auto_saved && NILP (no_message)
       && NILP (clear_echo_area (selected_frame (), Qauto_saving, 0)))
     {
-      static CONST unsigned char *msg
-        = (CONST unsigned char *)"Auto-saving...done";
+      static const unsigned char *msg
+        = (const unsigned char *)"Auto-saving...done";
       echo_area_message (selected_frame (), msg, Qnil, 0,
-                        strlen ((CONST char *) msg), Qauto_saving);
+                        strlen ((const char *) msg), Qauto_saving);
     }
 
   Vquit_flag = oquit;
index d27de65..a6711fc 100644 (file)
@@ -79,7 +79,7 @@ static int in_float;
 /* If an argument is out of range for a mathematical function,
    here is the actual argument value to use in the error message.  */
 static Lisp_Object float_error_arg, float_error_arg2;
-static CONST char *float_error_fn_name;
+static const char *float_error_fn_name;
 
 /* Evaluate the floating point expression D, recording NUM
    as the original argument for error messages.
@@ -126,7 +126,7 @@ static CONST char *float_error_fn_name;
 /* Convert float to Lisp Integer if it fits, else signal a range
    error using the given arguments.  */
 static Lisp_Object
-float_to_int (double x, CONST char *name, Lisp_Object num, Lisp_Object num2)
+float_to_int (double x, const char *name, Lisp_Object num, Lisp_Object num2)
 {
   if (x >= ((EMACS_INT) 1 << (VALBITS-1))
       || x <= - ((EMACS_INT) 1 << (VALBITS-1)) - (EMACS_INT) 1)
index 8a832a2..d5f5ae3 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -111,17 +111,25 @@ bit_vector_hash (Lisp_Object obj, int depth)
                             sizeof (long)));
 }
 
+static size_t
+size_bit_vector (const void *lheader)
+{
+  Lisp_Bit_Vector *v = (Lisp_Bit_Vector *) lheader;
+  return offsetof (Lisp_Bit_Vector,
+                  bits[BIT_VECTOR_LONG_STORAGE (bit_vector_length (v))]);
+}
+
 static const struct lrecord_description bit_vector_description[] = {
   { XD_LISP_OBJECT, offsetof (Lisp_Bit_Vector, next) },
   { XD_END }
 };
 
 
-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("bit-vector", bit_vector,
-                                    mark_bit_vector, print_bit_vector, 0,
-                                    bit_vector_equal, bit_vector_hash,
-                                    bit_vector_description,
-                                    Lisp_Bit_Vector);
+DEFINE_BASIC_LRECORD_SEQUENCE_IMPLEMENTATION ("bit-vector", bit_vector,
+                                             mark_bit_vector, print_bit_vector, 0,
+                                             bit_vector_equal, bit_vector_hash,
+                                             bit_vector_description, size_bit_vector,
+                                             Lisp_Bit_Vector);
 \f
 DEFUN ("identity", Fidentity, 1, 1, 0, /*
 Return the argument unchanged.
@@ -196,7 +204,7 @@ length_with_bytecode_hack (Lisp_Object seq)
 #endif /* LOSING_BYTECODE */
 
 void
-check_losing_bytecode (CONST char *function, Lisp_Object seq)
+check_losing_bytecode (const char *function, Lisp_Object seq)
 {
   if (COMPILED_FUNCTIONP (seq))
     error_with_frob
@@ -913,85 +921,78 @@ Relevant parts of the string-extent-data are copied in the new string.
 }
 
 DEFUN ("subseq", Fsubseq, 2, 3, 0, /*
-Return a subsequence of SEQ, starting at index FROM and ending before TO.
-TO may be nil or omitted; then the subsequence runs to the end of SEQ.
-If FROM or TO is negative, it counts from the end.
-The resulting subsequence is always the same type as the original
- sequence.
-If SEQ is a string, relevant parts of the string-extent-data are copied
- to the new string.
+Return the subsequence of SEQUENCE starting at START and ending before END.
+END may be omitted; then the subsequence runs to the end of SEQUENCE.
+If START or END is negative, it counts from the end.
+The returned subsequence is always of the same type as SEQUENCE.
+If SEQUENCE is a string, relevant parts of the string-extent-data
+are copied to the new string.
 */
-       (seq, from, to))
+       (sequence, start, end))
 {
-  EMACS_INT len, f, t;
-
-  if (STRINGP (seq))
-    return Fsubstring (seq, from, to);
+  EMACS_INT len, s, e;
 
-  if (!LISTP (seq) && !VECTORP (seq) && !BIT_VECTORP (seq))
-    {
-      check_losing_bytecode ("subseq", seq);
-      seq = wrong_type_argument (Qsequencep, seq);
-    }
+  if (STRINGP (sequence))
+    return Fsubstring (sequence, start, end);
 
-  len = XINT (Flength (seq));
+  len = XINT (Flength (sequence));
 
-  CHECK_INT (from);
-  f = XINT (from);
-  if (f < 0)
-    f = len + f;
+  CHECK_INT (start);
+  s = XINT (start);
+  if (s < 0)
+    s = len + s;
 
-  if (NILP (to))
-    t = len;
+  if (NILP (end))
+    e = len;
   else
     {
-      CHECK_INT (to);
-      t = XINT (to);
-      if (t < 0)
-       t = len + t;
+      CHECK_INT (end);
+      e = XINT (end);
+      if (e < 0)
+       e = len + e;
     }
 
-  if (!(0 <= f && f <= t && t <= len))
-    args_out_of_range_3 (seq, make_int (f), make_int (t));
+  if (!(0 <= s && s <= e && e <= len))
+    args_out_of_range_3 (sequence, make_int (s), make_int (e));
 
-  if (VECTORP (seq))
+  if (VECTORP (sequence))
     {
-      Lisp_Object result = make_vector (t - f, Qnil);
+      Lisp_Object result = make_vector (e - s, Qnil);
       EMACS_INT i;
-      Lisp_Object *in_elts  = XVECTOR_DATA (seq);
+      Lisp_Object *in_elts  = XVECTOR_DATA (sequence);
       Lisp_Object *out_elts = XVECTOR_DATA (result);
 
-      for (i = f; i < t; i++)
-       out_elts[i - f] = in_elts[i];
+      for (i = s; i < e; i++)
+       out_elts[i - s] = in_elts[i];
       return result;
     }
-
-  if (LISTP (seq))
+  else if (LISTP (sequence))
     {
       Lisp_Object result = Qnil;
       EMACS_INT i;
 
-      seq = Fnthcdr (make_int (f), seq);
+      sequence = Fnthcdr (make_int (s), sequence);
 
-      for (i = f; i < t; i++)
+      for (i = s; i < e; i++)
        {
-         result = Fcons (Fcar (seq), result);
-         seq = Fcdr (seq);
+         result = Fcons (Fcar (sequence), result);
+         sequence = Fcdr (sequence);
        }
 
       return Fnreverse (result);
     }
+  else if (BIT_VECTORP (sequence))
+    {
+      Lisp_Object result = make_bit_vector (e - s, Qzero);
+      EMACS_INT i;
 
-  /* bit vector */
-  {
-    Lisp_Object result = make_bit_vector (t - f, Qzero);
-    EMACS_INT i;
-
-    for (i = f; i < t; i++)
-      set_bit_vector_bit (XBIT_VECTOR (result), i - f,
-                         bit_vector_bit (XBIT_VECTOR (seq), i));
-    return result;
-  }
+      for (i = s; i < e; i++)
+       set_bit_vector_bit (XBIT_VECTOR (result), i - s,
+                           bit_vector_bit (XBIT_VECTOR (sequence), i));
+      return result;
+    }
+  else
+    abort (); /* unreachable, since Flength (sequence) did not get an error */
 }
 
 \f
@@ -2368,8 +2369,7 @@ This means that it's a malformed or circular plist.
 DEFUN ("valid-plist-p", Fvalid_plist_p, 1, 1, 0, /*
 Given a plist, return non-nil if its format is correct.
 If it returns nil, `check-valid-plist' will signal an error when given
-the plist; that means it's a malformed or circular plist or has non-symbols
-as keywords.
+the plist; that means it's a malformed or circular plist.
 */
        (plist))
 {
@@ -2446,9 +2446,7 @@ properties on the list.
        (lax_plist, prop, default_))
 {
   Lisp_Object val = external_plist_get (&lax_plist, prop, 1, ERROR_ME);
-  if (UNBOUNDP (val))
-    return default_;
-  return val;
+  return UNBOUNDP (val) ? default_ : val;
 }
 
 DEFUN ("lax-plist-put", Flax_plist_put, 3, 3, 0, /*
@@ -2568,222 +2566,87 @@ See also `alist-to-plist'.
   return head;
 }
 
-/* Symbol plists are directly accessible, so we need to protect against
-   invalid property list structure */
-
-static Lisp_Object
-symbol_getprop (Lisp_Object sym, Lisp_Object propname, Lisp_Object default_)
-{
-  Lisp_Object val = external_plist_get (&XSYMBOL (sym)->plist, propname,
-                                       0, ERROR_ME);
-  return UNBOUNDP (val) ? default_ : val;
-}
-
-static void
-symbol_putprop (Lisp_Object sym, Lisp_Object propname, Lisp_Object value)
-{
-  external_plist_put (&XSYMBOL (sym)->plist, propname, value, 0, ERROR_ME);
-}
-
-static int
-symbol_remprop (Lisp_Object symbol, Lisp_Object propname)
-{
-  return external_remprop (&XSYMBOL (symbol)->plist, propname, 0, ERROR_ME);
-}
-
-/* We store the string's extent info as the first element of the string's
-   property list; and the string's MODIFF as the first or second element
-   of the string's property list (depending on whether the extent info
-   is present), but only if the string has been modified.  This is ugly
-   but it reduces the memory allocated for the string in the vast
-   majority of cases, where the string is never modified and has no
-   extent info. */
-
-
-static Lisp_Object *
-string_plist_ptr (Lisp_String *s)
-{
-  Lisp_Object *ptr = &s->plist;
-
-  if (CONSP (*ptr) && EXTENT_INFOP (XCAR (*ptr)))
-    ptr = &XCDR (*ptr);
-  if (CONSP (*ptr) && INTP (XCAR (*ptr)))
-    ptr = &XCDR (*ptr);
-  return ptr;
-}
-
-static Lisp_Object
-string_getprop (Lisp_String *s, Lisp_Object property,
-               Lisp_Object default_)
-{
-  Lisp_Object val = external_plist_get (string_plist_ptr (s), property, 0,
-                                       ERROR_ME);
-  return UNBOUNDP (val) ? default_ : val;
-}
-
-static void
-string_putprop (Lisp_String *s, Lisp_Object property,
-               Lisp_Object value)
-{
-  external_plist_put (string_plist_ptr (s), property, value, 0, ERROR_ME);
-}
-
-static int
-string_remprop (Lisp_String *s, Lisp_Object property)
-{
-  return external_remprop (string_plist_ptr (s), property, 0, ERROR_ME);
-}
-
-static Lisp_Object
-string_plist (Lisp_String *s)
-{
-  return *string_plist_ptr (s);
-}
-
 DEFUN ("get", Fget, 2, 3, 0, /*
-Return the value of OBJECT's PROPNAME property.
-This is the last VALUE stored with `(put OBJECT PROPNAME VALUE)'.
+Return the value of OBJECT's PROPERTY property.
+This is the last VALUE stored with `(put OBJECT PROPERTY VALUE)'.
 If there is no such property, return optional third arg DEFAULT
-\(which defaults to `nil').  OBJECT can be a symbol, face, extent,
-or string.  See also `put', `remprop', and `object-plist'.
+\(which defaults to `nil').  OBJECT can be a symbol, string, extent,
+face, or glyph.  See also `put', `remprop', and `object-plist'.
 */
-       (object, propname, default_))
+       (object, property, default_))
 {
   /* Various places in emacs call Fget() and expect it not to quit,
      so don't quit. */
+  Lisp_Object val;
 
-  /* It's easiest to treat symbols specially because they may not
-     be an lrecord */
-  if (SYMBOLP (object))
-    return symbol_getprop (object, propname, default_);
-  else if (STRINGP (object))
-    return string_getprop (XSTRING (object), propname, default_);
-  else if (LRECORDP (object))
-    {
-      CONST struct lrecord_implementation *imp
-       = XRECORD_LHEADER_IMPLEMENTATION (object);
-      if (!imp->getprop)
-       goto noprops;
-
-      {
-       Lisp_Object val = (imp->getprop) (object, propname);
-       if (UNBOUNDP (val))
-         val = default_;
-       return val;
-      }
-    }
+  if (LRECORDP (object) && XRECORD_LHEADER_IMPLEMENTATION (object)->getprop)
+    val = XRECORD_LHEADER_IMPLEMENTATION (object)->getprop (object, property);
   else
-    {
-    noprops:
-      signal_simple_error ("Object type has no properties", object);
-      return Qnil;             /* Not reached */
-    }
+    signal_simple_error ("Object type has no properties", object);
+
+  return UNBOUNDP (val) ? default_ : val;
 }
 
 DEFUN ("put", Fput, 3, 3, 0, /*
-Store OBJECT's PROPNAME property with value VALUE.
-It can be retrieved with `(get OBJECT PROPNAME)'.  OBJECT can be a
-symbol, face, extent, or string.
-
+Set OBJECT's PROPERTY to VALUE.
+It can be subsequently retrieved with `(get OBJECT PROPERTY)'.
+OBJECT can be a symbol, face, extent, or string.
 For a string, no properties currently have predefined meanings.
 For the predefined properties for extents, see `set-extent-property'.
 For the predefined properties for faces, see `set-face-property'.
-
 See also `get', `remprop', and `object-plist'.
 */
-       (object, propname, value))
+       (object, property, value))
 {
-  CHECK_SYMBOL (propname);
   CHECK_LISP_WRITEABLE (object);
 
-  if (SYMBOLP (object))
-    symbol_putprop (object, propname, value);
-  else if (STRINGP (object))
-    string_putprop (XSTRING (object), propname, value);
-  else if (LRECORDP (object))
+  if (LRECORDP (object) && XRECORD_LHEADER_IMPLEMENTATION (object)->putprop)
     {
-      CONST struct lrecord_implementation
-       *imp = XRECORD_LHEADER_IMPLEMENTATION (object);
-      if (imp->putprop)
-       {
-         if (! (imp->putprop) (object, propname, value))
-           signal_simple_error ("Can't set property on object", propname);
-       }
-      else
-       goto noprops;
+      if (! XRECORD_LHEADER_IMPLEMENTATION (object)->putprop
+         (object, property, value))
+       signal_simple_error ("Can't set property on object", property);
     }
   else
-    {
-    noprops:
-      signal_simple_error ("Object type has no settable properties", object);
-    }
+    signal_simple_error ("Object type has no settable properties", object);
 
   return value;
 }
 
 DEFUN ("remprop", Fremprop, 2, 2, 0, /*
-Remove from OBJECT's property list the property PROPNAME and its
-value.  OBJECT can be a symbol, face, extent, or string.  Returns
-non-nil if the property list was actually changed (i.e. if PROPNAME
-was present in the property list).  See also `get', `put', and
-`object-plist'.
+Remove, from OBJECT's property list, PROPERTY and its corresponding value.
+OBJECT can be a symbol, string, extent, face, or glyph.  Return non-nil
+if the property list was actually modified (i.e. if PROPERTY was present
+in the property list).  See also `get', `put', and `object-plist'.
 */
-       (object, propname))
+       (object, property))
 {
-  int retval = 0;
+  int ret = 0;
 
-  CHECK_SYMBOL (propname);
   CHECK_LISP_WRITEABLE (object);
 
-  if (SYMBOLP (object))
-    retval = symbol_remprop (object, propname);
-  else if (STRINGP (object))
-    retval = string_remprop (XSTRING (object), propname);
-  else if (LRECORDP (object))
+  if (LRECORDP (object) && XRECORD_LHEADER_IMPLEMENTATION (object)->remprop)
     {
-      CONST struct lrecord_implementation
-       *imp = XRECORD_LHEADER_IMPLEMENTATION (object);
-      if (imp->remprop)
-       {
-         retval = (imp->remprop) (object, propname);
-         if (retval == -1)
-           signal_simple_error ("Can't remove property from object",
-                                propname);
-       }
-      else
-       goto noprops;
+      ret = XRECORD_LHEADER_IMPLEMENTATION (object)->remprop (object, property);
+      if (ret == -1)
+       signal_simple_error ("Can't remove property from object", property);
     }
   else
-    {
-    noprops:
-      signal_simple_error ("Object type has no removable properties", object);
-    }
+    signal_simple_error ("Object type has no removable properties", object);
 
-  return retval ? Qt : Qnil;
+  return ret ? Qt : Qnil;
 }
 
 DEFUN ("object-plist", Fobject_plist, 1, 1, 0, /*
-Return a property list of OBJECT's props.
-For a symbol this is equivalent to `symbol-plist'.
-Do not modify the property list directly; this may or may not have
-the desired effects. (In particular, for a property with a special
-interpretation, this will probably have no effect at all.)
+Return a property list of OBJECT's properties.
+For a symbol, this is equivalent to `symbol-plist'.
+OBJECT can be a symbol, string, extent, face, or glyph.
+Do not modify the returned property list directly;
+this may or may not have the desired effects.  Use `put' instead.
 */
        (object))
 {
-  if (SYMBOLP (object))
-    return Fsymbol_plist (object);
-  else if (STRINGP (object))
-    return string_plist (XSTRING (object));
-  else if (LRECORDP (object))
-    {
-      CONST struct lrecord_implementation
-       *imp = XRECORD_LHEADER_IMPLEMENTATION (object);
-      if (imp->plist)
-       return (imp->plist) (object);
-      else
-       signal_simple_error ("Object type has no properties", object);
-    }
+  if (LRECORDP (object) && XRECORD_LHEADER_IMPLEMENTATION (object)->plist)
+    return XRECORD_LHEADER_IMPLEMENTATION (object)->plist (object);
   else
     signal_simple_error ("Object type has no properties", object);
 
@@ -2804,7 +2667,7 @@ internal_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
     return 0;
   if (LRECORDP (obj1))
     {
-      CONST struct lrecord_implementation
+      const struct lrecord_implementation
        *imp1 = XRECORD_LHEADER_IMPLEMENTATION (obj1),
        *imp2 = XRECORD_LHEADER_IMPLEMENTATION (obj2);
 
@@ -3168,7 +3031,7 @@ mapcar1 (size_t leni, Lisp_Object *vals,
        }
     }
   else
-    abort(); /* cannot get here since Flength(sequence) did not get an error */
+    abort (); /* unreachable, since Flength (sequence) did not get an error */
 
   if (vals)
     UNGCPRO;
@@ -3185,16 +3048,13 @@ SEQUENCE may be a list, a vector, a bit vector, or a string.
   size_t len = XINT (Flength (sequence));
   Lisp_Object *args;
   int i;
-  struct gcpro gcpro1;
   int nargs = len + len - 1;
 
-  if (nargs < 0) return build_string ("");
+  if (len == 0) return build_string ("");
 
   args = alloca_array (Lisp_Object, nargs);
 
-  GCPRO1 (separator);
   mapcar1 (len, args, function, sequence);
-  UNGCPRO;
 
   for (i = len - 1; i >= 0; i--)
     args[i + i] = args[i];
index d86dc40..ff640f2 100644 (file)
@@ -187,8 +187,8 @@ mswindows_init_frame_1 (struct frame *f, Lisp_Object props)
                         XEMACS_CLASS,
                         STRINGP(f->name) ? XSTRING_DATA(f->name) :
                         (STRINGP(name) ? 
-                         (CONST Extbyte*)XSTRING_DATA(name) : 
-                         (CONST Extbyte*)XEMACS_CLASS),
+                         (const Extbyte*)XSTRING_DATA(name) : 
+                         (const Extbyte*)XEMACS_CLASS),
                         style,
                         rect_default.left, rect_default.top,
                         rect_default.width, rect_default.height,
@@ -709,7 +709,15 @@ mswindows_frame_size_fixed_p (struct frame *f)
 /*-----                    PRINTER FRAME                          -----*/
 /*---------------------------------------------------------------------*/
 
-EXFUN (Fset_frame_properties, 2);
+void
+msprinter_start_page (struct frame *f)
+{
+  if (!FRAME_MSPRINTER_PAGE_STARTED (f))
+    {
+      FRAME_MSPRINTER_PAGE_STARTED (f) = 1;
+      StartPage (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
+    }
+}
 
 static void
 error_frame_unsizable (struct frame *f)
@@ -730,9 +738,6 @@ maybe_error_if_job_active (struct frame *f)
 static void
 msprinter_init_frame_1 (struct frame *f, Lisp_Object props)
 {
-  HDC hdc = DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
-  Lisp_Object frame_obj = Qnil;
-
   /* Make sure this is the only frame on device. Windows printer can
      handle only one job at a time. */
   if (!NILP (DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f)))))
@@ -894,10 +899,13 @@ msprinter_delete_frame (struct frame *f)
 {
   if (f->frame_data)
     {
+      HDC hdc = DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
+      if (FRAME_MSPRINTER_PAGE_STARTED (f))
+       EndPage (hdc);
       if (FRAME_MSPRINTER_JOB_STARTED (f))
-       EndDoc (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
+       EndDoc (hdc);
       if (FRAME_MSPRINTER_CDC(f))
-       DeleteDC(FRAME_MSPRINTER_CDC(f));
+       DeleteDC (FRAME_MSPRINTER_CDC(f));
       xfree (f->frame_data);
     }
 
@@ -951,7 +959,6 @@ msprinter_frame_properties (struct frame *f)
 static void
 msprinter_set_frame_properties (struct frame *f, Lisp_Object plist)
 {
-  BOOL size_changed_p = FALSE;
   Lisp_Object tail;
 
   /* Extract the properties from plist */
@@ -1038,6 +1045,18 @@ msprinter_set_frame_size (struct frame *f, int width, int height)
   error_frame_unsizable (f);
 }
 
+static void
+msprinter_eject_page (struct frame *f)
+{
+  /* #### Should we eject empty pages? */
+  if (FRAME_MSPRINTER_PAGE_STARTED (f))
+    {
+      FRAME_MSPRINTER_PAGE_STARTED (f) = 0;
+      EndPage (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
+    }
+}
+
+\f
 void
 console_type_create_frame_mswindows (void)
 {
@@ -1083,6 +1102,7 @@ console_type_create_frame_mswindows (void)
   CONSOLE_HAS_METHOD (msprinter, frame_properties);
   CONSOLE_HAS_METHOD (msprinter, set_frame_properties);
   CONSOLE_HAS_METHOD (msprinter, set_frame_size);
+  CONSOLE_HAS_METHOD (msprinter, eject_page);
 }
 
 void
index 9a25460..c81b27e 100644 (file)
@@ -659,7 +659,7 @@ x_set_frame_text_value (struct frame *f, Bufbyte *value,
   for (ptr = value; *ptr; ptr++)
     if (!BYTE_ASCII_P (*ptr))
       {
-        CONST char * tmp;
+        const char * tmp;
         encoding = DEVICE_XATOM_COMPOUND_TEXT (XDEVICE (FRAME_DEVICE (f)));
        TO_EXTERNAL_FORMAT (C_STRING, value,
                            C_STRING_ALLOCA, tmp,
@@ -760,7 +760,7 @@ x_set_frame_properties (struct frame *f, Lisp_Object plist)
 
       if (STRINGP (prop))
        {
-         CONST char *extprop;
+         const char *extprop;
 
          if (XSTRING_LENGTH (prop) == 0)
            continue;
@@ -770,7 +770,7 @@ x_set_frame_properties (struct frame *f, Lisp_Object plist)
                              Qctext);
          if (STRINGP (val))
            {
-             CONST Extbyte *extval;
+             const Extbyte *extval;
              Extcount extvallen;
 
              TO_EXTERNAL_FORMAT (LISP_STRING, val,
@@ -1191,7 +1191,7 @@ WARNING: can only handle plain/text and file: transfers!
                  Ctext=NULL;
                  break;
                }
-             strcpy (Ctext+pos, (CONST char *)XSTRING_DATA (XCAR (item)));
+             strcpy (Ctext+pos, (const char *)XSTRING_DATA (XCAR (item)));
              pos += XSTRING_LENGTH (XCAR (item)) + 1;
              item = XCDR (item);
            }
@@ -1367,7 +1367,7 @@ The type defaults to DndText (4).
                }
              len = XSTRING_LENGTH (XCAR (run)) + 1;
              dnd_data = (char *) xrealloc (dnd_data, dnd_len + len);
-             strcpy (dnd_data + dnd_len - 1, (CONST char *)XSTRING_DATA (XCAR (run)));
+             strcpy (dnd_data + dnd_len - 1, (const char *)XSTRING_DATA (XCAR (run)));
              dnd_len += len;
              run = XCDR (run);
            }
@@ -1861,7 +1861,7 @@ x_create_widgets (struct frame *f, Lisp_Object lisp_window_id,
 #ifdef EXTERNAL_WIDGET
   Window window_id = 0;
 #endif
-  CONST char *name;
+  const char *name;
   Arg al [25];
   int ac = 0;
   Widget text, container, shell;
index a17ea93..3c10854 100644 (file)
@@ -121,8 +121,6 @@ static struct display_line title_string_display_line;
    the dynamic allocation time adds up. */
 static Emchar_dynarr *title_string_emchar_dynarr;
 
-EXFUN (Fset_frame_properties, 2);
-
 \f
 static Lisp_Object
 mark_frame (Lisp_Object obj)
@@ -216,6 +214,8 @@ allocate_frame_core (Lisp_Object device)
   f->subwindow_exposures = 0;
   f->subwindow_exposures_tail = 0;
 
+  FRAME_SET_PAGENUMBER (f, 1);
+
   /* Choose a buffer for the frame's root window.  */
   XWINDOW (root_window)->buffer = Qt;
   {
@@ -380,7 +380,7 @@ See `set-frame-properties', `default-x-frame-plist', and
   else
     name = build_string ("emacs");
 
-  if (!NILP (Fstring_match (make_string ((CONST Bufbyte *) "\\.", 2), name,
+  if (!NILP (Fstring_match (make_string ((const Bufbyte *) "\\.", 2), name,
                            Qnil, Qnil)))
     signal_simple_error (". not allowed in frame names", name);
 
@@ -2089,6 +2089,31 @@ doesn't support multiple overlapping frames, this function does nothing.
 
 /* Ben thinks there is no need for `redirect-frame-focus' or `frame-focus',
    crockish FSFmacs functions.  See summary on focus in event-stream.c. */
+\f
+DEFUN ("print-job-page-number", Fprint_job_page_number, 1, 1, 0, /*
+Return current page number for the print job FRAME.
+*/
+       (frame))
+{
+  CHECK_PRINTER_FRAME (frame);
+  return make_int (FRAME_PAGENUMBER (XFRAME (frame)));
+}
+
+DEFUN ("print-job-eject-page", Fprint_job_eject_page, 1, 1, 0, /*
+Eject page in the print job FRAME.
+*/
+       (frame))
+{
+  struct frame *f;
+
+  CHECK_PRINTER_FRAME (frame);
+  f = XFRAME (frame);
+  FRAMEMETH (f, eject_page, (f));
+  FRAME_SET_PAGENUMBER (f, 1 + FRAME_PAGENUMBER (f));
+  f->clear = 1;
+
+  return Qnil;
+}
 
 \f
 /***************************************************************************/
@@ -2851,8 +2876,6 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth)
     - FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f)
     - 2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH (f);
 
-  new_pixwidth += 2 * f->internal_border_width;
-
   /* Adjust the width for the end glyph which may be a different width
      than the default character width. */
   {
@@ -3232,6 +3255,8 @@ syms_of_frame (void)
   DEFSUBR (Fset_frame_size);
   DEFSUBR (Fset_frame_position);
   DEFSUBR (Fset_frame_pointer);
+  DEFSUBR (Fprint_job_page_number);
+  DEFSUBR (Fprint_job_eject_page);
 }
 
 void
index 93669da..a811476 100644 (file)
@@ -78,6 +78,9 @@ struct frame
   int order_count;
 #endif
 
+  /* Current page number for a printer frame. */
+  int page_number;
+
   /* Width of the internal border.  This is a line of background color
      just inside the window's border.  It is normally only non-zero on
      X frames, but we put it here to avoid introducing window system
@@ -213,6 +216,7 @@ EXFUN (Fraise_frame, 1);
 EXFUN (Fselect_frame, 1);
 EXFUN (Fset_frame_pointer, 2);
 EXFUN (Fset_frame_position, 3);
+EXFUN (Fset_frame_properties, 2);
 EXFUN (Fset_frame_size, 4);
 
 extern Lisp_Object Qbackground_toolbar_color, Qbell_volume, Qborder_color;
@@ -284,6 +288,40 @@ error_check_frame_type (struct frame * f, Lisp_Object sym)
        (type##_console_methods->predicate_symbol, x);  \
   } while (0)
 
+#define FRAME_DISPLAY_P(frm)                           \
+  (DEVICE_DISPLAY_P (XDEVICE (FRAME_DEVICE (frm))))
+
+#define CHECK_DISPLAY_FRAME(frm)                       \
+  do {                                                 \
+    CHECK_FRAME (frm);                                 \
+    CHECK_LIVE_FRAME (frm);                            \
+    CHECK_DISPLAY_DEVICE (FRAME_DEVICE (XFRAME (frm)));        \
+  } while (0)
+
+#define CONCHECK_DISPLAY_FRAME(frm)                    \
+  do {                                                 \
+    CONCHECK_FRAME (frm);                              \
+    CONCHECK_LIVE_FRAME (frm);                         \
+    CONCHECK_DISPLAY_DEVICE (FRAME_DEVICE (XFRAME (frm))); \
+  } while (0)
+
+#define FRAME_PRINTER_P(frm)                           \
+  (DEVICE_PRINTER_P (XDEVICE (FRAME_DEVICE (frm))))
+
+#define CHECK_PRINTER_FRAME(frm)                       \
+  do {                                                 \
+    CHECK_FRAME (frm);                                 \
+    CHECK_LIVE_FRAME (frm);                            \
+    CHECK_PRINTER_DEVICE (FRAME_DEVICE (XFRAME (frm)));        \
+  } while (0)
+
+#define CONCHECK_PRINTER_FRAME(frm)                    \
+  do {                                                 \
+    CONCHECK_FRAME (frm);                              \
+    CONCHECK_LIVE_FRAME (frm);                         \
+    CONCHECK_PRINTER_DEVICE (FRAME_DEVICE (XFRAME (frm))); \
+  } while (0)
+
 /* #### These should be in the frame-*.h files but there are
    too many places where the abstraction is broken.  Need to
    fix. */
@@ -332,7 +370,7 @@ extern int frame_changed;
 
 #define MARK_FRAME_SUBWINDOWS_CHANGED(f) do {          \
   struct frame *mfgc_f = (f);                          \
-  mfgc_f->subwindows_changed = 1;                              \
+  mfgc_f->subwindows_changed = 1;                      \
   mfgc_f->modiff++;                                    \
   if (!NILP (mfgc_f->device))                          \
     {                                                  \
@@ -340,12 +378,12 @@ extern int frame_changed;
       MARK_DEVICE_SUBWINDOWS_CHANGED (mfgc_d);         \
     }                                                  \
   else                                                 \
-    subwindows_changed = 1;                                    \
+    subwindows_changed = 1;                            \
 } while (0)
 
 #define MARK_FRAME_SUBWINDOWS_STATE_CHANGED(f) do {    \
   struct frame *mfgc_f = (f);                          \
-  mfgc_f->subwindows_state_changed = 1;                \
+  mfgc_f->subwindows_state_changed = 1;                        \
   mfgc_f->modiff++;                                    \
   if (!NILP (mfgc_f->device))                          \
     {                                                  \
@@ -369,14 +407,14 @@ extern int frame_changed;
     toolbar_changed = 1;                               \
 } while (0)
 
-#define MARK_FRAME_GUTTERS_CHANGED(f) do {     \
+#define MARK_FRAME_GUTTERS_CHANGED(f) do {             \
   struct frame *mftc_f = (f);                          \
   mftc_f->gutter_changed = 1;                          \
   mftc_f->modiff++;                                    \
   if (!NILP (mftc_f->device))                          \
     {                                                  \
       struct device *mftc_d = XDEVICE (mftc_f->device);        \
-      MARK_DEVICE_GUTTERS_CHANGED (mftc_d);    \
+      MARK_DEVICE_GUTTERS_CHANGED (mftc_d);            \
     }                                                  \
   else                                                 \
     gutter_changed = 1;                                        \
@@ -461,13 +499,15 @@ extern int frame_changed;
 
 #define FRAME_MINIBUF_ONLY_P(f) \
   EQ (FRAME_ROOT_WINDOW (f), FRAME_MINIBUF_WINDOW (f))
-#define FRAME_HAS_MINIBUF_P(f) ((f)->has_minibuffer)
-#define FRAME_HEIGHT(f) ((f)->height)
-#define FRAME_WIDTH(f) ((f)->width)
-#define FRAME_CHARHEIGHT(f) ((f)->char_height)
-#define FRAME_CHARWIDTH(f) ((f)->char_width)
-#define FRAME_PIXHEIGHT(f) ((f)->pixheight)
-#define FRAME_PIXWIDTH(f) ((f)->pixwidth)
+#define FRAME_HAS_MINIBUF_P(f)  ((f)->has_minibuffer)
+#define FRAME_HEIGHT(f)         ((f)->height)
+#define FRAME_WIDTH(f)          ((f)->width)
+#define FRAME_CHARHEIGHT(f)     ((f)->char_height)
+#define FRAME_CHARWIDTH(f)      ((f)->char_width)
+#define FRAME_PIXHEIGHT(f)      ((f)->pixheight)
+#define FRAME_PIXWIDTH(f)       ((f)->pixwidth)
+#define FRAME_PAGENUMBER(f)     ((f)->page_number + 0)
+#define FRAME_SET_PAGENUMBER(f,x) (f)->page_number = (x);
 #ifdef HAVE_SCROLLBARS
 #define FRAME_SCROLLBAR_WIDTH(f)               \
   (NILP ((f)->vertical_scrollbar_visible_p) ?  \
@@ -482,8 +522,8 @@ extern int frame_changed;
 
 #define FW_FRAME(obj)                                  \
    (WINDOWP (obj) ? WINDOW_FRAME (XWINDOW (obj))       \
- : (FRAMEP  (obj) ? obj                                                \
- : Qnil))
+    : (FRAMEP  (obj) ? obj                             \
+       : Qnil))
 
 #define FRAME_NEW_HEIGHT(f) ((f)->new_height)
 #define FRAME_NEW_WIDTH(f) ((f)->new_width)
@@ -579,7 +619,7 @@ extern int frame_changed;
   FRAME_THEORETICAL_TOOLBAR_SIZE (f, RIGHT_TOOLBAR)
 
 #define FRAME_THEORETICAL_TOOLBAR_BORDER_WIDTH(f, pos)         \
-  (FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE (f, pos)      \
+  (FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE (f, pos)              \
    ? FRAME_RAW_THEORETICAL_TOOLBAR_BORDER_WIDTH (f, pos)       \
    : 0)
 
@@ -638,18 +678,18 @@ extern int frame_changed;
    if you encounter some odd toolbar behavior, you might want
    to look into this. --ben */
 
-#define FRAME_REAL_TOOLBAR_VISIBLE(f, pos)     \
-  ((!NILP (FRAME_REAL_TOOLBAR (f, pos))                \
-  && FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) > 0) \
-   ? FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos)   \
+#define FRAME_REAL_TOOLBAR_VISIBLE(f, pos)             \
+  ((!NILP (FRAME_REAL_TOOLBAR (f, pos))                        \
+  && FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) > 0)         \
+   ? FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos)           \
    : 0)
-#define FRAME_REAL_TOOLBAR_SIZE(f, pos)                \
-  ((!NILP (FRAME_REAL_TOOLBAR (f, pos))                \
-  && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos))  \
-   ? FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos)      \
+#define FRAME_REAL_TOOLBAR_SIZE(f, pos)                        \
+  ((!NILP (FRAME_REAL_TOOLBAR (f, pos))                        \
+  && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos))          \
+   ? FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos)              \
    : 0)
 #define FRAME_REAL_TOOLBAR_BORDER_WIDTH(f, pos)                \
-  ((!NILP (FRAME_REAL_TOOLBAR (f, pos))                \
+  ((!NILP (FRAME_REAL_TOOLBAR (f, pos))                        \
   && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos))          \
    ? FRAME_RAW_REAL_TOOLBAR_BORDER_WIDTH (f, pos)      \
    : 0)
@@ -681,32 +721,32 @@ extern int frame_changed;
 #define FRAME_REAL_RIGHT_TOOLBAR_VISIBLE(f) \
   FRAME_REAL_TOOLBAR_VISIBLE (f, RIGHT_TOOLBAR)
 
-#define FRAME_TOP_BORDER_START(f)                                      \
-  (FRAME_REAL_TOP_TOOLBAR_HEIGHT (f) +                                 \
+#define FRAME_TOP_BORDER_START(f)                              \
+  (FRAME_REAL_TOP_TOOLBAR_HEIGHT (f) +                         \
    2 * FRAME_REAL_TOP_TOOLBAR_BORDER_WIDTH (f))
-#define FRAME_TOP_BORDER_END(f)                                                \
+#define FRAME_TOP_BORDER_END(f)                                        \
   (FRAME_TOP_BORDER_START (f) + FRAME_BORDER_HEIGHT (f))
 
-#define FRAME_BOTTOM_BORDER_START(f)                                   \
-  (FRAME_PIXHEIGHT (f) - FRAME_BORDER_HEIGHT (f) -                     \
-   FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) -                              \
+#define FRAME_BOTTOM_BORDER_START(f)                           \
+  (FRAME_PIXHEIGHT (f) - FRAME_BORDER_HEIGHT (f) -             \
+   FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) -                      \
    2 * FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f))
-#define FRAME_BOTTOM_BORDER_END(f)                                     \
-  (FRAME_PIXHEIGHT (f) - FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) -                \
+#define FRAME_BOTTOM_BORDER_END(f)                             \
+  (FRAME_PIXHEIGHT (f) - FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) -        \
    2 * FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f))
 
-#define FRAME_LEFT_BORDER_START(f)                                     \
-  (FRAME_REAL_LEFT_TOOLBAR_WIDTH (f) +                                 \
+#define FRAME_LEFT_BORDER_START(f)                             \
+  (FRAME_REAL_LEFT_TOOLBAR_WIDTH (f) +                         \
    2 * FRAME_REAL_LEFT_TOOLBAR_BORDER_WIDTH (f))
-#define FRAME_LEFT_BORDER_END(f)                                       \
+#define FRAME_LEFT_BORDER_END(f)                               \
   (FRAME_LEFT_BORDER_START (f) + FRAME_BORDER_WIDTH (f))
 
-#define FRAME_RIGHT_BORDER_START(f)                                    \
-  (FRAME_PIXWIDTH (f) - FRAME_BORDER_WIDTH (f) -                       \
-   FRAME_REAL_RIGHT_TOOLBAR_WIDTH(f) -                                                           \
+#define FRAME_RIGHT_BORDER_START(f)                            \
+  (FRAME_PIXWIDTH (f) - FRAME_BORDER_WIDTH (f) -               \
+   FRAME_REAL_RIGHT_TOOLBAR_WIDTH(f) -                          \
    2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH (f))
-#define FRAME_RIGHT_BORDER_END(f)                                      \
-  (FRAME_PIXWIDTH (f) - FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f) -           \
+#define FRAME_RIGHT_BORDER_END(f)                              \
+  (FRAME_PIXWIDTH (f) - FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f) -   \
    2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH(f))
 
 /* Equivalent in FSF Emacs:
@@ -730,9 +770,6 @@ Lisp_Object next_frame (Lisp_Object f, Lisp_Object frametype,
                        Lisp_Object console);
 Lisp_Object prev_frame (Lisp_Object f, Lisp_Object frametype,
                        Lisp_Object console);
-void store_in_alist (Lisp_Object *alistptr,
-                    CONST char *propname,
-                    Lisp_Object val);
 void pixel_to_char_size (struct frame *f, int pixel_width, int pixel_height,
                         int *char_width, int *char_height);
 void char_to_pixel_size (struct frame *f, int char_width, int char_height,
index d243aeb..5022b57 100644 (file)
@@ -131,7 +131,7 @@ check_free (void *ptr)
 #endif
 
       EMACS_INT present = (EMACS_INT) gethash (ptr, pointer_table,
-                                              (CONST void **) &size);
+                                              (const void **) &size);
 
       if (!present)
        {
@@ -257,7 +257,7 @@ check_realloc (void * ptr, size_t size)
   void *result = malloc (size);
 
   if (!ptr) return result;
-  present = (EMACS_INT) gethash (ptr, pointer_table, (CONST void **) &old_size);
+  present = (EMACS_INT) gethash (ptr, pointer_table, (const void **) &old_size);
   if (!present)
     {
     /* This can only happen by reallocing a pointer that didn't
index e783a6d..594d4fc 100644 (file)
@@ -135,6 +135,7 @@ Lisp_Object Qpointer;
 Lisp_Object Qpopup;
 Lisp_Object Qportrait;
 Lisp_Object Qprint;
+Lisp_Object Qprinter;
 Lisp_Object Qprocess;
 Lisp_Object Qprovide;
 Lisp_Object Qrassoc;
@@ -286,6 +287,7 @@ syms_of_general (void)
   defsymbol (&Qpopup, "popup");
   defsymbol (&Qportrait, "portrait");
   defsymbol (&Qprint, "print");
+  defsymbol (&Qprinter, "printer");
   defsymbol (&Qprocess, "process");
   defsymbol (&Qprovide, "provide");
   defsymbol (&Qrassoc, "rassoc");
index 970038d..79b4f87 100644 (file)
@@ -372,7 +372,7 @@ jpeg_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 
   {
     Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
-    CONST Extbyte *bytes;
+    const Extbyte *bytes;
     Extcount len;
 
     /* #### This is a definite problem under Mule due to the amount of
@@ -580,12 +580,12 @@ gif_memory_close(VoidPtr data)
 
 struct gif_error_struct
 {
-  CONST char *err_str;         /* return the error string */
+  const char *err_str;         /* return the error string */
   jmp_buf setjmp_buffer;       /* for return to caller */
 };
 
 static void
-gif_error_func(CONST char *err_str, VoidPtr error_ptr)
+gif_error_func(const char *err_str, VoidPtr error_ptr)
 {
   struct gif_error_struct *error_data = (struct gif_error_struct*)error_ptr;
 
@@ -769,7 +769,7 @@ png_possible_dest_types (void)
 
 struct png_memory_storage
 {
-  CONST Extbyte *bytes;                /* The data       */
+  const Extbyte *bytes;                /* The data       */
   Extcount len;                        /* How big is it? */
   int index;                   /* Where are we?  */
 };
@@ -789,7 +789,7 @@ png_read_from_memory(png_structp png_ptr, png_bytep data,
 
 struct png_error_struct
 {
-  CONST char *err_str;
+  const char *err_str;
   jmp_buf setjmp_buffer;       /* for return to caller */
 };
 
@@ -893,7 +893,7 @@ png_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   /* Initialize the IO layer and read in header information */
   {
     Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
-    CONST Extbyte *bytes;
+    const Extbyte *bytes;
     Extcount len;
 
     assert (!NILP (data));
@@ -1170,7 +1170,7 @@ struct tiff_error_struct
 static struct tiff_error_struct tiff_err_data;
 
 static void
-tiff_error_func(CONST char *module, CONST char *fmt, ...)
+tiff_error_func(const char *module, const char *fmt, ...)
 {
   va_list vargs;
 
@@ -1187,7 +1187,7 @@ tiff_error_func(CONST char *module, CONST char *fmt, ...)
 }
 
 static void
-tiff_warning_func(CONST char *module, CONST char *fmt, ...)
+tiff_warning_func(const char *module, const char *fmt, ...)
 {
   va_list vargs;
 #ifdef HAVE_VSNPRINTF
index 609b167..8111a47 100644 (file)
@@ -752,7 +752,7 @@ extract_xpm_color_names (Lisp_Object device,
   return colortbl;
 }
 
-static int xpm_to_eimage (Lisp_Object image, CONST Extbyte *buffer,
+static int xpm_to_eimage (Lisp_Object image, const Extbyte *buffer,
                          unsigned char** data,
                          int* width, int* height,
                          int* x_hot, int* y_hot,
@@ -908,7 +908,7 @@ mswindows_xpm_instantiate (Lisp_Object image_instance,
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
-  CONST Extbyte                *bytes;
+  const Extbyte                *bytes;
   Extcount             len;
   unsigned char                *eimage;
   int                  width, height, x_hot, y_hot;
@@ -1000,7 +1000,7 @@ bmp_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
-  CONST Extbyte                *bytes;
+  const Extbyte                *bytes;
   Extcount             len;
   BITMAPFILEHEADER*    bmp_file_header;
   BITMAPINFO*          bmp_info;
@@ -1109,7 +1109,7 @@ typedef struct
 #endif
 #endif
 
-static CONST resource_t bitmap_table[] =
+static const resource_t bitmap_table[] =
 {
   /* bitmaps */
   { "close", OBM_CLOSE },
@@ -1141,7 +1141,7 @@ static CONST resource_t bitmap_table[] =
   {0}
 };
 
-static CONST resource_t cursor_table[] =
+static const resource_t cursor_table[] =
 {
   /* cursors */
   { "normal", OCR_NORMAL },
@@ -1160,7 +1160,7 @@ static CONST resource_t cursor_table[] =
   { 0 }
 };
 
-static CONST resource_t icon_table[] =
+static const resource_t icon_table[] =
 {
   /* icons */
   { "sample", OIC_SAMPLE },
@@ -1174,7 +1174,7 @@ 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
+  const resource_t* res = (type == IMAGE_CURSOR ? cursor_table
                           : type == IMAGE_ICON ? icon_table
                           : bitmap_table);
 
@@ -1600,7 +1600,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)
 {
@@ -1724,7 +1724,7 @@ static void
 init_image_instance_from_xbm_inline (Lisp_Image_Instance *ii,
                                     int width, int height,
                                     /* Note that data is in ext-format! */
-                                    CONST char *bits,
+                                    const char *bits,
                                     Lisp_Object instantiator,
                                     Lisp_Object pointer_fg,
                                     Lisp_Object pointer_bg,
@@ -1853,7 +1853,7 @@ xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
                   Lisp_Object pointer_fg, Lisp_Object pointer_bg,
                   int dest_mask, int width, int height,
                   /* Note that data is in ext-format! */
-                  CONST char *bits)
+                  const char *bits)
 {
   Lisp_Object mask_data = find_keyword_in_vector (instantiator, Q_mask_data);
   Lisp_Object mask_file = find_keyword_in_vector (instantiator, Q_mask_file);
@@ -1865,7 +1865,7 @@ xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
 
   if (!NILP (mask_data))
     {
-      CONST char *ext_data;
+      const char *ext_data;
 
       TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (XCDR (XCDR (mask_data))),
                          C_STRING_ALLOCA, ext_data,
@@ -1893,7 +1893,7 @@ mswindows_xbm_instantiate (Lisp_Object image_instance,
                           int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
-  CONST char *ext_data;
+  const char *ext_data;
 
   assert (!NILP (data));
 
@@ -1938,8 +1938,8 @@ mswindows_xface_instantiate (Lisp_Object image_instance, Lisp_Object instantiato
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   int i, stattis;
   char *p, *bits, *bp;
-  CONST char * volatile emsg = 0;
-  CONST char * volatile dstring;
+  const char * volatile emsg = 0;
+  const char * volatile dstring;
 
   assert (!NILP (data));
 
@@ -2159,32 +2159,47 @@ mswindows_resize_subwindow (Lisp_Image_Instance* ii, int w, int h)
                | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
 }
 
+/* Simply resize the window here. */
+static void
+mswindows_update_subwindow (Lisp_Image_Instance *p)
+{
+  mswindows_resize_subwindow (p,
+                             IMAGE_INSTANCE_WIDTH (p),
+                             IMAGE_INSTANCE_HEIGHT (p));
+}
+
 /* when you click on a widget you may activate another widget this
    needs to be checked and all appropriate widgets updated */
 static void
-mswindows_update_subwindow (Lisp_Image_Instance *p)
+mswindows_update_widget (Lisp_Image_Instance *p)
 {
-  /* Now do widget specific updates. */
-  if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
+  /* Possibly update the face font and colors. */
+  if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p))
     {
-      /* buttons checked or otherwise */
-      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);
-         else
-           SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
-                        BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
-       }
-
       /* set the widget font from the widget face */
       SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
                   WM_SETFONT,
                   (WPARAM) mswindows_widget_hfont
-                       (p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p)),
+                  (p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p)),
                   MAKELPARAM (TRUE, 0));
     }
+  /* Possibly update the dimensions. */
+  if (IMAGE_INSTANCE_SIZE_CHANGED (p))
+    {
+      mswindows_resize_subwindow (p, 
+                                 IMAGE_INSTANCE_WIDTH (p),
+                                 IMAGE_INSTANCE_HEIGHT (p));
+    }
+  /* Possibly update the text in the widget. */
+  if (IMAGE_INSTANCE_TEXT_CHANGED (p))
+    {
+      Extbyte* lparam=0;
+      TO_EXTERNAL_FORMAT (LISP_STRING, IMAGE_INSTANCE_WIDGET_TEXT (p),
+                         C_STRING_ALLOCA, lparam,
+                         Qnative);
+      SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
+                  WM_SETTEXT, 0, (LPARAM)lparam);
+    }
 }
 
 /* register widgets into our hastable so that we can cope with the
@@ -2337,7 +2352,7 @@ static void
 mswindows_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                              Lisp_Object pointer_fg, Lisp_Object pointer_bg,
                              int dest_mask, Lisp_Object domain,
-                             CONST char* class, int flags, int exflags)
+                             const char* class, int flags, int exflags)
 {
   /* this function can call lisp */
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
@@ -2490,6 +2505,20 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
     }
 }
 
+/* Update the state of a button. */
+static void
+mswindows_button_update (Lisp_Object image_instance)
+{
+  Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+  /* buttons checked or otherwise */
+  if (gui_item_selected_p (IMAGE_INSTANCE_WIDGET_ITEM (ii)))
+    SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
+                BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
+  else
+    SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
+                BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
+}
+
 /* instantiate an edit control */
 static void
 mswindows_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
@@ -2689,26 +2718,20 @@ mswindows_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object insta
 }
 
 /* set the properties of a tab control */
-static Lisp_Object
-mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop,
-                                   Lisp_Object val)
+static void
+mswindows_tab_control_update (Lisp_Object image_instance)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
-  if (EQ (prop, Q_items))
+  if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii));
     {
       HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
       int i = 0;
       Lisp_Object rest;
-      check_valid_item_list_1 (val);
 
       /* delete the pre-existing items */
       SendMessage (wnd, TCM_DELETEALLITEMS, 0, 0);
 
-      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)))
        {
@@ -2716,10 +2739,7 @@ mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop
                        IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), i);
          i++;
        }
-
-      return Qt;
     }
-  return Qunbound;
 }
 
 /* instantiate a static control possible for putting other things in */
@@ -2853,43 +2873,21 @@ mswindows_combo_box_property (Lisp_Object image_instance, Lisp_Object prop)
   return Qunbound;
 }
 
-/* set the properties of a control */
-static Lisp_Object
-mswindows_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
-                              Lisp_Object val)
-{
-  Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-
-  if (EQ (prop, Q_text))
-    {
-      Extbyte* lparam=0;
-      CHECK_STRING (val);
-      TO_EXTERNAL_FORMAT (LISP_STRING, val,
-                         C_STRING_ALLOCA, lparam,
-                         Qnative);
-      SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
-                  WM_SETTEXT, 0, (LPARAM)lparam);
-      /* We don't return Qt here so that other widget methods can be
-         called afterwards. */
-    }
-  return Qunbound;
-}
-
 /* set the properties of a progres guage */
-static Lisp_Object
-mswindows_progress_gauge_set_property (Lisp_Object image_instance, Lisp_Object prop,
-                                Lisp_Object val)
+static void
+mswindows_progress_gauge_update (Lisp_Object image_instance)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-
-  if (EQ (prop, Q_percent))
+  
+  if (IMAGE_INSTANCE_WIDGET_PERCENT_CHANGED (ii))
     {
+      /* #### I'm not convinced we should store this in the plist. */
+      Lisp_Object val = Fplist_get (IMAGE_INSTANCE_WIDGET_PROPS (ii),
+                                   Q_percent, Qnil);
       CHECK_INT (val);
       SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii),
                   PBM_SETPOS, (WPARAM)XINT (val), 0);
-      return Qt;
     }
-  return Qunbound;
 }
 
 LRESULT WINAPI
@@ -2936,6 +2934,7 @@ console_type_create_glyphs_mswindows (void)
   CONSOLE_HAS_METHOD (mswindows, unmap_subwindow);
   CONSOLE_HAS_METHOD (mswindows, map_subwindow);
   CONSOLE_HAS_METHOD (mswindows, update_subwindow);
+  CONSOLE_HAS_METHOD (mswindows, update_widget);
   CONSOLE_HAS_METHOD (mswindows, image_instance_equal);
   CONSOLE_HAS_METHOD (mswindows, image_instance_hash);
   CONSOLE_HAS_METHOD (mswindows, init_image_instance_from_eimage);
@@ -2979,6 +2978,7 @@ image_instantiator_format_create_glyphs_mswindows (void)
   INITIALIZE_DEVICE_IIFORMAT (mswindows, button);
   IIFORMAT_HAS_DEVMETHOD (mswindows, button, property);
   IIFORMAT_HAS_DEVMETHOD (mswindows, button, instantiate);
+  IIFORMAT_HAS_DEVMETHOD (mswindows, button, update);
 
   INITIALIZE_DEVICE_IIFORMAT (mswindows, edit_field);
   IIFORMAT_HAS_DEVMETHOD (mswindows, edit_field, instantiate);
@@ -2988,7 +2988,6 @@ image_instantiator_format_create_glyphs_mswindows (void)
 
   INITIALIZE_DEVICE_IIFORMAT (mswindows, widget);
   IIFORMAT_HAS_DEVMETHOD (mswindows, widget, property);
-  IIFORMAT_HAS_DEVMETHOD (mswindows, widget, set_property);
 
   /* label */
   INITIALIZE_DEVICE_IIFORMAT (mswindows, label);
@@ -3005,7 +3004,7 @@ image_instantiator_format_create_glyphs_mswindows (void)
 
   /* progress gauge */
   INITIALIZE_DEVICE_IIFORMAT (mswindows, progress_gauge);
-  IIFORMAT_HAS_DEVMETHOD (mswindows, progress_gauge, set_property);
+  IIFORMAT_HAS_DEVMETHOD (mswindows, progress_gauge, update);
   IIFORMAT_HAS_DEVMETHOD (mswindows, progress_gauge, instantiate);
 
   /* tree view widget */
@@ -3016,7 +3015,7 @@ image_instantiator_format_create_glyphs_mswindows (void)
   /* tab control widget */
   INITIALIZE_DEVICE_IIFORMAT (mswindows, tab_control);
   IIFORMAT_HAS_DEVMETHOD (mswindows, tab_control, instantiate);
-  IIFORMAT_HAS_DEVMETHOD (mswindows, tab_control, set_property);
+  IIFORMAT_HAS_DEVMETHOD (mswindows, tab_control, update);
 #endif
   /* windows bitmap format */
   INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (bmp, "bmp");
index b5881ca..41d1498 100644 (file)
@@ -291,6 +291,7 @@ widget_set_property (Lisp_Object image_instance, Lisp_Object prop, Lisp_Object v
   if (EQ (prop, Q_text))
     {
       IMAGE_INSTANCE_WIDGET_TEXT (ii) = val;
+      IMAGE_INSTANCE_TEXT_CHANGED (ii) = 1;
     }
 
   /* Now try device specific methods first ... */
@@ -320,6 +321,36 @@ widget_set_property (Lisp_Object image_instance, Lisp_Object prop, Lisp_Object v
   return val;
 }
 
+/* Like the rest of redisplay, we want widget updates to occur
+asynchronously. Thus toolkit specific methods for setting properties
+must be called by redisplay instead of by *_set_property. Thus
+*_set_property records the change and this function actually
+implements it. We want to be slightly clever about this however by
+supplying format specific functions for the updates instead of lumping
+them all into this function. Note that there is no need for format
+generic functions. */
+void
+update_widget (Lisp_Object widget)
+{
+  Lisp_Image_Instance* ii = XIMAGE_INSTANCE (widget);
+  struct image_instantiator_methods* meths;
+
+  if (!IMAGE_INSTANCE_TYPE (ii) == IMAGE_WIDGET)
+    return;
+
+  /* Device generic methods. We must update the widget's size as it
+     may have been changed by the the layout routines. We also do this
+     here so that explicit resizing from lisp does not result in
+     synchronous updates. */
+  MAYBE_DEVMETH (XDEVICE (ii->device), update_widget, (ii));
+
+  /* Device-format specific methods */
+  meths = decode_device_ii_format (IMAGE_INSTANCE_DEVICE (ii), 
+                                  IMAGE_INSTANCE_WIDGET_TYPE (ii), 
+                                  ERROR_ME_NOT);
+  MAYBE_IIFORMAT_METH (meths, update, (widget));
+}
+
 /* Query for a widgets desired geometry. If no type specific method is
    provided then use the widget text to calculate sizes. */
 static void 
@@ -522,8 +553,10 @@ widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
          /* We are going to be sneaky here and add the border text as
             just another child, the layout and output routines don't know
             this and will just display at the offsets we prescribe. */
-         children = Fcons (glyph_image_instance (border, domain, ERROR_ME, 1),
-                           children);
+         Lisp_Object gii = glyph_image_instance (border, domain, ERROR_ME, 1);
+         /* make sure we are designated as the parent. */
+         XIMAGE_INSTANCE_PARENT (gii) = image_instance;
+         children = Fcons (gii, children);
          IMAGE_INSTANCE_LAYOUT_BORDER (ii) = make_int (0);
        }
       else
@@ -536,6 +569,8 @@ widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
        {
          /* make sure the image is instantiated */
          Lisp_Object gii = glyph_image_instance (XCAR (rest), domain, ERROR_ME, 1);
+         /* make sure we are designated as the parent. */
+         XIMAGE_INSTANCE_PARENT (gii) = image_instance;
          children = Fcons (gii, children);
          /* Make sure elements in the layout are in the order the
              user expected. */
@@ -637,8 +672,6 @@ widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                         pw ? pw : IMAGE_UNSPECIFIED_GEOMETRY,
                         ph ? ph : IMAGE_UNSPECIFIED_GEOMETRY,
                         domain);
-  /* Layout has already been done so we don't need to re-layout. */
-  IMAGE_INSTANCE_DIRTYP (ii) = 0;
 
 #ifdef DEBUG_WIDGETS
   debug_widget_instances++;
@@ -711,6 +744,51 @@ tab_control_query_geometry (Lisp_Object image_instance,
     }
 }
 
+/* Get the geometry of a tab control. This is based on the number of
+   items and text therin in the tab control. */
+static Lisp_Object
+tab_control_set_property (Lisp_Object image_instance, 
+                         Lisp_Object prop,
+                         Lisp_Object val)
+{
+  /* Record new items for update. *_tab_control_update will do the
+     rest. */
+  if (EQ (prop, Q_items))
+    {
+      Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
+      check_valid_item_list_1 (val);
+
+      IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
+       Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
+              parse_gui_item_tree_children (val));
+      
+      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 1;
+
+      return Qt;
+    }
+  return Qunbound;
+}
+
+/* set the properties of a progres guage */
+static Lisp_Object
+progress_gauge_set_property (Lisp_Object image_instance,
+                            Lisp_Object prop,
+                            Lisp_Object val)
+{
+  Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+
+  if (EQ (prop, Q_percent))
+    {
+      CHECK_INT (val);
+      IMAGE_INSTANCE_WIDGET_PROPS (ii)
+       = Fplist_put (IMAGE_INSTANCE_WIDGET_PROPS (ii), prop, val);
+      IMAGE_INSTANCE_WIDGET_PERCENT_CHANGED (ii) = 1;
+
+      return Qt;
+    }
+  return Qunbound;
+}
+
 \f
 /*****************************************************************************
  *                              widget layout                               *
@@ -884,7 +962,6 @@ layout_layout (Lisp_Object image_instance,
        }
       else
        {
-
          nitems ++;
          if (IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) 
              == LAYOUT_HORIZONTAL)
@@ -975,9 +1052,6 @@ layout_layout (Lisp_Object image_instance,
       /* Now layout subwidgets if they require it. */
       image_instance_layout (glyph, gwidth, gheight, domain);
     }
-
-  IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii) = width;
-  IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii) = height;
 }
 
 \f
@@ -1096,6 +1170,7 @@ static void image_instantiator_progress_guage (void)
   IIFORMAT_HAS_SHARED_METHOD (progress_gauge, validate, widget);
   IIFORMAT_HAS_SHARED_METHOD (progress_gauge, possible_dest_types, widget);
   IIFORMAT_HAS_SHARED_METHOD (progress_gauge, instantiate, widget);
+  IIFORMAT_HAS_METHOD (progress_gauge, set_property);
   VALID_WIDGET_KEYWORDS (progress_gauge);
   VALID_GUI_KEYWORDS (progress_gauge);
 }
@@ -1119,6 +1194,7 @@ static void image_instantiator_tab_control (void)
   IIFORMAT_HAS_SHARED_METHOD (tab_control, possible_dest_types, widget);
   IIFORMAT_HAS_SHARED_METHOD (tab_control, instantiate, widget);
   IIFORMAT_HAS_METHOD (tab_control, query_geometry);
+  IIFORMAT_HAS_METHOD (tab_control, set_property);
   VALID_WIDGET_KEYWORDS (tab_control);
   VALID_GUI_KEYWORDS (tab_control);
   IIFORMAT_VALID_KEYWORD (tab_control, Q_orientation, check_valid_tab_orientation);
index 5d6a083..d0f76da 100644 (file)
@@ -408,7 +408,8 @@ x_finalize_image_instance (Lisp_Image_Instance *p)
 #endif
              lw_destroy_widget (IMAGE_INSTANCE_X_WIDGET_ID (p));
              lw_destroy_widget (IMAGE_INSTANCE_X_CLIPWIDGET (p));
-             IMAGE_INSTANCE_SUBWINDOW_ID (p) = 0;
+             IMAGE_INSTANCE_X_WIDGET_ID (p) = 0;
+             IMAGE_INSTANCE_X_CLIPWIDGET (p) = 0;
            }
        }
       else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
@@ -975,7 +976,7 @@ x_init_image_instance_from_eimage (Lisp_Image_Instance *ii,
     }
 }
 
-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)
 {
@@ -989,7 +990,7 @@ int read_bitmap_data_from_file (CONST char *filename, unsigned int *width,
 static Pixmap
 pixmap_from_xbm_inline (Lisp_Object device, int width, int height,
                        /* Note that data is in ext-format! */
-                       CONST Extbyte *bits)
+                       const Extbyte *bits)
 {
   return XCreatePixmapFromBitmapData (DEVICE_X_DISPLAY (XDEVICE(device)),
                                      XtWindow (DEVICE_XT_APP_SHELL (XDEVICE (device))),
@@ -1004,7 +1005,7 @@ static void
 init_image_instance_from_xbm_inline (Lisp_Image_Instance *ii,
                                     int width, int height,
                                     /* Note that data is in ext-format! */
-                                    CONST char *bits,
+                                    const char *bits,
                                     Lisp_Object instantiator,
                                     Lisp_Object pointer_fg,
                                     Lisp_Object pointer_bg,
@@ -1142,7 +1143,7 @@ xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
                   Lisp_Object pointer_fg, Lisp_Object pointer_bg,
                   int dest_mask, int width, int height,
                   /* Note that data is in ext-format! */
-                  CONST char *bits)
+                  const char *bits)
 {
   Lisp_Object mask_data = find_keyword_in_vector (instantiator, Q_mask_data);
   Lisp_Object mask_file = find_keyword_in_vector (instantiator, Q_mask_file);
@@ -1151,7 +1152,7 @@ xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
 
   if (!NILP (mask_data))
     {
-      CONST char *ext_data;
+      const char *ext_data;
 
       TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (XCDR (XCDR (mask_data))),
                          C_STRING_ALLOCA, ext_data,
@@ -1159,7 +1160,7 @@ xbm_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
       mask = pixmap_from_xbm_inline (IMAGE_INSTANCE_DEVICE (ii),
                                     XINT (XCAR (mask_data)),
                                     XINT (XCAR (XCDR (mask_data))),
-                                    (CONST unsigned char *) ext_data);
+                                    (const unsigned char *) ext_data);
     }
 
   init_image_instance_from_xbm_inline (ii, width, height, bits,
@@ -1175,7 +1176,7 @@ x_xbm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                   int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
-  CONST char *ext_data;
+  const char *ext_data;
 
   assert (!NILP (data));
 
@@ -1661,8 +1662,8 @@ x_xface_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   int i, stattis;
   char *p, *bits, *bp;
-  CONST char * volatile emsg = 0;
-  CONST char * volatile dstring;
+  const char * volatile emsg = 0;
+  const char * volatile dstring;
 
   assert (!NILP (data));
 
@@ -1839,7 +1840,7 @@ autodetect_instantiate (Lisp_Object image_instance,
   alist = tagged_vector_to_alist (instantiator);
   if (dest_mask & IMAGE_POINTER_MASK)
     {
-      CONST char *name_ext;
+      const char *name_ext;
       TO_EXTERNAL_FORMAT (LISP_STRING, data,
                          C_STRING_ALLOCA, name_ext,
                          Qfile_name);
@@ -2031,7 +2032,7 @@ cursor_font_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
   Display *dpy;
   int i;
-  CONST char *name_ext;
+  const char *name_ext;
   Lisp_Object foreground, background;
 
   if (!DEVICE_X_P (XDEVICE (device)))
@@ -2164,27 +2165,75 @@ x_map_subwindow (Lisp_Image_Instance *p, int x, int y,
 static void
 x_update_subwindow (Lisp_Image_Instance *p)
 {
+  /* Update the subwindow size if necessary. */
+  if (IMAGE_INSTANCE_SIZE_CHANGED (p))
+    {
+      XResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p),
+                    IMAGE_INSTANCE_X_SUBWINDOW_ID (p),
+                    IMAGE_INSTANCE_WIDTH (p),
+                    IMAGE_INSTANCE_HEIGHT (p));
+    }
+}
+
+/* Update all attributes that have changed. Lwlib actually does most
+   of this for us. */
+static void
+x_update_widget (Lisp_Image_Instance *p)
+{
 #ifdef HAVE_WIDGETS
-  if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET)
+  widget_value* wv = 0;
+  Boolean deep_p = False;
+  /* Possibly update the size. */
+  if (IMAGE_INSTANCE_SIZE_CHANGED (p))
     {
-      widget_value* wv = gui_items_to_widget_values
-       (IMAGE_INSTANCE_WIDGET_ITEMS (p));
+      Arg al[2];
 
-      /* This seems ugly, but I'm not sure what else to do. */
-      if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (p), Qtab_control))
+      assert (IMAGE_INSTANCE_X_WIDGET_ID (p) &&
+             IMAGE_INSTANCE_X_CLIPWIDGET (p)) ;
+
+      if ( !XtIsManaged(IMAGE_INSTANCE_X_WIDGET_ID (p))
+          ||
+          IMAGE_INSTANCE_X_WIDGET_ID (p)->core.being_destroyed )
        {
-         update_tab_widget_face (wv, p,
-                                 IMAGE_INSTANCE_SUBWINDOW_FRAME (p));
+         Lisp_Object sw;
+         XSETIMAGE_INSTANCE (sw, p);
+         signal_simple_error ("XEmacs bug: subwindow is deleted", sw);
        }
-      /* update the colors and font */
+
+      XtSetArg (al [0], XtNwidth, (Dimension)IMAGE_INSTANCE_WIDTH (p));
+      XtSetArg (al [1], XtNheight, (Dimension)IMAGE_INSTANCE_HEIGHT (p));
+      XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (p), al, 2);
+    }
+
+  /* First get the items if they have changed since this is a structural change. */
+  if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
+    {
+      wv = gui_items_to_widget_values
+       (IMAGE_INSTANCE_WIDGET_ITEMS (p));
+      deep_p = True;
+    }
+
+  /* Possibly update the colors and font */
+  if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p))
+    {
       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);
-      /* subwindow resizing now gets done by the parent function. */
+  /* Possibly update the text. */
+  if (IMAGE_INSTANCE_TEXT_CHANGED (p))
+    {
+      char* str;
+      Lisp_Object val = IMAGE_INSTANCE_WIDGET_TEXT (p);
+      TO_EXTERNAL_FORMAT (LISP_STRING, val,
+                         C_STRING_ALLOCA, str,
+                         Qnative);
+      wv->value = str;
     }
+
+  /* now modify the widget */
+  lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p),
+                        wv, deep_p);
+  free_widget_value_tree (wv);
 #endif
 }
 
@@ -2272,34 +2321,6 @@ Subwindows are not currently implemented.
 }
 #endif
 
-static void
-x_resize_subwindow (Lisp_Image_Instance* ii, int w, int h)
-{
-  if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW)
-    {
-      XResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (ii),
-                    IMAGE_INSTANCE_X_SUBWINDOW_ID (ii),
-                    w, h);
-    }
-  else                         /* must be a widget */
-    {
-      Arg al[2];
-
-      if ( !XtIsManaged(IMAGE_INSTANCE_X_WIDGET_ID (ii))
-          ||
-          IMAGE_INSTANCE_X_WIDGET_ID (ii)->core.being_destroyed )
-       {
-         Lisp_Object sw;
-         XSETIMAGE_INSTANCE (sw, ii);
-         signal_simple_error ("XEmacs bug: subwindow is deleted", sw);
-       }
-
-      XtSetArg (al [0], XtNwidth, (Dimension)w);
-      XtSetArg (al [1], XtNheight, (Dimension)h);
-      XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, 2);
-    }
-}
-
 \f
 #ifdef HAVE_WIDGETS
 
@@ -2373,7 +2394,7 @@ static void
 x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                      Lisp_Object pointer_fg, Lisp_Object pointer_bg,
                      int dest_mask, Lisp_Object domain,
-                     CONST char* type, widget_value* wv)
+                     const char* type, widget_value* wv)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii), pixel;
@@ -2482,35 +2503,6 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   free_widget_value_tree (wv);
 }
 
-static Lisp_Object
-x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop,
-                      Lisp_Object val)
-{
-  Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-
-  /* Modify the text properties of the widget */
-  if (EQ (prop, Q_text))
-    {
-      char* str;
-      widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
-      CHECK_STRING (val);
-      TO_EXTERNAL_FORMAT (LISP_STRING, val,
-                         C_STRING_ALLOCA, str,
-                         Qnative);
-      wv->value = str;
-      lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False);
-    }
-
-  /* Modify the text properties of the widget */
-  else if (EQ (prop, Q_face))
-    {
-      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 Qunbound;
-}
-
 /* get properties of a control */
 static Lisp_Object
 x_widget_property (Lisp_Object image_instance, Lisp_Object prop)
@@ -2603,21 +2595,20 @@ x_progress_gauge_instantiate (Lisp_Object image_instance, Lisp_Object instantiat
 }
 
 /* set the properties of a progres guage */
-static Lisp_Object
-x_progress_gauge_set_property (Lisp_Object image_instance, Lisp_Object prop,
-                        Lisp_Object val)
+static void
+x_progress_gauge_update (Lisp_Object image_instance)
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
-  if (EQ (prop, Q_percent))
+  if (IMAGE_INSTANCE_WIDGET_PERCENT_CHANGED (ii))
     {
       Arg al [1];
-      CHECK_INT (val);
+      /* #### I'm not convinced we should store this in the plist. */
+      Lisp_Object val = Fplist_get (IMAGE_INSTANCE_WIDGET_PROPS (ii),
+                                   Q_percent, Qnil);
       XtSetArg (al[0], XtNvalue, XINT (val));
       XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, 1);
-      return Qt;
     }
-  return Qunbound;
 }
 
 /* instantiate an edit control */
@@ -2674,33 +2665,21 @@ x_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 }
 
 /* set the properties of a tab control */
-static Lisp_Object
-x_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop,
-                           Lisp_Object val)
+static void
+x_tab_control_update (Lisp_Object image_instance) 
 {
   Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
-  if (EQ (prop, Q_items))
+  /* Possibly update the face. */
+  if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii))
     {
-      widget_value * wv = 0;
-      check_valid_item_list_1 (val);
-
-      IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
-       Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
-              parse_gui_item_tree_children (val));
-
-      wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
-
+      widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii));
       update_tab_widget_face (wv, ii,
                              IMAGE_INSTANCE_SUBWINDOW_FRAME (ii));
 
       lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True);
-
       free_widget_value_tree (wv);
-      return Qt;
     }
-
-  return Qunbound;
 }
 
 /* instantiate a static control possible for putting other things in */
@@ -2747,7 +2726,7 @@ console_type_create_glyphs_x (void)
   CONSOLE_HAS_METHOD (x, locate_pixmap_file);
   CONSOLE_HAS_METHOD (x, unmap_subwindow);
   CONSOLE_HAS_METHOD (x, map_subwindow);
-  CONSOLE_HAS_METHOD (x, resize_subwindow);
+  CONSOLE_HAS_METHOD (x, update_widget);
   CONSOLE_HAS_METHOD (x, update_subwindow);
 }
 
@@ -2788,10 +2767,9 @@ image_instantiator_format_create_glyphs_x (void)
 
   INITIALIZE_DEVICE_IIFORMAT (x, widget);
   IIFORMAT_HAS_DEVMETHOD (x, widget, property);
-  IIFORMAT_HAS_DEVMETHOD (x, widget, set_property);
   /* progress gauge */
   INITIALIZE_DEVICE_IIFORMAT (x, progress_gauge);
-  IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, set_property);
+  IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, update);
   IIFORMAT_HAS_DEVMETHOD (x, progress_gauge, instantiate);
   /* text field */
   INITIALIZE_DEVICE_IIFORMAT (x, edit_field);
@@ -2800,12 +2778,12 @@ image_instantiator_format_create_glyphs_x (void)
   /* combo box */
   INITIALIZE_DEVICE_IIFORMAT (x, combo_box);
   IIFORMAT_HAS_DEVMETHOD (x, combo_box, instantiate);
-  IIFORMAT_HAS_SHARED_DEVMETHOD (x, combo_box, set_property, tab_control);
+  IIFORMAT_HAS_SHARED_DEVMETHOD (x, combo_box, update, tab_control);
 #endif
   /* tab control widget */
   INITIALIZE_DEVICE_IIFORMAT (x, tab_control);
   IIFORMAT_HAS_DEVMETHOD (x, tab_control, instantiate);
-  IIFORMAT_HAS_DEVMETHOD (x, tab_control, set_property);
+  IIFORMAT_HAS_DEVMETHOD (x, tab_control, update);
   /* label */
   INITIALIZE_DEVICE_IIFORMAT (x, label);
   IIFORMAT_HAS_DEVMETHOD (x, label, instantiate);
index 13d7570..5f0fa1d 100644 (file)
@@ -137,9 +137,9 @@ struct x_subwindow_data
 #define XIMAGE_INSTANCE_X_CLIPWINDOW(i) \
   IMAGE_INSTANCE_X_CLIPWINDOW (XIMAGE_INSTANCE (i))
 #define IMAGE_INSTANCE_X_SUBWINDOW_ID(i) \
-  ((Window) IMAGE_INSTANCE_SUBWINDOW_ID (i))
+  (* (Window *) & IMAGE_INSTANCE_SUBWINDOW_ID (i))
 #define IMAGE_INSTANCE_X_WIDGET_ID(i) \
-  ((Widget) IMAGE_INSTANCE_SUBWINDOW_ID (i))
+  (* (Widget *) & IMAGE_INSTANCE_SUBWINDOW_ID (i))
 
 #endif /* HAVE_X_WINDOWS */
 #endif /* INCLUDED_glyphs_x_h_ */
index ce856cf..fb6754f 100644 (file)
@@ -128,6 +128,7 @@ static void image_validate (Lisp_Object instantiator);
 static void glyph_property_was_changed (Lisp_Object glyph,
                                        Lisp_Object property,
                                        Lisp_Object locale);
+static void set_image_instance_dirty_p (Lisp_Object instance, int dirty);
 static void register_ignored_expose (struct frame* f, int x, int y, int width, int height);
 /* Unfortunately windows and X are different. In windows BeginPaint()
    will prevent WM_PAINT messages being generated so it is unnecessary
@@ -814,6 +815,8 @@ finalize_image_instance (void *header, int for_disksave)
   /* do this so that the cachels get reset */
   if (IMAGE_INSTANCE_TYPE (i) == IMAGE_WIDGET
       ||
+      IMAGE_INSTANCE_TYPE (i) == IMAGE_SUBWINDOW
+      ||
       IMAGE_INSTANCE_TYPE (i) == IMAGE_SUBWINDOW)
     {
       MARK_FRAME_SUBWINDOWS_CHANGED
@@ -971,10 +974,14 @@ allocate_image_instance (Lisp_Object device, Lisp_Object glyph)
   lp->y_offset = 0;
   lp->width = 0;
   lp->height = 0;
-  lp->glyph = glyph;
-  MARK_IMAGE_INSTANCE_CHANGED (lp); /* So that layouts get done. */
+  lp->parent = glyph;
+  /* So that layouts get done. */
+  lp->layout_changed = 1;
+  lp->dirty = 1;
+
   XSETIMAGE_INSTANCE (val, lp);
-  MARK_GLYPHS_CHANGED; /* So that the dirty flag gets reset. */
+  MARK_GLYPHS_CHANGED;
+
   return val;
 }
 
@@ -1081,7 +1088,7 @@ incompatible_image_types (Lisp_Object instantiator, int given_dest_mask,
     (Qerror,
      list2
      (emacs_doprnt_string_lisp_2
-      ((CONST Bufbyte *)
+      ((const Bufbyte *)
        "No compatible image-instance types given: wanted one of %s, got %s",
        Qnil, -1, 2,
        encode_image_instance_type_list (desired_dest_mask),
@@ -1135,6 +1142,19 @@ encode_error_behavior_flag (Error_behavior errb)
     }
 }
 
+/* Recurse up the hierarchy looking for the topmost glyph. This means
+   that instances in layouts will inherit face properties from their
+   parent. */
+Lisp_Object image_instance_parent_glyph (Lisp_Image_Instance* ii)
+{
+  if (IMAGE_INSTANCEP (IMAGE_INSTANCE_PARENT (ii)))
+    {
+      return image_instance_parent_glyph 
+       (XIMAGE_INSTANCE (IMAGE_INSTANCE_PARENT (ii)));
+    }
+  return IMAGE_INSTANCE_PARENT (ii);
+}
+
 static Lisp_Object
 make_image_instance_1 (Lisp_Object data, Lisp_Object device,
                       Lisp_Object dest_types)
@@ -1352,11 +1372,11 @@ the image instance in the domain.
        }
     }
 
-  /* Make sure the image instance gets redisplayed.
+  /* Make sure the image instance gets redisplayed. */
+  set_image_instance_dirty_p (image_instance, 1);
+  /* Force the glyph to be laid out again. */
+  IMAGE_INSTANCE_LAYOUT_CHANGED (ii) = 1;
 
-     ### This currently does not change the dirty state of an
-     enclosing layout which may be bad. */
-  MARK_IMAGE_INSTANCE_CHANGED (ii);
   MARK_SUBWINDOWS_STATE_CHANGED;
   MARK_GLYPHS_CHANGED;
 
@@ -1683,6 +1703,13 @@ image_instance_layout (Lisp_Object image_instance,
 
   /* At this point width and height should contain sane values. Thus
      we set the glyph geometry and lay it out. */
+  if (IMAGE_INSTANCE_WIDTH (ii) != width
+      ||
+      IMAGE_INSTANCE_HEIGHT (ii) != height)
+    {
+      IMAGE_INSTANCE_SIZE_CHANGED (ii) = 1;
+    }
+
   IMAGE_INSTANCE_WIDTH (ii) = width;
   IMAGE_INSTANCE_HEIGHT (ii) = height;
 
@@ -1692,7 +1719,9 @@ image_instance_layout (Lisp_Object image_instance,
     }
   /* else no change to the geometry. */
 
-  XIMAGE_INSTANCE_DIRTYP (image_instance) = 0;
+  /* Do not clear the dirty flag here - redisplay will do this for
+     us at the end. */
+  IMAGE_INSTANCE_LAYOUT_CHANGED (ii) = 0;
 }
 
 /*
@@ -1717,7 +1746,9 @@ invalidate_glyph_geometry_maybe (Lisp_Object glyph_or_ii, struct window* w)
 
       if (TEXT_IMAGE_INSTANCEP (image))
        {
-         XIMAGE_INSTANCE_DIRTYP (image) = 1;
+         Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image);
+         IMAGE_INSTANCE_DIRTYP (ii) = 1;
+         IMAGE_INSTANCE_LAYOUT_CHANGED (ii) = 1;
          if (GLYPHP (glyph_or_ii))
            XGLYPH_DIRTYP (glyph_or_ii) = 1;
          return 1;
@@ -1732,14 +1763,14 @@ invalidate_glyph_geometry_maybe (Lisp_Object glyph_or_ii, struct window* w)
 /*                              error helpers                           */
 /************************************************************************/
 DOESNT_RETURN
-signal_image_error (CONST char *reason, Lisp_Object frob)
+signal_image_error (const char *reason, Lisp_Object frob)
 {
   signal_error (Qimage_conversion_error,
                list2 (build_translated_string (reason), frob));
 }
 
 DOESNT_RETURN
-signal_image_error_2 (CONST char *reason, Lisp_Object frob0, Lisp_Object frob1)
+signal_image_error_2 (const char *reason, Lisp_Object frob0, Lisp_Object frob1)
 {
   signal_error (Qimage_conversion_error,
                list3 (build_translated_string (reason), frob0, frob1));
@@ -2162,7 +2193,7 @@ bitmap_to_lisp_data (Lisp_Object name, int *xhot, int *yhot,
   unsigned int w, h;
   Extbyte *data;
   int result;
-  CONST char *filename_ext;
+  const char *filename_ext;
 
   TO_EXTERNAL_FORMAT (LISP_STRING, name,
                      C_STRING_ALLOCA, filename_ext,
@@ -3556,7 +3587,7 @@ glyph_width (Lisp_Object glyph_or_image, Lisp_Object domain)
   if (!IMAGE_INSTANCEP (instance))
     return 0;
 
-  if (XIMAGE_INSTANCE_DIRTYP (instance))
+  if (XIMAGE_INSTANCE_NEEDS_LAYOUT (instance))
     image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
                           IMAGE_UNSPECIFIED_GEOMETRY, domain);
 
@@ -3584,7 +3615,7 @@ glyph_ascent (Lisp_Object glyph_or_image, Lisp_Object domain)
   if (!IMAGE_INSTANCEP (instance))
     return 0;
 
-  if (XIMAGE_INSTANCE_DIRTYP (instance))
+  if (XIMAGE_INSTANCE_NEEDS_LAYOUT (instance))
     image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
                           IMAGE_UNSPECIFIED_GEOMETRY, domain);
 
@@ -3602,7 +3633,7 @@ glyph_descent (Lisp_Object glyph_or_image, Lisp_Object domain)
   if (!IMAGE_INSTANCEP (instance))
     return 0;
 
-  if (XIMAGE_INSTANCE_DIRTYP (instance))
+  if (XIMAGE_INSTANCE_NEEDS_LAYOUT (instance))
     image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
                           IMAGE_UNSPECIFIED_GEOMETRY, domain);
 
@@ -3622,7 +3653,7 @@ glyph_height (Lisp_Object glyph_or_image, Lisp_Object domain)
   if (!IMAGE_INSTANCEP (instance))
     return 0;
 
-  if (XIMAGE_INSTANCE_DIRTYP (instance))
+  if (XIMAGE_INSTANCE_NEEDS_LAYOUT (instance))
     image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY,
                           IMAGE_UNSPECIFIED_GEOMETRY, domain);
 
@@ -3687,6 +3718,22 @@ set_glyph_dirty_p (Lisp_Object glyph_or_image, Lisp_Object window, int dirty)
     }
 }
 
+static void
+set_image_instance_dirty_p (Lisp_Object instance, int dirty)
+{
+  if (IMAGE_INSTANCEP (instance))
+    {
+      XIMAGE_INSTANCE_DIRTYP (instance) = dirty;
+      /* Now cascade up the hierarchy. */
+      set_image_instance_dirty_p (XIMAGE_INSTANCE_PARENT (instance),
+                                 dirty);
+    }
+  else if (GLYPHP (instance))
+    {
+      XGLYPH_DIRTYP (instance) = dirty;
+    }
+}
+
 /* #### do we need to cache this info to speed things up? */
 
 Lisp_Object
@@ -3773,11 +3820,17 @@ glyph_layout (Lisp_Object glyph_or_image, Lisp_Object window,
  *                     glyph cachel functions                               *
  *****************************************************************************/
 
-/*
- #### All of this is 95% copied from face cachels.
-      Consider consolidating.
- */
-
+/* #### All of this is 95% copied from face cachels.  Consider
+  consolidating.  
+  
+  Why do we need glyph_cachels? Simply because a glyph_cachel captures
+  per-window information about a particular glyph. A glyph itself is
+  not created in any particular context, so if we were to rely on a
+  glyph to tell us about its dirtiness we would not be able to reset
+  the dirty flag after redisplaying it as it may exist in other
+  contexts. When we have redisplayed we need to know which glyphs to
+  reset the dirty flags on - the glyph_cachels give us a nice list we
+  can iterate through doing this.  */
 void
 mark_glyph_cachels (glyph_cachel_dynarr *elements)
 {
@@ -4195,23 +4248,31 @@ int find_matching_subwindow (struct frame* f, int x, int y, int width, int heigh
  *****************************************************************************/
 
 /* update the displayed characteristics of a subwindow */
-static void
+void
 update_subwindow (Lisp_Object subwindow)
 {
   Lisp_Image_Instance* ii = XIMAGE_INSTANCE (subwindow);
 
-  if (!IMAGE_INSTANCE_TYPE (ii) == IMAGE_WIDGET
+  if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_WIDGET
       ||
-      NILP (IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)))
-    return;
+      IMAGE_INSTANCE_TYPE (ii) == IMAGE_LAYOUT)
+    {
+      if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_WIDGET)
+         update_widget (subwindow);
+      /* Reset the changed flags. */
+      IMAGE_INSTANCE_WIDGET_FACE_CHANGED (ii) = 0;
+      IMAGE_INSTANCE_WIDGET_PERCENT_CHANGED (ii) = 0;
+      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 0;
+      IMAGE_INSTANCE_TEXT_CHANGED (ii) = 0;
+    }
+  else if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW
+          &&
+          !NILP (IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)))
+    {
+      MAYBE_DEVMETH (XDEVICE (ii->device), update_subwindow, (ii));
+    }
 
-  MAYBE_DEVMETH (XDEVICE (ii->device), update_subwindow, (ii));
-  /* We must update the window's size as it may have been changed by
-     the the layout routines. We also do this here so that explicit resizing
-     from lisp does not result in synchronous updates. */
-  MAYBE_DEVMETH (XDEVICE (ii->device), resize_subwindow, (ii,
-                IMAGE_INSTANCE_WIDTH (ii),
-                IMAGE_INSTANCE_HEIGHT (ii)));
+  IMAGE_INSTANCE_SIZE_CHANGED (ii) = 0;
 }
 
 /* Update all the subwindows on a frame. */
@@ -4220,6 +4281,8 @@ update_frame_subwindows (struct frame *f)
 {
   int elt;
 
+  /* #### Checking all of these might be overkill now that we update
+     subwindows in the actual redisplay code. */
   if (f->subwindows_changed || f->subwindows_state_changed || f->faces_changed)
     for (elt = 0; elt < Dynarr_length (f->subwindow_cachels); elt++)
       {
@@ -4295,6 +4358,7 @@ void map_subwindow (Lisp_Object subwindow, int x, int y,
   cachel->height = dga->height;
   cachel->being_displayed = 1;
 
+#if 0
   /* This forces any pending display changes to happen to the image
      before we show it. I'm not sure whether or not we need mark as
      clean here, but for now we will. */
@@ -4303,6 +4367,7 @@ void map_subwindow (Lisp_Object subwindow, int x, int y,
       update_subwindow (subwindow);
       IMAGE_INSTANCE_DIRTYP (ii) = 0;
     }
+#endif
 
   MAYBE_DEVMETH (XDEVICE (ii->device), map_subwindow, (ii, x, y, dga));
 }
@@ -4387,23 +4452,26 @@ If a value is nil that parameter is not changed.
        (subwindow, width, height))
 {
   int neww, newh;
+  Lisp_Image_Instance* ii;
 
   CHECK_SUBWINDOW_IMAGE_INSTANCE (subwindow);
+  ii = XIMAGE_INSTANCE (subwindow);
 
   if (NILP (width))
-    neww = XIMAGE_INSTANCE_WIDTH (subwindow);
+    neww = IMAGE_INSTANCE_WIDTH (ii);
   else
     neww = XINT (width);
 
   if (NILP (height))
-    newh = XIMAGE_INSTANCE_HEIGHT (subwindow);
+    newh = IMAGE_INSTANCE_HEIGHT (ii);
   else
     newh = XINT (height);
 
   /* The actual resizing gets done asychronously by
      update_subwindow. */
-  XIMAGE_INSTANCE_HEIGHT (subwindow) = newh;
-  XIMAGE_INSTANCE_WIDTH (subwindow) = neww;
+  IMAGE_INSTANCE_HEIGHT (ii) = newh;
+  IMAGE_INSTANCE_WIDTH (ii) = neww;
+  IMAGE_INSTANCE_SIZE_CHANGED (ii) = 1;
 
   /* need to update the cachels as redisplay will not do this */
   update_subwindow_cachel (subwindow);
@@ -4542,7 +4610,9 @@ Don't use this.
                 also might not. */
              MARK_DEVICE_FRAMES_GLYPHS_CHANGED
                (XDEVICE (IMAGE_INSTANCE_DEVICE (ii)));
-             MARK_IMAGE_INSTANCE_CHANGED (ii);
+             /* Cascade dirtiness so that we can have an animated glyph in a layout 
+                for instance. */
+             set_image_instance_dirty_p (value, 1);
            }
        }
     }
index 2385eba..771ce7a 100644 (file)
@@ -143,6 +143,8 @@ struct image_instantiator_methods
   Lisp_Object (*set_property_method) (Lisp_Object image_instance,
                                      Lisp_Object property,
                                      Lisp_Object val);
+  /* Asynchronously update properties. */
+  void (*update_method) (Lisp_Object image_instance);
 
   /* Find out the desired geometry, as given by disp, of this image
    instance. Actual geometry is stored in the appropriate slots in the
@@ -340,8 +342,8 @@ int invalidate_glyph_geometry_maybe (Lisp_Object glyph_or_ii, struct window* w);
 DECLARE_DOESNT_RETURN (incompatible_image_types (Lisp_Object instantiator,
                                                  int given_dest_mask,
                                                  int desired_dest_mask));
-DECLARE_DOESNT_RETURN (signal_image_error (CONST char *, Lisp_Object));
-DECLARE_DOESNT_RETURN (signal_image_error_2 (CONST char *, Lisp_Object, Lisp_Object));
+DECLARE_DOESNT_RETURN (signal_image_error (const char *, Lisp_Object));
+DECLARE_DOESNT_RETURN (signal_image_error_2 (const char *, Lisp_Object, Lisp_Object));
 
 /************************************************************************/
 /*                     Image Specifier Object                          */
@@ -482,11 +484,15 @@ struct Lisp_Image_Instance
   Lisp_Object name;
   /* The glyph from which we were instantiated. This is a weak
      reference. */
-  Lisp_Object glyph;
+  Lisp_Object parent;
   enum image_instance_type type;
   unsigned int x_offset, y_offset;     /* for layout purposes */
   unsigned int width, height;
   unsigned int dirty : 1;
+  unsigned int size_changed : 1;
+  unsigned int text_changed : 1;
+  unsigned int layout_changed : 1; 
+
   union
   {
     struct
@@ -525,6 +531,10 @@ struct Lisp_Image_Instance
       Lisp_Object type;
       Lisp_Object props;       /* properties or border*/
       Lisp_Object items;       /* a list of gui_items or children */
+      /* Change flags to augment dirty. */
+      unsigned int face_changed : 1;
+      unsigned int items_changed : 1;
+      unsigned int percent_changed : 1;
     } subwindow;
   } u;
 
@@ -543,7 +553,8 @@ struct Lisp_Image_Instance
 /* Accessor macros. */
 #define IMAGE_INSTANCE_DEVICE(i) ((i)->device)
 #define IMAGE_INSTANCE_NAME(i) ((i)->name)
-#define IMAGE_INSTANCE_GLYPH(i) ((i)->glyph)
+#define IMAGE_INSTANCE_PARENT(i) ((i)->parent)
+#define IMAGE_INSTANCE_GLYPH(i) (image_instance_parent_glyph(i))
 #define IMAGE_INSTANCE_TYPE(i) ((i)->type)
 #define IMAGE_INSTANCE_XOFFSET(i) ((i)->x_offset)
 #define IMAGE_INSTANCE_YOFFSET(i) ((i)->y_offset)
@@ -553,9 +564,24 @@ struct Lisp_Image_Instance
  ((IMAGE_INSTANCE_TYPE (i) == IMAGE_MONO_PIXMAP)       \
   || (IMAGE_INSTANCE_TYPE (i) == IMAGE_COLOR_PIXMAP))
 #define IMAGE_INSTANCE_DIRTYP(i) ((i)->dirty)
+#define IMAGE_INSTANCE_NEEDS_LAYOUT(i) \
+  (IMAGE_INSTANCE_DIRTYP (i) && IMAGE_INSTANCE_LAYOUT_CHANGED (i))
 #define IMAGE_INSTANCE_FACE(i) \
   XGLYPH_FACE (IMAGE_INSTANCE_GLYPH (i))
 
+/* Changed flags */
+#define IMAGE_INSTANCE_TEXT_CHANGED(i) ((i)->text_changed)
+#define IMAGE_INSTANCE_SIZE_CHANGED(i) ((i)->size_changed)
+#define IMAGE_INSTANCE_WIDGET_FACE_CHANGED(i) \
+  ((i)->u.subwindow.face_changed)
+#define IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED(i) \
+  ((i)->u.subwindow.items_changed)
+#define IMAGE_INSTANCE_WIDGET_PERCENT_CHANGED(i) \
+  ((i)->u.subwindow.percent_changed)
+#define IMAGE_INSTANCE_LAYOUT_CHANGED(i) \
+  ((i)->layout_changed)
+
+/* Text properties */
 #define IMAGE_INSTANCE_TEXT_STRING(i) ((i)->u.text.string)
 #define IMAGE_INSTANCE_TEXT_WIDTH(i) \
   IMAGE_INSTANCE_WIDTH(i)
@@ -565,6 +591,7 @@ struct Lisp_Image_Instance
 #define IMAGE_INSTANCE_TEXT_ASCENT(i) \
   (IMAGE_INSTANCE_TEXT_HEIGHT(i) - IMAGE_INSTANCE_TEXT_DESCENT(i))
 
+/* Pixmap properties */
 #define IMAGE_INSTANCE_PIXMAP_WIDTH(i) \
   IMAGE_INSTANCE_WIDTH(i)
 #define IMAGE_INSTANCE_PIXMAP_HEIGHT(i) \
@@ -582,6 +609,7 @@ struct Lisp_Image_Instance
 #define IMAGE_INSTANCE_PIXMAP_MAXSLICE(i) ((i)->u.pixmap.maxslice)
 #define IMAGE_INSTANCE_PIXMAP_TIMEOUT(i) ((i)->u.pixmap.timeout)
 
+/* Subwindow properties */
 #define IMAGE_INSTANCE_SUBWINDOW_WIDTH(i) \
  IMAGE_INSTANCE_WIDTH(i)
 #define IMAGE_INSTANCE_SUBWINDOW_HEIGHT(i) \
@@ -599,6 +627,7 @@ struct Lisp_Image_Instance
 #define IMAGE_INSTANCE_SUBWINDOW_JUSTIFY(i) \
 ((i)->u.subwindow.justification)
 
+/* Widget properties */
 #define IMAGE_INSTANCE_WIDGET_WIDTH(i) \
   IMAGE_INSTANCE_WIDTH(i)
 #define IMAGE_INSTANCE_WIDGET_HEIGHT(i) \
@@ -618,6 +647,7 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) :    \
   IMAGE_INSTANCE_WIDGET_ITEMS (i))
 #define IMAGE_INSTANCE_WIDGET_TEXT(i) XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEM (i))->name
 
+/* Layout properties */
 #define IMAGE_INSTANCE_LAYOUT_CHILDREN(i) ((i)->u.subwindow.items)
 #define IMAGE_INSTANCE_LAYOUT_BORDER(i) ((i)->u.subwindow.props)
 
@@ -627,6 +657,8 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) :    \
   IMAGE_INSTANCE_NAME (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_GLYPH(i) \
   IMAGE_INSTANCE_GLYPH (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_PARENT(i) \
+  IMAGE_INSTANCE_PARENT (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_TYPE(i) \
   IMAGE_INSTANCE_TYPE (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_XOFFSET(i) \
@@ -635,6 +667,8 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) :    \
   IMAGE_INSTANCE_YOFFSET (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_DIRTYP(i) \
   IMAGE_INSTANCE_DIRTYP (XIMAGE_INSTANCE (i))
+#define XIMAGE_INSTANCE_NEEDS_LAYOUT(i) \
+  IMAGE_INSTANCE_NEEDS_LAYOUT (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_WIDTH(i) \
   IMAGE_INSTANCE_WIDTH (XIMAGE_INSTANCE (i))
 #define XIMAGE_INSTANCE_HEIGHT(i) \
@@ -729,7 +763,7 @@ Lisp_Object pixmap_to_lisp_data (Lisp_Object name, int ok_if_data_invalid);
 #ifdef HAVE_WINDOW_SYSTEM
 Lisp_Object bitmap_to_lisp_data (Lisp_Object name, int *xhot, int *yhot,
                                 int ok_if_data_invalid);
-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);
 Lisp_Object xbm_mask_file_munging (Lisp_Object alist, Lisp_Object file,
@@ -945,6 +979,9 @@ void map_subwindow (Lisp_Object subwindow, int x, int y,
                    struct display_glyph_area *dga);
 void update_frame_subwindows (struct frame *f);
 int find_matching_subwindow (struct frame* f, int x, int y, int width, int height);
+void update_widget (Lisp_Object widget);
+void update_subwindow (Lisp_Object subwindow);
+Lisp_Object image_instance_parent_glyph (struct Lisp_Image_Instance*);
 
 struct expose_ignore
 {
index 56badba..472bd3f 100644 (file)
@@ -25,8 +25,6 @@
 # define STDC_HEADERS
 #endif
 
-#define __const const
-
 \f
 /* DO NOT EDIT THIS FILE -- it is automagically generated.  -*- C -*- */
 /* Bwaa-haa-haa!  Not a chance that this is actually true! */
@@ -273,7 +271,7 @@ extern struct mstats mstats __P ((void));
 
 /* Call WARNFUN with a warning message when memory usage is high.  */
 extern void memory_warnings __P ((__ptr_t __start,
-                                 void (*__warnfun) __P ((__const char *))));
+                                 void (*__warnfun) __P ((const char *))));
 
 
 #if 0 /* unused in this file, and conflicting prototypes anyway */
index 67c84b0..029d616 100644 (file)
@@ -82,25 +82,69 @@ otherwise it is an integer representing a ShowWindow flag:
 */
        (operation, document, parameters, show_flag))
 {
-  Lisp_Object current_dir;
+  /* Encode filename and current directory.  */
+  Lisp_Object current_dir = Ffile_name_directory (document);
+  char* path = NULL;
+  char* doc = NULL;
+  Extbyte* f=0;
+  int ret;
+  struct gcpro gcpro1, gcpro2;
 
   CHECK_STRING (document);
 
-  /* Encode filename and current directory.  */
-  current_dir = current_buffer->directory;
-  if ((int) ShellExecute (NULL,
-                         (STRINGP (operation) ?
-                          XSTRING (operation)->data : NULL),
-                         XSTRING (document)->data,
-                         (STRINGP (parameters) ?
-                          XSTRING (parameters)->data : NULL),
-                         XSTRING (current_dir)->data,
-                         (INTP (show_flag) ?
-                          XINT (show_flag) : SW_SHOWDEFAULT))
-      > 32)
+  /* Just get the filename if we were given it. */
+  document = Ffile_name_nondirectory (document);
+
+  if (NILP (current_dir))
+    current_dir = current_buffer->directory;
+
+  GCPRO2 (current_dir, document);
+
+  /* Use mule and cygwin-safe APIs top get at file data. */
+  if (STRINGP (current_dir))
+    {
+      TO_EXTERNAL_FORMAT (LISP_STRING, current_dir,
+                         C_STRING_ALLOCA, f,
+                         Qfile_name);
+#ifdef __CYGWIN32__
+      CYGWIN_WIN32_PATH (f, path);
+#else
+      path = f;
+#endif
+    }
+
+  if (STRINGP (document))
+    {
+      TO_EXTERNAL_FORMAT (LISP_STRING, document,
+                         C_STRING_ALLOCA, f,
+                         Qfile_name);
+      doc = f;
+    }
+
+  UNGCPRO;
+
+  ret = (int) ShellExecute (NULL,
+                           (STRINGP (operation) ?
+                            XSTRING_DATA (operation) : NULL),
+                           doc, 
+                           (STRINGP (parameters) ?
+                            XSTRING_DATA (parameters) : NULL),
+                           path,
+                           (INTP (show_flag) ?
+                            XINT (show_flag) : SW_SHOWDEFAULT));
+
+  if (ret > 32)
     return Qt;
+  
+  if (ret == ERROR_FILE_NOT_FOUND || ret == SE_ERR_FNF)
+    signal_simple_error ("file not found", document);
+  else if (ret == ERROR_PATH_NOT_FOUND || ret == SE_ERR_PNF)
+    signal_simple_error ("path not found", current_dir);
+  else if (ret == ERROR_BAD_FORMAT)
+    signal_simple_error ("bad executable format", document);
+  else
+    error ("internal error");
 
-  error ("ShellExecute failed");
   return Qnil;
 }
 
index d4b0eaf..58fb4f3 100644 (file)
@@ -275,9 +275,9 @@ popup_selection_callback (Widget widget, LWLIB_ID ignored_id,
 #endif
 
 char *
-menu_separator_style (CONST char *s)
+menu_separator_style (const char *s)
 {
-  CONST char *p;
+  const char *p;
   char first;
 
   if (!s || s[0] == '\0')
@@ -346,7 +346,7 @@ button_item_to_widget_value (Lisp_Object gui_item, widget_value *wv,
 
   if (!NILP (pgui->suffix))
     {
-      CONST char *const_bogosity;
+      const char *const_bogosity;
       Lisp_Object suffix2;
 
       /* Shortcut to avoid evaluating suffix each time */
index 640b296..d8e581a 100644 (file)
@@ -72,7 +72,7 @@ int button_item_to_widget_value (Lisp_Object desc, widget_value *wv,
                                 int allow_text_field_p, int no_keys_p);
 widget_value * gui_items_to_widget_values (Lisp_Object items);
 Lisp_Object menu_name_to_accelerator (char *name);
-char *menu_separator_style (CONST char *s);
+char *menu_separator_style (const char *s);
 Lisp_Object widget_value_unwind (Lisp_Object closure);
 
 #endif /* INCLUDED_gui_x_h_ */
index 12d4684..d00df80 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -52,9 +52,9 @@ See `popup-menu' and `popup-dialog-box'.
 #endif /* HAVE_POPUPS */
 
 int
-separator_string_p (CONST char *s)
+separator_string_p (const char *s)
 {
-  CONST char *p;
+  const char *p;
   char first;
 
   if (!s || s[0] == '\0')
@@ -299,7 +299,7 @@ gui_item_accelerator (Lisp_Object gui_item)
     return pgui->accelerator;
 
   else
-    return pgui->name;
+    return gui_name_accelerator (pgui->name);
 }
 
 Lisp_Object
@@ -446,7 +446,7 @@ gui_item_display_flush_right (Lisp_Object gui_item,
       CHECK_STRING (pgui_item->keys);
       if (XSTRING_LENGTH (pgui_item->keys) > buf_len)
        signal_too_long_error (pgui_item->name);
-      strcpy (buf, (CONST char *) XSTRING_DATA (pgui_item->keys));
+      strcpy (buf, (const char *) XSTRING_DATA (pgui_item->keys));
       return XSTRING_LENGTH (pgui_item->keys);
     }
 
index 20b0d5a..cdc4a39 100644 (file)
--- a/src/gui.h
+++ b/src/gui.h
@@ -27,7 +27,7 @@ Boston, MA 02111-1307, USA.  */
 #ifndef INCLUDED_gui_h_
 #define INCLUDED_gui_h_
 
-int separator_string_p (CONST char *s);
+int separator_string_p (const char *s);
 void get_gui_callback (Lisp_Object, Lisp_Object *, Lisp_Object *);
 
 extern int popup_up_p;
index 8c6a0ea..71e3b44 100644 (file)
@@ -34,10 +34,10 @@ Boston, MA 02111-1307, USA.  */
 static void rehash (hentry *harray, struct hash_table *ht, hash_size_t size);
 
 unsigned long
-memory_hash (CONST void *xv, size_t size)
+memory_hash (const void *xv, size_t size)
 {
   unsigned int h = 0;
-  unsigned CONST char *x = (unsigned CONST char *) xv;
+  unsigned const char *x = (unsigned const char *) xv;
 
   if (!x) return 0;
 
@@ -59,7 +59,7 @@ hash_table_size (size_t requested_size)
   /* Return some prime near, but greater than or equal to, SIZE.
      Decades from the time of writing, someone will have a system large
      enough that the list below will be too short... */
-  static CONST size_t primes [] =
+  static const size_t primes [] =
   {
     19, 29, 41, 59, 79, 107, 149, 197, 263, 347, 457, 599, 787, 1031,
     1361, 1777, 2333, 3037, 3967, 5167, 6719, 8737, 11369, 14783,
@@ -85,8 +85,8 @@ hash_table_size (size_t requested_size)
   return primes [high];
 }
 
-CONST void *
-gethash (CONST void *key, struct hash_table *hash_table, CONST void **ret_value)
+const void *
+gethash (const void *key, struct hash_table *hash_table, const void **ret_value)
 {
   if (!key)
     {
@@ -104,7 +104,7 @@ gethash (CONST void *key, struct hash_table *hash_table, CONST void **ret_value)
        (unsigned long) key;
       unsigned int hcode = hcode_initial % size;
       hentry *e = &harray [hcode];
-      CONST void *e_key = e->key;
+      const void *e_key = e->key;
 
       if (e_key ?
          KEYS_DIFFER_P (e_key, key, test_function) :
@@ -188,7 +188,7 @@ grow_hash_table (struct hash_table *hash_table, hash_size_t new_size)
 }
 
 void
-puthash (CONST void *key, void *contents, struct hash_table *hash_table)
+puthash (const void *key, void *contents, struct hash_table *hash_table)
 {
   if (!key)
     {
@@ -207,8 +207,8 @@ puthash (CONST void *key, void *contents, struct hash_table *hash_table)
       unsigned int hcode = hcode_initial % size;
       size_t h2 = size - 2;
       unsigned int incr = 1 + (hcode_initial % h2);
-      CONST void *e_key = harray [hcode].key;
-      CONST void *oldcontents;
+      const void *e_key = harray [hcode].key;
+      const void *oldcontents;
 
       if (e_key && KEYS_DIFFER_P (e_key, key, test_function))
        {
@@ -269,7 +269,7 @@ rehash (hentry *harray, struct hash_table *hash_table, hash_size_t size)
 }
 
 void
-remhash (CONST void *key, struct hash_table *hash_table)
+remhash (const void *key, struct hash_table *hash_table)
 {
   if (!key)
     {
@@ -287,7 +287,7 @@ remhash (CONST void *key, struct hash_table *hash_table)
        ((unsigned long) key);
       unsigned int hcode = hcode_initial % size;
       hentry *e = &harray [hcode];
-      CONST void *e_key = e->key;
+      const void *e_key = e->key;
 
       if (e_key ?
          KEYS_DIFFER_P (e_key, key, test_function) :
index b480267..4e4787c 100644 (file)
@@ -22,12 +22,12 @@ Boston, MA 02111-1307, USA.  */
 
 typedef struct
 {
-  CONST void *key;
+  const void *key;
   void      *contents;
 } hentry;
 
-typedef int           (*hash_table_test_function) (CONST void *, CONST void *);
-typedef unsigned long (*hash_table_hash_function) (CONST void *);
+typedef int           (*hash_table_test_function) (const void *, const void *);
+typedef unsigned long (*hash_table_hash_function) (const void *);
 typedef size_t hash_size_t;
 
 struct hash_table
@@ -57,18 +57,18 @@ void clrhash (struct hash_table *hash_table);
 void free_hash_table (struct hash_table *hash_table);
 
 /* Returns a hentry whose key is 0 if the entry does not exist in HASH-TABLE */
-CONST void *gethash (CONST void *key, struct hash_table *hash_table,
-                    CONST void **ret_value);
+const void *gethash (const void *key, struct hash_table *hash_table,
+                    const void **ret_value);
 
 /* KEY should be different from 0 */
-void puthash (CONST void *key, void *contents, struct hash_table *hash_table);
+void puthash (const void *key, void *contents, struct hash_table *hash_table);
 
 /* delete the entry with key KEY */
-void remhash (CONST void *key, struct hash_table *hash_table);
+void remhash (const void *key, struct hash_table *hash_table);
 
-typedef int (*maphash_function) (CONST void* key, void* contents, void* arg);
+typedef int (*maphash_function) (const void* key, void* contents, void* arg);
 
-typedef int (*remhash_predicate) (CONST void* key, CONST void* contents,
+typedef int (*remhash_predicate) (const void* key, const void* contents,
                                   void* arg);
 
 /* Call MF (key, contents, arg) for every entry in HASH-TABLE */
index 044e409..fddbd25 100644 (file)
@@ -609,9 +609,9 @@ EmacsXtCvtStringToXIMStyles (
 #define STYLE_INFO(style) { style, #style, sizeof(#style) }
   static struct XIMStyleInfo
   {
-    CONST XIMStyle style;
-    CONST char   * CONST name;
-    CONST int      namelen;
+    const XIMStyle style;
+    const char   * const name;
+    const int      namelen;
   } emacs_XIMStyleInfo[] = {
     STYLE_INFO (XIMPreeditPosition|XIMStatusArea),
     STYLE_INFO (XIMPreeditPosition|XIMStatusNothing),
@@ -627,9 +627,9 @@ EmacsXtCvtStringToXIMStyles (
 
   char *s   = (char *) fromVal->addr;
   char *end = s + fromVal->size;
-  XIMStyles * CONST p = (XIMStyles *) toVal->addr;
-  CONST char * CONST delimiter = " \t\n\r:;," ;
-  CONST int  max_styles = XtNumber(emacs_XIMStyleInfo);
+  XIMStyles * const p = (XIMStyles *) toVal->addr;
+  const char * const delimiter = " \t\n\r:;," ;
+  const int  max_styles = XtNumber(emacs_XIMStyleInfo);
   int i;
   char *c;
 
index d34103c..22dee0f 100644 (file)
@@ -304,10 +304,10 @@ do                                                \
    the equivalent length in characters. */
 
 Charcount
-bytecount_to_charcount (CONST Bufbyte *ptr, Bytecount len)
+bytecount_to_charcount (const Bufbyte *ptr, Bytecount len)
 {
   Charcount count = 0;
-  CONST Bufbyte *end = ptr + len;
+  const Bufbyte *end = ptr + len;
 
 #if (LONGBITS == 32 || LONGBITS == 64)
 
@@ -331,11 +331,11 @@ bytecount_to_charcount (CONST Bufbyte *ptr, Bytecount len)
       /* Determine the section in the middle of the string that's
         amenable to this treatment.  Everything has to be aligned
         on CPU word boundaries. */
-      CONST Bufbyte *aligned_ptr =
-       (CONST Bufbyte *) (((unsigned long) (ptr + LONG_BYTES - 1)) &
+      const Bufbyte *aligned_ptr =
+       (const Bufbyte *) (((unsigned long) (ptr + LONG_BYTES - 1)) &
                           ALIGN_MASK);
-      CONST Bufbyte *aligned_end =
-       (CONST Bufbyte *) (((unsigned long) end) & ALIGN_MASK);
+      const Bufbyte *aligned_end =
+       (const Bufbyte *) (((unsigned long) end) & ALIGN_MASK);
 
       /* Handle unaligned stuff at the beginning. */
       while (ptr < aligned_ptr)
@@ -378,9 +378,9 @@ bytecount_to_charcount (CONST Bufbyte *ptr, Bytecount len)
    the equivalent length in bytes. */
 
 Bytecount
-charcount_to_bytecount (CONST Bufbyte *ptr, Charcount len)
+charcount_to_bytecount (const Bufbyte *ptr, Charcount len)
 {
-  CONST Bufbyte *newptr = ptr;
+  const Bufbyte *newptr = ptr;
 
   while (len > 0)
     {
@@ -2371,7 +2371,7 @@ prepare_to_modify_buffer (struct buffer *buf, Bufpos start, Bufpos end,
 /************************************************************************/
 
 void
-fixup_internal_substring (CONST Bufbyte *nonreloc, Lisp_Object reloc,
+fixup_internal_substring (const Bufbyte *nonreloc, Lisp_Object reloc,
                          Bytecount offset, Bytecount *len)
 {
   assert ((nonreloc && NILP (reloc)) || (!nonreloc && STRINGP (reloc)));
@@ -2379,7 +2379,7 @@ fixup_internal_substring (CONST Bufbyte *nonreloc, Lisp_Object reloc,
   if (*len < 0)
     {
       if (nonreloc)
-       *len = strlen ((CONST char *) nonreloc) - offset;
+       *len = strlen ((const char *) nonreloc) - offset;
       else
        *len = XSTRING_LENGTH (reloc) - offset;
     }
@@ -2413,7 +2413,7 @@ fixup_internal_substring (CONST Bufbyte *nonreloc, Lisp_Object reloc,
 
 Charcount
 buffer_insert_string_1 (struct buffer *buf, Bufpos pos,
-                       CONST Bufbyte *nonreloc, Lisp_Object reloc,
+                       const Bufbyte *nonreloc, Lisp_Object reloc,
                        Bytecount offset, Bytecount length,
                        int flags)
 {
@@ -2578,7 +2578,7 @@ buffer_insert_string_1 (struct buffer *buf, Bufpos pos,
 
 Charcount
 buffer_insert_raw_string_1 (struct buffer *buf, Bufpos pos,
-                           CONST Bufbyte *nonreloc, Bytecount length,
+                           const Bufbyte *nonreloc, Bytecount length,
                            int flags)
 {
   /* This function can GC */
@@ -2602,12 +2602,12 @@ buffer_insert_lisp_string_1 (struct buffer *buf, Bufpos pos, Lisp_Object str,
 /* Insert the null-terminated string S (in external format). */
 
 Charcount
-buffer_insert_c_string_1 (struct buffer *buf, Bufpos pos, CONST char *s,
+buffer_insert_c_string_1 (struct buffer *buf, Bufpos pos, const char *s,
                          int flags)
 {
   /* This function can GC */
-  CONST char *translated = GETTEXT (s);
-  return buffer_insert_string_1 (buf, pos, (CONST Bufbyte *) translated, Qnil,
+  const char *translated = GETTEXT (s);
+  return buffer_insert_string_1 (buf, pos, (const Bufbyte *) translated, Qnil,
                                 0, strlen (translated), flags);
 }
 
@@ -3073,14 +3073,14 @@ barf_if_buffer_read_only (struct buffer *buf, Bufpos from, Bufpos to)
 }
 
 void
-find_charsets_in_bufbyte_string (unsigned char *charsets, CONST Bufbyte *str,
+find_charsets_in_bufbyte_string (unsigned char *charsets, const Bufbyte *str,
                                 Bytecount len)
 {
 #ifndef MULE
   /* Telescope this. */
   charsets[0] = 1;
 #else
-  CONST Bufbyte *strend = str + len;
+  const Bufbyte *strend = str + len;
   memset (charsets, 0, NUM_LEADING_BYTES);
 
   while (str < strend)
@@ -3092,7 +3092,7 @@ find_charsets_in_bufbyte_string (unsigned char *charsets, CONST Bufbyte *str,
 }
 
 void
-find_charsets_in_emchar_string (unsigned char *charsets, CONST Emchar *str,
+find_charsets_in_emchar_string (unsigned char *charsets, const Emchar *str,
                                Charcount len)
 {
 #ifndef MULE
@@ -3110,10 +3110,10 @@ find_charsets_in_emchar_string (unsigned char *charsets, CONST Emchar *str,
 }
 
 int
-bufbyte_string_displayed_columns (CONST Bufbyte *str, Bytecount len)
+bufbyte_string_displayed_columns (const Bufbyte *str, Bytecount len)
 {
   int cols = 0;
-  CONST Bufbyte *end = str + len;
+  const Bufbyte *end = str + len;
 
   while (str < end)
     {
@@ -3130,7 +3130,7 @@ bufbyte_string_displayed_columns (CONST Bufbyte *str, Bytecount len)
 }
 
 int
-emchar_string_displayed_columns (CONST Emchar *str, Charcount len)
+emchar_string_displayed_columns (const Emchar *str, Charcount len)
 {
 #ifdef MULE
   int cols = 0;
@@ -3148,10 +3148,10 @@ emchar_string_displayed_columns (CONST Emchar *str, Charcount len)
 /* NOTE: Does not reset the Dynarr. */
 
 void
-convert_bufbyte_string_into_emchar_dynarr (CONST Bufbyte *str, Bytecount len,
+convert_bufbyte_string_into_emchar_dynarr (const Bufbyte *str, Bytecount len,
                                           Emchar_dynarr *dyn)
 {
-  CONST Bufbyte *strend = str + len;
+  const Bufbyte *strend = str + len;
 
   while (str < strend)
     {
@@ -3162,10 +3162,10 @@ convert_bufbyte_string_into_emchar_dynarr (CONST Bufbyte *str, Bytecount len,
 }
 
 Charcount
-convert_bufbyte_string_into_emchar_string (CONST Bufbyte *str, Bytecount len,
+convert_bufbyte_string_into_emchar_string (const Bufbyte *str, Bytecount len,
                                           Emchar *arr)
 {
-  CONST Bufbyte *strend = str + len;
+  const Bufbyte *strend = str + len;
   Charcount newlen = 0;
   while (str < strend)
     {
index 6258126..70452ae 100644 (file)
@@ -38,16 +38,16 @@ void end_multiple_change (struct buffer *buf, int count);
 #define INSDEL_NO_LOCKING 2
 
 Charcount buffer_insert_string_1 (struct buffer *buf, Bufpos pos,
-                                 CONST Bufbyte *nonreloc, Lisp_Object reloc,
+                                 const Bufbyte *nonreloc, Lisp_Object reloc,
                                  Bytecount offset, Bytecount length,
                                  int flags);
 Charcount buffer_insert_raw_string_1 (struct buffer *buf, Bufpos pos,
-                                     CONST Bufbyte *nonreloc,
+                                     const Bufbyte *nonreloc,
                                      Bytecount length, int flags);
 Charcount buffer_insert_lisp_string_1 (struct buffer *buf, Bufpos pos,
                                       Lisp_Object str, int flags);
 Charcount buffer_insert_c_string_1 (struct buffer *buf, Bufpos pos,
-                                   CONST char *s, int flags);
+                                   const char *s, int flags);
 Charcount buffer_insert_emacs_char_1 (struct buffer *buf, Bufpos pos,
                                      Emchar ch, int flags);
 Charcount buffer_insert_c_char_1 (struct buffer *buf, Bufpos pos, char c,
@@ -142,7 +142,7 @@ void buffer_reset_changes (struct buffer *buf);
 Memind do_marker_adjustment (Memind mpos, Memind from,
                             Memind to, Bytecount amount);
 
-void fixup_internal_substring (CONST Bufbyte *nonreloc,
+void fixup_internal_substring (const Bufbyte *nonreloc,
                               Lisp_Object reloc,
                               Bytecount offset, Bytecount *len);
 
index 7c06c74..a8a14d8 100644 (file)
@@ -45,7 +45,7 @@ Atom wc_atom;
 /* init_input -- Set things up for i18n level 4 input.
 */
 void
-init_input (CONST char *res_name, CONST char *res_class, Display *display)
+init_input (const char *res_name, const char *res_class, Display *display)
 {
   XIMStyles *styles;
   unsigned short i;
index 5c9162b..49a9fec 100644 (file)
@@ -436,7 +436,7 @@ control_meta_superify (Lisp_Object frob, unsigned int modifiers)
 }
 
 static Lisp_Object
-make_key_description (CONST struct key_data *key, int prettify)
+make_key_description (const struct key_data *key, int prettify)
 {
   Lisp_Object keysym = key->keysym;
   unsigned int modifiers = key->modifiers;
@@ -464,7 +464,7 @@ make_key_description (CONST struct key_data *key, int prettify)
 
 static Lisp_Object
 raw_lookup_key (Lisp_Object keymap,
-                CONST struct key_data *raw_keys, int raw_keys_count,
+                const struct key_data *raw_keys, int raw_keys_count,
                 int keys_so_far, int accept_default);
 
 /* Relies on caller to gc-protect args */
@@ -645,7 +645,7 @@ create_bucky_submap (Lisp_Keymap *k, unsigned int modifiers,
 
 /* Relies on caller to gc-protect keymap, keysym, value */
 static void
-keymap_store (Lisp_Object keymap, CONST struct key_data *key,
+keymap_store (Lisp_Object keymap, const struct key_data *key,
               Lisp_Object value)
 {
   Lisp_Object keysym = key->keysym;
@@ -1100,7 +1100,7 @@ get_keyelt (Lisp_Object object, int accept_default)
 }
 
 static Lisp_Object
-keymap_lookup_1 (Lisp_Object keymap, CONST struct key_data *key,
+keymap_lookup_1 (Lisp_Object keymap, const struct key_data *key,
                  int accept_default)
 {
   /* This function can GC */
@@ -1596,7 +1596,7 @@ event_matches_key_specifier_p (Lisp_Event *event, Lisp_Object key_specifier)
 }
 
 static int
-meta_prefix_char_p (CONST struct key_data *key)
+meta_prefix_char_p (const struct key_data *key)
 {
   Lisp_Event event;
 
@@ -1992,7 +1992,7 @@ these features.
 struct raw_lookup_key_mapper_closure
 {
   int remaining;
-  CONST struct key_data *raw_keys;
+  const struct key_data *raw_keys;
   int raw_keys_count;
   int keys_so_far;
   int accept_default;
@@ -2003,7 +2003,7 @@ static Lisp_Object raw_lookup_key_mapper (Lisp_Object k, void *);
 /* Caller should gc-protect args (keymaps may autoload) */
 static Lisp_Object
 raw_lookup_key (Lisp_Object keymap,
-                CONST struct key_data *raw_keys, int raw_keys_count,
+                const struct key_data *raw_keys, int raw_keys_count,
                 int keys_so_far, int accept_default)
 {
   /* This function can GC */
@@ -2026,7 +2026,7 @@ raw_lookup_key_mapper (Lisp_Object k, void *arg)
   int accept_default = c->accept_default;
   int remaining = c->remaining;
   int keys_so_far = c->keys_so_far;
-  CONST struct key_data *raw_keys = c->raw_keys;
+  const struct key_data *raw_keys = c->raw_keys;
   Lisp_Object cmd;
 
   if (! meta_prefix_char_p (&(raw_keys[0])))
@@ -2741,7 +2741,7 @@ Return the current global keymap.
 
 struct map_keymap_unsorted_closure
 {
-  void (*fn) (CONST struct key_data *, Lisp_Object binding, void *arg);
+  void (*fn) (const struct key_data *, Lisp_Object binding, void *arg);
   void *arg;
   unsigned int modifiers;
 };
@@ -2880,7 +2880,7 @@ map_keymap_sort_predicate (Lisp_Object obj1, Lisp_Object obj2,
 static void
 map_keymap_sorted (Lisp_Object keymap_table,
                    unsigned int modifiers,
-                   void (*function) (CONST struct key_data *key,
+                   void (*function) (const struct key_data *key,
                                      Lisp_Object binding,
                                      void *map_keymap_sorted_closure),
                    void *map_keymap_sorted_closure)
@@ -2925,7 +2925,7 @@ map_keymap_sorted (Lisp_Object keymap_table,
 
 /* used by Fmap_keymap() */
 static void
-map_keymap_mapper (CONST struct key_data *key,
+map_keymap_mapper (const struct key_data *key,
                    Lisp_Object binding,
                    void *function)
 {
@@ -2938,7 +2938,7 @@ map_keymap_mapper (CONST struct key_data *key,
 
 static void
 map_keymap (Lisp_Object keymap_table, int sort_first,
-            void (*function) (CONST struct key_data *key,
+            void (*function) (const struct key_data *key,
                               Lisp_Object binding,
                               void *fn_arg),
             void *fn_arg)
@@ -3525,9 +3525,9 @@ where_is_recursive_mapper (Lisp_Object map, void *arg)
   /* This function can GC */
   struct where_is_closure *c = (struct where_is_closure *) arg;
   Lisp_Object definition = c->definition;
-  CONST int firstonly = c->firstonly;
-  CONST unsigned int keys_count = c->keys_count;
-  CONST unsigned int modifiers_so_far = c->modifiers_so_far;
+  const int firstonly = c->firstonly;
+  const unsigned int keys_count = c->keys_count;
+  const unsigned int modifiers_so_far = c->modifiers_so_far;
   char *target_buffer = c->target_buffer;
   Lisp_Object keys = Fgethash (definition,
                                XKEYMAP (map)->inverse_table,
@@ -3643,7 +3643,7 @@ where_is_recursive_mapper (Lisp_Object map, void *arg)
          if (! c->keys_so_far_malloced)
            {
              struct key_data *new = xnew_array (struct key_data, size);
-             memcpy ((void *)new, (CONST void *)c->keys_so_far,
+             memcpy ((void *)new, (const void *)c->keys_so_far,
                      c->keys_so_far_total_size * sizeof (struct key_data));
            }
          else
@@ -3896,7 +3896,7 @@ struct describe_map_closure
 
 struct describe_map_shadow_closure
   {
-    CONST struct key_data *raw_key;
+    const struct key_data *raw_key;
     Lisp_Object self;
   };
 
@@ -3925,7 +3925,7 @@ keymap_lookup_inherited_mapper (Lisp_Object km, void *arg)
 
 
 static void
-describe_map_mapper (CONST struct key_data *key,
+describe_map_mapper (const struct key_data *key,
                      Lisp_Object binding,
                     void *describe_map_closure)
 {
@@ -4339,7 +4339,7 @@ Incremented for each change to any keymap.
 
   staticpro (&Vcurrent_global_map);
 
-  Vsingle_space_string = make_string ((CONST Bufbyte *) " ", 1);
+  Vsingle_space_string = make_string ((const Bufbyte *) " ", 1);
   staticpro (&Vsingle_space_string);
 }
 
index 2b930ba..b0ce90f 100644 (file)
@@ -158,7 +158,7 @@ invalidate_line_number_cache (struct buffer *b, Bufpos pos)
    This will do nothing if the cache is uninitialized.  */
 void
 insert_invalidate_line_number_cache (struct buffer *b, Bufpos pos,
-                                    CONST Bufbyte *nonreloc, Bytecount length)
+                                    const Bufbyte *nonreloc, Bytecount length)
 {
   if (NILP (b->text->line_number_cache))
     return;
index 087976b..88aede0 100644 (file)
@@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA.  */
 
 void narrow_line_number_cache (struct buffer *);
 void insert_invalidate_line_number_cache (struct buffer *, Bufpos,
-                                         CONST Bufbyte *, Bytecount);
+                                         const Bufbyte *, Bytecount);
 void delete_invalidate_line_number_cache (struct buffer *, Bufpos, Bufpos);
 
 EMACS_INT buffer_line_number (struct buffer *, Bufpos, int);
index ab594f3..bf64eac 100644 (file)
@@ -82,8 +82,8 @@
 #define warn(str)   message("audio: %s ",GETTEXT(str))
 #endif
 
-static  void (*sighup_handler)(int);
-static  void (*sigint_handler)(int);
+static  SIGTYPE (*sighup_handler) (int);
+static  SIGTYPE (*sigint_handler) (int);
 
 static int           mix_fd;
 static int           audio_vol;
@@ -93,7 +93,8 @@ static char        *audio_dev = "/dev/dsp";
 /* Intercept SIGINT and SIGHUP in order to close the audio and mixer
    devices before terminating sound output; this requires reliable
    signals as provided by "syssignal.h" */
-static void sighandler(int sig)
+static SIGTYPE
+sighandler (int sig)
 {
   if (mix_fd > 0) {
     if (audio_vol >= 0) {
index 8ed19df..39a96d8 100644 (file)
@@ -103,7 +103,7 @@ typedef EMACS_INT Lisp_Object;
 #define VOID_TO_LISP(larg,varg) ((void) ((larg) = ((Lisp_Object) (varg))))
 #define CVOID_TO_LISP VOID_TO_LISP
 #define LISP_TO_VOID(larg) ((void *) (larg))
-#define LISP_TO_CVOID(varg) ((CONST void *) (larg))
+#define LISP_TO_CVOID(varg) ((const void *) (larg))
 
 /* Convert a Lisp_Object into something that can't be used as an
    lvalue.  Useful for type-checking. */
index 54088cf..648f824 100644 (file)
@@ -76,7 +76,7 @@ union Lisp_Object
      GCC to accept any (yes, any) pointer as the argument of
      a function declared to accept a Lisp_Object. */
   struct nosuchstruct *v;
-  CONST struct nosuchstruct *cv;
+  const struct nosuchstruct *cv;
 }
 Lisp_Object;
 
@@ -136,9 +136,9 @@ extern Lisp_Object Qnull_pointer, Qzero;
 #define VOID_TO_LISP(larg,varg) \
      ((void) ((larg).v = (struct nosuchstruct *) (varg)))
 #define CVOID_TO_LISP(larg,varg) \
-     ((void) ((larg).cv = (CONST struct nosuchstruct *) (varg)))
+     ((void) ((larg).cv = (const struct nosuchstruct *) (varg)))
 #define LISP_TO_VOID(larg) ((void *) ((larg).v))
-#define LISP_TO_CVOID(larg) ((CONST void *) ((larg).cv))
+#define LISP_TO_CVOID(larg) ((const void *) ((larg).cv))
 
 /* Convert a Lisp_Object into something that can't be used as an
    lvalue.  Useful for type-checking. */
index b686084..83e08b5 100644 (file)
@@ -58,7 +58,7 @@ typedef struct dynarr
 
 void *Dynarr_newf (int elsize);
 void Dynarr_resize (void *dy, int size);
-void Dynarr_insert_many (void *d, CONST void *el, int len, int start);
+void Dynarr_insert_many (void *d, const void *el, int len, int start);
 void Dynarr_delete_many (void *d, int start, int len);
 void Dynarr_free (void *d);
 
@@ -107,11 +107,11 @@ size_t Dynarr_memory_usage (void *d, struct overhead_stats *stats);
 #endif
 
 /* Memory allocation */
-void malloc_warning (CONST char *);
+void malloc_warning (const char *);
 void *xmalloc (size_t size);
 void *xmalloc_and_zero (size_t size);
 void *xrealloc (void *, size_t size);
-char *xstrdup (CONST char *);
+char *xstrdup (const char *);
 /* generally useful */
 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
 #define xnew(type) ((type *) xmalloc (sizeof (type)))
@@ -218,7 +218,7 @@ void xfree (void *);
 #ifdef USE_ASSERTIONS
 /* Highly dubious kludge */
 /*   (thanks, Jamie, I feel better now -- ben) */
-DECLARE_DOESNT_RETURN (assert_failed (CONST char *, int, CONST char *));
+DECLARE_DOESNT_RETURN (assert_failed (const char *, int, const char *));
 # define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
 #else
@@ -921,8 +921,8 @@ DECLARE_LRECORD (string, Lisp_String);
 
 #ifdef MULE
 
-Charcount bytecount_to_charcount (CONST Bufbyte *ptr, Bytecount len);
-Bytecount charcount_to_bytecount (CONST Bufbyte *ptr, Charcount len);
+Charcount bytecount_to_charcount (const Bufbyte *ptr, Bytecount len);
+Bytecount charcount_to_bytecount (const Bufbyte *ptr, Charcount len);
 
 #else /* not MULE */
 
@@ -1105,9 +1105,9 @@ struct Lisp_Subr
 {
   struct lrecord_header lheader;
   short min_args, max_args;
-  CONST char *prompt;
-  CONST char *doc;
-  CONST char *name;
+  const char *prompt;
+  const char *doc;
+  const char *name;
   lisp_fn_t subr_fn;
 };
 typedef struct Lisp_Subr Lisp_Subr;
@@ -1408,7 +1408,7 @@ struct lcrecord_list
   struct lcrecord_header header;
   Lisp_Object free;
   size_t size;
-  CONST struct lrecord_implementation *implementation;
+  const struct lrecord_implementation *implementation;
 };
 
 DECLARE_LRECORD (lcrecord_list, struct lcrecord_list);
@@ -1420,7 +1420,7 @@ DECLARE_LRECORD (lcrecord_list, struct lcrecord_list);
    functions should not be doing this. */
 
 Lisp_Object make_lcrecord_list (size_t size,
-                               CONST struct lrecord_implementation
+                               const struct lrecord_implementation
                                *implementation);
 Lisp_Object allocate_managed_lcrecord (Lisp_Object lcrecord_list);
 void free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord);
@@ -1582,8 +1582,8 @@ void signal_quit (void);
 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i))
 
 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj))
-unsigned long string_hash (CONST void *xv);
-unsigned long memory_hash (CONST void *xv, size_t size);
+unsigned long string_hash (const void *xv);
+unsigned long memory_hash (const void *xv, size_t size);
 unsigned long internal_hash (Lisp_Object obj, int depth);
 unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth);
 
@@ -1596,10 +1596,10 @@ unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth);
 #ifdef HAVE_LIBINTL_H
 #include <libintl.h>
 #else
-char *dgettext       (CONST char *, CONST char *);
-char *gettext        (CONST char *);
-char *textdomain     (CONST char *);
-char *bindtextdomain (CONST char *, CONST char *);
+char *dgettext       (const char *, const char *);
+char *gettext        (const char *);
+char *textdomain     (const char *);
+char *bindtextdomain (const char *, const char *);
 #endif /* HAVE_LIBINTL_H */
 
 #define GETTEXT(x)  gettext(x)
@@ -1874,6 +1874,9 @@ void staticpro_nodump (Lisp_Object *);
 /* Call dumpstruct(&var, &desc) to dump the structure pointed to by `var'. */
 void dumpstruct (void *, const struct struct_description *);
 
+/* Call dumpopaque(&var, size) to dump the opaque static structure `var'. */
+void dumpopaque (void *, size_t);
+
 /* Call pdump_wire(&var) to ensure that var is properly updated after pdump. */
 void pdump_wire (Lisp_Object *);
 
@@ -1980,14 +1983,14 @@ Lisp_Object restore_gc_inhibit (Lisp_Object);
 extern EMACS_INT gc_generation_number[1];
 int c_readonly (Lisp_Object);
 int lisp_readonly (Lisp_Object);
-Lisp_Object build_string (CONST char *);
-Lisp_Object build_ext_string (CONST char *, Lisp_Object);
-Lisp_Object build_translated_string (CONST char *);
-Lisp_Object make_string (CONST Bufbyte *, Bytecount);
-Lisp_Object make_ext_string (CONST Extbyte *, EMACS_INT, Lisp_Object);
+Lisp_Object build_string (const char *);
+Lisp_Object build_ext_string (const char *, Lisp_Object);
+Lisp_Object build_translated_string (const char *);
+Lisp_Object make_string (const Bufbyte *, Bytecount);
+Lisp_Object make_ext_string (const Extbyte *, EMACS_INT, Lisp_Object);
 Lisp_Object make_uninit_string (Bytecount);
 Lisp_Object make_float (double);
-Lisp_Object make_string_nocopy (CONST Bufbyte *, Bytecount);
+Lisp_Object make_string_nocopy (const Bufbyte *, Bytecount);
 void free_cons (Lisp_Cons *);
 void free_list (Lisp_Object);
 void free_alist (Lisp_Object);
@@ -2019,7 +2022,7 @@ extern int find_file_compare_truenames;
 extern int find_file_use_truenames;
 
 /* Defined in callproc.c */
-char *egetenv (CONST char *);
+char *egetenv (const char *);
 
 /* Defined in console.c */
 void stuff_buffered_input (Lisp_Object);
@@ -2047,7 +2050,7 @@ Lisp_Object word_to_lisp (unsigned int);
 unsigned int lisp_to_word (Lisp_Object);
 
 /* Defined in dired.c */
-Lisp_Object make_directory_hash_table (CONST char *);
+Lisp_Object make_directory_hash_table (const char *);
 Lisp_Object wasteful_word_to_lisp (unsigned int);
 
 /* Defined in doc.c */
@@ -2055,21 +2058,21 @@ Lisp_Object unparesseuxify_doc_string (int, EMACS_INT, char *, Lisp_Object);
 Lisp_Object read_doc_string (Lisp_Object);
 
 /* Defined in doprnt.c */
-Bytecount emacs_doprnt_c (Lisp_Object, CONST Bufbyte *, Lisp_Object,
+Bytecount emacs_doprnt_c (Lisp_Object, const Bufbyte *, Lisp_Object,
                          Bytecount, ...);
-Bytecount emacs_doprnt_va (Lisp_Object, CONST Bufbyte *, Lisp_Object,
+Bytecount emacs_doprnt_va (Lisp_Object, const Bufbyte *, Lisp_Object,
                           Bytecount, va_list);
-Bytecount emacs_doprnt_lisp (Lisp_Object, CONST Bufbyte *, Lisp_Object,
-                            Bytecount, int, CONST Lisp_Object *);
-Bytecount emacs_doprnt_lisp_2 (Lisp_Object, CONST Bufbyte *, Lisp_Object,
+Bytecount emacs_doprnt_lisp (Lisp_Object, const Bufbyte *, Lisp_Object,
+                            Bytecount, int, const Lisp_Object *);
+Bytecount emacs_doprnt_lisp_2 (Lisp_Object, const Bufbyte *, Lisp_Object,
                               Bytecount, int, ...);
-Lisp_Object emacs_doprnt_string_c (CONST Bufbyte *, Lisp_Object,
+Lisp_Object emacs_doprnt_string_c (const Bufbyte *, Lisp_Object,
                                   Bytecount, ...);
-Lisp_Object emacs_doprnt_string_va (CONST Bufbyte *, Lisp_Object,
+Lisp_Object emacs_doprnt_string_va (const Bufbyte *, Lisp_Object,
                                    Bytecount, va_list);
-Lisp_Object emacs_doprnt_string_lisp (CONST Bufbyte *, Lisp_Object,
-                                     Bytecount, int, CONST Lisp_Object *);
-Lisp_Object emacs_doprnt_string_lisp_2 (CONST Bufbyte *, Lisp_Object,
+Lisp_Object emacs_doprnt_string_lisp (const Bufbyte *, Lisp_Object,
+                                     Bytecount, int, const Lisp_Object *);
+Lisp_Object emacs_doprnt_string_lisp_2 (const Bufbyte *, Lisp_Object,
                                        Bytecount, int, ...);
 
 /* Defined in editfns.c */
@@ -2090,18 +2093,18 @@ Lisp_Object save_restriction_restore (Lisp_Object);
 Lisp_Object save_current_buffer_restore (Lisp_Object);
 
 /* Defined in emacs.c */
-DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (fatal (CONST char *,
+DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (fatal (const char *,
                                                           ...), 1, 2);
-int stderr_out (CONST char *, ...) PRINTF_ARGS (1, 2);
-int stdout_out (CONST char *, ...) PRINTF_ARGS (1, 2);
+int stderr_out (const char *, ...) PRINTF_ARGS (1, 2);
+int stdout_out (const char *, ...) PRINTF_ARGS (1, 2);
 SIGTYPE fatal_error_signal (int);
 Lisp_Object make_arg_list (int, char **);
 void make_argc_argv (Lisp_Object, int *, char ***);
 void free_argc_argv (char **);
-Lisp_Object decode_env_path (CONST char *, CONST char *);
-Lisp_Object decode_path (CONST char *);
+Lisp_Object decode_env_path (const char *, const char *);
+Lisp_Object decode_path (const char *);
 /* Nonzero means don't do interactive redisplay and don't change tty modes */
-extern int noninteractive;
+extern int noninteractive, noninteractive1;
 extern int preparing_for_armageddon;
 extern int emacs_priority;
 extern int running_asynch_code;
@@ -2112,35 +2115,35 @@ DECLARE_DOESNT_RETURN (signal_error (Lisp_Object, Lisp_Object));
 void maybe_signal_error (Lisp_Object, Lisp_Object, Lisp_Object, Error_behavior);
 Lisp_Object maybe_signal_continuable_error (Lisp_Object, Lisp_Object,
                                            Lisp_Object, Error_behavior);
-DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (error (CONST char *,
+DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (error (const char *,
                                                           ...), 1, 2);
-void maybe_error (Lisp_Object, Error_behavior, CONST char *,
+void maybe_error (Lisp_Object, Error_behavior, const char *,
                  ...) PRINTF_ARGS (3, 4);
-Lisp_Object continuable_error (CONST char *, ...) PRINTF_ARGS (1, 2);
+Lisp_Object continuable_error (const char *, ...) PRINTF_ARGS (1, 2);
 Lisp_Object maybe_continuable_error (Lisp_Object, Error_behavior,
-                                    CONST char *, ...) PRINTF_ARGS (3, 4);
-DECLARE_DOESNT_RETURN (signal_simple_error (CONST char *, Lisp_Object));
-void maybe_signal_simple_error (CONST char *, Lisp_Object,
+                                    const char *, ...) PRINTF_ARGS (3, 4);
+DECLARE_DOESNT_RETURN (signal_simple_error (const char *, Lisp_Object));
+void maybe_signal_simple_error (const char *, Lisp_Object,
                                Lisp_Object, Error_behavior);
-Lisp_Object signal_simple_continuable_error (CONST char *, Lisp_Object);
-Lisp_Object maybe_signal_simple_continuable_error (CONST char *, Lisp_Object,
+Lisp_Object signal_simple_continuable_error (const char *, Lisp_Object);
+Lisp_Object maybe_signal_simple_continuable_error (const char *, Lisp_Object,
                                                   Lisp_Object, Error_behavior);
 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (error_with_frob
-                                                   (Lisp_Object, CONST char *,
+                                                   (Lisp_Object, const char *,
                                                     ...), 2, 3);
 void maybe_error_with_frob (Lisp_Object, Lisp_Object, Error_behavior,
-                           CONST char *, ...) PRINTF_ARGS (4, 5);
-Lisp_Object continuable_error_with_frob (Lisp_Object, CONST char *,
+                           const char *, ...) PRINTF_ARGS (4, 5);
+Lisp_Object continuable_error_with_frob (Lisp_Object, const char *,
                                         ...) PRINTF_ARGS (2, 3);
 Lisp_Object maybe_continuable_error_with_frob
-(Lisp_Object, Lisp_Object, Error_behavior, CONST char *, ...) PRINTF_ARGS (4, 5);
-DECLARE_DOESNT_RETURN (signal_simple_error_2 (CONST char *,
+(Lisp_Object, Lisp_Object, Error_behavior, const char *, ...) PRINTF_ARGS (4, 5);
+DECLARE_DOESNT_RETURN (signal_simple_error_2 (const char *,
                                              Lisp_Object, Lisp_Object));
-void maybe_signal_simple_error_2 (CONST char *, Lisp_Object, Lisp_Object,
+void maybe_signal_simple_error_2 (const char *, Lisp_Object, Lisp_Object,
                                  Lisp_Object, Error_behavior);
-Lisp_Object signal_simple_continuable_error_2 (CONST char *,
+Lisp_Object signal_simple_continuable_error_2 (const char *,
                                               Lisp_Object, Lisp_Object);
-Lisp_Object maybe_signal_simple_continuable_error_2 (CONST char *, Lisp_Object,
+Lisp_Object maybe_signal_simple_continuable_error_2 (const char *, Lisp_Object,
                                                     Lisp_Object, Lisp_Object,
                                                     Error_behavior);
 DECLARE_DOESNT_RETURN (signal_malformed_list_error (Lisp_Object));
@@ -2191,13 +2194,13 @@ Lisp_Object call6_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
 Lisp_Object eval_in_buffer (struct buffer *, Lisp_Object);
 Lisp_Object call0_with_handler (Lisp_Object, Lisp_Object);
 Lisp_Object call1_with_handler (Lisp_Object, Lisp_Object, Lisp_Object);
-Lisp_Object eval_in_buffer_trapping_errors (CONST char *, struct buffer *,
+Lisp_Object eval_in_buffer_trapping_errors (const char *, struct buffer *,
                                            Lisp_Object);
-Lisp_Object run_hook_trapping_errors (CONST char *, Lisp_Object);
-Lisp_Object safe_run_hook_trapping_errors (CONST char *, Lisp_Object, int);
-Lisp_Object call0_trapping_errors (CONST char *, Lisp_Object);
-Lisp_Object call1_trapping_errors (CONST char *, Lisp_Object, Lisp_Object);
-Lisp_Object call2_trapping_errors (CONST char *,
+Lisp_Object run_hook_trapping_errors (const char *, Lisp_Object);
+Lisp_Object safe_run_hook_trapping_errors (const char *, Lisp_Object, int);
+Lisp_Object call0_trapping_errors (const char *, Lisp_Object);
+Lisp_Object call1_trapping_errors (const char *, Lisp_Object, Lisp_Object);
+Lisp_Object call2_trapping_errors (const char *,
                                   Lisp_Object, Lisp_Object, Lisp_Object);
 Lisp_Object call_with_suspended_errors (lisp_fn_t, volatile Lisp_Object, Lisp_Object,
                                        Error_behavior, int, ...);
@@ -2216,7 +2219,7 @@ void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object);
 void do_autoload (Lisp_Object, Lisp_Object);
 Lisp_Object un_autoload (Lisp_Object);
 void warn_when_safe_lispobj (Lisp_Object, Lisp_Object, Lisp_Object);
-void warn_when_safe (Lisp_Object, Lisp_Object, CONST char *,
+void warn_when_safe (Lisp_Object, Lisp_Object, const char *,
                     ...) PRINTF_ARGS (3, 4);
 
 
@@ -2239,25 +2242,25 @@ Lisp_Object allocate_event (void);
 /* Defined in fileio.c */
 void record_auto_save (void);
 void force_auto_save_soon (void);
-DECLARE_DOESNT_RETURN (report_file_error (CONST char *, Lisp_Object));
-void maybe_report_file_error (CONST char *, Lisp_Object,
+DECLARE_DOESNT_RETURN (report_file_error (const char *, Lisp_Object));
+void maybe_report_file_error (const char *, Lisp_Object,
                              Lisp_Object, Error_behavior);
-DECLARE_DOESNT_RETURN (signal_file_error (CONST char *, Lisp_Object));
-void maybe_signal_file_error (CONST char *, Lisp_Object,
+DECLARE_DOESNT_RETURN (signal_file_error (const char *, Lisp_Object));
+void maybe_signal_file_error (const char *, Lisp_Object,
                              Lisp_Object, Error_behavior);
-DECLARE_DOESNT_RETURN (signal_double_file_error (CONST char *, CONST char *,
+DECLARE_DOESNT_RETURN (signal_double_file_error (const char *, const char *,
                                                 Lisp_Object));
-void maybe_signal_double_file_error (CONST char *, CONST char *,
+void maybe_signal_double_file_error (const char *, const char *,
                                     Lisp_Object, Lisp_Object, Error_behavior);
-DECLARE_DOESNT_RETURN (signal_double_file_error_2 (CONST char *, CONST char *,
+DECLARE_DOESNT_RETURN (signal_double_file_error_2 (const char *, const char *,
                                                   Lisp_Object, Lisp_Object));
-void maybe_signal_double_file_error_2 (CONST char *, CONST char *,
+void maybe_signal_double_file_error_2 (const char *, const char *,
                                       Lisp_Object, Lisp_Object, Lisp_Object,
                                       Error_behavior);
 Lisp_Object lisp_strerror (int);
 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
 ssize_t read_allowing_quit (int, void *, size_t);
-ssize_t write_allowing_quit (int, CONST void *, size_t);
+ssize_t write_allowing_quit (int, const void *, size_t);
 int internal_delete_file (Lisp_Object);
 
 /* Defined in filelock.c */
@@ -2304,7 +2307,7 @@ Lisp_Object vconcat2 (Lisp_Object, Lisp_Object);
 Lisp_Object vconcat3 (Lisp_Object, Lisp_Object, Lisp_Object);
 Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
 Lisp_Object bytecode_nconc2 (Lisp_Object *);
-void check_losing_bytecode (CONST char *, Lisp_Object);
+void check_losing_bytecode (const char *, Lisp_Object);
 
 /* Defined in getloadavg.c */
 int getloadavg (double[], int);
@@ -2330,7 +2333,7 @@ void ebolify_bytecode_constants (Lisp_Object);
 void close_load_descs (void);
 int locate_file (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, int);
 EXFUN (Flocate_file_clear_hashing, 1);
-int isfloat_string (CONST char *);
+int isfloat_string (const char *);
 
 /* Well, I've decided to enable this. -- ben */
 /* And I've decided to make it work right.  -- sb */
@@ -2367,31 +2370,31 @@ extern int popup_menu_titles;
 
 /* Defined in minibuf.c */
 extern int minibuf_level;
-Charcount scmp_1 (CONST Bufbyte *, CONST Bufbyte *, Charcount, int);
+Charcount scmp_1 (const Bufbyte *, const Bufbyte *, Charcount, int);
 #define scmp(s1, s2, len) scmp_1 (s1, s2, len, completion_ignore_case)
 extern int completion_ignore_case;
-int regexp_ignore_completion_p (CONST Bufbyte *, Lisp_Object,
+int regexp_ignore_completion_p (const Bufbyte *, Lisp_Object,
                                Bytecount, Bytecount);
 Lisp_Object clear_echo_area (struct frame *, Lisp_Object, int);
 Lisp_Object clear_echo_area_from_print (struct frame *, Lisp_Object, int);
-void echo_area_append (struct frame *, CONST Bufbyte *, Lisp_Object,
+void echo_area_append (struct frame *, const Bufbyte *, Lisp_Object,
                       Bytecount, Bytecount, Lisp_Object);
-void echo_area_message (struct frame *, CONST Bufbyte *, Lisp_Object,
+void echo_area_message (struct frame *, const Bufbyte *, Lisp_Object,
                        Bytecount, Bytecount, Lisp_Object);
 Lisp_Object echo_area_status (struct frame *);
 int echo_area_active (struct frame *);
 Lisp_Object echo_area_contents (struct frame *);
-void message_internal (CONST Bufbyte *, Lisp_Object, Bytecount, Bytecount);
-void message_append_internal (CONST Bufbyte *, Lisp_Object,
+void message_internal (const Bufbyte *, Lisp_Object, Bytecount, Bytecount);
+void message_append_internal (const Bufbyte *, Lisp_Object,
                              Bytecount, Bytecount);
-void message (CONST char *, ...) PRINTF_ARGS (1, 2);
-void message_append (CONST char *, ...) PRINTF_ARGS (1, 2);
-void message_no_translate (CONST char *, ...) PRINTF_ARGS (1, 2);
+void message (const char *, ...) PRINTF_ARGS (1, 2);
+void message_append (const char *, ...) PRINTF_ARGS (1, 2);
+void message_no_translate (const char *, ...) PRINTF_ARGS (1, 2);
 void clear_message (void);
 
 /* Defined in print.c */
 void write_string_to_stdio_stream (FILE *, struct console *,
-                                  CONST Bufbyte *, Bytecount, Bytecount,
+                                  const Bufbyte *, Bytecount, Bytecount,
                                   Lisp_Object);
 void debug_print (Lisp_Object);
 void debug_short_backtrace (int);
@@ -2400,9 +2403,9 @@ void temp_output_buffer_show (Lisp_Object, Lisp_Object);
 /* NOTE: Do not call this with the data of a Lisp_String.  Use princ.
  * Note: stream should be defaulted before calling
  *  (eg Qnil means stdout, not Vstandard_output, etc) */
-void write_c_string (CONST char *, Lisp_Object);
+void write_c_string (const char *, Lisp_Object);
 /* Same goes for this function. */
-void write_string_1 (CONST Bufbyte *, Bytecount, Lisp_Object);
+void write_string_1 (const Bufbyte *, Bytecount, Lisp_Object);
 void print_cons (Lisp_Object, Lisp_Object, int);
 void print_vector (Lisp_Object, Lisp_Object, int);
 void print_string (Lisp_Object, Lisp_Object, int);
@@ -2445,7 +2448,7 @@ Bytind bi_find_next_emchar_in_string (Lisp_String*, Emchar, Bytind, EMACS_INT);
 Bufpos find_before_next_newline (struct buffer *, Bufpos, Bufpos, int);
 struct re_pattern_buffer *compile_pattern (Lisp_Object, struct re_registers *,
                                           char *, int, Error_behavior);
-Bytecount fast_string_match (Lisp_Object,  CONST Bufbyte *,
+Bytecount fast_string_match (Lisp_Object,  const Bufbyte *,
                             Lisp_Object, Bytecount,
                             Bytecount, int, Error_behavior, int);
 Bytecount fast_lisp_string_match (Lisp_Object, Lisp_Object);
@@ -2467,9 +2470,9 @@ Lisp_Object specifier_instance_no_quit (Lisp_Object, Lisp_Object, Lisp_Object,
                                        Error_behavior, int, Lisp_Object);
 
 /* Defined in symbols.c */
-int hash_string (CONST Bufbyte *, Bytecount);
-Lisp_Object intern (CONST char *);
-Lisp_Object oblookup (Lisp_Object, CONST Bufbyte *, Bytecount);
+int hash_string (const Bufbyte *, Bytecount);
+Lisp_Object intern (const char *);
+Lisp_Object oblookup (Lisp_Object, const Bufbyte *, Bytecount);
 void map_obarray (Lisp_Object, int (*) (Lisp_Object, void *), void *);
 Lisp_Object indirect_function (Lisp_Object, int);
 Lisp_Object symbol_value_in_buffer (Lisp_Object, Lisp_Object);
@@ -2499,7 +2502,7 @@ int run_time_remap (char *);
 #endif
 
 /* Defined in vm-limit.c */
-void memory_warnings (void *, void (*) (CONST char *));
+void memory_warnings (void *, void (*) (const char *));
 
 /* Defined in window.c */
 Lisp_Object save_window_excursion_unwind (Lisp_Object);
@@ -2809,7 +2812,7 @@ extern Lisp_Object Qold_rassq, Qonly, Qor, Qother;
 extern Lisp_Object Qorientation, Qoutput_charset_conversion;
 extern Lisp_Object Qoverflow_error, Qpoint, Qpointer, Qpointer_glyph_p;
 extern Lisp_Object Qpointer_image_instance_p, Qportrait, Qpost_read_conversion;
-extern Lisp_Object Qpre_write_conversion, Qprint, Qprint_length;
+extern Lisp_Object Qpre_write_conversion, Qprint, Qprinter, Qprint_length;
 extern Lisp_Object Qprint_string_length, Qprocess, Qprogn, Qprovide, Qquit;
 extern Lisp_Object Qquote, Qrange_error, Qrassoc, Qrassq, Qread_char;
 extern Lisp_Object Qread_from_minibuffer, Qreally_early_error_handler;
index a4505e0..c36153e 100644 (file)
@@ -218,14 +218,14 @@ EXFUN (Fread_from_string, 3);
 \f
 
 static DOESNT_RETURN
-syntax_error (CONST char *string)
+syntax_error (const char *string)
 {
   signal_error (Qinvalid_read_syntax,
                list1 (build_translated_string (string)));
 }
 
 static Lisp_Object
-continuable_syntax_error (CONST char *string)
+continuable_syntax_error (const char *string)
 {
   return Fsignal (Qinvalid_read_syntax,
                  list1 (build_translated_string (string)));
@@ -676,7 +676,7 @@ encoding detection or end-of-line detection.
   {
     /* Lisp_Object's must be malloc'ed, not stack-allocated */
     Lisp_Object lispstream = Qnil;
-    CONST int block_size = 8192;
+    const int block_size = 8192;
     struct gcpro ngcpro1;
 
     NGCPRO1 (lispstream);
@@ -978,7 +978,7 @@ locate_file_map_suffixes (Lisp_Object filename, Lisp_Object suffixes,
   else
     {
       /* Case c) */
-      CONST char *nsuffix = (CONST char *) XSTRING_DATA (suffixes);
+      const char *nsuffix = (const char *) XSTRING_DATA (suffixes);
 
       while (1)
        {
@@ -1870,7 +1870,7 @@ read_atom_0 (Lisp_Object readcharfun, Emchar firstchar, int *saw_a_backslash)
   return Lstream_byte_count (XLSTREAM (Vread_buffer_stream)) - 1;
 }
 
-static Lisp_Object parse_integer (CONST Bufbyte *buf, Bytecount len, int base);
+static Lisp_Object parse_integer (const Bufbyte *buf, Bytecount len, int base);
 
 static Lisp_Object
 read_atom (Lisp_Object readcharfun,
@@ -1950,10 +1950,10 @@ read_atom (Lisp_Object readcharfun,
 
 
 static Lisp_Object
-parse_integer (CONST Bufbyte *buf, Bytecount len, int base)
+parse_integer (const Bufbyte *buf, Bytecount len, int base)
 {
-  CONST Bufbyte *lim = buf + len;
-  CONST Bufbyte *p = buf;
+  const Bufbyte *lim = buf + len;
+  const Bufbyte *p = buf;
   EMACS_UINT num = 0;
   int negativland = 0;
 
@@ -2696,10 +2696,10 @@ retry:
 #define EXP_INT 16
 
 int
-isfloat_string (CONST char *cp)
+isfloat_string (const char *cp)
 {
   int state = 0;
-  CONST Bufbyte *ucp = (CONST Bufbyte *) cp;
+  const Bufbyte *ucp = (const Bufbyte *) cp;
 
   if (*ucp == '+' || *ucp == '-')
     ucp++;
index ca12997..94ebea2 100644 (file)
@@ -26,13 +26,13 @@ Boston, MA 02111-1307, USA.  */
 
 /* The "lrecord" type of Lisp object is used for all object types
    other than a few simple ones.  This allows many types to be
-   implemented but only a few bits required in a Lisp object for
-   type information. (The tradeoff is that each object has its
-   type marked in it, thereby increasing its size.) The first
-   four bytes of all lrecords is either a pointer to a struct
-   lrecord_implementation, which contains methods describing how
-   to process this object, or an index into an array of pointers
-   to struct lrecord_implementations plus some other data bits.
+   implemented but only a few bits required in a Lisp object for type
+   information. (The tradeoff is that each object has its type marked
+   in it, thereby increasing its size.) All lrecords begin with a
+   `struct lrecord_header', which identifies the lisp object type, by
+   providing an index into a table of `struct lrecord_implementation',
+   which describes the behavior of the lisp object.  It also contains
+   some other data bits.
 
    Lrecords are of two types: straight lrecords, and lcrecords.
    Straight lrecords are used for those types of objects that have
@@ -42,12 +42,12 @@ Boston, MA 02111-1307, USA.  */
    the lrecord_implementation for the object.  There are special
    routines in alloc.c to deal with each such object type.
 
-   Lcrecords are used for less common sorts of objects that don't
-   do their own allocation.  Each such object is malloc()ed
-   individually, and the objects are chained together through
-   a `next' pointer.  Lcrecords have a `struct lcrecord_header'
-   at the top, which contains a `struct lrecord_header' and
-   a `next' pointer, and are allocated using alloc_lcrecord().
+   Lcrecords are used for less common sorts of objects that don't do
+   their own allocation.  Each such object is malloc()ed individually,
+   and the objects are chained together through a `next' pointer.
+   Lcrecords have a `struct lcrecord_header' at the top, which
+   contains a `struct lrecord_header' and a `next' pointer, and are
+   allocated using alloc_lcrecord().
 
    Creating a new lcrecord type is fairly easy; just follow the
    lead of some existing type (e.g. hash tables).  Note that you
@@ -60,17 +60,17 @@ Boston, MA 02111-1307, USA.  */
 struct lrecord_header
 {
   /* index into lrecord_implementations_table[] */
-  unsigned type :8;
+  unsigned int type :8;
   /* 1 if the object is marked during GC. */
-  unsigned mark :1;
+  unsigned int mark :1;
   /* 1 if the object resides in read-only space */
-  unsigned c_readonly : 1;
+  unsigned int c_readonly :1;
   /* 1 if the object is readonly from lisp */
-  unsigned lisp_readonly : 1;
+  unsigned int lisp_readonly :1;
 };
 
 struct lrecord_implementation;
-int lrecord_type_index (CONST struct lrecord_implementation *implementation);
+int lrecord_type_index (const struct lrecord_implementation *implementation);
 
 #define set_lheader_implementation(header,imp) do {    \
   struct lrecord_header* SLI_header = (header);                \
@@ -84,9 +84,9 @@ struct lcrecord_header
 {
   struct lrecord_header lheader;
 
-  /* The `next' field is normally used to chain all lrecords together
+  /* The `next' field is normally used to chain all lcrecords together
      so that the GC can find (and free) all of them.
-     `alloc_lcrecord' threads records together.
+     `alloc_lcrecord' threads lcrecords together.
 
      The `next' field may be used for other purposes as long as some
      other mechanism is provided for letting the GC do its work.
@@ -123,8 +123,9 @@ Lisp_Object this_one_is_unmarkable (Lisp_Object obj);
 
 struct lrecord_implementation
 {
-  CONST char *name;
-  /* This function is called at GC time, to make sure that all Lisp_Objects
+  const char *name;
+
+  /* `marker' is called at GC time, to make sure that all Lisp_Objects
      pointed to by this object get properly marked.  It should call
      the mark_object function on all Lisp_Objects in the object.  If
      the return value is non-nil, it should be a Lisp_Object to be
@@ -134,50 +135,63 @@ struct lrecord_implementation
      with the deepest level of Lisp_Object pointers.  This function
      can be NULL, meaning no GC marking is necessary. */
   Lisp_Object (*marker) (Lisp_Object);
-  /* This can be NULL if the object is an lcrecord; the
-     default_object_printer() in print.c will be used. */
+
+  /* `printer' converts the object to a printed representation.
+     This can be NULL; in this case default_object_printer() will be
+     used instead. */
   void (*printer) (Lisp_Object, Lisp_Object printcharfun, int escapeflag);
-  /* This function is called at GC time when the object is about to
+
+  /* `finalizer' is called at GC time when the object is about to
      be freed, and at dump time (FOR_DISKSAVE will be non-zero in this
      case).  It should perform any necessary cleanup (e.g. freeing
-     malloc()ed memory.  This can be NULL, meaning no special
+     malloc()ed memory).  This can be NULL, meaning no special
      finalization is necessary.
 
-     WARNING: remember that the finalizer is called at dump time even
+     WARNING: remember that `finalizer' is called at dump time even
      though the object is not being freed. */
   void (*finalizer) (void *header, int for_disksave);
+
   /* This can be NULL, meaning compare objects with EQ(). */
   int (*equal) (Lisp_Object obj1, Lisp_Object obj2, int depth);
-  /* This can be NULL, meaning use the Lisp_Object itself as the hash;
-     but *only* if the `equal' function is EQ (if two objects are
-     `equal', they *must* hash to the same value or the hashing won't
-     work). */
+
+  /* `hash' generates hash values for use with hash tables that have
+     `equal' as their test function.  This can be NULL, meaning use
+     the Lisp_Object itself as the hash.  But, you must still satisfy
+     the constraint that if two objects are `equal', then they *must*
+     hash to the same value in order for hash tables to work properly.
+     This means that `hash' can be NULL only if the `equal' method is
+     also NULL. */
   unsigned long (*hash) (Lisp_Object, int);
 
   /* External data layout description */
   const struct lrecord_description *description;
 
+  /* These functions allow any object type to have builtin property
+     lists that can be manipulated from the lisp level with
+     `get', `put', `remprop', and `object-plist'. */
   Lisp_Object (*getprop) (Lisp_Object obj, Lisp_Object prop);
   int (*putprop) (Lisp_Object obj, Lisp_Object prop, Lisp_Object val);
   int (*remprop) (Lisp_Object obj, Lisp_Object prop);
   Lisp_Object (*plist) (Lisp_Object obj);
 
-  /* Only one of these is non-0.  If both are 0, it means that this type
-     is not instantiable by alloc_lcrecord(). */
+  /* Only one of `static_size' and `size_in_bytes_method' is non-0.
+     If both are 0, this type is not instantiable by alloc_lcrecord(). */
   size_t static_size;
-  size_t (*size_in_bytes_method) (CONST void *header);
+  size_t (*size_in_bytes_method) (const void *header);
+
   /* A unique subtag-code (dynamically) assigned to this datatype. */
   /* (This is a pointer so the rest of this structure can be read-only.) */
   int *lrecord_type_index;
+
   /* A "basic" lrecord is any lrecord that's not an lcrecord, i.e.
      one that does not have an lcrecord_header at the front and which
      is (usually) allocated in frob blocks.  We only use this flag for
      some consistency checking, and that only when error-checking is
      enabled. */
-  int basic_p;
+  unsigned int basic_p :1;
 };
 
-extern CONST struct lrecord_implementation *lrecord_implementations_table[];
+extern const struct lrecord_implementation *lrecord_implementations_table[];
 
 #define XRECORD_LHEADER_IMPLEMENTATION(obj) \
    (lrecord_implementations_table[XRECORD_LHEADER (obj)->type])
@@ -236,7 +250,7 @@ extern int gc_in_progress;
   An array of Lisp objects or pointers to lrecords.
   The third element is the count.
 
-  XD_LO_RESET_NIL
+    XD_LO_RESET_NIL
   Lisp objects which will be reset to Qnil when dumping.  Useful for cleaning
   up caches.
 
@@ -341,7 +355,7 @@ struct struct_description {
 #ifdef DEBUG_XEMACS
 #define CONST_IF_NOT_DEBUG
 #else
-#define CONST_IF_NOT_DEBUG CONST
+#define CONST_IF_NOT_DEBUG const
 #endif
 
 /* DEFINE_LRECORD_IMPLEMENTATION is for objects with constant size.
@@ -357,27 +371,30 @@ struct struct_description {
 #define DEFINE_BASIC_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \
 DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype)
 
-#define DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,props,structtype) \
-MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,props,sizeof(structtype),0,1,structtype)
+#define DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \
+MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof(structtype),0,1,structtype)
 
 #define DEFINE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \
 DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype)
 
-#define DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,props,structtype) \
-MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,props,sizeof (structtype),0,0,structtype)
+#define DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \
+MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof (structtype),0,0,structtype)
 
 #define DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \
 DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,sizer,structtype)
 
-#define DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,props,sizer,structtype) \
-MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,props,0,sizer,0,structtype) \
+#define DEFINE_BASIC_LRECORD_SEQUENCE_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \
+MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,sizer,1,structtype)
+
+#define DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \
+MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) \
 
-#define MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,props,size,sizer,basic_p,structtype) \
+#define MAKE_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \
 DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype)                      \
 static int lrecord_##c_name##_lrecord_type_index;                      \
 CONST_IF_NOT_DEBUG struct lrecord_implementation lrecord_##c_name =    \
   { name, marker, printer, nuker, equal, hash, desc,                   \
-    getprop, putprop, remprop, props, size, sizer,                     \
+    getprop, putprop, remprop, plist, size, sizer,                     \
     &(lrecord_##c_name##_lrecord_type_index), basic_p }                        \
 
 #define LRECORDP(a) (XTYPE (a) == Lisp_Type_Record)
@@ -486,7 +503,7 @@ extern Lisp_Object Q##c_name##p
    dead_wrong_type_argument (predicate, x);            \
  } while (0)
 
-void *alloc_lcrecord (size_t size, CONST struct lrecord_implementation *);
+void *alloc_lcrecord (size_t size, const struct lrecord_implementation *);
 
 #define alloc_lcrecord_type(type, lrecord_implementation) \
   ((type *) alloc_lcrecord (sizeof (type), lrecord_implementation))
index 8c82733..ed9849c 100644 (file)
@@ -52,7 +52,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* Functions are as follows:
 
-Lstream *Lstream_new (Lstream_implementation *imp, CONST char *mode)
+Lstream *Lstream_new (Lstream_implementation *imp, const char *mode)
        Allocate and return a new Lstream.  This function is not
        really meant to be called directly; rather, each stream type
        should provide its own stream creation function, which
@@ -180,9 +180,9 @@ finalize_lstream (void *header, int for_disksave)
 }
 
 static size_t
-sizeof_lstream (CONST void *header)
+sizeof_lstream (const void *header)
 {
-  CONST Lstream *lstr = (CONST Lstream *) header;
+  const Lstream *lstr = (const Lstream *) header;
   return sizeof (*lstr) + lstr->imp->size - 1;
 }
 
@@ -210,12 +210,12 @@ Lstream_set_buffering (Lstream *lstr, Lstream_buffering buffering,
     }
 }
 
-static CONST Lstream_implementation *lstream_types[32];
+static const Lstream_implementation *lstream_types[32];
 static Lisp_Object Vlstream_free_list[32];
 static int lstream_type_count;
 
 Lstream *
-Lstream_new (CONST Lstream_implementation *imp, CONST char *mode)
+Lstream_new (const Lstream_implementation *imp, const char *mode)
 {
   Lstream *p;
   int i;
@@ -282,7 +282,7 @@ Lstream_delete (Lstream *lstr)
 #define Lstream_internal_error(reason, lstr) \
   Lstream_signal_simple_error ("Internal error: " reason, lstr)
 
-static void Lstream_signal_simple_error (CONST char *reason, Lstream *lstr)
+static void Lstream_signal_simple_error (const char *reason, Lstream *lstr)
 {
   Lisp_Object obj;
   XSETLSTREAM (obj, lstr);
@@ -319,8 +319,8 @@ Lstream_flush_out (Lstream *lstr)
           character at the end.  We need to spit back that
           incomplete character. */
        {
-         CONST unsigned char *data = lstr->out_buffer;
-         CONST unsigned char *dataend = data + size - 1;
+         const unsigned char *data = lstr->out_buffer;
+         const unsigned char *dataend = data + size - 1;
          assert (size > 0); /* safety check ... */
          /* Optimize the most common case. */
          if (!BYTE_ASCII_P (*dataend))
@@ -415,9 +415,9 @@ Lstream_adding (Lstream *lstr, size_t num, int force)
 /* Like Lstream_write(), but does not handle line-buffering correctly. */
 
 static ssize_t
-Lstream_write_1 (Lstream *lstr, CONST void *data, size_t size)
+Lstream_write_1 (Lstream *lstr, const void *data, size_t size)
 {
-  CONST unsigned char *p = (CONST unsigned char *) data;
+  const unsigned char *p = (const unsigned char *) data;
   ssize_t off = 0;
   if (! (lstr->flags & LSTREAM_FL_IS_OPEN))
     Lstream_internal_error ("lstream not open", lstr);
@@ -475,10 +475,10 @@ Lstream_write_1 (Lstream *lstr, CONST void *data, size_t size)
    line buffering.  Returns number of bytes written. */
 
 ssize_t
-Lstream_write (Lstream *lstr, CONST void *data, size_t size)
+Lstream_write (Lstream *lstr, const void *data, size_t size)
 {
   size_t i;
-  CONST unsigned char *p = (CONST unsigned char *) data;
+  const unsigned char *p = (const unsigned char *) data;
 
   if (size == 0)
     return size;
@@ -584,7 +584,7 @@ Lstream_read (Lstream *lstr, void *data, size_t size)
       /* It's quite possible for us to get passed an incomplete
         character at the end.  We need to spit back that
         incomplete character. */
-      CONST unsigned char *dataend = p + off - 1;
+      const unsigned char *dataend = p + off - 1;
       /* Optimize the most common case. */
       if (!BYTE_ASCII_P (*dataend))
        {
@@ -607,9 +607,9 @@ Lstream_read (Lstream *lstr, void *data, size_t size)
 }
 
 void
-Lstream_unread (Lstream *lstr, CONST void *data, size_t size)
+Lstream_unread (Lstream *lstr, const void *data, size_t size)
 {
-  CONST unsigned char *p = (CONST unsigned char *) data;
+  const unsigned char *p = (const unsigned char *) data;
 
   /* Make sure buffer is big enough */
   DO_REALLOC (lstr->unget_buffer, lstr->unget_buffer_size,
@@ -765,7 +765,7 @@ DEFINE_LSTREAM_IMPLEMENTATION ("stdio", lstream_stdio,
                               sizeof (struct stdio_stream));
 
 static Lisp_Object
-make_stdio_stream_1 (FILE *stream, int flags, CONST char *mode)
+make_stdio_stream_1 (FILE *stream, int flags, const char *mode)
 {
   Lisp_Object obj;
   Lstream *lstr = Lstream_new (lstream_stdio, mode);
@@ -818,7 +818,7 @@ stdio_reader (Lstream *stream, unsigned char *data, size_t size)
 }
 
 static ssize_t
-stdio_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+stdio_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct stdio_stream *str = STDIO_STREAM_DATA (stream);
   size_t val = fwrite (data, 1, size, str->file);
@@ -897,7 +897,7 @@ DEFINE_LSTREAM_IMPLEMENTATION ("filedesc", lstream_filedesc,
    ignored when writing); -1 for unlimited. */
 static Lisp_Object
 make_filedesc_stream_1 (int filedesc, int offset, int count, int flags,
-                       CONST char *mode)
+                       const char *mode)
 {
   Lisp_Object obj;
   Lstream *lstr = Lstream_new (lstream_filedesc, mode);
@@ -962,7 +962,7 @@ errno_would_block_p (int val)
 }
 
 static ssize_t
-filedesc_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+filedesc_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct filedesc_stream *str = FILEDESC_STREAM_DATA (stream);
   ssize_t retval;
@@ -977,9 +977,9 @@ filedesc_writer (Lstream *stream, CONST unsigned char *data, size_t size)
   if (str->pty_flushing)
     {
       /* To make life easy, only send out one line at the most. */
-      CONST unsigned char *ptr;
+      const unsigned char *ptr;
 
-      ptr = (CONST unsigned char *) memchr (data, '\n', size);
+      ptr = (const unsigned char *) memchr (data, '\n', size);
       if (ptr)
        need_newline = 1;
       else
@@ -1245,7 +1245,7 @@ lisp_string_marker (Lisp_Object stream)
 
 struct fixed_buffer_stream
 {
-  CONST unsigned char *inbuf;
+  const unsigned char *inbuf;
   unsigned char *outbuf;
   size_t size;
   size_t offset;
@@ -1255,7 +1255,7 @@ DEFINE_LSTREAM_IMPLEMENTATION ("fixed-buffer", lstream_fixed_buffer,
                               sizeof (struct fixed_buffer_stream));
 
 Lisp_Object
-make_fixed_buffer_input_stream (CONST void *buf, size_t size)
+make_fixed_buffer_input_stream (const void *buf, size_t size)
 {
   Lisp_Object obj;
   Lstream *lstr = Lstream_new (lstream_fixed_buffer, "r");
@@ -1289,7 +1289,7 @@ fixed_buffer_reader (Lstream *stream, unsigned char *data, size_t size)
 }
 
 static ssize_t
-fixed_buffer_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+fixed_buffer_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct fixed_buffer_stream *str = FIXED_BUFFER_STREAM_DATA (stream);
   if (str->offset == str->size)
@@ -1312,7 +1312,7 @@ fixed_buffer_rewinder (Lstream *stream)
   return 0;
 }
 
-CONST unsigned char *
+const unsigned char *
 fixed_buffer_input_stream_ptr (Lstream *stream)
 {
   assert (stream->imp == lstream_fixed_buffer);
@@ -1351,7 +1351,7 @@ make_resizing_buffer_output_stream (void)
 }
 
 static ssize_t
-resizing_buffer_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+resizing_buffer_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct resizing_buffer_stream *str = RESIZING_BUFFER_STREAM_DATA (stream);
   DO_REALLOC (str->buf, str->allocked, str->stored + size, unsigned char);
@@ -1413,7 +1413,7 @@ make_dynarr_output_stream (unsigned_char_dynarr *dyn)
 }
 
 static ssize_t
-dynarr_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+dynarr_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct dynarr_stream *str = DYNARR_STREAM_DATA (stream);
   Dynarr_add_many (str->dyn, data, size);
@@ -1456,7 +1456,7 @@ DEFINE_LSTREAM_IMPLEMENTATION ("lisp-buffer", lstream_lisp_buffer,
 
 static Lisp_Object
 make_lisp_buffer_stream_1 (struct buffer *buf, Bufpos start, Bufpos end,
-                          int flags, CONST char *mode)
+                          int flags, const char *mode)
 {
   Lisp_Object obj;
   Lstream *lstr;
@@ -1595,7 +1595,7 @@ lisp_buffer_reader (Lstream *stream, unsigned char *data, size_t size)
 }
 
 static ssize_t
-lisp_buffer_writer (Lstream *stream, CONST unsigned char *data, size_t size)
+lisp_buffer_writer (Lstream *stream, const unsigned char *data, size_t size)
 {
   struct lisp_buffer_stream *str = LISP_BUFFER_STREAM_DATA (stream);
   Bufpos pos;
index b9b0fc2..e1674c2 100644 (file)
@@ -74,7 +74,7 @@ typedef enum lstream_buffering
 
 typedef struct lstream_implementation
 {
-  CONST char *name;
+  const char *name;
   size_t size; /* Number of additional bytes to be allocated with this
                  stream.  Access this data using Lstream_data(). */
   /* Read some data from the stream's end and store it into DATA, which
@@ -106,7 +106,7 @@ typedef struct lstream_implementation
      data. (This is useful, e.g., of you're dealing with a
      non-blocking file descriptor and are getting EWOULDBLOCK errors.)
      This function can be NULL if the stream is input-only. */
-  ssize_t (*writer) (Lstream *stream, CONST unsigned char *data, size_t size);
+  ssize_t (*writer) (Lstream *stream, const unsigned char *data, size_t size);
   /* Return non-zero if the last write operation on the stream resulted
      in an attempt to block (EWOULDBLOCK). If this method does not
      exists, the implementation returns 0 */
@@ -145,7 +145,7 @@ typedef struct lstream_implementation
 struct lstream
 {
   struct lcrecord_header header;
-  CONST Lstream_implementation *imp; /* methods for this stream */
+  const Lstream_implementation *imp; /* methods for this stream */
   Lstream_buffering buffering; /* type of buffering in use */
   size_t buffering_size; /* number of bytes buffered */
 
@@ -177,10 +177,10 @@ struct lstream
 #ifdef ERROR_CHECK_TYPECHECK
 INLINE struct lstream *
 error_check_lstream_type (struct lstream *stream,
-                         CONST Lstream_implementation *imp);
+                         const Lstream_implementation *imp);
 INLINE struct lstream *
 error_check_lstream_type (struct lstream *stream,
-                         CONST Lstream_implementation *imp)
+                         const Lstream_implementation *imp)
 {
   assert (stream->imp == imp);
   return stream;
@@ -199,8 +199,8 @@ error_check_lstream_type (struct lstream *stream,
   (lstream_##type->m = type##_##m)
 
 
-Lstream *Lstream_new (CONST Lstream_implementation *imp,
-                     CONST char *mode);
+Lstream *Lstream_new (const Lstream_implementation *imp,
+                     const char *mode);
 void Lstream_reopen (Lstream *lstr);
 void Lstream_set_buffering (Lstream *lstr, Lstream_buffering buffering,
                            int buffering_size);
@@ -210,9 +210,9 @@ int Lstream_fputc (Lstream *lstr, int c);
 int Lstream_fgetc (Lstream *lstr);
 void Lstream_fungetc (Lstream *lstr, int c);
 ssize_t Lstream_read (Lstream *lstr, void *data, size_t size);
-ssize_t Lstream_write (Lstream *lstr, CONST void *data, size_t size);
+ssize_t Lstream_write (Lstream *lstr, const void *data, size_t size);
 int Lstream_was_blocked_p (Lstream *lstr);
-void Lstream_unread (Lstream *lstr, CONST void *data, size_t size);
+void Lstream_unread (Lstream *lstr, const void *data, size_t size);
 int Lstream_rewind (Lstream *lstr);
 int Lstream_seekable_p (Lstream *lstr);
 int Lstream_close (Lstream *lstr);
@@ -339,9 +339,9 @@ int filedesc_stream_fd (Lstream *stream);
 Lisp_Object make_lisp_string_input_stream (Lisp_Object string,
                                           Bytecount offset,
                                           Bytecount len);
-Lisp_Object make_fixed_buffer_input_stream (CONST void *buf, size_t size);
+Lisp_Object make_fixed_buffer_input_stream (const void *buf, size_t size);
 Lisp_Object make_fixed_buffer_output_stream (void *buf, size_t size);
-CONST unsigned char *fixed_buffer_input_stream_ptr (Lstream *stream);
+const unsigned char *fixed_buffer_input_stream_ptr (Lstream *stream);
 unsigned char *fixed_buffer_output_stream_ptr (Lstream *stream);
 Lisp_Object make_resizing_buffer_output_stream (void);
 unsigned char *resizing_buffer_stream_ptr (Lstream *stream);
index 8e524f6..6f5f1bf 100644 (file)
--- a/src/md5.c
+++ b/src/md5.c
@@ -110,7 +110,7 @@ struct md5_ctx
 static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ...  */ };
 
 
-static void md5_process_block (CONST void *, size_t, struct md5_ctx *);
+static void md5_process_block (const void *, size_t, struct md5_ctx *);
 
 
 /* Initialize structure containing state of computation.
@@ -133,7 +133,7 @@ md5_init_ctx (struct md5_ctx *ctx)
    IMPORTANT: On some systems it is required that RESBUF is correctly
    aligned for a 32 bits value.  */
 static void *
-md5_read_ctx (CONST struct md5_ctx *ctx, void *resbuf)
+md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
 {
   ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
   ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
@@ -251,7 +251,7 @@ md5_buffer (const char *buffer, size_t len, void *resblock)
 
 
 static void
-md5_process_bytes (CONST void *buffer, size_t len, struct md5_ctx *ctx)
+md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx)
 {
   /* When we already have some bits in our internal buffer concatenate
      both inputs first.  */
@@ -306,7 +306,7 @@ md5_process_bytes (CONST void *buffer, size_t len, struct md5_ctx *ctx)
    It is assumed that LEN % 64 == 0.  */
 
 static void
-md5_process_block (CONST void *buffer, size_t len, struct md5_ctx *ctx)
+md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx)
 {
   md5_uint32 correct_words[16];
   const md5_uint32 *words = (const md5_uint32 *) buffer;
index 0460f26..df32322 100644 (file)
@@ -95,7 +95,7 @@ menubar_visible_p_changed_in_frame (Lisp_Object specifier, struct frame *f,
 }
 
 Lisp_Object
-current_frame_menubar (CONST struct frame* f)
+current_frame_menubar (const struct frame* f)
 {
   struct window *w = XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f));
   return symbol_value_in_buffer (Qcurrent_menubar, w->buffer);
index b92d00c..c67de98 100644 (file)
@@ -31,7 +31,7 @@ void update_frame_menubars (struct frame *f);
 void free_frame_menubars (struct frame *f);
 Lisp_Object menu_parse_submenu_keywords (Lisp_Object desc,
                                         Lisp_Object gui_item);
-Lisp_Object current_frame_menubar (CONST struct frame* f);
+Lisp_Object current_frame_menubar (const struct frame* f);
 
 EXFUN (Fmenu_find_real_submenu, 2);
 
index 1af7b81..f189636 100644 (file)
@@ -205,7 +205,7 @@ Lowest-level interface to minibuffers.  Don't call this.
    if IGNORE_CASE is true. */
 
 Charcount
-scmp_1 (CONST Bufbyte *s1, CONST Bufbyte *s2, Charcount len,
+scmp_1 (const Bufbyte *s1, const Bufbyte *s2, Charcount len,
        int ignore_case)
 {
   Charcount l = len;
@@ -244,7 +244,7 @@ scmp_1 (CONST Bufbyte *s1, CONST Bufbyte *s2, Charcount len,
 
 
 int
-regexp_ignore_completion_p (CONST Bufbyte *nonreloc,
+regexp_ignore_completion_p (const Bufbyte *nonreloc,
                            Lisp_Object reloc, Bytecount offset,
                            Bytecount length)
 {
@@ -681,7 +681,7 @@ clear_echo_area_internal (struct frame *f, Lisp_Object label, int from_print,
     }
   else
     {
-      write_string_to_stdio_stream (stderr, 0, (CONST Bufbyte *) "\n", 0, 1,
+      write_string_to_stdio_stream (stderr, 0, (const Bufbyte *) "\n", 0, 1,
                                    Qterminal);
       return Qnil;
     }
@@ -702,7 +702,7 @@ clear_echo_area_from_print (struct frame *f, Lisp_Object label, int no_restore)
 }
 
 void
-echo_area_append (struct frame *f, CONST Bufbyte *nonreloc, Lisp_Object reloc,
+echo_area_append (struct frame *f, const Bufbyte *nonreloc, Lisp_Object reloc,
                  Bytecount offset, Bytecount length,
                  Lisp_Object label)
 {
@@ -756,7 +756,7 @@ echo_area_append (struct frame *f, CONST Bufbyte *nonreloc, Lisp_Object reloc,
 }
 
 void
-echo_area_message (struct frame *f, CONST Bufbyte *nonreloc,
+echo_area_message (struct frame *f, const Bufbyte *nonreloc,
                   Lisp_Object reloc, Bytecount offset, Bytecount length,
                   Lisp_Object label)
 {
@@ -801,7 +801,7 @@ echo_area_contents (struct frame *f)
 /* Dump an informative message to the echo area.  This function takes a
    string in internal format. */
 void
-message_internal (CONST Bufbyte *nonreloc, Lisp_Object reloc,
+message_internal (const Bufbyte *nonreloc, Lisp_Object reloc,
                  Bytecount offset, Bytecount length)
 {
   /* This function can call lisp  */
@@ -811,7 +811,7 @@ message_internal (CONST Bufbyte *nonreloc, Lisp_Object reloc,
 }
 
 void
-message_append_internal (CONST Bufbyte *nonreloc, Lisp_Object reloc,
+message_append_internal (const Bufbyte *nonreloc, Lisp_Object reloc,
                         Bytecount offset, Bytecount length)
 {
   /* This function can call lisp  */
@@ -825,7 +825,7 @@ message_append_internal (CONST Bufbyte *nonreloc, Lisp_Object reloc,
    on the format string; message_no_translate() does not. */
 
 static void
-message_1 (CONST char *fmt, va_list args)
+message_1 (const char *fmt, va_list args)
 {
   /* This function can call lisp */
   if (fmt)
@@ -833,7 +833,7 @@ message_1 (CONST char *fmt, va_list args)
       struct gcpro gcpro1;
       /* message_internal() might GC, e.g. if there are after-change-hooks
         on the echo area buffer */
-      Lisp_Object obj = emacs_doprnt_string_va ((CONST Bufbyte *) fmt, Qnil,
+      Lisp_Object obj = emacs_doprnt_string_va ((const Bufbyte *) fmt, Qnil,
                                                -1, args);
       GCPRO1 (obj);
       message_internal (0, obj, 0, -1);
@@ -844,7 +844,7 @@ message_1 (CONST char *fmt, va_list args)
 }
 
 static void
-message_append_1 (CONST char *fmt, va_list args)
+message_append_1 (const char *fmt, va_list args)
 {
   /* This function can call lisp */
   if (fmt)
@@ -852,7 +852,7 @@ message_append_1 (CONST char *fmt, va_list args)
       struct gcpro gcpro1;
       /* message_internal() might GC, e.g. if there are after-change-hooks
         on the echo area buffer */
-      Lisp_Object obj = emacs_doprnt_string_va ((CONST Bufbyte *) fmt, Qnil,
+      Lisp_Object obj = emacs_doprnt_string_va ((const Bufbyte *) fmt, Qnil,
                                                -1, args);
       GCPRO1 (obj);
       message_append_internal (0, obj, 0, -1);
@@ -870,7 +870,7 @@ clear_message (void)
 }
 
 void
-message (CONST char *fmt, ...)
+message (const char *fmt, ...)
 {
   /* This function can call lisp */
   /* I think it's OK to pass the data of Lisp strings as arguments to
@@ -886,7 +886,7 @@ message (CONST char *fmt, ...)
 }
 
 void
-message_append (CONST char *fmt, ...)
+message_append (const char *fmt, ...)
 {
   /* This function can call lisp */
   va_list args;
@@ -899,7 +899,7 @@ message_append (CONST char *fmt, ...)
 }
 
 void
-message_no_translate (CONST char *fmt, ...)
+message_no_translate (const char *fmt, ...)
 {
   /* This function can call lisp */
   /* I think it's OK to pass the data of Lisp strings as arguments to
index 5f2e60e..4d6aff2 100644 (file)
@@ -181,18 +181,18 @@ Lisp_Object Vccl_program_table;
 
 #define CCL_WriteConstJump     0x08 /* Write constant and jump:
                                        1:A--D--D--R--E--S--S-000XXXXX
-                                       2:CONST
+                                       2:const
                                        ------------------------------
-                                       write (CONST);
+                                       write (const);
                                        IC += ADDRESS;
                                        */
 
 #define CCL_WriteConstReadJump 0x09 /* Write constant, read, and jump:
                                        1:A--D--D--R--E--S--S-rrrXXXXX
-                                       2:CONST
+                                       2:const
                                        3:A--D--D--R--E--S--S-rrrYYYYY
                                        -----------------------------
-                                       write (CONST);
+                                       write (const);
                                        IC += 2;
                                        read (reg[rrr]);
                                        IC += ADDRESS;
@@ -756,7 +756,7 @@ struct ccl_prog_stack
 static struct ccl_prog_stack ccl_prog_stack_struct[256];
 
 int
-ccl_driver (struct ccl_program *ccl, CONST unsigned char *source,
+ccl_driver (struct ccl_program *ccl, const unsigned char *source,
            unsigned_char_dynarr *destination, int src_bytes,
            int *consumed, int conversion_mode)
 {
@@ -765,7 +765,7 @@ ccl_driver (struct ccl_program *ccl, CONST unsigned char *source,
   int code = -1; /* init to illegal value,  */
   int field1, field2;
   Lisp_Object *ccl_prog = ccl->prog;
-  CONST unsigned char *src = source, *src_end = src + src_bytes;
+  const unsigned char *src = source, *src_end = src + src_bytes;
   int jump_address = 0; /* shut up the compiler */
   int i, j, op;
   int stack_idx = ccl->stack_idx;
@@ -1768,7 +1768,7 @@ As side effect, each element of REGISTER holds the value of
                  ? XINT (XVECTOR_DATA (reg)[i])
                  : 0);
 
-  ccl_driver (&ccl, (CONST unsigned char *)0, (unsigned_char_dynarr *)0,
+  ccl_driver (&ccl, (const unsigned char *)0, (unsigned_char_dynarr *)0,
              0, (int *)0, CCL_MODE_ENCODING);
   QUIT;
   if (ccl.status != CCL_STAT_SUCCESS)
index 90aad3b..6aac558 100644 (file)
@@ -61,7 +61,7 @@ struct ccl_program {
 #define CCL_MODE_ENCODING 0
 #define CCL_MODE_DECODING 1
 
-int ccl_driver (struct ccl_program *ccl, CONST unsigned char *source,
+int ccl_driver (struct ccl_program *ccl, const unsigned char *source,
                unsigned_char_dynarr *destination, int src_bytes,
                int *consumed, int conversion_mode);
 void setup_ccl_program (struct ccl_program *ccl, Lisp_Object val);
index 285fa69..bf0f718 100644 (file)
@@ -220,7 +220,7 @@ non_ascii_set_charptr_emchar (Bufbyte *str, Emchar c)
    Use the macro charptr_emchar() instead. */
 
 Emchar
-non_ascii_charptr_emchar (CONST Bufbyte *str)
+non_ascii_charptr_emchar (const Bufbyte *str)
 {
   Bufbyte i0 = *str, i1, i2 = 0;
   Lisp_Object charset;
@@ -330,7 +330,7 @@ non_ascii_valid_char_p (Emchar ch)
    charptr_copy_char() instead. */
 
 Bytecount
-non_ascii_charptr_copy_char (CONST Bufbyte *ptr, Bufbyte *str)
+non_ascii_charptr_copy_char (const Bufbyte *ptr, Bufbyte *str)
 {
   Bufbyte *strptr = str;
   *strptr = *ptr++;
index 1d73c97..9e1ee3b 100644 (file)
@@ -786,9 +786,9 @@ Emchar Lstream_get_emchar_1 (Lstream *stream, int first_char);
 int Lstream_fput_emchar (Lstream *stream, Emchar ch);
 void Lstream_funget_emchar (Lstream *stream, Emchar ch);
 
-int copy_internal_to_external (CONST Bufbyte *internal, Bytecount len,
+int copy_internal_to_external (const Bufbyte *internal, Bytecount len,
                               unsigned char *external);
-Bytecount copy_external_to_internal (CONST unsigned char *external,
+Bytecount copy_external_to_internal (const unsigned char *external,
                                     int len, Bufbyte *internal);
 
 #endif /* INCLUDED_mule_charset_h_ */
index 7bab391..ceba9a2 100644 (file)
--- a/src/nas.c
+++ b/src/nas.c
 
 #else /* !emacs */
 #    define warn(str) fprintf (stderr, "%s\n", (str))
-#    define CONST const
 #endif /* emacs */
 
 #ifdef XTOOLKIT
@@ -624,7 +623,7 @@ CatchErrorAndJump (AuServer *old_aud,
 /* Create a name from the sound. */
 
 static char *
-NameFromData (CONST char *buf,
+NameFromData (const char *buf,
              int len)
 
 {
@@ -668,7 +667,7 @@ NameFromData (CONST char *buf,
  */
 
 static SndInfo *
-SndOpenDataForReading (CONST char *data,
+SndOpenDataForReading (const char *data,
                       int length)
 
 {
@@ -744,11 +743,11 @@ static size_t file_posn;
 /* The length of the "file" */
 static size_t file_len;
 /* The actual "file" data. */
-static CONST void* file_data;
+static const void* file_data;
 
 /* Like fopen, but for a buffer in memory */
 static void
-dopen (CONST void* data, size_t length)
+dopen (const void* data, size_t length)
 {
    file_data = data;
    file_len = length;
@@ -845,7 +844,7 @@ readChunk (RiffChunk *c)
    read the wave data from a buffer in memory. */
 
 static WaveInfo *
-WaveOpenDataForReading (CONST char *data,
+WaveOpenDataForReading (const char *data,
                        int length)
 {
     RiffChunk       ck;
index 703e972..9684594 100644 (file)
@@ -50,7 +50,7 @@ typedef struct
   char dd_buf[DIRBLKSIZ];      /* directory block */
 }      DIR;                    /* stream data from opendir() */
 
-DIR *opendir (CONST char *filename);
+DIR *opendir (const char *filename);
 int closedir (DIR *dirp);
 struct direct *readdir (DIR *dirp);
 struct direct *readdirver (DIR *dirp);
index 8797af3..e745609 100644 (file)
--- a/src/nt.c
+++ b/src/nt.c
@@ -2012,7 +2012,7 @@ int setitimer (int kind, const struct itimerval* itnew,
 }
 
 int
-open_input_file (file_data *p_file, CONST char *filename)
+open_input_file (file_data *p_file, const char *filename)
 {
   HANDLE file;
   HANDLE file_mapping;
index e991957..cb169d2 100644 (file)
@@ -80,7 +80,7 @@ extern unsigned char *round_to_next (unsigned char *address,
 /* Useful routines for manipulating memory-mapped files. */
 
 typedef struct file_data {
-    CONST char    *name;
+    const char    *name;
     unsigned long  size;
     HANDLE         file;
     HANDLE         file_mapping;
@@ -96,8 +96,8 @@ typedef struct file_data {
 #define RVA_TO_PTR(var,section,filedata) \
          ((void *)(RVA_TO_OFFSET(var,section) + (filedata).file_base))
 
-int open_input_file (file_data *p_file, CONST char *name);
-int open_output_file (file_data *p_file, CONST char *name, unsigned long size);
+int open_input_file (file_data *p_file, const char *name);
+int open_output_file (file_data *p_file, const char *name, unsigned long size);
 void close_file_data (file_data *p_file);
 
 #endif /* INCLUDED_ntheap_h_ */
index 398e27a..8ff0be7 100644 (file)
@@ -19,7 +19,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 02111-1307, USA.*/
 
 #include <windows.h>
-#undef CONST
 #include <config.h>
 #include <stdio.h>
 #include "sysfile.h"
index 029ba1f..f15fe99 100644 (file)
@@ -400,7 +400,7 @@ reader_thread (void *arg)
 static const char * process_dir;
 
 static BOOL 
-create_child (CONST char *exe, char *cmdline, char *env,
+create_child (const char *exe, char *cmdline, char *env,
              int * pPid, child_process *cp)
 {
   STARTUPINFO start;
@@ -487,7 +487,7 @@ rva_to_section (DWORD rva, IMAGE_NT_HEADERS * nt_header)
 #endif
 
 void
-win32_executable_type (CONST char * filename, int * is_dos_app, int * is_cygnus_app)
+win32_executable_type (const char * filename, int * is_dos_app, int * is_cygnus_app)
 {
   file_data executable;
   char * p;
@@ -638,8 +638,8 @@ merge_and_sort_env (char **envp1, char **envp2, char **new_envp)
 /* When a new child process is created we need to register it in our list,
    so intercept spawn requests.  */
 int 
-sys_spawnve (int mode, CONST char *cmdname,
-            CONST char * CONST *argv, CONST char *CONST *envp)
+sys_spawnve (int mode, const char *cmdname,
+            const char * const *argv, const char *const *envp)
 {
   Lisp_Object program, full;
   char *cmdline, *env, *parg, **targ;
@@ -689,7 +689,7 @@ sys_spawnve (int mode, CONST char *cmdname,
   /* make sure argv[0] and cmdname are both in DOS format */
   unixtodos_filename ((char*)cmdname);
   /* #### KLUDGE */
-  ((CONST char**)argv)[0] = cmdname;
+  ((const char**)argv)[0] = cmdname;
 
   /* Determine whether program is a 16-bit DOS executable, or a Win32
      executable that is implicitly linked to the Cygnus dll (implying it
@@ -1100,7 +1100,7 @@ sys_kill (int pid, int sig)
 
 #if 0
 /* Sync with FSF Emacs 19.34.6 note: ifdef'ed out in XEmacs */
-extern int report_file_error (CONST char *, Lisp_Object);
+extern int report_file_error (const char *, Lisp_Object);
 #endif
 /* The following two routines are used to manipulate stdin, stdout, and
    stderr of our child processes.
index fca8e11..726af9d 100644 (file)
@@ -58,12 +58,12 @@ Boston, MA 02111-1307, USA.  */
 
 typedef struct colormap_t 
 {
-  CONST char *name;
-  CONST COLORREF colorref;
+  const char *name;
+  const COLORREF colorref;
 } colormap_t;
 
 /* Colors from X11R6 "XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp" */
-static CONST colormap_t mswindows_X_color_map[] = 
+static const colormap_t mswindows_X_color_map[] = 
 {
   {"snow"                      , PALETTERGB (255, 250, 250) },
   {"GhostWhite"                        , PALETTERGB (248, 248, 255) },
@@ -727,12 +727,12 @@ static CONST colormap_t mswindows_X_color_map[] =
 
 typedef struct fontmap_t 
 {
-  CONST char *name;
-  CONST int value;
+  const char *name;
+  const int value;
 } fontmap_t;
 
 /* Default weight first, preferred names listed before synonyms */
-static CONST fontmap_t fontweight_map[] = 
+static const fontmap_t fontweight_map[] = 
 {
   {"Regular"           , FW_REGULAR},  /* The standard font weight */
   {"Thin"              , FW_THIN},
@@ -752,7 +752,7 @@ static CONST fontmap_t fontweight_map[] =
 
 /* Default charset first, no synonyms allowed because these names are 
  * matched against the names reported by win32 by match_font() */
-static CONST fontmap_t charset_map[] = 
+static const fontmap_t charset_map[] = 
 {
   {"Western"           , ANSI_CHARSET},
   {"Symbol"            , SYMBOL_CHARSET},
@@ -794,7 +794,7 @@ hexval (char c)
 }
 
 COLORREF
-mswindows_string_to_color(CONST char *name)
+mswindows_string_to_color(const char *name)
 {
   int i;
 
@@ -1026,7 +1026,7 @@ mswindows_enumerate_fonts (HDC hdc)
   return font_enum.list;
 }
 
-static void
+static HFONT
 mswindows_create_font_variant (Lisp_Font_Instance* f,
                               int under, int strike)
 {
@@ -1053,6 +1053,7 @@ mswindows_create_font_variant (Lisp_Font_Instance* f,
     }
 
   FONT_INSTANCE_MSWINDOWS_HFONT_VARIANT (f, under, strike) = hfont;
+  return hfont;
 }
 
 HFONT
@@ -1060,14 +1061,10 @@ mswindows_get_hfont (Lisp_Font_Instance* f,
                     int under, int strike)
 {
   /* Cannot GC */
-  HFONT hfont;
-
-  if (FONT_INSTANCE_MSWINDOWS_HFONT_VARIANT (f, under, strike) == NULL)
-    mswindows_create_font_variant (f, under, strike);
+  HFONT hfont = FONT_INSTANCE_MSWINDOWS_HFONT_VARIANT (f, under, strike);
 
-  assert (FONT_INSTANCE_MSWINDOWS_HFONT_VARIANT (f, under, strike) != NULL);
-
-  hfont = FONT_INSTANCE_MSWINDOWS_HFONT_VARIANT (f, under, strike);
+  if (hfont == NULL)
+    hfont = mswindows_create_font_variant (f, under, strike);
 
   /* If strikeout/underline variant of the font could not be
      created, then use the base version of the font */
@@ -1087,7 +1084,7 @@ static int
 mswindows_initialize_color_instance (Lisp_Color_Instance *c, Lisp_Object name,
                               Lisp_Object device, Error_behavior errb)
 {
-  CONST char *extname;
+  const char *extname;
   COLORREF color;
 
   TO_EXTERNAL_FORMAT (LISP_STRING, name,
@@ -1159,7 +1156,7 @@ mswindows_color_instance_rgb_components (Lisp_Color_Instance *c)
 static int
 mswindows_valid_color_name_p (struct device *d, Lisp_Object color)
 {
-  CONST char *extname;
+  const char *extname;
 
   TO_EXTERNAL_FORMAT (LISP_STRING, color,
                      C_STRING_ALLOCA, extname,
@@ -1181,14 +1178,14 @@ initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object name,
                          Lisp_Object device_font_list, HDC hdc,
                          Error_behavior errb)
 {
-  CONST char *extname;
+  const char *extname;
   LOGFONT logfont;
   int fields, i;
   int pt;
   char fontname[LF_FACESIZE], weight[LF_FACESIZE], *style, points[8];
   char effects[LF_FACESIZE], charset[LF_FACESIZE];
   char *c;
-  HFONT hfont, holdfont;
+  HFONT hfont, hfont2;
   TEXTMETRIC metrics;
 
   extname = XSTRING_DATA (name);
@@ -1390,15 +1387,11 @@ initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object name,
   /* Default to monospaced if the specified fontname doesn't exist. */
   logfont.lfPitchAndFamily = FF_MODERN;
 
-  /* Windows will silently substitute a default font if the fontname
-   specifies a non-existent font. So we check the font against the
-   device's list of font patterns to make sure that at least one of
-   them matches.
-
-   Personally, I do not like the idea - it is better to come out with
-   some font than completely without one. The diversity of printer
-   fonts is much greater than that of screen font. We can tread on
-   that. -- kkm. */
+  /* Windows will silently substitute a default font if the fontname specifies
+     a non-existent font. This is bad for screen fonts because it doesn't
+     allow higher-level code to see the error and to act appropriately.
+     For instance complex_vars_of_faces() sets up a fallback list of fonts
+     for the default face. */
 
   if (!NILP (device_font_list))
     {
@@ -1427,27 +1420,28 @@ initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object name,
   f->data = xnew_and_zero (struct mswindows_font_instance_data);
   FONT_INSTANCE_MSWINDOWS_HFONT_VARIANT (f,0,0) = hfont;
   
-  holdfont = SelectObject(hdc, hfont);
-  if (!holdfont)
+  /* Some underlined fonts have the descent of one pixel more than their
+     non-underlined counterparts. Font variants though are assumed to have
+     identical metrics. So get the font metrics from the underlined variant
+     of the font */
+  hfont2 = mswindows_create_font_variant (f, 1, 0);
+  if (hfont2 != MSWINDOWS_BAD_HFONT)
+    hfont = hfont2;
+
+  hfont2 = SelectObject(hdc, hfont);
+  if (!hfont2)
     {
       mswindows_finalize_font_instance (f);
       maybe_signal_simple_error ("Couldn't map font", name, Qfont, errb);
       return 0;
     }
-
   GetTextMetrics (hdc, &metrics);
-  SelectObject(hdc, holdfont);
+  SelectObject(hdc, hfont2);
 
   f->width = (unsigned short) metrics.tmAveCharWidth;
   f->height = (unsigned short) metrics.tmHeight;
-  /* Font variant metrics hack. The problem is that in Windows
-     some underlined fonts have the descent of one pixel more
-     than their non-underlined counterparts.  Font variants
-     though are assumed to have identical metrics. Lowering
-     the font's baseline one pixel down cures the problem, and
-     is visually undetectable. - kkm */
-  f->ascent = (unsigned short) metrics.tmAscent - 1;
-  f->descent = (unsigned short) metrics.tmDescent + 1;
+  f->ascent = (unsigned short) metrics.tmAscent;
+  f->descent = (unsigned short) metrics.tmDescent;
   f->proportional_p = (metrics.tmPitchAndFamily & TMPF_FIXED_PITCH);
 
   return 1;
@@ -1578,7 +1572,7 @@ mswindows_font_instance_truename (Lisp_Font_Instance *f, Error_behavior errb)
 
 static int
 mswindows_font_spec_matches_charset (struct device *d, Lisp_Object charset,
-                            CONST Bufbyte *nonreloc, Lisp_Object reloc,
+                            const Bufbyte *nonreloc, Lisp_Object reloc,
                             Bytecount offset, Bytecount length)
 {
   /* #### Implement me */
index 21e1774..b598c8d 100644 (file)
@@ -220,7 +220,7 @@ tty_initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object name,
   Bufbyte *str = XSTRING_DATA (name);
   Lisp_Object charset = Qnil;
 
-  if (strncmp ((CONST char *) str, "normal", 6))
+  if (strncmp ((const char *) str, "normal", 6))
     return 0;
   str += 6;
   if (*str)
@@ -229,7 +229,7 @@ tty_initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object name,
       if (*str != '/')
        return 0;
       str++;
-      charset = Ffind_charset (intern ((CONST char *) str));
+      charset = Ffind_charset (intern ((const char *) str));
       if (NILP (charset))
        return 0;
 #else
@@ -284,10 +284,10 @@ tty_list_fonts (Lisp_Object pattern, Lisp_Object device)
 
 static int
 tty_font_spec_matches_charset (struct device *d, Lisp_Object charset,
-                              CONST Bufbyte *nonreloc, Lisp_Object reloc,
+                              const Bufbyte *nonreloc, Lisp_Object reloc,
                               Bytecount offset, Bytecount length)
 {
-  CONST Bufbyte *the_nonreloc = nonreloc;
+  const Bufbyte *the_nonreloc = nonreloc;
 
   if (!the_nonreloc)
     the_nonreloc = XSTRING_DATA (reloc);
@@ -296,14 +296,14 @@ tty_font_spec_matches_charset (struct device *d, Lisp_Object charset,
 
   if (UNBOUNDP (charset))
     return !memchr (the_nonreloc, '/', length);
-  the_nonreloc = (CONST Bufbyte *) memchr (the_nonreloc, '/', length);
+  the_nonreloc = (const Bufbyte *) memchr (the_nonreloc, '/', length);
   if (!the_nonreloc)
     return 0;
   the_nonreloc++;
   {
     Lisp_String *s = symbol_name (XSYMBOL (XCHARSET_NAME (charset)));
-    return !strcmp ((CONST char *) the_nonreloc,
-                   (CONST char *) string_data (s));
+    return !strcmp ((const char *) the_nonreloc,
+                   (const char *) string_data (s));
   }
 }
 
@@ -315,7 +315,7 @@ tty_find_charset_font (Lisp_Object device, Lisp_Object font,
 {
   Bufbyte *fontname = XSTRING_DATA (font);
 
-  if (strchr ((CONST char *) fontname, '/'))
+  if (strchr ((const char *) fontname, '/'))
     {
       if (tty_font_spec_matches_charset (XDEVICE (device), charset, 0,
                                         font, 0, -1))
index 5ab99bc..3889347 100644 (file)
@@ -229,7 +229,7 @@ x_parse_nearest_color (struct device *d, XColor *color, Bufbyte *name,
 
   xzero (*color);
   {
-    CONST Extbyte *extname;
+    const Extbyte *extname;
     Extcount extnamelen;
 
     TO_EXTERNAL_FORMAT (DATA, (name, len),
@@ -350,7 +350,7 @@ x_valid_color_name_p (struct device *d, Lisp_Object color)
   Display *dpy = DEVICE_X_DISPLAY (d);
   Colormap cmap = DEVICE_X_COLORMAP (d);
 
-  CONST char *extname;
+  const char *extname;
 
   TO_EXTERNAL_FORMAT (LISP_STRING, color, C_STRING_ALLOCA, extname, Qctext);
 
@@ -368,7 +368,7 @@ x_initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object name,
 {
   Display *dpy = DEVICE_X_DISPLAY (XDEVICE (device));
   XFontStruct *xf;
-  CONST char *extname;
+  const char *extname;
 
   TO_EXTERNAL_FORMAT (LISP_STRING, f->name, C_STRING_ALLOCA, extname, Qctext);
   xf = XLoadQueryFont (dpy, extname);
@@ -859,7 +859,7 @@ x_list_fonts (Lisp_Object pattern, Lisp_Object device)
   char **names;
   int count = 0;
   Lisp_Object result = Qnil;
-  CONST char *patternext;
+  const char *patternext;
 
   TO_EXTERNAL_FORMAT (LISP_STRING, pattern,
                      C_STRING_ALLOCA, patternext,
@@ -878,7 +878,7 @@ x_list_fonts (Lisp_Object pattern, Lisp_Object device)
 
 static int
 x_font_spec_matches_charset (struct device *d, Lisp_Object charset,
-                            CONST Bufbyte *nonreloc, Lisp_Object reloc,
+                            const Bufbyte *nonreloc, Lisp_Object reloc,
                             Bytecount offset, Bytecount length)
 {
   if (UNBOUNDP (charset))
@@ -890,7 +890,7 @@ x_font_spec_matches_charset (struct device *d, Lisp_Object charset,
      */
   if (EQ (charset, Vcharset_ascii))
     {
-      CONST Bufbyte *the_nonreloc = nonreloc;
+      const Bufbyte *the_nonreloc = nonreloc;
       int i;
       Bytecount the_length = length;
 
@@ -902,7 +902,7 @@ x_font_spec_matches_charset (struct device *d, Lisp_Object charset,
        {
          for (i = 0;; i++)
            {
-             CONST Bufbyte *new_nonreloc = (CONST Bufbyte *)
+             const Bufbyte *new_nonreloc = (const Bufbyte *)
                memchr (the_nonreloc, '-', the_length);
              if (!new_nonreloc)
                break;
@@ -933,7 +933,7 @@ x_find_charset_font (Lisp_Object device, Lisp_Object font, Lisp_Object charset)
   char **names;
   int count = 0;
   Lisp_Object result = Qnil;
-  CONST char *patternext;
+  const char *patternext;
   int i;
 
   TO_EXTERNAL_FORMAT (LISP_STRING, font,
@@ -945,7 +945,7 @@ x_find_charset_font (Lisp_Object device, Lisp_Object font, Lisp_Object charset)
   /* #### This code seems awfully bogus -- mrb */
   for (i = 0; i < count; i ++)
     {
-      CONST char *intname;
+      const char *intname;
 
       TO_INTERNAL_FORMAT (C_STRING, names[i],
                          C_STRING_ALLOCA, intname,
index e980944..3cedafd 100644 (file)
@@ -682,7 +682,7 @@ font_mark (Lisp_Object obj)
 
 int
 font_spec_matches_charset (struct device *d, Lisp_Object charset,
-                          CONST Bufbyte *nonreloc, Lisp_Object reloc,
+                          const Bufbyte *nonreloc, Lisp_Object reloc,
                           Bytecount offset, Bytecount length)
 {
   return DEVMETH_OR_GIVEN (d, font_spec_matches_charset,
index c5d781d..49036d0 100644 (file)
@@ -148,7 +148,7 @@ DECLARE_LRECORD (font_instance, Lisp_Font_Instance);
 
 #ifdef MULE
 int font_spec_matches_charset (struct device *d, Lisp_Object charset,
-                              CONST Bufbyte *nonreloc,
+                              const Bufbyte *nonreloc,
                               Lisp_Object reloc, Bytecount offset,
                               Bytecount length);
 #endif
index a860cb1..51ea934 100644 (file)
@@ -44,7 +44,7 @@ Lisp_Object Vopaque_ptr_free_list;
 static void
 print_opaque (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
-  CONST Lisp_Opaque *p = XOPAQUE (obj);
+  const Lisp_Opaque *p = XOPAQUE (obj);
   char buf[200];
 
   sprintf (buf, "#<INTERNAL OBJECT (XEmacs bug?) (opaque, size=%lu) 0x%lx>",
@@ -53,9 +53,9 @@ print_opaque (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 }
 
 static size_t
-sizeof_opaque (CONST void *header)
+sizeof_opaque (const void *header)
 {
-  CONST Lisp_Opaque *p = (CONST Lisp_Opaque *) header;
+  const Lisp_Opaque *p = (const Lisp_Opaque *) header;
   return offsetof (Lisp_Opaque, data) + p->size;
 }
 
@@ -64,7 +64,7 @@ sizeof_opaque (CONST void *header)
    If DATA is OPAQUE_UNINIT, the object's data is uninitialized.
    Else the object's data is initialized by copying from DATA. */
 Lisp_Object
-make_opaque (CONST void *data, size_t size)
+make_opaque (const void *data, size_t size)
 {
   Lisp_Opaque *p = (Lisp_Opaque *)
     alloc_lcrecord (offsetof (Lisp_Opaque, data) + size, &lrecord_opaque);
@@ -121,7 +121,7 @@ DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("opaque", opaque,
 static void
 print_opaque_ptr (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
-  CONST Lisp_Opaque_Ptr *p = XOPAQUE_PTR (obj);
+  const Lisp_Opaque_Ptr *p = XOPAQUE_PTR (obj);
   char buf[200];
 
   sprintf (buf, "#<INTERNAL OBJECT (XEmacs bug?) (opaque_ptr, adr=0x%lx) 0x%lx>",
index 5420681..0350bd7 100644 (file)
@@ -26,7 +26,8 @@ Boston, MA 02111-1307, USA.  */
 #ifndef INCLUDED_opaque_h_
 #define INCLUDED_opaque_h_
 
-typedef union {
+typedef union
+{
   struct { Lisp_Object obj; } obj;
   struct { void *p; } p;
   struct { double d; } d;
@@ -48,8 +49,8 @@ DECLARE_LRECORD (opaque, Lisp_Opaque);
    functions should not be doing this. */
 
 /* Alternative DATA arguments to make_opaque() */
-#define OPAQUE_CLEAR  ((CONST void *)  0)
-#define OPAQUE_UNINIT ((CONST void *) -1)
+#define OPAQUE_CLEAR  ((const void *)  0)
+#define OPAQUE_UNINIT ((const void *) -1)
 
 #define OPAQUE_SIZE(op) ((op)->size)
 #define OPAQUE_DATA(op) ((void *) ((op)->data))
@@ -58,7 +59,7 @@ DECLARE_LRECORD (opaque, Lisp_Opaque);
 #define XOPAQUE_DATA(op) OPAQUE_DATA (XOPAQUE (op))
 #define XOPAQUE_MARKFUN(op) OPAQUE_MARKFUN (XOPAQUE (op))
 
-Lisp_Object make_opaque (CONST void *data, size_t size);
+Lisp_Object make_opaque (const void *data, size_t size);
 
 typedef struct Lisp_Opaque_Ptr
 {
index dabcab7..981e4f8 100644 (file)
@@ -107,12 +107,12 @@ int stdout_needs_newline;
 
 void
 write_string_to_stdio_stream (FILE *stream, struct console *con,
-                             CONST Bufbyte *str,
+                             const Bufbyte *str,
                              Bytecount offset, Bytecount len,
                              Lisp_Object coding_system)
 {
   Extcount extlen;
-  CONST Extbyte *extptr;
+  const Extbyte *extptr;
 
   TO_EXTERNAL_FORMAT (DATA, (str + offset, len),
                      ALLOCA, (extptr, extlen),
@@ -152,7 +152,7 @@ write_string_to_stdio_stream (FILE *stream, struct console *con,
    buffer_insert_string_1() in insdel.c. */
 
 static void
-output_string (Lisp_Object function, CONST Bufbyte *nonreloc,
+output_string (Lisp_Object function, const Bufbyte *nonreloc,
               Lisp_Object reloc, Bytecount offset, Bytecount len)
 {
   /* This function can GC */
@@ -162,7 +162,7 @@ output_string (Lisp_Object function, CONST Bufbyte *nonreloc,
      other functions that take both a nonreloc and a reloc, or things
      may get confused and an assertion failure in
      fixup_internal_substring() may get triggered. */
-  CONST Bufbyte *newnonreloc = nonreloc;
+  const Bufbyte *newnonreloc = nonreloc;
   struct gcpro gcpro1, gcpro2;
 
   /* Emacs won't print while GCing, but an external debugger might */
@@ -347,7 +347,7 @@ print_finish (Lisp_Object stream, Lisp_Object frame_kludge)
 \f
 /* Used for printing a single-byte character (*not* any Emchar).  */
 #define write_char_internal(string_of_length_1, stream)                        \
-  output_string (stream, (CONST Bufbyte *) (string_of_length_1),       \
+  output_string (stream, (const Bufbyte *) (string_of_length_1),       \
                 Qnil, 0, 1)
 
 /* NOTE: Do not call this with the data of a Lisp_String, as
@@ -360,7 +360,7 @@ print_finish (Lisp_Object stream, Lisp_Object frame_kludge)
    canonicalize_printcharfun() (i.e. Qnil means stdout, not
    Vstandard_output, etc.)  */
 void
-write_string_1 (CONST Bufbyte *str, Bytecount size, Lisp_Object stream)
+write_string_1 (const Bufbyte *str, Bytecount size, Lisp_Object stream)
 {
   /* This function can GC */
 #ifdef ERROR_CHECK_BUFPOS
@@ -370,10 +370,10 @@ write_string_1 (CONST Bufbyte *str, Bytecount size, Lisp_Object stream)
 }
 
 void
-write_c_string (CONST char *str, Lisp_Object stream)
+write_c_string (const char *str, Lisp_Object stream)
 {
   /* This function can GC */
-  write_string_1 ((CONST Bufbyte *) str, strlen (str), stream);
+  write_string_1 ((const Bufbyte *) str, strlen (str), stream);
 }
 
 \f
@@ -859,7 +859,7 @@ long_to_string (char *buffer, long number)
 }
 \f
 static void
-print_vector_internal (CONST char *start, CONST char *end,
+print_vector_internal (const char *start, const char *end,
                        Lisp_Object obj,
                        Lisp_Object printcharfun, int escapeflag)
 {
@@ -1407,7 +1407,7 @@ to 0.
   Bufbyte str[MAX_EMCHAR_LEN];
   Bytecount len;
   int extlen;
-  CONST Extbyte *extptr;
+  const Extbyte *extptr;
 
   CHECK_CHAR_COERCE_INT (character);
   len = set_charptr_emchar (str, XCHAR (character));
index 9799b79..ad56f70 100644 (file)
@@ -168,7 +168,7 @@ run_in_other_process (HANDLE h_process,
                      LPVOID data, size_t data_size)
 {
   process_memory pm;
-  CONST size_t code_size = FRAGMENT_CODE_SIZE;
+  const size_t code_size = FRAGMENT_CODE_SIZE;
   /* Need at most 3 extra bytes of memory, for data alignment */
   size_t total_size = code_size + data_size + 3;
   LPVOID remote_data;
index 41b766c..c4f8bbd 100644 (file)
@@ -127,7 +127,7 @@ close_descriptor_pair (int in, int out)
    to get rid of irrelevant descriptors.  */
 
 static int
-close_process_descs_mapfun (CONST void* key, void* contents, void* arg)
+close_process_descs_mapfun (const void* key, void* contents, void* arg)
 {
   Lisp_Object proc;
   CVOID_TO_LISP (proc, contents);
@@ -372,7 +372,7 @@ get_internet_address (Lisp_Object host, struct sockaddr_in *address,
 #endif /*  !(HAVE_GETADDRINFO && HAVE_GETNAMEINFO) */
 
 static void
-set_socket_nonblocking_maybe (int fd, int port, CONST char* proto)
+set_socket_nonblocking_maybe (int fd, int port, const char* proto)
 {
 #ifdef PROCESS_IO_BLOCKING
   Lisp_Object tail;
@@ -1223,7 +1223,7 @@ unix_process_send_eof (Lisp_Object proc)
   Bufbyte eof_char = get_eof_char (XPROCESS (proc));
   send_process (proc, Qnil, &eof_char, 0, 1);
 #else
-  send_process (proc, Qnil, (CONST Bufbyte *) "\004", 0, 1);
+  send_process (proc, Qnil, (const Bufbyte *) "\004", 0, 1);
 #endif
   return 1;
 }
index b2ddd52..643e123 100644 (file)
@@ -208,11 +208,11 @@ get_process_streams (Lisp_Process *p, Lisp_Object *instr, Lisp_Object *outstr)
 Lisp_Process *
 get_process_from_usid (USID usid)
 {
-  CONST void *vval;
+  const void *vval;
 
   assert (usid != USID_ERROR && usid != USID_DONTHASH);
 
-  if (gethash ((CONST void*)usid, usid_to_process, &vval))
+  if (gethash ((const void*)usid, usid_to_process, &vval))
     {
       Lisp_Object proc;
       CVOID_TO_LISP (proc, vval);
@@ -483,7 +483,7 @@ init_process_io_handles (Lisp_Process *p, void* in, void* out, int flags)
     {
       Lisp_Object proc = Qnil;
       XSETPROCESS (proc, p);
-      puthash ((CONST void*)usid, LISP_TO_VOID (proc), usid_to_process);
+      puthash ((const void*)usid, LISP_TO_VOID (proc), usid_to_process);
     }
 
   MAYBE_PROCMETH (init_process_io_handles, (p, in, out, flags));
@@ -964,7 +964,7 @@ read_process_output (Lisp_Object proc)
 
 void
 send_process (Lisp_Object proc,
-              Lisp_Object relocatable, CONST Bufbyte *nonrelocatable,
+              Lisp_Object relocatable, const Bufbyte *nonrelocatable,
               int start, int len)
 {
   /* This function can GC */
@@ -1266,13 +1266,13 @@ See `set-process-sentinel' for more info on sentinels.
 }
 
 \f
-CONST char *
+const char *
 signal_name (int signum)
 {
   if (signum >= 0 && signum < NSIG)
-    return (CONST char *) sys_siglist[signum];
+    return (const char *) sys_siglist[signum];
 
-  return (CONST char *) GETTEXT ("unknown signal");
+  return (const char *) GETTEXT ("unknown signal");
 }
 
 void
@@ -1643,7 +1643,7 @@ SIGCODE may be an integer, or a symbol whose name is a signal name.
       name = string_data (XSYMBOL (sigcode)->name);
 
 #define handle_signal(signal)                          \
-  else if (!strcmp ((CONST char *) name, #signal))     \
+  else if (!strcmp ((const char *) name, #signal))     \
     XSETINT (sigcode, signal)
 
       if (0)
@@ -1859,7 +1859,7 @@ deactivate_process (Lisp_Object proc)
                                            p->pipe_outstream);
 
   if (usid != USID_DONTHASH)
-    remhash ((CONST void*)usid, usid_to_process);
+    remhash ((const void*)usid, usid_to_process);
 
   p->pipe_instream = Qnil;
   p->pipe_outstream = Qnil;
index 472cd0e..8e230cf 100644 (file)
@@ -73,7 +73,7 @@ void set_process_filter (Lisp_Object proc,
 extern volatile int synch_process_alive;
 
 /* Nonzero => this is a string explaining death of synchronous subprocess.  */
-extern CONST char *synch_process_death;
+extern const char *synch_process_death;
 
 /* If synch_process_death is zero,
    this is exit code of synchronous subprocess.  */
@@ -114,11 +114,11 @@ int
 void
 #endif
 child_setup (int in, int out, int err,
-                 char **new_argv, CONST char *current_dir);
+                 char **new_argv, const char *current_dir);
 
 Charcount read_process_output (Lisp_Object proc);
 
-CONST char *signal_name (int signum);
+const char *signal_name (int signum);
 
 Lisp_Object canonicalize_host_name (Lisp_Object host);
 
index b8ce625..a6213e1 100644 (file)
@@ -178,7 +178,7 @@ void init_process_io_handles (Lisp_Process *p, void* in,
                              void* out, int flags);
 void send_process (Lisp_Object proc,
                   Lisp_Object relocatable,
-                  CONST Bufbyte *nonrelocatable,
+                  const Bufbyte *nonrelocatable,
                   int start, int len);
 
 #endif /* INCLUDED_procimpl_h_ */
index 111575b..5f2fbf6 100644 (file)
@@ -135,14 +135,14 @@ sigprof_handler (int signo)
           lose because of this.  Even worse, if the memory allocation
           fails, the `error' generated whacks everything hard. */
        long count;
-       CONST void *vval;
+       const void *vval;
 
        if (gethash (LISP_TO_VOID (fun), big_profile_table, &vval))
          count = (long) vval;
        else
          count = 0;
        count++;
-       vval = (CONST void *) count;
+       vval = (const void *) count;
        puthash (LISP_TO_VOID (fun), (void *) vval, big_profile_table);
       }
 
@@ -226,7 +226,7 @@ struct get_profiling_info_closure
 };
 
 static int
-get_profiling_info_maphash (CONST void *void_key,
+get_profiling_info_maphash (const void *void_key,
                            void *void_val,
                            void *void_closure)
 {
@@ -264,7 +264,7 @@ Return the profiling info as an alist.
 }
 
 static int
-mark_profiling_info_maphash (CONST void *void_key,
+mark_profiling_info_maphash (const void *void_key,
                             void *void_val,
                             void *void_closure)
 {
index 9c9b798..e091b2f 100644 (file)
@@ -1319,7 +1319,7 @@ r_alloc_check (void)
 #include <stdio.h>
 
 typedef void *VM_ADDR;         /* VM addresses */
-static CONST VM_ADDR VM_FAILURE_ADDR = (VM_ADDR) -1; /* mmap returns this when it fails. */
+static const VM_ADDR VM_FAILURE_ADDR = (VM_ADDR) -1; /* mmap returns this when it fails. */
 
 /* Configuration for relocating allocator. */
 
index c3b55e0..12a5ae7 100644 (file)
@@ -26,8 +26,9 @@ Boston, MA 02111-1307, USA.  */
 
    Chuck Thompson
    Lots of work done by Ben Wing for Mule
-   Partially rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
- */
+
+   Partially rewritten for mswindows by Jonathan Harris, November 1997
+   for 21.0.  */
 
 #include <config.h>
 #include "lisp.h"
@@ -91,7 +92,7 @@ typedef struct textual_run
 static int
 separate_textual_runs (unsigned char *text_storage,
                       textual_run *run_storage,
-                      CONST Emchar *str, Charcount len)
+                      const Emchar *str, Charcount len)
 {
   Lisp_Object prev_charset = Qunbound; /* not Qnil because that is a
                                          possible valid charset when
@@ -203,20 +204,24 @@ mswindows_text_width_single_run (HDC hdc, struct face_cachel *cachel,
  * Given F, retrieve device context. F can be a display frame, or
  * a print job.
  */
-static HDC
+INLINE HDC
 get_frame_dc (struct frame *f)
 {
   if (FRAME_MSWINDOWS_P (f))
     return FRAME_MSWINDOWS_DC (f);
   else
-    return DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
+    {
+      if (!FRAME_MSPRINTER_PAGE_STARTED (f))
+       msprinter_start_page (f);
+      return DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
+    }
 }
 
 /*
  * Given F, retrieve compatible device context. F can be a display
  * frame, or a print job.
  */
-static HDC
+INLINE HDC
 get_frame_compdc (struct frame *f)
 {
   if (FRAME_MSWINDOWS_P (f))
@@ -703,7 +708,7 @@ mswindows_output_pixmap (struct window *w, Lisp_Object image_instance,
  * to by PRC, and paints only the intersection
  */
 static void
-mswindows_redisplay_deadbox_maybe (struct window *w, CONST RECT* prc)
+mswindows_redisplay_deadbox_maybe (struct window *w, const RECT* prc)
 {
   int sbh = window_scrollbar_height (w);
   int sbw = window_scrollbar_width (w);
@@ -1280,7 +1285,7 @@ mswindows_output_vertical_divider (struct window *w, int clear_unused)
  ****************************************************************************/
 static int
 mswindows_text_width (struct frame *f, struct face_cachel *cachel,
-                     CONST Emchar *str, Charcount len)
+                     const Emchar *str, Charcount len)
 {
   HDC hdc = get_frame_dc (f);
   int width_so_far = 0;
index 0756eed..4d5fe0c 100644 (file)
@@ -1161,8 +1161,13 @@ redisplay_output_subwindow (struct window *w,
   Lisp_Object window;
   struct display_glyph_area sdga;
 
-  dga->height = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (p);
-  dga->width = IMAGE_INSTANCE_SUBWINDOW_WIDTH (p);
+  dga->height = IMAGE_INSTANCE_HEIGHT (p);
+  dga->width = IMAGE_INSTANCE_WIDTH (p);
+
+  /* The first thing we are going to do is update the display
+     characteristics of the subwindow. This also clears the dirty
+     flags as a side effect. */
+  update_subwindow (image_instance);
 
   /* This makes the glyph area fit into the display area. */
   if (!redisplay_normalize_glyph_area (db, dga))
@@ -1187,8 +1192,8 @@ redisplay_output_subwindow (struct window *w,
      cases.*/
   sdga.xoffset = -dga->xoffset;
   sdga.yoffset = -dga->yoffset;
-  sdga.height = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (p);
-  sdga.width = IMAGE_INSTANCE_SUBWINDOW_WIDTH (p);
+  sdga.height = IMAGE_INSTANCE_HEIGHT (p);
+  sdga.width = IMAGE_INSTANCE_WIDTH (p);
 
   if (redisplay_display_boxes_in_window_p (w, db, &sdga) < 0)
     {
@@ -1206,6 +1211,24 @@ redisplay_output_subwindow (struct window *w,
  redisplay_output_layout
 
  Output a widget hierarchy. This can safely call itself recursively.
+
+ The complexity of outputting layouts is deciding whether to do it or
+ not. Consider a layout enclosing some text, the text changes and is
+ marked as dirty, but the enclosing layout has not been marked as
+ dirty so no updates occur and the text will potentially be truncated.
+ Alternatively we hold a back pointer in the image instance to the
+ parent and mark the parent as dirty. But the layout code assumes that
+ if the layout is dirty then the whole layout should be redisplayed,
+ so we then get lots of flashing even though only the text has changed
+ size. Of course if the text shrinks in size then we do actually need
+ to redisplay the layout to repaint the exposed area. So what happens
+ if we make a non-structural change like changing color? Either we
+ redisplay everything, or we redisplay nothing. These are exactly the
+ issues lwlib has to grapple with. We really need to know what has
+ actually changed and make a layout decision based on that. We also
+ really need to know what has changed so that we can only make the
+ neccessary changes in update_subwindow.  This has all now been
+ implemented, Viva la revolution!
  ****************************************************************************/
 void
 redisplay_output_layout (struct window *w,
@@ -1246,7 +1269,11 @@ redisplay_output_layout (struct window *w,
 
   /* Highly dodgy optimization. We want to only output the whole
      layout if we really have to. */
-  if (frame_really_changed || IMAGE_INSTANCE_DIRTYP (p))
+  if (frame_really_changed 
+      || IMAGE_INSTANCE_LAYOUT_CHANGED (p)
+      || IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p)
+      || IMAGE_INSTANCE_SIZE_CHANGED (p)
+      || IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
     {
       /* First clear the area we are drawing into. This is the easiest
         thing to do since we have many gaps that we have to make sure are
@@ -1410,6 +1437,11 @@ redisplay_output_layout (struct window *w,
            }
        }
     }
+  
+  /* Update any display properties. I'm not sure whether this actually
+     does anything for layouts except clear the changed flags. */
+  update_subwindow (image_instance);
+
   Dynarr_free (buf);
 }
 
index 66b9445..773eea3 100644 (file)
@@ -56,11 +56,11 @@ Boston, MA 02111-1307, USA.  */
 #ifdef __cplusplus
 extern "C" {
 #endif
-extern int tgetent (CONST char *, CONST char *);
-extern int tgetflag (CONST char *);
-extern int tgetnum (CONST char *);
-extern char *tgetstr (CONST char *, char **);
-extern void tputs (CONST char *, int, void (*)(int));
+extern int tgetent (const char *, const char *);
+extern int tgetflag (const char *);
+extern int tgetnum (const char *);
+extern char *tgetstr (const char *, char **);
+extern void tputs (const char *, int, void (*)(int));
 #ifdef __cplusplus
 }
 #endif
@@ -107,7 +107,7 @@ static void term_get_fkeys (Lisp_Object keymap, char **address);
  column, so we use emchar_string_displayed_columns().
  ****************************************************************************/
 static int
-tty_text_width (struct frame *f, struct face_cachel *cachel, CONST Emchar *str,
+tty_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str,
                Charcount len)
 {
   return emchar_string_displayed_columns (str, len);
@@ -1305,8 +1305,8 @@ init_tty_for_redisplay (struct device *d, char *terminal_type)
 \f
 struct fkey_table
 {
-  CONST char *cap;
-  CONST char *name;
+  const char *cap;
+  const char *name;
 };
 
   /* Termcap capability names that correspond directly to X keysyms.
@@ -1448,8 +1448,8 @@ term_get_fkeys_1 (Lisp_Object function_key_map)
      "k;", and if it is present, assuming that "k0" denotes F0, otherwise F10.
   */
   {
-    CONST char *k_semi  = tgetstr ("k;", address);
-    CONST char *k0      = tgetstr ("k0", address);
+    const char *k_semi  = tgetstr ("k;", address);
+    const char *k0      = tgetstr ("k0", address);
 
     if (k_semi)
       Fdefine_key (function_key_map, build_ext_string (k_semi, Qbinary),
index 0122415..8d68173 100644 (file)
@@ -123,7 +123,7 @@ struct textual_run
 static int
 separate_textual_runs (unsigned char *text_storage,
                       struct textual_run *run_storage,
-                      CONST Emchar *str, Charcount len)
+                      const Emchar *str, Charcount len)
 {
   Lisp_Object prev_charset = Qunbound; /* not Qnil because that is a
                                          possible valid charset when
@@ -241,7 +241,7 @@ x_text_width_single_run (struct face_cachel *cachel, struct textual_run *run)
    */
 
 static int
-x_text_width (struct frame *f, struct face_cachel *cachel, CONST Emchar *str,
+x_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str,
              Charcount len)
 {
   int width_so_far = 0;
index fa8e5e7..42858ff 100644 (file)
@@ -1528,6 +1528,12 @@ add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type,
      glyph sizes might have changed too */
   invalidate_glyph_geometry_maybe (gb->glyph, w);
 
+  /* This makes sure the glyph is in the cachels.  
+
+     #### We need to change this so that we hold onto the glyph_index
+     here, not the glyph itself. */
+  get_glyph_cachel_index (w, gb->glyph);
+
   /* A nil extent indicates a special glyph (ex. truncator). */
   if (NILP (gb->extent)
       || (pos_type == BEGIN_GLYPHS &&
@@ -3689,12 +3695,12 @@ generate_modeline (struct window *w, struct display_line *dl, int type)
 }
 
 static Charcount
-add_string_to_fstring_db_runes (pos_data *data, CONST Bufbyte *str,
+add_string_to_fstring_db_runes (pos_data *data, const Bufbyte *str,
                                 Charcount pos, Charcount min_pos, Charcount max_pos)
 {
   /* This function has been Mule-ized. */
   Charcount end;
-  CONST Bufbyte *cur_pos = str;
+  const Bufbyte *cur_pos = str;
   struct display_block *db = data->db;
 
   data->blank_width = space_width (XWINDOW (data->window));
@@ -3702,13 +3708,13 @@ add_string_to_fstring_db_runes (pos_data *data, CONST Bufbyte *str,
     add_blank_rune (data, NULL, 0);
 
   end = (Dynarr_length (db->runes) +
-         bytecount_to_charcount (str, strlen ((CONST char *) str)));
+         bytecount_to_charcount (str, strlen ((const char *) str)));
   if (max_pos != -1)
     end = min (max_pos, end);
 
   while (pos < end && *cur_pos)
     {
-      CONST Bufbyte *old_cur_pos = cur_pos;
+      const Bufbyte *old_cur_pos = cur_pos;
       int succeeded;
 
       data->ch = charptr_emchar (cur_pos);
@@ -3820,7 +3826,7 @@ tail_recurse:
                {
                  Charcount tmp_max = (max_pos == -1 ? pos + size - *offset :
                                       min (pos + size - *offset, max_pos));
-                 CONST Bufbyte *tmp_last = charptr_n_addr (last, *offset);
+                 const Bufbyte *tmp_last = charptr_n_addr (last, *offset);
 
                  pos = add_string_to_fstring_db_runes (data, tmp_last,
                                                        pos, pos, tmp_max);
@@ -3877,7 +3883,7 @@ tail_recurse:
 
                   while (num_to_add--)
                     pos = add_string_to_fstring_db_runes
-                      (data, (CONST Bufbyte *) "-", pos, pos, max_pos);
+                      (data, (const Bufbyte *) "-", pos, pos, max_pos);
                 }
               else if (*this != 0)
                 {
@@ -3896,7 +3902,7 @@ tail_recurse:
                    *offset -= size;
                  else
                    {
-                     CONST Bufbyte *tmp_str = charptr_n_addr (str, *offset);
+                     const Bufbyte *tmp_str = charptr_n_addr (str, *offset);
 
                      /* #### NOTE: I don't understand why a tmp_max is not
                         computed and used here as in the plain string case
@@ -3942,7 +3948,7 @@ tail_recurse:
                *offset -= size;
              else
                {
-                 CONST Bufbyte *tmp_str = charptr_n_addr (str, *offset);
+                 const Bufbyte *tmp_str = charptr_n_addr (str, *offset);
 
                  /* #### NOTE: I don't understand why a tmp_max is not
                     computed and used here as in the plain string case
@@ -4136,8 +4142,8 @@ tail_recurse:
          *offset -= size;
        else
          {
-           CONST Bufbyte *tmp_str =
-             charptr_n_addr ((CONST Bufbyte *) str, *offset);
+           const Bufbyte *tmp_str =
+             charptr_n_addr ((const Bufbyte *) str, *offset);
 
            /* #### NOTE: I don't understand why a tmp_max is not computed and
               used here as in the plain string case above. -- dv */
@@ -4150,7 +4156,7 @@ tail_recurse:
 
   if (min_pos > pos)
     {
-      add_string_to_fstring_db_runes (data, (CONST Bufbyte *) "", pos,
+      add_string_to_fstring_db_runes (data, (const Bufbyte *) "", pos,
                                      min_pos, -1);
     }
 
@@ -4766,7 +4772,7 @@ done:
 
          if (truncate_win && data.bi_bufpos == bi_string_zv)
            {
-             CONST Bufbyte* endb = charptr_n_addr (string_data (s), bi_string_zv);
+             const Bufbyte* endb = charptr_n_addr (string_data (s), bi_string_zv);
              DEC_CHARPTR (endb);
              if (charptr_emchar (endb) != '\n')
                {
@@ -6675,7 +6681,7 @@ static void
 decode_mode_spec (struct window *w, Emchar spec, int type)
 {
   Lisp_Object obj = Qnil;
-  CONST char *str = NULL;
+  const char *str = NULL;
   struct buffer *b = XBUFFER (w->buffer);
 
   Dynarr_reset (mode_spec_bufbyte_string);
@@ -6704,7 +6710,7 @@ decode_mode_spec (struct window *w, Emchar spec, int type)
        long_to_string (buf, col);
 
        Dynarr_add_many (mode_spec_bufbyte_string,
-                        (CONST Bufbyte *) buf, strlen (buf));
+                        (const Bufbyte *) buf, strlen (buf));
 
        goto decode_mode_spec_done;
       }
index 648dea8..e70254e 100644 (file)
@@ -661,7 +661,7 @@ extern Lisp_Object Vglobal_mode_string;
 extern int display_arg;
 
 /* Type of display specified.  Defined in emacs.c. */
-extern CONST char *display_use;
+extern const char *display_use;
 
 /* Nonzero means reading single-character input with prompt
    so put cursor on minibuffer after the prompt.  */
index 02daf79..27fbf6e 100644 (file)
@@ -161,7 +161,7 @@ init_syntax_once (void)
 
   if (!done)
     {
-      CONST char *word_syntax_chars =
+      const char *word_syntax_chars =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
 
       memset (re_syntax_table, 0, sizeof (re_syntax_table));
@@ -965,8 +965,8 @@ print_compiled_pattern (struct re_pattern_buffer *bufp)
 
 
 static void
-print_double_string (CONST char *where, CONST char *string1, int size1,
-                    CONST char *string2, int size2)
+print_double_string (const char *where, const char *string1, int size1,
+                    const char *string2, int size2)
 {
   if (where == NULL)
     printf ("(null)");
@@ -1031,7 +1031,7 @@ re_set_syntax (reg_syntax_t syntax)
    POSIX doesn't require that we do anything for REG_NOERROR,
    but why not be nice?  */
 
-static CONST char *re_error_msgid[] =
+static const char *re_error_msgid[] =
 {
   "Success",                                   /* REG_NOERROR */
   "No match",                                  /* REG_NOMATCH */
@@ -1365,7 +1365,7 @@ typedef struct
 {                                                                      \
   DEBUG_STATEMENT (fail_stack_elt_t ffailure_id;)                      \
   int this_reg;                                                                \
-  CONST unsigned char *string_temp;                                    \
+  const unsigned char *string_temp;                                    \
                                                                        \
   assert (!FAIL_STACK_EMPTY ());                                       \
                                                                        \
@@ -1385,7 +1385,7 @@ typedef struct
      saved NULL, thus retaining our current position in the string.  */        \
   string_temp = POP_FAILURE_POINTER ();                                        \
   if (string_temp != NULL)                                             \
-    str = (CONST char *) string_temp;                                  \
+    str = (const char *) string_temp;                                  \
                                                                        \
   DEBUG_PRINT2 ("  Popping string 0x%lx: `",  (long) str);             \
   DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);     \
@@ -1410,10 +1410,10 @@ typedef struct
       DEBUG_PRINT2 ("      info: 0x%lx\n",                             \
                    * (long *) &reg_info[this_reg]);                    \
                                                                        \
-      regend[this_reg] = (CONST char *) POP_FAILURE_POINTER ();                \
+      regend[this_reg] = (const char *) POP_FAILURE_POINTER ();                \
       DEBUG_PRINT2 ("      end: 0x%lx\n", (long) regend[this_reg]);    \
                                                                        \
-      regstart[this_reg] = (CONST char *) POP_FAILURE_POINTER ();      \
+      regstart[this_reg] = (const char *) POP_FAILURE_POINTER ();      \
       DEBUG_PRINT2 ("      start: 0x%lx\n", (long) regstart[this_reg]);        \
     }                                                                  \
                                                                        \
@@ -1509,7 +1509,7 @@ static char reg_unset_dummy;
 #define PATFETCH_EXTENDED(emch)                                                \
   do {if (p == pend) return REG_EEND;                                  \
     assert (p < pend);                                                 \
-    emch = charptr_emchar ((CONST Bufbyte *) p);                       \
+    emch = charptr_emchar ((const Bufbyte *) p);                       \
     INC_CHARPTR (p);                                                   \
     if (translate && emch < 0x80)                                      \
       emch = (Emchar) (unsigned char) translate[emch];                 \
@@ -1518,7 +1518,7 @@ static char reg_unset_dummy;
 #define PATFETCH_RAW_EXTENDED(emch)                                    \
   do {if (p == pend) return REG_EEND;                                  \
     assert (p < pend);                                                 \
-    emch = charptr_emchar ((CONST Bufbyte *) p);                       \
+    emch = charptr_emchar ((const Bufbyte *) p);                       \
     INC_CHARPTR (p);                                                   \
   } while (0)
 
@@ -1762,17 +1762,17 @@ static void insert_op1 (re_opcode_t op, unsigned char *loc, int arg,
                        unsigned char *end);
 static void insert_op2 (re_opcode_t op, unsigned char *loc, int arg1, int arg2,
                        unsigned char *end);
-static boolean at_begline_loc_p (CONST char *pattern, CONST char *p,
+static boolean at_begline_loc_p (const char *pattern, const char *p,
                                 reg_syntax_t syntax);
-static boolean at_endline_loc_p (CONST char *p, CONST char *pend, int syntax);
+static boolean at_endline_loc_p (const char *p, const char *pend, int syntax);
 static boolean group_in_compile_stack (compile_stack_type compile_stack,
                                       regnum_t regnum);
-static reg_errcode_t compile_range (CONST char **p_ptr, CONST char *pend,
+static reg_errcode_t compile_range (const char **p_ptr, const char *pend,
                                    char *translate, reg_syntax_t syntax,
                                    unsigned char *b);
 #ifdef MULE
-static reg_errcode_t compile_extended_range (CONST char **p_ptr,
-                                            CONST char *pend,
+static reg_errcode_t compile_extended_range (const char **p_ptr,
+                                            const char *pend,
                                             char *translate,
                                             reg_syntax_t syntax,
                                             Lisp_Object rtab);
@@ -1785,11 +1785,11 @@ static boolean alt_match_null_string_p (unsigned char *p, unsigned char *end,
 static boolean common_op_match_null_string_p (unsigned char **p,
                                              unsigned char *end,
                                              register_info_type *reg_info);
-static int bcmp_translate (CONST unsigned char *s1, CONST unsigned char *s2,
+static int bcmp_translate (const unsigned char *s1, const unsigned char *s2,
                           REGISTER int len, char *translate);
 static int re_match_2_internal (struct re_pattern_buffer *bufp,
-                               CONST char *string1, int size1,
-                               CONST char *string2, int size2, int pos,
+                               const char *string1, int size1,
+                               const char *string2, int size2, int pos,
                                struct re_registers *regs, int stop);
 \f
 #ifndef MATCH_MAY_ALLOCATE
@@ -1808,11 +1808,11 @@ static fail_stack_type fail_stack;
    but never make them smaller.  */
 static int regs_allocated_size;
 
-static CONST char **     regstart, **     regend;
-static CONST char ** old_regstart, ** old_regend;
-static CONST char **best_regstart, **best_regend;
+static const char **     regstart, **     regend;
+static const char ** old_regstart, ** old_regend;
+static const char **best_regstart, **best_regend;
 static register_info_type *reg_info;
-static CONST char **reg_dummy;
+static const char **reg_dummy;
 static register_info_type *reg_info_dummy;
 
 /* Make the register vectors big enough for NUM_REGS registers,
@@ -1823,14 +1823,14 @@ regex_grow_registers (int num_regs)
 {
   if (num_regs > regs_allocated_size)
     {
-      RETALLOC_IF (regstart,      num_regs, CONST char *);
-      RETALLOC_IF (regend,        num_regs, CONST char *);
-      RETALLOC_IF (old_regstart,   num_regs, CONST char *);
-      RETALLOC_IF (old_regend,    num_regs, CONST char *);
-      RETALLOC_IF (best_regstart,  num_regs, CONST char *);
-      RETALLOC_IF (best_regend,           num_regs, CONST char *);
+      RETALLOC_IF (regstart,      num_regs, const char *);
+      RETALLOC_IF (regend,        num_regs, const char *);
+      RETALLOC_IF (old_regstart,   num_regs, const char *);
+      RETALLOC_IF (old_regend,    num_regs, const char *);
+      RETALLOC_IF (best_regstart,  num_regs, const char *);
+      RETALLOC_IF (best_regend,           num_regs, const char *);
       RETALLOC_IF (reg_info,      num_regs, register_info_type);
-      RETALLOC_IF (reg_dummy,     num_regs, CONST char *);
+      RETALLOC_IF (reg_dummy,     num_regs, const char *);
       RETALLOC_IF (reg_info_dummy, num_regs, register_info_type);
 
       regs_allocated_size = num_regs;
@@ -1862,7 +1862,7 @@ regex_grow_registers (int num_regs)
   return (free (compile_stack.stack), value)
 
 static reg_errcode_t
-regex_compile (CONST char *pattern, int size, reg_syntax_t syntax,
+regex_compile (const char *pattern, int size, reg_syntax_t syntax,
               struct re_pattern_buffer *bufp)
 {
   /* We fetch characters from PATTERN here.  We declare these as int
@@ -1874,7 +1874,7 @@ regex_compile (CONST char *pattern, int size, reg_syntax_t syntax,
   REGISTER EMACS_INT c, c1;
 
   /* A random temporary spot in PATTERN.  */
-  CONST char *p1;
+  const char *p1;
 
   /* Points to the end of the buffer, where we should append.  */
   REGISTER unsigned char *b;
@@ -1883,8 +1883,8 @@ regex_compile (CONST char *pattern, int size, reg_syntax_t syntax,
   compile_stack_type compile_stack;
 
   /* Points to the current (ending) position in the pattern.  */
-  CONST char *p = pattern;
-  CONST char *pend = pattern + size;
+  const char *p = pattern;
+  const char *pend = pattern + size;
 
   /* How to translate the characters in the pattern.  */
   char *translate = bufp->translate;
@@ -1905,7 +1905,7 @@ regex_compile (CONST char *pattern, int size, reg_syntax_t syntax,
 
   /* Place in the uncompiled pattern (i.e., the {) to
      which to go back if the interval is invalid.  */
-  CONST char *beg_interval;
+  const char *beg_interval;
 
   /* Address of the place where a forward jump should go to the end of
      the containing expression.  Each alternative of an `or' -- except the
@@ -3008,7 +3008,7 @@ regex_compile (CONST char *pattern, int size, reg_syntax_t syntax,
          {
            /* XEmacs: modifications here for Mule. */
            /* `q' points to the beginning of the next char. */
-           CONST char *q = p - 1;
+           const char *q = p - 1;
            INC_CHARPTR (q);
 
            /* If no exactn currently being built.  */
@@ -3184,9 +3184,9 @@ insert_op2 (re_opcode_t op, unsigned char *loc, int arg1, int arg2,
    least one character before the ^.  */
 
 static boolean
-at_begline_loc_p (CONST char *pattern, CONST char *p, reg_syntax_t syntax)
+at_begline_loc_p (const char *pattern, const char *p, reg_syntax_t syntax)
 {
-  CONST char *prev = p - 2;
+  const char *prev = p - 2;
   boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
 
   return
@@ -3201,11 +3201,11 @@ at_begline_loc_p (CONST char *pattern, CONST char *p, reg_syntax_t syntax)
    at least one character after the $, i.e., `P < PEND'.  */
 
 static boolean
-at_endline_loc_p (CONST char *p, CONST char *pend, int syntax)
+at_endline_loc_p (const char *p, const char *pend, int syntax)
 {
-  CONST char *next = p;
+  const char *next = p;
   boolean next_backslash = *next == '\\';
-  CONST char *next_next = p + 1 < pend ? p + 1 : 0;
+  const char *next_next = p + 1 < pend ? p + 1 : 0;
 
   return
        /* Before a subexpression?  */
@@ -3247,12 +3247,12 @@ group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum)
    `regex_compile' itself.  */
 
 static reg_errcode_t
-compile_range (CONST char **p_ptr, CONST char *pend, char *translate,
+compile_range (const char **p_ptr, const char *pend, char *translate,
               reg_syntax_t syntax, unsigned char *b)
 {
   unsigned this_char;
 
-  CONST char *p = *p_ptr;
+  const char *p = *p_ptr;
   int range_start, range_end;
 
   if (p == pend)
@@ -3265,9 +3265,9 @@ compile_range (CONST char **p_ptr, CONST char *pend, char *translate,
 
      We also want to fetch the endpoints without translating them; the
      appropriate translation is done in the bit-setting loop below.  */
-  /* The SVR4 compiler on the 3B2 had trouble with unsigned CONST char *.  */
-  range_start = ((CONST unsigned char *) p)[-2];
-  range_end   = ((CONST unsigned char *) p)[0];
+  /* The SVR4 compiler on the 3B2 had trouble with unsigned const char *.  */
+  range_start = ((const unsigned char *) p)[-2];
+  range_end   = ((const unsigned char *) p)[0];
 
   /* Have to increment the pointer into the pattern string, so the
      caller isn't still at the ending character.  */
@@ -3292,16 +3292,16 @@ compile_range (CONST char **p_ptr, CONST char *pend, char *translate,
 #ifdef MULE
 
 static reg_errcode_t
-compile_extended_range (CONST char **p_ptr, CONST char *pend, char *translate,
+compile_extended_range (const char **p_ptr, const char *pend, char *translate,
                        reg_syntax_t syntax, Lisp_Object rtab)
 {
   Emchar this_char, range_start, range_end;
-  CONST Bufbyte *p;
+  const Bufbyte *p;
 
   if (*p_ptr == pend)
     return REG_ERANGE;
 
-  p = (CONST Bufbyte *) *p_ptr;
+  p = (const Bufbyte *) *p_ptr;
   range_end = charptr_emchar (p);
   p--; /* back to '-' */
   DEC_CHARPTR (p); /* back to start of range */
@@ -3858,7 +3858,7 @@ re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs,
    doesn't let you say where to stop matching. */
 
 int
-re_search (struct re_pattern_buffer *bufp, CONST char *string, int size,
+re_search (struct re_pattern_buffer *bufp, const char *string, int size,
           int startpos, int range, struct re_registers *regs)
 {
   return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
@@ -3901,8 +3901,8 @@ typedef int Charcount;
    stack overflow).  */
 
 int
-re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
-            int size1, CONST char *string2, int size2, int startpos,
+re_search_2 (struct re_pattern_buffer *bufp, const char *string1,
+            int size1, const char *string2, int size2, int startpos,
             int range, struct re_registers *regs, int stop)
 {
   int val;
@@ -3913,7 +3913,7 @@ re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
 #ifdef REGEX_BEGLINE_CHECK
   int anchored_at_begline = 0;
 #endif
-  CONST unsigned char *d;
+  const unsigned char *d;
   Charcount d_size;
 
   /* Check for out-of-range STARTPOS.  */
@@ -3935,7 +3935,7 @@ re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
        return -1;
       else
        {
-         d = ((CONST unsigned char *)
+         d = ((const unsigned char *)
               (startpos >= size1 ? string2 - size1 : string1) + startpos);
            range = charcount_to_bytecount (d, 1);
        }
@@ -3980,7 +3980,7 @@ re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
          if (startpos < size1 && startpos + range >= size1)
            lim = range - (size1 - startpos);
 
-         d = ((CONST unsigned char *)
+         d = ((const unsigned char *)
               (startpos >= size1 ? string2 - size1 : string1) + startpos);
          DEC_CHARPTR(d);       /* Ok, since startpos != size1. */
          d_size = charcount_to_bytecount (d, 1);
@@ -4022,7 +4022,7 @@ re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
               if (startpos < size1 && startpos + range >= size1)
                 lim = range - (size1 - startpos);
 
-             d = ((CONST unsigned char *)
+             d = ((const unsigned char *)
                   (startpos >= size1 ? string2 - size1 : string1) + startpos);
 
               /* Written out as an if-else to avoid testing `translate'
@@ -4090,7 +4090,7 @@ re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
        break;
       else if (range > 0)
        {
-         d = ((CONST unsigned char *)
+         d = ((const unsigned char *)
               (startpos >= size1 ? string2 - size1 : string1) + startpos);
          d_size = charcount_to_bytecount (d, 1);
          range -= d_size;
@@ -4100,7 +4100,7 @@ re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
        {
          /* Note startpos > size1 not >=.  If we are on the
             string1/string2 boundary, we want to backup into string1. */
-         d = ((CONST unsigned char *)
+         d = ((const unsigned char *)
               (startpos > size1 ? string2 - size1 : string1) + startpos);
          DEC_CHARPTR(d);
          d_size = charcount_to_bytecount (d, 1);
@@ -4191,7 +4191,7 @@ re_search_2 (struct re_pattern_buffer *bufp, CONST char *string1,
 /* re_match is like re_match_2 except it takes only a single string.  */
 
 int
-re_match (struct re_pattern_buffer *bufp, CONST char *string, int size,
+re_match (struct re_pattern_buffer *bufp, const char *string, int size,
          int pos, struct re_registers *regs)
 {
   int result = re_match_2_internal (bufp, NULL, 0, string, size,
@@ -4216,8 +4216,8 @@ re_match (struct re_pattern_buffer *bufp, CONST char *string, int size,
    matched substring.  */
 
 int
-re_match_2 (struct re_pattern_buffer *bufp, CONST char *string1,
-           int size1, CONST char *string2, int size2, int pos,
+re_match_2 (struct re_pattern_buffer *bufp, const char *string1,
+           int size1, const char *string2, int size2, int pos,
            struct re_registers *regs, int stop)
 {
   int result = re_match_2_internal (bufp, string1, size1, string2, size2,
@@ -4229,8 +4229,8 @@ re_match_2 (struct re_pattern_buffer *bufp, CONST char *string1,
 /* This is a separate function so that we can force an alloca cleanup
    afterwards.  */
 static int
-re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
-                    int size1, CONST char *string2, int size2, int pos,
+re_match_2_internal (struct re_pattern_buffer *bufp, const char *string1,
+                    int size1, const char *string2, int size2, int pos,
                     struct re_registers *regs, int stop)
 {
   /* General temporaries.  */
@@ -4239,14 +4239,14 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
   int should_succeed; /* XEmacs change */
 
   /* Just past the end of the corresponding string.  */
-  CONST char *end1, *end2;
+  const char *end1, *end2;
 
   /* Pointers into string1 and string2, just past the last characters in
      each to consider matching.  */
-  CONST char *end_match_1, *end_match_2;
+  const char *end_match_1, *end_match_2;
 
   /* Where we are in the data, and the end of the current string.  */
-  CONST char *d, *dend;
+  const char *d, *dend;
 
   /* Where we are in the pattern, and the end of the pattern.  */
   unsigned char *p = bufp->buffer;
@@ -4299,7 +4299,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
      stopped matching the regnum-th subexpression.  (The zeroth register
      keeps track of what the whole pattern matches.)  */
 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
-  CONST char **regstart, **regend;
+  const char **regstart, **regend;
 #endif
 
   /* If a group that's operated upon by a repetition operator fails to
@@ -4308,7 +4308,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
      are when we last see its open-group operator.  Similarly for a
      register's end.  */
 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
-  CONST char **old_regstart, **old_regend;
+  const char **old_regstart, **old_regend;
 #endif
 
   /* The is_active field of reg_info helps us keep track of which (possibly
@@ -4327,7 +4327,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
      turn happens only if we have not yet matched the entire string. */
   unsigned best_regs_set = false;
 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
-  CONST char **best_regstart, **best_regend;
+  const char **best_regstart, **best_regend;
 #endif
 
   /* Logically, this is `best_regend[0]'.  But we don't want to have to
@@ -4338,14 +4338,14 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
      the end of the best match so far in a separate variable.  We
      initialize this to NULL so that when we backtrack the first time
      and need to test it, it's not garbage.  */
-  CONST char *match_end = NULL;
+  const char *match_end = NULL;
 
   /* This helps SET_REGS_MATCHED avoid doing redundant work.  */
   int set_regs_matched_done = 0;
 
   /* Used when we pop values we don't care about.  */
 #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global.  */
-  CONST char **reg_dummy;
+  const char **reg_dummy;
   register_info_type *reg_info_dummy;
 #endif
 
@@ -4373,14 +4373,14 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
      array indexing.  We should fix this.  */
   if (bufp->re_nsub)
     {
-      regstart       = REGEX_TALLOC (num_regs, CONST char *);
-      regend         = REGEX_TALLOC (num_regs, CONST char *);
-      old_regstart   = REGEX_TALLOC (num_regs, CONST char *);
-      old_regend     = REGEX_TALLOC (num_regs, CONST char *);
-      best_regstart  = REGEX_TALLOC (num_regs, CONST char *);
-      best_regend    = REGEX_TALLOC (num_regs, CONST char *);
+      regstart       = REGEX_TALLOC (num_regs, const char *);
+      regend         = REGEX_TALLOC (num_regs, const char *);
+      old_regstart   = REGEX_TALLOC (num_regs, const char *);
+      old_regend     = REGEX_TALLOC (num_regs, const char *);
+      best_regstart  = REGEX_TALLOC (num_regs, const char *);
+      best_regend    = REGEX_TALLOC (num_regs, const char *);
       reg_info       = REGEX_TALLOC (num_regs, register_info_type);
-      reg_dummy      = REGEX_TALLOC (num_regs, CONST char *);
+      reg_dummy      = REGEX_TALLOC (num_regs, const char *);
       reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
 
       if (!(regstart && regend && old_regstart && old_regend && reg_info
@@ -4735,7 +4735,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
             DEBUG_PRINT2 ("EXECUTING charset_mule%s.\n", not ? "_not" : "");
 
            PREFETCH ();
-           c = charptr_emchar ((CONST Bufbyte *) d);
+           c = charptr_emchar ((const Bufbyte *) d);
            c = TRANSLATE_EXTENDED_UNSAFE (c); /* The character to match.  */
 
            if (EQ (Qt, unified_range_table_lookup (p, c, Qnil)))
@@ -4950,7 +4950,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
            followed by the numeric value of <digit> as the register number.  */
         case duplicate:
          {
-           REGISTER CONST char *d2, *dend2;
+           REGISTER const char *d2, *dend2;
            int regno = *p++;   /* Get which register to match against.  */
            DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
 
@@ -5306,7 +5306,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
                `pop_failure_point'.  */
             unsigned dummy_low_reg, dummy_high_reg;
             unsigned char *pdummy;
-            CONST char *sdummy = NULL;
+            const char *sdummy = NULL;
 
             DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
             POP_FAILURE_POINT (sdummy, pdummy,
@@ -5422,10 +5422,10 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
              result = 1;
            else
              {
-               CONST unsigned char *d_before =
-                 (CONST unsigned char *) POS_BEFORE_GAP_UNSAFE (d);
-               CONST unsigned char *d_after =
-                 (CONST unsigned char *) POS_AFTER_GAP_UNSAFE (d);
+               const unsigned char *d_before =
+                 (const unsigned char *) POS_BEFORE_GAP_UNSAFE (d);
+               const unsigned char *d_after =
+                 (const unsigned char *) POS_AFTER_GAP_UNSAFE (d);
                Emchar emch1, emch2;
 
                DEC_CHARPTR (d_before);
@@ -5453,14 +5453,14 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
              break;
 
              */
-           CONST unsigned char *dtmp =
-             (CONST unsigned char *) POS_AFTER_GAP_UNSAFE (d);
+           const unsigned char *dtmp =
+             (const unsigned char *) POS_AFTER_GAP_UNSAFE (d);
            Emchar emch = charptr_emchar (dtmp);
            if (!WORDCHAR_P_UNSAFE (emch))
              goto fail;
            if (AT_STRINGS_BEG (d))
              break;
-           dtmp = (CONST unsigned char *) POS_BEFORE_GAP_UNSAFE (d);
+           dtmp = (const unsigned char *) POS_BEFORE_GAP_UNSAFE (d);
            DEC_CHARPTR (dtmp);
            emch = charptr_emchar (dtmp);
            if (!WORDCHAR_P_UNSAFE (emch))
@@ -5479,18 +5479,18 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
 
              The or condition is incorrect (reversed).
              */
-           CONST unsigned char *dtmp;
+           const unsigned char *dtmp;
            Emchar emch;
            if (AT_STRINGS_BEG (d))
              goto fail;
-           dtmp = (CONST unsigned char *) POS_BEFORE_GAP_UNSAFE (d);
+           dtmp = (const unsigned char *) POS_BEFORE_GAP_UNSAFE (d);
            DEC_CHARPTR (dtmp);
            emch = charptr_emchar (dtmp);
            if (!WORDCHAR_P_UNSAFE (emch))
              goto fail;
            if (AT_STRINGS_END (d))
              break;
-           dtmp = (CONST unsigned char *) POS_AFTER_GAP_UNSAFE (d);
+           dtmp = (const unsigned char *) POS_AFTER_GAP_UNSAFE (d);
            emch = charptr_emchar (dtmp);
            if (!WORDCHAR_P_UNSAFE (emch))
              break;
@@ -5543,7 +5543,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
            Emchar emch;
 
            PREFETCH ();
-           emch = charptr_emchar ((CONST Bufbyte *) d);
+           emch = charptr_emchar ((const Bufbyte *) d);
            matches = (SYNTAX_UNSAFE
                       (XCHAR_TABLE (regex_emacs_buffer->mirror_syntax_table),
                        emch) == (enum syntaxcode) mcnt);
@@ -5576,7 +5576,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, CONST char *string1,
 
            mcnt = *p++;
            PREFETCH ();
-           emch = charptr_emchar ((CONST Bufbyte *) d);
+           emch = charptr_emchar ((const Bufbyte *) d);
            INC_CHARPTR (d);
            if (check_category_char(emch, regex_emacs_buffer->category_table,
                                    mcnt, should_succeed))
@@ -5918,10 +5918,10 @@ common_op_match_null_string_p (unsigned char **p, unsigned char *end,
    bytes; nonzero otherwise.  */
 
 static int
-bcmp_translate (CONST unsigned char *s1, CONST unsigned char *s2,
+bcmp_translate (const unsigned char *s1, const unsigned char *s2,
                REGISTER int len, char *translate)
 {
-  REGISTER CONST unsigned char *p1 = s1, *p2 = s2;
+  REGISTER const unsigned char *p1 = s1, *p2 = s2;
   while (len)
     {
       if (translate[*p1++] != translate[*p2++]) return 1;
@@ -5941,8 +5941,8 @@ bcmp_translate (CONST unsigned char *s1, CONST unsigned char *s2,
 
    We call regex_compile to do the actual compilation.  */
 
-CONST char *
-re_compile_pattern (CONST char *pattern, int length,
+const char *
+re_compile_pattern (const char *pattern, int length,
                    struct re_pattern_buffer *bufp)
 {
   reg_errcode_t ret;
@@ -5975,7 +5975,7 @@ re_compile_pattern (CONST char *pattern, int length,
 static struct re_pattern_buffer re_comp_buf;
 
 char *
-re_comp (CONST char *s)
+re_comp (const char *s)
 {
   reg_errcode_t ret;
 
@@ -6009,15 +6009,15 @@ re_comp (CONST char *s)
   if (!ret)
     return NULL;
 
-  /* Yes, we're discarding `CONST' here if !HAVE_LIBINTL.  */
+  /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
   return (char *) gettext (re_error_msgid[(int) ret]);
 }
 
 
 int
-re_exec (CONST char *s)
+re_exec (const char *s)
 {
-  CONST int len = strlen (s);
+  const int len = strlen (s);
   return
     0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
 }
@@ -6062,7 +6062,7 @@ re_exec (CONST char *s)
    the return codes and their meanings.)  */
 
 int
-regcomp (regex_t *preg, CONST char *pattern, int cflags)
+regcomp (regex_t *preg, const char *pattern, int cflags)
 {
   reg_errcode_t ret;
   unsigned syntax
@@ -6135,7 +6135,7 @@ regcomp (regex_t *preg, CONST char *pattern, int cflags)
    We return 0 if we find a match and REG_NOMATCH if not.  */
 
 int
-regexec (CONST regex_t *preg, CONST char *string, size_t nmatch,
+regexec (const regex_t *preg, const char *string, size_t nmatch,
         regmatch_t pmatch[], int eflags)
 {
   int ret;
@@ -6196,9 +6196,9 @@ regexec (CONST regex_t *preg, CONST char *string, size_t nmatch,
    from either regcomp or regexec.   We don't use PREG here.  */
 
 size_t
-regerror (int errcode, CONST regex_t *preg, char *errbuf, size_t errbuf_size)
+regerror (int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
 {
-  CONST char *msg;
+  const char *msg;
   size_t msg_size;
 
   if (errcode < 0
index c4fbd5e..08d8bd9 100644 (file)
@@ -413,7 +413,7 @@ reg_syntax_t re_set_syntax (reg_syntax_t syntax);
 /* Compile the regular expression PATTERN, with length LENGTH
    and syntax given by the global `re_syntax_options', into the buffer
    BUFFER.  Return NULL if successful, and an error string if not.  */
-CONST char *re_compile_pattern (CONST char *pattern, int length,
+const char *re_compile_pattern (const char *pattern, int length,
                                struct re_pattern_buffer *buffer);
 
 
@@ -428,27 +428,27 @@ int re_compile_fastmap (struct re_pattern_buffer *buffer);
    characters.  Return the starting position of the match, -1 for no
    match, or -2 for an internal error.  Also return register
    information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
-int re_search (struct re_pattern_buffer *buffer, CONST char *string,
+int re_search (struct re_pattern_buffer *buffer, const char *string,
               int length, int start, int range,
               struct re_registers *regs);
 
 
 /* Like `re_search', but search in the concatenation of STRING1 and
    STRING2.  Also, stop searching at index START + STOP.  */
-int re_search_2 (struct re_pattern_buffer *buffer, CONST char *string1,
-                int length1, CONST char *string2, int length2, int start,
+int re_search_2 (struct re_pattern_buffer *buffer, const char *string1,
+                int length1, const char *string2, int length2, int start,
                 int range, struct re_registers *regs, int stop);
 
 
 /* Like `re_search', but return how many characters in STRING the regexp
    in BUFFER matched, starting at position START.  */
-int re_match (struct re_pattern_buffer *buffer, CONST char *string,
+int re_match (struct re_pattern_buffer *buffer, const char *string,
              int length, int start, struct re_registers *regs);
 
 
 /* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
-int re_match_2 (struct re_pattern_buffer *buffer, CONST char *string1,
-               int length1, CONST char *string2, int length2,
+int re_match_2 (struct re_pattern_buffer *buffer, const char *string1,
+               int length1, const char *string2, int length2,
                int start, struct re_registers *regs, int stop);
 
 
@@ -470,15 +470,15 @@ void re_set_registers (struct re_pattern_buffer *buffer,
 
 #ifdef _REGEX_RE_COMP
 /* 4.2 bsd compatibility.  */
-char *re_comp (CONST char *);
-int re_exec (CONST char *);
+char *re_comp (const char *);
+int re_exec (const char *);
 #endif
 
 /* POSIX compatibility.  */
-int regcomp (regex_t *preg, CONST char *pattern, int cflags);
-int regexec (CONST regex_t *preg, CONST char *string, size_t nmatch,
+int regcomp (regex_t *preg, const char *pattern, int cflags);
+int regexec (const regex_t *preg, const char *string, size_t nmatch,
             regmatch_t pmatch[], int eflags);
-size_t regerror (int errcode, CONST regex_t *preg, char *errbuf,
+size_t regerror (int errcode, const regex_t *preg, char *errbuf,
                 size_t errbuf_size);
 void regfree (regex_t *preg);
 
index 3bdd989..5836bd5 100644 (file)
@@ -7,7 +7,20 @@
 
 #ifndef NOT_C_CODE
 #define _XFUNCS_H_ 1
+
+/* AIX is happier when bzero and strcasecmp are declared */
+#include "strings.h"
+
+/* AIX 4.2's sys/mman.h doesn't seem to define MAP_FAILED,
+   although Unix98 claims it must. */
+#ifdef HAVE_MMAP
+#include <sys/mman.h>
+# ifndef MAP_FAILED
+#  define MAP_FAILED ((void *) -1)
+# endif
+#endif
+
 /* Forward declarations for xlc warning suppressions */
 struct ether_addr;
 struct sockaddr_dl;
-#endif
+#endif /* C code */
index 32783cf..0e196fe 100644 (file)
@@ -202,8 +202,8 @@ void sleep (int seconds);
 
 /* subprocess calls that are emulated */
 #define spawnve sys_spawnve
-int spawnve (int mode, CONST char *cmdname, 
-            CONST char * CONST *argv, CONST char *CONST *envp);
+int spawnve (int mode, const char *cmdname, 
+            const char * const *argv, const char *const *envp);
 
 #define wait    sys_wait
 int wait (int *status);
index 5ba8bfc..b306088 100644 (file)
 #define USG5_4
 #endif
 
-#undef  _POSIX_C_SOURCE
-
-#if OS_RELEASE > 54
-/* There were some bugs with preprocessor symbol interaction, which
-   were not fixed until 2.5. */
-#define __EXTENSIONS__ 1
-
-#undef  _XOPEN_SOURCE
-#define _XOPEN_SOURCE 1
-
-#undef  _XOPEN_SOURCE_EXTENDED
-#define _XOPEN_SOURCE_EXTENDED 1
-#endif /* > Solaris 2.4 */
-
 #if OS_RELEASE >= 57
 #define HAVE_GETLOADAVG
 #endif
index 594e93e..45395e2 100644 (file)
@@ -188,8 +188,8 @@ typedef int pid_t;
 /* subprocess calls that are emulated */
 #ifndef DONT_ENCAPSULATE
 #define spawnve sys_spawnve
-int spawnve (int mode, CONST char *cmdname, 
-            CONST char * CONST *argv, CONST char *CONST *envp);
+int spawnve (int mode, const char *cmdname, 
+            const char * const *argv, const char *const *envp);
 #endif
 
 /* IO calls that are emulated or shadowed */
index c9f49ae..46feb9c 100644 (file)
@@ -131,7 +131,7 @@ compile_pattern_1 (struct regexp_cache *cp, Lisp_Object pattern,
                   char *translate, struct re_registers *regp, int posix,
                   Error_behavior errb)
 {
-  CONST char *val;
+  const char *val;
   reg_syntax_t old;
 
   cp->regexp = Qnil;
@@ -139,7 +139,7 @@ compile_pattern_1 (struct regexp_cache *cp, Lisp_Object pattern,
   cp->posix = posix;
   old = re_set_syntax (RE_SYNTAX_EMACS
                       | (posix ? 0 : RE_NO_POSIX_BACKTRACKING));
-  val = (CONST char *)
+  val = (const char *)
     re_compile_pattern ((char *) XSTRING_DATA (pattern),
                        XSTRING_LENGTH (pattern), &cp->buf);
   re_set_syntax (old);
@@ -442,7 +442,7 @@ tables) and defaults to the current buffer.
    This does not clobber the match data. */
 
 Bytecount
-fast_string_match (Lisp_Object regexp,  CONST Bufbyte *nonreloc,
+fast_string_match (Lisp_Object regexp,  const Bufbyte *nonreloc,
                   Lisp_Object reloc, Bytecount offset,
                   Bytecount length, int case_fold_search,
                   Error_behavior errb, int no_quit)
index 2a15974..a2c41c2 100644 (file)
@@ -138,7 +138,7 @@ symbol_to_x_atom (struct device *d, Lisp_Object sym, int only_if_exists)
 #endif /* CUT_BUFFER_SUPPORT */
 
   {
-    CONST char *nameext;
+    const char *nameext;
     TO_EXTERNAL_FORMAT (LISP_STRING, Fsymbol_name (sym),
                        C_STRING_ALLOCA, nameext,
                        Qctext);
@@ -287,13 +287,13 @@ hack_motif_clipboard_selection (Atom selection_atom,
 #endif
       XmString fmh;
       String encoding = "STRING";
-      CONST Extbyte *data  = XSTRING_DATA (selection_value);
+      const Extbyte *data  = XSTRING_DATA (selection_value);
       Extcount bytes = XSTRING_LENGTH (selection_value);
 
 #ifdef MULE
       {
        enum { ASCII, LATIN_1, WORLD } chartypes = ASCII;
-       CONST Bufbyte *ptr = data, *end = ptr + bytes;
+       const Bufbyte *ptr = data, *end = ptr + bytes;
        /* Optimize for the common ASCII case */
        while (ptr <= end)
          {
@@ -1266,7 +1266,7 @@ lisp_data_to_selection_data (struct device *d,
     }
   else if (STRINGP (obj))
     {
-      CONST Extbyte *extval;
+      const Extbyte *extval;
       Extcount extvallen;
 
       TO_EXTERNAL_FORMAT (LISP_STRING, obj,
@@ -1286,7 +1286,7 @@ lisp_data_to_selection_data (struct device *d,
     {
       Bufbyte buf[MAX_EMCHAR_LEN];
       Bytecount len;
-      CONST Extbyte *extval;
+      const Extbyte *extval;
       Extcount extvallen;
 
       *format_ret = 8;
@@ -1484,7 +1484,7 @@ static int cut_buffers_initialized; /* Whether we're sure they all exist */
 static void
 initialize_cut_buffers (Display *display, Window window)
 {
-  static unsigned CONST char * CONST data = (unsigned CONST char *) "";
+  static unsigned const char * const data = (unsigned const char *) "";
 #define FROB(atom) XChangeProperty (display, window, atom, XA_STRING, 8, \
                                    PropModeAppend, data, 0)
   FROB (XA_CUT_BUFFER0);
@@ -1563,12 +1563,12 @@ Set the value of the named CUTBUFFER (typically CUT_BUFFER0) to STRING.
   Display *display = DEVICE_X_DISPLAY (d);
   Window window = RootWindow (display, 0); /* Cutbuffers are on frame 0 */
   Atom cut_buffer_atom;
-  CONST Extbyte *data  = XSTRING_DATA (string);
+  const Extbyte *data  = XSTRING_DATA (string);
   Extcount bytes = XSTRING_LENGTH (string);
   Extcount bytes_remaining;
   int max_bytes = SELECTION_QUANTUM (display);
 #ifdef MULE
-  CONST Bufbyte *ptr, *end;
+  const Bufbyte *ptr, *end;
   enum { ASCII, LATIN_1, WORLD } chartypes = ASCII;
 #endif
 
index 222a3e6..e3ca2fa 100644 (file)
@@ -363,7 +363,7 @@ drain_audio_port (AudioContext ac)
 static int
 st_ulaw_to_linear (int u)
 {
-  static CONST short table[] = {0,132,396,924,1980,4092,8316,16764};
+  static const short table[] = {0,132,396,924,1980,4092,8316,16764};
   int u1 = ~u;
   short exponent = (u1 >> 4) & 0x07;
   int mantissa = u1 & 0x0f;
index bb214f5..405df44 100644 (file)
@@ -151,7 +151,7 @@ Windows the sound file must be in WAV format.
 #ifdef HAVE_NATIVE_SOUND
   if (NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d))
     {
-      CONST char *fileext;
+      const char *fileext;
 
       TO_EXTERNAL_FORMAT (LISP_STRING, file,
                          C_STRING_ALLOCA, fileext,
@@ -317,7 +317,7 @@ See the variable `sound-alist'.
 #ifdef HAVE_NAS_SOUND
   if (DEVICE_CONNECTED_TO_NAS_P (d) && STRINGP (sound))
     {
-      CONST Extbyte *soundext;
+      const Extbyte *soundext;
       Extcount soundextlen;
 
       TO_EXTERNAL_FORMAT (LISP_STRING, sound,
@@ -345,7 +345,7 @@ See the variable `sound-alist'.
   if ((NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d))
       && STRINGP (sound))
     {
-      CONST Extbyte *soundext;
+      const Extbyte *soundext;
       Extcount soundextlen;
 
       TO_EXTERNAL_FORMAT (LISP_STRING, sound,
index 7846d11..cdb1cc3 100644 (file)
@@ -354,13 +354,13 @@ specifier_hash (Lisp_Object obj, int depth)
 }
 
 static size_t
-sizeof_specifier (CONST void *header)
+sizeof_specifier (const void *header)
 {
   if (GHOST_SPECIFIER_P ((Lisp_Specifier *) header))
     return offsetof (Lisp_Specifier, data);
   else
     {
-      CONST Lisp_Specifier *p = (CONST Lisp_Specifier *) header;
+      const Lisp_Specifier *p = (const Lisp_Specifier *) header;
       return offsetof (Lisp_Specifier, data) + p->methods->extra_data_size;
     }
 }
index da40827..bb6472d 100644 (file)
@@ -87,7 +87,7 @@ extern const struct struct_description specifier_methods_description;
 
 struct specifier_methods
 {
-  CONST char *name;
+  const char *name;
   Lisp_Object predicate_symbol;
 
   /* Implementation specific methods: */
index f4a3a02..4881165 100644 (file)
@@ -27,18 +27,17 @@ Cambridge, MA 02139, USA.  */
    the string!  This will core dump if the memory following the last byte is 
    not mapped.
 
-   Here is a correct version from glibc 1.09.
+   Here is a correct version from, glibc 1.09.
 */
 
 char *strcat (char *dest, const char *src);
 
 /* Append SRC on the end of DEST.  */
-/* CONST IS LOSING, but const is part of the interface of strcat */
 char *
 strcat (char *dest, const char *src)
 {
   REGISTER char *s1 = dest;
-  REGISTER CONST char *s2 = src;
+  REGISTER const char *s2 = src;
   char c;
 
   /* Find the end of the string.  */
index c72b8ef..722cd0d 100644 (file)
@@ -36,7 +36,6 @@ Boston, MA 02111-1307, USA.  */
 #define HIGH_BIT_P(c) ((c) & hi_bit)
 #define HAS_ZERO(c) (((((c) + magic) ^ (c)) & not_magic) != not_magic)
 
-/* CONST IS LOSING, but const is part of the interface of strcmp */
 int
 strcmp (const char *x, const char *y)
 {
@@ -44,8 +43,8 @@ strcmp (const char *x, const char *y)
     return 0;
   else if (ALIGNED (x) && ALIGNED (y))
     {
-      CONST unsigned long *x1 = (CONST unsigned long *) x;
-      CONST unsigned long *y1 = (CONST unsigned long *) y;
+      const unsigned long *x1 = (const unsigned long *) x;
+      const unsigned long *y1 = (const unsigned long *) y;
       unsigned long c;
       unsigned long magic = MAGIC;
       unsigned long not_magic = ~magic;
@@ -59,8 +58,8 @@ strcmp (const char *x, const char *y)
                 return 0;
               else
                 {
-                  x = (CONST char *) x1;
-                  y = (CONST char *) y1;
+                  x = (const char *) x1;
+                  y = (const char *) y1;
                   goto slow_loop;
                 }
             }
@@ -69,8 +68,8 @@ strcmp (const char *x, const char *y)
           y1++;
         }
 
-      x = (CONST char *) x1;
-      y = (CONST char *) y1;
+      x = (const char *) x1;
+      y = (const char *) y1;
       goto slow_loop;
     }
   else
@@ -91,14 +90,14 @@ strcmp (const char *x, const char *y)
 
 
 int
-strncmp (CONST char *x, CONST char *y, size_t n)
+strncmp (const char *x, const char *y, size_t n)
 {
   if ((x == y) || (n <= 0))
     return 0;
   else if (ALIGNED (x) && ALIGNED (y))
     {
-      CONST unsigned long *x1 = (CONST unsigned long *) x;
-      CONST unsigned long *y1 = (CONST unsigned long *) y;
+      const unsigned long *x1 = (const unsigned long *) x;
+      const unsigned long *y1 = (const unsigned long *) y;
       unsigned long c;
       unsigned long magic = MAGIC;
       unsigned long not_magic = ~magic;
@@ -116,8 +115,8 @@ strncmp (CONST char *x, CONST char *y, size_t n)
                 return 0;
               else
                 {
-                  x = (CONST char *) x1;
-                  y = (CONST char *) y1;
+                  x = (const char *) x1;
+                  y = (const char *) y1;
                   goto slow_loop;
                 }
             }
@@ -126,8 +125,8 @@ strncmp (CONST char *x, CONST char *y, size_t n)
           y1++;
         }
 
-      x = (CONST char *) x1;
-      y = (CONST char *) y1;
+      x = (const char *) x1;
+      y = (const char *) y1;
       goto slow_loop;
     }
   else
index 34c559f..21b5309 100644 (file)
@@ -35,7 +35,6 @@ Boston, MA 02111-1307, USA.  */
 #define HIGH_BIT_P(c) ((c) & hi_bit)
 #define HAS_ZERO(c) (((((c) + magic) ^ (c)) & not_magic) != not_magic)
 
-/* CONST IS LOSING, but const is part of the interface of strcpy */
 char *
 strcpy (char *to, const char *from)
 {
@@ -56,7 +55,7 @@ strcpy (char *to, const char *from)
           if (HAS_ZERO(c)) 
             {
               to = (char *) to1;
-              from = (CONST char *) from1;
+              from = (const char *) from1;
               goto slow_loop;
             }
           else
index cb0c111..3876617 100644 (file)
@@ -112,12 +112,12 @@ enum padding
   none, blank, zero
 };
 
-static char CONST* CONST days[] =
+static char const* const days[] =
 {
   "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
 };
 
-static char CONST * CONST months[] =
+static char const * const months[] =
 {
   "January", "February", "March", "April", "May", "June",
   "July", "August", "September", "October", "November", "December"
@@ -174,7 +174,7 @@ add_num3 (char *string, int num, int max, enum padding pad)
 /* Like strncpy except return the number of characters copied. */
 
 static int
-add_str (char *to, CONST char *from, int max)
+add_str (char *to, const char *from, int max)
 {
   int i;
 
@@ -203,7 +203,7 @@ add_num_time_t (char *string, int max, time_t num)
    starting on Sundays. */
 
 static int
-sun_week (CONST struct tm *tm)
+sun_week (const struct tm *tm)
 {
   int dl;
 
@@ -220,7 +220,7 @@ sun_week (CONST struct tm *tm)
    starting on Mondays. */
 
 static int
-mon_week (CONST struct tm *tm)
+mon_week (const struct tm *tm)
 {
   int dl, wday;
 
@@ -234,7 +234,7 @@ mon_week (CONST struct tm *tm)
 
 #if !defined(HAVE_TM_ZONE) && !defined(HAVE_TZNAME)
 char *
-zone_name (CONST struct tm *tp)
+zone_name (const struct tm *tp)
 {
   char *timezone ();
   struct timeval tv;
@@ -251,11 +251,11 @@ zone_name (CONST struct tm *tp)
    that were put into STRING, or 0 if the length would have
    exceeded MAX. */
 
-size_t strftime (char *string, size_t max, CONST char *format,
-                CONST struct tm *tm);
+size_t strftime (char *string, size_t max, const char *format,
+                const struct tm *tm);
 
 size_t
-strftime (char *string, size_t max, CONST char *format, CONST struct tm *tm)
+strftime (char *string, size_t max, const char *format, const struct tm *tm)
 {
   enum padding pad;            /* Type of padding to apply. */
   size_t length = 0;           /* Characters put in STRING so far. */
index 57c6e36..252c65c 100644 (file)
@@ -36,13 +36,13 @@ Boston, MA 02111-1307, USA.  */
 
 #include <stdlib.h>
 
-size_t mbstowcs (wchar_t *foo, CONST char *bar, size_t baz)
+size_t mbstowcs (wchar_t *foo, const char *bar, size_t baz)
 {
   abort ();
   return 0;
 }
 
-size_t wcstombs (char *foo, CONST wchar_t *bar, size_t baz)
+size_t wcstombs (char *foo, const wchar_t *bar, size_t baz)
 {
   abort ();
   return 0;
index 4df9d68..a9c52af 100644 (file)
 #include <sys/fcntl.h>
 #include <sys/file.h>
 
-/* libaudio.h includes a header which defines CONST.  We temporarily
-   undefine it in order to eliminate a compiler warning.  Yes, this is
-   a gross hack. */
-#undef CONST
 #include <multimedia/libaudio.h>
 #include <multimedia/audio_device.h>
-#undef CONST
-#define CONST const
 
 #ifdef emacs
 # include <config.h>
@@ -312,7 +306,7 @@ play_sound_data (unsigned char *data, int length, int volume)
 
 /* #### sigcontext doesn't exist in Solaris.  This should be updated
    to be correct for Solaris. */
-static void
+static SIGTYPE
 sighandler (int sig)
 {
   if (audio_fd > 0)
index 4207525..ffb5367 100644 (file)
@@ -117,9 +117,36 @@ static const struct lrecord_description symbol_description[] = {
   { XD_END }
 };
 
-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("symbol", symbol,
-                                    mark_symbol, print_symbol, 0, 0, 0,
-                                    symbol_description, Lisp_Symbol);
+/* Symbol plists are directly accessible, so we need to protect against
+   invalid property list structure */
+
+static Lisp_Object
+symbol_getprop (Lisp_Object symbol, Lisp_Object property)
+{
+  return external_plist_get (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME);
+}
+
+static int
+symbol_putprop (Lisp_Object symbol, Lisp_Object property, Lisp_Object value)
+{
+  external_plist_put (&XSYMBOL (symbol)->plist, property, value, 0, ERROR_ME);
+  return 1;
+}
+
+static int
+symbol_remprop (Lisp_Object symbol, Lisp_Object property)
+{
+  return external_remprop (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME);
+}
+
+DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("symbol", symbol,
+                                               mark_symbol, print_symbol,
+                                               0, 0, 0, symbol_description,
+                                               symbol_getprop,
+                                               symbol_putprop,
+                                               symbol_remprop,
+                                               Fsymbol_plist,
+                                               Lisp_Symbol);
 
 \f
 /**********************************************************************/
@@ -150,10 +177,10 @@ check_obarray (Lisp_Object obarray)
 }
 
 Lisp_Object
-intern (CONST char *str)
+intern (const char *str)
 {
   Bytecount len = strlen (str);
-  CONST Bufbyte *buf = (CONST Bufbyte *) str;
+  const Bufbyte *buf = (const Bufbyte *) str;
   Lisp_Object obarray = Vobarray;
 
   if (!VECTORP (obarray) || XVECTOR_LENGTH (obarray) == 0)
@@ -312,7 +339,7 @@ OBARRAY defaults to the value of the variable `obarray'
    Also store the bucket number in oblookup_last_bucket_number.  */
 
 Lisp_Object
-oblookup (Lisp_Object obarray, CONST Bufbyte *ptr, Bytecount size)
+oblookup (Lisp_Object obarray, const Bufbyte *ptr, Bytecount size)
 {
   int hash, obsize;
   Lisp_Symbol *tail;
@@ -349,10 +376,10 @@ oblookup (Lisp_Object obarray, CONST Bufbyte *ptr, Bytecount size)
 
 #if 0 /* Emacs 19.34 */
 int
-hash_string (CONST Bufbyte *ptr, Bytecount len)
+hash_string (const Bufbyte *ptr, Bytecount len)
 {
-  CONST Bufbyte *p = ptr;
-  CONST Bufbyte *end = p + len;
+  const Bufbyte *p = ptr;
+  const Bufbyte *end = p + len;
   Bufbyte c;
   int hash = 0;
 
@@ -368,7 +395,7 @@ hash_string (CONST Bufbyte *ptr, Bytecount len)
 
 /* derived from hashpjw, Dragon Book P436. */
 int
-hash_string (CONST Bufbyte *ptr, Bytecount len)
+hash_string (const Bufbyte *ptr, Bytecount len)
 {
   int hash = 0;
 
@@ -1029,7 +1056,7 @@ static Lisp_Object
 do_symval_forwarding (Lisp_Object valcontents, struct buffer *buffer,
                      struct console *console)
 {
-  CONST struct symbol_value_forward *fwd;
+  const struct symbol_value_forward *fwd;
 
   if (!SYMBOL_VALUE_MAGIC_P (valcontents))
     return valcontents;
@@ -1097,7 +1124,7 @@ set_default_buffer_slot_variable (Lisp_Object sym,
      or symbol-value-buffer-local, and if there's a handler, we should
      have already called it. */
   Lisp_Object valcontents = fetch_value_maybe_past_magic (sym, Qt);
-  CONST struct symbol_value_forward *fwd
+  const struct symbol_value_forward *fwd
     = XSYMBOL_VALUE_FORWARD (valcontents);
   int offset = ((char *) symbol_value_forward_forward (fwd)
                - (char *) &buffer_local_flags);
@@ -1139,7 +1166,7 @@ set_default_console_slot_variable (Lisp_Object sym,
      or symbol-value-buffer-local, and if there's a handler, we should
      have already called it. */
   Lisp_Object valcontents = fetch_value_maybe_past_magic (sym, Qt);
-  CONST struct symbol_value_forward *fwd
+  const struct symbol_value_forward *fwd
     = XSYMBOL_VALUE_FORWARD (valcontents);
   int offset = ((char *) symbol_value_forward_forward (fwd)
                - (char *) &console_local_flags);
@@ -1205,7 +1232,7 @@ store_symval_forwarding (Lisp_Object sym, Lisp_Object ovalue,
     }
   else
     {
-      CONST struct symbol_value_forward *fwd = XSYMBOL_VALUE_FORWARD (ovalue);
+      const struct symbol_value_forward *fwd = XSYMBOL_VALUE_FORWARD (ovalue);
       int (*magicfun) (Lisp_Object simm, Lisp_Object *val,
                       Lisp_Object in_object, int flags)
        = symbol_value_forward_magicfun (fwd);
@@ -1685,7 +1712,7 @@ Set SYMBOL's value to NEWVAL, and return NEWVAL.
 
     case SYMVAL_CURRENT_BUFFER_FORWARD:
       {
-       CONST struct symbol_value_forward *fwd
+       const struct symbol_value_forward *fwd
          = XSYMBOL_VALUE_FORWARD (valcontents);
        int mask = XINT (*((Lisp_Object *)
                           symbol_value_forward_forward (fwd)));
@@ -1697,7 +1724,7 @@ Set SYMBOL's value to NEWVAL, and return NEWVAL.
 
     case SYMVAL_SELECTED_CONSOLE_FORWARD:
       {
-       CONST struct symbol_value_forward *fwd
+       const struct symbol_value_forward *fwd
          = XSYMBOL_VALUE_FORWARD (valcontents);
        int mask = XINT (*((Lisp_Object *)
                           symbol_value_forward_forward (fwd)));
@@ -1835,7 +1862,7 @@ default_value (Lisp_Object sym)
 
     case SYMVAL_CURRENT_BUFFER_FORWARD:
       {
-       CONST struct symbol_value_forward *fwd
+       const struct symbol_value_forward *fwd
          = XSYMBOL_VALUE_FORWARD (valcontents);
        return (*((Lisp_Object *)((char *) XBUFFER (Vbuffer_defaults)
                                  + ((char *)symbol_value_forward_forward (fwd)
@@ -1844,7 +1871,7 @@ default_value (Lisp_Object sym)
 
     case SYMVAL_SELECTED_CONSOLE_FORWARD:
       {
-       CONST struct symbol_value_forward *fwd
+       const struct symbol_value_forward *fwd
          = XSYMBOL_VALUE_FORWARD (valcontents);
        return (*((Lisp_Object *)((char *) XCONSOLE (Vconsole_defaults)
                                  + ((char *)symbol_value_forward_forward (fwd)
@@ -2284,7 +2311,7 @@ From now on the default value will apply in this buffer.
 
     case SYMVAL_CURRENT_BUFFER_FORWARD:
       {
-       CONST struct symbol_value_forward *fwd
+       const struct symbol_value_forward *fwd
          = XSYMBOL_VALUE_FORWARD (valcontents);
        int offset = ((char *) symbol_value_forward_forward (fwd)
                               - (char *) &buffer_local_flags);
@@ -2378,7 +2405,7 @@ From now on the default value will apply in this console.
 
     case SYMVAL_SELECTED_CONSOLE_FORWARD:
       {
-       CONST struct symbol_value_forward *fwd
+       const struct symbol_value_forward *fwd
          = XSYMBOL_VALUE_FORWARD (valcontents);
        int offset = ((char *) symbol_value_forward_forward (fwd)
                               - (char *) &console_local_flags);
@@ -2437,7 +2464,7 @@ symbol_value_buffer_local_info (Lisp_Object symbol, struct buffer *buffer)
 
        case SYMVAL_CURRENT_BUFFER_FORWARD:
          {
-           CONST struct symbol_value_forward *fwd
+           const struct symbol_value_forward *fwd
              = XSYMBOL_VALUE_FORWARD (valcontents);
            int mask = XINT (*((Lisp_Object *)
                               symbol_value_forward_forward (fwd)));
@@ -3107,8 +3134,21 @@ Lisp_Object Qnull_pointer;
 
 /* some losing systems can't have static vars at function scope... */
 static struct symbol_value_magic guts_of_unbound_marker =
-  { { symbol_value_forward_lheader_initializer, 0, 69},
-    SYMVAL_UNBOUND_MARKER };
+{ /* struct symbol_value_magic */
+  { /* struct lcrecord_header */
+    { /* struct lrecord_header */
+      1, /* type - index into lrecord_implementations_table */
+      0, /* mark */
+      0, /* c_readonly */
+      0, /* lisp_readonly */
+    },
+    0, /* next */
+    0, /* uid  */
+    0, /* free */
+  },
+  0, /* value */
+  SYMVAL_UNBOUND_MARKER
+};
 
 void
 init_symbols_once_early (void)
@@ -3117,7 +3157,7 @@ init_symbols_once_early (void)
 
   /* Bootstrapping problem: Qnil isn't set when make_string_nocopy is
      called the first time. */
-  Qnil = Fmake_symbol (make_string_nocopy ((CONST Bufbyte *) "nil", 3));
+  Qnil = Fmake_symbol (make_string_nocopy ((const Bufbyte *) "nil", 3));
   XSYMBOL (Qnil)->name->plist = Qnil;
   XSYMBOL (Qnil)->value = Qnil; /* Nihil ex nihil */
   XSYMBOL (Qnil)->plist = Qnil;
@@ -3138,8 +3178,8 @@ init_symbols_once_early (void)
 
     XSETSYMBOL_VALUE_MAGIC (Qunbound, tem);
   }
-  if ((CONST void *) XPNTR (Qunbound) !=
-      (CONST void *)&guts_of_unbound_marker)
+  if ((const void *) XPNTR (Qunbound) !=
+      (const void *)&guts_of_unbound_marker)
     {
       /* This might happen on DATA_SEG_BITS machines. */
       /* abort (); */
@@ -3176,25 +3216,25 @@ reinit_symbols_once_early (void)
 }
 
 void
-defsymbol_nodump (Lisp_Object *location, CONST char *name)
+defsymbol_nodump (Lisp_Object *location, const char *name)
 {
-  *location = Fintern (make_string_nocopy ((CONST Bufbyte *) name,
+  *location = Fintern (make_string_nocopy ((const Bufbyte *) name,
                                           strlen (name)),
                       Qnil);
   staticpro_nodump (location);
 }
 
 void
-defsymbol (Lisp_Object *location, CONST char *name)
+defsymbol (Lisp_Object *location, const char *name)
 {
-  *location = Fintern (make_string_nocopy ((CONST Bufbyte *) name,
+  *location = Fintern (make_string_nocopy ((const Bufbyte *) name,
                                           strlen (name)),
                       Qnil);
   staticpro (location);
 }
 
 void
-defkeyword (Lisp_Object *location, CONST char *name)
+defkeyword (Lisp_Object *location, const char *name)
 {
   defsymbol (location, name);
   Fset (*location, *location);
@@ -3252,7 +3292,7 @@ do {                                                                      \
   if (initialized) {                                                   \
     Lisp_Subr *newsubr = (Lisp_Subr *) xmalloc (sizeof (Lisp_Subr));   \
     memcpy (newsubr, subr, sizeof (Lisp_Subr));                                \
-    subr->doc = (CONST char *)newsubr;                                 \
+    subr->doc = (const char *)newsubr;                                 \
     subr = newsubr;                                                    \
   }                                                                    \
 } while (0)
@@ -3288,7 +3328,7 @@ defsubr_macro (Lisp_Subr *subr)
 }
 
 void
-deferror (Lisp_Object *symbol, CONST char *name, CONST char *messuhhj,
+deferror (Lisp_Object *symbol, const char *name, const char *messuhhj,
          Lisp_Object inherits_from)
 {
   Lisp_Object conds;
@@ -3386,7 +3426,7 @@ syms_of_symbols (void)
 
 /* Create and initialize a Lisp variable whose value is forwarded to C data */
 void
-defvar_magic (CONST char *symbol_name, CONST struct symbol_value_forward *magic)
+defvar_magic (const char *symbol_name, const struct symbol_value_forward *magic)
 {
   Lisp_Object sym, kludge;
 
@@ -3412,7 +3452,7 @@ defvar_magic (CONST char *symbol_name, CONST struct symbol_value_forward *magic)
     sym = Fintern (build_string (symbol_name), Qnil);
   else
 #endif
-    sym = Fintern (make_string_nocopy ((CONST Bufbyte *) symbol_name,
+    sym = Fintern (make_string_nocopy ((const Bufbyte *) symbol_name,
                                       strlen (symbol_name)), Qnil);
 
   XSETOBJ (XSYMBOL (sym)->value, Lisp_Type_Record, magic);
index caf4490..41e2324 100644 (file)
@@ -72,6 +72,7 @@ enum symbol_value_type
 struct symbol_value_magic
 {
   struct lcrecord_header lcheader;
+  void *value;
   enum symbol_value_type type;
 };
 #define SYMBOL_VALUE_MAGIC_P(x)                                \
@@ -138,7 +139,7 @@ struct symbol_value_forward
 DECLARE_LRECORD (symbol_value_forward, struct symbol_value_forward);
 #define XSYMBOL_VALUE_FORWARD(x) \
        XRECORD (x, symbol_value_forward, struct symbol_value_forward)
-#define symbol_value_forward_forward(m) ((void *)((m)->magic.lcheader.next))
+#define symbol_value_forward_forward(m) ((void *)((m)->magic.value))
 #define symbol_value_forward_magicfun(m) ((m)->magicfun)
 
 /* 2. symbol-value-buffer-local */
@@ -281,29 +282,47 @@ void defsubr (Lisp_Subr *);
 void defsubr_macro (Lisp_Subr *);
 #define DEFSUBR_MACRO(Fname) defsubr_macro (&S##Fname)
 
-void defsymbol (Lisp_Object *location, CONST char *name);
-void defsymbol_nodump (Lisp_Object *location, CONST char *name);
+void defsymbol (Lisp_Object *location, const char *name);
+void defsymbol_nodump (Lisp_Object *location, const char *name);
 
-void defkeyword (Lisp_Object *location, CONST char *name);
+void defkeyword (Lisp_Object *location, const char *name);
 
-void deferror (Lisp_Object *symbol, CONST char *name,
-              CONST char *message, Lisp_Object inherits_from);
+void deferror (Lisp_Object *symbol, const char *name,
+              const char *message, Lisp_Object inherits_from);
 
 /* Macros we use to define forwarded Lisp variables.
    These are used in the syms_of_FILENAME functions.  */
 
-void defvar_magic (CONST char *symbol_name, CONST struct symbol_value_forward *magic);
-
-#define symbol_value_forward_lheader_initializer { 1, 0, 0, 0 }
+void defvar_magic (const char *symbol_name, const struct symbol_value_forward *magic);
 
 #define DEFVAR_SYMVAL_FWD(lname, c_location, forward_type, magicfun) do {      \
-  static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C               \
-   = { { { symbol_value_forward_lheader_initializer,                           \
-          (struct lcrecord_header *) (c_location), 69 },                       \
-         forward_type }, magicfun };                                           \
+  static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C =             \
+  { /* struct symbol_value_forward */                                          \
+    { /* struct symbol_value_magic */                                          \
+      { /* struct lcrecord_header */                                           \
+       { /* struct lrecord_header */                                           \
+         1, /* type - index into lrecord_implementations_table */              \
+         0, /* mark bit */                                                     \
+         0, /* c_readonly bit */                                               \
+         0  /* lisp_readonly bit */                                            \
+       },                                                                      \
+       0, /* next */                                                           \
+       0, /* uid  */                                                           \
+       0  /* free */                                                           \
+      },                                                                       \
+      c_location,                                                              \
+      forward_type                                                             \
+    },                                                                         \
+    magicfun                                                                   \
+  };                                                                           \
   defvar_magic ((lname), &I_hate_C);                                           \
 } while (0)
 
+#define DEFVAR_SYMVAL_FWD_INT(lname, c_location, forward_type, magicfun) do{   \
+  DEFVAR_SYMVAL_FWD (lname, c_location, forward_type, magicfun);               \
+  dumpopaque (c_location, sizeof(int));                                                \
+} while (0)
+
 #define DEFVAR_SYMVAL_FWD_OBJECT(lname, c_location, forward_type, magicfun) do{ \
   DEFVAR_SYMVAL_FWD (lname, c_location, forward_type, magicfun);               \
   staticpro (c_location);                                                      \
@@ -317,18 +336,18 @@ void defvar_magic (CONST char *symbol_name, CONST struct symbol_value_forward *m
 #define DEFVAR_SPECIFIER(lname, c_location) \
        DEFVAR_SYMVAL_FWD_OBJECT (lname, c_location, SYMVAL_CONST_SPECIFIER_FORWARD, 0)
 #define DEFVAR_INT(lname, c_location) \
-       DEFVAR_SYMVAL_FWD (lname, c_location, SYMVAL_FIXNUM_FORWARD, 0)
+       DEFVAR_SYMVAL_FWD_INT (lname, c_location, SYMVAL_FIXNUM_FORWARD, 0)
 #define DEFVAR_CONST_INT(lname, c_location) \
-       DEFVAR_SYMVAL_FWD (lname, c_location, SYMVAL_CONST_FIXNUM_FORWARD, 0)
+       DEFVAR_SYMVAL_FWD_INT (lname, c_location, SYMVAL_CONST_FIXNUM_FORWARD, 0)
 #define DEFVAR_BOOL(lname, c_location) \
-       DEFVAR_SYMVAL_FWD (lname, c_location, SYMVAL_BOOLEAN_FORWARD, 0)
+       DEFVAR_SYMVAL_FWD_INT (lname, c_location, SYMVAL_BOOLEAN_FORWARD, 0)
 #define DEFVAR_CONST_BOOL(lname, c_location) \
-       DEFVAR_SYMVAL_FWD (lname, c_location, SYMVAL_CONST_BOOLEAN_FORWARD, 0)
+       DEFVAR_SYMVAL_FWD_INT (lname, c_location, SYMVAL_CONST_BOOLEAN_FORWARD, 0)
 #define DEFVAR_LISP_MAGIC(lname, c_location, magicfun) \
        DEFVAR_SYMVAL_FWD_OBJECT (lname, c_location, SYMVAL_OBJECT_FORWARD, magicfun)
 #define DEFVAR_INT_MAGIC(lname, c_location, magicfun) \
-       DEFVAR_SYMVAL_FWD (lname, c_location, SYMVAL_FIXNUM_FORWARD, magicfun)
+       DEFVAR_SYMVAL_FWD_INT (lname, c_location, SYMVAL_FIXNUM_FORWARD, magicfun)
 #define DEFVAR_BOOL_MAGIC(lname, c_location, magicfun) \
-       DEFVAR_SYMVAL_FWD (lname, c_location, SYMVAL_BOOLEAN_FORWARD, magicfun)
+       DEFVAR_SYMVAL_FWD_INT (lname, c_location, SYMVAL_BOOLEAN_FORWARD, magicfun)
 
 #endif /* INCLUDED_symeval_h_ */
index 4445803..ceb942d 100644 (file)
@@ -224,7 +224,7 @@ BUFFER defaults to the current buffer if omitted.
    into the code it signifies.
    This is used by modify-syntax-entry, and other things. */
 
-CONST unsigned char syntax_spec_code[0400] =
+const unsigned char syntax_spec_code[0400] =
 { 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
   0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
   0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
@@ -246,7 +246,7 @@ CONST unsigned char syntax_spec_code[0400] =
   0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377
 };
 
-CONST unsigned char syntax_code_spec[] =  " .w_()'\"$\\/<>@";
+const unsigned char syntax_code_spec[] =  " .w_()'\"$\\/<>@";
 
 DEFUN ("syntax-designator-chars", Fsyntax_designator_chars, 0, 0, 0, /*
 Return a string of the recognized syntax designator chars.
@@ -365,13 +365,12 @@ scan_words (struct buffer *buf, Bufpos from, int count)
          ch0 = BUF_FETCH_CHAR (buf, from);
          code = SYNTAX_UNSAFE (mirrortab, ch0);
 
+         from++;
          if (words_include_escapes
              && (code == Sescape || code == Scharquote))
            break;
          if (code == Sword)
            break;
-
-         from++;
        }
 
       QUIT;
@@ -407,13 +406,13 @@ scan_words (struct buffer *buf, Bufpos from, int count)
 
          ch1 = BUF_FETCH_CHAR (buf, from - 1);
          code = SYNTAX_UNSAFE (mirrortab, ch1);
+
+         from--;
          if (words_include_escapes
              && (code == Sescape || code == Scharquote))
            break;
          if (code == Sword)
            break;
-
-         from--;
        }
 
       QUIT;
@@ -1692,7 +1691,7 @@ Non-nil means `forward-word', etc., should treat escape chars part of words.
 }
 
 static void
-define_standard_syntax (CONST char *p, enum syntaxcode syn)
+define_standard_syntax (const char *p, enum syntaxcode syn)
 {
   for (; *p; p++)
     Fput_char_table (make_char (*p), make_int (syn), Vstandard_syntax_table);
@@ -1702,7 +1701,7 @@ void
 complex_vars_of_syntax (void)
 {
   Emchar i;
-  CONST char *p;
+  const char *p;
   /* Set this now, so first buffer creation can refer to it. */
   /* Make it nil before calling copy-syntax-table
      so that copy-syntax-table will know not to try to copy from garbage */
index deb98e3..aa78eab 100644 (file)
@@ -170,13 +170,19 @@ WORD_SYNTAX_P (Lisp_Char_Table *table, Emchar c)
 #define SYNTAX_SECOND_CHAR_END   0x03
 #define SYNTAX_SECOND_CHAR       0x33
 
-#define SYNTAX_START_P(table, a, b)                                    \
-  ((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_START)          \
-   && (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_START))
 
-#define SYNTAX_END_P(table, a, b)                                      \
-  ((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_END)            \
-   && (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_END))
+/* #### These are now more or less equivalent to
+   SYNTAX_COMMENT_MATCH_START ...*/
+/* a and b must be first and second start chars for a common type */
+#define SYNTAX_START_P(table, a, b)                                     \
+  (((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_START) >> 2)    \
+   & (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_START))
+
+/* ... and  SYNTAX_COMMENT_MATCH_END */
+/* a and b must be first and second end chars for a common type */
+#define SYNTAX_END_P(table, a, b)                                       \
+  (((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_END) >> 2)      \
+   & (SYNTAX_COMMENT_BITS (table, b) & SYNTAX_SECOND_CHAR_END))
 
 #define SYNTAX_STYLES_MATCH_START_P(table, a, b, mask)                     \
   ((SYNTAX_COMMENT_BITS (table, a) & SYNTAX_FIRST_CHAR_START & (mask))     \
@@ -232,11 +238,11 @@ extern Lisp_Object Vstandard_syntax_table;
    that character signifies (as a char).
    For example, (enum syntaxcode) syntax_spec_code['w'] is Sword. */
 
-extern CONST unsigned char syntax_spec_code[0400];
+extern const unsigned char syntax_spec_code[0400];
 
 /* Indexed by syntax code, give the letter that describes it. */
 
-extern CONST unsigned char syntax_code_spec[];
+extern const unsigned char syntax_code_spec[];
 
 Lisp_Object scan_lists (struct buffer *buf, Bufpos from, int count,
                        int depth, int sexpflag, int no_error);
index 49661f4..b875b48 100644 (file)
@@ -784,7 +784,7 @@ get_pty_max_bytes (int fd)
 Bufbyte
 get_eof_char (int fd)
 {
-  CONST Bufbyte ctrl_d = (Bufbyte) '\004';
+  const Bufbyte ctrl_d = (Bufbyte) '\004';
 
   if (!isatty (fd))
     return ctrl_d;
@@ -794,7 +794,7 @@ get_eof_char (int fd)
     tcgetattr (fd, &t);
 #if 0
     /* What is the following line designed to do??? -mrb */
-    if (strlen ((CONST char *) t.c_cc) < (unsigned int) (VEOF + 1))
+    if (strlen ((const char *) t.c_cc) < (unsigned int) (VEOF + 1))
       return ctrl_d;
     else
       return (Bufbyte) t.c_cc[VEOF];
@@ -817,7 +817,7 @@ get_eof_char (int fd)
   {
     struct termio t;
     ioctl (fd, TCGETA, &t);
-    if (strlen ((CONST char *) t.c_cc) < (unsigned int) (VINTR + 1))
+    if (strlen ((const char *) t.c_cc) < (unsigned int) (VINTR + 1))
       return ctrl_d;
     else
       return (Bufbyte) t.c_cc[VINTR];
@@ -2335,7 +2335,7 @@ init_system_name (void)
 #   endif
        if (hp)
          {
-           CONST char *fqdn = (CONST char *) hp->h_name;
+           const char *fqdn = (const char *) hp->h_name;
 
            if (!strchr (fqdn, '.'))
              {
@@ -2495,7 +2495,7 @@ sys_do_signal (int signal_number, signal_handler_t action)
 /* Linux added here by Raymond L. Toy <toy@alydar.crd.ge.com> for XEmacs. */
 /* Irix added here by gparker@sni-usa.com for XEmacs. */
 /* NetBSD added here by James R Grinter <jrg@doc.ic.ac.uk> for XEmacs */
-extern CONST char *sys_errlist[];
+extern const char *sys_errlist[];
 extern int sys_nerr;
 #endif
 
@@ -2505,12 +2505,12 @@ extern int sys_nerr;
 #endif
 
 
-CONST char *
+const char *
 strerror (int errnum)
 {
   if (errnum >= 0 && errnum < sys_nerr)
     return sys_errlist[errnum];
-  return ((CONST char *) GETTEXT ("Unknown error"));
+  return ((const char *) GETTEXT ("Unknown error"));
 }
 
 #endif /* ! HAVE_STRERROR */
@@ -2644,7 +2644,7 @@ mswindows_set_last_errno (void)
 
 #ifdef ENCAPSULATE_OPEN
 int
-sys_open (CONST char *path, int oflag, ...)
+sys_open (const char *path, int oflag, ...)
 {
   int mode;
   va_list ap;
@@ -2681,7 +2681,7 @@ sys_open (CONST char *path, int oflag, ...)
    is not interrupted by C-g.  However, the worst that can happen is
    the fallback to simple open().  */
 int
-interruptible_open (CONST char *path, int oflag, int mode)
+interruptible_open (const char *path, int oflag, int mode)
 {
   /* This function can GC */
   size_t len = strlen (path);
@@ -2757,10 +2757,10 @@ sys_read (int fildes, void *buf, size_t nbyte)
 #endif /* ENCAPSULATE_READ */
 
 ssize_t
-sys_write_1 (int fildes, CONST void *buf, size_t nbyte, int allow_quit)
+sys_write_1 (int fildes, const void *buf, size_t nbyte, int allow_quit)
 {
   ssize_t bytes_written = 0;
-  CONST char *b = (CONST char *) buf;
+  const char *b = (const char *) buf;
 
   /* No harm in looping regardless of the INTERRUPTIBLE_IO setting. */
   while (nbyte > 0)
@@ -2786,7 +2786,7 @@ sys_write_1 (int fildes, CONST void *buf, size_t nbyte, int allow_quit)
 
 #ifdef ENCAPSULATE_WRITE
 ssize_t
-sys_write (int fildes, CONST void *buf, size_t nbyte)
+sys_write (int fildes, const void *buf, size_t nbyte)
 {
   return sys_write_1 (fildes, buf, nbyte, 0);
 }
@@ -2804,7 +2804,7 @@ sys_write (int fildes, CONST void *buf, size_t nbyte)
 
 #ifdef ENCAPSULATE_FOPEN
 FILE *
-sys_fopen (CONST char *path, CONST char *type)
+sys_fopen (const char *path, const char *type)
 {
   PATHNAME_CONVERT_OUT (path);
 #if defined (WINDOWSNT)
@@ -2914,12 +2914,12 @@ sys_fread (void *ptr, size_t size, size_t nitem, FILE *stream)
 
 #ifdef ENCAPSULATE_FWRITE
 size_t
-sys_fwrite (CONST void *ptr, size_t size, size_t nitem, FILE *stream)
+sys_fwrite (const void *ptr, size_t size, size_t nitem, FILE *stream)
 {
 #ifdef INTERRUPTIBLE_IO
   size_t rtnval;
   size_t items_written = 0;
-  CONST char *b = (CONST char *) ptr;
+  const char *b = (const char *) ptr;
 
   while (nitem > 0)
     {
@@ -2947,7 +2947,7 @@ sys_fwrite (CONST void *ptr, size_t size, size_t nitem, FILE *stream)
 
 #ifdef ENCAPSULATE_CHDIR
 int
-sys_chdir (CONST char *path)
+sys_chdir (const char *path)
 {
   PATHNAME_CONVERT_OUT (path);
   return chdir (path);
@@ -2957,7 +2957,7 @@ sys_chdir (CONST char *path)
 
 #ifdef ENCAPSULATE_MKDIR
 int
-sys_mkdir (CONST char *path, mode_t mode)
+sys_mkdir (const char *path, mode_t mode)
 {
   PATHNAME_CONVERT_OUT (path);
 #ifdef WINDOWSNT
@@ -2971,7 +2971,7 @@ sys_mkdir (CONST char *path, mode_t mode)
 
 #ifdef ENCAPSULATE_OPENDIR
 DIR *
-sys_opendir (CONST char *filename)
+sys_opendir (const char *filename)
 {
   DIR *rtnval;
   PATHNAME_CONVERT_OUT (filename);
@@ -3003,7 +3003,7 @@ sys_readdir (DIR *dirp)
   {
     Extcount external_len;
     int ascii_filename_p = 1;
-    CONST Extbyte * CONST external_name = (CONST Extbyte *) rtnval->d_name;
+    const Extbyte * const external_name = (const Extbyte *) rtnval->d_name;
 
     /* Optimize for the common all-ASCII case, computing len en passant */
     for (external_len = 0; external_name[external_len] ; external_len++)
@@ -3016,7 +3016,7 @@ sys_readdir (DIR *dirp)
 
     { /* Non-ASCII filename */
       static Bufbyte_dynarr *internal_DIRENTRY;
-      CONST Bufbyte *internal_name;
+      const Bufbyte *internal_name;
       Bytecount internal_len;
       if (!internal_DIRENTRY)
         internal_DIRENTRY = Dynarr_new (Bufbyte);
@@ -3056,7 +3056,7 @@ sys_closedir (DIR *dirp)
 
 #ifdef ENCAPSULATE_RMDIR
 int
-sys_rmdir (CONST char *path)
+sys_rmdir (const char *path)
 {
   PATHNAME_CONVERT_OUT (path);
   return rmdir (path);
@@ -3068,7 +3068,7 @@ sys_rmdir (CONST char *path)
 
 #ifdef ENCAPSULATE_ACCESS
 int
-sys_access (CONST char *path, int mode)
+sys_access (const char *path, int mode)
 {
   PATHNAME_CONVERT_OUT (path);
   return access (path, mode);
@@ -3079,7 +3079,7 @@ sys_access (CONST char *path, int mode)
 #ifdef HAVE_EACCESS
 #ifdef ENCAPSULATE_EACCESS
 int
-sys_eaccess (CONST char *path, int mode)
+sys_eaccess (const char *path, int mode)
 {
   PATHNAME_CONVERT_OUT (path);
   return eaccess (path, mode);
@@ -3090,7 +3090,7 @@ sys_eaccess (CONST char *path, int mode)
 
 #ifdef ENCAPSULATE_LSTAT
 int
-sys_lstat (CONST char *path, struct stat *buf)
+sys_lstat (const char *path, struct stat *buf)
 {
   PATHNAME_CONVERT_OUT (path);
   return lstat (path, buf);
@@ -3100,7 +3100,7 @@ sys_lstat (CONST char *path, struct stat *buf)
 
 #ifdef ENCAPSULATE_READLINK
 int
-sys_readlink (CONST char *path, char *buf, size_t bufsiz)
+sys_readlink (const char *path, char *buf, size_t bufsiz)
 {
   PATHNAME_CONVERT_OUT (path);
   /* #### currently we don't do conversions on the incoming data */
@@ -3120,7 +3120,7 @@ sys_fstat (int fd, struct stat *buf)
 
 #ifdef ENCAPSULATE_STAT
 int
-sys_stat (CONST char *path, struct stat *buf)
+sys_stat (const char *path, struct stat *buf)
 {
   PATHNAME_CONVERT_OUT (path);
   return stat (path, buf);
@@ -3132,7 +3132,7 @@ sys_stat (CONST char *path, struct stat *buf)
 
 #ifdef ENCAPSULATE_CHMOD
 int
-sys_chmod (CONST char *path, mode_t mode)
+sys_chmod (const char *path, mode_t mode)
 {
   PATHNAME_CONVERT_OUT (path);
   return chmod (path, mode);
@@ -3142,7 +3142,7 @@ sys_chmod (CONST char *path, mode_t mode)
 
 #ifdef ENCAPSULATE_CREAT
 int
-sys_creat (CONST char *path, mode_t mode)
+sys_creat (const char *path, mode_t mode)
 {
   PATHNAME_CONVERT_OUT (path);
   return creat (path, mode);
@@ -3152,7 +3152,7 @@ sys_creat (CONST char *path, mode_t mode)
 
 #ifdef ENCAPSULATE_LINK
 int
-sys_link (CONST char *existing, CONST char *new)
+sys_link (const char *existing, const char *new)
 {
   PATHNAME_CONVERT_OUT (existing);
   PATHNAME_CONVERT_OUT (new);
@@ -3163,7 +3163,7 @@ sys_link (CONST char *existing, CONST char *new)
 
 #ifdef ENCAPSULATE_RENAME
 int
-sys_rename (CONST char *old, CONST char *new)
+sys_rename (const char *old, const char *new)
 {
   PATHNAME_CONVERT_OUT (old);
   PATHNAME_CONVERT_OUT (new);
@@ -3182,7 +3182,7 @@ sys_rename (CONST char *old, CONST char *new)
 
 #ifdef ENCAPSULATE_SYMLINK
 int
-sys_symlink (CONST char *name1, CONST char *name2)
+sys_symlink (const char *name1, const char *name2)
 {
   PATHNAME_CONVERT_OUT (name1);
   PATHNAME_CONVERT_OUT (name2);
@@ -3193,7 +3193,7 @@ sys_symlink (CONST char *name1, CONST char *name2)
 
 #ifdef ENCAPSULATE_UNLINK
 int
-sys_unlink (CONST char *path)
+sys_unlink (const char *path)
 {
   PATHNAME_CONVERT_OUT (path);
   return unlink (path);
@@ -3203,7 +3203,7 @@ sys_unlink (CONST char *path)
 
 #ifdef ENCAPSULATE_EXECVP
 int
-sys_execvp (CONST char *path, char * CONST * argv)
+sys_execvp (const char *path, char * const * argv)
 {
   int i, argc;
   char ** new_argv;
@@ -3231,7 +3231,7 @@ sys_execvp (CONST char *path, char * CONST * argv)
 
 #ifndef HAVE_GETCWD
 char *
-getcwd (char *pathname, int size)
+getcwd (char *pathname, size_t size)
 {
   return getwd (pathname);
 }
@@ -3275,7 +3275,7 @@ getwd (char *pathname)
 
 #ifndef HAVE_RENAME
 int
-rename (CONST char *from, CONST char *to)
+rename (const char *from, const char *to)
 {
   if (access (from, 0) == 0)
     {
@@ -3532,7 +3532,7 @@ get_random (void)
 #if !defined (SYS_SIGLIST_DECLARED) && !defined (HAVE_SYS_SIGLIST)
 
 #if defined(WINDOWSNT) || defined(__CYGWIN32__)
-CONST char *sys_siglist[] =
+const char *sys_siglist[] =
   {
     "bum signal!!",
     "hangup",
@@ -3565,7 +3565,7 @@ CONST char *sys_siglist[] =
 
 #ifdef USG
 #ifdef AIX
-CONST char *sys_siglist[NSIG + 1] =
+const char *sys_siglist[NSIG + 1] =
   {
     /* AIX has changed the signals a bit */
     DEFER_GETTEXT ("bogus signal"),                    /* 0 */
@@ -3605,7 +3605,7 @@ CONST char *sys_siglist[NSIG + 1] =
     0
   };
 #else /* USG, not AIX */
-CONST char *sys_siglist[NSIG + 1] =
+const char *sys_siglist[NSIG + 1] =
   {
     DEFER_GETTEXT ("bogus signal"),                    /* 0 */
     DEFER_GETTEXT ("hangup"),                          /* 1  SIGHUP */
@@ -3654,7 +3654,7 @@ CONST char *sys_siglist[NSIG + 1] =
 #endif /* not AIX */
 #endif /* USG */
 #ifdef DGUX
-CONST char *sys_siglist[NSIG + 1] =
+const char *sys_siglist[NSIG + 1] =
   {
     DEFER_GETTEXT ("null signal"),                      /*  0 SIGNULL   */
     DEFER_GETTEXT ("hangup"),                           /*  1 SIGHUP    */
@@ -3759,7 +3759,7 @@ closedir (DIR *dirp)  /* stream from opendir */
 #ifdef NONSYSTEM_DIR_LIBRARY
 
 DIR *
-opendir (CONST char *filename) /* name of directory */
+opendir (const char *filename) /* name of directory */
 {
   DIR *dirp;           /* -> malloc'ed storage */
   int fd;              /* file descriptor for read */
@@ -3861,7 +3861,7 @@ readdir (DIR *dirp)       /* stream from opendir */
 MKDIR_PROTOTYPE
 #else
 int
-mkdir (CONST char *dpath, int dmode)
+mkdir (const char *dpath, int dmode)
 #endif
 {
   int cpid, status, fd;
@@ -3921,7 +3921,7 @@ mkdir (CONST char *dpath, int dmode)
 
 #ifndef HAVE_RMDIR
 int
-rmdir (CONST char *dpath)
+rmdir (const char *dpath)
 {
   int cpid, status, fd;
   struct stat statbuf;
index c06a235..2911014 100644 (file)
@@ -81,7 +81,7 @@ void reset_poll_for_quit (void);
 extern JMP_BUF break_system_call_jump;
 extern volatile int can_break_system_calls;
 
-ssize_t sys_write_1 (int fildes, CONST void *buf, size_t nbyte,
+ssize_t sys_write_1 (int fildes, const void *buf, size_t nbyte,
                     int allow_quit);
 ssize_t sys_read_1 (int fildes, void *buf, size_t nbyte,
                    int allow_quit);
@@ -145,11 +145,11 @@ char *end_of_data (void);
 void init_system_name (void);
 
 #ifndef HAVE_GETCWD
-char *getcwd (char *pathname, int size);
+char *getcwd (char *pathname, size_t size);
 #endif
 
 #ifndef HAVE_RENAME
-int rename (CONST char *from, CONST char *to);
+int rename (const char *from, const char *to);
 #endif
 
 #ifndef HAVE_DUP2
@@ -161,7 +161,7 @@ int dup2 (int oldd, int newd);
 # ifdef strerror
 # undef strerror
 # endif
-CONST char *strerror (int);
+const char *strerror (int);
 #endif
 
 #ifdef WINDOWSNT
@@ -169,7 +169,7 @@ void mswindows_set_errno (unsigned long win32_error);
 void mswindows_set_last_errno (void);
 #endif
 
-int interruptible_open (CONST char *path, int oflag, int mode);
+int interruptible_open (const char *path, int oflag, int mode);
 
 #ifndef HAVE_H_ERRNO
 extern int h_errno;
@@ -178,7 +178,7 @@ extern int h_errno;
 #ifdef HAVE_REALPATH
 #define xrealpath realpath
 #else
-char *xrealpath(CONST char *path, char resolved_path []);
+char *xrealpath(const char *path, char resolved_path []);
 #endif
 
 #endif /* INCLUDED_sysdep_h_ */
index 6c84ce8..76f9cd8 100644 (file)
@@ -67,7 +67,7 @@ Boston, MA 02111-1307, USA.  */
 /* encapsulation: directory calls */
 
 #ifdef ENCAPSULATE_CHDIR
-int sys_chdir (CONST char *path);
+int sys_chdir (const char *path);
 #endif
 #if defined (ENCAPSULATE_CHDIR) && !defined (DONT_ENCAPSULATE)
 # undef chdir
@@ -78,7 +78,7 @@ int sys_chdir (CONST char *path);
 #endif
 
 #ifdef ENCAPSULATE_MKDIR
-int sys_mkdir (CONST char *path, mode_t mode);
+int sys_mkdir (const char *path, mode_t mode);
 #endif
 #if defined (ENCAPSULATE_MKDIR) && !defined (DONT_ENCAPSULATE)
 # undef mkdir
@@ -89,7 +89,7 @@ int sys_mkdir (CONST char *path, mode_t mode);
 #endif
 
 #ifdef ENCAPSULATE_OPENDIR
-DIR *sys_opendir (CONST char *filename);
+DIR *sys_opendir (const char *filename);
 #endif
 #if defined (ENCAPSULATE_OPENDIR) && !defined (DONT_ENCAPSULATE)
 # undef opendir
@@ -122,7 +122,7 @@ int sys_closedir (DIR *dirp);
 #endif
 
 #ifdef ENCAPSULATE_RMDIR
-int sys_rmdir (CONST char *path);
+int sys_rmdir (const char *path);
 #endif
 #if defined (ENCAPSULATE_RMDIR) && !defined (DONT_ENCAPSULATE)
 # undef rmdir
index abc70b8..2bcfc67 100644 (file)
@@ -49,13 +49,13 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 #endif
 
 int
-dll_init (CONST char *arg)
+dll_init (const char *arg)
 {
   return 0;
 }
 
 dll_handle
-dll_open (CONST char *fname)
+dll_open (const char *fname)
 {
   return (dll_handle)dlopen (fname, RTLD_LAZY | RTLD_GLOBAL);
 }
@@ -67,7 +67,7 @@ dll_close (dll_handle h)
 }
 
 dll_func
-dll_function (dll_handle h, CONST char *n)
+dll_function (dll_handle h, const char *n)
 {
 #ifdef DLSYM_NEEDS_UNDERSCORE
   char *buf = alloca_array (char, strlen (n) + 2);
@@ -79,7 +79,7 @@ dll_function (dll_handle h, CONST char *n)
 }
 
 dll_var
-dll_variable (dll_handle h, CONST char *n)
+dll_variable (dll_handle h, const char *n)
 {
 #ifdef DLSYM_NEEDS_UNDERSCORE
   char *buf = alloca_array (char, strlen (n) + 2);
@@ -90,11 +90,11 @@ dll_variable (dll_handle h, CONST char *n)
   return (dll_var)dlsym ((void *)h, n);
 }
 
-CONST char *
+const char *
 dll_error (dll_handle h)
 {
 #if defined(HAVE_DLERROR) || defined(dlerror)
-  return (CONST char *)dlerror ();
+  return (const char *)dlerror ();
 #elif defined(HAVE__DLERROR)
   return (const char *)_dlerror();
 #else
@@ -106,13 +106,13 @@ dll_error (dll_handle h)
 /* This is the HP/UX version */
 #include <dl.h>
 int
-dll_init (CONST char *arg)
+dll_init (const char *arg)
 {
   return 0;
 }
 
 dll_handle
-dll_open (CONST char *fname)
+dll_open (const char *fname)
 {
   shl_t h = shl_load (fname, BIND_DEFERRED,0L);
   shl_t *hp = NULL;
@@ -137,7 +137,7 @@ dll_close (dll_handle h)
 }
 
 dll_func
-dll_function (dll_handle h, CONST char *n)
+dll_function (dll_handle h, const char *n)
 {
   long handle = 0L;
 
@@ -148,7 +148,7 @@ dll_function (dll_handle h, CONST char *n)
 }
 
 dll_var
-dll_variable (dll_handle h, CONST char *n)
+dll_variable (dll_handle h, const char *n)
 {
   long handle = 0L;
 
@@ -158,7 +158,7 @@ dll_variable (dll_handle h, CONST char *n)
   return (dll_var)handle;
 }
 
-CONST char *
+const char *
 dll_error (dll_handle h)
 {
   /* #### WTF?!  Shouldn't this at least attempt to get strerror or
@@ -169,7 +169,7 @@ dll_error (dll_handle h)
 #elif defined(HAVE_INIT_DLD)
 #include <dld.h>
 int
-dll_init (CONST char *arg)
+dll_init (const char *arg)
 {
   char *real_exe = dld_find_executable (arg);
   int rc;
@@ -184,7 +184,7 @@ dll_init (CONST char *arg)
 }
 
 dll_handle
-dll_open (CONST char *fname)
+dll_open (const char *fname)
 {
   rc = dld_link (fname);
   if (rc)
@@ -206,25 +206,25 @@ dll_close (dll_handle h)
 }
 
 DLL_FUNC
-dll_function (dll_handle h, CONST char *n)
+dll_function (dll_handle h, const char *n)
 {
   return dld_get_func(n);
 }
 
 DLL_FUNC
-dll_variable (dll_handle h, CONST char *n)
+dll_variable (dll_handle h, const char *n)
 {
   return dld_get_symbol(n);
 }
 #elif defined(_WINDOWS) || defined(WIN32)
 int
-dll_init (CONST char *arg)
+dll_init (const char *arg)
 {
   return 0;
 }
 
 dll_handle
-dll_open (CONST char *fname)
+dll_open (const char *fname)
 {
   return (dll_handle)LoadLibrary (fname);
 }
@@ -236,18 +236,18 @@ dll_close (dll_handle h)
 }
 
 dll_func
-dll_function (dll_handle h, CONST char *n)
+dll_function (dll_handle h, const char *n)
 {
   return (dll_func)GetProcAddress (h,n);
 }
 
 dll_func
-dll_variable (dll_handle h, CONST char *n)
+dll_variable (dll_handle h, const char *n)
 {
   return (dll_func)GetProcAddress (h,n);
 }
 
-CONST char *
+const char *
 dll_error (dll_handle h)
 {
   return "Windows DLL Error";
@@ -255,13 +255,13 @@ dll_error (dll_handle h)
 #else
 /* Catchall if we don't know about this systems method of dynamic loading */
 int
-dll_init (CONST char *arg)
+dll_init (const char *arg)
 {
   return -1;
 }
 
 dll_handle
-dll_open (CONST char *fname)
+dll_open (const char *fname)
 {
   return NULL;
 }
@@ -273,18 +273,18 @@ dll_close (dll_handle h)
 }
 
 dll_func
-dll_function (dll_handle h, CONST char *n)
+dll_function (dll_handle h, const char *n)
 {
   return NULL;
 }
 
 dll_func
-dll_variable (dll_handle h, CONST char *n)
+dll_variable (dll_handle h, const char *n)
 {
   return NULL;
 }
 
-CONST char *
+const char *
 dll_error (dll_handle h)
 {
   return "Shared libraries not implemented on this system";
index bdc8c3d..ebb8a79 100644 (file)
@@ -38,13 +38,13 @@ typedef void * dll_handle;
 typedef void * dll_func;
 typedef void * dll_var;
 
-int dll_init(CONST char *);
+int dll_init(const char *);
 int dll_shutdown(void);
-dll_handle dll_open(CONST char *);
+dll_handle dll_open(const char *);
 int dll_close(dll_handle);
-dll_func dll_function(dll_handle,CONST char *);
-dll_var dll_variable(dll_handle,CONST char *);
-CONST char *dll_error(dll_handle);
+dll_func dll_function(dll_handle,const char *);
+dll_var dll_variable(dll_handle,const char *);
+const char *dll_error(dll_handle);
 
 #ifdef __cplusplus
 }
index 932a503..69179b7 100644 (file)
@@ -254,7 +254,7 @@ ssize_t sys_read (int, void *, size_t);
 #endif
 
 #ifdef ENCAPSULATE_WRITE
-ssize_t sys_write (int, CONST void *, size_t);
+ssize_t sys_write (int, const void *, size_t);
 #endif
 #if defined (ENCAPSULATE_WRITE) && !defined (DONT_ENCAPSULATE)
 # undef write
@@ -265,7 +265,7 @@ ssize_t sys_write (int, CONST void *, size_t);
 #endif
 
 #ifdef ENCAPSULATE_OPEN
-int sys_open (CONST char *, int, ...);
+int sys_open (const char *, int, ...);
 #endif
 #if defined (ENCAPSULATE_OPEN) && !defined (DONT_ENCAPSULATE)
 # undef open
@@ -300,7 +300,7 @@ size_t sys_fread (void *, size_t, size_t, FILE *);
 #endif
 
 #ifdef ENCAPSULATE_FWRITE
-size_t sys_fwrite (CONST void *, size_t, size_t, FILE *);
+size_t sys_fwrite (const void *, size_t, size_t, FILE *);
 #endif
 #if defined (ENCAPSULATE_FWRITE) && !defined (DONT_ENCAPSULATE)
 # undef fwrite
@@ -311,7 +311,7 @@ size_t sys_fwrite (CONST void *, size_t, size_t, FILE *);
 #endif
 
 #ifdef ENCAPSULATE_FOPEN
-FILE *sys_fopen (CONST char *, CONST char *);
+FILE *sys_fopen (const char *, const char *);
 #endif
 #if defined (ENCAPSULATE_FOPEN) && !defined (DONT_ENCAPSULATE)
 # undef fopen
@@ -336,7 +336,7 @@ int sys_fclose (FILE *);
 /* encapsulations: file-information calls */
 
 #ifdef ENCAPSULATE_ACCESS
-int sys_access (CONST char *path, int mode);
+int sys_access (const char *path, int mode);
 #endif
 #if defined (ENCAPSULATE_ACCESS) && !defined (DONT_ENCAPSULATE)
 # undef access
@@ -347,7 +347,7 @@ int sys_access (CONST char *path, int mode);
 #endif
 
 #ifdef ENCAPSULATE_EACCESS
-int sys_eaccess (CONST char *path, int mode);
+int sys_eaccess (const char *path, int mode);
 #endif
 #if defined (ENCAPSULATE_EACCESS) && !defined (DONT_ENCAPSULATE)
 # undef eaccess
@@ -358,7 +358,7 @@ int sys_eaccess (CONST char *path, int mode);
 #endif
 
 #ifdef ENCAPSULATE_LSTAT
-int sys_lstat (CONST char *path, struct stat *buf);
+int sys_lstat (const char *path, struct stat *buf);
 #endif
 #if defined (ENCAPSULATE_LSTAT) && !defined (DONT_ENCAPSULATE)
 # undef lstat
@@ -369,7 +369,7 @@ int sys_lstat (CONST char *path, struct stat *buf);
 #endif
 
 #ifdef ENCAPSULATE_READLINK
-int sys_readlink (CONST char *path, char *buf, size_t bufsiz);
+int sys_readlink (const char *path, char *buf, size_t bufsiz);
 #endif
 #if defined (ENCAPSULATE_READLINK) && !defined (DONT_ENCAPSULATE)
 # undef readlink
@@ -392,7 +392,7 @@ int sys_fstat (int fd, struct stat *buf);
 #endif
 
 #ifdef ENCAPSULATE_STAT
-int sys_stat (CONST char *path, struct stat *buf);
+int sys_stat (const char *path, struct stat *buf);
 #endif
 #if defined (ENCAPSULATE_STAT) && !defined (DONT_ENCAPSULATE)
 # undef stat
@@ -406,7 +406,7 @@ int sys_stat (CONST char *path, struct stat *buf);
 /* encapsulations: file-manipulation calls */
 
 #ifdef ENCAPSULATE_CHMOD
-int sys_chmod (CONST char *path, mode_t mode);
+int sys_chmod (const char *path, mode_t mode);
 #endif
 #if defined (ENCAPSULATE_CHMOD) && !defined (DONT_ENCAPSULATE)
 # undef chmod
@@ -417,7 +417,7 @@ int sys_chmod (CONST char *path, mode_t mode);
 #endif
 
 #ifdef ENCAPSULATE_CREAT
-int sys_creat (CONST char *path, mode_t mode);
+int sys_creat (const char *path, mode_t mode);
 #endif
 #if defined (ENCAPSULATE_CREAT) && !defined (DONT_ENCAPSULATE)
 # undef creat
@@ -428,7 +428,7 @@ int sys_creat (CONST char *path, mode_t mode);
 #endif
 
 #ifdef ENCAPSULATE_LINK
-int sys_link (CONST char *existing, CONST char *new);
+int sys_link (const char *existing, const char *new);
 #endif
 #if defined (ENCAPSULATE_LINK) && !defined (DONT_ENCAPSULATE)
 # undef link
@@ -439,7 +439,7 @@ int sys_link (CONST char *existing, CONST char *new);
 #endif
 
 #ifdef ENCAPSULATE_RENAME
-int sys_rename (CONST char *old, CONST char *new);
+int sys_rename (const char *old, const char *new);
 #endif
 #if defined (ENCAPSULATE_RENAME) && !defined (DONT_ENCAPSULATE)
 # undef rename
@@ -450,7 +450,7 @@ int sys_rename (CONST char *old, CONST char *new);
 #endif
 
 #ifdef ENCAPSULATE_SYMLINK
-int sys_symlink (CONST char *name1, CONST char *name2);
+int sys_symlink (const char *name1, const char *name2);
 #endif
 #if defined (ENCAPSULATE_SYMLINK) && !defined (DONT_ENCAPSULATE)
 # undef symlink
@@ -461,7 +461,7 @@ int sys_symlink (CONST char *name1, CONST char *name2);
 #endif
 
 #ifdef ENCAPSULATE_UNLINK
-int sys_unlink (CONST char *path);
+int sys_unlink (const char *path);
 #endif
 #if defined (ENCAPSULATE_UNLINK) && !defined (DONT_ENCAPSULATE)
 # undef unlink
@@ -472,7 +472,7 @@ int sys_unlink (CONST char *path);
 #endif
 
 #ifdef ENCAPSULATE_EXECVP
-int sys_execvp (CONST char *, char * CONST *);
+int sys_execvp (const char *, char * const *);
 #endif
 #if defined (ENCAPSULATE_EXECVP) && !defined (DONT_ENCAPSULATE)
 # undef execvp
index c2c8423..cacf07b 100644 (file)
@@ -227,7 +227,7 @@ signal_handler_t sys_do_signal (int signal_number, signal_handler_t action);
    configure incorrectly fails to find it, so s/linux.h defines
    HAVE_SYS_SIGLIST. */
 #if !defined (SYS_SIGLIST_DECLARED) && !defined (HAVE_SYS_SIGLIST)
-extern CONST char *sys_siglist[];
+extern const char *sys_siglist[];
 #endif
 
 #ifdef SIGDANGER
index d0f4ae1..159139f 100644 (file)
@@ -147,37 +147,23 @@ do {                                              \
 #define EMACS_SET_USECS(time, microseconds) ((time).tv_usec = (microseconds))
 
 #if !defined (HAVE_GETTIMEOFDAY)
-struct timezone;
-int gettimeofday (struct timeval *, struct timezone *);
+int gettimeofday (struct timeval *, void *);
 #endif
 
 /* On SVR4, the compiler may complain if given this extra BSD arg.  */
 #ifdef GETTIMEOFDAY_ONE_ARGUMENT
-# ifdef SOLARIS2
-/* Solaris (at least) omits this prototype.  IRIX5 has it and chokes if we
-   declare it here. */
-int gettimeofday (struct timeval *);
-# endif
+#define EMACS_GETTIMEOFDAY(time) gettimeofday(time)
+#else
+#define EMACS_GETTIMEOFDAY(time) gettimeofday(time,0)
+#endif
+
 /* According to the Xt sources, some NTP daemons on some systems may
    return non-normalized values. */
 #define EMACS_GET_TIME(time)                                   \
 do {                                                           \
-  gettimeofday (&(time));                                      \
-  EMACS_NORMALIZE_TIME (time);                                 \
-} while (0)
-#else /* not GETTIMEOFDAY_ONE_ARGUMENT */
-# ifdef SOLARIS2
-/* Solaris doesn't provide any prototype of this unless a bunch of
-   crap we don't define are defined. */
-int gettimeofday (struct timeval *, void *dummy);
-# endif
-#define EMACS_GET_TIME(time)                                   \
-do {                                                           \
-  struct timezone dummy;                                       \
-  gettimeofday (&(time), &dummy);                              \
+  EMACS_GETTIMEOFDAY (&(time));                                        \
   EMACS_NORMALIZE_TIME (time);                                 \
 } while (0)
-#endif /* not GETTIMEOFDAY_ONE_ARGUMENT */
 
 #define EMACS_NORMALIZE_TIME(time)                             \
 do {                                                           \
index 1c5529e..1b9fcb0 100644 (file)
@@ -94,16 +94,16 @@ xrealloc (ptr, size)
    for tgetnum, tgetflag and tgetstr to find.  */
 static char *term_entry;
 
-static CONST char *tgetst1 (CONST char *ptr, char **area);
+static const char *tgetst1 (const char *ptr, char **area);
 
 /* Search entry BP for capability CAP.
    Return a pointer to the capability (in BP) if found,
    0 if not found.  */
 
-static CONST char *
+static const char *
 find_capability (bp, cap)
-     CONST char *bp;
-     CONST char *cap;
+     const char *bp;
+     const char *cap;
 {
   for (; *bp; bp++)
     if (bp[0] == ':'
@@ -115,9 +115,9 @@ find_capability (bp, cap)
 
 int
 tgetnum (cap)
-     CONST char *cap;
+     const char *cap;
 {
-  CONST char *ptr = find_capability (term_entry, cap);
+  const char *ptr = find_capability (term_entry, cap);
   if (!ptr || ptr[-1] != '#')
     return -1;
   return atoi (ptr);
@@ -125,9 +125,9 @@ tgetnum (cap)
 
 int
 tgetflag (cap)
-     CONST char *cap;
+     const char *cap;
 {
-  CONST char *ptr = find_capability (term_entry, cap);
+  const char *ptr = find_capability (term_entry, cap);
   return 0 != ptr && ptr[-1] == ':';
 }
 
@@ -136,12 +136,12 @@ tgetflag (cap)
    to store the string.  That pointer is advanced over the space used.
    If AREA is zero, space is allocated with `malloc'.  */
 
-CONST char *
+const char *
 tgetstr (cap, area)
-     CONST char *cap;
+     const char *cap;
      char **area;
 {
-  CONST char *ptr = find_capability (term_entry, cap);
+  const char *ptr = find_capability (term_entry, cap);
   if (!ptr || (ptr[-1] != '=' && ptr[-1] != '~'))
     return 0;
   return tgetst1 (ptr, area);
@@ -162,12 +162,12 @@ static char esctab[]
    into the block that *AREA points to,
    or to newly allocated storage if AREA is 0.  */
 
-static CONST char *
+static const char *
 tgetst1 (ptr, area)
-     CONST char *ptr;
+     const char *ptr;
      char **area;
 {
-  CONST char *p;
+  const char *p;
   char *r;
   int c;
   int size;
@@ -250,7 +250,7 @@ static short speeds[] =
 
 void
 tputs (string, nlines, outfun)
-     CONST char *string;
+     const char *string;
      int nlines;
      void (*outfun) (int);
 {
@@ -269,7 +269,7 @@ tputs (string, nlines, outfun)
   if (string == (char *) 0)
     return;
 
-  while (isdigit (* (CONST unsigned char *) string))
+  while (isdigit (* (const unsigned char *) string))
     {
       padcount += *string++ - '0';
       padcount *= 10;
@@ -331,18 +331,18 @@ static int name_match ();
 int
 tgetent (bp, name)
      char *bp;
-     CONST char *name;
+     const char *name;
 {
   char *tem;
   int fd;
   struct buffer buf;
   char *bp1;
   char *bp2;
-  CONST char *term;
+  const char *term;
   int malloc_size = 0;
   int c;
   char *tcenv;                 /* TERMCAP value, if it contais :tc=.  */
-  CONST char *indirect = 0;    /* Terminal type in :tc= in TERMCAP value.  */
+  const char *indirect = 0;    /* Terminal type in :tc= in TERMCAP value.  */
 
   tem = getenv ("TERMCAP");
   if (tem && *tem == 0) tem = 0;
@@ -637,7 +637,7 @@ main (argc, argv)
 }
 
 tprint (cap)
-     CONST char *cap;
+     const char *cap;
 {
   char *x = tgetstr (cap, 0);
   char *y;
index bc49f8c..eaf44b9 100644 (file)
@@ -65,14 +65,14 @@ char *UP, *BC, PC;
 extern void *xmalloc (int size);
 
 #if 0 /* If this isn't declared somewhere, too bad */
-extern char * tparm (CONST char *string, int arg1, int arg2, int arg3,
+extern char * tparm (const char *string, int arg1, int arg2, int arg3,
                      int arg4, int arg5, int arg6, int arg7, int arg8,
                      int arg9);
 #endif
 /* XEmacs: renamed this function because just tparam() conflicts with
    ncurses (We don't use this function anyway!) */
 char *
-emacs_tparam (CONST char *string, char *outstring, int len, int arg1,
+emacs_tparam (const char *string, char *outstring, int len, int arg1,
              int arg2, int arg3, int arg4, int arg5, int arg6, int arg7,
              int arg8, int arg9)
 {
index 20a4a0a..c3359e0 100644 (file)
@@ -771,7 +771,7 @@ New arguments can be added to a message with add-tooltalk-message-arg.
     }
   else if (EQ (attribute, Qtt_arg_val))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_message_arg_val_set (m, n, value_ext);
@@ -796,7 +796,7 @@ New arguments can be added to a message with add-tooltalk-message-arg.
 
   if (fun_str)
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       (*fun_str) (m, value_ext);
@@ -912,14 +912,14 @@ embedded nulls (use 'arg_bval).
   if (!VALID_TOOLTALK_MESSAGEP (m))
     return Qnil;
   {
-    CONST char *vtype_ext;
+    const char *vtype_ext;
 
     TO_EXTERNAL_FORMAT (LISP_STRING, vtype, C_STRING_ALLOCA, vtype_ext, Qnative);
     if (NILP (value))
       tt_message_arg_add (m, n, vtype_ext, NULL);
     else if (STRINGP (value))
       {
-       CONST char *value_ext;
+       const char *value_ext;
        TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
        tt_message_arg_add (m, n, vtype_ext, value_ext);
       }
@@ -1023,28 +1023,28 @@ less the "tooltalk_pattern_" prefix and the "_add" ...
     }
   else if (EQ (attribute, Qtt_file))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_pattern_file_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_object))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_pattern_object_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_op))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_pattern_op_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_otype))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_pattern_otype_add (p, value_ext);
@@ -1056,21 +1056,21 @@ less the "tooltalk_pattern_" prefix and the "_add" ...
     }
   else if (EQ (attribute, Qtt_sender))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_pattern_sender_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_sender_ptype))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_pattern_sender_ptype_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_session))
     {
-      CONST char *value_ext;
+      const char *value_ext;
       CHECK_STRING (value);
       TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
       tt_pattern_session_add (p, value_ext);
@@ -1111,14 +1111,14 @@ is added.  At present there's no way to add a binary data argument.
     return Qnil;
 
   {
-    CONST char *vtype_ext;
+    const char *vtype_ext;
 
     TO_EXTERNAL_FORMAT (LISP_STRING, vtype, C_STRING_ALLOCA, vtype_ext, Qnative);
     if (NILP (value))
       tt_pattern_arg_add (p, n, vtype_ext, NULL);
     else if (STRINGP (value))
       {
-       CONST char *value_ext;
+       const char *value_ext;
        TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
        tt_pattern_arg_add (p, n, vtype_ext, value_ext);
       }
index c432ed4..c4b6bfd 100644 (file)
@@ -57,16 +57,16 @@ extern char *realloc ();
 
    The fourth and following args to tparam serve as the parameter values.  */
 
-static char *tparam1 (CONST char *string, char *outstring, int len,
-                      CONST char *up, CONST char *left, 
+static char *tparam1 (const char *string, char *outstring, int len,
+                      const char *up, const char *left, 
                       int *argp);
 
 /* XEmacs: renamed this function because just tparam() conflicts with
    ncurses */
-char *emacs_tparam (CONST char *string, char *outstring, int len, int arg0,
+char *emacs_tparam (const char *string, char *outstring, int len, int arg0,
                    int arg1, int arg2, int arg3);
 char *
-emacs_tparam (CONST char *string, char *outstring, int len, int arg0,
+emacs_tparam (const char *string, char *outstring, int len, int arg0,
              int arg1, int arg2, int arg3)
 {
   int arg[4];
@@ -77,14 +77,14 @@ emacs_tparam (CONST char *string, char *outstring, int len, int arg0,
   return tparam1 (string, outstring, len, 0, 0, arg);
 }
 
-CONST char *BC;
-CONST char *UP;
+const char *BC;
+const char *UP;
 
 static char tgoto_buf[50];
 
-char *tgoto (CONST char *cm, int hpos, int vpos);
+char *tgoto (const char *cm, int hpos, int vpos);
 char *
-tgoto (CONST char *cm, int hpos, int vpos)
+tgoto (const char *cm, int hpos, int vpos)
 {
   int args[2];
   if (!cm)
@@ -95,11 +95,11 @@ tgoto (CONST char *cm, int hpos, int vpos)
 }
 
 static char *
-tparam1 (CONST char *string, char *outstring, int len, CONST char *up,
-        CONST char *left, int *argp)
+tparam1 (const char *string, char *outstring, int len, const char *up,
+        const char *left, int *argp)
 {
   int c;
-  CONST char *p = string;
+  const char *p = string;
   char *op = outstring;
   char *outend;
   int outlen = 0;
index 74f131e..7b3db7c 100644 (file)
@@ -39,7 +39,6 @@ unexec (char *, char *, void *, void *,       void *)
 }
 #else
 
-#undef CONST
 #ifndef MAX_PATH
 #define MAX_PATH 260
 #endif
index 28ed2b4..ae2f945 100644 (file)
@@ -382,7 +382,7 @@ report_error (const char *file, int fd)
 static void
 report_error_1 (fd, msg, a1, a2)
      int fd;
-     CONST char *msg;
+     const char *msg;
      int a1, a2;
 {
   close (fd);
index 733a0f6..d91ae33 100644 (file)
@@ -413,7 +413,7 @@ Filesz      Memsz       Flags       Align
 #define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
 #else
 #include <config.h>
-extern void fatal (CONST char *, ...);
+extern void fatal (const char *, ...);
 #endif
 
 #include <sys/types.h>
index 0a97488..790d549 100644 (file)
@@ -71,7 +71,7 @@ struct translation_struct
 
 /********************** Function Prototypes/Declarations ***********/
 
-static void unexec_error (CONST char *m, int use_errno, ...);
+static void unexec_error (const char *m, int use_errno, ...);
 static int unexec_open (char *filename, int flag, int mode);
 static caddr_t unexec_mmap (int fd, size_t len, int prot, int flags);
 static long unexec_seek (int fd, long position);
@@ -104,9 +104,9 @@ static unsigned long sbrk_of_0_at_unexec;
 /*******************************************************************/
 
 static void
-unexec_error (CONST char *fmt, int use_errno, ...)
+unexec_error (const char *fmt, int use_errno, ...)
 {
-  CONST char *err_msg = SYS_ERR;
+  const char *err_msg = SYS_ERR;
   va_list args;
 
   fprintf (stderr, "unexec - ");
index 9bca2a9..4240ff1 100644 (file)
@@ -72,7 +72,7 @@ extern char *strerror (int);
 
 /********************** Function Prototypes/Declarations ***********/
 
-static void unexec_error (CONST char *fmt, int use_errno, ...);
+static void unexec_error (const char *fmt, int use_errno, ...);
 static int unexec_open (char *filename, int flag, int mode);
 static long unexec_seek (int fd, long position);
 static void unexec_read (int fd, long position, char *buf, int bytes);
@@ -96,9 +96,9 @@ static unsigned long sbrk_of_0_at_unexec;
 /*******************************************************************/
 
 static void
-unexec_error (CONST char *fmt, int use_errno, ...)
+unexec_error (const char *fmt, int use_errno, ...)
 {
-  CONST char *err_msg = SYS_ERR;
+  const char *err_msg = SYS_ERR;
   va_list args;
 
   fprintf (stderr, "unexec - ");
index 38fac1f..feefef8 100644 (file)
@@ -278,7 +278,7 @@ unexec (char *new_name, char *old_name, void *start_data, void *start_bss,
 
 
 int
-open_output_file (file_data *p_file, CONST char *filename, unsigned long size)
+open_output_file (file_data *p_file, const char *filename, unsigned long size)
 {
   HANDLE file;
   HANDLE file_mapping;
index 0edd44d..d7f825c 100644 (file)
@@ -80,7 +80,7 @@ struct translation_struct
 
 /********************** Function Prototypes/Declarations ***********/
 
-static void unexec_error (CONST char *m, int use_errno, ...);
+static void unexec_error (const char *m, int use_errno, ...);
 static int unexec_open (char *filename, int flag, int mode);
 static caddr_t unexec_mmap (int fd, size_t len, int prot, int flags);
 static long unexec_seek (int fd, long position);
@@ -116,9 +116,9 @@ static unsigned long sbrk_of_0_at_unexec;
 /*******************************************************************/
 
 static void
-unexec_error (CONST char *fmt, int use_errno, ...)
+unexec_error (const char *fmt, int use_errno, ...)
 {
-  CONST char *err_msg = SYS_ERR;
+  const char *err_msg = SYS_ERR;
   va_list args;
 
   fprintf (stderr, "unexec - ");
index 3294f12..404534e 100644 (file)
@@ -45,7 +45,7 @@ static int warnlevel;
 
 /* Function to call to issue a warning;
    0 means don't issue them.  */
-static void (*warn_function) (CONST char *);
+static void (*warn_function) (const char *);
 
 /* Get more memory space, complaining if we're near the end. */
 
@@ -119,7 +119,7 @@ check_memory_limits (void)
    also declare where the end of pure storage is. */
 
 void
-memory_warnings (void *start, void (*warnfun) (CONST char *))
+memory_warnings (void *start, void (*warnfun) (const char *))
 {
   extern void (* __after_morecore_hook) (void);        /* From gmalloc.c */
 
index 3a86d72..7a6eb7a 100644 (file)
@@ -733,7 +733,7 @@ window_truncation_on (struct window *w)
 }
 
 DEFUN ("window-truncated-p", Fwindow_truncated_p, 0, 1, 0, /*
-Returns Non-Nil iff the window is truncated.
+Returns non-nil if text in the window is truncated.
 */
        (window))
 {
@@ -1623,6 +1623,28 @@ slower with this flag set.
     }
 }
 
+DEFUN ("window-last-line-visible-height", Fwindow_last_line_visible_height, 0, 1, 0, /*
+Return pixel height of visible part of last window line if it is clipped.
+If the last line is not clipped, return nil.
+*/
+       (window))
+{
+  struct window *w = decode_window (window);
+  display_line_dynarr *dla = window_display_lines (w, CURRENT_DISP);
+  int num_lines = Dynarr_length (dla);
+  struct display_line *dl;
+
+  /* No lines - no clipped lines */
+  if (num_lines == 0 || (num_lines == 1 && Dynarr_atp (dla, 0)->modeline))
+    return Qnil;
+
+  dl = Dynarr_atp (dla, num_lines - 1);
+  if (dl->clip == 0)
+    return Qnil;
+
+  return make_int (dl->ascent + dl->descent - dl->clip);
+}
+
 DEFUN ("set-window-point", Fset_window_point, 2, 2, 0, /*
 Make point value in WINDOW be at position POS in WINDOW's buffer.
 */
@@ -4826,9 +4848,9 @@ sizeof_window_config_for_n_windows (int n)
 }
 
 static size_t
-sizeof_window_config (CONST void *h)
+sizeof_window_config (const void *h)
 {
-  CONST struct window_config *c = (CONST struct window_config *) h;
+  const struct window_config *c = (const struct window_config *) h;
   return sizeof_window_config_for_n_windows (c->saved_windows_count);
 }
 
@@ -5808,6 +5830,7 @@ syms_of_window (void)
   DEFSUBR (Fwindow_point);
   DEFSUBR (Fwindow_start);
   DEFSUBR (Fwindow_end);
+  DEFSUBR (Fwindow_last_line_visible_height);
   DEFSUBR (Fset_window_point);
   DEFSUBR (Fset_window_start);
   DEFSUBR (Fwindow_dedicated_p);
index 956b809..7a21c5c 100644 (file)
@@ -93,9 +93,9 @@ struct gc_cache {
 
 #ifdef GCCACHE_HASH
 static unsigned long
-gc_cache_hash (CONST void *arg)
+gc_cache_hash (const void *arg)
 {
-  CONST struct gcv_and_mask *gcvm = (CONST struct gcv_and_mask *) arg;
+  const struct gcv_and_mask *gcvm = (const struct gcv_and_mask *) arg;
   unsigned long *longs = (unsigned long *) &gcvm->gcv;
   unsigned long hash = gcvm->mask;
   int i;
@@ -112,7 +112,7 @@ gc_cache_hash (CONST void *arg)
 #endif /* GCCACHE_HASH */
 
 static int
-gc_cache_eql (CONST void *arg1, CONST void *arg2)
+gc_cache_eql (const void *arg1, const void *arg2)
 {
   /* See comment in gc_cache_hash */
   return !memcmp (arg1, arg2, sizeof (struct gcv_and_mask));
@@ -166,7 +166,7 @@ gc_cache_lookup (struct gc_cache *cache, XGCValues *gcv, unsigned long mask)
 
 #ifdef GCCACHE_HASH
 
-  if (gethash (&gcvm, cache->table, (CONST void **) &cell))
+  if (gethash (&gcvm, cache->table, (const void **) &cell))
 
 #else /* !GCCACHE_HASH */
 
index f0cbba6..cc4bb0a 100644 (file)
@@ -22,14 +22,6 @@ Boston, MA 02111-1307, USA.  */
 #ifndef INCLUDED_xintrinsic_h_
 #define INCLUDED_xintrinsic_h_
 
-#undef CONST                    /* X11R4 header thinks it can define CONST */
-
 #include <X11/Intrinsic.h>
 
-#ifdef CONST_IS_LOSING
-# define CONST
-#else
-# define CONST const
-#endif
-
 #endif /* INCLUDED_xintrinsic_h_ */
index 2f1caf6..86836de 100644 (file)
@@ -22,16 +22,8 @@ Boston, MA 02111-1307, USA.  */
 #ifndef INCLUDED_xintrinsicp_h_
 #define INCLUDED_xintrinsicp_h_
 
-#undef CONST                    /* X11R4 header thinks it can define CONST */
-
 #include <X11/Intrinsic.h>
 #include <X11/IntrinsicP.h>
 #include <X11/ObjectP.h>     /* apparently some IntrinsicP.h don't have this */
 
-#ifdef CONST_IS_LOSING
-# define CONST
-#else
-# define CONST const
-#endif
-
 #endif /* INCLUDED_xintrinsicp_h_ */
index 1f1261a..afe04be 100644 (file)
--- a/src/xmu.c
+++ b/src/xmu.c
 #include <ctype.h>
 
 
-int XmuCursorNameToIndex (CONST char *name)
+int XmuCursorNameToIndex (const char *name)
 {
-    static CONST struct _CursorName {
-       CONST char      *name;
+    static const struct _CursorName {
+       const char      *name;
        unsigned int    shape;
     } cursor_names[] = {
                        {"x_cursor",            XC_X_cursor},
@@ -137,7 +137,7 @@ int XmuCursorNameToIndex (CONST char *name)
                        {"watch",               XC_watch},
                        {"xterm",               XC_xterm},
     };
-    CONST struct _CursorName *table;
+    const struct _CursorName *table;
     int i;
     char tmp[40];
 
@@ -368,7 +368,7 @@ int XmuReadBitmapData (
 }
 
 
-int XmuReadBitmapDataFromFile (CONST char *filename,
+int XmuReadBitmapDataFromFile (const char *filename,
                               /* Remaining args are RETURNED */
                               unsigned int *width,
                               unsigned int *height,
@@ -530,7 +530,7 @@ int XmuSimpleErrorHandler (Display *dpy, XErrorEvent *errorp)
     return XmuPrintDefaultErrorMessage (dpy, errorp, stderr);
 }
 
-void XmuCopyISOLatin1Lowered(char *dst, CONST char *src)
+void XmuCopyISOLatin1Lowered(char *dst, const char *src)
 {
     unsigned char *dest   = (unsigned char *) dst;
     unsigned char *source = (unsigned char *) src;
index bcdfc0d..d6cebe4 100644 (file)
--- a/src/xmu.h
+++ b/src/xmu.h
 
 #else
 
-int XmuCursorNameToIndex (CONST char *name);
-int XmuReadBitmapDataFromFile (CONST char *filename, unsigned int *width,
+int XmuCursorNameToIndex (const char *name);
+int XmuReadBitmapDataFromFile (const char *filename, unsigned int *width,
                                unsigned int *height, unsigned char **datap,
                                int *x_hot, int *y_hot);
 int XmuPrintDefaultErrorMessage (Display *dpy, XErrorEvent *event, FILE *fp);
-void XmuCopyISOLatin1Lowered (char *, CONST char *);
+void XmuCopyISOLatin1Lowered (char *, const char *);
 
 #define Max(x, y)       (((x) > (y)) ? (x) : (y))
 #define Min(x, y)       (((x) < (y)) ? (x) : (y))
index 01e590a..e3f98c9 100644 (file)
@@ -1,3 +1,11 @@
+2000-02-16  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.29 is released.
+
+2000-02-13  Martin Buchholz  <martin@xemacs.org>
+
+       * automated/lisp-tests.el: Add subseq tests.
+
 2000-02-07  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.28 is released.
index fee7225..264ff6b 100644 (file)
@@ -174,31 +174,24 @@ oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX
 (defconst bt-nonbase64-chars (set-difference (mapcar #'identity bt-allchars)
                                             bt-base64-chars))
 
-(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))
-            (left (substring encoded 0 middlepos))
-            (right (substring encoded middlepos)))
-       ;; Whitespace at the beginning, end, and middle.
-       (let ((mangled (concat bt-nonbase64-chars left bt-nonbase64-chars right
-                              bt-nonbase64-chars)))
-         (Assert (equal (bt-base64-decode-string mangled) raw)))
-
-       ;; Whitespace between every char.
-       (let ((mangled (concat bt-nonbase64-chars
-                              ;; ENCODED with bt-nonbase64-chars
-                              ;; between every character.
-                              (mapconcat #'char-to-string encoded
-                                         (apply #'string bt-nonbase64-chars))
-                              bt-nonbase64-chars)))
-         (Assert (equal (bt-base64-decode-string mangled) raw))))))
-  )
+(loop for (raw encoded) in bt-test-strings do
+  (unless (equal raw "")
+    (let* ((middlepos (/ (1+ (length encoded)) 2))
+          (left (substring encoded 0 middlepos))
+          (right (substring encoded middlepos)))
+      ;; Whitespace at the beginning, end, and middle.
+      (let ((mangled (concat bt-nonbase64-chars left bt-nonbase64-chars right
+                            bt-nonbase64-chars)))
+       (Assert (equal (bt-base64-decode-string mangled) raw)))
+
+      ;; Whitespace between every char.
+      (let ((mangled (concat bt-nonbase64-chars
+                            ;; ENCODED with bt-nonbase64-chars
+                            ;; between every character.
+                            (mapconcat #'char-to-string encoded
+                                       (apply #'string bt-nonbase64-chars))
+                            bt-nonbase64-chars)))
+       (Assert (equal (bt-base64-decode-string mangled) raw))))))
 
 ;;-----------------------------------------------------
 ;; Mixed...
index 5893d17..9bf5ebb 100644 (file)
   (Assert (eq 'baz (getf '(bar baz) 'bar)))
   (Assert (eq 'baz (getf (symbol-plist sym) 'bar)))
   (Assert (eq 2 (getf '(1 2) 1)))
+  (Assert (eq 4 (put sym 3 4)))
+  (Assert (eq 4 (get sym 3)))
+  (Assert (eq t (remprop sym 3)))
+  (Assert (eq nil (remprop sym 3)))
+  (Assert (eq 5 (get sym 3 5)))
   )
+
+(loop for obj in
+  (list (make-symbol "test-symbol")
+       "test-string"
+       (make-extent nil nil nil)
+       (make-face 'test-face))
+  do
+  (Assert (eq 2 (get obj ?1 2)))
+  (Assert (eq 4 (put obj ?3 4)))
+  (Assert (eq 4 (get obj ?3)))
+  (when (or (stringp obj) (symbolp obj))
+    (Assert (equal '(?3 4) (object-plist obj))))
+  (Assert (eq t (remprop obj ?3)))
+  (when (or (stringp obj) (symbolp obj))
+    (Assert (eq '() (object-plist obj))))
+  (Assert (eq nil (remprop obj ?3)))
+  (when (or (stringp obj) (symbolp obj))
+    (Assert (eq '() (object-plist obj))))
+  (Assert (eq 5 (get obj ?3 5)))
+  )
+
+(Check-Error-Message
+ error "Object type has no properties"
+ (get 2 'property))
+
+(Check-Error-Message
+ error "Object type has no settable properties"
+ (put (current-buffer) 'property 'value))
+
+(Check-Error-Message
+ error "Object type has no removable properties"
+ (remprop ?3 'property))
+
+(Check-Error-Message
+ error "Object type has no properties"
+ (object-plist (symbol-function 'car)))
+
+(Check-Error-Message
+ error "Can't remove property from object"
+ (remprop (make-extent nil nil nil) 'detachable))
+
+;;-----------------------------------------------------
+;; Test subseq
+;;-----------------------------------------------------
+(Assert (equal (subseq nil 0) nil))
+(Assert (equal (subseq [1 2 3] 0) [1 2 3]))
+(Assert (equal (subseq [1 2 3] 1 -1) [2]))
+(Assert (equal (subseq "123" 0) "123"))
+(Assert (equal (subseq "1234" -3 -1) "23"))
+(Assert (equal (subseq #*0011 0) #*0011))
+(Assert (equal (subseq #*0011 -3 3) #*01))
+(Assert (equal (subseq '(1 2 3) 0) '(1 2 3)))
+(Assert (equal (subseq '(1 2 3 4) -3 nil) '(2 3 4)))
+
+(Check-Error 'wrong-type-argument (subseq 3 2))
+(Check-Error 'args-out-of-range (subseq [1 2 3] -42))
+(Check-Error 'args-out-of-range (subseq [1 2 3] 0 42))
index 763b4b9..9bdf523 100644 (file)
@@ -2,8 +2,8 @@
 emacs_is_beta=t
 emacs_major_version=21
 emacs_minor_version=2
-emacs_beta_version=28
-xemacs_codename="Hermes"
+emacs_beta_version=29
+xemacs_codename="Hestia"
 infodock_major_version=4
 infodock_minor_version=0
 infodock_build_version=8