From: tomo Date: Sun, 25 Aug 2002 08:29:06 +0000 (+0000) Subject: Sync up with r21-2-47-utf-2000-0_19-b1. X-Git-Tag: r21-2-47-utf-2000-0_19-new-case~9 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=e714bc316e9cb4e651289624616cf86a10af4767;p=chise%2Fxemacs-chise.git.1 Sync up with r21-2-47-utf-2000-0_19-b1. --- diff --git a/ChangeLog b/ChangeLog index 4676cef..258db78 100644 --- a/ChangeLog +++ b/ChangeLog @@ -56,6 +56,63 @@ * configure.in: Add new option `--with-utf-2000'; define `UTF2000' if it is specified. +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2001-03-26 Paul Stodghill + + * configure.in: Don't #define __STDC__ in confdefs.h + +2001-03-30 Ben Wing + + * etc\sample.init.el: + * etc\sample.init.el (Init-kill-entire-line): + * etc\sample.init.el (describe-foo-at-point): + * etc\sample.init.el (kill-current-buffer): + * etc\sample.init.el (kill-current-buffer-and-window): + * etc\sample.init.el (grep-c-files): Removed. + * etc\sample.init.el (grep-all-files-history): New. + * etc\sample.init.el (grep-all-files-omitted-expressions): New. + * etc\sample.init.el (grep-all-files-omitted-directories): New. + * etc\sample.init.el (construct-grep-all-files-command): New. + * etc\sample.init.el (grep-all-files-in-current-directory): New. + * etc\sample.init.el (grep-lisp-files): Removed. + * etc\sample.init.el (grep-all-files-in-current-directory-and-below): New. + * etc\sample.init.el (clear-select): + * etc\sample.init.el ((control kp-add)): + * etc\sample.init.el (pause): + * etc\sample.init.el ((eq system-type 'windows-nt)): + + Add documentation for defined functions. Change grep functions to + be more generally useful. Document more specifically what the + `menu-force' setting actually does -- what commands are overridden + and how to access them. + +2001-03-30 Stephen J. Turnbull + + * configure.usage: Document --with-file-coding. + + * etc/OXYMORONS: Add 2 oxymorons, clean up numbering, close RFC. + + * etc/NEWS: Fix typo. + + * configure.in: + * configure: + Fix typo, add -Wsign-compare if GCC, run autoconf. + +2001-03-23 Stephen J. Turnbull + + * etc/gnuserv.1 (UNIX_DOMAIN_SOCKETS: + * PROBLEMS (Problems with running XEmacs): + Document TMPDIR lossage in gnuserv/gnuclient. + +2001-03-06 Ben Wing + + * etc\sample.init.el: + * etc\sample.init.el (Init-kill-entire-line): New. + Fix to take into account the removed kill-whole-line changes. + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/PROBLEMS b/PROBLEMS index dab9c7c..2daf276 100644 --- a/PROBLEMS +++ b/PROBLEMS @@ -2,7 +2,7 @@ This file describes various problems that have been encountered in compiling, installing and running XEmacs. It has been updated for -XEmacs 21.0. +XEmacs 21.4. This file is rather large, but we have tried to sort the entries by their respective relevance for XEmacs, but may have not succeeded @@ -611,6 +611,14 @@ microsoft website. * Problems with running XEmacs ============================== ** General +*** gnuserv is running, some clients can connect, but others cannot. + +The code in gnuslib.c respects the value of TMPDIR. If the server and +the client have different values in their environment, you lose. +One program known to set TMPDIR and manifest this problem is exmh. +You can defeat the use of TMPDIR by unsetting USE_TMPDIR at the top of +gnuserv.h at build time. + *** C-z just refreshes the screen instead of suspending Emacs. You are probably using a shell that doesn't support job control, even diff --git a/configure b/configure index e8f4db3..6fdb571 100755 --- a/configure +++ b/configure @@ -2760,6 +2760,7 @@ fi if test "$cflags_specified" = "no"; then if test "$GCC" = "yes"; then CFLAGS="-g -O3 -Wall -Wno-switch -Winline -Wmissing-prototypes -Wshadow" + CFLAGS="$CFLAGS -Wsign-compare" test "$have_glibc" != "yes" && CFLAGS="$CFLAGS -Wpointer-arith" elif test "$__SUNPRO_C" = "yes"; then case "$opsys" in @@ -2776,7 +2777,7 @@ fi if test "$GCC" = "yes"; then echo $ac_n "checking for buggy gcc versions""... $ac_c" 1>&6 -echo "configure:2780: checking for buggy gcc versions" >&5 +echo "configure:2781: checking for buggy gcc versions" >&5 GCC_VERSION=`$CC --version` case `uname -s`:`uname -m`:$GCC_VERSION in *:sun4*:2.8.1|*:sun4*:egcs-2.90.*) @@ -2899,7 +2900,7 @@ test "$pdump" = "yes" && extra_objs="$extra_objs dumper.o" && if test "$extra_v fi echo $ac_n "checking for dynodump""... $ac_c" 1>&6 -echo "configure:2903: checking for dynodump" >&5 +echo "configure:2904: checking for dynodump" >&5 if test "$unexec" != "unexsol2.o"; then echo "$ac_t""no" 1>&6 else @@ -2937,12 +2938,12 @@ if test "$unexec" = "unexaix.o"; then done echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6 -echo "configure:2941: checking for terminateAndUnload in -lC" >&5 +echo "configure:2942: checking for terminateAndUnload in -lC" >&5 ac_lib_var=`echo C'_'terminateAndUnload | sed 'y%./+-%__p_%'` xe_check_libs=" -lC " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3061,7 +3062,7 @@ fi if test "$add_runtime_path" = "yes"; then echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6 -echo "configure:3065: checking "for runtime libraries flag"" >&5 +echo "configure:3066: checking "for runtime libraries flag"" >&5 case "$opsys" in sol2 ) dash_r="-R" ;; decosf* | linux* | irix*) dash_r="-rpath " ;; @@ -3083,14 +3084,14 @@ if test "$GCC" = "yes"; then done fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* dash_r="$try_dash_r" else @@ -3191,10 +3192,10 @@ else fi after_morecore_hook_exists=yes echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6 -echo "configure:3195: checking for malloc_set_state" >&5 +echo "configure:3196: checking for malloc_set_state" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3222: \"$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 @@ -3237,16 +3238,16 @@ doug_lea_malloc=no fi echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6 -echo "configure:3241: checking whether __after_morecore_hook exists" >&5 +echo "configure:3242: checking whether __after_morecore_hook exists" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3251: \"$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 @@ -3302,7 +3303,7 @@ fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3306: checking for $ac_word" >&5 +echo "configure:3307: checking for $ac_word" >&5 if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -3357,7 +3358,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:3361: checking for a BSD compatible install" >&5 +echo "configure:3362: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" @@ -3411,7 +3412,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3415: checking for $ac_word" >&5 +echo "configure:3416: checking for $ac_word" >&5 if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. @@ -3443,15 +3444,15 @@ for ac_hdr in a.out.h elf.h cygwin/version.h fcntl.h inttypes.h libg do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3447: checking for $ac_hdr" >&5 +echo "configure:3448: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3455: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3456: \"$ac_try\") 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* @@ -3481,10 +3482,10 @@ fi done echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:3485: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:3486: checking for sys/wait.h that is POSIX.1 compatible" >&5 cat > conftest.$ac_ext < #include @@ -3500,7 +3501,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:3504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3505: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -3524,10 +3525,10 @@ EOF fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:3528: checking for ANSI C header files" >&5 +echo "configure:3529: checking for ANSI C header files" >&5 cat > conftest.$ac_ext < #include @@ -3535,7 +3536,7 @@ cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3540: \"$ac_try\") 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* @@ -3552,7 +3553,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3570,7 +3571,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3588,7 +3589,7 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -3599,7 +3600,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:3603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:3604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else @@ -3625,10 +3626,10 @@ EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:3629: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:3630: checking whether time.h and sys/time.h may both be included" >&5 cat > conftest.$ac_ext < #include @@ -3637,7 +3638,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:3641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3642: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -3661,10 +3662,10 @@ EOF fi echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 -echo "configure:3665: checking for sys_siglist declaration in signal.h or unistd.h" >&5 +echo "configure:3666: checking for sys_siglist declaration in signal.h or unistd.h" >&5 cat > conftest.$ac_ext < #include @@ -3676,7 +3677,7 @@ int main() { char *msg = *(sys_siglist + 1); ; return 0; } EOF -if { (eval echo configure:3680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_siglist=yes else @@ -3702,9 +3703,9 @@ fi echo $ac_n "checking for utime""... $ac_c" 1>&6 -echo "configure:3706: checking for utime" >&5 +echo "configure:3707: checking for utime" >&5 cat > conftest.$ac_ext < #include @@ -3712,7 +3713,7 @@ int main() { struct utimbuf x; x.actime = x.modtime = 0; utime ("/", &x); ; return 0; } EOF -if { (eval echo configure:3716: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3717: \"$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 @@ -3731,10 +3732,10 @@ else for ac_func in utimes do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3735: checking for $ac_func" >&5 +echo "configure:3736: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3762: \"$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 @@ -3789,10 +3790,10 @@ rm -f conftest* echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3793: checking return type of signal handlers" >&5 +echo "configure:3794: checking return type of signal handlers" >&5 cat > conftest.$ac_ext < #include @@ -3809,7 +3810,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3831,10 +3832,10 @@ EOF echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3835: checking for size_t" >&5 +echo "configure:3836: checking for size_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3865,10 +3866,10 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3869: checking for pid_t" >&5 +echo "configure:3870: checking for pid_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3899,10 +3900,10 @@ EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3903: checking for uid_t in sys/types.h" >&5 +echo "configure:3904: checking for uid_t in sys/types.h" >&5 cat > conftest.$ac_ext < EOF @@ -3938,10 +3939,10 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3942: checking for mode_t" >&5 +echo "configure:3943: checking for mode_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3972,10 +3973,10 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3976: checking for off_t" >&5 +echo "configure:3977: checking for off_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -4006,10 +4007,10 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:4010: checking for ssize_t" >&5 +echo "configure:4011: checking for ssize_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -4041,9 +4042,9 @@ fi echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 -echo "configure:4045: checking for socklen_t" >&5 +echo "configure:4046: checking for socklen_t" >&5 cat > conftest.$ac_ext < socklen_t x; @@ -4052,7 +4053,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:4056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4057: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else @@ -4061,7 +4062,7 @@ else rm -rf conftest* cat > conftest.$ac_ext < int accept (int, struct sockaddr *, size_t *); @@ -4070,7 +4071,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:4074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""size_t" 1>&6 @@ -4102,9 +4103,9 @@ fi rm -f conftest* echo $ac_n "checking for struct timeval""... $ac_c" 1>&6 -echo "configure:4106: checking for struct timeval" >&5 +echo "configure:4107: checking for struct timeval" >&5 cat > conftest.$ac_ext < @@ -4120,7 +4121,7 @@ int main() { static struct timeval x; x.tv_sec = x.tv_usec; ; return 0; } EOF -if { (eval echo configure:4124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 HAVE_TIMEVAL=yes @@ -4142,10 +4143,10 @@ fi rm -f conftest* echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:4146: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:4147: checking whether struct tm is in sys/time.h or time.h" >&5 cat > conftest.$ac_ext < #include @@ -4153,7 +4154,7 @@ int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:4157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -4177,10 +4178,10 @@ EOF fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 -echo "configure:4181: checking for tm_zone in struct tm" >&5 +echo "configure:4182: checking for tm_zone in struct tm" >&5 cat > conftest.$ac_ext < #include <$ac_cv_struct_tm> @@ -4188,7 +4189,7 @@ int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF -if { (eval echo configure:4192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else @@ -4211,10 +4212,10 @@ EOF else echo $ac_n "checking for tzname""... $ac_c" 1>&6 -echo "configure:4215: checking for tzname" >&5 +echo "configure:4216: checking for tzname" >&5 cat > conftest.$ac_ext < #ifndef tzname /* For SGI. */ @@ -4224,7 +4225,7 @@ int main() { atoi(*tzname); ; return 0; } EOF -if { (eval echo configure:4228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_var_tzname=yes else @@ -4250,10 +4251,10 @@ fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:4254: checking for working const" >&5 +echo "configure:4255: checking for working const" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -4327,7 +4328,7 @@ fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:4331: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:4332: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` cat > conftestmake <<\EOF @@ -4352,12 +4353,12 @@ fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:4356: checking whether byte ordering is bigendian" >&5 +echo "configure:4357: checking whether byte ordering is bigendian" >&5 ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -4368,11 +4369,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:4372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -4383,7 +4384,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:4387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -4400,7 +4401,7 @@ fi rm -f conftest* if test $ac_cv_c_bigendian = unknown; then cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_bigendian=no else @@ -4440,10 +4441,10 @@ fi echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:4444: checking size of short" >&5 +echo "configure:4445: checking size of short" >&5 cat > conftest.$ac_ext < #include @@ -4455,7 +4456,7 @@ main() exit(0); } EOF -if { (eval echo configure:4459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_short=`cat conftestval` else @@ -4483,10 +4484,10 @@ if test "$ac_cv_sizeof_short" = 0; then exit 1 fi echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:4487: checking size of int" >&5 +echo "configure:4488: checking size of int" >&5 cat > conftest.$ac_ext < #include @@ -4498,7 +4499,7 @@ main() exit(0); } EOF -if { (eval echo configure:4502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_int=`cat conftestval` else @@ -4520,10 +4521,10 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:4524: checking size of long" >&5 +echo "configure:4525: checking size of long" >&5 cat > conftest.$ac_ext < #include @@ -4535,7 +4536,7 @@ main() exit(0); } EOF -if { (eval echo configure:4539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_long=`cat conftestval` else @@ -4557,10 +4558,10 @@ EOF echo $ac_n "checking size of long long""... $ac_c" 1>&6 -echo "configure:4561: checking size of long long" >&5 +echo "configure:4562: checking size of long long" >&5 cat > conftest.$ac_ext < #include @@ -4572,7 +4573,7 @@ main() exit(0); } EOF -if { (eval echo configure:4576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4577: \"$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 @@ -4594,10 +4595,10 @@ EOF echo $ac_n "checking size of void *""... $ac_c" 1>&6 -echo "configure:4598: checking size of void *" >&5 +echo "configure:4599: checking size of void *" >&5 cat > conftest.$ac_ext < #include @@ -4609,7 +4610,7 @@ main() exit(0); } EOF -if { (eval echo configure:4613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4614: \"$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 @@ -4632,7 +4633,7 @@ EOF echo $ac_n "checking for long file names""... $ac_c" 1>&6 -echo "configure:4636: checking for long file names" >&5 +echo "configure:4637: 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: @@ -4678,10 +4679,10 @@ fi echo $ac_n "checking for sin""... $ac_c" 1>&6 -echo "configure:4682: checking for sin" >&5 +echo "configure:4683: checking for sin" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4709: \"$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 @@ -4722,12 +4723,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6 -echo "configure:4726: checking for sin in -lm" >&5 +echo "configure:4727: checking for sin in -lm" >&5 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'` xe_check_libs=" -lm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4782,14 +4783,14 @@ EOF cat > conftest.$ac_ext < int main() { return atanh(1.0) + asinh(1.0) + acosh(1.0); ; return 0; } EOF -if { (eval echo configure:4793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4794: \"$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 @@ -4806,14 +4807,14 @@ fi rm -f conftest* echo "checking type of mail spool file locking" 1>&6 -echo "configure:4810: checking type of mail spool file locking" >&5 +echo "configure:4811: 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:4814: checking for $ac_func" >&5 +echo "configure:4815: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4841: \"$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 @@ -4918,12 +4919,12 @@ test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \ case "$opsys" in decosf*) echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6 -echo "configure:4922: checking for cma_open in -lpthreads" >&5 +echo "configure:4923: checking for cma_open in -lpthreads" >&5 ac_lib_var=`echo pthreads'_'cma_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lpthreads " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4970,7 +4971,7 @@ fi esac echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6 -echo "configure:4974: checking whether the -xildoff compiler flag is required" >&5 +echo "configure:4975: 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; @@ -4982,7 +4983,7 @@ fi if test "$opsys" = "sol2"; then if test "$os_release" -ge 56; then echo $ac_n "checking for \"-z ignore\" linker flag""... $ac_c" 1>&6 -echo "configure:4986: checking for \"-z ignore\" linker flag" >&5 +echo "configure:4987: 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 ;; @@ -4993,7 +4994,7 @@ fi echo "checking "for specified window system"" 1>&6 -echo "configure:4997: checking "for specified window system"" >&5 +echo "configure:4998: checking "for specified window system"" >&5 GNOME_CONFIG=no @@ -5001,7 +5002,7 @@ GTK_CONFIG=no if test "$with_gnome" != "no"; then echo $ac_n "checking for GNOME configuration script""... $ac_c" 1>&6 -echo "configure:5005: checking for GNOME configuration script" >&5 +echo "configure:5006: checking for GNOME configuration script" >&5 for possible in gnome-config do possible_version=`${possible} --version 2> /dev/null` @@ -5032,7 +5033,7 @@ fi if test "$with_gtk" != "no";then echo $ac_n "checking for GTK configuration script""... $ac_c" 1>&6 -echo "configure:5036: checking for GTK configuration script" >&5 +echo "configure:5037: checking for GTK configuration script" >&5 for possible in gtk12-config gtk14-config gtk-config do possible_version=`${possible} --version 2> /dev/null` @@ -5054,37 +5055,37 @@ fi if test "${GTK_CONFIG}" != "no"; then echo $ac_n "checking gtk version""... $ac_c" 1>&6 -echo "configure:5058: checking gtk version" >&5 +echo "configure:5059: checking gtk version" >&5 GTK_VERSION=`${GTK_CONFIG} --version` echo "$ac_t""${GTK_VERSION}" 1>&6 echo $ac_n "checking gtk libs""... $ac_c" 1>&6 -echo "configure:5063: checking gtk libs" >&5 +echo "configure:5064: checking gtk libs" >&5 GTK_LIBS=`${GTK_CONFIG} --libs` libs_gtk="$libs_gtk ${GTK_LIBS}" && if test "$extra_verbose" = "yes"; then echo " Appending \"${GTK_LIBS}\" to \$libs_gtk"; fi echo "$ac_t""${GTK_LIBS}" 1>&6 echo $ac_n "checking gtk cflags""... $ac_c" 1>&6 -echo "configure:5069: checking gtk cflags" >&5 +echo "configure:5070: checking gtk cflags" >&5 GTK_CFLAGS=`${GTK_CONFIG} --cflags` c_switch_gtk="$c_switch_gtk ${GTK_CFLAGS}" && if test "$extra_verbose" = "yes"; then echo " Appending \"${GTK_CFLAGS}\" to \$c_switch_gtk"; fi echo "$ac_t""${GTK_CFLAGS}" 1>&6 echo $ac_n "checking for main in -lgdk_imlib""... $ac_c" 1>&6 -echo "configure:5076: checking for main in -lgdk_imlib" >&5 +echo "configure:5077: checking for main in -lgdk_imlib" >&5 ac_lib_var=`echo gdk_imlib'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdk_imlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5106,12 +5107,12 @@ fi echo $ac_n "checking for Imlib_init in -lImlib""... $ac_c" 1>&6 -echo "configure:5110: checking for Imlib_init in -lImlib" >&5 +echo "configure:5111: checking for Imlib_init in -lImlib" >&5 ac_lib_var=`echo Imlib'_'Imlib_init | sed 'y%./+-%__p_%'` xe_check_libs=" -lImlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5145,10 +5146,10 @@ fi for ac_func in gdk_imlib_init do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5149: checking for $ac_func" >&5 +echo "configure:5150: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5176: \"$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 @@ -5248,15 +5249,15 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5252: checking for $ac_hdr" >&5 +echo "configure:5253: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5260: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5261: \"$ac_try\") 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* @@ -5287,19 +5288,19 @@ done echo $ac_n "checking for main in -lxml""... $ac_c" 1>&6 -echo "configure:5291: checking for main in -lxml" >&5 +echo "configure:5292: checking for main in -lxml" >&5 ac_lib_var=`echo xml'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lxml " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5321,19 +5322,19 @@ fi echo $ac_n "checking for main in -lglade""... $ac_c" 1>&6 -echo "configure:5325: checking for main in -lglade" >&5 +echo "configure:5326: checking for main in -lglade" >&5 ac_lib_var=`echo glade'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lglade " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5355,19 +5356,19 @@ fi echo $ac_n "checking for main in -lglade-gnome""... $ac_c" 1>&6 -echo "configure:5359: checking for main in -lglade-gnome" >&5 +echo "configure:5360: checking for main in -lglade-gnome" >&5 ac_lib_var=`echo glade-gnome'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lglade-gnome " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5388,7 +5389,7 @@ fi cat > conftest.$ac_ext < EOF @@ -5446,7 +5447,7 @@ if test "$with_x11" != "no"; then # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 -echo "configure:5450: checking for X" >&5 +echo "configure:5451: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -5506,12 +5507,12 @@ if test "$ac_x_includes" = NO; then # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5515: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5516: \"$ac_try\") 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* @@ -5580,14 +5581,14 @@ if test "$ac_x_libraries" = NO; then ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5592: \"$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. @@ -5696,17 +5697,17 @@ else case "`(uname -sr) 2>/dev/null`" in "SunOS 5"*) echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 -echo "configure:5700: checking whether -R must be followed by a space" >&5 +echo "configure:5701: checking whether -R must be followed by a space" >&5 ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_nospace=yes else @@ -5722,14 +5723,14 @@ rm -f conftest* else LIBS="$ac_xsave_LIBS -R $x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_space=yes else @@ -5765,12 +5766,12 @@ ac_cv_lib_dnet_dnet_ntoa=no else echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 -echo "configure:5769: checking for dnet_ntoa in -ldnet" >&5 +echo "configure:5770: checking for dnet_ntoa in -ldnet" >&5 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` xe_check_libs=" -ldnet " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5805,12 +5806,12 @@ fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 -echo "configure:5809: checking for dnet_ntoa in -ldnet_stub" >&5 +echo "configure:5810: checking for dnet_ntoa in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` xe_check_libs=" -ldnet_stub " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5850,10 +5851,10 @@ fi # The nsl library prevents programs from opening the X display # on Irix 5.2, according to dickey@clark.net. echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 -echo "configure:5854: checking for gethostbyname" >&5 +echo "configure:5855: checking for gethostbyname" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5881: \"$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 @@ -5897,12 +5898,12 @@ fi if test $ac_cv_func_gethostbyname = no; then echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 -echo "configure:5901: checking for gethostbyname in -lnsl" >&5 +echo "configure:5902: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` xe_check_libs=" -lnsl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5943,10 +5944,10 @@ fi # -lsocket must be given before -lnsl if both are needed. # We assume that if connect needs -lnsl, so does gethostbyname. echo $ac_n "checking for connect""... $ac_c" 1>&6 -echo "configure:5947: checking for connect" >&5 +echo "configure:5948: checking for connect" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5974: \"$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 @@ -5992,12 +5993,12 @@ fi xe_msg_checking="for connect in -lsocket" test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:5996: checking "$xe_msg_checking"" >&5 +echo "configure:5997: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocket $X_EXTRA_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6032,10 +6033,10 @@ fi # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. echo $ac_n "checking for remove""... $ac_c" 1>&6 -echo "configure:6036: checking for remove" >&5 +echo "configure:6037: checking for remove" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6063: \"$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 @@ -6079,12 +6080,12 @@ fi if test $ac_cv_func_remove = no; then echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 -echo "configure:6083: checking for remove in -lposix" >&5 +echo "configure:6084: checking for remove in -lposix" >&5 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` xe_check_libs=" -lposix " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6119,10 +6120,10 @@ fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo $ac_n "checking for shmat""... $ac_c" 1>&6 -echo "configure:6123: checking for shmat" >&5 +echo "configure:6124: checking for shmat" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6150: \"$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 @@ -6166,12 +6167,12 @@ fi if test $ac_cv_func_shmat = no; then echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 -echo "configure:6170: checking for shmat in -lipc" >&5 +echo "configure:6171: checking for shmat in -lipc" >&5 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` xe_check_libs=" -lipc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6218,12 +6219,12 @@ fi xe_msg_checking="for IceConnectionNumber in -lICE" test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:6222: checking "$xe_msg_checking"" >&5 +echo "configure:6223: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` xe_check_libs=" -lICE $X_EXTRA_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6401,7 +6402,7 @@ EOF echo "checking for X defines extracted by xmkmf" 1>&6 -echo "configure:6405: checking for X defines extracted by xmkmf" >&5 +echo "configure:6406: checking for X defines extracted by xmkmf" >&5 rm -fr conftestdir if mkdir conftestdir; then cd conftestdir @@ -6416,7 +6417,9 @@ EOF cd .. rm -fr conftestdir for word in $xmkmf_defines; do - case "$word" in -D* ) + case "$word" in + -D__STDC__*) ;; + -D* ) sym=`echo '' $word | sed -e 's:^ *-D::' -e 's:=.*::'` case "$word" in -D*=* ) val=`echo '' $word | sed -e 's:^.*=::'` ;; @@ -6448,15 +6451,15 @@ EOF ac_safe=`echo "X11/Intrinsic.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Intrinsic.h""... $ac_c" 1>&6 -echo "configure:6452: checking for X11/Intrinsic.h" >&5 +echo "configure:6455: checking for X11/Intrinsic.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6460: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6463: \"$ac_try\") 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* @@ -6480,12 +6483,12 @@ fi echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6 -echo "configure:6484: checking for XOpenDisplay in -lX11" >&5 +echo "configure:6487: checking for XOpenDisplay in -lX11" >&5 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6521,12 +6524,12 @@ fi xe_msg_checking="for XGetFontProperty in -lX11" test -n "-b i486-linuxaout" && xe_msg_checking="$xe_msg_checking using extra libs -b i486-linuxaout" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:6525: checking "$xe_msg_checking"" >&5 +echo "configure:6528: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo X11'_'XGetFontProperty | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 -b i486-linuxaout" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6564,12 +6567,12 @@ fi echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6 -echo "configure:6568: checking for XShapeSelectInput in -lXext" >&5 +echo "configure:6571: checking for XShapeSelectInput in -lXext" >&5 ac_lib_var=`echo Xext'_'XShapeSelectInput | sed 'y%./+-%__p_%'` xe_check_libs=" -lXext " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6603,12 +6606,12 @@ fi echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6 -echo "configure:6607: checking for XtOpenDisplay in -lXt" >&5 +echo "configure:6610: checking for XtOpenDisplay in -lXt" >&5 ac_lib_var=`echo Xt'_'XtOpenDisplay | sed 'y%./+-%__p_%'` xe_check_libs=" -lXt " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6642,14 +6645,14 @@ fi echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6 -echo "configure:6646: checking the version of X11 being used" >&5 +echo "configure:6649: checking the version of X11 being used" >&5 cat > conftest.$ac_ext < int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; } EOF -if { (eval echo configure:6653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:6656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest foobar; x11_release=$? else @@ -6680,10 +6683,10 @@ EOF for ac_func in XConvertCase do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6684: checking for $ac_func" >&5 +echo "configure:6687: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6713: \"$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 @@ -6738,15 +6741,15 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:6742: checking for $ac_hdr" >&5 +echo "configure:6745: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6750: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6753: \"$ac_try\") 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* @@ -6779,10 +6782,10 @@ done for ac_func in XRegisterIMInstantiateCallback do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6783: checking for $ac_func" >&5 +echo "configure:6786: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6812: \"$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 @@ -6833,9 +6836,9 @@ fi done echo $ac_n "checking for standard XRegisterIMInstantiateCallback prototype""... $ac_c" 1>&6 -echo "configure:6837: checking for standard XRegisterIMInstantiateCallback prototype" >&5 +echo "configure:6840: checking for standard XRegisterIMInstantiateCallback prototype" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:6854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else @@ -6868,12 +6871,12 @@ rm -f conftest* test -z "$with_xmu" && { echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6 -echo "configure:6872: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 +echo "configure:6875: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 ac_lib_var=`echo Xmu'_'XmuReadBitmapDataFromFile | sed 'y%./+-%__p_%'` xe_check_libs=" -lXmu " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6923,19 +6926,19 @@ EOF echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6 -echo "configure:6927: checking for main in -lXbsd" >&5 +echo "configure:6930: checking for main in -lXbsd" >&5 ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lXbsd " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6972,22 +6975,22 @@ fi fi if test "$with_msw" != "no"; then echo "checking for MS-Windows" 1>&6 -echo "configure:6976: checking for MS-Windows" >&5 +echo "configure:6979: checking for MS-Windows" >&5 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6 -echo "configure:6979: checking for main in -lgdi32" >&5 +echo "configure:6982: checking for main in -lgdi32" >&5 ac_lib_var=`echo gdi32'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdi32 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7060,12 +7063,12 @@ EOF fi fi cat > conftest.$ac_ext < int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; } EOF -if { (eval echo configure:7069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:7072: \"$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 @@ -7129,15 +7132,15 @@ fi if test "$with_x11" = "yes"; then ac_safe=`echo "X11/extensions/shape.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/extensions/shape.h""... $ac_c" 1>&6 -echo "configure:7133: checking for X11/extensions/shape.h" >&5 +echo "configure:7136: checking for X11/extensions/shape.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7144: \"$ac_try\") 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* @@ -7189,7 +7192,7 @@ case "$x_libraries" in *X11R4* ) esac echo "checking for WM_COMMAND option" 1>&6 -echo "configure:7193: checking for WM_COMMAND option" >&5; +echo "configure:7196: checking for WM_COMMAND option" >&5; if test "$with_wmcommand" != "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_WMCOMMAND @@ -7204,15 +7207,15 @@ fi test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6 -echo "configure:7208: checking for X11/Xauth.h" >&5 +echo "configure:7211: checking for X11/Xauth.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7235,12 +7238,12 @@ fi } test -z "$with_xauth" && { echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6 -echo "configure:7239: checking for XauGetAuthByAddr in -lXau" >&5 +echo "configure:7242: checking for XauGetAuthByAddr in -lXau" >&5 ac_lib_var=`echo Xau'_'XauGetAuthByAddr | sed 'y%./+-%__p_%'` xe_check_libs=" -lXau " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7296,15 +7299,15 @@ if test "$with_tooltalk" != "no" ; then for dir in "" "Tt/" "desktop/" ; do ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6 -echo "configure:7300: checking for ${dir}tt_c.h" >&5 +echo "configure:7303: checking for ${dir}tt_c.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7308: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7311: \"$ac_try\") 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* @@ -7340,12 +7343,12 @@ if test "$with_tooltalk" != "no" ; then xe_msg_checking="for tt_message_create in -ltt" test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:7344: checking "$xe_msg_checking"" >&5 +echo "configure:7347: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo tt'_'tt_message_create | sed 'y%./+-%__p_%'` xe_check_libs=" -ltt $extra_libs" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7413,15 +7416,15 @@ fi test -z "$with_cde" && { ac_safe=`echo "Dt/Dt.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Dt/Dt.h""... $ac_c" 1>&6 -echo "configure:7417: checking for Dt/Dt.h" >&5 +echo "configure:7420: checking for Dt/Dt.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7425: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7428: \"$ac_try\") 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* @@ -7444,12 +7447,12 @@ fi } test -z "$with_cde" && { echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6 -echo "configure:7448: checking for DtDndDragStart in -lDtSvc" >&5 +echo "configure:7451: checking for DtDndDragStart in -lDtSvc" >&5 ac_lib_var=`echo DtSvc'_'DtDndDragStart | sed 'y%./+-%__p_%'` xe_check_libs=" -lDtSvc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7533,7 +7536,7 @@ fi if test "$with_dragndrop" != "no" ; then echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6 -echo "configure:7537: checking if drag and drop API is needed" >&5 +echo "configure:7540: checking if drag and drop API is needed" >&5 if test -n "$dragndrop_proto" ; then with_dragndrop=yes echo "$ac_t""yes (${dragndrop_proto} )" 1>&6 @@ -7553,18 +7556,18 @@ EOF fi echo "checking for LDAP" 1>&6 -echo "configure:7557: checking for LDAP" >&5 +echo "configure:7560: 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:7560: checking for ldap.h" >&5 +echo "configure:7563: checking for ldap.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7571: \"$ac_try\") 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* @@ -7587,15 +7590,15 @@ fi } test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for lber.h""... $ac_c" 1>&6 -echo "configure:7591: checking for lber.h" >&5 +echo "configure:7594: checking for lber.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7599: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7602: \"$ac_try\") 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* @@ -7619,12 +7622,12 @@ fi if test "$with_ldap" != "no"; then echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6 -echo "configure:7623: checking for ldap_search in -lldap" >&5 +echo "configure:7626: checking for ldap_search in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_search | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7660,12 +7663,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber" && xe_msg_checking="$xe_msg_checking using extra libs -llber" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:7664: checking "$xe_msg_checking"" >&5 +echo "configure:7667: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7701,12 +7704,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber -lkrb" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:7705: checking "$xe_msg_checking"" >&5 +echo "configure:7708: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber -lkrb" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7742,12 +7745,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber -lkrb -ldes" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb -ldes" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:7746: checking "$xe_msg_checking"" >&5 +echo "configure:7749: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber -lkrb -ldes" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7809,10 +7812,10 @@ EOF for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7813: checking for $ac_func" >&5 +echo "configure:7816: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7842: \"$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 @@ -7866,20 +7869,20 @@ fi if test "$with_postgresql" != "no"; then echo "checking for PostgreSQL" 1>&6 -echo "configure:7870: checking for PostgreSQL" >&5 +echo "configure:7873: checking for PostgreSQL" >&5 for header_dir in "" "pgsql/" "postgresql/"; do ac_safe=`echo "${header_dir}libpq-fe.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${header_dir}libpq-fe.h""... $ac_c" 1>&6 -echo "configure:7875: checking for ${header_dir}libpq-fe.h" >&5 +echo "configure:7878: checking for ${header_dir}libpq-fe.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7886: \"$ac_try\") 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* @@ -7903,12 +7906,12 @@ fi test -n "$libpq_fe_h_file" && { echo $ac_n "checking for PQconnectdb in -lpq""... $ac_c" 1>&6 -echo "configure:7907: checking for PQconnectdb in -lpq" >&5 +echo "configure:7910: checking for PQconnectdb in -lpq" >&5 ac_lib_var=`echo pq'_'PQconnectdb | sed 'y%./+-%__p_%'` xe_check_libs=" -lpq " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7952,12 +7955,12 @@ EOF echo $ac_n "checking for PQconnectStart in -lpq""... $ac_c" 1>&6 -echo "configure:7956: checking for PQconnectStart in -lpq" >&5 +echo "configure:7959: checking for PQconnectStart in -lpq" >&5 ac_lib_var=`echo pq'_'PQconnectStart | sed 'y%./+-%__p_%'` xe_check_libs=" -lpq " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8016,15 +8019,15 @@ fi if test "$window_system" != "none"; then echo "checking for graphics libraries" 1>&6 -echo "configure:8020: checking for graphics libraries" >&5 +echo "configure:8023: 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:8025: checking for Xpm - no older than 3.4f" >&5 +echo "configure:8028: checking for Xpm - no older than 3.4f" >&5 xe_check_libs=-lXpm cat > conftest.$ac_ext < @@ -8033,7 +8036,7 @@ echo "configure:8025: checking for Xpm - no older than 3.4f" >&5 XpmIncludeVersion != XpmLibraryVersion() ? 1 : XpmIncludeVersion < 30406 ? 2 : 0 ;} EOF -if { (eval echo configure:8037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:8040: \"$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 @@ -8075,17 +8078,17 @@ EOF libs_x="-lXpm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXpm\" to \$libs_x"; fi echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6 -echo "configure:8079: checking for \"FOR_MSW\" xpm" >&5 +echo "configure:8082: checking for \"FOR_MSW\" xpm" >&5 xe_check_libs=-lXpm cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xpm_for_msw=no else @@ -8111,15 +8114,15 @@ EOF test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for compface.h""... $ac_c" 1>&6 -echo "configure:8115: checking for compface.h" >&5 +echo "configure:8118: checking for compface.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8123: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8126: \"$ac_try\") 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* @@ -8142,12 +8145,12 @@ fi } test -z "$with_xface" && { echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6 -echo "configure:8146: checking for UnGenFace in -lcompface" >&5 +echo "configure:8149: checking for UnGenFace in -lcompface" >&5 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'` xe_check_libs=" -lcompface " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8210,12 +8213,12 @@ EOF if test "$with_png $with_tiff" != "no no"; then echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6 -echo "configure:8214: checking for inflate in -lc" >&5 +echo "configure:8217: checking for inflate in -lc" >&5 ac_lib_var=`echo c'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8245,12 +8248,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6 -echo "configure:8249: checking for inflate in -lz" >&5 +echo "configure:8252: checking for inflate in -lz" >&5 ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8280,12 +8283,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6 -echo "configure:8284: checking for inflate in -lgz" >&5 +echo "configure:8287: checking for inflate in -lgz" >&5 ac_lib_var=`echo gz'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lgz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8326,15 +8329,15 @@ fi test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6 -echo "configure:8330: checking for jpeglib.h" >&5 +echo "configure:8333: checking for jpeglib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8338: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8341: \"$ac_try\") 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* @@ -8357,12 +8360,12 @@ fi } test -z "$with_jpeg" && { echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6 -echo "configure:8361: checking for jpeg_destroy_decompress in -ljpeg" >&5 +echo "configure:8364: checking for jpeg_destroy_decompress in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_destroy_decompress | sed 'y%./+-%__p_%'` xe_check_libs=" -ljpeg " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8409,10 +8412,10 @@ EOF png_problem="" test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6 -echo "configure:8413: checking for pow" >&5 +echo "configure:8416: checking for pow" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8442: \"$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 @@ -8456,15 +8459,15 @@ fi } test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for png.h""... $ac_c" 1>&6 -echo "configure:8460: checking for png.h" >&5 +echo "configure:8463: checking for png.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8468: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8471: \"$ac_try\") 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* @@ -8487,12 +8490,12 @@ fi } test -z "$with_png" && { echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6 -echo "configure:8491: checking for png_read_image in -lpng" >&5 +echo "configure:8494: checking for png_read_image in -lpng" >&5 ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'` xe_check_libs=" -lpng " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8526,10 +8529,10 @@ fi } if test -z "$with_png"; then echo $ac_n "checking for workable png version information""... $ac_c" 1>&6 -echo "configure:8530: checking for workable png version information" >&5 +echo "configure:8533: checking for workable png version information" >&5 xe_check_libs="-lpng -lz" cat > conftest.$ac_ext < int main(int c, char **v) { @@ -8537,7 +8540,7 @@ echo "configure:8530: checking for workable png version information" >&5 if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1; return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;} EOF -if { (eval echo configure:8541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:8544: \"$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 @@ -8580,15 +8583,15 @@ EOF test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6 -echo "configure:8584: checking for tiffio.h" >&5 +echo "configure:8587: checking for tiffio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8592: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8595: \"$ac_try\") 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* @@ -8611,12 +8614,12 @@ fi } test -z "$with_tiff" && { echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6 -echo "configure:8615: checking for TIFFClientOpen in -ltiff" >&5 +echo "configure:8618: checking for TIFFClientOpen in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFClientOpen | sed 'y%./+-%__p_%'` xe_check_libs=" -ltiff " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8666,15 +8669,15 @@ fi if test "$with_gtk" = "yes"; then 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:8670: checking for compface.h" >&5 +echo "configure:8673: checking for compface.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8681: \"$ac_try\") 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* @@ -8697,12 +8700,12 @@ fi } test -z "$with_xface" && { echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6 -echo "configure:8701: checking for UnGenFace in -lcompface" >&5 +echo "configure:8704: checking for UnGenFace in -lcompface" >&5 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'` xe_check_libs=" -lcompface " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8753,10 +8756,10 @@ fi if test "$with_x11" = "yes"; then echo "checking for X11 graphics libraries" 1>&6 -echo "configure:8757: checking for X11 graphics libraries" >&5 +echo "configure:8760: checking for X11 graphics libraries" >&5 echo "checking for the Athena widgets" 1>&6 -echo "configure:8760: checking for the Athena widgets" >&5 +echo "configure:8763: checking for the Athena widgets" >&5 case "$with_athena" in "xaw" | "") athena_variant=Xaw athena_3d=no ;; @@ -8770,12 +8773,12 @@ echo "configure:8760: checking for the Athena widgets" >&5 if test "$athena_3d" = "no"; then echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8774: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 +echo "configure:8777: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8802,12 +8805,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8806: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:8809: checking for threeDClassRec in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8849,12 +8852,12 @@ fi else echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8853: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:8856: checking for threeDClassRec in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8883,12 +8886,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for threeDClassRec in -lXaw""... $ac_c" 1>&6 -echo "configure:8887: checking for threeDClassRec in -lXaw" >&5 +echo "configure:8890: checking for threeDClassRec in -lXaw" >&5 ac_lib_var=`echo Xaw'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -lXaw " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8930,15 +8933,15 @@ fi if test "$athena_3d" = "no"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 -echo "configure:8934: checking for X11/Xaw/ThreeD.h" >&5 +echo "configure:8937: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8942: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8945: \"$ac_try\") 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* @@ -8958,15 +8961,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6 -echo "configure:8962: checking for X11/Xaw/XawInit.h" >&5 +echo "configure:8965: checking for X11/Xaw/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8970: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8973: \"$ac_try\") 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* @@ -8992,15 +8995,15 @@ fi else ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6 -echo "configure:8996: checking for X11/$athena_variant/XawInit.h" >&5 +echo "configure:8999: checking for X11/$athena_variant/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9004: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9007: \"$ac_try\") 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* @@ -9017,15 +9020,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6 -echo "configure:9021: checking for X11/$athena_variant/ThreeD.h" >&5 +echo "configure:9024: checking for X11/$athena_variant/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9029: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9032: \"$ac_try\") 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* @@ -9053,15 +9056,15 @@ fi if test -z "$athena_h_path"; then ac_safe=`echo "$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $athena_variant/XawInit.h""... $ac_c" 1>&6 -echo "configure:9057: checking for $athena_variant/XawInit.h" >&5 +echo "configure:9060: checking for $athena_variant/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9065: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9068: \"$ac_try\") 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* @@ -9078,15 +9081,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $athena_variant/ThreeD.h""... $ac_c" 1>&6 -echo "configure:9082: checking for $athena_variant/ThreeD.h" >&5 +echo "configure:9085: checking for $athena_variant/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9090: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9093: \"$ac_try\") 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* @@ -9115,15 +9118,15 @@ fi if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6 -echo "configure:9119: checking for X11/Xaw3d/XawInit.h" >&5 +echo "configure:9122: checking for X11/Xaw3d/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9127: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9130: \"$ac_try\") 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* @@ -9140,15 +9143,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6 -echo "configure:9144: checking for X11/Xaw3d/ThreeD.h" >&5 +echo "configure:9147: checking for X11/Xaw3d/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9155: \"$ac_try\") 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* @@ -9180,15 +9183,15 @@ fi if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then ac_safe=`echo "Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xaw3d/XawInit.h""... $ac_c" 1>&6 -echo "configure:9184: checking for Xaw3d/XawInit.h" >&5 +echo "configure:9187: checking for Xaw3d/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9192: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9195: \"$ac_try\") 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* @@ -9205,15 +9208,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xaw3d/ThreeD.h""... $ac_c" 1>&6 -echo "configure:9209: checking for Xaw3d/ThreeD.h" >&5 +echo "configure:9212: checking for Xaw3d/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9220: \"$ac_try\") 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* @@ -9245,15 +9248,15 @@ fi if test -z "$athena_h_path"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 -echo "configure:9249: checking for X11/Xaw/ThreeD.h" >&5 +echo "configure:9252: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9257: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9260: \"$ac_try\") 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* @@ -9288,15 +9291,15 @@ fi ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6 -echo "configure:9292: checking for Xm/Xm.h" >&5 +echo "configure:9295: checking for Xm/Xm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9300: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9303: \"$ac_try\") 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* @@ -9313,12 +9316,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6 -echo "configure:9317: checking for XmStringFree in -lXm" >&5 +echo "configure:9320: checking for XmStringFree in -lXm" >&5 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure: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 @@ -9358,9 +9361,9 @@ fi if test "$have_motif" = "yes"; then echo $ac_n "checking for Lesstif""... $ac_c" 1>&6 -echo "configure:9362: checking for Lesstif" >&5 +echo "configure:9365: checking for Lesstif" >&5 cat > conftest.$ac_ext < #ifdef LESSTIF_VERSION @@ -9784,7 +9787,7 @@ fi if test "$with_mule" = "yes" ; then echo "checking for Mule-related features" 1>&6 -echo "configure:9788: checking for Mule-related features" >&5 +echo "configure:9791: checking for Mule-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining MULE EOF @@ -9825,15 +9828,15 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:9829: checking for $ac_hdr" >&5 +echo "configure:9832: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9840: \"$ac_try\") 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* @@ -9864,12 +9867,12 @@ done echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6 -echo "configure:9868: checking for strerror in -lintl" >&5 +echo "configure:9871: checking for strerror in -lintl" >&5 ac_lib_var=`echo intl'_'strerror | sed 'y%./+-%__p_%'` xe_check_libs=" -lintl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9932,18 +9935,18 @@ EOF fi echo "checking for Mule input methods" 1>&6 -echo "configure:9936: checking for Mule input methods" >&5 +echo "configure:9939: checking for Mule input methods" >&5 case "$with_xim" in "" | "yes" ) echo "checking for XIM" 1>&6 -echo "configure:9939: checking for XIM" >&5 +echo "configure:9942: checking for XIM" >&5 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6 -echo "configure:9942: checking for XOpenIM in -lX11" >&5 +echo "configure:9945: checking for XOpenIM in -lX11" >&5 ac_lib_var=`echo X11'_'XOpenIM | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9978,12 +9981,12 @@ fi if test "$have_motif $have_lesstif" = "yes no"; then echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6 -echo "configure:9982: checking for XmImMbLookupString in -lXm" >&5 +echo "configure:9985: checking for XmImMbLookupString in -lXm" >&5 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10059,15 +10062,15 @@ EOF if test "$with_xfs" = "yes" ; then echo "checking for XFontSet" 1>&6 -echo "configure:10063: checking for XFontSet" >&5 +echo "configure:10066: checking for XFontSet" >&5 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6 -echo "configure:10066: checking for XmbDrawString in -lX11" >&5 +echo "configure:10069: checking for XmbDrawString in -lX11" >&5 ac_lib_var=`echo X11'_'XmbDrawString | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10118,15 +10121,15 @@ EOF test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6 -echo "configure:10122: checking for wnn/jllib.h" >&5 +echo "configure:10125: checking for wnn/jllib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10133: \"$ac_try\") 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* @@ -10149,15 +10152,15 @@ fi } test -z "$with_wnn" && { ac_safe=`echo "wnn/commonhd.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wnn/commonhd.h""... $ac_c" 1>&6 -echo "configure:10153: checking for wnn/commonhd.h" >&5 +echo "configure:10156: checking for wnn/commonhd.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10161: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10164: \"$ac_try\") 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* @@ -10182,10 +10185,10 @@ fi for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10186: checking for $ac_func" >&5 +echo "configure:10189: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10215: \"$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 @@ -10237,12 +10240,12 @@ done test "$ac_cv_func_crypt" != "yes" && { echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:10241: checking for crypt in -lcrypt" >&5 +echo "configure:10244: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` xe_check_libs=" -lcrypt " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10288,12 +10291,12 @@ fi if test -z "$with_wnn" -o "$with_wnn" = "yes"; then echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6 -echo "configure:10292: checking for jl_dic_list_e in -lwnn" >&5 +echo "configure:10295: checking for jl_dic_list_e in -lwnn" >&5 ac_lib_var=`echo wnn'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10322,12 +10325,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6 -echo "configure:10326: checking for jl_dic_list_e in -lwnn4" >&5 +echo "configure:10329: checking for jl_dic_list_e in -lwnn4" >&5 ac_lib_var=`echo wnn4'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn4 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10356,12 +10359,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6 -echo "configure:10360: checking for jl_dic_list_e in -lwnn6" >&5 +echo "configure:10363: checking for jl_dic_list_e in -lwnn6" >&5 ac_lib_var=`echo wnn6'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10390,12 +10393,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6 -echo "configure:10394: checking for dic_list_e in -lwnn6_fromsrc" >&5 +echo "configure:10397: checking for dic_list_e in -lwnn6_fromsrc" >&5 ac_lib_var=`echo wnn6_fromsrc'_'dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6_fromsrc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10454,12 +10457,12 @@ EOF if test "$with_wnn6" != "no"; then echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6 -echo "configure:10458: checking for jl_fi_dic_list in -l$libwnn" >&5 +echo "configure:10461: checking for jl_fi_dic_list in -l$libwnn" >&5 ac_lib_var=`echo $libwnn'_'jl_fi_dic_list | sed 'y%./+-%__p_%'` xe_check_libs=" -l$libwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10505,15 +10508,15 @@ EOF if test "$with_canna" != "no"; then ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 -echo "configure:10509: checking for canna/jrkanji.h" >&5 +echo "configure:10512: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10517: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10520: \"$ac_try\") 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* @@ -10540,15 +10543,15 @@ fi c_switch_site="$c_switch_site -I/usr/local/canna/include" ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 -echo "configure:10544: checking for canna/jrkanji.h" >&5 +echo "configure:10547: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10555: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10576,15 +10579,15 @@ fi test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6 -echo "configure:10580: checking for canna/RK.h" >&5 +echo "configure:10583: checking for canna/RK.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10591: \"$ac_try\") 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* @@ -10607,12 +10610,12 @@ fi } test -z "$with_canna" && { echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6 -echo "configure:10611: checking for RkBgnBun in -lRKC" >&5 +echo "configure:10614: checking for RkBgnBun in -lRKC" >&5 ac_lib_var=`echo RKC'_'RkBgnBun | sed 'y%./+-%__p_%'` xe_check_libs=" -lRKC " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10646,12 +10649,12 @@ fi } test -z "$with_canna" && { echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6 -echo "configure:10650: checking for jrKanjiControl in -lcanna" >&5 +echo "configure:10653: checking for jrKanjiControl in -lcanna" >&5 ac_lib_var=`echo canna'_'jrKanjiControl | sed 'y%./+-%__p_%'` xe_check_libs=" -lcanna " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10711,12 +10714,12 @@ if test "$need_motif" = "yes" ; then libs_x="-lXm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXm\" to \$libs_x"; fi echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6 -echo "configure:10715: checking for layout_object_getvalue in -li18n" >&5 +echo "configure:10718: checking for layout_object_getvalue in -li18n" >&5 ac_lib_var=`echo i18n'_'layout_object_getvalue | sed 'y%./+-%__p_%'` xe_check_libs=" -li18n " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10813,10 +10816,10 @@ fi for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strerror tzset ulimit usleep waitpid vsnprintf fsync ftruncate umask do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10817: checking for $ac_func" >&5 +echo "configure:10820: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10846: \"$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 @@ -10871,10 +10874,10 @@ done for ac_func in getpt _getpty grantpt unlockpt ptsname killpg tcgetpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10875: checking for $ac_func" >&5 +echo "configure:10878: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10904: \"$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 @@ -10926,10 +10929,10 @@ done echo $ac_n "checking for openpty""... $ac_c" 1>&6 -echo "configure:10930: checking for openpty" >&5 +echo "configure:10933: checking for openpty" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_openpty=yes" else @@ -10971,12 +10974,12 @@ else echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6 -echo "configure:10975: checking for openpty in -lutil" >&5 +echo "configure:10978: checking for openpty in -lutil" >&5 ac_lib_var=`echo util'_'openpty | sed 'y%./+-%__p_%'` xe_check_libs=" -lutil " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11022,15 +11025,15 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:11026: checking for $ac_hdr" >&5 +echo "configure:11029: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11034: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11037: \"$ac_try\") 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* @@ -11066,15 +11069,15 @@ for ac_hdr in stropts.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:11070: checking for $ac_hdr" >&5 +echo "configure:11073: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11078: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11081: \"$ac_try\") 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* @@ -11107,10 +11110,10 @@ if test "$ac_cv_header_stropts_h" = "yes"; then for ac_func in isastream do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:11111: checking for $ac_func" >&5 +echo "configure:11114: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11140: \"$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 @@ -11164,15 +11167,15 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:11168: checking for $ac_hdr" >&5 +echo "configure:11171: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11176: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11179: \"$ac_try\") 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* @@ -11209,10 +11212,10 @@ extra_objs="$extra_objs realpath.o" && if test "$extra_verbose" = "yes"; then for ac_func in getloadavg do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:11213: checking for $ac_func" >&5 +echo "configure:11216: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11242: \"$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 @@ -11268,15 +11271,15 @@ if test "$ac_cv_func_getloadavg" = "yes"; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:11272: checking for $ac_hdr" >&5 +echo "configure:11275: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11283: \"$ac_try\") 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* @@ -11312,12 +11315,12 @@ else echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6 -echo "configure:11316: checking for kstat_open in -lkstat" >&5 +echo "configure:11319: checking for kstat_open in -lkstat" >&5 ac_lib_var=`echo kstat'_'kstat_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lkstat " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11363,15 +11366,15 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:11367: checking for $ac_hdr" >&5 +echo "configure:11370: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11375: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11378: \"$ac_try\") 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* @@ -11403,12 +11406,12 @@ done echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6 -echo "configure:11407: checking for kvm_read in -lkvm" >&5 +echo "configure:11410: checking for kvm_read in -lkvm" >&5 ac_lib_var=`echo kvm'_'kvm_read | sed 'y%./+-%__p_%'` xe_check_libs=" -lkvm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11453,16 +11456,16 @@ fi fi echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6 -echo "configure:11457: checking whether netdb declares h_errno" >&5 +echo "configure:11460: checking whether netdb declares h_errno" >&5 cat > conftest.$ac_ext < int main() { return h_errno; ; return 0; } EOF -if { (eval echo configure:11466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11469: \"$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 @@ -11482,16 +11485,16 @@ fi rm -f conftest* echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6 -echo "configure:11486: checking for sigsetjmp" >&5 +echo "configure:11489: checking for sigsetjmp" >&5 cat > conftest.$ac_ext < int main() { sigjmp_buf bar; sigsetjmp (bar, 0); ; return 0; } EOF -if { (eval echo configure:11495: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11498: \"$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 @@ -11511,11 +11514,11 @@ fi rm -f conftest* echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6 -echo "configure:11515: checking whether localtime caches TZ" >&5 +echo "configure:11518: checking whether localtime caches TZ" >&5 if test "$ac_cv_func_tzset" = "yes"; then cat > conftest.$ac_ext < #if STDC_HEADERS @@ -11550,7 +11553,7 @@ main() exit (0); } EOF -if { (eval echo configure:11554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then emacs_cv_localtime_cache=no else @@ -11580,9 +11583,9 @@ fi if test "$HAVE_TIMEVAL" = "yes"; then echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6 -echo "configure:11584: checking whether gettimeofday accepts one or two arguments" >&5 +echo "configure:11587: checking whether gettimeofday accepts one or two arguments" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11610: \"$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 @@ -11625,19 +11628,19 @@ fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:11629: checking for inline" >&5 +echo "configure:11632: checking for inline" >&5 ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11644: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -11678,17 +11681,17 @@ if test "$__DECC" != "yes"; then # 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:11682: checking for working alloca.h" >&5 +echo "configure:11685: checking for working alloca.h" >&5 cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:11692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11695: \"$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 @@ -11712,10 +11715,10 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:11716: checking for alloca" >&5 +echo "configure:11719: checking for alloca" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11750: \"$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 @@ -11782,10 +11785,10 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:11786: checking whether alloca needs Cray hooks" >&5 +echo "configure:11789: checking whether alloca needs Cray hooks" >&5 cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:11813: checking for $ac_func" >&5 +echo "configure:11816: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11842: \"$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 @@ -11865,10 +11868,10 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:11869: checking stack direction for C alloca" >&5 +echo "configure:11872: checking stack direction for C alloca" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_stack_direction=1 else @@ -11917,15 +11920,15 @@ fi ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 -echo "configure:11921: checking for vfork.h" >&5 +echo "configure:11924: checking for vfork.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11929: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11932: \"$ac_try\") 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* @@ -11953,10 +11956,10 @@ else fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 -echo "configure:11957: checking for working vfork" >&5 +echo "configure:11960: checking for working vfork" >&5 cat > conftest.$ac_ext < @@ -12051,7 +12054,7 @@ main() { } } EOF -if { (eval echo configure:12055: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:12058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_vfork_works=yes else @@ -12077,10 +12080,10 @@ fi echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 -echo "configure:12081: checking for working strcoll" >&5 +echo "configure:12084: checking for working strcoll" >&5 cat > conftest.$ac_ext < main () @@ -12090,7 +12093,7 @@ main () strcoll ("123", "456") >= 0); } EOF -if { (eval echo configure:12094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:12097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_strcoll_works=yes else @@ -12118,10 +12121,10 @@ fi for ac_func in getpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12122: checking for $ac_func" >&5 +echo "configure:12125: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12151: \"$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 @@ -12172,10 +12175,10 @@ fi done echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6 -echo "configure:12176: checking whether getpgrp takes no argument" >&5 +echo "configure:12179: checking whether getpgrp takes no argument" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:12237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_getpgrp_void=yes else @@ -12257,10 +12260,10 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:12261: checking for working mmap" >&5 +echo "configure:12264: checking for working mmap" >&5 case "$opsys" in ultrix* ) have_mmap=no ;; *) cat > conftest.$ac_ext < #include @@ -12293,7 +12296,7 @@ int main (int argc, char *argv[]) return 1; } EOF -if { (eval echo configure:12297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:12300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then have_mmap=yes else @@ -12322,9 +12325,9 @@ 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:12326: checking for M_MMAP_THRESHOLD" >&5 +echo "configure:12329: checking for M_MMAP_THRESHOLD" >&5 cat > conftest.$ac_ext < int main() { @@ -12336,7 +12339,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:12340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rel_alloc=no; echo "$ac_t""yes" 1>&6; else @@ -12361,15 +12364,15 @@ EOF ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termios.h""... $ac_c" 1>&6 -echo "configure:12365: checking for termios.h" >&5 +echo "configure:12368: checking for termios.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12373: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12376: \"$ac_try\") 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* @@ -12412,15 +12415,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termio.h""... $ac_c" 1>&6 -echo "configure:12416: checking for termio.h" >&5 +echo "configure:12419: checking for termio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12427: \"$ac_try\") 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* @@ -12452,10 +12455,10 @@ fi echo $ac_n "checking for socket""... $ac_c" 1>&6 -echo "configure:12456: checking for socket" >&5 +echo "configure:12459: checking for socket" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12485: \"$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 @@ -12493,15 +12496,15 @@ if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6 -echo "configure:12497: checking for netinet/in.h" >&5 +echo "configure:12500: checking for netinet/in.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12505: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12508: \"$ac_try\") 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* @@ -12518,15 +12521,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6 -echo "configure:12522: checking for arpa/inet.h" >&5 +echo "configure:12525: checking for arpa/inet.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12530: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12533: \"$ac_try\") 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* @@ -12551,9 +12554,9 @@ EOF } echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6 -echo "configure:12555: checking "for sun_len member in struct sockaddr_un"" >&5 +echo "configure:12558: checking "for sun_len member in struct sockaddr_un"" >&5 cat > conftest.$ac_ext < @@ -12564,7 +12567,7 @@ int main() { static struct sockaddr_un x; x.sun_len = 1; ; return 0; } EOF -if { (eval echo configure:12568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12571: \"$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 @@ -12582,9 +12585,9 @@ else fi rm -f conftest* echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6 -echo "configure:12586: checking "for ip_mreq struct in netinet/in.h"" >&5 +echo "configure:12589: checking "for ip_mreq struct in netinet/in.h"" >&5 cat > conftest.$ac_ext < @@ -12594,7 +12597,7 @@ int main() { static struct ip_mreq x; ; return 0; } EOF -if { (eval echo configure:12598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12601: \"$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 @@ -12625,10 +12628,10 @@ fi echo $ac_n "checking for msgget""... $ac_c" 1>&6 -echo "configure:12629: checking for msgget" >&5 +echo "configure:12632: checking for msgget" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12658: \"$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 @@ -12666,15 +12669,15 @@ if eval "test \"`echo '$ac_cv_func_'msgget`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6 -echo "configure:12670: checking for sys/ipc.h" >&5 +echo "configure:12673: checking for sys/ipc.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12681: \"$ac_try\") 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* @@ -12691,15 +12694,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6 -echo "configure:12695: checking for sys/msg.h" >&5 +echo "configure:12698: checking for sys/msg.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12703: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12706: \"$ac_try\") 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* @@ -12737,15 +12740,15 @@ fi ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dirent.h""... $ac_c" 1>&6 -echo "configure:12741: checking for dirent.h" >&5 +echo "configure:12744: checking for dirent.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12752: \"$ac_try\") 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* @@ -12772,15 +12775,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6 -echo "configure:12776: checking for sys/dir.h" >&5 +echo "configure:12779: checking for sys/dir.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12787: \"$ac_try\") 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* @@ -12813,15 +12816,15 @@ fi ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for nlist.h""... $ac_c" 1>&6 -echo "configure:12817: checking for nlist.h" >&5 +echo "configure:12820: checking for nlist.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12825: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12828: \"$ac_try\") 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* @@ -12851,22 +12854,22 @@ fi echo "checking "for sound support"" 1>&6 -echo "configure:12855: checking "for sound support"" >&5 +echo "configure:12858: 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:12862: checking for multimedia/audio_device.h" >&5 +echo "configure:12865: checking for multimedia/audio_device.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12870: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12873: \"$ac_try\") 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* @@ -12914,12 +12917,12 @@ fi if test -z "$native_sound_lib"; then echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6 -echo "configure:12918: checking for ALopenport in -laudio" >&5 +echo "configure:12921: checking for ALopenport in -laudio" >&5 ac_lib_var=`echo audio'_'ALopenport | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12961,12 +12964,12 @@ fi if test -z "$native_sound_lib"; then echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6 -echo "configure:12965: checking for AOpenAudio in -lAlib" >&5 +echo "configure:12968: checking for AOpenAudio in -lAlib" >&5 ac_lib_var=`echo Alib'_'AOpenAudio | sed 'y%./+-%__p_%'` xe_check_libs=" -lAlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13015,15 +13018,15 @@ fi for dir in "machine" "sys" "linux"; do ac_safe=`echo "${dir}/soundcard.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}/soundcard.h""... $ac_c" 1>&6 -echo "configure:13019: checking for ${dir}/soundcard.h" >&5 +echo "configure:13022: checking for ${dir}/soundcard.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13027: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13030: \"$ac_try\") 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* @@ -13084,15 +13087,15 @@ fi if test "$with_nas_sound" != "no"; then ac_safe=`echo "audio/audiolib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for audio/audiolib.h""... $ac_c" 1>&6 -echo "configure:13088: checking for audio/audiolib.h" >&5 +echo "configure:13091: checking for audio/audiolib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13096: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13099: \"$ac_try\") 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* @@ -13110,12 +13113,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6 -echo "configure:13114: checking for AuOpenServer in -laudio" >&5 +echo "configure:13117: checking for AuOpenServer in -laudio" >&5 ac_lib_var=`echo audio'_'AuOpenServer | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13165,7 +13168,7 @@ EOF fi libs_x="-laudio $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-laudio\" to \$libs_x"; fi cat > conftest.$ac_ext < EOF @@ -13196,7 +13199,7 @@ if test "$with_esd_sound" != "no"; then # Extract the first word of "esd-config", so it can be a program name with args. set dummy esd-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:13200: checking for $ac_word" >&5 +echo "configure:13203: 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. @@ -13225,10 +13228,10 @@ fi c_switch_site="$c_switch_site `esd-config --cflags`" && if test "$extra_verbose" = "yes"; then echo " Appending \"`esd-config --cflags`\" to \$c_switch_site"; fi LIBS="`esd-config --libs` $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"`esd-config --libs`\" to \$LIBS"; fi echo $ac_n "checking for esd_play_stream""... $ac_c" 1>&6 -echo "configure:13229: checking for esd_play_stream" >&5 +echo "configure:13232: checking for esd_play_stream" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13258: \"$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 @@ -13302,7 +13305,7 @@ test -z "$with_tty" && with_tty=yes if test "$with_tty" = "yes" ; then echo "checking for TTY-related features" 1>&6 -echo "configure:13306: checking for TTY-related features" >&5 +echo "configure:13309: checking for TTY-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TTY EOF @@ -13318,12 +13321,12 @@ EOF if test -z "$with_ncurses"; then echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 -echo "configure:13322: checking for tgetent in -lncurses" >&5 +echo "configure:13325: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lncurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13367,15 +13370,15 @@ EOF ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 -echo "configure:13371: checking for ncurses/curses.h" >&5 +echo "configure:13374: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13379: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13382: \"$ac_try\") 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* @@ -13397,15 +13400,15 @@ fi ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6 -echo "configure:13401: checking for ncurses/term.h" >&5 +echo "configure:13404: checking for ncurses/term.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13409: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13412: \"$ac_try\") 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* @@ -13435,15 +13438,15 @@ fi c_switch_site="$c_switch_site -I/usr/include/ncurses" ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 -echo "configure:13439: checking for ncurses/curses.h" >&5 +echo "configure:13442: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13447: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13450: \"$ac_try\") 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* @@ -13478,12 +13481,12 @@ fi for lib in curses termlib termcap; do echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6 -echo "configure:13482: checking for tgetent in -l$lib" >&5 +echo "configure:13485: checking for tgetent in -l$lib" >&5 ac_lib_var=`echo $lib'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -l$lib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13525,12 +13528,12 @@ fi else echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 -echo "configure:13529: checking for tgetent in -lcurses" >&5 +echo "configure:13532: checking for tgetent in -lcurses" >&5 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lcurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13559,12 +13562,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 -echo "configure:13563: checking for tgetent in -ltermcap" >&5 +echo "configure:13566: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -ltermcap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13623,15 +13626,15 @@ EOF test -z "$with_gpm" && { ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for gpm.h""... $ac_c" 1>&6 -echo "configure:13627: checking for gpm.h" >&5 +echo "configure:13630: checking for gpm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13638: \"$ac_try\") 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* @@ -13654,12 +13657,12 @@ fi } test -z "$with_gpm" && { echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6 -echo "configure:13658: checking for Gpm_Open in -lgpm" >&5 +echo "configure:13661: checking for Gpm_Open in -lgpm" >&5 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgpm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13720,20 +13723,20 @@ test "$with_x11" = "yes" -o "$with_tty" = "yes" && extra_objs="$extra_objs event test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no" && echo "checking for database support" 1>&6 -echo "configure:13724: checking for database support" >&5 +echo "configure:13727: 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:13729: checking for ndbm.h" >&5 +echo "configure:13732: checking for ndbm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13737: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13740: \"$ac_try\") 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* @@ -13763,12 +13766,12 @@ fi if test "$with_database_gdbm" != "no"; then echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6 -echo "configure:13767: checking for dbm_open in -lgdbm" >&5 +echo "configure:13770: checking for dbm_open in -lgdbm" >&5 ac_lib_var=`echo gdbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13807,10 +13810,10 @@ fi if test "$with_database_dbm" != "no"; then echo $ac_n "checking for dbm_open""... $ac_c" 1>&6 -echo "configure:13811: checking for dbm_open" >&5 +echo "configure:13814: checking for dbm_open" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13840: \"$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 @@ -13852,12 +13855,12 @@ else echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 -echo "configure:13856: checking for dbm_open in -ldbm" >&5 +echo "configure:13859: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -ldbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13909,10 +13912,10 @@ EOF if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6 -echo "configure:13913: checking for Berkeley db.h" >&5 +echo "configure:13916: checking for Berkeley db.h" >&5 for header in "db/db.h" "db.h"; do cat > conftest.$ac_ext < @@ -13934,7 +13937,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:13938: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13941: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* db_h_file="$header"; break else @@ -13950,9 +13953,9 @@ rm -f conftest* if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6 -echo "configure:13954: checking for Berkeley DB version" >&5 +echo "configure:13957: checking for Berkeley DB version" >&5 cat > conftest.$ac_ext < #if DB_VERSION_MAJOR > 1 @@ -13964,7 +13967,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* cat > conftest.$ac_ext < #if DB_VERSION_MAJOR > 2 @@ -13991,10 +13994,10 @@ fi rm -f conftest* echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6 -echo "configure:13995: checking for $dbfunc" >&5 +echo "configure:13998: checking for $dbfunc" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14024: \"$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 @@ -14036,12 +14039,12 @@ else echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6 -echo "configure:14040: checking for $dbfunc in -ldb" >&5 +echo "configure:14043: checking for $dbfunc in -ldb" >&5 ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'` xe_check_libs=" -ldb " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14126,12 +14129,12 @@ fi if test "$with_socks" = "yes"; then echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6 -echo "configure:14130: checking for SOCKSinit in -lsocks" >&5 +echo "configure:14133: checking for SOCKSinit in -lsocks" >&5 ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocks " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14197,22 +14200,22 @@ fi if test "$with_modules" != "no"; then echo "checking for module support" 1>&6 -echo "configure:14201: checking for module support" >&5 +echo "configure:14204: checking for module support" >&5 if test "$with_msw" = "yes"; then have_dl=yes; else ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 -echo "configure:14208: checking for dlfcn.h" >&5 +echo "configure:14211: checking for dlfcn.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:14216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:14219: \"$ac_try\") 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* @@ -14229,16 +14232,16 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6 -echo "configure:14233: checking for dlopen in -lc" >&5 +echo "configure:14236: checking for dlopen in -lc" >&5 cat > conftest.$ac_ext < int main() { dlopen ("", 0); ; return 0; } EOF -if { (eval echo configure:14242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* have_dl=yes else @@ -14247,18 +14250,18 @@ else rm -rf conftest* echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:14251: checking for dlopen in -ldl" >&5 +echo "configure:14254: checking for dlopen in -ldl" >&5 ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext < int main() { dlopen ("", 0); ; return 0; } EOF -if { (eval echo configure:14262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* have_dl=yes else @@ -14287,12 +14290,12 @@ EOF else echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "configure:14291: checking for shl_load in -ldld" >&5 +echo "configure:14294: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14330,12 +14333,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6 -echo "configure:14334: checking for dld_init in -ldld" >&5 +echo "configure:14337: checking for dld_init in -ldld" >&5 ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14391,7 +14394,7 @@ xehost=$canonical xealias=$internal_configuration echo "checking how to build dynamic libraries for ${xehost}" 1>&6 -echo "configure:14395: checking how to build dynamic libraries for ${xehost}" >&5 +echo "configure:14398: checking how to build dynamic libraries for ${xehost}" >&5 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts. case "$xehost" in *-*-linux-gnu*) ;; @@ -14419,9 +14422,9 @@ if test "$GCC" = "yes"; then XEGCC=yes else echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:14423: checking checking whether we are using GNU C" >&5 +echo "configure:14426: checking checking whether we are using GNU C" >&5 cat > conftest.$ac_ext <&6 -echo "configure:14447: checking how to produce PIC code" >&5 +echo "configure:14450: checking how to produce PIC code" >&5 wl= can_build_shared=yes @@ -14544,18 +14547,18 @@ if test -n "$dll_cflags"; then # Check to make sure the dll_cflags actually works. echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6 -echo "configure:14548: checking if PIC flag ${dll_cflags} really works" >&5 +echo "configure:14551: checking if PIC flag ${dll_cflags} really works" >&5 save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $dll_cflags -DPIC" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14562: \"$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 @@ -14586,7 +14589,7 @@ cc_produces_so=no xldf= xcldf= echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6 -echo "configure:14590: checking if C compiler can produce shared libraries" >&5 +echo "configure:14593: checking if C compiler can produce shared libraries" >&5 if test "$XEGCC" = yes; then xcldf="-shared" xldf="-shared" @@ -14637,14 +14640,14 @@ if test -n "$xcldf"; then xe_libs= ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* cc_produces_so=yes else @@ -14669,7 +14672,7 @@ if test -z "$LTLD"; then if test "$XEGCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 -echo "configure:14673: checking for ld used by GCC" >&5 +echo "configure:14676: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. @@ -14694,7 +14697,7 @@ echo "configure:14673: checking for ld used by GCC" >&5 esac else echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:14698: checking for GNU ld" >&5 +echo "configure:14701: checking for GNU ld" >&5 fi if test -z "$LTLD"; then @@ -14732,7 +14735,7 @@ ld_dynamic_link_flags= # Check to see if it really is or isn't GNU ld. echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6 -echo "configure:14736: checking if the linker is GNU ld" >&5 +echo "configure:14739: checking if the linker is GNU ld" >&5 # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LTLD -v 2>&1 &5; then xe_gnu_ld=yes @@ -14760,7 +14763,7 @@ else # OK - only NOW do we futz about with ld. # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker supports shared libraries""... $ac_c" 1>&6 -echo "configure:14764: checking whether the linker supports shared libraries" >&5 +echo "configure:14767: checking whether the linker supports shared libraries" >&5 dll_ld=$CC dll_ldflags=$LDFLAGS ld_shlibs=yes @@ -14971,10 +14974,10 @@ EOF for ac_func in dlerror _dlerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:14975: checking for $ac_func" >&5 +echo "configure:14978: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15004: \"$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 @@ -15036,11 +15039,11 @@ done fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:15047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else diff --git a/configure.in b/configure.in index 26e7024..13b8a82 100644 --- a/configure.in +++ b/configure.in @@ -1886,13 +1886,15 @@ if test "$__USLC__" = yes; then test "$need_kalloca" = "yes" && XE_APPEND(-Kalloca,c_switch_system) fi -dnl Calculalate value of CFLAGS: +dnl Calculate value of CFLAGS: dnl Use either command line flag, environment var, or autodetection if test "$cflags_specified" = "no"; then dnl Following values of CFLAGS are known to work well. dnl Should we take debugging options into consideration? if test "$GCC" = "yes"; then CFLAGS="-g -O3 -Wall -Wno-switch -Winline -Wmissing-prototypes -Wshadow" + dnl Yuck, bad compares have been worth at least 3 crashes! + CFLAGS="$CFLAGS -Wsign-compare" dnl glibc is intentionally not `-Wpointer-arith'-clean. dnl Ulrich Drepper has rejected patches to fix the glibc header files. test "$have_glibc" != "yes" && CFLAGS="$CFLAGS -Wpointer-arith" @@ -2755,7 +2757,9 @@ EOF cd .. rm -fr conftestdir for word in $xmkmf_defines; do - case "$word" in -D* ) + case "$word" in + -D__STDC__*) ;; + -D* ) sym=`echo '' $word | sed -e 's:^ *-D::' -e 's:=.*::'` case "$word" in -D*=* ) val=`echo '' $word | sed -e 's:^.*=::'` ;; diff --git a/configure.usage b/configure.usage index 4f95ce2..c6c25b6 100644 --- a/configure.usage +++ b/configure.usage @@ -193,6 +193,11 @@ Additional features: --pdump New, experimental, non-working, don't-sue-me-if- your-house-collapses-and-your-wife-leaves-you, portable dumper. +--with-file-coding Allows transparent use of "foreign" line break + conventions in text files (such as LF-delimited text + imported from a Unix system to a Windows environment), + optionally including autodetection. Defaults to ON + on Windows, OFF on Unix. Internationalization options: diff --git a/dynodump/dynodump.c b/dynodump/dynodump.c index b39f93b..b7090ca 100644 --- a/dynodump/dynodump.c +++ b/dynodump/dynodump.c @@ -73,7 +73,7 @@ * N.B. The above commentary is not quite correct in the flags have been hardwired * to RTLD_SAVREL. */ -#pragma ident "@(#) $Id: dynodump.c,v 1.6.2.2 2000/09/20 02:39:17 martinb Exp $ - SMI" +#pragma ident "@(#) $Id: dynodump.c,v 1.8 2001/04/12 18:20:43 michaels Exp $ - SMI" #define __EXTENSIONS__ 1 diff --git a/etc/NEWS b/etc/NEWS index 268e048..c6bba49 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -3,9 +3,12 @@ * Introduction ============== -This file presents some general information about XEmacs. It is -primarily about the changes in recent XEmacs versions and its release -history. +This file presents the changes in recent XEmacs versions. It +primarily documents user-visible (interface) changes, but also +includes internal changes of possible interest to the users. When +describing new features, we try to also document ways of reverting to +the old behavior, where applicable. If you dislike a recent change in +how XEmacs behaves, this file might contain a remedy. Use `C-c C-f' to move to the next equal level of outline, and `C-c C-b' to move to previous equal level. `C-h m' will give more @@ -17,25 +20,18 @@ in each release should look at the appropriate section of this file. Starting with version 20.0, XEmacs includes ChangeLogs, which can be consulted for a more detailed list of changes. -Users interested in some of the details of how XEmacs differs from GNU -Emacs should read the section "What's Different?" near the end of this -file. - N.B. The term "GNU Emacs" refers to any release of Emacs Version 19 from the Free Software Foundation's GNU Project. (We do not say just "Emacs" as Richard M. Stallman ["RMS"] prefers, because it is clearly a more generic term.) The term "XEmacs" refers to - this program or to its predecessors "Era" and "Lucid Emacs". The - predecessor of all these program is called "Emacs 18". When no - particular version is implied, "Emacs" will be used. + this program or sometimes to its predecessors "Era" and "Lucid + Emacs". The predecessor of all these program is called "Emacs + 18". When no particular version is implied, "Emacs" will be used. -* Changes in XEmacs 21.2 +* Changes in XEmacs 21.4 ======================== -** The modeline's text is now scrollable. Please refer to the variable -`modeline-scrolling-method' for more information. - ** The delete key now deletes forward by default. This is regulated by the variable `delete-key-deletes-forward', which @@ -50,23 +46,38 @@ to set `delete-key-deletes-forward' to nil is if you want to use the Delete key to delete backwards, despite the presence (according to Xlib) of a BackSpace key on the keyboard. +** You can now build XEmacs with support for GTK+ widget set. + +XEmacs built that way uses GTK+ to draw menubars, scrollbars, and +other GUI components, as well GDK for drawing text, choosing fonts, +allocating colors, etc. Additionally, GTK-XEmacs supports Lisp +functions for writing your own GTK programs in Emacs Lisp! + +To use this, build XEmacs with the `--with-gtk' configure flag. (Of +course, you'll need to have the GTK+ libraries and header files on the +system.) Gnome widgets and functionality are supported where +available, and can be turned off. + ** Shifted motion keys now select text by default. You can turn this off by setting `shifted-motion-keys-select-region' to nil. -** You can now set the variable `kill-whole-line' to `always', which -makes `kill-line' (C-k) delete the entire line always, not just when -the cursor is at the beginning of the line. This behavior, as well as -the existing kill-whole-line behavior, now only take effect when -kill-line is called interactively, although this is a departure from a -previous behavior in the case of setting this variable kill-whole-line -to t. It is almost certainly what has always been intended, and most -likely the old way of doing things introduced bugs. - -The new function `historical-kill-line' ignores the `kill-whole-line' -setting and always gives the historical behavior of only killing to -the end of the line. This function is bound to Sh-C-k, so that the -kill to end of line behavior is available, even when `kill-whole-line' -has been customized. +** There is a new command `kill-entire-line' that always kills the +entire line at point, regardless of whether the point is at the +beginning of line, and regardless of the setting of `kill-whole-line'. + +** The variable `kill-whole-line' now only takes effect when kill-line +is called interactively. Although this is a departure from a previous +behavior in the case of setting this variable kill-whole-line to t, +it is almost certainly what has always been intended, and most likely +the old way of doing things introduced bugs. + +** The help buffers created by the plethora of C-h commands now +contain hyperlinks. + +** The modeline's text is now scrollable. This is controlled by the +variable `modeline-scrolling-method', which you need to set to a +non-nil value. You can also choose scrolling types; see the docstring +of `modeline-scrolling-method' for more information. ** XEmacs menus now have accelerators by default. If a menu item does not have an accelerator specified, one is created dynamically, using @@ -90,6 +101,11 @@ it easier to anticipate where consecutive C-s or C-r will place the point. If you want to disable the feature, set `isearch-highlight-all-matches' to nil. +** The "coding systems" feature now works even in an XEmacs compiled +without international (Mule) support. This means that for example +XEmacs can recognize newline convention used by the file you are +editing. + ** You can now use the buffer tabs to switch between buffers. The tabs are located between the toolbar and the uppermost window, in a location called "gutter". If you dislike the buffer tabs, you can @@ -114,6 +130,16 @@ you can now edit the default value by pressing the down arrow, accessing the logical "future" value. Not all minibuffer prompts have yet been converted to support this feature. +** International keysyms are now supported under X. This means that +XEmacs running under Mule will automatically recognize the keysym +`scaron' to be the lower-case `s' with caron in the Latin 2 character +set. (Specifically, it will bind the keysym to `self-insert' and +augment its `ascii-character' property.) This is very useful with +XFree under European locales as shipped by recent Linux distributions. +If XEmacs is compiled without Mule support, the feature still works, +but it is unaware of different character sets -- it unconditionally +sets the `ascii-character' property to values in the [160, 256) range. + ** The rectangle functions have been almost completely rewritten in order to avoid inserting undesirable spaces, notably at the end of lines. Two typical examples of the old behavior were @@ -176,7 +202,7 @@ The new primitives available for this purpose are functions named It will try NAS first, then ESD, then playing native sound directly. ** X-Face support is now available under MS-Windows. -If an X-Face libary built under MS-Windows is available then XEmacs +If an X-Face library built under MS-Windows is available then XEmacs will use this at build time. ** The font-menu is now available under MS-Windows. @@ -193,6 +219,14 @@ The only thing selection doesn't do is set the clipboard automatically as this would break the MS-Windows model. If you want this behavior then set `selection-sets-clipboard' to t. +** Motif selection support is now more correct (but slower) in its behaviour. + +Changes have been made to allow correct operation of cut/copy/paste +operations between native widgets and XEmacs buffers. However, this +can lead to a lot of X traffic which slows down the performance of +`C-k'. If you want the old behaviour then set +`x-selection-strict-motif-ownership' to nil. + ** Mail spool locking now works correctly. XEmacs has always come with a little auxiliary program, movemail, which moves mail out of the system's spool area into user storage. To @@ -208,42 +242,45 @@ environment's mail spool locking conventions. When you're using a binary kit, set the `mail-lock-method' variable at startup, or the EMACSLOCKMETHOD environment variable. -** Init file will move to ~/.xemacs/init.el. +** Indentation no longer indents comments that begin at column zero. +This makes it easy to deal with commented out regions of code. -If `~/.xemacs/init.el' exists, XEmacs will prefer it over `~/.emacs' -as an init file. The file may be byte-compiled as -`~/.xemacs/init.elc'. +** Init file changes. -Future versions of XEmacs will stop supporting `~/.emacs' as an init -file. XEmacs offers automatic migration upon startup. +*** XEmacs now supports a `~/.xemacs/init.el' startup file. If +it exists, XEmacs will prefer it over `.emacs' and `.emacs.el'. The +file may be byte-compiled as `~/.xemacs/init.elc'. -** Custom file will move to ~/.xemacs/custom.el. +If present, the `~/.xemacs/' directory may contain startup files for +XEmacs packages that support it. -Whereas customize settings were formerly stored in the regular init -file, XEmacs now prefers them to be in a separate file -`~/.xemacs/custom.el', completely under automatic control. This -change goes with the migration of the init file, and XEmacs offers -automatic migration upon startup. +*** Init file in your home directory may be called `.emacs.el'. -** Init file may be called .emacs.el. - -For the time being, like in GNU Emacs 20.4 and on, you can now name -the XEmacs init file `.emacs.el'. Formerly the name had to be -`.emacs'. If you use the name `.emacs.el', you can byte-compile the -file in the usual way. +Like in GNU Emacs 20.4 and on, you can now name the XEmacs init file +located in your home directory `.emacs.el'. Formerly the name had to +be `.emacs'. If you use the name `.emacs.el', you can byte-compile +the file in the usual way. If both `.emacs' and `.emacs.el' exist, the latter file is the one that is used. -** New command-line switches -user-init-file and -user-init-directory. +*** New command-line switches -user-init-file and -user-init-directory. These can be used to specify alternate locations for what is normally ~/.emacs and ~/.xemacs. -Moreover, -user (which used to only work in unpredictable ways) -is now equivalent to -user-init-file ~/.xemacs/init.el --user-init-directory ~/.xemacs. or -user-init-file -~/.emacs -user-init-directory ~/.xemacs, whichever init -file comes first. +Moreover, the `-user ' command-line option (which used to only +work in unpredictable ways) is now equivalent to `-user-init-file +~/.xemacs/init.el -user-init-directory ~/.xemacs', or +`-user-init-file ~/.emacs -user-init-directory ~/.xemacs', +whichever init file comes first. + +*** Custom file will move to ~/.xemacs/custom.el. + +Whereas customize settings were formerly stored in the regular init +file, XEmacs now prefers them to be in a separate file +`~/.xemacs/custom.el', completely under automatic control. This +change goes with the migration of the init file, and XEmacs offers +automatic migration upon startup. ** New variable `mswindows-alt-by-itself-activates-menu'. If you set this variable to nil then pressing and releasing the Alt @@ -268,6 +305,26 @@ to the PostgreSQL RDBMS (libpq) is available in XEmacs Lisp. Supported versions of PostgreSQL are 6.5.3 (earlier versions may work, but have not been tested) and 7.0-beta1. +** Help functions (e.g. `C-h f') now know how to print macro argument +lists. If your macro definition included an argument list for the +sake of help output, you no longer need to do that. + +** Mule changes. + +*** Windows 1251 code page is now supported as coding system +`windows-1251'. + +*** Czech, Thai, Cyrillic-KOI8, Vietnamese, Ethiopic support now +available. + +*** The appropriate characters in Latin 3 and Latin 4 character sets +are correctly defined as words. + +*** The default coding-priority-list is now safer. This means that if +you have no language environment set, Mule no longer automatically +recognizes ISO 2022 escapes in your files. This makes editing binary +files safe. + ** Etags changes. *** In DOS, etags looks for file.cgz if it cannot find file.c. @@ -287,7 +344,7 @@ declarations when given the --declarations option. *** New language Ada: tags are functions, procedures, packages, tasks, and types. -*** In Fortran, procedure is no more tagged. +*** In Fortran, procedure is no longer tagged. *** In Java, tags are created for "interface". @@ -303,27 +360,34 @@ variables are tagged. for PSWrap. -* Lisp and internal changes in XEmacs 21.2 +* Lisp and internal changes in XEmacs 21.4 ========================================== ** A new portable dumper is available for beta testing. Olivier Galibert has written a portable dumper for XEmacs, based on -initial work by Kyle Jones. Normally, XEmacs C sources link into an -executable called `temacs', which loads the Lisp code and "unexecs" -into a proper `xemacs' executable. The unexec() process is hard to +initial work by Kyle Jones. To perform even the most basic editor, +XEmacs requires some amount of Lisp code to be loaded. To avoid +repeating the expensive loading process at every startup, XEmacs is +built in a special way. Its C sources link into an executable called +`temacs', which loads the bootstrap Lisp code and uses a special +"unexec" call to dump the resulting memory image into a proper +`xemacs' executable on disk. The unexec() process is hard to implement correctly and makes XEmacs very hard to port to new operating systems, or even to new releases of old systems. -A portable dumper is a different approach to dumping: instead of -dumping full-fledged executable, it only dumps out the initialized +The new portable dumper uses a different approach to dumping: instead +of dumping full-fledged executable, it only dumps out the initialized data structures (both Lisp and C) into an external file. A normally -running XEmacs only needs to mmap() that file and relocate a bit to -get to the initialized data. In that scheme, there is no difference +running XEmacs only needs to mmap that file and relocate a bit to get +to the initialized data. In that scheme, there is no difference between `temacs' and `xemacs'. -This is all very experimental, though. Configure with `--pdump' to -try testing it. +Unfortunately, the portable dumper has not been completely finished +for this release, and will not be used by default. However, if you +wish to experiment with it, or if you need to compile XEmacs on a new +and unsupported platform, you can test it by configuring XEmacs with +`--pdump' flag. ** Much effort has been invested to make XEmacs Lisp faster: @@ -331,7 +395,7 @@ try testing it. This is especially the case when running a Mule-enabled XEmacs. A general overhaul of the lisp engine should produce a speedup of 1.4 -in a Latin-1 XEmacs, and 2.1 in a Mule XEmacs. These numbers were +in a non-Mule XEmacs, and 2.1 in a Mule XEmacs. These numbers were obtained running `(byte-compile "simple.el")', which should be a pretty typical test of "pure" Lisp. @@ -344,6 +408,9 @@ makes intensive use of hash tables. *** The garbage collector has been tuned, leading to a speedup of 1.16. +*** The byte-compiler and the byte-optimizer have been tuned to +produce better code in many small ways. + *** The family of functions that iterate over lists, like `memq', and `rassq', have been made a little faster (typically 1.3). @@ -377,11 +444,42 @@ usage. The buffers-tab functionality and progress gauge have been implemented using this feature. -** `user-init-file' and `user-init-directory' are now absolute -file/directory names. Previously, both variables used to be relative -to (concat "~" init-file-user). This turned out to be too complicated -for most packages (and some core Lisp files) to use correctly. Also, -the `init-file-user' variable has been obsoleted in the process. +** A new Windows installer, netinstall ported from Cygwin. + +Nearly complete automation of the XEmacs install process from +ftp.xemacs.org. Includes selection of Lisp packages to install, etc. + +** Syntax tables may now be specified for a part of a buffer by +attaching the `syntax-table' property to an extent. For compatibility +with GNU Emacs, you may use the text-property interface to achieve the +same result. + +** Case translation now supports international characters. + +*** Instead of being lists of 256-character strings, case tables are +now opaque objects. The interface to access them is almost the same, +except it now works for international characters, and you can set the +case pairs using `put-case-table-pair'. `set-case-table' and friends +still support the old list/string based interface for backward +compatibility. + +*** As a consequence of this change, functions `downcase' and `upcase' +as well as all the case-transformation commands now work with +non-ASCII characters. Built-in tables cover all the Latin character +sets that we support. If your language has a distinction between +upper and lower case that is not handled by XEmacs/Mule, please let us +know. + +*** The code that implements case-insensitive search has been modified +to respect the case table settings. This also applies to regexp +search. + +** Values of variables `user-init-file' and `user-init-directory' are +now absolute file/directory names. Previously, both variables used to +be relative to `(concat "~" init-file-user)'. This turned out to be +too complicated for most packages (and some core Lisp files) to use +correctly. Also, the `init-file-user' variable has been obsoleted in +the process. The user-visible options like `-u' have not changed their behavior. @@ -427,8 +525,9 @@ now take an additional argument which specifies the default value. If this argument is non-nil, it should be a string; that string is used in two ways: - It is returned if the user enters empty input. - It is available through the history command M-n. + * It is returned if the user enters empty input. + * It is available as the logical "future" entry, by pressing the down + arrow. ** LDAP changes. @@ -477,7 +576,7 @@ operation. ** `translate-region' has been improved in several ways. Its TABLE argument used to be a 256-character string. In addition to this, it can now also be a vector or a char-table, which makes the function -useful for Mule, which it wasn't. If TABLE a vector or a generic +useful for Mule, which it wasn't. If TABLE is a vector or a generic char-table, you can map characters to strings instead of to other characters. For instance: @@ -514,8 +613,12 @@ interned in the global obarray. For example: This behavior is compatible with other code which treats symbols beginning with colon as keywords only if they are interned in the -global obarray. `keywordp' used to wrongly return t in both cases -above. +global obarray. `keywordp' used to wrongly return t in both above +cases. + +** The function `replace-in-string' has been rewritten to use +`replace-match'. This not only makes it much faster, but adds all the +features of `replace-match'. ** New variables `this-command-properties' and `last-command-properties' are now available for communication between @@ -529,8 +632,8 @@ only once, and automatically removes itself after the first time it has run. ** The descriptor that specifies the text of a menu item can now be an -evaluated expression. This makes this descriptor parallel with -others, which can also be expressions. +evaluated expression. This makes it parallel with other descriptors, +which can also be expressions. * Changes in XEmacs 21.0 @@ -1021,3 +1124,6 @@ configure command line to get it back. *** `Info-default-directory-list' is now obsolete. If you want to change the path which XEmacs uses to search for info files, set `Info-directory-list' instead. + + +* For older news, see the file ONEWS. diff --git a/etc/OXYMORONS b/etc/OXYMORONS index 3528654..6717c52 100644 --- a/etc/OXYMORONS +++ b/etc/OXYMORONS @@ -18,25 +18,25 @@ The rest of the codenames are in alphabetical order. N.B. I expect that the Stable Release Maintainer will choose a new theme for the releases following the promotion of 21.4 from "gamma" to -"stable". So 15 should be enough.... +"stable". So 15 or so should be enough.... 21.4.0: Solid Vapor 21.4.1: Copyleft 21.4.2: Developer-Friendly Unix APIs 21.4.3: Academic Rigor -21.4.3: Artificial Intelligence -21.4.3: Civil Service -21.4.3: Common Lisp -21.4.3: Economic Science -21.4.3: Honest Politician -21.4.3: Informed Management -21.4.3: Military Intelligence -21.4.3: Portable Code -21.4.3: Rational FORTRAN -21.4.3: Reasonable Discussion -21.4.3: Standard C +21.4.4: Artificial Intelligence +21.4.5: Civil Service +21.4.6: Common Lisp +21.4.7: Economic Science +21.4.8: Honest Recruiter +21.4.9: Informed Management +21.4.10: Military Intelligence +21.4.11: Portable Code +21.4.12: Rational FORTRAN +21.4.13: Reasonable Discussion +21.4.14: Security Through Obscurity +21.4.15: Standard C +21.4.16: Successful IPO -N.B. Suggestions welcome until shortly before the release. (The -non-incrementing version number is precisely to make it easy to add -new oxymorons.) +N.B. Only incredibly redeeming suggestoins can be accepted now. diff --git a/etc/gnuserv.1 b/etc/gnuserv.1 index 09f213b..f649172 100644 --- a/etc/gnuserv.1 +++ b/etc/gnuserv.1 @@ -171,9 +171,11 @@ the server is restarted. A Unix-domain socket is used to communicate between \fIgnuclient\fP and \fIgnuserv\fP if the symbol UNIX_DOMAIN_SOCKETS is defined at the top of gnuserv.h. A file called /tmp/gsrvdir????/gsrv is created for -communication and if deleted will cause communication between server -and client to fail. Only the user running gnuserv will be able to -connect to the socket. +communication. If the symbol USE_TMPDIR is set at the top of gnuserv.h, +$TMPDIR, when set, is used instead of /tmp. If that file is deleted, +or TMPDIR has different values for the server and the client, communication +between server and client will fail. Only the user running gnuserv will be +able to connect to the socket. .SH INTERNET-DOMAIN SOCKETS Internet-domain sockets are used to communicate between \fIgnuclient\fP and \fIgnuserv\fP if the symbol diff --git a/etc/sample.init.el b/etc/sample.init.el index ef6ec7f..c6371ca 100644 --- a/etc/sample.init.el +++ b/etc/sample.init.el @@ -273,6 +273,12 @@ argument are optional. Only the Non-nil arguments are used in the test." ;; the line, but that messes up the common idiom `f8 move-cursor f4'. (defun Init-kill-entire-line (&optional arg) +"Kill the entire line. +With prefix argument, kill that many lines from point. Negative +arguments kill lines backward. + +When calling from a program, nil means \"no arg\", +a number counts as a prefix arg." (interactive "*P") (let ((kill-whole-line t)) (beginning-of-line) @@ -649,6 +655,13 @@ backward, and defaults to 1. Buffers whose name begins with a space ;; Useful programming-related keystrokes. (defun describe-foo-at-point () + "Show the documentation of the Elisp function and variable near point. +This checks in turn: + +-- for a function name where point is +-- for a variable name where point is +-- for a surrounding function call +" (interactive) (let (sym) ;; sigh, function-at-point is too clever. we want only the first half. @@ -747,42 +760,86 @@ This lets you figure out where time is being spent when executing Lisp code." 'kill-current-buffer-and-window) (defun kill-current-buffer () + "Kill the current buffer (prompting if it is modified)." (interactive) (kill-buffer (current-buffer))) (defun kill-current-buffer-and-window () + "Kill the current buffer (prompting if it is modified) and its window." (interactive) (kill-buffer (current-buffer)) (delete-window)) -(defun grep-c-files () - (interactive) +(defvar grep-all-files-history nil) + +(defvar grep-all-files-omitted-expressions + '("*~" "#*" ".#*" ",*" "*.elc" "*.obj" "*.o" "*.exe" "*.dll" "*.lib" "*.a" + "*.dvi" "*.class" "*.bin") + "List of expressions matching files to be omitted in `grep-all-files-...'. +Each entry should be a simple name or a shell wildcard expression.") + +(defvar grep-all-files-omitted-directories '("CVS" "RCS" "SCCS") + "List of directories not to recurse into in `grep-all-files-...'. +Each entry should be a simple name or a shell wildcard expression.") + +(defun construct-grep-all-files-command (find-segment grep-segment) + (let ((omit-annoying + (mapconcat #'(lambda (wildcard) + (concat "-name '" wildcard "' -or ")) + grep-all-files-omitted-expressions + ""))) + (cond ((eq grep-find-use-xargs 'gnu) + (format "find . %s %s -type f -print0 | xargs -0 -e %s" + find-segment omit-annoying grep-segment)) + (grep-find-use-xargs + (format "find . %s %s -type f -print | xargs %s" + find-segment omit-annoying grep-segment)) + (t + (format "find . %s %s -type f -exec %s {} /dev/null \\;" + find-segment omit-annoying grep-segment))))) + +(defun grep-all-files-in-current-directory (command) + "Run `grep' in all non-annoying files in the current directory. +`Non-annoying' excludes backup files, autosave files, CVS merge files, etc. +More specifically, this is controlled by `grep-all-files-omitted-expressions'. + +This function does not recurse into subdirectories. If you want this, +use \\[grep-all-files-in-current-directory-and-below]." + (interactive + (progn + (require 'compile) + (list (read-shell-command "Run grep (like this): " + grep-command 'grep-all-files-history)))) (require 'compile) - (let ((grep-command - (cons (concat grep-command " *.[chCH]" - ; i wanted to also use *.cc and *.hh. - ; see long comment below under Perl. - ) - (length grep-command)))) - (call-interactively 'grep))) - -(defun grep-lisp-files () - (interactive) + (grep (construct-grep-all-files-command + "-name . -or -type d -prune -or" command))) + +(defun grep-all-files-in-current-directory-and-below () + "Run `grep' in all non-annoying files in the current directory and below. +`Non-annoying' excludes backup files, autosave files, CVS merge files, etc. +More specifically, this is controlled by `grep-all-files-omitted-expressions'. + +This function recurses into subdirectories. If you do not want this, +use \\[grep-all-files-in-current-directory]." + (interactive + (progn + (require 'compile) + (list (read-shell-command "Run grep (like this): " + grep-command 'grep-all-files-history)))) (require 'compile) - (let ((grep-command - (cons (concat grep-command " *.el" - ; i wanted to also use *.cc and *.hh. - ; see long comment below under Perl. - ) - (length grep-command)))) - (call-interactively 'grep))) - -;; This repeatedly selects larger and larger balanced expressions -;; around the cursor. Once you have such an expression marked, you -;; can expand to the end of the following expression with C-M-SPC and -;; to the beginning of the previous with M-left. + (grep (construct-grep-all-files-command + ;; prune all specified directories. + (mapconcat #'(lambda (wildcard) + (concat "-name '" wildcard "' -prune -or ")) + grep-all-files-omitted-directories + "") + command))) (defun clear-select () + "Repeatedly select ever larger balanced expressions around the cursor. +Once you have such an expression marked, you can expand to the end of +the following expression with \\[mark-sexp] and to the beginning of the +previous with \\[backward-sexp]." (interactive "_") ;this means "preserve the active region after this command" (backward-up-list 1) (let ((end (save-excursion (forward-sexp) (point)))) @@ -792,8 +849,8 @@ This lets you figure out where time is being spent when executing Lisp code." ;; -- always reports as /. #### this should be fixable. (global-set-key 'kp-add 'query-replace) (global-set-key '(shift kp-add) 'query-replace-regexp) -(global-set-key '(control kp-add) 'grep-c-files) -(global-set-key '(meta kp-add) 'grep-lisp-files) +(global-set-key '(control kp-add) 'grep-all-files-in-current-directory) +(global-set-key '(meta kp-add) 'grep-all-files-in-current-directory-and-below) (global-set-key 'clear 'clear-select) ;; Note that you can use a "lambda" expression (an anonymous function) ;; in place of a function name. This function would be called @@ -803,7 +860,7 @@ This lets you figure out where time is being spent when executing Lisp code." ;; buffer, etc.). (global-set-key 'kp-enter (lambda () (interactive) (set-mark-command t))) (global-set-key '(shift kp-enter) 'repeat-complex-command) -(global-set-key 'pause 'repeat-complex-command) ;; useful on Windows-stlye kbds +(global-set-key 'pause 'repeat-complex-command) ;; useful on Windows-style kbds (global-set-key '(control kp-enter) 'eval-expression) ;;;;;;;;;;;;;;;;;;;;;;;; @@ -889,11 +946,29 @@ This lets you figure out where time is being spent when executing Lisp code." ;(setq user-full-name "Ben Wing") ;(setq smtpmail-smtp-server "pop.tcsn.uswest.net") - ;; Make Alt+accelerator traverse to the menu in new enough XEmacs + ;; Make Meta+accelerator traverse to the menu in new enough XEmacs ;; versions. Note that this only overrides Meta bindings that would - ;; actually invoke a menu, and that none of the most common commands - ;; are overridden. You can use ESC+key to access the overridden - ;; ones if necessary. + ;; actually invoke a menu, and the most common commands that are + ;; overridden have preferred alternative bindings using the arrow + ;; keys. You can always access the overridden ones using + ;; Shift+Meta+Key. (Note that "Alt" and "Meta" normally refer to the + ;; same key, except on some Sun keyboards [where "Meta" is actually + ;; labelled with a diamond] or if you have explicitly made them + ;; different under X Windows using `xmodmap'.) + ;; + ;; More specifically, the following bindings are overridden: + ;; + ;; M-f (use C-right or Sh-M-f instead) + ;; M-e (use M-C-right or Sh-M-e instead) + ;; M-v (use Prior aka PgUp or Sh-M-v instead) + ;; M-m (use Sh-M-m instead) + ;; M-t (use Sh-M-t instead) + ;; M-o (normally undefined) + ;; M-b (use C-left or Sh-M-b instead) + ;; M-h (use M-e h or Sh-M-h instead) + ;; in Lisp mode, M-l (use Sh-M-l instead) + ;; in C mode, M-c (use Sh-M-c instead) + (setq menu-accelerator-enabled 'menu-force) ;; Make Cygwin `make' work inside a shell buffer. diff --git a/info/dir b/info/dir index 033bf07..53cebd4 100644 --- a/info/dir +++ b/info/dir @@ -34,28 +34,25 @@ File: dir Node: Top This is the top of the INFO tree * Menu: -XEmacs 21.2 +XEmacs 21.4 =========== -* Info: (info). Documentation browsing system. -* XEmacs:: The extensible user-friendly self-documenting text editor. - This manual is for XEmacs 21.2 -* Lispref:: XEmacs Lisp technical reference. - This manual is for XEmacs 21.2. -* New-Users-Guide:: XEmacs New User's Guide for XEmacs 21.2. -* XEmacs-FAQ:: XEmacs Frequently Asked Questions for 21.2. -* Internals:: Guide to the internals of XEmacs. -* Emodules:: XEmacs dynamic loadable module support. - - -Local Packages: - -* CL:: A Common Lisp compatibility package for Emacs-Lisp. -* Custom:: Customization Library for Emacs -* External-Widget:: Use XEmacs as a text widget inside of another program. -* Standards: (standards). GNU coding standards. -* Term:: A mode to control inferior processes (a comint replacement) -* Termcap:: The termcap library, which enables application programs - to handle all types of character-display terminals. -* Texinfo: (texinfo). The GNU documentation format. -* Widget:: An Emacs Lisp widget library +* XEmacs:: XEmacs User's Manual. +* Lispref:: XEmacs Lisp Reference Manual. +* New-Users-Guide:: Getting Started with XEmacs. +* XEmacs-FAQ:: XEmacs Frequently Asked Questions for 21.4. +* Info:: Guide to Info, the XEmacs online documentation system. +* Internals:: Guide to the internals of XEmacs. + +Other Documentation: + +* CL:: A Common Lisp compatibility package for Emacs-Lisp. +* Custom:: Customization Library for Emacs. +* Emodules:: XEmacs dynamic loadable module support. +* External-Widget:: Use XEmacs as a text widget inside of another program. +* Standards:: GNU coding standards. +* Term:: A mode to control inferior processes (a comint replacement) +* Termcap:: The termcap library, which enables application programs + to handle all types of character-display terminals. +* Texinfo:: The GNU documentation format. +* Widget:: An Emacs Lisp widget library. diff --git a/info/internals.info b/info/internals.info index 0446b0a..028eea0 100644 --- a/info/internals.info +++ b/info/internals.info @@ -40,158 +40,160 @@ Foundation instead of in the original English.  Indirect: internals.info-1: 1776 -internals.info-2: 46637 -internals.info-3: 94562 -internals.info-4: 144259 -internals.info-5: 194152 -internals.info-6: 243742 -internals.info-7: 287809 -internals.info-8: 336676 -internals.info-9: 380670 +internals.info-2: 51581 +internals.info-3: 100531 +internals.info-4: 150232 +internals.info-5: 192457 +internals.info-6: 241581 +internals.info-7: 288078 +internals.info-8: 335143 +internals.info-9: 384278  Tag Table: (Indirect) Node: Top1776 -Node: A History of Emacs7040 -Node: Through Version 188565 -Node: Lucid Emacs12013 -Node: GNU Emacs 1915031 -Node: GNU Emacs 2017214 -Node: XEmacs17641 -Node: XEmacs From the Outside20820 -Node: The Lisp Language22587 -Node: XEmacs From the Perspective of Building32130 -Node: XEmacs From the Inside38255 -Node: The XEmacs Object System (Abstractly Speaking)46637 -Node: How Lisp Objects Are Represented in C60723 -Node: Rules When Writing New C Code65400 -Node: General Coding Rules66204 -Node: Writing Lisp Primitives72014 -Node: Adding Global Lisp Variables83183 -Node: Coding for Mule86821 -Node: Character-Related Data Types87800 -Node: Working With Character and Byte Positions90797 -Node: Conversion to and from External Data94562 -Node: General Guidelines for Writing Mule-Aware Code100703 -Node: An Example of Mule-Aware Code103391 -Node: Techniques for XEmacs Developers105372 -Node: A Summary of the Various XEmacs Modules113319 -Node: Low-Level Modules114139 -Node: Basic Lisp Modules121600 -Node: Modules for Standard Editing Operations128194 -Node: Editor-Level Control Flow Modules134082 -Node: Modules for the Basic Displayable Lisp Objects137593 -Node: Modules for other Display-Related Lisp Objects140546 -Node: Modules for the Redisplay Mechanism141887 -Node: Modules for Interfacing with the File System144259 -Node: Modules for Other Aspects of the Lisp Interpreter and Object System147957 -Node: Modules for Interfacing with the Operating System153410 -Node: Modules for Interfacing with X Windows160966 -Node: Modules for Internationalization164449 -Node: Allocation of Objects in XEmacs Lisp167086 -Node: Introduction to Allocation167607 -Node: Garbage Collection171293 -Node: GCPROing172449 -Node: Garbage Collection - Step by Step179453 -Node: Invocation179845 -Node: garbage_collect_1182858 -Node: mark_object192340 -Node: gc_sweep194152 -Node: sweep_lcrecords_1199215 -Node: compact_string_chars200210 -Node: sweep_strings202390 -Node: sweep_bit_vectors_1203355 -Node: Integers and Characters204031 -Node: Allocation from Frob Blocks204783 -Node: lrecords206387 -Node: Low-level allocation218613 -Node: Cons222720 -Node: Vector223446 -Node: Bit Vector224023 -Node: Symbol224516 -Node: Marker224870 -Node: String225425 -Node: Compiled Function229038 -Node: Dumping229207 -Node: Overview231428 -Node: Data descriptions231998 -Node: Dumping phase234003 -Node: Object inventory234406 -Node: Address allocation237342 -Node: The header238731 -Node: Data dumping239176 -Node: Pointers dumping239837 -Node: Reloading phase241227 -Node: Remaining issues242781 -Node: Events and the Event Loop243742 -Node: Introduction to Events244192 -Node: Main Loop246141 -Node: Specifics of the Event Gathering Mechanism249716 -Node: Specifics About the Emacs Event262169 -Node: The Event Stream Callback Routines262424 -Node: Other Event Loop Functions262669 -Node: Converting Events263809 -Node: Dispatching Events; The Command Builder264418 -Node: Evaluation; Stack Frames; Bindings264653 -Node: Evaluation264995 -Node: Dynamic Binding; The specbinding Stack; Unwind-Protects271550 -Node: Simple Special Forms273934 -Node: Catch and Throw274717 -Node: Symbols and Variables277292 -Node: Introduction to Symbols277556 -Node: Obarrays278624 -Node: Symbol Values282157 -Node: Buffers and Textual Representation284445 -Node: Introduction to Buffers285103 -Node: The Text in a Buffer287809 -Node: Buffer Lists294959 -Node: Markers and Extents296910 -Node: Bufbytes and Emchars299175 -Node: The Buffer Object299390 -Node: MULE Character Sets and Encodings302870 -Node: Character Sets303932 -Node: Encodings307417 -Node: Japanese EUC (Extended Unix Code)308484 -Node: JIS7309316 -Node: Internal Mule Encodings310666 -Node: Internal String Encoding312496 -Node: Internal Character Encoding314641 -Node: CCL316365 -Node: The Lisp Reader and Compiler323118 -Node: Lstreams323331 -Node: Creating an Lstream324362 -Node: Lstream Types325589 -Node: Lstream Functions325841 -Node: Lstream Methods329407 -Node: Consoles; Devices; Frames; Windows332549 -Node: Introduction to Consoles; Devices; Frames; Windows332864 -Node: Point335397 -Node: Window Hierarchy336676 -Node: The Window Object341128 -Node: The Redisplay Mechanism344565 -Node: Critical Redisplay Sections345357 -Node: Line Start Cache346344 -Node: Redisplay Piece by Piece349580 -Node: Extents351617 -Node: Introduction to Extents352151 -Node: Extent Ordering353293 -Node: Format of the Extent Info354534 -Node: Zero-Length Extents356421 -Node: Mathematics of Extent Ordering357821 -Node: Extent Fragments362578 -Node: Faces363664 -Node: Glyphs363780 -Node: Specifiers370413 -Node: Menus370542 -Node: Subprocesses372800 -Node: Interface to the X Window System374786 -Node: Lucid Widget Library375067 -Node: Generic Widget Interface376358 -Node: Scrollbars379917 -Node: Menubars380060 -Node: Checkboxes and Radio Buttons380203 -Node: Progress Bars380389 -Node: Tab Controls380549 -Node: Index380670 +Node: A History of Emacs7052 +Node: Through Version 188577 +Node: Lucid Emacs11998 +Node: GNU Emacs 1916042 +Node: GNU Emacs 2018225 +Node: XEmacs18652 +Node: XEmacs From the Outside25764 +Node: The Lisp Language27531 +Node: XEmacs From the Perspective of Building37074 +Node: XEmacs From the Inside43199 +Node: The XEmacs Object System (Abstractly Speaking)51581 +Node: How Lisp Objects Are Represented in C65667 +Node: Rules When Writing New C Code70344 +Node: General Coding Rules71207 +Node: Writing Lisp Primitives76979 +Node: Writing Good Comments88141 +Node: Adding Global Lisp Variables91680 +Node: Proper Use of Unsigned Types95329 +Node: Coding for Mule96579 +Node: Character-Related Data Types97558 +Node: Working With Character and Byte Positions100531 +Node: Conversion to and from External Data104296 +Node: General Guidelines for Writing Mule-Aware Code110437 +Node: An Example of Mule-Aware Code113125 +Node: Techniques for XEmacs Developers115106 +Node: A Summary of the Various XEmacs Modules123053 +Node: Low-Level Modules123873 +Node: Basic Lisp Modules131286 +Node: Modules for Standard Editing Operations137880 +Node: Editor-Level Control Flow Modules143768 +Node: Modules for the Basic Displayable Lisp Objects147279 +Node: Modules for other Display-Related Lisp Objects150232 +Node: Modules for the Redisplay Mechanism151573 +Node: Modules for Interfacing with the File System153945 +Node: Modules for Other Aspects of the Lisp Interpreter and Object System157643 +Node: Modules for Interfacing with the Operating System163096 +Node: Modules for Interfacing with X Windows170652 +Node: Modules for Internationalization174135 +Node: Allocation of Objects in XEmacs Lisp176772 +Node: Introduction to Allocation177293 +Node: Garbage Collection180934 +Node: GCPROing182090 +Node: Garbage Collection - Step by Step189094 +Node: Invocation189486 +Node: garbage_collect_1192457 +Node: mark_object201939 +Node: gc_sweep203751 +Node: sweep_lcrecords_1208814 +Node: compact_string_chars209809 +Node: sweep_strings211989 +Node: sweep_bit_vectors_1212954 +Node: Integers and Characters213630 +Node: Allocation from Frob Blocks214382 +Node: lrecords215986 +Node: Low-level allocation228212 +Node: Cons232319 +Node: Vector233045 +Node: Bit Vector233622 +Node: Symbol234115 +Node: Marker234469 +Node: String235024 +Node: Compiled Function238637 +Node: Dumping238806 +Node: Overview241027 +Node: Data descriptions241581 +Node: Dumping phase243586 +Node: Object inventory243989 +Node: Address allocation246903 +Node: The header248292 +Node: Data dumping248737 +Node: Pointers dumping249398 +Node: Reloading phase250788 +Node: Remaining issues252342 +Node: Events and the Event Loop253303 +Node: Introduction to Events253753 +Node: Main Loop255668 +Node: Specifics of the Event Gathering Mechanism259243 +Node: Specifics About the Emacs Event271696 +Node: The Event Stream Callback Routines271951 +Node: Other Event Loop Functions272196 +Node: Converting Events273336 +Node: Dispatching Events; The Command Builder273945 +Node: Evaluation; Stack Frames; Bindings274180 +Node: Evaluation274522 +Node: Dynamic Binding; The specbinding Stack; Unwind-Protects281034 +Node: Simple Special Forms283418 +Node: Catch and Throw284201 +Node: Symbols and Variables286776 +Node: Introduction to Symbols287040 +Node: Obarrays288078 +Node: Symbol Values291611 +Node: Buffers and Textual Representation293899 +Node: Introduction to Buffers294557 +Node: The Text in a Buffer297220 +Node: Buffer Lists304370 +Node: Markers and Extents306321 +Node: Bufbytes and Emchars308586 +Node: The Buffer Object308801 +Node: MULE Character Sets and Encodings312281 +Node: Character Sets313343 +Node: Encodings316786 +Node: Japanese EUC (Extended Unix Code)317853 +Node: JIS7318667 +Node: Internal Mule Encodings320017 +Node: Internal String Encoding321847 +Node: Internal Character Encoding323960 +Node: CCL325684 +Node: The Lisp Reader and Compiler332437 +Node: Lstreams332650 +Node: Creating an Lstream333681 +Node: Lstream Types334891 +Node: Lstream Functions335143 +Node: Lstream Methods338709 +Node: Consoles; Devices; Frames; Windows341851 +Node: Introduction to Consoles; Devices; Frames; Windows342166 +Node: Point344656 +Node: Window Hierarchy345935 +Node: The Window Object350387 +Node: The Redisplay Mechanism353824 +Node: Critical Redisplay Sections354616 +Node: Line Start Cache355571 +Node: Redisplay Piece by Piece358807 +Node: Extents360844 +Node: Introduction to Extents361378 +Node: Extent Ordering362504 +Node: Format of the Extent Info363745 +Node: Zero-Length Extents365632 +Node: Mathematics of Extent Ordering367032 +Node: Extent Fragments371789 +Node: Faces372875 +Node: Glyphs372991 +Node: Specifiers379624 +Node: Menus379753 +Node: Subprocesses382011 +Node: Interface to the X Window System383997 +Node: Lucid Widget Library384278 +Node: Generic Widget Interface385569 +Node: Scrollbars389128 +Node: Menubars389271 +Node: Checkboxes and Radio Buttons389414 +Node: Progress Bars389600 +Node: Tab Controls389760 +Node: Index389881  End Tag Table diff --git a/info/internals.info-1 b/info/internals.info-1 index 880768a..7a33f6b 100644 --- a/info/internals.info-1 +++ b/info/internals.info-1 @@ -40,7 +40,8 @@ Foundation instead of in the original English.  File: internals.info, Node: Top, Next: A History of Emacs, Prev: (dir), Up: (dir) - This Info file contains v1.0 of the XEmacs Internals Manual. + This Info file contains v1.4 of the XEmacs Internals Manual, March +2001. * Menu: @@ -270,7 +271,7 @@ language developed at MIT that underlies Emacs.) * XEmacs:: The continuation of Lucid Emacs.  -File: internals.info, Node: Through Version 18, Next: Lucid Emacs, Prev: A History of Emacs, Up: A History of Emacs +File: internals.info, Node: Through Version 18, Next: Lucid Emacs, Up: A History of Emacs Through Version 18 ================== @@ -413,7 +414,7 @@ release their own version of Emacs, which became Lucid Emacs 19.0. Sexton, and Eric Benson, and the work was later taken over by Jamie Zawinski, who became "Mr. Lucid Emacs" for many releases. - A time line for Lucid Emacs/XEmacs is + A time line for Lucid Emacs is * version 19.0 shipped with Energize 1.0, April 1992. @@ -458,7 +459,41 @@ Zawinski, who became "Mr. Lucid Emacs" for many releases. * version 19.16 released October 31, 1997. * version 20.3 (the first stable version of XEmacs 20.x) released - November 30, 1997. version 20.4 released February 28, 1998. + November 30, 1997. + + * version 20.4 released February 28, 1998. + + * version 21.1.2 released May 14, 1999. (The version naming scheme + was changed at this point: [a] the second version number is odd + for stable versions, even for beta versions; [b] a third version + number is added, replacing the "beta xxx" ending for beta versions + and allowing for periodic maintenance releases for stable + versions. Therefore, 21.0 was never "officially" released; + similarly for 21.2, etc.) + + * version 21.1.3 released June 26, 1999. + + * version 21.1.4 released July 8, 1999. + + * version 21.1.6 released August 14, 1999. (There was no 21.1.5.) + + * version 21.1.7 released September 26, 1999. + + * version 21.1.8 released November 2, 1999. + + * version 21.1.9 released February 13, 2000. + + * version 21.1.10 released May 7, 2000. + + * version 21.1.10a released June 24, 2000. + + * version 21.1.11 released July 18, 2000. + + * version 21.1.12 released August 5, 2000. + + * version 21.1.13 released January 7, 2001. + + * version 21.1.14 released January 27, 2001.  File: internals.info, Node: GNU Emacs 19, Next: GNU Emacs 20, Prev: Lucid Emacs, Up: A History of Emacs @@ -608,6 +643,155 @@ have consistently failed. A more detailed history is contained in the XEmacs About page. + A time line for XEmacs is + + * version 19.11 (first XEmacs) released September 13, 1994. + + * version 19.12 released June 23, 1995. + + * version 19.13 released September 1, 1995. + + * version 19.14 released June 23, 1996. + + * version 20.0 released February 9, 1997. + + * version 19.15 released March 28, 1997. + + * version 20.1 (not released to the net) April 15, 1997. + + * version 20.2 released May 16, 1997. + + * version 19.16 released October 31, 1997. + + * version 20.3 (the first stable version of XEmacs 20.x) released + November 30, 1997. + + * version 20.4 released February 28, 1998. + + * version 21.0.60 released December 10, 1998. (The version naming + scheme was changed at this point: [a] the second version number is + odd for stable versions, even for beta versions; [b] a third + version number is added, replacing the "beta xxx" ending for beta + versions and allowing for periodic maintenance releases for stable + versions. Therefore, 21.0 was never "officially" released; + similarly for 21.2, etc.) + + * version 21.0.61 released January 4, 1999. + + * version 21.0.63 released February 3, 1999. + + * version 21.0.64 released March 1, 1999. + + * version 21.0.65 released March 5, 1999. + + * version 21.0.66 released March 12, 1999. + + * version 21.0.67 released March 25, 1999. + + * version 21.1.2 released May 14, 1999. (This is the followup to + 21.0.67. The second version number was bumped to indicate the + beginning of the "stable" series.) + + * version 21.1.3 released June 26, 1999. + + * version 21.1.4 released July 8, 1999. + + * version 21.1.6 released August 14, 1999. (There was no 21.1.5.) + + * version 21.1.7 released September 26, 1999. + + * version 21.1.8 released November 2, 1999. + + * version 21.1.9 released February 13, 2000. + + * version 21.1.10 released May 7, 2000. + + * version 21.1.10a released June 24, 2000. + + * version 21.1.11 released July 18, 2000. + + * version 21.1.12 released August 5, 2000. + + * version 21.1.13 released January 7, 2001. + + * version 21.1.14 released January 27, 2001. + + * version 21.2.9 released February 3, 1999. + + * version 21.2.10 released February 5, 1999. + + * version 21.2.11 released March 1, 1999. + + * version 21.2.12 released March 5, 1999. + + * version 21.2.13 released March 12, 1999. + + * version 21.2.14 released May 14, 1999. + + * version 21.2.15 released June 4, 1999. + + * version 21.2.16 released June 11, 1999. + + * version 21.2.17 released June 22, 1999. + + * version 21.2.18 released July 14, 1999. + + * version 21.2.19 released July 30, 1999. + + * version 21.2.20 released November 10, 1999. + + * version 21.2.21 released November 28, 1999. + + * version 21.2.22 released November 29, 1999. + + * version 21.2.23 released December 7, 1999. + + * version 21.2.24 released December 14, 1999. + + * version 21.2.25 released December 24, 1999. + + * version 21.2.26 released December 31, 1999. + + * version 21.2.27 released January 18, 2000. + + * version 21.2.28 released February 7, 2000. + + * version 21.2.29 released February 16, 2000. + + * version 21.2.30 released February 21, 2000. + + * version 21.2.31 released February 23, 2000. + + * version 21.2.32 released March 20, 2000. + + * version 21.2.33 released May 1, 2000. + + * version 21.2.34 released May 28, 2000. + + * version 21.2.35 released July 19, 2000. + + * version 21.2.36 released October 4, 2000. + + * version 21.2.37 released November 14, 2000. + + * version 21.2.38 released December 5, 2000. + + * version 21.2.39 released December 31, 2000. + + * version 21.2.40 released January 8, 2001. + + * version 21.2.41 released January 17, 2001. + + * version 21.2.42 released January 20, 2001. + + * version 21.2.43 released January 26, 2001. + + * version 21.2.44 released February 8, 2001. + + * version 21.2.45 released February 23, 2001. + + * version 21.2.46 released March 21, 2001. +  File: internals.info, Node: XEmacs From the Outside, Next: The Lisp Language, Prev: A History of Emacs, Up: Top diff --git a/info/internals.info-2 b/info/internals.info-2 index 0d0f625..805e7ef 100644 --- a/info/internals.info-2 +++ b/info/internals.info-2 @@ -489,12 +489,14 @@ situations, often in code far away from where the actual breakage is. * General Coding Rules:: * Writing Lisp Primitives:: +* Writing Good Comments:: * Adding Global Lisp Variables:: +* Proper Use of Unsigned Types:: * Coding for Mule:: * Techniques for XEmacs Developers::  -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 +File: internals.info, Node: General Coding Rules, Next: Writing Lisp Primitives, Up: Rules When Writing New C Code General Coding Rules ==================== @@ -605,7 +607,7 @@ macros `EXTERNAL_LIST_LOOP_DELETE_IF' and `LIST_LOOP_DELETE_IF' delete elements from a lisp list satisfying some predicate.  -File: internals.info, Node: Writing Lisp Primitives, Next: Adding Global Lisp Variables, Prev: General Coding Rules, Up: Rules When Writing New C Code +File: internals.info, Node: Writing Lisp Primitives, Next: Writing Good Comments, Prev: General Coding Rules, Up: Rules When Writing New C Code Writing Lisp Primitives ======================= @@ -835,7 +837,70 @@ arguments. They work by calling `Ffuncall'. contains the definitions for important macros and functions.  -File: internals.info, Node: Adding Global Lisp Variables, Next: Coding for Mule, Prev: Writing Lisp Primitives, Up: Rules When Writing New C Code +File: internals.info, Node: Writing Good Comments, Next: Adding Global Lisp Variables, Prev: Writing Lisp Primitives, Up: Rules When Writing New C Code + +Writing Good Comments +===================== + + Comments are a lifeline for programmers trying to understand tricky +code. In general, the less obvious it is what you are doing, the more +you need a comment, and the more detailed it needs to be. You should +always be on guard when you're writing code for stuff that's tricky, and +should constantly be putting yourself in someone else's shoes and asking +if that person could figure out without much difficulty what's going +on. (Assume they are a competent programmer who understands the +essentials of how the XEmacs code is structured but doesn't know much +about the module you're working on or any algorithms you're using.) If +you're not sure whether they would be able to, add a comment. Always +err on the side of more comments, rather than less. + + Generally, when making comments, there is no need to attribute them +with your name or initials. This especially goes for small, +easy-to-understand, non-opinionated ones. Also, comments indicating +where, when, and by whom a file was changed are _strongly_ discouraged, +and in general will be removed as they are discovered. This is exactly +what `ChangeLogs' are there for. However, it can occasionally be +useful to mark exactly where (but not when or by whom) changes are +made, particularly when making small changes to a file imported from +elsewhere. These marks help when later on a newer version of the file +is imported and the changes need to be merged. (If everything were +always kept in CVS, there would be no need for this. But in practice, +this often doesn't happen, or the CVS repository is later on lost or +unavailable to the person doing the update.) + + When putting in an explicit opinion in a comment, you should +_always_ attribute it with your name, and optionally the date. This +also goes for long, complex comments explaining in detail the workings +of something - by putting your name there, you make it possible for +someone who has questions about how that thing works to determine who +wrote the comment so they can write to them. Preferably, use your +actual name and not your initials, unless your initials are generally +recognized (e.g. `jwz'). You can use only your first name if it's +obvious who you are; otherwise, give first and last name. If you're +not a regular contributor, you might consider putting your email +address in - it may be in the ChangeLog, but after awhile ChangeLogs +have a tendency of disappearing or getting muddled. (E.g. your comment +may get copied somewhere else or even into another program, and +tracking down the proper ChangeLog may be very difficult.) + + If you come across an opinion that is not or no longer valid, or you +come across any comment that no longer applies but you want to keep it +around, enclose it in `[[ ' and ` ]]' marks and add a comment +afterwards explaining why the preceding comment is no longer valid. Put +your name on this comment, as explained above. + + Just as comments are a lifeline to programmers, incorrect comments +are death. If you come across an incorrect comment, *immediately* +correct it or flag it as incorrect, as described in the previous +paragraph. Whenever you work on a section of code, _always_ make sure +to update any comments to be correct - or, at the very least, flag them +as incorrect. + + To indicate a "todo" or other problem, use four pound signs - i.e. +`####'. + + +File: internals.info, Node: Adding Global Lisp Variables, Next: Proper Use of Unsigned Types, Prev: Writing Good Comments, Up: Rules When Writing New C Code Adding Global Lisp Variables ============================ @@ -898,7 +963,36 @@ and you will be the one who's unhappy when you can't figure out how your variable got overwritten.  -File: internals.info, Node: Coding for Mule, Next: Techniques for XEmacs Developers, Prev: Adding Global Lisp Variables, Up: Rules When Writing New C Code +File: internals.info, Node: Proper Use of Unsigned Types, Next: Coding for Mule, Prev: Adding Global Lisp Variables, Up: Rules When Writing New C Code + +Proper Use of Unsigned Types +============================ + + Avoid using `unsigned int' and `unsigned long' whenever possible. +Unsigned types are viral - any arithmetic or comparisons involving +mixed signed and unsigned types are automatically converted to +unsigned, which is almost certainly not what you want. Many subtle and +hard-to-find bugs are created by careless use of unsigned types. In +general, you should almost _never_ use an unsigned type to hold a +regular quantity of any sort. The only exceptions are + + 1. When there's a reasonable possibility you will actually need all + 32 or 64 bits to store the quantity. + + 2. When calling existing API's that require unsigned types. In this + case, you should still do all manipulation using signed types, and + do the conversion at the very threshold of the API call. + + 3. In existing code that you don't want to modify because you don't + maintain it. + + 4. In bit-field structures. + + Other reasonable uses of `unsigned int' and `unsigned long' are +representing non-quantities - e.g. bit-oriented flags and such. + + +File: internals.info, Node: Coding for Mule, Next: Techniques for XEmacs Developers, Prev: Proper Use of Unsigned Types, Up: Rules When Writing New C Code Coding for Mule =============== @@ -923,7 +1017,7 @@ of code generalization for future I18N work. * An Example of Mule-Aware Code::  -File: internals.info, Node: Character-Related Data Types, Next: Working With Character and Byte Positions, Prev: Coding for Mule, Up: Coding for Mule +File: internals.info, Node: Character-Related Data Types, Next: Working With Character and Byte Positions, Up: Coding for Mule Character-Related Data Types ---------------------------- @@ -993,102 +1087,3 @@ glance at the declaration can tell the intended use of the variable. is the distance between two `Extbyte's. Extbytes and Extcounts are not all that frequent in XEmacs code. - -File: internals.info, Node: Working With Character and Byte Positions, Next: Conversion to and from External Data, Prev: Character-Related Data Types, Up: Coding for Mule - -Working With Character and Byte Positions ------------------------------------------ - - Now that we have defined the basic character-related types, we can -look at the macros and functions designed for work with them and for -conversion between them. Most of these macros are defined in -`buffer.h', and we don't discuss all of them here, but only the most -important ones. Examining the existing code is the best way to learn -about them. - -`MAX_EMCHAR_LEN' - This preprocessor constant is the maximum number of buffer bytes to - represent an Emacs character in the variable width internal - encoding. It is useful when allocating temporary strings to keep - a known number of characters. For instance: - - { - Charcount cclen; - ... - { - /* Allocate place for CCLEN characters. */ - Bufbyte *buf = (Bufbyte *)alloca (cclen * MAX_EMCHAR_LEN); - ... - - If you followed the previous section, you can guess that, - logically, multiplying a `Charcount' value with `MAX_EMCHAR_LEN' - produces a `Bytecount' value. - - In the current Mule implementation, `MAX_EMCHAR_LEN' equals 4. - Without Mule, it is 1. - -`charptr_emchar' -`set_charptr_emchar' - The `charptr_emchar' macro takes a `Bufbyte' pointer and returns - the `Emchar' stored at that position. If it were a function, its - prototype would be: - - Emchar charptr_emchar (Bufbyte *p); - - `set_charptr_emchar' stores an `Emchar' to the specified byte - position. It returns the number of bytes stored: - - Bytecount set_charptr_emchar (Bufbyte *p, Emchar c); - - It is important to note that `set_charptr_emchar' is safe only for - appending a character at the end of a buffer, not for overwriting a - character in the middle. This is because the width of characters - varies, and `set_charptr_emchar' cannot resize the string if it - writes, say, a two-byte character where a single-byte character - used to reside. - - A typical use of `set_charptr_emchar' can be demonstrated by this - example, which copies characters from buffer BUF to a temporary - string of Bufbytes. - - { - Bufpos pos; - for (pos = beg; pos < end; pos++) - { - Emchar c = BUF_FETCH_CHAR (buf, pos); - p += set_charptr_emchar (buf, c); - } - } - - Note how `set_charptr_emchar' is used to store the `Emchar' and - increment the counter, at the same time. - -`INC_CHARPTR' -`DEC_CHARPTR' - These two macros increment and decrement a `Bufbyte' pointer, - respectively. They will adjust the pointer by the appropriate - number of bytes according to the byte length of the character - stored there. Both macros assume that the memory address is - located at the beginning of a valid character. - - Without Mule support, `INC_CHARPTR (p)' and `DEC_CHARPTR (p)' - simply expand to `p++' and `p--', respectively. - -`bytecount_to_charcount' - Given a pointer to a text string and a length in bytes, return the - equivalent length in characters. - - Charcount bytecount_to_charcount (Bufbyte *p, Bytecount bc); - -`charcount_to_bytecount' - Given a pointer to a text string and a length in characters, - return the equivalent length in bytes. - - Bytecount charcount_to_bytecount (Bufbyte *p, Charcount cc); - -`charptr_n_addr' - Return a pointer to the beginning of the character offset CC (in - characters) from P. - - Bufbyte *charptr_n_addr (Bufbyte *p, Charcount cc); - diff --git a/info/internals.info-3 b/info/internals.info-3 index 6cc8d80..058ad77 100644 --- a/info/internals.info-3 +++ b/info/internals.info-3 @@ -38,6 +38,105 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: internals.info, Node: Working With Character and Byte Positions, Next: Conversion to and from External Data, Prev: Character-Related Data Types, Up: Coding for Mule + +Working With Character and Byte Positions +----------------------------------------- + + Now that we have defined the basic character-related types, we can +look at the macros and functions designed for work with them and for +conversion between them. Most of these macros are defined in +`buffer.h', and we don't discuss all of them here, but only the most +important ones. Examining the existing code is the best way to learn +about them. + +`MAX_EMCHAR_LEN' + This preprocessor constant is the maximum number of buffer bytes to + represent an Emacs character in the variable width internal + encoding. It is useful when allocating temporary strings to keep + a known number of characters. For instance: + + { + Charcount cclen; + ... + { + /* Allocate place for CCLEN characters. */ + Bufbyte *buf = (Bufbyte *)alloca (cclen * MAX_EMCHAR_LEN); + ... + + If you followed the previous section, you can guess that, + logically, multiplying a `Charcount' value with `MAX_EMCHAR_LEN' + produces a `Bytecount' value. + + In the current Mule implementation, `MAX_EMCHAR_LEN' equals 4. + Without Mule, it is 1. + +`charptr_emchar' +`set_charptr_emchar' + The `charptr_emchar' macro takes a `Bufbyte' pointer and returns + the `Emchar' stored at that position. If it were a function, its + prototype would be: + + Emchar charptr_emchar (Bufbyte *p); + + `set_charptr_emchar' stores an `Emchar' to the specified byte + position. It returns the number of bytes stored: + + Bytecount set_charptr_emchar (Bufbyte *p, Emchar c); + + It is important to note that `set_charptr_emchar' is safe only for + appending a character at the end of a buffer, not for overwriting a + character in the middle. This is because the width of characters + varies, and `set_charptr_emchar' cannot resize the string if it + writes, say, a two-byte character where a single-byte character + used to reside. + + A typical use of `set_charptr_emchar' can be demonstrated by this + example, which copies characters from buffer BUF to a temporary + string of Bufbytes. + + { + Bufpos pos; + for (pos = beg; pos < end; pos++) + { + Emchar c = BUF_FETCH_CHAR (buf, pos); + p += set_charptr_emchar (buf, c); + } + } + + Note how `set_charptr_emchar' is used to store the `Emchar' and + increment the counter, at the same time. + +`INC_CHARPTR' +`DEC_CHARPTR' + These two macros increment and decrement a `Bufbyte' pointer, + respectively. They will adjust the pointer by the appropriate + number of bytes according to the byte length of the character + stored there. Both macros assume that the memory address is + located at the beginning of a valid character. + + Without Mule support, `INC_CHARPTR (p)' and `DEC_CHARPTR (p)' + simply expand to `p++' and `p--', respectively. + +`bytecount_to_charcount' + Given a pointer to a text string and a length in bytes, return the + equivalent length in characters. + + Charcount bytecount_to_charcount (Bufbyte *p, Bytecount bc); + +`charcount_to_bytecount' + Given a pointer to a text string and a length in characters, + return the equivalent length in bytes. + + Bytecount charcount_to_bytecount (Bufbyte *p, Charcount cc); + +`charptr_n_addr' + Return a pointer to the beginning of the character offset CC (in + characters) from P. + + Bufbyte *charptr_n_addr (Bufbyte *p, Charcount cc); + + File: internals.info, Node: Conversion to and from External Data, Next: General Guidelines for Writing Mule-Aware Code, Prev: Working With Character and Byte Positions, Up: Coding for Mule Conversion to and from External Data @@ -499,7 +598,7 @@ A Summary of the Various XEmacs Modules * Modules for Internationalization::  -File: internals.info, Node: Low-Level Modules, Next: Basic Lisp Modules, Prev: A Summary of the Various XEmacs Modules, Up: A Summary of the Various XEmacs Modules +File: internals.info, Node: Low-Level Modules, Next: Basic Lisp Modules, Up: A Summary of the Various XEmacs Modules Low-Level Modules ================= @@ -1112,125 +1211,3 @@ is no device-type-specific code here; all of that code is part of the redisplay mechanism or the code for particular object types such as scrollbars. - -File: internals.info, Node: Modules for other Display-Related Lisp Objects, Next: Modules for the Redisplay Mechanism, Prev: Modules for the Basic Displayable Lisp Objects, Up: A Summary of the Various XEmacs Modules - -Modules for other Display-Related Lisp Objects -============================================== - - faces.c - faces.h - - bitmaps.h - glyphs-eimage.c - glyphs-msw.c - glyphs-msw.h - glyphs-widget.c - glyphs-x.c - glyphs-x.h - glyphs.c - glyphs.h - - objects-msw.c - objects-msw.h - objects-tty.c - objects-tty.h - objects-x.c - objects-x.h - objects.c - objects.h - - menubar-msw.c - menubar-msw.h - menubar-x.c - menubar.c - menubar.h - - scrollbar-msw.c - scrollbar-msw.h - scrollbar-x.c - scrollbar-x.h - scrollbar.c - scrollbar.h - - toolbar-msw.c - toolbar-x.c - toolbar.c - toolbar.h - - font-lock.c - - This file provides C support for syntax highlighting--i.e. -highlighting different syntactic constructs of a source file in -different colors, for easy reading. The C support is provided so that -this is fast. - - dgif_lib.c - gif_err.c - gif_lib.h - gifalloc.c - - These modules decode GIF-format image files, for use with glyphs. -These files were removed due to Unisys patent infringement concerns. - - -File: internals.info, Node: Modules for the Redisplay Mechanism, Next: Modules for Interfacing with the File System, Prev: Modules for other Display-Related Lisp Objects, Up: A Summary of the Various XEmacs Modules - -Modules for the Redisplay Mechanism -=================================== - - redisplay-output.c - redisplay-msw.c - redisplay-tty.c - redisplay-x.c - redisplay.c - redisplay.h - - These files provide the redisplay mechanism. As with many other -subsystems in XEmacs, there is a clean separation between the general -and device-specific support. - - `redisplay.c' contains the bulk of the redisplay engine. These -functions update the redisplay structures (which describe how the screen -is to appear) to reflect any changes made to the state of any -displayable objects (buffer, frame, window, etc.) since the last time -that redisplay was called. These functions are highly optimized to -avoid doing more work than necessary (since redisplay is called -extremely often and is potentially a huge time sink), and depend heavily -on notifications from the objects themselves that changes have occurred, -so that redisplay doesn't explicitly have to check each possible object. -The redisplay mechanism also contains a great deal of caching to further -speed things up; some of this caching is contained within the various -displayable objects. - - `redisplay-output.c' goes through the redisplay structures and -converts them into calls to device-specific methods to actually output -the screen changes. - - `redisplay-x.c' and `redisplay-tty.c' are two implementations of -these redisplay output methods, for X frames and TTY frames, -respectively. - - indent.c - - This module contains various functions and Lisp primitives for -converting between buffer positions and screen positions. These -functions call the redisplay mechanism to do most of the work, and then -examine the redisplay structures to get the necessary information. This -module needs work. - - termcap.c - terminfo.c - tparam.c - - These files contain functions for working with the termcap -(BSD-style) and terminfo (System V style) databases of terminal -capabilities and escape sequences, used when XEmacs is displaying in a -TTY. - - cm.c - cm.h - - These files provide some miscellaneous TTY-output functions and -should probably be merged into `redisplay-tty.c'. - diff --git a/info/internals.info-4 b/info/internals.info-4 index c717881..2ce3623 100644 --- a/info/internals.info-4 +++ b/info/internals.info-4 @@ -38,6 +38,128 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: internals.info, Node: Modules for other Display-Related Lisp Objects, Next: Modules for the Redisplay Mechanism, Prev: Modules for the Basic Displayable Lisp Objects, Up: A Summary of the Various XEmacs Modules + +Modules for other Display-Related Lisp Objects +============================================== + + faces.c + faces.h + + bitmaps.h + glyphs-eimage.c + glyphs-msw.c + glyphs-msw.h + glyphs-widget.c + glyphs-x.c + glyphs-x.h + glyphs.c + glyphs.h + + objects-msw.c + objects-msw.h + objects-tty.c + objects-tty.h + objects-x.c + objects-x.h + objects.c + objects.h + + menubar-msw.c + menubar-msw.h + menubar-x.c + menubar.c + menubar.h + + scrollbar-msw.c + scrollbar-msw.h + scrollbar-x.c + scrollbar-x.h + scrollbar.c + scrollbar.h + + toolbar-msw.c + toolbar-x.c + toolbar.c + toolbar.h + + font-lock.c + + This file provides C support for syntax highlighting--i.e. +highlighting different syntactic constructs of a source file in +different colors, for easy reading. The C support is provided so that +this is fast. + + dgif_lib.c + gif_err.c + gif_lib.h + gifalloc.c + + These modules decode GIF-format image files, for use with glyphs. +These files were removed due to Unisys patent infringement concerns. + + +File: internals.info, Node: Modules for the Redisplay Mechanism, Next: Modules for Interfacing with the File System, Prev: Modules for other Display-Related Lisp Objects, Up: A Summary of the Various XEmacs Modules + +Modules for the Redisplay Mechanism +=================================== + + redisplay-output.c + redisplay-msw.c + redisplay-tty.c + redisplay-x.c + redisplay.c + redisplay.h + + These files provide the redisplay mechanism. As with many other +subsystems in XEmacs, there is a clean separation between the general +and device-specific support. + + `redisplay.c' contains the bulk of the redisplay engine. These +functions update the redisplay structures (which describe how the screen +is to appear) to reflect any changes made to the state of any +displayable objects (buffer, frame, window, etc.) since the last time +that redisplay was called. These functions are highly optimized to +avoid doing more work than necessary (since redisplay is called +extremely often and is potentially a huge time sink), and depend heavily +on notifications from the objects themselves that changes have occurred, +so that redisplay doesn't explicitly have to check each possible object. +The redisplay mechanism also contains a great deal of caching to further +speed things up; some of this caching is contained within the various +displayable objects. + + `redisplay-output.c' goes through the redisplay structures and +converts them into calls to device-specific methods to actually output +the screen changes. + + `redisplay-x.c' and `redisplay-tty.c' are two implementations of +these redisplay output methods, for X frames and TTY frames, +respectively. + + indent.c + + This module contains various functions and Lisp primitives for +converting between buffer positions and screen positions. These +functions call the redisplay mechanism to do most of the work, and then +examine the redisplay structures to get the necessary information. This +module needs work. + + termcap.c + terminfo.c + tparam.c + + These files contain functions for working with the termcap +(BSD-style) and terminfo (System V style) databases of terminal +capabilities and escape sequences, used when XEmacs is displaying in a +TTY. + + cm.c + cm.h + + These files provide some miscellaneous TTY-output functions and +should probably be merged into `redisplay-tty.c'. + + File: internals.info, Node: Modules for Interfacing with the File System, Next: Modules for Other Aspects of the Lisp Interpreter and Object System, Prev: Modules for the Redisplay Mechanism, Up: A Summary of the Various XEmacs Modules Modules for Interfacing with the File System @@ -618,7 +740,7 @@ Allocation of Objects in XEmacs Lisp * Compiled Function::  -File: internals.info, Node: Introduction to Allocation, Next: Garbage Collection, Prev: Allocation of Objects in XEmacs Lisp, Up: Allocation of Objects in XEmacs Lisp +File: internals.info, Node: Introduction to Allocation, Next: Garbage Collection, Up: Allocation of Objects in XEmacs Lisp Introduction to Allocation ========================== @@ -863,7 +985,7 @@ Garbage Collection - Step by Step * sweep_bit_vectors_1::  -File: internals.info, Node: Invocation, Next: garbage_collect_1, Prev: Garbage Collection - Step by Step, Up: Garbage Collection - Step by Step +File: internals.info, Node: Invocation, Next: garbage_collect_1, Up: Garbage Collection - Step by Step Invocation ---------- @@ -918,219 +1040,3 @@ example `or', `and', `if', `cond', `while', `setq', etc., miscellaneous signals, as for example the ones raised by every `QUIT'-macro triggered after pressing Ctrl-g. - -File: internals.info, Node: garbage_collect_1, Next: mark_object, Prev: Invocation, Up: Garbage Collection - Step by Step - -`garbage_collect_1' -------------------- - - We can now describe exactly what happens after the invocation takes -place. - 1. There are several cases in which the garbage collector is left - immediately: when we are already garbage collecting - (`gc_in_progress'), when the garbage collection is somehow - forbidden (`gc_currently_forbidden'), when we are currently - displaying something (`in_display') or when we are preparing for - the armageddon of the whole system (`preparing_for_armageddon'). - - 2. Next the correct frame in which to put all the output occurring - during garbage collecting is determined. In order to be able to - restore the old display's state after displaying the message, some - data about the current cursor position has to be saved. The - variables `pre_gc_cursor' and `cursor_changed' take care of that. - - 3. The state of `gc_currently_forbidden' must be restored after the - garbage collection, no matter what happens during the process. We - accomplish this by `record_unwind_protect'ing the suitable function - `restore_gc_inhibit' together with the current value of - `gc_currently_forbidden'. - - 4. If we are concurrently running an interactive xemacs session, the - next step is simply to show the garbage collector's cursor/message. - - 5. The following steps are the intrinsic steps of the garbage - collector, therefore `gc_in_progress' is set. - - 6. For debugging purposes, it is possible to copy the current C stack - frame. However, this seems to be a currently unused feature. - - 7. 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 (`clear_event_resource') and for specifiers - (`cleanup_specifiers'). - - 8. Now the mark phase begins and marks all accessible elements. In - order to start from all slots that serve as roots of - accessibility, the function `mark_object' is called for each root - individually to go out from there to mark all reachable objects. - All roots that are traversed are shown in their processed order: - * all constant symbols and static variables that are registered - via `staticpro' in the dynarr `staticpros'. *Note Adding - Global Lisp Variables::. - - * all Lisp objects that are created in C functions and that - must be protected from freeing them. They are registered in - the global list `gcprolist'. *Note GCPROing::. - - * all local variables (i.e. their name fields `symbol' and old - values `old_values') that are bound during the evaluation by - the Lisp engine. They are stored in `specbinding' structs - pushed on a stack called `specpdl'. *Note Dynamic Binding; - The specbinding Stack; Unwind-Protects::. - - * all catch blocks that the Lisp engine encounters during the - evaluation cause the creation of structs `catchtag' inserted - in the list `catchlist'. Their tag (`tag') and value (`val' - fields are freshly created objects and therefore have to be - marked. *Note Catch and Throw::. - - * every function application pushes new structs `backtrace' on - the call stack of the Lisp engine (`backtrace_list'). The - unique parts that have to be marked are the fields for each - function (`function') and all their arguments (`args'). - *Note Evaluation::. - - * all objects that are used by the redisplay engine that must - not be freed are marked by a special function called - `mark_redisplay' (in `redisplay.c'). - - * all objects created for profiling purposes are allocated by C - functions instead of using the lisp allocation mechanisms. In - order to receive the right ones during the sweep phase, they - also have to be marked manually. That is done by the function - `mark_profiling_info' - - 9. Hash tables in XEmacs belong to a kind of special objects that - make use of a concept often called 'weak pointers'. To make a - long story short, these kind of pointers are not followed during - the estimation of the live objects during garbage collection. Any - object referenced only by weak pointers is collected anyway, and - the reference to it is cleared. In hash tables there are different - usage patterns of them, manifesting in different types of hash - tables, namely 'non-weak', 'weak', 'key-weak' and 'value-weak' - (internally also 'key-car-weak' and 'value-car-weak') hash tables, - each clearing entries depending on different conditions. More - information can be found in the documentation to the function - `make-hash-table'. - - Because there are complicated dependency rules about when and what - to mark while processing weak hash tables, the standard `marker' - method is only active if it is marking non-weak hash tables. As - soon as a weak component is in the table, the hash table entries - are ignored while marking. Instead their marking is done each - separately by the function `finish_marking_weak_hash_tables'. This - function iterates over each hash table entry `hentries' for each - weak hash table in `Vall_weak_hash_tables'. Depending on the type - of a table, the appropriate action is performed. If a table is - acting as `HASH_TABLE_KEY_WEAK', and a key already marked, - everything reachable from the `value' component is marked. If it is - acting as a `HASH_TABLE_VALUE_WEAK' and the value component is - already marked, the marking starts beginning only from the `key' - component. If it is a `HASH_TABLE_KEY_CAR_WEAK' and the car of - the key entry is already marked, we mark both the `key' and - `value' components. Finally, if the table is of the type - `HASH_TABLE_VALUE_CAR_WEAK' and the car of the value components is - already marked, again both the `key' and the `value' components - get marked. - - Again, there are lists with comparable properties called weak - lists. There exist different peculiarities of their types called - `simple', `assoc', `key-assoc' and `value-assoc'. You can find - further details about them in the description to the function - `make-weak-list'. The scheme of their marking is similar: all weak - lists are listed in `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 the rest has been marked - completely. Again, depending on the special type of the weak list, - our jobs differ. If it is a `WEAK_LIST_SIMPLE' and the elem is - marked, we mark the `cons' part. If it is a `WEAK_LIST_ASSOC' and - not a pair or a pair with both marked car and cdr, we mark the - `cons' and the `elem'. If it is a `WEAK_LIST_KEY_ASSOC' and not a - pair or a pair with a marked car of the elem, we mark the `cons' - and the `elem'. Finally, if it is a `WEAK_LIST_VALUE_ASSOC' and - not a pair or a pair with a marked cdr of the elem, we mark both - the `cons' and the `elem'. - - Since, by marking objects in reach from weak hash tables and weak - lists, other objects could get marked, this perhaps implies - further marking of other weak objects, both finishing functions - are redone as long as yet unmarked objects get freshly marked. - - 10. After completing the special marking for the weak hash tables and - for the weak lists, all entries that point to objects that are - going to be swept in the further process are useless, and - therefore have to be removed from the table or the list. - - The function `prune_weak_hash_tables' does the job for weak hash - tables. Totally unmarked hash tables are removed from the list - `Vall_weak_hash_tables'. The other ones are treated more carefully - by scanning over all entries and removing one as soon as one of - the components `key' and `value' is unmarked. - - The same idea applies to the weak lists. It is accomplished by - `prune_weak_lists': An unmarked list is pruned from - `Vall_weak_lists' immediately. A marked list is treated more - carefully by going over it and removing just the unmarked pairs. - - 11. The function `prune_specifiers' checks all listed specifiers held - in `Vall_specifiers' and removes the ones from the lists that are - unmarked. - - 12. All syntax tables are stored in a list called - `Vall_syntax_tables'. The function `prune_syntax_tables' walks - through it and unlinks the tables that are unmarked. - - 13. Next, we will attack the complete sweeping - the function - `gc_sweep' which holds the predominance. - - 14. First, all the variables with respect to garbage collection are - reset. `consing_since_gc' - the counter of the created cells since - the last garbage collection - is set back to 0, and - `gc_in_progress' is not `true' anymore. - - 15. In case the session is interactive, the displayed cursor and - message are removed again. - - 16. The state of `gc_inhibit' is restored to the former value by - unwinding the stack. - - 17. A small memory reserve is always held back that can be reached by - `breathing_space'. If nothing more is left, we create a new reserve - and exit. - - -File: internals.info, Node: mark_object, Next: gc_sweep, Prev: garbage_collect_1, Up: Garbage Collection - Step by Step - -`mark_object' -------------- - - The first thing that is checked while marking an object is whether -the object is a real Lisp object `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. *Note How Lisp Objects Are -Represented in C::. - - The second case is the one we have to handle. It is the one when we -are dealing with a pointer to a Lisp object. But, there exist also three -possibilities, that prevent us from doing anything while marking: The -object is read only which prevents it from being garbage collected, -i.e. marked (`C_READONLY_RECORD_HEADER'). The object in question is -already marked, and need not be marked for the second time (checked by -`MARKED_RECORD_HEADER_P'). If it is a special, unmarkable object -(`UNMARKABLE_RECORD_HEADER_P', apparently, these are objects that sit -in some const space, and can therefore not be marked, see -`this_one_is_unmarkable' in `alloc.c'). - - Now, the actual marking is feasible. We do so by once using the macro -`MARK_RECORD_HEADER' to mark the object itself (actually the special -flag in the lrecord header), and calling its special marker "method" -`marker' if available. The marker method marks every other object that -is in reach from our current object. Note, that these marker methods -should not call `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 `mark_object' process beginning with this next -object. - diff --git a/info/internals.info-5 b/info/internals.info-5 index af423f8..c91480a 100644 --- a/info/internals.info-5 +++ b/info/internals.info-5 @@ -38,6 +38,222 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: internals.info, Node: garbage_collect_1, Next: mark_object, Prev: Invocation, Up: Garbage Collection - Step by Step + +`garbage_collect_1' +------------------- + + We can now describe exactly what happens after the invocation takes +place. + 1. There are several cases in which the garbage collector is left + immediately: when we are already garbage collecting + (`gc_in_progress'), when the garbage collection is somehow + forbidden (`gc_currently_forbidden'), when we are currently + displaying something (`in_display') or when we are preparing for + the armageddon of the whole system (`preparing_for_armageddon'). + + 2. Next the correct frame in which to put all the output occurring + during garbage collecting is determined. In order to be able to + restore the old display's state after displaying the message, some + data about the current cursor position has to be saved. The + variables `pre_gc_cursor' and `cursor_changed' take care of that. + + 3. The state of `gc_currently_forbidden' must be restored after the + garbage collection, no matter what happens during the process. We + accomplish this by `record_unwind_protect'ing the suitable function + `restore_gc_inhibit' together with the current value of + `gc_currently_forbidden'. + + 4. If we are concurrently running an interactive xemacs session, the + next step is simply to show the garbage collector's cursor/message. + + 5. The following steps are the intrinsic steps of the garbage + collector, therefore `gc_in_progress' is set. + + 6. For debugging purposes, it is possible to copy the current C stack + frame. However, this seems to be a currently unused feature. + + 7. 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 (`clear_event_resource') and for specifiers + (`cleanup_specifiers'). + + 8. Now the mark phase begins and marks all accessible elements. In + order to start from all slots that serve as roots of + accessibility, the function `mark_object' is called for each root + individually to go out from there to mark all reachable objects. + All roots that are traversed are shown in their processed order: + * all constant symbols and static variables that are registered + via `staticpro' in the dynarr `staticpros'. *Note Adding + Global Lisp Variables::. + + * all Lisp objects that are created in C functions and that + must be protected from freeing them. They are registered in + the global list `gcprolist'. *Note GCPROing::. + + * all local variables (i.e. their name fields `symbol' and old + values `old_values') that are bound during the evaluation by + the Lisp engine. They are stored in `specbinding' structs + pushed on a stack called `specpdl'. *Note Dynamic Binding; + The specbinding Stack; Unwind-Protects::. + + * all catch blocks that the Lisp engine encounters during the + evaluation cause the creation of structs `catchtag' inserted + in the list `catchlist'. Their tag (`tag') and value (`val' + fields are freshly created objects and therefore have to be + marked. *Note Catch and Throw::. + + * every function application pushes new structs `backtrace' on + the call stack of the Lisp engine (`backtrace_list'). The + unique parts that have to be marked are the fields for each + function (`function') and all their arguments (`args'). + *Note Evaluation::. + + * all objects that are used by the redisplay engine that must + not be freed are marked by a special function called + `mark_redisplay' (in `redisplay.c'). + + * all objects created for profiling purposes are allocated by C + functions instead of using the lisp allocation mechanisms. In + order to receive the right ones during the sweep phase, they + also have to be marked manually. That is done by the function + `mark_profiling_info' + + 9. Hash tables in XEmacs belong to a kind of special objects that + make use of a concept often called 'weak pointers'. To make a + long story short, these kind of pointers are not followed during + the estimation of the live objects during garbage collection. Any + object referenced only by weak pointers is collected anyway, and + the reference to it is cleared. In hash tables there are different + usage patterns of them, manifesting in different types of hash + tables, namely 'non-weak', 'weak', 'key-weak' and 'value-weak' + (internally also 'key-car-weak' and 'value-car-weak') hash tables, + each clearing entries depending on different conditions. More + information can be found in the documentation to the function + `make-hash-table'. + + Because there are complicated dependency rules about when and what + to mark while processing weak hash tables, the standard `marker' + method is only active if it is marking non-weak hash tables. As + soon as a weak component is in the table, the hash table entries + are ignored while marking. Instead their marking is done each + separately by the function `finish_marking_weak_hash_tables'. This + function iterates over each hash table entry `hentries' for each + weak hash table in `Vall_weak_hash_tables'. Depending on the type + of a table, the appropriate action is performed. If a table is + acting as `HASH_TABLE_KEY_WEAK', and a key already marked, + everything reachable from the `value' component is marked. If it is + acting as a `HASH_TABLE_VALUE_WEAK' and the value component is + already marked, the marking starts beginning only from the `key' + component. If it is a `HASH_TABLE_KEY_CAR_WEAK' and the car of + the key entry is already marked, we mark both the `key' and + `value' components. Finally, if the table is of the type + `HASH_TABLE_VALUE_CAR_WEAK' and the car of the value components is + already marked, again both the `key' and the `value' components + get marked. + + Again, there are lists with comparable properties called weak + lists. There exist different peculiarities of their types called + `simple', `assoc', `key-assoc' and `value-assoc'. You can find + further details about them in the description to the function + `make-weak-list'. The scheme of their marking is similar: all weak + lists are listed in `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 the rest has been marked + completely. Again, depending on the special type of the weak list, + our jobs differ. If it is a `WEAK_LIST_SIMPLE' and the elem is + marked, we mark the `cons' part. If it is a `WEAK_LIST_ASSOC' and + not a pair or a pair with both marked car and cdr, we mark the + `cons' and the `elem'. If it is a `WEAK_LIST_KEY_ASSOC' and not a + pair or a pair with a marked car of the elem, we mark the `cons' + and the `elem'. Finally, if it is a `WEAK_LIST_VALUE_ASSOC' and + not a pair or a pair with a marked cdr of the elem, we mark both + the `cons' and the `elem'. + + Since, by marking objects in reach from weak hash tables and weak + lists, other objects could get marked, this perhaps implies + further marking of other weak objects, both finishing functions + are redone as long as yet unmarked objects get freshly marked. + + 10. After completing the special marking for the weak hash tables and + for the weak lists, all entries that point to objects that are + going to be swept in the further process are useless, and + therefore have to be removed from the table or the list. + + The function `prune_weak_hash_tables' does the job for weak hash + tables. Totally unmarked hash tables are removed from the list + `Vall_weak_hash_tables'. The other ones are treated more carefully + by scanning over all entries and removing one as soon as one of + the components `key' and `value' is unmarked. + + The same idea applies to the weak lists. It is accomplished by + `prune_weak_lists': An unmarked list is pruned from + `Vall_weak_lists' immediately. A marked list is treated more + carefully by going over it and removing just the unmarked pairs. + + 11. The function `prune_specifiers' checks all listed specifiers held + in `Vall_specifiers' and removes the ones from the lists that are + unmarked. + + 12. All syntax tables are stored in a list called + `Vall_syntax_tables'. The function `prune_syntax_tables' walks + through it and unlinks the tables that are unmarked. + + 13. Next, we will attack the complete sweeping - the function + `gc_sweep' which holds the predominance. + + 14. First, all the variables with respect to garbage collection are + reset. `consing_since_gc' - the counter of the created cells since + the last garbage collection - is set back to 0, and + `gc_in_progress' is not `true' anymore. + + 15. In case the session is interactive, the displayed cursor and + message are removed again. + + 16. The state of `gc_inhibit' is restored to the former value by + unwinding the stack. + + 17. A small memory reserve is always held back that can be reached by + `breathing_space'. If nothing more is left, we create a new reserve + and exit. + + +File: internals.info, Node: mark_object, Next: gc_sweep, Prev: garbage_collect_1, Up: Garbage Collection - Step by Step + +`mark_object' +------------- + + The first thing that is checked while marking an object is whether +the object is a real Lisp object `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. *Note How Lisp Objects Are +Represented in C::. + + The second case is the one we have to handle. It is the one when we +are dealing with a pointer to a Lisp object. But, there exist also three +possibilities, that prevent us from doing anything while marking: The +object is read only which prevents it from being garbage collected, +i.e. marked (`C_READONLY_RECORD_HEADER'). The object in question is +already marked, and need not be marked for the second time (checked by +`MARKED_RECORD_HEADER_P'). If it is a special, unmarkable object +(`UNMARKABLE_RECORD_HEADER_P', apparently, these are objects that sit +in some const space, and can therefore not be marked, see +`this_one_is_unmarkable' in `alloc.c'). + + Now, the actual marking is feasible. We do so by once using the macro +`MARK_RECORD_HEADER' to mark the object itself (actually the special +flag in the lrecord header), and calling its special marker "method" +`marker' if available. The marker method marks every other object that +is in reach from our current object. Note, that these marker methods +should not call `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 `mark_object' process beginning with this next +object. + + File: internals.info, Node: gc_sweep, Next: sweep_lcrecords_1, Prev: mark_object, Up: Garbage Collection - Step by Step `gc_sweep' @@ -771,7 +987,7 @@ without any system-specific hacks. * Remaining issues::  -File: internals.info, Node: Overview, Next: Data descriptions, Prev: Dumping, Up: Dumping +File: internals.info, Node: Overview, Next: Data descriptions, Up: Dumping Overview ======== @@ -786,306 +1002,3 @@ Overview starting address if needed, and reinitialize all pointers to this data. Also, rebuild all the quickly rebuildable data. - -File: internals.info, Node: Data descriptions, Next: Dumping phase, Prev: Overview, Up: Dumping - -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: - - 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 } - }; - - 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 `data'". The length of said data is -given by the expression `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 `plist' in the Lisp_String -structure". `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. - - -File: internals.info, Node: Dumping phase, Next: Reloading phase, Prev: Data descriptions, Up: Dumping - -Dumping phase -============= - - Dumping is done by calling the function pdump() (in dumper.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:: - - -File: internals.info, Node: Object inventory, Next: Address allocation, Prev: Dumping phase, Up: Dumping phase - -Object inventory ----------------- - - The first task is to build the list of the objects to dump. This -includes: - - * lisp objects - - * C structures - - We end up with one `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 `pdump_entry_list' structures -and can be enumerated thru either: - - 1. the `pdump_object_table', an array of `pdump_entry_list', one per - lrecord type, indexed by type number. - - 2. the `pdump_opaque_data_list', used for the opaque data which does - not include pointers, and hence does not need descriptions. - - 3. the `pdump_struct_table', which is a vector of - `struct_description'/`pdump_entry_list' pairs, used for non-opaque - C structures. - - This uses a marking strategy similar to the garbage collector. Some -differences though: - - 1. We do not use the mark bit (which does not exist for C structures - anyway); we use a big hash table instead. - - 2. 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. - - This is done by `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 `pdump_add_entry()' and looked up with -`pdump_get_entry()'. There is no need for entry removal. The hash -value is computed quite simply from the object pointer by -`pdump_make_hash()'. - - The roots for the marking are: - - 1. the `staticpro''ed variables (there is a special - `staticpro_nodump()' call for protected variables we do not want - to dump). - - 2. the variables registered via `dump_add_root_object' (`staticpro()' - is equivalent to `staticpro_nodump()' + `dump_add_root_object()'). - - 3. the variables registered via `dump_add_root_struct_ptr', each of - which points to a C structure. - - 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. - - -File: internals.info, Node: Address allocation, Next: The header, Prev: Object inventory, Up: Dumping phase - -Address allocation ------------------- - - The next step is to allocate the offsets of each of the objects in -the final dump file. This is done by `pdump_allocate_offset()' which -is called indirectly by `pdump_scan_by_alignment()'. - - The strategy to deal with alignment problems uses these facts: - - 1. real world alignment requirements are powers of two. - - 2. 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 an upper bound of the alignment requirements of a given - structure by looking at which power of two its size is a multiple. - - 3. the non-variant part of variable size lrecords has an alignment - requirement of 4. - - 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. `pdump_scan_by_alignment()' then scans all the -`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. - - `pdump_allocate_offset()' only has to do a linear allocation, -starting at offset 256 (this leaves room for the header and keeps the -alignments happy). - - -File: internals.info, Node: The header, Next: Data dumping, Prev: Address allocation, Up: Dumping phase - -The header ----------- - - The next step creates the file and writes a header with a signature -and some random information in it. 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). - - -File: internals.info, Node: Data dumping, Next: Pointers dumping, Prev: The header, Up: Dumping phase - -Data dumping ------------- - - The data is dumped in the same order as the addresses were allocated -by `pdump_dump_data()', called from `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. - - -File: internals.info, Node: Pointers dumping, Prev: Data dumping, Up: Dumping phase - -Pointers dumping ----------------- - - A bunch of tables needed to reassign properly the global pointers are -then written. They are: - - 1. the pdump_root_struct_ptrs dynarr - - 2. the pdump_opaques dynarr - - 3. a vector of all the offsets to the objects in the file that - include a description (for faster relocation at reload time) - - 4. the pdump_root_objects and pdump_weak_object_chains dynarrs. - - For each of the dynarrs 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 `pdump_weak_object_chains' dynarr 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. - - Some very important information like the `staticpros' and -`lrecord_implementations_table' are handled indirectly using -`dump_add_opaque' or `dump_add_root_struct_ptr'. - - This is the end of the dumping part. - - -File: internals.info, Node: Reloading phase, Next: Remaining issues, Prev: Dumping phase, Up: Dumping - -Reloading phase -=============== - -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. - -Putting back the pdump_opaques ------------------------------- - - The memory contents are restored in the obvious and trivial way. - -Putting back the pdump_root_struct_ptrs ---------------------------------------- - - The variables pointed to by pdump_root_struct_ptrs in the dump phase -are reset to the right relocated object addresses. - -Object relocation ------------------ - - All the objects are relocated using their description and their -offset by `pdump_reloc_one'. This step is unnecessary if the -reloc_address is equal to the file loading address. - -Putting back the pdump_root_objects and pdump_weak_object_chains ----------------------------------------------------------------- - - Same as Putting back the pdump_root_struct_ptrs. - -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 `pdump_reorganize_hash_table'. - - -File: internals.info, Node: Remaining issues, Prev: Reloading phase, Up: Dumping - -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. - diff --git a/info/internals.info-6 b/info/internals.info-6 index 5b89518..f110b91 100644 --- a/info/internals.info-6 +++ b/info/internals.info-6 @@ -38,6 +38,309 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: internals.info, Node: Data descriptions, Next: Dumping phase, Prev: Overview, Up: Dumping + +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: + + 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 } + }; + + 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 `data'". The length of said data is +given by the expression `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 `plist' in the Lisp_String +structure". `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. + + +File: internals.info, Node: Dumping phase, Next: Reloading phase, Prev: Data descriptions, Up: Dumping + +Dumping phase +============= + + Dumping is done by calling the function pdump() (in dumper.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:: + + +File: internals.info, Node: Object inventory, Next: Address allocation, Up: Dumping phase + +Object inventory +---------------- + + The first task is to build the list of the objects to dump. This +includes: + + * lisp objects + + * C structures + + We end up with one `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 `pdump_entry_list' structures +and can be enumerated thru either: + + 1. the `pdump_object_table', an array of `pdump_entry_list', one per + lrecord type, indexed by type number. + + 2. the `pdump_opaque_data_list', used for the opaque data which does + not include pointers, and hence does not need descriptions. + + 3. the `pdump_struct_table', which is a vector of + `struct_description'/`pdump_entry_list' pairs, used for non-opaque + C structures. + + This uses a marking strategy similar to the garbage collector. Some +differences though: + + 1. We do not use the mark bit (which does not exist for C structures + anyway); we use a big hash table instead. + + 2. 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. + + This is done by `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 `pdump_add_entry()' and looked up with +`pdump_get_entry()'. There is no need for entry removal. The hash +value is computed quite simply from the object pointer by +`pdump_make_hash()'. + + The roots for the marking are: + + 1. the `staticpro''ed variables (there is a special + `staticpro_nodump()' call for protected variables we do not want + to dump). + + 2. the variables registered via `dump_add_root_object' (`staticpro()' + is equivalent to `staticpro_nodump()' + `dump_add_root_object()'). + + 3. the variables registered via `dump_add_root_struct_ptr', each of + which points to a C structure. + + 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. + + +File: internals.info, Node: Address allocation, Next: The header, Prev: Object inventory, Up: Dumping phase + +Address allocation +------------------ + + The next step is to allocate the offsets of each of the objects in +the final dump file. This is done by `pdump_allocate_offset()' which +is called indirectly by `pdump_scan_by_alignment()'. + + The strategy to deal with alignment problems uses these facts: + + 1. real world alignment requirements are powers of two. + + 2. 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 an upper bound of the alignment requirements of a given + structure by looking at which power of two its size is a multiple. + + 3. the non-variant part of variable size lrecords has an alignment + requirement of 4. + + 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. `pdump_scan_by_alignment()' then scans all the +`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. + + `pdump_allocate_offset()' only has to do a linear allocation, +starting at offset 256 (this leaves room for the header and keeps the +alignments happy). + + +File: internals.info, Node: The header, Next: Data dumping, Prev: Address allocation, Up: Dumping phase + +The header +---------- + + The next step creates the file and writes a header with a signature +and some random information in it. 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). + + +File: internals.info, Node: Data dumping, Next: Pointers dumping, Prev: The header, Up: Dumping phase + +Data dumping +------------ + + The data is dumped in the same order as the addresses were allocated +by `pdump_dump_data()', called from `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. + + +File: internals.info, Node: Pointers dumping, Prev: Data dumping, Up: Dumping phase + +Pointers dumping +---------------- + + A bunch of tables needed to reassign properly the global pointers are +then written. They are: + + 1. the pdump_root_struct_ptrs dynarr + + 2. the pdump_opaques dynarr + + 3. a vector of all the offsets to the objects in the file that + include a description (for faster relocation at reload time) + + 4. the pdump_root_objects and pdump_weak_object_chains dynarrs. + + For each of the dynarrs 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 `pdump_weak_object_chains' dynarr 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. + + Some very important information like the `staticpros' and +`lrecord_implementations_table' are handled indirectly using +`dump_add_opaque' or `dump_add_root_struct_ptr'. + + This is the end of the dumping part. + + +File: internals.info, Node: Reloading phase, Next: Remaining issues, Prev: Dumping phase, Up: Dumping + +Reloading phase +=============== + +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. + +Putting back the pdump_opaques +------------------------------ + + The memory contents are restored in the obvious and trivial way. + +Putting back the pdump_root_struct_ptrs +--------------------------------------- + + The variables pointed to by pdump_root_struct_ptrs in the dump phase +are reset to the right relocated object addresses. + +Object relocation +----------------- + + All the objects are relocated using their description and their +offset by `pdump_reloc_one'. This step is unnecessary if the +reloc_address is equal to the file loading address. + +Putting back the pdump_root_objects and pdump_weak_object_chains +---------------------------------------------------------------- + + Same as Putting back the pdump_root_struct_ptrs. + +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 `pdump_reorganize_hash_table'. + + +File: internals.info, Node: Remaining issues, Prev: Reloading phase, Up: Dumping + +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. + + File: internals.info, Node: Events and the Event Loop, Next: Evaluation; Stack Frames; Bindings, Prev: Dumping, Up: Top Events and the Event Loop @@ -55,7 +358,7 @@ Events and the Event Loop * Dispatching Events; The Command Builder::  -File: internals.info, Node: Introduction to Events, Next: Main Loop, Prev: Events and the Event Loop, Up: Events and the Event Loop +File: internals.info, Node: Introduction to Events, Next: Main Loop, Up: Events and the Event Loop Introduction to Events ====================== @@ -468,7 +771,7 @@ Evaluation; Stack Frames; Bindings * Catch and Throw::  -File: internals.info, Node: Evaluation, Next: Dynamic Binding; The specbinding Stack; Unwind-Protects, Prev: Evaluation; Stack Frames; Bindings, Up: Evaluation; Stack Frames; Bindings +File: internals.info, Node: Evaluation, Next: Dynamic Binding; The specbinding Stack; Unwind-Protects, Up: Evaluation; Stack Frames; Bindings Evaluation ========== @@ -734,7 +1037,7 @@ Symbols and Variables * Symbol Values::  -File: internals.info, Node: Introduction to Symbols, Next: Obarrays, Prev: Symbols and Variables, Up: Symbols and Variables +File: internals.info, Node: Introduction to Symbols, Next: Obarrays, Up: Symbols and Variables Introduction to Symbols ======================= @@ -753,184 +1056,3 @@ property list is used as a more general mechanism of associating additional values with particular names, and once again the namespace is independent of the function and variable namespaces. - -File: internals.info, Node: Obarrays, Next: Symbol Values, Prev: Introduction to Symbols, Up: Symbols and Variables - -Obarrays -======== - - The identity of symbols with their names is accomplished through a -structure called an obarray, which is just a poorly-implemented hash -table mapping from strings to symbols whose name is that string. (I say -"poorly implemented" because an obarray appears in Lisp as a vector -with some hidden fields rather than as its own opaque type. This is an -Emacs Lisp artifact that should be fixed.) - - Obarrays are implemented as a vector of some fixed size (which should -be a prime for best results), where each "bucket" of the vector -contains one or more symbols, threaded through a hidden `next' field in -the symbol. Lookup of a symbol in an obarray, and adding a symbol to -an obarray, is accomplished through standard hash-table techniques. - - The standard Lisp function for working with symbols and obarrays is -`intern'. This looks up a symbol in an obarray given its name; if it's -not found, a new symbol is automatically created with the specified -name, added to the obarray, and returned. This is what happens when the -Lisp reader encounters a symbol (or more precisely, encounters the name -of a symbol) in some text that it is reading. There is a standard -obarray called `obarray' that is used for this purpose, although the -Lisp programmer is free to create his own obarrays and `intern' symbols -in them. - - Note that, once a symbol is in an obarray, it stays there until -something is done about it, and the standard obarray `obarray' always -stays around, so once you use any particular variable name, a -corresponding symbol will stay around in `obarray' until you exit -XEmacs. - - Note that `obarray' itself is a variable, and as such there is a -symbol in `obarray' whose name is `"obarray"' and which contains -`obarray' as its value. - - Note also that this call to `intern' occurs only when in the Lisp -reader, not when the code is executed (at which point the symbol is -already around, stored as such in the definition of the function). - - You can create your own obarray using `make-vector' (this is -horrible but is an artifact) and intern symbols into that obarray. -Doing that will result in two or more symbols with the same name. -However, at most one of these symbols is in the standard `obarray': You -cannot have two symbols of the same name in any particular obarray. -Note that you cannot add a symbol to an obarray in any fashion other -than using `intern': i.e. you can't take an existing symbol and put it -in an existing obarray. Nor can you change the name of an existing -symbol. (Since obarrays are vectors, you can violate the consistency of -things by storing directly into the vector, but let's ignore that -possibility.) - - Usually symbols are created by `intern', but if you really want, you -can explicitly create a symbol using `make-symbol', giving it some -name. The resulting symbol is not in any obarray (i.e. it is -"uninterned"), and you can't add it to any obarray. Therefore its -primary purpose is as a symbol to use in macros to avoid namespace -pollution. It can also be used as a carrier of information, but cons -cells could probably be used just as well. - - You can also use `intern-soft' to look up a symbol but not create a -new one, and `unintern' to remove a symbol from an obarray. This -returns the removed symbol. (Remember: You can't put the symbol back -into any obarray.) Finally, `mapatoms' maps over all of the symbols in -an obarray. - - -File: internals.info, Node: Symbol Values, Prev: Obarrays, Up: Symbols and Variables - -Symbol Values -============= - - The value field of a symbol normally contains a Lisp object. -However, a symbol can be "unbound", meaning that it logically has no -value. This is internally indicated by storing a special Lisp object, -called "the unbound marker" and stored in the global variable -`Qunbound'. The unbound marker is of a special Lisp object type called -"symbol-value-magic". It is impossible for the Lisp programmer to -directly create or access any object of this type. - - *You must not let any "symbol-value-magic" object escape to the Lisp -level.* Printing any of these objects will cause the message `INTERNAL -EMACS BUG' to appear as part of the print representation. (You may see -this normally when you call `debug_print()' from the debugger on a Lisp -object.) If you let one of these objects escape to the Lisp level, you -will violate a number of assumptions contained in the C code and make -the unbound marker not function right. - - When a symbol is created, its value field (and function field) are -set to `Qunbound'. The Lisp programmer can restore these conditions -later using `makunbound' or `fmakunbound', and can query to see whether -the value of function fields are "bound" (i.e. have a value other than -`Qunbound') using `boundp' and `fboundp'. The fields are set to a -normal Lisp object using `set' (or `setq') and `fset'. - - Other symbol-value-magic objects are used as special markers to -indicate variables that have non-normal properties. This includes any -variables that are tied into C variables (setting the variable magically -sets some global variable in the C code, and likewise for retrieving the -variable's value), variables that magically tie into slots in the -current buffer, variables that are buffer-local, etc. The -symbol-value-magic object is stored in the value cell in place of a -normal object, and the code to retrieve a symbol's value (i.e. -`symbol-value') knows how to do special things with them. This means -that you should not just fetch the value cell directly if you want a -symbol's value. - - The exact workings of this are rather complex and involved and are -well-documented in comments in `buffer.c', `symbols.c', and `lisp.h'. - - -File: internals.info, Node: Buffers and Textual Representation, Next: MULE Character Sets and Encodings, Prev: Symbols and Variables, Up: Top - -Buffers and Textual Representation -********************************** - -* Menu: - -* Introduction to Buffers:: A buffer holds a block of text such as a file. -* The Text in a Buffer:: Representation of the text in a buffer. -* Buffer Lists:: Keeping track of all buffers. -* Markers and Extents:: Tagging locations within a buffer. -* Bufbytes and Emchars:: Representation of individual characters. -* The Buffer Object:: The Lisp object corresponding to a buffer. - - -File: internals.info, Node: Introduction to Buffers, Next: The Text in a Buffer, Prev: Buffers and Textual Representation, Up: Buffers and Textual Representation - -Introduction to Buffers -======================= - - A buffer is logically just a Lisp object that holds some text. In -this, it is like a string, but a buffer is optimized for frequent -insertion and deletion, while a string is not. Furthermore: - - 1. Buffers are "permanent" objects, i.e. once you create them, they - remain around, and need to be explicitly deleted before they go - away. - - 2. Each buffer has a unique name, which is a string. Buffers are - normally referred to by name. In this respect, they are like - symbols. - - 3. Buffers have a default insertion position, called "point". - Inserting text (unless you explicitly give a position) goes at - point, and moves point forward past the text. This is what is - going on when you type text into Emacs. - - 4. Buffers have lots of extra properties associated with them. - - 5. Buffers can be "displayed". What this means is that there exist a - number of "windows", which are objects that correspond to some - visible section of your display, and each window has an associated - buffer, and the current contents of the buffer are shown in that - section of the display. The redisplay mechanism (which takes care - of doing this) knows how to look at the text of a buffer and come - up with some reasonable way of displaying this. Many of the - properties of a buffer control how the buffer's text is displayed. - - 6. One buffer is distinguished and called the "current buffer". It is - stored in the variable `current_buffer'. Buffer operations operate - on this buffer by default. When you are typing text into a - buffer, the buffer you are typing into is always `current_buffer'. - Switching to a different window changes the current buffer. Note - that Lisp code can temporarily change the current buffer using - `set-buffer' (often enclosed in a `save-excursion' so that the - former current buffer gets restored when the code is finished). - However, calling `set-buffer' will NOT cause a permanent change in - the current buffer. The reason for this is that the top-level - event loop sets `current_buffer' to the buffer of the selected - window, each time it finishes executing a user command. - - Make sure you understand the distinction between "current buffer" -and "buffer of the selected window", and the distinction between -"point" of the current buffer and "window-point" of the selected -window. (This latter distinction is explained in detail in the section -on windows.) - diff --git a/info/internals.info-7 b/info/internals.info-7 index 8f3633d..0d34dd4 100644 --- a/info/internals.info-7 +++ b/info/internals.info-7 @@ -38,6 +38,187 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: internals.info, Node: Obarrays, Next: Symbol Values, Prev: Introduction to Symbols, Up: Symbols and Variables + +Obarrays +======== + + The identity of symbols with their names is accomplished through a +structure called an obarray, which is just a poorly-implemented hash +table mapping from strings to symbols whose name is that string. (I say +"poorly implemented" because an obarray appears in Lisp as a vector +with some hidden fields rather than as its own opaque type. This is an +Emacs Lisp artifact that should be fixed.) + + Obarrays are implemented as a vector of some fixed size (which should +be a prime for best results), where each "bucket" of the vector +contains one or more symbols, threaded through a hidden `next' field in +the symbol. Lookup of a symbol in an obarray, and adding a symbol to +an obarray, is accomplished through standard hash-table techniques. + + The standard Lisp function for working with symbols and obarrays is +`intern'. This looks up a symbol in an obarray given its name; if it's +not found, a new symbol is automatically created with the specified +name, added to the obarray, and returned. This is what happens when the +Lisp reader encounters a symbol (or more precisely, encounters the name +of a symbol) in some text that it is reading. There is a standard +obarray called `obarray' that is used for this purpose, although the +Lisp programmer is free to create his own obarrays and `intern' symbols +in them. + + Note that, once a symbol is in an obarray, it stays there until +something is done about it, and the standard obarray `obarray' always +stays around, so once you use any particular variable name, a +corresponding symbol will stay around in `obarray' until you exit +XEmacs. + + Note that `obarray' itself is a variable, and as such there is a +symbol in `obarray' whose name is `"obarray"' and which contains +`obarray' as its value. + + Note also that this call to `intern' occurs only when in the Lisp +reader, not when the code is executed (at which point the symbol is +already around, stored as such in the definition of the function). + + You can create your own obarray using `make-vector' (this is +horrible but is an artifact) and intern symbols into that obarray. +Doing that will result in two or more symbols with the same name. +However, at most one of these symbols is in the standard `obarray': You +cannot have two symbols of the same name in any particular obarray. +Note that you cannot add a symbol to an obarray in any fashion other +than using `intern': i.e. you can't take an existing symbol and put it +in an existing obarray. Nor can you change the name of an existing +symbol. (Since obarrays are vectors, you can violate the consistency of +things by storing directly into the vector, but let's ignore that +possibility.) + + Usually symbols are created by `intern', but if you really want, you +can explicitly create a symbol using `make-symbol', giving it some +name. The resulting symbol is not in any obarray (i.e. it is +"uninterned"), and you can't add it to any obarray. Therefore its +primary purpose is as a symbol to use in macros to avoid namespace +pollution. It can also be used as a carrier of information, but cons +cells could probably be used just as well. + + You can also use `intern-soft' to look up a symbol but not create a +new one, and `unintern' to remove a symbol from an obarray. This +returns the removed symbol. (Remember: You can't put the symbol back +into any obarray.) Finally, `mapatoms' maps over all of the symbols in +an obarray. + + +File: internals.info, Node: Symbol Values, Prev: Obarrays, Up: Symbols and Variables + +Symbol Values +============= + + The value field of a symbol normally contains a Lisp object. +However, a symbol can be "unbound", meaning that it logically has no +value. This is internally indicated by storing a special Lisp object, +called "the unbound marker" and stored in the global variable +`Qunbound'. The unbound marker is of a special Lisp object type called +"symbol-value-magic". It is impossible for the Lisp programmer to +directly create or access any object of this type. + + *You must not let any "symbol-value-magic" object escape to the Lisp +level.* Printing any of these objects will cause the message `INTERNAL +EMACS BUG' to appear as part of the print representation. (You may see +this normally when you call `debug_print()' from the debugger on a Lisp +object.) If you let one of these objects escape to the Lisp level, you +will violate a number of assumptions contained in the C code and make +the unbound marker not function right. + + When a symbol is created, its value field (and function field) are +set to `Qunbound'. The Lisp programmer can restore these conditions +later using `makunbound' or `fmakunbound', and can query to see whether +the value of function fields are "bound" (i.e. have a value other than +`Qunbound') using `boundp' and `fboundp'. The fields are set to a +normal Lisp object using `set' (or `setq') and `fset'. + + Other symbol-value-magic objects are used as special markers to +indicate variables that have non-normal properties. This includes any +variables that are tied into C variables (setting the variable magically +sets some global variable in the C code, and likewise for retrieving the +variable's value), variables that magically tie into slots in the +current buffer, variables that are buffer-local, etc. The +symbol-value-magic object is stored in the value cell in place of a +normal object, and the code to retrieve a symbol's value (i.e. +`symbol-value') knows how to do special things with them. This means +that you should not just fetch the value cell directly if you want a +symbol's value. + + The exact workings of this are rather complex and involved and are +well-documented in comments in `buffer.c', `symbols.c', and `lisp.h'. + + +File: internals.info, Node: Buffers and Textual Representation, Next: MULE Character Sets and Encodings, Prev: Symbols and Variables, Up: Top + +Buffers and Textual Representation +********************************** + +* Menu: + +* Introduction to Buffers:: A buffer holds a block of text such as a file. +* The Text in a Buffer:: Representation of the text in a buffer. +* Buffer Lists:: Keeping track of all buffers. +* Markers and Extents:: Tagging locations within a buffer. +* Bufbytes and Emchars:: Representation of individual characters. +* The Buffer Object:: The Lisp object corresponding to a buffer. + + +File: internals.info, Node: Introduction to Buffers, Next: The Text in a Buffer, Up: Buffers and Textual Representation + +Introduction to Buffers +======================= + + A buffer is logically just a Lisp object that holds some text. In +this, it is like a string, but a buffer is optimized for frequent +insertion and deletion, while a string is not. Furthermore: + + 1. Buffers are "permanent" objects, i.e. once you create them, they + remain around, and need to be explicitly deleted before they go + away. + + 2. Each buffer has a unique name, which is a string. Buffers are + normally referred to by name. In this respect, they are like + symbols. + + 3. Buffers have a default insertion position, called "point". + Inserting text (unless you explicitly give a position) goes at + point, and moves point forward past the text. This is what is + going on when you type text into Emacs. + + 4. Buffers have lots of extra properties associated with them. + + 5. Buffers can be "displayed". What this means is that there exist a + number of "windows", which are objects that correspond to some + visible section of your display, and each window has an associated + buffer, and the current contents of the buffer are shown in that + section of the display. The redisplay mechanism (which takes care + of doing this) knows how to look at the text of a buffer and come + up with some reasonable way of displaying this. Many of the + properties of a buffer control how the buffer's text is displayed. + + 6. One buffer is distinguished and called the "current buffer". It is + stored in the variable `current_buffer'. Buffer operations operate + on this buffer by default. When you are typing text into a + buffer, the buffer you are typing into is always `current_buffer'. + Switching to a different window changes the current buffer. Note + that Lisp code can temporarily change the current buffer using + `set-buffer' (often enclosed in a `save-excursion' so that the + former current buffer gets restored when the code is finished). + However, calling `set-buffer' will NOT cause a permanent change in + the current buffer. The reason for this is that the top-level + event loop sets `current_buffer' to the buffer of the selected + window, each time it finishes executing a user command. + + Make sure you understand the distinction between "current buffer" +and "buffer of the selected window", and the distinction between +"point" of the current buffer and "window-point" of the selected +window. (This latter distinction is explained in detail in the section +on windows.) + + File: internals.info, Node: The Text in a Buffer, Next: Buffer Lists, Prev: Introduction to Buffers, Up: Buffers and Textual Representation The Text in a Buffer @@ -386,7 +567,7 @@ representation is that it's compact and is compatible with ASCII. * CCL::  -File: internals.info, Node: Character Sets, Next: Encodings, Prev: MULE Character Sets and Encodings, Up: MULE Character Sets and Encodings +File: internals.info, Node: Character Sets, Next: Encodings, Up: MULE Character Sets and Encodings Character Sets ============== @@ -493,7 +674,7 @@ common usage of "byte"). * JIS7::  -File: internals.info, Node: Japanese EUC (Extended Unix Code), Next: JIS7, Prev: Encodings, Up: Encodings +File: internals.info, Node: Japanese EUC (Extended Unix Code), Next: JIS7, Up: Encodings Japanese EUC (Extended Unix Code) --------------------------------- @@ -597,7 +778,7 @@ followed later by the exact details.) * Internal Character Encoding::  -File: internals.info, Node: Internal String Encoding, Next: Internal Character Encoding, Prev: Internal Mule Encodings, Up: Internal Mule Encodings +File: internals.info, Node: Internal String Encoding, Next: Internal Character Encoding, Up: Internal Mule Encodings Internal String Encoding ------------------------ @@ -876,7 +1057,7 @@ blocking data together in order to achieve efficiency. * Lstream Methods:: Creating new lstream types.  -File: internals.info, Node: Creating an Lstream, Next: Lstream Types, Prev: Lstreams, Up: Lstreams +File: internals.info, Node: Creating an Lstream, Next: Lstream Types, Up: Lstreams Creating an Lstream =================== @@ -935,228 +1116,3 @@ print decoding encoding - -File: internals.info, Node: Lstream Functions, Next: Lstream Methods, Prev: Lstream Types, Up: Lstreams - -Lstream Functions -================= - - - Function: 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 creates the stream - and does any other necessary creation stuff (e.g. opening a file). - - - Function: void Lstream_set_buffering (Lstream *LSTR, - Lstream_buffering BUFFERING, int BUFFERING_SIZE) - Change the buffering of a stream. See `lstream.h'. By default the - buffering is `STREAM_BLOCK_BUFFERED'. - - - Function: int Lstream_flush (Lstream *LSTR) - Flush out any pending unwritten data in the stream. Clear any - buffered input data. Returns 0 on success, -1 on error. - - - Macro: int Lstream_putc (Lstream *STREAM, int C) - Write out one byte to the stream. This is a macro and so it is - very efficient. The C argument is only evaluated once but the - STREAM argument is evaluated more than once. Returns 0 on - success, -1 on error. - - - Macro: int Lstream_getc (Lstream *STREAM) - Read one byte from the stream. This is a macro and so it is very - efficient. The STREAM argument is evaluated more than once. - Return value is -1 for EOF or error. - - - Macro: void Lstream_ungetc (Lstream *STREAM, int C) - Push one byte back onto the input queue. This will be the next - byte read from the stream. Any number of bytes can be pushed back - and will be read in the reverse order they were pushed back--most - recent first. (This is necessary for consistency--if there are a - number of bytes that have been unread and I read and unread a - byte, it needs to be the first to be read again.) This is a macro - and so it is very efficient. The C argument is only evaluated - once but the STREAM argument is evaluated more than once. - - - Function: int Lstream_fputc (Lstream *STREAM, int C) - - Function: int Lstream_fgetc (Lstream *STREAM) - - Function: void Lstream_fungetc (Lstream *STREAM, int C) - Function equivalents of the above macros. - - - Function: ssize_t Lstream_read (Lstream *STREAM, void *DATA, size_t - SIZE) - Read SIZE bytes of DATA from the stream. Return the number of - bytes read. 0 means EOF. -1 means an error occurred and no bytes - were read. - - - Function: ssize_t Lstream_write (Lstream *STREAM, void *DATA, size_t - SIZE) - Write SIZE bytes of DATA to the stream. Return the number of - bytes written. -1 means an error occurred and no bytes were - written. - - - Function: void Lstream_unread (Lstream *STREAM, void *DATA, size_t - SIZE) - Push back SIZE bytes of DATA onto the input queue. The next call - to `Lstream_read()' with the same size will read the same bytes - back. Note that this will be the case even if there is other - pending unread data. - - - Function: int Lstream_close (Lstream *STREAM) - Close the stream. All data will be flushed out. - - - Function: void Lstream_reopen (Lstream *STREAM) - Reopen a closed stream. This enables I/O on it again. This is not - meant to be called except from a wrapper routine that reinitializes - variables and such--the close routine may well have freed some - necessary storage structures, for example. - - - Function: void Lstream_rewind (Lstream *STREAM) - Rewind the stream to the beginning. - - -File: internals.info, Node: Lstream Methods, Prev: Lstream Functions, Up: Lstreams - -Lstream Methods -=============== - - - Lstream Method: ssize_t reader (Lstream *STREAM, unsigned char - *DATA, size_t SIZE) - Read some data from the stream's end and store it into DATA, which - can hold SIZE bytes. Return the number of bytes read. A return - value of 0 means no bytes can be read at this time. This may be - because of an EOF, or because there is a granularity greater than - one byte that the stream imposes on the returned data, and SIZE is - less than this granularity. (This will happen frequently for - streams that need to return whole characters, because - `Lstream_read()' calls the reader function repeatedly until it has - the number of bytes it wants or until 0 is returned.) The lstream - functions do not treat a 0 return as EOF or do anything special; - however, the calling function will interpret any 0 it gets back as - EOF. This will normally not happen unless the caller calls - `Lstream_read()' with a very small size. - - This function can be `NULL' if the stream is output-only. - - - Lstream Method: ssize_t writer (Lstream *STREAM, const unsigned char - *DATA, size_t SIZE) - Send some data to the stream's end. Data to be sent is in DATA - and is SIZE bytes. Return the number of bytes sent. This - function can send and return fewer bytes than is passed in; in that - case, the function will just be called again until there is no - data left or 0 is returned. A return value of 0 means that no - more data can be currently stored, but there is no error; the data - will be squirreled away until the writer can accept data. (This is - useful, e.g., if 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. - - - Lstream Method: int rewinder (Lstream *STREAM) - Rewind the stream. If this is `NULL', the stream is not seekable. - - - Lstream Method: int seekable_p (Lstream *STREAM) - Indicate whether this stream is seekable--i.e. it can be rewound. - This method is ignored if the stream does not have a rewind - method. If this method is not present, the result is determined - by whether a rewind method is present. - - - Lstream Method: int flusher (Lstream *STREAM) - Perform any additional operations necessary to flush the data in - this stream. - - - Lstream Method: int pseudo_closer (Lstream *STREAM) - - - Lstream Method: int closer (Lstream *STREAM) - Perform any additional operations necessary to close this stream - down. May be `NULL'. This function is called when - `Lstream_close()' is called or when the stream is - garbage-collected. When this function is called, all pending data - in the stream will already have been written out. - - - Lstream Method: Lisp_Object marker (Lisp_Object LSTREAM, void - (*MARKFUN) (Lisp_Object)) - Mark this object for garbage collection. Same semantics as a - standard `Lisp_Object' marker. This function can be `NULL'. - - -File: internals.info, Node: Consoles; Devices; Frames; Windows, Next: The Redisplay Mechanism, Prev: Lstreams, Up: Top - -Consoles; Devices; Frames; Windows -********************************** - -* Menu: - -* Introduction to Consoles; Devices; Frames; Windows:: -* Point:: -* Window Hierarchy:: -* The Window Object:: - - -File: internals.info, Node: Introduction to Consoles; Devices; Frames; Windows, Next: Point, Prev: Consoles; Devices; Frames; Windows, Up: Consoles; Devices; Frames; Windows - -Introduction to Consoles; Devices; Frames; Windows -================================================== - - A window-system window that you see on the screen is called a -"frame" in Emacs terminology. Each frame is subdivided into one or -more non-overlapping panes, called (confusingly) "windows". Each -window displays the text of a buffer in it. (See above on Buffers.) Note -that buffers and windows are independent entities: Two or more windows -can be displaying the same buffer (potentially in different locations), -and a buffer can be displayed in no windows. - - A single display screen that contains one or more frames is called a -"display". Under most circumstances, there is only one display. -However, more than one display can exist, for example if you have a -"multi-headed" console, i.e. one with a single keyboard but multiple -displays. (Typically in such a situation, the various displays act like -one large display, in that the mouse is only in one of them at a time, -and moving the mouse off of one moves it into another.) In some cases, -the different displays will have different characteristics, e.g. one -color and one mono. - - XEmacs can display frames on multiple displays. It can even deal -simultaneously with frames on multiple keyboards (called "consoles" in -XEmacs terminology). Here is one case where this might be useful: You -are using XEmacs on your workstation at work, and leave it running. -Then you go home and dial in on a TTY line, and you can use the -already-running XEmacs process to display another frame on your local -TTY. - - Thus, there is a hierarchy console -> display -> frame -> window. -There is a separate Lisp object type for each of these four concepts. -Furthermore, there is logically a "selected console", "selected -display", "selected frame", and "selected window". Each of these -objects is distinguished in various ways, such as being the default -object for various functions that act on objects of that type. Note -that every containing object remembers the "selected" object among the -objects that it contains: e.g. not only is there a selected window, but -every frame remembers the last window in it that was selected, and -changing the selected frame causes the remembered window within it to -become the selected window. Similar relationships apply for consoles -to devices and devices to frames. - - -File: internals.info, Node: Point, Next: Window Hierarchy, Prev: Introduction to Consoles; Devices; Frames; Windows, Up: Consoles; Devices; Frames; Windows - -Point -===== - - Recall that every buffer has a current insertion position, called -"point". Now, two or more windows may be displaying the same buffer, -and the text cursor in the two windows (i.e. `point') can be in two -different places. You may ask, how can that be, since each buffer has -only one value of `point'? The answer is that each window also has a -value of `point' that is squirreled away in it. There is only one -selected window, and the value of "point" in that buffer corresponds to -that window. When the selected window is changed from one window to -another displaying the same buffer, the old value of `point' is stored -into the old window's "point" and the value of `point' from the new -window is retrieved and made the value of `point' in the buffer. This -means that `window-point' for the selected window is potentially -inaccurate, and if you want to retrieve the correct value of `point' -for a window, you must special-case on the selected window and retrieve -the buffer's point instead. This is related to why -`save-window-excursion' does not save the selected window's value of -`point'. - diff --git a/info/internals.info-8 b/info/internals.info-8 index d641579..391f5a8 100644 --- a/info/internals.info-8 +++ b/info/internals.info-8 @@ -38,6 +38,231 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: internals.info, Node: Lstream Functions, Next: Lstream Methods, Prev: Lstream Types, Up: Lstreams + +Lstream Functions +================= + + - Function: 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 creates the stream + and does any other necessary creation stuff (e.g. opening a file). + + - Function: void Lstream_set_buffering (Lstream *LSTR, + Lstream_buffering BUFFERING, int BUFFERING_SIZE) + Change the buffering of a stream. See `lstream.h'. By default the + buffering is `STREAM_BLOCK_BUFFERED'. + + - Function: int Lstream_flush (Lstream *LSTR) + Flush out any pending unwritten data in the stream. Clear any + buffered input data. Returns 0 on success, -1 on error. + + - Macro: int Lstream_putc (Lstream *STREAM, int C) + Write out one byte to the stream. This is a macro and so it is + very efficient. The C argument is only evaluated once but the + STREAM argument is evaluated more than once. Returns 0 on + success, -1 on error. + + - Macro: int Lstream_getc (Lstream *STREAM) + Read one byte from the stream. This is a macro and so it is very + efficient. The STREAM argument is evaluated more than once. + Return value is -1 for EOF or error. + + - Macro: void Lstream_ungetc (Lstream *STREAM, int C) + Push one byte back onto the input queue. This will be the next + byte read from the stream. Any number of bytes can be pushed back + and will be read in the reverse order they were pushed back--most + recent first. (This is necessary for consistency--if there are a + number of bytes that have been unread and I read and unread a + byte, it needs to be the first to be read again.) This is a macro + and so it is very efficient. The C argument is only evaluated + once but the STREAM argument is evaluated more than once. + + - Function: int Lstream_fputc (Lstream *STREAM, int C) + - Function: int Lstream_fgetc (Lstream *STREAM) + - Function: void Lstream_fungetc (Lstream *STREAM, int C) + Function equivalents of the above macros. + + - Function: ssize_t Lstream_read (Lstream *STREAM, void *DATA, size_t + SIZE) + Read SIZE bytes of DATA from the stream. Return the number of + bytes read. 0 means EOF. -1 means an error occurred and no bytes + were read. + + - Function: ssize_t Lstream_write (Lstream *STREAM, void *DATA, size_t + SIZE) + Write SIZE bytes of DATA to the stream. Return the number of + bytes written. -1 means an error occurred and no bytes were + written. + + - Function: void Lstream_unread (Lstream *STREAM, void *DATA, size_t + SIZE) + Push back SIZE bytes of DATA onto the input queue. The next call + to `Lstream_read()' with the same size will read the same bytes + back. Note that this will be the case even if there is other + pending unread data. + + - Function: int Lstream_close (Lstream *STREAM) + Close the stream. All data will be flushed out. + + - Function: void Lstream_reopen (Lstream *STREAM) + Reopen a closed stream. This enables I/O on it again. This is not + meant to be called except from a wrapper routine that reinitializes + variables and such--the close routine may well have freed some + necessary storage structures, for example. + + - Function: void Lstream_rewind (Lstream *STREAM) + Rewind the stream to the beginning. + + +File: internals.info, Node: Lstream Methods, Prev: Lstream Functions, Up: Lstreams + +Lstream Methods +=============== + + - Lstream Method: ssize_t reader (Lstream *STREAM, unsigned char + *DATA, size_t SIZE) + Read some data from the stream's end and store it into DATA, which + can hold SIZE bytes. Return the number of bytes read. A return + value of 0 means no bytes can be read at this time. This may be + because of an EOF, or because there is a granularity greater than + one byte that the stream imposes on the returned data, and SIZE is + less than this granularity. (This will happen frequently for + streams that need to return whole characters, because + `Lstream_read()' calls the reader function repeatedly until it has + the number of bytes it wants or until 0 is returned.) The lstream + functions do not treat a 0 return as EOF or do anything special; + however, the calling function will interpret any 0 it gets back as + EOF. This will normally not happen unless the caller calls + `Lstream_read()' with a very small size. + + This function can be `NULL' if the stream is output-only. + + - Lstream Method: ssize_t writer (Lstream *STREAM, const unsigned char + *DATA, size_t SIZE) + Send some data to the stream's end. Data to be sent is in DATA + and is SIZE bytes. Return the number of bytes sent. This + function can send and return fewer bytes than is passed in; in that + case, the function will just be called again until there is no + data left or 0 is returned. A return value of 0 means that no + more data can be currently stored, but there is no error; the data + will be squirreled away until the writer can accept data. (This is + useful, e.g., if 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. + + - Lstream Method: int rewinder (Lstream *STREAM) + Rewind the stream. If this is `NULL', the stream is not seekable. + + - Lstream Method: int seekable_p (Lstream *STREAM) + Indicate whether this stream is seekable--i.e. it can be rewound. + This method is ignored if the stream does not have a rewind + method. If this method is not present, the result is determined + by whether a rewind method is present. + + - Lstream Method: int flusher (Lstream *STREAM) + Perform any additional operations necessary to flush the data in + this stream. + + - Lstream Method: int pseudo_closer (Lstream *STREAM) + + - Lstream Method: int closer (Lstream *STREAM) + Perform any additional operations necessary to close this stream + down. May be `NULL'. This function is called when + `Lstream_close()' is called or when the stream is + garbage-collected. When this function is called, all pending data + in the stream will already have been written out. + + - Lstream Method: Lisp_Object marker (Lisp_Object LSTREAM, void + (*MARKFUN) (Lisp_Object)) + Mark this object for garbage collection. Same semantics as a + standard `Lisp_Object' marker. This function can be `NULL'. + + +File: internals.info, Node: Consoles; Devices; Frames; Windows, Next: The Redisplay Mechanism, Prev: Lstreams, Up: Top + +Consoles; Devices; Frames; Windows +********************************** + +* Menu: + +* Introduction to Consoles; Devices; Frames; Windows:: +* Point:: +* Window Hierarchy:: +* The Window Object:: + + +File: internals.info, Node: Introduction to Consoles; Devices; Frames; Windows, Next: Point, Up: Consoles; Devices; Frames; Windows + +Introduction to Consoles; Devices; Frames; Windows +================================================== + + A window-system window that you see on the screen is called a +"frame" in Emacs terminology. Each frame is subdivided into one or +more non-overlapping panes, called (confusingly) "windows". Each +window displays the text of a buffer in it. (See above on Buffers.) Note +that buffers and windows are independent entities: Two or more windows +can be displaying the same buffer (potentially in different locations), +and a buffer can be displayed in no windows. + + A single display screen that contains one or more frames is called a +"display". Under most circumstances, there is only one display. +However, more than one display can exist, for example if you have a +"multi-headed" console, i.e. one with a single keyboard but multiple +displays. (Typically in such a situation, the various displays act like +one large display, in that the mouse is only in one of them at a time, +and moving the mouse off of one moves it into another.) In some cases, +the different displays will have different characteristics, e.g. one +color and one mono. + + XEmacs can display frames on multiple displays. It can even deal +simultaneously with frames on multiple keyboards (called "consoles" in +XEmacs terminology). Here is one case where this might be useful: You +are using XEmacs on your workstation at work, and leave it running. +Then you go home and dial in on a TTY line, and you can use the +already-running XEmacs process to display another frame on your local +TTY. + + Thus, there is a hierarchy console -> display -> frame -> window. +There is a separate Lisp object type for each of these four concepts. +Furthermore, there is logically a "selected console", "selected +display", "selected frame", and "selected window". Each of these +objects is distinguished in various ways, such as being the default +object for various functions that act on objects of that type. Note +that every containing object remembers the "selected" object among the +objects that it contains: e.g. not only is there a selected window, but +every frame remembers the last window in it that was selected, and +changing the selected frame causes the remembered window within it to +become the selected window. Similar relationships apply for consoles +to devices and devices to frames. + + +File: internals.info, Node: Point, Next: Window Hierarchy, Prev: Introduction to Consoles; Devices; Frames; Windows, Up: Consoles; Devices; Frames; Windows + +Point +===== + + Recall that every buffer has a current insertion position, called +"point". Now, two or more windows may be displaying the same buffer, +and the text cursor in the two windows (i.e. `point') can be in two +different places. You may ask, how can that be, since each buffer has +only one value of `point'? The answer is that each window also has a +value of `point' that is squirreled away in it. There is only one +selected window, and the value of "point" in that buffer corresponds to +that window. When the selected window is changed from one window to +another displaying the same buffer, the old value of `point' is stored +into the old window's "point" and the value of `point' from the new +window is retrieved and made the value of `point' in the buffer. This +means that `window-point' for the selected window is potentially +inaccurate, and if you want to retrieve the correct value of `point' +for a window, you must special-case on the selected window and retrieve +the buffer's point instead. This is related to why +`save-window-excursion' does not save the selected window's value of +`point'. + + File: internals.info, Node: Window Hierarchy, Next: The Window Object, Prev: Point, Up: Consoles; Devices; Frames; Windows Window Hierarchy @@ -258,7 +483,7 @@ of Redisplay: * Redisplay Piece by Piece::  -File: internals.info, Node: Critical Redisplay Sections, Next: Line Start Cache, Prev: The Redisplay Mechanism, Up: The Redisplay Mechanism +File: internals.info, Node: Critical Redisplay Sections, Next: Line Start Cache, Up: The Redisplay Mechanism Critical Redisplay Sections =========================== @@ -415,7 +640,7 @@ Extents * Extent Fragments:: Cached information useful for redisplay.  -File: internals.info, Node: Introduction to Extents, Next: Extent Ordering, Prev: Extents, Up: Extents +File: internals.info, Node: Introduction to Extents, Next: Extent Ordering, Up: Extents Introduction to Extents ======================= @@ -967,144 +1192,3 @@ Interface to the X Window System * Lucid Widget Library:: An interface to various widget sets. - -File: internals.info, Node: Lucid Widget Library, Up: Interface to the X Window System - -Lucid Widget Library -==================== - - Lwlib is extremely poorly documented and quite hairy. The author(s) -blame that on X, Xt, and Motif, with some justice, but also sufficient -hypocrisy to avoid drawing the obvious conclusion about their own work. - - The Lucid Widget Library is composed of two more or less independent -pieces. The first, as the name suggests, is a set of widgets. These -widgets are intended to resemble and improve on widgets provided in the -Motif toolkit but not in the Athena widgets, including menubars and -scrollbars. Recent additions by Andy Piper integrate some "modern" -widgets by Edward Falk, including checkboxes, radio buttons, progress -gauges, and index tab controls (aka notebooks). - - The second piece of the Lucid widget library is a generic interface -to several toolkits for X (including Xt, the Athena widget set, and -Motif, as well as the Lucid widgets themselves) so that core XEmacs -code need not know which widget set has been used to build the -graphical user interface. - -* Menu: - -* Generic Widget Interface:: The lwlib generic widget interface. -* Scrollbars:: -* Menubars:: -* Checkboxes and Radio Buttons:: -* Progress Bars:: -* Tab Controls:: - - -File: internals.info, Node: Generic Widget Interface, Next: Scrollbars, Up: Lucid Widget Library - -Generic Widget Interface ------------------------- - - In general in any toolkit a widget may be a composite object. In Xt, -all widgets have an X window that they manage, but typically a complex -widget will have widget children, each of which manages a subwindow of -the parent widget's X window. These children may themselves be -composite widgets. Thus a widget is actually a tree or hierarchy of -widgets. - - For each toolkit widget, lwlib maintains a tree of `widget_values' -which mirror the hierarchical state of Xt widgets (including Motif, -Athena, 3D Athena, and Falk's widget sets). Each `widget_value' has -`contents' member, which points to the head of a linked list of its -children. The linked list of siblings is chained through the `next' -member of `widget_value'. - - +-----------+ - | composite | - +-----------+ - | - | contents - V - +-------+ next +-------+ next +-------+ - | child |----->| child |----->| child | - +-------+ +-------+ +-------+ - | - | contents - V - +-------------+ next +-------------+ - | grand child |----->| grand child | - +-------------+ +-------------+ - - The `widget_value' hierarchy of a composite widget with two simple - children and one composite child. - - The `widget_instance' structure maintains the inverse view of the -tree. As for the `widget_value', siblings are chained through the -`next' member. However, rather than naming children, the -`widget_instance' tree links to parents. - - +-----------+ - | composite | - +-----------+ - A - | parent - | - +-------+ next +-------+ next +-------+ - | child |----->| child |----->| child | - +-------+ +-------+ +-------+ - A - | parent - | - +-------------+ next +-------------+ - | grand child |----->| grand child | - +-------------+ +-------------+ - - The `widget_value' hierarchy of a composite widget with two simple - children and one composite child. - - This permits widgets derived from different toolkits to be updated -and manipulated generically by the lwlib library. For instance -`update_one_widget_instance' can cope with multiple types of widget and -multiple types of toolkit. Each element in the widget hierarchy is -updated from its corresponding `widget_value' by walking the -`widget_value' tree. This has desirable properties. For example, -`lw_modify_all_widgets' is called from `glyphs-x.c' and updates all the -properties of a widget without having to know what the widget is or -what toolkit it is from. Unfortunately this also has its hairy -properties; the lwlib code quite complex. And of course lwlib has to -know at some level what the widget is and how to set its properties. - - The `widget_instance' structure also contains a pointer to the root -of its tree. Widget instances are further confi - - -File: internals.info, Node: Scrollbars, Next: Menubars, Prev: Generic Widget Interface, Up: Lucid Widget Library - -Scrollbars ----------- - - -File: internals.info, Node: Menubars, Next: Checkboxes and Radio Buttons, Prev: Scrollbars, Up: Lucid Widget Library - -Menubars --------- - - -File: internals.info, Node: Checkboxes and Radio Buttons, Next: Progress Bars, Prev: Menubars, Up: Lucid Widget Library - -Checkboxes and Radio Buttons ----------------------------- - - -File: internals.info, Node: Progress Bars, Next: Tab Controls, Prev: Checkboxes and Radio Buttons, Up: Lucid Widget Library - -Progress Bars -------------- - - -File: internals.info, Node: Tab Controls, Prev: Progress Bars, Up: Lucid Widget Library - -Tab Controls ------------- - diff --git a/info/internals.info-9 b/info/internals.info-9 index 0c91f06..e92971f 100644 --- a/info/internals.info-9 +++ b/info/internals.info-9 @@ -38,6 +38,147 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: internals.info, Node: Lucid Widget Library, Up: Interface to the X Window System + +Lucid Widget Library +==================== + + Lwlib is extremely poorly documented and quite hairy. The author(s) +blame that on X, Xt, and Motif, with some justice, but also sufficient +hypocrisy to avoid drawing the obvious conclusion about their own work. + + The Lucid Widget Library is composed of two more or less independent +pieces. The first, as the name suggests, is a set of widgets. These +widgets are intended to resemble and improve on widgets provided in the +Motif toolkit but not in the Athena widgets, including menubars and +scrollbars. Recent additions by Andy Piper integrate some "modern" +widgets by Edward Falk, including checkboxes, radio buttons, progress +gauges, and index tab controls (aka notebooks). + + The second piece of the Lucid widget library is a generic interface +to several toolkits for X (including Xt, the Athena widget set, and +Motif, as well as the Lucid widgets themselves) so that core XEmacs +code need not know which widget set has been used to build the +graphical user interface. + +* Menu: + +* Generic Widget Interface:: The lwlib generic widget interface. +* Scrollbars:: +* Menubars:: +* Checkboxes and Radio Buttons:: +* Progress Bars:: +* Tab Controls:: + + +File: internals.info, Node: Generic Widget Interface, Next: Scrollbars, Up: Lucid Widget Library + +Generic Widget Interface +------------------------ + + In general in any toolkit a widget may be a composite object. In Xt, +all widgets have an X window that they manage, but typically a complex +widget will have widget children, each of which manages a subwindow of +the parent widget's X window. These children may themselves be +composite widgets. Thus a widget is actually a tree or hierarchy of +widgets. + + For each toolkit widget, lwlib maintains a tree of `widget_values' +which mirror the hierarchical state of Xt widgets (including Motif, +Athena, 3D Athena, and Falk's widget sets). Each `widget_value' has +`contents' member, which points to the head of a linked list of its +children. The linked list of siblings is chained through the `next' +member of `widget_value'. + + +-----------+ + | composite | + +-----------+ + | + | contents + V + +-------+ next +-------+ next +-------+ + | child |----->| child |----->| child | + +-------+ +-------+ +-------+ + | + | contents + V + +-------------+ next +-------------+ + | grand child |----->| grand child | + +-------------+ +-------------+ + + The `widget_value' hierarchy of a composite widget with two simple + children and one composite child. + + The `widget_instance' structure maintains the inverse view of the +tree. As for the `widget_value', siblings are chained through the +`next' member. However, rather than naming children, the +`widget_instance' tree links to parents. + + +-----------+ + | composite | + +-----------+ + A + | parent + | + +-------+ next +-------+ next +-------+ + | child |----->| child |----->| child | + +-------+ +-------+ +-------+ + A + | parent + | + +-------------+ next +-------------+ + | grand child |----->| grand child | + +-------------+ +-------------+ + + The `widget_value' hierarchy of a composite widget with two simple + children and one composite child. + + This permits widgets derived from different toolkits to be updated +and manipulated generically by the lwlib library. For instance +`update_one_widget_instance' can cope with multiple types of widget and +multiple types of toolkit. Each element in the widget hierarchy is +updated from its corresponding `widget_value' by walking the +`widget_value' tree. This has desirable properties. For example, +`lw_modify_all_widgets' is called from `glyphs-x.c' and updates all the +properties of a widget without having to know what the widget is or +what toolkit it is from. Unfortunately this also has its hairy +properties; the lwlib code quite complex. And of course lwlib has to +know at some level what the widget is and how to set its properties. + + The `widget_instance' structure also contains a pointer to the root +of its tree. Widget instances are further confi + + +File: internals.info, Node: Scrollbars, Next: Menubars, Prev: Generic Widget Interface, Up: Lucid Widget Library + +Scrollbars +---------- + + +File: internals.info, Node: Menubars, Next: Checkboxes and Radio Buttons, Prev: Scrollbars, Up: Lucid Widget Library + +Menubars +-------- + + +File: internals.info, Node: Checkboxes and Radio Buttons, Next: Progress Bars, Prev: Menubars, Up: Lucid Widget Library + +Checkboxes and Radio Buttons +---------------------------- + + +File: internals.info, Node: Progress Bars, Next: Tab Controls, Prev: Checkboxes and Radio Buttons, Up: Lucid Widget Library + +Progress Bars +------------- + + +File: internals.info, Node: Tab Controls, Prev: Progress Bars, Up: Lucid Widget Library + +Tab Controls +------------ + + File: internals.info, Node: Index, Prev: Interface to the X Window System, Up: Top Index @@ -45,84 +186,232 @@ Index * Menu: +* allocation from frob blocks: Allocation from Frob Blocks. +* allocation of objects in XEmacs Lisp: Allocation of Objects in XEmacs Lisp. +* allocation, introduction to: Introduction to Allocation. +* allocation, low-level: Low-level allocation. * Amdahl Corporation: XEmacs. * Andreessen, Marc: XEmacs. * asynchronous subprocesses: Modules for Interfacing with the Operating System. +* bars, progress: Progress Bars. * Baur, Steve: XEmacs. * Benson, Eric: Lucid Emacs. +* binding; the specbinding stack; unwind-protects, dynamic: Dynamic Binding; The specbinding Stack; Unwind-Protects. +* bindings, evaluation; stack frames;: Evaluation; Stack Frames; Bindings. +* bit vector: Bit Vector. * bridge, playing: XEmacs From the Outside. * Buchholz, Martin: XEmacs. * Bufbyte: Character-Related Data Types. +* Bufbytes and Emchars: Bufbytes and Emchars. +* buffer lists: Buffer Lists. +* buffer object, the: The Buffer Object. +* buffer, the text in a: The Text in a Buffer. +* buffers and textual representation: Buffers and Textual Representation. +* buffers, introduction to: Introduction to Buffers. * Bufpos: Character-Related Data Types. +* building, XEmacs from the perspective of: XEmacs From the Perspective of Building. +* buttons, checkboxes and radio: Checkboxes and Radio Buttons. +* byte positions, working with character and: Working With Character and Byte Positions. * Bytecount: Character-Related Data Types. * bytecount_to_charcount: Working With Character and Byte Positions. * Bytind: Character-Related Data Types. +* C code, rules when writing new: Rules When Writing New C Code. * C vs. Lisp: The Lisp Language. +* callback routines, the event stream: The Event Stream Callback Routines. * caller-protects (GCPRO rule): Writing Lisp Primitives. * case table: Modules for Other Aspects of the Lisp Interpreter and Object System. +* catch and throw: Catch and Throw. +* CCL: CCL. +* character and byte positions, working with: Working With Character and Byte Positions. +* character encoding, internal: Internal Character Encoding. +* character sets: Character Sets. +* character sets and encodings, Mule: MULE Character Sets and Encodings. +* character-related data types: Character-Related Data Types. +* characters, integers and: Integers and Characters. * Charcount: Character-Related Data Types. * charcount_to_bytecount: Working With Character and Byte Positions. * charptr_emchar: Working With Character and Byte Positions. * charptr_n_addr: Working With Character and Byte Positions. +* checkboxes and radio buttons: Checkboxes and Radio Buttons. * closer: Lstream Methods. * closure: The XEmacs Object System (Abstractly Speaking). -* Coding for Mule: Coding for Mule. +* code, an example of Mule-aware: An Example of Mule-Aware Code. +* code, general guidelines for writing Mule-aware: General Guidelines for Writing Mule-Aware Code. +* code, rules when writing new C: Rules When Writing New C Code. +* coding for Mule: Coding for Mule. +* coding rules, general: General Coding Rules. +* command builder, dispatching events; the: Dispatching Events; The Command Builder. +* comments, writing good: Writing Good Comments. * Common Lisp: The Lisp Language. * compact_string_chars: compact_string_chars. +* compiled function: Compiled Function. +* compiler, the Lisp reader and: The Lisp Reader and Compiler. +* cons: Cons. * conservative garbage collection: GCPROing. +* consoles; devices; frames; windows: Consoles; Devices; Frames; Windows. +* consoles; devices; frames; windows, introduction to: Introduction to Consoles; Devices; Frames; Windows. +* control flow modules, editor-level: Editor-Level Control Flow Modules. +* conversion to and from external data: Conversion to and from External Data. +* converting events: Converting Events. * copy-on-write: General Coding Rules. +* creating Lisp object types: Techniques for XEmacs Developers. * critical redisplay sections: Critical Redisplay Sections. +* data dumping: Data dumping. +* data types, character-related: Character-Related Data Types. * DEC_CHARPTR: Working With Character and Byte Positions. +* developers, techniques for XEmacs: Techniques for XEmacs Developers. +* devices; frames; windows, consoles;: Consoles; Devices; Frames; Windows. +* devices; frames; windows, introduction to consoles;: Introduction to Consoles; Devices; Frames; Windows. * Devin, Matthieu: Lucid Emacs. +* dispatching events; the command builder: Dispatching Events; The Command Builder. * display order of extents: Mathematics of Extent Ordering. +* display-related Lisp objects, modules for other: Modules for other Display-Related Lisp Objects. +* displayable Lisp objects, modules for the basic: Modules for the Basic Displayable Lisp Objects. +* dumping: Dumping. +* dumping address allocation: Address allocation. +* dumping and its justification, what is: Dumping. +* dumping data descriptions: Data descriptions. +* dumping object inventory: Object inventory. +* dumping overview: Overview. +* dumping phase: Dumping phase. +* dumping, data: Data dumping. +* dumping, file loading: Reloading phase. +* dumping, object relocation: Reloading phase. +* dumping, pointers: Pointers dumping. +* dumping, putting back the pdump_opaques: Reloading phase. +* dumping, putting back the pdump_root_objects and pdump_weak_object_chains: Reloading phase. +* dumping, putting back the pdump_root_struct_ptrs: Reloading phase. +* dumping, reloading phase: Reloading phase. +* dumping, remaining issues: Remaining issues. +* dumping, reorganize the hash tables: Reloading phase. +* dumping, the header: The header. * dynamic array: Low-Level Modules. +* dynamic binding; the specbinding stack; unwind-protects: Dynamic Binding; The specbinding Stack; Unwind-Protects. * dynamic scoping: The Lisp Language. * dynamic types: The Lisp Language. +* editing operations, modules for standard: Modules for Standard Editing Operations. +* Emacs 19, GNU: GNU Emacs 19. +* Emacs 20, GNU: GNU Emacs 20. +* Emacs, a history of: A History of Emacs. * Emchar: Character-Related Data Types. +* Emchars, Bufbytes and: Bufbytes and Emchars. +* encoding, internal character: Internal Character Encoding. +* encoding, internal string: Internal String Encoding. +* encodings, internal Mule: Internal Mule Encodings. +* encodings, Mule: Encodings. +* encodings, Mule character sets and: MULE Character Sets and Encodings. * Energize: Lucid Emacs. * Epoch <1>: XEmacs. * Epoch: Lucid Emacs. +* error checking: Techniques for XEmacs Developers. +* EUC (Extended Unix Code), Japanese: Japanese EUC (Extended Unix Code). +* evaluation: Evaluation. +* evaluation; stack frames; bindings: Evaluation; Stack Frames; Bindings. +* event gathering mechanism, specifics of the: Specifics of the Event Gathering Mechanism. +* event loop functions, other: Other Event Loop Functions. +* event loop, events and the: Events and the Event Loop. +* event stream callback routines, the: The Event Stream Callback Routines. +* event, specifics about the Lisp object: Specifics About the Emacs Event. +* events and the event loop: Events and the Event Loop. +* events, converting: Converting Events. +* events, introduction to: Introduction to Events. +* events, main loop: Main Loop. +* events; the command builder, dispatching: Dispatching Events; The Command Builder. * Extbyte: Character-Related Data Types. * Extcount: Character-Related Data Types. -* extent fragment: Extent Fragments. +* Extended Unix Code, Japanese EUC: Japanese EUC (Extended Unix Code). +* extent fragments: Extent Fragments. +* extent info, format of the: Format of the Extent Info. * extent mathematics: Mathematics of Extent Ordering. -* extent ordering: Mathematics of Extent Ordering. +* extent ordering <1>: Mathematics of Extent Ordering. +* extent ordering: Extent Ordering. +* extents: Extents. * extents, display order: Mathematics of Extent Ordering. +* extents, introduction to: Introduction to Extents. +* extents, markers and: Markers and Extents. +* extents, zero-length: Zero-Length Extents. +* external data, conversion to and from: Conversion to and from External Data. * external widget: Modules for Interfacing with X Windows. +* faces: Faces. +* file system, modules for interfacing with the: Modules for Interfacing with the File System. * flusher: Lstream Methods. +* fragments, extent: Extent Fragments. +* frames; windows, consoles; devices;: Consoles; Devices; Frames; Windows. +* frames; windows, introduction to consoles; devices;: Introduction to Consoles; Devices; Frames; Windows. * Free Software Foundation: A History of Emacs. +* frob blocks, allocation from: Allocation from Frob Blocks. * FSF: A History of Emacs. * FSF Emacs <1>: GNU Emacs 20. * FSF Emacs: GNU Emacs 19. +* function, compiled: Compiled Function. * garbage collection: Garbage Collection. +* garbage collection - step by step: Garbage Collection - Step by Step. +* garbage collection protection <1>: GCPROing. * garbage collection protection: Writing Lisp Primitives. -* garbage collection step by step: Garbage Collection - Step by Step. * garbage collection, conservative: GCPROing. * garbage collection, invocation: Invocation. * garbage_collect_1: garbage_collect_1. * gc_sweep: gc_sweep. +* GCPROing: GCPROing. +* global Lisp variables, adding: Adding Global Lisp Variables. +* glyph instantiation: Glyphs. +* glyphs: Glyphs. * GNU Emacs 19: GNU Emacs 19. * GNU Emacs 20: GNU Emacs 20. * Gosling, James <1>: The Lisp Language. * Gosling, James: Through Version 18. * Great Usenet Renaming: Through Version 18. * Hackers (Steven Levy): A History of Emacs. +* header files, inline functions: Techniques for XEmacs Developers. * hierarchy of windows: Window Hierarchy. -* history of Emacs: A History of Emacs. +* history of Emacs, a: A History of Emacs. * Illinois, University of: XEmacs. * INC_CHARPTR: Working With Character and Byte Positions. +* inline functions: Techniques for XEmacs Developers. +* inline functions, headers: Techniques for XEmacs Developers. +* inside, XEmacs from the: XEmacs From the Inside. +* instantiation, glyph: Glyphs. +* integers and characters: Integers and Characters. * interactive: Modules for Standard Editing Operations. +* interfacing with the file system, modules for: Modules for Interfacing with the File System. +* interfacing with the operating system, modules for: Modules for Interfacing with the Operating System. +* interfacing with X Windows, modules for: Modules for Interfacing with X Windows. +* internal character encoding: Internal Character Encoding. +* internal Mule encodings: Internal Mule Encodings. +* internal string encoding: Internal String Encoding. +* internationalization, modules for: Modules for Internationalization. * interning: The XEmacs Object System (Abstractly Speaking). +* interpreter and object system, modules for other aspects of the Lisp: Modules for Other Aspects of the Lisp Interpreter and Object System. * ITS (Incompatible Timesharing System): A History of Emacs. +* Japanese EUC (Extended Unix Code): Japanese EUC (Extended Unix Code). * Java: The Lisp Language. * Java vs. Lisp: The Lisp Language. +* JIS7: JIS7. * Jones, Kyle: XEmacs. * Kaplan, Simon: XEmacs. * Levy, Steven: A History of Emacs. +* library, Lucid Widget: Lucid Widget Library. * line start cache: Line Start Cache. +* Lisp interpreter and object system, modules for other aspects of the: Modules for Other Aspects of the Lisp Interpreter and Object System. +* Lisp language, the: The Lisp Language. +* Lisp modules, basic: Basic Lisp Modules. +* Lisp object types, creating: Techniques for XEmacs Developers. +* Lisp objects are represented in C, how: How Lisp Objects Are Represented in C. +* Lisp objects, allocation of in XEmacs: Allocation of Objects in XEmacs Lisp. +* Lisp objects, modules for other display-related: Modules for other Display-Related Lisp Objects. +* Lisp objects, modules for the basic displayable: Modules for the Basic Displayable Lisp Objects. +* Lisp primitives, writing: Writing Lisp Primitives. +* Lisp reader and compiler, the: The Lisp Reader and Compiler. * Lisp vs. C: The Lisp Language. * Lisp vs. Java: The Lisp Language. +* low-level allocation: Low-level allocation. +* low-level modules: Low-Level Modules. +* lrecords: lrecords. * lstream: Modules for Interfacing with the File System. +* lstream functions: Lstream Functions. +* lstream methods: Lstream Methods. +* lstream types: Lstream Types. +* lstream, creating an: Creating an Lstream. * Lstream_close: Lstream Functions. * Lstream_fgetc: Lstream Functions. * Lstream_flush: Lstream Functions. @@ -138,38 +427,93 @@ Index * Lstream_ungetc: Lstream Functions. * Lstream_unread: Lstream Functions. * Lstream_write: Lstream Functions. +* lstreams: Lstreams. * Lucid Emacs: Lucid Emacs. * Lucid Inc.: Lucid Emacs. +* Lucid Widget Library: Lucid Widget Library. +* macro hygiene: Techniques for XEmacs Developers. +* main loop: Main Loop. * mark and sweep: Garbage Collection. * mark method <1>: lrecords. * mark method: Modules for Other Aspects of the Lisp Interpreter and Object System. * mark_object: mark_object. -* marker: Lstream Methods. -* mathematics of extents: Mathematics of Extent Ordering. +* marker <1>: Lstream Methods. +* marker: Marker. +* markers and extents: Markers and Extents. +* mathematics of extent ordering: Mathematics of Extent Ordering. * MAX_EMCHAR_LEN: Working With Character and Byte Positions. +* menubars: Menubars. +* menus: Menus. * merging attempts: XEmacs. * MIT: A History of Emacs. * Mlynarik, Richard: GNU Emacs 19. +* modules for interfacing with the file system: Modules for Interfacing with the File System. +* modules for interfacing with the operating system: Modules for Interfacing with the Operating System. +* modules for interfacing with X Windows: Modules for Interfacing with X Windows. +* modules for internationalization: Modules for Internationalization. +* modules for other aspects of the Lisp interpreter and object system: Modules for Other Aspects of the Lisp Interpreter and Object System. +* modules for other display-related Lisp objects: Modules for other Display-Related Lisp Objects. +* modules for standard editing operations: Modules for Standard Editing Operations. +* modules for the basic displayable Lisp objects: Modules for the Basic Displayable Lisp Objects. +* modules for the redisplay mechanism: Modules for the Redisplay Mechanism. +* modules, a summary of the various XEmacs: A Summary of the Various XEmacs Modules. +* modules, basic Lisp: Basic Lisp Modules. +* modules, editor-level control flow: Editor-Level Control Flow Modules. +* modules, low-level: Low-Level Modules. +* MS-Windows environment, widget-glyphs in the: Glyphs. +* Mule character sets and encodings: MULE Character Sets and Encodings. +* Mule encodings: Encodings. +* Mule encodings, internal: Internal Mule Encodings. * MULE merged XEmacs appears: XEmacs. +* Mule, coding for: Coding for Mule. +* Mule-aware code, an example of: An Example of Mule-Aware Code. +* Mule-aware code, general guidelines for writing: General Guidelines for Writing Mule-Aware Code. * NAS: Modules for Interfacing with the Operating System. * native sound: Modules for Interfacing with the Operating System. * network connections: Modules for Interfacing with the Operating System. * network sound: Modules for Interfacing with the Operating System. * Niksic, Hrvoje: XEmacs. +* obarrays: Obarrays. +* object system (abstractly speaking), the XEmacs: The XEmacs Object System (Abstractly Speaking). +* object system, modules for other aspects of the Lisp interpreter and: Modules for Other Aspects of the Lisp Interpreter and Object System. +* object types, creating Lisp: Techniques for XEmacs Developers. +* object, the buffer: The Buffer Object. +* object, the window: The Window Object. +* objects are represented in C, how Lisp: How Lisp Objects Are Represented in C. +* objects in XEmacs Lisp, allocation of: Allocation of Objects in XEmacs Lisp. +* objects, modules for the basic displayable Lisp: Modules for the Basic Displayable Lisp Objects. +* operating system, modules for interfacing with the: Modules for Interfacing with the Operating System. +* outside, XEmacs from the: XEmacs From the Outside. * pane: Modules for the Basic Displayable Lisp Objects. * permanent objects: The XEmacs Object System (Abstractly Speaking). * pi, calculating: XEmacs From the Outside. +* point: Point. +* pointers dumping: Pointers dumping. +* positions, working with character and byte: Working With Character and Byte Positions. +* primitives, writing Lisp: Writing Lisp Primitives. +* progress bars: Progress Bars. +* protection, garbage collection: GCPROing. * pseudo_closer: Lstream Methods. +* Purify: Techniques for XEmacs Developers. +* Quantify: Techniques for XEmacs Developers. +* radio buttons, checkboxes and: Checkboxes and Radio Buttons. * read syntax: The XEmacs Object System (Abstractly Speaking). * read-eval-print: XEmacs From the Outside. * reader: Lstream Methods. -* Redisplay Piece by Piece: Redisplay Piece by Piece. +* reader and compiler, the Lisp: The Lisp Reader and Compiler. +* redisplay mechanism, modules for the: Modules for the Redisplay Mechanism. +* redisplay mechanism, the: The Redisplay Mechanism. +* redisplay piece by piece: Redisplay Piece by Piece. +* redisplay sections, critical: Critical Redisplay Sections. +* reloading phase: Reloading phase. * relocating allocator: Low-Level Modules. * rename to XEmacs: XEmacs. +* represented in C, how Lisp objects are: How Lisp Objects Are Represented in C. * rewinder: Lstream Methods. * RMS: A History of Emacs. * scanner: Modules for Other Aspects of the Lisp Interpreter and Object System. * scoping, dynamic: The Lisp Language. +* scrollbars: Scrollbars. * seekable_p: Lstream Methods. * selections: Modules for Interfacing with X Windows. * set_charptr_emchar: Working With Character and Byte Positions. @@ -177,28 +521,76 @@ Index * sound, native: Modules for Interfacing with the Operating System. * sound, network: Modules for Interfacing with the Operating System. * SPARCWorks: XEmacs. +* specbinding stack; unwind-protects, dynamic binding; the: Dynamic Binding; The specbinding Stack; Unwind-Protects. +* special forms, simple: Simple Special Forms. +* specifiers: Specifiers. +* stack frames; bindings, evaluation;: Evaluation; Stack Frames; Bindings. * Stallman, Richard: A History of Emacs. +* string: String. +* string encoding, internal: Internal String Encoding. +* subprocesses: Subprocesses. * subprocesses, asynchronous: Modules for Interfacing with the Operating System. * subprocesses, synchronous: Modules for Interfacing with the Operating System. * Sun Microsystems: XEmacs. * sweep_bit_vectors_1: sweep_bit_vectors_1. * sweep_lcrecords_1: sweep_lcrecords_1. * sweep_strings: sweep_strings. +* symbol: Symbol. +* symbol values: Symbol Values. +* symbols and variables: Symbols and Variables. +* symbols, introduction to: Introduction to Symbols. * synchronous subprocesses: Modules for Interfacing with the Operating System. +* tab controls: Tab Controls. * taxes, doing: XEmacs From the Outside. +* techniques for XEmacs developers: Techniques for XEmacs Developers. * TECO: A History of Emacs. * temporary objects: The XEmacs Object System (Abstractly Speaking). +* text in a buffer, the: The Text in a Buffer. +* textual representation, buffers and: Buffers and Textual Representation. * Thompson, Chuck: XEmacs. +* throw, catch and: Catch and Throw. * types, dynamic: The Lisp Language. +* types, lstream: Lstream Types. +* types, proper use of unsigned: Proper Use of Unsigned Types. * University of Illinois: XEmacs. +* unsigned types, proper use of: Proper Use of Unsigned Types. +* unwind-protects, dynamic binding; the specbinding stack;: Dynamic Binding; The specbinding Stack; Unwind-Protects. +* values, symbol: Symbol Values. +* variables, adding global Lisp: Adding Global Lisp Variables. +* variables, symbols and: Symbols and Variables. +* vector: Vector. +* vector, bit: Bit Vector. +* version 18, through: Through Version 18. +* version 19, GNU Emacs: GNU Emacs 19. +* version 20, GNU Emacs: GNU Emacs 20. +* widget interface, generic: Generic Widget Interface. +* widget library, Lucid: Lucid Widget Library. +* widget-glyphs: Glyphs. +* widget-glyphs in the MS-Windows environment: Glyphs. +* widget-glyphs in the X environment: Glyphs. * Win-Emacs: XEmacs. * window (in Emacs): Modules for the Basic Displayable Lisp Objects. * window hierarchy: Window Hierarchy. +* window object, the: The Window Object. * window point internals: The Window Object. +* windows, consoles; devices; frames;: Consoles; Devices; Frames; Windows. +* windows, introduction to consoles; devices; frames;: Introduction to Consoles; Devices; Frames; Windows. * Wing, Ben: XEmacs. * writer: Lstream Methods. +* writing good comments: Writing Good Comments. +* writing Lisp primitives: Writing Lisp Primitives. +* writing Mule-aware code, general guidelines for: General Guidelines for Writing Mule-Aware Code. +* writing new C code, rules when: Rules When Writing New C Code. +* X environment, widget-glyphs in the: Glyphs. +* X Window System, interface to the: Interface to the X Window System. +* X Windows, modules for interfacing with: Modules for Interfacing with X Windows. * XEmacs: XEmacs. +* XEmacs from the inside: XEmacs From the Inside. +* XEmacs from the outside: XEmacs From the Outside. +* XEmacs from the perspective of building: XEmacs From the Perspective of Building. * XEmacs goes it alone: XEmacs. +* XEmacs object system (abstractly speaking), the: The XEmacs Object System (Abstractly Speaking). * Zawinski, Jamie: Lucid Emacs. +* zero-length extents: Zero-Length Extents. diff --git a/info/lispref.info b/info/lispref.info index 2f1244d..afa0020 100644 --- a/info/lispref.info +++ b/info/lispref.info @@ -94,11 +94,11 @@ lispref.info-40: 1879259 lispref.info-41: 1925812 lispref.info-42: 1974507 lispref.info-43: 2018882 -lispref.info-44: 2063251 -lispref.info-45: 2109745 -lispref.info-46: 2150587 -lispref.info-47: 2199805 -lispref.info-48: 2213674 +lispref.info-44: 2063267 +lispref.info-45: 2109761 +lispref.info-46: 2150603 +lispref.info-47: 2199821 +lispref.info-48: 2213690  Tag Table: (Indirect) @@ -858,62 +858,62 @@ Node: Building XEmacs with PostgreSQL support2012692 Node: XEmacs PostgreSQL libpq API2014039 Node: libpq Lisp Variables2015918 Node: libpq Lisp Symbols and DataTypes2018882 -Node: Synchronous Interface Functions2032122 -Node: Asynchronous Interface Functions2036613 -Node: Large Object Support2040118 -Node: Other libpq Functions2040745 -Node: Unimplemented libpq Functions2043780 -Node: XEmacs PostgreSQL libpq Examples2049099 -Node: Internationalization2055190 -Node: I18N Levels 1 and 22055533 -Node: I18N Level 32056239 -Node: Level 3 Basics2056520 -Node: Level 3 Primitives2057353 -Node: Dynamic Messaging2058959 -Node: Domain Specification2059422 -Node: Documentation String Extraction2061092 -Node: I18N Level 42062010 -Node: MULE2062202 -Node: Internationalization Terminology2063251 -Node: Charsets2075450 -Node: Charset Properties2076146 -Node: Basic Charset Functions2080861 -Node: Charset Property Functions2083042 -Node: Predefined Charsets2085112 -Node: MULE Characters2088032 -Node: Composite Characters2088907 -Node: Coding Systems2090174 -Node: Coding System Types2092314 -Node: ISO 20222096298 -Node: EOL Conversion2108573 -Node: Coding System Properties2109745 -Node: Basic Coding System Functions2114068 -Node: Coding System Property Functions2116102 -Node: Encoding and Decoding Text2116660 -Node: Detection of Textual Encoding2117796 -Node: Big5 and Shift-JIS Functions2119332 -Node: Predefined Coding Systems2120484 -Node: CCL2132578 -Node: CCL Syntax2135682 -Node: CCL Statements2137258 -Node: CCL Expressions2141906 -Node: Calling CCL2144445 -Node: CCL Examples2147450 -Node: Category Tables2147587 -Node: Tips2149946 -Node: Style Tips2150587 -Node: Compilation Tips2160106 -Node: Documentation Tips2162020 -Node: Comment Tips2167529 -Node: Library Headers2170532 -Node: Building XEmacs and Object Allocation2174504 -Node: Building XEmacs2175387 -Node: Pure Storage2181965 -Node: Garbage Collection2184753 -Node: Standard Errors2195596 -Node: Standard Buffer-Local Variables2199805 -Node: Standard Keymaps2202440 -Node: Standard Hooks2206174 -Node: Index2213674 +Node: Synchronous Interface Functions2032138 +Node: Asynchronous Interface Functions2036629 +Node: Large Object Support2040134 +Node: Other libpq Functions2040761 +Node: Unimplemented libpq Functions2043796 +Node: XEmacs PostgreSQL libpq Examples2049115 +Node: Internationalization2055206 +Node: I18N Levels 1 and 22055549 +Node: I18N Level 32056255 +Node: Level 3 Basics2056536 +Node: Level 3 Primitives2057369 +Node: Dynamic Messaging2058975 +Node: Domain Specification2059438 +Node: Documentation String Extraction2061108 +Node: I18N Level 42062026 +Node: MULE2062218 +Node: Internationalization Terminology2063267 +Node: Charsets2075466 +Node: Charset Properties2076162 +Node: Basic Charset Functions2080877 +Node: Charset Property Functions2083058 +Node: Predefined Charsets2085128 +Node: MULE Characters2088048 +Node: Composite Characters2088923 +Node: Coding Systems2090190 +Node: Coding System Types2092330 +Node: ISO 20222096314 +Node: EOL Conversion2108589 +Node: Coding System Properties2109761 +Node: Basic Coding System Functions2114084 +Node: Coding System Property Functions2116118 +Node: Encoding and Decoding Text2116676 +Node: Detection of Textual Encoding2117812 +Node: Big5 and Shift-JIS Functions2119348 +Node: Predefined Coding Systems2120500 +Node: CCL2132594 +Node: CCL Syntax2135698 +Node: CCL Statements2137274 +Node: CCL Expressions2141922 +Node: Calling CCL2144461 +Node: CCL Examples2147466 +Node: Category Tables2147603 +Node: Tips2149962 +Node: Style Tips2150603 +Node: Compilation Tips2160122 +Node: Documentation Tips2162036 +Node: Comment Tips2167545 +Node: Library Headers2170548 +Node: Building XEmacs and Object Allocation2174520 +Node: Building XEmacs2175403 +Node: Pure Storage2181981 +Node: Garbage Collection2184769 +Node: Standard Errors2195612 +Node: Standard Buffer-Local Variables2199821 +Node: Standard Keymaps2202456 +Node: Standard Hooks2206190 +Node: Index2213690  End Tag Table diff --git a/info/lispref.info-22 b/info/lispref.info-22 index 6d897d5..5cfaf11 100644 --- a/info/lispref.info-22 +++ b/info/lispref.info-22 @@ -1126,8 +1126,8 @@ the character itself. => "C-x" (key-description "\C-x \M-y \n \t \r \f123") => "C-x SPC M-y SPC LFD SPC TAB SPC RET SPC C-l 1 2 3" - (single-key-description 'kp_next) - => "kp_next" + (single-key-description 'kp-next) + => "kp-next" (single-key-description '(shift button1)) => "Sh-button1" diff --git a/info/lispref.info-43 b/info/lispref.info-43 index 18337d7..b8fb196 100644 --- a/info/lispref.info-43 +++ b/info/lispref.info-43 @@ -344,8 +344,8 @@ PGresult object. - Function: pq-cmd-status result Return a summary string from the query. RESULT is a PGresult object. - (pq-exec P "INSERT INTO xemacs_test - VALUES (6, 'Wakanohana', 'Yokozuna');") + (setq R (pq-exec P "INSERT INTO xemacs_test + VALUES (6, 'Wakanohana', 'Yokozuna');")) => # (pq-cmd-status R) => "INSERT 542086 1" diff --git a/info/new-users-guide.info b/info/new-users-guide.info index f3d6418..c013101 100644 --- a/info/new-users-guide.info +++ b/info/new-users-guide.info @@ -19,58 +19,58 @@ preserved on all copies.  Indirect: new-users-guide.info-1: 635 -new-users-guide.info-2: 50468 -new-users-guide.info-3: 100033 +new-users-guide.info-2: 50520 +new-users-guide.info-3: 100114  Tag Table: (Indirect) Node: Top635 -Node: Intro4612 -Node: Entering7195 -Node: Enter8709 -Node: Frame9391 -Node: Exiting11060 -Node: Mode Line12260 -Node: Echo Area14407 -Node: Windows and Menus15762 -Node: XEmacs Window16215 -Node: Pull-down Menus19836 -Node: File menu20715 -Node: Edit menu23974 -Node: Options Menu26500 -Node: Buffers Menu31282 -Node: Help menu31668 -Node: Edit32166 -Node: Insert33760 -Node: Cursor Position35088 -Node: Erase37159 -Node: Numeric Argument38313 -Node: Undo39497 -Node: Customization Basics40260 -Node: Customizing key Bindings41489 -Node: Customizing Menus44979 -Node: Help50468 -Node: The Help Menu51156 -Node: Modes56122 -Node: Major Modes57038 -Node: Minor Modes60987 -Node: Files65082 -Node: File Names65804 -Node: Visiting67607 -Node: Saving Files69731 -Node: Other Customizations73110 -Node: Setting Variables75586 -Node: Init File78795 -Node: Select and Move84265 -Node: Selecting Text85219 -Node: Mouse86732 -Node: Region Operation88057 -Node: Moving Text89317 -Node: Accumulating text90557 -Node: Search and Replace92878 -Node: Key Index96744 -Node: Command Index100033 -Node: Variable Index104135 -Node: Concept Index104712 +Node: Intro4613 +Node: Entering7196 +Node: Enter8710 +Node: Frame9392 +Node: Exiting11061 +Node: Mode Line12261 +Node: Echo Area14408 +Node: Windows and Menus15763 +Node: XEmacs Window16216 +Node: Pull-down Menus19837 +Node: File menu20716 +Node: Edit menu23975 +Node: Options Menu26501 +Node: Buffers Menu31286 +Node: Help menu31672 +Node: Edit32170 +Node: Insert33764 +Node: Cursor Position35092 +Node: Erase37163 +Node: Numeric Argument38317 +Node: Undo39501 +Node: Customization Basics40264 +Node: Customizing key Bindings41536 +Node: Customizing Menus45030 +Node: Help50520 +Node: The Help Menu51208 +Node: Modes56174 +Node: Major Modes57090 +Node: Minor Modes61041 +Node: Files65138 +Node: File Names65860 +Node: Visiting67663 +Node: Saving Files69787 +Node: Other Customizations73166 +Node: Setting Variables75650 +Node: Init File78861 +Node: Select and Move84346 +Node: Selecting Text85300 +Node: Mouse86813 +Node: Region Operation88138 +Node: Moving Text89398 +Node: Accumulating text90638 +Node: Search and Replace92959 +Node: Key Index96825 +Node: Command Index100114 +Node: Variable Index104216 +Node: Concept Index104793  End Tag Table diff --git a/info/new-users-guide.info-1 b/info/new-users-guide.info-1 index a3e72a5..d3aa9f9 100644 --- a/info/new-users-guide.info-1 +++ b/info/new-users-guide.info-1 @@ -110,7 +110,7 @@ Other Customizations * Setting Variables:: Customizing Emacs variables * Init File:: Some examples of Lisp expressions in - .emacs file + init.el file Selecting and Moving Text @@ -704,11 +704,11 @@ Teach Extended Commands M-x find-file-other-window (bound to keys: C-x 4 f, C-x 4 C-f) Syntax Highlighting - You can customize your `.emacs' file to include the font-lock mode + You can customize your `init.el' file to include the font-lock mode so that when you select this item, the comments will be displayed in one face, strings in another, reserved words in another, and so on. *Note Customization: (xemacs)Customization, for more - information on customizing `.emacs' file. After selecting this + information on customizing `init.el' file. After selecting this item, you will find your code a lot easier to read. When Fonts is selected, different parts of the program will appear in different Fonts. When Colors is selected, then the program will be displayed @@ -756,7 +756,7 @@ Buffers Sub-Menus Save Options Selecting this item will save the current settings of your Options - menu to your `.emacs' file so that the next time you start XEmacs, + menu to your `init.el' file so that the next time you start XEmacs, you won't need to select the options again.  @@ -1030,19 +1030,20 @@ File: new-users-guide.info, Node: Customization Basics, Next: Help, Prev: Edi Customize key bindings and menus ******************************** - When you start Emacs, it reads the file `~/.emacs' in your home -directory. You can use this file to initialize and customize Emacs to -your liking. This file should contain lisp-code. You can customize your -`.emacs' file to create new menus, disable menus, change key bindings, -enable a minor mode, etc. Any kind of customization affects only a -particular Emacs job that you do them in. If you want to save your -customizations `permanently' i.e. for future use also, you have to put -it in your `.emacs' file. After you make changes to your `.emacs' file -and save it, the changes will be effective only after you start Emacs -again i.e. for a new Emacs process. To try out some of the examples in -this section, highlight that region and evaluate the region by giving -the command `M-x eval-region'. You will be able to see the results of -your customizations in that Emacs session only (*note Lisp Eval: + When you start Emacs, it reads the file `~/.xemacs/init.el' in the +`.xemacs/' subdirectory of your home directory. You can use this file +to initialize and customize Emacs to your liking. This file should +contain lisp-code. You can customize your `init.el' file to create new +menus, disable menus, change key bindings, enable a minor mode, etc. +Any kind of customization affects only a particular Emacs job that you +do them in. If you want to save your customizations `permanently' i.e. +for future use also, you have to put it in your `init.el' file. After +you make changes to your `init.el' file and save it, the changes will +be effective only after you start Emacs again i.e. for a new Emacs +process. To try out some of the examples in this section, highlight +that region and evaluate the region by giving the command `M-x +eval-region'. You will be able to see the results of your +customizations in that Emacs session only (*note Lisp Eval: (xemacs)Lisp Eval.). * Menu: @@ -1066,12 +1067,12 @@ functions themselves define a particular behavior. You can customize the key `C-n' to move to the previous line by binding it to previous-line and `C-p' to move to the next line by binding it to next-line. To bind keys to globally run commands you need to use the -following syntax in your .emacs file: +following syntax in your init.el file: `(global-set-key KEYS CMD)' Here, `global-set-key' is a function which will bind the "keys" to the -specified "cmd". For example, if you type the following in your .emacs +specified "cmd". For example, if you type the following in your init.el file: (global-set-key "\C-p" 'next-line) @@ -1084,12 +1085,12 @@ syntax stated above. Here, `nil' stands for `false' which means disable a command or turn off a feature. If you want to enable a command or turn on a particular feature use `t' which stands for `true'. For example, if you do not wish `C-x C-c' to `Exit Emacs' you can type the -following expression in your `.emacs' file: +following expression in your `init.el' file: (global-set-key "\C-x\C-c" nil) -You might want to have this statement in your `.emacs' file because its -easy to hit this command by mistake and it could be annoying to exit +You might want to have this statement in your `init.el' file because +its easy to hit this command by mistake and it could be annoying to exit Emacs unintentionally. There is a Exit Emacs option in the File menu which you might want to use instead. To make a particular key undefined you can also use: @@ -1156,7 +1157,7 @@ are: This function will add a menu item to a menu, creating the menu first if necessary. If the named item already exists, the menu will remain unchanged. For example, if you add the following - example to your `.emacs' file or evaluate it (*note Customization + example to your `init.el' file or evaluate it (*note Customization Basics::), (add-menu-item '("Edit") "Replace String" replace-string t "Clear") diff --git a/info/new-users-guide.info-2 b/info/new-users-guide.info-2 index f996446..582851e 100644 --- a/info/new-users-guide.info-2 +++ b/info/new-users-guide.info-2 @@ -279,7 +279,7 @@ edit-picture asm-mode Use asm-mode for editing files of assembler code. Look at the file - ` /usr/local/lib/xemacs-19.11/lisp/modes/asm.el' for more + ` /usr/local/lib/xemacs-VERSION/lisp/modes/asm.el' for more information. There are some other modes and commands for working with other kinds @@ -319,11 +319,11 @@ font-lock-mode menu item from the Options menu on the menu-bar at the top. If you wish to have this mode enabled permanently, choose Save Options from the Options menu. *Note Options Menu::, for more information - on the Options menu. You can also add statements in your `.emacs' - file. For each major mode in which you wish to enable this minor - mode, you need a statement in your `.emacs' file. The following - example shows how to enable the font-lock mode when the major mode - is c-mode. + on the Options menu. You can also add statements in your + `init.el' file. For each major mode in which you wish to enable + this minor mode, you need a statement in your `init.el' file. The + following example shows how to enable the font-lock mode when the + major mode is c-mode. (add-hook 'c-mode-hook 'turn-on-font-lock) @@ -574,11 +574,11 @@ Other Customizations ******************** You can modify the behavior of Emacs in minor ways permanently by -putting your changes in your `.emacs' file. This file contains Lisp +putting your changes in your `init.el' file. This file contains Lisp function call expressions. Each of these expressions will consist of a function name followed by arguments, all surrounded by parentheses. For example, to turn on the auto-fill-mode (i.e. break lines automatically -when they become too long) , put the following line in your `.emacs' +when they become too long) , put the following line in your `init.el' file: (add-hook 'text-mode-hook @@ -597,8 +597,8 @@ example above. Similarly, to enable the "font-lock mode" which displays your program in different fonts and colors(*note Modes::), put the following -in your `.emacs' file. The comments above the statement explain what the -statements do. +in your `init.el' file. The comments above the statement explain what +the statements do. ;;; enables the font-lock-mode in Lisp Mode (add-hook 'lisp-mode-hook 'turn-on-font-lock) @@ -621,13 +621,13 @@ functions, comments or other keywords should be displayed in : (set-face-foreground 'font-lock-comment-face "forest green") For other customizations regarding the font-lock face, look at the file -`/usr/local/lib/xemacs-19.11/etc/sample.emacs'. +`/usr/local/lib/xemacs-VERSION/etc/sample.init.el'. * Menu: * Setting Variables:: Customizing Emacs variables * Init File:: Some examples of Lisp expressions in - .emacs file + init.el file  File: new-users-guide.info, Node: Setting Variables, Next: Init File, Prev: Other Customizations, Up: Other Customizations @@ -672,12 +672,12 @@ Type "nil" and hit . Now if you again use `M-x describe variable' , you will see that the new value of case-fold-search will be "nil" and your searches will be case-sensitive. This will be effective only for that Emacs session. If you want to change the value of a variable -permanently put the following statement in your `.emacs' file : +permanently put the following statement in your `init.el' file : (setq case-fold-search nil) This statement will make searches case-sensitive only in the current -buffer which is the `.emacs' file. This will not be very useful. To +buffer which is the `init.el' file. This will not be very useful. To make searches case-sensitive globally in all buffers, use: (setq-default case-fold-search nil) @@ -727,8 +727,8 @@ Init File Examples ================== For customizing Emacs, you need to put Lisp expressions in your -`.emacs' file. The following are some useful Lisp expressions. If you -find any of them useful, just type them in your `.emacs' file: +`init.el' file. The following are some useful Lisp expressions. If you +find any of them useful, just type them in your `init.el' file: * The following expression will make in C mode insert a real tab character if the cursor or point is in the middle of the line. @@ -786,7 +786,7 @@ find any of them useful, just type them in your `.emacs' file: If we use "setq" instead of "setq-default" then searches will be case-sensitive only in the current buffer's local value. In this - case the buffer would be the `.emacs' file. Since this would not + case the buffer would be the `init.el' file. Since this would not be too helpful and we want to have case-sensitive searches in all buffers, we have to use "setq-default". @@ -837,7 +837,7 @@ find any of them useful, just type them in your `.emacs' file: * If you don't want the text to be highlighted when you use commands for marking regions so as to use the "kill" and "yank" commands - later, you can use the following expression in your `.emacs' file: + later, you can use the following expression in your `init.el' file: (setq zmacs-regions nil) @@ -862,19 +862,19 @@ find any of them useful, just type them in your `.emacs' file: (set-menubar nil) * If you want an extensive menu-bar use the following expression in - your `.emacs' file. + your `init.el' file. (load "big-menubar") If you want to write your own menus, you can look at some of the examples in - `/usr/local/lib/xemacs-20.0/lisp/packages/big-menubar.el' file. + `/usr/local/lib/xemacs-VERSION/lisp/packages/big-menubar.el' file. - For more information on initializing your `.emacs' file, *Note Init + For more information on initializing your `init.el' file, *Note Init File: (xemacs)Init File. You should also look at -`/usr/local/lib/xemacs-20.0/etc/sample.emacs', which is a sample -`.emacs' file. It contains some of the commonly desired customizations +`/usr/local/lib/xemacs-VERSION/etc/sample.init.el', which is a sample +`init.el' file. It contains some of the commonly desired customizations in Emacs.  diff --git a/info/new-users-guide.info-3 b/info/new-users-guide.info-3 index 7fdf960..c7eb9c1 100644 --- a/info/new-users-guide.info-3 +++ b/info/new-users-guide.info-3 @@ -120,7 +120,6 @@ Concept Index * Menu: -* .emacs: Customization Basics. * abbrev-mode: Minor Modes. * accumulating text: Accumulating text. * add menus: Customizing Menus. @@ -182,6 +181,7 @@ Concept Index * Help menu: Help menu. * hook: Other Customizations. * init file examples: Init File. +* init.el: Customization Basics. * Insert File... menu item: File menu. * insertion: Insert. * key bindings: Customizing key Bindings. diff --git a/info/standards.info b/info/standards.info index 2ad33de..d7b69eb 100644 --- a/info/standards.info +++ b/info/standards.info @@ -6,7 +6,7 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996, -1997, 1998, 1999 Free Software Foundation, Inc. +1997, 1998, 1999, 2000 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -24,62 +24,72 @@ translation approved by the Free Software Foundation.  Indirect: -standards.info-1: 974 -standards.info-2: 48769 -standards.info-3: 97946 +standards.info-1: 980 +standards.info-2: 50916 +standards.info-3: 100599 +standards.info-4: 150168  Tag Table: (Indirect) -Node: Top974 -Node: Preface1565 -Node: Legal Issues2582 -Node: Reading Non-Free Code2948 -Node: Contributions4671 -Node: Design Advice6801 -Node: Compatibility7309 -Node: Using Extensions8820 -Node: ANSI C10322 -Node: Source Language12445 -Node: Program Behavior13938 -Node: Semantics14647 -Node: Libraries18964 -Node: Errors20199 -Node: User Interfaces21975 -Node: Option Table28852 -Node: Memory Usage43662 -Node: Writing C44656 -Node: Formatting45497 -Node: Comments48769 -Node: Syntactic Conventions52067 -Node: Names55005 -Node: System Portability56939 -Node: CPU Portability58536 -Node: System Functions60793 -Node: Internationalization65897 -Node: Mmap69045 -Node: Documentation69750 -Node: GNU Manuals70385 -Node: Manual Structure Details74633 -Node: License for Manuals75966 -Node: NEWS File76550 -Node: Change Logs77226 -Node: Change Log Concepts77943 -Node: Style of Change Logs79798 -Node: Simple Changes81352 -Node: Conditional Changes82543 -Node: Man Pages83920 -Node: Reading other Manuals85539 -Node: Managing Releases86323 -Node: Configuration87078 -Node: Makefile Conventions94018 -Node: Makefile Basics94777 -Node: Utilities in Makefiles97946 -Node: Command Variables100082 -Node: Directory Variables103583 -Node: Standard Targets114461 -Ref: Standard Targets-Footnote-1124900 -Node: Install Command Categories125000 -Node: Releases129573 -Node: References133656 +Node: Top980 +Node: Preface1585 +Node: Legal Issues3105 +Node: Reading Non-Free Code3568 +Node: Contributions5291 +Node: Trademarks7440 +Node: Design Advice8498 +Node: Source Language9004 +Node: Compatibility11011 +Node: Using Extensions12634 +Node: Standard C14205 +Node: Program Behavior16571 +Node: Semantics17489 +Node: Libraries22177 +Node: Errors23417 +Node: User Interfaces25193 +Node: Graphical Interfaces26793 +Node: Command-Line Interfaces27823 +Node: Option Table33308 +Node: Memory Usage48312 +Node: File Usage49332 +Node: Writing C50075 +Node: Formatting50916 +Node: Comments54974 +Node: Syntactic Conventions58272 +Node: Names61679 +Node: System Portability63867 +Node: CPU Portability66247 +Node: System Functions69498 +Node: Internationalization74700 +Node: Mmap77848 +Node: Documentation78553 +Node: GNU Manuals79657 +Node: Doc Strings and Manuals84709 +Node: Manual Structure Details86257 +Node: License for Manuals87670 +Node: Manual Credits88639 +Node: Printed Manuals89027 +Node: NEWS File89708 +Node: Change Logs90380 +Node: Change Log Concepts91129 +Node: Style of Change Logs92984 +Node: Simple Changes95030 +Node: Conditional Changes96265 +Node: Indicating the Part Changed97678 +Node: Man Pages98196 +Node: Reading other Manuals99815 +Node: Managing Releases100599 +Node: Configuration101354 +Node: Makefile Conventions108254 +Node: Makefile Basics109013 +Node: Utilities in Makefiles112178 +Node: Command Variables114314 +Node: Directory Variables117882 +Node: Standard Targets128767 +Ref: Standard Targets-Footnote-1140018 +Node: Install Command Categories140118 +Node: Releases144691 +Node: References148774 +Node: Index150168  End Tag Table diff --git a/info/standards.info-1 b/info/standards.info-1 index 0ba5b2e..cdabdb2 100644 --- a/info/standards.info-1 +++ b/info/standards.info-1 @@ -6,7 +6,7 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996, -1997, 1998, 1999 Free Software Foundation, Inc. +1997, 1998, 1999, 2000 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -28,7 +28,7 @@ File: standards.info, Node: Top, Next: Preface, Prev: (dir), Up: (dir) Version ******* - Last updated June 24, 1999. + Last updated February 21, 2001. * Menu: @@ -40,6 +40,7 @@ Version * Documentation:: Documenting Programs * Managing Releases:: The Release Process * References:: References to Non-Free Software or Documentation +* Index::  File: standards.info, Node: Preface, Next: Legal Issues, Prev: Top, Up: Top @@ -56,13 +57,21 @@ even if you write in another programming language. The rules often state reasons for writing in a certain way. Corrections or suggestions for this document should be sent to -. If you make a suggestion, please include a suggested -new wording for it; our time is limited. We prefer a context diff to -the `standards.texi' or `make-stds.texi' files, but if you don't have -those files, please mail your suggestion anyway. - - This release of the GNU Coding Standards was last updated June 24, -1999. +. If you make a suggestion, please include a +suggested new wording for it; our time is limited. We prefer a context +diff to the `standards.texi' or `make-stds.texi' files, but if you +don't have those files, please mail your suggestion anyway. + + This release of the GNU Coding Standards was last updated February +21, 2001. + + If you did not obtain this file directly from the GNU project and +recently, please check for a newer version. You can ftp the GNU Coding +Standards from any GNU FTP host in the directory `/pub/gnu/standards/'. +The GNU Coding Standards are available there in several different +formats: `standards.text', `standards.texi', `standards.info', and +`standards.dvi'. The GNU Coding Standards are also available on the +GNU World Wide Web server: `http://www.gnu.org/prep/standards_toc.html'.  File: standards.info, Node: Legal Issues, Next: Design Advice, Prev: Preface, Up: Top @@ -70,13 +79,14 @@ File: standards.info, Node: Legal Issues, Next: Design Advice, Prev: Preface, Keeping Free Software Free ************************** - This node discusses how you can make sure that GNU software remains -unencumbered. + This node discusses how you can make sure that GNU software avoids +legal difficulties, and other related issues. * Menu: * Reading Non-Free Code:: Referring to Proprietary Programs * Contributions:: Accepting Contributions +* Trademarks:: How We Deal with Trademark Issues  File: standards.info, Node: Reading Non-Free Code, Next: Contributions, Up: Legal Issues @@ -116,7 +126,7 @@ precisely when to free memory, or use a new GNU facility such as obstacks.  -File: standards.info, Node: Contributions, Prev: Reading Non-Free Code, Up: Legal Issues +File: standards.info, Node: Contributions, Next: Trademarks, Prev: Reading Non-Free Code, Up: Legal Issues Accepting Contributions ======================= @@ -163,6 +173,30 @@ reached the stage of actually maintaining a program for GNU (whether released or not), please ask us for a copy.  +File: standards.info, Node: Trademarks, Prev: Contributions, Up: Legal Issues + +Trademarks +========== + + Please do not include any trademark acknowledgements in GNU software +packages or documentation. + + Trademark acknowledgements are the statements that such-and-such is a +trademark of so-and-so. The GNU Project has no objection to the basic +idea of trademarks, but these acknowledgements feel like kowtowing, so +we don't use them. There is no legal requirement for them. + + What is legally required, as regards other people's trademarks, is to +avoid using them in ways which a reader might read as naming or labeling +our own programs or activities. For example, since "Objective C" is +(or at least was) a trademark, we made sure to say that we provide a +"compiler for the Objective C language" rather than an "Objective C +compiler". The latter is meant to be short for the former, but it does +not explicitly state the relationship, so it could be misinterpreted as +using "Objective C" as a label for the compiler rather than for the +language. + + File: standards.info, Node: Design Advice, Next: Program Behavior, Prev: Legal Issues, Up: Top General Program Design @@ -173,30 +207,76 @@ when designing your program. * Menu: +* Source Language:: Which languges to use. * Compatibility:: Compatibility with other implementations * Using Extensions:: Using non-standard features -* ANSI C:: Using ANSI C features -* Source Language:: Using languages other than C +* Standard C:: Using Standard C features  -File: standards.info, Node: Compatibility, Next: Using Extensions, Up: Design Advice +File: standards.info, Node: Source Language, Next: Compatibility, Up: Design Advice + +Which Languages to Use +====================== + + When you want to use a language that gets compiled and runs at high +speed, the best language to use is C. Using another language is like +using a non-standard feature: it will cause trouble for users. Even if +GCC supports the other language, users may find it inconvenient to have +to install the compiler for that other language in order to build your +program. For example, if you write your program in C++, people will +have to install the GNU C++ compiler in order to compile your program. + + C has one other advantage over C++ and other compiled languages: more +people know C, so more people will find it easy to read and modify the +program if it is written in C. + + So in general it is much better to use C, rather than the comparable +alternatives. + + But there are two exceptions to that conclusion: + + * It is no problem to use another language to write a tool + specifically intended for use with that language. That is because + the only people who want to build the tool will be those who have + installed the other language anyway. + + * If an application is of interest only to a narrow part of the + community, then the question of which language it is written in + has less effect on other people, so you may as well please + yourself. + + Many programs are designed to be extensible: they include an +interpreter for a language that is higher level than C. Often much of +the program is written in that language, too. The Emacs editor +pioneered this technique. + + The standard extensibility interpreter for GNU software is GUILE, +which implements the language Scheme (an especially clean and simple +dialect of Lisp). `http://www.gnu.org/software/guile/'. We don't +reject programs written in other "scripting languages" such as Perl and +Python, but using GUILE is very important for the overall consistency of +the GNU system. + + +File: standards.info, Node: Compatibility, Next: Using Extensions, Prev: Source Language, Up: Design Advice Compatibility with Other Implementations ======================================== With occasional exceptions, utility programs and libraries for GNU should be upward compatible with those in Berkeley Unix, and upward -compatible with ANSI C if ANSI C specifies their behavior, and upward -compatible with POSIX if POSIX specifies their behavior. +compatible with Standard C if Standard C specifies their behavior, and +upward compatible with POSIX if POSIX specifies their behavior. When these standards conflict, it is useful to offer compatibility modes for each of them. - ANSI C and POSIX prohibit many kinds of extensions. Feel free to -make the extensions anyway, and include a `--ansi', `--posix', or + Standard C and POSIX prohibit many kinds of extensions. Feel free +to make the extensions anyway, and include a `--ansi', `--posix', or `--compatible' option to turn them off. However, if the extension has a significant chance of breaking any real programs or scripts, then it -is not really upward compatible. Try to redesign its interface. +is not really upward compatible. So you should try to redesign its +interface to make it upward compatible. Many GNU programs suppress extensions that conflict with POSIX if the environment variable `POSIXLY_CORRECT' is defined (even if it is @@ -209,10 +289,11 @@ completely with something totally different and better. (For example, `vi' is replaced with Emacs.) But it is nice to offer a compatible feature as well. (There is a free `vi' clone, so we offer it.) - Additional useful features not in Berkeley Unix are welcome. + Additional useful features are welcome regardless of whether there +is any precedent for them.  -File: standards.info, Node: Using Extensions, Next: ANSI C, Prev: Compatibility, Up: Design Advice +File: standards.info, Node: Using Extensions, Next: Standard C, Prev: Compatibility, Up: Design Advice Using Non-standard Features =========================== @@ -236,44 +317,42 @@ straightforwardly do without them, but to use the extensions if they are a big improvement. An exception to this rule are the large, established programs (such -as Emacs) which run on a great variety of systems. Such programs would -be broken by use of GNU extensions. +as Emacs) which run on a great variety of systems. Using GNU +extensions in such programs would make many users unhappy, so we don't +do that. Another exception is for programs that are used as part of compilation: anything that must be compiled with other compilers in order to bootstrap the GNU compilation facilities. If these require the GNU compiler, then no one can compile them without having them -installed already. That would be no good. +installed already. That would be extremely troublesome in certain +cases.  -File: standards.info, Node: ANSI C, Next: Source Language, Prev: Using Extensions, Up: Design Advice - -ANSI C and pre-ANSI C -===================== +File: standards.info, Node: Standard C, Prev: Using Extensions, Up: Design Advice - Do not ever use the "trigraph" feature of ANSI C. +Standard C and Pre-Standard C +============================= - ANSI C is widespread enough now that it is ok to write new programs -that use ANSI C features (and therefore will not work in non-ANSI -compilers). And if a program is already written in ANSI C, there's no -need to convert it to support non-ANSI compilers. + 1989 Standard C is widespread enough now that it is ok to use its +features in new programs. There is one exception: do not ever use the +"trigraph" feature of Standard C. - If you don't know non-ANSI C, there's no need to learn it; just -write in ANSI C. + 1999 Standard C is not widespread yet, so please do not require its +features in programs. It is ok to use its features if they are present. - However, it is easy to support non-ANSI compilers in most programs, -so you might still consider doing so when you write a program. And if a -program you are maintaining has such support, you should try to keep it -working. + However, it is easy to support pre-standard compilers in most +programs, so if you know how to do that, feel free. If a program you +are maintaining has such support, you should try to keep it working. - To support pre-ANSI C, instead of writing function definitions in -ANSI prototype form, + To support pre-standard C, instead of writing function definitions in +standard prototype form, int foo (int x, int y) ... -write the definition in pre-ANSI style like this, +write the definition in pre-standard style like this, int foo (x, y) @@ -285,9 +364,9 @@ and use a separate declaration to specify the argument prototype: int foo (int, int); You need such a declaration anyway, in a header file, to get the -benefit of ANSI C prototypes in all the files where the function is -called. And once you have the declaration, you normally lose nothing -by writing the function definition in the pre-ANSI style. +benefit of prototypes in all the files where the function is called. +And once you have the declaration, you normally lose nothing by writing +the function definition in the pre-standard style. This technique does not work for integer types narrower than `int'. If you think of an argument as being of a type narrower than `int', @@ -298,48 +377,20 @@ For example, if a function argument needs to hold the system type `dev_t', you run into trouble, because `dev_t' is shorter than `int' on some machines; but you cannot use `int' instead, because `dev_t' is wider than `int' on some machines. There is no type you can safely use -on all machines in a non-ANSI definition. The only way to support -non-ANSI C and pass such an argument is to check the width of `dev_t' -using Autoconf and choose the argument type accordingly. This may not -be worth the trouble. +on all machines in a non-standard definition. The only way to support +non-standard C and pass such an argument is to check the width of +`dev_t' using Autoconf and choose the argument type accordingly. This +may not be worth the trouble. - -File: standards.info, Node: Source Language, Prev: ANSI C, Up: Design Advice - -Using Languages Other Than C -============================ - - Using a language other than C is like using a non-standard feature: -it will cause trouble for users. Even if GCC supports the other -language, users may find it inconvenient to have to install the -compiler for that other language in order to build your program. For -example, if you write your program in C++, people will have to install -the C++ compiler in order to compile your program. Thus, it is better -if you write in C. - - But there are three situations when there is no disadvantage in using -some other language: - - * It is okay to use another language if your program contains an - interpreter for that language. - - For example, if your program links with GUILE, it is ok to write - part of the program in Scheme or another language supported by - GUILE. + In order to support pre-standard compilers that do not recognize +prototypes, you may want to use a preprocessor macro like this: - * It is okay to use another language in a tool specifically intended - for use with that language. - - This is okay because the only people who want to build the tool - will be those who have installed the other language anyway. - - * If an application is of interest to a narrow community, then - perhaps it's not important if the application is inconvenient to - install. - - C has one other advantage over C++ and other compiled languages: more -people know C, so more people will find it easy to read and modify the -program if it is written in C. + /* Declare the prototype for a general external function. */ + #if defined (__STDC__) || defined (WINDOWSNT) + #define P_(proto) proto + #else + #define P_(proto) () + #endif  File: standards.info, Node: Program Behavior, Next: Writing C, Prev: Design Advice, Up: Top @@ -347,18 +398,21 @@ File: standards.info, Node: Program Behavior, Next: Writing C, Prev: Design A Program Behavior for All Programs ********************************* - This node describes how to write robust software. It also describes -general standards for error messages, the command line interface, and -how libraries should behave. + This node describes conventions for writing robust software. It +also describes general standards for error messages, the command line +interface, and how libraries should behave. * Menu: * Semantics:: Writing robust programs * Libraries:: Library behavior * Errors:: Formatting error messages -* User Interfaces:: Standards for command line interfaces -* Option Table:: Table of long options. +* User Interfaces:: Standards about interfaces generally +* Graphical Interfaces:: Standards for graphical interfaces +* Command-Line Interfaces:: Standards for command line interfaces +* Option Table:: Table of long options * Memory Usage:: When and how to care about memory needs +* File Usage:: Which files to use, and where  File: standards.info, Node: Semantics, Next: Libraries, Up: Program Behavior @@ -449,6 +503,16 @@ as the status, and it will appear that the program succeeded. variable; if that variable is defined, use the specified directory instead of `/tmp'. + In addition, be aware that there is a possible security problem when +creating temporary files in world-writable directories. In C, you can +avoid this problem by creating temporary files in this manner: + + fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0600); + +or by using the `mkstemps' function from libiberty. + + In bash, use `set -C' to avoid this problem. +  File: standards.info, Node: Libraries, Next: Errors, Prev: Semantics, Up: Program Behavior @@ -472,10 +536,10 @@ together, so that no reasonable program could use one without the other; then they can both go in the same file. External symbols that are not documented entry points for the user -should have names beginning with `_'. They should also contain the -chosen name prefix for the library, to prevent collisions with other -libraries. These can go in the same files with user entry points if -you like. +should have names beginning with `_'. The `_' should be followed by +the chosen name prefix for the library, to prevent collisions with +other libraries. These can go in the same files with user entry points +if you like. Static functions and variables can be used as you like and need not fit any naming convention. @@ -531,10 +595,10 @@ usage messages, should start with a capital letter. But they should not end with a period.  -File: standards.info, Node: User Interfaces, Next: Option Table, Prev: Errors, Up: Program Behavior +File: standards.info, Node: User Interfaces, Next: Graphical Interfaces, Prev: Errors, Up: Program Behavior -Standards for Command Line Interfaces -===================================== +Standards for Interfaces Generally +================================== Please don't make the behavior of a utility depend on the name used to invoke it. It is useful sometimes to make a link to a utility with @@ -564,6 +628,34 @@ output device type. For example, we provide a `dir' program much like `ls' except that its default output format is always multi-column format. + +File: standards.info, Node: Graphical Interfaces, Next: Command-Line Interfaces, Prev: User Interfaces, Up: Program Behavior + +Standards for Graphical Interfaces +================================== + + When you write a program that provides a graphical user interface, +please make it work with X Windows and the GTK toolkit unless the +functionality specifically requires some alternative (for example, +"displaying jpeg images while in console mode"). + + In addition, please provide a command-line interface to control the +functionality. (In many cases, the graphical user interface can be a +separate program which invokes the command-line program.) This is so +that the same jobs can be done from scripts. + + Please also consider providing a CORBA interface (for use from +GNOME), a library interface (for use from C), and perhaps a +keyboard-driven console interface (for use by users from console mode). +Once you are doing the work to provide the functionality and the +graphical interface, these won't be much extra work. + + +File: standards.info, Node: Command-Line Interfaces, Next: Option Table, Prev: Graphical Interfaces, Up: Program Behavior + +Standards for Command Line Interfaces +===================================== + It is a good idea to follow the POSIX guidelines for the command-line options of a program. The easiest way to do this is to use `getopt' to parse them. Note that the GNU version of `getopt' will @@ -678,7 +770,7 @@ among GNU utilities, and fewer idiosyncracies for users to remember. Report bugs to MAILING-ADDRESS.  -File: standards.info, Node: Option Table, Next: Memory Usage, Prev: User Interfaces, Up: Program Behavior +File: standards.info, Node: Option Table, Next: Memory Usage, Prev: Command-Line Interfaces, Up: Program Behavior Table of Long Options ===================== @@ -686,8 +778,8 @@ Table of Long Options Here is a table of long options used by GNU programs. It is surely incomplete, but we aim to list all the options that a new program might want to be compatible with. If you use names not already in the table, -please send a list of them, with their meanings, so we -can update the table. +please send a list of them, with their +meanings, so we can update the table. `after-date' `-N' in `tar'. @@ -1042,6 +1134,9 @@ can update the table. `hide-control-chars' `-q' in `ls'. +`html' + In `makeinfo', output HTML. + `idle' `-u' in `who'. @@ -1099,6 +1194,10 @@ can update the table. `info' `-i', `-l', and `-m' in Finger. +`init-file' + In some programs, specify the name of the file to read as the + user's init file. + `initial' `-i' in `expand'. @@ -1115,6 +1214,9 @@ can update the table. `intermix-type' `-p' in `shar'. +`iso-8601' + Used in `date' + `jobs' `-j' in Make. @@ -1758,15 +1860,16 @@ can update the table. `-z' in `gprof'.  -File: standards.info, Node: Memory Usage, Prev: Option Table, Up: Program Behavior +File: standards.info, Node: Memory Usage, Next: File Usage, Prev: Option Table, Up: Program Behavior Memory Usage ============ - If it typically uses just a few meg of memory, don't bother making -any effort to reduce memory usage. For example, if it is impractical -for other reasons to operate on files more than a few meg long, it is -reasonable to read entire input files into core to operate on them. + If a program typically uses just a few meg of memory, don't bother +making any effort to reduce memory usage. For example, if it is +impractical for other reasons to operate on files more than a few meg +long, it is reasonable to read entire input files into core to operate +on them. However, for programs such as `cat' or `tail', that can usefully operate on very large files, it is important to avoid using a technique @@ -1780,6 +1883,25 @@ are bigger than will fit in core all at once. in core and give a fatal error if `malloc' returns zero.  +File: standards.info, Node: File Usage, Prev: Memory Usage, Up: Program Behavior + +File Usage +========== + + Programs should be prepared to operate when `/usr' and `/etc' are +read-only file systems. Thus, if the program manages log files, lock +files, backup files, score files, or any other files which are modified +for internal purposes, these files should not be stored in `/usr' or +`/etc'. + + There are two exceptions. `/etc' is used to store system +configuration information; it is reasonable for a program to modify +files in `/etc' when its job is to update the system configuration. +Also, if the user explicitly asks to modify one file in a directory, it +is reasonable for the program to store other files in the same +directory. + + File: standards.info, Node: Writing C, Next: Documentation, Prev: Program Behavior, Up: Top Making The Best Use of C @@ -1800,105 +1922,3 @@ writing GNU software. * Internationalization:: Techniques for internationalization * Mmap:: How you can safely use `mmap'. - -File: standards.info, Node: Formatting, Next: Comments, Up: Writing C - -Formatting Your Source Code -=========================== - - It is important to put the open-brace that starts the body of a C -function in column zero, and avoid putting any other open-brace or -open-parenthesis or open-bracket in column zero. Several tools look -for open-braces in column zero to find the beginnings of C functions. -These tools will not work on code not formatted that way. - - It is also important for function definitions to start the name of -the function in column zero. This helps people to search for function -definitions, and may also help certain tools recognize them. Thus, the -proper format is this: - - static char * - concat (s1, s2) /* Name starts in column zero here */ - char *s1, *s2; - { /* Open brace in column zero here */ - ... - } - -or, if you want to use ANSI C, format the definition like this: - - static char * - concat (char *s1, char *s2) - { - ... - } - - In ANSI C, if the arguments don't fit nicely on one line, split it -like this: - - int - lots_of_args (int an_integer, long a_long, short a_short, - double a_double, float a_float) - ... - - For the body of the function, we prefer code formatted like this: - - if (x < foo (y, z)) - haha = bar[4] + 5; - else - { - while (z) - { - haha += foo (z, z); - z--; - } - return ++x + bar (); - } - - We find it easier to read a program when it has spaces before the -open-parentheses and after the commas. Especially after the commas. - - When you split an expression into multiple lines, split it before an -operator, not after one. Here is the right way: - - if (foo_this_is_long && bar > win (x, y, z) - && remaining_condition) - - Try to avoid having two operators of different precedence at the same -level of indentation. For example, don't write this: - - mode = (inmode[j] == VOIDmode - || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) - ? outmode[j] : inmode[j]); - - Instead, use extra parentheses so that the indentation shows the -nesting: - - mode = ((inmode[j] == VOIDmode - || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) - ? outmode[j] : inmode[j]); - - Insert extra parentheses so that Emacs will indent the code properly. -For example, the following indentation looks nice if you do it by hand, -but Emacs would mess it up: - - v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 - + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000; - - But adding a set of parentheses solves the problem: - - v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 - + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000); - - Format do-while statements like this: - - do - { - a = foo (a); - } - while (a > 0); - - Please use formfeed characters (control-L) to divide the program into -pages at logical places (but not within a function). It does not matter -just how long the pages are, since they do not have to fit on a printed -page. The formfeeds should appear alone on lines by themselves. - diff --git a/info/standards.info-2 b/info/standards.info-2 index 8fd19bd..5c956cc 100644 --- a/info/standards.info-2 +++ b/info/standards.info-2 @@ -6,7 +6,7 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996, -1997, 1998, 1999 Free Software Foundation, Inc. +1997, 1998, 1999, 2000 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -23,6 +23,125 @@ versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.  +File: standards.info, Node: Formatting, Next: Comments, Up: Writing C + +Formatting Your Source Code +=========================== + + It is important to put the open-brace that starts the body of a C +function in column zero, and avoid putting any other open-brace or +open-parenthesis or open-bracket in column zero. Several tools look +for open-braces in column zero to find the beginnings of C functions. +These tools will not work on code not formatted that way. + + It is also important for function definitions to start the name of +the function in column zero. This helps people to search for function +definitions, and may also help certain tools recognize them. Thus, the +proper format is this: + + static char * + concat (s1, s2) /* Name starts in column zero here */ + char *s1, *s2; + { /* Open brace in column zero here */ + ... + } + +or, if you want to use Standard C syntax, format the definition like +this: + + static char * + concat (char *s1, char *s2) + { + ... + } + + In Standard C, if the arguments don't fit nicely on one line, split +it like this: + + int + lots_of_args (int an_integer, long a_long, short a_short, + double a_double, float a_float) + ... + + The rest of this section gives our recommendations for other aspects +of C formatting style, which is also the default style of the `indent' +program in version 1.2 and newer. It corresponds to the options + + -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 + -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob + + We don't think of these recommendations as requirements, because it +causes no problems for users if two different programs have different +formatting styles. + + But whatever style you use, please use it consistently, since a +mixture of styles within one program tends to look ugly. If you are +contributing changes to an existing program, please follow the style of +that program. + + For the body of the function, our recommended style looks like this: + + if (x < foo (y, z)) + haha = bar[4] + 5; + else + { + while (z) + { + haha += foo (z, z); + z--; + } + return ++x + bar (); + } + + We find it easier to read a program when it has spaces before the +open-parentheses and after the commas. Especially after the commas. + + When you split an expression into multiple lines, split it before an +operator, not after one. Here is the right way: + + if (foo_this_is_long && bar > win (x, y, z) + && remaining_condition) + + Try to avoid having two operators of different precedence at the same +level of indentation. For example, don't write this: + + mode = (inmode[j] == VOIDmode + || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) + ? outmode[j] : inmode[j]); + + Instead, use extra parentheses so that the indentation shows the +nesting: + + mode = ((inmode[j] == VOIDmode + || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) + ? outmode[j] : inmode[j]); + + Insert extra parentheses so that Emacs will indent the code properly. +For example, the following indentation looks nice if you do it by hand, + + v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000; + +but Emacs would alter it. Adding a set of parentheses produces +something that looks equally nice, and which Emacs will preserve: + + v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000); + + Format do-while statements like this: + + do + { + a = foo (a); + } + while (a > 0); + + Please use formfeed characters (control-L) to divide the program into +pages at logical places (but not within a function). It does not matter +just how long the pages are, since they do not have to fit on a printed +page. The formfeeds should appear alone on lines by themselves. + + File: standards.info, Node: Comments, Next: Syntactic Conventions, Prev: Formatting, Up: Writing C Commenting Your Work @@ -108,8 +227,16 @@ File: standards.info, Node: Syntactic Conventions, Next: Names, Prev: Comment Clean Use of C Constructs ========================= - Please explicitly declare all arguments to functions. Don't omit -them just because they are `int's. + Please explicitly declare the types of all objects. For example, you +should explicitly declare all arguments to functions, and you should +declare functions to return `int' rather than omitting the `int'. + + Some programmers like to use the GCC `-Wall' option, and change the +code whenever it issues a warning. If you want to do this, then do. +Other programmers prefer not to use `-Wall', because it gives warnings +for valid and legitimate code which they do not want to change. If you +want to do this, then do. The compiler should be your servant, not +your master. Declarations of external functions and functions to appear later in the source file should all go in one place near the beginning of the @@ -245,11 +372,16 @@ the option and its letter. For example, When you want to define names with constant integer values, use `enum' rather than `#define'. GDB knows about enumeration constants. - Use file names of 14 characters or less, to avoid creating gratuitous -problems on older System V systems. You can use the program `doschk' -to test for this. `doschk' also tests for potential name conflicts if -the files were loaded onto an MS-DOS file system--something you may or -may not care about. + You might want to make sure that none of the file names would +conflict the files were loaded onto an MS-DOS file system which +shortens the names. You can use the program `doschk' to test for this. + + Some GNU programs were designed to limit themselves to file names of +14 characters or less, to avoid file name conflicts if they are read +into older System V systems. Please preserve this feature in the +existing GNU programs that have it, but there is no need to do this in +new GNU programs. `doschk' also reports file names longer than 14 +characters.  File: standards.info, Node: System Portability, Next: CPU Portability, Prev: Names, Up: Writing C @@ -262,15 +394,17 @@ versions. For a GNU program, this kind of portability is desirable, but not paramount. The primary purpose of GNU software is to run on top of the GNU -kernel, compiled with the GNU C compiler, on various types of CPU. The -amount and kinds of variation among GNU systems on different CPUs will -be comparable to the variation among Linux-based GNU systems or among -BSD systems today. So the kinds of portability that are absolutely -necessary are quite limited. - - But many users do run GNU software on non-GNU Unix or Unix-like -systems. So supporting a variety of Unix-like systems is desirable, -although not paramount. +kernel, compiled with the GNU C compiler, on various types of CPU. So +the kinds of portability that are absolutely necessary are quite +limited. But it is important to support Linux-based GNU systems, since +they are the form of GNU that is popular. + + Beyond that, it is good to support the other free operating systems +(*BSD), and it is nice to support other Unix-like systems if you want +to. Supporting a variety of Unix-like systems is desirable, although +not paramount. It is usually not too hard, so you may as well do it. +But you don't have to consider it an obligation, if it does turn out to +be hard. The easiest way to achieve portability to most Unix-like systems is to use Autoconf. It's unlikely that your program needs to know more @@ -287,6 +421,18 @@ that is the case, it is better to spend your time adding features that will be useful on GNU and GNU/Linux, rather than on supporting other incompatible systems. + It is a good idea to define the "feature test macro" `_GNU_SOURCE' +when compiling your C files. When you compile on GNU or GNU/Linux, +this will enable the declarations of GNU library extension functions, +and that will usually give you a compiler error message if you define +the same function names in some other way in your program. (You don't +have to actually _use_ these functions, if you prefer to make the +program more portable to other systems.) + + But whether or not you use these GNU extensions, you should avoid +using their names for any other meanings. Doing so would make it hard +to move your code into other GNU programs. +  File: standards.info, Node: CPU Portability, Next: System Functions, Prev: System Portability, Up: Writing C @@ -300,6 +446,23 @@ However, don't make any effort to cater to the possibility that an `int' will be less than 32 bits. We don't support 16-bit machines in GNU. + Similarly, don't make any effort to cater to the possibility that +`long' will be smaller than predefined types like `size_t'. For +example, the following code is ok: + + printf ("size = %lu\n", (unsigned long) sizeof array); + printf ("diff = %ld\n", (long) (pointer2 - pointer1)); + + 1989 Standard C requires this to work, and we know of only one +counterexample: 64-bit programs on Microsoft Windows IA-64. We will +leave it to those who want to port GNU programs to that environment to +figure out how to do it. + + Predefined file-size types like `off_t' are an exception: they are +longer than `long' on many platforms, so code like the above won't work +with them. One way to print an `off_t' value portably is to print its +digits yourself, one by one. + Don't assume that the address of an `int' object is also the address of its least-significant byte. This is false on big-endian machines. Thus, don't make the following mistake: @@ -312,9 +475,9 @@ Thus, don't make the following mistake: When calling functions, you need not worry about the difference between pointers of various types, or between pointers and integers. On most machines, there's no difference anyway. As for the few -machines where there is a difference, all of them support ANSI C, so -you can use prototypes (conditionalized to be active only in ANSI C) to -make the code work on those systems. +machines where there is a difference, all of them support Standard C +prototypes, so you can use prototypes (perhaps conditionalized to be +active only in Standard C) to make the code work on those systems. In certain cases, it is ok to pass integer and pointer arguments indiscriminately to the same function, and use no prototype on any @@ -330,17 +493,21 @@ that pass their arguments along to `printf' and friends: } In practice, this works on all machines, since a pointer is generally -the widest possible kind of argument, and it is much simpler than any +the widest possible kind of argument; it is much simpler than any "correct" alternative. Be sure _not_ to use a prototype for such functions. - However, avoid casting pointers to integers unless you really need -to. Outside of special situations, such casts greatly reduce -portability, and in most programs they are easy to avoid. In the cases -where casting pointers to integers is essential--such as, a Lisp + If you have decided to use Standard C, then you can instead define +`error' using `stdarg.h', and pass the arguments along to `vfprintf'. + + Avoid casting pointers to integers if you can. Such casts greatly +reduce portability, and in most programs they are easy to avoid. In the +cases where casting pointers to integers is essential--such as, a Lisp interpreter which stores type information as well as an address in one -word--it is ok to do it, but you'll have to make explicit provisions to -handle different word sizes. +word--you'll have to make explicit provisions to handle different word +sizes. You will also need to make provision for systems in which the +normal range of addresses you can get from `malloc' starts far away +from zero.  File: standards.info, Node: System Functions, Next: Internationalization, Prev: CPU Portability, Up: Writing C @@ -348,15 +515,17 @@ File: standards.info, Node: System Functions, Next: Internationalization, Pre Calling System Functions ======================== - C implementations differ substantially. ANSI C reduces but does not -eliminate the incompatibilities; meanwhile, many users wish to compile -GNU software with pre-ANSI compilers. This chapter gives -recommendations for how to use the more or less standard C library -functions to avoid unnecessary loss of portability. + C implementations differ substantially. Standard C reduces but does +not eliminate the incompatibilities; meanwhile, many GNU packages still +support pre-standard compilers because this is not hard to do. This +chapter gives recommendations for how to use the more-or-less standard C +library functions to avoid unnecessary loss of portability. - * Don't use the value of `sprintf'. It returns the number of + * Don't use the return value of `sprintf'. It returns the number of characters written on some systems, but not on all systems. + * Be aware that `vfprintf' is not always available. + * `main' should be declared to return type `int'. It should terminate either by calling `exit' or by returning the integer status code; make sure it cannot ever return an undefined value. @@ -375,8 +544,9 @@ functions to avoid unnecessary loss of portability. frequently caused actual conflicts. * If you must declare a system function, don't specify the argument - types. Use an old-style declaration, not an ANSI prototype. The - more you specify about the function, the more likely a conflict. + types. Use an old-style declaration, not a Standard C prototype. + The more you specify about the function, the more likely a + conflict. * In particular, don't unconditionally declare `malloc' or `realloc'. @@ -404,10 +574,10 @@ functions to avoid unnecessary loss of portability. declarations for the string functions from the header file in the usual way. - That causes less of a problem than you might think. The newer ANSI - string functions should be avoided anyway because many systems - still don't support them. The string functions you can use are - these: + That causes less of a problem than you might think. The newer + standard string functions should be avoided anyway because many + systems still don't support them. The string functions you can + use are these: strcpy strncpy strcat strncat strlen strcmp strncmp @@ -433,12 +603,12 @@ functions to avoid unnecessary loss of portability. You should pick a single pair of names and use it throughout your program. (Nowadays, it is better to choose `strchr' and `strrchr' - for new programs, since those are the standard ANSI names.) - Declare both of those names as functions returning `char *'. On - systems which don't support those names, define them as macros in - terms of the other pair. For example, here is what to put at the - beginning of your file (or in a header) if you want to use the - names `strchr' and `strrchr' throughout: + for new programs, since those are the standard names.) Declare + both of those names as functions returning `char *'. On systems + which don't support those names, define them as macros in terms of + the other pair. For example, here is what to put at the beginning + of your file (or in a header) if you want to use the names + `strchr' and `strrchr' throughout: #ifndef HAVE_STRCHR #define strchr index @@ -559,11 +729,19 @@ File: standards.info, Node: Documentation, Next: Managing Releases, Prev: Wri Documenting Programs ******************** + A GNU program should ideally come with full free documentation, +adequate for both reference and tutorial purposes. If the package can +be programmed or extended, the documentation should cover programming or +extending it, as well as just using it. + * Menu: * GNU Manuals:: Writing proper manuals. +* Doc Strings and Manuals:: Compiling doc strings doesn't make a manual. * Manual Structure Details:: Specific structure conventions. * License for Manuals:: Writing the distribution terms for a manual. +* Manual Credits:: Giving credit to documentation contributors. +* Printed Manuals:: Mentioning the printed manual. * NEWS File:: NEWS files supplement manuals. * Change Logs:: Recording Changes * Man Pages:: Man pages are secondary. @@ -571,17 +749,23 @@ Documenting Programs from other manuals.  -File: standards.info, Node: GNU Manuals, Next: Manual Structure Details, Up: Documentation +File: standards.info, Node: GNU Manuals, Next: Doc Strings and Manuals, Up: Documentation GNU Manuals =========== - The preferred way to document part of the GNU system is to write a -manual in the Texinfo formatting language. This makes it possible to -produce a good quality formatted book, using TeX, and to generate an -Info file. It is also possible to generate HTML output from Texinfo -source. See the Texinfo manual, either the hardcopy, or the on-line -version available through `info' or the Emacs Info subsystem (`C-h i'). + The preferred document format for the GNU system is the Texinfo +formatting language. Every GNU package should (ideally) have +documentation in Texinfo both for reference and for learners. Texinfo +makes it possible to produce a good quality formatted book, using TeX, +and to generate an Info file. It is also possible to generate HTML +output from Texinfo source. See the Texinfo manual, either the +hardcopy, or the on-line version available through `info' or the Emacs +Info subsystem (`C-h i'). + + Nowadays some other formats such as Docbook and Sgmltexi can be +converted automatically into Texinfo. It is ok to produce the Texinfo +documentation by conversion this way, as long as it gives good results. Programmers often find it most natural to structure the documentation following the structure of the implementation, which they know. But @@ -610,9 +794,9 @@ manual for "comparison of files" which covers both of those programs, as well as `cmp'. By documenting these programs together, we can make the whole subject clearer. - The manual which discusses a program should document all of the -program's command-line options and all of its commands. It should give -examples of their use. But don't organize the manual as a list of + The manual which discusses a program should certainly document all of +the program's command-line options and all of its commands. It should +give examples of their use. But don't organize the manual as a list of features. Instead, organize it logically, by subtopics. Address the questions that a user will ask when thinking about the job that the program does. @@ -637,11 +821,19 @@ are purely tutorial and cover the basics of the subject. These provide the framework for a beginner to understand the rest of the manual. The Bison manual provides a good example of how to do this. + To serve as a reference, a manual should have an Index that list all +the functions, variables, options, and important concepts that are part +of the program. One combined Index should do for a short manual, but +sometimes for a complex package it is better to use multiple indices. +The Texinfo manual includes advice on preparing good index entries, see +*Note Making Index Entries: (texinfo)Index Entries, and see *Note +Defining the Entries of an Index: (texinfo)Indexing Commands. + Don't use Unix man pages as a model for how to write GNU documentation; most of them are terse, badly structured, and give inadequate explanation of the underlying concepts. (There are, of -course exceptions.) Also Unix man pages use a particular format which -is different from what we use in GNU manuals. +course, some exceptions.) Also, Unix man pages use a particular format +which is different from what we use in GNU manuals. Please include an email address in the manual for where to report bugs _in the manual_. @@ -652,10 +844,40 @@ documentation; use "file name" (two words) instead. We use the term Please do not use the term "illegal" to refer to erroneous input to a computer program. Please use "invalid" for this, and reserve the term -"illegal" for violations of law. +"illegal" for activities punishable by law. + + +File: standards.info, Node: Doc Strings and Manuals, Next: Manual Structure Details, Prev: GNU Manuals, Up: Documentation + +Doc Strings and Manuals +======================= + + Some programming systems, such as Emacs, provide a documentation +string for each function, command or variable. You may be tempted to +write a reference manual by compiling the documentation strings and +writing a little additional text to go around them--but you must not do +it. That approach is a fundamental mistake. The text of well-written +documentation strings will be entirely wrong for a manual. + + A documentation string needs to stand alone--when it appears on the +screen, there will be no other text to introduce or explain it. +Meanwhile, it can be rather informal in style. + + The text describing a function or variable in a manual must not stand +alone; it appears in the context of a section or subsection. Other text +at the beginning of the section should explain some of the concepts, and +should often make some general points that apply to several functions or +variables. The previous descriptions of functions and variables in the +section will also have given information about the topic. A description +written to stand alone would repeat some of that information; this +redundance looks bad. Meanwhile, the informality that is acceptable in +a documentation string is totally unacceptable in a manual. + + The only good way to use documentation strings in writing a good +manual is to use them as a source of information for writing good text.  -File: standards.info, Node: Manual Structure Details, Next: License for Manuals, Prev: GNU Manuals, Up: Documentation +File: standards.info, Node: Manual Structure Details, Next: License for Manuals, Prev: Doc Strings and Manuals, Up: Documentation Manual Structure Details ======================== @@ -677,29 +899,64 @@ all the options and arguments that the program uses. of the above patterns. This identifies the node which that item points to as the node for this purpose, regardless of the node's actual name. - There will be automatic features for specifying a program name and -quickly reading just this part of its manual. + The `--usage' feature of the Info reader looks for such a node or +menu item in order to find the relevant text, so it is essential for +every Texinfo file to have one. If one manual describes several programs, it should have such a node -for each program described. +for each program described in the manual.  -File: standards.info, Node: License for Manuals, Next: NEWS File, Prev: Manual Structure Details, Up: Documentation +File: standards.info, Node: License for Manuals, Next: Manual Credits, Prev: Manual Structure Details, Up: Documentation License for Manuals =================== - If the manual contains a copy of the GNU GPL or GNU LGPL, or if it -contains chapters that make political or personal statements, please -copy the distribution terms of the GNU Emacs Manual, and adapt it by -modifying appropriately the list of special chapters that may not be -modified or deleted. + Please use the GNU Free Documentation License for all GNU manuals +that are more than a few pages long. Likewise for a collection of short +documents--you only need one copy of the GNU FDL for the whole +collection. For a single short document, you can use a very permissive +non-copyleft license, to avoid taking up space with a long license. - If the manual does not contain any such chapters, then imitate the -simpler distribution terms of the Texinfo manual. + See `http://www.gnu.org/copyleft/fdl-howto.html' for more explanation +of how to employ the GFDL. + + Note that it is not obligatory to include a copy of the GNU GPL or +GNU LGPL in a manual whose license is neither the GPL nor the LGPL. It +can be a good idea to include the program's license in a large manual; +in a short manual, whose size would be increased considerably by +including the program's license, it is probably better not to include +it.  -File: standards.info, Node: NEWS File, Next: Change Logs, Prev: License for Manuals, Up: Documentation +File: standards.info, Node: Manual Credits, Next: Printed Manuals, Prev: License for Manuals, Up: Documentation + +Manual Credits +============== + + Please credit the principal human writers of the manual as the +authors, on the title page of the manual. If a company sponsored the +work, thank the company in a suitable place in the manual, but do not +cite the company as an author. + + +File: standards.info, Node: Printed Manuals, Next: NEWS File, Prev: Manual Credits, Up: Documentation + +Printed Manuals +=============== + + The FSF publishes some GNU manuals in printed form. To encourage +sales of these manuals, the on-line versions of the manual should +mention at the very start that the printed manual is available and +should point at information for getting it--for instance, with a link +to the page . This should not be +included in the printed manual, though, because there it is redundant. + + It is also useful to explain in the on-line forms of the manual how +the user can print out the manual from the sources. + + +File: standards.info, Node: NEWS File, Next: Change Logs, Prev: Printed Manuals, Up: Documentation The NEWS File ============= @@ -735,6 +992,7 @@ history of how the conflicting concepts arose and who they came from. * Style of Change Logs:: * Simple Changes:: * Conditional Changes:: +* Indicating the Part Changed::  File: standards.info, Node: Change Log Concepts, Next: Style of Change Logs, Up: Change Logs @@ -780,8 +1038,13 @@ File: standards.info, Node: Style of Change Logs, Next: Simple Changes, Prev: Style of Change Logs -------------------- - Here are some examples of change log entries: + Here are some simple examples of change log entries, starting with +the header line that says who made the change and when, followed by +descriptions of specific changes. (These examples are drawn from Emacs +and GCC.) + 1998-08-17 Richard Stallman + * register.el (insert-register): Return nil. (jump-to-register): Likewise. @@ -811,6 +1074,13 @@ entries represent parts of the same change, so that they work together, then don't put blank lines between them. Then you can omit the file name and the asterisk when successive entries are in the same file. + Break long lists of function names by closing continued lines with +`)', rather than `,', and opening the continuation with `(' as in this +example: + + * keyboard.c (menu_bar_items, tool_bar_items) + (Fexecute_extended_command): Deal with `keymap' property. +  File: standards.info, Node: Simple Changes, Next: Conditional Changes, Prev: Style of Change Logs, Up: Change Logs @@ -821,10 +1091,10 @@ Simple Changes log. When you change the calling sequence of a function in a simple -fashion, and you change all the callers of the function, there is no -need to make individual entries for all the callers that you changed. -Just write in the entry for the function being called, "All callers -changed." +fashion, and you change all the callers of the function to use the new +calling sequence, there is no need to make individual entries for all +the callers that you changed. Just write in the entry for the function +being called, "All callers changed"--like this: * keyboard.c (Fcommand_execute): New arg SPECIAL. All callers changed. @@ -841,7 +1111,7 @@ the history of the erroneous passage; it is enough to compare what the documentation says with the way the program actually works.  -File: standards.info, Node: Conditional Changes, Prev: Simple Changes, Up: Change Logs +File: standards.info, Node: Conditional Changes, Next: Indicating the Part Changed, Prev: Simple Changes, Up: Change Logs Conditional Changes ------------------- @@ -877,6 +1147,20 @@ macro is _not_ defined: (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.  +File: standards.info, Node: Indicating the Part Changed, Prev: Conditional Changes, Up: Change Logs + +Indicating the Part Changed +--------------------------- + + Indicate the part of a function which changed by using angle brackets +enclosing an indication of what the changed part does. Here is an entry +for a change in the part of the function `sh-while-getopts' that deals +with `sh' commands: + + * progmodes/sh-script.el (sh-while-getopts) : Handle case that + user-specified option string is empty. + + File: standards.info, Node: Man Pages, Next: Reading other Manuals, Prev: Change Logs, Up: Documentation Man Pages @@ -928,276 +1212,3 @@ outline structure, wording, tables or examples from preexisting non-free documentation. Copying from free documentation may be ok; please check with the FSF about the individual case. - -File: standards.info, Node: Managing Releases, Next: References, Prev: Documentation, Up: Top - -The Release Process -******************* - - Making a release is more than just bundling up your source files in a -tar file and putting it up for FTP. You should set up your software so -that it can be configured to run on a variety of systems. Your Makefile -should conform to the GNU standards described below, and your directory -layout should also conform to the standards discussed below. Doing so -makes it easy to include your package into the larger framework of all -GNU software. - -* Menu: - -* Configuration:: How Configuration Should Work -* Makefile Conventions:: Makefile Conventions -* Releases:: Making Releases - - -File: standards.info, Node: Configuration, Next: Makefile Conventions, Up: Managing Releases - -How Configuration Should Work -============================= - - Each GNU distribution should come with a shell script named -`configure'. This script is given arguments which describe the kind of -machine and system you want to compile the program for. - - The `configure' script must record the configuration options so that -they affect compilation. - - One way to do this is to make a link from a standard name such as -`config.h' to the proper configuration file for the chosen system. If -you use this technique, the distribution should _not_ contain a file -named `config.h'. This is so that people won't be able to build the -program without configuring it first. - - Another thing that `configure' can do is to edit the Makefile. If -you do this, the distribution should _not_ contain a file named -`Makefile'. Instead, it should include a file `Makefile.in' which -contains the input used for editing. Once again, this is so that people -won't be able to build the program without configuring it first. - - If `configure' does write the `Makefile', then `Makefile' should -have a target named `Makefile' which causes `configure' to be rerun, -setting up the same configuration that was set up last time. The files -that `configure' reads should be listed as dependencies of `Makefile'. - - All the files which are output from the `configure' script should -have comments at the beginning explaining that they were generated -automatically using `configure'. This is so that users won't think of -trying to edit them by hand. - - The `configure' script should write a file named `config.status' -which describes which configuration options were specified when the -program was last configured. This file should be a shell script which, -if run, will recreate the same configuration. - - The `configure' script should accept an option of the form -`--srcdir=DIRNAME' to specify the directory where sources are found (if -it is not the current directory). This makes it possible to build the -program in a separate directory, so that the actual source directory is -not modified. - - If the user does not specify `--srcdir', then `configure' should -check both `.' and `..' to see if it can find the sources. If it finds -the sources in one of these places, it should use them from there. -Otherwise, it should report that it cannot find the sources, and should -exit with nonzero status. - - Usually the easy way to support `--srcdir' is by editing a -definition of `VPATH' into the Makefile. Some rules may need to refer -explicitly to the specified source directory. To make this possible, -`configure' can add to the Makefile a variable named `srcdir' whose -value is precisely the specified directory. - - The `configure' script should also take an argument which specifies -the type of system to build the program for. This argument should look -like this: - - CPU-COMPANY-SYSTEM - - For example, a Sun 3 might be `m68k-sun-sunos4.1'. - - The `configure' script needs to be able to decode all plausible -alternatives for how to describe a machine. Thus, `sun3-sunos4.1' -would be a valid alias. For many programs, `vax-dec-ultrix' would be -an alias for `vax-dec-bsd', simply because the differences between -Ultrix and BSD are rarely noticeable, but a few programs might need to -distinguish them. - - There is a shell script called `config.sub' that you can use as a -subroutine to validate system types and canonicalize aliases. - - Other options are permitted to specify in more detail the software -or hardware present on the machine, and include or exclude optional -parts of the package: - -`--enable-FEATURE[=PARAMETER]' - Configure the package to build and install an optional user-level - facility called FEATURE. This allows users to choose which - optional features to include. Giving an optional PARAMETER of - `no' should omit FEATURE, if it is built by default. - - No `--enable' option should *ever* cause one feature to replace - another. No `--enable' option should ever substitute one useful - behavior for another useful behavior. The only proper use for - `--enable' is for questions of whether to build part of the program - or exclude it. - -`--with-PACKAGE' - The package PACKAGE will be installed, so configure this package - to work with PACKAGE. - - Possible values of PACKAGE include `gnu-as' (or `gas'), `gnu-ld', - `gnu-libc', `gdb', `x', and `x-toolkit'. - - Do not use a `--with' option to specify the file name to use to - find certain files. That is outside the scope of what `--with' - options are for. - -`--nfp' - The target machine has no floating point processor. - -`--gas' - The target machine assembler is GAS, the GNU assembler. This is - obsolete; users should use `--with-gnu-as' instead. - -`--x' - The target machine has the X Window System installed. This is - obsolete; users should use `--with-x' instead. - - All `configure' scripts should accept all of these "detail" options, -whether or not they make any difference to the particular package at -hand. In particular, they should accept any option that starts with -`--with-' or `--enable-'. This is so users will be able to configure -an entire GNU source tree at once with a single set of options. - - You will note that the categories `--with-' and `--enable-' are -narrow: they *do not* provide a place for any sort of option you might -think of. That is deliberate. We want to limit the possible -configuration options in GNU software. We do not want GNU programs to -have idiosyncratic configuration options. - - Packages that perform part of the compilation process may support -cross-compilation. In such a case, the host and target machines for -the program may be different. The `configure' script should normally -treat the specified type of system as both the host and the target, -thus producing a program which works for the same type of machine that -it runs on. - - The way to build a cross-compiler, cross-assembler, or what have -you, is to specify the option `--host=HOSTTYPE' when running -`configure'. This specifies the host system without changing the type -of target system. The syntax for HOSTTYPE is the same as described -above. - - Bootstrapping a cross-compiler requires compiling it on a machine -other than the host it will run on. Compilation packages accept a -configuration option `--build=HOSTTYPE' for specifying the -configuration on which you will compile them, in case that is different -from the host. - - Programs for which cross-operation is not meaningful need not accept -the `--host' option, because configuring an entire operating system for -cross-operation is not a meaningful thing. - - Some programs have ways of configuring themselves automatically. If -your program is set up to do this, your `configure' script can simply -ignore most of its arguments. - - -File: standards.info, Node: Makefile Conventions, Next: Releases, Prev: Configuration, Up: Managing Releases - -Makefile Conventions -==================== - - This node describes conventions for writing the Makefiles for GNU -programs. Using Automake will help you write a Makefile that follows -these conventions. - -* Menu: - -* Makefile Basics:: General Conventions for Makefiles -* Utilities in Makefiles:: Utilities in Makefiles -* Command Variables:: Variables for Specifying Commands -* Directory Variables:: Variables for Installation Directories -* Standard Targets:: Standard Targets for Users -* Install Command Categories:: Three categories of commands in the `install' - rule: normal, pre-install and post-install. - - -File: standards.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions - -General Conventions for Makefiles ---------------------------------- - - Every Makefile should contain this line: - - SHELL = /bin/sh - -to avoid trouble on systems where the `SHELL' variable might be -inherited from the environment. (This is never a problem with GNU -`make'.) - - Different `make' programs have incompatible suffix lists and -implicit rules, and this sometimes creates confusion or misbehavior. So -it is a good idea to set the suffix list explicitly using only the -suffixes you need in the particular Makefile, like this: - - .SUFFIXES: - .SUFFIXES: .c .o - -The first line clears out the suffix list, the second introduces all -suffixes which may be subject to implicit rules in this Makefile. - - Don't assume that `.' is in the path for command execution. When -you need to run programs that are a part of your package during the -make, please make sure that it uses `./' if the program is built as -part of the make or `$(srcdir)/' if the file is an unchanging part of -the source code. Without one of these prefixes, the current search -path is used. - - The distinction between `./' (the "build directory") and -`$(srcdir)/' (the "source directory") is important because users can -build in a separate directory using the `--srcdir' option to -`configure'. A rule of the form: - - foo.1 : foo.man sedscript - sed -e sedscript foo.man > foo.1 - -will fail when the build directory is not the source directory, because -`foo.man' and `sedscript' are in the the source directory. - - When using GNU `make', relying on `VPATH' to find the source file -will work in the case where there is a single dependency file, since -the `make' automatic variable `$<' will represent the source file -wherever it is. (Many versions of `make' set `$<' only in implicit -rules.) A Makefile target like - - foo.o : bar.c - $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o - -should instead be written as - - foo.o : bar.c - $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@ - -in order to allow `VPATH' to work correctly. When the target has -multiple dependencies, using an explicit `$(srcdir)' is the easiest way -to make the rule work well. For example, the target above for `foo.1' -is best written as: - - foo.1 : foo.man sedscript - sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@ - - GNU distributions usually contain some files which are not source -files--for example, Info files, and the output from Autoconf, Automake, -Bison or Flex. Since these files normally appear in the source -directory, they should always appear in the source directory, not in the -build directory. So Makefile rules to update them should put the -updated files in the source directory. - - However, if a file does not appear in the distribution, then the -Makefile should not put it in the source directory, because building a -program in ordinary circumstances should not modify the source directory -in any way. - - Try to make the build and installation targets, at least (and all -their subtargets) work correctly with a parallel `make'. - diff --git a/info/standards.info-3 b/info/standards.info-3 index 5a6af11..b14a029 100644 --- a/info/standards.info-3 +++ b/info/standards.info-3 @@ -6,7 +6,7 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996, -1997, 1998, 1999 Free Software Foundation, Inc. +1997, 1998, 1999, 2000 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -23,6 +23,273 @@ versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.  +File: standards.info, Node: Managing Releases, Next: References, Prev: Documentation, Up: Top + +The Release Process +******************* + + Making a release is more than just bundling up your source files in a +tar file and putting it up for FTP. You should set up your software so +that it can be configured to run on a variety of systems. Your Makefile +should conform to the GNU standards described below, and your directory +layout should also conform to the standards discussed below. Doing so +makes it easy to include your package into the larger framework of all +GNU software. + +* Menu: + +* Configuration:: How Configuration Should Work +* Makefile Conventions:: Makefile Conventions +* Releases:: Making Releases + + +File: standards.info, Node: Configuration, Next: Makefile Conventions, Up: Managing Releases + +How Configuration Should Work +============================= + + Each GNU distribution should come with a shell script named +`configure'. This script is given arguments which describe the kind of +machine and system you want to compile the program for. + + The `configure' script must record the configuration options so that +they affect compilation. + + One way to do this is to make a link from a standard name such as +`config.h' to the proper configuration file for the chosen system. If +you use this technique, the distribution should _not_ contain a file +named `config.h'. This is so that people won't be able to build the +program without configuring it first. + + Another thing that `configure' can do is to edit the Makefile. If +you do this, the distribution should _not_ contain a file named +`Makefile'. Instead, it should include a file `Makefile.in' which +contains the input used for editing. Once again, this is so that people +won't be able to build the program without configuring it first. + + If `configure' does write the `Makefile', then `Makefile' should +have a target named `Makefile' which causes `configure' to be rerun, +setting up the same configuration that was set up last time. The files +that `configure' reads should be listed as dependencies of `Makefile'. + + All the files which are output from the `configure' script should +have comments at the beginning explaining that they were generated +automatically using `configure'. This is so that users won't think of +trying to edit them by hand. + + The `configure' script should write a file named `config.status' +which describes which configuration options were specified when the +program was last configured. This file should be a shell script which, +if run, will recreate the same configuration. + + The `configure' script should accept an option of the form +`--srcdir=DIRNAME' to specify the directory where sources are found (if +it is not the current directory). This makes it possible to build the +program in a separate directory, so that the actual source directory is +not modified. + + If the user does not specify `--srcdir', then `configure' should +check both `.' and `..' to see if it can find the sources. If it finds +the sources in one of these places, it should use them from there. +Otherwise, it should report that it cannot find the sources, and should +exit with nonzero status. + + Usually the easy way to support `--srcdir' is by editing a +definition of `VPATH' into the Makefile. Some rules may need to refer +explicitly to the specified source directory. To make this possible, +`configure' can add to the Makefile a variable named `srcdir' whose +value is precisely the specified directory. + + The `configure' script should also take an argument which specifies +the type of system to build the program for. This argument should look +like this: + + CPU-COMPANY-SYSTEM + + For example, a Sun 3 might be `m68k-sun-sunos4.1'. + + The `configure' script needs to be able to decode all plausible +alternatives for how to describe a machine. Thus, `sun3-sunos4.1' +would be a valid alias. For many programs, `vax-dec-ultrix' would be +an alias for `vax-dec-bsd', simply because the differences between +Ultrix and BSD are rarely noticeable, but a few programs might need to +distinguish them. + + There is a shell script called `config.sub' that you can use as a +subroutine to validate system types and canonicalize aliases. + + Other options are permitted to specify in more detail the software +or hardware present on the machine, and include or exclude optional +parts of the package: + +`--enable-FEATURE[=PARAMETER]' + Configure the package to build and install an optional user-level + facility called FEATURE. This allows users to choose which + optional features to include. Giving an optional PARAMETER of + `no' should omit FEATURE, if it is built by default. + + No `--enable' option should *ever* cause one feature to replace + another. No `--enable' option should ever substitute one useful + behavior for another useful behavior. The only proper use for + `--enable' is for questions of whether to build part of the program + or exclude it. + +`--with-PACKAGE' + The package PACKAGE will be installed, so configure this package + to work with PACKAGE. + + Possible values of PACKAGE include `gnu-as' (or `gas'), `gnu-ld', + `gnu-libc', `gdb', `x', and `x-toolkit'. + + Do not use a `--with' option to specify the file name to use to + find certain files. That is outside the scope of what `--with' + options are for. + + All `configure' scripts should accept all of these "detail" options, +whether or not they make any difference to the particular package at +hand. In particular, they should accept any option that starts with +`--with-' or `--enable-'. This is so users will be able to configure +an entire GNU source tree at once with a single set of options. + + You will note that the categories `--with-' and `--enable-' are +narrow: they *do not* provide a place for any sort of option you might +think of. That is deliberate. We want to limit the possible +configuration options in GNU software. We do not want GNU programs to +have idiosyncratic configuration options. + + Packages that perform part of the compilation process may support +cross-compilation. In such a case, the host and target machines for the +program may be different. + + The `configure' script should normally treat the specified type of +system as both the host and the target, thus producing a program which +works for the same type of machine that it runs on. + + To configure a cross-compiler, cross-assembler, or what have you, you +should specify a target different from the host, using the configure +option `--target=TARGETTYPE'. The syntax for TARGETTYPE is the same as +for the host type. So the command would look like this: + + ./configure HOSTTYPE --target=TARGETTYPE + + Programs for which cross-operation is not meaningful need not accept +the `--target' option, because configuring an entire operating system +for cross-operation is not a meaningful operation. + + Bootstrapping a cross-compiler requires compiling it on a machine +other than the host it will run on. Compilation packages accept a +configuration option `--build=BUILDTYPE' for specifying the +configuration on which you will compile them, but the configure script +should normally guess the build machine type (using `config.guess'), so +this option is probably not necessary. The host and target types +normally default from the build type, so in bootstrapping a +cross-compiler you must specify them both explicitly. + + Some programs have ways of configuring themselves automatically. If +your program is set up to do this, your `configure' script can simply +ignore most of its arguments. + + +File: standards.info, Node: Makefile Conventions, Next: Releases, Prev: Configuration, Up: Managing Releases + +Makefile Conventions +==================== + + This node describes conventions for writing the Makefiles for GNU +programs. Using Automake will help you write a Makefile that follows +these conventions. + +* Menu: + +* Makefile Basics:: General Conventions for Makefiles +* Utilities in Makefiles:: Utilities in Makefiles +* Command Variables:: Variables for Specifying Commands +* Directory Variables:: Variables for Installation Directories +* Standard Targets:: Standard Targets for Users +* Install Command Categories:: Three categories of commands in the `install' + rule: normal, pre-install and post-install. + + +File: standards.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions + +General Conventions for Makefiles +--------------------------------- + + Every Makefile should contain this line: + + SHELL = /bin/sh + +to avoid trouble on systems where the `SHELL' variable might be +inherited from the environment. (This is never a problem with GNU +`make'.) + + Different `make' programs have incompatible suffix lists and +implicit rules, and this sometimes creates confusion or misbehavior. So +it is a good idea to set the suffix list explicitly using only the +suffixes you need in the particular Makefile, like this: + + .SUFFIXES: + .SUFFIXES: .c .o + +The first line clears out the suffix list, the second introduces all +suffixes which may be subject to implicit rules in this Makefile. + + Don't assume that `.' is in the path for command execution. When +you need to run programs that are a part of your package during the +make, please make sure that it uses `./' if the program is built as +part of the make or `$(srcdir)/' if the file is an unchanging part of +the source code. Without one of these prefixes, the current search +path is used. + + The distinction between `./' (the "build directory") and +`$(srcdir)/' (the "source directory") is important because users can +build in a separate directory using the `--srcdir' option to +`configure'. A rule of the form: + + foo.1 : foo.man sedscript + sed -e sedscript foo.man > foo.1 + +will fail when the build directory is not the source directory, because +`foo.man' and `sedscript' are in the source directory. + + When using GNU `make', relying on `VPATH' to find the source file +will work in the case where there is a single dependency file, since +the `make' automatic variable `$<' will represent the source file +wherever it is. (Many versions of `make' set `$<' only in implicit +rules.) A Makefile target like + + foo.o : bar.c + $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o + +should instead be written as + + foo.o : bar.c + $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@ + +in order to allow `VPATH' to work correctly. When the target has +multiple dependencies, using an explicit `$(srcdir)' is the easiest way +to make the rule work well. For example, the target above for `foo.1' +is best written as: + + foo.1 : foo.man sedscript + sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@ + + GNU distributions usually contain some files which are not source +files--for example, Info files, and the output from Autoconf, Automake, +Bison or Flex. Since these files normally appear in the source +directory, they should always appear in the source directory, not in the +build directory. So Makefile rules to update them should put the +updated files in the source directory. + + However, if a file does not appear in the distribution, then the +Makefile should not put it in the source directory, because building a +program in ordinary circumstances should not modify the source directory +in any way. + + Try to make the build and installation targets, at least (and all +their subtargets) work correctly with a parallel `make'. + + File: standards.info, Node: Utilities in Makefiles, Next: Command Variables, Prev: Makefile Basics, Up: Makefile Conventions Utilities in Makefiles @@ -134,10 +401,11 @@ those which do compilation and those which do linking. basic command for installing a file into the system. Every Makefile should also define the variables `INSTALL_PROGRAM' -and `INSTALL_DATA'. (The default for each of these should be -`$(INSTALL)'.) Then it should use those variables as the commands for -actual installation, for executables and nonexecutables respectively. -Use these variables as follows: +and `INSTALL_DATA'. (The default for `INSTALL_PROGRAM' should be +`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m +644'.) Then it should use those variables as the commands for actual +installation, for executables and nonexecutables respectively. Use +these variables as follows: $(INSTALL_PROGRAM) foo $(bindir)/foo $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a @@ -165,8 +433,8 @@ Variables for Installation Directories Installation directories should always be named by variables, so it is easy to install in a nonstandard place. The standard names for these variables are described below. They are based on a standard filesystem -layout; variants of it are used in SVR4, 4.4BSD, Linux, Ultrix v4, and -other modern operating systems. +layout; variants of it are used in SVR4, 4.4BSD, GNU/Linux, Ultrix v4, +and other modern operating systems. These two variables set the root for the installation. All the other installation directories should be subdirectories of one of these two, @@ -180,7 +448,7 @@ and nothing should be directly installed into these two directories. are using Autoconf, write it as `@prefix@'.) Running `make install' with a different value of `prefix' from the - one used to build the program should NOT recompile the program. + one used to build the program should _not_ recompile the program. `exec_prefix' A prefix used in constructing the default values of some of the @@ -194,7 +462,7 @@ and nothing should be directly installed into these two directories. directories. Running `make install' with a different value of `exec_prefix' - from the one used to build the program should NOT recompile the + from the one used to build the program should _not_ recompile the program. Executable programs are installed in one of the following @@ -377,7 +645,7 @@ directories: `srcdir' The directory for the sources being compiled. The value of this variable is normally inserted by the `configure' shell script. - (If you are using Autoconf, use `srcdir = @srcdir@'.) + (If you are using Autconf, use `srcdir = @srcdir@'.) For example: @@ -491,13 +759,21 @@ Makefiles: `install-strip' Like `install', but strip the executable files while installing - them. In many cases, the definition of this target can be very - simple: + them. In simple cases, this target can use the `install' target in + a simple way: install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install + But if the package installs scripts as well as real executables, + the `install-strip' target can't just refer to the `install' + target; it has to strip the executables but not the scripts. + + `install-strip' should not strip the executables in the build + directory which are being copied for installation. It should only + strip the copies that are installed. + Normally we do not recommend stripping an executable unless you are sure the program has no bugs. However, it can be reasonable to install a stripped executable for actual execution while saving @@ -601,7 +877,7 @@ Makefiles: appropriately named, use `ln' or `cp' to install the proper files in it, and then `tar' that subdirectory. - Compress the tar file file with `gzip'. For example, the actual + Compress the tar file with `gzip'. For example, the actual distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'. The `dist' target should explicitly depend on all non-source files @@ -636,6 +912,16 @@ programs in which they are useful. $(libdir) $(infodir) \ $(mandir) + or, if you wish to support `DESTDIR', + + # Make sure all installation directories (e.g. $(bindir)) + # actually exist by making them if necessary. + installdirs: mkinstalldirs + $(srcdir)/mkinstalldirs \ + $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ + $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ + $(DESTDIR)$(mandir) + This rule should not modify the directories where compilation is done. It should do nothing but create installation directories. @@ -833,7 +1119,7 @@ smaller at the expense of possible inconvenience to a user who doesn't know what other files to get.  -File: standards.info, Node: References, Prev: Managing Releases, Up: Top +File: standards.info, Node: References, Next: Index, Prev: Managing Releases, Up: Top References to Non-Free Software and Documentation ************************************************* @@ -860,4 +1146,3 @@ we are serious about the need for free documentation, we must not undermine our position by recommending use of documentation that isn't free. - diff --git a/info/xemacs-faq.info b/info/xemacs-faq.info index bd41315..96e328c 100644 --- a/info/xemacs-faq.info +++ b/info/xemacs-faq.info @@ -9,260 +9,260 @@ END-INFO-DIR-ENTRY  Indirect: xemacs-faq.info-1: 205 -xemacs-faq.info-2: 49999 -xemacs-faq.info-3: 99617 -xemacs-faq.info-4: 149492 -xemacs-faq.info-5: 199354 +xemacs-faq.info-2: 50095 +xemacs-faq.info-3: 99803 +xemacs-faq.info-4: 149685 +xemacs-faq.info-5: 199368  Tag Table: (Indirect) Node: Top205 -Node: Introduction16704 -Node: Q1.0.120146 -Node: Q1.0.220682 -Node: Q1.0.321227 -Node: Q1.0.421489 -Node: Q1.0.522939 -Node: Q1.0.623628 -Node: Q1.0.724634 -Node: Q1.0.824887 -Node: Q1.0.925102 -Node: Q1.0.1025380 -Node: Q1.0.1125623 -Node: Q1.0.1226010 -Node: Q1.0.1326378 -Node: Q1.0.1426627 -Node: Q1.1.127139 -Node: Q1.1.228181 -Node: Q1.1.328574 -Node: Q1.2.129525 -Node: Q1.2.230581 -Node: Q1.2.331015 -Node: Q1.3.132099 -Node: Q1.3.232750 -Node: Q1.3.333214 -Node: Q1.3.433455 -Node: Q1.3.534228 -Node: Q1.3.636633 -Node: Q1.3.738164 -Node: Q1.4.139099 -Node: Q1.4.239961 -Node: Q1.4.340302 -Node: Q1.4.440721 -Node: Q1.4.542261 -Node: Q1.4.642565 -Node: Installation43558 -Node: Q2.0.146133 -Node: Q2.0.246933 -Node: Q2.0.348701 -Node: Q2.0.449999 -Node: Q2.0.550591 -Node: Q2.0.650939 -Node: Q2.0.751320 -Node: Q2.0.851701 -Node: Q2.0.953278 -Node: Q2.0.1054716 -Node: Q2.0.1155560 -Node: Q2.0.1256501 -Node: Q2.0.1358024 -Node: Q2.0.1458513 -Node: Q2.1.159571 -Node: Q2.1.262313 -Node: Q2.1.363490 -Node: Q2.1.464783 -Node: Q2.1.565582 -Node: Q2.1.665944 -Node: Q2.1.766421 -Node: Q2.1.866774 -Node: Q2.1.968308 -Node: Q2.1.1068730 -Node: Q2.1.1169487 -Node: Q2.1.1270352 -Node: Q2.1.1371307 -Node: Q2.1.1472338 -Node: Q2.1.1573449 -Node: Q2.1.1680481 -Node: Q2.1.1781175 -Node: Q2.1.1881772 -Node: Q2.1.1981899 -Node: Q2.1.2082429 -Node: Q2.1.2182811 -Node: Q2.1.2283004 -Node: Q2.1.2384301 -Node: Q2.1.2484969 -Node: Q2.1.2585441 -Node: Customization86076 -Node: Q3.0.190914 -Node: Q3.0.291620 -Node: Q3.0.392184 -Node: Q3.0.492601 -Node: Q3.0.593434 -Node: Q3.0.694215 -Node: Q3.0.794795 -Node: Q3.0.895459 -Node: Q3.0.996417 -Node: Q3.1.196978 -Node: Q3.1.297715 -Node: Q3.1.398146 -Node: Q3.1.498335 -Node: Q3.1.598524 -Node: Q3.1.698908 -Node: Q3.1.799617 -Node: Q3.1.8101841 -Node: Q3.2.1102383 -Node: Q3.2.2104036 -Node: Q3.2.3104835 -Node: Q3.2.4105437 -Node: Q3.2.5106471 -Node: Q3.2.6106938 -Node: Q3.3.1107863 -Node: Q3.3.2108293 -Node: Q3.3.3108924 -Node: Q3.3.4109305 -Node: Q3.3.5110406 -Node: Q3.4.1111900 -Node: Q3.4.2112543 -Node: Q3.5.1113055 -Node: Q3.5.2114504 -Node: Q3.5.3114922 -Node: Q3.5.4115760 -Node: Q3.5.5116592 -Node: Q3.5.6117732 -Node: Q3.5.7118722 -Node: Q3.5.8120162 -Node: Q3.5.9120909 -Node: Q3.5.10121689 -Node: Q3.5.11122325 -Node: Q3.6.1122878 -Node: Q3.6.2123623 -Node: Q3.6.3124051 -Node: Q3.7.1124551 -Node: Q3.7.2125439 -Node: Q3.7.3126098 -Node: Q3.7.4126520 -Node: Q3.7.5126863 -Node: Q3.7.6127331 -Node: Q3.7.7128046 -Node: Q3.7.8129066 -Node: Q3.8.1129485 -Node: Q3.8.2129945 -Node: Q3.8.3130408 -Node: Q3.8.4131014 -Node: Q3.8.5131733 -Node: Q3.9.1132518 -Node: Q3.9.2133458 -Node: Q3.9.3134056 -Node: Q3.9.4134718 -Node: Q3.10.1135597 -Node: Q3.10.2136415 -Node: Q3.10.3137420 -Node: Q3.10.4138148 -Node: Q3.10.5138531 -Node: Subsystems139583 -Node: Q4.0.1142070 -Node: Q4.0.2142595 -Node: Q4.0.3143153 -Node: Q4.0.4143474 -Node: Q4.0.5143716 -Node: Q4.0.6143947 -Node: Q4.0.7144535 -Node: Q4.0.8144860 -Node: Q4.0.9146087 -Node: Q4.0.10148125 -Node: Q4.0.11148614 -Node: Q4.0.12149492 -Node: Q4.1.1150465 -Node: Q4.1.2150868 -Node: Q4.1.3151195 -Node: Q4.2.1151504 -Node: Q4.2.2152134 -Node: Q4.2.3152374 -Node: Q4.2.4152918 -Node: Q4.3.1153571 -Node: Q4.3.2154155 -Node: Q4.3.3155636 -Node: Q4.3.4155908 -Node: Q4.3.5156585 -Node: Q4.4.1157213 -Node: Q4.4.2158699 -Node: Q4.5.1159903 -Node: Q4.6.1160672 -Node: Q4.7.1165932 -Node: Q4.7.2166887 -Node: Q4.7.3167184 -Node: Q4.7.4167370 -Node: Q4.7.5168254 -Node: Q4.7.6169895 -Node: Miscellaneous170184 -Node: Q5.0.1173597 -Node: Q5.0.2174336 -Node: Q5.0.3175190 -Node: Q5.0.4175892 -Node: Q5.0.5176831 -Node: Q5.0.6178811 -Node: Q5.0.7179468 -Node: Q5.0.8180073 -Node: Q5.0.9180592 -Node: Q5.0.10181106 -Node: Q5.0.11181354 -Node: Q5.0.12181892 -Node: Q5.0.13182809 -Node: Q5.0.14183493 -Node: Q5.0.15184258 -Node: Q5.0.16184555 -Node: Q5.0.17185067 -Node: Q5.0.18185332 -Node: Q5.0.19185526 -Node: Q5.0.20185950 -Node: Q5.1.1186865 -Node: Q5.1.2188934 -Node: Q5.1.3189670 -Node: Q5.1.4193064 -Node: Q5.1.5193599 -Node: Q5.1.6195723 -Node: Q5.1.7197209 -Node: Q5.1.8198802 -Node: Q5.1.9199354 -Node: Q5.1.10200239 -Node: Q5.1.11201370 -Node: Q5.2.1201919 -Node: Q5.2.2202489 -Node: Q5.2.3202906 -Node: Q5.2.4203141 -Node: Q5.3.1204051 -Node: Q5.3.2205272 -Node: Q5.3.3206048 -Node: Q5.3.4206532 -Node: Q5.3.5207199 -Node: Q5.3.6208068 -Node: Q5.3.7208313 -Node: Q5.3.8210503 -Node: Q5.3.9210750 -Node: Q5.3.10211703 -Node: Q5.3.11213787 -Node: Q5.3.12215378 -Node: MS Windows216652 -Node: Q6.0.1218129 -Node: Q6.0.2218876 -Node: Q6.0.3219341 -Node: Q6.0.4219621 -Node: Q6.1.1221900 -Node: Q6.1.2222771 -Node: Q6.1.3223226 -Node: Q6.1.4223508 -Node: Q6.1.5223886 -Node: Q6.1.6224754 -Node: Q6.2.1227060 -Node: Q6.2.2227961 -Node: Q6.2.3228373 -Node: Q6.3.1228662 -Node: Q6.3.2229756 -Node: Q6.3.3232937 -Node: Q6.4.1233206 -Node: Current Events234541 -Node: Q7.0.1235195 -Node: Q7.0.2235834 -Node: Q7.0.3236907 -Node: Q7.0.4237135 +Node: Introduction16756 +Node: Q1.0.120222 +Node: Q1.0.221123 +Node: Q1.0.321668 +Node: Q1.0.421930 +Node: Q1.0.523322 +Node: Q1.0.624011 +Node: Q1.0.725014 +Node: Q1.0.825262 +Node: Q1.0.925477 +Node: Q1.0.1025755 +Node: Q1.0.1125998 +Node: Q1.0.1226385 +Node: Q1.0.1326753 +Node: Q1.0.1427002 +Node: Q1.1.127514 +Node: Q1.1.228556 +Node: Q1.1.328949 +Node: Q1.2.129900 +Node: Q1.2.231056 +Node: Q1.2.331490 +Node: Q1.3.132574 +Node: Q1.3.233225 +Node: Q1.3.333689 +Node: Q1.3.433930 +Node: Q1.3.534703 +Node: Q1.3.637108 +Node: Q1.3.738639 +Node: Q1.4.139574 +Node: Q1.4.241325 +Node: Q1.4.341696 +Node: Q1.4.442115 +Node: Q1.4.543655 +Node: Q1.4.643959 +Node: Installation44952 +Node: Q2.0.147527 +Node: Q2.0.248327 +Node: Q2.0.350095 +Node: Q2.0.451393 +Node: Q2.0.551985 +Node: Q2.0.652333 +Node: Q2.0.752714 +Node: Q2.0.853095 +Node: Q2.0.954672 +Node: Q2.0.1056110 +Node: Q2.0.1156954 +Node: Q2.0.1257895 +Node: Q2.0.1359419 +Node: Q2.0.1459908 +Node: Q2.1.160966 +Node: Q2.1.263687 +Node: Q2.1.364917 +Node: Q2.1.466210 +Node: Q2.1.567009 +Node: Q2.1.667371 +Node: Q2.1.767848 +Node: Q2.1.868201 +Node: Q2.1.969735 +Node: Q2.1.1070176 +Node: Q2.1.1170933 +Node: Q2.1.1271798 +Node: Q2.1.1372753 +Node: Q2.1.1473784 +Node: Q2.1.1574895 +Node: Q2.1.1681845 +Node: Q2.1.1782539 +Node: Q2.1.1883136 +Node: Q2.1.1983263 +Node: Q2.1.2083802 +Node: Q2.1.2184184 +Node: Q2.1.2284377 +Node: Q2.1.2385674 +Node: Q2.1.2486342 +Node: Q2.1.2586814 +Node: Customization87449 +Node: Q3.0.192303 +Node: Q3.0.293099 +Node: Q3.0.393534 +Node: Q3.0.493961 +Node: Q3.0.594794 +Node: Q3.0.695575 +Node: Q3.0.796155 +Node: Q3.0.896738 +Node: Q3.0.997696 +Node: Q3.1.198257 +Node: Q3.1.298994 +Node: Q3.1.399425 +Node: Q3.1.499614 +Node: Q3.1.599803 +Node: Q3.1.6100197 +Node: Q3.1.7100916 +Node: Q3.1.8103140 +Node: Q3.2.1103682 +Node: Q3.2.2105365 +Node: Q3.2.3106164 +Node: Q3.2.4106776 +Node: Q3.2.5107481 +Node: Q3.2.6107948 +Node: Q3.3.1108873 +Node: Q3.3.2109132 +Node: Q3.3.3109795 +Node: Q3.3.4110186 +Node: Q3.3.5110980 +Node: Q3.4.1112461 +Node: Q3.4.2113038 +Node: Q3.5.1113433 +Node: Q3.5.2114882 +Node: Q3.5.3115310 +Node: Q3.5.4116148 +Node: Q3.5.5116750 +Node: Q3.5.6117901 +Node: Q3.5.7118885 +Node: Q3.5.8120289 +Node: Q3.5.9120534 +Node: Q3.5.10121325 +Node: Q3.5.11121961 +Node: Q3.6.1122514 +Node: Q3.6.2123270 +Node: Q3.6.3123709 +Node: Q3.7.1124128 +Node: Q3.7.2125016 +Node: Q3.7.3125675 +Node: Q3.7.4126097 +Node: Q3.7.5126440 +Node: Q3.7.6126908 +Node: Q3.7.7127644 +Node: Q3.7.8128675 +Node: Q3.8.1129094 +Node: Q3.8.2129390 +Node: Q3.8.3129863 +Node: Q3.8.4130490 +Node: Q3.8.5131209 +Node: Q3.9.1131994 +Node: Q3.9.2132793 +Node: Q3.9.3133391 +Node: Q3.9.4134053 +Node: Q3.10.1134766 +Node: Q3.10.2135605 +Node: Q3.10.3136620 +Node: Q3.10.4137358 +Node: Q3.10.5137741 +Node: Subsystems138793 +Node: Q4.0.1141280 +Node: Q4.0.2141805 +Node: Q4.0.3142363 +Node: Q4.0.4142684 +Node: Q4.0.5142926 +Node: Q4.0.6143157 +Node: Q4.0.7143745 +Node: Q4.0.8144070 +Node: Q4.0.9145297 +Node: Q4.0.10147335 +Node: Q4.0.11147824 +Node: Q4.0.12148702 +Node: Q4.1.1149685 +Node: Q4.1.2150088 +Node: Q4.1.3150415 +Node: Q4.2.1150724 +Node: Q4.2.2151354 +Node: Q4.2.3151594 +Node: Q4.2.4152138 +Node: Q4.3.1152791 +Node: Q4.3.2153375 +Node: Q4.3.3154856 +Node: Q4.3.4155128 +Node: Q4.3.5155805 +Node: Q4.4.1156433 +Node: Q4.4.2157919 +Node: Q4.5.1159123 +Node: Q4.6.1159892 +Node: Q4.7.1165152 +Node: Q4.7.2166107 +Node: Q4.7.3166404 +Node: Q4.7.4166590 +Node: Q4.7.5167474 +Node: Q4.7.6169115 +Node: Miscellaneous169404 +Node: Q5.0.1172823 +Node: Q5.0.2173558 +Node: Q5.0.3174422 +Node: Q5.0.4174833 +Node: Q5.0.5176124 +Node: Q5.0.6178114 +Node: Q5.0.7178771 +Node: Q5.0.8179376 +Node: Q5.0.9179905 +Node: Q5.0.10180439 +Node: Q5.0.11180687 +Node: Q5.0.12180936 +Node: Q5.0.13181863 +Node: Q5.0.14182557 +Node: Q5.0.15183322 +Node: Q5.0.16183619 +Node: Q5.0.17184141 +Node: Q5.0.18184461 +Node: Q5.0.19184655 +Node: Q5.0.20185079 +Node: Q5.1.1185994 +Node: Q5.1.2188063 +Node: Q5.1.3188799 +Node: Q5.1.4192193 +Node: Q5.1.5192728 +Node: Q5.1.6194852 +Node: Q5.1.7196338 +Node: Q5.1.8197931 +Node: Q5.1.9198483 +Node: Q5.1.10199368 +Node: Q5.1.11200499 +Node: Q5.2.1201046 +Node: Q5.2.2201637 +Node: Q5.2.3201981 +Node: Q5.2.4202216 +Node: Q5.3.1203126 +Node: Q5.3.2204357 +Node: Q5.3.3204602 +Node: Q5.3.4205086 +Node: Q5.3.5205763 +Node: Q5.3.6206632 +Node: Q5.3.7206877 +Node: Q5.3.8209067 +Node: Q5.3.9209314 +Node: Q5.3.10210267 +Node: Q5.3.11212351 +Node: Q5.3.12213942 +Node: MS Windows215216 +Node: Q6.0.1216712 +Node: Q6.0.2217467 +Node: Q6.0.3217997 +Node: Q6.0.4218264 +Node: Q6.1.1220417 +Node: Q6.1.2221288 +Node: Q6.1.3221743 +Node: Q6.1.4222025 +Node: Q6.1.5222403 +Node: Q6.1.6223283 +Node: Q6.2.1225589 +Node: Q6.2.2226490 +Node: Q6.2.3226902 +Node: Q6.3.1227443 +Node: Q6.3.2228758 +Node: Q6.3.3231939 +Node: Q6.4.1232441 +Node: Current Events233776 +Node: Q7.0.1234430 +Node: Q7.0.2235069 +Node: Q7.0.3236142 +Node: Q7.0.4236370  End Tag Table diff --git a/info/xemacs-faq.info-1 b/info/xemacs-faq.info-1 index 6706c9f..1e6f304 100644 --- a/info/xemacs-faq.info-1 +++ b/info/xemacs-faq.info-1 @@ -76,8 +76,8 @@ Internationalization: * Q1.3.7:: How about Cyrillic Modes? Getting Started: -* Q1.4.1:: What is a `.emacs' and is there a sample one? -* Q1.4.2:: Can I use the same `.emacs' with the other Emacs? +* Q1.4.1:: What is an `init.el' or `.emacs' and is there a sample one? +* Q1.4.2:: Can I use the same `init.el'/`.emacs' with the other Emacs? * Q1.4.3:: Any good XEmacs tutorials around? * Q1.4.4:: May I see an example of a useful XEmacs Lisp function? * Q1.4.5:: And how do I bind it to a key? @@ -150,7 +150,7 @@ X Window System & Resources: * Q3.1.8:: `-iconic' doesn't work. Textual Fonts & Colors: -* Q3.2.1:: How can I set color options from `.emacs'? +* Q3.2.1:: How can I set color options from `init.el'/`.emacs'? * Q3.2.2:: How do I set the text, menu and modeline fonts? * Q3.2.3:: How can I set the colors when highlighting a region? * Q3.2.4:: How can I limit color map usage? @@ -176,7 +176,7 @@ The Keyboard: * Q3.5.5:: Scrolling one line at a time. * Q3.5.6:: How to map Help key alone on Sun type4 keyboard? * Q3.5.7:: How can you type in special characters in XEmacs? -* Q3.5.8:: Why does `(global-set-key [delete-forward] 'delete-char)' complain? +* Q3.5.8:: [This question intentionally left blank] * Q3.5.9:: How do I make the Delete key delete forward? * Q3.5.10:: Can I turn on "sticky" modifier keys? * Q3.5.11:: How do I map the arrow keys? @@ -207,7 +207,7 @@ Scrollbars: * Q3.9.1:: How can I disable the scrollbar? * Q3.9.2:: How can one use resources to change scrollbar colors? * Q3.9.3:: Moving the scrollbar can move the point; can I disable this? -* Q3.9.4:: How can I get automatic horizontal scrolling? +* Q3.9.4:: How can I turn off automatic horizontal scrolling in specific modes? Text Selections: * Q3.10.1:: How can I turn off or change highlighted selections? @@ -272,14 +272,14 @@ The Miscellaneous Stuff * Q5.0.1:: How can I do source code highlighting using font-lock? * Q5.0.2:: I do not like cc-mode. How do I use the old c-mode? * Q5.0.3:: How do I get `More' Syntax Highlighting on by default? -* Q5.0.4:: How can I enable auto-indent? +* Q5.0.4:: How can I enable auto-indent and/or Filladapt? * Q5.0.5:: How can I get XEmacs to come up in text/auto-fill mode by default? * Q5.0.6:: How do I start up a second shell buffer? * Q5.0.7:: Telnet from shell filters too much. * Q5.0.8:: Why does edt emulation not work? * Q5.0.9:: How can I emulate VI and use it as my default mode? * Q5.0.10:: [This question intentionally left blank] -* Q5.0.11:: How do I turn on filladapt for all buffers? +* Q5.0.11:: [This question intentionally left blank] * Q5.0.12:: How do I disable gnuserv from opening a new frame? * Q5.0.13:: How do I start gnuserv so that each subsequent XEmacs is a client? * Q5.0.14:: Strange things are happening in Shell Mode. @@ -311,7 +311,7 @@ Sound: Miscellaneous: * Q5.3.1:: How do you make XEmacs indent CL if-clauses correctly? -* Q5.3.2:: Fontifying hangs when editing a postscript file. +* Q5.3.2:: [This question intentionally left blank] * Q5.3.3:: How can I print WYSIWYG a font-locked buffer? * Q5.3.4:: Getting M-x lpr to work with postscript printer. * Q5.3.5:: How do I specify the paths that XEmacs uses for finding files? @@ -328,8 +328,8 @@ XEmacs on MS Windows General Info: * Q6.0.1:: What is the status of the XEmacs port to Windows? * Q6.0.2:: What flavors of MS Windows are supported? -* Q6.0.3:: Are binary kits available? -* Q6.0.4:: Does XEmacs on MS Windows require an X server to run? +* Q6.0.3:: Are binaries available? +* Q6.0.4:: Can I build XEmacs on MS Windows with support for X or Cygwin? Building XEmacs on MS Windows: * Q6.1.1:: I decided to run with X. Where do I get an X server? @@ -342,7 +342,7 @@ Building XEmacs on MS Windows: Customization and User Interface: * Q6.2.1:: How will the port cope with differences in the Windows user interface? * Q6.2.2:: How do I change fonts in XEmacs on MS Windows? -* Q6.2.3:: Where do I put my `.emacs' file? +* Q6.2.3:: Where do I put my `init.el'/`.emacs' file? Miscellaneous: * Q6.3.1:: Will XEmacs rename all the win32-* symbols to w32-*? @@ -428,8 +428,8 @@ Internationalization: * Q1.3.7:: How about Cyrillic Modes? Getting Started: -* Q1.4.1:: What is a `.emacs' and is there a sample one? -* Q1.4.2:: Can I use the same `.emacs' with the other Emacs? +* Q1.4.1:: What is an `init.el' or `.emacs' and is there a sample one? +* Q1.4.2:: Can I use the same `init.el'/`.emacs' with the other Emacs? * Q1.4.3:: Any good XEmacs tutorials around? * Q1.4.4:: May I see an example of a useful XEmacs Lisp function? * Q1.4.5:: And how do I bind it to a key? @@ -444,12 +444,17 @@ File: xemacs-faq.info, Node: Q1.0.1, Next: Q1.0.2, Prev: Introduction, Up: I Q1.0.1: What is XEmacs? ----------------------- - An alternative to GNU Emacs, originally based on an early alpha -version of FSF's version 19, and has diverged quite a bit since then. -XEmacs was known as Lucid Emacs through version 19.10. Almost all -features of GNU Emacs are supported in XEmacs. The maintainers of -XEmacs actively track changes to GNU Emacs while also working to add -new features. + XEmacs is a highly customizable open source text editor and +application development system. It is protected under the GNU Public +License and related to other versions of Emacs, in particular GNU +Emacs. Its emphasis is on modern graphical user interface support and +an open software development model, similar to Linux. XEmacs has an +active development community numbering in the hundreds, and runs on +Windows 95 and NT, Linux and nearly every other version of Unix in +existence. Support for XEmacs has been supplied by Sun Microsystems, +University of Illinois, Lucid, ETL/Electrotechnical Laboratory, Amdahl +Corporation, BeOpen, and others, as well as the unpaid time of a great +number of individual developers.  File: xemacs-faq.info, Node: Q1.0.2, Next: Q1.0.3, Prev: Q1.0.1, Up: Introduction @@ -493,7 +498,7 @@ consider using it: * The XEmacs maintainers are generally more receptive to suggestions than the GNU Emacs maintainers. - * Many more bundled packages than GNU Emacs + * Many more bundled packages than GNU Emacs. * Binaries are available for many common operating systems. @@ -504,7 +509,7 @@ consider using it: * Better Motif compliance. * Some internationalization support (including full MULE support, if - compiled with it.) + compiled with it). * Variable-width fonts. @@ -526,7 +531,6 @@ consider using it: * Completely compatible (at the C level) with the Xt-based toolkits. - * First production Web Browser supporting Style Sheets.  File: xemacs-faq.info, Node: Q1.0.5, Next: Q1.0.6, Prev: Q1.0.4, Up: Introduction @@ -551,7 +555,7 @@ Q1.0.6: Where can I get help? ----------------------------- Probably the easiest way, if everything is installed, is to use -Info, by pressing `C-h i', or selecting `Manuals->Info' from the Help +Info, by pressing `C-h i', or looking for an Info item on the Help Menu. `M-x apropos' can be used to look for particular commands. For items not found in the manual, try reading this FAQ and reading @@ -574,7 +578,7 @@ File: xemacs-faq.info, Node: Q1.0.7, Next: Q1.0.8, Prev: Q1.0.6, Up: Introdu Q1.0.7: Where are the mailing lists archived? --------------------------------------------- - The archives can be found at `http://www.xemacs.org/Lists/Archive' + The archives can be found at `http://list-archive.xemacs.org'  File: xemacs-faq.info, Node: Q1.0.8, Next: Q1.0.9, Prev: Q1.0.7, Up: Introduction @@ -716,32 +720,36 @@ Q1.2.1: Who wrote XEmacs? ------------------------- XEmacs is the result of the time and effort of many people. The -developers responsible for the 19.16/20.x releases are: +developers responsible for recent releases are: * Martin Buchholz - * Steve Baur + * Steven Turnbull + + * Ben Wing * Hrvoje Niksic - The developers responsible for the 19.14 release are: + The developers responsible for older releases were: + + * Steve Baur * Chuck Thompson - Chuck was Mr. XEmacs from 19.11 through 19.14, and is responsible - for XEmacs becoming a widely distributed program over the Internet. + * Jamie Zawinski - * Ben Wing + * Richard Mlynarik + Steve Baur was the primary maintainer for 19.15 through 21.0. - * Jamie Zawinski + Chuck Thompson and Ben Wing were the maintainers for 19.11 through + 19.14 and heavy code contributors for 19.8 through 19.10. - Jamie Zawinski was Mr. Lucid Emacs from 19.0 through 19.10, the - last release actually named Lucid Emacs. Richard Mlynarik was - crucial to most of those releases. + Jamie Zawinski was the maintainer for 19.0 through 19.10 (the + entire history of Lucid Emacs). Richard Mlynarik was a heavy code + contributor to 19.6 through 19.8. - * Richard Mlynarik Along with many other contributors, partially enumerated in the `About XEmacs' option in the Help menu. @@ -989,28 +997,44 @@ File: xemacs-faq.info, Node: Q1.4.1, Next: Q1.4.2, Prev: Q1.3.7, Up: Introdu 1.4: Getting Started, Backing up & Recovery =========================================== -Q1.4.1: What is a `.emacs' and is there a sample one? ------------------------------------------------------ - - The `.emacs' file is used to customize XEmacs to your tastes. No -two are alike, nor are they expected to be alike, but that's the point. -The XEmacs distribution contains an excellent starter example in the etc -directory called `sample.emacs'. Copy this file from there to your -home directory and rename it `.emacs'. Then edit it to suit. - - Starting with 19.14, you may bring the `sample.emacs' into an XEmacs -buffer by selecting `Help->Sample .emacs' from the menubar. To -determine the location of the `etc' directory type the command `C-h v +Q1.4.1: What is an `init.el' or `.emacs' and is there a sample one? +------------------------------------------------------------------- + + The `init.el' or `.emacs' file is used to customize XEmacs to your +tastes. Starting in 21.4, the preferred location for the init file is +`~/.xemacs/init.el'; in previous versions, it was `~/.emacs'. 21.4 +still accepts the old location, but the first time you run it, it will +ask to migrate your file to the new location. If you answer yes, the +file will be moved, and a "compatibility" `.emacs' file will be placed +in the old location so that you can still run older versions of XEmacs, +and versions of GNU Emacs, which expect the old location. The `.emacs' +file present is just a stub that loads the real file in +`~/.xemacs/init.el'. + + No two init files are alike, nor are they expected to be alike, but +that's the point. The XEmacs distribution contains an excellent starter +example in the `etc/' directory called `sample.init.el' (starting in +21.4) or `sample.emacs' in older versions. Copy this file from there +to `~/.xemacs/init.el' (starting in 21.4) or `~/.emacs' in older +versions, where `~' means your home directory, of course. Then edit it +to suit. + + You may bring the `sample.init.el' or `sample.emacs' file into an +XEmacs buffer from the menubar. (The menu entry for it is always under +the `Help' menu, but its location under that has changed in various +versions. Recently, look under the `Samples' submenu.) To determine +the location of the `etc/' directory type the command `C-h v data-directory '.  File: xemacs-faq.info, Node: Q1.4.2, Next: Q1.4.3, Prev: Q1.4.1, Up: Introduction -Q1.4.2: Can I use the same `.emacs' with the other Emacs? ---------------------------------------------------------- +Q1.4.2: Can I use the same `init.el'/`.emacs' with the other Emacs? +------------------------------------------------------------------- - Yes. The sample `.emacs' included in the XEmacs distribution will -show you how to handle different versions and flavors of Emacs. + Yes. The sample `init.el'/`.emacs' included in the XEmacs +distribution will show you how to handle different versions and flavors +of Emacs.  File: xemacs-faq.info, Node: Q1.4.3, Next: Q1.4.4, Prev: Q1.4.2, Up: Introduction @@ -1212,33 +1236,3 @@ removed from them if you do not use them. or remove them. In either case, `C-h i' (info mode) will no longer work. - -File: xemacs-faq.info, Node: Q2.0.3, Next: Q2.0.4, Prev: Q2.0.2, Up: Installation - -Q2.0.3: Compiling XEmacs with Netaudio. ---------------------------------------- - - What is the best way to compile XEmacs with the netaudio system, -since I have got the netaudio system compiled but installed at a weird -place, I am not root. Also in the READMEs it does not say anything -about compiling with the audioserver? - - You should only need to add some stuff to the configure command line. -To tell it to compile in netaudio support: `--with-sound=both', or -`--with-sound=nas' if you don't want native sound support for some -reason.) To tell it where to find the netaudio includes and libraries: - - --site-libraries=WHATEVER - --site-includes=WHATEVER - - Then (fingers crossed) it should compile and it will use netaudio if -you have a server running corresponding to the X server. The netaudio -server has to be there when XEmacs starts. If the netaudio server goes -away and another is run, XEmacs should cope (fingers crossed, error -handling in netaudio isn't perfect). - - BTW, netaudio has been renamed as it has a name clash with something -else, so if you see references to NAS or Network Audio System, it's the -same thing. It also might be found at -`ftp://ftp.x.org/contrib/audio/nas/'. - diff --git a/info/xemacs-faq.info-2 b/info/xemacs-faq.info-2 index 66252fd..256d1ad 100644 --- a/info/xemacs-faq.info-2 +++ b/info/xemacs-faq.info-2 @@ -7,6 +7,36 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  +File: xemacs-faq.info, Node: Q2.0.3, Next: Q2.0.4, Prev: Q2.0.2, Up: Installation + +Q2.0.3: Compiling XEmacs with Netaudio. +--------------------------------------- + + What is the best way to compile XEmacs with the netaudio system, +since I have got the netaudio system compiled but installed at a weird +place, I am not root. Also in the READMEs it does not say anything +about compiling with the audioserver? + + You should only need to add some stuff to the configure command line. +To tell it to compile in netaudio support: `--with-sound=both', or +`--with-sound=nas' if you don't want native sound support for some +reason.) To tell it where to find the netaudio includes and libraries: + + --site-libraries=WHATEVER + --site-includes=WHATEVER + + Then (fingers crossed) it should compile and it will use netaudio if +you have a server running corresponding to the X server. The netaudio +server has to be there when XEmacs starts. If the netaudio server goes +away and another is run, XEmacs should cope (fingers crossed, error +handling in netaudio isn't perfect). + + BTW, netaudio has been renamed as it has a name clash with something +else, so if you see references to NAS or Network Audio System, it's the +same thing. It also might be found at +`ftp://ftp.x.org/contrib/audio/nas/'. + + File: xemacs-faq.info, Node: Q2.0.4, Next: Q2.0.5, Prev: Q2.0.3, Up: Installation Q2.0.4: Problems with Linux and ncurses. @@ -205,7 +235,7 @@ Q2.0.12: Why can't I strip XEmacs? obviously heavily system dependent. And on some systems, it leads to an executable which, although valid, cannot be stripped without damage. If memory serves, this is especially the case for AIX - binaries. On other architecture it might work OK. + binaries. On other architectures it might work OK. The Right Way to strip the emacs binary is to strip temacs prior to dumping xemacs. This will always work, although you can do that @@ -288,8 +318,8 @@ you try to edit those files, you will be informed that a more recent auto-save file exists. You can use `M-x recover-file' to retrieve the auto-saved version of the file. - Starting with 19.14, you may use the command `M-x recover-session' -after a crash to pick up where you left off. + You can use the command `M-x recover-session' after a crash to pick +up where you left off. Now, XEmacs is not perfect, and there may occasionally be times, or particular sequences of actions, that cause it to crash. If you can @@ -359,10 +389,11 @@ backtrace by doing the following: 3. Reproduce the error. - Depending on the version of XEmacs, you may either select Edit->Show -Messages (19.13 and earlier) or Help->Recent Keystrokes/Messages (19.14 -and later) from the menubar to see the most recent messages. This -command is bound to `C-h l' by default. + Depending on the version of XEmacs, you may either select View->Show +Message Log (recent versions), Edit->Show Messages (some earlier +versions) or Help->Recent Keystrokes/Messages (other earlier versions) +from the menubar to see the most recent messages. This command is bound +to `C-h l' by default.  File: xemacs-faq.info, Node: Q2.1.3, Next: Q2.1.4, Prev: Q2.1.2, Up: Installation @@ -505,7 +536,8 @@ Q2.1.9: XEmacs causes my OpenWindows 3.0 server to crash. The OpenWindows 3.0 server is incredibly buggy. Your best bet is to replace it with one from the generic MIT X11 release. You might also -try disabling parts of your `.emacs', like enabling background pixmaps. +try disabling parts of your `init.el'/`.emacs', like those that enable +background pixmaps.  File: xemacs-faq.info, Node: Q2.1.10, Next: Q2.1.11, Prev: Q2.1.9, Up: Installation @@ -786,9 +818,8 @@ debugger. Here are some hints: authors, or to comp.os.linux.development.system). Again, you'll have to use the narrowing-down process described above. - d. If you compiled 19.14 with `--debug' (or by default in later - versions), you will get a Lisp backtrace output when XEmacs - crashes, so you'll have something useful. + d. You will get a Lisp backtrace output when XEmacs crashes, so + you'll have something useful. * If you compile with the newer gcc variants gcc-2.8 or egcs, you @@ -859,8 +890,8 @@ under which it is running. The solution is to add: (set-time-zone-rule "MET") - to your `.emacs' or the `site-start.el' file if you can. Replace -`MET' with your local timezone. + to your `init.el'/`.emacs' or the `site-start.el' file if you can. +Replace `MET' with your local timezone.  File: xemacs-faq.info, Node: Q2.1.20, Next: Q2.1.21, Prev: Q2.1.19, Up: Installation @@ -971,7 +1002,7 @@ section is devoted to Customization and screen settings. * Menu: -Customization---Emacs Lisp and `.emacs': +Customization---Emacs Lisp and `init.el'/`.emacs': * Q3.0.1:: What version of Emacs am I running? * Q3.0.2:: How do I evaluate Elisp expressions? * Q3.0.3:: `(setq tab-width 6)' behaves oddly. @@ -993,7 +1024,7 @@ X Window System & Resources: * Q3.1.8:: `-iconic' doesn't work. Textual Fonts & Colors: -* Q3.2.1:: How can I set color options from `.emacs'? +* Q3.2.1:: How can I set color options from `init.el'/`.emacs'? * Q3.2.2:: How do I set the text, menu and modeline fonts? * Q3.2.3:: How can I set the colors when highlighting a region? * Q3.2.4:: How can I limit color map usage? @@ -1019,7 +1050,7 @@ The Modeline: * Q3.5.5:: Scrolling one line at a time. * Q3.5.6:: How to map Help key alone on Sun type4 keyboard? * Q3.5.7:: How can you type in special characters in XEmacs? -* Q3.5.8:: Why does `(global-set-key [delete-forward] 'delete-char)' complain? +* Q3.5.8:: [This question intentionally left blank] * Q3.5.9:: How do I make the Delete key delete forward? * Q3.5.10:: Can I turn on "sticky" modifier keys? * Q3.5.11:: How do I map the arrow keys? @@ -1050,7 +1081,7 @@ Scrollbars: * Q3.9.1:: How can I disable the scrollbar? * Q3.9.2:: How can one use resources to change scrollbar colors? * Q3.9.3:: Moving the scrollbar can move the point; can I disable this? -* Q3.9.4:: How can I get automatic horizontal scrolling? +* Q3.9.4:: How can I turn off automatic horizontal scrolling in specific modes? Text Selections: * Q3.10.1:: How can I turn off or change highlighted selections? @@ -1062,18 +1093,19 @@ Text Selections:  File: xemacs-faq.info, Node: Q3.0.1, Next: Q3.0.2, Prev: Customization, Up: Customization -3.0: Customization - Emacs Lisp and .emacs -========================================== +3.0: Customization - Emacs Lisp and `init.el'/`.emacs' +====================================================== Q3.0.1: What version of Emacs am I running? ------------------------------------------- - How can `.emacs' determine which of the family of Emacsen I am using? + How can `init.el'/`.emacs' determine which of the family of Emacsen +I am using? To determine if you are currently running GNU Emacs 18, GNU Emacs 19, XEmacs 19, XEmacs 20, or Epoch, and use appropriate code, check out the -example given in `etc/sample.emacs'. There are other nifty things in -there as well! +example given in `etc/sample.init.el' (`etc/sample.emacs' in XEmacs +versions prior to 21.4). There are other nifty things in there as well! For all new code, all you really need to do is: @@ -1089,9 +1121,7 @@ Q3.0.2: How can I evaluate Emacs-Lisp expressions? `C-j' after the expression. How do I do it from another buffer? Press `M-:' (the default binding of `eval-expression'), and enter -the expression to the minibuffer. In XEmacs prior to 19.15 -`eval-expression' used to be a disabled command by default. If this is -the case, upgrade your XEmacs. +the expression to the minibuffer.  File: xemacs-faq.info, Node: Q3.0.3, Next: Q3.0.4, Prev: Q3.0.2, Up: Customization @@ -1099,9 +1129,9 @@ File: xemacs-faq.info, Node: Q3.0.3, Next: Q3.0.4, Prev: Q3.0.2, Up: Customi Q3.0.3: `(setq tab-width 6)' behaves oddly. ------------------------------------------- - If you put `(setq tab-width 6)' in your `.emacs' file it does not -work! Is there a reason for this? If you do it at the EVAL prompt it -works fine!! How strange. + If you put `(setq tab-width 6)' in your `init.el'/`.emacs' file it +does not work! Is there a reason for this? If you do it at the EVAL +prompt it works fine!! How strange. Use `setq-default' instead, since `tab-width' is all-buffer-local. @@ -1176,8 +1206,6 @@ File: xemacs-faq.info, Node: Q3.0.7, Next: Q3.0.8, Prev: Q3.0.6, Up: Customi Q3.0.7: Font selections in don't get saved after `Save Options'. ---------------------------------------------------------------- - For XEmacs 19.14 and previous: - John Mann writes: You have to go to Options->Frame Appearance and unselect @@ -1185,9 +1213,7 @@ Q3.0.7: Font selections in don't get saved after `Save Options'. are only applied to the _current_ frame and do _not_ get saved when you save options. - For XEmacs 19.15 and later: - - Implement the above as well as set the following in your `.emacs' + Also, set the following in your `init.el'/`.emacs': (setq options-save-faces t) @@ -1280,38 +1306,3 @@ File: xemacs-faq.info, Node: Q3.1.4, Next: Q3.1.5, Prev: Q3.1.3, Up: Customi Q3.1.4: [This question intentionally left blank] ------------------------------------------------ - -File: xemacs-faq.info, Node: Q3.1.5, Next: Q3.1.6, Prev: Q3.1.4, Up: Customization - -Q3.1.5: How can I get the icon to just say `XEmacs'? ----------------------------------------------------- - - I'd like the icon to just say `XEmacs', and not include the name of -the current file in it. - - Add the following line to your `.emacs': - - (setq frame-icon-title-format "XEmacs") - - -File: xemacs-faq.info, Node: Q3.1.6, Next: Q3.1.7, Prev: Q3.1.5, Up: Customization - -Q3.1.6: How can I have the window title area display the full path? -------------------------------------------------------------------- - - I'd like to have the window title area display the full -directory/name of the current buffer file and not just the name. - - Add the following line to your `.emacs': - - (setq frame-title-format "%S: %f") - - A more sophisticated title might be: - - (setq frame-title-format - '("%S: " (buffer-file-name "%f" - (dired-directory dired-directory "%b")))) - - That is, use the file name, or the dired-directory, or the buffer -name. - diff --git a/info/xemacs-faq.info-3 b/info/xemacs-faq.info-3 index 8fa7ecf..f7f9342 100644 --- a/info/xemacs-faq.info-3 +++ b/info/xemacs-faq.info-3 @@ -7,6 +7,41 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  +File: xemacs-faq.info, Node: Q3.1.5, Next: Q3.1.6, Prev: Q3.1.4, Up: Customization + +Q3.1.5: How can I get the icon to just say `XEmacs'? +---------------------------------------------------- + + I'd like the icon to just say `XEmacs', and not include the name of +the current file in it. + + Add the following line to your `init.el'/`.emacs': + + (setq frame-icon-title-format "XEmacs") + + +File: xemacs-faq.info, Node: Q3.1.6, Next: Q3.1.7, Prev: Q3.1.5, Up: Customization + +Q3.1.6: How can I have the window title area display the full path? +------------------------------------------------------------------- + + I'd like to have the window title area display the full +directory/name of the current buffer file and not just the name. + + Add the following line to your `init.el'/`.emacs': + + (setq frame-title-format "%S: %f") + + A more sophisticated title might be: + + (setq frame-title-format + '("%S: " (buffer-file-name "%f" + (dired-directory dired-directory "%b")))) + + That is, use the file name, or the dired-directory, or the buffer +name. + + File: xemacs-faq.info, Node: Q3.1.7, Next: Q3.1.8, Prev: Q3.1.6, Up: Customization Q3.1.7: `xemacs -name junk' doesn't work? @@ -74,11 +109,11 @@ File: xemacs-faq.info, Node: Q3.2.1, Next: Q3.2.2, Prev: Q3.1.8, Up: Customi 3.2: Textual Fonts & Colors =========================== -Q3.2.1: How can I set color options from `.emacs'? --------------------------------------------------- +Q3.2.1: How can I set color options from `init.el'/`.emacs'? +------------------------------------------------------------ - How can I set the most commonly used color options from my `.emacs' -instead of from my `.Xdefaults'? + How can I set the most commonly used color options from my +`init.el'/`.emacs' instead of from my `.Xdefaults'? Like this: @@ -139,7 +174,7 @@ region? Emacs.zmacs-region.attributeForeground: firebrick Emacs.zmacs-region.attributeBackground: lightseagreen - or in your `.emacs': + or in your `init.el'/`.emacs': (set-face-background 'zmacs-region "red") (set-face-foreground 'zmacs-region "yellow") @@ -151,22 +186,17 @@ Q3.2.4: How can I limit color map usage? ---------------------------------------- I'm using Netscape (or another color grabber like XEmacs); is there -anyway to limit the number of available colors in the color map? +any way to limit the number of available colors in the color map? - XEmacs 19.13 didn't have such a mechanism (unlike netscape, or other -color-hogs). One solution is to start XEmacs prior to netscape, since -this will prevent Netscape from grabbing all colors (but Netscape will -complain). You can use the flags for Netscape, like -mono, -ncols <#> -or -install (for mono, limiting to <#> colors, or for using a private -color map). Since Netscape will take the entire colormap and never -release it, the only reasonable way to run it is with `-install'. + Answer: No, but you can start Netscape before XEmacs, and it will use +the closest available color if the colormap is full. You can also limit +the number of colors Netscape uses, using the flags -mono, -ncols <#> or +-install (for mono, limiting to <#> colors, or for using a private color +map). If you have the money, another solution would be to use a truecolor or direct color video. - Starting with XEmacs 19.14, XEmacs uses the closest available color -if the colormap is full, so it's O.K. now to start Netscape first. -  File: xemacs-faq.info, Node: Q3.2.5, Next: Q3.2.6, Prev: Q3.2.4, Up: Customization @@ -215,18 +245,14 @@ Q3.3.1: How can I make the modeline go away? (set-specifier has-modeline-p nil) - Starting with XEmacs 19.14 the modeline responds to mouse clicks, so -if you haven't liked or used the modeline in the past, you might want to -try the new version out. -  File: xemacs-faq.info, Node: Q3.3.2, Next: Q3.3.3, Prev: Q3.3.1, Up: Customization Q3.3.2: How do you have XEmacs display the line number in the modeline? ----------------------------------------------------------------------- - Add the following line to your `.emacs' file to display the line -number: + Add the following line to your `init.el'/`.emacs' file to display +the line number: (line-number-mode 1) @@ -234,9 +260,9 @@ number: (column-number-mode 1) - Or select from the `Options' menu -`Customize->Emacs->Editing->Basics->Line Number Mode' and/or -`Customize->Emacs->Editing->Basics->Column Number Mode' + Or select from the `Options' menu `Advanced +(Customize)->Emacs->Editing->Basics->Line Number Mode' and/or `Advanced +(Customize)->Emacs->Editing->Basics->Column Number Mode' Or type `M-x customize editing-basics '. @@ -246,7 +272,8 @@ File: xemacs-faq.info, Node: Q3.3.3, Next: Q3.3.4, Prev: Q3.3.2, Up: Customi Q3.3.3: How do I get XEmacs to put the time of day on the modeline? ------------------------------------------------------------------- - Add the following line to your `.emacs' file to display the time: + Add the following line to your `init.el'/`.emacs' file to display +the time: (display-time) @@ -261,24 +288,14 @@ Q3.3.4: How do I turn off current chapter from AUC TeX modeline? With AUC TeX, fast typing is hard because the current chapter, section etc. are given in the modeline. How can I turn this off? - It's not AUC TeX, it comes from `func-menu' in `func-menu.el'. Add -this code to your `.emacs' to turn it off: - - (setq fume-display-in-modeline-p nil) - - Or just add a hook to `TeX-mode-hook' to turn it off only for TeX -mode: - - (add-hook 'TeX-mode-hook - '(lambda () (setq fume-display-in-modeline-p nil))) + It's not AUC TeX, it comes from `func-menu' in `func-menu.el'. David Hughes writes: - If you have 19.14 or later, try this instead; you'll still get the - function name displayed in the modeline, but it won't attempt to - keep track when you modify the file. To refresh when it gets out - of synch, you simply need click on the `Rescan Buffer' option in - the function-menu. + Try this; you'll still get the function name displayed in the + modeline, but it won't attempt to keep track when you modify the + file. To refresh when it gets out of synch, you simply need click + on the `Rescan Buffer' option in the function-menu. (setq-default fume-auto-rescan-buffer-p nil) @@ -295,17 +312,17 @@ Q3.3.5: How can one change the modeline color based on the mode used? (set-face-background 'modeline "red" (current-buffer)))) Then, when editing a Lisp file (i.e. when in Lisp mode), the modeline -colors change from the default set in your `.emacs'. The change will -only be made in the buffer you just entered (which contains the Lisp -file you are editing) and will not affect the modeline colors anywhere -else. +colors change from the default set in your `init.el'/`.emacs'. The +change will only be made in the buffer you just entered (which contains +the Lisp file you are editing) and will not affect the modeline colors +anywhere else. Notes: * The hook is the mode name plus `-hook'. eg. c-mode-hook, - c++-mode-hook, emacs-lisp-mode-hook (used for your `.emacs' or a - `xx.el' file), lisp-interaction-mode-hook (the `*scratch*' - buffer), text-mode-hook, etc. + c++-mode-hook, emacs-lisp-mode-hook (used for your + `init.el'/`.emacs' or a `xx.el' file), lisp-interaction-mode-hook + (the `*scratch*' buffer), text-mode-hook, etc. * Be sure to use `add-hook', not `(setq c-mode-hook xxxx)', otherwise you will erase anything that anybody has already put on @@ -316,9 +333,9 @@ else. (current-buffer))' if you wish the modeline font to vary based on the current mode. - This works in 19.15 as well, but there are additional modeline faces, -`modeline-buffer-id', `modeline-mousable', and -`modeline-mousable-minor-mode', which you may want to customize. + There are additional modeline faces, `modeline-buffer-id', +`modeline-mousable', and `modeline-mousable-minor-mode', which you may +want to customize.  File: xemacs-faq.info, Node: Q3.4.1, Next: Q3.4.2, Prev: Q3.3.5, Up: Customization @@ -329,13 +346,12 @@ File: xemacs-faq.info, Node: Q3.4.1, Next: Q3.4.2, Prev: Q3.3.5, Up: Customi Q3.4.1: How do I open a frame on another screen of my multi-headed display? --------------------------------------------------------------------------- - The support for this was revamped for 19.14. Use the command `M-x -make-frame-on-display'. This command is also on the File menu in the -menubar. + Use the command `M-x make-frame-on-display'. This command is also +on the File menu in the menubar. - XEmacs 19.14 and later also have the command `make-frame-on-tty' -which will establish a connection to any tty-like device. Opening the -TTY devices should be left to `gnuclient', though. + The command `make-frame-on-tty' also exists, which will establish a +connection to any tty-like device. Opening the TTY devices should be +left to `gnuclient', though.  File: xemacs-faq.info, Node: Q3.4.2, Next: Q3.5.1, Prev: Q3.4.1, Up: Customization @@ -343,10 +359,8 @@ File: xemacs-faq.info, Node: Q3.4.2, Next: Q3.5.1, Prev: Q3.4.1, Up: Customi Q3.4.2: Can I really connect to a running XEmacs after calling up over a modem? How? ------------------------------------------------------------------------------------- - If you're not running at least XEmacs 19.14, you can't. Otherwise -check out the `gnuattach' program supplied with XEmacs. Starting with -XEmacs 20.3, `gnuattach' and `gnudoit' functionality is provided by -`gnuclient'. + Yes. Use `gnuclient -nw'. (Prior to 20.3, use the `gnuattach' +program supplied with XEmacs instead.) Also *Note Q5.0.12::. @@ -396,7 +410,7 @@ File: xemacs-faq.info, Node: Q3.5.2, Next: Q3.5.3, Prev: Q3.5.1, Up: Customi Q3.5.2: How can I stop down-arrow from adding empty lines to the bottom of my buffers? -------------------------------------------------------------------------------------- - Add the following line to your `.emacs' file: + Add the following line to your `init.el'/`.emacs' file: (setq next-line-add-newlines nil) @@ -435,20 +449,15 @@ Q3.5.4: Globally binding `Delete'? I cannot manage to globally bind my `Delete' key to something other than the default. How does one do this? + Answer: The problem is that many modes explicitly bind `Delete'. To +get around this, try the following: + (defun foo () (interactive) (message "You hit DELETE")) - (global-set-key 'delete 'foo) - - However, some modes explicitly bind `Delete', so you would need to -add a hook that does `local-set-key' for them. If what you want to do -is make the Backspace and Delete keys work more PC/Motif-like, then -take a look at the `delbs.el' package. - - New in XEmacs 19.14 is a variable called `key-translation-map' which -makes it easier to bind `Delete'. `delbs.el' is a good example of how -to do this correctly. + (define-key key-translation-map 'delete 'redirected-delete) + (global-set-key 'redirected-delete 'foo) Also *Note Q3.5.10::. @@ -482,8 +491,8 @@ cursor keys (i.e. `C-n' and `C-p'): (setq scroll-step 1) Starting with XEmacs-20.3 you can also change this with Customize. -Select from the `Options' menu -`Customize->Emacs->Environment->Windows->Scroll Step...' or type `M-x +Select from the `Options' menu `Advanced +(Customize)->Emacs->Environment->Windows->Scroll Step...' or type `M-x customize windows '.  @@ -496,7 +505,7 @@ Q3.5.6: How to map `Help' key alone on Sun type4 keyboard? (global-set-key [help] 'help-command);; Help - The following works in XEmacs 19.15 with the addition of shift: + The following works in XEmacs with the addition of shift: (global-set-key [(shift help)] 'help-command);; Help @@ -520,9 +529,8 @@ Q3.5.7: How can you type in special characters in XEmacs? One way is to use the package `x-compose'. Then you can use sequences like `Compose " a' to get ä, etc. - Another way is to use the `iso-insert' package, provided in XEmacs -19.15 and later. Then you can use sequences like `C-x 8 " a' to get ä, -etc. + Another way is to use the `iso-insert' package. Then you can use +sequences like `C-x 8 " a' to get ä, etc. Glynn Clements writes: @@ -557,27 +565,10 @@ etc.  File: xemacs-faq.info, Node: Q3.5.8, Next: Q3.5.9, Prev: Q3.5.7, Up: Customization -Q3.5.8: Why does `(global-set-key [delete-forward] 'delete-char)' complain? ---------------------------------------------------------------------------- - - Why does `(define-key global-map [ delete-forward ] 'delete-char)' -complain of not being able to bind an unknown key? - - Try this instead: - - (define-key global-map [delete_forward] 'delete-char) - - and it will work. - - What you are seeing above is a bug due to code that is trying to -check for GNU Emacs syntax like: - - (define-key global-map [C-M-a] 'delete-char) - - which otherwise would cause no errors but would not result in the -expected behavior. +Q3.5.8: [This question intentionally left blank] +------------------------------------------------ - This bug has been fixed in 19.14. + Obsolete question, left blank to avoid renumbering.  File: xemacs-faq.info, Node: Q3.5.9, Next: Q3.5.10, Prev: Q3.5.8, Up: Customization @@ -595,9 +586,9 @@ behavior. Note that `delbackspace' package is obsolete. Starting with XEmacs-20.3 better solution is to set variable `delete-key-deletes-forward' to t. You can also change this with -Customize. Select from the `Options' menu -`Customize->Emacs->Editing->Basics->Delete Key Deletes Forward' or type -`M-x customize editing-basics '. +Customize. Select from the `Options' menu `Advanced +(Customize)->Emacs->Editing->Basics->Delete Key Deletes Forward' or +type `M-x customize editing-basics '. Also *Note Q3.5.4::. @@ -658,8 +649,8 @@ Q3.6.1: Is there a way to make the bar cursor thicker? (setq bar-cursor 'anything-else) Starting with XEmacs-20.3 you can also change these with Customize. -Select from the `Options' menu -`Customize->Emacs->Environment->Display->Bar Cursor...' or type `M-x +Select from the `Options' menu `Advanced +(Customize)->Emacs->Environment->Display->Bar Cursor...' or type `M-x customize display '. You can use a color to make it stand out better: @@ -674,9 +665,9 @@ Q3.6.2: Is there a way to get back the block cursor? (setq bar-cursor nil) - Starting with XEmacs-20.3 you can also change this with Customize. -Select from the `Options' menu -`Customize->Emacs->Environment->Display->Bar Cursor...' or type `M-x + Starting with XEmacs 20.3 you can also change this with Customize. +Select from the `Options' menu `Advanced +(Customize)->Emacs->Environment->Display->Bar Cursor...' or type `M-x customize display '.  @@ -685,8 +676,7 @@ File: xemacs-faq.info, Node: Q3.6.3, Next: Q3.7.1, Prev: Q3.6.2, Up: Customi Q3.6.3: Can I make the cursor blink? ------------------------------------ - If you are running a version of XEmacs older than 19.14, no. -Otherwise you can do the following: + Yes, like this: (blink-cursor-mode) @@ -780,13 +770,15 @@ How do I disable this? Examine the function `mouse-yank', by typing `C-h f mouse-yank '. - To get XEmacs to paste at the text cursor, add this your `.emacs': + To get XEmacs to paste at the text cursor, add this your +`init.el'/`.emacs': (setq mouse-yank-at-point t) Starting with XEmacs-20.2 you can also change this with Customize. -Select from the `Options' menu `Customize->Emacs->Editing->Mouse->Yank -At Point...' or type `M-x customize mouse '. +Select from the `Options' menu `Advanced +(Customize)->Emacs->Editing->Mouse->Yank At Point...' or type `M-x +customize mouse '.  File: xemacs-faq.info, Node: Q3.7.7, Next: Q3.7.8, Prev: Q3.7.6, Up: Customization @@ -808,8 +800,9 @@ rectangular regions: (setq mouse-track-rectangle-p t) Starting with XEmacs-20.2 you can also change this with Customize. -Select from the `Options' menu `Customize->Emacs->Editing->Mouse->Track -Rectangle...' or type `M-x customize mouse '. +Select from the `Options' menu `Advanced +(Customize)->Emacs->Editing->Mouse->Track Rectangle...' or type `M-x +customize mouse '. mouse-track-do-rectangle: (event) -- an interactive compiled Lisp function. @@ -835,13 +828,6 @@ File: xemacs-faq.info, Node: Q3.8.1, Next: Q3.8.2, Prev: Q3.7.8, Up: Customi Q3.8.1: How do I get rid of the menu (or menubar)? -------------------------------------------------- - If you are running XEmacs 19.13 and earlier, add this command to your -`.emacs'. - - (set-menubar nil) - - Starting with XEmacs 19.14 the preferred method is: - (set-specifier menubar-visible-p nil)  @@ -850,7 +836,7 @@ File: xemacs-faq.info, Node: Q3.8.2, Next: Q3.8.3, Prev: Q3.8.1, Up: Customi Q3.8.2: Can I customize the basic menubar? ------------------------------------------ - For an extensive menubar, add this line to your `.emacs': + For an extensive menubar, add this line to your `init.el'/`.emacs': (load "big-menubar") @@ -864,15 +850,15 @@ File: xemacs-faq.info, Node: Q3.8.3, Next: Q3.8.4, Prev: Q3.8.2, Up: Customi Q3.8.3: How do I control how many buffers are listed in the menu `Buffers List'? -------------------------------------------------------------------------------- - Add the following to your `.emacs' (suit to fit): + Add the following to your `init.el'/`.emacs' (suit to fit): (setq buffers-menu-max-size 20) For no limit, use an argument of `nil'. Starting with XEmacs-20.3 you can also change this with Customize. -Select from the `Options' menu -`Customize->Emacs->Environment->Menu->Buffers Menu->Max Size...' or +Select from the `Options' menu `Advanced +(Customize)->Emacs->Environment->Menu->Buffers Menu->Max Size...' or type `M-x customize buffers-menu '.  @@ -950,11 +936,6 @@ turn the scrollbars off only in a single buffer: (set-specifier scrollbar-width 0 (current-buffer)) - In XEmacs versions prior to 19.14, you had to use the hairier -construct: - - (set-specifier scrollbar-width (cons (selected-frame) 0)) -  File: xemacs-faq.info, Node: Q3.9.2, Next: Q3.9.3, Prev: Q3.9.1, Up: Customization @@ -996,16 +977,10 @@ lower-left hand corner.  File: xemacs-faq.info, Node: Q3.9.4, Next: Q3.10.1, Prev: Q3.9.3, Up: Customization -Q3.9.4: How can I get automatic horizontal scrolling? ------------------------------------------------------ - - By the same token, how can I turn it off in specific modes? - - To do this, add to your `.emacs' file: - - (require 'auto-show) +Q3.9.4: How can I turn off automatic horizontal scrolling in specific modes? +---------------------------------------------------------------------------- - Then do `(setq truncate-lines t)' in the mode-hooks for any modes in + Do `(setq truncate-lines t)' in the mode-hooks for any modes in which you want lines truncated. More precisely: If `truncate-lines' is nil, horizontal scrollbars @@ -1017,8 +992,6 @@ will never appear. Otherwise, they will appear only if the value of then horizontal scrollbars will not appear in truncated buffers unless the package specifically asked for them. - Automatic horizontal scrolling is now standard, starting with 19.14. -  File: xemacs-faq.info, Node: Q3.10.1, Next: Q3.10.2, Prev: Q3.9.4, Up: Customization @@ -1031,13 +1004,14 @@ Q3.10.1: How can I turn off or change highlighted selections? The `zmacs' mode allows for what some might call gratuitous highlighting for selected regions (either by setting mark or by using the mouse). This is the default behavior. To turn off, add the -following line to your `.emacs' file: +following line to your `init.el'/`.emacs' file: (setq zmacs-regions nil) Starting with XEmacs-20.2 you can also change this with Customize. -Select from the `Options' menu `Customize->Emacs->Editing->Basics->Zmacs -Regions' or type `M-x customize editing-basics '. +Select from the `Options' menu `Advanced +(Customize)->Emacs->Editing->Basics->Zmacs Regions' or type `M-x +customize editing-basics '. To change the face for selection, look at `Options->Customize' on the menubar. @@ -1056,7 +1030,8 @@ is what happens when you select a region (with the mouse or keyboard) and you press a key to replace the selected region by the key you typed. Usually backspace kills the selected region. - To get this behavior, add the following lines to your `.emacs': + To get this behavior, add the following lines to your +`init.el'/`.emacs': (cond ((fboundp 'turn-on-pending-delete) @@ -1077,7 +1052,7 @@ Q3.10.3: Can I turn off the highlight during isearch? I do not like my text highlighted while I am doing isearch as I am not able to see what's underneath. How do I turn it off? - Put the following in your `.emacs': + Put the following in your `init.el'/`.emacs': (setq isearch-highlight nil) @@ -1393,3 +1368,27 @@ Q4.0.11: How do I make VM or mh-e display graphical smilies? (autoload 'smiley-buffer "smiley" nil t) (add-hook 'mime-viewer/plain-text-preview-hook 'smiley-buffer) + +File: xemacs-faq.info, Node: Q4.0.12, Next: Q4.1.1, Prev: Q4.0.11, Up: Subsystems + +Q4.0.12: Customization of VM not covered in the manual, or here. +---------------------------------------------------------------- + + giacomo boffi writes: + + The meta-answer is to look into the file `vm-vars.el', in the vm + directory of the lisp library. + + `vm-vars.el' contains, initializes and carefully describes, with + examples of usage, the plethora of user options that _fully_ + control VM's behavior. + + Enter vm-vars, `forward-search' for toolbar, find the variables + that control the toolbar placement, appearance, existence, copy to + your `init.el'/`.emacs' or `.vm' and modify according to the + detailed instructions. + + The above also applies to all the various features of VM: search + for some keywords, maybe the first you conjure isn't appropriate, + find the appropriate variables, copy and experiment. + diff --git a/info/xemacs-faq.info-4 b/info/xemacs-faq.info-4 index 7e671ec..88c7a2e 100644 --- a/info/xemacs-faq.info-4 +++ b/info/xemacs-faq.info-4 @@ -7,30 +7,6 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  -File: xemacs-faq.info, Node: Q4.0.12, Next: Q4.1.1, Prev: Q4.0.11, Up: Subsystems - -Q4.0.12: Customization of VM not covered in the manual, or here. ----------------------------------------------------------------- - - giacomo boffi writes: - - The meta-answer is to look into the file `vm-vars.el', in the vm - directory of the lisp library. - - `vm-vars.el' contains, initializes and carefully describes, with - examples of usage, the plethora of user options that _fully_ - control VM's behavior. - - Enter vm-vars, `forward-search' for toolbar, find the variables - that control the toolbar placement, appearance, existence, copy to - your `.emacs' or `.vm' and modify according to the detailed - instructions. - - The above also applies to all the various features of VM: search - for some keywords, maybe the first you conjure isn't appropriate, - find the appropriate variables, copy and experiment. - - File: xemacs-faq.info, Node: Q4.1.1, Next: Q4.1.2, Prev: Q4.0.12, Up: Subsystems 4.1: Web browsing with W3 @@ -602,14 +578,14 @@ Major & Minor Modes: * Q5.0.1:: How can I do source code highlighting using font-lock? * Q5.0.2:: I do not like cc-mode. How do I use the old c-mode? * Q5.0.3:: How do I get `More' Syntax Highlighting on by default? -* Q5.0.4:: How can I enable auto-indent? +* Q5.0.4:: How can I enable auto-indent and/or Filladapt? * Q5.0.5:: How can I get XEmacs to come up in text/auto-fill mode by default? * Q5.0.6:: How do I start up a second shell buffer? * Q5.0.7:: Telnet from shell filters too much. * Q5.0.8:: Why does edt emulation not work? * Q5.0.9:: How can I emulate VI and use it as my default mode? * Q5.0.10:: [This question intentionally left blank] -* Q5.0.11:: How do I turn on filladapt for all buffers? +* Q5.0.11:: [This question intentionally left blank] * Q5.0.12:: How do I disable gnuserv from opening a new frame? * Q5.0.13:: How do I start gnuserv so that each subsequent XEmacs is a client? * Q5.0.14:: Strange things are happening in Shell Mode. @@ -641,7 +617,7 @@ Sound: Miscellaneous: * Q5.3.1:: How do you make XEmacs indent CL if-clauses correctly? -* Q5.3.2:: Fontifying hangs when editing a postscript file. +* Q5.3.2:: [This question intentionally left blank] * Q5.3.3:: How can I print WYSIWYG a font-locked buffer? * Q5.3.4:: Getting M-x lpr to work with postscript printer. * Q5.3.5:: How do I specify the paths that XEmacs uses for finding files? @@ -663,13 +639,14 @@ Q5.0.1: How can I do source code highlighting using font-lock? -------------------------------------------------------------- For most modes, font-lock is already set up and just needs to be -turned on. This can be done by `M-x font-lock-mode', or by having -XEmacs automatically start it by adding lines like: +turned on. This can be done by adding the line: - (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock) - (add-hook 'dired-mode-hook 'turn-on-font-lock) + (require 'font-lock) - to your `.emacs'. See the file `etc/sample.emacs' for more examples. + to your `init.el'/`.emacs'. (You can turn it on for the current +buffer and session only by `M-x font-lock-mode'.) See the file +`etc/sample.init.el' (`etc/sample.emacs' in XEmacs versions prior to +21.4) for more information. See also `Syntax Highlighting' from the `Options' menu. Remember to save options. @@ -685,7 +662,8 @@ much more powerful than the old c-mode. If you're having trouble getting your old offsets to work, try using `c-set-offset' instead. You might also consider using the package `cc-compat'. - But, if you still insist, add the following lines to your `.emacs': + But, if you still insist, add the following lines to your +`init.el'/`.emacs': (fmakunbound 'c-mode) (makunbound 'c-mode-map) @@ -704,42 +682,40 @@ File: xemacs-faq.info, Node: Q5.0.3, Next: Q5.0.4, Prev: Q5.0.2, Up: Miscell Q5.0.3: How do I get `More' Syntax Highlighting on by default? -------------------------------------------------------------- - Use the following code in your `.emacs': + Use the following code in your `init.el'/`.emacs': (setq-default font-lock-maximum-decoration t) - In versions of XEmacs prior to 19.14, you had to use a kludgy -solution like this: - - (setq c-font-lock-keywords c-font-lock-keywords-2 - c++-font-lock-keywords c++-font-lock-keywords-2 - lisp-font-lock-keywords lisp-font-lock-keywords-2) - - It will work for C, C++ and Lisp. - See also `Syntax Highlighting' from the `Options' menu. Remember to save options.  File: xemacs-faq.info, Node: Q5.0.4, Next: Q5.0.5, Prev: Q5.0.3, Up: Miscellaneous -Q5.0.4: How can I enable auto-indent? -------------------------------------- +Q5.0.4: How can I enable auto-indent and/or Filladapt? +------------------------------------------------------ - Put the following line in your `.emacs': + Put the following line in your `init.el'/`.emacs': (setq indent-line-function 'indent-relative-maybe) If you want to get fancy, try the `filladapt' package available -standard with XEmacs. Put this into your `.emacs': +standard with XEmacs. Put this into your `init.el'/`.emacs': (require 'filladapt) - (add-hook 'text-mode-hook 'turn-on-filladapt-mode) - ;;; and others ... + (setq-default filladapt-mode t) + (add-hook 'c-mode-hook 'turn-off-filladapt-mode) + + This will enable Filladapt for all modes except C mode, where it +doesn't work well. To turn Filladapt on only in particular major +modes, remove the `(setq-default ...)' line and use +`turn-on-filladapt-mode', like this: + + (add-hook 'text-mode-hook 'turn-on-filladapt-mode) You can customize filling and adaptive filling with Customize. -Select from the `Options' menu -`Customize->Emacs->->Editing->Fill->Fill...' or type `M-x customize +Select from the `Options' menu `Advanced +(Customize)->Emacs->Editing->Fill->Fill...' or type `M-x customize fill '. Note that well-behaving text-lookalike modes will run @@ -754,7 +730,7 @@ File: xemacs-faq.info, Node: Q5.0.5, Next: Q5.0.6, Prev: Q5.0.4, Up: Miscell Q5.0.5: How can I get XEmacs to come up in text/auto-fill mode by default? -------------------------------------------------------------------------- - Try the following lisp in your `.emacs': + Try the following lisp in your `init.el'/`.emacs': (setq default-major-mode 'text-mode) (setq text-mode-hook 'turn-on-auto-fill) @@ -833,7 +809,7 @@ Q5.0.8: Why does edt emulation not work? We don't know, but you can use tpu-edt emulation instead, which works fine and is a little fancier than the standard edt emulation. To do -this, add the following line to your `.emacs': +this, add the following line to your `init.el'/`.emacs': (tpu-edt) @@ -849,14 +825,14 @@ Q5.0.9: How can I emulate VI and use it as my default mode? ----------------------------------------------------------- Our recommended VI emulator is viper. To make viper-mode the default, -add this to your `.emacs': +add this to your `init.el'/`.emacs': (viper-mode) Michael Kifer writes: - This should be added as close to the top of `.emacs' as you can get - it, otherwise some minor modes may not get viper-ized. + This should be added as close to the top of `init.el'/`.emacs' as + you can get it, otherwise some minor modes may not get viper-ized.  File: xemacs-faq.info, Node: Q5.0.10, Next: Q5.0.11, Prev: Q5.0.9, Up: Miscellaneous @@ -869,19 +845,10 @@ Q5.0.10: [This question intentionally left blank]  File: xemacs-faq.info, Node: Q5.0.11, Next: Q5.0.12, Prev: Q5.0.10, Up: Miscellaneous -Q5.0.11: How do I turn on filladapt for all buffers? ----------------------------------------------------- - - Filladapt is a minor mode and minor modes are traditionally off by -default. The following added to your `.emacs' will turn it on for all -buffers: - - (setq-default filladapt-mode t) - - Use `turn-on-filladapt-mode' to turn Filladapt on in particular -major modes, like this: +Q5.0.11: [This question intentionally left blank] +------------------------------------------------- - (add-hook 'text-mode-hook 'turn-on-filladapt-mode) + Obsolete question, left blank to avoid renumbering  File: xemacs-faq.info, Node: Q5.0.12, Next: Q5.0.13, Prev: Q5.0.11, Up: Miscellaneous @@ -895,17 +862,17 @@ created. For example, you could put (setq gnuserv-frame (selected-frame)) - early on in your `.emacs', to ensure that the first frame created is -the one used for your gnuserv buffers. + early on in your `init.el'/`.emacs', to ensure that the first frame +created is the one used for your gnuserv buffers. - Starting in 19.15, there is an option to set the gnuserv target to -the current frame. See `Options->"Other Window" Location->Make current -frame gnuserv target' + There is an option to set the gnuserv target to the current frame. +See `Options->Display->"Other Window" Location->Make Current Frame +Gnuserv Target' Starting with XEmacs-20.3 you can also change this with Customize. -Select from the `Options' menu -`Customize->Emacs->Environment->Gnuserv->Gnuserv Frame...' or type `M-x -customize gnuserv '. +Select from the `Options' menu `Advanced +(Customize)->Emacs->Environment->Gnuserv->Gnuserv Frame...' or type +`M-x customize gnuserv '.  File: xemacs-faq.info, Node: Q5.0.13, Next: Q5.0.14, Prev: Q5.0.12, Up: Miscellaneous @@ -913,7 +880,8 @@ File: xemacs-faq.info, Node: Q5.0.13, Next: Q5.0.14, Prev: Q5.0.12, Up: Misc Q5.0.13: How do I start gnuserv so that each subsequent XEmacs is a client? --------------------------------------------------------------------------- - Put the following in your `.emacs' file to start the server: + Put the following in your `init.el'/`.emacs' file to start the +server: (gnuserv-start) @@ -966,7 +934,8 @@ Q5.0.16: I find auto-show-mode disconcerting. How do I turn it off? `auto-show-mode' controls whether or not a horizontal scrollbar magically appears when a line is too long to be displayed. This is -enabled by default. To turn it off, put the following in your `.emacs': +enabled by default. To turn it off, put the following in your +`init.el'/`.emacs': (setq auto-show-mode nil) (setq-default auto-show-mode nil) @@ -977,8 +946,8 @@ File: xemacs-faq.info, Node: Q5.0.17, Next: Q5.0.18, Prev: Q5.0.16, Up: Misc Q5.0.17: How can I get two instances of info? --------------------------------------------- - You can't. The `info' package does not provide for multiple info -buffers. + Before 21.4, you can't. The `info' package does not provide for +multiple info buffers. In 21.4, this should be fixed. #### how?  File: xemacs-faq.info, Node: Q5.0.18, Next: Q5.0.19, Prev: Q5.0.17, Up: Miscellaneous @@ -1324,3 +1293,26 @@ fact that it is an interpreter. Please try not to make your code much uglier to gain a very small speed gain. It's not usually worth it. + +File: xemacs-faq.info, Node: Q5.1.9, Next: Q5.1.10, Prev: Q5.1.8, Up: Miscellaneous + +Q5.1.9: How do I put a glyph as annotation in a buffer? +------------------------------------------------------- + + Here is a solution that will insert the glyph annotation at the +beginning of buffer: + + (make-annotation (make-glyph '([FORMAT :file FILE] + [string :data "fallback-text"])) + (point-min) + 'text + (current-buffer)) + + Replace `FORMAT' with an unquoted symbol representing the format of +the image (e.g. `xpm', `xbm', `gif', `jpeg', etc.) Instead of `FILE', +use the image file name (e.g. +`/usr/local/lib/xemacs-21.4/etc/recycle.xpm'). + + You can turn this to a function (that optionally prompts you for a +file name), and inserts the glyph at `(point)' instead of `(point-min)'. + diff --git a/info/xemacs-faq.info-5 b/info/xemacs-faq.info-5 index ccfd040..994490d 100644 --- a/info/xemacs-faq.info-5 +++ b/info/xemacs-faq.info-5 @@ -7,29 +7,6 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  -File: xemacs-faq.info, Node: Q5.1.9, Next: Q5.1.10, Prev: Q5.1.8, Up: Miscellaneous - -Q5.1.9: How do I put a glyph as annotation in a buffer? -------------------------------------------------------- - - Here is a solution that will insert the glyph annotation at the -beginning of buffer: - - (make-annotation (make-glyph '([FORMAT :file FILE] - [string :data "fallback-text"])) - (point-min) - 'text - (current-buffer)) - - Replace `FORMAT' with an unquoted symbol representing the format of -the image (e.g. `xpm', `xbm', `gif', `jpeg', etc.) Instead of `FILE', -use the image file name (e.g. -`/usr/local/lib/xemacs-20.2/etc/recycle.xpm'). - - You can turn this to a function (that optionally prompts you for a -file name), and inserts the glyph at `(point)' instead of `(point-min)'. - - File: xemacs-faq.info, Node: Q5.1.10, Next: Q5.1.11, Prev: Q5.1.9, Up: Miscellaneous Q5.1.10: `map-extents' won't traverse all of my extents! @@ -65,11 +42,11 @@ Q5.1.11: My elisp program is horribly slow. Is there an easy way to find out where it spends time? - zHrvoje Niksic writes: - Under XEmacs 20.4 and later you can use `M-x - profile-key-sequence', press a key (say in the Gnus Group - buffer), and get the results using `M-x profile-results'. It - should give you an idea of where the time is being spent. + Hrvoje Niksic writes: + Under XEmacs 20.4 and later you can use `M-x profile-key-sequence', + press a key (say in the Gnus Group buffer), and get the + results using `M-x profile-results'. It should give you an idea of + where the time is being spent.  File: xemacs-faq.info, Node: Q5.2.1, Next: Q5.2.2, Prev: Q5.1.11, Up: Miscellaneous @@ -77,7 +54,7 @@ File: xemacs-faq.info, Node: Q5.2.1, Next: Q5.2.2, Prev: Q5.1.11, Up: Miscel Q5.2.1: How do I turn off the sound? ------------------------------------ - Add the following line to your `.emacs': + Add the following line to your `init.el'/`.emacs': (setq bell-volume 0) (setq sound-alist nil) @@ -85,10 +62,10 @@ Q5.2.1: How do I turn off the sound? That will make your XEmacs totally silent--even the default ding sound (TTY beep on TTY-s) will be gone. - Starting with XEmacs-20.2 you can also change these with Customize. -Select from the `Options' menu -`Customize->Emacs->Environment->Sound->Sound...' or type `M-x customize - sound '. + Starting with XEmacs 20.2 you can also change these with Customize. +Select from the `Options' menu `Advanced +(Customize)->Emacs->Environment->Sound->Sound...' or type `M-x +customize sound '.  File: xemacs-faq.info, Node: Q5.2.2, Next: Q5.2.3, Prev: Q5.2.1, Up: Miscellaneous @@ -97,13 +74,10 @@ Q5.2.2: How do I get funky sounds instead of a boring beep? ----------------------------------------------------------- Make sure your XEmacs was compiled with sound support, and then put -this in your `.emacs': +this in your `init.el'/`.emacs': (load-default-sounds) - The sound support in XEmacs 19.14 was greatly improved over previous -versions. -  File: xemacs-faq.info, Node: Q5.2.3, Next: Q5.2.4, Prev: Q5.2.2, Up: Miscellaneous @@ -146,7 +120,7 @@ Q5.3.1: How do you make XEmacs indent CL if-clauses correctly? same amount instead of indenting the 3rd clause differently from the first two. - One way is to add, to `.emacs': + One way is to add, to `init.el'/`.emacs': (put 'if 'lisp-indent-function nil) @@ -171,22 +145,10 @@ any indent-functions.  File: xemacs-faq.info, Node: Q5.3.2, Next: Q5.3.3, Prev: Q5.3.1, Up: Miscellaneous -Q5.3.2: Fontifying hang when editing a postscript file. -------------------------------------------------------- - - When I try to edit a postscript file it gets stuck saying: -`fontifying 'filename' (regexps....)' and it just sits there. If I -press `C-c' in the window where XEmacs was started, it suddenly becomes -alive again. - - This was caused by a bug in the Postscript font-lock regular -expressions. It was fixed in 19.13. For earlier versions of XEmacs, -have a look at your `.emacs' file. You will probably have a line like: - - (add-hook 'postscript-mode-hook 'turn-on-font-lock) +Q5.3.2: [This question intentionally left blank] +------------------------------------------------ - Take it out, restart XEmacs, and it won't try to fontify your -postscript files anymore. + Obsolete question, left blank to avoid renumbering.  File: xemacs-faq.info, Node: Q5.3.3, Next: Q5.3.4, Prev: Q5.3.2, Up: Miscellaneous @@ -211,7 +173,7 @@ Q5.3.4: Getting `M-x lpr' to work with postscript printer. Postscript files, so how do I get `M-x lpr-region' and `M-x lpr-buffer' to work? - Put something like this in your `.emacs': + Put something like this in your `init.el'/`.emacs': (setq lpr-command "a2ps") (setq lpr-switches '("-p" "-1")) @@ -494,7 +456,7 @@ General Info * Q6.0.1:: What is the status of the XEmacs port to Windows? * Q6.0.2:: What flavors of MS Windows are supported? * Q6.0.3:: Where are the XEmacs on MS Windows binaries? -* Q6.0.4:: Does XEmacs on MS Windows require an X server to run? +* Q6.0.4:: Can I build XEmacs on MS Windows with support for X or Cygwin? Building XEmacs on MS Windows * Q6.1.1:: I decided to run with X. Where do I get an X server? @@ -507,7 +469,7 @@ Building XEmacs on MS Windows Customization and User Interface * Q6.2.1:: How will the port cope with differences in the Windows user interface? * Q6.2.2:: How do I change fonts in XEmacs on MS Windows? -* Q6.2.3:: Where do I put my `.emacs' file? +* Q6.2.3:: Where do I put my `init.el'/`.emacs' file? Miscellaneous * Q6.3.1:: Will XEmacs rename all the win32-* symbols to w32-*? @@ -534,9 +496,9 @@ cleanly compile and run on MS Windows operating systems. The mailing list at is dedicated to that effort (please use the -request address to subscribe). - At this time, XEmacs on MS Windows is usable, but lacks some of the -features of XEmacs on UNIX and UNIX-like systems. Notably, -internationalization does not work. + At this time, XEmacs on MS Windows is stable and full-featured. +However, the internationalization (Mule) support does not work - +although this is being actively worked on.  File: xemacs-faq.info, Node: Q6.0.2, Next: Q6.0.3, Prev: Q6.0.1, Up: MS Windows @@ -544,64 +506,59 @@ File: xemacs-faq.info, Node: Q6.0.2, Next: Q6.0.3, Prev: Q6.0.1, Up: MS Wind Q6.0.2: What flavors of MS Windows are supported? The list name implies NT only. --------------------------------------------------------------------------------- - The list name is misleading, as XEmacs will support both Windows 95, -Windows 98 and Windows NT. The MS Windows-specific code is based on + The list name is misleading, as XEmacs will support Windows 95, +Windows 98, Windows NT, Windows 2000, Windows ME, Windows XP, and all +newer versions of Windows. The MS Windows-specific code is based on Microsoft Win32 API, and will not work on MS Windows 3.x or on MS-DOS.  File: xemacs-faq.info, Node: Q6.0.3, Next: Q6.0.4, Prev: Q6.0.2, Up: MS Windows -Q6.0.3: Are binary kits available? ----------------------------------- +Q6.0.3: Are binaries available? +------------------------------- - Binary kits are available at -`ftp://ftp.xemacs.org/pub/xemacs/binary-kits/win32/' for the "plain" MS + Binaries are available at +`ftp://ftp.xemacs.org/pub/xemacs/binaries/win32/' for the native MS Windows version.  File: xemacs-faq.info, Node: Q6.0.4, Next: Q6.1.1, Prev: Q6.0.3, Up: MS Windows -Q6.0.4: Does XEmacs on MS Windows require an X server to run? -------------------------------------------------------------- +Q6.0.4: Can I build XEmacs on MS Windows with support for X or Cygwin? +---------------------------------------------------------------------- - Short answer: No. + Yes. XEmacs can be built in several ways in the MS Windows +environment. - Long answer: XEmacs can be built in several ways in the MS Windows -environment, some of them requiring an X server and some not. + The standard way is what we call the "native" port. It uses the +Win32 API and has no connection with X whatsoever - it does not require +X libraries to build, nor does it require an X server to run. The +native port is the most reliable version and provides the best graphical +support. Almost all development is geared towards this version, and +there is little reason not to use it. - One is what we call the "X" port--it requires X libraries to build + You can also build XEmacs "X" port--it requires X libraries to build and an X server to run. Internally it uses the Xt event loop and makes -use of X toolkits. Its look is quite un-Windowsy, but it works -reliably and supports all of the graphical features of Unix XEmacs. - - The other is what we call the "native" port. It uses the Win32 API -and does not require X libraries to build, nor does it require an X to -run. In fact, it has no connection with X whatsoever. At this time, -the native port obsoletes the X port, providing almost all of its -features, including support for menus, scrollbars, toolbars, embedded -images and background pixmaps, frame pointers, etc. Most of the future -work will be based on the native port. +use of X toolkits. Its look is quite un-Windowsy, and it is not well +maintained, but it is being kept around for the time being because it +has a long history. There is also a third special case, the Cygwin port. It takes advantage of Cygnus emulation library under Win32, which enables it to reuse much of the Unix XEmacs code base, such as processes and network support, or internal select() mechanisms. - Cygwin port supports all display types--TTY, X & MS gui, and can be -built with support for all three. If you build with ms gui support + Cygwin port supports all display types--TTY, X & MS GUI, and can be +built with support for all three. If you build with MS GUI support then the Cygwin version uses the majority of the msw code, which is mostly related to display. If you want to build with X support you -need X libraries. If you want to build with tty support you need -ncurses. MS gui requires no additional libraries. - - Some of the advantages of the Cygwin version are that it: - - * integrates well with Cygwin environment for existing Cygwin users; - - * uses configure so building with different features is very easy; - - * has process support in X & tty. +need X libraries. If you want to build with TTY support you need +ncurses. MS GUI requires no additional libraries. + The advantages of the Cygwin version are that it integrates well with +Cygwin environment for existing Cygwin users; uses configure so building +with different features is very easy; and has process support in X & +tty. The disadvantage is that it requires several Unix utilities and the whole Cygwin environment, whereas the native port requires only a @@ -669,17 +626,17 @@ Q6.1.5: How do I compile for Cygnus' Cygwin? Similar as on Unix; use the usual `configure' and `make' process. Some problems to watch out for: - * make sure HOME is set. This controls where you `.emacs' file comes - from; + * make sure HOME is set. This controls where you `init.el'/`.emacs' + file comes from; * CYGWIN needs to be set to tty for process support work. e.g. CYGWIN=tty; (use CYGWIN32=tty under b19 and older.) - * picking up some other grep or other unix like tools can kill + * picking up some other grep or other UNIX-like tools can kill configure; - * static heap too small, adjust src/sheap-adjust.h to a more positive - number; + * static heap too small, adjust `src/sheap-adjust.h' to a more + positive number; * The Cygwin version doesn't understand `//machine/path' type paths so you will need to manually mount a directory of this form under @@ -780,11 +737,14 @@ manually. For example:  File: xemacs-faq.info, Node: Q6.2.3, Next: Q6.3.1, Prev: Q6.2.2, Up: MS Windows -Q6.2.3: Where do I put my `.emacs' file? ----------------------------------------- +Q6.2.3: Where do I put my `init.el'/`.emacs' file? +-------------------------------------------------- - If the HOME environment variable is set, `.emacs' will be looked for -there. Else the directory defaults to `c:\'. + `init.el' is the name of the init file starting with 21.4, and is +located in the subdirectory `.xemacs/' of your home directory. In +prior versions, the init file is called `.emacs' and is located in your +home directory. Your home directory under Windows is determined by the +HOME environment variable. If this is not set, it defaults to `C:\'.  File: xemacs-faq.info, Node: Q6.3.1, Next: Q6.3.2, Prev: Q6.2.3, Up: MS Windows @@ -810,8 +770,11 @@ are prefixed `mswindows-'. The user-variables shared with NT Emacs will be provided as compatibility aliases. Architectural note: We believe that there should be a very small -number of window-systems-specific variables, and will try to provide -generic interfaces whenever possible. +number of window-systems-specific variables, and we provide generic +interfaces whenever possible. Thus, most of the equivalents of GNU +Emacs `w32-*' functions and variables (as well as the corresponding +`x-*' versions) are non-window-system-specific in XEmacs, and the issue +of `mswindows-*' vs. `w32-*' does not come up much.  File: xemacs-faq.info, Node: Q6.3.2, Next: Q6.3.3, Prev: Q6.3.1, Up: MS Windows @@ -892,7 +855,13 @@ File: xemacs-faq.info, Node: Q6.3.3, Next: Q6.4.1, Prev: Q6.3.2, Up: MS Wind Q6.3.3: What is the porting team doing at the moment? ----------------------------------------------------- + (as of March 2001) + The porting team is continuing work on the MS Windows-specific code. +Major projects are the development of Mule (internationalization) +support for Windows and the improvement of the widget support (better +support for dialog boxes, buttons, edit fields, and similar UI +elements).  File: xemacs-faq.info, Node: Q6.4.1, Prev: Q6.3.3, Up: MS Windows diff --git a/info/xemacs.info b/info/xemacs.info index 459dc9d..0a3a6df 100644 --- a/info/xemacs.info +++ b/info/xemacs.info @@ -44,16 +44,16 @@ xemacs.info-10: 429215 xemacs.info-11: 477039 xemacs.info-12: 526210 xemacs.info-13: 575703 -xemacs.info-14: 620082 -xemacs.info-15: 669514 -xemacs.info-16: 718919 -xemacs.info-17: 768596 -xemacs.info-18: 816849 -xemacs.info-19: 866480 -xemacs.info-20: 891467 -xemacs.info-21: 923121 -xemacs.info-22: 972525 -xemacs.info-23: 1015111 +xemacs.info-14: 620063 +xemacs.info-15: 669495 +xemacs.info-16: 718900 +xemacs.info-17: 768577 +xemacs.info-18: 816830 +xemacs.info-19: 866461 +xemacs.info-20: 891448 +xemacs.info-21: 923102 +xemacs.info-22: 972506 +xemacs.info-23: 1015092  Tag Table: (Indirect) @@ -303,137 +303,137 @@ Node: Lisp Debug587925 Node: Lisp Interaction593352 Node: External Lisp594707 Node: Packages596781 -Node: Package Terminology597700 -Node: Installing Packages599310 -Node: Sumo602230 -Node: Manually603111 -Node: Automatically604481 -Node: Which Packages609044 -Node: Removing Packages609853 -Node: Building Packages610549 -Node: Local.rules File613190 -Node: Creating Packages615044 -Node: Available Packages620082 -Node: Abbrevs626797 -Node: Defining Abbrevs628996 -Node: Expanding Abbrevs631443 -Node: Editing Abbrevs634145 -Node: Saving Abbrevs636018 -Node: Dynamic Abbrevs637973 -Node: Picture639275 -Node: Basic Picture641708 -Node: Insert in Picture643993 -Node: Tabs in Picture645415 -Node: Rectangles in Picture646936 -Node: Sending Mail648844 -Node: Mail Format650555 -Node: Mail Headers651905 -Node: Mail Mode658313 -Node: Reading Mail661926 -Node: Calendar/Diary663501 -Node: Calendar Motion665175 -Node: Calendar Unit Motion666058 -Node: Move to Beginning or End668381 -Node: Specified Dates669514 -Node: Scroll Calendar670402 -Node: Mark and Region672193 -Node: General Calendar674099 -Node: LaTeX Calendar675707 -Node: Holidays677721 -Node: Sunrise/Sunset680823 -Node: Lunar Phases683862 -Node: Other Calendars685247 -Node: Calendar Systems686734 -Node: To Other Calendar689845 -Node: From Other Calendar691836 -Node: Mayan Calendar694141 -Node: Diary697336 -Node: Diary Commands699085 -Node: Format of Diary File702408 -Node: Date Formats705278 -Node: Adding to Diary707852 -Node: Special Diary Entries709483 -Node: Calendar Customization714822 -Node: Calendar Customizing715684 -Node: Holiday Customizing718919 -Node: Date Display Format725406 -Node: Time Display Format726364 -Node: Daylight Savings727502 -Node: Diary Customizing730690 -Node: Hebrew/Islamic Entries735311 -Node: Fancy Diary Display738651 -Node: Included Diary Files740567 -Node: Sexp Diary Entries741548 -Node: Appt Customizing746638 -Node: Sorting747684 -Node: Shell752490 -Node: Single Shell753783 -Node: Interactive Shell755397 -Node: Shell Mode759162 -Node: Terminal emulator761653 -Node: Term Mode763962 -Node: Paging in Term764876 -Node: Narrowing765674 -Node: Hardcopy767624 -Node: Recursive Edit768596 -Node: Dissociated Press771583 -Node: CONX774146 -Node: Amusements775170 -Node: Emulation775650 -Node: Customization777510 -Node: Minor Modes779326 -Node: Variables780958 -Node: Examining782914 -Node: Easy Customization784375 -Node: Customization Groups785389 -Node: Changing an Option788318 -Node: Face Customization794588 -Node: Specific Customization796352 -Node: Edit Options798959 -Node: Locals800543 -Node: File Variables803722 -Node: Keyboard Macros808272 -Node: Basic Kbd Macro810443 -Node: Save Kbd Macro812375 -Node: Kbd Macro Query814033 -Node: Key Bindings815975 -Node: Keymaps816849 -Node: Rebinding820699 -Node: Interactive Rebinding821398 -Node: Programmatic Rebinding823587 -Node: Key Bindings Using Strings826394 -Node: Disabling828021 -Node: Syntax829800 -Node: Syntax Entry830681 -Node: Syntax Change834765 -Node: Init File836934 -Node: Init Syntax838398 -Node: Init Examples840749 -Node: Terminal Init844939 -Node: Audible Bell846676 -Node: Faces850107 -Node: Frame Components854949 -Node: X Resources855394 -Node: Geometry Resources857053 -Node: Iconic Resources859501 -Node: Resource List859973 -Node: Face Resources866480 -Node: Widgets870157 -Node: Menubar Resources871096 -Node: Quitting872610 -Node: Lossage875588 -Node: Stuck Recursive876232 -Node: Screen Garbled876938 -Node: Text Garbled878072 -Node: Unasked-for Search878711 -Node: Emergency Escape879496 -Node: Total Frustration881275 -Node: Bugs881906 -Node: Glossary891467 -Node: Manifesto923121 -Node: Key Index946598 -Node: Command Index972525 -Node: Variable Index1015111 -Node: Concept Index1031197 +Node: Package Terminology597690 +Node: Installing Packages599300 +Node: Sumo602210 +Node: Manually603091 +Node: Automatically604461 +Node: Which Packages609024 +Node: Removing Packages609833 +Node: Building Packages610529 +Node: Local.rules File613169 +Node: Creating Packages615023 +Node: Available Packages620063 +Node: Abbrevs626778 +Node: Defining Abbrevs628977 +Node: Expanding Abbrevs631424 +Node: Editing Abbrevs634126 +Node: Saving Abbrevs635999 +Node: Dynamic Abbrevs637954 +Node: Picture639256 +Node: Basic Picture641689 +Node: Insert in Picture643974 +Node: Tabs in Picture645396 +Node: Rectangles in Picture646917 +Node: Sending Mail648825 +Node: Mail Format650536 +Node: Mail Headers651886 +Node: Mail Mode658294 +Node: Reading Mail661907 +Node: Calendar/Diary663482 +Node: Calendar Motion665156 +Node: Calendar Unit Motion666039 +Node: Move to Beginning or End668362 +Node: Specified Dates669495 +Node: Scroll Calendar670383 +Node: Mark and Region672174 +Node: General Calendar674080 +Node: LaTeX Calendar675688 +Node: Holidays677702 +Node: Sunrise/Sunset680804 +Node: Lunar Phases683843 +Node: Other Calendars685228 +Node: Calendar Systems686715 +Node: To Other Calendar689826 +Node: From Other Calendar691817 +Node: Mayan Calendar694122 +Node: Diary697317 +Node: Diary Commands699066 +Node: Format of Diary File702389 +Node: Date Formats705259 +Node: Adding to Diary707833 +Node: Special Diary Entries709464 +Node: Calendar Customization714803 +Node: Calendar Customizing715665 +Node: Holiday Customizing718900 +Node: Date Display Format725387 +Node: Time Display Format726345 +Node: Daylight Savings727483 +Node: Diary Customizing730671 +Node: Hebrew/Islamic Entries735292 +Node: Fancy Diary Display738632 +Node: Included Diary Files740548 +Node: Sexp Diary Entries741529 +Node: Appt Customizing746619 +Node: Sorting747665 +Node: Shell752471 +Node: Single Shell753764 +Node: Interactive Shell755378 +Node: Shell Mode759143 +Node: Terminal emulator761634 +Node: Term Mode763943 +Node: Paging in Term764857 +Node: Narrowing765655 +Node: Hardcopy767605 +Node: Recursive Edit768577 +Node: Dissociated Press771564 +Node: CONX774127 +Node: Amusements775151 +Node: Emulation775631 +Node: Customization777491 +Node: Minor Modes779307 +Node: Variables780939 +Node: Examining782895 +Node: Easy Customization784356 +Node: Customization Groups785370 +Node: Changing an Option788299 +Node: Face Customization794569 +Node: Specific Customization796333 +Node: Edit Options798940 +Node: Locals800524 +Node: File Variables803703 +Node: Keyboard Macros808253 +Node: Basic Kbd Macro810424 +Node: Save Kbd Macro812356 +Node: Kbd Macro Query814014 +Node: Key Bindings815956 +Node: Keymaps816830 +Node: Rebinding820680 +Node: Interactive Rebinding821379 +Node: Programmatic Rebinding823568 +Node: Key Bindings Using Strings826375 +Node: Disabling828002 +Node: Syntax829781 +Node: Syntax Entry830662 +Node: Syntax Change834746 +Node: Init File836915 +Node: Init Syntax838379 +Node: Init Examples840730 +Node: Terminal Init844920 +Node: Audible Bell846657 +Node: Faces850088 +Node: Frame Components854930 +Node: X Resources855375 +Node: Geometry Resources857034 +Node: Iconic Resources859482 +Node: Resource List859954 +Node: Face Resources866461 +Node: Widgets870138 +Node: Menubar Resources871077 +Node: Quitting872591 +Node: Lossage875569 +Node: Stuck Recursive876213 +Node: Screen Garbled876919 +Node: Text Garbled878053 +Node: Unasked-for Search878692 +Node: Emergency Escape879477 +Node: Total Frustration881256 +Node: Bugs881887 +Node: Glossary891448 +Node: Manifesto923102 +Node: Key Index946579 +Node: Command Index972506 +Node: Variable Index1015092 +Node: Concept Index1031178  End Tag Table diff --git a/info/xemacs.info-13 b/info/xemacs.info-13 index 01dace5..2b1fabc 100644 --- a/info/xemacs.info-13 +++ b/info/xemacs.info-13 @@ -498,7 +498,7 @@ local needs with safe removal of unnecessary code. * Package Terminology:: Understanding different kinds of packages. * Installing Packages:: How to install packages. * Building Packages:: Building packages from CVS sources. -* Local.rules File:: This is an important file don't forget to create/edit it. +* Local.rules File:: This is an important file that you must create. * Creating Packages:: The basics. * Available Packages:: A brief directory of packaged LISP. @@ -582,7 +582,7 @@ you can install packages from a local disk or CDROM. the *Note Available Packages:: at the time of the XEmacs release. Packages are also listed on the `Options' menu under: - Options -> Customize -> Emacs -> Packages + Options->Customize->Emacs->Packages However, don't select any of these menu picks unless you actually want to install the given package (and have properly configured your @@ -592,7 +592,7 @@ system to do so). they are installed, using the visual package browser and installer. You can access it via the menus: - Options -> Manage Packages -> List & Install + Options->Manage Packages->List & Install Or, you can get to it via the keyboard: @@ -876,7 +876,7 @@ Prerequisites for Building Source Packages `GNU cp' -`GNU ginstall' +`GNU install' (or a BSD compatible install program). `GNU make' @@ -1077,7 +1077,7 @@ contain a copyright notice, a few variable definitions, an include for The first few `make' variables defined are `VERSION', `AUTHOR_VERSION', `MAINTAINER', `PACKAGE', `PKG_TYPE', `REQUIRES', and `CATEGORY'. All but one were described in the description of -`package-info.in'. The last is an admistrative grouping. Current +`package-info.in'. The last is an administrative grouping. Current categories include `comm', `games', `libs', `mule', `oa', `os', `prog', and `wp'. *Note Available Packages::, for a list of categories. diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index cf45be8..1924dd1 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,16 @@ +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2000-08-01 Jon Schewe + + * gnuclient.c (filename_expand): Let Cygwin convert Windows path + to Unix. + +2001-03-23 Stephen J. Turnbull + + * gnuserv.h: Document TMPDIR lossage if client/server values differ. + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/lib-src/aixcc.lex b/lib-src/aixcc.lex deleted file mode 100644 index e69de29..0000000 diff --git a/lib-src/gnuclient.c b/lib-src/gnuclient.c index 2b1e5d7..4ed986d 100644 --- a/lib-src/gnuclient.c +++ b/lib-src/gnuclient.c @@ -48,6 +48,10 @@ Boston, MA 02111-1307, USA. * ../etc/gnuserv.README relative to the directory containing this file) */ +#ifdef CYGWIN +extern void cygwin_conv_to_posix_path(const char *path, char *posix_path); +#endif + #include "gnuserv.h" char gnuserv_version[] = "gnuclient version " GNUSERV_VERSION; @@ -189,35 +193,26 @@ filename_expand (char *fullpath, char *filename) /* fullpath - returned full pathname */ /* filename - filename to expand */ { - int len; +#ifdef CYGWIN + char cygwinFilename[MAXPATHLEN+1]; +#endif + int len; fullpath[0] = '\0'; +#ifdef CYGWIN + /* + If we're in cygwin, just convert it and let the unix stuff handle it. + */ + cygwin_conv_to_posix_path(filename, cygwinFilename); + filename = cygwinFilename; +#endif + if (filename[0] && filename[0] == '/') { /* Absolute (unix-style) pathname. Do nothing */ strcat (fullpath, filename); } -#ifdef CYGWIN - else if (filename[0] && filename[0] == '\\' && - filename[1] && filename[1] == '\\') - { - /* This path includes the server name (something like - "\\server\path"), so we assume it's absolute. Do nothing to - it. */ - strcat (fullpath, filename); - } - else if (filename[0] && - filename[1] && filename[1] == ':' && - filename[2] && filename[2] == '\\') - { - /* Absolute pathname with drive letter. Convert ":" - to "///". */ - strcat (fullpath, "//"); - strncat (fullpath, filename, 1); - strcat (fullpath, &filename[2]); - } -#endif else { /* Assume relative Unix style path. Get the current directory diff --git a/lib-src/gnuserv.h b/lib-src/gnuserv.h index 05eed4a..6ee2f0b 100644 --- a/lib-src/gnuserv.h +++ b/lib-src/gnuserv.h @@ -32,6 +32,9 @@ #define GNUSERV_VERSION "3.12" +/* Note: this setting can cause client-server connection failure if the + * value of TMPDIR is not shared by client and server at run-time. + */ #define USE_TMPDIR #define PATCHLEVEL 2 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6590453..d8dc978 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -702,6 +702,105 @@ * files.el (insert-file-contents-literally): Treat file as binary; call file-name-handlers. [sync with Emacs 20.3.10] +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2001-04-02 Jan Vroonhof + + * dialog.el (make-dialog-box): Disable dialog box titles until + we get them working. + +2001-03-30 Ben Wing + + * help.el: + * help.el (Help-princ-face): + * help.el (Help-prin1-face): + * help.el (frob-help-extents): + * help.el (describe-function-1): + * help.el (describe-variable): + Avoid using font-lock faces, which may not be defined. + Instead, use hyper-apropos faces, and make sure they're + defined as necessary by using `require'. (It's not so safe + to do this for font-lock.) In any case, we will eventually + be merging this functionality into hyper-apropos. + + * loaddefs.el (completion-ignored-extensions): + Fix documentation. + + * menubar-items.el (menu-truncate-list): Removed. + * menubar-items.el (Menubar-items-truncate-list): New. + * menubar-items.el (default-menubar): + Fix errors if grep or compile command is too long. Rename helper + function to be less visible. + +2001-03-23 Martin Buchholz + + * byte-optimize.el (byte-optimize-minus): + Fix mis-byte-compilation of (- 0 x) --> (- (- x)) + +2001-03-26 Hrvoje Niksic + + * dumped-lisp.el (preloaded-file-list): Load mule/latin.el when + Mule is available. + + * mule/latin.el: New file. + +2001-03-11 Ben Wing + + * auto-save.el: + * auto-save.el (auto-save-directory): + * auto-save.el (make-auto-save-file-name): + * auto-save.el (auto-save-file-name-p): New. + + Merge in improvements from other definition of + make-auto-save-file-name in files.el. + + * auto-save.el (auto-save-original-name): + * auto-save.el (auto-save-name-in-fixed-directory): + * auto-save.el (auto-save-unslashify-name): Removed. + * auto-save.el (auto-save-slashify-name): Removed. + * auto-save.el (auto-save-reserved-chars): New. + * auto-save.el (auto-save-escape-name): New. + * auto-save.el (auto-save-unhex): New. + * auto-save.el (auto-save-unescape-name): New. + + Change algorithm for encoding filenames in auto-save names to be + entirely safe with all filesystems and all possible characters in + a filename, and 100% reversible. (Essentially, uses + quoted-printable as the encoding.) + + * auto-save.el (recover-all-files): + + Use insert-directory rather than calling ls directly -- fixes + things under Windows. + + * files.el: + * files.el (convert-standard-filename): Substitute FSF's + definition for this (we had nothing here before). + + * files.el (backup-buffer): Warning fix. + + * files.el (make-backup-file-name): + * files.el (find-backup-file-name): + Fix error in calling sequence to auto-save-file-name-p. + + * files.el (recover-file): + Use insert-directory rather than calling ls directly -- fixes + things under Windows. + + * files.el (make-auto-save-file-name): Removed. + * files.el (auto-save-file-name-p): Removed. + auto-save is always dumped so no sense in having a definition + that will always be overwritten with another. + + * files.el (insert-directory): + * win32-native.el: + * win32-native.el (debug-mswindows-process-command-lines): + * win32-native.el (original-make-auto-save-file-name): Removed. + * win32-native.el (make-auto-save-file-name): Removed. + + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/lisp/auto-autoloads.el b/lisp/auto-autoloads.el index 20cfd5f..cd681c4 100644 --- a/lisp/auto-autoloads.el +++ b/lisp/auto-autoloads.el @@ -1258,6 +1258,20 @@ Prefix arg means just kill any existing server communications subprocess." t nil ;;;*** +;;;### (autoloads (gtk-reset-device-font-menus) "gtk-font-menu" "lisp/gtk-font-menu.el") + +(autoload 'gtk-reset-device-font-menus "gtk-font-menu" "\ +Generates the `Font', `Size', and `Weight' submenus for the Options menu. +This is run the first time that a font-menu is needed for each device. +If you don't like the lazy invocation of this function, you can add it to +`create-device-hook' and that will make the font menus respond more quickly +when they are selected for the first time. If you add fonts to your system, +or if you change your font path, you can call this to re-initialize the menus." nil nil) + +(defun* gtk-font-menu-font-data (face dcache) (defvar gtk-font-regexp) (defvar gtk-font-regexp-foundry-and-family) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) (selected-device))) (name (font-instance-name (face-font-instance face domain))) (truename (font-instance-truename (face-font-instance face domain (if (featurep 'mule) 'ascii)))) family size weight entry slant) (when (string-match gtk-font-regexp-foundry-and-family name) (setq family (capitalize (match-string 1 name))) (setq entry (vassoc family (aref dcache 0)))) (when (and (null entry) (string-match gtk-font-regexp-foundry-and-family truename)) (setq family (capitalize (match-string 1 truename))) (setq entry (vassoc family (aref dcache 0)))) (when (null entry) (return-from gtk-font-menu-font-data (make-vector 5 nil))) (when (string-match gtk-font-regexp name) (setq weight (capitalize (match-string 1 name))) (setq size (string-to-int (match-string 6 name)))) (when (string-match gtk-font-regexp truename) (when (not (member weight (aref entry 1))) (setq weight (capitalize (match-string 1 truename)))) (when (not (member size (aref entry 2))) (setq size (string-to-int (match-string 6 truename)))) (setq slant (capitalize (match-string 2 truename)))) (vector entry family size weight slant))) + +;;;*** + ;;;### (autoloads nil "help-macro" "lisp/help-macro.el") (defcustom three-step-help t "*Non-nil means give more info about Help command in three steps.\nThe three steps are simple prompt, prompt with all options,\nand window listing and describing the options.\nA value of nil means skip the middle step, so that\n\\[help-command] \\[help-command] gives the window that lists the options." :type 'boolean :group 'help-appearance) diff --git a/lisp/auto-save.el b/lisp/auto-save.el index f061f67..a54b581 100644 --- a/lisp/auto-save.el +++ b/lisp/auto-save.el @@ -2,6 +2,7 @@ ;; Copyright (C) 1997 Free Software Foundation, Inc. ;; Copyright (C) 1992 by Sebastian Kremer +;; Copyright (C) 2001 Ben Wing. ;; Author: Sebastian Kremer ;; Maintainer: XEmacs Development Team @@ -34,13 +35,10 @@ ;; disk, in case NFS is slow. The auto-save file used for ;; /usr/foo/bar/baz.txt ;; will be -;; AUTOSAVE/#\!usr\!foo\!bar\!baz.txt# +;; AUTOSAVE/#=2Fusr=2Ffoo=2Fbar=2Fbaz.txt#" ;; assuming AUTOSAVE is the non-nil value of the variable ;; `auto-save-directory'. -;; Takes care that autosave files for non-file-buffers (e.g. *mail*) -;; from two simultaneous Emacses don't collide. - ;; Autosaves even if the current directory is not writable. ;; Can limit autosave names to 14 characters using a hash function, @@ -60,7 +58,7 @@ ;; (concat "/tmp/" (user-login-name) "-autosave/")) ;; If you don't want to save in /tmp (e.g., because it is swap -;; mounted) but rather in ~/autosave/ +;; mounted) but rather in ~/.autosave/ ;; (setq auto-save-directory (expand-file-name "~/.autosave/")) ;; If you want to save each file in its own directory (the default) @@ -144,7 +142,7 @@ a file named will have a longish filename like - AUTO-SAVE-DIRECTORY/#\\!home\\!sk\\!lib\\!emacs\\!lisp\\!auto-save.el# + AUTO-SAVE-DIRECTORY/#=2Fhome=2Fsk=2Flib=2Femacs=2Flisp=2Fauto-save.el# as auto save file. @@ -222,12 +220,7 @@ created by you, never nil.") ;;; Computing an autosave name for a file and vice versa -;; #### Now that this file is dumped, we should turn off the routine -;; from files.el. But it would make it harder to remove it! - -(defun make-auto-save-file-name (&optional file-name);; redefines files.el - ;; auto-save-file-name-p need not be redefined. - +(defun make-auto-save-file-name (&optional file-name) "Return file name to use for auto-saves of current buffer. Does not consider `auto-save-visited-file-name'; that is checked before calling this function. @@ -285,8 +278,8 @@ See also function `auto-save-file-name-p'." (save-name (or file-name ;; Prevent autosave errors. Buffername ;; (to become non-dir part of filename) will - ;; be unslashified twice. Don't care. - (auto-save-unslashify-name (buffer-name)))) + ;; be escaped twice. Don't care. + (auto-save-escape-name (buffer-name)))) (remote-p (and (stringp file-name) (fboundp 'efs-ftp-path) (efs-ftp-path file-name)))) @@ -316,12 +309,26 @@ See also function `auto-save-file-name-p'." (error (warn "Error caught in `make-auto-save-file-name':\n%s" (error-message-string error-data)) - (if buffer-file-name - (concat (file-name-directory buffer-file-name) - "#" - (file-name-nondirectory buffer-file-name) - "#") - (expand-file-name (concat "#%" (buffer-name) "#")))))) + (let ((fname + (if file-name + (concat (file-name-directory file-name) + "#" + (file-name-nondirectory file-name) + "#") + (expand-file-name + (concat "#%" (auto-save-escape-name (buffer-name)) + "#"))))) + (if (or (file-writable-p fname) + (file-exists-p fname)) + fname + (expand-file-name (concat "~/" + (file-name-nondirectory fname)))))))) + +(defun auto-save-file-name-p (filename) + "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'. +FILENAME should lack slashes. +You can redefine this for customization." + (string-match "\\`#.*#\\'" filename)) (defun auto-save-original-name (savename) "Reverse of `make-auto-save-file-name'. @@ -342,13 +349,13 @@ Hashed files are not understood, see `auto-save-hash-p'." (equal savedir (expand-file-name auto-save-directory-fallback))) ;; it is of the `-fixed-directory' type - (auto-save-slashify-name (substring basename 1 -1))) + (auto-save-unescape-name (substring basename 1 -1))) (t ;; else it is of `-same-directory' type (concat savedir (substring basename 1 -1)))))) (defun auto-save-name-in-fixed-directory (filename &optional prefix) - ;; Unslashify and enclose the whole FILENAME in `#' to make an auto + ;; Escape and enclose the whole FILENAME in `#' to make an auto ;; save file in the auto-save-directory, or if that is nil, in ;; auto-save-directory-fallback (which must be the name of an ;; existing directory). If the results would be too long for 14 @@ -356,7 +363,7 @@ Hashed files are not understood, see `auto-save-hash-p'." ;; into a shorter name. ;; Optional PREFIX is string to use instead of "#" to prefix name. (let ((base-name (concat (or prefix "#") - (auto-save-unslashify-name filename) + (auto-save-escape-name filename) "#"))) (if (and auto-save-hash-p auto-save-hash-directory @@ -386,34 +393,83 @@ Hashed files are not understood, see `auto-save-hash-p'." (file-name-nondirectory filename) "#"))) -;; #### The following two should probably use `replace-in-string'. - -(defun auto-save-unslashify-name (s) - ;; "Quote any slashes in string S by replacing them with the two - ;;characters `\\!'. - ;;Also, replace any backslash by double backslash, to make it one-to-one." - (let ((limit 0)) - (while (string-match "[/\\]" s limit) - (setq s (concat (substring s 0 (match-beginning 0)) - (if (string= (substring s - (match-beginning 0) - (match-end 0)) - "/") - "\\!" - "\\\\") - (substring s (match-end 0)))) - (setq limit (1+ (match-end 0))))) - s) - -(defun auto-save-slashify-name (s) - ;;"Reverse of `auto-save-unslashify-name'." - (let (pos) - (while (setq pos (string-match "\\\\[\\!]" s pos)) - (setq s (concat (substring s 0 pos) - (if (eq ?! (aref s (1+ pos))) "/" "\\") - (substring s (+ pos 2))) - pos (1+ pos)))) - s) +(defconst auto-save-reserved-chars + '( + ?\0 ?\1 ?\2 ?\3 ?\4 ?\5 ?\6 ?\7 ?\10 ?\11 ?\12 ?\13 ?\14 ?\15 ?\16 + ?\17 ?\20 ?\21 ?\22 ?\23 ?\24 ?\25 ?\26 ?\27 ?\30 ?\31 ?\32 ?\33 + ?\34 ?\35 ?\36 ?\37 ?\40 ?? ?* ?: ?< ?> ?| ?/ ?\\ ?& ?^ ?% ?= ?\") + "List of characters disallowed (or potentially disallowed) in filenames. +Includes everything that can get us into trouble under MS Windows or Unix.") + +;; This code based on code in Bill Perry's url.el. + +(defun auto-save-escape-name (str) + "Escape any evil nasty characters in a potential filename. +Uses quoted-printable-style escaping -- e.g. the dreaded =3D. +Does not use URL escaping (with %) because filenames beginning with #% are +a special signal for non-file buffers." + (mapconcat + (function + (lambda (char) + (if (memq char auto-save-reserved-chars) + (if (< char 16) + (upcase (format "=0%x" char)) + (upcase (format "=%x" char))) + (char-to-string char)))) + str "")) + +(defun auto-save-unhex (x) + (if (> x ?9) + (if (>= x ?a) + (+ 10 (- x ?a)) + (+ 10 (- x ?A))) + (- x ?0))) + +(defun auto-save-unescape-name (str) + "Undo any escaping of evil nasty characters in a file name. +See `auto-save-escape-name'." + (setq str (or str "")) + (let ((tmp "") + (case-fold-search t)) + (while (string-match "=[0-9a-f][0-9a-f]" str) + (let* ((start (match-beginning 0)) + (ch1 (auto-save-unhex (elt str (+ start 1)))) + (code (+ (* 16 ch1) + (auto-save-unhex (elt str (+ start 2)))))) + (setq tmp (concat tmp (substring str 0 start) + (char-to-string code)) + str (substring str (match-end 0))))) + (setq tmp (concat tmp str)) + tmp)) + +;; The old versions are below. + +;(defun auto-save-escape-name (s) +; ;; "Quote any slashes in string S by replacing them with the two +; ;;characters `\\!'. +; ;;Also, replace any backslash by double backslash, to make it one-to-one." +; (let ((limit 0)) +; (while (string-match "[/\\]" s limit) +; (setq s (concat (substring s 0 (match-beginning 0)) +; (if (string= (substring s +; (match-beginning 0) +; (match-end 0)) +; "/") +; "\\!" +; "\\\\") +; (substring s (match-end 0)))) +; (setq limit (1+ (match-end 0))))) +; s) + +;(defun auto-save-unescape-name (s) +; ;;"Reverse of `auto-save-escape-name'." +; (let (pos) +; (while (setq pos (string-match "\\\\[\\!]" s pos)) +; (setq s (concat (substring s 0 pos) +; (if (eq ?! (aref s (1+ pos))) "/" "\\") +; (substring s (+ pos 2))) +; pos (1+ pos)))) +; s) ;;; Hashing for autosave names @@ -454,7 +510,7 @@ Hashed files are not understood, see `auto-save-hash-p'." ;; This leaves two characters that could be used to wrap it in `#' or ;; make two filenames from it: one for autosaving, and another for a -;; file containing the name of the autosaved filed, to make hashing +;; file containing the name of the autosaved file, to make hashing ;; reversible. ;(defun auto-save-cyclic-hash-12 (s) ; "Outputs the 12-characters ascii hex representation of a 6-bytes @@ -518,8 +574,14 @@ Hashed files (see `auto-save-hash-p') are not understood, use (t (incf total) (with-output-to-temp-buffer "*Directory*" - (apply 'call-process "ls" nil standard-output nil - "-l" afile (if file (list file)))) + (buffer-disable-undo standard-output) + (save-excursion + (set-buffer "*Directory*") + (setq default-directory (file-name-directory afile)) + (insert-directory afile "-l") + (when file + (setq default-directory (file-name-directory file)) + (insert-directory file "-l")))) (if (yes-or-no-p (format "Recover %s from auto save file? " (or file "non-file buffer"))) (let* ((obuf (current-buffer))) diff --git a/lisp/build-report.el b/lisp/build-report.el index c7e126d..51c8cc4 100644 --- a/lisp/build-report.el +++ b/lisp/build-report.el @@ -4,7 +4,7 @@ ;; Author: Adrian Aichner ;; Date: Sun., Apr. 20, 1997-2000. -;; Version: $Revision: 1.5.2.9 $ +;; Version: $Revision: 1.8 $ ;; Keywords: internal ;; This file is part of XEmacs. diff --git a/lisp/byte-optimize.el b/lisp/byte-optimize.el index f591e82..dad9de8 100644 --- a/lisp/byte-optimize.el +++ b/lisp/byte-optimize.el @@ -729,9 +729,15 @@ (decf (nth 1 form) last) (butlast form)) - ;; (- 0 x ...) --> (- (- x) ...) - ((and (eq 0 (nth 1 form)) (>= (length form) 3)) - `(- (- ,(nth 2 form)) ,@(nthcdr 3 form))) + ;; (- 0 ...) --> + ((eq 0 (nth 1 form)) + (case (length form) + ;; (- 0) --> 0 + (2 0) + ;; (- 0 x) --> (- x) + (3 `(- ,(nth 2 form))) + ;; (- 0 x y ...) --> (- (- x) y ...) + (t `(- (- ,(nth 2 form)) ,@(nthcdr 3 form))))) (t (byte-optimize-predicate form))))) diff --git a/lisp/custom-load.el b/lisp/custom-load.el index ec81952..4c635f6 100644 --- a/lisp/custom-load.el +++ b/lisp/custom-load.el @@ -86,7 +86,7 @@ (custom-add-loads 'matching '("simple" "isearch-mode" "hyper-apropos")) (custom-add-loads 'i18n '("cus-edit")) (custom-add-loads 'info '("toolbar-items" "info")) -(custom-add-loads 'x '("x-faces")) +(custom-add-loads 'x '("gtk-faces" "x-faces")) (custom-add-loads 'buffers-tab '("gutter-items")) ;;; custom-load.el ends here diff --git a/lisp/dialog.el b/lisp/dialog.el index 03a9931..b142d15 100644 --- a/lisp/dialog.el +++ b/lisp/dialog.el @@ -642,7 +642,9 @@ The keywords allowed are (set-buffer-dedicated-frame newbuf frame) (set-frame-property frame 'dialog-box-buffer newbuf) (with-current-buffer newbuf - (setq frame-title-format cl-title) + ;; Should be frame specific, so + ;; we don't do this for now. + ;; (setq frame-title-format cl-title) (make-local-hook 'delete-frame-hook) (add-hook 'delete-frame-hook #'(lambda (frame) diff --git a/lisp/dumped-lisp.el b/lisp/dumped-lisp.el index 8ed7867..36d7942 100644 --- a/lisp/dumped-lisp.el +++ b/lisp/dumped-lisp.el @@ -160,6 +160,7 @@ (when-feature mule "hebrew") (when-feature mule "japanese") (when-feature mule "korean") + (when-feature mule "latin") (when-feature mule "misc-lang") (when-feature mule "thai-xtis-chars") (when-feature mule "mule/thai-xtis") ; overloaded in leim/quail diff --git a/lisp/files.el b/lisp/files.el index 2b713c8..b86b929 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -371,11 +371,22 @@ and ignores this variable." ; (apply op args)) (defun convert-standard-filename (filename) - "Convert a standard file's name to something suitable for the current OS. -This function's standard definition is trivial; it just returns the argument. -However, on some systems, the function is redefined -with a definition that really does change some file names." - filename) + "Convert a standard file's name to something suitable for the current OS." + (if (eq system-type 'windows-nt) + (let ((name (copy-sequence filename)) + (start 0)) + ;; leave ':' if part of drive specifier + (if (eq (aref name 1) ?:) + (setq start 2)) + ;; destructively replace invalid filename characters with ! + (while (string-match "[?*:<>|\"\000-\037]" name start) + (aset name (match-beginning 0) ?!) + (setq start (match-end 0))) + ;; FSF: [convert directory separators to Windows format ...] + ;; unneeded in XEmacs. + name) + filename)) + (defun pwd () "Show the current default directory." @@ -1929,7 +1940,9 @@ of the new file to agree with the old modes." (setq setmodes (file-modes backupname))) (file-error ;; If trouble writing the backup, write it in ~. - (setq backupname (expand-file-name "~/%backup%~")) + (setq backupname + (expand-file-name + (convert-standard-filename "~/%backup%~"))) (message "Cannot write backup file; backing up in ~/%%backup%%~") (sleep-for 1) (condition-case () @@ -2015,6 +2028,7 @@ the value is \"\"." (defun make-backup-file-name (file) "Create the non-numeric backup file name for FILE. This is a separate function so you can redefine it for customization." + ;; FSF has code here for MS-DOS short filenames, not supported in XEmacs. (concat file "~")) (defun backup-file-name-p (file) @@ -2042,6 +2056,7 @@ the index in the name where the version number begins." Value is a list whose car is the name for the backup file and whose cdr is a list of old versions to consider deleting now. If the value is nil, don't make a backup." + (declare (special bv-length)) (let ((handler (find-file-name-handler fn 'find-backup-file-name))) ;; Run a handler for this function so that ange-ftp can refuse to do it. (if handler @@ -2763,7 +2778,7 @@ non-nil, it is called instead of rereading visited file contents." 'recover-file)))) (if handler (funcall handler 'recover-file file) - (if (auto-save-file-name-p file) + (if (auto-save-file-name-p (file-name-nondirectory file)) (error "%s is an auto-save file" file)) (let ((file-name (let ((buffer-file-name file)) (make-auto-save-file-name)))) @@ -2772,12 +2787,17 @@ non-nil, it is called instead of rereading visited file contents." (not (file-exists-p file-name))) (error "Auto-save file %s not current" file-name)) ((save-window-excursion - (if (not (eq system-type 'windows-nt)) - (with-output-to-temp-buffer "*Directory*" - (buffer-disable-undo standard-output) - (call-process "ls" nil standard-output nil - (if (file-symlink-p file) "-lL" "-l") - file file-name))) + ;; XEmacs change: use insert-directory instead of + ;; calling ls directly. + (with-output-to-temp-buffer "*Directory*" + (buffer-disable-undo standard-output) + (save-excursion + (set-buffer "*Directory*") + (setq default-directory (file-name-directory file)) + (insert-directory file + (if (file-symlink-p file) "-lL" "-l")) + (setq default-directory (file-name-directory file-name)) + (insert-directory file-name "-l"))) (yes-or-no-p (format "Recover auto save file %s? " file-name))) (switch-to-buffer (find-file-noselect file t)) (let ((buffer-read-only nil)) @@ -2943,72 +2963,9 @@ Also rename any existing auto save file, if it was made in this session." (recent-auto-save-p)) (rename-file osave buffer-auto-save-file-name t)))) -;; see also ../packages/auto-save.el -(defun make-auto-save-file-name (&optional filename) - "Return file name to use for auto-saves of current buffer. -Does not consider `auto-save-visited-file-name' as that variable is checked -before calling this function. You can redefine this for customization. -See also `auto-save-file-name-p'." - (let ((fname (or filename buffer-file-name)) - name) - (setq name - (if fname - (concat (file-name-directory fname) - "#" - (file-name-nondirectory fname) - "#") - - ;; Deal with buffers that don't have any associated files. (Mail - ;; mode tends to create a good number of these.) - - (let ((buffer-name (buffer-name)) - (limit 0)) - ;; Use technique from Sebastian Kremer's auto-save - ;; package to turn slashes into \\!. This ensures that - ;; the auto-save buffer name is unique. - - ;; #### - yuck! yuck! yuck! move this functionality - ;; somewhere else and make the name translation customizable. - ;; Using "\!" as part of a filename on a UNIX filesystem is nearly - ;; IMPOSSIBLE to get past a shell parser. -stig - - (while (string-match "[/\\]" buffer-name limit) - (setq buffer-name - (concat (substring buffer-name 0 (match-beginning 0)) - (if (string= (substring buffer-name - (match-beginning 0) - (match-end 0)) - "/") - "\\!" - "\\\\") - (substring buffer-name (match-end 0)))) - (setq limit (1+ (match-end 0)))) - - ;; (expand-file-name (format "#%s#%s#" (buffer-name) (make-temp-name ""))) - - ;; jwz: putting the emacs PID in the auto-save file name - ;; is bad news, because that defeats auto-save-recovery of - ;; *mail* buffers -- the (sensible) code in sendmail.el - ;; calls (make-auto-save-file-name) to determine whether - ;; there is unsent, auto-saved mail to recover. If that - ;; mail came from a previous emacs process (far and away - ;; the most likely case) then this can never succeed as - ;; the pid differs. - - (expand-file-name (format "#%s#" buffer-name))) - )) - ;; don't try to write auto-save files in unwritable places. Unless - ;; there's already an autosave file here, put ours somewhere safe. --Stig - (if (or (file-writable-p name) - (file-exists-p name)) - name - (expand-file-name (concat "~/" (file-name-nondirectory name)))))) - -(defun auto-save-file-name-p (filename) - "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'. -FILENAME should lack slashes. -You can redefine this for customization." - (string-match "\\`#.*#\\'" filename)) +;; make-auto-save-file-name and auto-save-file-name-p are now only in +;; auto-save.el. + (defun wildcard-to-regexp (wildcard) "Given a shell file name pattern WILDCARD, return an equivalent regexp. @@ -3152,8 +3109,9 @@ If WILDCARD, it also runs the shell specified by `shell-file-name'." (funcall handler 'insert-directory file switches wildcard full-directory-p) (cond - ;; #### mswindows-insert-directory should be called - ;; nt-insert-directory - kkm. + ;; [mswindows-insert-directory should be called + ;; nt-insert-directory - kkm]. not true any more according to + ;; my new naming scheme. --ben ((and (fboundp 'mswindows-insert-directory) (eq system-type 'windows-nt)) (mswindows-insert-directory file switches wildcard full-directory-p)) diff --git a/lisp/help.el b/lisp/help.el index e7e769f..a764234 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1075,60 +1075,38 @@ part of the documentation of internal subroutines." (string-match "[\n\t ]*\narguments: ?(\\(.*\\))\n?\\'" doc)) (setq doc (substring doc 0 (match-beginning 0)))) doc)) -; (let ((name-char "[-+a-zA-Z0-9_*]") (sym-char "[-+a-zA-Z0-9_:*]")) -; (list -; ;; -; ;; The symbol itself. -; (list (concat "\\`\\(" name-char "+\\)\\(:\\)?") -; '(1 (if (match-beginning 2) -; 'font-lock-function-name-face -; 'font-lock-variable-name-face) -; nil t)) -; ;; -; ;; Words inside `' which tend to be symbol names. -; (list (concat "`\\(" sym-char sym-char "+\\)'") -; 1 '(prog1 -; 'font-lock-reference-face -; (add-list-mode-item (match-beginning 1) -; (match-end 1) -; nil -; 'help-follow-reference)) -; t) -; ;; -; ;; CLisp `:' keywords as references. -; (list (concat "\\<:" sym-char "+\\>") 0 'font-lock-reference-face t))) ;; replacement for `princ' that puts the text in the specified face, ;; if possible (defun Help-princ-face (object face) (cond ((bufferp standard-output) - (let ((opoint (point standard-output))) - (princ object) - (put-nonduplicable-text-property opoint (point standard-output) - 'face face standard-output))) - ((markerp standard-output) - (let ((buf (marker-buffer standard-output)) - (pos (marker-position standard-output))) - (princ object) - (put-nonduplicable-text-property - pos (marker-position standard-output) 'face face buf))) - (t princ object))) + (let ((opoint (point standard-output))) + (princ object) + (put-nonduplicable-text-property opoint (point standard-output) + 'face face standard-output))) + ((markerp standard-output) + (let ((buf (marker-buffer standard-output)) + (pos (marker-position standard-output))) + (princ object) + (put-nonduplicable-text-property + pos (marker-position standard-output) 'face face buf))) + (t princ object))) ;; replacement for `prin1' that puts the text in the specified face, ;; if possible (defun Help-prin1-face (object face) (cond ((bufferp standard-output) - (let ((opoint (point standard-output))) - (prin1 object) - (put-nonduplicable-text-property opoint (point standard-output) - 'face face standard-output))) - ((markerp standard-output) - (let ((buf (marker-buffer standard-output)) - (pos (marker-position standard-output))) - (prin1 object) - (put-nonduplicable-text-property - pos (marker-position standard-output) 'face face buf))) - (t prin1 object))) + (let ((opoint (point standard-output))) + (prin1 object) + (put-nonduplicable-text-property opoint (point standard-output) + 'face face standard-output))) + ((markerp standard-output) + (let ((buf (marker-buffer standard-output)) + (pos (marker-position standard-output))) + (prin1 object) + (put-nonduplicable-text-property + pos (marker-position standard-output) 'face face buf))) + (t prin1 object))) (defvar help-symbol-regexp (let ((sym-char "[+a-zA-Z0-9_:*]") @@ -1185,7 +1163,7 @@ part of the documentation of internal subroutines." ;; properties: ;; 1. mouse-face is 'highlight (so the extent gets highlighted on mouse over) ;; 2. help-symbol is the name of the symbol. - ;; 3. face is 'font-lock-reference-face. + ;; 3. face is 'hyper-apropos-hyperlink. ;; 4. context-menu is a list of context menu items, specific to whether ;; the symbol is a function, variable, or both. ;; 5. activate-function will cause the function or variable to be described, @@ -1207,7 +1185,7 @@ part of the documentation of internal subroutines." (let ((ex (make-extent b e))) (set-extent-property ex 'mouse-face 'highlight) (set-extent-property ex 'help-symbol sym) - (set-extent-property ex 'face 'font-lock-reference-face) + (set-extent-property ex 'face 'hyper-apropos-hyperlink) (set-extent-property ex 'context-menu (cond ((and var fun) @@ -1292,7 +1270,8 @@ part of the documentation of internal subroutines." (if describe-function-show-arglist (let ((arglist (function-arglist function))) (when arglist - (Help-princ-face arglist 'font-lock-comment-face) + (require 'hyper-apropos) + (Help-princ-face arglist 'hyper-apropos-documentation) (terpri)))) (terpri) (cond (kbd-macro-p @@ -1434,7 +1413,7 @@ there is no variable around that point, nil is returned." (let ((print-escape-newlines t)) (princ "`") ;; (Help-princ-face (symbol-name variable) - ;; 'font-lock-variable-name-face) overkill + ;; 'font-lock-variable-name-face) overkill (princ (symbol-name variable)) (princ "' is ") (while (variable-alias variable) @@ -1457,9 +1436,11 @@ there is no variable around that point, nil is returned." (if file-name (princ (format " -- loaded from \"%s\"\n" file-name)))) (princ "\nValue: ") - (if (not (boundp variable)) - (Help-princ-face "void\n" 'font-lock-comment-face) - (Help-prin1-face (symbol-value variable) 'font-lock-comment-face) + (require 'hyper-apropos) + (if (not (boundp variable)) + (Help-princ-face "void\n" 'hyper-apropos-documentation) + (Help-prin1-face (symbol-value variable) + 'hyper-apropos-documentation) (terpri)) (terpri) (cond ((local-variable-p variable (current-buffer)) diff --git a/lisp/ldap.el b/lisp/ldap.el index 8ddc567..31f082f 100644 --- a/lisp/ldap.el +++ b/lisp/ldap.el @@ -5,7 +5,7 @@ ;; Author: Oscar Figueiredo ;; Maintainer: Oscar Figueiredo ;; Created: Jan 1998 -;; Version: $Revision: 1.7.2.11 $ +;; Version: $Revision: 1.10 $ ;; Keywords: help comm ;; This file is part of XEmacs diff --git a/lisp/loaddefs.el b/lisp/loaddefs.el index 6ec4914..fa59466 100644 --- a/lisp/loaddefs.el +++ b/lisp/loaddefs.el @@ -85,14 +85,15 @@ ;; are ignored in completion, ;; making it more likely you will get a unique match. (setq completion-ignored-extensions - ;; this is way way way bogus. - ;; completely wtf? - ;; the only things that should be here are those that are - ;; (a) universally recognizable, and - ;; (b) obvious backup files, or - ;; (c) obvious binary files that are generated on a - ;; PER-SOURCE-FILE basis, so that they will actually - ;; cause annoyance. This includes .exe files, e.g. + ;; this is way way way bogus. + ;; completely wtf? + ;; the only things that should be here are those that are + ;; (a) universally recognizable, and + ;; (b) obvious backup files, or + ;; (c) obvious binary files that are generated on a + ;; PER-SOURCE-FILE basis, so that they will actually + ;; cause annoyance. This excludes executables (.exe, .com) + ;; and libraries (.a, .lib, .dll). ; '(".o" ".elc" "~" ".bin" ".lbin" ".fasl" ; ".dvi" ".toc" ;".log" ; ".aux" ".a" ".ln" @@ -100,7 +101,7 @@ ; ".diff" ".oi" ".class"))) '(".o" ".obj" ".elc" "~" ".bin" ".lbin" ;; #### these are doubtful, esp. the latter. - ".dvi";; possibly doubtful, too. + ".dvi" ;; possibly doubtful, too. ".class")) diff --git a/lisp/menubar-items.el b/lisp/menubar-items.el index 54a82e8..7dab08c 100644 --- a/lisp/menubar-items.el +++ b/lisp/menubar-items.el @@ -54,10 +54,12 @@ ;;; Code: -(defun menu-truncate-list (list n) - (if (<= (length list) n) - list - (butlast list (- (length list) n)))) +(defun Menubar-items-truncate-list (list n) + (mapcar #'(lambda (x) + (if (<= (length x) 50) x (concat "..." (substring x -50)))) + (if (<= (length list) n) + list + (butlast list (- (length list) n))))) (defun submenu-generate-accelerator-spec (list &optional omit-chars-list) "Add auto-generated accelerator specifications to a submenu. @@ -432,7 +434,7 @@ which will not be used as accelerators." (mapcar #'(lambda (string) (vector string (list 'grep string))) - (menu-truncate-list grep-history 10))))) + (Menubar-items-truncate-list grep-history 10))))) (append menu '("---") items)))) ["%_Grep..." grep :active (fboundp 'grep)] ["%_Kill Grep" kill-compilation @@ -540,7 +542,7 @@ which will not be used as accelerators." (mapcar #'(lambda (string) (vector string (list 'compile string))) - (menu-truncate-list compile-history 10))))) + (Menubar-items-truncate-list compile-history 10))))) (append menu '("---") items)))) ["%_Compile..." compile :active (fboundp 'compile)] ["%_Repeat Compilation" recompile :active (fboundp 'recompile)] diff --git a/lisp/win32-native.el b/lisp/win32-native.el index 8f9d8ac..d30d8a5 100644 --- a/lisp/win32-native.el +++ b/lisp/win32-native.el @@ -62,32 +62,6 @@ '(("^\\(\\([a-zA-Z]:\\)?[^:( \t\n]+\\)[:( \t]+\\([0-9]+\\)[:) \t]" 1 3))) ;;---------------------------------------------------------------------- -;; Autosave hack -;;-------------------- - -;; Avoid creating auto-save file names containing invalid characters -;; (primarily "*", eg. for the *mail* buffer). -;; Avoid "doc lost for function" warning -(defun original-make-auto-save-file-name (&optional junk) - "You do not want to call this." - ) -(fset 'original-make-auto-save-file-name - (symbol-function 'make-auto-save-file-name)) - -(defun make-auto-save-file-name () - "Return file name to use for auto-saves of current buffer. -Does not consider `auto-save-visited-file-name' as that variable is checked -before calling this function. You can redefine this for customization. -See also `auto-save-file-name-p'." - (let ((name (original-make-auto-save-file-name)) - (start 0)) - ;; destructively replace occurrences of * or ? with $ - (while (string-match "[?*]" name start) - (aset name (match-beginning 0) ?$) - (setq start (1+ (match-end 0)))) - name)) - -;;---------------------------------------------------------------------- ;; Quoting process args ;;-------------------- diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index 73a67bd..6082627 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,7 +1,57 @@ +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2001-03-30 Stephen J. Turnbull + + * ChangeLog: Restore logs lost in the GTK merge. + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. +2001-03-15 Stephen J. Turnbull + + * xlwradio.c: Revert gratuitous whitespace changes from GTK merge. + +2001-02-23 Martin Buchholz + + * XEmacs 21.2.45 "Thelxepeia" is released. + +2001-02-16 Raymond Toy + + * lwlib-Xaw.c: Always include ATHENA_AsciiText_h_ to get the + text-field widget. + (xaw_creation_table): Always include the text-field widget + +2001-02-08 Martin Buchholz + + * XEmacs 21.2.44 "Thalia" is released. + +2001-02-06 Martin Buchholz + + * xlwgauge.c: + * xlwgcs.c: + * xlwgcs.c (XtAllocateGC): Fix typo for X11R4. + * xlwgcs.h: + * xlwradio.c (RadioExpose): + * xlwcheckbox.c: + Remove use of BSD-specific types. + s/u_(char|short|int_long)/unsigned $1/g + +2001-02-05 Martin Buchholz + + * lwlib-Xm.c (xm_update_one_value): + Obey the man page; use XtFree instead of free. + +2001-02-02 Martin Buchholz + + * config.h.in: Use "..." to include config.h + +2001-01-26 Martin Buchholz + + * XEmacs 21.2.43 "Terspichore" is released. + 2001-01-20 Martin Buchholz * XEmacs 21.2.42 "Poseidon" is released. diff --git a/man/ChangeLog b/man/ChangeLog index 74239eb..fc2f422 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,22 @@ +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2001-03-30 Ben Wing + + * internals\internals.texi: + * internals\internals.texi (Top): + * internals\internals.texi (Lucid Emacs): + * internals\internals.texi (XEmacs): + * internals\internals.texi (XEmacs From the Outside): + Bump version to 1.4 and fix this everywhere. Document all + XEmacs releases up through 21.2.46. + +2001-03-16 Stephen J. Turnbull + + * lispref/postgresql.texi (libpq Lisp Symbols and DataTypes): Save + result of INSERT in R in pq-cmd-status example. + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/man/info.texi b/man/info.texi index 8df0772..e4e05f9 100644 --- a/man/info.texi +++ b/man/info.texi @@ -3,7 +3,7 @@ @setfilename ../info/info.info @settitle Info @comment %**end of header -@comment $Id: info.texi,v 1.4.2.6 2000/11/29 08:27:28 stephent Exp $ +@comment $Id: info.texi,v 1.8 2001/04/12 18:22:00 michaels Exp $ @dircategory Texinfo documentation system @direntry diff --git a/man/internals/internals.texi b/man/internals/internals.texi index f82c7ee..0c2a707 100644 --- a/man/internals/internals.texi +++ b/man/internals/internals.texi @@ -63,7 +63,7 @@ instead of in the original English. @titlepage @title XEmacs Internals Manual -@subtitle Version 1.3, August 1999 +@subtitle Version 1.4, March 2001 @author Ben Wing @author Martin Buchholz @@ -74,14 +74,14 @@ instead of in the original English. @vskip 0pt plus 1fill @noindent -Copyright @copyright{} 1992 - 1996 Ben Wing. @* +Copyright @copyright{} 1992 - 1996, 2001 Ben Wing. @* Copyright @copyright{} 1996, 1997 Sun Microsystems, Inc. @* Copyright @copyright{} 1994 - 1998 Free Software Foundation. @* Copyright @copyright{} 1994, 1995 Board of Trustees, University of Illinois. @sp 2 -Version 1.3 @* -August 1999.@* +Version 1.4 @* +March 2001.@* Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -105,7 +105,7 @@ instead of in the original English. @node Top, A History of Emacs, (dir), (dir) @ifinfo -This Info file contains v1.3 of the XEmacs Internals Manual, August 1999. +This Info file contains v1.4 of the XEmacs Internals Manual, March 2001. @end ifinfo @menu @@ -497,7 +497,7 @@ release their own version of Emacs, which became Lucid Emacs 19.0. and Eric Benson, and the work was later taken over by Jamie Zawinski, who became ``Mr. Lucid Emacs'' for many releases. - A time line for Lucid Emacs/XEmacs is + A time line for Lucid Emacs is @itemize @bullet @item @@ -545,7 +545,39 @@ version 19.16 released October 31, 1997. @item version 20.3 (the first stable version of XEmacs 20.x) released November 30, 1997. +@item version 20.4 released February 28, 1998. +@item +version 21.1.2 released May 14, 1999. (The version naming scheme was +changed at this point: [a] the second version number is odd for stable +versions, even for beta versions; [b] a third version number is added, +replacing the "beta xxx" ending for beta versions and allowing for +periodic maintenance releases for stable versions. Therefore, 21.0 was +never "officially" released; similarly for 21.2, etc.) +@item +version 21.1.3 released June 26, 1999. +@item +version 21.1.4 released July 8, 1999. +@item +version 21.1.6 released August 14, 1999. (There was no 21.1.5.) +@item +version 21.1.7 released September 26, 1999. +@item +version 21.1.8 released November 2, 1999. +@item +version 21.1.9 released February 13, 2000. +@item +version 21.1.10 released May 7, 2000. +@item +version 21.1.10a released June 24, 2000. +@item +version 21.1.11 released July 18, 2000. +@item +version 21.1.12 released August 5, 2000. +@item +version 21.1.13 released January 7, 2001. +@item +version 21.1.14 released January 27, 2001. @end itemize @node GNU Emacs 19 @@ -724,6 +756,157 @@ have consistently failed. A more detailed history is contained in the XEmacs About page. + A time line for XEmacs is + +@itemize @bullet +@item +version 19.11 (first XEmacs) released September 13, 1994. +@item +version 19.12 released June 23, 1995. +@item +version 19.13 released September 1, 1995. +@item +version 19.14 released June 23, 1996. +@item +version 20.0 released February 9, 1997. +@item +version 19.15 released March 28, 1997. +@item +version 20.1 (not released to the net) April 15, 1997. +@item +version 20.2 released May 16, 1997. +@item +version 19.16 released October 31, 1997. +@item +version 20.3 (the first stable version of XEmacs 20.x) released November 30, +1997. +@item +version 20.4 released February 28, 1998. +@item +version 21.0.60 released December 10, 1998. (The version naming scheme was +changed at this point: [a] the second version number is odd for stable +versions, even for beta versions; [b] a third version number is added, +replacing the "beta xxx" ending for beta versions and allowing for +periodic maintenance releases for stable versions. Therefore, 21.0 was +never "officially" released; similarly for 21.2, etc.) +@item +version 21.0.61 released January 4, 1999. +@item +version 21.0.63 released February 3, 1999. +@item +version 21.0.64 released March 1, 1999. +@item +version 21.0.65 released March 5, 1999. +@item +version 21.0.66 released March 12, 1999. +@item +version 21.0.67 released March 25, 1999. +@item +version 21.1.2 released May 14, 1999. (This is the followup to 21.0.67. +The second version number was bumped to indicate the beginning of the +"stable" series.) +@item +version 21.1.3 released June 26, 1999. +@item +version 21.1.4 released July 8, 1999. +@item +version 21.1.6 released August 14, 1999. (There was no 21.1.5.) +@item +version 21.1.7 released September 26, 1999. +@item +version 21.1.8 released November 2, 1999. +@item +version 21.1.9 released February 13, 2000. +@item +version 21.1.10 released May 7, 2000. +@item +version 21.1.10a released June 24, 2000. +@item +version 21.1.11 released July 18, 2000. +@item +version 21.1.12 released August 5, 2000. +@item +version 21.1.13 released January 7, 2001. +@item +version 21.1.14 released January 27, 2001. +@item +version 21.2.9 released February 3, 1999. +@item +version 21.2.10 released February 5, 1999. +@item +version 21.2.11 released March 1, 1999. +@item +version 21.2.12 released March 5, 1999. +@item +version 21.2.13 released March 12, 1999. +@item +version 21.2.14 released May 14, 1999. +@item +version 21.2.15 released June 4, 1999. +@item +version 21.2.16 released June 11, 1999. +@item +version 21.2.17 released June 22, 1999. +@item +version 21.2.18 released July 14, 1999. +@item +version 21.2.19 released July 30, 1999. +@item +version 21.2.20 released November 10, 1999. +@item +version 21.2.21 released November 28, 1999. +@item +version 21.2.22 released November 29, 1999. +@item +version 21.2.23 released December 7, 1999. +@item +version 21.2.24 released December 14, 1999. +@item +version 21.2.25 released December 24, 1999. +@item +version 21.2.26 released December 31, 1999. +@item +version 21.2.27 released January 18, 2000. +@item +version 21.2.28 released February 7, 2000. +@item +version 21.2.29 released February 16, 2000. +@item +version 21.2.30 released February 21, 2000. +@item +version 21.2.31 released February 23, 2000. +@item +version 21.2.32 released March 20, 2000. +@item +version 21.2.33 released May 1, 2000. +@item +version 21.2.34 released May 28, 2000. +@item +version 21.2.35 released July 19, 2000. +@item +version 21.2.36 released October 4, 2000. +@item +version 21.2.37 released November 14, 2000. +@item +version 21.2.38 released December 5, 2000. +@item +version 21.2.39 released December 31, 2000. +@item +version 21.2.40 released January 8, 2001. +@item +version 21.2.41 released January 17, 2001. +@item +version 21.2.42 released January 20, 2001. +@item +version 21.2.43 released January 26, 2001. +@item +version 21.2.44 released February 8, 2001. +@item +version 21.2.45 released February 23, 2001. +@item +version 21.2.46 released March 21, 2001. +@end itemize + @node XEmacs From the Outside, The Lisp Language, A History of Emacs, Top @chapter XEmacs From the Outside @cindex XEmacs from the outside diff --git a/man/lispref/postgresql.texi b/man/lispref/postgresql.texi index d22ab29..3a6dbc4 100644 --- a/man/lispref/postgresql.texi +++ b/man/lispref/postgresql.texi @@ -521,8 +521,8 @@ Return a summary string from the query. @var{result} is a PGresult object. @example @comment This example was written on day 3 of the 2000 Haru Basho. -(pq-exec P "INSERT INTO xemacs_test - VALUES (6, 'Wakanohana', 'Yokozuna');") +(setq R (pq-exec P "INSERT INTO xemacs_test + VALUES (6, 'Wakanohana', 'Yokozuna');")) @result{} # (pq-cmd-status R) @result{} "INSERT 542086 1" diff --git a/man/texinfo.texi b/man/texinfo.texi index d683f64..b9e80cb 100644 --- a/man/texinfo.texi +++ b/man/texinfo.texi @@ -1,5 +1,5 @@ \input texinfo.tex @c -*-texinfo-*- -@c $Id: texinfo.texi,v 1.8.2.7 2001/01/09 20:52:53 adrian Exp $ +@c $Id: texinfo.texi,v 1.14 2001/04/12 18:22:02 michaels Exp $ @c %**start of header @c All text is ignored before the setfilename. diff --git a/man/xemacs-faq.texi b/man/xemacs-faq.texi index 9d63f48..6e4d628 100644 --- a/man/xemacs-faq.texi +++ b/man/xemacs-faq.texi @@ -7,7 +7,7 @@ @finalout @titlepage @title XEmacs FAQ -@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2001/03/08 08:19:10 $ +@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2001/04/12 18:22:04 $ @sp 1 @author Tony Rossini @author Ben Wing diff --git a/netinstall/ChangeLog b/netinstall/ChangeLog index 46a14c1..6eab735 100644 --- a/netinstall/ChangeLog +++ b/netinstall/ChangeLog @@ -1,3 +1,7 @@ +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/netinstall/msg.cc b/netinstall/msg.cc index 5a9ed24..2f32dbe 100644 --- a/netinstall/msg.cc +++ b/netinstall/msg.cc @@ -16,7 +16,7 @@ /* The purpose of this file is to centralize all the message functions. */ -static char *cvsid = "\n%%% $Id: msg.cc,v 1.1.2.1 2000/12/11 22:01:36 andyp Exp $\n"; +static char *cvsid = "\n%%% $Id: msg.cc,v 1.2 2001/04/12 18:22:49 michaels Exp $\n"; #include "win32.h" #include diff --git a/netinstall/nio-ie5.cc b/netinstall/nio-ie5.cc index 9f2cae0..c6e390c 100644 --- a/netinstall/nio-ie5.cc +++ b/netinstall/nio-ie5.cc @@ -18,7 +18,7 @@ must already have installed and configured IE5. This module is called from netio.cc, which is called from geturl.cc */ -static char *cvsid = "\n%%% $Id: nio-ie5.cc,v 1.1.2.1 2000/12/11 22:01:41 andyp Exp $\n"; +static char *cvsid = "\n%%% $Id: nio-ie5.cc,v 1.2 2001/04/12 18:22:51 michaels Exp $\n"; #include "win32.h" diff --git a/netinstall/res.rc b/netinstall/res.rc index 030b038..cebc0c2 100644 --- a/netinstall/res.rc +++ b/netinstall/res.rc @@ -478,7 +478,7 @@ BEGIN IDS_ERR_OPEN_READ "Can't open %s for reading: %s" IDS_ROOT_ABSOLUTE "The install directory must be absolute, with both a drive letter and leading slash, like C:\\Cygwin" IDS_DOWNLOAD_COMPLETE "Download Complete" - IDS_CVSID "\n%%% $Id: res.rc,v 1.1.2.6 2001/03/09 04:13:05 wmperry Exp $\n" + IDS_CVSID "\n%%% $Id: res.rc,v 1.2 2001/04/12 18:22:53 michaels Exp $\n" IDS_NOLOGFILE "Cannot open log file %s for writing" IDS_UNINSTALL_COMPLETE "Uninstalls complete." IDS_WININET "Unable to find or load the Internet Explorer 5 DLLs" diff --git a/nt/ChangeLog b/nt/ChangeLog index 80b62f8..d15f32b 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,11 @@ +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2001-03-14 Craig Lanning + + * minitar.c: Clean up some compiler warnings. + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/nt/minitar.c b/nt/minitar.c index 2fa8b52..a903c6d 100644 --- a/nt/minitar.c +++ b/nt/minitar.c @@ -14,9 +14,12 @@ #include #include +#include +#include #include +static int Usage(char *name) { fprintf(stderr,"Usage: %s file.tar.gz [base-dir]\n",name); @@ -28,7 +31,8 @@ Usage(char *name) #define BLOCKSIZE 512 #define MAXNAMELEN 1024 -int octal(char *str) +static int +octal(char *str) { int ret = -1; sscanf(str,"%o",&ret); @@ -39,7 +43,8 @@ int octal(char *str) the final component is assumed to be a file, rather than a path component, so it is not created as a directory */ -int makepath(char *path) +static int +makepath(char *path) { char tmp[MAXNAMELEN]; char *cp; @@ -53,7 +58,11 @@ int makepath(char *path) tmp[cp-path] = '\0'; if (strlen(tmp) == 0) continue; +#ifdef WIN32_NATIVE + if (mkdir(tmp)){ +#else if (mkdir(tmp,0777)){ +#endif if (errno == EEXIST) continue; else @@ -66,12 +75,12 @@ int makepath(char *path) +int main(int argc, char **argv) { char fullname[MAXNAMELEN]; char *basedir = "."; char *tarfile; - char *cp; int size; char osize[13]; char name[101]; diff --git a/src/ChangeLog b/src/ChangeLog index 4332610..ec3f250 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -4367,6 +4367,53 @@ (Vcharset_thai_tis620): Likewise. (Vcharset_katakana_jisx0201): Likewise. +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2001-04-02 Jan Vroonhof + + * redisplay.c (add_bufbyte_string_runes): Update data->bytepos + +2001-04-03 Mike Sperber + + * search.c: Revert previous patch due because of release. + +2001-03-30 Ben Wing + + * s\cygwin32.h: + Add missing killpg prototype. + + * elhash.c: + Add a comment about fixing problems when a new entry is added + while mapping. + + * frame-msw.c (mswindows_init_frame_1): + Fix compile warnings. + + * menubar.c (vars_of_menubar): + Provide `menu-accelerator-support' to indicate that we properly + support %_ in menu specifications, so that package code can + conditionalize on this (and remove %_ from menu specifications + on older versions). + + * event-msw.c: + * scrollbar-msw.c: + * scrollbar-msw.c (can_scroll): + * scrollbar-msw.h: + Fix handling of mouse wheel under Windows to follow standards -- + now scrolls window under pointer, not selected window. + +2001-03-31 Mike Sperber + + * search.c (Freplace_match): Support FSF-style specification of + match subexpression when applied to a buffer. + +2001-03-15 Martin Buchholz + + * keymap.c (Fmap_keymap): map-keymap explicitly allows a mapping + function to modify KEYMAP, so map over a copy of the hash table. + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/src/dump-id.h b/src/dump-id.h deleted file mode 100644 index e69de29..0000000 diff --git a/src/elhash.c b/src/elhash.c index f1462fe..b034860 100644 --- a/src/elhash.c +++ b/src/elhash.c @@ -1201,6 +1201,19 @@ may remhash or puthash the entry currently being processed by FUNCTION. return Qnil; } +/* #### If the Lisp function being called does a puthash and this + #### causes the hash table to be resized, the results will be quite + #### random and we will likely crash. To fix this, either set a + #### flag in the hash table while we're mapping and signal an error + #### when new entries are added, or fix things to make this + #### operation work properly, like this: Store two hash tables in + #### each hash table object -- the second one is written to when + #### you do a puthash inside of a mapping operation, and the + #### various operations need to check both hash tables for entries. + #### As soon as the last maphash over a particular hash table + #### object terminates, the entries in the second table are added + #### to the first (using an unwind-protect). --ben */ + /* Map *C* function FUNCTION over the elements of a lisp hash table. */ void elisp_maphash (maphash_function_t function, diff --git a/src/event-gtk.c b/src/event-gtk.c index 9dd0394..66bba28 100644 --- a/src/event-gtk.c +++ b/src/event-gtk.c @@ -1727,6 +1727,7 @@ vars_of_event_gtk (void) dispatch_event_queue = Qnil; staticpro (&dispatch_event_queue); dispatch_event_queue_tail = Qnil; + staticpro (&dispatch_event_queue_tail); DEFVAR_BOOL ("gtk-allow-sendevents", >k_allow_sendevents /* *Non-nil means to allow synthetic events. Nil means they are ignored. diff --git a/src/event-msw.c b/src/event-msw.c index fec746e..1350d26 100644 --- a/src/event-msw.c +++ b/src/event-msw.c @@ -2745,7 +2745,9 @@ mswindows_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam) int delta = (short) HIWORD (wParam); /* Wheel rotation amount */ struct gcpro gcpro1, gcpro2; - if (mswindows_handle_mousewheel_event (mswindows_find_frame (hwnd), keys, delta)) + if (mswindows_handle_mousewheel_event (mswindows_find_frame (hwnd), + keys, delta, + MAKEPOINTS (lParam))) { GCPRO2 (emacs_event, fobj); mswindows_pump_outstanding_events (); /* Can GC */ diff --git a/src/frame-msw.c b/src/frame-msw.c index 9ea792d..60e60e4 100644 --- a/src/frame-msw.c +++ b/src/frame-msw.c @@ -199,10 +199,9 @@ mswindows_init_frame_1 (struct frame *f, Lisp_Object props) hwnd = CreateWindowEx (exstyle, XEMACS_CLASS, - STRINGP(f->name) ? XSTRING_DATA(f->name) : - (STRINGP(name) ? - (const Extbyte*)XSTRING_DATA(name) : - (const Extbyte*)XEMACS_CLASS), + STRINGP (f->name) ? (LPCTSTR) XSTRING_DATA (f->name) : + (STRINGP (name) ? (LPCTSTR) XSTRING_DATA (name) : + XEMACS_CLASS), style, rect_default.left, rect_default.top, rect_default.width, rect_default.height, diff --git a/src/keymap.c b/src/keymap.c index 4aa26f7..89f705e 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -2990,7 +2990,8 @@ faster. (function, keymap, sort_first)) { /* This function can GC */ - struct gcpro gcpro1, gcpro2; + struct gcpro gcpro1, gcpro2, gcpro3; + Lisp_Object table = Qnil; /* tolerate obviously transposed args */ if (!NILP (Fkeymapp (function))) @@ -2999,9 +3000,17 @@ faster. function = keymap; keymap = tmp; } - GCPRO2 (function, keymap); + + GCPRO3 (function, keymap, table); keymap = get_keymap (keymap, 1, 1); - map_keymap (XKEYMAP (keymap)->table, !NILP (sort_first), + + /* elisp_maphash does not allow mapping functions to modify the hash + table being mapped over. Since map-keymap explicitly allows a + mapping function to modify KEYMAP, we map over a copy of the hash + table instead. */ + table = Fcopy_hash_table (XKEYMAP (keymap)->table); + + map_keymap (table, !NILP (sort_first), map_keymap_mapper, LISP_TO_VOID (function)); UNGCPRO; return Qnil; diff --git a/src/menubar.c b/src/menubar.c index d0d60d7..d48425d 100644 --- a/src/menubar.c +++ b/src/menubar.c @@ -723,6 +723,7 @@ the actions of menu traversal keys in a commonly used PC operating system. */ ); Fprovide (intern ("menubar")); + Fprovide (intern ("menu-accelerator-support")); } void diff --git a/src/redisplay.c b/src/redisplay.c index ae7637a..e791512 100644 --- a/src/redisplay.c +++ b/src/redisplay.c @@ -980,6 +980,8 @@ add_bufbyte_string_runes (pos_data *data, Bufbyte *c_string, for (pos = c_string; pos < end;) { + Bufbyte *old_pos = pos; + data->ch = charptr_emchar (pos); prop = add_emchar_rune (data); @@ -1005,6 +1007,9 @@ add_bufbyte_string_runes (pos_data *data, Bufbyte *c_string, } INC_CHARPTR (pos); assert (pos <= end); + /* #### Duplicate code from add_string_to_fstring_db_runes + should we do more?*/ + data->bytepos += pos - old_pos; } return NULL; diff --git a/src/s/cygwin32.h b/src/s/cygwin32.h index 4b01e7f..5819001 100644 --- a/src/s/cygwin32.h +++ b/src/s/cygwin32.h @@ -113,7 +113,8 @@ double logb (double); # endif /* CYGWIN_VERSION_DLL_MAJOR <= 20 */ /* Still left out of 1.1! */ -double logb (double); +double logb (double); +int killpg (int pgrp, int sig); #endif diff --git a/src/scrollbar-msw.c b/src/scrollbar-msw.c index 832fcbd..d323d9a 100644 --- a/src/scrollbar-msw.c +++ b/src/scrollbar-msw.c @@ -266,7 +266,7 @@ mswindows_handle_scrollbar_event (HWND hwnd, int code, int pos) } static int -can_scroll(struct scrollbar_instance* scrollbar) +can_scroll (struct scrollbar_instance* scrollbar) { return scrollbar != NULL && IsWindowVisible (SCROLLBAR_MSW_HANDLE (scrollbar)) @@ -274,15 +274,48 @@ can_scroll(struct scrollbar_instance* scrollbar) } int -mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta) +mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta, + POINTS where) { int hasVertBar, hasHorzBar; /* Indicates presence of scroll bars */ unsigned wheelScrollLines = 0; /* Number of lines per wheel notch */ + Lisp_Object win; + struct window_mirror *mirror; + POINT donde_esta; - /* Find the currently selected window */ - Lisp_Object win = FRAME_SELECTED_WINDOW (XFRAME (frame)); - struct window* w = XWINDOW (win); - struct window_mirror* mirror = find_window_mirror (w); + donde_esta.x = where.x; + donde_esta.y = where.y; + + ScreenToClient (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)), &donde_esta); + + /* Find the window to scroll */ + { + int mene, _mene, tekel, upharsin; + Bufpos mens, sana; + Charcount in; + Lisp_Object corpore, sano; + struct window *needle_in_haystack; + + // stderr_out ("donde_esta: %d %d\n", donde_esta.x, donde_esta.y); + pixel_to_glyph_translation (XFRAME (frame), donde_esta.x, donde_esta.y, + &mene, &_mene, &tekel, &upharsin, + &needle_in_haystack, + &mens, &sana, &in, &corpore, &sano); + + if (needle_in_haystack) + { + XSETWINDOW (win, needle_in_haystack); + // stderr_out ("found needle\n"); + // debug_print (win); + } + else + { + win = FRAME_SELECTED_WINDOW (XFRAME (frame)); + needle_in_haystack = XWINDOW (win); + } + + mirror = find_window_mirror (needle_in_haystack); + } /* Check that there is something to scroll */ hasVertBar = can_scroll (mirror->scrollbar_vertical_instance); diff --git a/src/scrollbar-msw.h b/src/scrollbar-msw.h index a7f1e8b..9b4338e 100644 --- a/src/scrollbar-msw.h +++ b/src/scrollbar-msw.h @@ -57,7 +57,8 @@ EMACS_INT mswindows_window_is_scrollbar (struct frame *f, Window win); */ void mswindows_handle_scrollbar_event (HWND hwnd, int code, int pos); -int mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta); +int mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta, + POINTS where); #endif /* HAVE_MS_WINDOWS and HAVE_SCROLLBARS */ #endif /* INCLUDED_scrollbar_msw_h_ */ diff --git a/tests/ChangeLog b/tests/ChangeLog index 57d1848..f1ead77 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,12 @@ +2001-04-14 Stephen J. Turnbull + + * XEmacs 21.2.47 "Zephir" is released. + +2001-03-23 Martin Buchholz + + * automated/lisp-tests.el: + Add test for mis-byte-compilation of (- 0 x). + 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. diff --git a/tests/automated/lisp-tests.el b/tests/automated/lisp-tests.el index 8f4bbfb..b2b6077 100644 --- a/tests/automated/lisp-tests.el +++ b/tests/automated/lisp-tests.el @@ -243,6 +243,8 @@ (Assert (= (- one) -1)) (Assert (= (- one one) 0)) (Assert (= (- one one one) -1)) + (Assert (= (- 0 one) -1)) + (Assert (= (- 0 one one) -2)) (Assert (= (+ one 1) 2)) (dolist (zero '(0 0.0 ?\0)) (Assert (= (+ 1 zero) 1)) diff --git a/version.sh b/version.sh index 77efe2a..282b647 100644 --- a/version.sh +++ b/version.sh @@ -1,9 +1,9 @@ #!/bin/sh -emacs_is_beta=t +emacs_is_beta= emacs_major_version=21 emacs_minor_version=2 -emacs_beta_version=46 -xemacs_codename="Urania" +emacs_beta_version=47 +xemacs_codename="Zephir" infodock_major_version=4 infodock_minor_version=0 infodock_build_version=8