xemacs-packages
mule-packages
site-packages
+gmon.out
+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
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
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in: Don't use rel_alloc if malloc() calls mmap().
+ Discover this by looking for M_MMAP_THRESHOLD.
+
+ * configure.in: Don't define POSIX_C_SOURCE on Solaris, due to
+ bugs in (at least) Solaris 2.5 headers.
+
+2000-01-29 Craig Lanning <CraigL@DyCon.com>
+
+ * configure.in: Fix detection of XPM on systems without X11.
+
+2000-02-11 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in:
+ * src/config.h.in:
+ Define _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED,
+ but only on tested Operating systems - Linux && SunOS >= 5.5.
+
+2000-02-09 Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
+
+ * aclocal.m4: Support dlls on aix[34].
+
+2000-02-09 Martin Buchholz <martin@xemacs.org>
+
+ * .cvsignore: Ignore gmon.out
+
+2000-02-08 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in: Sync Berkeley db autodetection with src/database.c
+
+2000-02-07 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in: check for XConvertCase.
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
2000-01-27 URA Hiroshi <ura@hiru.aoba.yokohama.jp>
+
* configure.in: added getaddrinfo and getnameinfo to AC_FUNC.
2000-01-26 Martin Buchholz <martin@xemacs.org>
# PIC is the default for these OSes.
;;
- os2*)
+ aix3* | aix4* | os2*)
# We can build DLLs from non-PIC.
;;
amigaos*)
external_widget | \
verbose | \
extra_verbose | \
- const_is_losing | \
usage_tracking | \
use_union_type | \
pdump | \
"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
;;
echo "$ac_t""$CPP" 1>&6
+
+
echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:2301: checking for AIX" >&5
+echo "configure:2303: checking for AIX" >&5
cat > conftest.$ac_ext <<EOF
-#line 2303 "configure"
+#line 2305 "configure"
#include "confdefs.h"
#ifdef _AIX
yes
fi
rm -f conftest*
-
-
+
echo $ac_n "checking for GNU libc""... $ac_c" 1>&6
-echo "configure:2330: checking for GNU libc" >&5
+echo "configure:2331: checking for GNU libc" >&5
cat > conftest.$ac_ext <<EOF
-#line 2332 "configure"
+#line 2333 "configure"
#include "confdefs.h"
#include <features.h>
int main() {
; 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
}
+case "$opsys" in
+ sol2)
+ { test "$extra_verbose" = "yes" && cat << \EOF
+ Defining __EXTENSIONS__
+EOF
+cat >> confdefs.h <<\EOF
+#define __EXTENSIONS__ 1
+EOF
+}
+
+ if test "$os_release" -ge 55; then
+ { test "$extra_verbose" = "yes" && cat << \EOF
+ Defining _XOPEN_SOURCE = 500
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE 500
+EOF
+}
+
+ { test "$extra_verbose" = "yes" && cat << \EOF
+ Defining _XOPEN_SOURCE_EXTENDED
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE_EXTENDED 1
+EOF
+}
+
+ fi ;;
+ linux)
+ { test "$extra_verbose" = "yes" && cat << \EOF
+ Defining _POSIX_C_SOURCE = 199506L
+EOF
+cat >> confdefs.h <<\EOF
+#define _POSIX_C_SOURCE 199506L
+EOF
+}
+
+ { test "$extra_verbose" = "yes" && cat << \EOF
+ Defining _XOPEN_SOURCE = 500
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE 500
+EOF
+}
+
+ { test "$extra_verbose" = "yes" && cat << \EOF
+ Defining _XOPEN_SOURCE_EXTENDED
+EOF
+cat >> confdefs.h <<\EOF
+#define _XOPEN_SOURCE_EXTENDED 1
+EOF
+}
+
+ ;;
+esac
cat > conftest.$ac_ext <<EOF
-#line 2366 "configure"
+#line 2422 "configure"
#include "confdefs.h"
int main () {
#if defined __SUNPRO_C
#endif
}
EOF
-if { (eval echo configure:2378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:2434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
:
else
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
done
echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6
-echo "configure:2702: checking for terminateAndUnload in -lC" >&5
+echo "configure:2758: checking for terminateAndUnload in -lC" >&5
ac_lib_var=`echo C'_'terminateAndUnload | sed 'y%./+-%__p_%'`
xe_check_libs=" -lC "
cat > conftest.$ac_ext <<EOF
-#line 2707 "configure"
+#line 2763 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
terminateAndUnload()
; return 0; }
EOF
-if { (eval echo configure:2718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
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 " ;;
done
fi
cat > conftest.$ac_ext <<EOF
-#line 2848 "configure"
+#line 2904 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
dash_r="$try_dash_r"
else
fi
after_morecore_hook_exists=yes
echo $ac_n "checking for malloc_get_state""... $ac_c" 1>&6
-echo "configure:2957: checking for malloc_get_state" >&5
+echo "configure:3013: checking for malloc_get_state" >&5
cat > conftest.$ac_ext <<EOF
-#line 2960 "configure"
+#line 3016 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char malloc_get_state(); below. */
; return 0; }
EOF
-if { (eval echo configure:2983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_malloc_get_state=yes"
else
fi
echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6
-echo "configure:3003: checking for malloc_set_state" >&5
+echo "configure:3059: checking for malloc_set_state" >&5
cat > conftest.$ac_ext <<EOF
-#line 3006 "configure"
+#line 3062 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char malloc_set_state(); below. */
; return 0; }
EOF
-if { (eval echo configure:3029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_malloc_set_state=yes"
else
fi
echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6
-echo "configure:3049: checking whether __after_morecore_hook exists" >&5
+echo "configure:3105: checking whether __after_morecore_hook exists" >&5
cat > conftest.$ac_ext <<EOF
-#line 3051 "configure"
+#line 3107 "configure"
#include "confdefs.h"
extern void (* __after_morecore_hook)();
int main() {
__after_morecore_hook = 0
; return 0; }
EOF
-if { (eval echo configure:3058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
# 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.
# 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=":"
# 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.
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3258: checking for $ac_hdr" >&5
+echo "configure:3314: checking for $ac_hdr" >&5
cat > conftest.$ac_ext <<EOF
-#line 3261 "configure"
+#line 3317 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3266: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3299: checking for $ac_hdr" >&5
+echo "configure:3355: checking for $ac_hdr" >&5
cat > conftest.$ac_ext <<EOF
-#line 3302 "configure"
+#line 3358 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3307: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3363: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3340: checking for $ac_hdr" >&5
+echo "configure:3396: checking for $ac_hdr" >&5
cat > conftest.$ac_ext <<EOF
-#line 3343 "configure"
+#line 3399 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3348: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3404: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
done
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:3378: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3434: checking for sys/wait.h that is POSIX.1 compatible" >&5
cat > conftest.$ac_ext <<EOF
-#line 3381 "configure"
+#line 3437 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
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
fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3421: checking for ANSI C header files" >&5
+echo "configure:3477: checking for ANSI C header files" >&5
cat > conftest.$ac_ext <<EOF
-#line 3424 "configure"
+#line 3480 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3488: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3449 "configure"
+#line 3505 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3467 "configure"
+#line 3523 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
if test $ac_cv_header_stdc = yes; then
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
cat > conftest.$ac_ext <<EOF
-#line 3485 "configure"
+#line 3541 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
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
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3522: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3578: checking whether time.h and sys/time.h may both be included" >&5
cat > conftest.$ac_ext <<EOF
-#line 3525 "configure"
+#line 3581 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
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
fi
echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:3558: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:3614: checking for sys_siglist declaration in signal.h or unistd.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 3561 "configure"
+#line 3617 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
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
echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6
-echo "configure:3598: checking for struct utimbuf" >&5
+echo "configure:3654: checking for struct utimbuf" >&5
cat > conftest.$ac_ext <<EOF
-#line 3600 "configure"
+#line 3656 "configure"
#include "confdefs.h"
#ifdef TIME_WITH_SYS_TIME
#include <sys/time.h>
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
rm -f conftest*
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3639: checking return type of signal handlers" >&5
+echo "configure:3695: checking return type of signal handlers" >&5
cat > conftest.$ac_ext <<EOF
-#line 3642 "configure"
+#line 3698 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
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
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3681: checking for size_t" >&5
+echo "configure:3737: checking for size_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 3684 "configure"
+#line 3740 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
fi
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3715: checking for pid_t" >&5
+echo "configure:3771: checking for pid_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 3718 "configure"
+#line 3774 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
fi
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3749: checking for uid_t in sys/types.h" >&5
+echo "configure:3805: checking for uid_t in sys/types.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 3752 "configure"
+#line 3808 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
fi
echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:3788: checking for mode_t" >&5
+echo "configure:3844: checking for mode_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 3791 "configure"
+#line 3847 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
fi
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3822: checking for off_t" >&5
+echo "configure:3878: checking for off_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 3825 "configure"
+#line 3881 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
fi
echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3856: checking for ssize_t" >&5
+echo "configure:3912: checking for ssize_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 3859 "configure"
+#line 3915 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
echo $ac_n "checking for struct timeval""... $ac_c" 1>&6
-echo "configure:3891: checking for struct timeval" >&5
+echo "configure:3947: checking for struct timeval" >&5
cat > conftest.$ac_ext <<EOF
-#line 3893 "configure"
+#line 3949 "configure"
#include "confdefs.h"
#ifdef TIME_WITH_SYS_TIME
#include <sys/time.h>
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
rm -f conftest*
echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:3931: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:3987: checking whether struct tm is in sys/time.h or time.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 3934 "configure"
+#line 3990 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <time.h>
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
fi
echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:3966: checking for tm_zone in struct tm" >&5
+echo "configure:4022: checking for tm_zone in struct tm" >&5
cat > conftest.$ac_ext <<EOF
-#line 3969 "configure"
+#line 4025 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_cv_struct_tm>
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
else
echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:4000: checking for tzname" >&5
+echo "configure:4056: checking for tzname" >&5
cat > conftest.$ac_ext <<EOF
-#line 4003 "configure"
+#line 4059 "configure"
#include "confdefs.h"
#include <time.h>
#ifndef tzname /* For SGI. */
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
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4039: checking for working const" >&5
+echo "configure:4095: checking for working const" >&5
cat > conftest.$ac_ext <<EOF
-#line 4042 "configure"
+#line 4098 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:4091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
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
echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4141: checking whether byte ordering is bigendian" >&5
+echo "configure:4197: checking whether byte ordering is bigendian" >&5
ac_cv_c_bigendian=unknown
# See if sys/param.h defines the BYTE_ORDER macro.
cat > conftest.$ac_ext <<EOF
-#line 4146 "configure"
+#line 4202 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
#endif
; return 0; }
EOF
-if { (eval echo configure:4157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
# It does; now see whether it defined to BIG_ENDIAN or not.
cat > conftest.$ac_ext <<EOF
-#line 4161 "configure"
+#line 4217 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
#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
rm -f conftest*
if test $ac_cv_c_bigendian = unknown; then
cat > conftest.$ac_ext <<EOF
-#line 4189 "configure"
+#line 4245 "configure"
#include "confdefs.h"
main () {
/* Are we little or big endian? From Harbison&Steele. */
exit (u.c[sizeof (long) - 1] == 1);
}
EOF
-if { (eval echo configure:4202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
ac_cv_c_bigendian=no
else
echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4229: checking size of short" >&5
+echo "configure:4285: checking size of short" >&5
cat > conftest.$ac_ext <<EOF
-#line 4232 "configure"
+#line 4288 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
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
exit 1
fi
echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:4271: checking size of int" >&5
+echo "configure:4327: checking size of int" >&5
cat > conftest.$ac_ext <<EOF
-#line 4274 "configure"
+#line 4330 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
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
echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4307: checking size of long" >&5
+echo "configure:4363: checking size of long" >&5
cat > conftest.$ac_ext <<EOF
-#line 4310 "configure"
+#line 4366 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
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
echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4343: checking size of long long" >&5
+echo "configure:4399: checking size of long long" >&5
cat > conftest.$ac_ext <<EOF
-#line 4346 "configure"
+#line 4402 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
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
echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4379: checking size of void *" >&5
+echo "configure:4435: checking size of void *" >&5
cat > conftest.$ac_ext <<EOF
-#line 4382 "configure"
+#line 4438 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
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
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:
echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:4462: checking for sin" >&5
+echo "configure:4518: checking for sin" >&5
cat > conftest.$ac_ext <<EOF
-#line 4465 "configure"
+#line 4521 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char sin(); below. */
; return 0; }
EOF
-if { (eval echo configure:4488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_sin=yes"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:4506: checking for sin in -lm" >&5
+echo "configure:4562: checking for sin in -lm" >&5
ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
xe_check_libs=" -lm "
cat > conftest.$ac_ext <<EOF
-#line 4511 "configure"
+#line 4567 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
sin()
; return 0; }
EOF
-if { (eval echo configure:4522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
cat > conftest.$ac_ext <<EOF
-#line 4566 "configure"
+#line 4622 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
return atanh(1.0) + asinh(1.0) + acosh(1.0);
; return 0; }
EOF
-if { (eval echo configure:4573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
{ test "$extra_verbose" = "yes" && cat << \EOF
Defining HAVE_INVERSE_HYPERBOLIC
rm -f conftest*
echo "checking type of mail spool file locking" 1>&6
-echo "configure:4590: checking type of mail spool file locking" >&5
+echo "configure:4646: checking type of mail spool file locking" >&5
for ac_func in lockf flock
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4594: checking for $ac_func" >&5
+echo "configure:4650: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 4597 "configure"
+#line 4653 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
case "$opsys" in decosf*)
echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6
-echo "configure:4693: checking for cma_open in -lpthreads" >&5
+echo "configure:4749: checking for cma_open in -lpthreads" >&5
ac_lib_var=`echo pthreads'_'cma_open | sed 'y%./+-%__p_%'`
xe_check_libs=" -lpthreads "
cat > conftest.$ac_ext <<EOF
-#line 4698 "configure"
+#line 4754 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
cma_open()
; return 0; }
EOF
-if { (eval echo configure:4709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
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;
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 ;;
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" && \
# 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
# First, try using that file with no special directory specified.
cat > conftest.$ac_ext <<EOF
-#line 4859 "configure"
+#line 4915 "configure"
#include "confdefs.h"
#include <$x_direct_test_include>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4864: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_save_LIBS="$LIBS"
LIBS="-l$x_direct_test_library $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4933 "configure"
+#line 4989 "configure"
#include "confdefs.h"
int main() {
${x_direct_test_function}()
; return 0; }
EOF
-if { (eval echo configure:4940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
LIBS="$ac_save_LIBS"
# We can link X programs with no special library path.
case "`(uname -sr) 2>/dev/null`" in
"SunOS 5"*)
echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:5049: checking whether -R must be followed by a space" >&5
+echo "configure:5105: checking whether -R must be followed by a space" >&5
ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
cat > conftest.$ac_ext <<EOF
-#line 5052 "configure"
+#line 5108 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:5059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_R_nospace=yes
else
else
LIBS="$ac_xsave_LIBS -R $x_libraries"
cat > conftest.$ac_ext <<EOF
-#line 5075 "configure"
+#line 5131 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:5082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_R_space=yes
else
else
echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:5118: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:5174: checking for dnet_ntoa in -ldnet" >&5
ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
xe_check_libs=" -ldnet "
cat > conftest.$ac_ext <<EOF
-#line 5123 "configure"
+#line 5179 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dnet_ntoa()
; return 0; }
EOF
-if { (eval echo configure:5134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:5158: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:5214: checking for dnet_ntoa in -ldnet_stub" >&5
ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
xe_check_libs=" -ldnet_stub "
cat > conftest.$ac_ext <<EOF
-#line 5163 "configure"
+#line 5219 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dnet_ntoa()
; return 0; }
EOF
-if { (eval echo configure:5174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
# The nsl library prevents programs from opening the X display
# on Irix 5.2, according to dickey@clark.net.
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:5203: checking for gethostbyname" >&5
+echo "configure:5259: checking for gethostbyname" >&5
cat > conftest.$ac_ext <<EOF
-#line 5206 "configure"
+#line 5262 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gethostbyname(); below. */
; return 0; }
EOF
-if { (eval echo configure:5229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gethostbyname=yes"
else
if test $ac_cv_func_gethostbyname = no; then
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:5250: checking for gethostbyname in -lnsl" >&5
+echo "configure:5306: checking for gethostbyname in -lnsl" >&5
ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
xe_check_libs=" -lnsl "
cat > conftest.$ac_ext <<EOF
-#line 5255 "configure"
+#line 5311 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:5266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
# -lsocket must be given before -lnsl if both are needed.
# We assume that if connect needs -lnsl, so does gethostbyname.
echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:5296: checking for connect" >&5
+echo "configure:5352: checking for connect" >&5
cat > conftest.$ac_ext <<EOF
-#line 5299 "configure"
+#line 5355 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char connect(); below. */
; return 0; }
EOF
-if { (eval echo configure:5322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_connect=yes"
else
xe_msg_checking="for connect in -lsocket"
test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS"
echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:5345: checking "$xe_msg_checking"" >&5
+echo "configure:5401: checking "$xe_msg_checking"" >&5
ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
xe_check_libs=" -lsocket $X_EXTRA_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5350 "configure"
+#line 5406 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
connect()
; return 0; }
EOF
-if { (eval echo configure:5361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
# gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:5385: checking for remove" >&5
+echo "configure:5441: checking for remove" >&5
cat > conftest.$ac_ext <<EOF
-#line 5388 "configure"
+#line 5444 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char remove(); below. */
; return 0; }
EOF
-if { (eval echo configure:5411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_remove=yes"
else
if test $ac_cv_func_remove = no; then
echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:5432: checking for remove in -lposix" >&5
+echo "configure:5488: checking for remove in -lposix" >&5
ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
xe_check_libs=" -lposix "
cat > conftest.$ac_ext <<EOF
-#line 5437 "configure"
+#line 5493 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
remove()
; return 0; }
EOF
-if { (eval echo configure:5448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:5472: checking for shmat" >&5
+echo "configure:5528: checking for shmat" >&5
cat > conftest.$ac_ext <<EOF
-#line 5475 "configure"
+#line 5531 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char shmat(); below. */
; return 0; }
EOF
-if { (eval echo configure:5498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_shmat=yes"
else
if test $ac_cv_func_shmat = no; then
echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:5519: checking for shmat in -lipc" >&5
+echo "configure:5575: checking for shmat in -lipc" >&5
ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
xe_check_libs=" -lipc "
cat > conftest.$ac_ext <<EOF
-#line 5524 "configure"
+#line 5580 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
shmat()
; return 0; }
EOF
-if { (eval echo configure:5535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
xe_msg_checking="for IceConnectionNumber in -lICE"
test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS"
echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:5571: checking "$xe_msg_checking"" >&5
+echo "configure:5627: checking "$xe_msg_checking"" >&5
ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
xe_check_libs=" -lICE $X_EXTRA_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5576 "configure"
+#line 5632 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
IceConnectionNumber()
; return 0; }
EOF
-if { (eval echo configure:5587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
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
ac_safe=`echo "X11/Intrinsic.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/Intrinsic.h""... $ac_c" 1>&6
-echo "configure:5788: checking for X11/Intrinsic.h" >&5
+echo "configure:5844: checking for X11/Intrinsic.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 5791 "configure"
+#line 5847 "configure"
#include "confdefs.h"
#include <X11/Intrinsic.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:5820: checking for XOpenDisplay in -lX11" >&5
+echo "configure:5876: checking for XOpenDisplay in -lX11" >&5
ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
xe_check_libs=" -lX11 "
cat > conftest.$ac_ext <<EOF
-#line 5825 "configure"
+#line 5881 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XOpenDisplay()
; return 0; }
EOF
-if { (eval echo configure:5836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
xe_msg_checking="for XGetFontProperty in -lX11"
test -n "-b i486-linuxaout" && xe_msg_checking="$xe_msg_checking using extra libs -b i486-linuxaout"
echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:5861: checking "$xe_msg_checking"" >&5
+echo "configure:5917: checking "$xe_msg_checking"" >&5
ac_lib_var=`echo X11'_'XGetFontProperty | sed 'y%./+-%__p_%'`
xe_check_libs=" -lX11 -b i486-linuxaout"
cat > conftest.$ac_ext <<EOF
-#line 5866 "configure"
+#line 5922 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XGetFontProperty()
; return 0; }
EOF
-if { (eval echo configure:5877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6
-echo "configure:5904: checking for XShapeSelectInput in -lXext" >&5
+echo "configure:5960: checking for XShapeSelectInput in -lXext" >&5
ac_lib_var=`echo Xext'_'XShapeSelectInput | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXext "
cat > conftest.$ac_ext <<EOF
-#line 5909 "configure"
+#line 5965 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XShapeSelectInput()
; return 0; }
EOF
-if { (eval echo configure:5920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6
-echo "configure:5943: checking for XtOpenDisplay in -lXt" >&5
+echo "configure:5999: checking for XtOpenDisplay in -lXt" >&5
ac_lib_var=`echo Xt'_'XtOpenDisplay | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXt "
cat > conftest.$ac_ext <<EOF
-#line 5948 "configure"
+#line 6004 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XtOpenDisplay()
; return 0; }
EOF
-if { (eval echo configure:5959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6
-echo "configure:5982: checking the version of X11 being used" >&5
+echo "configure:6038: checking the version of X11 being used" >&5
cat > conftest.$ac_ext <<EOF
-#line 5984 "configure"
+#line 6040 "configure"
#include "confdefs.h"
#include <X11/Intrinsic.h>
int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }
EOF
-if { (eval echo configure:5989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
./conftest foobar; x11_release=$?
else
}
+ for ac_func in XConvertCase
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6069: checking for $ac_func" >&5
+
+cat > conftest.$ac_ext <<EOF
+#line 6072 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ { test "$extra_verbose" = "yes" && cat << EOF
+ Defining $ac_tr_func
+EOF
+cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+}
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
for ac_hdr in X11/Xlocale.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6014: checking for $ac_hdr" >&5
+echo "configure:6127: checking for $ac_hdr" >&5
cat > conftest.$ac_ext <<EOF
-#line 6017 "configure"
+#line 6130 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6135: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
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 \
test -z "$with_xmu" && {
echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6
-echo "configure:6073: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
+echo "configure:6186: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
ac_lib_var=`echo Xmu'_'XmuReadBitmapDataFromFile | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXmu "
cat > conftest.$ac_ext <<EOF
-#line 6078 "configure"
+#line 6191 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmuReadBitmapDataFromFile()
; return 0; }
EOF
-if { (eval echo configure:6089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6
-echo "configure:6128: checking for main in -lXbsd" >&5
+echo "configure:6241: checking for main in -lXbsd" >&5
ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXbsd "
cat > conftest.$ac_ext <<EOF
-#line 6133 "configure"
+#line 6246 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
if test "$with_msw" != "no"; then
echo "checking for MS-Windows" 1>&6
-echo "configure:6177: checking for MS-Windows" >&5
+echo "configure:6290: checking for MS-Windows" >&5
echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6
-echo "configure:6180: checking for main in -lgdi32" >&5
+echo "configure:6293: checking for main in -lgdi32" >&5
ac_lib_var=`echo gdi32'_'main | sed 'y%./+-%__p_%'`
xe_check_libs=" -lgdi32 "
cat > conftest.$ac_ext <<EOF
-#line 6185 "configure"
+#line 6298 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
fi
cat > conftest.$ac_ext <<EOF
-#line 6258 "configure"
+#line 6371 "configure"
#include "confdefs.h"
#include <fcntl.h>
int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }
EOF
-if { (eval echo configure:6263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
{ test "$extra_verbose" = "yes" && cat << \EOF
Defining HAVE_MSG_SELECT
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\""
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
test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no
test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6
-echo "configure:6354: checking for X11/Xauth.h" >&5
+echo "configure:6466: checking for X11/Xauth.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6357 "configure"
+#line 6469 "configure"
#include "confdefs.h"
#include <X11/Xauth.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6474: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_xauth" && {
echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6
-echo "configure:6385: checking for XauGetAuthByAddr in -lXau" >&5
+echo "configure:6497: checking for XauGetAuthByAddr in -lXau" >&5
ac_lib_var=`echo Xau'_'XauGetAuthByAddr | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXau "
cat > conftest.$ac_ext <<EOF
-#line 6390 "configure"
+#line 6502 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XauGetAuthByAddr()
; return 0; }
EOF
-if { (eval echo configure:6401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for dir in "" "Tt/" "desktop/" ; do
ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6
-echo "configure:6446: checking for ${dir}tt_c.h" >&5
+echo "configure:6558: checking for ${dir}tt_c.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6449 "configure"
+#line 6561 "configure"
#include "confdefs.h"
#include <${dir}tt_c.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6454: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
xe_msg_checking="for tt_message_create in -ltt"
test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs"
echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6490: checking "$xe_msg_checking"" >&5
+echo "configure:6602: checking "$xe_msg_checking"" >&5
ac_lib_var=`echo tt'_'tt_message_create | sed 'y%./+-%__p_%'`
xe_check_libs=" -ltt $extra_libs"
cat > conftest.$ac_ext <<EOF
-#line 6495 "configure"
+#line 6607 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tt_message_create()
; return 0; }
EOF
-if { (eval echo configure:6506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
test -z "$with_cde" && { ac_safe=`echo "Dt/Dt.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for Dt/Dt.h""... $ac_c" 1>&6
-echo "configure:6563: checking for Dt/Dt.h" >&5
+echo "configure:6675: checking for Dt/Dt.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6566 "configure"
+#line 6678 "configure"
#include "confdefs.h"
#include <Dt/Dt.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6571: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6683: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_cde" && {
echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6
-echo "configure:6594: checking for DtDndDragStart in -lDtSvc" >&5
+echo "configure:6706: checking for DtDndDragStart in -lDtSvc" >&5
ac_lib_var=`echo DtSvc'_'DtDndDragStart | sed 'y%./+-%__p_%'`
xe_check_libs=" -lDtSvc "
cat > conftest.$ac_ext <<EOF
-#line 6599 "configure"
+#line 6711 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
DtDndDragStart()
; return 0; }
EOF
-if { (eval echo configure:6610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
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
fi
echo "checking for LDAP" 1>&6
-echo "configure:6700: checking for LDAP" >&5
+echo "configure:6812: checking for LDAP" >&5
test -z "$with_ldap" && { ac_safe=`echo "ldap.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ldap.h""... $ac_c" 1>&6
-echo "configure:6703: checking for ldap.h" >&5
+echo "configure:6815: checking for ldap.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6706 "configure"
+#line 6818 "configure"
#include "confdefs.h"
#include <ldap.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for lber.h""... $ac_c" 1>&6
-echo "configure:6734: checking for lber.h" >&5
+echo "configure:6846: checking for lber.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 6737 "configure"
+#line 6849 "configure"
#include "confdefs.h"
#include <lber.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6742: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test "$with_ldap" != "no"; then
echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6
-echo "configure:6766: checking for ldap_search in -lldap" >&5
+echo "configure:6878: checking for ldap_search in -lldap" >&5
ac_lib_var=`echo ldap'_'ldap_search | sed 'y%./+-%__p_%'`
xe_check_libs=" -lldap "
cat > conftest.$ac_ext <<EOF
-#line 6771 "configure"
+#line 6883 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_search()
; return 0; }
EOF
-if { (eval echo configure:6782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
xe_msg_checking="for ldap_open in -lldap"
test -n "-llber" && xe_msg_checking="$xe_msg_checking using extra libs -llber"
echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6807: checking "$xe_msg_checking"" >&5
+echo "configure:6919: checking "$xe_msg_checking"" >&5
ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
xe_check_libs=" -lldap -llber"
cat > conftest.$ac_ext <<EOF
-#line 6812 "configure"
+#line 6924 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_open()
; return 0; }
EOF
-if { (eval echo configure:6823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
xe_msg_checking="for ldap_open in -lldap"
test -n "-llber -lkrb" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb"
echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6848: checking "$xe_msg_checking"" >&5
+echo "configure:6960: checking "$xe_msg_checking"" >&5
ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
xe_check_libs=" -lldap -llber -lkrb"
cat > conftest.$ac_ext <<EOF
-#line 6853 "configure"
+#line 6965 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_open()
; return 0; }
EOF
-if { (eval echo configure:6864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
xe_msg_checking="for ldap_open in -lldap"
test -n "-llber -lkrb -ldes" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb -ldes"
echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6889: checking "$xe_msg_checking"" >&5
+echo "configure:7001: checking "$xe_msg_checking"" >&5
ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
xe_check_libs=" -lldap -llber -lkrb -ldes"
cat > conftest.$ac_ext <<EOF
-#line 6894 "configure"
+#line 7006 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_open()
; return 0; }
EOF
-if { (eval echo configure:6905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6956: checking for $ac_func" >&5
+echo "configure:7068: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 6959 "configure"
+#line 7071 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:6982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
if test "$window_system" != "none"; then
echo "checking for graphics libraries" 1>&6
-echo "configure:7014: checking for graphics libraries" >&5
+echo "configure:7126: checking for graphics libraries" >&5
xpm_problem=""
if test -z "$with_xpm"; then
echo $ac_n "checking for Xpm - no older than 3.4f""... $ac_c" 1>&6
-echo "configure:7019: checking for Xpm - no older than 3.4f" >&5
+echo "configure:7131: checking for Xpm - no older than 3.4f" >&5
xe_check_libs=-lXpm
cat > conftest.$ac_ext <<EOF
-#line 7022 "configure"
+#line 7134 "configure"
#include "confdefs.h"
+#define XPM_NUMBERS
#include <X11/xpm.h>
int main(int c, char **v) {
return c == 1 ? 0 :
XpmIncludeVersion != XpmLibraryVersion() ? 1 :
XpmIncludeVersion < 30406 ? 2 : 0 ;}
EOF
-if { (eval echo configure:7030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
./conftest dummy_arg; xpm_status=$?;
if test "$xpm_status" = "0"; then
libs_x="-lXpm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXpm\" to \$libs_x"; fi
echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6
-echo "configure:7072: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:7185: checking for \"FOR_MSW\" xpm" >&5
xe_check_libs=-lXpm
cat > conftest.$ac_ext <<EOF
-#line 7075 "configure"
+#line 7188 "configure"
#include "confdefs.h"
int main() {
XpmCreatePixmapFromData()
; return 0; }
EOF
-if { (eval echo configure:7082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
xpm_for_msw=no
else
test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for compface.h""... $ac_c" 1>&6
-echo "configure:7108: checking for compface.h" >&5
+echo "configure:7221: checking for compface.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7111 "configure"
+#line 7224 "configure"
#include "confdefs.h"
#include <compface.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7116: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_xface" && {
echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:7139: checking for UnGenFace in -lcompface" >&5
+echo "configure:7252: checking for UnGenFace in -lcompface" >&5
ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'`
xe_check_libs=" -lcompface "
cat > conftest.$ac_ext <<EOF
-#line 7144 "configure"
+#line 7257 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
UnGenFace()
; return 0; }
EOF
-if { (eval echo configure:7155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_png $with_tiff" != "no no"; then
echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6
-echo "configure:7207: checking for inflate in -lc" >&5
+echo "configure:7320: checking for inflate in -lc" >&5
ac_lib_var=`echo c'_'inflate | sed 'y%./+-%__p_%'`
xe_check_libs=" -lc "
cat > conftest.$ac_ext <<EOF
-#line 7212 "configure"
+#line 7325 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
inflate()
; return 0; }
EOF
-if { (eval echo configure:7223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6
-echo "configure:7242: checking for inflate in -lz" >&5
+echo "configure:7355: checking for inflate in -lz" >&5
ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'`
xe_check_libs=" -lz "
cat > conftest.$ac_ext <<EOF
-#line 7247 "configure"
+#line 7360 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
inflate()
; return 0; }
EOF
-if { (eval echo configure:7258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6
-echo "configure:7277: checking for inflate in -lgz" >&5
+echo "configure:7390: checking for inflate in -lgz" >&5
ac_lib_var=`echo gz'_'inflate | sed 'y%./+-%__p_%'`
xe_check_libs=" -lgz "
cat > conftest.$ac_ext <<EOF
-#line 7282 "configure"
+#line 7395 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
inflate()
; return 0; }
EOF
-if { (eval echo configure:7293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6
-echo "configure:7323: checking for jpeglib.h" >&5
+echo "configure:7436: checking for jpeglib.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7326 "configure"
+#line 7439 "configure"
#include "confdefs.h"
#include <jpeglib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_jpeg" && {
echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6
-echo "configure:7354: checking for jpeg_destroy_decompress in -ljpeg" >&5
+echo "configure:7467: checking for jpeg_destroy_decompress in -ljpeg" >&5
ac_lib_var=`echo jpeg'_'jpeg_destroy_decompress | sed 'y%./+-%__p_%'`
xe_check_libs=" -ljpeg "
cat > conftest.$ac_ext <<EOF
-#line 7359 "configure"
+#line 7472 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jpeg_destroy_decompress()
; return 0; }
EOF
-if { (eval echo configure:7370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
png_problem=""
test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:7406: checking for pow" >&5
+echo "configure:7519: checking for pow" >&5
cat > conftest.$ac_ext <<EOF
-#line 7409 "configure"
+#line 7522 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char pow(); below. */
; return 0; }
EOF
-if { (eval echo configure:7432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_pow=yes"
else
}
test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for png.h""... $ac_c" 1>&6
-echo "configure:7453: checking for png.h" >&5
+echo "configure:7566: checking for png.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7456 "configure"
+#line 7569 "configure"
#include "confdefs.h"
#include <png.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7461: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_png" && {
echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:7484: checking for png_read_image in -lpng" >&5
+echo "configure:7597: checking for png_read_image in -lpng" >&5
ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'`
xe_check_libs=" -lpng "
cat > conftest.$ac_ext <<EOF
-#line 7489 "configure"
+#line 7602 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
png_read_image()
; return 0; }
EOF
-if { (eval echo configure:7500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
}
if test -z "$with_png"; then
echo $ac_n "checking for workable png version information""... $ac_c" 1>&6
-echo "configure:7523: checking for workable png version information" >&5
+echo "configure:7636: checking for workable png version information" >&5
xe_check_libs="-lpng -lz"
cat > conftest.$ac_ext <<EOF
-#line 7526 "configure"
+#line 7639 "configure"
#include "confdefs.h"
#include <png.h>
int main(int c, char **v) {
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
test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6
-echo "configure:7577: checking for tiffio.h" >&5
+echo "configure:7690: checking for tiffio.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7580 "configure"
+#line 7693 "configure"
#include "confdefs.h"
#include <tiffio.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7698: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_tiff" && {
echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:7608: checking for TIFFClientOpen in -ltiff" >&5
+echo "configure:7721: checking for TIFFClientOpen in -ltiff" >&5
ac_lib_var=`echo tiff'_'TIFFClientOpen | sed 'y%./+-%__p_%'`
xe_check_libs=" -ltiff "
cat > conftest.$ac_ext <<EOF
-#line 7613 "configure"
+#line 7726 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
TIFFClientOpen()
; return 0; }
EOF
-if { (eval echo configure:7624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
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 ;;
if test "$athena_3d" = "no"; then
echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7680: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
+echo "configure:7793: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
xe_check_libs=" -l$athena_variant "
cat > conftest.$ac_ext <<EOF
-#line 7685 "configure"
+#line 7798 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XawScrollbarSetThumb()
; return 0; }
EOF
-if { (eval echo configure:7696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7712: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7825: checking for threeDClassRec in -l$athena_variant" >&5
ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'`
xe_check_libs=" -l$athena_variant "
cat > conftest.$ac_ext <<EOF
-#line 7717 "configure"
+#line 7830 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
threeDClassRec()
; return 0; }
EOF
-if { (eval echo configure:7728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:7759: checking for threeDClassRec in -l$athena_variant" >&5
+echo "configure:7872: checking for threeDClassRec in -l$athena_variant" >&5
ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'`
xe_check_libs=" -l$athena_variant "
cat > conftest.$ac_ext <<EOF
-#line 7764 "configure"
+#line 7877 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
threeDClassRec()
; return 0; }
EOF
-if { (eval echo configure:7775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for threeDClassRec in -lXaw""... $ac_c" 1>&6
-echo "configure:7793: checking for threeDClassRec in -lXaw" >&5
+echo "configure:7906: checking for threeDClassRec in -lXaw" >&5
ac_lib_var=`echo Xaw'_'threeDClassRec | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXaw "
cat > conftest.$ac_ext <<EOF
-#line 7798 "configure"
+#line 7911 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
threeDClassRec()
; return 0; }
EOF
-if { (eval echo configure:7809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$athena_3d" = "no"; then
ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7840: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:7953: checking for X11/Xaw/ThreeD.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7843 "configure"
+#line 7956 "configure"
#include "confdefs.h"
#include <X11/Xaw/ThreeD.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7961: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""no" 1>&6
ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6
-echo "configure:7868: checking for X11/Xaw/XawInit.h" >&5
+echo "configure:7981: checking for X11/Xaw/XawInit.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7871 "configure"
+#line 7984 "configure"
#include "confdefs.h"
#include <X11/Xaw/XawInit.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
else
ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:7902: checking for X11/$athena_variant/XawInit.h" >&5
+echo "configure:8015: checking for X11/$athena_variant/XawInit.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7905 "configure"
+#line 8018 "configure"
#include "confdefs.h"
#include <X11/$athena_variant/XawInit.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7927: checking for X11/$athena_variant/ThreeD.h" >&5
+echo "configure:8040: checking for X11/$athena_variant/ThreeD.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7930 "configure"
+#line 8043 "configure"
#include "confdefs.h"
#include <X11/$athena_variant/ThreeD.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7935: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8048: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test -z "$athena_h_path"; then
ac_safe=`echo "$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:7963: checking for $athena_variant/XawInit.h" >&5
+echo "configure:8076: checking for $athena_variant/XawInit.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7966 "configure"
+#line 8079 "configure"
#include "confdefs.h"
#include <$athena_variant/XawInit.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7971: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8084: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
ac_safe=`echo "$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:7988: checking for $athena_variant/ThreeD.h" >&5
+echo "configure:8101: checking for $athena_variant/ThreeD.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7991 "configure"
+#line 8104 "configure"
#include "confdefs.h"
#include <$athena_variant/ThreeD.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7996: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:8025: checking for X11/Xaw3d/XawInit.h" >&5
+echo "configure:8138: checking for X11/Xaw3d/XawInit.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 8028 "configure"
+#line 8141 "configure"
#include "confdefs.h"
#include <X11/Xaw3d/XawInit.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8033: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8050: checking for X11/Xaw3d/ThreeD.h" >&5
+echo "configure:8163: checking for X11/Xaw3d/ThreeD.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 8053 "configure"
+#line 8166 "configure"
#include "confdefs.h"
#include <X11/Xaw3d/ThreeD.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8171: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
ac_safe=`echo "Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:8090: checking for Xaw3d/XawInit.h" >&5
+echo "configure:8203: checking for Xaw3d/XawInit.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 8093 "configure"
+#line 8206 "configure"
#include "confdefs.h"
#include <Xaw3d/XawInit.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
ac_safe=`echo "Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8115: checking for Xaw3d/ThreeD.h" >&5
+echo "configure:8228: checking for Xaw3d/ThreeD.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 8118 "configure"
+#line 8231 "configure"
#include "confdefs.h"
#include <Xaw3d/ThreeD.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8123: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test -z "$athena_h_path"; then
ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:8155: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:8268: checking for X11/Xaw/ThreeD.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 8158 "configure"
+#line 8271 "configure"
#include "confdefs.h"
#include <X11/Xaw/ThreeD.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8163: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8276: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:8198: checking for Xm/Xm.h" >&5
+echo "configure:8311: checking for Xm/Xm.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 8201 "configure"
+#line 8314 "configure"
#include "confdefs.h"
#include <Xm/Xm.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8319: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6
-echo "configure:8223: checking for XmStringFree in -lXm" >&5
+echo "configure:8336: checking for XmStringFree in -lXm" >&5
ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXm "
cat > conftest.$ac_ext <<EOF
-#line 8228 "configure"
+#line 8341 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmStringFree()
; return 0; }
EOF
-if { (eval echo configure:8239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$have_motif" = "yes"; then
echo $ac_n "checking for Lesstif""... $ac_c" 1>&6
-echo "configure:8268: checking for Lesstif" >&5
+echo "configure:8381: checking for Lesstif" >&5
cat > conftest.$ac_ext <<EOF
-#line 8270 "configure"
+#line 8383 "configure"
#include "confdefs.h"
#include <Xm/Xm.h>
#ifdef LESSTIF_VERSION
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
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8628: checking for $ac_hdr" >&5
+echo "configure:8741: checking for $ac_hdr" >&5
cat > conftest.$ac_ext <<EOF
-#line 8631 "configure"
+#line 8744 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8636: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6
-echo "configure:8667: checking for strerror in -lintl" >&5
+echo "configure:8780: checking for strerror in -lintl" >&5
ac_lib_var=`echo intl'_'strerror | sed 'y%./+-%__p_%'`
xe_check_libs=" -lintl "
cat > conftest.$ac_ext <<EOF
-#line 8672 "configure"
+#line 8785 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
strerror()
; return 0; }
EOF
-if { (eval echo configure:8683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "checking for Mule input methods" 1>&6
-echo "configure:8716: checking for Mule input methods" >&5
+echo "configure:8829: checking for Mule input methods" >&5
case "$with_xim" in "" | "yes" )
echo "checking for XIM" 1>&6
-echo "configure:8719: checking for XIM" >&5
+echo "configure:8832: checking for XIM" >&5
echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6
-echo "configure:8722: checking for XOpenIM in -lX11" >&5
+echo "configure:8835: checking for XOpenIM in -lX11" >&5
ac_lib_var=`echo X11'_'XOpenIM | sed 'y%./+-%__p_%'`
xe_check_libs=" -lX11 "
cat > conftest.$ac_ext <<EOF
-#line 8727 "configure"
+#line 8840 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XOpenIM()
; return 0; }
EOF
-if { (eval echo configure:8738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$have_motif $have_lesstif" = "yes no"; then
echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6
-echo "configure:8762: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:8875: checking for XmImMbLookupString in -lXm" >&5
ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'`
xe_check_libs=" -lXm "
cat > conftest.$ac_ext <<EOF
-#line 8767 "configure"
+#line 8880 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmImMbLookupString()
; return 0; }
EOF
-if { (eval echo configure:8778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_xfs" = "yes" ; then
echo "checking for XFontSet" 1>&6
-echo "configure:8843: checking for XFontSet" >&5
+echo "configure:8956: checking for XFontSet" >&5
echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6
-echo "configure:8846: checking for XmbDrawString in -lX11" >&5
+echo "configure:8959: checking for XmbDrawString in -lX11" >&5
ac_lib_var=`echo X11'_'XmbDrawString | sed 'y%./+-%__p_%'`
xe_check_libs=" -lX11 "
cat > conftest.$ac_ext <<EOF
-#line 8851 "configure"
+#line 8964 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmbDrawString()
; return 0; }
EOF
-if { (eval echo configure:8862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support
test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6
-echo "configure:8902: checking for wnn/jllib.h" >&5
+echo "configure:9015: checking for wnn/jllib.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 8905 "configure"
+#line 9018 "configure"
#include "confdefs.h"
#include <wnn/jllib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8910: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
for ac_func in crypt
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8935: checking for $ac_func" >&5
+echo "configure:9048: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 8938 "configure"
+#line 9051 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:8961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
test "$ac_cv_func_crypt" != "yes" && {
echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:8990: checking for crypt in -lcrypt" >&5
+echo "configure:9103: checking for crypt in -lcrypt" >&5
ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
xe_check_libs=" -lcrypt "
cat > conftest.$ac_ext <<EOF
-#line 8995 "configure"
+#line 9108 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
crypt()
; return 0; }
EOF
-if { (eval echo configure:9006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test -z "$with_wnn" -o "$with_wnn" = "yes"; then
echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6
-echo "configure:9041: checking for jl_dic_list_e in -lwnn" >&5
+echo "configure:9154: checking for jl_dic_list_e in -lwnn" >&5
ac_lib_var=`echo wnn'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
xe_check_libs=" -lwnn "
cat > conftest.$ac_ext <<EOF
-#line 9046 "configure"
+#line 9159 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6
-echo "configure:9075: checking for jl_dic_list_e in -lwnn4" >&5
+echo "configure:9188: checking for jl_dic_list_e in -lwnn4" >&5
ac_lib_var=`echo wnn4'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
xe_check_libs=" -lwnn4 "
cat > conftest.$ac_ext <<EOF
-#line 9080 "configure"
+#line 9193 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6
-echo "configure:9109: checking for jl_dic_list_e in -lwnn6" >&5
+echo "configure:9222: checking for jl_dic_list_e in -lwnn6" >&5
ac_lib_var=`echo wnn6'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
xe_check_libs=" -lwnn6 "
cat > conftest.$ac_ext <<EOF
-#line 9114 "configure"
+#line 9227 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6
-echo "configure:9143: checking for dic_list_e in -lwnn6_fromsrc" >&5
+echo "configure:9256: checking for dic_list_e in -lwnn6_fromsrc" >&5
ac_lib_var=`echo wnn6_fromsrc'_'dic_list_e | sed 'y%./+-%__p_%'`
xe_check_libs=" -lwnn6_fromsrc "
cat > conftest.$ac_ext <<EOF
-#line 9148 "configure"
+#line 9261 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_wnn6" != "no"; then
echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6
-echo "configure:9207: checking for jl_fi_dic_list in -l$libwnn" >&5
+echo "configure:9320: checking for jl_fi_dic_list in -l$libwnn" >&5
ac_lib_var=`echo $libwnn'_'jl_fi_dic_list | sed 'y%./+-%__p_%'`
xe_check_libs=" -l$libwnn "
cat > conftest.$ac_ext <<EOF
-#line 9212 "configure"
+#line 9325 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_fi_dic_list()
; return 0; }
EOF
-if { (eval echo configure:9223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_canna" != "no"; then
ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:9258: checking for canna/jrkanji.h" >&5
+echo "configure:9371: checking for canna/jrkanji.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 9261 "configure"
+#line 9374 "configure"
#include "confdefs.h"
#include <canna/jrkanji.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9266: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9379: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
c_switch_site="$c_switch_site -I/usr/local/canna/include"
ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:9293: checking for canna/jrkanji.h" >&5
+echo "configure:9406: checking for canna/jrkanji.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 9296 "configure"
+#line 9409 "configure"
#include "confdefs.h"
#include <canna/jrkanji.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9301: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9414: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6
-echo "configure:9329: checking for canna/RK.h" >&5
+echo "configure:9442: checking for canna/RK.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 9332 "configure"
+#line 9445 "configure"
#include "confdefs.h"
#include <canna/RK.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9450: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_canna" && {
echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6
-echo "configure:9360: checking for RkBgnBun in -lRKC" >&5
+echo "configure:9473: checking for RkBgnBun in -lRKC" >&5
ac_lib_var=`echo RKC'_'RkBgnBun | sed 'y%./+-%__p_%'`
xe_check_libs=" -lRKC "
cat > conftest.$ac_ext <<EOF
-#line 9365 "configure"
+#line 9478 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
RkBgnBun()
; return 0; }
EOF
-if { (eval echo configure:9376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
}
test -z "$with_canna" && {
echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6
-echo "configure:9399: checking for jrKanjiControl in -lcanna" >&5
+echo "configure:9512: checking for jrKanjiControl in -lcanna" >&5
ac_lib_var=`echo canna'_'jrKanjiControl | sed 'y%./+-%__p_%'`
xe_check_libs=" -lcanna "
cat > conftest.$ac_ext <<EOF
-#line 9404 "configure"
+#line 9517 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jrKanjiControl()
; return 0; }
EOF
-if { (eval echo configure:9415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
libs_x="-lXm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXm\" to \$libs_x"; fi
echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6
-echo "configure:9464: checking for layout_object_getvalue in -li18n" >&5
+echo "configure:9577: checking for layout_object_getvalue in -li18n" >&5
ac_lib_var=`echo i18n'_'layout_object_getvalue | sed 'y%./+-%__p_%'`
xe_check_libs=" -li18n "
cat > conftest.$ac_ext <<EOF
-#line 9469 "configure"
+#line 9582 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
layout_object_getvalue()
; return 0; }
EOF
-if { (eval echo configure:9480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf fsync ftruncate umask
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9566: checking for $ac_func" >&5
+echo "configure:9679: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 9569 "configure"
+#line 9682 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:9592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
for ac_func in getloadavg
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9627: checking for $ac_func" >&5
+echo "configure:9740: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 9630 "configure"
+#line 9743 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:9653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6
-echo "configure:9689: checking for kstat_open in -lkstat" >&5
+echo "configure:9802: checking for kstat_open in -lkstat" >&5
ac_lib_var=`echo kstat'_'kstat_open | sed 'y%./+-%__p_%'`
xe_check_libs=" -lkstat "
cat > conftest.$ac_ext <<EOF
-#line 9694 "configure"
+#line 9807 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
kstat_open()
; return 0; }
EOF
-if { (eval echo configure:9705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6
-echo "configure:9739: checking for kvm_read in -lkvm" >&5
+echo "configure:9852: checking for kvm_read in -lkvm" >&5
ac_lib_var=`echo kvm'_'kvm_read | sed 'y%./+-%__p_%'`
xe_check_libs=" -lkvm "
cat > conftest.$ac_ext <<EOF
-#line 9744 "configure"
+#line 9857 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
kvm_read()
; return 0; }
EOF
-if { (eval echo configure:9755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:9789: checking whether netdb declares h_errno" >&5
+echo "configure:9902: checking whether netdb declares h_errno" >&5
cat > conftest.$ac_ext <<EOF
-#line 9791 "configure"
+#line 9904 "configure"
#include "confdefs.h"
#include <netdb.h>
int main() {
return h_errno;
; return 0; }
EOF
-if { (eval echo configure:9798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
{ test "$extra_verbose" = "yes" && cat << \EOF
rm -f conftest*
echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:9818: checking for sigsetjmp" >&5
+echo "configure:9931: checking for sigsetjmp" >&5
cat > conftest.$ac_ext <<EOF
-#line 9820 "configure"
+#line 9933 "configure"
#include "confdefs.h"
#include <setjmp.h>
int main() {
sigjmp_buf bar; sigsetjmp (bar, 0);
; return 0; }
EOF
-if { (eval echo configure:9827: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
{ test "$extra_verbose" = "yes" && cat << \EOF
rm -f conftest*
echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6
-echo "configure:9847: checking whether localtime caches TZ" >&5
+echo "configure:9960: checking whether localtime caches TZ" >&5
if test "$ac_cv_func_tzset" = "yes"; then
cat > conftest.$ac_ext <<EOF
-#line 9851 "configure"
+#line 9964 "configure"
#include "confdefs.h"
#include <time.h>
#if STDC_HEADERS
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
if test "$HAVE_TIMEVAL" = "yes"; then
echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6
-echo "configure:9916: checking whether gettimeofday accepts one or two arguments" >&5
+echo "configure:10029: checking whether gettimeofday accepts one or two arguments" >&5
cat > conftest.$ac_ext <<EOF
-#line 9918 "configure"
+#line 10031 "configure"
#include "confdefs.h"
#ifdef TIME_WITH_SYS_TIME
int main() {
struct timeval time;
- struct timezone dummy;
- gettimeofday (&time, &dummy);
+ gettimeofday (&time, 0);
; return 0; }
EOF
-if { (eval echo configure:9940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""two" 1>&6
else
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:9962: checking for inline" >&5
+echo "configure:10074: checking for inline" >&5
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 9967 "configure"
+#line 10079 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:9974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:10024: checking for working alloca.h" >&5
+echo "configure:10136: checking for working alloca.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 10027 "configure"
+#line 10139 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:10034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:10058: checking for alloca" >&5
+echo "configure:10170: checking for alloca" >&5
cat > conftest.$ac_ext <<EOF
-#line 10061 "configure"
+#line 10173 "configure"
#include "confdefs.h"
#ifdef __GNUC__
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:10089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:10128: checking whether alloca needs Cray hooks" >&5
+echo "configure:10240: checking whether alloca needs Cray hooks" >&5
cat > conftest.$ac_ext <<EOF
-#line 10131 "configure"
+#line 10243 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10155: checking for $ac_func" >&5
+echo "configure:10267: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 10158 "configure"
+#line 10270 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:10181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:10211: checking stack direction for C alloca" >&5
+echo "configure:10323: checking stack direction for C alloca" >&5
cat > conftest.$ac_ext <<EOF
-#line 10214 "configure"
+#line 10326 "configure"
#include "confdefs.h"
find_stack_direction ()
{
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:10233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
ac_cv_c_stack_direction=1
else
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:10262: checking for vfork.h" >&5
+echo "configure:10374: checking for vfork.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 10265 "configure"
+#line 10377 "configure"
#include "confdefs.h"
#include <vfork.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10382: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
fi
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:10298: checking for working vfork" >&5
+echo "configure:10410: checking for working vfork" >&5
cat > conftest.$ac_ext <<EOF
-#line 10301 "configure"
+#line 10413 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
}
}
EOF
-if { (eval echo configure:10396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
ac_cv_func_vfork_works=yes
else
echo $ac_n "checking for working strcoll""... $ac_c" 1>&6
-echo "configure:10422: checking for working strcoll" >&5
+echo "configure:10534: checking for working strcoll" >&5
cat > conftest.$ac_ext <<EOF
-#line 10425 "configure"
+#line 10537 "configure"
#include "confdefs.h"
#include <string.h>
main ()
strcoll ("123", "456") >= 0);
}
EOF
-if { (eval echo configure:10435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
ac_cv_func_strcoll_works=yes
else
for ac_func in getpgrp
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10463: checking for $ac_func" >&5
+echo "configure:10575: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 10466 "configure"
+#line 10578 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:10489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
done
echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6
-echo "configure:10517: checking whether getpgrp takes no argument" >&5
+echo "configure:10629: checking whether getpgrp takes no argument" >&5
cat > conftest.$ac_ext <<EOF
-#line 10520 "configure"
+#line 10632 "configure"
#include "confdefs.h"
/*
}
EOF
-if { (eval echo configure:10575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:10687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
ac_cv_func_getpgrp_void=yes
else
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:10602: checking for working mmap" >&5
+echo "configure:10714: checking for working mmap" >&5
case "$opsys" in ultrix* ) have_mmap=no ;; *)
cat > conftest.$ac_ext <<EOF
-#line 10605 "configure"
+#line 10717 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <unistd.h>
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
}
-test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
-test "$rel_alloc" = "default" -a "$have_mmap" = "yes" && rel_alloc=yes
+test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
+if test "$rel_alloc $have_mmap" = "default yes"; then
+ if test "$doug_lea_malloc" = "yes"; then
+ echo $ac_n "checking for M_MMAP_THRESHOLD""... $ac_c" 1>&6
+echo "configure:10776: checking for M_MMAP_THRESHOLD" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 10778 "configure"
+#include "confdefs.h"
+#include <malloc.h>
+int main() {
+
+#ifndef M_MMAP_THRESHOLD
+#error No M_MMAP_THRESHOLD :-(
+!@+$%^&*_)(_ - unlikely to compile...
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:10790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ rel_alloc=no; echo "$ac_t""yes" 1>&6;
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ rel_alloc=yes; echo "$ac_t""no" 1>&6;
+fi
+rm -f conftest*
+ else
+ rel_alloc=yes
+ fi
+fi
test "$rel_alloc" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF
Defining REL_ALLOC
EOF
ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for termios.h""... $ac_c" 1>&6
-echo "configure:10673: checking for termios.h" >&5
+echo "configure:10815: checking for termios.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 10676 "configure"
+#line 10818 "configure"
#include "confdefs.h"
#include <termios.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""no" 1>&6
ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for termio.h""... $ac_c" 1>&6
-echo "configure:10724: checking for termio.h" >&5
+echo "configure:10866: checking for termio.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 10727 "configure"
+#line 10869 "configure"
#include "confdefs.h"
#include <termio.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10732: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:10764: checking for socket" >&5
+echo "configure:10906: checking for socket" >&5
cat > conftest.$ac_ext <<EOF
-#line 10767 "configure"
+#line 10909 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char socket(); below. */
; return 0; }
EOF
-if { (eval echo configure:10790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_socket=yes"
else
echo "$ac_t""yes" 1>&6
ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6
-echo "configure:10805: checking for netinet/in.h" >&5
+echo "configure:10947: checking for netinet/in.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 10808 "configure"
+#line 10950 "configure"
#include "confdefs.h"
#include <netinet/in.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10955: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6
-echo "configure:10830: checking for arpa/inet.h" >&5
+echo "configure:10972: checking for arpa/inet.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 10833 "configure"
+#line 10975 "configure"
#include "confdefs.h"
#include <arpa/inet.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:10863: checking "for sun_len member in struct sockaddr_un"" >&5
+echo "configure:11005: checking "for sun_len member in struct sockaddr_un"" >&5
cat > conftest.$ac_ext <<EOF
-#line 10865 "configure"
+#line 11007 "configure"
#include "confdefs.h"
#include <sys/types.h>
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
fi
rm -f conftest*
echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6
-echo "configure:10894: checking "for ip_mreq struct in netinet/in.h"" >&5
+echo "configure:11036: checking "for ip_mreq struct in netinet/in.h"" >&5
cat > conftest.$ac_ext <<EOF
-#line 10896 "configure"
+#line 11038 "configure"
#include "confdefs.h"
#include <sys/types.h>
static struct ip_mreq x;
; return 0; }
EOF
-if { (eval echo configure:10906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF
Defining HAVE_MULTICAST
echo $ac_n "checking for msgget""... $ac_c" 1>&6
-echo "configure:10937: checking for msgget" >&5
+echo "configure:11079: checking for msgget" >&5
cat > conftest.$ac_ext <<EOF
-#line 10940 "configure"
+#line 11082 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char msgget(); below. */
; return 0; }
EOF
-if { (eval echo configure:10963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_msgget=yes"
else
echo "$ac_t""yes" 1>&6
ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6
-echo "configure:10978: checking for sys/ipc.h" >&5
+echo "configure:11120: checking for sys/ipc.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 10981 "configure"
+#line 11123 "configure"
#include "confdefs.h"
#include <sys/ipc.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6
-echo "configure:11003: checking for sys/msg.h" >&5
+echo "configure:11145: checking for sys/msg.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11006 "configure"
+#line 11148 "configure"
#include "confdefs.h"
#include <sys/msg.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11011: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11153: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for dirent.h""... $ac_c" 1>&6
-echo "configure:11049: checking for dirent.h" >&5
+echo "configure:11191: checking for dirent.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11052 "configure"
+#line 11194 "configure"
#include "confdefs.h"
#include <dirent.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11057: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11199: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "$ac_t""no" 1>&6
ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6
-echo "configure:11084: checking for sys/dir.h" >&5
+echo "configure:11226: checking for sys/dir.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11087 "configure"
+#line 11229 "configure"
#include "confdefs.h"
#include <sys/dir.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11092: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for nlist.h""... $ac_c" 1>&6
-echo "configure:11125: checking for nlist.h" >&5
+echo "configure:11267: checking for nlist.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11128 "configure"
+#line 11270 "configure"
#include "confdefs.h"
#include <nlist.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11133: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11275: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo "checking "for sound support"" 1>&6
-echo "configure:11163: checking "for sound support"" >&5
+echo "configure:11305: checking "for sound support"" >&5
test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes
if test "$with_native_sound" != "no"; then
if test -n "$native_sound_lib"; then
ac_safe=`echo "multimedia/audio_device.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for multimedia/audio_device.h""... $ac_c" 1>&6
-echo "configure:11170: checking for multimedia/audio_device.h" >&5
+echo "configure:11312: checking for multimedia/audio_device.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11173 "configure"
+#line 11315 "configure"
#include "confdefs.h"
#include <multimedia/audio_device.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test -z "$native_sound_lib"; then
echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6
-echo "configure:11226: checking for ALopenport in -laudio" >&5
+echo "configure:11368: checking for ALopenport in -laudio" >&5
ac_lib_var=`echo audio'_'ALopenport | sed 'y%./+-%__p_%'`
xe_check_libs=" -laudio "
cat > conftest.$ac_ext <<EOF
-#line 11231 "configure"
+#line 11373 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ALopenport()
; return 0; }
EOF
-if { (eval echo configure:11242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test -z "$native_sound_lib"; then
echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6
-echo "configure:11273: checking for AOpenAudio in -lAlib" >&5
+echo "configure:11415: checking for AOpenAudio in -lAlib" >&5
ac_lib_var=`echo Alib'_'AOpenAudio | sed 'y%./+-%__p_%'`
xe_check_libs=" -lAlib "
cat > conftest.$ac_ext <<EOF
-#line 11278 "configure"
+#line 11420 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
AOpenAudio()
; return 0; }
EOF
-if { (eval echo configure:11289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for dir in "machine" "sys" "linux"; do
ac_safe=`echo "${dir}/soundcard.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ${dir}/soundcard.h""... $ac_c" 1>&6
-echo "configure:11327: checking for ${dir}/soundcard.h" >&5
+echo "configure:11469: checking for ${dir}/soundcard.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11330 "configure"
+#line 11472 "configure"
#include "confdefs.h"
#include <${dir}/soundcard.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11477: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test "$with_nas_sound" != "no"; then
ac_safe=`echo "audio/audiolib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for audio/audiolib.h""... $ac_c" 1>&6
-echo "configure:11389: checking for audio/audiolib.h" >&5
+echo "configure:11531: checking for audio/audiolib.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11392 "configure"
+#line 11534 "configure"
#include "confdefs.h"
#include <audio/audiolib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11397: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6
-echo "configure:11415: checking for AuOpenServer in -laudio" >&5
+echo "configure:11557: checking for AuOpenServer in -laudio" >&5
ac_lib_var=`echo audio'_'AuOpenServer | sed 'y%./+-%__p_%'`
xe_check_libs=" -laudio "
cat > conftest.$ac_ext <<EOF
-#line 11420 "configure"
+#line 11562 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
AuOpenServer()
; return 0; }
EOF
-if { (eval echo configure:11431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
libs_x="-laudio $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-laudio\" to \$libs_x"; fi
cat > conftest.$ac_ext <<EOF
-#line 11470 "configure"
+#line 11612 "configure"
#include "confdefs.h"
#include <audio/Xtutil.h>
EOF
# Extract the first word of "esd-config", so it can be a program name with args.
set dummy esd-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:11501: checking for $ac_word" >&5
+echo "configure:11643: checking for $ac_word" >&5
if test -n "$have_esd_config"; then
ac_cv_prog_have_esd_config="$have_esd_config" # Let the user override the test.
c_switch_site="$c_switch_site `esd-config --cflags`" && if test "$extra_verbose" = "yes"; then echo " Appending \"`esd-config --cflags`\" to \$c_switch_site"; fi
LIBS="`esd-config --libs` $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"`esd-config --libs`\" to \$LIBS"; fi
echo $ac_n "checking for esd_play_stream""... $ac_c" 1>&6
-echo "configure:11530: checking for esd_play_stream" >&5
+echo "configure:11672: checking for esd_play_stream" >&5
cat > conftest.$ac_ext <<EOF
-#line 11533 "configure"
+#line 11675 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char esd_play_stream(); below. */
; return 0; }
EOF
-if { (eval echo configure:11556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_esd_play_stream=yes"
else
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
if test -z "$with_ncurses"; then
echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:11623: checking for tgetent in -lncurses" >&5
+echo "configure:11765: checking for tgetent in -lncurses" >&5
ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
xe_check_libs=" -lncurses "
cat > conftest.$ac_ext <<EOF
-#line 11628 "configure"
+#line 11770 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6
-echo "configure:11672: checking for ncurses/curses.h" >&5
+echo "configure:11814: checking for ncurses/curses.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11675 "configure"
+#line 11817 "configure"
#include "confdefs.h"
#include <ncurses/curses.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11680: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6
-echo "configure:11702: checking for ncurses/term.h" >&5
+echo "configure:11844: checking for ncurses/term.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11705 "configure"
+#line 11847 "configure"
#include "confdefs.h"
#include <ncurses/term.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
c_switch_site="$c_switch_site -I/usr/include/ncurses"
ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6
-echo "configure:11740: checking for ncurses/curses.h" >&5
+echo "configure:11882: checking for ncurses/curses.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11743 "configure"
+#line 11885 "configure"
#include "confdefs.h"
#include <ncurses/curses.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11748: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
for lib in curses termlib termcap; do
echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6
-echo "configure:11783: checking for tgetent in -l$lib" >&5
+echo "configure:11925: checking for tgetent in -l$lib" >&5
ac_lib_var=`echo $lib'_'tgetent | sed 'y%./+-%__p_%'`
xe_check_libs=" -l$lib "
cat > conftest.$ac_ext <<EOF
-#line 11788 "configure"
+#line 11930 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:11799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
-echo "configure:11830: checking for tgetent in -lcurses" >&5
+echo "configure:11972: checking for tgetent in -lcurses" >&5
ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
xe_check_libs=" -lcurses "
cat > conftest.$ac_ext <<EOF
-#line 11835 "configure"
+#line 11977 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:11846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:11864: checking for tgetent in -ltermcap" >&5
+echo "configure:12006: checking for tgetent in -ltermcap" >&5
ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
xe_check_libs=" -ltermcap "
cat > conftest.$ac_ext <<EOF
-#line 11869 "configure"
+#line 12011 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:11880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
test -z "$with_gpm" && { ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for gpm.h""... $ac_c" 1>&6
-echo "configure:11928: checking for gpm.h" >&5
+echo "configure:12070: checking for gpm.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 11931 "configure"
+#line 12073 "configure"
#include "confdefs.h"
#include <gpm.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11936: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12078: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
}
test -z "$with_gpm" && {
echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
-echo "configure:11959: checking for Gpm_Open in -lgpm" >&5
+echo "configure:12101: checking for Gpm_Open in -lgpm" >&5
ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'`
xe_check_libs=" -lgpm "
cat > conftest.$ac_ext <<EOF
-#line 11964 "configure"
+#line 12106 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
Gpm_Open()
; return 0; }
EOF
-if { (eval echo configure:11975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
!= "no no no" && echo "checking for database support" 1>&6
-echo "configure:12025: checking for database support" >&5
+echo "configure:12167: checking for database support" >&5
if test "$with_database_gdbm $with_database_dbm" != "no no"; then
ac_safe=`echo "ndbm.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ndbm.h""... $ac_c" 1>&6
-echo "configure:12030: checking for ndbm.h" >&5
+echo "configure:12172: checking for ndbm.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 12033 "configure"
+#line 12175 "configure"
#include "confdefs.h"
#include <ndbm.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test "$with_database_gdbm" != "no"; then
echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6
-echo "configure:12068: checking for dbm_open in -lgdbm" >&5
+echo "configure:12210: checking for dbm_open in -lgdbm" >&5
ac_lib_var=`echo gdbm'_'dbm_open | sed 'y%./+-%__p_%'`
xe_check_libs=" -lgdbm "
cat > conftest.$ac_ext <<EOF
-#line 12073 "configure"
+#line 12215 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dbm_open()
; return 0; }
EOF
-if { (eval echo configure:12084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_database_dbm" != "no"; then
echo $ac_n "checking for dbm_open""... $ac_c" 1>&6
-echo "configure:12112: checking for dbm_open" >&5
+echo "configure:12254: checking for dbm_open" >&5
cat > conftest.$ac_ext <<EOF
-#line 12115 "configure"
+#line 12257 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char dbm_open(); below. */
; return 0; }
EOF
-if { (eval echo configure:12138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_dbm_open=yes"
else
echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6
-echo "configure:12157: checking for dbm_open in -ldbm" >&5
+echo "configure:12299: checking for dbm_open in -ldbm" >&5
ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'`
xe_check_libs=" -ldbm "
cat > conftest.$ac_ext <<EOF
-#line 12162 "configure"
+#line 12304 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dbm_open()
; return 0; }
EOF
-if { (eval echo configure:12173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_database_berkdb" != "no"; then
echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6
-echo "configure:12214: checking for Berkeley db.h" >&5
+echo "configure:12356: checking for Berkeley db.h" >&5
for path in "db/db.h" "db.h"; do
cat > conftest.$ac_ext <<EOF
-#line 12217 "configure"
+#line 12359 "configure"
#include "confdefs.h"
+
+#include <stdlib.h>
+#if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1)
#ifdef HAVE_INTTYPES_H
#define __BIT_TYPES_DEFINED__
#include <inttypes.h>
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
if test "$with_database_berkdb" != "no"; then
echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6
-echo "configure:12251: checking for Berkeley DB version" >&5
+echo "configure:12397: checking for Berkeley DB version" >&5
cat > conftest.$ac_ext <<EOF
-#line 12253 "configure"
+#line 12399 "configure"
#include "confdefs.h"
#include <$db_h_path>
#if DB_VERSION_MAJOR > 1
rm -f conftest*
echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6
-echo "configure:12272: checking for $dbfunc" >&5
+echo "configure:12418: checking for $dbfunc" >&5
cat > conftest.$ac_ext <<EOF
-#line 12275 "configure"
+#line 12421 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $dbfunc(); below. */
; return 0; }
EOF
-if { (eval echo configure:12298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$dbfunc=yes"
else
echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6
-echo "configure:12317: checking for $dbfunc in -ldb" >&5
+echo "configure:12463: checking for $dbfunc in -ldb" >&5
ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'`
xe_check_libs=" -ldb "
cat > conftest.$ac_ext <<EOF
-#line 12322 "configure"
+#line 12468 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
$dbfunc()
; return 0; }
EOF
-if { (eval echo configure:12333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_socks" = "yes"; then
echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6
-echo "configure:12397: checking for SOCKSinit in -lsocks" >&5
+echo "configure:12543: checking for SOCKSinit in -lsocks" >&5
ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'`
xe_check_libs=" -lsocks "
cat > conftest.$ac_ext <<EOF
-#line 12402 "configure"
+#line 12548 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
SOCKSinit()
; return 0; }
EOF
-if { (eval echo configure:12413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if test "$with_modules" != "no"; then
echo "checking for module support" 1>&6
-echo "configure:12468: checking for module support" >&5
+echo "configure:12614: checking for module support" >&5
ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
-echo "configure:12472: checking for dlfcn.h" >&5
+echo "configure:12618: checking for dlfcn.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 12475 "configure"
+#line 12621 "configure"
#include "confdefs.h"
#include <dlfcn.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:12498: checking for dlopen in -ldl" >&5
+echo "configure:12644: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
xe_check_libs=" -ldl "
cat > conftest.$ac_ext <<EOF
-#line 12503 "configure"
+#line 12649 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dlopen()
; return 0; }
EOF
-if { (eval echo configure:12514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6
-echo "configure:12533: checking for dlopen in -lc" >&5
+echo "configure:12679: checking for dlopen in -lc" >&5
ac_lib_var=`echo c'_'dlopen | sed 'y%./+-%__p_%'`
xe_check_libs=" -lc "
cat > conftest.$ac_ext <<EOF
-#line 12538 "configure"
+#line 12684 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dlopen()
; return 0; }
EOF
-if { (eval echo configure:12549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:12588: checking for shl_load in -ldld" >&5
+echo "configure:12734: checking for shl_load in -ldld" >&5
ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
xe_check_libs=" -ldld "
cat > conftest.$ac_ext <<EOF
-#line 12593 "configure"
+#line 12739 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
shl_load()
; return 0; }
EOF
-if { (eval echo configure:12604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6
-echo "configure:12631: checking for dld_init in -ldld" >&5
+echo "configure:12777: checking for dld_init in -ldld" >&5
ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'`
xe_check_libs=" -ldld "
cat > conftest.$ac_ext <<EOF
-#line 12636 "configure"
+#line 12782 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dld_init()
; return 0; }
EOF
-if { (eval echo configure:12647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
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*) ;;
XEGCC=yes
else
echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:12720: checking checking whether we are using GNU C" >&5
+echo "configure:12866: checking checking whether we are using GNU C" >&5
cat > conftest.$ac_ext <<EOF
-#line 12722 "configure"
+#line 12868 "configure"
#include "confdefs.h"
#ifdef __GNUC__
fi
echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6
-echo "configure:12744: checking how to produce PIC code" >&5
+echo "configure:12890: checking how to produce PIC code" >&5
wl=
can_build_shared=yes
# PIC is the default for these OSes.
;;
- os2*)
+ aix3* | aix4* | os2*)
# We can build DLLs from non-PIC.
;;
amigaos*)
# Check to make sure the dll_cflags actually works.
echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6
-echo "configure:12837: checking if PIC flag ${dll_cflags} really works" >&5
+echo "configure:12983: checking if PIC flag ${dll_cflags} really works" >&5
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $dll_cflags -DPIC"
cat > conftest.$ac_ext <<EOF
-#line 12841 "configure"
+#line 12987 "configure"
#include "confdefs.h"
int main() {
int x=0;
; return 0; }
EOF
-if { (eval echo configure:12848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12994: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
# On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also
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"
xe_libs=
ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5'
cat > conftest.$ac_ext <<EOF
-#line 12930 "configure"
+#line 13076 "configure"
#include "confdefs.h"
int main() {
int x=0;
; return 0; }
EOF
-if { (eval echo configure:12937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cc_produces_so=yes
else
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.
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
# Check to see if it really is or isn't GNU ld.
echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6
-echo "configure:13025: checking if the linker is GNU ld" >&5
+echo "configure:13171: checking if the linker is GNU ld" >&5
# I'd rather use --version here, but apparently some GNU ld's only accept -v.
if $LTLD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
xe_gnu_ld=yes
# 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
for ac_func in dlerror _dlerror
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13267: checking for $ac_func" >&5
+echo "configure:13413: checking for $ac_func" >&5
cat > conftest.$ac_ext <<EOF
-#line 13270 "configure"
+#line 13416 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:13293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
fi
cat > conftest.$ac_ext <<EOF
-#line 13332 "configure"
+#line 13478 "configure"
#include "confdefs.h"
int main(int c,char *v[]){return 0;}
EOF
-if { (eval echo configure:13336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:13482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
then
:
else
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=''
external_widget | \
verbose | \
extra_verbose | \
- const_is_losing | \
usage_tracking | \
use_union_type | \
pdump | \
"use_minimal_tagbits" | \
"use_indexed_lrecord_implementation" | \
"run_in_place" | \
+ "const_is_losing" | \
"with_gnu_make" )
AC_MSG_WARN([Obsolete option \`--$optname' ignored.])
;;
AC_PROG_CPP
-AC_AIX
+dnl --------------------------------------------------------------------
+dnl Compiler feature macros
+dnl --------------------------------------------------------------------
+
+dnl We want feature macros defined here and in config.h.in, so that
+dnl the compilation environment at configure time and compile time agree.
+
+AC_AIX dnl Defines _ALL_SOURCE on AIX.
AC_MSG_CHECKING(for GNU libc)
AC_TRY_COMPILE([#include <features.h>],[
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!
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)
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
AC_TRY_RUN([#include <fcntl.h>
int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }],
[AC_DEFINE(HAVE_MSG_SELECT)])
- const_is_losing=no
with_file_coding=yes
XE_ADD_OBJS(console-msw.o device-msw.o event-msw.o frame-msw.o objects-msw.o select-msw.o redisplay-msw.o glyphs-msw.o gui-msw.o)
fi
if test -z "$with_xpm"; then
AC_MSG_CHECKING(for Xpm - no older than 3.4f)
xe_check_libs=-lXpm
- AC_TRY_RUN([#include <X11/xpm.h>
+ AC_TRY_RUN([#define XPM_NUMBERS
+#include <X11/xpm.h>
int main(int c, char **v) {
return c == 1 ? 0 :
XpmIncludeVersion != XpmLibraryVersion() ? 1 :
],
[
struct timeval time;
- struct timezone dummy;
- gettimeofday (&time, &dummy);
+ gettimeofday (&time, 0);
],
[AC_MSG_RESULT(two)],
[AC_MSG_RESULT(one)
dnl rel_alloc requires either GNU malloc or system malloc with mmap
dnl We only turn rel_alloc on by default if mmap is available.
-test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
-test "$rel_alloc" = "default" -a "$have_mmap" = "yes" && rel_alloc=yes
+test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
+if test "$rel_alloc $have_mmap" = "default yes"; then
+ if test "$doug_lea_malloc" = "yes"; then
+ dnl Check if malloc() calls mmap(), making rel_alloc pointless.
+ AC_MSG_CHECKING(for M_MMAP_THRESHOLD)
+ AC_TRY_COMPILE([#include <malloc.h>],[
+#ifndef M_MMAP_THRESHOLD
+#error No M_MMAP_THRESHOLD :-(
+!@+$%^&*_)(_ - unlikely to compile...
+#endif
+], [rel_alloc=no; AC_MSG_RESULT(yes);], [rel_alloc=yes; AC_MSG_RESULT(no);])
+ else
+ rel_alloc=yes
+ fi
+fi
test "$rel_alloc" = "yes" && AC_DEFINE(REL_ALLOC)
dnl Check for terminal I/O variants
if test "$with_database_berkdb" != "no"; then
AC_MSG_CHECKING(for Berkeley db.h)
for path in "db/db.h" "db.h"; do
- AC_TRY_COMPILE([#ifdef HAVE_INTTYPES_H
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1)
+#ifdef HAVE_INTTYPES_H
#define __BIT_TYPES_DEFINED__
#include <inttypes.h>
typedef uint8_t u_int8_t;
typedef uint64_t u_int64_t;
#endif
#endif
+#endif
#include <$path>
],[], db_h_path="$path"; break)
done
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)
`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
cl.info-1: 1164
cl.info-2: 46306
cl.info-3: 89087
-cl.info-4: 138385
-cl.info-5: 176381
-cl.info-6: 218986
+cl.info-4: 137816
+cl.info-5: 175812
+cl.info-6: 218417
\1f
Tag Table:
(Indirect)
Node: Macros\7f113111
Node: Declarations\7f116329
Node: Symbols\7f124821
-Node: Property Lists\7f125113
-Node: Creating Symbols\7f127862
-Node: Numbers\7f129940
-Node: Predicates on Numbers\7f130420
-Node: Numerical Functions\7f131449
-Node: Random Numbers\7f135676
-Node: Implementation Parameters\7f138385
-Node: Sequences\7f141957
-Node: Sequence Basics\7f142630
-Node: Mapping over Sequences\7f146208
-Node: Sequence Functions\7f152062
-Node: Searching Sequences\7f158237
-Node: Sorting Sequences\7f161274
-Node: Lists\7f163822
-Node: List Functions\7f164247
-Node: Substitution of Expressions\7f168510
-Node: Lists as Sets\7f170396
-Node: Association Lists\7f174458
-Node: Hash Tables\7f176161
-Node: Structures\7f176381
-Node: Assertions\7f191164
-Node: Efficiency Concerns\7f194107
-Node: Common Lisp Compatibility\7f200434
-Node: Old CL Compatibility\7f203590
-Node: Porting Common Lisp\7f207973
-Node: Function Index\7f218986
-Node: Variable Index\7f230192
+Node: Property Lists\7f125102
+Node: Creating Symbols\7f127293
+Node: Numbers\7f129371
+Node: Predicates on Numbers\7f129851
+Node: Numerical Functions\7f130880
+Node: Random Numbers\7f135107
+Node: Implementation Parameters\7f137816
+Node: Sequences\7f141388
+Node: Sequence Basics\7f142061
+Node: Mapping over Sequences\7f145639
+Node: Sequence Functions\7f151493
+Node: Searching Sequences\7f157668
+Node: Sorting Sequences\7f160705
+Node: Lists\7f163253
+Node: List Functions\7f163678
+Node: Substitution of Expressions\7f167941
+Node: Lists as Sets\7f169827
+Node: Association Lists\7f173889
+Node: Hash Tables\7f175592
+Node: Structures\7f175812
+Node: Assertions\7f190595
+Node: Efficiency Concerns\7f193538
+Node: Common Lisp Compatibility\7f199865
+Node: Old CL Compatibility\7f203021
+Node: Porting Common Lisp\7f207404
+Node: Function Index\7f218417
+Node: Variable Index\7f229566
\1f
End Tag Table
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.
\1f
Indirect:
internals.info-1: 1776
-internals.info-2: 45928
-internals.info-3: 93572
-internals.info-4: 141935
-internals.info-5: 183963
-internals.info-6: 233381
-internals.info-7: 282110
-internals.info-8: 331561
+internals.info-2: 46607
+internals.info-3: 94313
+internals.info-4: 142724
+internals.info-5: 184821
+internals.info-6: 234636
+internals.info-7: 281302
+internals.info-8: 328518
+internals.info-9: 374004
\1f
Tag Table:
(Indirect)
Node: Top\7f1776
-Node: A History of Emacs\7f6358
-Node: Through Version 18\7f7883
-Node: Lucid Emacs\7f11304
-Node: GNU Emacs 19\7f14322
-Node: GNU Emacs 20\7f16505
-Node: XEmacs\7f16932
-Node: XEmacs From the Outside\7f20111
-Node: The Lisp Language\7f21878
-Node: XEmacs From the Perspective of Building\7f31420
-Node: XEmacs From the Inside\7f37545
-Node: The XEmacs Object System (Abstractly Speaking)\7f45928
-Node: How Lisp Objects Are Represented in C\7f60014
-Node: Rules When Writing New C Code\7f68572
-Node: General Coding Rules\7f69376
-Node: Writing Lisp Primitives\7f75113
-Node: Adding Global Lisp Variables\7f86282
-Node: Coding for Mule\7f89920
-Node: Character-Related Data Types\7f90899
-Node: Working With Character and Byte Positions\7f93572
-Node: Conversion to and from External Data\7f97322
-Node: General Guidelines for Writing Mule-Aware Code\7f102203
-Node: An Example of Mule-Aware Code\7f104234
-Node: Techniques for XEmacs Developers\7f106221
-Node: A Summary of the Various XEmacs Modules\7f109988
-Node: Low-Level Modules\7f110808
-Node: Basic Lisp Modules\7f118330
-Node: Modules for Standard Editing Operations\7f126651
-Node: Editor-Level Control Flow Modules\7f132539
-Node: Modules for the Basic Displayable Lisp Objects\7f135985
-Node: Modules for other Display-Related Lisp Objects\7f138507
-Node: Modules for the Redisplay Mechanism\7f139584
-Node: Modules for Interfacing with the File System\7f141935
-Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f145633
-Node: Modules for Interfacing with the Operating System\7f151086
-Node: Modules for Interfacing with X Windows\7f158747
-Node: Modules for Internationalization\7f162183
-Node: Allocation of Objects in XEmacs Lisp\7f164820
-Node: Introduction to Allocation\7f165374
-Node: Garbage Collection\7f170836
-Node: GCPROing\7f173789
-Node: Garbage Collection - Step by Step\7f180599
-Node: Invocation\7f180991
-Node: garbage_collect_1\7f183963
-Node: mark_object\7f193443
-Node: gc_sweep\7f195255
-Node: sweep_lcrecords_1\7f200318
-Node: compact_string_chars\7f201313
-Node: sweep_strings\7f203493
-Node: sweep_bit_vectors_1\7f204458
-Node: Integers and Characters\7f205134
-Node: Allocation from Frob Blocks\7f205886
-Node: lrecords\7f207490
-Node: Low-level allocation\7f219952
-Node: Pure Space\7f224120
-Node: Cons\7f224295
-Node: Vector\7f225011
-Node: Bit Vector\7f225588
-Node: Symbol\7f226081
-Node: Marker\7f226650
-Node: String\7f227205
-Node: Compiled Function\7f230818
-Node: Events and the Event Loop\7f230987
-Node: Introduction to Events\7f231466
-Node: Main Loop\7f233381
-Node: Specifics of the Event Gathering Mechanism\7f236956
-Node: Specifics About the Emacs Event\7f249409
-Node: The Event Stream Callback Routines\7f249664
-Node: Other Event Loop Functions\7f249909
-Node: Converting Events\7f251049
-Node: Dispatching Events; The Command Builder\7f251658
-Node: Evaluation; Stack Frames; Bindings\7f251893
-Node: Evaluation\7f252235
-Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f258775
-Node: Simple Special Forms\7f261159
-Node: Catch and Throw\7f261941
-Node: Symbols and Variables\7f264516
-Node: Introduction to Symbols\7f264780
-Node: Obarrays\7f265818
-Node: Symbol Values\7f269351
-Node: Buffers and Textual Representation\7f271639
-Node: Introduction to Buffers\7f272297
-Node: The Text in a Buffer\7f274960
-Node: Buffer Lists\7f282110
-Node: Markers and Extents\7f284061
-Node: Bufbytes and Emchars\7f286326
-Node: The Buffer Object\7f286541
-Node: MULE Character Sets and Encodings\7f290021
-Node: Character Sets\7f291083
-Node: Encodings\7f294526
-Node: Japanese EUC (Extended Unix Code)\7f295593
-Node: JIS7\7f296407
-Node: Internal Mule Encodings\7f297757
-Node: Internal String Encoding\7f299587
-Node: Internal Character Encoding\7f301700
-Node: CCL\7f303424
-Node: The Lisp Reader and Compiler\7f310176
-Node: Lstreams\7f310389
-Node: Creating an Lstream\7f311420
-Node: Lstream Types\7f312630
-Node: Lstream Functions\7f312882
-Node: Lstream Methods\7f316448
-Node: Consoles; Devices; Frames; Windows\7f319590
-Node: Introduction to Consoles; Devices; Frames; Windows\7f319905
-Node: Point\7f322397
-Node: Window Hierarchy\7f323676
-Node: The Window Object\7f328124
-Node: The Redisplay Mechanism\7f331561
-Node: Critical Redisplay Sections\7f332353
-Node: Line Start Cache\7f333308
-Node: Redisplay Piece by Piece\7f336544
-Node: Extents\7f338580
-Node: Introduction to Extents\7f339118
-Node: Extent Ordering\7f340244
-Node: Format of the Extent Info\7f341485
-Node: Zero-Length Extents\7f343372
-Node: Mathematics of Extent Ordering\7f344770
-Node: Extent Fragments\7f349527
-Node: Faces\7f350613
-Node: Glyphs\7f350729
-Node: Specifiers\7f353747
-Node: Menus\7f353876
-Node: Subprocesses\7f356134
-Node: Interface to X Windows\7f358110
-Node: Index\7f358281
+Node: A History of Emacs\7f7010
+Node: Through Version 18\7f8535
+Node: Lucid Emacs\7f11983
+Node: GNU Emacs 19\7f15001
+Node: GNU Emacs 20\7f17184
+Node: XEmacs\7f17611
+Node: XEmacs From the Outside\7f20790
+Node: The Lisp Language\7f22557
+Node: XEmacs From the Perspective of Building\7f32099
+Node: XEmacs From the Inside\7f38224
+Node: The XEmacs Object System (Abstractly Speaking)\7f46607
+Node: How Lisp Objects Are Represented in C\7f60693
+Node: Rules When Writing New C Code\7f69251
+Node: General Coding Rules\7f70055
+Node: Writing Lisp Primitives\7f75830
+Node: Adding Global Lisp Variables\7f86999
+Node: Coding for Mule\7f90637
+Node: Character-Related Data Types\7f91616
+Node: Working With Character and Byte Positions\7f94313
+Node: Conversion to and from External Data\7f98063
+Node: General Guidelines for Writing Mule-Aware Code\7f102944
+Node: An Example of Mule-Aware Code\7f104975
+Node: Techniques for XEmacs Developers\7f106962
+Node: A Summary of the Various XEmacs Modules\7f110729
+Node: Low-Level Modules\7f111549
+Node: Basic Lisp Modules\7f119119
+Node: Modules for Standard Editing Operations\7f127440
+Node: Editor-Level Control Flow Modules\7f133328
+Node: Modules for the Basic Displayable Lisp Objects\7f136774
+Node: Modules for other Display-Related Lisp Objects\7f139296
+Node: Modules for the Redisplay Mechanism\7f140373
+Node: Modules for Interfacing with the File System\7f142724
+Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f146422
+Node: Modules for Interfacing with the Operating System\7f151875
+Node: Modules for Interfacing with X Windows\7f159536
+Node: Modules for Internationalization\7f162972
+Node: Allocation of Objects in XEmacs Lisp\7f165609
+Node: Introduction to Allocation\7f166145
+Node: Garbage Collection\7f171652
+Node: GCPROing\7f174605
+Node: Garbage Collection - Step by Step\7f181415
+Node: Invocation\7f181807
+Node: garbage_collect_1\7f184821
+Node: mark_object\7f194301
+Node: gc_sweep\7f196113
+Node: sweep_lcrecords_1\7f201176
+Node: compact_string_chars\7f202171
+Node: sweep_strings\7f204351
+Node: sweep_bit_vectors_1\7f205316
+Node: Integers and Characters\7f205992
+Node: Allocation from Frob Blocks\7f206744
+Node: lrecords\7f208348
+Node: Low-level allocation\7f220810
+Node: Pure Space\7f224978
+Node: Cons\7f225153
+Node: Vector\7f225869
+Node: Bit Vector\7f226446
+Node: Symbol\7f226939
+Node: Marker\7f227508
+Node: String\7f228063
+Node: Compiled Function\7f231676
+Node: Dumping\7f231845
+Node: Overview\7f234066
+Node: Data descriptions\7f234636
+Node: Dumping phase\7f236641
+Node: Object inventory\7f237043
+Node: Address allocation\7f239897
+Node: The header\7f241284
+Node: Data dumping\7f241792
+Node: Pointers dumping\7f242453
+Node: Reloading phase\7f243671
+Node: Remaining issues\7f245432
+Node: Events and the Event Loop\7f246393
+Node: Introduction to Events\7f246843
+Node: Main Loop\7f248792
+Node: Specifics of the Event Gathering Mechanism\7f252367
+Node: Specifics About the Emacs Event\7f264820
+Node: The Event Stream Callback Routines\7f265075
+Node: Other Event Loop Functions\7f265320
+Node: Converting Events\7f266460
+Node: Dispatching Events; The Command Builder\7f267069
+Node: Evaluation; Stack Frames; Bindings\7f267304
+Node: Evaluation\7f267646
+Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f274229
+Node: Simple Special Forms\7f276613
+Node: Catch and Throw\7f277395
+Node: Symbols and Variables\7f279970
+Node: Introduction to Symbols\7f280234
+Node: Obarrays\7f281302
+Node: Symbol Values\7f284835
+Node: Buffers and Textual Representation\7f287123
+Node: Introduction to Buffers\7f287781
+Node: The Text in a Buffer\7f290487
+Node: Buffer Lists\7f297637
+Node: Markers and Extents\7f299588
+Node: Bufbytes and Emchars\7f301853
+Node: The Buffer Object\7f302068
+Node: MULE Character Sets and Encodings\7f305548
+Node: Character Sets\7f306610
+Node: Encodings\7f310095
+Node: Japanese EUC (Extended Unix Code)\7f311162
+Node: JIS7\7f311994
+Node: Internal Mule Encodings\7f313344
+Node: Internal String Encoding\7f315174
+Node: Internal Character Encoding\7f317319
+Node: CCL\7f319043
+Node: The Lisp Reader and Compiler\7f325795
+Node: Lstreams\7f326008
+Node: Creating an Lstream\7f327039
+Node: Lstream Types\7f328266
+Node: Lstream Functions\7f328518
+Node: Lstream Methods\7f332084
+Node: Consoles; Devices; Frames; Windows\7f335226
+Node: Introduction to Consoles; Devices; Frames; Windows\7f335541
+Node: Point\7f338076
+Node: Window Hierarchy\7f339355
+Node: The Window Object\7f343803
+Node: The Redisplay Mechanism\7f347240
+Node: Critical Redisplay Sections\7f348032
+Node: Line Start Cache\7f349019
+Node: Redisplay Piece by Piece\7f352255
+Node: Extents\7f354291
+Node: Introduction to Extents\7f354825
+Node: Extent Ordering\7f355967
+Node: Format of the Extent Info\7f357208
+Node: Zero-Length Extents\7f359095
+Node: Mathematics of Extent Ordering\7f360493
+Node: Extent Fragments\7f365250
+Node: Faces\7f366336
+Node: Glyphs\7f366452
+Node: Specifiers\7f369470
+Node: Menus\7f369599
+Node: Subprocesses\7f371857
+Node: Interface to X Windows\7f373833
+Node: Index\7f374004
\1f
End Tag Table
* 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::
* 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
* 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::
* 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::
* Character Sets::
* Encodings::
* Internal Mule Encodings::
+* CCL::
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
* Extent Ordering:: How extents are ordered internally.
* Format of the Extent Info:: The extent information in a buffer or string.
* Zero-Length Extents:: A weird special case.
-* Mathematics of Extent Ordering:: A rigorous foundation.
+* Mathematics of Extent Ordering:: A rigorous foundation.
* Extent Fragments:: Cached information useful for redisplay.
-Faces
-
-Glyphs
-
-Specifiers
-
-Menus
-
-Subprocesses
-
-Interface to X Windows
-
\1f
File: internals.info, Node: A History of Emacs, Next: XEmacs From the Outside, Prev: Top, Up: Top
* XEmacs:: The continuation of Lucid Emacs.
\1f
-File: internals.info, Node: Through Version 18, Next: Lucid Emacs, Up: A History of Emacs
+File: internals.info, Node: Through Version 18, Next: Lucid Emacs, Prev: A History of Emacs, Up: A History of Emacs
Through Version 18
==================
* Techniques for XEmacs Developers::
\1f
-File: internals.info, Node: General Coding Rules, Next: Writing Lisp Primitives, Up: Rules When Writing New C Code
+File: internals.info, Node: General Coding Rules, Next: Writing Lisp Primitives, Prev: Rules When Writing New C Code, Up: Rules When Writing New C Code
General Coding Rules
====================
* An Example of Mule-Aware Code::
\1f
-File: internals.info, Node: Character-Related Data Types, Next: Working With Character and Byte Positions, Up: Coding for Mule
+File: internals.info, Node: Character-Related Data Types, Next: Working With Character and Byte Positions, Prev: Coding for Mule, Up: Coding for Mule
Character-Related Data Types
----------------------------
lispref.info-3: 96925
lispref.info-4: 146765
lispref.info-5: 195599
-lispref.info-6: 243284
-lispref.info-7: 291562
-lispref.info-8: 340698
-lispref.info-9: 387512
-lispref.info-10: 436964
-lispref.info-11: 485192
-lispref.info-12: 534964
-lispref.info-13: 582863
-lispref.info-14: 631086
-lispref.info-15: 679340
-lispref.info-16: 729096
-lispref.info-17: 777847
-lispref.info-18: 824752
-lispref.info-19: 872135
-lispref.info-20: 920976
-lispref.info-21: 970569
-lispref.info-22: 1017488
-lispref.info-23: 1064515
-lispref.info-24: 1113914
-lispref.info-25: 1163596
-lispref.info-26: 1213506
-lispref.info-27: 1262729
-lispref.info-28: 1311495
-lispref.info-29: 1360931
-lispref.info-30: 1402266
-lispref.info-31: 1451409
-lispref.info-32: 1500622
-lispref.info-33: 1550196
-lispref.info-34: 1598675
-lispref.info-35: 1644357
-lispref.info-36: 1686356
-lispref.info-37: 1731296
-lispref.info-38: 1780983
-lispref.info-39: 1830087
-lispref.info-40: 1879491
-lispref.info-41: 1928817
-lispref.info-42: 1977518
-lispref.info-43: 2022945
-lispref.info-44: 2061281
+lispref.info-6: 243286
+lispref.info-7: 291564
+lispref.info-8: 340173
+lispref.info-9: 388500
+lispref.info-10: 437952
+lispref.info-11: 486180
+lispref.info-12: 535952
+lispref.info-13: 583851
+lispref.info-14: 632074
+lispref.info-15: 680328
+lispref.info-16: 730084
+lispref.info-17: 778835
+lispref.info-18: 825740
+lispref.info-19: 873123
+lispref.info-20: 921964
+lispref.info-21: 971557
+lispref.info-22: 1018476
+lispref.info-23: 1065503
+lispref.info-24: 1114902
+lispref.info-25: 1164584
+lispref.info-26: 1214494
+lispref.info-27: 1263717
+lispref.info-28: 1312483
+lispref.info-29: 1361919
+lispref.info-30: 1403254
+lispref.info-31: 1452397
+lispref.info-32: 1501610
+lispref.info-33: 1551184
+lispref.info-34: 1599663
+lispref.info-35: 1645345
+lispref.info-36: 1687344
+lispref.info-37: 1732284
+lispref.info-38: 1781971
+lispref.info-39: 1831075
+lispref.info-40: 1880479
+lispref.info-41: 1929805
+lispref.info-42: 1978506
+lispref.info-43: 2023933
+lispref.info-44: 2062269
\1f
Tag Table:
(Indirect)
Node: String Conversion\7f209943
Node: Modifying Strings\7f213619
Node: String Properties\7f214260
-Node: Formatting Strings\7f214903
-Node: Character Case\7f224521
-Node: Case Tables\7f227667
-Node: Char Tables\7f231565
-Node: Char Table Types\7f232957
-Node: Working With Char Tables\7f234532
-Node: Lists\7f236481
-Node: Cons Cells\7f237604
-Node: Lists as Boxes\7f238940
-Node: List-related Predicates\7f241582
-Node: List Elements\7f243284
-Node: Building Lists\7f248313
-Node: Modifying Lists\7f254305
-Node: Setcar\7f255117
-Node: Setcdr\7f257538
-Node: Rearrangement\7f260049
-Node: Sets And Lists\7f265635
-Node: Association Lists\7f269863
-Ref: Association Lists-Footnote-1\7f279154
-Node: Property Lists\7f279359
-Node: Working With Normal Plists\7f280907
-Node: Working With Lax Plists\7f283175
-Node: Converting Plists To/From Alists\7f285415
-Node: Weak Lists\7f286763
-Node: Sequences Arrays Vectors\7f288926
-Node: Sequence Functions\7f291562
-Node: Arrays\7f295221
-Node: Array Functions\7f298285
-Node: Vectors\7f300818
-Node: Vector Functions\7f302316
-Node: Bit Vectors\7f304887
-Node: Bit Vector Functions\7f305732
-Node: Symbols\7f307982
-Node: Symbol Components\7f309031
-Node: Definitions\7f313204
-Node: Creating Symbols\7f315429
-Node: Symbol Properties\7f322463
-Node: Plists and Alists\7f323979
-Node: Symbol Plists\7f325728
-Node: Other Plists\7f327537
-Node: Evaluation\7f329315
-Node: Intro Eval\7f330120
-Ref: Intro Eval-Footnote-1\7f333473
-Node: Eval\7f333608
-Node: Forms\7f338026
-Node: Self-Evaluating Forms\7f339185
-Node: Symbol Forms\7f340698
-Node: Classifying Lists\7f341615
-Node: Function Indirection\7f342371
-Node: Function Forms\7f345482
-Node: Macro Forms\7f346479
-Node: Special Forms\7f348079
-Node: Autoloading\7f350388
-Node: Quoting\7f350886
-Node: Control Structures\7f352247
-Node: Sequencing\7f353867
-Node: Conditionals\7f356732
-Node: Combining Conditions\7f360155
-Node: Iteration\7f363425
-Node: Nonlocal Exits\7f365204
-Node: Catch and Throw\7f365906
-Node: Examples of Catch\7f369745
-Node: Errors\7f371764
-Node: Signaling Errors\7f373253
-Node: Processing of Errors\7f377992
-Node: Handling Errors\7f380271
-Node: Error Symbols\7f387512
-Node: Cleanups\7f391468
-Node: Variables\7f395246
-Node: Global Variables\7f397015
-Node: Constant Variables\7f398091
-Node: Local Variables\7f398717
-Node: Void Variables\7f403654
-Node: Defining Variables\7f407170
-Node: Accessing Variables\7f414334
-Node: Setting Variables\7f415759
-Node: Variable Scoping\7f420278
-Node: Scope\7f421877
-Node: Extent\7f423402
-Node: Impl of Scope\7f424881
-Node: Using Scoping\7f426844
-Node: Buffer-Local Variables\7f428366
-Node: Intro to Buffer-Local\7f429202
-Node: Creating Buffer-Local\7f431745
-Node: Default Value\7f436964
-Node: Variable Aliases\7f440107
-Node: Functions\7f441892
-Node: What Is a Function\7f442986
-Node: Lambda Expressions\7f447032
-Node: Lambda Components\7f447942
-Node: Simple Lambda\7f449774
-Node: Argument List\7f451431
-Node: Function Documentation\7f455159
-Node: Function Names\7f457101
-Node: Defining Functions\7f459674
-Node: Calling Functions\7f462714
-Node: Mapping Functions\7f466563
-Node: Anonymous Functions\7f469251
-Node: Function Cells\7f472496
-Node: Inline Functions\7f477306
-Node: Related Topics\7f479116
-Node: Macros\7f480169
-Node: Simple Macro\7f481453
-Node: Expansion\7f482188
-Node: Compiling Macros\7f485192
-Node: Defining Macros\7f487028
-Node: Backquote\7f488345
-Node: Problems with Macros\7f490742
-Node: Argument Evaluation\7f491437
-Node: Surprising Local Vars\7f494352
-Node: Eval During Expansion\7f496420
-Node: Repeated Expansion\7f498113
-Node: Customization\7f500029
-Node: Common Keywords\7f500498
-Node: Group Definitions\7f503343
-Node: Variable Definitions\7f505535
-Node: Customization Types\7f510525
-Node: Simple Types\7f511960
-Node: Composite Types\7f514117
-Node: Splicing into Lists\7f518807
-Node: Type Keywords\7f520642
-Node: Loading\7f524162
-Node: How Programs Do Loading\7f525837
-Node: Autoload\7f534964
-Node: Repeated Loading\7f541043
-Node: Named Features\7f543156
-Node: Unloading\7f549588
-Node: Hooks for Loading\7f551744
-Node: Byte Compilation\7f552461
-Node: Speed of Byte-Code\7f554378
-Node: Compilation Functions\7f555585
-Node: Docs and Compilation\7f561972
-Node: Dynamic Loading\7f564625
-Node: Eval During Compile\7f566989
-Node: Compiled-Function Objects\7f568254
-Node: Disassembly\7f573052
-Node: Debugging\7f580306
-Node: Debugger\7f581718
-Node: Error Debugging\7f582863
-Node: Infinite Loops\7f585616
-Node: Function Debugging\7f586860
-Node: Explicit Debug\7f589650
-Node: Using Debugger\7f590421
-Node: Debugger Commands\7f592283
-Node: Invoking the Debugger\7f596600
-Node: Internals of Debugger\7f600515
-Node: Syntax Errors\7f605402
-Node: Excess Open\7f606650
-Node: Excess Close\7f608525
-Node: Compilation Errors\7f609946
-Node: Edebug\7f611234
-Node: Using Edebug\7f613342
-Node: Instrumenting\7f616039
-Node: Edebug Execution Modes\7f619528
-Node: Jumping\7f622638
-Node: Edebug Misc\7f624981
-Node: Breakpoints\7f626370
-Node: Global Break Condition\7f629176
-Node: Embedded Breakpoints\7f630131
-Node: Trapping Errors\7f631086
-Node: Edebug Views\7f633162
-Node: Edebug Eval\7f635127
-Node: Eval List\7f636304
-Node: Reading in Edebug\7f639689
-Node: Printing in Edebug\7f640488
-Node: Tracing\7f642203
-Node: Coverage Testing\7f644089
-Node: The Outside Context\7f646130
-Node: Checking Whether to Stop\7f647079
-Node: Edebug Display Update\7f647726
-Node: Edebug Recursive Edit\7f649749
-Node: Instrumenting Macro Calls\7f651404
-Node: Specification List\7f653886
-Node: Backtracking\7f663297
-Node: Debugging Backquote\7f665235
-Node: Specification Examples\7f668941
-Node: Edebug Options\7f671008
-Node: Read and Print\7f676345
-Node: Streams Intro\7f677322
-Node: Input Streams\7f679340
-Node: Input Functions\7f684241
-Node: Output Streams\7f686301
-Node: Output Functions\7f690352
-Node: Output Variables\7f694652
-Node: Minibuffers\7f699451
-Node: Intro to Minibuffers\7f700603
-Node: Text from Minibuffer\7f702791
-Node: Object from Minibuffer\7f707666
-Node: Minibuffer History\7f710893
-Node: Completion\7f713872
-Node: Basic Completion\7f715847
-Node: Minibuffer Completion\7f720876
-Node: Completion Commands\7f724453
-Node: High-Level Completion\7f729096
-Node: Reading File Names\7f733120
-Node: Programmed Completion\7f736804
-Node: Yes-or-No Queries\7f739186
-Node: Multiple Queries\7f744923
-Node: Reading a Password\7f748990
-Node: Minibuffer Misc\7f750327
-Node: Command Loop\7f755197
-Node: Command Overview\7f756541
-Node: Defining Commands\7f759819
-Node: Using Interactive\7f760567
-Node: Interactive Codes\7f765340
-Node: Interactive Examples\7f771132
-Node: Interactive Call\7f772446
-Node: Command Loop Info\7f777847
-Node: Events\7f782826
-Node: Event Types\7f784286
-Node: Event Contents\7f786209
-Node: Event Predicates\7f790685
-Node: Accessing Mouse Event Positions\7f792010
-Node: Frame-Level Event Position Info\7f792709
-Node: Window-Level Event Position Info\7f793749
-Node: Event Text Position Info\7f795513
-Node: Event Glyph Position Info\7f798005
-Node: Event Toolbar Position Info\7f799328
-Node: Other Event Position Info\7f799999
-Node: Accessing Other Event Info\7f800408
-Node: Working With Events\7f802028
-Node: Converting Events\7f808016
-Node: Reading Input\7f810968
-Node: Key Sequence Input\7f811970
-Node: Reading One Event\7f813924
-Node: Dispatching an Event\7f816741
-Node: Quoted Character Input\7f817192
-Node: Peeking and Discarding\7f818540
-Node: Waiting\7f822444
-Node: Quitting\7f824752
-Node: Prefix Command Arguments\7f829160
-Node: Recursive Editing\7f834247
-Node: Disabling Commands\7f839043
-Node: Command History\7f841111
-Node: Keyboard Macros\7f842848
-Node: Keymaps\7f845065
-Node: Keymap Terminology\7f846642
-Node: Format of Keymaps\7f849571
-Node: Creating Keymaps\7f849982
-Node: Inheritance and Keymaps\7f852061
-Node: Key Sequences\7f854433
-Node: Prefix Keys\7f859229
-Node: Active Keymaps\7f862814
-Node: Key Lookup\7f872135
-Node: Functions for Key Lookup\7f877298
-Node: Changing Key Bindings\7f882995
-Node: Key Binding Commands\7f889892
-Node: Scanning Keymaps\7f891957
-Node: Other Keymap Functions\7f900468
-Node: Menus\7f901090
-Node: Menu Format\7f901682
-Node: Menubar Format\7f910328
-Node: Menubar\7f910953
-Node: Modifying Menus\7f914066
-Node: Menu Filters\7f919080
-Node: Pop-Up Menus\7f920976
-Node: Menu Accelerators\7f923181
-Node: Creating Menu Accelerators\7f923937
-Node: Keyboard Menu Traversal\7f925297
-Node: Menu Accelerator Functions\7f926024
-Node: Buffers Menu\7f929101
-Node: Dialog Boxes\7f930395
-Node: Dialog Box Format\7f930562
-Node: Dialog Box Functions\7f931987
-Node: Toolbar\7f932384
-Node: Toolbar Intro\7f932709
-Node: Toolbar Descriptor Format\7f935118
-Node: Specifying the Toolbar\7f939612
-Node: Other Toolbar Variables\7f943217
-Node: Scrollbars\7f947643
-Node: Drag and Drop\7f947779
-Node: Supported Protocols\7f948855
-Node: OffiX DND\7f949358
-Node: CDE dt\7f950365
-Node: MSWindows OLE\7f950956
-Node: Loose ends\7f951127
-Node: Drop Interface\7f951519
-Node: Drag Interface\7f952541
-Node: Modes\7f952715
-Node: Major Modes\7f953666
-Node: Major Mode Conventions\7f956581
-Node: Example Major Modes\7f962536
-Node: Auto Major Mode\7f970569
-Node: Mode Help\7f978017
-Node: Derived Modes\7f979118
-Node: Minor Modes\7f981309
-Node: Minor Mode Conventions\7f982611
-Node: Keymaps and Minor Modes\7f985474
-Node: Modeline Format\7f986309
-Node: Modeline Data\7f988077
-Node: Modeline Variables\7f992347
-Node: %-Constructs\7f997063
-Node: Hooks\7f999974
-Node: Documentation\7f1006736
-Node: Documentation Basics\7f1008159
-Node: Accessing Documentation\7f1011209
-Node: Keys in Documentation\7f1017488
-Node: Describing Characters\7f1020967
-Node: Help Functions\7f1023316
-Node: Obsoleteness\7f1029767
-Node: Files\7f1032761
-Node: Visiting Files\7f1034686
-Node: Visiting Functions\7f1036191
-Node: Subroutines of Visiting\7f1041238
-Node: Saving Buffers\7f1043311
-Node: Reading from Files\7f1049404
-Node: Writing to Files\7f1051561
-Node: File Locks\7f1054278
-Node: Information about Files\7f1057331
-Node: Testing Accessibility\7f1058092
-Node: Kinds of Files\7f1061832
-Node: Truenames\7f1063513
-Node: File Attributes\7f1064515
-Node: Changing File Attributes\7f1069654
-Node: File Names\7f1075060
-Node: File Name Components\7f1076669
-Node: Directory Names\7f1079770
-Node: Relative File Names\7f1083223
-Node: File Name Expansion\7f1084301
-Node: Unique File Names\7f1088208
-Node: File Name Completion\7f1089823
-Node: User Name Completion\7f1092484
-Node: Contents of Directories\7f1093824
-Node: Create/Delete Dirs\7f1097137
-Node: Magic File Names\7f1098243
-Node: Partial Files\7f1103873
-Node: Intro to Partial Files\7f1104101
-Node: Creating a Partial File\7f1105341
-Node: Detached Partial Files\7f1106276
-Node: Format Conversion\7f1107398
-Node: Files and MS-DOS\7f1113914
-Node: Backups and Auto-Saving\7f1115978
-Node: Backup Files\7f1116653
-Node: Making Backups\7f1118050
-Node: Rename or Copy\7f1120799
-Node: Numbered Backups\7f1123292
-Node: Backup Names\7f1125536
-Node: Auto-Saving\7f1128828
-Node: Reverting\7f1136970
-Node: Buffers\7f1140128
-Node: Buffer Basics\7f1141545
-Node: Current Buffer\7f1143598
-Node: Buffer Names\7f1148286
-Node: Buffer File Name\7f1151491
-Node: Buffer Modification\7f1155610
-Node: Modification Time\7f1157803
-Node: Read Only Buffers\7f1161178
-Node: The Buffer List\7f1163596
-Node: Creating Buffers\7f1168426
-Node: Killing Buffers\7f1170572
-Node: Indirect Buffers\7f1174303
-Node: Windows\7f1176875
-Node: Basic Windows\7f1178353
-Node: Splitting Windows\7f1181451
-Node: Deleting Windows\7f1188340
-Node: Selecting Windows\7f1191020
-Node: Cyclic Window Ordering\7f1194149
-Node: Buffers and Windows\7f1198773
-Node: Displaying Buffers\7f1200614
-Node: Choosing Window\7f1205790
-Node: Window Point\7f1213506
-Node: Window Start\7f1215552
-Node: Vertical Scrolling\7f1220042
-Node: Horizontal Scrolling\7f1226179
-Node: Size of Window\7f1229688
-Node: Position of Window\7f1234406
-Node: Resizing Windows\7f1236646
-Node: Window Configurations\7f1242075
-Node: Frames\7f1245500
-Node: Creating Frames\7f1247269
-Node: Frame Properties\7f1248610
-Node: Property Access\7f1249426
-Node: Initial Properties\7f1250275
-Node: X Frame Properties\7f1252761
-Node: Size and Position\7f1257395
-Node: Frame Name\7f1259391
-Node: Frame Titles\7f1260305
-Node: Deleting Frames\7f1262129
-Node: Finding All Frames\7f1262729
-Node: Frames and Windows\7f1264723
-Node: Minibuffers and Frames\7f1266428
-Node: Input Focus\7f1267346
-Node: Visibility of Frames\7f1270423
-Node: Raising and Lowering\7f1272342
-Node: Frame Configurations\7f1274718
-Node: Frame Hooks\7f1275312
-Node: Consoles and Devices\7f1277117
-Node: Basic Console Functions\7f1279860
-Node: Basic Device Functions\7f1280283
-Node: Console Types and Device Classes\7f1280999
-Node: Connecting to a Console or Device\7f1283196
-Node: The Selected Console and Device\7f1285359
-Node: Console and Device I/O\7f1286385
-Node: Positions\7f1287149
-Node: Point\7f1288118
-Node: Motion\7f1291208
-Node: Character Motion\7f1291975
-Node: Word Motion\7f1294212
-Node: Buffer End Motion\7f1295713
-Node: Text Lines\7f1297210
-Node: Screen Lines\7f1301805
-Node: List Motion\7f1305868
-Node: Skipping Characters\7f1309276
-Node: Excursions\7f1311495
-Node: Narrowing\7f1314527
-Node: Markers\7f1319852
-Node: Overview of Markers\7f1320758
-Node: Predicates on Markers\7f1325450
-Node: Creating Markers\7f1326696
-Node: Information from Markers\7f1330733
-Node: Changing Markers\7f1331831
-Node: The Mark\7f1333209
-Node: The Region\7f1341703
-Node: Text\7f1347389
-Node: Near Point\7f1350088
-Node: Buffer Contents\7f1354275
-Node: Comparing Text\7f1355681
-Node: Insertion\7f1357089
-Node: Commands for Insertion\7f1360931
-Node: Deletion\7f1363887
-Node: User-Level Deletion\7f1367482
-Node: The Kill Ring\7f1371643
-Node: Kill Ring Concepts\7f1373817
-Node: Kill Functions\7f1374871
-Node: Yank Commands\7f1376776
-Node: Low-Level Kill Ring\7f1378647
-Node: Internals of Kill Ring\7f1381433
-Node: Undo\7f1384213
-Node: Maintaining Undo\7f1388542
-Node: Filling\7f1391162
-Node: Margins\7f1397156
-Node: Auto Filling\7f1401085
-Node: Sorting\7f1402266
-Node: Columns\7f1411566
-Node: Indentation\7f1414082
-Node: Primitive Indent\7f1414861
-Node: Mode-Specific Indent\7f1416105
-Node: Region Indent\7f1418616
-Node: Relative Indent\7f1421564
-Node: Indent Tabs\7f1423946
-Node: Motion by Indent\7f1425267
-Node: Case Changes\7f1426046
-Node: Text Properties\7f1429297
-Node: Examining Properties\7f1431110
-Node: Changing Properties\7f1432977
-Node: Property Search\7f1436568
-Node: Special Properties\7f1441279
-Node: Saving Properties\7f1441560
-Node: Substitution\7f1444702
-Node: Registers\7f1447972
-Node: Transposition\7f1450515
-Node: Change Hooks\7f1451409
-Node: Transformations\7f1453449
-Node: Searching and Matching\7f1457834
-Node: String Search\7f1458965
-Node: Regular Expressions\7f1463689
-Node: Syntax of Regexps\7f1465056
-Node: Regexp Example\7f1479435
-Node: Regexp Search\7f1481605
-Node: POSIX Regexps\7f1487693
-Node: Search and Replace\7f1489528
-Node: Match Data\7f1492893
-Node: Simple Match Data\7f1494023
-Node: Replacing Match\7f1498288
-Node: Entire Match Data\7f1500622
-Node: Saving Match Data\7f1502613
-Node: Searching and Case\7f1503994
-Node: Standard Regexps\7f1506028
-Node: Syntax Tables\7f1508226
-Node: Syntax Basics\7f1509340
-Node: Syntax Descriptors\7f1512312
-Node: Syntax Class Table\7f1514162
-Node: Syntax Flags\7f1520200
-Node: Syntax Table Functions\7f1523417
-Node: Motion and Syntax\7f1527281
-Node: Parsing Expressions\7f1528733
-Node: Standard Syntax Tables\7f1534802
-Node: Syntax Table Internals\7f1535646
-Node: Abbrevs\7f1536672
-Node: Abbrev Mode\7f1538475
-Node: Abbrev Tables\7f1539195
-Node: Defining Abbrevs\7f1540728
-Node: Abbrev Files\7f1542633
-Node: Abbrev Expansion\7f1544406
-Node: Standard Abbrev Tables\7f1549037
-Node: Extents\7f1550196
-Node: Intro to Extents\7f1551439
-Node: Creating and Modifying Extents\7f1555433
-Node: Extent Endpoints\7f1556940
-Node: Finding Extents\7f1560203
-Node: Mapping Over Extents\7f1563951
-Node: Extent Properties\7f1570068
-Node: Detached Extents\7f1580212
-Node: Extent Parents\7f1582071
-Node: Duplicable Extents\7f1583765
-Node: Extents and Events\7f1586986
-Node: Atomic Extents\7f1588893
-Node: Specifiers\7f1589340
-Node: Introduction to Specifiers\7f1591453
-Node: Specifiers In-Depth\7f1593763
-Node: Specifier Instancing\7f1598675
-Node: Specifier Types\7f1601937
-Node: Adding Specifications\7f1607011
-Node: Retrieving Specifications\7f1616373
-Node: Specifier Tag Functions\7f1620108
-Node: Specifier Instancing Functions\7f1623342
-Node: Specifier Example\7f1626749
-Node: Creating Specifiers\7f1629905
-Node: Specifier Validation Functions\7f1632154
-Node: Other Specification Functions\7f1634538
-Node: Faces and Window-System Objects\7f1638357
-Node: Faces\7f1638681
-Node: Merging Faces\7f1640298
-Node: Basic Face Functions\7f1642259
-Node: Face Properties\7f1644357
-Node: Face Convenience Functions\7f1654599
-Node: Other Face Display Functions\7f1657729
-Node: Fonts\7f1658542
-Node: Font Specifiers\7f1659243
-Node: Font Instances\7f1659484
-Node: Font Instance Names\7f1660451
-Node: Font Instance Size\7f1661292
-Node: Font Instance Characteristics\7f1662578
-Node: Font Convenience Functions\7f1663747
-Node: Colors\7f1665037
-Node: Color Specifiers\7f1665477
-Node: Color Instances\7f1665704
-Node: Color Instance Properties\7f1666448
-Node: Color Convenience Functions\7f1667074
-Node: Glyphs\7f1668127
-Node: Glyph Functions\7f1669719
-Node: Creating Glyphs\7f1670126
-Node: Glyph Properties\7f1671713
-Node: Glyph Convenience Functions\7f1680880
-Node: Glyph Dimensions\7f1684827
-Node: Images\7f1685907
-Node: Image Specifiers\7f1686356
-Node: Image Instantiator Conversion\7f1697777
-Node: Image Instances\7f1699142
-Node: Image Instance Types\7f1699893
-Node: Image Instance Functions\7f1702548
-Node: Glyph Types\7f1707117
-Node: Mouse Pointer\7f1708889
-Node: Redisplay Glyphs\7f1711892
-Node: Subwindows\7f1712925
-Node: Annotations\7f1713168
-Node: Annotation Basics\7f1714184
-Node: Annotation Primitives\7f1718122
-Node: Annotation Properties\7f1719451
-Node: Locating Annotations\7f1722491
-Node: Margin Primitives\7f1723328
-Node: Annotation Hooks\7f1725222
-Node: Display\7f1725882
-Node: Refresh Screen\7f1726860
-Node: Truncation\7f1728771
-Node: The Echo Area\7f1731296
-Node: Warnings\7f1737731
-Node: Invisible Text\7f1742167
-Node: Selective Display\7f1744746
-Node: Overlay Arrow\7f1748872
-Node: Temporary Displays\7f1750225
-Node: Blinking\7f1754346
-Node: Usual Display\7f1756531
-Node: Display Tables\7f1759080
-Node: Display Table Format\7f1759884
-Node: Active Display Table\7f1761326
-Node: Character Descriptors\7f1762518
-Node: Beeping\7f1763275
-Node: Hash Tables\7f1768041
-Node: Introduction to Hash Tables\7f1768649
-Node: Working With Hash Tables\7f1774672
-Node: Weak Hash Tables\7f1775789
-Node: Range Tables\7f1777588
-Node: Introduction to Range Tables\7f1778277
-Node: Working With Range Tables\7f1778708
-Node: Databases\7f1779593
-Node: Connecting to a Database\7f1779892
-Node: Working With a Database\7f1780983
-Node: Other Database Functions\7f1781841
-Node: Processes\7f1782415
-Node: Subprocess Creation\7f1784639
-Node: Synchronous Processes\7f1787928
-Node: MS-DOS Subprocesses\7f1794646
-Node: Asynchronous Processes\7f1795720
-Node: Deleting Processes\7f1799433
-Node: Process Information\7f1801304
-Node: Input to Processes\7f1805230
-Node: Signals to Processes\7f1807520
-Node: Output from Processes\7f1811940
-Node: Process Buffers\7f1812752
-Node: Filter Functions\7f1815619
-Node: Accepting Output\7f1821189
-Node: Sentinels\7f1822716
-Node: Process Window Size\7f1826206
-Node: Transaction Queues\7f1826555
-Node: Network\7f1828253
-Node: System Interface\7f1830087
-Node: Starting Up\7f1831357
-Node: Start-up Summary\7f1831951
-Node: Init File\7f1835505
-Node: Terminal-Specific\7f1837886
-Node: Command Line Arguments\7f1841045
-Node: Getting Out\7f1844534
-Node: Killing XEmacs\7f1845103
-Node: Suspending XEmacs\7f1846772
-Node: System Environment\7f1850114
-Node: User Identification\7f1856781
-Node: Time of Day\7f1860310
-Node: Time Conversion\7f1863097
-Node: Timers\7f1868137
-Node: Terminal Input\7f1870310
-Node: Input Modes\7f1870813
-Node: Translating Input\7f1873226
-Node: Recording Input\7f1877391
-Node: Terminal Output\7f1879491
-Node: Flow Control\7f1883114
-Node: Batch Mode\7f1886906
-Node: X-Windows\7f1888288
-Node: X Selections\7f1889159
-Node: X Server\7f1891369
-Node: Resources\7f1891820
-Node: Server Data\7f1897129
-Node: Grabs\7f1898336
-Node: X Miscellaneous\7f1899916
-Node: ToolTalk Support\7f1902301
-Node: XEmacs ToolTalk API Summary\7f1902518
-Node: Sending Messages\7f1903818
-Node: Example of Sending Messages\7f1904069
-Node: Elisp Interface for Sending Messages\7f1905131
-Node: Receiving Messages\7f1911523
-Node: Example of Receiving Messages\7f1911746
-Node: Elisp Interface for Receiving Messages\7f1912582
-Node: LDAP Support\7f1916407
-Node: Building XEmacs with LDAP support\7f1916903
-Node: XEmacs LDAP API\7f1917881
-Node: LDAP Variables\7f1918611
-Node: The High-Level LDAP API\7f1921087
-Node: The Low-Level LDAP API\7f1922192
-Node: The LDAP Lisp Object\7f1922466
-Node: Opening and Closing a LDAP Connection\7f1923019
-Node: Searching on a LDAP Server (Low-level)\7f1924802
-Node: Syntax of Search Filters\7f1926195
-Node: Internationalization\7f1927493
-Node: I18N Levels 1 and 2\7f1927830
-Node: I18N Level 3\7f1928536
-Node: Level 3 Basics\7f1928817
-Node: Level 3 Primitives\7f1929650
-Node: Dynamic Messaging\7f1931256
-Node: Domain Specification\7f1931719
-Node: Documentation String Extraction\7f1933622
-Node: I18N Level 4\7f1934540
-Node: MULE\7f1934732
-Node: Internationalization Terminology\7f1935843
-Node: Charsets\7f1944377
-Node: Charset Properties\7f1945073
-Node: Basic Charset Functions\7f1949759
-Node: Charset Property Functions\7f1951940
-Node: Predefined Charsets\7f1953982
-Node: MULE Characters\7f1956902
-Node: Composite Characters\7f1957749
-Node: ISO 2022\7f1959003
-Node: Coding Systems\7f1965145
-Node: Coding System Types\7f1967066
-Node: EOL Conversion\7f1968885
-Node: Coding System Properties\7f1970068
-Node: Basic Coding System Functions\7f1973920
-Node: Coding System Property Functions\7f1975824
-Node: Encoding and Decoding Text\7f1976382
-Node: Detection of Textual Encoding\7f1977518
-Node: Big5 and Shift-JIS Functions\7f1979054
-Node: CCL\7f1980142
-Node: CCL Syntax\7f1983246
-Node: CCL Statements\7f1984834
-Node: CCL Expressions\7f1989482
-Node: Calling CCL\7f1992021
-Node: CCL Examples\7f1995010
-Node: Category Tables\7f1995147
-Node: Tips\7f1997505
-Node: Style Tips\7f1998146
-Node: Compilation Tips\7f2007665
-Node: Documentation Tips\7f2009579
-Node: Comment Tips\7f2015088
-Node: Library Headers\7f2018090
-Node: Building XEmacs and Object Allocation\7f2022062
-Node: Building XEmacs\7f2022945
-Node: Pure Storage\7f2029280
-Node: Garbage Collection\7f2032068
-Node: Standard Errors\7f2043207
-Node: Standard Buffer-Local Variables\7f2047416
-Node: Standard Keymaps\7f2050049
-Node: Standard Hooks\7f2053781
-Node: Index\7f2061281
+Node: Formatting Strings\7f214905
+Node: Character Case\7f224523
+Node: Case Tables\7f227669
+Node: Char Tables\7f231567
+Node: Char Table Types\7f232959
+Node: Working With Char Tables\7f234534
+Node: Lists\7f236483
+Node: Cons Cells\7f237606
+Node: Lists as Boxes\7f238942
+Node: List-related Predicates\7f241584
+Node: List Elements\7f243286
+Node: Building Lists\7f248315
+Node: Modifying Lists\7f254307
+Node: Setcar\7f255119
+Node: Setcdr\7f257540
+Node: Rearrangement\7f260051
+Node: Sets And Lists\7f265637
+Node: Association Lists\7f269865
+Ref: Association Lists-Footnote-1\7f279156
+Node: Property Lists\7f279361
+Node: Working With Normal Plists\7f280909
+Node: Working With Lax Plists\7f283177
+Node: Converting Plists To/From Alists\7f285417
+Node: Weak Lists\7f286765
+Node: Sequences Arrays Vectors\7f288928
+Node: Sequence Functions\7f291564
+Node: Arrays\7f295223
+Node: Array Functions\7f298287
+Node: Vectors\7f300820
+Node: Vector Functions\7f302318
+Node: Bit Vectors\7f304889
+Node: Bit Vector Functions\7f305734
+Node: Symbols\7f307984
+Node: Symbol Components\7f309033
+Node: Definitions\7f313206
+Node: Creating Symbols\7f315431
+Node: Symbol Properties\7f322465
+Node: Plists and Alists\7f323992
+Node: Object Plists\7f325741
+Node: Other Plists\7f328501
+Node: Evaluation\7f330303
+Node: Intro Eval\7f331108
+Ref: Intro Eval-Footnote-1\7f334461
+Node: Eval\7f334596
+Node: Forms\7f339014
+Node: Self-Evaluating Forms\7f340173
+Node: Symbol Forms\7f341686
+Node: Classifying Lists\7f342603
+Node: Function Indirection\7f343359
+Node: Function Forms\7f346470
+Node: Macro Forms\7f347467
+Node: Special Forms\7f349067
+Node: Autoloading\7f351376
+Node: Quoting\7f351874
+Node: Control Structures\7f353235
+Node: Sequencing\7f354855
+Node: Conditionals\7f357720
+Node: Combining Conditions\7f361143
+Node: Iteration\7f364413
+Node: Nonlocal Exits\7f366192
+Node: Catch and Throw\7f366894
+Node: Examples of Catch\7f370733
+Node: Errors\7f372752
+Node: Signaling Errors\7f374241
+Node: Processing of Errors\7f378980
+Node: Handling Errors\7f381259
+Node: Error Symbols\7f388500
+Node: Cleanups\7f392456
+Node: Variables\7f396234
+Node: Global Variables\7f398003
+Node: Constant Variables\7f399079
+Node: Local Variables\7f399705
+Node: Void Variables\7f404642
+Node: Defining Variables\7f408158
+Node: Accessing Variables\7f415322
+Node: Setting Variables\7f416747
+Node: Variable Scoping\7f421266
+Node: Scope\7f422865
+Node: Extent\7f424390
+Node: Impl of Scope\7f425869
+Node: Using Scoping\7f427832
+Node: Buffer-Local Variables\7f429354
+Node: Intro to Buffer-Local\7f430190
+Node: Creating Buffer-Local\7f432733
+Node: Default Value\7f437952
+Node: Variable Aliases\7f441095
+Node: Functions\7f442880
+Node: What Is a Function\7f443974
+Node: Lambda Expressions\7f448020
+Node: Lambda Components\7f448930
+Node: Simple Lambda\7f450762
+Node: Argument List\7f452419
+Node: Function Documentation\7f456147
+Node: Function Names\7f458089
+Node: Defining Functions\7f460662
+Node: Calling Functions\7f463702
+Node: Mapping Functions\7f467551
+Node: Anonymous Functions\7f470239
+Node: Function Cells\7f473484
+Node: Inline Functions\7f478294
+Node: Related Topics\7f480104
+Node: Macros\7f481157
+Node: Simple Macro\7f482441
+Node: Expansion\7f483176
+Node: Compiling Macros\7f486180
+Node: Defining Macros\7f488016
+Node: Backquote\7f489333
+Node: Problems with Macros\7f491730
+Node: Argument Evaluation\7f492425
+Node: Surprising Local Vars\7f495340
+Node: Eval During Expansion\7f497408
+Node: Repeated Expansion\7f499101
+Node: Customization\7f501017
+Node: Common Keywords\7f501486
+Node: Group Definitions\7f504331
+Node: Variable Definitions\7f506523
+Node: Customization Types\7f511513
+Node: Simple Types\7f512948
+Node: Composite Types\7f515105
+Node: Splicing into Lists\7f519795
+Node: Type Keywords\7f521630
+Node: Loading\7f525150
+Node: How Programs Do Loading\7f526825
+Node: Autoload\7f535952
+Node: Repeated Loading\7f542031
+Node: Named Features\7f544144
+Node: Unloading\7f550576
+Node: Hooks for Loading\7f552732
+Node: Byte Compilation\7f553449
+Node: Speed of Byte-Code\7f555366
+Node: Compilation Functions\7f556573
+Node: Docs and Compilation\7f562960
+Node: Dynamic Loading\7f565613
+Node: Eval During Compile\7f567977
+Node: Compiled-Function Objects\7f569242
+Node: Disassembly\7f574040
+Node: Debugging\7f581294
+Node: Debugger\7f582706
+Node: Error Debugging\7f583851
+Node: Infinite Loops\7f586604
+Node: Function Debugging\7f587848
+Node: Explicit Debug\7f590638
+Node: Using Debugger\7f591409
+Node: Debugger Commands\7f593271
+Node: Invoking the Debugger\7f597588
+Node: Internals of Debugger\7f601503
+Node: Syntax Errors\7f606390
+Node: Excess Open\7f607638
+Node: Excess Close\7f609513
+Node: Compilation Errors\7f610934
+Node: Edebug\7f612222
+Node: Using Edebug\7f614330
+Node: Instrumenting\7f617027
+Node: Edebug Execution Modes\7f620516
+Node: Jumping\7f623626
+Node: Edebug Misc\7f625969
+Node: Breakpoints\7f627358
+Node: Global Break Condition\7f630164
+Node: Embedded Breakpoints\7f631119
+Node: Trapping Errors\7f632074
+Node: Edebug Views\7f634150
+Node: Edebug Eval\7f636115
+Node: Eval List\7f637292
+Node: Reading in Edebug\7f640677
+Node: Printing in Edebug\7f641476
+Node: Tracing\7f643191
+Node: Coverage Testing\7f645077
+Node: The Outside Context\7f647118
+Node: Checking Whether to Stop\7f648067
+Node: Edebug Display Update\7f648714
+Node: Edebug Recursive Edit\7f650737
+Node: Instrumenting Macro Calls\7f652392
+Node: Specification List\7f654874
+Node: Backtracking\7f664285
+Node: Debugging Backquote\7f666223
+Node: Specification Examples\7f669929
+Node: Edebug Options\7f671996
+Node: Read and Print\7f677333
+Node: Streams Intro\7f678310
+Node: Input Streams\7f680328
+Node: Input Functions\7f685229
+Node: Output Streams\7f687289
+Node: Output Functions\7f691340
+Node: Output Variables\7f695640
+Node: Minibuffers\7f700439
+Node: Intro to Minibuffers\7f701591
+Node: Text from Minibuffer\7f703779
+Node: Object from Minibuffer\7f708654
+Node: Minibuffer History\7f711881
+Node: Completion\7f714860
+Node: Basic Completion\7f716835
+Node: Minibuffer Completion\7f721864
+Node: Completion Commands\7f725441
+Node: High-Level Completion\7f730084
+Node: Reading File Names\7f734108
+Node: Programmed Completion\7f737792
+Node: Yes-or-No Queries\7f740174
+Node: Multiple Queries\7f745911
+Node: Reading a Password\7f749978
+Node: Minibuffer Misc\7f751315
+Node: Command Loop\7f756185
+Node: Command Overview\7f757529
+Node: Defining Commands\7f760807
+Node: Using Interactive\7f761555
+Node: Interactive Codes\7f766328
+Node: Interactive Examples\7f772120
+Node: Interactive Call\7f773434
+Node: Command Loop Info\7f778835
+Node: Events\7f783814
+Node: Event Types\7f785274
+Node: Event Contents\7f787197
+Node: Event Predicates\7f791673
+Node: Accessing Mouse Event Positions\7f792998
+Node: Frame-Level Event Position Info\7f793697
+Node: Window-Level Event Position Info\7f794737
+Node: Event Text Position Info\7f796501
+Node: Event Glyph Position Info\7f798993
+Node: Event Toolbar Position Info\7f800316
+Node: Other Event Position Info\7f800987
+Node: Accessing Other Event Info\7f801396
+Node: Working With Events\7f803016
+Node: Converting Events\7f809004
+Node: Reading Input\7f811956
+Node: Key Sequence Input\7f812958
+Node: Reading One Event\7f814912
+Node: Dispatching an Event\7f817729
+Node: Quoted Character Input\7f818180
+Node: Peeking and Discarding\7f819528
+Node: Waiting\7f823432
+Node: Quitting\7f825740
+Node: Prefix Command Arguments\7f830148
+Node: Recursive Editing\7f835235
+Node: Disabling Commands\7f840031
+Node: Command History\7f842099
+Node: Keyboard Macros\7f843836
+Node: Keymaps\7f846053
+Node: Keymap Terminology\7f847630
+Node: Format of Keymaps\7f850559
+Node: Creating Keymaps\7f850970
+Node: Inheritance and Keymaps\7f853049
+Node: Key Sequences\7f855421
+Node: Prefix Keys\7f860217
+Node: Active Keymaps\7f863802
+Node: Key Lookup\7f873123
+Node: Functions for Key Lookup\7f878286
+Node: Changing Key Bindings\7f883983
+Node: Key Binding Commands\7f890880
+Node: Scanning Keymaps\7f892945
+Node: Other Keymap Functions\7f901456
+Node: Menus\7f902078
+Node: Menu Format\7f902670
+Node: Menubar Format\7f911316
+Node: Menubar\7f911941
+Node: Modifying Menus\7f915054
+Node: Menu Filters\7f920068
+Node: Pop-Up Menus\7f921964
+Node: Menu Accelerators\7f924169
+Node: Creating Menu Accelerators\7f924925
+Node: Keyboard Menu Traversal\7f926285
+Node: Menu Accelerator Functions\7f927012
+Node: Buffers Menu\7f930089
+Node: Dialog Boxes\7f931383
+Node: Dialog Box Format\7f931550
+Node: Dialog Box Functions\7f932975
+Node: Toolbar\7f933372
+Node: Toolbar Intro\7f933697
+Node: Toolbar Descriptor Format\7f936106
+Node: Specifying the Toolbar\7f940600
+Node: Other Toolbar Variables\7f944205
+Node: Scrollbars\7f948631
+Node: Drag and Drop\7f948767
+Node: Supported Protocols\7f949843
+Node: OffiX DND\7f950346
+Node: CDE dt\7f951353
+Node: MSWindows OLE\7f951944
+Node: Loose ends\7f952115
+Node: Drop Interface\7f952507
+Node: Drag Interface\7f953529
+Node: Modes\7f953703
+Node: Major Modes\7f954654
+Node: Major Mode Conventions\7f957569
+Node: Example Major Modes\7f963524
+Node: Auto Major Mode\7f971557
+Node: Mode Help\7f979005
+Node: Derived Modes\7f980106
+Node: Minor Modes\7f982297
+Node: Minor Mode Conventions\7f983599
+Node: Keymaps and Minor Modes\7f986462
+Node: Modeline Format\7f987297
+Node: Modeline Data\7f989065
+Node: Modeline Variables\7f993335
+Node: %-Constructs\7f998051
+Node: Hooks\7f1000962
+Node: Documentation\7f1007724
+Node: Documentation Basics\7f1009147
+Node: Accessing Documentation\7f1012197
+Node: Keys in Documentation\7f1018476
+Node: Describing Characters\7f1021955
+Node: Help Functions\7f1024304
+Node: Obsoleteness\7f1030755
+Node: Files\7f1033749
+Node: Visiting Files\7f1035674
+Node: Visiting Functions\7f1037179
+Node: Subroutines of Visiting\7f1042226
+Node: Saving Buffers\7f1044299
+Node: Reading from Files\7f1050392
+Node: Writing to Files\7f1052549
+Node: File Locks\7f1055266
+Node: Information about Files\7f1058319
+Node: Testing Accessibility\7f1059080
+Node: Kinds of Files\7f1062820
+Node: Truenames\7f1064501
+Node: File Attributes\7f1065503
+Node: Changing File Attributes\7f1070642
+Node: File Names\7f1076048
+Node: File Name Components\7f1077657
+Node: Directory Names\7f1080758
+Node: Relative File Names\7f1084211
+Node: File Name Expansion\7f1085289
+Node: Unique File Names\7f1089196
+Node: File Name Completion\7f1090811
+Node: User Name Completion\7f1093472
+Node: Contents of Directories\7f1094812
+Node: Create/Delete Dirs\7f1098125
+Node: Magic File Names\7f1099231
+Node: Partial Files\7f1104861
+Node: Intro to Partial Files\7f1105089
+Node: Creating a Partial File\7f1106329
+Node: Detached Partial Files\7f1107264
+Node: Format Conversion\7f1108386
+Node: Files and MS-DOS\7f1114902
+Node: Backups and Auto-Saving\7f1116966
+Node: Backup Files\7f1117641
+Node: Making Backups\7f1119038
+Node: Rename or Copy\7f1121787
+Node: Numbered Backups\7f1124280
+Node: Backup Names\7f1126524
+Node: Auto-Saving\7f1129816
+Node: Reverting\7f1137958
+Node: Buffers\7f1141116
+Node: Buffer Basics\7f1142533
+Node: Current Buffer\7f1144586
+Node: Buffer Names\7f1149274
+Node: Buffer File Name\7f1152479
+Node: Buffer Modification\7f1156598
+Node: Modification Time\7f1158791
+Node: Read Only Buffers\7f1162166
+Node: The Buffer List\7f1164584
+Node: Creating Buffers\7f1169414
+Node: Killing Buffers\7f1171560
+Node: Indirect Buffers\7f1175291
+Node: Windows\7f1177863
+Node: Basic Windows\7f1179341
+Node: Splitting Windows\7f1182439
+Node: Deleting Windows\7f1189328
+Node: Selecting Windows\7f1192008
+Node: Cyclic Window Ordering\7f1195137
+Node: Buffers and Windows\7f1199761
+Node: Displaying Buffers\7f1201602
+Node: Choosing Window\7f1206778
+Node: Window Point\7f1214494
+Node: Window Start\7f1216540
+Node: Vertical Scrolling\7f1221030
+Node: Horizontal Scrolling\7f1227167
+Node: Size of Window\7f1230676
+Node: Position of Window\7f1235394
+Node: Resizing Windows\7f1237634
+Node: Window Configurations\7f1243063
+Node: Frames\7f1246488
+Node: Creating Frames\7f1248257
+Node: Frame Properties\7f1249598
+Node: Property Access\7f1250414
+Node: Initial Properties\7f1251263
+Node: X Frame Properties\7f1253749
+Node: Size and Position\7f1258383
+Node: Frame Name\7f1260379
+Node: Frame Titles\7f1261293
+Node: Deleting Frames\7f1263117
+Node: Finding All Frames\7f1263717
+Node: Frames and Windows\7f1265711
+Node: Minibuffers and Frames\7f1267416
+Node: Input Focus\7f1268334
+Node: Visibility of Frames\7f1271411
+Node: Raising and Lowering\7f1273330
+Node: Frame Configurations\7f1275706
+Node: Frame Hooks\7f1276300
+Node: Consoles and Devices\7f1278105
+Node: Basic Console Functions\7f1280848
+Node: Basic Device Functions\7f1281271
+Node: Console Types and Device Classes\7f1281987
+Node: Connecting to a Console or Device\7f1284184
+Node: The Selected Console and Device\7f1286347
+Node: Console and Device I/O\7f1287373
+Node: Positions\7f1288137
+Node: Point\7f1289106
+Node: Motion\7f1292196
+Node: Character Motion\7f1292963
+Node: Word Motion\7f1295200
+Node: Buffer End Motion\7f1296701
+Node: Text Lines\7f1298198
+Node: Screen Lines\7f1302793
+Node: List Motion\7f1306856
+Node: Skipping Characters\7f1310264
+Node: Excursions\7f1312483
+Node: Narrowing\7f1315515
+Node: Markers\7f1320840
+Node: Overview of Markers\7f1321746
+Node: Predicates on Markers\7f1326438
+Node: Creating Markers\7f1327684
+Node: Information from Markers\7f1331721
+Node: Changing Markers\7f1332819
+Node: The Mark\7f1334197
+Node: The Region\7f1342691
+Node: Text\7f1348377
+Node: Near Point\7f1351076
+Node: Buffer Contents\7f1355263
+Node: Comparing Text\7f1356669
+Node: Insertion\7f1358077
+Node: Commands for Insertion\7f1361919
+Node: Deletion\7f1364875
+Node: User-Level Deletion\7f1368470
+Node: The Kill Ring\7f1372631
+Node: Kill Ring Concepts\7f1374805
+Node: Kill Functions\7f1375859
+Node: Yank Commands\7f1377764
+Node: Low-Level Kill Ring\7f1379635
+Node: Internals of Kill Ring\7f1382421
+Node: Undo\7f1385201
+Node: Maintaining Undo\7f1389530
+Node: Filling\7f1392150
+Node: Margins\7f1398144
+Node: Auto Filling\7f1402073
+Node: Sorting\7f1403254
+Node: Columns\7f1412554
+Node: Indentation\7f1415070
+Node: Primitive Indent\7f1415849
+Node: Mode-Specific Indent\7f1417093
+Node: Region Indent\7f1419604
+Node: Relative Indent\7f1422552
+Node: Indent Tabs\7f1424934
+Node: Motion by Indent\7f1426255
+Node: Case Changes\7f1427034
+Node: Text Properties\7f1430285
+Node: Examining Properties\7f1432098
+Node: Changing Properties\7f1433965
+Node: Property Search\7f1437556
+Node: Special Properties\7f1442267
+Node: Saving Properties\7f1442548
+Node: Substitution\7f1445690
+Node: Registers\7f1448960
+Node: Transposition\7f1451503
+Node: Change Hooks\7f1452397
+Node: Transformations\7f1454437
+Node: Searching and Matching\7f1458822
+Node: String Search\7f1459953
+Node: Regular Expressions\7f1464677
+Node: Syntax of Regexps\7f1466044
+Node: Regexp Example\7f1480423
+Node: Regexp Search\7f1482593
+Node: POSIX Regexps\7f1488681
+Node: Search and Replace\7f1490516
+Node: Match Data\7f1493881
+Node: Simple Match Data\7f1495011
+Node: Replacing Match\7f1499276
+Node: Entire Match Data\7f1501610
+Node: Saving Match Data\7f1503601
+Node: Searching and Case\7f1504982
+Node: Standard Regexps\7f1507016
+Node: Syntax Tables\7f1509214
+Node: Syntax Basics\7f1510328
+Node: Syntax Descriptors\7f1513300
+Node: Syntax Class Table\7f1515150
+Node: Syntax Flags\7f1521188
+Node: Syntax Table Functions\7f1524405
+Node: Motion and Syntax\7f1528269
+Node: Parsing Expressions\7f1529721
+Node: Standard Syntax Tables\7f1535790
+Node: Syntax Table Internals\7f1536634
+Node: Abbrevs\7f1537660
+Node: Abbrev Mode\7f1539463
+Node: Abbrev Tables\7f1540183
+Node: Defining Abbrevs\7f1541716
+Node: Abbrev Files\7f1543621
+Node: Abbrev Expansion\7f1545394
+Node: Standard Abbrev Tables\7f1550025
+Node: Extents\7f1551184
+Node: Intro to Extents\7f1552427
+Node: Creating and Modifying Extents\7f1556421
+Node: Extent Endpoints\7f1557928
+Node: Finding Extents\7f1561191
+Node: Mapping Over Extents\7f1564939
+Node: Extent Properties\7f1571056
+Node: Detached Extents\7f1581200
+Node: Extent Parents\7f1583059
+Node: Duplicable Extents\7f1584753
+Node: Extents and Events\7f1587974
+Node: Atomic Extents\7f1589881
+Node: Specifiers\7f1590328
+Node: Introduction to Specifiers\7f1592441
+Node: Specifiers In-Depth\7f1594751
+Node: Specifier Instancing\7f1599663
+Node: Specifier Types\7f1602925
+Node: Adding Specifications\7f1607999
+Node: Retrieving Specifications\7f1617361
+Node: Specifier Tag Functions\7f1621096
+Node: Specifier Instancing Functions\7f1624330
+Node: Specifier Example\7f1627737
+Node: Creating Specifiers\7f1630893
+Node: Specifier Validation Functions\7f1633142
+Node: Other Specification Functions\7f1635526
+Node: Faces and Window-System Objects\7f1639345
+Node: Faces\7f1639669
+Node: Merging Faces\7f1641286
+Node: Basic Face Functions\7f1643247
+Node: Face Properties\7f1645345
+Node: Face Convenience Functions\7f1655587
+Node: Other Face Display Functions\7f1658717
+Node: Fonts\7f1659530
+Node: Font Specifiers\7f1660231
+Node: Font Instances\7f1660472
+Node: Font Instance Names\7f1661439
+Node: Font Instance Size\7f1662280
+Node: Font Instance Characteristics\7f1663566
+Node: Font Convenience Functions\7f1664735
+Node: Colors\7f1666025
+Node: Color Specifiers\7f1666465
+Node: Color Instances\7f1666692
+Node: Color Instance Properties\7f1667436
+Node: Color Convenience Functions\7f1668062
+Node: Glyphs\7f1669115
+Node: Glyph Functions\7f1670707
+Node: Creating Glyphs\7f1671114
+Node: Glyph Properties\7f1672701
+Node: Glyph Convenience Functions\7f1681868
+Node: Glyph Dimensions\7f1685815
+Node: Images\7f1686895
+Node: Image Specifiers\7f1687344
+Node: Image Instantiator Conversion\7f1698765
+Node: Image Instances\7f1700130
+Node: Image Instance Types\7f1700881
+Node: Image Instance Functions\7f1703536
+Node: Glyph Types\7f1708105
+Node: Mouse Pointer\7f1709877
+Node: Redisplay Glyphs\7f1712880
+Node: Subwindows\7f1713913
+Node: Annotations\7f1714156
+Node: Annotation Basics\7f1715172
+Node: Annotation Primitives\7f1719110
+Node: Annotation Properties\7f1720439
+Node: Locating Annotations\7f1723479
+Node: Margin Primitives\7f1724316
+Node: Annotation Hooks\7f1726210
+Node: Display\7f1726870
+Node: Refresh Screen\7f1727848
+Node: Truncation\7f1729759
+Node: The Echo Area\7f1732284
+Node: Warnings\7f1738719
+Node: Invisible Text\7f1743155
+Node: Selective Display\7f1745734
+Node: Overlay Arrow\7f1749860
+Node: Temporary Displays\7f1751213
+Node: Blinking\7f1755334
+Node: Usual Display\7f1757519
+Node: Display Tables\7f1760068
+Node: Display Table Format\7f1760872
+Node: Active Display Table\7f1762314
+Node: Character Descriptors\7f1763506
+Node: Beeping\7f1764263
+Node: Hash Tables\7f1769029
+Node: Introduction to Hash Tables\7f1769637
+Node: Working With Hash Tables\7f1775660
+Node: Weak Hash Tables\7f1776777
+Node: Range Tables\7f1778576
+Node: Introduction to Range Tables\7f1779265
+Node: Working With Range Tables\7f1779696
+Node: Databases\7f1780581
+Node: Connecting to a Database\7f1780880
+Node: Working With a Database\7f1781971
+Node: Other Database Functions\7f1782829
+Node: Processes\7f1783403
+Node: Subprocess Creation\7f1785627
+Node: Synchronous Processes\7f1788916
+Node: MS-DOS Subprocesses\7f1795634
+Node: Asynchronous Processes\7f1796708
+Node: Deleting Processes\7f1800421
+Node: Process Information\7f1802292
+Node: Input to Processes\7f1806218
+Node: Signals to Processes\7f1808508
+Node: Output from Processes\7f1812928
+Node: Process Buffers\7f1813740
+Node: Filter Functions\7f1816607
+Node: Accepting Output\7f1822177
+Node: Sentinels\7f1823704
+Node: Process Window Size\7f1827194
+Node: Transaction Queues\7f1827543
+Node: Network\7f1829241
+Node: System Interface\7f1831075
+Node: Starting Up\7f1832345
+Node: Start-up Summary\7f1832939
+Node: Init File\7f1836493
+Node: Terminal-Specific\7f1838874
+Node: Command Line Arguments\7f1842033
+Node: Getting Out\7f1845522
+Node: Killing XEmacs\7f1846091
+Node: Suspending XEmacs\7f1847760
+Node: System Environment\7f1851102
+Node: User Identification\7f1857769
+Node: Time of Day\7f1861298
+Node: Time Conversion\7f1864085
+Node: Timers\7f1869125
+Node: Terminal Input\7f1871298
+Node: Input Modes\7f1871801
+Node: Translating Input\7f1874214
+Node: Recording Input\7f1878379
+Node: Terminal Output\7f1880479
+Node: Flow Control\7f1884102
+Node: Batch Mode\7f1887894
+Node: X-Windows\7f1889276
+Node: X Selections\7f1890147
+Node: X Server\7f1892357
+Node: Resources\7f1892808
+Node: Server Data\7f1898117
+Node: Grabs\7f1899324
+Node: X Miscellaneous\7f1900904
+Node: ToolTalk Support\7f1903289
+Node: XEmacs ToolTalk API Summary\7f1903506
+Node: Sending Messages\7f1904806
+Node: Example of Sending Messages\7f1905057
+Node: Elisp Interface for Sending Messages\7f1906119
+Node: Receiving Messages\7f1912511
+Node: Example of Receiving Messages\7f1912734
+Node: Elisp Interface for Receiving Messages\7f1913570
+Node: LDAP Support\7f1917395
+Node: Building XEmacs with LDAP support\7f1917891
+Node: XEmacs LDAP API\7f1918869
+Node: LDAP Variables\7f1919599
+Node: The High-Level LDAP API\7f1922075
+Node: The Low-Level LDAP API\7f1923180
+Node: The LDAP Lisp Object\7f1923454
+Node: Opening and Closing a LDAP Connection\7f1924007
+Node: Searching on a LDAP Server (Low-level)\7f1925790
+Node: Syntax of Search Filters\7f1927183
+Node: Internationalization\7f1928481
+Node: I18N Levels 1 and 2\7f1928818
+Node: I18N Level 3\7f1929524
+Node: Level 3 Basics\7f1929805
+Node: Level 3 Primitives\7f1930638
+Node: Dynamic Messaging\7f1932244
+Node: Domain Specification\7f1932707
+Node: Documentation String Extraction\7f1934610
+Node: I18N Level 4\7f1935528
+Node: MULE\7f1935720
+Node: Internationalization Terminology\7f1936831
+Node: Charsets\7f1945365
+Node: Charset Properties\7f1946061
+Node: Basic Charset Functions\7f1950747
+Node: Charset Property Functions\7f1952928
+Node: Predefined Charsets\7f1954970
+Node: MULE Characters\7f1957890
+Node: Composite Characters\7f1958737
+Node: ISO 2022\7f1959991
+Node: Coding Systems\7f1966133
+Node: Coding System Types\7f1968054
+Node: EOL Conversion\7f1969873
+Node: Coding System Properties\7f1971056
+Node: Basic Coding System Functions\7f1974908
+Node: Coding System Property Functions\7f1976812
+Node: Encoding and Decoding Text\7f1977370
+Node: Detection of Textual Encoding\7f1978506
+Node: Big5 and Shift-JIS Functions\7f1980042
+Node: CCL\7f1981130
+Node: CCL Syntax\7f1984234
+Node: CCL Statements\7f1985822
+Node: CCL Expressions\7f1990470
+Node: Calling CCL\7f1993009
+Node: CCL Examples\7f1995998
+Node: Category Tables\7f1996135
+Node: Tips\7f1998493
+Node: Style Tips\7f1999134
+Node: Compilation Tips\7f2008653
+Node: Documentation Tips\7f2010567
+Node: Comment Tips\7f2016076
+Node: Library Headers\7f2019078
+Node: Building XEmacs and Object Allocation\7f2023050
+Node: Building XEmacs\7f2023933
+Node: Pure Storage\7f2030268
+Node: Garbage Collection\7f2033056
+Node: Standard Errors\7f2044195
+Node: Standard Buffer-Local Variables\7f2048404
+Node: Standard Keymaps\7f2051037
+Node: Standard Hooks\7f2054769
+Node: Index\7f2062269
\1f
End Tag Table
String Properties
=================
- Similar to symbols, extents, faces, and glyphs, you can attach
+ Just as with symbols, extents, faces, and glyphs, you can attach
additional information to strings in the form of "string properties".
These differ from text properties, which are logically attached to
particular characters in the string.
To attach a property to a string, use `put'. To retrieve a property
from a string, use `get'. You can also use `remprop' to remove a
-property from a string and `object-props' to retrieve a list of all the
+property from a string and `object-plist' to retrieve a list of all the
properties in a string.
\1f
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
* Plists and Alists:: Comparison of the advantages of property
lists and association lists.
-* Symbol Plists:: Functions to access symbols' property lists.
+* Object Plists:: Functions to access objects' property lists.
* Other Plists:: Accessing property lists stored elsewhere.
\1f
-File: lispref.info, Node: Plists and Alists, Next: Symbol Plists, Up: Symbol Properties
+File: lispref.info, Node: Plists and Alists, Next: Object Plists, Up: Symbol Properties
Property Lists and Association Lists
------------------------------------
possible with a property list.
\1f
-File: lispref.info, Node: Symbol Plists, Next: Other Plists, Prev: Plists and Alists, Up: Symbol Properties
+File: lispref.info, Node: Object Plists, Next: Other Plists, Prev: Plists and Alists, Up: Symbol Properties
-Property List Functions for Symbols
+Property List Functions for Objects
-----------------------------------
+ Once upon a time, only symbols had property lists. Now, several
+other object types, including strings, extents, faces and glyphs also
+have property lists.
+
- Function: symbol-plist symbol
This function returns the property list of SYMBOL.
+ - Function: object-plist object
+ This function returns the property list of OBJECT. If OBJECT is a
+ symbol, this is identical to `symbol-plist'.
+
- Function: setplist symbol plist
This function sets SYMBOL's property list to PLIST. Normally,
PLIST should be a well-formed property list, but this is not
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.
=> (a buzzing little bug)
(get 'fly 'verb)
=> transitive
- (symbol-plist 'fly)
+ (object-plist 'fly)
=> (verb transitive noun (a buzzing little bug))
+ - Function: remprop object property
+ This function removes the entry for PROPERTY from the property
+ list of OBJECT. It returns `t' if the property was indeed found
+ and removed, or `nil' if there was no such property. (This
+ function was probably omitted from Emacs originally because, since
+ `get' did not allow a DEFAULT, it was very difficult to
+ distinguish between a missing property and a property whose value
+ was `nil'; thus, setting a property to `nil' was close enough to
+ `remprop' for most purposes.)
+
\1f
-File: lispref.info, Node: Other Plists, Prev: Symbol Plists, Up: Symbol Properties
+File: lispref.info, Node: Other Plists, Prev: Object Plists, Up: Symbol Properties
-Property Lists Outside Symbols
-------------------------------
+Property Lists Not Associated with Objects
+------------------------------------------
These functions are useful for manipulating property lists that are
stored in places other than symbols:
* Autoloading:: Functions set up to load files
containing their real definitions.
-\1f
-File: lispref.info, Node: Self-Evaluating Forms, Next: Symbol Forms, Up: Forms
-
-Self-Evaluating Forms
----------------------
-
- A "self-evaluating form" is any form that is not a list or symbol.
-Self-evaluating forms evaluate to themselves: the result of evaluation
-is the same object that was evaluated. Thus, the number 25 evaluates to
-25, and the string `"foo"' evaluates to the string `"foo"'. Likewise,
-evaluation of a vector does not cause evaluation of the elements of the
-vector--it returns the same vector with its contents unchanged.
-
- '123 ; An object, shown without evaluation.
- => 123
- 123 ; Evaluated as usual--result is the same.
- => 123
- (eval '123) ; Evaluated "by hand"--result is the same.
- => 123
- (eval (eval '123)) ; Evaluating twice changes nothing.
- => 123
-
- It is common to write numbers, characters, strings, and even vectors
-in Lisp code, taking advantage of the fact that they self-evaluate.
-However, it is quite unusual to do this for types that lack a read
-syntax, because there's no way to write them textually. It is possible
-to construct Lisp expressions containing these types by means of a Lisp
-program. Here is an example:
-
- ;; Build an expression containing a buffer object.
- (setq buffer (list 'print (current-buffer)))
- => (print #<buffer eval.texi>)
- ;; Evaluate it.
- (eval buffer)
- -| #<buffer eval.texi>
- => #<buffer eval.texi>
-
Foundation instead of in the original English.
\1f
+File: lispref.info, Node: Self-Evaluating Forms, Next: Symbol Forms, Up: Forms
+
+Self-Evaluating Forms
+---------------------
+
+ A "self-evaluating form" is any form that is not a list or symbol.
+Self-evaluating forms evaluate to themselves: the result of evaluation
+is the same object that was evaluated. Thus, the number 25 evaluates to
+25, and the string `"foo"' evaluates to the string `"foo"'. Likewise,
+evaluation of a vector does not cause evaluation of the elements of the
+vector--it returns the same vector with its contents unchanged.
+
+ '123 ; An object, shown without evaluation.
+ => 123
+ 123 ; Evaluated as usual--result is the same.
+ => 123
+ (eval '123) ; Evaluated "by hand"--result is the same.
+ => 123
+ (eval (eval '123)) ; Evaluating twice changes nothing.
+ => 123
+
+ It is common to write numbers, characters, strings, and even vectors
+in Lisp code, taking advantage of the fact that they self-evaluate.
+However, it is quite unusual to do this for types that lack a read
+syntax, because there's no way to write them textually. It is possible
+to construct Lisp expressions containing these types by means of a Lisp
+program. Here is an example:
+
+ ;; Build an expression containing a buffer object.
+ (setq buffer (list 'print (current-buffer)))
+ => (print #<buffer eval.texi>)
+ ;; Evaluate it.
+ (eval buffer)
+ -| #<buffer eval.texi>
+ => #<buffer eval.texi>
+
+\1f
File: lispref.info, Node: Symbol Forms, Next: Classifying Lists, Prev: Self-Evaluating Forms, Up: Forms
Symbol Forms
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-13 Martin Buchholz <martin@xemacs.org>
+
+ * etags.c: Upgrade to version 13.44.
+ Only added (unsigned char) casts to calls like isspace (*cp).
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
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[])
/* 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);
#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);
* 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)
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 == '\\')
}
}
- 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;
}
}
* 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
# define DEBUG FALSE
#endif
+#if defined(__STDC__) && (__STDC__ || defined(__SUNPRO_C))
+# define P_(proto) proto
+#else
+# define P_(proto) ()
+#endif
+
#ifdef HAVE_CONFIG_H
# include <config.h>
/* On some systems, Emacs defines static as nothing for the sake
#endif
#ifdef MSDOS
+# undef MSDOS
+# define MSDOS TRUE
# include <fcntl.h>
# include <sys/param.h>
# include <io.h>
# define DOS_NT
# include <sys/config.h>
# endif
+#else
+# define MSDOS FALSE
#endif /* MSDOS */
#ifdef WINDOWSNT
# include <stdlib.h>
# include <fcntl.h>
# include <string.h>
+# include <direct.h>
# include <io.h>
# define MAXPATHLEN _MAX_PATH
# ifdef HAVE_CONFIG_H
# ifndef HAVE_GETCWD
# define HAVE_GETCWD
# endif /* undef HAVE_GETCWD */
-#endif /* WINDOWSNT */
-
-#if !defined (WINDOWSNT) && defined (STDC_HEADERS)
-#include <stdlib.h>
-#include <string.h>
-#endif
+#else /* !WINDOWSNT */
+# ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+# else
+ extern char *getenv ();
+# endif
+#endif /* !WINDOWSNT */
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#else
-# ifdef HAVE_GETCWD
- extern char *getcwd ();
+# if defined (HAVE_GETCWD) && !WINDOWSNT
+ extern char *getcwd (char *buf, size_t size);
# endif
#endif /* HAVE_UNISTD_H */
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
+#ifndef errno
+ extern int errno;
+#endif
#include <sys/types.h>
#include <sys/stat.h>
typedef int bool;
-typedef void Lang_function ();
+typedef void Lang_function P_((FILE *));
typedef struct
{
/* Many compilers barf on this:
Lang_function Ada_funcs;
so let's write it this way */
-void Ada_funcs (FILE *inf);
-void Asm_labels (FILE *inf);
-void C_entries (int c_ext, FILE *inf);
-void default_C_entries (FILE *inf);
-void plain_C_entries (FILE *inf);
-void Cjava_entries (FILE *inf);
-void Cobol_paragraphs (FILE *inf);
-void Cplusplus_entries (FILE *inf);
-void Cstar_entries (FILE *inf);
-void Erlang_functions (FILE *inf);
-void Fortran_functions (FILE *inf);
-void Yacc_entries (FILE *inf);
-void Lisp_functions (FILE *inf);
-void Pascal_functions (FILE *inf);
-void Perl_functions (FILE *inf);
-void Postscript_functions (FILE *inf);
-void Prolog_functions (FILE *inf);
-void Python_functions (FILE *inf);
-void Scheme_functions (FILE *inf);
-void TeX_functions (FILE *inf);
-void just_read_file (FILE *inf);
-
-compressor *get_compressor_from_suffix (char *file, char **extptr);
-language *get_language_from_name (char *name);
-language *get_language_from_interpreter (char *interpreter);
-language *get_language_from_suffix (char *file);
-int total_size_of_entries (register node *np);
-long readline (linebuffer *lbp, FILE *stream);
-long readline_internal (linebuffer *lbp, register FILE *stream);
-void get_tag (register char *bp);
+static void Ada_funcs P_((FILE *));
+static void Asm_labels P_((FILE *));
+static void C_entries P_((int c_ext, FILE *));
+static void default_C_entries P_((FILE *));
+static void plain_C_entries P_((FILE *));
+static void Cjava_entries P_((FILE *));
+static void Cobol_paragraphs P_((FILE *));
+static void Cplusplus_entries P_((FILE *));
+static void Cstar_entries P_((FILE *));
+static void Erlang_functions P_((FILE *));
+static void Fortran_functions P_((FILE *));
+static void Yacc_entries P_((FILE *));
+static void Lisp_functions P_((FILE *));
+static void Pascal_functions P_((FILE *));
+static void Perl_functions P_((FILE *));
+static void Postscript_functions P_((FILE *));
+static void Prolog_functions P_((FILE *));
+static void Python_functions P_((FILE *));
+static void Scheme_functions P_((FILE *));
+static void TeX_functions P_((FILE *));
+static void just_read_file P_((FILE *));
+
+static void print_language_names P_((void));
+static void print_version P_((void));
+static void print_help P_((void));
+int main P_((int, char **));
+static int number_len P_((long));
+
+static compressor *get_compressor_from_suffix P_((char *, char **));
+static language *get_language_from_name P_((char *));
+static language *get_language_from_interpreter P_((char *));
+static language *get_language_from_suffix P_((char *));
+static int total_size_of_entries P_((node *));
+static long readline P_((linebuffer *, FILE *));
+static long readline_internal P_((linebuffer *, FILE *));
+static void get_tag P_((char *));
#ifdef ETAGS_REGEXPS
-void analyse_regex (char *regex_arg, bool ignore_case);
-void add_regex (char *regexp_pattern, bool ignore_case, language *lan);
-void free_patterns (void);
+static void analyse_regex P_((char *, bool));
+static void add_regex P_((char *, bool, language *));
+static void free_patterns P_((void));
#endif /* ETAGS_REGEXPS */
-void error (const char *s1, const char *s2);
-void suggest_asking_for_help (void);
-void fatal (char *s1, char *s2);
-void pfatal (char *s1);
-void add_node (node *np, node **cur_node_p);
-
-void init (void);
-void initbuffer (linebuffer *lbp);
-void find_entries (char *file, FILE *inf);
-void free_tree (register node *np);
-void pfnote (char *name, bool is_func, char *linestart, int linelen, int lno, long int cno);
-void new_pfnote (char *name, int namelen, bool is_func, char *linestart, int linelen, int lno, long int cno);
-void process_file (char *file);
-void put_entries (register node *np);
-void takeprec (void);
-
-char *concat (char *s1, char *s2, char *s3);
-char *skip_spaces (char *cp);
-char *skip_non_spaces (char *cp);
-char *savenstr (char *cp, int len);
-char *savestr (char *cp);
-char *etags_strchr (const char *sp, int c);
-char *etags_strrchr (const char *sp, int c);
-char *etags_getcwd (void);
-char *relative_filename (char *file, char *dir);
-char *absolute_filename (char *file, char *dir);
-char *absolute_dirname (char *file, char *dir);
-bool filename_is_absolute (char *fn);
-void canonicalize_filename (register char *fn);
-void grow_linebuffer (linebuffer *lbp, int toksize);
-long *xmalloc (unsigned int size);
-long *xrealloc (char *ptr, unsigned int size);
+static void error P_((const char *, const char *));
+static void suggest_asking_for_help P_((void));
+static void fatal P_((char *, char *));
+static void pfatal P_((char *));
+static void add_node P_((node *, node **));
+
+static void init P_((void));
+static void initbuffer P_((linebuffer *));
+static void find_entries P_((char *, FILE *));
+static void free_tree P_((node *));
+static void pfnote P_((char *, bool, char *, int, int, long));
+static void new_pfnote P_((char *, int, bool, char *, int, int, long));
+static void process_file P_((char *));
+static void put_entries P_((node *));
+static void takeprec P_((void));
+
+static char *concat P_((char *, char *, char *));
+static char *skip_spaces P_((char *));
+static char *skip_non_spaces P_((char *));
+static char *savenstr P_((char *, int));
+static char *savestr P_((char *));
+static char *etags_strchr P_((const char *, int));
+static char *etags_strrchr P_((const char *, int));
+static char *etags_getcwd P_((void));
+static char *relative_filename P_((char *, char *));
+static char *absolute_filename P_((char *, char *));
+static char *absolute_dirname P_((char *, char *));
+static bool filename_is_absolute P_((char *f));
+static void canonicalize_filename P_((char *));
+static void grow_linebuffer P_((linebuffer *, int));
+static long *xmalloc P_((unsigned int));
+static long *xrealloc P_((char *, unsigned int));
\f
char searchar = '/'; /* use /.../ searches */
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 */
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");
#include <rmsdef.h>
#include <descrip.h>
#define OUTSIZE MAX_FILE_SPEC_LEN
-short
+static short
fn_exp (out, in)
vspec *out;
char *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;
* and EXTPTR is not significant.
* Idea by Vladimir Alexiev <vladimir@cs.ualberta.ca>
*/
-compressor *
+static compressor *
get_compressor_from_suffix (file, extptr)
char *file;
char **extptr;
/* 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;
}
/*
* Return a language given the name.
*/
-language *
+static language *
get_language_from_name (name)
char *name;
{
/*
* Return a language given the interpreter name.
*/
-language *
+static language *
get_language_from_interpreter (interpreter)
char *interpreter;
{
/*
* Return a language given the file name.
*/
-language *
+static language *
get_language_from_suffix (file)
char *file;
{
/*
* This routine is called on each file argument.
*/
-void
+static void
process_file (file)
char *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;
}
* 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;
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');
}
*/
node *last_node = NULL;
-void
+static void
find_entries (file, inf)
char *file;
FILE *inf;
}
\f
/* Record a tag. */
-void
+static void
pfnote (name, is_func, linestart, linelen, lno, cno)
char *name; /* tag name, or NULL if unnamed */
bool is_func; /* tag is a function */
* `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 */
* free_tree ()
* recurse on left children, iterate on right children.
*/
-void
+static void
free_tree (np)
register node *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;
{
}
}
\f
-void
+static void
put_entries (np)
register node *np;
{
* 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;
{
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
%[
*/
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
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 */
}
-void
+static void
C_entries (c_ext, inf)
int c_ext; /* extension of C */
FILE *inf; /* input file */
if (*lp != '\0')
lp += 1;
while (*lp != '\0'
- && !isspace (*lp) && *lp != '(')
+ && !iswhite (*lp) && *lp != '(')
lp += 1;
c = *lp++;
toklen += lp - oldlp;
* 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;
{
}
/* Always do plain ANSI C. */
-void
+static void
plain_C_entries (inf)
FILE *inf;
{
}
/* Always do C++. */
-void
+static void
Cplusplus_entries (inf)
FILE *inf;
{
}
/* Always do Java. */
-void
+static void
Cjava_entries (inf)
FILE *inf;
{
}
/* Always do C*. */
-void
+static void
Cstar_entries (inf)
FILE *inf;
{
}
/* Always do Yacc. */
-void
+static void
Yacc_entries (inf)
FILE *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;
{
\f
/* Fortran parsing */
+static bool tail P_((char *));
+static void takeprec P_((void));
+static void getit P_((FILE *));
+
static bool
tail (cp)
char *cp;
return FALSE;
}
-void
+static void
takeprec ()
{
dbp = skip_spaces (dbp);
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
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;
}
-void
+static void
Fortran_functions (inf)
FILE *inf;
{
* Philippe Waroquiers <philippe.waroquiers@eurocontrol.be>, 1998-04-24
* Ada parsing
*/
+
+static void adagetit P_((FILE *, char *));
+
/* Once we are positioned after an "interesting" keyword, let's get
the real tag value necessary. */
static void
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)
}
}
-void
+static void
Ada_funcs (inf)
FILE *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;
{
{
/* 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,
* Perl sub names: look for /^sub[ \t\n]+[^ \t\n{]+/
* Perl variable names: /^(my|local).../
*/
-void
+static void
Perl_functions (inf)
FILE *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);
&& *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;
if (*cp == '$' || *cp == '@' || *cp == '%')
{
char* varstart = ++cp;
- while (isalnum (*cp) || *cp == '_')
+ while (isalnum ((unsigned char) *cp) || *cp == '_')
cp++;
varname = savenstr (varstart, cp-varstart);
}
* Python support by Eric S. Raymond <esr@thyrsus.com>
* Look for /^def[ \t\n]+[^ \t\n(:]+/ or /^class[ \t\n]+[^ \t\n(:]+/
*/
-void
+static void
Python_functions (inf)
FILE *inf;
{
{
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);
&& *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);
* 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;
{
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,
* "forward" immediately following the procedure statement; if found,
* the tag is skipped.
*/
-void
+static void
Pascal_functions (inf)
FILE *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;
&& (*++strp == 'o' || *strp == 'O')
&& (*++strp == 't' || *strp == 'T')
&& (*++strp == 'e' || *strp == 'E')
- && isspace (*++strp));
+ && iswhite (*++strp));
}
static void
}
for (cp = dbp /*+1*/;
- *cp != '\0' && *cp != '(' && !isspace(*cp) && *cp != ')';
+ *cp != '\0' && *cp != '(' && !iswhite(*cp) && *cp != ')';
cp++)
continue;
if (cp == dbp)
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
}
-void
+static void
Lisp_functions (inf)
FILE *inf;
{
/* Check for (foo::defmumble name-defined ... */
do
dbp++;
- while (*dbp != '\0' && !isspace (*dbp)
+ while (*dbp != '\0' && !iswhite (*dbp)
&& *dbp != ':' && *dbp != '(' && *dbp != ')');
if (*dbp == ':')
{
* Also look at "defineps" for PSWrap
* suggested by Masatake YAMATO <masata-y@is.aist-nara.ac.jp>
*/
-void
+static void
Postscript_functions (inf)
FILE *inf;
{
* look for (set! xyzzy
*/
-void
+static void
Scheme_functions (inf)
FILE *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);
}
&& (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);
: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 = '{';
/*
* TeX/LaTeX scanning loop.
*/
-void
+static void
TeX_functions (inf)
FILE *inf;
{
/* Figure out whether TeX's escapechar is '\\' or '!' and set grouping
chars accordingly. */
-void
+static void
TEX_mode (inf)
FILE *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;
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;
{
* 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;
{
{
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);
}
-void
+static void
prolog_skip_comment (plb, inf)
linebuffer *plb;
FILE *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. */
* - A quoted arbitrary string. Single quotes can escape themselves.
* Backslash quotes everything.
*/
-int
+static int
prolog_atom (s, pos)
char *s;
int 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++;
}
*
* 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;
{
{
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;
* 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. */
* -define(Foo(M, N), M+N).
* -record(graph, {vtab = notable, cyclic = true}).
*/
-void
+static void
erlang_attribute (s)
char *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;
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;
}
\f
#ifdef ETAGS_REGEXPS
+static char *scan_separators P_((char *));
+static void analyse_regex P_((char *, bool));
+static void add_regex P_((char *, bool, language *));
+static char *substitute P_((char *, char *, struct re_registers *));
+
/* Take a string like "/blah/" and turn it into "blah", making sure
that the first and last characters are the same, and handling
quoted separator characters. Actually, stops on the occurrence of
/* 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;
/* 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;
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];
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';
}
/* Deallocate all patterns. */
-void
+static void
free_patterns ()
{
pattern *pp;
return;
}
\f
-void
+static void
get_tag (bp)
register char *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,
#endif /* ETAGS_REGEXPS */
/* Initialize a linebuffer for use */
-void
+static void
initbuffer (lbp)
linebuffer *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;
* 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;
* 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;
{
* 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;
/*
* 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;
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;
{
exit (BAD);
}
-void
+static void
pfatal (s1)
char *s1;
{
exit (BAD);
}
-void
+static void
suggest_asking_for_help ()
{
fprintf (stderr, "\tTry `%s %s' for a complete list of options.\n",
}
/* Print error message. `s1' is printf control string, `s2' is arg for it. */
-void
+static void
error (s1, s2)
const char *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;
{
\f
/* Does the same work as the system V getcwd, but does not need to
guess the buffer size in advance. */
-char *
+static char *
etags_getcwd ()
{
#ifdef HAVE_GETCWD
/* 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;
{
/* 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;
{
/* 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;
{
/* 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;
{
}
/* Translate backslashes into slashes. Works in place. */
-void
+static void
canonicalize_filename (fn)
register char *fn;
{
}
/* Increase the size of a linebuffer. */
-void
+static void
grow_linebuffer (lbp, toksize)
linebuffer *lbp;
int toksize;
}
/* Like malloc but get fatal error if memory is exhausted. */
-long *
+static long *
xmalloc (size)
unsigned int size;
{
return result;
}
-long *
+static long *
xrealloc (ptr, size)
char *ptr;
unsigned int size;
#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;
/* 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);
/* 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
-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)
/* 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 == '\"')
/* 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)
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
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) {
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') || \
/* 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);
/* 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);
/* 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"))
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;
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;
}
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;
#include <stdlib.h> /* for qsort() and malloc() */
#include <string.h>
static void *xmalloc (size_t);
-#ifndef CONST
-# define CONST const
-#endif
#define NUL '\0'
#define MARKER '\037'
WAITING, BEG_NAME, NAME_GET, BEG_DESC, DESC_GET
};
-CONST char *states[] =
+const char *states[] =
{
"WAITING", "BEG_NAME", "NAME_GET", "BEG_DESC", "DESC_GET"
};
/* 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 */
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-09 Martin Buchholz <martin@xemacs.org>
+
+ * cl-extra.el (getf): This is now identical to `plist-get', so
+ just defalias it.
+ * cl-macs.el: Make getf an alias to plist-get, at the
+ byte-compiler level, using define-compiler-macro.
+
+2000-02-08 Martin Buchholz <martin@xemacs.org>
+
+ * cl-extra.el (cl-remprop): Remove. remprop is now in C.
+
+2000-02-07 Kyle Jones <kyle_jones@wonderworks.com>
+
+ * lisp/etags.el (find-tag-internal): set exact-tagname to
+ a regular expression that matches against the tagname
+ part of the tag entry first instead of only looking in
+ the context area.
+
+2000-01-23 Björn Torkelsson <torkel@hpc2n.umu.se>
+
+ * gutter-items.el: fixed typo(s) in customizing default-gutter-position
+ * toobar.el: fixed typo(s) in customizing default-toolbar-position
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
;; 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))
(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.
(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))))
(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
;; 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.
(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
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)
(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)
(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)
(make-glyph
(vector 'progress-gauge
:pixel-height (- progress-glyph-height 8)
- :pixel-width 50
+ :pixel-width 250
:descriptor "Progress")))
(defvar progress-text-glyph
"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))
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-09 Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
+
+ * config.h.in (ATHENA_INCLUDE): Workaround bugs in both xlc and
+ old gccs.
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
/* For use in #include statements.
You can't use macros directly within the <> of a #include statement.
- The multiply nested macros are necessary to make old gcc's happy. */
+ The multiply nested macros are necessary to make old gcc's happy.
+ However, those nested macros are too much for AIX xlc to deal with. */
+#if defined(_AIX) && !defined(__GNUC__)
+#define ATHENA_INCLUDE(header_file) <ATHENA_H_PATH/header_file>
+#else
#define INCLUDE_GLUE_2(dirname,basename) <##dirname##/##basename##>
#define INCLUDE_GLUE_1(dirname,basename) INCLUDE_GLUE_2(dirname,basename)
#define ATHENA_INCLUDE(header_file) INCLUDE_GLUE_1(ATHENA_H_PATH,header_file)
-
+#endif
#endif /* _LWLIB_CONFIG_H_ */
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)
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;
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)
{
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;
typedef struct _widget_creation_entry
{
- CONST char* type;
+ const char* type;
widget_creation_function function;
} widget_creation_entry;
\f
/* utility functions for widget_instance and widget_info */
static char *
-safe_strdup (CONST char *s)
+safe_strdup (const char *s)
{
char *result;
if (! s) return 0;
}
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)
\f
/* utility function for widget_value */
static Boolean
-safe_strcmp (CONST char *s1, CONST char *s2)
+safe_strcmp (const char *s1, const char *s2)
{
if (!!s1 ^ !!s2) return True;
return (s1 && s2) ? strcmp (s1, s2) : s1 ? False : !!s2;
\f
/* modifying the widgets */
static Widget
-name_to_widget (widget_instance *instance, CONST char *name)
+name_to_widget (widget_instance *instance, const char *name)
{
Widget widget = NULL;
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++)
}
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] */
}
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)
}
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)
#ifndef INCLUDED_lwlib_h_
#define INCLUDED_lwlib_h_
-#undef CONST
-
#include <X11/Intrinsic.h>
-/* To eliminate use of `const' in the lwlib sources, define CONST_IS_LOSING. */
-#ifdef CONST_IS_LOSING
-# define CONST
-#else
-# define CONST const
-#endif
-
#if defined (LWLIB_MENUBARS_LUCID) || defined (LWLIB_MENUBARS_MOTIF) || defined (LWLIB_MENUBARS_ATHENA)
#define NEED_MENUBARS
#endif
#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,
}
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:
* 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;
static struct _shadow_names
{
- CONST char * name;
+ const char * name;
shadow_type type;
} shadow_names[] =
{
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * internals/internals.texi: Integrate Olivier's portable dumping docs.
+
+2000-02-09 Martin Buchholz <martin@xemacs.org>
+
+ * lispref/symbols.texi (Object Plists):
+ Document `object-plist'.
+ Document `remprop'.
+ Rework all plist frobbing docs for accuracy.
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
missing from Emacs Lisp.
@menu
-* Property Lists:: `remprop', `getf', `remf'
+* Property Lists:: `getf', `remf'
* Creating Symbols:: `gensym', `gentemp'
@end menu
@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
@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
@author Martin Buchholz
@author Hrvoje Niksic
@author Matthias Neubauer
+@author Olivier Galibert
@page
@vskip 0pt plus 1fill
* 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::
* 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
* 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::
* 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::
* Character Sets::
* Encodings::
* Internal Mule Encodings::
+* CCL::
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
* 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
* 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
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.
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
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
version 20.3 released August 19, 1998.
@end itemize
-@node XEmacs
+@node XEmacs, , GNU Emacs 20, A History of Emacs
@section XEmacs
@cindex XEmacs
* 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},
@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
@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
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
* 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
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
@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
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
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
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}.
* 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
-@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
-@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
-@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
-@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
-@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
-@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
-@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
-@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
-@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
-@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
-@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
-@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
* 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
(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
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
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
* 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:
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
@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
@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}
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
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.
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
@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
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
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
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}
@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
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
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
@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
@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
@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}
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
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.
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}.
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,
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
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
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}
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
@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.
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
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}
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
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}
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
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
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}]
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
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
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
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
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
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
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
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
* 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
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
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
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
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()},
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.
* 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
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
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},
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
* 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
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
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,
* 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.
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
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
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
(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.
* 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
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
* 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,
@end example
-@node JIS7
+@node JIS7, , Japanese EUC (Extended Unix Code), Encodings
@subsection JIS7
This encompasses the character sets Printing-ASCII,
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
* 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
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
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
* 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
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
@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
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})
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
* 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
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
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
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:
* 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
#### 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
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
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
* 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
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
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
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
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
@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
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.
@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
@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}.
@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
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
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}.
@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:
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-06 Mike Alexander <mta@arbortext.com>
+
+ * xemacs.mak (install): Copy xemacs.dmp if using the portable
+ dumper.
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
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.
@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\"
sheap-adjust.h
temacs
xemacs
+xemacs.dmp
SATISFIED
update-elc.stamp
-*.so.*
\ No newline at end of file
+*.so.*
+gmon.out
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-15 Olivier Galibert <galibert@pobox.com>
+
+ * fns.c (size_bit_vector): Fix computation of the size.
+
+2000-02-15 Martin Buchholz <martin@xemacs.org>
+
+ * *.[ch]: Change CONST to const globally.
+ find -name '*.[ch]' | \
+ xargs global-replace \
+ 's/(^|(?<=[^A-Za-z0-9_]))CONST((?=[^A-Za-z0-9_])|$)/const/g'
+ - Remove vestigial references to CONST_IS_LOSING
+
+2000-02-13 Jonathan Harris <jhar@tardis.ed.ac.uk>
+
+ * event-msw.c (mswindows_drain_windows_queue): Remove hack to
+ bailout early on quit. Enqueue WM_PAINT events as XEmacs magic
+ events instead of dispatching them directly.
+ (mswindows_handle_paint): New function to do repainting.
+ (mswindows_wnd_proc):
+ (emacs_mswindows_handle_magic_event): Call above function.
+
+2000-02-13 Jonathan Harris <jhar@tardis.ed.ac.uk>
+
+ * objects-msw.c (mswindows_create_font_variant): Return the new
+ font handle.
+ (initialize_font_instance): Get font metrics from the underlined
+ variant of the font to cope with the case where the underlined
+ font has a bigger descent.
+
+2000-02-08 Daiki Ueno <ueno@ueda.info.waseda.ac.jp>
+
+ * gui.c (gui_item_accelerator): Return the first underlined
+ character in item name.
+
+2000-02-11 Kirill 'Big K' Katsnelson <kkm@dtmx.com>
+
+ * lisp.h: Added Qprinter.
+
+ * general.c (syms_of_general): Initialized it.
+
+ * redisplay-msw.c (get_frame_dc): Conditionally start a new page.
+ (get_frame_dc):
+ (get_frame_compdc): Made inline.
+
+ * console.h (struct console_methods): Added eject_page method.
+
+ * frame.h: Added FRAME_DISPLAY_P and friends.
+ Aligned backslahes in many macros in more readable fashion.
+ Added page_number to struct frame, and an accessor macro
+ for it.
+
+ * defice.h: Added DEVICE_DISPLAY_P and friends.
+
+ * device.c (Fdevice_printer_p): Used these.
+
+ * frame.c (allocate_frame_core): Initialize page number.
+ (Fprint_job_page_number):
+ (Fprint_job_eject_page): Implemented.
+
+ * frame-msw.c (msprinter_eject_page): Added method.
+ (msprinter_start_page): Added.
+
+ * window.c (Fwindow_truncated_p): Fixed docstring.
+ (Fwindow_last_line_visible_height): Implemented.
+
+2000-02-09 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * frame.c (change_frame_size_1): Undo 2000-02-03 change.
+
+1999-12-20 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
+
+ * syntax.c (scan_words): Always advance at least one character.
+
+2000-02-13 Andy Piper <andy@xemacs.org>
+
+ * redisplay.c (add_glyph_rune): call get_glyph_cachel_index here
+ to make sure the glyph is in the cachels.
+
+ * glyphs.h (struct Lisp_Image_Instance): make layout_changed a
+ global image instance flag.
+ (IMAGE_INSTANCE_NEEDS_LAYOUT): new macro.
+ (XIMAGE_INSTANCE_NEEDS_LAYOUT): ditto.
+
+ * glyphs.c (allocate_image_instance): set dirty bits correctly.
+ (Fset_image_instance_property): mark layout as changed.
+ (invalidate_glyph_geometry_maybe): mark layout as changed.
+ (glyph_width): use new NEEDS_LAYOUT macro.
+ (glyph_ascent): ditto.
+ (glyph_descent): ditto.
+ (glyph_height): ditto.
+ (image_instance_layout): mark layout as clean after laying out.
+ (update_subwindow): don't mark layout as clean here.
+
+ * glyphs-x.h (IMAGE_INSTANCE_X_WIDGET_ID): undo C++ changes, they
+ should no longer be needed.
+
+ * glyphs-x.c (x_update_widget): sanitize asserts.
+ (x_finalize_image_instance): sanitize assignment to widgets.
+
+ * glyphs-widget.c (widget_instantiate): don't need to clear the
+ layout flag here.
+
+2000-02-13 Martin Buchholz <martin@xemacs.org>
+
+ * sysdep.c (getcwd): Use standard prototype.
+ * sysdep.h (getcwd): Use standard prototype.
+
+ * fns.c (Fsubseq): Change parameters to more natural ANSI Lisp
+ (sequence, start, end).
+ Remove redundant type checking.
+ (Fmapconcat): Remove useless GCPRO, a wrong-headed attempt (in
+ view of `caller-protects') to avoid a crash where the real fix was
+ found elsewhere.
+
+2000-02-12 Martin Buchholz <martin@xemacs.org>
+
+ * glyphs-x.c (x_finalize_image_instance): Compile error fixes.
+
+ * s/sol2.h: Remove feature macro initialization.
+
+ * alloc.c (alloc_lcrecord): Add more type checking assertions.
+ (vector_hash): New. Code from internal_hash.
+ * lrecord.h:
+ Fix up allocation subsystem comments.
+
+ * config.h.in: Add __EXTENSIONS__ for Solaris.
+
+ * systime.h (EMACS_GETTIMEOFDAY): New.
+ (EMACS_GET_TIME): Use EMACS_GETTIMEOFDAY.
+ Remove Solaris-specific code.
+ Use void* for the (ignored) second arg for gettimeofday().
+
+ * elhash.c (hash_table_hash): Implement it, finally.
+ * elhash.c: Use hashcode_t.
+
+ * linuxplay.c (sighandler): Fix prototypes to use SIGTYPE.
+ * sunplay.c (sighandler): Fix prototype to use SIGTYPE.
+
+ * lisp.h (STRETCHY_STRUCT_SIZEOF): Delete.
+ * fns.c (size_bit_vector):
+ * alloc.c (size_vector):
+ (make_vector_internal):
+ (make_bit_vector_internal):
+ (sweep_bit_vectors_1):
+ Replace calls to STRETCHY_STRUCT_SIZEOF with offsetof expression.
+
+2000-02-10 Martin Buchholz <martin@xemacs.org>
+
+ * s/aix4.h: #define MAP_FAILED if sys/mman.h didn't.
+ Include strings.h to avoid warnings for bzero and strcasecmp.
+
+2000-02-10 Olivier Galibert <galibert@pobox.com>
+
+ * alloc.c: Move STRETCHY_STRUCT_SIZEOF from here...
+ * lisp.h (STRETCHY_STRUCT_SIZEOF): ...to here
+
+ * fns.c (size_bit_vector): New. Declare bit vectors as a
+ sequence.
+
+2000-02-10 Olivier Galibert <galibert@pobox.com>
+
+ * symeval.h (struct symbol_value_magic): Remove "next" kludge and
+ use a value field instead.
+ (symbol_value_forward_forward): Use value field.
+ (DEFVAR_SYMVAL_FWD): Use value field.
+ (DEFVAR_SYMVAL_FWD_INT): Added. Dumps the int with dumpopaque.
+ (DEFVAR_INT): Use DEFVAR_SYMVAL_FWD_INT.
+ (DEFVAR_CONST_INT): Ditto.
+ (DEFVAR_BOOL): Ditto.
+ (DEFVAR_CONST_BOOL): Ditto.
+ (DEFVAR_INT_MAGIC): Ditto.
+ (DEFVAR_BOOL_MAGIC): Ditto.
+
+ * symbols.c (guts_of_unbound_marker): Use value field.
+ * console.c (DEFVAR_CONSOLE_LOCAL_1): Ditto.
+ * buffer.c (DEFVAR_BUFFER_LOCAL_1): Ditto.
+
+ * lisp.h: Declare dumpopaque and noninteractive1.
+
+ * alloc.c (dumpopaque): Added.
+ (pdump_dump_opaquevec): Added.
+ (pdump): Call pdump_dump_opaquevec to dump opaque data.
+ (pdump_load): Reload opaque data. Sync noninteractive1 with
+ noninteractive.
+
+2000-02-10 Andy Piper <andy@xemacs.org>
+
+ * glyphs.c (image_instance_layout): if the size changes, mark it
+ as such.
+
+ * redisplay-output.c (redisplay_output_layout): Update the
+ subwindow here.
+ (redisplay_output_subwindow): ditto.
+
+ * glyphs.c (update_subwindow): make sure we reset flags for
+ layouts as well as everything else.
+
+ * glyphs-widget.c (layout_layout): don't need to set the instances
+ dimensions here.
+
+2000-02-09 Martin Buchholz <martin@xemacs.org>
+
+ * device-x.c (x_init_device): Wrap calls to dll_* in HAVE_SHLIB,
+ not HAVE_DLOPEN, which is a lower-level thing.
+
+ * .cvsignore: Ignore gmon.out
+
+2000-02-09 Hamish Macdonald <hamishm@lucent.com>
+
+ * .cvsignore: Ignore portable dumper xemacs.dmp file
+
+2000-02-09 Andy Piper <andy@xemacs.org>
+
+ * redisplay-output.c (redisplay_output_layout): be more clever
+ about when we output based on the changed flags.
+
+ * glyphs.h (struct image_instantiator_methods): add update_method.
+ (struct Lisp_Image_Instance): add changed flags. Declare new
+ macros for manipulating them.
+
+ * glyphs.c (allocate_image_instance): renamed glyph -> parent.
+ (image_instance_parent_glyph): find an image_instance's parent
+ glyph or image_instance.
+ (image_instance_layout): mark the size as changed.
+ (set_image_instance_dirty_p): new function. mark an image
+ instance, plus all of its parents, as dirty.
+ (Fset_image_instance_property): use it.
+ (Fglyph_animated_timeout_handler): use it.
+ (update_subwindow): call update_widget and device methods for
+ update_subwindow. Mark all changed flags as clean.
+ (Fresize_subwindow): mark size as changed.
+
+ * glyphs-x.c (x_finalize_image_instance): try and detect gc
+ failures.
+ (x_update_subwindow): only resize subwindows here.
+ (x_update_widget): new function. Update all changed properties of
+ a widget.
+ (x_resize_subwindow): deleted.
+ (x_widget_set_property): deleted.
+ (x_progress_gauge_set_property): deleted.
+ (x_progress_gauge_update): new function. Implement recorded
+ changes.
+ (x_tab_control_update): ditto.
+ (x_tab_control_set_property): deleted.
+ (console_type_create_glyphs_x): declare new functions.
+ (image_instantiator_format_create_glyphs_x): ditto.
+
+ * glyphs-widget.c (widget_set_property): mark text changed.
+ (update_widget): new function. Update properties of a widget.
+ (widget_instantiate): for layouts make sure we set their
+ children's parent correctly.
+ (tab_control_set_property): new function. Record changes that will
+ take place under redisplay's control.
+ (progress_gauge_set_property): ditto.
+ (image_instantiator_progress_guage): declare new functions.
+ (image_instantiator_tab_control): ditto.
+
+ * glyphs-msw.c (mswindows_update_subwindow): just do resizing here
+ now.
+ (mswindows_update_widget): new function. Update all properties on
+ a widget that have changed.
+ (mswindows_button_update): new function. Update a button's set
+ state.
+ (mswindows_tab_control_update): new function. Update the items in
+ a tab.
+ (mswindows_tab_control_set_property): deleted.
+ (mswindows_progress_gauge_update): new function. Update the
+ progress gauge's progress.
+ (mswindows_widget_set_property): deleted. This is all done
+ asynchronously now.
+ (mswindows_progress_gauge_set_property): ditto.
+ (console_type_create_glyphs_mswindows): declare new methods.
+ (image_instantiator_format_create_glyphs_mswindows): ditto.
+
+ * frame-msw.c (msprinter_init_frame_1): Remove unused variables.
+ (msprinter_set_frame_properties): ditto.
+
+ * console.h (struct console_methods): Add update_widget_method.
+
+2000-02-09 Andy Piper <andy@xemacs.org>
+
+ * gui-msw.c (Fmswindows_shell_execute): Make
+ mswindows-shell-execute industrial strength.
+
+2000-02-08 Martin Buchholz <martin@xemacs.org>
+
+ * lrecord.h: Make macro argument `props' match member function `plist'.
+ * fns.c (Fget):
+ * fns.c (Fput):
+ * fns.c (Fremprop):
+ * fns.c (Fobject_plist):
+ * alloc.c:
+ * symbols.c:
+ Object property list frobbing cleanup.
+ - Allow any lisp object (compared with `eq'), not just symbols, as
+ keys in object plists.
+ - Move symbol plist frobbing into symbols.c, where it belongs.
+ - Move string plist frobbing into alloc.c, where it belongs.
+ - Everything's an lrecord now, so no need to test for symbolp, etc.
+ - Fix up doc strings to refer to PROPERTY, not PROPNAME.
+
+ * extents.c: Reorder code to remove declarations.
+
+ * frame.h (store_in_alist): Remove useless declaration.
+
+2000-02-07 Martin Buchholz <martin@xemacs.org>
+
+ * event-Xt.c (x_has_keysym): Use XConvertCase only if available.
+ * config.h.in: Add HAVE_XCONVERTCASE.
+
+2000-02-07 Andy Piper <andy@xemacs.org>
+
+ * glyphs.c (image_instance_layout): undo 2000-01-29 change since
+ it breaks many things.
+
+2000-02-07 Jan Vroonhof <vroonhof@math.ethz.ch>
+
+ * src/syntax.h (SYNTAX_START_P): Check whether the two chars
+ actually can start a common comment type.
+ * src/syntax.h (SYNTAX_END_P): ditto for end.
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
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.
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
/* "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
/* 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;
#undef xstrdup
char *
-xstrdup (CONST char *str)
+xstrdup (const char *str)
{
int len = strlen (str) + 1; /* for stupid terminating 0 */
#ifdef NEED_STRDUP
char *
-strdup (CONST char *s)
+strdup (const char *s)
{
return xstrdup (s);
}
}
-/* 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);
}
/* 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
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;
}
}
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
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) },
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);
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;
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);
{ 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 \
/* 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;
/* 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;
}
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;
(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. */
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);
#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. */
(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
/* 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;
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;
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
\f
int
-lrecord_type_index (CONST struct lrecord_implementation *implementation)
+lrecord_type_index (const struct lrecord_implementation *implementation)
{
int type_index = *(implementation->lrecord_type_index);
/* Have to do this circuitous validation test because of problems
} 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);
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));
: 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,
{
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);
/* 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
|| 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)
EMACS_UINT reloc_address;
int nb_staticpro;
int nb_structdmp;
+ int nb_opaquedmp;
int last_type;
} dump_header;
}
static void
+pdump_dump_opaquevec (void)
+{
+ int i;
+ for (i=0; i<dumpopaqueidx; i++)
+ {
+ write (pdump_fd, &(dumpopaquevec[i]), sizeof (dumpopaquevec[i]));
+ write (pdump_fd, dumpopaquevec[i].data, dumpopaquevec[i].size);
+ }
+}
+
+static void
pdump_dump_itable (void)
{
write (pdump_fd, lrecord_implementations_table, sizeof (lrecord_implementations_table));
hd.reloc_address = 0;
hd.nb_staticpro = staticidx;
hd.nb_structdmp = dumpstructidx;
+ hd.nb_opaquedmp = dumpopaqueidx;
hd.last_type = last_lrecord_type_index_assigned;
cur_offset = 256;
pdump_dump_staticvec ();
pdump_dump_structvec ();
+ pdump_dump_opaquevec ();
pdump_dump_itable ();
pdump_dump_rtables ();
pdump_dump_wired ();
*adr = (void *) (PDUMP_READ (p, char *) + delta);
}
+ /* Put back the opaques */
+ for (i=0; i<((dump_header *)pdump_start)->nb_opaquedmp; i++)
+ {
+ struct dumpopaque_info di = PDUMP_READ (p, struct dumpopaque_info);
+ memcpy (di.data, p, di.size);
+ p += di.size;
+ }
+
/* Put back the lrecord_implementations_table */
memcpy (lrecord_implementations_table, p, sizeof (lrecord_implementations_table));
p += sizeof (lrecord_implementations_table);
} else
p += sizeof (Lisp_Object) * rt.count;
}
+
+ /* Put back noninteractive1 to its real value */
+ noninteractive1 = noninteractive;
+
return 1;
}
/* #### 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;
}
static XFontStruct *
-open_font (Display* dpy, CONST char* font_name)
+open_font (Display* dpy, const char* font_name)
{
XFontStruct* fontStruct = NULL;
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;
============================================================================*/
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;
}
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;
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;
}
void
-balloon_help_show (CONST char* text)
+balloon_help_show (const char* text)
{
assert (b_dpy != NULL);
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);
/*********************** 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! */
#include <stdio.h> /* else can't declare FILE */
-/* FILE *fopen (CONST char *, CONST char *); */
-/* FILE *freopen (CONST char *, CONST char *, FILE *); */
+/* FILE *fopen (const char *, const char *); */
+/* FILE *freopen (const char *, const char *, FILE *); */
FILE *tmpfile (void);
int fclose (FILE *);
char *fgets (char *, int, FILE *);
int fgetc (FILE *);
int fflush (FILE *);
-int fprintf (FILE *, CONST char *, ...);
+int fprintf (FILE *, const char *, ...);
int fputc (char, FILE *);
-int fputs (CONST char *, FILE *);
+int fputs (const char *, FILE *);
size_t fread (void *, size_t, size_t, FILE *);
-int fscanf (FILE *, CONST char *, ...);
+int fscanf (FILE *, const char *, ...);
int fgetpos (FILE *, long *);
int fseek (FILE *, long, int);
-int fsetpos (FILE *, CONST long *);
+int fsetpos (FILE *, const long *);
long ftell (FILE *);
-size_t fwrite (CONST void *, size_t, size_t, FILE *);
+size_t fwrite (const void *, size_t, size_t, FILE *);
char *gets (char *);
int pclose (FILE *);
-void perror (CONST char *);
-int printf (CONST char *, ...);
-int puts (CONST char *);
-int remove (CONST char *);
-int rename (CONST char *, CONST char *);
+void perror (const char *);
+int printf (const char *, ...);
+int puts (const char *);
+int remove (const char *);
+int rename (const char *, const char *);
int rewind (FILE *);
-int scanf (CONST char *, ...);
-int sscanf (CONST char *, CONST char *, ...);
+int scanf (const char *, ...);
+int sscanf (const char *, const char *, ...);
void setbuf (FILE *, char *);
int setvbuf (FILE *, char *, int, size_t);
int ungetc (int, FILE *);
-int vprintf (CONST char *, void *);
-int vfprintf (FILE *, CONST char *, void *);
-char *vsprintf (char *, CONST char *, void *);
+int vprintf (const char *, void *);
+int vfprintf (FILE *, const char *, void *);
+char *vsprintf (char *, const char *, void *);
/*********************** signal functions *********************/
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 *);
#include </usr/include/sys/types.h>
int fsync (int);
-int lstat (CONST char *, struct stat *);
+int lstat (const char *, struct stat *);
int fchmod (int, mode_t);
char *mktemp (char *);
-/* int creat (CONST char *, mode_t); better no decl than a conflicting one... */
-int symlink (CONST char *, CONST char *);
-int readlink (CONST char *, char *, int);
+/* int creat (const char *, mode_t); better no decl than a conflicting one... */
+int symlink (const char *, const char *);
+int readlink (const char *, char *, int);
void sync (void);
int select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
char * getwd (char *);
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);
/*********************** 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);
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))
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); \
} 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)); \
/* 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);
}
#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) :
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) :
/* 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,
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);
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 ();
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)
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);
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. */
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;
/* 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)
{
}
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;
#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;
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");
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")
argcount += 2;
else
argcount += 1;
- tem = (CONST char *) strchr (tem + 1, '\n');
+ tem = (const char *) strchr (tem + 1, '\n');
if (!tem)
break;
tem++;
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)
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 */
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);
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. */
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
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;
#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);
}
static int
-getenv_internal (CONST Bufbyte *var,
+getenv_internal (const Bufbyte *var,
Bytecount varlen,
Bufbyte **value,
Bytecount *valuelen)
/* 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;
{
/* 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
#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
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) */
#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
#undef THIS_IS_X11R5
#undef THIS_IS_X11R6
+#undef HAVE_XCONVERTCASE
+
/* Where do we find bitmaps? */
#undef BITMAPDIR
/* 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
#define INCLUDED_console_msw_h_
#include "console.h"
-#ifdef CONST /* I suspect this is safe */
-#undef CONST
-#endif
#include <windows.h>
#include <ddeml.h> /* DDE management library */
#if !defined(__CYGWIN32__) && !defined(__MINGW32__) \
#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
*/
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)
#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)
#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,
\f
static int
stream_text_width (struct frame *f, struct face_cachel *cachel,
- CONST Emchar *str, Charcount len)
+ const Emchar *str, Charcount len)
{
return len;
}
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
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 */
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
/* 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));
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);
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);
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); \
*/ );
#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!
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;
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);
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);
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);
*/
(subr))
{
- CONST char *prompt;
+ const char *prompt;
CHECK_SUBR (subr);
prompt = XSUBR (subr)->prompt;
return prompt ? list2 (Qinteractive, build_string (prompt)) : Qnil;
#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"
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;
/* */
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
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);
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)
/* 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",
*/
(keysym))
{
- CONST char *keysym_ext;
+ const char *keysym_ext;
CHECK_STRING (keysym);
TO_EXTERNAL_FORMAT (LISP_STRING, keysym,
{
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)
{
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)
ndirs++;
}
- directories = alloca_array (CONST char *, ndirs);
+ directories = alloca_array (const char *, ndirs);
EXTERNAL_LIST_LOOP (path_entry, font_path)
{
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;
*/
(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, /*
(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. */
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" };
\f
Lisp_Object
-make_directory_hash_table (CONST char *path)
+make_directory_hash_table (const char *path)
{
DIR *d;
if ((d = opendir (path)))
}
\f
static void
-weird_doc (Lisp_Object sym, CONST char *weirdness, CONST char *type, int pos)
+weird_doc (Lisp_Object sym, const char *weirdness, const char *type, int pos)
{
if (!strcmp (weirdness, GETTEXT ("duplicate"))) return;
message ("Note: Strange doc (%s) for %s %s @ %d",
#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
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;
}
}
-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;
} 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);
/* Is there a field number specifier? */
{
- CONST Bufbyte *ptr;
+ const Bufbyte *ptr;
int fieldspec;
ptr = parse_off_posnum (fmt, fmt_end, &fieldspec);
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;
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)
/* 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;
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,
...)
{
/* 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)
{
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);
/* 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, ...)
{
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,
...)
{
}
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)
{
}
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 ();
}
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, ...)
{
/* 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;
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. */
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, /*
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);
/* 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);
/* 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,
return 1;
}
+
+/* This is not a great hash function, but it _is_ correct and fast.
+ Examining all entries is too expensive, and examining a random
+ subset does not yield a correct hash function. */
+static hashcode_t
+hash_table_hash (Lisp_Object hash_table, int depth)
+{
+ return XHASH_TABLE (hash_table)->count;
+}
+
\f
/* Printing hash tables.
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);
*/
(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);
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;
}
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;
*/
(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;
*/
(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))
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))
!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. */
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;
}
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;
}
{
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);
(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
/* 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. */
# 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];
\f
DOESNT_RETURN
-fatal (CONST char *fmt, ...)
+fatal (const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
GETTEXT on the format string. */
int
-stderr_out (CONST char *fmt, ...)
+stderr_out (const char *fmt, ...)
{
int retval;
va_list args;
GETTEXT on the format string. */
int
-stdout_out (CONST char *fmt, ...)
+stdout_out (const char *fmt, ...)
{
int retval;
va_list args;
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),
struct standard_args
{
- CONST char * CONST name;
- CONST char * CONST longname;
+ const char * const name;
+ const char * const longname;
int priority;
int nargs;
};
(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);
"\n"
" gdb ");
{
- CONST char *name;
+ const char *name;
char *dir = 0;
/* Now try to determine the actual path to the executable,
/* 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)
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;
}
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)
/* 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);
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);
}
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;
* 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;
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
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);
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);
}
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))
}
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;
* 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
* 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)
print_subr (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
Lisp_Subr *subr = XSUBR (obj);
- CONST char *header =
+ const char *header =
(subr->max_args == UNEVALLED) ? "#<special-form " : "#<subr ";
- CONST char *name = subr_name (subr);
- CONST char *trailer = subr->prompt ? " (interactive)>" : ">";
+ const char *name = subr_name (subr);
+ const char *trailer = subr->prompt ? " (interactive)>" : ">";
if (print_readably)
error ("printing unreadable object %s%s%s", header, name, trailer);
/* 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);
}
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;
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);
}
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);
Lisp_Object
maybe_continuable_error (Lisp_Object class, Error_behavior errb,
- CONST char *fmt, ...)
+ const char *fmt, ...)
{
Lisp_Object obj;
va_list args;
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);
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: */
}
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: */
*/
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);
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;
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);
}
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);
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;
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);
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,
}
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)
{
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,
}
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)
{
/************************************************************************/
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
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;
}
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();
}
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;
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)
{
}
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;
}
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();
}
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();
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);
/* 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
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++)
{
}
}
-static CONST char *
+static const char *
index_to_name (int indice)
{
switch (indice)
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;
stderr_out ("\n");
}
-static CONST char *
+static const char *
XEvent_mode_to_string (int mode)
{
switch (mode)
}
}
-static CONST char *
+static const char *
XEvent_detail_to_string (int detail)
{
switch (detail)
}
}
-static CONST char *
+static const char *
XEvent_visibility_to_string (int state)
{
switch (state)
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)
/* 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;
}
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);
}
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);
* 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
{
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 ();
}
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))
{
{
if (FD_ISSET (windows_fd, &temp_mask))
{
- mswindows_drain_windows_queue (0);
+ mswindows_drain_windows_queue ();
}
#ifdef HAVE_TTY
/* Look for a TTY event */
else if (active == WAIT_OBJECT_0 + mswindows_waitable_count)
{
/* Got your message, thanks */
- mswindows_drain_windows_queue (0);
+ mswindows_drain_windows_queue ();
}
else
{
#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
*/
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:
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:
{
/* 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)
{
static void
print_timeout (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
- CONST Lisp_Timeout *t = XTIMEOUT (obj);
+ const Lisp_Timeout *t = XTIMEOUT (obj);
char buf[64];
sprintf (buf, "#<INTERNAL OBJECT (XEmacs bug?) (timeout) 0x%lx>",
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));
}
}
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);
}
case magic_event:
{
- CONST char *name = NULL;
+ const char *name = NULL;
#ifdef HAVE_X_WINDOWS
{
}
else if (SYMBOLP (key))
{
- CONST char *str = 0;
+ const char *str = 0;
if (brief)
{
if (EQ (key, QKlinefeed)) str = "LFD";
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);
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)
{
{
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
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)
{
return Fextent_properties (obj);
}
+DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("extent", extent,
+ mark_extent,
+ print_extent,
+ /* NOTE: If you declare a
+ finalization method here,
+ it will NOT be called.
+ Shaft city. */
+ 0,
+ extent_equal, extent_hash,
+ extent_description,
+ extent_getprop, extent_putprop,
+ extent_remprop, extent_plist,
+ struct extent);
+
\f
/************************************************************************/
/* basic extent accessors */
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
}
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;
(#### 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-*",
"-*-*-*-*-*-*-*-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)),
#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;
}
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;
*/
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;
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);
}
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;
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);
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);
};
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);
}
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;
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);
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);
((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;
/* 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;
/* 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;
} 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;
/* 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;
/* 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;
}
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--)
}
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);
}
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);
/* 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:
/************************************************************************/
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--)
}
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);
}
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);
/* 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:
}
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;
/* 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);
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];
/* 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;
/* 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 */
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;
}
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;
/* 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
}
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: */
/* 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: */
}
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,
}
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)
{
}
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,
}
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)
{
}
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);
*/
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.
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)
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. */
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));
|| 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);
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);
}
/* 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);
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);
}
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,
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,
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;
/* 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.
/* 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)
sizeof (long)));
}
+static size_t
+size_bit_vector (const void *lheader)
+{
+ Lisp_Bit_Vector *v = (Lisp_Bit_Vector *) lheader;
+ return offsetof (Lisp_Bit_Vector,
+ bits[BIT_VECTOR_LONG_STORAGE (bit_vector_length (v))]);
+}
+
static const struct lrecord_description bit_vector_description[] = {
{ XD_LISP_OBJECT, offsetof (Lisp_Bit_Vector, next) },
{ XD_END }
};
-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("bit-vector", bit_vector,
- mark_bit_vector, print_bit_vector, 0,
- bit_vector_equal, bit_vector_hash,
- bit_vector_description,
- Lisp_Bit_Vector);
+DEFINE_BASIC_LRECORD_SEQUENCE_IMPLEMENTATION ("bit-vector", bit_vector,
+ mark_bit_vector, print_bit_vector, 0,
+ bit_vector_equal, bit_vector_hash,
+ bit_vector_description, size_bit_vector,
+ Lisp_Bit_Vector);
\f
DEFUN ("identity", Fidentity, 1, 1, 0, /*
Return the argument unchanged.
#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
}
DEFUN ("subseq", Fsubseq, 2, 3, 0, /*
-Return a subsequence of SEQ, starting at index FROM and ending before TO.
-TO may be nil or omitted; then the subsequence runs to the end of SEQ.
-If FROM or TO is negative, it counts from the end.
-The resulting subsequence is always the same type as the original
- sequence.
-If SEQ is a string, relevant parts of the string-extent-data are copied
- to the new string.
+Return the subsequence of SEQUENCE starting at START and ending before END.
+END may be omitted; then the subsequence runs to the end of SEQUENCE.
+If START or END is negative, it counts from the end.
+The returned subsequence is always of the same type as SEQUENCE.
+If SEQUENCE is a string, relevant parts of the string-extent-data
+are copied to the new string.
*/
- (seq, from, to))
+ (sequence, start, end))
{
- EMACS_INT len, f, t;
-
- if (STRINGP (seq))
- return Fsubstring (seq, from, to);
+ EMACS_INT len, s, e;
- if (!LISTP (seq) && !VECTORP (seq) && !BIT_VECTORP (seq))
- {
- check_losing_bytecode ("subseq", seq);
- seq = wrong_type_argument (Qsequencep, seq);
- }
+ if (STRINGP (sequence))
+ return Fsubstring (sequence, start, end);
- len = XINT (Flength (seq));
+ len = XINT (Flength (sequence));
- CHECK_INT (from);
- f = XINT (from);
- if (f < 0)
- f = len + f;
+ CHECK_INT (start);
+ s = XINT (start);
+ if (s < 0)
+ s = len + s;
- if (NILP (to))
- t = len;
+ if (NILP (end))
+ e = len;
else
{
- CHECK_INT (to);
- t = XINT (to);
- if (t < 0)
- t = len + t;
+ CHECK_INT (end);
+ e = XINT (end);
+ if (e < 0)
+ e = len + e;
}
- if (!(0 <= f && f <= t && t <= len))
- args_out_of_range_3 (seq, make_int (f), make_int (t));
+ if (!(0 <= s && s <= e && e <= len))
+ args_out_of_range_3 (sequence, make_int (s), make_int (e));
- if (VECTORP (seq))
+ if (VECTORP (sequence))
{
- Lisp_Object result = make_vector (t - f, Qnil);
+ Lisp_Object result = make_vector (e - s, Qnil);
EMACS_INT i;
- Lisp_Object *in_elts = XVECTOR_DATA (seq);
+ Lisp_Object *in_elts = XVECTOR_DATA (sequence);
Lisp_Object *out_elts = XVECTOR_DATA (result);
- for (i = f; i < t; i++)
- out_elts[i - f] = in_elts[i];
+ for (i = s; i < e; i++)
+ out_elts[i - s] = in_elts[i];
return result;
}
-
- if (LISTP (seq))
+ else if (LISTP (sequence))
{
Lisp_Object result = Qnil;
EMACS_INT i;
- seq = Fnthcdr (make_int (f), seq);
+ sequence = Fnthcdr (make_int (s), sequence);
- for (i = f; i < t; i++)
+ for (i = s; i < e; i++)
{
- result = Fcons (Fcar (seq), result);
- seq = Fcdr (seq);
+ result = Fcons (Fcar (sequence), result);
+ sequence = Fcdr (sequence);
}
return Fnreverse (result);
}
+ else if (BIT_VECTORP (sequence))
+ {
+ Lisp_Object result = make_bit_vector (e - s, Qzero);
+ EMACS_INT i;
- /* bit vector */
- {
- Lisp_Object result = make_bit_vector (t - f, Qzero);
- EMACS_INT i;
-
- for (i = f; i < t; i++)
- set_bit_vector_bit (XBIT_VECTOR (result), i - f,
- bit_vector_bit (XBIT_VECTOR (seq), i));
- return result;
- }
+ for (i = s; i < e; i++)
+ set_bit_vector_bit (XBIT_VECTOR (result), i - s,
+ bit_vector_bit (XBIT_VECTOR (sequence), i));
+ return result;
+ }
+ else
+ abort (); /* unreachable, since Flength (sequence) did not get an error */
}
\f
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))
{
(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, /*
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);
return 0;
if (LRECORDP (obj1))
{
- CONST struct lrecord_implementation
+ const struct lrecord_implementation
*imp1 = XRECORD_LHEADER_IMPLEMENTATION (obj1),
*imp2 = XRECORD_LHEADER_IMPLEMENTATION (obj2);
}
}
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;
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];
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,
/*----- 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)
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)))))
{
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);
}
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 */
error_frame_unsizable (f);
}
+static void
+msprinter_eject_page (struct frame *f)
+{
+ /* #### Should we eject empty pages? */
+ if (FRAME_MSPRINTER_PAGE_STARTED (f))
+ {
+ FRAME_MSPRINTER_PAGE_STARTED (f) = 0;
+ EndPage (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
+ }
+}
+
+\f
void
console_type_create_frame_mswindows (void)
{
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
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,
if (STRINGP (prop))
{
- CONST char *extprop;
+ const char *extprop;
if (XSTRING_LENGTH (prop) == 0)
continue;
Qctext);
if (STRINGP (val))
{
- CONST Extbyte *extval;
+ const Extbyte *extval;
Extcount extvallen;
TO_EXTERNAL_FORMAT (LISP_STRING, val,
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);
}
}
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);
}
#ifdef EXTERNAL_WIDGET
Window window_id = 0;
#endif
- CONST char *name;
+ const char *name;
Arg al [25];
int ac = 0;
Widget text, container, shell;
the dynamic allocation time adds up. */
static Emchar_dynarr *title_string_emchar_dynarr;
-EXFUN (Fset_frame_properties, 2);
-
\f
static Lisp_Object
mark_frame (Lisp_Object obj)
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;
{
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);
/* Ben thinks there is no need for `redirect-frame-focus' or `frame-focus',
crockish FSFmacs functions. See summary on focus in event-stream.c. */
+\f
+DEFUN ("print-job-page-number", Fprint_job_page_number, 1, 1, 0, /*
+Return current page number for the print job FRAME.
+*/
+ (frame))
+{
+ CHECK_PRINTER_FRAME (frame);
+ return make_int (FRAME_PAGENUMBER (XFRAME (frame)));
+}
+
+DEFUN ("print-job-eject-page", Fprint_job_eject_page, 1, 1, 0, /*
+Eject page in the print job FRAME.
+*/
+ (frame))
+{
+ struct frame *f;
+
+ CHECK_PRINTER_FRAME (frame);
+ f = XFRAME (frame);
+ FRAMEMETH (f, eject_page, (f));
+ FRAME_SET_PAGENUMBER (f, 1 + FRAME_PAGENUMBER (f));
+ f->clear = 1;
+
+ return Qnil;
+}
\f
/***************************************************************************/
- 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. */
{
DEFSUBR (Fset_frame_size);
DEFSUBR (Fset_frame_position);
DEFSUBR (Fset_frame_pointer);
+ DEFSUBR (Fprint_job_page_number);
+ DEFSUBR (Fprint_job_eject_page);
}
void
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
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;
(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. */
#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)) \
{ \
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)) \
{ \
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; \
#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) ? \
#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)
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)
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)
#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:
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,
#endif
EMACS_INT present = (EMACS_INT) gethash (ptr, pointer_table,
- (CONST void **) &size);
+ (const void **) &size);
if (!present)
{
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
Lisp_Object Qpopup;
Lisp_Object Qportrait;
Lisp_Object Qprint;
+Lisp_Object Qprinter;
Lisp_Object Qprocess;
Lisp_Object Qprovide;
Lisp_Object Qrassoc;
defsymbol (&Qpopup, "popup");
defsymbol (&Qportrait, "portrait");
defsymbol (&Qprint, "print");
+ defsymbol (&Qprinter, "printer");
defsymbol (&Qprocess, "process");
defsymbol (&Qprovide, "provide");
defsymbol (&Qrassoc, "rassoc");
{
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
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;
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? */
};
struct png_error_struct
{
- CONST char *err_str;
+ const char *err_str;
jmp_buf setjmp_buffer; /* for return to caller */
};
/* 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));
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;
}
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
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,
{
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;
{
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;
#endif
#endif
-static CONST resource_t bitmap_table[] =
+static const resource_t bitmap_table[] =
{
/* bitmaps */
{ "close", OBM_CLOSE },
{0}
};
-static CONST resource_t cursor_table[] =
+static const resource_t cursor_table[] =
{
/* cursors */
{ "normal", OCR_NORMAL },
{ 0 }
};
-static CONST resource_t icon_table[] =
+static const resource_t icon_table[] =
{
/* icons */
{ "sample", OIC_SAMPLE },
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);
}
-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)
{
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,
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);
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,
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));
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));
| 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
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);
}
}
+/* 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,
}
/* 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)))
{
IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), i);
i++;
}
-
- return Qt;
}
- return Qunbound;
}
/* instantiate a static control possible for putting other things in */
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
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);
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);
INITIALIZE_DEVICE_IIFORMAT (mswindows, widget);
IIFORMAT_HAS_DEVMETHOD (mswindows, widget, property);
- IIFORMAT_HAS_DEVMETHOD (mswindows, widget, set_property);
/* label */
INITIALIZE_DEVICE_IIFORMAT (mswindows, label);
/* 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 */
/* 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");
if (EQ (prop, Q_text))
{
IMAGE_INSTANCE_WIDGET_TEXT (ii) = val;
+ IMAGE_INSTANCE_TEXT_CHANGED (ii) = 1;
}
/* Now try device specific methods first ... */
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
/* 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
{
/* 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. */
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++;
}
}
+/* Get the geometry of a tab control. This is based on the number of
+ items and text therin in the tab control. */
+static Lisp_Object
+tab_control_set_property (Lisp_Object image_instance,
+ Lisp_Object prop,
+ Lisp_Object val)
+{
+ /* Record new items for update. *_tab_control_update will do the
+ rest. */
+ if (EQ (prop, Q_items))
+ {
+ Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
+ check_valid_item_list_1 (val);
+
+ IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
+ Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
+ parse_gui_item_tree_children (val));
+
+ IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 1;
+
+ return Qt;
+ }
+ return Qunbound;
+}
+
+/* set the properties of a progres guage */
+static Lisp_Object
+progress_gauge_set_property (Lisp_Object image_instance,
+ Lisp_Object prop,
+ Lisp_Object val)
+{
+ Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+
+ if (EQ (prop, Q_percent))
+ {
+ CHECK_INT (val);
+ IMAGE_INSTANCE_WIDGET_PROPS (ii)
+ = Fplist_put (IMAGE_INSTANCE_WIDGET_PROPS (ii), prop, val);
+ IMAGE_INSTANCE_WIDGET_PERCENT_CHANGED (ii) = 1;
+
+ return Qt;
+ }
+ return Qunbound;
+}
+
\f
/*****************************************************************************
* widget layout *
}
else
{
-
nitems ++;
if (IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii)
== LAYOUT_HORIZONTAL)
/* Now layout subwidgets if they require it. */
image_instance_layout (glyph, gwidth, gheight, domain);
}
-
- IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii) = width;
- IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii) = height;
}
\f
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);
}
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);
#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)
}
}
-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)
{
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))),
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,
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);
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,
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,
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));
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));
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);
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)))
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
}
}
#endif
-static void
-x_resize_subwindow (Lisp_Image_Instance* ii, int w, int h)
-{
- if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW)
- {
- XResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (ii),
- IMAGE_INSTANCE_X_SUBWINDOW_ID (ii),
- w, h);
- }
- else /* must be a widget */
- {
- Arg al[2];
-
- if ( !XtIsManaged(IMAGE_INSTANCE_X_WIDGET_ID (ii))
- ||
- IMAGE_INSTANCE_X_WIDGET_ID (ii)->core.being_destroyed )
- {
- Lisp_Object sw;
- XSETIMAGE_INSTANCE (sw, ii);
- signal_simple_error ("XEmacs bug: subwindow is deleted", sw);
- }
-
- XtSetArg (al [0], XtNwidth, (Dimension)w);
- XtSetArg (al [1], XtNheight, (Dimension)h);
- XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, 2);
- }
-}
-
\f
#ifdef HAVE_WIDGETS
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;
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)
}
/* 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 */
}
/* 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 */
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);
}
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);
/* 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);
#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_ */
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
/* 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
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;
}
(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),
}
}
+/* 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)
}
}
- /* 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;
/* 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;
}
/* 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;
}
/*
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;
/* 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));
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,
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);
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);
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);
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);
}
}
+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
* 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)
{
*****************************************************************************/
/* 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. */
{
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++)
{
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. */
update_subwindow (subwindow);
IMAGE_INSTANCE_DIRTYP (ii) = 0;
}
+#endif
MAYBE_DEVMETH (XDEVICE (ii->device), map_subwindow, (ii, x, y, dga));
}
(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);
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);
}
}
}
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
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 */
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
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;
/* 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)
((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)
#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) \
#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) \
#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) \
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)
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) \
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) \
#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,
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
{
# define STDC_HEADERS
#endif
-#define __const const
-
\f
/* DO NOT EDIT THIS FILE -- it is automagically generated. -*- C -*- */
/* Bwaa-haa-haa! Not a chance that this is actually true! */
/* 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 */
*/
(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;
}
#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')
if (!NILP (pgui->suffix))
{
- CONST char *const_bogosity;
+ const char *const_bogosity;
Lisp_Object suffix2;
/* Shortcut to avoid evaluating suffix each time */
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_ */
#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')
return pgui->accelerator;
else
- return pgui->name;
+ return gui_name_accelerator (pgui->name);
}
Lisp_Object
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);
}
#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;
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;
/* 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,
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)
{
(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) :
}
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)
{
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))
{
}
void
-remhash (CONST void *key, struct hash_table *hash_table)
+remhash (const void *key, struct hash_table *hash_table)
{
if (!key)
{
((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) :
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
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 */
#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),
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;
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)
/* 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)
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)
{
/************************************************************************/
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)));
if (*len < 0)
{
if (nonreloc)
- *len = strlen ((CONST char *) nonreloc) - offset;
+ *len = strlen ((const char *) nonreloc) - offset;
else
*len = XSTRING_LENGTH (reloc) - offset;
}
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, Bytecount length,
+ const Bufbyte *nonreloc, Bytecount length,
int flags)
{
/* This function can GC */
/* 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);
}
}
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)
}
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
}
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)
{
}
int
-emchar_string_displayed_columns (CONST Emchar *str, Charcount len)
+emchar_string_displayed_columns (const Emchar *str, Charcount len)
{
#ifdef MULE
int cols = 0;
/* 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)
{
}
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)
{
#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,
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);
/* 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;
}
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;
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 */
/* 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;
}
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 */
}
static int
-meta_prefix_char_p (CONST struct key_data *key)
+meta_prefix_char_p (const struct key_data *key)
{
Lisp_Event event;
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;
/* 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 */
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])))
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;
};
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)
/* 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)
{
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)
/* 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,
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
struct describe_map_shadow_closure
{
- CONST struct key_data *raw_key;
+ const struct key_data *raw_key;
Lisp_Object self;
};
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)
{
staticpro (&Vcurrent_global_map);
- Vsingle_space_string = make_string ((CONST Bufbyte *) " ", 1);
+ Vsingle_space_string = make_string ((const Bufbyte *) " ", 1);
staticpro (&Vsingle_space_string);
}
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;
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);
#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;
/* 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) {
#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. */
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;
#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. */
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);
#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)))
#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
#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 */
{
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;
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);
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);
#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);
#ifdef HAVE_LIBINTL_H
#include <libintl.h>
#else
-char *dgettext (CONST char *, CONST char *);
-char *gettext (CONST char *);
-char *textdomain (CONST char *);
-char *bindtextdomain (CONST char *, CONST char *);
+char *dgettext (const char *, const char *);
+char *gettext (const char *);
+char *textdomain (const char *);
+char *bindtextdomain (const char *, const char *);
#endif /* HAVE_LIBINTL_H */
#define GETTEXT(x) gettext(x)
/* 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 *);
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);
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);
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 */
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 */
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;
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));
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, ...);
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);
/* 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 */
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);
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 */
/* 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);
/* 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);
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);
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);
#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);
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;
\f
static DOESNT_RETURN
-syntax_error (CONST char *string)
+syntax_error (const char *string)
{
signal_error (Qinvalid_read_syntax,
list1 (build_translated_string (string)));
}
static Lisp_Object
-continuable_syntax_error (CONST char *string)
+continuable_syntax_error (const char *string)
{
return Fsignal (Qinvalid_read_syntax,
list1 (build_translated_string (string)));
{
/* 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);
else
{
/* Case c) */
- CONST char *nsuffix = (CONST char *) XSTRING_DATA (suffixes);
+ const char *nsuffix = (const char *) XSTRING_DATA (suffixes);
while (1)
{
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,
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;
#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++;
/* 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
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
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); \
{
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.
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
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])
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.
#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.
#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)
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))
/* 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
}
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;
}
}
}
-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;
#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);
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))
/* 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);
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;
/* 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))
{
}
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,
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);
}
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);
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);
}
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;
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
struct fixed_buffer_stream
{
- CONST unsigned char *inbuf;
+ const unsigned char *inbuf;
unsigned char *outbuf;
size_t size;
size_t offset;
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");
}
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)
return 0;
}
-CONST unsigned char *
+const unsigned char *
fixed_buffer_input_stream_ptr (Lstream *stream)
{
assert (stream->imp == lstream_fixed_buffer);
}
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);
}
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);
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;
}
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;
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
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 */
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 */
#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;
(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);
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);
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);
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.
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);
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. */
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;
}
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);
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);
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;
int
-regexp_ignore_completion_p (CONST Bufbyte *nonreloc,
+regexp_ignore_completion_p (const Bufbyte *nonreloc,
Lisp_Object reloc, Bytecount offset,
Bytecount length)
{
}
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;
}
}
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)
{
}
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)
{
/* 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 */
}
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 */
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)
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);
}
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)
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);
}
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
}
void
-message_append (CONST char *fmt, ...)
+message_append (const char *fmt, ...)
{
/* This function can call lisp */
va_list args;
}
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
#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;
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)
{
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;
? 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)
#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);
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;
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++;
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_ */
#else /* !emacs */
# define warn(str) fprintf (stderr, "%s\n", (str))
-# define CONST const
#endif /* emacs */
#ifdef XTOOLKIT
/* Create a name from the sound. */
static char *
-NameFromData (CONST char *buf,
+NameFromData (const char *buf,
int len)
{
*/
static SndInfo *
-SndOpenDataForReading (CONST char *data,
+SndOpenDataForReading (const char *data,
int length)
{
/* 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;
read the wave data from a buffer in memory. */
static WaveInfo *
-WaveOpenDataForReading (CONST char *data,
+WaveOpenDataForReading (const char *data,
int length)
{
RiffChunk ck;
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);
}
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;
/* 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;
#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_ */
02111-1307, USA.*/
#include <windows.h>
-#undef CONST
#include <config.h>
#include <stdio.h>
#include "sysfile.h"
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;
#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;
/* 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;
/* 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
#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.
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) },
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},
/* 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},
}
COLORREF
-mswindows_string_to_color(CONST char *name)
+mswindows_string_to_color(const char *name)
{
int i;
return font_enum.list;
}
-static void
+static HFONT
mswindows_create_font_variant (Lisp_Font_Instance* f,
int under, int strike)
{
}
FONT_INSTANCE_MSWINDOWS_HFONT_VARIANT (f, under, strike) = hfont;
+ return hfont;
}
HFONT
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 */
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,
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,
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);
/* 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))
{
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;
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 */
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)
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
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);
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));
}
}
{
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))
xzero (*color);
{
- CONST Extbyte *extname;
+ const Extbyte *extname;
Extcount extnamelen;
TO_EXTERNAL_FORMAT (DATA, (name, len),
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);
{
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);
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,
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))
*/
if (EQ (charset, Vcharset_ascii))
{
- CONST Bufbyte *the_nonreloc = nonreloc;
+ const Bufbyte *the_nonreloc = nonreloc;
int i;
Bytecount the_length = length;
{
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;
char **names;
int count = 0;
Lisp_Object result = Qnil;
- CONST char *patternext;
+ const char *patternext;
int i;
TO_EXTERNAL_FORMAT (LISP_STRING, font,
/* #### 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,
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,
#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
static void
print_opaque (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
- CONST Lisp_Opaque *p = XOPAQUE (obj);
+ const Lisp_Opaque *p = XOPAQUE (obj);
char buf[200];
sprintf (buf, "#<INTERNAL OBJECT (XEmacs bug?) (opaque, size=%lu) 0x%lx>",
}
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;
}
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);
static void
print_opaque_ptr (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
- CONST Lisp_Opaque_Ptr *p = XOPAQUE_PTR (obj);
+ const Lisp_Opaque_Ptr *p = XOPAQUE_PTR (obj);
char buf[200];
sprintf (buf, "#<INTERNAL OBJECT (XEmacs bug?) (opaque_ptr, adr=0x%lx) 0x%lx>",
#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;
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))
#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
{
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),
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 */
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 */
\f
/* Used for printing a single-byte character (*not* any Emchar). */
#define write_char_internal(string_of_length_1, stream) \
- output_string (stream, (CONST Bufbyte *) (string_of_length_1), \
+ output_string (stream, (const Bufbyte *) (string_of_length_1), \
Qnil, 0, 1)
/* NOTE: Do not call this with the data of a Lisp_String, as
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
}
void
-write_c_string (CONST char *str, Lisp_Object stream)
+write_c_string (const char *str, Lisp_Object stream)
{
/* This function can GC */
- write_string_1 ((CONST Bufbyte *) str, strlen (str), stream);
+ write_string_1 ((const Bufbyte *) str, strlen (str), stream);
}
\f
}
\f
static void
-print_vector_internal (CONST char *start, CONST char *end,
+print_vector_internal (const char *start, const char *end,
Lisp_Object obj,
Lisp_Object printcharfun, int escapeflag)
{
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));
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;
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);
#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;
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;
}
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);
{
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));
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 */
}
\f
-CONST char *
+const char *
signal_name (int signum)
{
if (signum >= 0 && signum < NSIG)
- return (CONST char *) sys_siglist[signum];
+ return (const char *) sys_siglist[signum];
- return (CONST char *) GETTEXT ("unknown signal");
+ return (const char *) GETTEXT ("unknown signal");
}
void
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)
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;
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. */
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);
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_ */
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);
}
};
static int
-get_profiling_info_maphash (CONST void *void_key,
+get_profiling_info_maphash (const void *void_key,
void *void_val,
void *void_closure)
{
}
static int
-mark_profiling_info_maphash (CONST void *void_key,
+mark_profiling_info_maphash (const void *void_key,
void *void_val,
void *void_closure)
{
#include <stdio.h>
typedef void *VM_ADDR; /* VM addresses */
-static CONST VM_ADDR VM_FAILURE_ADDR = (VM_ADDR) -1; /* mmap returns this when it fails. */
+static const VM_ADDR VM_FAILURE_ADDR = (VM_ADDR) -1; /* mmap returns this when it fails. */
/* Configuration for relocating allocator. */
Chuck Thompson
Lots of work done by Ben Wing for Mule
- Partially rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
- */
+
+ Partially rewritten for mswindows by Jonathan Harris, November 1997
+ for 21.0. */
#include <config.h>
#include "lisp.h"
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
* 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))
* 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);
****************************************************************************/
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;
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))
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)
{
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,
/* 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
}
}
}
+
+ /* 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);
}
#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
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);
\f
struct fkey_table
{
- CONST char *cap;
- CONST char *name;
+ const char *cap;
+ const char *name;
};
/* Termcap capability names that correspond directly to X keysyms.
"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),
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
*/
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;
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 &&
}
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));
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);
{
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);
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)
{
*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
*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
*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 */
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);
}
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')
{
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);
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;
}
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. */
if (!done)
{
- CONST char *word_syntax_chars =
+ const char *word_syntax_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
memset (re_syntax_table, 0, sizeof (re_syntax_table));
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)");
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 */
{ \
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 ()); \
\
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); \
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]); \
} \
\
#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]; \
#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)
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);
static boolean common_op_match_null_string_p (unsigned char **p,
unsigned char *end,
register_info_type *reg_info);
-static int bcmp_translate (CONST unsigned char *s1, CONST unsigned char *s2,
+static int bcmp_translate (const unsigned char *s1, const unsigned char *s2,
REGISTER int len, char *translate);
static int re_match_2_internal (struct re_pattern_buffer *bufp,
- CONST char *string1, int size1,
- CONST char *string2, int size2, int pos,
+ const char *string1, int size1,
+ const char *string2, int size2, int pos,
struct re_registers *regs, int stop);
\f
#ifndef MATCH_MAY_ALLOCATE
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,
{
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;
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
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;
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;
/* 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
{
/* 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. */
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
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? */
`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)
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. */
#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 */
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,
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;
#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. */
return -1;
else
{
- d = ((CONST unsigned char *)
+ d = ((const unsigned char *)
(startpos >= size1 ? string2 - size1 : string1) + startpos);
range = charcount_to_bytecount (d, 1);
}
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);
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'
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;
{
/* 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);
/* 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,
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,
/* 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. */
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;
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
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
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
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
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
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)))
followed by the numeric value of <digit> as the register number. */
case duplicate:
{
- REGISTER CONST char *d2, *dend2;
+ REGISTER const char *d2, *dend2;
int regno = *p++; /* Get which register to match against. */
DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
`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,
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);
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))
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;
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);
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))
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;
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;
static struct re_pattern_buffer re_comp_buf;
char *
-re_comp (CONST char *s)
+re_comp (const char *s)
{
reg_errcode_t ret;
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);
}
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
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;
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
/* 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);
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);
#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);
#ifndef NOT_C_CODE
#define _XFUNCS_H_ 1
+
+/* AIX is happier when bzero and strcasecmp are declared */
+#include "strings.h"
+
+/* AIX 4.2's sys/mman.h doesn't seem to define MAP_FAILED,
+ although Unix98 claims it must. */
+#ifdef HAVE_MMAP
+#include <sys/mman.h>
+# ifndef MAP_FAILED
+# define MAP_FAILED ((void *) -1)
+# endif
+#endif
+
/* Forward declarations for xlc warning suppressions */
struct ether_addr;
struct sockaddr_dl;
-#endif
+#endif /* C code */
/* 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);
#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
/* 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 */
char *translate, struct re_registers *regp, int posix,
Error_behavior errb)
{
- CONST char *val;
+ const char *val;
reg_syntax_t old;
cp->regexp = Qnil;
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);
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)
#endif /* CUT_BUFFER_SUPPORT */
{
- CONST char *nameext;
+ const char *nameext;
TO_EXTERNAL_FORMAT (LISP_STRING, Fsymbol_name (sym),
C_STRING_ALLOCA, nameext,
Qctext);
#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)
{
}
else if (STRINGP (obj))
{
- CONST Extbyte *extval;
+ const Extbyte *extval;
Extcount extvallen;
TO_EXTERNAL_FORMAT (LISP_STRING, obj,
{
Bufbyte buf[MAX_EMCHAR_LEN];
Bytecount len;
- CONST Extbyte *extval;
+ const Extbyte *extval;
Extcount extvallen;
*format_ret = 8;
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);
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
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;
#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,
#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,
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,
}
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;
}
}
struct specifier_methods
{
- CONST char *name;
+ const char *name;
Lisp_Object predicate_symbol;
/* Implementation specific methods: */
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. */
#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)
{
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;
return 0;
else
{
- x = (CONST char *) x1;
- y = (CONST char *) y1;
+ x = (const char *) x1;
+ y = (const char *) y1;
goto slow_loop;
}
}
y1++;
}
- x = (CONST char *) x1;
- y = (CONST char *) y1;
+ x = (const char *) x1;
+ y = (const char *) y1;
goto slow_loop;
}
else
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;
return 0;
else
{
- x = (CONST char *) x1;
- y = (CONST char *) y1;
+ x = (const char *) x1;
+ y = (const char *) y1;
goto slow_loop;
}
}
y1++;
}
- x = (CONST char *) x1;
- y = (CONST char *) y1;
+ x = (const char *) x1;
+ y = (const char *) y1;
goto slow_loop;
}
else
#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)
{
if (HAS_ZERO(c))
{
to = (char *) to1;
- from = (CONST char *) from1;
+ from = (const char *) from1;
goto slow_loop;
}
else
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"
/* 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;
starting on Sundays. */
static int
-sun_week (CONST struct tm *tm)
+sun_week (const struct tm *tm)
{
int dl;
starting on Mondays. */
static int
-mon_week (CONST struct tm *tm)
+mon_week (const struct tm *tm)
{
int dl, wday;
#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;
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. */
#include <stdlib.h>
-size_t mbstowcs (wchar_t *foo, CONST char *bar, size_t baz)
+size_t mbstowcs (wchar_t *foo, const char *bar, size_t baz)
{
abort ();
return 0;
}
-size_t wcstombs (char *foo, CONST wchar_t *bar, size_t baz)
+size_t wcstombs (char *foo, const wchar_t *bar, size_t baz)
{
abort ();
return 0;
#include <sys/fcntl.h>
#include <sys/file.h>
-/* libaudio.h includes a header which defines CONST. We temporarily
- undefine it in order to eliminate a compiler warning. Yes, this is
- a gross hack. */
-#undef CONST
#include <multimedia/libaudio.h>
#include <multimedia/audio_device.h>
-#undef CONST
-#define CONST const
#ifdef emacs
# include <config.h>
/* #### 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)
{ XD_END }
};
-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("symbol", symbol,
- mark_symbol, print_symbol, 0, 0, 0,
- symbol_description, Lisp_Symbol);
+/* Symbol plists are directly accessible, so we need to protect against
+ invalid property list structure */
+
+static Lisp_Object
+symbol_getprop (Lisp_Object symbol, Lisp_Object property)
+{
+ return external_plist_get (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME);
+}
+
+static int
+symbol_putprop (Lisp_Object symbol, Lisp_Object property, Lisp_Object value)
+{
+ external_plist_put (&XSYMBOL (symbol)->plist, property, value, 0, ERROR_ME);
+ return 1;
+}
+
+static int
+symbol_remprop (Lisp_Object symbol, Lisp_Object property)
+{
+ return external_remprop (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME);
+}
+
+DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("symbol", symbol,
+ mark_symbol, print_symbol,
+ 0, 0, 0, symbol_description,
+ symbol_getprop,
+ symbol_putprop,
+ symbol_remprop,
+ Fsymbol_plist,
+ Lisp_Symbol);
\f
/**********************************************************************/
}
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)
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;
#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;
/* derived from hashpjw, Dragon Book P436. */
int
-hash_string (CONST Bufbyte *ptr, Bytecount len)
+hash_string (const Bufbyte *ptr, Bytecount len)
{
int hash = 0;
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;
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);
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);
}
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);
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)));
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)));
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)
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)
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);
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);
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)));
/* 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)
/* 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;
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 (); */
}
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);
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)
}
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;
/* 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;
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);
struct symbol_value_magic
{
struct lcrecord_header lcheader;
+ void *value;
enum symbol_value_type type;
};
#define SYMBOL_VALUE_MAGIC_P(x) \
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 */
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); \
#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_ */
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,
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.
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;
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;
}
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);
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 */
#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)) \
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);
Bufbyte
get_eof_char (int fd)
{
- CONST Bufbyte ctrl_d = (Bufbyte) '\004';
+ const Bufbyte ctrl_d = (Bufbyte) '\004';
if (!isatty (fd))
return ctrl_d;
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];
{
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];
# endif
if (hp)
{
- CONST char *fqdn = (CONST char *) hp->h_name;
+ const char *fqdn = (const char *) hp->h_name;
if (!strchr (fqdn, '.'))
{
/* Linux added here by Raymond L. Toy <toy@alydar.crd.ge.com> for XEmacs. */
/* Irix added here by gparker@sni-usa.com for XEmacs. */
/* NetBSD added here by James R Grinter <jrg@doc.ic.ac.uk> for XEmacs */
-extern CONST char *sys_errlist[];
+extern const char *sys_errlist[];
extern int sys_nerr;
#endif
#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 */
#ifdef ENCAPSULATE_OPEN
int
-sys_open (CONST char *path, int oflag, ...)
+sys_open (const char *path, int oflag, ...)
{
int mode;
va_list ap;
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);
#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)
#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);
}
#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)
#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)
{
#ifdef ENCAPSULATE_CHDIR
int
-sys_chdir (CONST char *path)
+sys_chdir (const char *path)
{
PATHNAME_CONVERT_OUT (path);
return chdir (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
#ifdef ENCAPSULATE_OPENDIR
DIR *
-sys_opendir (CONST char *filename)
+sys_opendir (const char *filename)
{
DIR *rtnval;
PATHNAME_CONVERT_OUT (filename);
{
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++)
{ /* 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);
#ifdef ENCAPSULATE_RMDIR
int
-sys_rmdir (CONST char *path)
+sys_rmdir (const char *path)
{
PATHNAME_CONVERT_OUT (path);
return rmdir (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);
#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);
#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);
#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 */
#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);
#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);
#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);
#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);
#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);
#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);
#ifdef ENCAPSULATE_UNLINK
int
-sys_unlink (CONST char *path)
+sys_unlink (const char *path)
{
PATHNAME_CONVERT_OUT (path);
return unlink (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;
#ifndef HAVE_GETCWD
char *
-getcwd (char *pathname, int size)
+getcwd (char *pathname, size_t size)
{
return getwd (pathname);
}
#ifndef HAVE_RENAME
int
-rename (CONST char *from, CONST char *to)
+rename (const char *from, const char *to)
{
if (access (from, 0) == 0)
{
#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",
#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 */
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 */
#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 */
#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 */
MKDIR_PROTOTYPE
#else
int
-mkdir (CONST char *dpath, int dmode)
+mkdir (const char *dpath, int dmode)
#endif
{
int cpid, status, fd;
#ifndef HAVE_RMDIR
int
-rmdir (CONST char *dpath)
+rmdir (const char *dpath)
{
int cpid, status, fd;
struct stat statbuf;
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);
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
# ifdef strerror
# undef strerror
# endif
-CONST char *strerror (int);
+const char *strerror (int);
#endif
#ifdef WINDOWSNT
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;
#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_ */
/* 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
#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
#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
#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
#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);
}
}
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);
}
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);
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
/* This is the HP/UX version */
#include <dl.h>
int
-dll_init (CONST char *arg)
+dll_init (const char *arg)
{
return 0;
}
dll_handle
-dll_open (CONST char *fname)
+dll_open (const char *fname)
{
shl_t h = shl_load (fname, BIND_DEFERRED,0L);
shl_t *hp = NULL;
}
dll_func
-dll_function (dll_handle h, CONST char *n)
+dll_function (dll_handle h, const char *n)
{
long handle = 0L;
}
dll_var
-dll_variable (dll_handle h, CONST char *n)
+dll_variable (dll_handle h, const char *n)
{
long handle = 0L;
return (dll_var)handle;
}
-CONST char *
+const char *
dll_error (dll_handle h)
{
/* #### WTF?! Shouldn't this at least attempt to get strerror or
#elif defined(HAVE_INIT_DLD)
#include <dld.h>
int
-dll_init (CONST char *arg)
+dll_init (const char *arg)
{
char *real_exe = dld_find_executable (arg);
int rc;
}
dll_handle
-dll_open (CONST char *fname)
+dll_open (const char *fname)
{
rc = dld_link (fname);
if (rc)
}
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);
}
}
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";
#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;
}
}
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";
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
}
#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
#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
#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
#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
/* 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
#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
#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
#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
#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
/* 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
#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
#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
#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
#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
#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
#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
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
#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 { \
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] == ':'
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);
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] == ':';
}
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);
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;
void
tputs (string, nlines, outfun)
- CONST char *string;
+ const char *string;
int nlines;
void (*outfun) (int);
{
if (string == (char *) 0)
return;
- while (isdigit (* (CONST unsigned char *) string))
+ while (isdigit (* (const unsigned char *) string))
{
padcount += *string++ - '0';
padcount *= 10;
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;
}
tprint (cap)
- CONST char *cap;
+ const char *cap;
{
char *x = tgetstr (cap, 0);
char *y;
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)
{
}
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);
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);
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);
}
}
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);
}
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);
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);
}
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];
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)
}
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;
}
#else
-#undef CONST
#ifndef MAX_PATH
#define MAX_PATH 260
#endif
static void
report_error_1 (fd, msg, a1, a2)
int fd;
- CONST char *msg;
+ const char *msg;
int a1, a2;
{
close (fd);
#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
#else
#include <config.h>
-extern void fatal (CONST char *, ...);
+extern void fatal (const char *, ...);
#endif
#include <sys/types.h>
/********************** 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);
/*******************************************************************/
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 - ");
/********************** 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);
/*******************************************************************/
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 - ");
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;
/********************** 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);
/*******************************************************************/
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 - ");
/* 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. */
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 */
}
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))
{
}
}
+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.
*/
}
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);
}
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);
#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;
#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));
#ifdef GCCACHE_HASH
- if (gethash (&gcvm, cache->table, (CONST void **) &cell))
+ if (gethash (&gcvm, cache->table, (const void **) &cell))
#else /* !GCCACHE_HASH */
#ifndef INCLUDED_xintrinsic_h_
#define INCLUDED_xintrinsic_h_
-#undef CONST /* X11R4 header thinks it can define CONST */
-
#include <X11/Intrinsic.h>
-#ifdef CONST_IS_LOSING
-# define CONST
-#else
-# define CONST const
-#endif
-
#endif /* INCLUDED_xintrinsic_h_ */
#ifndef INCLUDED_xintrinsicp_h_
#define INCLUDED_xintrinsicp_h_
-#undef CONST /* X11R4 header thinks it can define CONST */
-
#include <X11/Intrinsic.h>
#include <X11/IntrinsicP.h>
#include <X11/ObjectP.h> /* apparently some IntrinsicP.h don't have this */
-#ifdef CONST_IS_LOSING
-# define CONST
-#else
-# define CONST const
-#endif
-
#endif /* INCLUDED_xintrinsicp_h_ */
#include <ctype.h>
-int XmuCursorNameToIndex (CONST char *name)
+int XmuCursorNameToIndex (const char *name)
{
- static CONST struct _CursorName {
- CONST char *name;
+ static const struct _CursorName {
+ const char *name;
unsigned int shape;
} cursor_names[] = {
{"x_cursor", XC_X_cursor},
{"watch", XC_watch},
{"xterm", XC_xterm},
};
- CONST struct _CursorName *table;
+ const struct _CursorName *table;
int i;
char tmp[40];
}
-int XmuReadBitmapDataFromFile (CONST char *filename,
+int XmuReadBitmapDataFromFile (const char *filename,
/* Remaining args are RETURNED */
unsigned int *width,
unsigned int *height,
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;
#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))
+2000-02-16 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.29 is released.
+
+2000-02-13 Martin Buchholz <martin@xemacs.org>
+
+ * automated/lisp-tests.el: Add subseq tests.
+
2000-02-07 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.28 is released.
(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...
(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))
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