From: tomo Date: Tue, 2 May 2000 12:33:58 +0000 (+0000) Subject: XEmacs 21.2.29 "Hestia". X-Git-Tag: r21-2-29~1 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e447015251ce6dcde843cbed10d9033d5538622;p=chise%2Fxemacs-chise.git.1 XEmacs 21.2.29 "Hestia". --- diff --git a/.cvsignore b/.cvsignore index 4c21e36..7a7fc50 100644 --- a/.cvsignore +++ b/.cvsignore @@ -10,3 +10,4 @@ so_locations xemacs-packages mule-packages site-packages +gmon.out diff --git a/CHANGES-beta b/CHANGES-beta index 18edb09..14854dc 100644 --- a/CHANGES-beta +++ b/CHANGES-beta @@ -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 diff --git a/ChangeLog b/ChangeLog index 1bb1ff2..b79bbea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,48 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-16 Martin Buchholz + + * 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 + + * configure.in: Fix detection of XPM on systems without X11. + +2000-02-11 Martin Buchholz + + * 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 + + * aclocal.m4: Support dlls on aix[34]. + +2000-02-09 Martin Buchholz + + * .cvsignore: Ignore gmon.out + +2000-02-08 Martin Buchholz + + * configure.in: Sync Berkeley db autodetection with src/database.c + +2000-02-07 Martin Buchholz + + * configure.in: check for XConvertCase. + 2000-02-07 Martin Buchholz * XEmacs 21.2.28 is released. 2000-01-27 URA Hiroshi + * configure.in: added getaddrinfo and getnameinfo to AC_FUNC. 2000-01-26 Martin Buchholz diff --git a/aclocal.m4 b/aclocal.m4 index e1a8e77..721d768 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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*) diff --git a/configure b/configure index 09b367e..e526103 100755 --- 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 <&6 -echo "configure:2330: checking for GNU libc" >&5 +echo "configure:2331: checking for GNU libc" >&5 cat > conftest.$ac_ext < 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 <&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 <&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 <&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 <&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 <&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 <&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 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 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 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 < #include @@ -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 < #include @@ -3428,7 +3484,7 @@ cat > conftest.$ac_ext < 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 @@ -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 @@ -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 < #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 < #include @@ -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 < #include @@ -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 < @@ -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 < #include @@ -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 < #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 < #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 @@ -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 < #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 < #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 < #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 < @@ -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 < #include @@ -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 < #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 < #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 <&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 < #include @@ -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 < #include @@ -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 <&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 < 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 < 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 < 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 < 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 < 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 <&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 <&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 < 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 <&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 <&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 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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 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 <&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 <&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 <&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 <&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 < 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 < +/* 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 <&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 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 <&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 <&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 <&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 < 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 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 <&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 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 <&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 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 <&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 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 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 <&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 <&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 <&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 <&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 <&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 < 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 <&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 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 <&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 <&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 <&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 <&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 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 <&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 <&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 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 <&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 < 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 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 <&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 <&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 <&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 <&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 <&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 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 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 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 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 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 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 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 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 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 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 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 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 <&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 < #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 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 <&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 <&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 <&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 <&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 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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 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 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 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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 < 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 < 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 < #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 < conftest.$ac_ext <&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 @@ -9958,19 +10070,19 @@ fi 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 <&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 @@ -10020,17 +10132,17 @@ fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:10024: checking for working alloca.h" >&5 +echo "configure:10136: checking for working alloca.h" >&5 cat > conftest.$ac_ext < 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 <&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 <&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 <&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 <&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 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 < @@ -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 @@ -10418,10 +10530,10 @@ fi 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 < 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 @@ -10459,10 +10571,10 @@ fi 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 <&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 @@ -10513,10 +10625,10 @@ fi 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 <&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 @@ -10598,10 +10710,10 @@ fi 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 < #include @@ -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 < +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 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 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* @@ -10760,10 +10902,10 @@ fi 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 <&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 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 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 < @@ -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 < @@ -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 @@ -10933,10 +11075,10 @@ fi 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 <&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 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 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* @@ -11045,15 +11187,15 @@ fi 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 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 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* @@ -11121,15 +11263,15 @@ fi 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 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* @@ -11159,22 +11301,22 @@ fi 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 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* @@ -11222,12 +11364,12 @@ fi 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 <&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 @@ -11269,12 +11411,12 @@ fi 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 <&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 @@ -11323,15 +11465,15 @@ fi 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 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* @@ -11385,15 +11527,15 @@ fi 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 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 <&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 @@ -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. @@ -11526,10 +11668,10 @@ fi 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 <&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 <&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 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* @@ -11698,15 +11840,15 @@ fi 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 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* @@ -11736,15 +11878,15 @@ fi 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 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* @@ -11779,12 +11921,12 @@ fi 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 <&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 @@ -11826,12 +11968,12 @@ fi 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 <&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 <&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 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* @@ -11955,12 +12097,12 @@ fi } 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 <&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 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* @@ -12064,12 +12206,12 @@ fi 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 <&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 @@ -12108,10 +12250,10 @@ fi 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 <&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 <&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 < +#if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1) #ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include @@ -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 < #if DB_VERSION_MAJOR > 1 @@ -12268,10 +12414,10 @@ fi 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 <&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 <&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 @@ -12393,12 +12539,12 @@ fi 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 <&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 @@ -12464,19 +12610,19 @@ fi 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 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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 &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 <&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 <&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 diff --git a/configure.in b/configure.in index 97863cc..d3cb65d 100644 --- a/configure.in +++ b/configure.in @@ -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 ],[ @@ -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 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 + AC_TRY_RUN([#define XPM_NUMBERS +#include 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 ],[ +#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 +#if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1) +#ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include 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) diff --git a/etc/OONEWS b/etc/OONEWS index 57b3174..5ed4498 100644 --- a/etc/OONEWS +++ b/etc/OONEWS @@ -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 diff --git a/info/cl.info b/info/cl.info index 555ceba..6cef740 100644 --- a/info/cl.info +++ b/info/cl.info @@ -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  Tag Table: (Indirect) @@ -75,32 +75,32 @@ Node: Multiple Values111218 Node: Macros113111 Node: Declarations116329 Node: Symbols124821 -Node: Property Lists125113 -Node: Creating Symbols127862 -Node: Numbers129940 -Node: Predicates on Numbers130420 -Node: Numerical Functions131449 -Node: Random Numbers135676 -Node: Implementation Parameters138385 -Node: Sequences141957 -Node: Sequence Basics142630 -Node: Mapping over Sequences146208 -Node: Sequence Functions152062 -Node: Searching Sequences158237 -Node: Sorting Sequences161274 -Node: Lists163822 -Node: List Functions164247 -Node: Substitution of Expressions168510 -Node: Lists as Sets170396 -Node: Association Lists174458 -Node: Hash Tables176161 -Node: Structures176381 -Node: Assertions191164 -Node: Efficiency Concerns194107 -Node: Common Lisp Compatibility200434 -Node: Old CL Compatibility203590 -Node: Porting Common Lisp207973 -Node: Function Index218986 -Node: Variable Index230192 +Node: Property Lists125102 +Node: Creating Symbols127293 +Node: Numbers129371 +Node: Predicates on Numbers129851 +Node: Numerical Functions130880 +Node: Random Numbers135107 +Node: Implementation Parameters137816 +Node: Sequences141388 +Node: Sequence Basics142061 +Node: Mapping over Sequences145639 +Node: Sequence Functions151493 +Node: Searching Sequences157668 +Node: Sorting Sequences160705 +Node: Lists163253 +Node: List Functions163678 +Node: Substitution of Expressions167941 +Node: Lists as Sets169827 +Node: Association Lists173889 +Node: Hash Tables175592 +Node: Structures175812 +Node: Assertions190595 +Node: Efficiency Concerns193538 +Node: Common Lisp Compatibility199865 +Node: Old CL Compatibility203021 +Node: Porting Common Lisp207404 +Node: Function Index218417 +Node: Variable Index229566  End Tag Table diff --git a/info/emodules.info b/info/emodules.info index 3ec19ca..97f2f4c 100644 --- a/info/emodules.info +++ b/info/emodules.info @@ -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. diff --git a/info/internals.info b/info/internals.info index 50efcfe..4c211f0 100644 --- a/info/internals.info +++ b/info/internals.info @@ -40,140 +40,152 @@ Foundation instead of in the original English.  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  Tag Table: (Indirect) Node: Top1776 -Node: A History of Emacs6358 -Node: Through Version 187883 -Node: Lucid Emacs11304 -Node: GNU Emacs 1914322 -Node: GNU Emacs 2016505 -Node: XEmacs16932 -Node: XEmacs From the Outside20111 -Node: The Lisp Language21878 -Node: XEmacs From the Perspective of Building31420 -Node: XEmacs From the Inside37545 -Node: The XEmacs Object System (Abstractly Speaking)45928 -Node: How Lisp Objects Are Represented in C60014 -Node: Rules When Writing New C Code68572 -Node: General Coding Rules69376 -Node: Writing Lisp Primitives75113 -Node: Adding Global Lisp Variables86282 -Node: Coding for Mule89920 -Node: Character-Related Data Types90899 -Node: Working With Character and Byte Positions93572 -Node: Conversion to and from External Data97322 -Node: General Guidelines for Writing Mule-Aware Code102203 -Node: An Example of Mule-Aware Code104234 -Node: Techniques for XEmacs Developers106221 -Node: A Summary of the Various XEmacs Modules109988 -Node: Low-Level Modules110808 -Node: Basic Lisp Modules118330 -Node: Modules for Standard Editing Operations126651 -Node: Editor-Level Control Flow Modules132539 -Node: Modules for the Basic Displayable Lisp Objects135985 -Node: Modules for other Display-Related Lisp Objects138507 -Node: Modules for the Redisplay Mechanism139584 -Node: Modules for Interfacing with the File System141935 -Node: Modules for Other Aspects of the Lisp Interpreter and Object System145633 -Node: Modules for Interfacing with the Operating System151086 -Node: Modules for Interfacing with X Windows158747 -Node: Modules for Internationalization162183 -Node: Allocation of Objects in XEmacs Lisp164820 -Node: Introduction to Allocation165374 -Node: Garbage Collection170836 -Node: GCPROing173789 -Node: Garbage Collection - Step by Step180599 -Node: Invocation180991 -Node: garbage_collect_1183963 -Node: mark_object193443 -Node: gc_sweep195255 -Node: sweep_lcrecords_1200318 -Node: compact_string_chars201313 -Node: sweep_strings203493 -Node: sweep_bit_vectors_1204458 -Node: Integers and Characters205134 -Node: Allocation from Frob Blocks205886 -Node: lrecords207490 -Node: Low-level allocation219952 -Node: Pure Space224120 -Node: Cons224295 -Node: Vector225011 -Node: Bit Vector225588 -Node: Symbol226081 -Node: Marker226650 -Node: String227205 -Node: Compiled Function230818 -Node: Events and the Event Loop230987 -Node: Introduction to Events231466 -Node: Main Loop233381 -Node: Specifics of the Event Gathering Mechanism236956 -Node: Specifics About the Emacs Event249409 -Node: The Event Stream Callback Routines249664 -Node: Other Event Loop Functions249909 -Node: Converting Events251049 -Node: Dispatching Events; The Command Builder251658 -Node: Evaluation; Stack Frames; Bindings251893 -Node: Evaluation252235 -Node: Dynamic Binding; The specbinding Stack; Unwind-Protects258775 -Node: Simple Special Forms261159 -Node: Catch and Throw261941 -Node: Symbols and Variables264516 -Node: Introduction to Symbols264780 -Node: Obarrays265818 -Node: Symbol Values269351 -Node: Buffers and Textual Representation271639 -Node: Introduction to Buffers272297 -Node: The Text in a Buffer274960 -Node: Buffer Lists282110 -Node: Markers and Extents284061 -Node: Bufbytes and Emchars286326 -Node: The Buffer Object286541 -Node: MULE Character Sets and Encodings290021 -Node: Character Sets291083 -Node: Encodings294526 -Node: Japanese EUC (Extended Unix Code)295593 -Node: JIS7296407 -Node: Internal Mule Encodings297757 -Node: Internal String Encoding299587 -Node: Internal Character Encoding301700 -Node: CCL303424 -Node: The Lisp Reader and Compiler310176 -Node: Lstreams310389 -Node: Creating an Lstream311420 -Node: Lstream Types312630 -Node: Lstream Functions312882 -Node: Lstream Methods316448 -Node: Consoles; Devices; Frames; Windows319590 -Node: Introduction to Consoles; Devices; Frames; Windows319905 -Node: Point322397 -Node: Window Hierarchy323676 -Node: The Window Object328124 -Node: The Redisplay Mechanism331561 -Node: Critical Redisplay Sections332353 -Node: Line Start Cache333308 -Node: Redisplay Piece by Piece336544 -Node: Extents338580 -Node: Introduction to Extents339118 -Node: Extent Ordering340244 -Node: Format of the Extent Info341485 -Node: Zero-Length Extents343372 -Node: Mathematics of Extent Ordering344770 -Node: Extent Fragments349527 -Node: Faces350613 -Node: Glyphs350729 -Node: Specifiers353747 -Node: Menus353876 -Node: Subprocesses356134 -Node: Interface to X Windows358110 -Node: Index358281 +Node: A History of Emacs7010 +Node: Through Version 188535 +Node: Lucid Emacs11983 +Node: GNU Emacs 1915001 +Node: GNU Emacs 2017184 +Node: XEmacs17611 +Node: XEmacs From the Outside20790 +Node: The Lisp Language22557 +Node: XEmacs From the Perspective of Building32099 +Node: XEmacs From the Inside38224 +Node: The XEmacs Object System (Abstractly Speaking)46607 +Node: How Lisp Objects Are Represented in C60693 +Node: Rules When Writing New C Code69251 +Node: General Coding Rules70055 +Node: Writing Lisp Primitives75830 +Node: Adding Global Lisp Variables86999 +Node: Coding for Mule90637 +Node: Character-Related Data Types91616 +Node: Working With Character and Byte Positions94313 +Node: Conversion to and from External Data98063 +Node: General Guidelines for Writing Mule-Aware Code102944 +Node: An Example of Mule-Aware Code104975 +Node: Techniques for XEmacs Developers106962 +Node: A Summary of the Various XEmacs Modules110729 +Node: Low-Level Modules111549 +Node: Basic Lisp Modules119119 +Node: Modules for Standard Editing Operations127440 +Node: Editor-Level Control Flow Modules133328 +Node: Modules for the Basic Displayable Lisp Objects136774 +Node: Modules for other Display-Related Lisp Objects139296 +Node: Modules for the Redisplay Mechanism140373 +Node: Modules for Interfacing with the File System142724 +Node: Modules for Other Aspects of the Lisp Interpreter and Object System146422 +Node: Modules for Interfacing with the Operating System151875 +Node: Modules for Interfacing with X Windows159536 +Node: Modules for Internationalization162972 +Node: Allocation of Objects in XEmacs Lisp165609 +Node: Introduction to Allocation166145 +Node: Garbage Collection171652 +Node: GCPROing174605 +Node: Garbage Collection - Step by Step181415 +Node: Invocation181807 +Node: garbage_collect_1184821 +Node: mark_object194301 +Node: gc_sweep196113 +Node: sweep_lcrecords_1201176 +Node: compact_string_chars202171 +Node: sweep_strings204351 +Node: sweep_bit_vectors_1205316 +Node: Integers and Characters205992 +Node: Allocation from Frob Blocks206744 +Node: lrecords208348 +Node: Low-level allocation220810 +Node: Pure Space224978 +Node: Cons225153 +Node: Vector225869 +Node: Bit Vector226446 +Node: Symbol226939 +Node: Marker227508 +Node: String228063 +Node: Compiled Function231676 +Node: Dumping231845 +Node: Overview234066 +Node: Data descriptions234636 +Node: Dumping phase236641 +Node: Object inventory237043 +Node: Address allocation239897 +Node: The header241284 +Node: Data dumping241792 +Node: Pointers dumping242453 +Node: Reloading phase243671 +Node: Remaining issues245432 +Node: Events and the Event Loop246393 +Node: Introduction to Events246843 +Node: Main Loop248792 +Node: Specifics of the Event Gathering Mechanism252367 +Node: Specifics About the Emacs Event264820 +Node: The Event Stream Callback Routines265075 +Node: Other Event Loop Functions265320 +Node: Converting Events266460 +Node: Dispatching Events; The Command Builder267069 +Node: Evaluation; Stack Frames; Bindings267304 +Node: Evaluation267646 +Node: Dynamic Binding; The specbinding Stack; Unwind-Protects274229 +Node: Simple Special Forms276613 +Node: Catch and Throw277395 +Node: Symbols and Variables279970 +Node: Introduction to Symbols280234 +Node: Obarrays281302 +Node: Symbol Values284835 +Node: Buffers and Textual Representation287123 +Node: Introduction to Buffers287781 +Node: The Text in a Buffer290487 +Node: Buffer Lists297637 +Node: Markers and Extents299588 +Node: Bufbytes and Emchars301853 +Node: The Buffer Object302068 +Node: MULE Character Sets and Encodings305548 +Node: Character Sets306610 +Node: Encodings310095 +Node: Japanese EUC (Extended Unix Code)311162 +Node: JIS7311994 +Node: Internal Mule Encodings313344 +Node: Internal String Encoding315174 +Node: Internal Character Encoding317319 +Node: CCL319043 +Node: The Lisp Reader and Compiler325795 +Node: Lstreams326008 +Node: Creating an Lstream327039 +Node: Lstream Types328266 +Node: Lstream Functions328518 +Node: Lstream Methods332084 +Node: Consoles; Devices; Frames; Windows335226 +Node: Introduction to Consoles; Devices; Frames; Windows335541 +Node: Point338076 +Node: Window Hierarchy339355 +Node: The Window Object343803 +Node: The Redisplay Mechanism347240 +Node: Critical Redisplay Sections348032 +Node: Line Start Cache349019 +Node: Redisplay Piece by Piece352255 +Node: Extents354291 +Node: Introduction to Extents354825 +Node: Extent Ordering355967 +Node: Format of the Extent Info357208 +Node: Zero-Length Extents359095 +Node: Mathematics of Extent Ordering360493 +Node: Extent Fragments365250 +Node: Faces366336 +Node: Glyphs366452 +Node: Specifiers369470 +Node: Menus369599 +Node: Subprocesses371857 +Node: Interface to X Windows373833 +Node: Index374004  End Tag Table diff --git a/info/internals.info-1 b/info/internals.info-1 index c385b18..20db3d2 100644 --- a/info/internals.info-1 +++ b/info/internals.info-1 @@ -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 -  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.  -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 ================== diff --git a/info/internals.info-2 b/info/internals.info-2 index e69dc42..17e7222 100644 --- a/info/internals.info-2 +++ b/info/internals.info-2 @@ -572,7 +572,7 @@ situations, often in code far away from where the actual breakage is. * Techniques for XEmacs Developers::  -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::  -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 ---------------------------- diff --git a/info/lispref.info b/info/lispref.info index 87a898d..256af14 100644 --- a/info/lispref.info +++ b/info/lispref.info @@ -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  Tag Table: (Indirect) @@ -193,697 +193,697 @@ Node: Text Comparison206581 Node: String Conversion209943 Node: Modifying Strings213619 Node: String Properties214260 -Node: Formatting Strings214903 -Node: Character Case224521 -Node: Case Tables227667 -Node: Char Tables231565 -Node: Char Table Types232957 -Node: Working With Char Tables234532 -Node: Lists236481 -Node: Cons Cells237604 -Node: Lists as Boxes238940 -Node: List-related Predicates241582 -Node: List Elements243284 -Node: Building Lists248313 -Node: Modifying Lists254305 -Node: Setcar255117 -Node: Setcdr257538 -Node: Rearrangement260049 -Node: Sets And Lists265635 -Node: Association Lists269863 -Ref: Association Lists-Footnote-1279154 -Node: Property Lists279359 -Node: Working With Normal Plists280907 -Node: Working With Lax Plists283175 -Node: Converting Plists To/From Alists285415 -Node: Weak Lists286763 -Node: Sequences Arrays Vectors288926 -Node: Sequence Functions291562 -Node: Arrays295221 -Node: Array Functions298285 -Node: Vectors300818 -Node: Vector Functions302316 -Node: Bit Vectors304887 -Node: Bit Vector Functions305732 -Node: Symbols307982 -Node: Symbol Components309031 -Node: Definitions313204 -Node: Creating Symbols315429 -Node: Symbol Properties322463 -Node: Plists and Alists323979 -Node: Symbol Plists325728 -Node: Other Plists327537 -Node: Evaluation329315 -Node: Intro Eval330120 -Ref: Intro Eval-Footnote-1333473 -Node: Eval333608 -Node: Forms338026 -Node: Self-Evaluating Forms339185 -Node: Symbol Forms340698 -Node: Classifying Lists341615 -Node: Function Indirection342371 -Node: Function Forms345482 -Node: Macro Forms346479 -Node: Special Forms348079 -Node: Autoloading350388 -Node: Quoting350886 -Node: Control Structures352247 -Node: Sequencing353867 -Node: Conditionals356732 -Node: Combining Conditions360155 -Node: Iteration363425 -Node: Nonlocal Exits365204 -Node: Catch and Throw365906 -Node: Examples of Catch369745 -Node: Errors371764 -Node: Signaling Errors373253 -Node: Processing of Errors377992 -Node: Handling Errors380271 -Node: Error Symbols387512 -Node: Cleanups391468 -Node: Variables395246 -Node: Global Variables397015 -Node: Constant Variables398091 -Node: Local Variables398717 -Node: Void Variables403654 -Node: Defining Variables407170 -Node: Accessing Variables414334 -Node: Setting Variables415759 -Node: Variable Scoping420278 -Node: Scope421877 -Node: Extent423402 -Node: Impl of Scope424881 -Node: Using Scoping426844 -Node: Buffer-Local Variables428366 -Node: Intro to Buffer-Local429202 -Node: Creating Buffer-Local431745 -Node: Default Value436964 -Node: Variable Aliases440107 -Node: Functions441892 -Node: What Is a Function442986 -Node: Lambda Expressions447032 -Node: Lambda Components447942 -Node: Simple Lambda449774 -Node: Argument List451431 -Node: Function Documentation455159 -Node: Function Names457101 -Node: Defining Functions459674 -Node: Calling Functions462714 -Node: Mapping Functions466563 -Node: Anonymous Functions469251 -Node: Function Cells472496 -Node: Inline Functions477306 -Node: Related Topics479116 -Node: Macros480169 -Node: Simple Macro481453 -Node: Expansion482188 -Node: Compiling Macros485192 -Node: Defining Macros487028 -Node: Backquote488345 -Node: Problems with Macros490742 -Node: Argument Evaluation491437 -Node: Surprising Local Vars494352 -Node: Eval During Expansion496420 -Node: Repeated Expansion498113 -Node: Customization500029 -Node: Common Keywords500498 -Node: Group Definitions503343 -Node: Variable Definitions505535 -Node: Customization Types510525 -Node: Simple Types511960 -Node: Composite Types514117 -Node: Splicing into Lists518807 -Node: Type Keywords520642 -Node: Loading524162 -Node: How Programs Do Loading525837 -Node: Autoload534964 -Node: Repeated Loading541043 -Node: Named Features543156 -Node: Unloading549588 -Node: Hooks for Loading551744 -Node: Byte Compilation552461 -Node: Speed of Byte-Code554378 -Node: Compilation Functions555585 -Node: Docs and Compilation561972 -Node: Dynamic Loading564625 -Node: Eval During Compile566989 -Node: Compiled-Function Objects568254 -Node: Disassembly573052 -Node: Debugging580306 -Node: Debugger581718 -Node: Error Debugging582863 -Node: Infinite Loops585616 -Node: Function Debugging586860 -Node: Explicit Debug589650 -Node: Using Debugger590421 -Node: Debugger Commands592283 -Node: Invoking the Debugger596600 -Node: Internals of Debugger600515 -Node: Syntax Errors605402 -Node: Excess Open606650 -Node: Excess Close608525 -Node: Compilation Errors609946 -Node: Edebug611234 -Node: Using Edebug613342 -Node: Instrumenting616039 -Node: Edebug Execution Modes619528 -Node: Jumping622638 -Node: Edebug Misc624981 -Node: Breakpoints626370 -Node: Global Break Condition629176 -Node: Embedded Breakpoints630131 -Node: Trapping Errors631086 -Node: Edebug Views633162 -Node: Edebug Eval635127 -Node: Eval List636304 -Node: Reading in Edebug639689 -Node: Printing in Edebug640488 -Node: Tracing642203 -Node: Coverage Testing644089 -Node: The Outside Context646130 -Node: Checking Whether to Stop647079 -Node: Edebug Display Update647726 -Node: Edebug Recursive Edit649749 -Node: Instrumenting Macro Calls651404 -Node: Specification List653886 -Node: Backtracking663297 -Node: Debugging Backquote665235 -Node: Specification Examples668941 -Node: Edebug Options671008 -Node: Read and Print676345 -Node: Streams Intro677322 -Node: Input Streams679340 -Node: Input Functions684241 -Node: Output Streams686301 -Node: Output Functions690352 -Node: Output Variables694652 -Node: Minibuffers699451 -Node: Intro to Minibuffers700603 -Node: Text from Minibuffer702791 -Node: Object from Minibuffer707666 -Node: Minibuffer History710893 -Node: Completion713872 -Node: Basic Completion715847 -Node: Minibuffer Completion720876 -Node: Completion Commands724453 -Node: High-Level Completion729096 -Node: Reading File Names733120 -Node: Programmed Completion736804 -Node: Yes-or-No Queries739186 -Node: Multiple Queries744923 -Node: Reading a Password748990 -Node: Minibuffer Misc750327 -Node: Command Loop755197 -Node: Command Overview756541 -Node: Defining Commands759819 -Node: Using Interactive760567 -Node: Interactive Codes765340 -Node: Interactive Examples771132 -Node: Interactive Call772446 -Node: Command Loop Info777847 -Node: Events782826 -Node: Event Types784286 -Node: Event Contents786209 -Node: Event Predicates790685 -Node: Accessing Mouse Event Positions792010 -Node: Frame-Level Event Position Info792709 -Node: Window-Level Event Position Info793749 -Node: Event Text Position Info795513 -Node: Event Glyph Position Info798005 -Node: Event Toolbar Position Info799328 -Node: Other Event Position Info799999 -Node: Accessing Other Event Info800408 -Node: Working With Events802028 -Node: Converting Events808016 -Node: Reading Input810968 -Node: Key Sequence Input811970 -Node: Reading One Event813924 -Node: Dispatching an Event816741 -Node: Quoted Character Input817192 -Node: Peeking and Discarding818540 -Node: Waiting822444 -Node: Quitting824752 -Node: Prefix Command Arguments829160 -Node: Recursive Editing834247 -Node: Disabling Commands839043 -Node: Command History841111 -Node: Keyboard Macros842848 -Node: Keymaps845065 -Node: Keymap Terminology846642 -Node: Format of Keymaps849571 -Node: Creating Keymaps849982 -Node: Inheritance and Keymaps852061 -Node: Key Sequences854433 -Node: Prefix Keys859229 -Node: Active Keymaps862814 -Node: Key Lookup872135 -Node: Functions for Key Lookup877298 -Node: Changing Key Bindings882995 -Node: Key Binding Commands889892 -Node: Scanning Keymaps891957 -Node: Other Keymap Functions900468 -Node: Menus901090 -Node: Menu Format901682 -Node: Menubar Format910328 -Node: Menubar910953 -Node: Modifying Menus914066 -Node: Menu Filters919080 -Node: Pop-Up Menus920976 -Node: Menu Accelerators923181 -Node: Creating Menu Accelerators923937 -Node: Keyboard Menu Traversal925297 -Node: Menu Accelerator Functions926024 -Node: Buffers Menu929101 -Node: Dialog Boxes930395 -Node: Dialog Box Format930562 -Node: Dialog Box Functions931987 -Node: Toolbar932384 -Node: Toolbar Intro932709 -Node: Toolbar Descriptor Format935118 -Node: Specifying the Toolbar939612 -Node: Other Toolbar Variables943217 -Node: Scrollbars947643 -Node: Drag and Drop947779 -Node: Supported Protocols948855 -Node: OffiX DND949358 -Node: CDE dt950365 -Node: MSWindows OLE950956 -Node: Loose ends951127 -Node: Drop Interface951519 -Node: Drag Interface952541 -Node: Modes952715 -Node: Major Modes953666 -Node: Major Mode Conventions956581 -Node: Example Major Modes962536 -Node: Auto Major Mode970569 -Node: Mode Help978017 -Node: Derived Modes979118 -Node: Minor Modes981309 -Node: Minor Mode Conventions982611 -Node: Keymaps and Minor Modes985474 -Node: Modeline Format986309 -Node: Modeline Data988077 -Node: Modeline Variables992347 -Node: %-Constructs997063 -Node: Hooks999974 -Node: Documentation1006736 -Node: Documentation Basics1008159 -Node: Accessing Documentation1011209 -Node: Keys in Documentation1017488 -Node: Describing Characters1020967 -Node: Help Functions1023316 -Node: Obsoleteness1029767 -Node: Files1032761 -Node: Visiting Files1034686 -Node: Visiting Functions1036191 -Node: Subroutines of Visiting1041238 -Node: Saving Buffers1043311 -Node: Reading from Files1049404 -Node: Writing to Files1051561 -Node: File Locks1054278 -Node: Information about Files1057331 -Node: Testing Accessibility1058092 -Node: Kinds of Files1061832 -Node: Truenames1063513 -Node: File Attributes1064515 -Node: Changing File Attributes1069654 -Node: File Names1075060 -Node: File Name Components1076669 -Node: Directory Names1079770 -Node: Relative File Names1083223 -Node: File Name Expansion1084301 -Node: Unique File Names1088208 -Node: File Name Completion1089823 -Node: User Name Completion1092484 -Node: Contents of Directories1093824 -Node: Create/Delete Dirs1097137 -Node: Magic File Names1098243 -Node: Partial Files1103873 -Node: Intro to Partial Files1104101 -Node: Creating a Partial File1105341 -Node: Detached Partial Files1106276 -Node: Format Conversion1107398 -Node: Files and MS-DOS1113914 -Node: Backups and Auto-Saving1115978 -Node: Backup Files1116653 -Node: Making Backups1118050 -Node: Rename or Copy1120799 -Node: Numbered Backups1123292 -Node: Backup Names1125536 -Node: Auto-Saving1128828 -Node: Reverting1136970 -Node: Buffers1140128 -Node: Buffer Basics1141545 -Node: Current Buffer1143598 -Node: Buffer Names1148286 -Node: Buffer File Name1151491 -Node: Buffer Modification1155610 -Node: Modification Time1157803 -Node: Read Only Buffers1161178 -Node: The Buffer List1163596 -Node: Creating Buffers1168426 -Node: Killing Buffers1170572 -Node: Indirect Buffers1174303 -Node: Windows1176875 -Node: Basic Windows1178353 -Node: Splitting Windows1181451 -Node: Deleting Windows1188340 -Node: Selecting Windows1191020 -Node: Cyclic Window Ordering1194149 -Node: Buffers and Windows1198773 -Node: Displaying Buffers1200614 -Node: Choosing Window1205790 -Node: Window Point1213506 -Node: Window Start1215552 -Node: Vertical Scrolling1220042 -Node: Horizontal Scrolling1226179 -Node: Size of Window1229688 -Node: Position of Window1234406 -Node: Resizing Windows1236646 -Node: Window Configurations1242075 -Node: Frames1245500 -Node: Creating Frames1247269 -Node: Frame Properties1248610 -Node: Property Access1249426 -Node: Initial Properties1250275 -Node: X Frame Properties1252761 -Node: Size and Position1257395 -Node: Frame Name1259391 -Node: Frame Titles1260305 -Node: Deleting Frames1262129 -Node: Finding All Frames1262729 -Node: Frames and Windows1264723 -Node: Minibuffers and Frames1266428 -Node: Input Focus1267346 -Node: Visibility of Frames1270423 -Node: Raising and Lowering1272342 -Node: Frame Configurations1274718 -Node: Frame Hooks1275312 -Node: Consoles and Devices1277117 -Node: Basic Console Functions1279860 -Node: Basic Device Functions1280283 -Node: Console Types and Device Classes1280999 -Node: Connecting to a Console or Device1283196 -Node: The Selected Console and Device1285359 -Node: Console and Device I/O1286385 -Node: Positions1287149 -Node: Point1288118 -Node: Motion1291208 -Node: Character Motion1291975 -Node: Word Motion1294212 -Node: Buffer End Motion1295713 -Node: Text Lines1297210 -Node: Screen Lines1301805 -Node: List Motion1305868 -Node: Skipping Characters1309276 -Node: Excursions1311495 -Node: Narrowing1314527 -Node: Markers1319852 -Node: Overview of Markers1320758 -Node: Predicates on Markers1325450 -Node: Creating Markers1326696 -Node: Information from Markers1330733 -Node: Changing Markers1331831 -Node: The Mark1333209 -Node: The Region1341703 -Node: Text1347389 -Node: Near Point1350088 -Node: Buffer Contents1354275 -Node: Comparing Text1355681 -Node: Insertion1357089 -Node: Commands for Insertion1360931 -Node: Deletion1363887 -Node: User-Level Deletion1367482 -Node: The Kill Ring1371643 -Node: Kill Ring Concepts1373817 -Node: Kill Functions1374871 -Node: Yank Commands1376776 -Node: Low-Level Kill Ring1378647 -Node: Internals of Kill Ring1381433 -Node: Undo1384213 -Node: Maintaining Undo1388542 -Node: Filling1391162 -Node: Margins1397156 -Node: Auto Filling1401085 -Node: Sorting1402266 -Node: Columns1411566 -Node: Indentation1414082 -Node: Primitive Indent1414861 -Node: Mode-Specific Indent1416105 -Node: Region Indent1418616 -Node: Relative Indent1421564 -Node: Indent Tabs1423946 -Node: Motion by Indent1425267 -Node: Case Changes1426046 -Node: Text Properties1429297 -Node: Examining Properties1431110 -Node: Changing Properties1432977 -Node: Property Search1436568 -Node: Special Properties1441279 -Node: Saving Properties1441560 -Node: Substitution1444702 -Node: Registers1447972 -Node: Transposition1450515 -Node: Change Hooks1451409 -Node: Transformations1453449 -Node: Searching and Matching1457834 -Node: String Search1458965 -Node: Regular Expressions1463689 -Node: Syntax of Regexps1465056 -Node: Regexp Example1479435 -Node: Regexp Search1481605 -Node: POSIX Regexps1487693 -Node: Search and Replace1489528 -Node: Match Data1492893 -Node: Simple Match Data1494023 -Node: Replacing Match1498288 -Node: Entire Match Data1500622 -Node: Saving Match Data1502613 -Node: Searching and Case1503994 -Node: Standard Regexps1506028 -Node: Syntax Tables1508226 -Node: Syntax Basics1509340 -Node: Syntax Descriptors1512312 -Node: Syntax Class Table1514162 -Node: Syntax Flags1520200 -Node: Syntax Table Functions1523417 -Node: Motion and Syntax1527281 -Node: Parsing Expressions1528733 -Node: Standard Syntax Tables1534802 -Node: Syntax Table Internals1535646 -Node: Abbrevs1536672 -Node: Abbrev Mode1538475 -Node: Abbrev Tables1539195 -Node: Defining Abbrevs1540728 -Node: Abbrev Files1542633 -Node: Abbrev Expansion1544406 -Node: Standard Abbrev Tables1549037 -Node: Extents1550196 -Node: Intro to Extents1551439 -Node: Creating and Modifying Extents1555433 -Node: Extent Endpoints1556940 -Node: Finding Extents1560203 -Node: Mapping Over Extents1563951 -Node: Extent Properties1570068 -Node: Detached Extents1580212 -Node: Extent Parents1582071 -Node: Duplicable Extents1583765 -Node: Extents and Events1586986 -Node: Atomic Extents1588893 -Node: Specifiers1589340 -Node: Introduction to Specifiers1591453 -Node: Specifiers In-Depth1593763 -Node: Specifier Instancing1598675 -Node: Specifier Types1601937 -Node: Adding Specifications1607011 -Node: Retrieving Specifications1616373 -Node: Specifier Tag Functions1620108 -Node: Specifier Instancing Functions1623342 -Node: Specifier Example1626749 -Node: Creating Specifiers1629905 -Node: Specifier Validation Functions1632154 -Node: Other Specification Functions1634538 -Node: Faces and Window-System Objects1638357 -Node: Faces1638681 -Node: Merging Faces1640298 -Node: Basic Face Functions1642259 -Node: Face Properties1644357 -Node: Face Convenience Functions1654599 -Node: Other Face Display Functions1657729 -Node: Fonts1658542 -Node: Font Specifiers1659243 -Node: Font Instances1659484 -Node: Font Instance Names1660451 -Node: Font Instance Size1661292 -Node: Font Instance Characteristics1662578 -Node: Font Convenience Functions1663747 -Node: Colors1665037 -Node: Color Specifiers1665477 -Node: Color Instances1665704 -Node: Color Instance Properties1666448 -Node: Color Convenience Functions1667074 -Node: Glyphs1668127 -Node: Glyph Functions1669719 -Node: Creating Glyphs1670126 -Node: Glyph Properties1671713 -Node: Glyph Convenience Functions1680880 -Node: Glyph Dimensions1684827 -Node: Images1685907 -Node: Image Specifiers1686356 -Node: Image Instantiator Conversion1697777 -Node: Image Instances1699142 -Node: Image Instance Types1699893 -Node: Image Instance Functions1702548 -Node: Glyph Types1707117 -Node: Mouse Pointer1708889 -Node: Redisplay Glyphs1711892 -Node: Subwindows1712925 -Node: Annotations1713168 -Node: Annotation Basics1714184 -Node: Annotation Primitives1718122 -Node: Annotation Properties1719451 -Node: Locating Annotations1722491 -Node: Margin Primitives1723328 -Node: Annotation Hooks1725222 -Node: Display1725882 -Node: Refresh Screen1726860 -Node: Truncation1728771 -Node: The Echo Area1731296 -Node: Warnings1737731 -Node: Invisible Text1742167 -Node: Selective Display1744746 -Node: Overlay Arrow1748872 -Node: Temporary Displays1750225 -Node: Blinking1754346 -Node: Usual Display1756531 -Node: Display Tables1759080 -Node: Display Table Format1759884 -Node: Active Display Table1761326 -Node: Character Descriptors1762518 -Node: Beeping1763275 -Node: Hash Tables1768041 -Node: Introduction to Hash Tables1768649 -Node: Working With Hash Tables1774672 -Node: Weak Hash Tables1775789 -Node: Range Tables1777588 -Node: Introduction to Range Tables1778277 -Node: Working With Range Tables1778708 -Node: Databases1779593 -Node: Connecting to a Database1779892 -Node: Working With a Database1780983 -Node: Other Database Functions1781841 -Node: Processes1782415 -Node: Subprocess Creation1784639 -Node: Synchronous Processes1787928 -Node: MS-DOS Subprocesses1794646 -Node: Asynchronous Processes1795720 -Node: Deleting Processes1799433 -Node: Process Information1801304 -Node: Input to Processes1805230 -Node: Signals to Processes1807520 -Node: Output from Processes1811940 -Node: Process Buffers1812752 -Node: Filter Functions1815619 -Node: Accepting Output1821189 -Node: Sentinels1822716 -Node: Process Window Size1826206 -Node: Transaction Queues1826555 -Node: Network1828253 -Node: System Interface1830087 -Node: Starting Up1831357 -Node: Start-up Summary1831951 -Node: Init File1835505 -Node: Terminal-Specific1837886 -Node: Command Line Arguments1841045 -Node: Getting Out1844534 -Node: Killing XEmacs1845103 -Node: Suspending XEmacs1846772 -Node: System Environment1850114 -Node: User Identification1856781 -Node: Time of Day1860310 -Node: Time Conversion1863097 -Node: Timers1868137 -Node: Terminal Input1870310 -Node: Input Modes1870813 -Node: Translating Input1873226 -Node: Recording Input1877391 -Node: Terminal Output1879491 -Node: Flow Control1883114 -Node: Batch Mode1886906 -Node: X-Windows1888288 -Node: X Selections1889159 -Node: X Server1891369 -Node: Resources1891820 -Node: Server Data1897129 -Node: Grabs1898336 -Node: X Miscellaneous1899916 -Node: ToolTalk Support1902301 -Node: XEmacs ToolTalk API Summary1902518 -Node: Sending Messages1903818 -Node: Example of Sending Messages1904069 -Node: Elisp Interface for Sending Messages1905131 -Node: Receiving Messages1911523 -Node: Example of Receiving Messages1911746 -Node: Elisp Interface for Receiving Messages1912582 -Node: LDAP Support1916407 -Node: Building XEmacs with LDAP support1916903 -Node: XEmacs LDAP API1917881 -Node: LDAP Variables1918611 -Node: The High-Level LDAP API1921087 -Node: The Low-Level LDAP API1922192 -Node: The LDAP Lisp Object1922466 -Node: Opening and Closing a LDAP Connection1923019 -Node: Searching on a LDAP Server (Low-level)1924802 -Node: Syntax of Search Filters1926195 -Node: Internationalization1927493 -Node: I18N Levels 1 and 21927830 -Node: I18N Level 31928536 -Node: Level 3 Basics1928817 -Node: Level 3 Primitives1929650 -Node: Dynamic Messaging1931256 -Node: Domain Specification1931719 -Node: Documentation String Extraction1933622 -Node: I18N Level 41934540 -Node: MULE1934732 -Node: Internationalization Terminology1935843 -Node: Charsets1944377 -Node: Charset Properties1945073 -Node: Basic Charset Functions1949759 -Node: Charset Property Functions1951940 -Node: Predefined Charsets1953982 -Node: MULE Characters1956902 -Node: Composite Characters1957749 -Node: ISO 20221959003 -Node: Coding Systems1965145 -Node: Coding System Types1967066 -Node: EOL Conversion1968885 -Node: Coding System Properties1970068 -Node: Basic Coding System Functions1973920 -Node: Coding System Property Functions1975824 -Node: Encoding and Decoding Text1976382 -Node: Detection of Textual Encoding1977518 -Node: Big5 and Shift-JIS Functions1979054 -Node: CCL1980142 -Node: CCL Syntax1983246 -Node: CCL Statements1984834 -Node: CCL Expressions1989482 -Node: Calling CCL1992021 -Node: CCL Examples1995010 -Node: Category Tables1995147 -Node: Tips1997505 -Node: Style Tips1998146 -Node: Compilation Tips2007665 -Node: Documentation Tips2009579 -Node: Comment Tips2015088 -Node: Library Headers2018090 -Node: Building XEmacs and Object Allocation2022062 -Node: Building XEmacs2022945 -Node: Pure Storage2029280 -Node: Garbage Collection2032068 -Node: Standard Errors2043207 -Node: Standard Buffer-Local Variables2047416 -Node: Standard Keymaps2050049 -Node: Standard Hooks2053781 -Node: Index2061281 +Node: Formatting Strings214905 +Node: Character Case224523 +Node: Case Tables227669 +Node: Char Tables231567 +Node: Char Table Types232959 +Node: Working With Char Tables234534 +Node: Lists236483 +Node: Cons Cells237606 +Node: Lists as Boxes238942 +Node: List-related Predicates241584 +Node: List Elements243286 +Node: Building Lists248315 +Node: Modifying Lists254307 +Node: Setcar255119 +Node: Setcdr257540 +Node: Rearrangement260051 +Node: Sets And Lists265637 +Node: Association Lists269865 +Ref: Association Lists-Footnote-1279156 +Node: Property Lists279361 +Node: Working With Normal Plists280909 +Node: Working With Lax Plists283177 +Node: Converting Plists To/From Alists285417 +Node: Weak Lists286765 +Node: Sequences Arrays Vectors288928 +Node: Sequence Functions291564 +Node: Arrays295223 +Node: Array Functions298287 +Node: Vectors300820 +Node: Vector Functions302318 +Node: Bit Vectors304889 +Node: Bit Vector Functions305734 +Node: Symbols307984 +Node: Symbol Components309033 +Node: Definitions313206 +Node: Creating Symbols315431 +Node: Symbol Properties322465 +Node: Plists and Alists323992 +Node: Object Plists325741 +Node: Other Plists328501 +Node: Evaluation330303 +Node: Intro Eval331108 +Ref: Intro Eval-Footnote-1334461 +Node: Eval334596 +Node: Forms339014 +Node: Self-Evaluating Forms340173 +Node: Symbol Forms341686 +Node: Classifying Lists342603 +Node: Function Indirection343359 +Node: Function Forms346470 +Node: Macro Forms347467 +Node: Special Forms349067 +Node: Autoloading351376 +Node: Quoting351874 +Node: Control Structures353235 +Node: Sequencing354855 +Node: Conditionals357720 +Node: Combining Conditions361143 +Node: Iteration364413 +Node: Nonlocal Exits366192 +Node: Catch and Throw366894 +Node: Examples of Catch370733 +Node: Errors372752 +Node: Signaling Errors374241 +Node: Processing of Errors378980 +Node: Handling Errors381259 +Node: Error Symbols388500 +Node: Cleanups392456 +Node: Variables396234 +Node: Global Variables398003 +Node: Constant Variables399079 +Node: Local Variables399705 +Node: Void Variables404642 +Node: Defining Variables408158 +Node: Accessing Variables415322 +Node: Setting Variables416747 +Node: Variable Scoping421266 +Node: Scope422865 +Node: Extent424390 +Node: Impl of Scope425869 +Node: Using Scoping427832 +Node: Buffer-Local Variables429354 +Node: Intro to Buffer-Local430190 +Node: Creating Buffer-Local432733 +Node: Default Value437952 +Node: Variable Aliases441095 +Node: Functions442880 +Node: What Is a Function443974 +Node: Lambda Expressions448020 +Node: Lambda Components448930 +Node: Simple Lambda450762 +Node: Argument List452419 +Node: Function Documentation456147 +Node: Function Names458089 +Node: Defining Functions460662 +Node: Calling Functions463702 +Node: Mapping Functions467551 +Node: Anonymous Functions470239 +Node: Function Cells473484 +Node: Inline Functions478294 +Node: Related Topics480104 +Node: Macros481157 +Node: Simple Macro482441 +Node: Expansion483176 +Node: Compiling Macros486180 +Node: Defining Macros488016 +Node: Backquote489333 +Node: Problems with Macros491730 +Node: Argument Evaluation492425 +Node: Surprising Local Vars495340 +Node: Eval During Expansion497408 +Node: Repeated Expansion499101 +Node: Customization501017 +Node: Common Keywords501486 +Node: Group Definitions504331 +Node: Variable Definitions506523 +Node: Customization Types511513 +Node: Simple Types512948 +Node: Composite Types515105 +Node: Splicing into Lists519795 +Node: Type Keywords521630 +Node: Loading525150 +Node: How Programs Do Loading526825 +Node: Autoload535952 +Node: Repeated Loading542031 +Node: Named Features544144 +Node: Unloading550576 +Node: Hooks for Loading552732 +Node: Byte Compilation553449 +Node: Speed of Byte-Code555366 +Node: Compilation Functions556573 +Node: Docs and Compilation562960 +Node: Dynamic Loading565613 +Node: Eval During Compile567977 +Node: Compiled-Function Objects569242 +Node: Disassembly574040 +Node: Debugging581294 +Node: Debugger582706 +Node: Error Debugging583851 +Node: Infinite Loops586604 +Node: Function Debugging587848 +Node: Explicit Debug590638 +Node: Using Debugger591409 +Node: Debugger Commands593271 +Node: Invoking the Debugger597588 +Node: Internals of Debugger601503 +Node: Syntax Errors606390 +Node: Excess Open607638 +Node: Excess Close609513 +Node: Compilation Errors610934 +Node: Edebug612222 +Node: Using Edebug614330 +Node: Instrumenting617027 +Node: Edebug Execution Modes620516 +Node: Jumping623626 +Node: Edebug Misc625969 +Node: Breakpoints627358 +Node: Global Break Condition630164 +Node: Embedded Breakpoints631119 +Node: Trapping Errors632074 +Node: Edebug Views634150 +Node: Edebug Eval636115 +Node: Eval List637292 +Node: Reading in Edebug640677 +Node: Printing in Edebug641476 +Node: Tracing643191 +Node: Coverage Testing645077 +Node: The Outside Context647118 +Node: Checking Whether to Stop648067 +Node: Edebug Display Update648714 +Node: Edebug Recursive Edit650737 +Node: Instrumenting Macro Calls652392 +Node: Specification List654874 +Node: Backtracking664285 +Node: Debugging Backquote666223 +Node: Specification Examples669929 +Node: Edebug Options671996 +Node: Read and Print677333 +Node: Streams Intro678310 +Node: Input Streams680328 +Node: Input Functions685229 +Node: Output Streams687289 +Node: Output Functions691340 +Node: Output Variables695640 +Node: Minibuffers700439 +Node: Intro to Minibuffers701591 +Node: Text from Minibuffer703779 +Node: Object from Minibuffer708654 +Node: Minibuffer History711881 +Node: Completion714860 +Node: Basic Completion716835 +Node: Minibuffer Completion721864 +Node: Completion Commands725441 +Node: High-Level Completion730084 +Node: Reading File Names734108 +Node: Programmed Completion737792 +Node: Yes-or-No Queries740174 +Node: Multiple Queries745911 +Node: Reading a Password749978 +Node: Minibuffer Misc751315 +Node: Command Loop756185 +Node: Command Overview757529 +Node: Defining Commands760807 +Node: Using Interactive761555 +Node: Interactive Codes766328 +Node: Interactive Examples772120 +Node: Interactive Call773434 +Node: Command Loop Info778835 +Node: Events783814 +Node: Event Types785274 +Node: Event Contents787197 +Node: Event Predicates791673 +Node: Accessing Mouse Event Positions792998 +Node: Frame-Level Event Position Info793697 +Node: Window-Level Event Position Info794737 +Node: Event Text Position Info796501 +Node: Event Glyph Position Info798993 +Node: Event Toolbar Position Info800316 +Node: Other Event Position Info800987 +Node: Accessing Other Event Info801396 +Node: Working With Events803016 +Node: Converting Events809004 +Node: Reading Input811956 +Node: Key Sequence Input812958 +Node: Reading One Event814912 +Node: Dispatching an Event817729 +Node: Quoted Character Input818180 +Node: Peeking and Discarding819528 +Node: Waiting823432 +Node: Quitting825740 +Node: Prefix Command Arguments830148 +Node: Recursive Editing835235 +Node: Disabling Commands840031 +Node: Command History842099 +Node: Keyboard Macros843836 +Node: Keymaps846053 +Node: Keymap Terminology847630 +Node: Format of Keymaps850559 +Node: Creating Keymaps850970 +Node: Inheritance and Keymaps853049 +Node: Key Sequences855421 +Node: Prefix Keys860217 +Node: Active Keymaps863802 +Node: Key Lookup873123 +Node: Functions for Key Lookup878286 +Node: Changing Key Bindings883983 +Node: Key Binding Commands890880 +Node: Scanning Keymaps892945 +Node: Other Keymap Functions901456 +Node: Menus902078 +Node: Menu Format902670 +Node: Menubar Format911316 +Node: Menubar911941 +Node: Modifying Menus915054 +Node: Menu Filters920068 +Node: Pop-Up Menus921964 +Node: Menu Accelerators924169 +Node: Creating Menu Accelerators924925 +Node: Keyboard Menu Traversal926285 +Node: Menu Accelerator Functions927012 +Node: Buffers Menu930089 +Node: Dialog Boxes931383 +Node: Dialog Box Format931550 +Node: Dialog Box Functions932975 +Node: Toolbar933372 +Node: Toolbar Intro933697 +Node: Toolbar Descriptor Format936106 +Node: Specifying the Toolbar940600 +Node: Other Toolbar Variables944205 +Node: Scrollbars948631 +Node: Drag and Drop948767 +Node: Supported Protocols949843 +Node: OffiX DND950346 +Node: CDE dt951353 +Node: MSWindows OLE951944 +Node: Loose ends952115 +Node: Drop Interface952507 +Node: Drag Interface953529 +Node: Modes953703 +Node: Major Modes954654 +Node: Major Mode Conventions957569 +Node: Example Major Modes963524 +Node: Auto Major Mode971557 +Node: Mode Help979005 +Node: Derived Modes980106 +Node: Minor Modes982297 +Node: Minor Mode Conventions983599 +Node: Keymaps and Minor Modes986462 +Node: Modeline Format987297 +Node: Modeline Data989065 +Node: Modeline Variables993335 +Node: %-Constructs998051 +Node: Hooks1000962 +Node: Documentation1007724 +Node: Documentation Basics1009147 +Node: Accessing Documentation1012197 +Node: Keys in Documentation1018476 +Node: Describing Characters1021955 +Node: Help Functions1024304 +Node: Obsoleteness1030755 +Node: Files1033749 +Node: Visiting Files1035674 +Node: Visiting Functions1037179 +Node: Subroutines of Visiting1042226 +Node: Saving Buffers1044299 +Node: Reading from Files1050392 +Node: Writing to Files1052549 +Node: File Locks1055266 +Node: Information about Files1058319 +Node: Testing Accessibility1059080 +Node: Kinds of Files1062820 +Node: Truenames1064501 +Node: File Attributes1065503 +Node: Changing File Attributes1070642 +Node: File Names1076048 +Node: File Name Components1077657 +Node: Directory Names1080758 +Node: Relative File Names1084211 +Node: File Name Expansion1085289 +Node: Unique File Names1089196 +Node: File Name Completion1090811 +Node: User Name Completion1093472 +Node: Contents of Directories1094812 +Node: Create/Delete Dirs1098125 +Node: Magic File Names1099231 +Node: Partial Files1104861 +Node: Intro to Partial Files1105089 +Node: Creating a Partial File1106329 +Node: Detached Partial Files1107264 +Node: Format Conversion1108386 +Node: Files and MS-DOS1114902 +Node: Backups and Auto-Saving1116966 +Node: Backup Files1117641 +Node: Making Backups1119038 +Node: Rename or Copy1121787 +Node: Numbered Backups1124280 +Node: Backup Names1126524 +Node: Auto-Saving1129816 +Node: Reverting1137958 +Node: Buffers1141116 +Node: Buffer Basics1142533 +Node: Current Buffer1144586 +Node: Buffer Names1149274 +Node: Buffer File Name1152479 +Node: Buffer Modification1156598 +Node: Modification Time1158791 +Node: Read Only Buffers1162166 +Node: The Buffer List1164584 +Node: Creating Buffers1169414 +Node: Killing Buffers1171560 +Node: Indirect Buffers1175291 +Node: Windows1177863 +Node: Basic Windows1179341 +Node: Splitting Windows1182439 +Node: Deleting Windows1189328 +Node: Selecting Windows1192008 +Node: Cyclic Window Ordering1195137 +Node: Buffers and Windows1199761 +Node: Displaying Buffers1201602 +Node: Choosing Window1206778 +Node: Window Point1214494 +Node: Window Start1216540 +Node: Vertical Scrolling1221030 +Node: Horizontal Scrolling1227167 +Node: Size of Window1230676 +Node: Position of Window1235394 +Node: Resizing Windows1237634 +Node: Window Configurations1243063 +Node: Frames1246488 +Node: Creating Frames1248257 +Node: Frame Properties1249598 +Node: Property Access1250414 +Node: Initial Properties1251263 +Node: X Frame Properties1253749 +Node: Size and Position1258383 +Node: Frame Name1260379 +Node: Frame Titles1261293 +Node: Deleting Frames1263117 +Node: Finding All Frames1263717 +Node: Frames and Windows1265711 +Node: Minibuffers and Frames1267416 +Node: Input Focus1268334 +Node: Visibility of Frames1271411 +Node: Raising and Lowering1273330 +Node: Frame Configurations1275706 +Node: Frame Hooks1276300 +Node: Consoles and Devices1278105 +Node: Basic Console Functions1280848 +Node: Basic Device Functions1281271 +Node: Console Types and Device Classes1281987 +Node: Connecting to a Console or Device1284184 +Node: The Selected Console and Device1286347 +Node: Console and Device I/O1287373 +Node: Positions1288137 +Node: Point1289106 +Node: Motion1292196 +Node: Character Motion1292963 +Node: Word Motion1295200 +Node: Buffer End Motion1296701 +Node: Text Lines1298198 +Node: Screen Lines1302793 +Node: List Motion1306856 +Node: Skipping Characters1310264 +Node: Excursions1312483 +Node: Narrowing1315515 +Node: Markers1320840 +Node: Overview of Markers1321746 +Node: Predicates on Markers1326438 +Node: Creating Markers1327684 +Node: Information from Markers1331721 +Node: Changing Markers1332819 +Node: The Mark1334197 +Node: The Region1342691 +Node: Text1348377 +Node: Near Point1351076 +Node: Buffer Contents1355263 +Node: Comparing Text1356669 +Node: Insertion1358077 +Node: Commands for Insertion1361919 +Node: Deletion1364875 +Node: User-Level Deletion1368470 +Node: The Kill Ring1372631 +Node: Kill Ring Concepts1374805 +Node: Kill Functions1375859 +Node: Yank Commands1377764 +Node: Low-Level Kill Ring1379635 +Node: Internals of Kill Ring1382421 +Node: Undo1385201 +Node: Maintaining Undo1389530 +Node: Filling1392150 +Node: Margins1398144 +Node: Auto Filling1402073 +Node: Sorting1403254 +Node: Columns1412554 +Node: Indentation1415070 +Node: Primitive Indent1415849 +Node: Mode-Specific Indent1417093 +Node: Region Indent1419604 +Node: Relative Indent1422552 +Node: Indent Tabs1424934 +Node: Motion by Indent1426255 +Node: Case Changes1427034 +Node: Text Properties1430285 +Node: Examining Properties1432098 +Node: Changing Properties1433965 +Node: Property Search1437556 +Node: Special Properties1442267 +Node: Saving Properties1442548 +Node: Substitution1445690 +Node: Registers1448960 +Node: Transposition1451503 +Node: Change Hooks1452397 +Node: Transformations1454437 +Node: Searching and Matching1458822 +Node: String Search1459953 +Node: Regular Expressions1464677 +Node: Syntax of Regexps1466044 +Node: Regexp Example1480423 +Node: Regexp Search1482593 +Node: POSIX Regexps1488681 +Node: Search and Replace1490516 +Node: Match Data1493881 +Node: Simple Match Data1495011 +Node: Replacing Match1499276 +Node: Entire Match Data1501610 +Node: Saving Match Data1503601 +Node: Searching and Case1504982 +Node: Standard Regexps1507016 +Node: Syntax Tables1509214 +Node: Syntax Basics1510328 +Node: Syntax Descriptors1513300 +Node: Syntax Class Table1515150 +Node: Syntax Flags1521188 +Node: Syntax Table Functions1524405 +Node: Motion and Syntax1528269 +Node: Parsing Expressions1529721 +Node: Standard Syntax Tables1535790 +Node: Syntax Table Internals1536634 +Node: Abbrevs1537660 +Node: Abbrev Mode1539463 +Node: Abbrev Tables1540183 +Node: Defining Abbrevs1541716 +Node: Abbrev Files1543621 +Node: Abbrev Expansion1545394 +Node: Standard Abbrev Tables1550025 +Node: Extents1551184 +Node: Intro to Extents1552427 +Node: Creating and Modifying Extents1556421 +Node: Extent Endpoints1557928 +Node: Finding Extents1561191 +Node: Mapping Over Extents1564939 +Node: Extent Properties1571056 +Node: Detached Extents1581200 +Node: Extent Parents1583059 +Node: Duplicable Extents1584753 +Node: Extents and Events1587974 +Node: Atomic Extents1589881 +Node: Specifiers1590328 +Node: Introduction to Specifiers1592441 +Node: Specifiers In-Depth1594751 +Node: Specifier Instancing1599663 +Node: Specifier Types1602925 +Node: Adding Specifications1607999 +Node: Retrieving Specifications1617361 +Node: Specifier Tag Functions1621096 +Node: Specifier Instancing Functions1624330 +Node: Specifier Example1627737 +Node: Creating Specifiers1630893 +Node: Specifier Validation Functions1633142 +Node: Other Specification Functions1635526 +Node: Faces and Window-System Objects1639345 +Node: Faces1639669 +Node: Merging Faces1641286 +Node: Basic Face Functions1643247 +Node: Face Properties1645345 +Node: Face Convenience Functions1655587 +Node: Other Face Display Functions1658717 +Node: Fonts1659530 +Node: Font Specifiers1660231 +Node: Font Instances1660472 +Node: Font Instance Names1661439 +Node: Font Instance Size1662280 +Node: Font Instance Characteristics1663566 +Node: Font Convenience Functions1664735 +Node: Colors1666025 +Node: Color Specifiers1666465 +Node: Color Instances1666692 +Node: Color Instance Properties1667436 +Node: Color Convenience Functions1668062 +Node: Glyphs1669115 +Node: Glyph Functions1670707 +Node: Creating Glyphs1671114 +Node: Glyph Properties1672701 +Node: Glyph Convenience Functions1681868 +Node: Glyph Dimensions1685815 +Node: Images1686895 +Node: Image Specifiers1687344 +Node: Image Instantiator Conversion1698765 +Node: Image Instances1700130 +Node: Image Instance Types1700881 +Node: Image Instance Functions1703536 +Node: Glyph Types1708105 +Node: Mouse Pointer1709877 +Node: Redisplay Glyphs1712880 +Node: Subwindows1713913 +Node: Annotations1714156 +Node: Annotation Basics1715172 +Node: Annotation Primitives1719110 +Node: Annotation Properties1720439 +Node: Locating Annotations1723479 +Node: Margin Primitives1724316 +Node: Annotation Hooks1726210 +Node: Display1726870 +Node: Refresh Screen1727848 +Node: Truncation1729759 +Node: The Echo Area1732284 +Node: Warnings1738719 +Node: Invisible Text1743155 +Node: Selective Display1745734 +Node: Overlay Arrow1749860 +Node: Temporary Displays1751213 +Node: Blinking1755334 +Node: Usual Display1757519 +Node: Display Tables1760068 +Node: Display Table Format1760872 +Node: Active Display Table1762314 +Node: Character Descriptors1763506 +Node: Beeping1764263 +Node: Hash Tables1769029 +Node: Introduction to Hash Tables1769637 +Node: Working With Hash Tables1775660 +Node: Weak Hash Tables1776777 +Node: Range Tables1778576 +Node: Introduction to Range Tables1779265 +Node: Working With Range Tables1779696 +Node: Databases1780581 +Node: Connecting to a Database1780880 +Node: Working With a Database1781971 +Node: Other Database Functions1782829 +Node: Processes1783403 +Node: Subprocess Creation1785627 +Node: Synchronous Processes1788916 +Node: MS-DOS Subprocesses1795634 +Node: Asynchronous Processes1796708 +Node: Deleting Processes1800421 +Node: Process Information1802292 +Node: Input to Processes1806218 +Node: Signals to Processes1808508 +Node: Output from Processes1812928 +Node: Process Buffers1813740 +Node: Filter Functions1816607 +Node: Accepting Output1822177 +Node: Sentinels1823704 +Node: Process Window Size1827194 +Node: Transaction Queues1827543 +Node: Network1829241 +Node: System Interface1831075 +Node: Starting Up1832345 +Node: Start-up Summary1832939 +Node: Init File1836493 +Node: Terminal-Specific1838874 +Node: Command Line Arguments1842033 +Node: Getting Out1845522 +Node: Killing XEmacs1846091 +Node: Suspending XEmacs1847760 +Node: System Environment1851102 +Node: User Identification1857769 +Node: Time of Day1861298 +Node: Time Conversion1864085 +Node: Timers1869125 +Node: Terminal Input1871298 +Node: Input Modes1871801 +Node: Translating Input1874214 +Node: Recording Input1878379 +Node: Terminal Output1880479 +Node: Flow Control1884102 +Node: Batch Mode1887894 +Node: X-Windows1889276 +Node: X Selections1890147 +Node: X Server1892357 +Node: Resources1892808 +Node: Server Data1898117 +Node: Grabs1899324 +Node: X Miscellaneous1900904 +Node: ToolTalk Support1903289 +Node: XEmacs ToolTalk API Summary1903506 +Node: Sending Messages1904806 +Node: Example of Sending Messages1905057 +Node: Elisp Interface for Sending Messages1906119 +Node: Receiving Messages1912511 +Node: Example of Receiving Messages1912734 +Node: Elisp Interface for Receiving Messages1913570 +Node: LDAP Support1917395 +Node: Building XEmacs with LDAP support1917891 +Node: XEmacs LDAP API1918869 +Node: LDAP Variables1919599 +Node: The High-Level LDAP API1922075 +Node: The Low-Level LDAP API1923180 +Node: The LDAP Lisp Object1923454 +Node: Opening and Closing a LDAP Connection1924007 +Node: Searching on a LDAP Server (Low-level)1925790 +Node: Syntax of Search Filters1927183 +Node: Internationalization1928481 +Node: I18N Levels 1 and 21928818 +Node: I18N Level 31929524 +Node: Level 3 Basics1929805 +Node: Level 3 Primitives1930638 +Node: Dynamic Messaging1932244 +Node: Domain Specification1932707 +Node: Documentation String Extraction1934610 +Node: I18N Level 41935528 +Node: MULE1935720 +Node: Internationalization Terminology1936831 +Node: Charsets1945365 +Node: Charset Properties1946061 +Node: Basic Charset Functions1950747 +Node: Charset Property Functions1952928 +Node: Predefined Charsets1954970 +Node: MULE Characters1957890 +Node: Composite Characters1958737 +Node: ISO 20221959991 +Node: Coding Systems1966133 +Node: Coding System Types1968054 +Node: EOL Conversion1969873 +Node: Coding System Properties1971056 +Node: Basic Coding System Functions1974908 +Node: Coding System Property Functions1976812 +Node: Encoding and Decoding Text1977370 +Node: Detection of Textual Encoding1978506 +Node: Big5 and Shift-JIS Functions1980042 +Node: CCL1981130 +Node: CCL Syntax1984234 +Node: CCL Statements1985822 +Node: CCL Expressions1990470 +Node: Calling CCL1993009 +Node: CCL Examples1995998 +Node: Category Tables1996135 +Node: Tips1998493 +Node: Style Tips1999134 +Node: Compilation Tips2008653 +Node: Documentation Tips2010567 +Node: Comment Tips2016076 +Node: Library Headers2019078 +Node: Building XEmacs and Object Allocation2023050 +Node: Building XEmacs2023933 +Node: Pure Storage2030268 +Node: Garbage Collection2033056 +Node: Standard Errors2044195 +Node: Standard Buffer-Local Variables2048404 +Node: Standard Keymaps2051037 +Node: Standard Hooks2054769 +Node: Index2062269  End Tag Table diff --git a/info/lispref.info-5 b/info/lispref.info-5 index 9b6e82b..b423272 100644 --- a/info/lispref.info-5 +++ b/info/lispref.info-5 @@ -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.  diff --git a/info/lispref.info-7 b/info/lispref.info-7 index b24b1a9..2e16da4 100644 --- a/info/lispref.info-7 +++ b/info/lispref.info-7 @@ -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.  -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.  -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.) +  -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. - -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 #) - ;; Evaluate it. - (eval buffer) - -| # - => # - diff --git a/info/lispref.info-8 b/info/lispref.info-8 index 445d0fc..e9ddbe6 100644 --- a/info/lispref.info-8 +++ b/info/lispref.info-8 @@ -50,6 +50,43 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +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 #) + ;; Evaluate it. + (eval buffer) + -| # + => # + + File: lispref.info, Node: Symbol Forms, Next: Classifying Lists, Prev: Self-Evaluating Forms, Up: Forms Symbol Forms diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 354d52c..07877cd 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,12 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-13 Martin Buchholz + + * etags.c: Upgrade to version 13.44. + Only added (unsigned char) casts to calls like isspace (*cp). + 2000-02-07 Martin Buchholz * XEmacs 21.2.28 is released. diff --git a/lib-src/cvtmail.c b/lib-src/cvtmail.c index 7c689b8..15099ce 100644 --- a/lib-src/cvtmail.c +++ b/lib-src/cvtmail.c @@ -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); diff --git a/lib-src/ellcc.c b/lib-src/ellcc.c index c8bfb8c..0207a92 100644 --- a/lib-src/ellcc.c +++ b/lib-src/ellcc.c @@ -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; } } diff --git a/lib-src/etags.c b/lib-src/etags.c index 12bdc61..680f145 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -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 /* 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 # include # include @@ -62,12 +69,15 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33"; # define DOS_NT # include # endif +#else +# define MSDOS FALSE #endif /* MSDOS */ #ifdef WINDOWSNT # include # include # include +# include # include # 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 -#include -#endif +#else /* !WINDOWSNT */ +# ifdef STDC_HEADERS +# include +# include +# else + extern char *getenv (); +# endif +#endif /* !WINDOWSNT */ #ifdef HAVE_UNISTD_H # include #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 #include #include +#ifndef errno + extern int errno; +#endif #include #include @@ -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)); 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 #include #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 */ -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) } /* 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) } } -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) /* 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 , 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 * 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 */ -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) #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; } -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) /* 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; diff --git a/lib-src/fakemail.c b/lib-src/fakemail.c index 8467c02..a78036e 100644 --- a/lib-src/fakemail.c +++ b/lib-src/fakemail.c @@ -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) diff --git a/lib-src/gnuclient.c b/lib-src/gnuclient.c index 1954be4..b2f5c19 100644 --- a/lib-src/gnuclient.c +++ b/lib-src/gnuclient.c @@ -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) diff --git a/lib-src/gnuserv.h b/lib-src/gnuserv.h index 4e2ac5a..df53605 100644 --- a/lib-src/gnuserv.h +++ b/lib-src/gnuserv.h @@ -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 diff --git a/lib-src/gnuslib.c b/lib-src/gnuslib.c index 9022d48..c16aa31 100644 --- a/lib-src/gnuslib.c +++ b/lib-src/gnuslib.c @@ -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) { diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index cc55e8c..141287a 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -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; diff --git a/lib-src/sorted-doc.c b/lib-src/sorted-doc.c index 0b77c45..d66ce77 100644 --- a/lib-src/sorted-doc.c +++ b/lib-src/sorted-doc.c @@ -14,9 +14,6 @@ #include /* for qsort() and malloc() */ #include 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 */ diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 739317e..d61cb8d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,30 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-09 Martin Buchholz + + * 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 + + * cl-extra.el (cl-remprop): Remove. remprop is now in C. + +2000-02-07 Kyle Jones + + * 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 + + * 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 * XEmacs 21.2.28 is released. diff --git a/lisp/cl-extra.el b/lisp/cl-extra.el index cac76f9..97ca310 100644 --- a/lisp/cl-extra.el +++ b/lisp/cl-extra.el @@ -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. diff --git a/lisp/cl-macs.el b/lisp/cl-macs.el index 744ecc6..841d5e0 100644 --- a/lisp/cl-macs.el +++ b/lisp/cl-macs.el @@ -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)))) diff --git a/lisp/etags.el b/lisp/etags.el index 3414298..cba03e0 100644 --- a/lisp/etags.el +++ b/lisp/etags.el @@ -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 diff --git a/lisp/frame.el b/lisp/frame.el index 2e40d57..8224377 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -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) diff --git a/lisp/gutter-items.el b/lisp/gutter-items.el index 7f50e18..fd8905c 100644 --- a/lisp/gutter-items.el +++ b/lisp/gutter-items.el @@ -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 diff --git a/lisp/toolbar.el b/lisp/toolbar.el index 5c80dda..772abf5 100644 --- a/lisp/toolbar.el +++ b/lisp/toolbar.el @@ -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)) diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index 36da340..3424d79 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,3 +1,12 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-09 Valdis Kletnieks + + * config.h.in (ATHENA_INCLUDE): Workaround bugs in both xlc and + old gccs. + 2000-02-07 Martin Buchholz * XEmacs 21.2.28 is released. diff --git a/lwlib/config.h.in b/lwlib/config.h.in index de51ba5..af8ab48 100644 --- a/lwlib/config.h.in +++ b/lwlib/config.h.in @@ -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) +#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_ */ diff --git a/lwlib/lwlib-Xaw.c b/lwlib/lwlib-Xaw.c index 5329976..3ff9460 100644 --- a/lwlib/lwlib-Xaw.c +++ b/lwlib/lwlib-Xaw.c @@ -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; diff --git a/lwlib/lwlib-Xm.c b/lwlib/lwlib-Xm.c index 99db011..87008b5 100644 --- a/lwlib/lwlib-Xm.c +++ b/lwlib/lwlib-Xm.c @@ -1038,7 +1038,7 @@ static char disable_dnd_trans[] = ": "; 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; diff --git a/lwlib/lwlib-internal.h b/lwlib/lwlib-internal.h index df3d66d..5ec3bc9 100644 --- a/lwlib/lwlib-internal.h +++ b/lwlib/lwlib-internal.h @@ -39,7 +39,7 @@ typedef Widget typedef struct _widget_creation_entry { - CONST char* type; + const char* type; widget_creation_function function; } widget_creation_entry; diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c index 1ecef08..35be751 100644 --- a/lwlib/lwlib.c +++ b/lwlib/lwlib.c @@ -76,7 +76,7 @@ static void free_widget_value_args (widget_value* wv); /* 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) /* 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) /* 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) diff --git a/lwlib/lwlib.h b/lwlib/lwlib.h index 9e4b20b..458e499 100644 --- a/lwlib/lwlib.h +++ b/lwlib/lwlib.h @@ -1,17 +1,8 @@ #ifndef INCLUDED_lwlib_h_ #define INCLUDED_lwlib_h_ -#undef CONST - #include -/* 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, diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c index e6d31ae..c7ef3b4 100644 --- a/lwlib/xlwmenu.c +++ b/lwlib/xlwmenu.c @@ -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[] = { diff --git a/man/ChangeLog b/man/ChangeLog index 63f736f..c548505 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,18 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-16 Martin Buchholz + + * internals/internals.texi: Integrate Olivier's portable dumping docs. + +2000-02-09 Martin Buchholz + + * lispref/symbols.texi (Object Plists): + Document `object-plist'. + Document `remprop'. + Rework all plist frobbing docs for accuracy. + 2000-02-07 Martin Buchholz * XEmacs 21.2.28 is released. diff --git a/man/cl.texi b/man/cl.texi index 8250898..a3c3100 100644 --- a/man/cl.texi +++ b/man/cl.texi @@ -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 diff --git a/man/emodules.texi b/man/emodules.texi index 2e52fa2..5ca73df 100644 --- a/man/emodules.texi +++ b/man/emodules.texi @@ -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 diff --git a/man/internals/internals.texi b/man/internals/internals.texi index 92819b7..c858f39 100644 --- a/man/internals/internals.texi +++ b/man/internals/internals.texi @@ -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. diff --git a/man/lispref/strings.texi b/man/lispref/strings.texi index 94b49a0..d9d00a0 100644 --- a/man/lispref/strings.texi +++ b/man/lispref/strings.texi @@ -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 diff --git a/man/lispref/symbols.texi b/man/lispref/symbols.texi index 87315d5..ef25af8 100644 --- a/man/lispref/symbols.texi +++ b/man/lispref/symbols.texi @@ -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: diff --git a/nt/ChangeLog b/nt/ChangeLog index 5145ee7..7565951 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,12 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-06 Mike Alexander + + * xemacs.mak (install): Copy xemacs.dmp if using the portable + dumper. + 2000-02-07 Martin Buchholz * XEmacs 21.2.28 is released. diff --git a/nt/config.h b/nt/config.h index aa27727..9a155f0 100644 --- a/nt/config.h +++ b/nt/config.h @@ -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. diff --git a/nt/xemacs.mak b/nt/xemacs.mak index 19bed41..5b4aef6 100644 --- a/nt/xemacs.mak +++ b/nt/xemacs.mak @@ -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\" diff --git a/src/.cvsignore b/src/.cvsignore index afa30ff..86278de 100644 --- a/src/.cvsignore +++ b/src/.cvsignore @@ -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 diff --git a/src/ChangeLog b/src/ChangeLog index 1bc0d94..b484860 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,328 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-15 Olivier Galibert + + * fns.c (size_bit_vector): Fix computation of the size. + +2000-02-15 Martin Buchholz + + * *.[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 + + * 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 + + * 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 + + * gui.c (gui_item_accelerator): Return the first underlined + character in item name. + +2000-02-11 Kirill 'Big K' Katsnelson + + * 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 + + * frame.c (change_frame_size_1): Undo 2000-02-03 change. + +1999-12-20 Yoshiki Hayashi + + * syntax.c (scan_words): Always advance at least one character. + +2000-02-13 Andy Piper + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * .cvsignore: Ignore portable dumper xemacs.dmp file + +2000-02-09 Andy Piper + + * 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 + + * gui-msw.c (Fmswindows_shell_execute): Make + mswindows-shell-execute industrial strength. + +2000-02-08 Martin Buchholz + + * 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 + + * event-Xt.c (x_has_keysym): Use XConvertCase only if available. + * config.h.in: Add HAVE_XCONVERTCASE. + +2000-02-07 Andy Piper + + * glyphs.c (image_instance_layout): undo 2000-01-29 change since + it breaks many things. + +2000-02-07 Jan Vroonhof + + * 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 * XEmacs 21.2.28 is released. diff --git a/src/README b/src/README index 29dbb22..2c591c1 100644 --- a/src/README +++ b/src/README @@ -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. diff --git a/src/alloc.c b/src/alloc.c index 0dfc959..89f3040 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -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; 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; inb_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; } diff --git a/src/balloon-x.c b/src/balloon-x.c index 523ddc3..deb7861 100644 --- a/src/balloon-x.c +++ b/src/balloon-x.c @@ -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; diff --git a/src/balloon_help.c b/src/balloon_help.c index 3410129..f0b95ef 100644 --- a/src/balloon_help.c +++ b/src/balloon_help.c @@ -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); diff --git a/src/balloon_help.h b/src/balloon_help.h index 4498ab1..d36bef7 100644 --- a/src/balloon_help.h +++ b/src/balloon_help.h @@ -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); diff --git a/src/broken-sun.h b/src/broken-sun.h index eef4e80..946dddf 100644 --- a/src/broken-sun.h +++ b/src/broken-sun.h @@ -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 /* 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 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); diff --git a/src/buffer.c b/src/buffer.c index b7c18f9..3be44f8 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -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); \ diff --git a/src/buffer.h b/src/buffer.h index ae4de31..b56d8a5 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -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, diff --git a/src/bytecode.c b/src/bytecode.c index e670665..fd35a0e 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -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) { diff --git a/src/callint.c b/src/callint.c index adc4160..08173ff 100644 --- a/src/callint.c +++ b/src/callint.c @@ -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); diff --git a/src/callproc.c b/src/callproc.c index 54ec8d0..5b2dfea 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -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 diff --git a/src/cm.c b/src/cm.c index c0dfd09..3e5fa89 100644 --- 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 diff --git a/src/cm.h b/src/cm.h index 3a70891..be215d2 100644 --- 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) */ diff --git a/src/config.h.in b/src/config.h.in index b7d25c0..3ca219b 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -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 diff --git a/src/console-msw.h b/src/console-msw.h index fe28e64..afbd3b2 100644 --- a/src/console-msw.h +++ b/src/console-msw.h @@ -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 #include /* 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, diff --git a/src/console-stream.c b/src/console-stream.c index 7899bc6..2dd05ac 100644 --- a/src/console-stream.c +++ b/src/console-stream.c @@ -171,7 +171,7 @@ stream_init_frame_1 (struct frame *f, Lisp_Object props) static int stream_text_width (struct frame *f, struct face_cachel *cachel, - CONST Emchar *str, Charcount len) + const Emchar *str, Charcount len) { return len; } diff --git a/src/console-tty.h b/src/console-tty.h index 024eaf5..ba05621 100644 --- a/src/console-tty.h +++ b/src/console-tty.h @@ -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 */ diff --git a/src/console-x.c b/src/console-x.c index 05d9ac3..7a45d9d 100644 --- a/src/console-x.c +++ b/src/console-x.c @@ -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); diff --git a/src/console-x.h b/src/console-x.h index e4f9c19..6a60189 100644 --- a/src/console-x.h +++ b/src/console-x.h @@ -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); diff --git a/src/console.c b/src/console.c index ae16eaa..0c7c2ad 100644 --- a/src/console.c +++ b/src/console.c @@ -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! diff --git a/src/console.h b/src/console.h index 9975bcd..27b62b7 100644 --- a/src/console.h +++ b/src/console.h @@ -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); diff --git a/src/data.c b/src/data.c index 8036e19..2309297 100644 --- a/src/data.c +++ b/src/data.c @@ -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; diff --git a/src/device-x.c b/src/device-x.c index 8b29038..27e7daf 100644 --- a/src/device-x.c +++ b/src/device-x.c @@ -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; diff --git a/src/device.c b/src/device.c index 2de9fed..458d617 100644 --- a/src/device.c +++ b/src/device.c @@ -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, /* diff --git a/src/device.h b/src/device.h index 8dd7d29..a95c3df 100644 --- a/src/device.h +++ b/src/device.h @@ -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. */ diff --git a/src/dialog-x.c b/src/dialog-x.c index dc3ee71..bd57d0d 100644 --- a/src/dialog-x.c +++ b/src/dialog-x.c @@ -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" }; diff --git a/src/dired.c b/src/dired.c index b7077e3..c987db2 100644 --- a/src/dired.c +++ b/src/dired.c @@ -711,7 +711,7 @@ user_name_completion (Lisp_Object user, int all_flag, int *uniq) Lisp_Object -make_directory_hash_table (CONST char *path) +make_directory_hash_table (const char *path) { DIR *d; if ((d = opendir (path))) diff --git a/src/doc.c b/src/doc.c index 9cf7e8b..d683fba 100644 --- a/src/doc.c +++ b/src/doc.c @@ -392,7 +392,7 @@ translation. } 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", diff --git a/src/doprnt.c b/src/doprnt.c index 8b5744c..fabbf99 100644 --- a/src/doprnt.c +++ b/src/doprnt.c @@ -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, ...) { diff --git a/src/dynarr.c b/src/dynarr.c index da51455..9a173a9 100644 --- a/src/dynarr.c +++ b/src/dynarr.c @@ -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; diff --git a/src/editfns.c b/src/editfns.c index 2b06aec..306315e 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -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); diff --git a/src/elhash.c b/src/elhash.c index 426f804..251e549 100644 --- a/src/elhash.c +++ b/src/elhash.c @@ -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; +} + /* 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 diff --git a/src/emacs.c b/src/emacs.c index cb03ac4..02ca97d 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -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) 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); diff --git a/src/emodules.c b/src/emodules.c index b6ad9ba..bcd8f01 100644 --- a/src/emodules.c +++ b/src/emodules.c @@ -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; diff --git a/src/emodules.h b/src/emodules.h index 575da9f..71d5726 100644 --- a/src/emodules.h +++ b/src/emodules.h @@ -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) diff --git a/src/eval.c b/src/eval.c index 962fab8..50a7d33 100644 --- a/src/eval.c +++ b/src/eval.c @@ -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) ? "#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); diff --git a/src/event-Xt.c b/src/event-Xt.c index e1d7006..cb0115f 100644 --- a/src/event-Xt.c +++ b/src/event-Xt.c @@ -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) diff --git a/src/event-msw.c b/src/event-msw.c index c5c3d2f..6d37617 100644 --- a/src/event-msw.c +++ b/src/event-msw.c @@ -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) { diff --git a/src/event-stream.c b/src/event-stream.c index 5680725..5dccba3 100644 --- a/src/event-stream.c +++ b/src/event-stream.c @@ -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, "#", @@ -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)); } diff --git a/src/events.c b/src/events.c index f4648f5..8d8026d 100644 --- a/src/events.c +++ b/src/events.c @@ -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"; diff --git a/src/extents.c b/src/extents.c index 11cba96..686ce82 100644 --- a/src/extents.c +++ b/src/extents.c @@ -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); + /************************************************************************/ /* basic extent accessors */ diff --git a/src/extw-Xt.c b/src/extw-Xt.c index eac11fe..2568fcf 100644 --- a/src/extw-Xt.c +++ b/src/extw-Xt.c @@ -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 diff --git a/src/faces.c b/src/faces.c index 417f170..215f67d 100644 --- a/src/faces.c +++ b/src/faces.c @@ -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)), diff --git a/src/file-coding.c b/src/file-coding.c index 78afa01..fca56b0 100644 --- a/src/file-coding.c +++ b/src/file-coding.c @@ -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; diff --git a/src/fileio.c b/src/fileio.c index 01cf988..9d1beca 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -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; diff --git a/src/floatfns.c b/src/floatfns.c index d27de65..a6711fc 100644 --- a/src/floatfns.c +++ b/src/floatfns.c @@ -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) diff --git a/src/fns.c b/src/fns.c index 8a832a2..d5f5ae3 100644 --- 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); 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 */ } @@ -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]; diff --git a/src/frame-msw.c b/src/frame-msw.c index d86dc40..ff640f2 100644 --- a/src/frame-msw.c +++ b/src/frame-msw.c @@ -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)))); + } +} + + 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 diff --git a/src/frame-x.c b/src/frame-x.c index 9a25460..c81b27e 100644 --- a/src/frame-x.c +++ b/src/frame-x.c @@ -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; diff --git a/src/frame.c b/src/frame.c index a17ea93..3c10854 100644 --- a/src/frame.c +++ b/src/frame.c @@ -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); - 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. */ + +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; +} /***************************************************************************/ @@ -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 diff --git a/src/frame.h b/src/frame.h index 93669da..a811476 100644 --- a/src/frame.h +++ b/src/frame.h @@ -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, diff --git a/src/free-hook.c b/src/free-hook.c index d243aeb..5022b57 100644 --- a/src/free-hook.c +++ b/src/free-hook.c @@ -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 diff --git a/src/general.c b/src/general.c index e783a6d..594d4fc 100644 --- a/src/general.c +++ b/src/general.c @@ -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"); diff --git a/src/glyphs-eimage.c b/src/glyphs-eimage.c index 970038d..79b4f87 100644 --- a/src/glyphs-eimage.c +++ b/src/glyphs-eimage.c @@ -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 diff --git a/src/glyphs-msw.c b/src/glyphs-msw.c index 609b167..8111a47 100644 --- a/src/glyphs-msw.c +++ b/src/glyphs-msw.c @@ -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"); diff --git a/src/glyphs-widget.c b/src/glyphs-widget.c index b5881ca..41d1498 100644 --- a/src/glyphs-widget.c +++ b/src/glyphs-widget.c @@ -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; +} + /***************************************************************************** * 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; } @@ -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); diff --git a/src/glyphs-x.c b/src/glyphs-x.c index 5d6a083..d0f76da 100644 --- a/src/glyphs-x.c +++ b/src/glyphs-x.c @@ -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); - } -} - #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); diff --git a/src/glyphs-x.h b/src/glyphs-x.h index 13d7570..5f0fa1d 100644 --- a/src/glyphs-x.h +++ b/src/glyphs-x.h @@ -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_ */ diff --git a/src/glyphs.c b/src/glyphs.c index ce856cf..fb6754f 100644 --- a/src/glyphs.c +++ b/src/glyphs.c @@ -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); } } } diff --git a/src/glyphs.h b/src/glyphs.h index 2385eba..771ce7a 100644 --- a/src/glyphs.h +++ b/src/glyphs.h @@ -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 { diff --git a/src/gmalloc.c b/src/gmalloc.c index 56badba..472bd3f 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -25,8 +25,6 @@ # define STDC_HEADERS #endif -#define __const const - /* 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 */ diff --git a/src/gui-msw.c b/src/gui-msw.c index 67c84b0..029d616 100644 --- a/src/gui-msw.c +++ b/src/gui-msw.c @@ -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; } diff --git a/src/gui-x.c b/src/gui-x.c index d4b0eaf..58fb4f3 100644 --- a/src/gui-x.c +++ b/src/gui-x.c @@ -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 */ diff --git a/src/gui-x.h b/src/gui-x.h index 640b296..d8e581a 100644 --- a/src/gui-x.h +++ b/src/gui-x.h @@ -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_ */ diff --git a/src/gui.c b/src/gui.c index 12d4684..d00df80 100644 --- 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); } diff --git a/src/gui.h b/src/gui.h index 20b0d5a..cdc4a39 100644 --- 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; diff --git a/src/hash.c b/src/hash.c index 8c6a0ea..71e3b44 100644 --- a/src/hash.c +++ b/src/hash.c @@ -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) : diff --git a/src/hash.h b/src/hash.h index b480267..4e4787c 100644 --- a/src/hash.h +++ b/src/hash.h @@ -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 */ diff --git a/src/input-method-xlib.c b/src/input-method-xlib.c index 044e409..fddbd25 100644 --- a/src/input-method-xlib.c +++ b/src/input-method-xlib.c @@ -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; diff --git a/src/insdel.c b/src/insdel.c index d34103c..22dee0f 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -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) { diff --git a/src/insdel.h b/src/insdel.h index 6258126..70452ae 100644 --- a/src/insdel.h +++ b/src/insdel.h @@ -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); diff --git a/src/intl.c b/src/intl.c index 7c06c74..a8a14d8 100644 --- a/src/intl.c +++ b/src/intl.c @@ -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; diff --git a/src/keymap.c b/src/keymap.c index 5c9162b..49a9fec 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -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); } diff --git a/src/line-number.c b/src/line-number.c index 2b930ba..b0ce90f 100644 --- a/src/line-number.c +++ b/src/line-number.c @@ -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; diff --git a/src/line-number.h b/src/line-number.h index 087976b..88aede0 100644 --- a/src/line-number.h +++ b/src/line-number.h @@ -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); diff --git a/src/linuxplay.c b/src/linuxplay.c index ab594f3..bf64eac 100644 --- a/src/linuxplay.c +++ b/src/linuxplay.c @@ -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) { diff --git a/src/lisp-disunion.h b/src/lisp-disunion.h index 8ed19df..39a96d8 100644 --- a/src/lisp-disunion.h +++ b/src/lisp-disunion.h @@ -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. */ diff --git a/src/lisp-union.h b/src/lisp-union.h index 54088cf..648f824 100644 --- a/src/lisp-union.h +++ b/src/lisp-union.h @@ -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. */ diff --git a/src/lisp.h b/src/lisp.h index b686084..83e08b5 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -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 #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; diff --git a/src/lread.c b/src/lread.c index a4505e0..c36153e 100644 --- a/src/lread.c +++ b/src/lread.c @@ -218,14 +218,14 @@ EXFUN (Fread_from_string, 3); 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++; diff --git a/src/lrecord.h b/src/lrecord.h index ca12997..94ebea2 100644 --- a/src/lrecord.h +++ b/src/lrecord.h @@ -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)) diff --git a/src/lstream.c b/src/lstream.c index 8c82733..ed9849c 100644 --- a/src/lstream.c +++ b/src/lstream.c @@ -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; diff --git a/src/lstream.h b/src/lstream.h index b9b0fc2..e1674c2 100644 --- a/src/lstream.h +++ b/src/lstream.h @@ -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); diff --git a/src/md5.c b/src/md5.c index 8e524f6..6f5f1bf 100644 --- 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; diff --git a/src/menubar.c b/src/menubar.c index 0460f26..df32322 100644 --- a/src/menubar.c +++ b/src/menubar.c @@ -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); diff --git a/src/menubar.h b/src/menubar.h index b92d00c..c67de98 100644 --- a/src/menubar.h +++ b/src/menubar.h @@ -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); diff --git a/src/minibuf.c b/src/minibuf.c index 1af7b81..f189636 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -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 diff --git a/src/mule-ccl.c b/src/mule-ccl.c index 5f2e60e..4d6aff2 100644 --- a/src/mule-ccl.c +++ b/src/mule-ccl.c @@ -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) diff --git a/src/mule-ccl.h b/src/mule-ccl.h index 90aad3b..6aac558 100644 --- a/src/mule-ccl.h +++ b/src/mule-ccl.h @@ -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); diff --git a/src/mule-charset.c b/src/mule-charset.c index 285fa69..bf0f718 100644 --- a/src/mule-charset.c +++ b/src/mule-charset.c @@ -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++; diff --git a/src/mule-charset.h b/src/mule-charset.h index 1d73c97..9e1ee3b 100644 --- a/src/mule-charset.h +++ b/src/mule-charset.h @@ -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_ */ diff --git a/src/nas.c b/src/nas.c index 7bab391..ceba9a2 100644 --- a/src/nas.c +++ b/src/nas.c @@ -108,7 +108,6 @@ #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; diff --git a/src/ndir.h b/src/ndir.h index 703e972..9684594 100644 --- a/src/ndir.h +++ b/src/ndir.h @@ -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); diff --git a/src/nt.c b/src/nt.c index 8797af3..e745609 100644 --- 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; diff --git a/src/ntheap.h b/src/ntheap.h index e991957..cb169d2 100644 --- a/src/ntheap.h +++ b/src/ntheap.h @@ -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_ */ diff --git a/src/ntplay.c b/src/ntplay.c index 398e27a..8ff0be7 100644 --- a/src/ntplay.c +++ b/src/ntplay.c @@ -19,7 +19,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/ #include -#undef CONST #include #include #include "sysfile.h" diff --git a/src/ntproc.c b/src/ntproc.c index 029ba1f..f15fe99 100644 --- a/src/ntproc.c +++ b/src/ntproc.c @@ -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. diff --git a/src/objects-msw.c b/src/objects-msw.c index fca8e11..726af9d 100644 --- a/src/objects-msw.c +++ b/src/objects-msw.c @@ -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 */ diff --git a/src/objects-tty.c b/src/objects-tty.c index 21e1774..b598c8d 100644 --- a/src/objects-tty.c +++ b/src/objects-tty.c @@ -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)) diff --git a/src/objects-x.c b/src/objects-x.c index 5ab99bc..3889347 100644 --- a/src/objects-x.c +++ b/src/objects-x.c @@ -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, diff --git a/src/objects.c b/src/objects.c index e980944..3cedafd 100644 --- a/src/objects.c +++ b/src/objects.c @@ -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, diff --git a/src/objects.h b/src/objects.h index c5d781d..49036d0 100644 --- a/src/objects.h +++ b/src/objects.h @@ -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 diff --git a/src/opaque.c b/src/opaque.c index a860cb1..51ea934 100644 --- a/src/opaque.c +++ b/src/opaque.c @@ -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, "#", @@ -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, "#", diff --git a/src/opaque.h b/src/opaque.h index 5420681..0350bd7 100644 --- a/src/opaque.h +++ b/src/opaque.h @@ -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 { diff --git a/src/print.c b/src/print.c index dabcab7..981e4f8 100644 --- a/src/print.c +++ b/src/print.c @@ -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) /* 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); } @@ -859,7 +859,7 @@ long_to_string (char *buffer, long number) } 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)); diff --git a/src/process-nt.c b/src/process-nt.c index 9799b79..ad56f70 100644 --- a/src/process-nt.c +++ b/src/process-nt.c @@ -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; diff --git a/src/process-unix.c b/src/process-unix.c index 41b766c..c4f8bbd 100644 --- a/src/process-unix.c +++ b/src/process-unix.c @@ -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; } diff --git a/src/process.c b/src/process.c index b2ddd52..643e123 100644 --- a/src/process.c +++ b/src/process.c @@ -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. } -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; diff --git a/src/process.h b/src/process.h index 472cd0e..8e230cf 100644 --- a/src/process.h +++ b/src/process.h @@ -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); diff --git a/src/procimpl.h b/src/procimpl.h index b8ce625..a6213e1 100644 --- a/src/procimpl.h +++ b/src/procimpl.h @@ -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_ */ diff --git a/src/profile.c b/src/profile.c index 111575b..5f2fbf6 100644 --- a/src/profile.c +++ b/src/profile.c @@ -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) { diff --git a/src/ralloc.c b/src/ralloc.c index 9c9b798..e091b2f 100644 --- a/src/ralloc.c +++ b/src/ralloc.c @@ -1319,7 +1319,7 @@ r_alloc_check (void) #include 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. */ diff --git a/src/redisplay-msw.c b/src/redisplay-msw.c index c3b55e0..12a5ae7 100644 --- a/src/redisplay-msw.c +++ b/src/redisplay-msw.c @@ -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 #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; diff --git a/src/redisplay-output.c b/src/redisplay-output.c index 0756eed..4d5fe0c 100644 --- a/src/redisplay-output.c +++ b/src/redisplay-output.c @@ -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); } diff --git a/src/redisplay-tty.c b/src/redisplay-tty.c index 66b9445..773eea3 100644 --- a/src/redisplay-tty.c +++ b/src/redisplay-tty.c @@ -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) 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), diff --git a/src/redisplay-x.c b/src/redisplay-x.c index 0122415..8d68173 100644 --- a/src/redisplay-x.c +++ b/src/redisplay-x.c @@ -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; diff --git a/src/redisplay.c b/src/redisplay.c index fa8e5e7..42858ff 100644 --- a/src/redisplay.c +++ b/src/redisplay.c @@ -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; } diff --git a/src/redisplay.h b/src/redisplay.h index 648dea8..e70254e 100644 --- a/src/redisplay.h +++ b/src/redisplay.h @@ -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. */ diff --git a/src/regex.c b/src/regex.c index 02daf79..27fbf6e 100644 --- a/src/regex.c +++ b/src/regex.c @@ -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 *) ®_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); #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 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 diff --git a/src/regex.h b/src/regex.h index c4fbd5e..08d8bd9 100644 --- a/src/regex.h +++ b/src/regex.h @@ -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); diff --git a/src/s/aix4.h b/src/s/aix4.h index 3bdd989..5836bd5 100644 --- a/src/s/aix4.h +++ b/src/s/aix4.h @@ -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 +# 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 */ diff --git a/src/s/mingw32.h b/src/s/mingw32.h index 32783cf..0e196fe 100644 --- a/src/s/mingw32.h +++ b/src/s/mingw32.h @@ -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); diff --git a/src/s/sol2.h b/src/s/sol2.h index 5ba8bfc..b306088 100644 --- a/src/s/sol2.h +++ b/src/s/sol2.h @@ -10,20 +10,6 @@ #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 diff --git a/src/s/windowsnt.h b/src/s/windowsnt.h index 594e93e..45395e2 100644 --- a/src/s/windowsnt.h +++ b/src/s/windowsnt.h @@ -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 */ diff --git a/src/search.c b/src/search.c index c9f49ae..46feb9c 100644 --- a/src/search.c +++ b/src/search.c @@ -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) diff --git a/src/select-x.c b/src/select-x.c index 2a15974..a2c41c2 100644 --- a/src/select-x.c +++ b/src/select-x.c @@ -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 diff --git a/src/sgiplay.c b/src/sgiplay.c index 222a3e6..e3ca2fa 100644 --- a/src/sgiplay.c +++ b/src/sgiplay.c @@ -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; diff --git a/src/sound.c b/src/sound.c index bb214f5..405df44 100644 --- a/src/sound.c +++ b/src/sound.c @@ -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, diff --git a/src/specifier.c b/src/specifier.c index 7846d11..cdb1cc3 100644 --- a/src/specifier.c +++ b/src/specifier.c @@ -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; } } diff --git a/src/specifier.h b/src/specifier.h index da40827..bb6472d 100644 --- a/src/specifier.h +++ b/src/specifier.h @@ -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: */ diff --git a/src/strcat.c b/src/strcat.c index f4a3a02..4881165 100644 --- a/src/strcat.c +++ b/src/strcat.c @@ -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. */ diff --git a/src/strcmp.c b/src/strcmp.c index c72b8ef..722cd0d 100644 --- a/src/strcmp.c +++ b/src/strcmp.c @@ -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 diff --git a/src/strcpy.c b/src/strcpy.c index 34c559f..21b5309 100644 --- a/src/strcpy.c +++ b/src/strcpy.c @@ -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 diff --git a/src/strftime.c b/src/strftime.c index cb0c111..3876617 100644 --- a/src/strftime.c +++ b/src/strftime.c @@ -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. */ diff --git a/src/sunOS-fix.c b/src/sunOS-fix.c index 57c6e36..252c65c 100644 --- a/src/sunOS-fix.c +++ b/src/sunOS-fix.c @@ -36,13 +36,13 @@ Boston, MA 02111-1307, USA. */ #include -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; diff --git a/src/sunplay.c b/src/sunplay.c index 4df9d68..a9c52af 100644 --- a/src/sunplay.c +++ b/src/sunplay.c @@ -33,14 +33,8 @@ #include #include -/* 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 #include -#undef CONST -#define CONST const #ifdef emacs # include @@ -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) diff --git a/src/symbols.c b/src/symbols.c index 4207525..ffb5367 100644 --- a/src/symbols.c +++ b/src/symbols.c @@ -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); /**********************************************************************/ @@ -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); diff --git a/src/symeval.h b/src/symeval.h index caf4490..41e2324 100644 --- a/src/symeval.h +++ b/src/symeval.h @@ -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_ */ diff --git a/src/syntax.c b/src/syntax.c index 4445803..ceb942d 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -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 */ diff --git a/src/syntax.h b/src/syntax.h index deb98e3..aa78eab 100644 --- a/src/syntax.h +++ b/src/syntax.h @@ -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); diff --git a/src/sysdep.c b/src/sysdep.c index 49661f4..b875b48 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -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 for XEmacs. */ /* Irix added here by gparker@sni-usa.com for XEmacs. */ /* NetBSD added here by James R Grinter 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; diff --git a/src/sysdep.h b/src/sysdep.h index c06a235..2911014 100644 --- a/src/sysdep.h +++ b/src/sysdep.h @@ -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_ */ diff --git a/src/sysdir.h b/src/sysdir.h index 6c84ce8..76f9cd86 100644 --- a/src/sysdir.h +++ b/src/sysdir.h @@ -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 diff --git a/src/sysdll.c b/src/sysdll.c index abc70b8..2bcfc67 100644 --- a/src/sysdll.c +++ b/src/sysdll.c @@ -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 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 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"; diff --git a/src/sysdll.h b/src/sysdll.h index bdc8c3d..ebb8a79 100644 --- a/src/sysdll.h +++ b/src/sysdll.h @@ -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 } diff --git a/src/sysfile.h b/src/sysfile.h index 932a503..69179b7 100644 --- a/src/sysfile.h +++ b/src/sysfile.h @@ -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 diff --git a/src/syssignal.h b/src/syssignal.h index c2c8423..cacf07b 100644 --- a/src/syssignal.h +++ b/src/syssignal.h @@ -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 diff --git a/src/systime.h b/src/systime.h index d0f4ae1..159139f 100644 --- a/src/systime.h +++ b/src/systime.h @@ -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 { \ diff --git a/src/termcap.c b/src/termcap.c index 1c5529e..1b9fcb0 100644 --- a/src/termcap.c +++ b/src/termcap.c @@ -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; diff --git a/src/terminfo.c b/src/terminfo.c index bc49f8c..eaf44b9 100644 --- a/src/terminfo.c +++ b/src/terminfo.c @@ -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) { diff --git a/src/tooltalk.c b/src/tooltalk.c index 20a4a0a..c3359e0 100644 --- a/src/tooltalk.c +++ b/src/tooltalk.c @@ -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); } diff --git a/src/tparam.c b/src/tparam.c index c432ed4..c4b6bfd 100644 --- a/src/tparam.c +++ b/src/tparam.c @@ -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; diff --git a/src/unexcw.c b/src/unexcw.c index 74f131e..7b3db7c 100644 --- a/src/unexcw.c +++ b/src/unexcw.c @@ -39,7 +39,6 @@ unexec (char *, char *, void *, void *, void *) } #else -#undef CONST #ifndef MAX_PATH #define MAX_PATH 260 #endif diff --git a/src/unexec.c b/src/unexec.c index 28ed2b4..ae2f945 100644 --- a/src/unexec.c +++ b/src/unexec.c @@ -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); diff --git a/src/unexelf.c b/src/unexelf.c index 733a0f6..d91ae33 100644 --- a/src/unexelf.c +++ b/src/unexelf.c @@ -413,7 +413,7 @@ Filesz Memsz Flags Align #define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1) #else #include -extern void fatal (CONST char *, ...); +extern void fatal (const char *, ...); #endif #include diff --git a/src/unexfreebsd.c b/src/unexfreebsd.c index 0a97488..790d549 100644 --- a/src/unexfreebsd.c +++ b/src/unexfreebsd.c @@ -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 - "); diff --git a/src/unexhp9k3.c b/src/unexhp9k3.c index 9bca2a9..4240ff1 100644 --- a/src/unexhp9k3.c +++ b/src/unexhp9k3.c @@ -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 - "); diff --git a/src/unexnt.c b/src/unexnt.c index 38fac1f..feefef8 100644 --- a/src/unexnt.c +++ b/src/unexnt.c @@ -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; diff --git a/src/unexsunos4.c b/src/unexsunos4.c index 0edd44d..d7f825c 100644 --- a/src/unexsunos4.c +++ b/src/unexsunos4.c @@ -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 - "); diff --git a/src/vm-limit.c b/src/vm-limit.c index 3294f12..404534e 100644 --- a/src/vm-limit.c +++ b/src/vm-limit.c @@ -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 */ diff --git a/src/window.c b/src/window.c index 3a86d72..7a6eb7a 100644 --- a/src/window.c +++ b/src/window.c @@ -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); diff --git a/src/xgccache.c b/src/xgccache.c index 956b809..7a21c5c 100644 --- a/src/xgccache.c +++ b/src/xgccache.c @@ -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 */ diff --git a/src/xintrinsic.h b/src/xintrinsic.h index f0cbba6..cc4bb0a 100644 --- a/src/xintrinsic.h +++ b/src/xintrinsic.h @@ -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 -#ifdef CONST_IS_LOSING -# define CONST -#else -# define CONST const -#endif - #endif /* INCLUDED_xintrinsic_h_ */ diff --git a/src/xintrinsicp.h b/src/xintrinsicp.h index 2f1caf6..86836de 100644 --- a/src/xintrinsicp.h +++ b/src/xintrinsicp.h @@ -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 #include #include /* apparently some IntrinsicP.h don't have this */ -#ifdef CONST_IS_LOSING -# define CONST -#else -# define CONST const -#endif - #endif /* INCLUDED_xintrinsicp_h_ */ diff --git a/src/xmu.c b/src/xmu.c index 1f1261a..afe04be 100644 --- a/src/xmu.c +++ b/src/xmu.c @@ -53,10 +53,10 @@ #include -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; diff --git a/src/xmu.h b/src/xmu.h index bcdfc0d..d6cebe4 100644 --- a/src/xmu.h +++ b/src/xmu.h @@ -24,12 +24,12 @@ #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)) diff --git a/tests/ChangeLog b/tests/ChangeLog index 01e590a..e3f98c9 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +2000-02-16 Martin Buchholz + + * XEmacs 21.2.29 is released. + +2000-02-13 Martin Buchholz + + * automated/lisp-tests.el: Add subseq tests. + 2000-02-07 Martin Buchholz * XEmacs 21.2.28 is released. diff --git a/tests/automated/base64-tests.el b/tests/automated/base64-tests.el index fee7225..264ff6b 100644 --- a/tests/automated/base64-tests.el +++ b/tests/automated/base64-tests.el @@ -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... diff --git a/tests/automated/lisp-tests.el b/tests/automated/lisp-tests.el index 5893d17..9bf5ebb 100644 --- a/tests/automated/lisp-tests.el +++ b/tests/automated/lisp-tests.el @@ -875,4 +875,66 @@ (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)) diff --git a/version.sh b/version.sh index 763b4b9..9bdf523 100644 --- a/version.sh +++ b/version.sh @@ -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