# HG changeset patch # User cvs # Date 1186997779 -7200 # Node ID 576fb035e26372b87d44c1ecdd2ae3badcc699d4 # Parent a8296e22da4ec6a712ffe88ffd7679768ab37e70 Import from CVS: tag r21-2-37 diff -r a8296e22da4e -r 576fb035e263 CHANGES-beta --- a/CHANGES-beta Mon Aug 13 11:35:05 2007 +0200 +++ b/CHANGES-beta Mon Aug 13 11:36:19 2007 +0200 @@ -1,3 +1,37 @@ +to 21.2.37 "Pan" +-- etags fix -- Stephen Carney +-- more gutters and tab changes -- Andy Piper +-- eval-when-compile no longer compiles its body -- Martin Buchholz +-- top-level (defvar foo) no longer generates a run-time load-history + entry -- Martin Buchholz +-- Windows 1251 code page encoding for Cyrillic -- Sergey Groznyh +-- `local-key-binding' and `global-key-binding' now have an optional + `accepts-defaults' parameter, just like `lookup-key' -- Martin Buchholz +-- 1000 arglist-related lispref documentation bugs fixed -- Martin Buchholz +-- arg to `down-list', `up-list', `backward-up-list', `kill-sexp', + `backward-kill-sexp' are now optional, just like FSF Emacs -- Martin Buchholz +-- info mode fixes -- Didier Verna +-- Massive CCL upgrade -- MIYASHITA Hisashi +-- byte-code optimizations -- Yoshiki Hayashi +-- historical purecopy's purged -- Robert Pluim +-- `mwheel-install', `turn-on-auto-fill', `turn-on-font-lock', + `turn-off-font-lock' are now interactive -- Martin Buchholz +-- Detect _getpty correctly (for SGIs) -- Martin Buchholz +-- Several GCPRO bugs found -- Yoshiki Hayashi +-- `replace-buffer-in-windows' now has the same WHICH-FRAMES and + WHICH-DEVICES paratmeters as `delete-windows-on' -- Martin Buchholz +-- Add support for Compaq C on Alpha Linux -- Martin Buchholz +-- auto-save fixes -- Yoshiki Hayashi +-- Removed unused C vars detected by Compaq C -- Martin Buchholz +-- More 64-bit cleanliness micro-fixes -- Martin Buchholz +-- Fix cachel.merged_faces memory leak -- Golubev I. N. +-- More changes to allow definitions of lisp object types by + third-party modules -- Daiki Ueno. +-- Extbyte is now a char, not unsigned char -- Martin Buchholz +-- C++ compilability is restored -- Martin Buchholz +-- New tests for CCL -- MIYASHITA Hisashi, Yoshiki Hayashi +-- Use stropts.h, not sys/stropts.h. Likewise for strtio.h -- Martin Buchholz + to 21.2.36 "Notus" -- Fix build problems on AIX 4.3 -- Martin Buchholz -- Fix build problems on HP-UX 10.20 -- Alexandre Oliva and Martin Buchholz diff -r a8296e22da4e -r 576fb035e263 ChangeLog --- a/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,3 +1,50 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-10-19 Stephen J. Turnbull + + * README.packages: Add "uninstalled package" FAQ. + + * etc/PACKAGES: Add details on os-utils contents. + +2000-11-01 Martin Buchholz + + * configure.in: Handle alloca with Compaq C on Alpha Linux. + +2000-10-27 Martin Buchholz + + * configure.in: Oops, _getpt ==> _getpty + +2000-10-23 Yoshiki Hayashi + + * Makefile.in.in: Remove lockdir related things. + +2000-10-11 Martin Buchholz + + * configure.in: + Remove checking for XFree86. Use feature tests instead! + Add check for XRegisterIMInstantiateCallback. + Add check for XRegisterIMInstantiateCallback's prototype. + +2000-10-04 Yoshiki Hayashi + + * etc/NEWS: Change lprogress-display to progress-feedback. + +2000-10-08 Karl M. Hegbloom + + * configure.in: Typo - missing paren. + +2000-10-10 Martin Buchholz + + * configure.in: + Use stropts.h, not sys/stropts.h. + Use strtio.h, not sys/strtio.h. + +2000-10-06 Martin Buchholz + + * configure.in: Pretend that DEC OSF >= 5 is really DEC OSF 4. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff -r a8296e22da4e -r 576fb035e263 Makefile.in.in --- a/Makefile.in.in Mon Aug 13 11:35:05 2007 +0200 +++ b/Makefile.in.in Mon Aug 13 11:36:19 2007 +0200 @@ -123,7 +123,6 @@ ## Where to install and expect the files that XEmacs modifies as it runs. ## These files are all architecture-independent. Right now, the ## only such data is the locking directory; -## ${lockdir} is a subdirectory of this. statedir=@statedir@ ## Where to install and expect executable files to be run by XEmacs @@ -199,11 +198,6 @@ ## at once. etcdir=@etcdir@ -## Where to create and expect the locking directory, where -## the XEmacs locking code keeps track of which files are -## currently being edited. -lockdir=@lockdir@ - ## Where to put the DOC file. docdir=@docdir@ @@ -520,10 +514,9 @@ ## (e.g. /usr/local/lib/${PROGNAME}-20.5/sparc-sun-solaris2.6), we use ## make-path instead of mkdir. Not all mkdirs have the `-p' flag. mkdir: FRC.mkdir - ${MAKEPATH} ${COPYDESTS} ${lockdir} ${docdir} ${infodir} ${archlibdir} \ + ${MAKEPATH} ${COPYDESTS} ${docdir} ${infodir} ${archlibdir} \ ${mandir} ${bindir} ${datadir} ${libdir} ${pkgdir} \ ${sitelispdir} ${moduledir} ${sitemoduledir} - -chmod 0777 ${lockdir} ## Delete all the installed files that the `install' target would ## create (but not the noninstalled files such as `make all' would diff -r a8296e22da4e -r 576fb035e263 README.packages --- a/README.packages Mon Aug 13 11:35:05 2007 +0200 +++ b/README.packages Mon Aug 13 11:36:19 2007 +0200 @@ -19,6 +19,13 @@ A. You can grab all the packages at once like you used to with old XEmacs versions, skip to the 'Sumo Tarball' section below. +Q. After installing, I want XEmacs to do `foo', but when I invoke it + (or click the toolbar button or select the menu item), nothing (or + an error) happens, and it used to work. +A. See the first FAQ; you may be missing a package that is essential to + you. You can either track it down and install it, or install the + `Sumo Tarball' (see the second FAQ). + A note of caution ----------------- diff -r a8296e22da4e -r 576fb035e263 configure --- a/configure Mon Aug 13 11:35:05 2007 +0200 +++ b/configure Mon Aug 13 11:36:19 2007 +0200 @@ -1140,7 +1140,7 @@ *-dec-osf1.2 | *-dec-osf1* ) opsys=decosf1-2 ;; *-dec-osf3.[2-9] ) opsys=decosf3-2 ;; *-dec-osf3* ) opsys=decosf3-1 ;; - *-dec-osf4* ) opsys=decosf4-0 ;; + *-dec-osf[4-9]* ) opsys=decosf4-0 ;; *-*-ultrix[0-3].* | *-*-ultrix4.0* ) opsys=bsd4-2 ;; *-*-ultrix4.[12]* ) opsys=bsd4-3 ;; @@ -6293,33 +6293,104 @@ done - echo $ac_n "checking for XFree86""... $ac_c" 1>&6 -echo "configure:6298: checking for XFree86" >&5 - if test -d "/usr/X386/include" -o \ - -f "/etc/XF86Config" -o \ - -f "/etc/X11/XF86Config" -o \ - -f "/usr/X11R6/lib/X11/XF86Config"; then - echo "$ac_t""yes" 1>&6 - { test "$extra_verbose" = "yes" && cat << \EOF - Defining HAVE_XFREE386 -EOF -cat >> confdefs.h <<\EOF -#define HAVE_XFREE386 1 -EOF -} - - else - echo "$ac_t""no" 1>&6 - fi + for ac_func in XRegisterIMInstantiateCallback +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:6300: checking for $ac_func" >&5 + +cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + { test "$extra_verbose" = "yes" && cat << EOF + Defining $ac_tr_func +EOF +cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for standard XRegisterIMInstantiateCallback prototype""... $ac_c" 1>&6 +echo "configure:6354: checking for standard XRegisterIMInstantiateCallback prototype" >&5 + cat > conftest.$ac_ext < +extern Bool XRegisterIMInstantiateCallback( + Display*, struct _XrmHashBucketRec*, char*, char*, XIMProc, XPointer*); + +int main() { + +; return 0; } +EOF +if { (eval echo configure:6368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 + { test "$extra_verbose" = "yes" && cat << \EOF + Defining XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE +EOF +cat >> confdefs.h <<\EOF +#define XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE 1 +EOF +} + +fi +rm -f conftest* test -z "$with_xmu" && { echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6 -echo "configure:6318: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 +echo "configure:6389: 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:6405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6369,19 +6440,19 @@ echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6 -echo "configure:6373: checking for main in -lXbsd" >&5 +echo "configure:6444: 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:6456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6418,22 +6489,22 @@ fi if test "$with_msw" != "no"; then echo "checking for MS-Windows" 1>&6 -echo "configure:6422: checking for MS-Windows" >&5 +echo "configure:6493: checking for MS-Windows" >&5 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6 -echo "configure:6425: checking for main in -lgdi32" >&5 +echo "configure:6496: 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:6508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6499,12 +6570,12 @@ fi fi cat > conftest.$ac_ext < int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; } EOF -if { (eval echo configure:6508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:6579: \"$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 @@ -6568,15 +6639,15 @@ 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:6572: checking for X11/extensions/shape.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6623,7 +6694,7 @@ esac echo "checking for WM_COMMAND option" 1>&6 -echo "configure:6627: checking for WM_COMMAND option" >&5; +echo "configure:6698: checking for WM_COMMAND option" >&5; if test "$with_wmcommand" != "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_WMCOMMAND @@ -6638,15 +6709,15 @@ 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:6642: checking for X11/Xauth.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6650: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6721: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6669,12 +6740,12 @@ } test -z "$with_xauth" && { echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6 -echo "configure:6673: checking for XauGetAuthByAddr in -lXau" >&5 +echo "configure:6744: 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:6760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6730,15 +6801,15 @@ 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:6734: checking for ${dir}tt_c.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6742: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6774,12 +6845,12 @@ 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:6778: checking "$xe_msg_checking"" >&5 +echo "configure:6849: 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:6865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6847,15 +6918,15 @@ 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:6851: checking for Dt/Dt.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6930: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6878,12 +6949,12 @@ } test -z "$with_cde" && { echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6 -echo "configure:6882: checking for DtDndDragStart in -lDtSvc" >&5 +echo "configure:6953: 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:6969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6963,7 +7034,7 @@ fi echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6 -echo "configure:6967: checking if drag and drop API is needed" >&5 +echo "configure:7038: checking if drag and drop API is needed" >&5 if test "$with_dragndrop" != "no" ; then if test -n "$dragndrop_proto" ; then with_dragndrop=yes @@ -6984,18 +7055,18 @@ fi echo "checking for LDAP" 1>&6 -echo "configure:6988: checking for LDAP" >&5 +echo "configure:7059: 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:6991: checking for ldap.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7070: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7018,15 +7089,15 @@ } 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:7022: checking for lber.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7050,12 +7121,12 @@ if test "$with_ldap" != "no"; then echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6 -echo "configure:7054: checking for ldap_search in -lldap" >&5 +echo "configure:7125: 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:7141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7091,12 +7162,12 @@ 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:7095: checking "$xe_msg_checking"" >&5 +echo "configure:7166: 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:7182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7132,12 +7203,12 @@ 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:7136: checking "$xe_msg_checking"" >&5 +echo "configure:7207: 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:7223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7173,12 +7244,12 @@ 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:7177: checking "$xe_msg_checking"" >&5 +echo "configure:7248: 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:7264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7240,10 +7311,10 @@ 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:7244: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7341: \"$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 @@ -7297,20 +7368,20 @@ if test "$with_postgresql" != "no"; then echo "checking for PostgreSQL" 1>&6 -echo "configure:7301: checking for PostgreSQL" >&5 +echo "configure:7372: 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:7306: checking for ${header_dir}libpq-fe.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7385: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7334,12 +7405,12 @@ test -n "$libpq_fe_h_file" && { echo $ac_n "checking for PQconnectdb in -lpq""... $ac_c" 1>&6 -echo "configure:7338: checking for PQconnectdb in -lpq" >&5 +echo "configure:7409: 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:7425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7383,12 +7454,12 @@ echo $ac_n "checking for PQconnectStart in -lpq""... $ac_c" 1>&6 -echo "configure:7387: checking for PQconnectStart in -lpq" >&5 +echo "configure:7458: 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:7474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7447,15 +7518,15 @@ if test "$window_system" != "none"; then echo "checking for graphics libraries" 1>&6 -echo "configure:7451: checking for graphics libraries" >&5 +echo "configure:7522: 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:7456: checking for Xpm - no older than 3.4f" >&5 +echo "configure:7527: checking for Xpm - no older than 3.4f" >&5 xe_check_libs=-lXpm cat > conftest.$ac_ext < @@ -7464,7 +7535,7 @@ XpmIncludeVersion != XpmLibraryVersion() ? 1 : XpmIncludeVersion < 30406 ? 2 : 0 ;} EOF -if { (eval echo configure:7468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:7539: \"$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 @@ -7506,17 +7577,17 @@ 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:7510: checking for \"FOR_MSW\" xpm" >&5 +echo "configure:7581: 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:7591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xpm_for_msw=no else @@ -7542,15 +7613,15 @@ 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:7546: checking for compface.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7554: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7573,12 +7644,12 @@ } test -z "$with_xface" && { echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6 -echo "configure:7577: checking for UnGenFace in -lcompface" >&5 +echo "configure:7648: 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:7664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7641,12 +7712,12 @@ if test "$with_png $with_tiff" != "no no"; then echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6 -echo "configure:7645: checking for inflate in -lc" >&5 +echo "configure:7716: 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:7732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7676,12 +7747,12 @@ echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6 -echo "configure:7680: checking for inflate in -lz" >&5 +echo "configure:7751: 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:7767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7711,12 +7782,12 @@ echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6 -echo "configure:7715: checking for inflate in -lgz" >&5 +echo "configure:7786: 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:7802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7757,15 +7828,15 @@ 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:7761: checking for jpeglib.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7788,12 +7859,12 @@ } test -z "$with_jpeg" && { echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6 -echo "configure:7792: checking for jpeg_destroy_decompress in -ljpeg" >&5 +echo "configure:7863: 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:7879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7840,10 +7911,10 @@ png_problem="" test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6 -echo "configure:7844: checking for pow" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7941: \"$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 @@ -7887,15 +7958,15 @@ } 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:7891: checking for png.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7899: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7970: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7918,12 +7989,12 @@ } test -z "$with_png" && { echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6 -echo "configure:7922: checking for png_read_image in -lpng" >&5 +echo "configure:7993: 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:8009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7957,10 +8028,10 @@ } if test -z "$with_png"; then echo $ac_n "checking for workable png version information""... $ac_c" 1>&6 -echo "configure:7961: checking for workable png version information" >&5 +echo "configure:8032: checking for workable png version information" >&5 xe_check_libs="-lpng -lz" cat > conftest.$ac_ext < int main(int c, char **v) { @@ -7968,7 +8039,7 @@ if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1; return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;} EOF -if { (eval echo configure:7972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:8043: \"$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 @@ -8011,15 +8082,15 @@ 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:8015: checking for tiffio.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8042,12 +8113,12 @@ } test -z "$with_tiff" && { echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6 -echo "configure:8046: checking for TIFFClientOpen in -ltiff" >&5 +echo "configure:8117: 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:8133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8097,10 +8168,10 @@ if test "$with_x11" = "yes"; then echo "checking for X11 graphics libraries" 1>&6 -echo "configure:8101: checking for X11 graphics libraries" >&5 +echo "configure:8172: checking for X11 graphics libraries" >&5 echo "checking for the Athena widgets" 1>&6 -echo "configure:8104: checking for the Athena widgets" >&5 +echo "configure:8175: checking for the Athena widgets" >&5 case "$with_athena" in "xaw" | "") athena_variant=Xaw athena_3d=no ;; @@ -8114,12 +8185,12 @@ if test "$athena_3d" = "no"; then echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8118: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 +echo "configure:8189: 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:8205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8146,12 +8217,12 @@ echo "$ac_t""yes" 1>&6 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8150: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:8221: 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:8237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8193,12 +8264,12 @@ else echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8197: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:8268: 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:8284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8227,12 +8298,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for threeDClassRec in -lXaw""... $ac_c" 1>&6 -echo "configure:8231: checking for threeDClassRec in -lXaw" >&5 +echo "configure:8302: 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:8318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8274,15 +8345,15 @@ 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:8278: checking for X11/Xaw/ThreeD.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8286: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8302,15 +8373,15 @@ 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:8306: checking for X11/Xaw/XawInit.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8385: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8336,15 +8407,15 @@ 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:8340: checking for X11/$athena_variant/XawInit.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8348: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8419: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8361,15 +8432,15 @@ 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:8365: checking for X11/$athena_variant/ThreeD.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8373: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8397,15 +8468,15 @@ 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:8401: checking for $athena_variant/XawInit.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8409: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8422,15 +8493,15 @@ 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:8426: checking for $athena_variant/ThreeD.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8505: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8459,15 +8530,15 @@ 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:8463: checking for X11/Xaw3d/XawInit.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8542: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8484,15 +8555,15 @@ 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:8488: checking for X11/Xaw3d/ThreeD.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8496: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8524,15 +8595,15 @@ 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:8528: checking for Xaw3d/XawInit.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8549,15 +8620,15 @@ 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:8553: checking for Xaw3d/ThreeD.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8561: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8632: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8589,15 +8660,15 @@ 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:8593: checking for X11/Xaw/ThreeD.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8601: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8672: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8632,15 +8703,15 @@ ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6 -echo "configure:8636: checking for Xm/Xm.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8657,12 +8728,12 @@ echo "$ac_t""yes" 1>&6 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6 -echo "configure:8661: checking for XmStringFree in -lXm" >&5 +echo "configure:8732: 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:8748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8702,9 +8773,9 @@ if test "$have_motif" = "yes"; then echo $ac_n "checking for Lesstif""... $ac_c" 1>&6 -echo "configure:8706: checking for Lesstif" >&5 +echo "configure:8777: checking for Lesstif" >&5 cat > conftest.$ac_ext < #ifdef LESSTIF_VERSION @@ -9110,7 +9181,7 @@ if test "$with_mule" = "yes" ; then echo "checking for Mule-related features" 1>&6 -echo "configure:9114: checking for Mule-related features" >&5 +echo "configure:9185: checking for Mule-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining MULE EOF @@ -9135,15 +9206,15 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:9139: checking for $ac_hdr" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9174,12 +9245,12 @@ echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6 -echo "configure:9178: checking for strerror in -lintl" >&5 +echo "configure:9249: 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:9265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9223,18 +9294,18 @@ echo "checking for Mule input methods" 1>&6 -echo "configure:9227: checking for Mule input methods" >&5 +echo "configure:9298: checking for Mule input methods" >&5 case "$with_xim" in "" | "yes" ) echo "checking for XIM" 1>&6 -echo "configure:9230: checking for XIM" >&5 +echo "configure:9301: checking for XIM" >&5 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6 -echo "configure:9233: checking for XOpenIM in -lX11" >&5 +echo "configure:9304: 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:9320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9269,12 +9340,12 @@ if test "$have_motif $have_lesstif" = "yes no"; then echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6 -echo "configure:9273: checking for XmImMbLookupString in -lXm" >&5 +echo "configure:9344: 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:9360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9350,15 +9421,15 @@ if test "$with_xfs" = "yes" ; then echo "checking for XFontSet" 1>&6 -echo "configure:9354: checking for XFontSet" >&5 +echo "configure:9425: checking for XFontSet" >&5 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6 -echo "configure:9357: checking for XmbDrawString in -lX11" >&5 +echo "configure:9428: 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:9444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9409,15 +9480,15 @@ 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:9413: checking for wnn/jllib.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9492: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9442,10 +9513,10 @@ for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9446: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9543: \"$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 @@ -9497,12 +9568,12 @@ test "$ac_cv_func_crypt" != "yes" && { echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:9501: checking for crypt in -lcrypt" >&5 +echo "configure:9572: 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:9588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9548,12 +9619,12 @@ 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:9552: checking for jl_dic_list_e in -lwnn" >&5 +echo "configure:9623: 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:9639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9582,12 +9653,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6 -echo "configure:9586: checking for jl_dic_list_e in -lwnn4" >&5 +echo "configure:9657: 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:9673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9616,12 +9687,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6 -echo "configure:9620: checking for jl_dic_list_e in -lwnn6" >&5 +echo "configure:9691: 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:9707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9650,12 +9721,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6 -echo "configure:9654: checking for dic_list_e in -lwnn6_fromsrc" >&5 +echo "configure:9725: 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:9741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9714,12 +9785,12 @@ if test "$with_wnn6" != "no"; then echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6 -echo "configure:9718: checking for jl_fi_dic_list in -l$libwnn" >&5 +echo "configure:9789: 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:9805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9765,15 +9836,15 @@ 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:9769: checking for canna/jrkanji.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9800,15 +9871,15 @@ 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:9804: checking for canna/jrkanji.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9836,15 +9907,15 @@ 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:9840: checking for canna/RK.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9867,12 +9938,12 @@ } test -z "$with_canna" && { echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6 -echo "configure:9871: checking for RkBgnBun in -lRKC" >&5 +echo "configure:9942: 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:9958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9906,12 +9977,12 @@ } test -z "$with_canna" && { echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6 -echo "configure:9910: checking for jrKanjiControl in -lcanna" >&5 +echo "configure:9981: 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:9997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9971,12 +10042,12 @@ 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:9975: checking for layout_object_getvalue in -li18n" >&5 +echo "configure:10046: 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:10062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10073,10 +10144,10 @@ 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 utimes waitpid vsnprintf fsync ftruncate umask do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10077: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10174: \"$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 @@ -10127,13 +10198,13 @@ done -for ac_func in getpt _getpt grantpt unlockpt ptsname killpg tcgetpgrp +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:10134: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10231: \"$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 @@ -10185,10 +10256,10 @@ echo $ac_n "checking for openpty""... $ac_c" 1>&6 -echo "configure:10189: checking for openpty" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10286: \"$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 @@ -10230,12 +10301,12 @@ echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6 -echo "configure:10234: checking for openpty in -lutil" >&5 +echo "configure:10305: 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:10321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10281,15 +10352,15 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10285: checking for $ac_hdr" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10293: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10321,19 +10392,19 @@ test "$need_libutil" = "yes" && libs_system="$libs_system -lutil" && if test "$extra_verbose" = "yes"; then echo " Appending \"-lutil\" to \$libs_system"; fi fi -for ac_hdr in sys/stropts.h +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:10329: checking for $ac_hdr" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10408: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10362,14 +10433,14 @@ fi done -if test "$ac_cv_header_sys_stropts_h" = "yes"; then +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:10370: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10467: \"$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 @@ -10419,19 +10490,19 @@ fi done - for ac_hdr in sys/strtio.h + for ac_hdr in strtio.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10427: checking for $ac_hdr" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10435: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10506: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10468,10 +10539,10 @@ for ac_func in getloadavg do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10472: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10569: \"$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 @@ -10527,15 +10598,15 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10531: checking for $ac_hdr" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10571,12 +10642,12 @@ echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6 -echo "configure:10575: checking for kstat_open in -lkstat" >&5 +echo "configure:10646: 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:10662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10622,15 +10693,15 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10626: checking for $ac_hdr" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10634: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10705: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10662,12 +10733,12 @@ echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6 -echo "configure:10666: checking for kvm_read in -lkvm" >&5 +echo "configure:10737: 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:10753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10712,16 +10783,16 @@ fi echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6 -echo "configure:10716: checking whether netdb declares h_errno" >&5 -cat > conftest.$ac_ext <&5 +cat > conftest.$ac_ext < int main() { return h_errno; ; return 0; } EOF -if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10796: \"$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 @@ -10741,16 +10812,16 @@ rm -f conftest* echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6 -echo "configure:10745: checking for sigsetjmp" >&5 -cat > conftest.$ac_ext <&5 +cat > conftest.$ac_ext < int main() { sigjmp_buf bar; sigsetjmp (bar, 0); ; return 0; } EOF -if { (eval echo configure:10754: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10825: \"$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 @@ -10770,11 +10841,11 @@ rm -f conftest* echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6 -echo "configure:10774: checking whether localtime caches TZ" >&5 +echo "configure:10845: checking whether localtime caches TZ" >&5 if test "$ac_cv_func_tzset" = "yes"; then cat > conftest.$ac_ext < #if STDC_HEADERS @@ -10809,7 +10880,7 @@ exit (0); } EOF -if { (eval echo configure:10813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:10884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then emacs_cv_localtime_cache=no else @@ -10839,9 +10910,9 @@ if test "$HAVE_TIMEVAL" = "yes"; then echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6 -echo "configure:10843: checking whether gettimeofday accepts one or two arguments" >&5 -cat > conftest.$ac_ext <&5 +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10937: \"$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 @@ -10884,19 +10955,19 @@ echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:10888: checking for inline" >&5 +echo "configure:10959: 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:10971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -10933,20 +11004,21 @@ fi -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +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:10940: checking for working alloca.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:10950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11022: \"$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 @@ -10970,10 +11042,10 @@ fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:10974: checking for alloca" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11077: \"$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 @@ -11040,10 +11112,10 @@ echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:11044: checking whether alloca needs Cray hooks" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&6 -echo "configure:11071: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11169: \"$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 @@ -11123,10 +11195,10 @@ fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:11127: checking stack direction for C alloca" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_stack_direction=1 else @@ -11168,21 +11240,22 @@ fi -test -n "$ALLOCA" && extra_objs="$extra_objs $ALLOCA" && if test "$extra_verbose" = "yes"; then + test -n "$ALLOCA" && extra_objs="$extra_objs $ALLOCA" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"$ALLOCA\"" fi +fi ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 -echo "configure:11178: checking for vfork.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11186: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11210,10 +11283,10 @@ fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 -echo "configure:11214: checking for working vfork" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < @@ -11308,7 +11381,7 @@ } } EOF -if { (eval echo configure:11312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_vfork_works=yes else @@ -11334,10 +11407,10 @@ echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 -echo "configure:11338: checking for working strcoll" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < main () @@ -11347,7 +11420,7 @@ strcoll ("123", "456") >= 0); } EOF -if { (eval echo configure:11351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_strcoll_works=yes else @@ -11375,10 +11448,10 @@ for ac_func in getpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:11379: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11478: \"$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 @@ -11429,10 +11502,10 @@ done echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6 -echo "configure:11433: checking whether getpgrp takes no argument" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_getpgrp_void=yes else @@ -11514,10 +11587,10 @@ echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11518: checking for working mmap" >&5 +echo "configure:11591: checking for working mmap" >&5 case "$opsys" in ultrix* ) have_mmap=no ;; *) cat > conftest.$ac_ext < #include @@ -11550,7 +11623,7 @@ return 1; } 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:11627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then have_mmap=yes else @@ -11576,9 +11649,9 @@ 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:11580: checking for M_MMAP_THRESHOLD" >&5 +echo "configure:11653: checking for M_MMAP_THRESHOLD" >&5 cat > conftest.$ac_ext < int main() { @@ -11590,7 +11663,7 @@ ; return 0; } EOF -if { (eval echo configure:11594: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rel_alloc=no; echo "$ac_t""yes" 1>&6; else @@ -11615,15 +11688,15 @@ ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termios.h""... $ac_c" 1>&6 -echo "configure:11619: checking for termios.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11666,15 +11739,15 @@ 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:11670: checking for termio.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11706,10 +11779,10 @@ echo $ac_n "checking for socket""... $ac_c" 1>&6 -echo "configure:11710: checking for socket" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11809: \"$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 @@ -11747,15 +11820,15 @@ 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:11751: checking for netinet/in.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11759: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11772,15 +11845,15 @@ 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:11776: checking for arpa/inet.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11857: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11805,9 +11878,9 @@ } echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6 -echo "configure:11809: checking "for sun_len member in struct sockaddr_un"" >&5 +echo "configure:11882: checking "for sun_len member in struct sockaddr_un"" >&5 cat > conftest.$ac_ext < @@ -11818,7 +11891,7 @@ static struct sockaddr_un x; x.sun_len = 1; ; return 0; } EOF -if { (eval echo configure:11822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11895: \"$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 @@ -11836,9 +11909,9 @@ fi rm -f conftest* echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6 -echo "configure:11840: checking "for ip_mreq struct in netinet/in.h"" >&5 +echo "configure:11913: checking "for ip_mreq struct in netinet/in.h"" >&5 cat > conftest.$ac_ext < @@ -11848,7 +11921,7 @@ static struct ip_mreq x; ; return 0; } EOF -if { (eval echo configure:11852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11925: \"$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 @@ -11879,10 +11952,10 @@ echo $ac_n "checking for msgget""... $ac_c" 1>&6 -echo "configure:11883: checking for msgget" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11982: \"$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 @@ -11920,15 +11993,15 @@ 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:11924: checking for sys/ipc.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11932: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11945,15 +12018,15 @@ 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:11949: checking for sys/msg.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11991,15 +12064,15 @@ ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dirent.h""... $ac_c" 1>&6 -echo "configure:11995: checking for dirent.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12003: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12076: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12026,15 +12099,15 @@ 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:12030: checking for sys/dir.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12067,15 +12140,15 @@ ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for nlist.h""... $ac_c" 1>&6 -echo "configure:12071: checking for nlist.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12079: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12105,22 +12178,22 @@ echo "checking "for sound support"" 1>&6 -echo "configure:12109: checking "for sound support"" >&5 +echo "configure:12182: 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:12116: checking for multimedia/audio_device.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12124: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12197: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12168,12 +12241,12 @@ if test -z "$native_sound_lib"; then echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6 -echo "configure:12172: checking for ALopenport in -laudio" >&5 +echo "configure:12245: 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:12261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12215,12 +12288,12 @@ if test -z "$native_sound_lib"; then echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6 -echo "configure:12219: checking for AOpenAudio in -lAlib" >&5 +echo "configure:12292: 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:12308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12269,15 +12342,15 @@ 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:12273: checking for ${dir}/soundcard.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12281: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12338,15 +12411,15 @@ 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:12342: checking for audio/audiolib.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12350: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12423: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12364,12 +12437,12 @@ echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6 -echo "configure:12368: checking for AuOpenServer in -laudio" >&5 +echo "configure:12441: 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:12457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12419,7 +12492,7 @@ fi libs_x="-laudio $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-laudio\" to \$libs_x"; fi cat > conftest.$ac_ext < EOF @@ -12450,7 +12523,7 @@ # 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:12454: checking for $ac_word" >&5 +echo "configure:12527: 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. @@ -12479,10 +12552,10 @@ 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:12483: checking for esd_play_stream" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12582: \"$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 @@ -12556,7 +12629,7 @@ if test "$with_tty" = "yes" ; then echo "checking for TTY-related features" 1>&6 -echo "configure:12560: checking for TTY-related features" >&5 +echo "configure:12633: checking for TTY-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TTY EOF @@ -12572,12 +12645,12 @@ if test -z "$with_ncurses"; then echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 -echo "configure:12576: checking for tgetent in -lncurses" >&5 +echo "configure:12649: 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:12665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12621,15 +12694,15 @@ ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 -echo "configure:12625: checking for ncurses/curses.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12633: \"$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* @@ -12651,15 +12724,15 @@ ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6 -echo "configure:12655: checking for ncurses/term.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12663: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12736: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12689,15 +12762,15 @@ 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:12693: checking for ncurses/curses.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12732,12 +12805,12 @@ for lib in curses termlib termcap; do echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6 -echo "configure:12736: checking for tgetent in -l$lib" >&5 +echo "configure:12809: 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:12825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12779,12 +12852,12 @@ else echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 -echo "configure:12783: checking for tgetent in -lcurses" >&5 +echo "configure:12856: 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:12872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12813,12 +12886,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 -echo "configure:12817: checking for tgetent in -ltermcap" >&5 +echo "configure:12890: 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:12906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12877,15 +12950,15 @@ 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:12881: checking for gpm.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12889: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12962: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12908,12 +12981,12 @@ } test -z "$with_gpm" && { echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6 -echo "configure:12912: checking for Gpm_Open in -lgpm" >&5 +echo "configure:12985: 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:13001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12974,20 +13047,20 @@ test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no" && echo "checking for database support" 1>&6 -echo "configure:12978: checking for database support" >&5 +echo "configure:13051: 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:12983: checking for ndbm.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13064: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -13017,12 +13090,12 @@ if test "$with_database_gdbm" != "no"; then echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6 -echo "configure:13021: checking for dbm_open in -lgdbm" >&5 +echo "configure:13094: 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:13110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13061,10 +13134,10 @@ if test "$with_database_dbm" != "no"; then echo $ac_n "checking for dbm_open""... $ac_c" 1>&6 -echo "configure:13065: checking for dbm_open" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13164: \"$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 @@ -13106,12 +13179,12 @@ echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 -echo "configure:13110: checking for dbm_open in -ldbm" >&5 +echo "configure:13183: 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:13199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13163,10 +13236,10 @@ if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6 -echo "configure:13167: checking for Berkeley db.h" >&5 +echo "configure:13240: checking for Berkeley db.h" >&5 for header in "db/db.h" "db.h"; do cat > conftest.$ac_ext < @@ -13188,7 +13261,7 @@ ; return 0; } EOF -if { (eval echo configure:13192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* db_h_file="$header"; break else @@ -13204,9 +13277,9 @@ if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6 -echo "configure:13208: checking for Berkeley DB version" >&5 +echo "configure:13281: checking for Berkeley DB version" >&5 cat > conftest.$ac_ext < #if DB_VERSION_MAJOR > 1 @@ -13225,10 +13298,10 @@ rm -f conftest* echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6 -echo "configure:13229: checking for $dbfunc" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13328: \"$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 @@ -13270,12 +13343,12 @@ echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6 -echo "configure:13274: checking for $dbfunc in -ldb" >&5 +echo "configure:13347: 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:13363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13350,12 +13423,12 @@ if test "$with_socks" = "yes"; then echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6 -echo "configure:13354: checking for SOCKSinit in -lsocks" >&5 +echo "configure:13427: 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:13443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13421,22 +13494,22 @@ if test "$with_modules" != "no"; then echo "checking for module support" 1>&6 -echo "configure:13425: checking for module support" >&5 +echo "configure:13498: 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:13432: checking for dlfcn.h" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13513: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -13454,12 +13527,12 @@ echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:13458: checking for dlopen in -ldl" >&5 +echo "configure:13531: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -ldl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13489,12 +13562,12 @@ echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6 -echo "configure:13493: checking for dlopen in -lc" >&5 +echo "configure:13566: checking for dlopen in -lc" >&5 ac_lib_var=`echo c'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure: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 @@ -13544,12 +13617,12 @@ else echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "configure:13548: checking for shl_load in -ldld" >&5 +echo "configure:13621: 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:13637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13587,12 +13660,12 @@ echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6 -echo "configure:13591: checking for dld_init in -ldld" >&5 +echo "configure:13664: 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:13680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13648,7 +13721,7 @@ xealias=$internal_configuration echo "checking how to build dynamic libraries for ${xehost}" 1>&6 -echo "configure:13652: checking how to build dynamic libraries for ${xehost}" >&5 +echo "configure:13725: checking how to build dynamic libraries for ${xehost}" >&5 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts. case "$xehost" in *-*-linux-gnu*) ;; @@ -13676,9 +13749,9 @@ XEGCC=yes else echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:13680: checking checking whether we are using GNU C" >&5 +echo "configure:13753: checking checking whether we are using GNU C" >&5 cat > conftest.$ac_ext <&6 -echo "configure:13704: checking how to produce PIC code" >&5 +echo "configure:13777: checking how to produce PIC code" >&5 wl= can_build_shared=yes @@ -13796,18 +13869,18 @@ # 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:13800: checking if PIC flag ${dll_cflags} really works" >&5 +echo "configure:13873: 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:13884: \"$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 @@ -13838,7 +13911,7 @@ xldf= xcldf= echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6 -echo "configure:13842: checking if C compiler can produce shared libraries" >&5 +echo "configure:13915: checking if C compiler can produce shared libraries" >&5 if test "$XEGCC" = yes; then xcldf="-shared" xldf="-shared" @@ -13889,14 +13962,14 @@ 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:13973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* cc_produces_so=yes else @@ -13921,7 +13994,7 @@ 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:13925: checking for ld used by GCC" >&5 +echo "configure:13998: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. @@ -13946,7 +14019,7 @@ esac else echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:13950: checking for GNU ld" >&5 +echo "configure:14023: checking for GNU ld" >&5 fi if test -z "$LTLD"; then @@ -13984,7 +14057,7 @@ # 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:13988: checking if the linker is GNU ld" >&5 +echo "configure:14061: 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 @@ -14012,7 +14085,7 @@ # 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:14016: checking whether the linker supports shared libraries" >&5 +echo "configure:14089: checking whether the linker supports shared libraries" >&5 dll_ld=$CC dll_ldflags=$LDFLAGS ld_shlibs=yes @@ -14227,10 +14300,10 @@ for ac_func in dlerror _dlerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:14231: checking for $ac_func" >&5 - -cat > conftest.$ac_ext <&5 + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14330: \"$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 @@ -14292,11 +14365,11 @@ fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:14373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else diff -r a8296e22da4e -r 576fb035e263 configure.in --- a/configure.in Mon Aug 13 11:35:05 2007 +0200 +++ b/configure.in Mon Aug 13 11:36:19 2007 +0200 @@ -57,7 +57,7 @@ dnl - non-standard options dnl - suport for extra-verbosity dnl - ordinary libs are handled separately from X libs (might be a mistake) -dnl - various random kludges (e.g. -with-dnet=no +dnl - various random kludges (e.g. -with-dnet=no) dnl PRINT_VAR(var var ...) prints values of shell variables define([PRINT_VAR],[for var in patsubst([$1],[[ @@ -1108,7 +1108,7 @@ *-dec-osf1.2 | *-dec-osf1* ) opsys=decosf1-2 ;; *-dec-osf3.[[2-9]] ) opsys=decosf3-2 ;; *-dec-osf3* ) opsys=decosf3-1 ;; - *-dec-osf4* ) opsys=decosf4-0 ;; + *-dec-osf[[4-9]]* ) opsys=decosf4-0 ;; dnl DEC Ultrix *-*-ultrix[[0-3]].* | *-*-ultrix4.0* ) opsys=bsd4-2 ;; @@ -2710,17 +2710,18 @@ AC_CHECK_HEADERS(X11/Xlocale.h) - dnl remove this - we should avoid checking for specific OS - AC_MSG_CHECKING(for XFree86) - if test -d "/usr/X386/include" -o \ - -f "/etc/XF86Config" -o \ - -f "/etc/X11/XF86Config" -o \ - -f "/usr/X11R6/lib/X11/XF86Config"; then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_XFREE386) - else - AC_MSG_RESULT(no) - fi + dnl XFree86 has a non-standard prototype for this X11R6 function + AC_CHECK_FUNCS(XRegisterIMInstantiateCallback) + AC_MSG_CHECKING(for standard XRegisterIMInstantiateCallback prototype) + AC_TRY_COMPILE([ +#define NeedFunctionPrototypes 1 +#include +extern Bool XRegisterIMInstantiateCallback( + Display*, struct _XrmHashBucketRec*, char*, char*, XIMProc, XPointer*); +], [], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_DEFINE(XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE)]) dnl autodetect -lXmu test -z "$with_xmu" && { AC_CHECK_LIB(Xmu, XmuReadBitmapDataFromFile, @@ -3557,10 +3558,10 @@ AC_CHECK_FUNCS(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 utimes waitpid vsnprintf fsync ftruncate umask) dnl Check for PTY support functions. -dnl getpt is the preferred pty allocation method on glibc systems. -dnl _getpt is the preferred pty allocation method on SGI systems. +dnl getpt is the preferred pty allocation method on glibc systems. +dnl _getpty is the preferred pty allocation method on SGI systems. dnl grantpt, unlockpt, ptsname are defined by Unix98. -AC_CHECK_FUNCS(getpt _getpt grantpt unlockpt ptsname killpg tcgetpgrp) +AC_CHECK_FUNCS(getpt _getpty grantpt unlockpt ptsname killpg tcgetpgrp) dnl openpty is the preferred pty allocation method on BSD and Tru64 systems. dnl openpty might be declared in pty.h or in libutil.h. @@ -3574,10 +3575,10 @@ dnl Check for STREAM support functions. dnl Confusingly, "str" means both "string" and "SysV Streams". -AC_CHECK_HEADERS(sys/stropts.h) -if test "$ac_cv_header_sys_stropts_h" = "yes"; then +AC_CHECK_HEADERS(stropts.h) +if test "$ac_cv_header_stropts_h" = "yes"; then AC_CHECK_FUNCS(isastream) - AC_CHECK_HEADERS(sys/strtio.h) dnl TIOCSIGNAL + AC_CHECK_HEADERS(strtio.h) dnl TIOCSIGNAL fi dnl Use our own realpath always. @@ -3697,8 +3698,11 @@ dnl AC_CHECK_FUNC(alloca, [:], [AC_CHECK_LIB(PW, alloca)]) dnl esac -AC_FUNC_ALLOCA -test -n "$ALLOCA" && XE_ADD_OBJS($ALLOCA) +dnl AC_FUNC_ALLOCA doesn't know about DEC C's #pragma intrinsic(alloca) +if test "$__DECC" != "yes"; then + AC_FUNC_ALLOCA + test -n "$ALLOCA" && XE_ADD_OBJS($ALLOCA) +fi dnl Check whether vfork exists and works correctly. (This does more dnl than just check for its existence.) If so, it defines HAVE_VFORK_H. diff -r a8296e22da4e -r 576fb035e263 etc/NEWS --- a/etc/NEWS Mon Aug 13 11:35:05 2007 +0200 +++ b/etc/NEWS Mon Aug 13 11:36:19 2007 +0200 @@ -255,7 +255,7 @@ modify this behavior. ** Operation progress can be displayed using graphical widgets. -See `lprogress-display' for details. This support has been switched +See `progress-feedback' for details. This support has been switched on by default for font-lock and some web browsing functions. If you do not like this behavior set `progress-feedback-use-echo-area'. diff -r a8296e22da4e -r 576fb035e263 etc/PACKAGES --- a/etc/PACKAGES Mon Aug 13 11:35:05 2007 +0200 +++ b/etc/PACKAGES Mon Aug 13 11:36:19 2007 +0200 @@ -227,7 +227,8 @@ *** os-utils -Miscellaneous single-file O/S utilities. +Miscellaneous single-file O/S utilities, for printing, archiving, +compression, remote shells, etc. *** view-process diff -r a8296e22da4e -r 576fb035e263 lib-src/ChangeLog --- a/lib-src/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/lib-src/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,3 +1,7 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + 2000-09-01 Katsumi Yamaoka * make-po.c (BUFSIZE): Increase value to 32768. diff -r a8296e22da4e -r 576fb035e263 lib-src/make-po.c --- a/lib-src/make-po.c Mon Aug 13 11:35:05 2007 +0200 +++ b/lib-src/make-po.c Mon Aug 13 11:36:19 2007 +0200 @@ -18,7 +18,8 @@ #endif /* #define BUFSIZE 8192 */ -#define BUFSIZE 16384 +/* #define BUFSIZE 16384 */ +#define BUFSIZE 32768 #define NEWSTRING 31 /* Character signalling start of new doc string */ #define LINEEND "\\n" #define ENDSTRING "\"\n" diff -r a8296e22da4e -r 576fb035e263 lib-src/qsort.c --- a/lib-src/qsort.c Mon Aug 13 11:35:05 2007 +0200 +++ b/lib-src/qsort.c Mon Aug 13 11:36:19 2007 +0200 @@ -64,7 +64,7 @@ stack. Assuming a 32-bit integer, this needs only 32 * sizeof (stack_node) == 136 bits. Pretty cheap, actually. - 2. Chose the pivot element using a median-of-three decision tree. + 2. Choose the pivot element using a median-of-three decision tree. This reduces the probability of selecting a bad pivot value and eliminates certain extraneous comparisons. diff -r a8296e22da4e -r 576fb035e263 lisp/ChangeLog --- a/lisp/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,3 +1,378 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-11-13 Katsumi Yamaoka + + * code-cmds.el: Provide the feature. + +2000-07-21 Jan Vroonhof + + * dumped-lisp.el (preloaded-file-list): Load code-cmds.el + + * code-cmds.el: New file + * mule/mule-cmds.el: + * mule/mule-misc.el + (coding-keymap): New keymap. Define coding system keyboard + commands on file-coding builds too. + (coding-system-change-eol-conversion): + (universal-coding-system-argument): + (set-default-coding-systems): + (prefer-coding-system): Moved from mule-cmds.el + (set-buffer-process-coding-system): Moved from mule-misc.el + +2000-09-15 Stephen Carney + + * etags.el (buffer-tag-table-files): Use append instead of nconc. + +2000-11-09 Steve Youngs + + * package-get.el (package-get-download-sites): Add a pre-release + site for experimental packages. + + * auto-autoloads.el: Regenerated. + +2000-08-01 Andy Piper + + * gutter-items.el (buffers-tab-omit-function): reference + buffers-tab-select-visible-buffers. + (buffers-tab-filter-functions): new variable, by default uses + buffers-tab-selection-function and buffers-tab-omit-function. + (select-buffers-tab-buffers-by-mode): invert arguments. + (buffers-tab-select-visible-buffers): new function. Invert calling + of buffers-menu-omit-invisible-buffers. + (buffers-tab-items): rewrite to use + buffers-tab-filter-functions. Rewrite docstring. + (gutter-buffers-tab-extent): delete. + (add-tab-to-gutter): always build a new extent when adding the + tabs. + (update-tab-in-gutter): make gutter dirty when orientation + changes. + +2000-11-07 Martin Buchholz + + * bytecomp.el (byte-compile-defvar-or-defconst): + Only do loadhist recording if defvar form includes a value. + +2000-11-02 Martin Buchholz + + * bytecomp.el (byte-compile-initial-macro-environment): + `eval-when-compile' should not compile its body. + +2000-11-02 Stephen J. Turnbull + + * mule/cyrillic.el: Add Windows 1251 code page encoding (by + Sergey Groznyh in <863diqaygu.fsf@fct.ru>). Fix + some Japanese English. Remove some ancient FSF comments, and + improve docstrings. Use symbols not vectors for tables. + +2000-11-03 Martin Buchholz + + * keymap.el: + (local-key-binding): + (global-key-binding): + Add an optional `accept-defaults' parameter, just like `lookup-key'. + + * lisp.el: + (backward-sexp): Slightly simpler code. + (mark-sexp): Make arg optional, like FSF Emacs. + (forward-list): Slightly simpler code. + (backward-list): Slightly simpler code. + (down-list): Make arg optional, like FSF Emacs. + (up-list): Make arg optional, like FSF Emacs. + (backward-up-list): Make arg optional, like FSF Emacs. + (kill-sexp): Make arg optional, like FSF Emacs. + (backward-kill-sexp): Make arg optional, like FSF Emacs. + + * font-menu.el (font-menu-change-face): + Take continuable errors into account. + + * abbrev.el: + * abbrev.el (clear-abbrev-table): + * abbrev.el (define-abbrev-table): + * abbrev.el (define-abbrev): + * abbrev.el (insert-abbrev-table-description): + * apropos.el (apropos-documentation-check-doc-file): + * apropos.el (apropos-documentation-check-elc-file): + * buff-menu.el (list-buffers): + * buff-menu.el (list-buffers-noselect): + * bytecomp.el (byte-recompile-directory): + * bytecomp.el (batch-byte-compile): + * cl-macs.el (typep): + * code-files.el (find-coding-system-magic-cookie): + * code-files.el (insert-file-contents): + * cus-edit.el (customize-set-variable): + * cus-edit.el (customize-save-variable): + * cus-face.el (custom-set-face-font-size): + * cus-face.el (custom-set-face-update-spec): + * cus-face.el (custom-reset-faces): + * custom.el (custom-check-theme): + * custom.el (copy-upto-last): + * fill.el (canonically-space-region): + * fill.el (fill-paragraph): + * fill.el (fill-region): + * fill.el (find-space-insertable-point): + * fill.el (justify-current-line): + * faces.el (face-spec-update-all-matching): + * faces.el (set-face-stipple): + * files-nomule.el (insert-file-contents): + * files.el (insert-file-contents-literally): + * files.el (hack-local-variables-last-page): + * files.el (basic-save-buffer): + * files.el (insert-directory): + * font-menu.el (font-menu-change-face): + * font.el (font-spatial-to-canonical): + * format.el (format-encode-region): + * format.el (format-insert-file): + * format.el (format-replace-strings): + * gutter.el (set-gutter-element): + * help.el (key-or-menu-binding): + * help.el (describe-bindings): + * help.el (with-syntax-table): + * indent.el (indent-rigidly): + * indent.el (delete-to-left-margin): + * info.el: + * info.el (Info-extract-dir-entry-from): + * info.el (Info-build-dir-anew): + * info.el (Info-rebuild-dir): + * info.el (Info-batch-rebuild-dir): + * info.el (Info-read-subfile): + * info.el (Info-build-node-completions): + * info.el (Info-extract-menu-node-name): + * isearch-mode.el (isearch-range-invisible): + * isearch-mode.el (isearch-restore-invisible-extents): + * itimer.el (itimerp): + * itimer.el (itimer-live-p): + * keymap.el: + * keymap.el (substitute-key-definition): + * keymap.el (read-command-or-command-sexp): + * keymap.el (local-key-binding): + * keymap.el (global-key-binding): + * keymap.el (global-set-key): + * keymap.el (local-set-key): + * ldap.el: + * ldap.el (ldap-add-entries): + * ldap.el (ldap-delete-entries): + * lisp.el (backward-sexp): + * lisp.el (mark-sexp): + * lisp.el (forward-list): + * lisp.el (backward-list): + * lisp.el (down-list): + * lisp.el (backward-up-list): + * lisp.el (up-list): + * lisp.el (kill-sexp): + * lisp.el (backward-kill-sexp): + * menubar.el (add-menu-button): + * menubar.el (add-submenu): + * menubar.el (delete-menu-item): + * menubar.el (relabel-menu-item): + * mouse.el (narrow-window-to-region): + * obsolete.el (define-obsolete-variable-alias): + * obsolete.el (store-substring): + * package-admin.el: + * package-admin.el (package-admin-install-function): + * package-admin.el (package-admin-install-function-mswindows): + * package-admin.el (package-admin-default-install-function): + * package-get.el (package-get-update-base-entries): + * packages.el (packages-load-package-dumped-lisps): + * packages.el (packages-collect-package-dumped-lisps): + * printer.el (generic-print-buffer): + * printer.el (generic-print-region): + * replace.el (occur-mode-mouse-goto): + * replace.el (perform-replace): + * select.el (get-selection-no-error): + * simple.el: + * simple.el (newline): + * simple.el (open-line): + * simple.el (edit-and-eval-command): + * simple.el (goto-line): + * simple.el (undo): + * simple.el (kill-region): + * simple.el (copy-region-as-kill): + * simple.el (kill-ring-save): + * simple.el (set-mark): + * simple.el (next-line): + * simple.el (previous-line): + * simple.el (line-move): + * simple.el (set-goal-column): + * simple.el (comment-region): + * subr.el: + * subr.el (putf): + * syntax.el (modify-syntax-entry): + * syntax.el (map-syntax-table): + * view-less.el (view-file): + * view-less.el (view-buffer): + * view-less.el (view-file-other-window): + * window-xemacs.el (backward-other-window): + * window.el: + * window.el (one-window-p): + * window.el (walk-windows): + * window.el (window-list): + * x-mouse.el (x-mouse-kill): + * x-select.el (x-get-cutbuffer): + * x-select.el (x-store-cutbuffer): + * term/bg-mouse.el (bg-mouse-line-to-center): + * term/sun-mouse.el (window-line-end): + * term/sun-mouse.el (sun-select-region): + * term/sun.el (kill-region-and-unmark): + * mule/mule-category.el: + * mule/mule-category.el (modify-category-entry): + * mule/mule-category.el (char-category-list): + * mule/mule-coding.el (coding-system-force-on-output): + * mule/mule-misc.el (coding-system-put): + Docstring arglist/Texinfo fixes. See man/ChangeLog for details. + +2000-11-02 Stephen J. Turnbull + + * cus-face.el: Typo fixes and tiny clarifications. + * custom.el: ditto + +2000-10-27 Yoshiki Hayashi + + * startup.el (auto-save-list-file-prefix): Moved to fileio.c. + * startup.el (normal-top-level): Setup auto-save-list-file-name + if auto-save-list-file-prefix is non-nil. + +2000-10-25 Yoshiki Hayashi + + * files.el (auto-mode-alist): Allow mixed case suffix for idlwave-mode. + +2000-01-05 Yoshiki Hayashi + + * hyper-apropos.el (hyper-apropos-this-symbol): Don't always + get symbol at point-min. + +2000-10-24 Didier Verna + + * info.el (Info-emacs-info-file-name): defconst it. + * info.el (Info-footnote-tag): defcustom it. + * info.el (Info-no-description-string): ditto. + * info.el (Info-find-node): adapt to new semantics of + 'Info-suffixed-file (don't do the case variants stuff). + * info.el (Info-insert-dir): rewrite the dir file variants code. + * info.el (Info-directory-files): New. Return the list of info + files in a directory. + * info.el (Info-dir-outdated-p): use it. + * info.el (Info-parse-dir-entries): ditto. + * info.el (Info-build-dir-anew): don't restrict to files ending + with a ".info.*" extension. + * info.el (Info-set-mode-line): ditto. + * info.el (Info-read-subfile): adapt to new semantics of + 'Info-suffixed-file (append 'exact argument). + * info.el (Info-all-case-regexp): New. Return a regexp matching a + string independently of the case. + * info.el (Info-suffixed-file): use it (match all possible case + for the file name). + * info.el (Info-insert-file-contents): code cleanup. + * info.el (Info-rebuild-dir): cosmetics only. Fit code in 80 + columns. + * info.el (Info-batch-rebuild-dir): ditto. + * info.el (Info-read-node-name-1): ditto. + * info.el (Info-search): ditto. + * info.el (Info-fontify-node): ditto. + + +2000-10-24 Didier Verna + + * process.el (shell-command): when called from a program, avoid + 'push-mark's "mark-set" message. + +2000-10-15 MIYASHITA Hisashi + + * mule/thai-xtis.el (tis-620): Specify coding-system's ccl-program + by a symbol, not by a vector. + * mule/vietnamese.el (vscii): Likewise. + (viscii): Likewise. + * mule/cyrillic.el (koi8-r): Likewise. + + * mule/chinese.el (chinese-big5-1): Specify charset's ccl-program + by a symbol, not by a vector. + (chinese-big5-2): Likewise. + * mule/ethiopic.el (ethiopic): Likewise. + * mule/vietnamese.el (vietnamese-viscii-lower): Likewise. + (vietnamese-viscii-upper): Likewise. + +2000-10-12 Yoshiki Hayashi + + * files.el (auto-mode-alist): Remove obsolete entry for html3-mode. + +2000-10-13 Yoshiki Hayashi + + * byte-optimize.el (byte-optimize-car): New function. + (byte-optimize-cdr): Ditto. + +2000-10-12 Yoshiki Hayashi + + * byte-optimize.el: Partial synch with FSF 20.7. + Optimize constant concatenation. + Add keymapp as a side effect free function. It is a built-in. + (byte-after-unbind-pos): Remove byte-equal. + +2000-10-13 Gunnar Evermann + + * update-elc-2.el: Quote regexps correctly. + +2000-10-05 MIYASHITA Hisashi + + * mule/mule-ccl.el: Sync up with Emacs 21.0.90. + (ccl-compile): Apply integerp, not integer-or-char-p to + check the type of the buffer magnification + (ccl-compile-write-string): Encode a string with binary + coding system. + (ccl-compile-write-repeat): Likewise. + +2000-09-25 Robert Pluim + + * buff-menu.el: + * bytecomp.el: + * coding.el: + * faces.el: + * files.el: + * fill.el: + * float-sup.el: + * font-lock.el: + * help.el: + * iso8859-1.el: + * loaddefs.el: + * menubar-items.el: + * menubar.el: + * modeline.el: + * msw-font-menu.el: + * paragraphs.el: + * paths.el: + * replace.el: + * simple.el: + * sound.el: + * startup.el: + * version.el: + * x-faces.el: + * x-font-menu.el: + Remove purecopy. + +2000-10-03 Daniel Pittman + + * simple.el (do-auto-fill): Use the function pointer to by + `comment-line-break-function', not `indent-new-comment-line'. This + fixes an issue with cc-mode comment continuation. + +2000-10-11 Martin Buchholz + + * simple.el (turn-on-auto-fill): Add (interactive). + * mwheel.el (mwheel-install): Add (interactive). + * font-lock.el (turn-on-font-lock): Add (interactive). + (turn-off-font-lock): Add (interactive). + +2000-10-03 Karl M. Hegbloom + + * packages.el (packages-special-base-regexp): Add `man'. + +2000-10-08 Adrian Aichner + + * wid-edit.el (widget-specify-active): map over extents in current + buffer like `widget-specify-inactive' does. Mapping over the + inactive extent object does not work since the current extent is + ignored by `map-extents'. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. @@ -72,13 +447,13 @@ * easymenu.el: doc fixes. (easy-menu-do-define): Use backquote. - (easy-menu-change): - (easy-menu-add): + (easy-menu-change): + (easy-menu-add): `when' seems much clearer than `if' here. (easy-menu-remove): - (easy-menu-add-item): - (easy-menu-item-present-p): - (easy-menu-remove-item): + (easy-menu-add-item): + (easy-menu-item-present-p): + (easy-menu-remove-item): Wrap using (when (featurep 'menubar) ...) 2000-09-16 Martin Buchholz @@ -91,7 +466,7 @@ * window.el (save-selected-window): Use backquote. - * bytecomp.el (byte-compile-file-form-defvar-or-defconst): + * bytecomp.el (byte-compile-file-form-defvar-or-defconst): Renamed from `byte-compile-file-form-defvar'. * bytecomp.el (byte-compile-defvar-or-defconst): Only cons onto current-load-list in top-level forms. @@ -107,9 +482,9 @@ Remove unneeded defvar by rearranging order of let* forms. * mule/mule-ccl.el (ccl-get-next-code): - * menubar-items.el (bookmark-menu-filter): - (language-environment-menu-filter): - (tutorials-menu-filter): + * menubar-items.el (bookmark-menu-filter): + (language-environment-menu-filter): + (tutorials-menu-filter): * toolbar-items.el (toolbar-compile): * byte-optimize.el (disassemble-offset): Use (declare (special ...)) instead of `defvar'. @@ -149,13 +524,13 @@ problems. also undo the kludge of using a separate "*Show*" buffer for display when there's a temp-buffer-show-function; we can avoid this by just being a little smarter. - + * dialog-items.el: * dialog-items.el (search-dialog-regexp): New. * dialog-items.el (search-dialog-callback): * dialog-items.el (make-search-dialog): add a regexp option to the dialog and clean up a bit. - + * dialog.el: * dialog.el (yes-or-no-p-dialog-box): * dialog.el (get-dialog-box-response): @@ -168,12 +543,12 @@ modal dialog boxes, giving the standard window-system feedback. (e.g. under windows, clicking on a disabled frame causes a beep and makes the dialog box flash three times.) - + * dragdrop.el: header keyword frobbing. - + * dumped-lisp.el (preloaded-file-list): renamed winnt.el to win32-native.el. - + * faces.el (face-property): * faces.el (set-face-property): * faces.el (frob-face-property): @@ -193,20 +568,20 @@ something that required 'term. (Adrian, now you can use stack-trace- on-error to find the exact place where things are going wrong instead of having to laboriously binary-search your way through.) - + * finder.el (finder-known-keywords): cleaned up -- properly sorted, clarified the meanings of many of the keywords, and added a few -- mswin, gui, content, build, www, user, services. the last two try to distinguish between a package that's used directly by the user, and a package that provides support services to other packages. - + * font-lock.el (lisp-font-lock-keywords-2): update list of lisp control structures to include everything, including new ones i introduced. - + * gutter.el: header keyword frobbing. - + * isearch-mode.el (isearch-ring-adjust1): M-p to recall the most recent isearch element was not doing so! you got the second-most- recent instead. @@ -215,7 +590,7 @@ more menubar cleanups. * lisp-mode.el (with-selected-window): make it indent properly. - + * menubar-items.el (default-menubar): lots of menubar cleanups. rearranged the options menu the most, e.g. splitting up the Keyboard/Mouse menu into a new Editing menu and combining the @@ -230,7 +605,7 @@ better and better ways to group menu items. When we eventually move the options menu to a property sheet, the existing structure will probably be preserved fairly well. - + * minibuf.el (next-history-element): fix problems with pressing down arrow in repeat-complex-command. @@ -239,19 +614,19 @@ added custom variable for controlling the 3d modeline. the corresponding Options item has been present for a long time, but commented out with "fix me!" comments. it's fixed now. - + * obsolete.el (add-menu): remove bogus gettexts. - + * process.el (shell-quote-argument): handle this correctly under Windows native with COMMAND.COM/CMD.EXE. For bash under Windows native, see below. - + * simple.el: * simple.el (display-warning-buffer): Fixed the handling of warning display to eliminate the annoying *Show* buffer, like was done for byte-compiler output above. - + * simple.el (debug-print): New. Simple function for sending debug messages to the console and/or other debug places. @@ -264,7 +639,7 @@ duplicated the entire logic. The new version is smaller, easier to understand, much more robust, and has extended features -- those of replace-match.) - + * window.el: * window.el (with-selected-window): New. An obvious complement to the existing `with-selected-frame' and @@ -280,7 +655,7 @@ version, I tried hard to do what I thought was correct. But more thought is needed, and ideally the volunteer work of people with these configurations that they generally run on.) - + * x-font-menu.el (x-font-menu-font-data): Put in defvar's to fix byte-compiler warnings. @@ -315,7 +690,7 @@ * files.el (auto-mode-alist): Add .spec for RPM. 2000-07-31 Andy Piper - + * gutter-items.el (update-tab-in-gutter): deprecate :properties. 2000-07-31 Yoshiki Hayashi @@ -366,7 +741,7 @@ 2000-07-10 Andy Piper * dialog-items.el: sync with Ben's patch. - + * gutter-items.el (buffers-tab-switch-to-buffer): remove now-bogus comment. (progress-text-glyph): deleted. @@ -512,13 +887,13 @@ * help.el (variable-at-point): * help.el (variable-at-event): New. * help.el (describe-variable): - Major overhaul. - - Make functions and variables be mousable. - - Middle button hyperlinks. + Major overhaul. + - Make functions and variables be mousable. + - Middle button hyperlinks. - New context-menu entries. * keydefs.el: - * keydefs.el (global-map): + * keydefs.el (global-map): New key bindings to move lines up and down. * lisp-mode.el: @@ -542,7 +917,7 @@ * menubar-items.el (popup-buffer-menu): Removed. * menubar-items.el (popup-menubar-menu): Removed. Move to menubar.el. - + * menubar.el: * menubar.el (global-popup-menu): New. * menubar.el (mode-popup-menu): New. @@ -555,10 +930,10 @@ Move non-content functions here. Add support for context menu items on extents. - * minibuf.el (minibuffer-history-uniquify): + * minibuf.el (minibuffer-history-uniquify): Typo fix. - * minibuf.el (read-file-name-1): + * minibuf.el (read-file-name-1): Call new file dialog box if it exists. * minibuf.el (mouse-rfn-setup-vars): @@ -662,14 +1037,14 @@ 2000-07-16 Martin Buchholz - * apropos.el (apropos-documentation-check-doc-file): + * apropos.el (apropos-documentation-check-doc-file): `doc' variable should be let-bound, as was presumably intended. - * cus-edit.el (custom-variable-reset-saved): - (custom-variable-reset-standard): + * cus-edit.el (custom-variable-reset-saved): + (custom-variable-reset-standard): Remove unused variable comment-widget. Twice. - * toolbar.el (toolbar-blank-press-function): + * toolbar.el (toolbar-blank-press-function): Add a real defvar with initial value nil and proper docstring. (press-toolbar-button): No need to check for boundp-ness anymore. @@ -678,7 +1053,7 @@ * info.el (Info-find-node): This function needs an autoload cookie. - * mule/mule-x-init.el (x-use-halfwidth-roman-font): + * mule/mule-x-init.el (x-use-halfwidth-roman-font): Use let* since the second form referred to the first. 2000-07-16 Adrian Aichner @@ -727,19 +1102,19 @@ 2000-07-15 Martin Buchholz - * mule/mule-category.el (defined-category-hashtable): + * mule/mule-category.el (defined-category-hashtable): Use make-hash-table instead of make-hashtable * buff-menu.el: Byte-compiler warning fix. - * isearch-mode.el (isearch-highlight-all-cleanup): + * isearch-mode.el (isearch-highlight-all-cleanup): Remove unused variable `isearch-highlight-all-start'. * etags.el (add-to-tag-completion-table): Byte-compiler warning fix. * itimer.el (itimer-edit-mode): Byte-compiler warning fixes. - * cus-dep.el (Custom-make-dependencies): + * cus-dep.el (Custom-make-dependencies): Add autoload cookie for custom-add-loads to generated custom-load.el. * autoload.el (autoload-package-name): Warning suppression. @@ -747,7 +1122,7 @@ * custom.el: Add autoload for custom-declare-face. Allow `xemacs -no-autoloads -l bytecomp -f batch-byte-compile ...' - * cl.el (cl-hack-byte-compiler): + * cl.el (cl-hack-byte-compiler): Allow `xemacs -no-autoloads -l bytecomp -f batch-byte-compile ...' to work properly. @@ -832,7 +1207,7 @@ only when necessary. 2000-06-30 Charles G Waldman - + * cl-macs.el: fix cl-transform-function-property kludge so that it does not require a random feature. @@ -849,10 +1224,10 @@ * package-ui.el (defgroup pui): Correct a misspelling (pui-toggle-package-delete): Change `seleted' to `selected' - + 2000-06-12 Jan Vroonhof - * package-get.el (package-get-update-base): + * package-get.el (package-get-update-base): (package-get): Use insert-file-contents-literally always. (package-get-maybe-save-index): Force coding system for writing to binary. @@ -953,7 +1328,7 @@ Rewrite deferral code to handle any number of changes, merging them properly. Remove hacked-up code for revert-buffer, now unnecessary. - + * menubar-items.el (default-menubar): In Options->Edit Init File, don't switch to emacs-lisp-mode unless necessary; doing this turns off font-lock. @@ -988,14 +1363,14 @@ * gutter-items.el (raw-append-progress-display): Further fixes. Use set-glyph-image not set-image-instance-property, to fix problems with multiple windows in a frame. - + * menubar-items.el (tutorials-menu-filter): Fix typo. - + * startup.el (early-error-handler): Display message box under windows; otherwise, message will disappear before it can be viewed. - + * update-elc.el: Fix bug in NEEDTODUMP processing. @@ -1023,7 +1398,7 @@ * faces.el (set-face-blinking-p): * faces.el (set-face-reverse-p): doc string changes. - + * glyphs.el: * glyphs.el (make-image-specifier): * glyphs.el (glyph-property): @@ -1039,7 +1414,7 @@ conventions elsewhere in XEmacs and in general is a lot more obvious of a place to look. sometimes the make-foo-specifier function needs to be created in the process. - + * gutter.el: * gutter.el (make-gutter-specifier): New. * gutter.el (make-gutter-size-specifier): New. @@ -1102,7 +1477,7 @@ Restore M-up, M-down to 21.1 state. Put *ward-sentence on C-M-left, C-M-right instead. Define C-M-up, C-M-down to scroll the window without moving point. - + * simple.el: * simple.el (scroll-up-one): New. * simple.el (scroll-down-one): New. @@ -1114,9 +1489,9 @@ 2000-04-29 Martin Buchholz - * dialog.el (yes-or-no-p-dialog-box): + * dialog.el (yes-or-no-p-dialog-box): Fix docstring. - Fix following horrible bug in X11 mode with focus-follows-mouse: + Fix following horrible bug in X11 mode with focus-follows-mouse: 1. Visit two files in two different frames. 2. do File->Revert Buffer in one of those frames. 3. Dialog box appears. @@ -1124,7 +1499,7 @@ frame, then to the dialog box, and click on "Yes". 5. The file contents end up in the *wrong* buffer! Add TODO comment. - + 2000-04-28 Ben Wing * help.el (describe-installation): correct typo introduced @@ -1133,11 +1508,11 @@ * etags.el (buffer-tag-table-list): canonicalize filenames to Unix format so that tag-table-alist searching works under Windows. - + * autoload.el: Bowdlerize the supposedly objectionable words "who couldn't quite manage to cleanly modify batch-update-autoloads". - + * gutter-items.el (set-progress-display-style): * gutter-items.el (search-dialog-callback): * gutter-items.el (make-search-dialog): @@ -1183,7 +1558,7 @@ when quick-building. add commented-out code for profiling loadup. - + * update-elc.el (preloaded-file-list): add bytecomp.el, since it is required in order to build xemacs. @@ -1198,7 +1573,7 @@ * update-elc.el: compute whether any dumped .el or .elc files are newer than the dumped exe, and touch the file ../src/NEEDTODUMP if so. - + * update-elc.el (update-elc-files-to-compile): always change NOBYTECOMPILE in the src directory rather than current dir, so it will work under NT. @@ -1229,21 +1604,21 @@ 2000-04-16 Ben Wing * printer.el: New file. - + * dumped-lisp.el (preloaded-file-list): Declare printer.el. - + * help.el (describe-installation): Fix decoding for Windows. - + * menubar-items.el: * menubar-items.el (default-menubar): * menubar-items.el (tutorials-menu-filter): New. * menubar-items.el (popup-menubar-menu): Add authorship. Redo Help menu and Tutorials filter. - + * menubar.el: Correct comment. - + * modeline.el (modeline-buffer-identification): Correct doc string. - + * simple.el: * simple.el (printing): Removed. * simple.el (printer-name): Removed. @@ -1270,7 +1645,7 @@ (gutter-element-visibility-changed-hook): ditto. (set-gutter-element): ditto. (remove-gutter-element): ditto. - (set-gutter-element-visible-p): ditto. + (set-gutter-element-visible-p): ditto. (gutter-element-visible-p): ditto. (init-gutter): ditto. @@ -1289,9 +1664,9 @@ without constantly being prompted for the tag. * simple.el: Added a number of section headings, to clarify the organization of this file. - * simple.el (activate-region): - * simple.el (region-exists-p): - * simple.el (region-active-p): + * simple.el (activate-region): + * simple.el (region-exists-p): + * simple.el (region-active-p): Moved these three function down to the other side of the case-changing functions, so they join the rest of the region code. @@ -1300,10 +1675,10 @@ * simple.el (generic-print-buffer): New. New functions, a very simple prototype for a unified printing interface. - + * process.el (call-process-internal): Real fix for null BUFFER, other problems with BUFFER specs. - + * menubar-items.el: Fixed up File->Print to use new printing functions. Various corrections and expansions to Grep/Compile menus. @@ -1421,13 +1796,13 @@ (append-progress-display): ditto. 2000-03-20 Jeff Miller - + * lisp/make-docfile.el: call-process-internal is now implemented in process.el. 2000-03-21 Ben Wing - * mule\mule-cmds.el (set-language-info-alist): + * mule\mule-cmds.el (set-language-info-alist): Fix to correspond to new menu arrangement. 2000-03-21 Ben Wing @@ -1443,7 +1818,7 @@ * lisp-mode.el (lisp-interaction-mode-menubar-menu): New. * lisp-mode.el (lisp-interaction-mode): Put back Lisp Interaction menubar for Jan V's sake. - + * simple.el: * simple.el (mark-ring): * simple.el (dont-record-current-mark): New. @@ -1454,7 +1829,7 @@ * simple.el (push-mark): * simple.el (handle-pre-motion-command): Implement scheme for not recording unimportant marks. - + * subr.el: * subr.el (function-allows-args): New. New function function-allows-args. @@ -1574,12 +1949,12 @@ vassoc moved to alist.el. Accelerators added to all menus. Unused bound var new-props removed. - + * keydefs.el: I did a whole lot of rearranging to put things in a more consistent order and fixed a number of cases where key combinations involving up, down, left, right and so on were defined but the corresponding keypad combinations were not - defined. + defined. * lisp-mode.el: * lisp-mode.el (lisp-interaction-mode-popup-menu): @@ -1647,14 +2022,14 @@ b) I combined the top level Tools and Apps menus into a single Tools menu, because the distinction between the two is not obvious, and the items on the menus are not used often enough that - putting some of them onto submenus is a problem. + putting some of them onto submenus is a problem. c) I created two new top level menus called View and Cmds because there were too many items on the File and Edit menus, and I'm going to be adding more items to these menus. In contrast to the Tools menu, the items on these menus may be used quite often during an editing session, and so should be available with fewer - keystrokes. + keystrokes. d) I added a number of options to the options menu, including one for controlling whether the alt key can be used to traverse to @@ -1664,18 +2039,18 @@ options, and various other things. I also did a bit of rearranging, for example, combining the keyboard and mouse options into a single keyboard and mouse submenu to facilitate the - accelerators on that level. + accelerators on that level. e) I changed the variable buffers-menu-format-buffer-line-function to take two arguments instead of one, the second argument being the line number for use in creating an accelerator. I added a hack to support existing functions with one argument (although I - doubt that very many of these exist), for backward compatibility. + doubt that very many of these exist), for backward compatibility. f) I moved the top level mule menu to be a submenu of the edit menu. I think that most of the items on this menu are fairly useless and there are certainly not enough frequently used items - to justify this being its own top level menu. + to justify this being its own top level menu. g) I combined most of the items in big-menubar.el into the main menu. If people think the main menu is too big, it would be possible to @@ -1696,23 +2071,23 @@ a) Fixing the problem where closing the dialog box by clicking on the close button of the window didn't properly exit the - minibuffer. + minibuffer. b) Fixing the problem that if you typed part of a file name, and then clicked on a completion with the mouse, the file was not - correctly selected. + correctly selected. c) Changing the title of the dialog box to reflect the operation being done in accordance with user interface conventions, rather - than the name of the dialog box buffer, which is rather useless. + than the name of the dialog box buffer, which is rather useless. d) Remove the words "possible completions are" which didn't - belong. + belong. e) Fix things so that the completions scroll off the end of the completions windows only to the right, rather than both to the right and down, which is in accordance with Windows user interface - conventions. + conventions. * msw-init.el (init-post-mswindows-win): Added a binding for meta-F4, which is the standard windows binding @@ -1780,7 +2155,7 @@ * simple.el (capitalize-string-as-title): * simple.el (capitalize-region-as-title): New. - + * subr.el (add-hook): * subr.el (make-local-hook): New. diff -r a8296e22da4e -r 576fb035e263 lisp/abbrev.el --- a/lisp/abbrev.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/abbrev.el Mon Aug 13 11:36:19 2007 +0200 @@ -67,38 +67,36 @@ nil) -(defun define-abbrev-table (name defs) - "Define TABNAME (a symbol) as an abbrev table name. +(defun define-abbrev-table (table-name definitions) + "Define TABLE-NAME (a symbol) as an abbrev table name. Define abbrevs in it according to DEFINITIONS, which is a list of elements of the form (ABBREVNAME EXPANSION HOOK USECOUNT)." - (let ((table (and (boundp name) (symbol-value name)))) + (let ((table (and (boundp table-name) (symbol-value table-name)))) (cond ((vectorp table)) ((not table) (setq table (make-abbrev-table)) - (set name table) - (setq abbrev-table-name-list (cons name abbrev-table-name-list))) + (set table-name table) + (setq abbrev-table-name-list (cons table-name abbrev-table-name-list))) (t - (setq table (signal 'wrong-type-argument (list 'vectorp table))) - (set name table))) - (while defs - (apply (function define-abbrev) table (car defs)) - (setq defs (cdr defs))))) + (setq table (wrong-type-argument 'vectorp table)) + (set table-name table))) + (while definitions + (apply (function define-abbrev) table (car definitions)) + (setq definitions (cdr definitions))))) (defun define-abbrev (table name &optional expansion hook count) "Define an abbrev in TABLE named NAME, to expand to EXPANSION or call HOOK. NAME and EXPANSION are strings. Hook is a function or `nil'. To undefine an abbrev, define it with an expansion of `nil'." - (or (not expansion) - (stringp expansion) - (setq expansion (signal 'wrong-type-argument - (list 'stringp expansion)))) - (or (not count) - (integerp count) - (setq count (signal 'wrong-type-argument - (list 'fixnump count)))) - (or (vectorp table) - (setq table (signal 'wrong-type-argument - (list 'vectorp table)))) + (unless (or (null expansion) (stringp expansion)) + (setq expansion (wrong-type-argument 'stringp expansion))) + + (unless (or (null count) (integerp count)) + (setq count (wrong-type-argument 'fixnump count))) + + (unless (vectorp table) + (setq table (wrong-type-argument 'vectorp table))) + (let* ((sym (intern name table)) (oexp (and (boundp sym) (symbol-value sym))) (ohook (and (fboundp sym) (symbol-function sym)))) @@ -207,13 +205,13 @@ -(defun insert-abbrev-table-description (name human-readable) +(defun insert-abbrev-table-description (name &optional human-readable) "Insert before point a full description of abbrev table named NAME. NAME is a symbol whose value is an abbrev table. -If optional 2nd arg HUMAN is non-nil, insert a human-readable description. -Otherwise the description is an expression, -a call to `define-abbrev-table', which would -define the abbrev table NAME exactly as it is currently defined." +If optional second argument HUMAN-READABLE is non-nil, insert a +human-readable description. Otherwise the description is an +expression, a call to `define-abbrev-table', which would define the +abbrev table NAME exactly as it is currently defined." (let ((table (symbol-value name)) (stream (current-buffer))) (message "Abbrev-table %s..." name) @@ -268,7 +266,7 @@ (defun abbrev-mode (arg) "Toggle abbrev mode. -With argument ARG, turn abbrev mode on iff ARG is positive. +With argument ARG, enable abbrev mode if ARG is positive, else disable. In abbrev mode, inserting an abbreviation causes it to expand and be replaced by its expansion." (interactive "P") @@ -391,7 +389,7 @@ (setq save-abbrevs t abbrevs-changed nil)) (defun quietly-read-abbrev-file (&optional file) - "Read abbrev definitions from file written with write-abbrev-file. + "Read abbrev definitions from file written with `write-abbrev-file'. Optional argument FILE is the name of the file to read; it defaults to the value of `abbrev-file-name'. Does not print anything." @@ -460,6 +458,13 @@ (add-abbrev global-abbrev-table "Global" arg)) (defun add-abbrev (table type arg) + "Add an abbreviation to abbrev table TABLE. +TYPE is a string describing in English the kind of abbrev this will be +(typically, \"global\" or \"mode-specific\"); this is used in +prompting the user. ARG is the number of words in the expansion. + +Return the symbol that internally represents the new abbrev, or nil if +the user declines to confirm redefining an existing abbrev." ;; XEmacs change: (let ((exp (abbrev-string-to-be-defined arg)) name) diff -r a8296e22da4e -r 576fb035e263 lisp/apropos.el --- a/lisp/apropos.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/apropos.el Mon Aug 13 11:36:19 2007 +0200 @@ -377,7 +377,7 @@ ;; Finds all documentation related to APROPOS-REGEXP in internal-doc-file-name. (defun apropos-documentation-check-doc-file () - (let (type symbol (sepa 2) sepb beg end doc) + (let (type symbol (sepa 2) sepb start end doc) (insert ?\^_) (backward-char) (insert-file-contents (concat doc-directory internal-doc-file-name)) @@ -390,14 +390,14 @@ (narrow-to-region (point) (1- sepb)) (re-search-forward apropos-regexp nil t)) (progn - (setq beg (match-beginning 0) + (setq start (match-beginning 0) end (point)) (goto-char (1+ sepa)) (or (setq type (if (eq ?F (preceding-char)) 1 ; function documentation 2) ; variable documentation symbol (read) - beg (- beg (point) 1) + start (- start (point) 1) end (- end (point) 1) doc (buffer-substring (1+ (point)) (1- sepb)) apropos-item (assq symbol apropos-accumulator)) @@ -405,32 +405,32 @@ apropos-accumulator (cons apropos-item apropos-accumulator))) (if apropos-match-face - (put-text-property beg end 'face apropos-match-face doc)) + (put-text-property start end 'face apropos-match-face doc)) (setcar (nthcdr type apropos-item) doc))) (setq sepa (goto-char sepb))))) (defun apropos-documentation-check-elc-file (file) (if (member file apropos-files-scanned) nil - (let (symbol doc beg end this-is-a-variable) + (let (symbol doc start end this-is-a-variable) (setq apropos-files-scanned (cons file apropos-files-scanned)) (erase-buffer) (insert-file-contents file) (while (search-forward "\n#@" nil t) ;; Read the comment length, and advance over it. (setq end (read) - beg (1+ (point)) + start (1+ (point)) end (+ (point) end -1)) (forward-char) (if (save-restriction ;; match ^ and $ relative to doc string - (narrow-to-region beg end) + (narrow-to-region start end) (re-search-forward apropos-regexp nil t)) (progn (goto-char (+ end 2)) - (setq doc (buffer-substring beg end) - end (- (match-end 0) beg) - beg (- (match-beginning 0) beg) + (setq doc (buffer-substring start end) + end (- (match-end 0) start) + start (- (match-beginning 0) start) this-is-a-variable (looking-at "(def\\(var\\|const\\) ") symbol (progn (skip-chars-forward "(a-z") @@ -448,7 +448,7 @@ apropos-accumulator (cons apropos-item apropos-accumulator))) (if apropos-match-face - (put-text-property beg end 'face apropos-match-face + (put-text-property start end 'face apropos-match-face doc)) (setcar (nthcdr (if this-is-a-variable 2 1) apropos-item) diff -r a8296e22da4e -r 576fb035e263 lisp/auto-autoloads.el --- a/lisp/auto-autoloads.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/auto-autoloads.el Mon Aug 13 11:36:19 2007 +0200 @@ -131,16 +131,19 @@ ;;;### (autoloads (build-report) "build-report" "lisp/build-report.el") (autoload 'build-report "build-report" "\ -Initializes a fresh mail composition buffer using `compose-mail' -with the contents of XEmacs Installation file and excerpts from XEmacs -make output and errors and leaves point at the beginning of the mail text. - See also -`compose-mail', `mail-user-agent', -`build-report-destination', -`build-report-keep-regexp', -`build-report-delete-regexp', -`build-report-make-output-file' and -`build-report-installation-file'." t nil) +Composes a fresh mail message with the contents of the built XEmacs +Installation file and excerpts from XEmacs make output. +`compose-mail' is used to create the mail message. Point is left at +the beginning of the mail text. You may add some personal notes if +you like and send the report. +See also + `compose-mail', `mail-user-agent', + `build-report-destination', + `build-report-keep-regexp', + `build-report-delete-regexp', + `build-report-make-output-dir', + `build-report-make-output-files', and + `build-report-installation-file'." t nil) ;;;*** @@ -153,8 +156,8 @@ (autoload 'byte-recompile-directory "bytecomp" "\ Recompile every `.el' file in DIRECTORY that needs recompilation. This is if a `.elc' file exists but is older than the `.el' file. -Files in subdirectories of DIRECTORY are processed also unless argument -NORECURSION is non-nil. +Files in subdirectories of DIRECTORY are also processed unless +optional argument NORECURSION is non-nil. If the `.elc' file does not exist, normally the `.el' file is *not* compiled. But a prefix argument (optional second arg) means ask user, @@ -163,7 +166,7 @@ A nonzero prefix argument also means ask about each subdirectory. -If the fourth argument FORCE is non-nil, +If the fourth optional argument FORCE is non-nil, recompile every `.el' file that already has a `.elc' file." t nil) (autoload 'byte-recompile-file "bytecomp" "\ @@ -219,7 +222,7 @@ Use this from the command line, with `-batch'; it won't work in an interactive Emacs. Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"" nil nil) +For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"." nil nil) (autoload 'batch-byte-compile-one-file "bytecomp" "\ Run `byte-compile-file' on a single file remaining on the command line. @@ -595,7 +598,7 @@ If given a prefix (or a COMMENT argument), also prompt for a comment." t nil) (autoload 'customize-set-variable "cus-edit" "\ -Set the default for VARIABLE to VALUE. VALUE is a Lisp object. +Set the default for VARIABLE to VALUE. VALUE is any Lisp object. If VARIABLE has a `custom-set' property, that is used for setting VARIABLE, otherwise `set-default' is used. @@ -730,7 +733,7 @@ (autoload 'custom-set-face-update-spec "cus-face" "\ Customize the FACE for display types matching DISPLAY, merging - in the new items from PLIST" nil nil) + in the new items from PLIST." nil nil) (autoload 'custom-set-faces "cus-face" "\ Initialize faces according to user preferences. @@ -761,7 +764,7 @@ Reset the value of the face to values previously defined. Associate this setting with the 'user' theme. -ARGS is defined as for `custom-theme-reset-faces'" nil nil) +ARGS is defined as for `custom-theme-reset-faces'." nil nil) ;;;*** @@ -1048,7 +1051,7 @@ For example, an element of the first form highlights (if not already highlighted): - \"\\\\\" Discrete occurrences of \"foo\" in the value + \"\\\\\\=\" Discrete occurrences of \"foo\" in the value of the variable `font-lock-keyword-face'. (\"fu\\\\(bar\\\\)\" . 1) Substring \"bar\" within all occurrences of @@ -1067,7 +1070,7 @@ `fubar-match' finds and matches in the value of `fubar-face'. - (\"\\\\\" (0 anchor-face) (\"\\\\\" nil nil (0 item-face))) + (\"\\\\\\=\" (0 anchor-face) (\"\\\\\\=\" nil nil (0 item-face))) -------------- --------------- ------------ --- --- ------------- | | | | | | MATCHER | ANCHOR-MATCHER | +------+ MATCH-HIGHLIGHT @@ -1138,10 +1141,10 @@ See the variable `font-lock-keywords' for customization." t nil) (autoload 'turn-on-font-lock "font-lock" "\ -Unconditionally turn on Font Lock mode." nil nil) +Unconditionally turn on Font Lock mode." t nil) (autoload 'turn-off-font-lock "font-lock" "\ -Unconditionally turn off Font Lock mode." nil nil) +Unconditionally turn off Font Lock mode." t nil) (autoload 'font-lock-fontify-buffer "font-lock" "\ Fontify the current buffer the way `font-lock-mode' would. @@ -1168,7 +1171,7 @@ 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, +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) (autoload 'font-menu-family-constructor "font-menu" nil nil nil) @@ -1306,11 +1309,12 @@ further (recursive) error recovery. TRYFILE is ??" nil nil) (autoload 'Info-batch-rebuild-dir "info" "\ -(Re)build info `dir' files in the directories remaining on the command line. -Use this from the command line, with `-batch'; -it won't work in an interactive Emacs. -Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" nil nil) +(Re)build `dir' files in the directories remaining on the command line. +Use this from the command line, with `-batch', it won't work in an +interactive XEmacs. + +Each file is processed even if an error occurred previously. For example, +invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"." nil nil) (autoload 'Info-goto-node "info" "\ Go to info node named NAME. Give just NODENAME or (FILENAME)NODENAME. @@ -1380,7 +1384,7 @@ ;;;### (autoloads (mwheel-install) "mwheel" "lisp/mwheel.el") (autoload 'mwheel-install "mwheel" "\ -Enable mouse wheel support." nil nil) +Enable mouse wheel support." t nil) ;;;*** @@ -1446,7 +1450,7 @@ be lexically ordered. It is debatable if it makes sense to have more than one version of a package available.") -(defcustom package-get-download-sites '(("xemacs.org" "ftp.xemacs.org" "pub/xemacs/packages") ("crc.ca (Canada)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("ualberta.ca (Canada)" "sunsite.ualberta.ca" "pub/Mirror/xemacs/packages") ("uiuc.edu (United States)" "uiarchive.uiuc.edu" "pub/packages/xemacs/packages") ("unc.edu (United States)" "metalab.unc.edu" "pub/packages/editors/xemacs/packages") ("utk.edu (United States)" "ftp.sunsite.utk.edu" "pub/xemacs/packages") ("unicamp.br (Brazil)" "ftp.unicamp.br" "pub/xemacs/packages") ("tuwien.ac.at (Austria)" "gd.tuwien.ac.at" "editors/xemacs/packages") ("auc.dk (Denmark)" "sunsite.auc.dk" "pub/emacs/xemacs/packages") ("doc.ic.ac.uk (England)" "sunsite.doc.ic.ac.uk" "packages/xemacs/packages") ("funet.fi (Finland)" "ftp.funet.fi" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages") ("cenatls.cena.dgac.fr (France)" "ftp.cenatls.cena.dgac.fr" "Emacs/xemacs/packages") ("pasteur.fr (France)" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("tu-darmstadt.de (Germany)" "ftp.tu-darmstadt.de" "pub/editors/xemacs/packages") ("kfki.hu (Hungary)" "ftp.kfki.hu" "pub/packages/xemacs/packages") ("eunet.ie (Ireland)" "ftp.eunet.ie" "mirrors/ftp.xemacs.org/pub/xemacs/packages") ("uniroma2.it (Italy)" "ftp.uniroma2.it" "unix/misc/dist/XEMACS/packages") ("uio.no (Norway)" "sunsite.uio.no" "pub/xemacs/packages") ("icm.edu.pl (Poland)" "ftp.icm.edu.pl" "pub/unix/editors/xemacs/packages") ("srcc.msu.su (Russia)" "ftp.srcc.msu.su" "mirror/ftp.xemacs.org/packages") ("sunet.se (Sweden)" "ftp.sunet.se" "pub/gnu/xemacs/packages") ("cnlab-switch.ch (Switzerland)" "sunsite.cnlab-switch.ch" "mirror/xemacs/packages") ("aist.go.jp (Japan)" "ring.aist.go.jp" "pub/text/xemacs/packages") ("asahi-net.or.jp (Japan)" "ring.asahi-net.or.jp" "pub/text/xemacs/packages") ("dti.ad.jp (Japan)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") ("jaist.ac.jp (Japan)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages") ("nucba.ac.jp (Japan)" "mirror.nucba.ac.jp" "mirror/xemacs/packages") ("sut.ac.jp (Japan)" "sunsite.sut.ac.jp" "pub/archives/packages/xemacs/packages") ("tsukuba.ac.jp (Japan)" "ftp.netlab.is.tsukuba.ac.jp" "pub/GNU/xemacs/packages") ("kreonet.re.kr (Korea)" "ftp.kreonet.re.kr" "pub/tools/emacs/xemacs/packages") ("nctu.edu.tw (Taiwan)" "coda.nctu.edu.tw" "Editors/xemacs/packages") ("sun.ac.za (South Africa)" "ftp.sun.ac.za" "xemacs/packages") ("isu.net.sa (Saudi Arabia)" "ftp.isu.net.sa" "pub/mirrors/ftp.xemacs.org/packages") ("aarnet.edu.au (Australia)" "mirror.aarnet.edu.au" "pub/xemacs/packages")) "*List of remote sites available for downloading packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site. SITE-NAME\nis the internet address of the download site. DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Package download sites" :type '(repeat (list (string :tag "Name") host-name directory)) :group 'package-get) +(defcustom package-get-download-sites '(("Pre-Releases" "ftp.xemacs.org" "pub/xemacs/beta/experimental/packages") ("xemacs.org" "ftp.xemacs.org" "pub/xemacs/packages") ("crc.ca (Canada)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("ualberta.ca (Canada)" "sunsite.ualberta.ca" "pub/Mirror/xemacs/packages") ("uiuc.edu (United States)" "uiarchive.uiuc.edu" "pub/packages/xemacs/packages") ("unc.edu (United States)" "metalab.unc.edu" "pub/packages/editors/xemacs/packages") ("utk.edu (United States)" "ftp.sunsite.utk.edu" "pub/xemacs/packages") ("unicamp.br (Brazil)" "ftp.unicamp.br" "pub/xemacs/packages") ("tuwien.ac.at (Austria)" "gd.tuwien.ac.at" "editors/xemacs/packages") ("auc.dk (Denmark)" "sunsite.auc.dk" "pub/emacs/xemacs/packages") ("doc.ic.ac.uk (England)" "sunsite.doc.ic.ac.uk" "packages/xemacs/packages") ("funet.fi (Finland)" "ftp.funet.fi" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages") ("cenatls.cena.dgac.fr (France)" "ftp.cenatls.cena.dgac.fr" "Emacs/xemacs/packages") ("pasteur.fr (France)" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("tu-darmstadt.de (Germany)" "ftp.tu-darmstadt.de" "pub/editors/xemacs/packages") ("kfki.hu (Hungary)" "ftp.kfki.hu" "pub/packages/xemacs/packages") ("eunet.ie (Ireland)" "ftp.eunet.ie" "mirrors/ftp.xemacs.org/pub/xemacs/packages") ("uniroma2.it (Italy)" "ftp.uniroma2.it" "unix/misc/dist/XEMACS/packages") ("uio.no (Norway)" "sunsite.uio.no" "pub/xemacs/packages") ("icm.edu.pl (Poland)" "ftp.icm.edu.pl" "pub/unix/editors/xemacs/packages") ("srcc.msu.su (Russia)" "ftp.srcc.msu.su" "mirror/ftp.xemacs.org/packages") ("sunet.se (Sweden)" "ftp.sunet.se" "pub/gnu/xemacs/packages") ("cnlab-switch.ch (Switzerland)" "sunsite.cnlab-switch.ch" "mirror/xemacs/packages") ("aist.go.jp (Japan)" "ring.aist.go.jp" "pub/text/xemacs/packages") ("asahi-net.or.jp (Japan)" "ring.asahi-net.or.jp" "pub/text/xemacs/packages") ("dti.ad.jp (Japan)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") ("jaist.ac.jp (Japan)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages") ("nucba.ac.jp (Japan)" "mirror.nucba.ac.jp" "mirror/xemacs/packages") ("sut.ac.jp (Japan)" "sunsite.sut.ac.jp" "pub/archives/packages/xemacs/packages") ("tsukuba.ac.jp (Japan)" "ftp.netlab.is.tsukuba.ac.jp" "pub/GNU/xemacs/packages") ("kreonet.re.kr (Korea)" "ftp.kreonet.re.kr" "pub/tools/emacs/xemacs/packages") ("nctu.edu.tw (Taiwan)" "coda.nctu.edu.tw" "Editors/xemacs/packages") ("sun.ac.za (South Africa)" "ftp.sun.ac.za" "xemacs/packages") ("isu.net.sa (Saudi Arabia)" "ftp.isu.net.sa" "pub/mirrors/ftp.xemacs.org/packages") ("aarnet.edu.au (Australia)" "mirror.aarnet.edu.au" "pub/xemacs/packages")) "*List of remote sites available for downloading packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site. SITE-NAME\nis the internet address of the download site. DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Package download sites" :type '(repeat (list (string :tag "Name") host-name directory)) :group 'package-get) (autoload 'package-get-download-menu "package-get" "\ Build the `Add Download Site' menu." nil nil) @@ -1763,21 +1767,21 @@ ;;;### (autoloads (ask-user-about-supersession-threat ask-user-about-lock) "userlock" "lisp/userlock.el") (autoload 'ask-user-about-lock "userlock" "\ -Ask user what to do when he wants to edit FILE but it is locked by USER. +Ask user wanting to edit FILENAME, locked by OTHER-USER, what to do. This function has a choice of three things to do: - do (signal 'file-locked (list FILE USER)) + do (signal 'file-locked (list FILENAME OTHER-USER)) to refrain from editing the file return t (grab the lock on the file) return nil (edit the file even though it is locked). -You can rewrite it to use any criterion you like to choose which one to do." nil nil) +You can rewrite it to use any criteria you like to choose which one to do." nil nil) (autoload 'ask-user-about-supersession-threat "userlock" "\ -Ask a user who is about to modify an obsolete buffer what to do. +Ask user who is about to modify an obsolete buffer what to do. This function has two choices: it can return, in which case the modification -of the buffer will proceed, or it can (signal 'file-supersession (file)), +of the buffer will proceed, or it can (signal 'file-supersession (FILENAME)), in which case the proposed buffer modification will not be made. -You can rewrite this to use any criterion you like to choose which one to do. +You can rewrite this to use any criteria you like to choose which one to do. The buffer in question is current when this function is called." nil nil) ;;;*** @@ -1789,13 +1793,13 @@ (defvar view-mode-map (let ((map (copy-keymap view-minor-mode-map))) (set-keymap-name map 'view-mode-map) map)) (autoload 'view-file "view-less" "\ -Find FILE, enter view mode. With prefix arg OTHER-P, use other window." t nil) +Find FILENAME, enter view mode. With prefix arg OTHER-WINDOW-P, use other window." t nil) (autoload 'view-buffer "view-less" "\ -Switch to BUF, enter view mode. With prefix arg use other window." t nil) +Switch to BUFFER, enter view mode. With prefix arg use other window." t nil) (autoload 'view-file-other-window "view-less" "\ -Find FILE in other window, and enter view mode." t nil) +Find FILENAME in other window, and enter view mode." t nil) (autoload 'view-buffer-other-window "view-less" "\ Switch to BUFFER in another window, and enter view mode." t nil) diff -r a8296e22da4e -r 576fb035e263 lisp/buff-menu.el --- a/lisp/buff-menu.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/buff-menu.el Mon Aug 13 11:36:19 2007 +0200 @@ -46,7 +46,7 @@ ;; Based on FSF code dating back to 1985. ;;; Code: - + ;;;Trying to preserve the old window configuration works well in ;;;simple scenarios, when you enter the buffer menu, use it, and exit it. ;;;But it does strange things when you switch back to the buffer list buffer @@ -321,7 +321,7 @@ in the selected frame." (interactive) (let ((buff (Buffer-menu-buffer t)) - (menu (current-buffer)) + (menu (current-buffer)) (others ()) tem) (goto-char (point-min)) @@ -484,8 +484,8 @@ ;; XEmacs (defvar list-buffers-header-line - (purecopy (concat " MR Buffer Size Mode File\n" - " -- ------ ---- ---- ----\n"))) + (concat " MR Buffer Size Mode File\n" + " -- ------ ---- ---- ----\n")) ;; XEmacs (defvar list-buffers-identification 'default-list-buffers-identification @@ -567,7 +567,7 @@ (progn (setq current (point)) ?\.) ?\ )) (insert (if (buffer-modified-p buffer) - ?\* + ?\* ?\ )) (insert (if ro ?\% @@ -604,7 +604,7 @@ "Display a list of names of existing buffers. The list is displayed in a buffer named `*Buffer List*'. Note that buffers with names starting with spaces are omitted. -Non-null optional arg FILES-ONLY means mention only file buffers. +Non-nil optional arg FILES-ONLY means mention only file buffers. The M column contains a * for buffers that are modified. The R column contains a % for buffers that are read-only." @@ -616,7 +616,7 @@ "Create and return a buffer with a list of names of existing buffers. The buffer is named `*Buffer List*'. Note that buffers with names starting with spaces are omitted. -Non-null optional arg FILES-ONLY means mention only file buffers. +Non-nil optional arg FILES-ONLY means mention only file buffers. The M column contains a * for buffers that are modified. The R column contains a % for buffers that are read-only." diff -r a8296e22da4e -r 576fb035e263 lisp/byte-optimize.el --- a/lisp/byte-optimize.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/byte-optimize.el Mon Aug 13 11:36:19 2007 +0200 @@ -23,7 +23,7 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. -;;; Synched up with: FSF 19.30. +;;; Synched up with: FSF 20.7. ;;; Commentary: @@ -177,13 +177,13 @@ ;;(disassemble #'(lambda (x) (eq (if (point) 'a 'b) 'c))) ;;(disassemble #'(lambda (x) (if (point) (eq 'a 'c) (eq 'b 'c)))) -;; (car (cons A B)) -> (progn B A) +;; (car (cons A B)) -> (prog1 A B) ;;(disassemble #'(lambda (x) (car (cons (foo) 42)))) ;; (cdr (cons A B)) -> (progn A B) ;;(disassemble #'(lambda (x) (cdr (cons 42 (foo))))) -;; (car (list A B ...)) -> (progn B ... A) +;; (car (list A B ...)) -> (prog1 A ... B) ;;(disassemble #'(lambda (x) (car (list (foo) 42 (bar))))) ;; (cdr (list A B ...)) -> (progn A (list B ...)) @@ -861,6 +861,44 @@ (if (= 1 (length (cdr form))) "" "s")) form)) +(defun byte-optimize-car (form) + (let ((arg (cadr form))) + (cond + ((and (byte-compile-trueconstp arg) + (not (and (consp arg) + (eq (car arg) 'quote) + (listp (cadr arg))))) + (byte-compile-warn + "taking car of a constant: %s" arg) + form) + ((and (eq (car-safe arg) 'cons) + (eq (length arg) 3)) + `(prog1 ,(nth 1 arg) ,(nth 2 arg))) + ((eq (car-safe arg) 'list) + `(prog1 ,@(cdr arg))) + (t + (byte-optimize-predicate form))))) + +(defun byte-optimize-cdr (form) + (let ((arg (cadr form))) + (cond + ((and (byte-compile-trueconstp arg) + (not (and (consp arg) + (eq (car arg) 'quote) + (listp (cadr arg))))) + (byte-compile-warn + "taking cdr of a constant: %s" arg) + form) + ((and (eq (car-safe arg) 'cons) + (eq (length arg) 3)) + `(progn ,(nth 1 arg) ,(nth 2 arg))) + ((eq (car-safe arg) 'list) + (if (> (length arg) 2) + `(progn ,(cadr arg) (list ,@(cddr arg))) + (cadr arg))) + (t + (byte-optimize-predicate form))))) + (put 'identity 'byte-optimizer 'byte-optimize-identity) (put '+ 'byte-optimizer 'byte-optimize-plus) @@ -899,8 +937,8 @@ (put 'logxor 'byte-optimizer 'byte-optimize-logmumble) (put 'lognot 'byte-optimizer 'byte-optimize-predicate) -(put 'car 'byte-optimizer 'byte-optimize-predicate) -(put 'cdr 'byte-optimizer 'byte-optimize-predicate) +(put 'car 'byte-optimizer 'byte-optimize-car) +(put 'cdr 'byte-optimizer 'byte-optimize-cdr) (put 'car-safe 'byte-optimizer 'byte-optimize-predicate) (put 'cdr-safe 'byte-optimizer 'byte-optimize-predicate) @@ -1111,6 +1149,18 @@ (while (>= (setq count (1- count)) 0) (setq form (list 'cdr form))) form))) + +(put 'concat 'byte-optimizer 'byte-optimize-concat) +(defun byte-optimize-concat (form) + (let ((args (cdr form)) + (constant t)) + (while (and args constant) + (or (byte-compile-constp (car args)) + (setq constant nil)) + (setq args (cdr args))) + (if constant + (eval form) + form))) ;;; enumerating those functions which need not be called if the returned ;;; value is not used. That is, something like @@ -1181,8 +1231,7 @@ hash-table-p identity ignore integerp integer-or-marker-p interactive-p invocation-directory invocation-name - ;; keymapp may autoload in XEmacs, so not on this list! - list listp + keymapp list listp make-marker mark mark-marker markerp memory-limit minibuffer-window ;; mouse-movement-p not in XEmacs natnump nlistp not null number-or-marker-p numberp @@ -1372,11 +1421,14 @@ (defconst byte-after-unbind-ops '(byte-constant byte-dup byte-symbolp byte-consp byte-stringp byte-listp byte-numberp byte-integerp - byte-eq byte-equal byte-not + byte-eq byte-not byte-cons byte-list1 byte-list2 ; byte-list3 byte-list4 byte-interactive-p) ;; How about other side-effect-free-ops? Is it safe to move an ;; error invocation (such as from nth) out of an unwind-protect? + ;; No, it is not, because the unwind-protect forms can alter + ;; the inside of the object to which nth would apply. + ;; For the same reason, byte-equal was deleted from this list. "Byte-codes that can be moved past an unbind.") (defconst byte-compile-side-effect-and-error-free-ops diff -r a8296e22da4e -r 576fb035e263 lisp/bytecomp.el --- a/lisp/bytecomp.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/bytecomp.el Mon Aug 13 11:36:19 2007 +0200 @@ -10,7 +10,7 @@ ;; Richard Stallman ;; Keywords: internal lisp -(defconst byte-compile-version (purecopy "2.27 XEmacs; 2000-09-12.")) +(defconst byte-compile-version "2.27 XEmacs; 2000-09-12.") ;; This file is part of XEmacs. @@ -121,7 +121,7 @@ ;;; generate .elc files which can be loaded into ;;; generic emacs 19. ;;; emacs-lisp-file-regexp Regexp for the extension of source-files; -;;; see also the function byte-compile-dest-file. +;;; see also the function `byte-compile-dest-file'. ;;; byte-compile-overwrite-file If nil, delete old .elc files before saving. ;;; ;;; Most of the above parameters can also be set on a file-by-file basis; see @@ -145,7 +145,7 @@ ;;; This is, in fact, exactly what `defsubst' does. To make a function no ;;; longer be inline, you must use `proclaim-notinline'. Beware that if ;;; you define a function with `defsubst' and later redefine it with -;;; `defun', it will still be open-coded until you use proclaim-notinline. +;;; `defun', it will still be open-coded until you use `proclaim-notinline'. ;;; ;;; o You can also open-code one particular call to a function without ;;; open-coding all calls. Use the 'inline' form to do this, like so: @@ -164,20 +164,20 @@ ;;; ;;; o Forms like ((lambda ...) ...) are open-coded. ;;; -;;; o The form `eval-when-compile' is like progn, except that the body +;;; o The form `eval-when-compile' is like `progn', except that the body ;;; is evaluated at compile-time. When it appears at top-level, this ;;; is analogous to the Common Lisp idiom (eval-when (compile) ...). ;;; When it does not appear at top-level, it is similar to the ;;; Common Lisp #. reader macro (but not in interpreted code). ;;; -;;; o The form `eval-and-compile' is similar to eval-when-compile, but -;;; the whole form is evalled both at compile-time and at run-time. +;;; o The form `eval-and-compile' is similar to `eval-when-compile', +;;; but the whole form is evalled both at compile-time and at run-time. ;;; ;;; o The command M-x byte-compile-and-load-file does what you'd think. ;;; -;;; o The command compile-defun is analogous to eval-defun. +;;; o The command `compile-defun' is analogous to `eval-defun'. ;;; -;;; o If you run byte-compile-file on a filename which is visited in a +;;; o If you run `byte-compile-file' on a filename which is visited in a ;;; buffer, and that buffer is modified, you are asked whether you want ;;; to save the buffer before compiling. ;;; @@ -229,7 +229,7 @@ (defmacro byte-compile-version-cond (cond) cond))) ) -(defvar emacs-lisp-file-regexp (purecopy "\\.el$") +(defvar emacs-lisp-file-regexp "\\.el$" "*Regexp which matches Emacs Lisp source files. You may want to redefine `byte-compile-dest-file' if you change this.") @@ -444,15 +444,13 @@ (defvar byte-compiler-error-flag) (defconst byte-compile-initial-macro-environment - (purecopy - '((byte-compiler-options . (lambda (&rest forms) - (apply 'byte-compiler-options-handler forms))) - (eval-when-compile . (lambda (&rest body) - (list 'quote (eval (byte-compile-top-level - (cons 'progn body)))))) - (eval-and-compile . (lambda (&rest body) - (eval (cons 'progn body)) - (cons 'progn body))))) + '((byte-compiler-options . (lambda (&rest forms) + (apply 'byte-compiler-options-handler forms))) + (eval-when-compile . (lambda (&rest body) + (list 'quote (eval (cons 'progn body))))) + (eval-and-compile . (lambda (&rest body) + (eval (cons 'progn body)) + (cons 'progn body)))) "The default macro-environment passed to macroexpand by the compiler. Placing a macro here will cause a macro to have different semantics when expanded by the compiler as when expanded by the interpreter.") @@ -716,18 +714,18 @@ (defconst byte-constant-limit 64 "Exclusive maximum index usable in the `byte-constant' opcode.") -(defconst byte-goto-ops (purecopy - '(byte-goto byte-goto-if-nil byte-goto-if-not-nil - byte-goto-if-nil-else-pop - byte-goto-if-not-nil-else-pop)) +(defconst byte-goto-ops + '(byte-goto byte-goto-if-nil byte-goto-if-not-nil + byte-goto-if-nil-else-pop + byte-goto-if-not-nil-else-pop) "List of byte-codes whose offset is a pc.") (defconst byte-goto-always-pop-ops - (purecopy '(byte-goto-if-nil byte-goto-if-not-nil))) + '(byte-goto-if-nil byte-goto-if-not-nil)) (defconst byte-rel-goto-ops - (purecopy '(byte-rel-goto byte-rel-goto-if-nil byte-rel-goto-if-not-nil - byte-rel-goto-if-nil-else-pop byte-rel-goto-if-not-nil-else-pop)) + '(byte-rel-goto byte-rel-goto-if-nil byte-rel-goto-if-not-nil + byte-rel-goto-if-nil-else-pop byte-rel-goto-if-not-nil-else-pop) "byte-codes for relative jumps.") (byte-extrude-byte-code-vectors) @@ -997,7 +995,7 @@ '(emacs19) '(emacs20))))) ;; now we can copy it. -(setq byte-compiler-legal-options (purecopy byte-compiler-legal-options)) +(setq byte-compiler-legal-options byte-compiler-legal-options) (defun byte-compiler-options-handler (&rest args) (let (key val desc choices) @@ -1229,7 +1227,10 @@ (setq var nil)) (setq rest (cdr rest))) ;; if var is nil at this point, it's a defvar in this file. - (not var)))) + (not var)) + ;; Perhaps (eval-when-compile (defvar foo)) + (and (boundp 'current-load-list) + (memq var current-load-list)))) ;;; If we have compiled bindings of variables which have no referents, warn. @@ -1371,8 +1372,8 @@ (defun byte-recompile-directory (directory &optional arg norecursion force) "Recompile every `.el' file in DIRECTORY that needs recompilation. This is if a `.elc' file exists but is older than the `.el' file. -Files in subdirectories of DIRECTORY are processed also unless argument -NORECURSION is non-nil. +Files in subdirectories of DIRECTORY are also processed unless +optional argument NORECURSION is non-nil. If the `.elc' file does not exist, normally the `.el' file is *not* compiled. But a prefix argument (optional second arg) means ask user, @@ -1381,7 +1382,7 @@ A nonzero prefix argument also means ask about each subdirectory. -If the fourth argument FORCE is non-nil, +If the fourth optional argument FORCE is non-nil, recompile every `.el' file that already has a `.elc' file." (interactive "DByte recompile directory: \nP") (if arg @@ -2679,6 +2680,8 @@ (if (eq base-op 'byte-varset) byte-compile-assigned-bit byte-compile-referenced-bit))))) + (and (boundp 'current-load-list) + (memq var current-load-list)) (if (eq base-op 'byte-varset) (or (memq var byte-compile-free-assignments) (progn @@ -3769,8 +3772,9 @@ (byte-compile-body-do-effect (list ;; Put the defined variable in this library's load-history entry - ;; just as a real defvar would, but only in top-level forms. - (when (null byte-compile-current-form) + ;; just as a real defvar would, but only in top-level forms with values. + (when (and (> (length form) 2) + (null byte-compile-current-form)) `(push ',var current-load-list)) (when (> (length form) 3) (when (and string (not (stringp string))) @@ -4048,7 +4052,7 @@ Use this from the command line, with `-batch'; it won't work in an interactive Emacs. Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"" +For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"." ;; command-line-args-left is what is left of the command line (from ;; startup.el) (defvar command-line-args-left) ;Avoid 'free variable' warning diff -r a8296e22da4e -r 576fb035e263 lisp/cl-macs.el --- a/lisp/cl-macs.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/cl-macs.el Mon Aug 13 11:36:19 2007 +0200 @@ -2434,10 +2434,10 @@ (t (error "Bad type spec: %s" type))))) ;;;###autoload -(defun typep (val type) ; See compiler macro below. +(defun typep (object type) ; See compiler macro below. "Check that OBJECT is of type TYPE. TYPE is a Common Lisp-style type specifier." - (eval (cl-make-type-test 'val type))) + (eval (cl-make-type-test 'object type))) ;;;###autoload (defmacro check-type (form type &optional string) diff -r a8296e22da4e -r 576fb035e263 lisp/code-cmds.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/code-cmds.el Mon Aug 13 11:36:19 2007 +0200 @@ -0,0 +1,204 @@ +;;; code-cmds.el --- Commands for manipulating coding systems.. + +;; Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN. +;; Licensed to the Free Software Foundation. +;; Copyright (C) 2000 Free Software Foundation +;; Copyright (C) 1997 MORIOKA Tomohiko + + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;; 02111-1307, USA. + +;; +;; This code defines the keybindings and utility commands for the +;; user to manipulate coding systems. +;; This code used to be in mule-cmds.el which now only needs the +;; additional bindings/commands that are avaible on the real mule. + + +;;; Code: + +;;; Coding related key bindings and menus. + +(defvar coding-keymap (make-sparse-keymap "Mule/Conding") + "Keymap for Mule and Coding cystem specific commands.") + +;; Keep "C-x C-m ..." for mule specific commands. +(define-key ctl-x-map "\C-m" coding-keymap) + +(define-key coding-keymap "f" 'set-buffer-file-coding-system) +(define-key coding-keymap "F" 'set-default-buffer-file-coding-system) ; XEmacs +(define-key coding-keymap "t" 'set-terminal-coding-system) +(define-key coding-keymap "p" 'set-buffer-process-coding-system) +;(define-key coding-keymap "x" 'set-selection-coding-system) +;(define-key coding-keymap "X" 'set-next-selection-coding-system) +(define-key coding-keymap "c" 'universal-coding-system-argument) +;;(define-key coding-keymap "c" 'list-coding-system-briefly) ; XEmacs +;;(define-key coding-keymap "C" 'describe-coding-system) ; XEmacs + + +(defun coding-system-change-eol-conversion (coding-system eol-type) + "Return a coding system which differs from CODING-SYSTEM in eol conversion. +The returned coding system converts end-of-line by EOL-TYPE +but text as the same way as CODING-SYSTEM. +EOL-TYPE should be `lf', `crlf', `cr' or nil. +If EOL-TYPE is nil, the returned coding system detects +how end-of-line is formatted automatically while decoding. + +EOL-TYPE can be specified by an symbol `unix', `dos' or `mac'. +They means `lf', `crlf', and `cr' respectively." + (if (symbolp eol-type) + (setq eol-type (cond ((or (eq eol-type 'unix) + (eq eol-type 'lf)) + 'eol-lf) + ((or (eq eol-type 'dos) + (eq eol-type 'crlf)) + 'eol-crlf) + ((or (eq eol-type 'mac) + (eq eol-type 'cr)) + 'eol-cr) + (t eol-type)))) + (let ((orig-eol-type (coding-system-eol-type coding-system))) + (if (null orig-eol-type) + (if (not eol-type) + coding-system + (coding-system-property coding-system eol-type)) + (let ((base (coding-system-base coding-system))) + (if (not eol-type) + base + (if (= eol-type orig-eol-type) + coding-system + (setq orig-eol-type (coding-system-eol-type base)) + (if (null orig-eol-type) + (coding-system-property base eol-type)))))))) + + +(defun universal-coding-system-argument () + "Execute an I/O command using the specified coding system." + (interactive) + (let* ((default (and buffer-file-coding-system + (not (eq (coding-system-type buffer-file-coding-system) + t)) + (coding-system-name buffer-file-coding-system))) + (coding-system + (read-coding-system + (if default + (format "Coding system for following command (default, %s): " + default) + "Coding system for following command: ") + default)) + (keyseq (read-key-sequence + (format "Command to execute with %s:" coding-system))) + (cmd (key-binding keyseq))) + (let ((coding-system-for-read coding-system) + (coding-system-for-write coding-system)) + (message "") + (call-interactively cmd)))) + +(defun set-default-coding-systems (coding-system) + "Set default value of various coding systems to CODING-SYSTEM. +This sets the following coding systems: + o coding system of a newly created buffer + o default coding system for terminal output + o default coding system for keyboard input + o default coding system for subprocess I/O + o default coding system for converting file names." + (check-coding-system coding-system) + ;;(setq-default buffer-file-coding-system coding-system) + (set-default-buffer-file-coding-system coding-system) + ;; (if default-enable-multibyte-characters + ;; (setq default-file-name-coding-system coding-system)) + ;; If coding-system is nil, honor that on MS-DOS as well, so + ;; that they could reset the terminal coding system. + ;; (unless (and (eq window-system 'pc) coding-system) + ;; (setq default-terminal-coding-system coding-system)) + (set-terminal-coding-system coding-system) + ;;(setq default-keyboard-coding-system coding-system) + (set-keyboard-coding-system coding-system) + ;;(setq default-process-coding-system (cons coding-system coding-system)) + ;; Refer to coding-system-for-read and coding-system-for-write + ;; so that C-x RET c works. + (add-hook 'comint-exec-hook + `(lambda () + (let ((proc (get-buffer-process (current-buffer)))) + (set-process-input-coding-system + proc (or coding-system-for-read ',coding-system)) + (set-process-output-coding-system + proc (or coding-system-for-write ',coding-system)))) + 'append) + (setq file-name-coding-system coding-system)) + +(defun prefer-coding-system (coding-system) + "Add CODING-SYSTEM at the front of the priority list for automatic detection. +This also sets the following coding systems: + o coding system of a newly created buffer + o default coding system for terminal output + o default coding system for keyboard input + o default coding system for converting file names. + +If CODING-SYSTEM specifies a certain type of EOL conversion, the coding +systems set by this function will use that type of EOL conversion. + +This command does not change the default value of terminal coding system +for MS-DOS terminal, because DOS terminals only support a single coding +system, and Emacs automatically sets the default to that coding system at +startup." + (interactive "zPrefer coding system: ") + (if (not (and coding-system (find-coding-system coding-system))) + (error "Invalid coding system `%s'" coding-system)) + (let ((coding-category (coding-system-category coding-system)) + (base (coding-system-base coding-system)) + (eol-type (coding-system-eol-type coding-system))) + (if (not coding-category) + ;; CODING-SYSTEM is no-conversion or undecided. + (error "Can't prefer the coding system `%s'" coding-system)) + (set-coding-category-system coding-category (or base coding-system)) + ;; (update-coding-systems-internal) + (or (eq coding-category (car (coding-category-list))) + ;; We must change the order. + (set-coding-priority-list (list coding-category))) + (if (and base (interactive-p)) + (message "Highest priority is set to %s (base of %s)" + base coding-system)) + ;; If they asked for specific EOL conversion, honor that. + (if (memq eol-type '(lf crlf mac)) + (setq coding-system + (coding-system-change-eol-conversion base eol-type)) + (setq coding-system base)) + (set-default-coding-systems coding-system))) + +;;; Commands + +(defun set-buffer-process-coding-system (decoding encoding) + "Set coding systems for the process associated with the current buffer. +DECODING is the coding system to be used to decode input from the process, +ENCODING is the coding system to be used to encode output to the process. + +For a list of possible values of CODING-SYSTEM, use \\[list-coding-systems]." + (interactive + "zCoding-system for process input: \nzCoding-system for process output: ") + (let ((proc (get-buffer-process (current-buffer)))) + (if (null proc) + (error "no process") + (check-coding-system decoding) + (check-coding-system encoding) + (set-process-coding-system proc decoding encoding))) + (force-mode-line-update)) + +(provide 'code-cmds) + +;;; code-cmds.el ends here diff -r a8296e22da4e -r 576fb035e263 lisp/code-files.el --- a/lisp/code-files.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/code-files.el Mon Aug 13 11:36:19 2007 +0200 @@ -17,7 +17,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -205,16 +205,16 @@ ;... (defun find-coding-system-magic-cookie () - "Look for the coding-system magic cookie in the current buffer.\n" -"The coding-system magic cookie is the exact string\n" -"\";;;###coding system: \" followed by a valid coding system symbol,\n" -"somewhere within the first 3000 characters of the file. If found,\n" -"the coding system symbol is returned; otherwise nil is returned.\n" -"Note that it is extremely unlikely that such a string would occur\n" -"coincidentally as the result of encoding some characters in a non-ASCII\n" -"charset, and that the spaces make it even less likely since the space\n" -"character is not a valid octet in any ISO 2022 encoding of most non-ASCII\n" -"charsets." + "Look for the coding-system magic cookie in the current buffer. +The coding-system magic cookie is the exact string +\";;;###coding system: \" followed by a valid coding system symbol, +somewhere within the first 3000 characters of the file. If found, +the coding system symbol is returned; otherwise nil is returned. +Note that it is extremely unlikely that such a string would occur +coincidentally as the result of encoding some characters in a non-ASCII +charset, and that the spaces make it even less likely since the space +character is not a valid octet in any ISO 2022 encoding of most non-ASCII +charsets." (save-excursion (goto-char (point-min)) (or (and (looking-at @@ -353,7 +353,7 @@ a cons of absolute pathname and length of data inserted (the same thing as will be returned from `insert-file-contents').") -(defun insert-file-contents (filename &optional visit beg end replace) +(defun insert-file-contents (filename &optional visit start end replace) "Insert contents of file FILENAME after point. Returns list of absolute file name and length of data inserted. If second argument VISIT is non-nil, the buffer's visited filename @@ -361,9 +361,9 @@ If visiting and the file does not exist, visiting is completed before the error is signaled. -The optional third and fourth arguments BEG and END +The optional third and fourth arguments START and END specify what portion of the file to insert. -If VISIT is non-nil, BEG and END must be nil. +If VISIT is non-nil, START and END must be nil. If optional fifth argument REPLACE is non-nil, it means replace the current buffer contents (in the accessible portion) with the file contents. This is better than simply deleting and inserting @@ -416,7 +416,7 @@ coding-system) (setq coding-system 'undecided))) (setq return-val - (insert-file-contents-internal filename visit beg end + (insert-file-contents-internal filename visit start end replace coding-system ;; store here! 'used-codesys)) diff -r a8296e22da4e -r 576fb035e263 lisp/code-process.el --- a/lisp/code-process.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/code-process.el Mon Aug 13 11:36:19 2007 +0200 @@ -195,7 +195,7 @@ (defun open-network-stream (name buffer host service &optional protocol) "Open a TCP connection for a service to a host. -Return a subprocess-object to represent the connection. +Return a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER HOST SERVICE. NAME is name for process. It is modified if necessary to make it unique. diff -r a8296e22da4e -r 576fb035e263 lisp/coding.el --- a/lisp/coding.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/coding.el Mon Aug 13 11:36:19 2007 +0200 @@ -38,9 +38,9 @@ ;; override the default value defined in loaddefs.el. (setq-default modeline-format - (cons (purecopy "") - (cons 'modeline-multibyte-status - (cdr modeline-format)))) + (cons "" + (cons 'modeline-multibyte-status + (cdr modeline-format)))) (defun modify-coding-system-alist (target-type regexp coding-system) "Modify one of look up tables for finding a coding system on I/O operation. diff -r a8296e22da4e -r 576fb035e263 lisp/cus-edit.el --- a/lisp/cus-edit.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/cus-edit.el Mon Aug 13 11:36:19 2007 +0200 @@ -682,8 +682,8 @@ (put var 'variable-comment comment)))) ;;;###autoload -(defun customize-set-variable (var val &optional comment) - "Set the default for VARIABLE to VALUE. VALUE is a Lisp object. +(defun customize-set-variable (variable value &optional comment) + "Set the default for VARIABLE to VALUE. VALUE is any Lisp object. If VARIABLE has a `custom-set' property, that is used for setting VARIABLE, otherwise `set-default' is used. @@ -701,18 +701,18 @@ (interactive (custom-prompt-variable "Set variable: " "Set customized value for %s to: " current-prefix-arg)) - (funcall (or (get var 'custom-set) 'set-default) var val) - (put var 'customized-value (list (custom-quote val))) + (funcall (or (get variable 'custom-set) 'set-default) variable value) + (put variable 'customized-value (list (custom-quote value))) (cond ((string= comment "") - (put var 'variable-comment nil) - (put var 'customized-variable-comment nil)) + (put variable 'variable-comment nil) + (put variable 'customized-variable-comment nil)) (comment - (put var 'variable-comment comment) - (put var 'customized-variable-comment comment)))) + (put variable 'variable-comment comment) + (put variable 'customized-variable-comment comment)))) ;;;###autoload -(defun customize-save-variable (var val &optional comment) +(defun customize-save-variable (variable value &optional comment) "Set the default for VARIABLE to VALUE, and save it for future sessions. If VARIABLE has a `custom-set' property, that is used for setting VARIABLE, otherwise `set-default' is used. @@ -730,15 +730,15 @@ (interactive (custom-prompt-variable "Set and ave variable: " "Set and save value for %s as: " current-prefix-arg)) - (funcall (or (get var 'custom-set) 'set-default) var val) - (put var 'saved-value (list (custom-quote val))) - (custom-push-theme 'theme-value var 'user 'set (list (custom-quote val))) + (funcall (or (get variable 'custom-set) 'set-default) variable value) + (put variable 'saved-value (list (custom-quote value))) + (custom-push-theme 'theme-value variable 'user 'set (list (custom-quote value))) (cond ((string= comment "") - (put var 'variable-comment nil) - (put var 'saved-variable-comment nil)) + (put variable 'variable-comment nil) + (put variable 'saved-variable-comment nil)) (comment - (put var 'variable-comment comment) - (put var 'saved-variable-comment comment))) + (put variable 'variable-comment comment) + (put variable 'saved-variable-comment comment))) (custom-save-all)) ;;;###autoload @@ -1988,7 +1988,7 @@ ;; Insert documentation. ;; #### NOTE: this is ugly!!!! I need to do update the :buttons property ;; before the call to `widget-default-format-handler'. Otherwise, I - ;; loose my current `buttons'. This function shouldn't be called like + ;; lose my current `buttons'. This function shouldn't be called like ;; this anyway. The doc string widget should be added like the others. ;; --dv (widget-put widget :buttons buttons) @@ -3270,7 +3270,7 @@ (unless (bolp) (princ "\n")) (princ "(custom-set-variables") - (mapatoms (lambda (symbol) + (mapatoms (lambda (symbol) (let ((spec (car-safe (get symbol 'theme-value))) (requests (get symbol 'custom-requests)) (now (not (or (get symbol 'standard-value) @@ -3345,7 +3345,7 @@ (defun custom-save-resets (property setter special) (let (started-writing ignored-special) (setq ignored-special ignored-special) ;; suppress byte-compiler warning - ;; (custom-save-delete setter) Done by caller + ;; (custom-save-delete setter) Done by caller (let ((standard-output (current-buffer)) (mapper `(lambda (object) (let ((spec (car-safe (get object (quote ,property))))) @@ -3370,7 +3370,7 @@ (when started-writing (princ ")\n")))) ) - + (defun custom-save-loaded-themes () (let ((themes (reverse (get 'user 'theme-loads-themes))) @@ -3381,7 +3381,7 @@ (mapc (lambda (theme) (princ "\n '") (prin1 theme)) themes) - (princ " )\n")))) + (princ " )\n")))) ;;;###autoload (defun customize-save-customized () diff -r a8296e22da4e -r 576fb035e263 lisp/cus-face.el --- a/lisp/cus-face.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/cus-face.el Mon Aug 13 11:36:19 2007 +0200 @@ -55,6 +55,7 @@ ;;; Font Attributes. +;; Consider adding the stuff in the XML font model here. (defconst custom-face-attributes '((:foreground (color :tag "Foreground" :value "" @@ -98,18 +99,20 @@ :help-echo "\ Control whether the text should be inverted. Works only on TTY-s") set-face-reverse-p face-reverse-p)) - "Alist of face attributes. + "Alist of face attributes. -The elements are of the form (KEY TYPE SET GET) where KEY is a symbol -identifying the attribute, TYPE is a widget type for editing the -attibute, SET is a function for setting the attribute value, and GET is a function for getiing the attribute value. +The elements are lists of the form (KEY TYPE SET GET) where: + KEY is a symbol identifying the attribute. + TYPE is a widget type for editing the attribute. + SET is a function for setting the attribute value. + GET is a function for getting the attribute value. -The SET function should take three arguments, the face to modify, the +The SET function should take three arguments: the face to modify, the value of the attribute, and optionally the frame where the face should be changed. The GET function should take two arguments, the face to examine, and -optonally the frame where the face should be examined.") +optionally the frame where the face should be examined.") (defun face-custom-attributes-set (face frame tags &rest atts) "For FACE on FRAME set the attributes [KEYWORD VALUE].... @@ -192,13 +195,13 @@ (defun custom-face-background-pixmap (face &rest args) "Return the name of the background pixmap file used for FACE." - (let ((image (apply 'specifier-instance + (let ((image (apply 'specifier-instance (face-background-pixmap face) args))) - (and image + (and image (image-instance-file-name image)))) (defun custom-set-face-font-size (face size &optional locale tags) - "Set the font of FACE to SIZE" + "Set the font of FACE to SIZE." (let* ((font (apply 'face-font-name face locale)) ;; Gag (fontobj (font-create-object font))) @@ -230,7 +233,7 @@ ;;;###autoload (defun custom-set-face-update-spec (face display plist) "Customize the FACE for display types matching DISPLAY, merging - in the new items from PLIST" + in the new items from PLIST." (let ((spec (face-spec-update-all-matching (custom-face-get-spec face) display plist))) (put face 'customized-face spec) @@ -326,7 +329,7 @@ "Reset the value of the face to values previously defined. Associate this setting with the 'user' theme. -ARGS is defined as for `custom-theme-reset-faces'" +ARGS is defined as for `custom-theme-reset-faces'." (apply #'custom-theme-reset-faces 'user args)) diff -r a8296e22da4e -r 576fb035e263 lisp/custom.el --- a/lisp/custom.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/custom.el Mon Aug 13 11:36:19 2007 +0200 @@ -396,7 +396,7 @@ Define a theme labeled by SYMBOL THEME. The optional argument DOC is a doc string describing the theme. It is optionally followed by the -following keyboard arguments +following keyword arguments :short-description DESC DESC is a short (one line) description of the theme. If not given DOC @@ -423,7 +423,7 @@ (memq theme custom-known-themes)) (defsubst custom-check-theme (theme) - "Check whether THEME is valid and signal an error if NOT" + "Check whether THEME is valid and signal an error if NOT." (unless (custom-theme-p theme) (error "Unknown theme `%s'" theme))) @@ -565,7 +565,7 @@ (defsubst copy-upto-last (elt list) - "Copy all the elements of the list upto the last occurrence of elt" + "Copy all the elements of the list upto the last occurrence of elt." ;; Is it faster to do more work in C than to do less in elisp? (nreverse (cdr (member elt (reverse list))))) diff -r a8296e22da4e -r 576fb035e263 lisp/dialog.el --- a/lisp/dialog.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/dialog.el Mon Aug 13 11:36:19 2007 +0200 @@ -308,7 +308,7 @@ This invokes the Windows standard Page Setup dialog. This dialog is usually invoked in response to the Page Setup command, and -used to chose such parameters as page orientation, print margins etc. +used to choose such parameters as page orientation, print margins etc. Note that this dialog contains the \"Printer\" button, which invokes the Printer Setup dialog (see `msprinter-print-setup-dialog') so that the user can update the printer options or even select a different printer diff -r a8296e22da4e -r 576fb035e263 lisp/dumped-lisp.el --- a/lisp/dumped-lisp.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/dumped-lisp.el Mon Aug 13 11:36:19 2007 +0200 @@ -115,8 +115,10 @@ ;;;;;;;;;;;;;;;;;; Coding-system support (when-feature file-coding "coding") (when-feature file-coding "code-files") + ;; Handle process with encoding/decoding coding-system. (when-feature file-coding "code-process") - + ;; Provide basic commands to set coding systems to user + (when-feature file-coding "code-cmds") ;;;;;;;;;;;;;;;;;; MULE support (when-feature mule "mule-charset") (when-feature mule "mule-coding") diff -r a8296e22da4e -r 576fb035e263 lisp/etags.el --- a/lisp/etags.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/etags.el Mon Aug 13 11:36:19 2007 +0200 @@ -408,7 +408,7 @@ (defun buffer-tag-table-files () "Returns a list of all files referenced by all TAGS tables that this buffer uses." - (apply #'nconc + (apply #'append (mapcar #'tag-table-files (buffer-tag-table-list)))) diff -r a8296e22da4e -r 576fb035e263 lisp/faces.el --- a/lisp/faces.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/faces.el Mon Aug 13 11:36:19 2007 +0200 @@ -842,12 +842,12 @@ ;; happen if that locale has no instantiators. So signal ;; an error to indicate this. - + (setq temp-sp (copy-specifier sp)) (if (and (or (eq locale 'global) (eq locale 'all) (not locale)) (not (face-property face property 'global))) (copy-specifier (face-property 'default property) - temp-sp 'global)) + temp-sp 'global)) (if (and (valid-specifier-locale-p locale) (not (specifier-specs temp-sp locale))) (error "Property must have a specification in locale %S" locale)) @@ -1298,7 +1298,7 @@ (defun face-spec-update-all-matching (spec display plist) "Update all entries in the face spec that could match display to -have the entries from the new plist and return the new spec" +have the entries from the new plist and return the new spec." (mapcar (lambda (e) (let ((entries (car e)) @@ -1326,8 +1326,8 @@ (setq new-options (cddr new-options))) (list entries options)))) (copy-sequence spec))) - - + + (defun face-spec-set-match-display (display &optional frame) "Return non-nil if DISPLAY matches FRAME. @@ -1781,25 +1781,25 @@ (if (featurep 'xpm) (setq xpm-color-symbols (list - (purecopy '("foreground" (face-foreground 'default))) - (purecopy '("background" (face-background 'default))) - (purecopy '("backgroundToolBarColor" - (or - (and - (featurep 'x) - (x-get-resource "backgroundToolBarColor" - "BackgroundToolBarColor" 'string - nil nil 'warn)) + '("foreground" (face-foreground 'default)) + '("background" (face-background 'default)) + '("backgroundToolBarColor" + (or + (and + (featurep 'x) + (x-get-resource "backgroundToolBarColor" + "BackgroundToolBarColor" 'string + nil nil 'warn)) - (face-background 'toolbar)))) - (purecopy '("foregroundToolBarColor" - (or - (and - (featurep 'x) - (x-get-resource "foregroundToolBarColor" - "ForegroundToolBarColor" 'string - nil nil 'warn)) - (face-foreground 'toolbar)))) + (face-background 'toolbar))) + '("foregroundToolBarColor" + (or + (and + (featurep 'x) + (x-get-resource "foregroundToolBarColor" + "ForegroundToolBarColor" 'string + nil nil 'warn)) + (face-foreground 'toolbar))) ))) (when (featurep 'tty) diff -r a8296e22da4e -r 576fb035e263 lisp/files-nomule.el --- a/lisp/files-nomule.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/files-nomule.el Mon Aug 13 11:36:19 2007 +0200 @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -33,7 +33,7 @@ ;;; Code: -(defun insert-file-contents (filename &optional visit beg end replace) +(defun insert-file-contents (filename &optional visit start end replace) "Insert contents of file FILENAME after point. Returns list of absolute file name and length of data inserted. If second argument VISIT is non-nil, the buffer's visited filename @@ -41,15 +41,15 @@ If visiting and the file does not exist, visiting is completed before the error is signaled. -The optional third and fourth arguments BEG and END +The optional third and fourth arguments START and END specify what portion of the file to insert. -If VISIT is non-nil, BEG and END must be nil. +If VISIT is non-nil, START and END must be nil. If optional fifth argument REPLACE is non-nil, it means replace the current buffer contents (in the accessible portion) with the file contents. This is better than simply deleting and inserting the whole thing because (1) it preserves some marker positions and (2) it puts less data in the undo list." - (insert-file-contents-internal filename visit beg end replace nil nil)) + (insert-file-contents-internal filename visit start end replace nil nil)) (defun write-region (start end filename &optional append visit lockname coding-system) "Write current region into specified file. diff -r a8296e22da4e -r 576fb035e263 lisp/files.el --- a/lisp/files.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/files.el Mon Aug 13 11:36:19 2007 +0200 @@ -291,11 +291,11 @@ (defvar after-set-visited-file-name-hooks nil "List of functions to be called after \\[set-visited-file-name] or during \\[write-file]. -You can use this hook to restore local values of write-file-hooks, -after-save-hook, and revert-buffer-function, which pertain +You can use this hook to restore local values of `write-file-hooks', +`after-save-hook', and `revert-buffer-function', which pertain to a specific file and therefore are normally killed by a rename. -Put hooks pertaining to the buffer contents on write-contents-hooks -and revert-buffer-insert-file-contents-function.") +Put hooks pertaining to the buffer contents on `write-contents-hooks' +and `revert-buffer-insert-file-contents-function'.") (defvar write-contents-hooks nil "List of functions to be called before writing out a buffer to a file. @@ -870,18 +870,18 @@ (setq list (cdr list)))) found)))) -(defun insert-file-contents-literally (filename &optional visit beg end replace) +(defun insert-file-contents-literally (filename &optional visit start end replace) "Like `insert-file-contents', q.v., but only reads in the file. A buffer may be modified in several ways after reading into the buffer due to advanced Emacs features, such as format decoding, character code -conversion,find-file-hooks, automatic uncompression, etc. +conversion, find-file-hooks, automatic uncompression, etc. This function ensures that none of these modifications will take place." (let ((wrap-func (find-file-name-handler filename 'insert-file-contents-literally))) - (if wrap-func + (if wrap-func (funcall wrap-func 'insert-file-contents-literally filename - visit beg end replace) + visit start end replace) (let ((file-name-handler-alist nil) (format-alist nil) (after-insert-file-functions nil) @@ -894,7 +894,7 @@ (unwind-protect (progn (fset 'find-buffer-file-type (lambda (filename) t)) - (insert-file-contents filename visit beg end replace)) + (insert-file-contents filename visit start end replace)) (if find-buffer-file-type-function (fset 'find-buffer-file-type find-buffer-file-type-function) (fmakunbound 'find-buffer-file-type))))))) @@ -1173,7 +1173,7 @@ ("\\.m\\(?:[mes]\\|an\\)\\'" . nroff-mode) ("\\.icn\\'" . icon-mode) ("\\.\\(?:[ckz]?sh\\|shar\\)\\'" . sh-mode) - ("\\.pro\\'" . idlwave-mode) + ("\\.[Pp][Rr][Oo]\\'" . idlwave-mode) ;; #### Unix-specific! ("/\\.\\(?:bash_\\|z\\)?\\(profile\\|login\\|logout\\)\\'" . sh-mode) ("/\\.\\(?:[ckz]sh\\|bash\\|tcsh\\|es\\|xinit\\|startx\\)rc\\'" . sh-mode) @@ -1206,7 +1206,6 @@ ("\\.[sj]?html?\\'" . html-mode) ("\\.jsp\\'" . html-mode) ("\\.xml\\'" . xml-mode) - ("\\.htm?l?3\\'" . html3-mode) ("\\.\\(?:sgml?\\|dtd\\)\\'" . sgml-mode) ("\\.c?ps\\'" . postscript-mode) ;; .emacs following a directory delimiter in either Unix or @@ -1260,8 +1259,7 @@ If it matches, mode MODE is selected.") (defvar binary-file-regexps - (purecopy - '("\\.\\(?:bz2\\|elc\\|g\\(if\\|z\\)\\|jp\\(eg\\|g\\)\\|png\\|t\\(ar\\|gz\\|iff\\)\\|[Zo]\\)\\'")) + '("\\.\\(?:bz2\\|elc\\|g\\(if\\|z\\)\\|jp\\(eg\\|g\\)\\|png\\|t\\(ar\\|gz\\|iff\\)\\|[Zo]\\)\\'") "List of regexps of filenames containing binary (non-text) data.") ; (eval-when-compile @@ -1281,9 +1279,9 @@ ; "tiff" ; "jpg" ; "jpeg")))))) - + (defvar inhibit-first-line-modes-regexps - (purecopy binary-file-regexps) + binary-file-regexps "List of regexps; if one matches a file name, don't look for `-*-'.") (defvar inhibit-first-line-modes-suffixes nil @@ -1481,7 +1479,7 @@ (or force (hack-local-variables-p nil)))) (let ((continue t) - prefix prefixlen suffix beg + prefix prefixlen suffix start (enable-local-eval enable-local-eval)) ;; The prefix is what comes before "local variables:" in its line. ;; The suffix is what comes after "local variables:" in its line. @@ -1508,11 +1506,11 @@ (error "Local variables entry is missing the prefix"))) ;; Find the variable name; strip whitespace. (skip-chars-forward " \t") - (setq beg (point)) + (setq start (point)) (skip-chars-forward "^:\n") (if (eolp) (error "Missing colon in local variables entry")) (skip-chars-backward " \t") - (let* ((str (buffer-substring beg (point))) + (let* ((str (buffer-substring start (point))) (var (read str)) val) ;; Setting variable named "end" means end of list. @@ -2245,7 +2243,7 @@ (goto-char (point-max)) (insert ?\n))) - ;; Run the write-file-hooks until one returns non-null. + ;; Run the write-file-hooks until one returns non-nil. ;; Bind after-save-hook to nil while running the ;; write-file-hooks so that if this function is called ;; recursively (from inside a write-file-hook) the @@ -2361,9 +2359,9 @@ "Provide a clean way for a write-file-hook to wrap AROUND the execution of the remaining hooks and writing to disk. Do not call this function except from a functions -on the write-file-hooks or write-contents-hooks list. +on the `write-file-hooks' or `write-contents-hooks' list. A hook that calls this function must return non-nil, -to signal completion to its caller. continue-save-buffer +to signal completion to its caller. `continue-save-buffer' always returns non-nil." (let ((hooks (cdr (or continue-save-buffer-hooks-tail (error @@ -3165,19 +3163,19 @@ (file-name-directory file) (file-name-directory (expand-file-name file)))) (pattern (file-name-nondirectory file)) - (beg 0)) + (start 0)) ;; Quote some characters that have special meanings in shells; ;; but don't quote the wildcards--we want them to be special. ;; We also currently don't quote the quoting characters ;; in case people want to use them explicitly to quote ;; wildcard characters. ;;#### Unix-specific - (while (string-match "[ \t\n;<>&|()#$]" pattern beg) + (while (string-match "[ \t\n;<>&|()#$]" pattern start) (setq pattern (concat (substring pattern 0 (match-beginning 0)) "\\" (substring pattern (match-beginning 0))) - beg (1+ (match-end 0)))) + start (1+ (match-end 0)))) (call-process shell-file-name nil t nil "-c" (concat "\\" ;; Disregard shell aliases! insert-directory-program diff -r a8296e22da4e -r 576fb035e263 lisp/fill.el --- a/lisp/fill.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/fill.el Mon Aug 13 11:36:19 2007 +0200 @@ -88,7 +88,7 @@ ;; #### - this is still weak. Yeah, there's filladapt, but this should ;; still be better... --Stig -(defcustom adaptive-fill-regexp (purecopy "[ \t]*\\([#;>*]+ +\\)?") +(defcustom adaptive-fill-regexp "[ \t]*\\([#;>*]+ +\\)?" "*Regexp to match text at start of line that constitutes indentation. If Adaptive Fill mode is enabled, whatever text matches this pattern on the second line of a paragraph is used as the standard indentation @@ -103,7 +103,7 @@ :type 'function :group 'fill) -;; Added for kinsoku processing. Use this instead of +;; Added for kinsoku processing. Use this instead of ;; (skip-chars-backward "^ \t\n") ;; (skip-chars-backward "^ \n" linebeg) (defun fill-move-backward-to-break-point (regexp &optional lim) @@ -161,7 +161,7 @@ here-col col)) (max here-col fill-col))))) -(defun canonically-space-region (beg end) +(defun canonically-space-region (start end) "Remove extra spaces between words in region. Leave one space between words, two at end of sentences or after colons \(depending on values of `sentence-end-double-space' and `colon-double-space'). @@ -169,7 +169,7 @@ (interactive "r") ;;;### 97/3/14 jhod: Do I have to add anything here for kinsoku? (save-excursion - (goto-char beg) + (goto-char start) ;; XEmacs - (ENE/stig from fa-extras.el): Skip the start of a comment. (and comment-start-skip (looking-at comment-start-skip) @@ -178,7 +178,7 @@ ;; This is quick, but loses when a tab follows the end of a sentence. ;; Actually, it is difficult to tell that from "Mr.\tSmith". ;; Blame the typist. - (subst-char-in-region beg end ?\t ?\ ) + (subst-char-in-region start end ?\t ?\ ) (while (and (< (point) end) (re-search-forward " *" end t)) (delete-region @@ -195,7 +195,7 @@ (match-end 0))) ;; Make sure sentences ending at end of line get an extra space. ;; loses on split abbrevs ("Mr.\nSmith") - (goto-char beg) + (goto-char start) (while (and (< (point) end) (re-search-forward "[.?!][])}\"']*$" end t)) ;; We insert before markers in case a caller such as @@ -294,7 +294,7 @@ (beginning-of-line) (setq from (point)) - + ;; Delete all but one soft newline at end of region. ;; And leave TO before that one. (goto-char to) @@ -604,13 +604,13 @@ (forward-paragraph) (or (bolp) (newline 1)) (let ((end (point)) - (beg (progn (backward-paragraph) (point)))) + (start (progn (backward-paragraph) (point)))) (goto-char before) (if use-hard-newlines ;; Can't use fill-region-as-paragraph, since this paragraph may ;; still contain hard newlines. See fill-region. - (fill-region beg end arg) - (fill-region-as-paragraph beg end arg))))))) + (fill-region start end arg) + (fill-region-as-paragraph start end arg))))))) (defun fill-region (from to &optional justify nosqueeze to-eop) "Fill each of the paragraphs in the region. @@ -629,23 +629,23 @@ (barf-if-buffer-read-only nil (region-beginning) (region-end)) (list (region-beginning) (region-end) (if current-prefix-arg 'full)))) - (let (end beg) + (let (end start) (save-restriction (goto-char (max from to)) (if to-eop (progn (skip-chars-backward "\n") (forward-paragraph))) (setq end (point)) - (goto-char (setq beg (min from to))) + (goto-char (setq start (min from to))) (beginning-of-line) (narrow-to-region (point) end) (while (not (eobp)) (let ((initial (point)) end) ;; If using hard newlines, break at every one for filling - ;; purposes rather than using paragraph breaks. + ;; purposes rather than using paragraph breaks. (if use-hard-newlines - (progn + (progn (while (and (setq end (text-property-any (point) (point-max) 'hard t)) (not (eq ?\n (char-after end))) @@ -656,8 +656,8 @@ (forward-paragraph 1) (setq end (point)) (forward-paragraph -1)) - (if (< (point) beg) - (goto-char beg)) + (if (< (point) start) + (goto-char start)) (if (>= (point) initial) (fill-region-as-paragraph (point) end justify nosqueeze) (goto-char end))))))) @@ -671,7 +671,7 @@ (fill-region (point) (mark) arg) (fill-paragraph arg))) - + (defconst default-justification 'left "*Method of justifying text not otherwise specified. Possible values are `left', `right', `full', `center', or `none'. @@ -685,9 +685,9 @@ This returns the value of the text-property `justification', or the variable `default-justification' if there is no text-property. However, it returns nil rather than `none' to mean \"don't justify\"." - (let ((j (or (get-text-property + (let ((j (or (get-text-property ;; Make sure we're looking at paragraph body. - (save-excursion (skip-chars-forward " \t") + (save-excursion (skip-chars-forward " \t") (if (and (eobp) (not (bobp))) (1- (point)) (point))) 'justification) @@ -724,7 +724,7 @@ (save-restriction (if whole-par (let ((paragraph-start (if use-hard-newlines "." paragraph-start)) - (paragraph-ignore-fill-prefix (if use-hard-newlines t + (paragraph-ignore-fill-prefix (if use-hard-newlines t paragraph-ignore-fill-prefix))) (goto-char begin) (while (and (bolp) (not (eobp))) (forward-char 1)) @@ -785,7 +785,7 @@ ;; 97/3/14 jhod: This functions are added for Kinsoku support (defun find-space-insertable-point () - "Search backward for a permissible point for inserting justification spaces" + "Search backward for a permissible point for inserting justification spaces." (if (boundp 'space-insertable) (if (re-search-backward space-insertable nil t) (progn (forward-char 1) @@ -795,7 +795,7 @@ ;; A line has up to six parts: ;; -;; >>> hello. +;; >>> hello. ;; [Indent-1][FP][ Indent-2 ][text][trailing whitespace][newline] ;; ;; "Indent-1" is the left-margin indentation; normally it ends at column @@ -807,7 +807,7 @@ ;; Trailing whitespace is not counted as part of the line length when ;; center- or right-justifying. ;; -;; All parts of the line are optional, although the final newline can +;; All parts of the line are optional, although the final newline can ;; only be missing on the last line of the buffer. (defun justify-current-line (&optional how eop nosqueeze) @@ -815,7 +815,7 @@ Normally does full justification: adds spaces to the line to make it end at the column given by `current-fill-column'. Optional first argument HOW specifies alternate type of justification: -it can be `left', `right', `full', `center', or `none'. +it can be `left', `right', `full', `center', or `none'. If HOW is t, will justify however the `current-justification' function says to. If HOW is nil or missing, full justification is done by default. Second arg EOP non-nil means that this is the last line of the paragraph, so @@ -831,14 +831,14 @@ (let ((fc (current-fill-column)) (pos (point-marker)) fp-end ; point at end of fill prefix - beg ; point at beginning of line's text + start ; point at beginning of line's text end ; point at end of line's text - indent ; column of `beg' + indent ; column of `start' endcol ; column of `end' ncols) ; new indent point or offset (end-of-line) ;; Check if this is the last line of the paragraph. - (if (and use-hard-newlines (null eop) + (if (and use-hard-newlines (null eop) (get-text-property (point) 'hard)) (setq eop t)) (skip-chars-backward " \t") @@ -852,40 +852,40 @@ (beginning-of-line) (skip-chars-forward " \t") ;; Skip over fill-prefix. - (if (and fill-prefix + (if (and fill-prefix (not (string-equal fill-prefix "")) (equal fill-prefix - (buffer-substring + (buffer-substring (point) (min (point-max) (+ (length fill-prefix) (point)))))) (forward-char (length fill-prefix)) - (if (and adaptive-fill-mode + (if (and adaptive-fill-mode (looking-at adaptive-fill-regexp)) (goto-char (match-end 0)))) (setq fp-end (point)) (skip-chars-forward " \t") ;; This is beginning of the line's text. (setq indent (current-column)) - (setq beg (point)) + (setq start (point)) (goto-char end) (setq endcol (current-column)) ;; HOW can't be null or left--we would have exited already - (cond ((eq 'right how) + (cond ((eq 'right how) (setq ncols (- fc endcol)) (if (< ncols 0) ;; Need to remove some indentation - (delete-region + (delete-region (progn (goto-char fp-end) (if (< (current-column) (+ indent ncols)) (move-to-column (+ indent ncols) t)) (point)) (progn (move-to-column indent) (point))) ;; Need to add some - (goto-char beg) + (goto-char start) (indent-to (+ indent ncols)) ;; If point was at beginning of text, keep it there. - (if (= beg pos) + (if (= start pos) (move-marker pos (point))))) ((eq 'center how) @@ -903,18 +903,18 @@ (point)) (progn (move-to-column indent) (point))) ;; Have too little - add some - (goto-char beg) + (goto-char start) (indent-to ncols) ;; If point was at beginning of text, keep it there. - (if (= beg pos) + (if (= start pos) (move-marker pos (point))))) ((eq 'full how) ;; Insert extra spaces between words to justify line (save-restriction - (narrow-to-region beg end) + (narrow-to-region start end) (or nosqueeze - (canonically-space-region beg end)) + (canonically-space-region start end)) (goto-char (point-max)) (setq ncols (- fc endcol)) ;; Ncols is number of additional spaces needed @@ -956,10 +956,10 @@ (save-excursion (move-to-left-margin nil t) ;; Position ourselves after any fill-prefix. - (if (and fill-prefix + (if (and fill-prefix (not (string-equal fill-prefix "")) (equal fill-prefix - (buffer-substring + (buffer-substring (point) (min (point-max) (+ (length fill-prefix) (point)))))) (forward-char (length fill-prefix))) @@ -969,7 +969,7 @@ (defun unjustify-region (&optional begin end) "Remove justification whitespace from region. For centered or right-justified regions, this function removes any indentation -past the left margin from each line. For full-justified lines, it removes +past the left margin from each line. For full-justified lines, it removes extra spaces between words. It does nothing in other justification modes. Arguments BEGIN and END are optional; default is the whole buffer." (save-excursion @@ -1016,7 +1016,7 @@ (goto-char min) (beginning-of-line) (narrow-to-region (point) max) - (if mailp + (if mailp (while (and (not (eobp)) (or (looking-at "[ \t]*[^ \t\n]+:") (looking-at "[ \t]*$"))) @@ -1040,7 +1040,7 @@ (if (and adaptive-fill-mode adaptive-fill-regexp (looking-at adaptive-fill-regexp)) (match-string 0) - (buffer-substring + (buffer-substring (point) (save-excursion (skip-chars-forward " \t") (point)))) @@ -1055,7 +1055,7 @@ (if fill-individual-varying-indent ;; If this line is a separator line, with or ;; without prefix, end the paragraph. - (and + (and (not (looking-at paragraph-separate)) (save-excursion (not (and (looking-at fill-prefix-regexp) diff -r a8296e22da4e -r 576fb035e263 lisp/float-sup.el --- a/lisp/float-sup.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/float-sup.el Mon Aug 13 11:36:19 2007 +0200 @@ -38,18 +38,16 @@ (error "Floating point was disabled at compile time")) ;; define pi and e via math-lib calls. (much less prone to killer typos.) -;; XEmacs change (purecopy) -(defconst pi (purecopy (* 4 (atan 1))) "The value of Pi (3.1415926...)") -(defconst e (purecopy (exp 1)) "The value of e (2.7182818...)") +(defconst pi (* 4 (atan 1)) "The value of Pi (3.1415926...)") +(defconst e (exp 1) "The value of e (2.7182818...)") ;; Careful when editing this file ... typos here will be hard to spot. ;; (defconst pi 3.14159265358979323846264338327 ;; "The value of Pi (3.14159265358979323846264338327...)") -;; XEmacs change (purecopy) -(defconst degrees-to-radians (purecopy (/ pi 180.0)) +(defconst degrees-to-radians (/ pi 180.0) "Degrees to radian conversion constant") -(defconst radians-to-degrees (purecopy (/ 180.0 pi)) +(defconst radians-to-degrees (/ 180.0 pi) "Radian to degree conversion constant") ;; these expand to a single multiply by a float when byte compiled diff -r a8296e22da4e -r 576fb035e263 lisp/font-lock.el --- a/lisp/font-lock.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/font-lock.el Mon Aug 13 11:36:19 2007 +0200 @@ -390,7 +390,7 @@ For example, an element of the first form highlights (if not already highlighted): - \"\\\\\" Discrete occurrences of \"foo\" in the value + \"\\\\\\=\" Discrete occurrences of \"foo\" in the value of the variable `font-lock-keyword-face'. (\"fu\\\\(bar\\\\)\" . 1) Substring \"bar\" within all occurrences of @@ -409,7 +409,7 @@ `fubar-match' finds and matches in the value of `fubar-face'. - (\"\\\\\" (0 anchor-face) (\"\\\\\" nil nil (0 item-face))) + (\"\\\\\\=\" (0 anchor-face) (\"\\\\\\=\" nil nil (0 item-face))) -------------- --------------- ------------ --- --- ------------- | | | | | | MATCHER | ANCHOR-MATCHER | +------+ MATCH-HIGHLIGHT @@ -909,11 +909,13 @@ ;;;###autoload (defun turn-on-font-lock () "Unconditionally turn on Font Lock mode." + (interactive) (font-lock-mode 1)) ;;;###autoload (defun turn-off-font-lock () "Unconditionally turn off Font Lock mode." + (interactive) (font-lock-mode 0)) ;;; FSF has here: @@ -2643,22 +2645,22 @@ 3 (if (match-beginning 2) 'bold 'italic) keep)) "Default expressions to highlight in TeX modes.") -(defconst ksh-font-lock-keywords (purecopy +(defconst ksh-font-lock-keywords (list '("\\(^\\|[^\$\\\]\\)#.*" . font-lock-comment-face) '("\\<\\(if\\|then\\|else\\|elif\\|fi\\|case\\|esac\\|for\\|do\\|done\\|foreach\\|in\\|end\\|select\\|while\\|repeat\\|time\\|function\\|until\\|exec\\|command\\|coproc\\|noglob\\|nohup\\|nocorrect\\|source\\|autoload\\|alias\\|unalias\\|export\\|set\\|echo\\|eval\\|cd\\|log\\|compctl\\)\\>" . font-lock-keyword-face) '("\\<\\[\\[.*\\]\\]\\>" . font-lock-type-face) '("\$\(.*\)" . font-lock-type-face) - )) + ) "Additional expressions to highlight in ksh-mode.") -(defconst sh-font-lock-keywords (purecopy +(defconst sh-font-lock-keywords (list '("\\(^\\|[^\$\\\]\\)#.*" . font-lock-comment-face) '("\\<\\(if\\|then\\|else\\|elif\\|fi\\|case\\|esac\\|for\\|do\\|done\\|in\\|while\\|exec\\|export\\|set\\|echo\\|eval\\|cd\\)\\>" . font-lock-keyword-face) '("\\[.*\\]" . font-lock-type-face) '("`.*`" . font-lock-type-face) - )) + ) "Additional expressions to highlight in sh-mode.") diff -r a8296e22da4e -r 576fb035e263 lisp/font-menu.el --- a/lisp/font-menu.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/font-menu.el Mon Aug 13 11:36:19 2007 +0200 @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -158,7 +158,7 @@ :type '(choice (string :tag "Format string") (function))) -(defvar font-menu-preferred-resolution +(defvar font-menu-preferred-resolution (make-specifier-and-init 'generic '((global ((mswindows) . ":") ((x) . "*-*"))) t) "Preferred horizontal and vertical font menu resolution (e.g. \"75:75\").") @@ -187,7 +187,7 @@ 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, +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." (message "Getting list of fonts from server... ") (if (or noninteractive @@ -356,7 +356,7 @@ (when weight (signal 'error '("Setting weight currently not supported"))) (setq new-default-face-font - (font-menu-load-font + (font-menu-load-font (or family from-family) (or weight from-weight) (or size from-size) @@ -398,14 +398,14 @@ (/ (or size from-size) (specifier-instance font-menu-size-scaling (selected-device)))) - "pt"))) + "pt"))) (message "Font %s" (face-font-name 'default))))) (defun font-menu-change-face (face from-family from-weight from-size to-family to-weight to-size) - (or (symbolp face) (signal 'wrong-type-argument (list 'symbolp face))) + (or (symbolp face) (setq face (wrong-type-argument 'symbolp face))) (let* ((dcache (device-fonts-cache)) (font-data (font-menu-font-data face dcache)) (face-family (aref font-data 1)) @@ -422,7 +422,7 @@ ;; If its value is inherited, we don't touch it. If any of this ;; is not true, we leave it alone. (when (and (face-font face 'global) - (cond + (cond (to-family (string-equal face-family from-family)) (to-weight (string-equal face-weight from-weight)) (to-size (= face-size from-size)))) @@ -432,7 +432,7 @@ (or to-size face-size) face-slant (specifier-instance - font-menu-preferred-resolution + font-menu-preferred-resolution (selected-device))) (and font-menu-this-frame-only-p (selected-frame)))))) diff -r a8296e22da4e -r 576fb035e263 lisp/font.el --- a/lisp/font.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/font.el Mon Aug 13 11:36:19 2007 +0200 @@ -299,7 +299,7 @@ w2)))) (defun font-spatial-to-canonical (spec &optional device) - "Convert SPEC (in inches, millimeters, points, or picas) into points" + "Convert SPEC (in inches, millimeters, points, or picas) into points." ;; 1 in = 6 pa = 25.4 mm = 72 pt (cond ((numberp spec) diff -r a8296e22da4e -r 576fb035e263 lisp/format.el --- a/lisp/format.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/format.el Mon Aug 13 11:36:19 2007 +0200 @@ -312,7 +312,7 @@ buffer-file-format)))) (format-encode-region (point-min) (point-max) format)) -(defun format-encode-region (beg end &optional format) +(defun format-encode-region (start end &optional format) "Translate the region into some FORMAT. FORMAT defaults to `buffer-file-format', it is a symbol naming one of the formats defined in `format-alist', or a list of such symbols." @@ -334,10 +334,10 @@ ) (if to-fn (if modify - (setq end (format-encode-run-method to-fn beg end + (setq end (format-encode-run-method to-fn start end (current-buffer))) (format-insert-annotations - (funcall to-fn beg end (current-buffer))))) + (funcall to-fn start end (current-buffer))))) (setq format (cdr format))))))) (defun format-write-file (filename format) @@ -374,10 +374,10 @@ (if format (format-decode-buffer format))) -(defun format-insert-file (filename format &optional beg end) +(defun format-insert-file (filename format &optional start end) "Insert the contents of file FILE using data format FORMAT. If FORMAT is nil then do not do any format conversion. -The optional third and fourth arguments BEG and END specify +The optional third and fourth arguments START and END specify the part of the file to read. The return value is like the value of `insert-file-contents': @@ -390,7 +390,7 @@ (list file fmt))) (let (value size) (let ((format-alist nil)) - (setq value (insert-file-contents filename nil beg end)) + (setq value (insert-file-contents filename nil start end)) (setq size (nth 1 value))) (if format (setq size (format-decode format size) @@ -412,7 +412,7 @@ ;;; decoding functions for use in format-alist. ;;; -(defun format-replace-strings (alist &optional reverse beg end) +(defun format-replace-strings (alist &optional reverse start end) "Do multiple replacements on the buffer. ALIST is a list of (from . to) pairs, which should be proper arguments to `search-forward' and `replace-match' respectively. @@ -422,12 +422,12 @@ Optional args BEGIN and END specify a region of the buffer to operate on." (save-excursion (save-restriction - (or beg (setq beg (point-min))) + (or start (setq start (point-min))) (if end (narrow-to-region (point-min) end)) (while alist (let ((from (if reverse (cdr (car alist)) (car (car alist)))) (to (if reverse (car (cdr alist)) (cdr (car alist))))) - (goto-char beg) + (goto-char start) (while (search-forward from nil t) (goto-char (match-beginning 0)) (insert to) diff -r a8296e22da4e -r 576fb035e263 lisp/frame.el --- a/lisp/frame.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/frame.el Mon Aug 13 11:36:19 2007 +0200 @@ -776,7 +776,7 @@ (setq iconification-data (cdr iconification-data)))) (defun suspend-or-iconify-emacs () - "Call iconify-emacs if using a window system, otherwise call suspend-emacs." + "Call iconify-emacs if using a window system, otherwise suspend Emacs." (interactive) (cond ((device-on-window-system-p) (iconify-emacs)) @@ -1055,8 +1055,8 @@ first time. This function may be used as the value of `pre-display-buffer-function', -to cause the display-buffer function and its callers to exhibit the above -behavior." +to cause the `display-buffer' function and its callers to exhibit the +above behavior." (let ((frame (get-frame-for-buffer-noselect buffer not-this-window-p on-frame))) (if (not (eq frame (selected-frame))) @@ -1104,7 +1104,7 @@ :group 'frames) (defun show-temp-buffer-in-current-frame (buffer) - "For use as the value of temp-buffer-show-function: + "For use as the value of `temp-buffer-show-function': always displays the buffer in the selected frame, regardless of the behavior that would otherwise be introduced by the `pre-display-buffer-function', which is normally set to `get-frame-for-buffer' (which see)." diff -r a8296e22da4e -r 576fb035e263 lisp/gutter-items.el --- a/lisp/gutter-items.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/gutter-items.el Mon Aug 13 11:36:19 2007 +0200 @@ -47,11 +47,16 @@ 'buffers-tab val) (setq gutter-buffers-tab-visible-p val))) +(defcustom gutter-buffers-tab-enabled t + "*Whether to enable support for buffers tab in the gutter. +This is different to `gutter-buffers-tab-visible-p' which still runs hooks +even when the gutter is invisible." + :group 'buffers-tab + :type 'boolean) + (defvar gutter-buffers-tab-orientation 'top "Where the buffers tab currently is. Do not set this.") -(defvar gutter-buffers-tab-extent nil) - (defcustom buffers-tab-max-size 6 "*Maximum number of entries which may appear on the \"Buffers\" tab. If this is 10, then only the ten most-recently-selected buffers will be @@ -72,7 +77,7 @@ (defcustom buffers-tab-omit-function 'buffers-menu-omit-invisible-buffers "*If non-nil, a function specifying the buffers to omit from the buffers tab. This is passed a buffer and should return non-nil if the buffer should be -omitted. The default value `buffers-tab-omit-invisible-buffers' omits +omitted. The default value `buffers-menu-omit-invisible-buffers' omits buffers that are normally considered \"invisible\" (those whose name begins with a space)." :type '(choice (const :tag "None" nil) @@ -90,6 +95,18 @@ function) :group 'buffers-tab) +(defcustom buffers-tab-filter-functions (list buffers-tab-selection-function) + "*If non-nil, a list of functions specifying the buffers to select +from the buffers tab. +Each function in the list is passed two buffers, the buffer to +potentially select and the context buffer, and should return non-nil +if the first buffer should be selected. The default value groups +buffers by major mode and by `buffers-tab-grouping-regexp'." + + :type '(choice (const :tag "None" nil) + sexp) + :group 'buffers-tab) + (defcustom buffers-tab-sort-function nil "*If non-nil, a function specifying the buffers to select from the buffers tab. This is passed the buffer list and returns the list in the @@ -159,13 +176,14 @@ (select-window (car (windows-of-buffer buffer))) (switch-to-buffer buffer)))) -(defun select-buffers-tab-buffers-by-mode (buf1 buf2) +(defun select-buffers-tab-buffers-by-mode (buffer-to-select buf1) "For use as a value of `buffers-tab-selection-function'. This selects buffers by major mode `buffers-tab-grouping-regexp'." (let ((mode1 (symbol-name (symbol-value-in-buffer 'major-mode buf1))) - (mode2 (symbol-name (symbol-value-in-buffer 'major-mode buf2))) + (mode2 (symbol-name (symbol-value-in-buffer 'major-mode + buffer-to-select))) (modenm1 (symbol-value-in-buffer 'mode-name buf1)) - (modenm2 (symbol-value-in-buffer 'mode-name buf2))) + (modenm2 (symbol-value-in-buffer 'mode-name buffer-to-select))) (cond ((or (eq mode1 mode2) (eq modenm1 modenm2) (and (string-match "^[^-]+-" mode1) @@ -212,32 +230,25 @@ (when selected (setq selected nil)))) buffers))) -;;; #### SJT I'd really like this function to have just two hooks: (1) the -;;; buffer filter list and (2) a sort function list. Both should be lists -;;; of functions. Each filter takes two arguments: a buffer and a model -;;; buffer. (The model buffer argument allows selecting according to the -;;; mode or directory of that buffer.) The filter returns t if the buffer -;;; should be listed and nil otherwise. Effectively the filter amounts to -;;; the conjuction of the filter list. (Optionally the filter could take a -;;; frame instead of a buffer or generalize to a locale as in a specifier?) -;;; The filtering is done this way to preserve the ordering imposed by -;;; `buffer-list'. In addition, the in-deletion argument will be used the -;;; same way as in the current design. -;;; The list is checked for length and pruned according to least-recently- -;;; selected. (Optionally there could be some kind of sort function here, -;;; too.) -;;; Finally the list is sorted to gutter display order, and the tab data -;;; structure is created and returned. -;;; #### Docstring isn't very well expressed. +;;; #### SJT would like this function to have a sort function list. I +;;; don't see how this could work given that sorting is not +;;; cumulative --andyp. (defun buffers-tab-items (&optional in-deletion frame force-selection) - "This is the tab filter for the top-level buffers \"Buffers\" tab. -It dynamically creates a list of buffers to use as the contents of the tab. -Only the most-recently-used few buffers will be listed on the tab, for -efficiency reasons. You can control how many buffers will be shown by -setting `buffers-tab-max-size'. You can control the text of the tab -items by redefining the function `format-buffers-menu-line'." + "Return a list of tab instantiators based on the current buffers list. +This function is used as the tab filter for the top-level buffers +\"Buffers\" tab. It dynamically creates a list of tab instantiators +to use as the contents of the tab. The contents and order of the list +is controlled by `buffers-tab-filter-functions' which by default +groups buffers according to major mode and removes invisible buffers. +You can control how many buffers will be shown by setting +`buffers-tab-max-size'. You can control the text of the tab items by +redefining the function `format-buffers-menu-line'." (save-match-data - (let* ((buffers (delete-if buffers-tab-omit-function (buffer-list frame))) + ;; NB it is too late if we run the omit function as part of the + ;; filter functions because we need to know which buffer is the + ;; context buffer before they get run. + (let* ((buffers (delete-if + buffers-tab-omit-function (buffer-list frame))) (first-buf (car buffers))) ;; maybe force the selected window (when (and force-selection @@ -249,11 +260,19 @@ (when in-deletion (setq buffers (delq (current-buffer) buffers)) (setq first-buf (car buffers))) - ;; select buffers in group (default is by mode) - (when buffers-tab-selection-function - (delete-if-not #'(lambda (buf) - (funcall buffers-tab-selection-function - first-buf buf)) buffers)) + ;; filter buffers + (when buffers-tab-filter-functions + (setq buffers + (delete-if + #'null + (mapcar #'(lambda (buf) + (let ((tmp-buf buf)) + (mapc #'(lambda (fun) + (unless (funcall fun buf first-buf) + (setq tmp-buf nil))) + buffers-tab-filter-functions) + tmp-buf)) + buffers)))) ;; maybe shorten list of buffers (and (integerp buffers-tab-max-size) (> buffers-tab-max-size 1) @@ -269,14 +288,11 @@ (defun add-tab-to-gutter () "Put a tab control in the gutter area to hold the most recent buffers." (setq gutter-buffers-tab-orientation (default-gutter-position)) - (let ((gutter-string (copy-sequence "\n"))) - (unless gutter-buffers-tab-extent - (setq gutter-buffers-tab-extent (make-extent 0 1 gutter-string))) - (set-extent-begin-glyph - gutter-buffers-tab-extent - (setq gutter-buffers-tab - (make-glyph))) - + (let* ((gutter-string (copy-sequence "\n")) + (gutter-buffers-tab-extent (make-extent 0 1 gutter-string))) + (set-extent-begin-glyph gutter-buffers-tab-extent + (setq gutter-buffers-tab + (make-glyph))) ;; Nuke all existing tabs (remove-gutter-element top-gutter 'buffers-tab) (remove-gutter-element bottom-gutter 'buffers-tab) @@ -298,17 +314,11 @@ ((eq gutter-buffers-tab-orientation 'left) (set-specifier left-gutter-border-width 0 'global x) (set-gutter-element left-gutter 'buffers-tab - gutter-string 'global x) - (set-specifier left-gutter-width - (glyph-width gutter-buffers-tab) - 'global x)) + gutter-string 'global x)) ((eq gutter-buffers-tab-orientation 'right) (set-specifier right-gutter-border-width 0 'global x) (set-gutter-element right-gutter 'buffers-tab - gutter-string 'global x) - (set-specifier right-gutter-width - (glyph-width gutter-buffers-tab) - 'global x)) + gutter-string 'global x)) ))) (console-type-list)))) @@ -333,21 +343,33 @@ (eq gutter-buffers-tab-orientation 'bottom)) '(gutter-pixel-width) '(gutter-pixel-height)) :items (buffers-tab-items nil frame force-selection)) - frame))))) + frame) + ;; set-glyph-image will not make the gutter dirty + (set-specifier-dirty-flag + (eval (intern (concat + (symbol-name gutter-buffers-tab-orientation) + "-gutter")))))))) ;; A myriad of different update hooks all doing slightly different things -(add-hook 'create-frame-hook - #'(lambda (frame) - (when gutter-buffers-tab (update-tab-in-gutter frame t)))) -(add-hook 'buffer-list-changed-hook 'update-tab-in-gutter) -(add-hook 'default-gutter-position-changed-hook - #'(lambda () - (when gutter-buffers-tab - (mapc #'update-tab-in-gutter (frame-list))))) -(add-hook 'gutter-element-visibility-changed-hook - #'(lambda (prop visible-p) - (when (and (eq prop 'buffers-tab) visible-p) - (mapc #'update-tab-in-gutter (frame-list))))) +(add-one-shot-hook + 'after-init-hook + #'(lambda () + ;; don't add the hooks if the user really doesn't want them + (when gutter-buffers-tab-enabled + (add-hook 'create-frame-hook + #'(lambda (frame) + (when gutter-buffers-tab (update-tab-in-gutter frame t)))) + (add-hook 'buffer-list-changed-hook 'update-tab-in-gutter) + (add-hook 'default-gutter-position-changed-hook + #'(lambda () + (when gutter-buffers-tab + (mapc #'update-tab-in-gutter (frame-list))))) + (add-hook 'gutter-element-visibility-changed-hook + #'(lambda (prop visible-p) + (when (and (eq prop 'buffers-tab) visible-p) + (mapc #'update-tab-in-gutter (frame-list))))) + (update-tab-in-gutter (selected-frame) t)))) + ;; ;; progress display ;; ripped off from message display diff -r a8296e22da4e -r 576fb035e263 lisp/gutter.el --- a/lisp/gutter.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/gutter.el Mon Aug 13 11:36:19 2007 +0200 @@ -60,15 +60,15 @@ buffer-local. The gutter element symbol is passed as an argument to the hook, as is the visibility flag.") -(defun set-gutter-element (gutter-specifier prop val &optional locale tag-set) - "Set GUTTER-SPECIFIER gutter element PROP to VAL in optional LOCALE. +(defun set-gutter-element (gutter-specifier prop value &optional locale tag-set) + "Set GUTTER-SPECIFIER gutter element PROP to VALUE in optional LOCALE. This is a convenience function for setting gutter elements. -VAL in general must be a string. If VAL is a glyph then a string will be -created to put the glyph into." - (let ((spec val)) - (when (glyphp val) +VALUE in general must be a string. If VALUE is a glyph then a string +will be created to put the glyph into." + (let ((spec value)) + (when (glyphp value) (setq spec (copy-sequence "\n")) - (set-extent-begin-glyph (make-extent 0 1 spec) val)) + (set-extent-begin-glyph (make-extent 0 1 spec) value)) (map-extents #'(lambda (extent arg) (set-extent-property extent 'duplicable t)) spec) (modify-specifier-instances gutter-specifier #'plist-put (list prop spec) diff -r a8296e22da4e -r 576fb035e263 lisp/help.el --- a/lisp/help.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/help.el Mon Aug 13 11:36:19 2007 +0200 @@ -51,7 +51,7 @@ (defvar help-map (let ((map (make-sparse-keymap))) (set-keymap-name map 'help-map) (set-keymap-prompt - map (purecopy (gettext "(Type ? for further options)"))) + map (gettext "(Type ? for further options)")) map) "Keymap for characters following the Help key.") @@ -304,7 +304,7 @@ Like `key-binding', but handles menu events and toolbar presses correctly. KEY is any value returned by `next-command-event'. MENU-FLAG is a symbol that should be set to t if KEY is a menu event, - or nil otherwise" + or nil otherwise." (let (defn) (and menu-flag (set menu-flag nil)) ;; If the key typed was really a menu selection, grab the form out @@ -663,10 +663,10 @@ (defun describe-bindings (&optional prefix mouse-only-p) "Show a list of all defined keys, and their definitions. The list is put in a buffer, which is displayed. -If the optional argument PREFIX is supplied, only commands which -start with that sequence of keys are described. -If the second argument (prefix arg, interactively) is non-null -then only the mouse bindings are displayed." +If optional first argument PREFIX is supplied, only commands +which start with that sequence of keys are described. +If optional second argument MOUSE-ONLY-P (prefix arg, interactively) +is non-nil then only the mouse bindings are displayed." (interactive (list nil current-prefix-arg)) (with-displaying-help-buffer (lambda () @@ -883,7 +883,7 @@ help-map) (defmacro with-syntax-table (syntab &rest body) - "Evaluate BODY with the syntax-table SYNTAB" + "Evaluate BODY with the SYNTAB as the current syntax table." `(let ((stab (syntax-table))) (unwind-protect (progn @@ -1164,7 +1164,7 @@ (defvar help-symbol-function-and-variable-context-menu '("---" - ["View Function %_Documentation" (help-symbol-run-function + ["View Function %_Documentation" (help-symbol-run-function 'describe-function)] ["View Variable D%_ocumentation" (help-symbol-run-function 'describe-variable)] diff -r a8296e22da4e -r 576fb035e263 lisp/hyper-apropos.el --- a/lisp/hyper-apropos.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/hyper-apropos.el Mon Aug 13 11:36:19 2007 +0200 @@ -1085,12 +1085,13 @@ nil (forward-char 3) (read (point-marker)))) - ((and - (eq major-mode 'hyper-apropos-help-mode) - (> (point) (point-min))) - (save-excursion - (goto-char (point-min)) - (hyper-apropos-this-symbol))) + ;; What's this? This ends up in the same symbol already described. +;; ((and +;; (eq major-mode 'hyper-apropos-help-mode) +;; (> (point) (point-min))) +;; (save-excursion +;; (goto-char (point-min)) +;; (hyper-apropos-this-symbol))) (t (let* ((st (progn (skip-syntax-backward "w_") diff -r a8296e22da4e -r 576fb035e263 lisp/indent.el --- a/lisp/indent.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/indent.el Mon Aug 13 11:36:19 2007 +0200 @@ -64,9 +64,9 @@ ;; XEmacs: (Need the `1+') (indent-to (* tab-width (1+ (/ (current-column) tab-width))))))) -(defun indent-rigidly (start end arg) - "Indent all lines starting in the region sideways by ARG columns. -Called from a program, takes three arguments, START, END and ARG." +(defun indent-rigidly (start end count) + "Indent all lines starting in the region sideways by COUNT columns. +Called from a program, takes three arguments, START, END and COUNT." (interactive "r\np") (save-excursion (goto-char end) @@ -80,7 +80,7 @@ (skip-chars-forward " \t") (setq eol-flag (eolp))) (or eol-flag - (indent-to (max 0 (+ indent arg)) 0)) + (indent-to (max 0 (+ indent count)) 0)) (delete-region (point) (progn (skip-chars-forward " \t") (point)))) (forward-line 1)) (move-marker end nil) @@ -139,7 +139,8 @@ (defun delete-to-left-margin (&optional from to) "Remove left margin indentation from a region. -This deletes to the column given by `current-left-margin'. +The amount of indentation to delete is determined by calling the +function `current-left-margin'. In no case will it delete non-whitespace. Args FROM and TO are optional; default is the whole buffer." (save-excursion @@ -264,16 +265,16 @@ With optional argument, move forward N-1 lines first. From the beginning of the line, moves past the left-margin indentation, the fill-prefix, and any indentation used for centering or right-justifying the -line, but does not move past any whitespace that was explicitly inserted +line, but does not move past any whitespace that was explicitly inserted \(such as a tab used to indent the first line of a paragraph)." (interactive "p") (beginning-of-line n) (skip-chars-forward " \t") ;; Skip over fill-prefix. - (if (and fill-prefix + (if (and fill-prefix (not (string-equal fill-prefix ""))) (if (equal fill-prefix - (buffer-substring + (buffer-substring (point) (min (point-max) (+ (length fill-prefix) (point))))) (forward-char (length fill-prefix))) (if (and adaptive-fill-mode adaptive-fill-regexp diff -r a8296e22da4e -r 576fb035e263 lisp/info.el --- a/lisp/info.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/info.el Mon Aug 13 11:36:19 2007 +0200 @@ -428,9 +428,9 @@ (const :tag "conservative" conservative)) :group 'info) -(defvar Info-emacs-info-file-name "xemacs.info" - "The filename of the XEmacs info for -`Info-goto-emacs-command-node' (`\\\\[Info-goto-emacs-command-node]')") +(defconst Info-emacs-info-file-name "xemacs.info" + "The filename of the XEmacs info for `Info-goto-emacs-command-node' +(`\\\\[Info-goto-emacs-command-node]')") ;;;###autoload (defvar Info-directory-list nil @@ -447,12 +447,10 @@ (setq Info-directory-list (cons \"~/info\" Info-directory-list))") -(defcustom Info-localdir-heading-regexp - "^Locally installed XEmacs Packages:?" +;; This could as well be hard-coded since ${srcdir}/info/dir is in CVS --dv +(defconst Info-localdir-heading-regexp "^Local Packages:$" "The menu part of localdir files will be inserted below this topic -heading." - :type 'regexp - :group 'info) +heading.") (defface info-node '((t (:bold t :italic t))) "Face used for node links in info." @@ -462,25 +460,41 @@ "Face used for cross-references in info." :group 'info-faces) -;; Is this right for NT? .zip, with -c for to stdout, right? -(defvar Info-suffix-list '( ("" . nil) - (".info" . nil) - (".info.bz2" . "bzip2 -dc %s") - (".info.gz" . "gzip -dc %s") - (".info-z" . "gzip -dc %s") - (".info.Z" . "uncompress -c %s") - (".bz2" . "bzip2 -dc %s") - (".gz" . "gzip -dc %s") - (".Z" . "uncompress -c %s") - (".zip" . "unzip -c %s") ) - "List of file name suffixes and associated decoding commands. +;; This list is based on Karl Berry-s advice about extensions `info' itself +;; might encounter. --dv +(defcustom Info-suffix-list '(("" . nil) + (".info" . nil) + (".gz" . "gzip -dc %s") + (".info.gz" . "gzip -dc %s") + (".z" . "gzip -dc %s") + (".info.z" . "gzip -dc %s") + (".bz2" . "bzip2 -dc %s") + (".info.bz2" . "bzip2 -dc %s") + (".Z" . "uncompress -c %s") + (".info.Z" . "uncompress -c %s") + (".zip" . "unzip -c %s") + (".info.zip" . "unzip -c %s") + (".y" . "cat %s | unyabba") + ("info.y" . "cat %s | unyabba") + ;; These ones are for MS-DOS filenames. + (".inf" . nil) + (".igz" . "gzip -dc %s") + (".inz" . "gzip -c %s")) + "*List of file name suffixes and associated decoding commands. Each entry should be (SUFFIX . STRING); if STRING contains %s, that is changed to name of the file to decode, otherwise the file is given to -the command as standard input. If STRING is nil, no decoding is done.") +the command as standard input. If STRING is nil, no decoding is done." + :type '(repeat (cons (string :tag "suffix") + (choice :tag "command" + (const :tag "none" :value nil) + (string :tag "")))) + :group 'info) -(defvar Info-footnote-tag "Note" +(defcustom Info-footnote-tag "Note" "*Symbol that identifies a footnote or cross-reference. -All \"*Note\" references will be changed to use this word instead.") +All \"*Note\" references will be changed to use this word instead." + :type 'string + :group 'info) (defvar Info-current-file nil "Info file that Info is now looking at, or nil. @@ -508,6 +522,7 @@ (defvar Info-index-alternatives nil "List of possible matches for last Info-index command.") + (defvar Info-index-first-alternative nil) (defcustom Info-annotations-path @@ -545,8 +560,10 @@ ") -(defvar Info-no-description-string "[No description available]" - "Description string for info files that have none") +(defcustom Info-no-description-string "[No description available]" + "*Description string for info files that have none" + :type 'string + :group 'info) ;;;###autoload (defun info (&optional file) @@ -610,13 +627,16 @@ (Info-find-file-node nil nodename no-going-back tryfile line)) ;; Convert filename to lower case if not found as specified. ;; Expand it, look harder... - ((let (temp temp-downcase found - (fname (substitute-in-file-name filename))) + ((let ((fname (substitute-in-file-name filename)) + temp found) (let ((dirs (cond - ((string-match "^\\./" fname) ; If specified name starts with `./' - (list default-directory)) ; then just try current directory. + ;; If specified name starts with `./', then just try + ;; current directory. No point in searching for an absolute + ;; file name + ((string-match "^\\./" fname) + (list default-directory)) ((file-name-absolute-p fname) - '(nil)) ; No point in searching for an absolute file name + '(nil)) (Info-additional-search-directory-list (append Info-directory-list Info-additional-search-directory-list)) @@ -624,12 +644,7 @@ ;; Search the directory list for file FNAME. (while (and dirs (not found)) (setq temp (expand-file-name fname (car dirs))) - (setq temp-downcase - (expand-file-name (downcase fname) (car dirs))) - (if (equal temp-downcase temp) (setq temp-downcase nil)) - ;; Try several variants of specified name. - ;; Try downcasing, appending a suffix, or both. - (setq found (Info-suffixed-file temp temp-downcase)) + (setq found (Info-suffixed-file temp)) (setq dirs (cdr dirs))) (if found (progn (setq filename (expand-file-name found)) @@ -742,10 +757,10 @@ (set-buffer (marker-buffer Info-tag-table-marker)) (goto-char m) (setq foun (re-search-forward regexp nil t)) - (if foun + (if foun (setq guesspos (read (current-buffer)))) (setq found-mode major-mode)) - (if foun + (if foun ;; If this is an indirect file, ;; determine which file really holds this node ;; and read it in. @@ -820,7 +835,7 @@ (defun Info-insert-dir () "Construct the Info directory node by merging the files named -\"dir\" or \"localdir\" from the directories in `Info-directory-list' +\"dir\" or \"localdir\" from the directories in `Info-directory-list'. The \"dir\" files will take precedence in cases where both exist. It sets the *info* buffer's `default-directory' to the first directory we actually get any text from." @@ -846,25 +861,26 @@ (let ((truename (file-truename (expand-file-name (car dirs))))) (or (member truename dirs-done) (member (directory-file-name truename) dirs-done) - ;; Try several variants of specified name. - ;; Try upcasing, appending `.info', or both. - (let* (buf - file - (attrs - (or - (progn (setq file (expand-file-name "dir" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "DIR" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "dir.info" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "DIR.INFO" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "localdir" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "dir" truename)) - nil) - ))) + ;; Karl Berry recently added the ability all possibilities for + ;; extension as for normal info files. This code however is + ;; still unsatisfactory: if one day, we find a compressed dir + ;; file (which looks possible), we should be able to handle it + ;; (which means decompress and read it, update it, save and + ;; recompress it). --dv + (let ((trials '("dir" "DIR" + "dir.info" "DIR.INFO" + "dir.inf" "DIR.INF" + "localdir" "LOCALDIR" + "localdir.info" "LOCALDIR.INFO" + "localdir.inf" "LOCALDIR.INF")) + buf file attrs) + (catch 'found + (while (setq file (pop trials)) + (setq file (expand-file-name file truename)) + (and (setq attrs (file-attributes file)) + (throw 'found t)))) + (unless file + (setq file (expand-file-name "dir" truename))) (setq dirs-done (cons truename (cons (directory-file-name truename) @@ -1020,10 +1036,55 @@ (setq default-directory Info-dir-contents-directory) (setq buffer-file-name (caar Info-dir-file-attributes))) +(defmacro Info-directory-files (dir-file &optional all full nosort files-only) + "Return a list of Info files living in the same directory as DIR-FILE. +This list actually contains the files living in this directory, except for +the dir file itself and the secondary info files (foo-1 foo-2 etc). + +If the optional argument ALL is non nil, the secondary info files are also +included in the list. + +Please refer to the function `directory-files' for the meaning of the other +optional arguments." + `(let* ((dir (file-name-directory ,dir-file)) + (all-files (remove ,dir-file (directory-files dir ',full nil ',nosort + ',files-only)))) + (setq all-files + (if ,full + (remove (concat dir ".") + (remove (concat dir "..") all-files)) + (remove "." + (remove ".." all-files)))) + (if ,all + all-files + (let ((suff-match + (concat "-[0-9]+\\(" + ;; Extract all known compression suffixes from + ;; Info-suffix-list. These suffixes can typically be + ;; found in entries of the form `.info.something'. + (let ((suff-list Info-suffix-list) + suff regexp) + (while (setq suff (pop suff-list)) + (and (string-match "^\\.info" (car suff)) + (setq regexp (concat regexp + (regexp-quote + (substring + (car suff) 5)) + (and suff-list "\\|"))))) + regexp) + "\\)?$")) + info-files file) + (while (setq file (pop all-files)) + (or (string-match suff-match file) + (push file info-files))) + (reverse info-files) + )) + )) + (defun Info-maybe-update-dir (file) "Rebuild dir or localdir according to `Info-auto-generate-directory'." (unless (or (not (file-exists-p (file-name-directory file))) - (null (directory-files (file-name-directory file) nil "\\.info"))) + (null (Info-directory-files file 'all))) (if (not (find-buffer-visiting file)) (if (not (file-exists-p file)) (if (or (eq Info-auto-generate-directory 'always) @@ -1042,8 +1103,7 @@ dir or localdir are outdated when an info file in the same directory has been modified more recently." (let ((dir-mod-time (nth 5 (file-attributes file))) - f-mod-time - newer) + f-mod-time newer) (setq Info-dir-newer-info-files nil) (mapcar #'(lambda (f) @@ -1051,22 +1111,18 @@ (setq f-mod-time (nth 5 (file-attributes f))) (setq newer (or (> (car f-mod-time) (car dir-mod-time)) (and (= (car f-mod-time) (car dir-mod-time)) - (> (car (cdr f-mod-time)) (car (cdr dir-mod-time)))))) - (if (and (file-readable-p f) - newer) + (> (car (cdr f-mod-time)) + (car (cdr dir-mod-time)))))) + (if (and (file-readable-p f) newer) (setq Info-dir-newer-info-files (cons f Info-dir-newer-info-files))))) - (directory-files (file-name-directory file) - 'fullname - ".*\\.info\\(\\.gz\\|\\.bz2\\|\\.Z\\|-z\\|\\.zip\\)?$" - 'nosort - t)) + (Info-directory-files file nil 'fullname 'nosort t)) Info-dir-newer-info-files)) (defun Info-extract-dir-entry-from (file) "Extract the dir entry from the info FILE. The dir entry is delimited by the markers `START-INFO-DIR-ENTRY' -and `END-INFO-DIR-ENTRY'" +and `END-INFO-DIR-ENTRY'." (save-excursion (set-buffer (get-buffer-create " *Info-tmp*")) (when (file-readable-p file) @@ -1080,15 +1136,16 @@ (goto-char (match-beginning 0)) (car (Info-parse-dir-entries beg (point))))))))) -;; Parse dir entries contained between BEG and END into a list of the form +;; Parse dir entries contained between START and END into a list of the form ;; (filename topic node (description-line-1 description-line-2 ...)) -(defun Info-parse-dir-entries (beg end) +(defun Info-parse-dir-entries (start end) (let (entry entries) (save-excursion (save-restriction - (narrow-to-region beg end) - (goto-char beg) - (while (re-search-forward "^\\* \\([^:]+\\):\\([ \t]*(\\([^)]*\\))\\w*\\.\\|:\\)" nil t) + (narrow-to-region start end) + (goto-char start) + (while (re-search-forward + "^\\* \\([^:]+\\):\\([ \t]*(\\([^)]*\\))\\w*\\.\\|:\\)" nil t) (setq entry (list (match-string 2) (match-string 1) (downcase (or (match-string 3) @@ -1135,36 +1192,31 @@ (defun Info-build-dir-anew (directory) "Build info directory information for DIRECTORY. The generated directory listing may be saved to a `dir' according -to the value of `Info-save-auto-generated-dir'" +to the value of `Info-save-auto-generated-dir'." (save-excursion (let* ((dirfile (expand-file-name "dir" directory)) (to-temp (or (null Info-save-auto-generated-dir) (eq Info-save-auto-generated-dir 'never) (and (not (file-writable-p dirfile)) - (message "File not writable %s. Using temporary." dirfile)))) - (info-files - (directory-files directory - 'fullname - ".*\\.info\\(.gz\\|.Z\\|-z\\|.zip\\)?$" - nil - t))) + (message "File not writable %s. Using temporary." + dirfile)))) + (info-files (Info-directory-files dirfile nil 'fullname nil t))) (if to-temp (message "Creating temporary dir in %s..." directory) (message "Creating %s..." dirfile)) (set-buffer (find-file-noselect dirfile t)) (setq buffer-read-only nil) (erase-buffer) - (insert Info-dir-prologue - "Info files in " directory ":\n\n") + (insert Info-dir-prologue "Info files in " directory ":\n\n") (Info-dump-dir-entries (mapcar #'(lambda (f) (or (Info-extract-dir-entry-from f) (list 'dummy - (progn - (string-match "\\(.*\\)\\.info\\(.gz\\|.Z\\|-z\\|.zip\\)?$" - (file-name-nondirectory f)) - (capitalize (match-string 1 (file-name-nondirectory f)))) + (progn (string-match "\\([^.]*\\)\\(\\..*\\)?$" + (file-name-nondirectory f)) + (capitalize + (match-string 1 (file-name-nondirectory f)))) ":" (list Info-no-description-string)))) info-files)) @@ -1182,7 +1234,7 @@ directory and the contents of FILE with the description in info files taking precedence over descriptions in FILE. The generated directory listing may be saved to a `dir' according to -the value of `Info-save-auto-generated-dir' " +the value of `Info-save-auto-generated-dir'." (save-excursion (save-restriction (let (dir-section-contents dir-full-contents @@ -1198,7 +1250,8 @@ (message "File not writable %s. Using temporary." file)) (and (eq Info-save-auto-generated-dir 'conservative) (or (and (not (file-writable-p file)) - (message "File not writable %s. Using temporary." file)) + (message + "File not writable %s. Using temporary." file)) (not (y-or-n-p (message "%s is outdated. Overwrite ? " file)))))))) @@ -1216,13 +1269,14 @@ (match-beginning 0)))) (throw 'done nil)) (setq dir-full-contents (Info-parse-dir-entries mark (point-max))) - (setq next-section (or (and (re-search-forward "^[^* \t].*:[ \t]*$" nil t) + (setq next-section (or (and (re-search-forward "^[^* \t].*:[ \t]*$" + nil t) (match-beginning 0)) (point-max))) (while next-section (narrow-to-region mark next-section) - (setq dir-section-contents (nreverse (Info-parse-dir-entries (point-min) - (point-max)))) + (setq dir-section-contents (nreverse (Info-parse-dir-entries + (point-min) (point-max)))) (mapcar #'(lambda (file) (setq dir-entry (assoc (downcase @@ -1232,8 +1286,8 @@ file-dir-entry (Info-extract-dir-entry-from file)) (if dir-entry (if file-dir-entry - ;; A dir entry in the info file takes precedence over an - ;; existing entry in the dir file + ;; A dir entry in the info file takes precedence over + ;; an existing entry in the dir file (setcdr dir-entry (cdr file-dir-entry))) (unless (or not-first-section (assoc (downcase @@ -1241,12 +1295,13 @@ (file-name-nondirectory file))) dir-full-contents)) (if file-dir-entry - (setq dir-section-contents (cons file-dir-entry - dir-section-contents)) + (setq dir-section-contents + (cons file-dir-entry dir-section-contents)) (setq dir-section-contents (cons (list 'dummy (capitalize (file-name-sans-extension - (file-name-nondirectory file))) + (file-name-nondirectory + file))) ":" (list Info-no-description-string)) dir-section-contents)))))) @@ -1259,7 +1314,8 @@ (or (setq mark (and (re-search-forward "^\\* " nil t) (match-beginning 0))) (throw 'done nil)) - (setq next-section (or (and (re-search-forward "^[^* \t].*:[ \t]*$" nil t) + (setq next-section (or (and (re-search-forward + "^[^* \t].*:[ \t]*$" nil t) (match-beginning 0)) (point-max)))) (setq not-first-section t))) @@ -1272,11 +1328,12 @@ ;;;###autoload (defun Info-batch-rebuild-dir () - "(Re)build info `dir' files in the directories remaining on the command line. -Use this from the command line, with `-batch'; -it won't work in an interactive Emacs. -Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" + "(Re)build `dir' files in the directories remaining on the command line. +Use this from the command line, with `-batch', it won't work in an +interactive XEmacs. + +Each file is processed even if an error occurred previously. For example, +invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"." ;; command-line-args-left is what is left of the command line (from ;; startup.el) (defvar command-line-args-left) ; Avoid 'free variable' warning @@ -1289,7 +1346,8 @@ (message "Warning: Skipped %s. Not a directory." (car command-line-args-left)) (setq dir (expand-file-name "dir" (car command-line-args-left))) - (setq localdir (expand-file-name "localdir" (car command-line-args-left))) + (setq localdir (expand-file-name "localdir" + (car command-line-args-left))) (cond ((file-exists-p dir) (Info-rebuild-dir dir)) @@ -1331,10 +1389,10 @@ (catch 'foo (while (not (looking-at "\^_")) (if (not (eolp)) - (let ((beg (point)) + (let ((start (point)) thisfilepos thisfilename) (search-forward ": ") - (setq thisfilename (buffer-substring beg (- (point) 2))) + (setq thisfilename (buffer-substring start (- (point) 2))) (setq thisfilepos (read (current-buffer))) ;; read in version 19 stops at the end of number. ;; Advance to the next line. @@ -1353,7 +1411,8 @@ (Info-insert-file-contents (Info-suffixed-file (expand-file-name lastfilename (file-name-directory - Info-current-file))) + Info-current-file)) + 'exact) t) (set-buffer-modified-p nil) (setq Info-current-subfile lastfilename))) @@ -1361,36 +1420,90 @@ (search-forward "\n\^_") (+ (- nodepos lastfilepos) (point)))) -(defun Info-suffixed-file (name &optional name2) - "Look for NAME with each of the `Info-suffix-list' extensions in -turn. Optional NAME2 is the name of a fallback info file to check -for; usually a downcased version of NAME." - (let ((suff Info-suffix-list) - (found nil) - file file2) - (while (and suff (not found)) - (setq file (concat name (caar suff)) - file2 (and name2 (concat name2 (caar suff)))) - (cond - ((file-regular-p file) - (setq found file)) - ((and file2 (file-regular-p file2)) - (setq found file2)) - (t - (setq suff (cdr suff))))) - (or found - (and name (when (file-regular-p name) - name)) - (and name2 (when (file-regular-p name2) - name2))))) +(defun Info-all-case-regexp (str) + (let ((regexp "") + (len (length str)) + (i 0) + c) + (while (< i len) + (setq c (aref str i)) + (cond ((or (and (>= c ?A) (<= c ?Z)) + (and (>= c ?a) (<= c ?z))) + (setq regexp (concat regexp + "[" + (char-to-string (downcase c)) + "\\|" + (char-to-string (upcase c)) + "]"))) + (t + (setq regexp (concat regexp (char-to-string c))))) + (setq i (1+ i))) + regexp)) + +(defun Info-suffixed-file (name &optional exact) + "Look for an info file named NAME. This function tries to be smart in +finding the file corresponding to NAME: if it doesn't exist, several +variants are looked for, notably by appending suffixes from +`Info-suffix-list' and by trying to change the characters case in NAME. + +The optional argument EXACT prevents this function from trying different case +versions of NAME. Only the suffixes are tried." + (catch 'found + ;; First, try NAME alone: + (and (file-regular-p name) (throw 'found name)) + ;; Then, try different variants + (let ((suff-match (concat "\\(" + (let ((suff-list Info-suffix-list) + suff regexp) + (while (setq suff (pop suff-list)) + (setq regexp + (concat regexp + (regexp-quote (car suff)) + (and suff-list "\\|")))) + regexp) + "\\)?$")) + (dir (file-name-directory name)) + file files) + (setq name (file-name-nondirectory name)) + (setq files + (condition-case data ;; protect against invalid directory + ;; First, try NAME[.] + (append + (directory-files dir 'fullname + (concat "^" (regexp-quote name) suff-match) + nil t) + (if exact + nil + ;; Then, try to match the name independantly of the + ;; characters case. + (directory-files dir 'fullname + (Info-all-case-regexp + (concat "^" + (regexp-quote name) + suff-match)) + nil t))) + (t + (display-warning 'info + (format "directory `%s' error: %s" dir data)) + nil))) + (while (setq file (pop files)) + (and (file-regular-p file) + (throw 'found file))) + ))) (defun Info-insert-file-contents (file &optional visit) (setq file (expand-file-name file default-directory)) - (let ((suff Info-suffix-list)) - (while (and suff (or (<= (length file) (length (car (car suff)))) - (not (equal (substring file - (- (length (car (car suff))))) - (car (car suff)))))) + (let ((suff Info-suffix-list) + len) + (while (and suff + (setq len (length (car (car suff)))) + (or (<= (length file) len) + (not (or + (equal (substring file (- len)) + (car (car suff))) + (equal (substring file (- len)) + (upcase (car (car suff))))) + ))) (setq suff (cdr suff))) (if (stringp (cdr (car suff))) (let ((command (if (string-match "%s" (cdr (car suff))) @@ -1457,9 +1570,10 @@ (concat "(" (if Info-current-file - (let ((name (file-name-nondirectory Info-current-file))) - (if (string-match "\\.info$" name) - (substring name 0 -5) + (let ((name (file-name-nondirectory + Info-current-file))) + (if (string-match "^\\([^.]*\\)\\..*$" name) + (match-string 1 name) name)) "") ")" @@ -1538,11 +1652,13 @@ (cond ((eq code nil) (if no-completion string - (try-completion string Info-read-node-completion-table predicate))) + (try-completion string Info-read-node-completion-table + predicate))) ((eq code t) (if no-completion nil - (all-completions string Info-read-node-completion-table predicate))) + (all-completions string Info-read-node-completion-table + predicate))) ((eq code 'lambda) (if no-completion t @@ -1595,10 +1711,10 @@ (goto-char (point-min)) (while (search-forward "\n\^_" nil t) (forward-line 1) - (let ((beg (point))) + (let ((start (point))) (forward-line 1) (if (re-search-backward "Node: *\\([^,\n]*\\) *[,\n\t]" - beg t) + start t) (setq compl (cons (list (buffer-substring (match-beginning 1) (match-end 1))) @@ -1634,7 +1750,8 @@ (condition-case nil (progn (re-search-forward regexp) (setq found (point))) (search-failed nil))))) - (if (not found) ;can only happen in subfile case -- else would have erred + (if (not found) + ;; can only happen in subfile case -- else would have erred (unwind-protect (let ((list ())) (save-excursion @@ -1652,8 +1769,9 @@ (re-search-forward "\\(^.*\\): [0-9]+$") (goto-char (+ (match-end 1) 2)) (setq list (cons (cons (read (current-buffer)) - (buffer-substring (match-beginning 1) - (match-end 1))) + (buffer-substring + (match-beginning 1) + (match-end 1))) list)) (goto-char (1+ (match-end 0)))) (setq list (nreverse list) @@ -1879,13 +1997,13 @@ (defun Info-extract-menu-node-name (&optional errmessage multi-line) (skip-chars-forward " \t\n") - (let ((beg (point)) + (let ((start (point)) str i) (skip-chars-forward "^:") (forward-char 1) (setq str (if (looking-at ":") - (buffer-substring beg (1- (point))) + (buffer-substring start (1- (point))) (skip-chars-forward " \t\n") ;; Kludge. ;; Allow dots in node name not followed by whitespace. @@ -2378,6 +2496,7 @@ (defvar Info-annotate-map nil "Local keymap used within `a' command of Info.") + (if Info-annotate-map nil ;; (setq Info-annotate-map (nconc (make-sparse-keymap) text-mode-map)) @@ -2693,6 +2812,7 @@ (defvar Info-mode-map nil "Keymap containing Info commands.") + (if Info-mode-map nil (setq Info-mode-map (make-sparse-keymap)) @@ -2855,6 +2975,7 @@ (defvar Info-edit-map nil "Local keymap used within `e' command of Info.") + (if Info-edit-map nil ;; XEmacs: remove FSF stuff @@ -2994,19 +3115,22 @@ (while (looking-at "[ \t]*[^:, \t\n]+:[ \t]+\\([^:,\t\n]+\\),?\n?") (goto-char (match-end 0)) - (Info-highlight-region (match-beginning 1) (match-end 1) 'info-xref)))) + (Info-highlight-region (match-beginning 1) (match-end 1) + 'info-xref)))) ;; Now get the xrefs in the body (goto-char (point-min)) (while (re-search-forward xref-regexp nil t) (if (= (char-after (1- (match-beginning 0))) ?\") ; hack nil - (Info-highlight-region (match-beginning 1) (match-end 1) 'info-xref))) + (Info-highlight-region (match-beginning 1) (match-end 1) + 'info-xref))) ;; then highlight the nodes in the menu. (goto-char (point-min)) (if (and (search-forward "\n* menu:" nil t)) (while (re-search-forward "^\\* \\([^:\t\n]*\\):?:[ \t\n]" nil t) - (Info-highlight-region (match-beginning 1) (match-end 1) 'info-node))) + (Info-highlight-region (match-beginning 1) (match-end 1) + 'info-node))) (set-buffer-modified-p nil)))) (defun Info-construct-menu (&optional event) diff -r a8296e22da4e -r 576fb035e263 lisp/isearch-mode.el --- a/lisp/isearch-mode.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/isearch-mode.el Mon Aug 13 11:36:19 2007 +0200 @@ -180,8 +180,8 @@ This variable makes a difference when `search-invisible' is set to `open'. It means that after search makes some invisible text visible to show the match, it makes the text invisible again when the match moves. -Ordinarily the text becomes invisible again at the end of the search." - :type 'boolean +Ordinarily the text becomes invisible again at the end of the search." + :type 'boolean :group 'isearch) (defvar isearch-mode-hook nil @@ -674,7 +674,7 @@ (defun isearch-update-ring (string &optional regexp) "Add STRING to the beginning of the search ring. REGEXP says which ring to use." - (if regexp + (if regexp (if (or (null regexp-search-ring) (not (string= string (car regexp-search-ring)))) (progn @@ -1722,18 +1722,18 @@ (put extent 'invisible nil) (put extent 'intangible nil)) -(defun isearch-range-invisible (beg end) - "Return t if all the text from BEG to END is invisible. +(defun isearch-range-invisible (start end) + "Return t if all the text from START to END is invisible. Before that, if search-invisible is `open', unhide the extents with an `isearch-open-invisible' property." ;; isearch-search uses this to skip the extents that are invisible, ;; but don't have `isearch-open-invisible' set. It is unclear - ;; what's supposed to happen if only a part of [BEG, END) overlaps + ;; what's supposed to happen if only a part of [START, END) overlaps ;; the extent. (let (to-be-unhidden) (if (map-extents (lambda (extent ignored) - (if (and (<= (extent-start-position extent) beg) + (if (and (<= (extent-start-position extent) start) (>= (extent-end-position extent) end)) ;; All of the region is covered by the extent. (if (and (eq search-invisible 'open) @@ -1747,7 +1747,7 @@ t) ;; Else, keep looking. nil)) - nil beg end nil 'all-extents-closed 'invisible) + nil start end nil 'all-extents-closed 'invisible) ;; The whole match must be skipped. Signal it by returning t ;; to the caller. t @@ -1766,9 +1766,9 @@ (remprop extent 'isearch-intangible)) ;; FSF calls this function `isearch-clean-overlays'. -(defun isearch-restore-invisible-extents (beg end) +(defun isearch-restore-invisible-extents (start end) (cond - ((null beg) + ((null start) ;; Delete all -- this is called at the end of isearch. (mapc #'isearch-restore-extent isearch-unhidden-extents) (setq isearch-unhidden-extents nil)) @@ -1777,7 +1777,7 @@ ;; restored to their hidden state. (setq isearch-unhidden-extents (delete-if (lambda (extent) - (unless (extent-in-region-p extent beg end + (unless (extent-in-region-p extent start end 'all-extents-closed) (isearch-restore-extent extent) t)) diff -r a8296e22da4e -r 576fb035e263 lisp/iso8859-1.el --- a/lisp/iso8859-1.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/iso8859-1.el Mon Aug 13 11:36:19 2007 +0200 @@ -161,9 +161,9 @@ (setq pairs (cdr pairs))) (cons 'setq (cons 'iso8859/1-case-table - (list (list 'purecopy - (list 'quote - (list downcase nil nil nil))))))))) + (list + (list 'quote + (list downcase nil nil nil)))))))) (?\300 ?\340) ; Agrave (?\301 ?\341) ; Aacute diff -r a8296e22da4e -r 576fb035e263 lisp/itimer.el --- a/lisp/itimer.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/itimer.el Mon Aug 13 11:36:19 2007 +0200 @@ -120,7 +120,7 @@ ;; signal errors appropriately if the arguments are not valid. (defmacro check-itimer (var) - "If VAR is not bound to an itimer, signal wrong-type-argument. + "If VAR is not bound to an itimer, signal `wrong-type-argument'. This is a macro." (list 'setq var (list 'if (list 'itimerp var) var @@ -139,7 +139,7 @@ (list 'list ''string-or-itimer-p var)))))) (defmacro check-nonnegative-number (var) - "If VAR is not bound to a number, signal wrong-type-argument. + "If VAR is not bound to a number, signal `wrong-type-argument'. If VAR is not bound to a positive number, signal args-out-of-range. This is a macro." (list 'setq var @@ -151,7 +151,7 @@ var)))) (defmacro check-string (var) - "If VAR is not bound to a string, signal wrong-type-argument. + "If VAR is not bound to a string, signal `wrong-type-argument'. This is a macro." (list 'setq var (list 'if (list 'stringp var) var @@ -160,16 +160,16 @@ ;; Functions to access and modify itimer attributes. -(defun itimerp (obj) - "Return non-nil if OBJ is an itimer." - (and (consp obj) (eq (length obj) 8))) +(defun itimerp (object) + "Return non-nil if OBJECT is an itimer." + (and (consp object) (eq (length object) 8))) -(defun itimer-live-p (obj) - "Return non-nil if OBJ is an itimer and is active. +(defun itimer-live-p (object) + "Return non-nil if OBJECT is an itimer and is active. ``Active'' means Emacs will run it when it expires. `activate-timer' must be called on an itimer to make it active. Itimers started with `start-itimer' are automatically active." - (and (itimerp obj) (memq obj itimer-list))) + (and (itimerp object) (memq object itimer-list))) (defun itimer-name (itimer) "Return the name of ITIMER." @@ -329,7 +329,7 @@ must be an integer. Optional fourth arg RESTART non-nil means that this itimer should be restarted automatically after its function is called. Normally an itimer - is deleted at expiration after its function has returned. + is deleted at expiration after its function has returned. If non-nil RESTART should be a number indicating the value at which the itimer should be set at restart time. Optional fifth arg IS-IDLE specifies if this is an idle timer. diff -r a8296e22da4e -r 576fb035e263 lisp/keymap.el --- a/lisp/keymap.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/keymap.el Mon Aug 13 11:36:19 2007 +0200 @@ -70,8 +70,8 @@ In other words, OLDDEF is replaced with NEWDEF wherever it appears. Prefix keymaps are checked recursively. If optional fourth argument OLDMAP is specified, we redefine in KEYMAP as NEWDEF those chars which are defined -as OLDDEF in OLDMAP, unless that keybinding is already present in keymap. -If optional fifth argument PREFIX is defined, then only those occurrences of +as OLDDEF in OLDMAP, unless that keybinding is already present in KEYMAP. +If optional fifth argument PREFIX is non-nil, then only those occurrences of OLDDEF found in keymaps accessible through the keymap bound to PREFIX in KEYMAP are redefined. See also `accessible-keymaps'." (let ((maps (accessible-keymaps (or oldmap keymap) prefix)) @@ -103,8 +103,6 @@ ))) -;; From Bill Dubuque - ;; This used to wrap forms into an interactive lambda. It is unclear ;; to me why this is needed in this function. Anyway, ;; `key-or-menu-binding' doesn't do it, so this function no longer @@ -119,7 +117,6 @@ (setq defn (key-binding defn))) ;; a keyboard macro (insert (format "%s" defn))))) -;; From Bill Dubuque (defun read-command-or-command-sexp (prompt) "Read a command symbol or command sexp. A command sexp is wrapped in an interactive lambda if needed. @@ -136,7 +133,7 @@ ,result) result))) -(defun local-key-binding (keys) +(defun local-key-binding (keys &optional accept-defaults) "Return the binding for command KEYS in current local keymap only. KEYS is a string, a vector of events, or a vector of key-description lists as described in the documentation for the `define-key' function. @@ -144,17 +141,16 @@ the documentation for `lookup-key' for more information." (let ((map (current-local-map))) (if map - (lookup-key map keys) + (lookup-key map keys accept-defaults) nil))) -(defun global-key-binding (keys) +(defun global-key-binding (keys &optional accept-defaults) "Return the binding for command KEYS in current global keymap only. KEYS is a string or vector of events, a sequence of keystrokes. The binding is probably a symbol with a function definition; see the documentation for `lookup-key' for more information." - (lookup-key (current-global-map) keys)) + (lookup-key (current-global-map) keys accept-defaults)) -;; from Bill Dubuque (defun global-set-key (key command) "Give KEY a global binding as COMMAND. COMMAND is a symbol naming an interactively-callable function. @@ -172,7 +168,6 @@ (define-key (current-global-map) key command) nil) -;; from Bill Dubuque (defun local-set-key (key command) "Give KEY a local binding as COMMAND. COMMAND is a symbol naming an interactively-callable function. diff -r a8296e22da4e -r 576fb035e263 lisp/ldap.el --- a/lisp/ldap.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/ldap.el Mon Aug 13 11:36:19 2007 +0200 @@ -5,7 +5,7 @@ ;; Author: Oscar Figueiredo ;; Maintainer: Oscar Figueiredo ;; Created: Jan 1998 -;; Version: $Revision: 1.7.2.8 $ +;; Version: $Revision: 1.7.2.9 $ ;; Keywords: help comm ;; This file is part of XEmacs @@ -21,13 +21,13 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to +;; along with XEmacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; This file provides mid-level and user-level functions to access directory -;; servers using the LDAP protocol (RFC 1777). +;; servers using the LDAP protocol (RFC 1777). ;;; Installation: ;; LDAP support must have been built into XEmacs. @@ -45,7 +45,7 @@ (defcustom ldap-default-host nil "*Default LDAP server hostname. -A TCP port number can be appended to that name using a colon as +A TCP port number can be appended to that name using a colon as a separator." :type '(choice (string :tag "Host name") (const :tag "Use library default" nil)) @@ -73,13 +73,13 @@ The format of each list element is: \(HOST PROP1 VAL1 PROP2 VAL2 ...) HOST is the hostname of an LDAP server (with an optional TCP port number -appended to it using a colon as a separator). +appended to it using a colon as a separator). PROPn and VALn are property/value pairs describing parameters for the server. Valid properties include: - `binddn' is the distinguished name of the user to bind as + `binddn' is the distinguished name of the user to bind as (in RFC 1779 syntax). `passwd' is the password to use for simple authentication. - `auth' is the authentication method to use. + `auth' is the authentication method to use. Possible values are: `simple', `krbv41' and `krbv42'. `base' is the base for the search as described in RFC 1779. `scope' is one of the three symbols `subtree', `base' or `onelevel'. @@ -95,7 +95,7 @@ (checklist :inline t :greedy t (list - :tag "Search Base" + :tag "Search Base" :inline t (const :tag "Search Base" base) string) @@ -119,7 +119,7 @@ (const :menu-tag "Kerberos 4.1" :tag "Kerberos 4.1" krbv41) (const :menu-tag "Kerberos 4.2" :tag "Kerberos 4.2" krbv42))) (list - :tag "Search Scope" + :tag "Search Scope" :inline t (const :tag "Search Scope" scope) (choice @@ -166,139 +166,139 @@ (defcustom ldap-coding-system nil "*Coding system of LDAP string values. -LDAP v3 specifies the coding system of strings to be UTF-8. +LDAP v3 specifies the coding system of strings to be UTF-8. Mule support is needed for this." :type 'symbol :group 'ldap) (defvar ldap-attribute-syntax-encoders - [nil ; 1 ACI Item N - nil ; 2 Access Point Y - nil ; 3 Attribute Type Description Y - nil ; 4 Audio N - nil ; 5 Binary N - nil ; 6 Bit String Y - ldap-encode-boolean ; 7 Boolean Y - nil ; 8 Certificate N - nil ; 9 Certificate List N - nil ; 10 Certificate Pair N - ldap-encode-country-string ; 11 Country String Y - ldap-encode-string ; 12 DN Y - nil ; 13 Data Quality Syntax Y - nil ; 14 Delivery Method Y - ldap-encode-string ; 15 Directory String Y - nil ; 16 DIT Content Rule Description Y - nil ; 17 DIT Structure Rule Description Y - nil ; 18 DL Submit Permission Y - nil ; 19 DSA Quality Syntax Y - nil ; 20 DSE Type Y - nil ; 21 Enhanced Guide Y - nil ; 22 Facsimile Telephone Number Y - nil ; 23 Fax N - nil ; 24 Generalized Time Y - nil ; 25 Guide Y - nil ; 26 IA5 String Y - number-to-string ; 27 INTEGER Y - nil ; 28 JPEG N - nil ; 29 Master And Shadow Access Points Y - nil ; 30 Matching Rule Description Y - nil ; 31 Matching Rule Use Description Y - nil ; 32 Mail Preference Y - nil ; 33 MHS OR Address Y - nil ; 34 Name And Optional UID Y - nil ; 35 Name Form Description Y - nil ; 36 Numeric String Y - nil ; 37 Object Class Description Y - nil ; 38 OID Y - nil ; 39 Other Mailbox Y - nil ; 40 Octet String Y - ldap-encode-address ; 41 Postal Address Y - nil ; 42 Protocol Information Y - nil ; 43 Presentation Address Y - ldap-encode-string ; 44 Printable String Y - nil ; 45 Subtree Specification Y - nil ; 46 Supplier Information Y - nil ; 47 Supplier Or Consumer Y - nil ; 48 Supplier And Consumer Y - nil ; 49 Supported Algorithm N - nil ; 50 Telephone Number Y - nil ; 51 Teletex Terminal Identifier Y - nil ; 52 Telex Number Y - nil ; 53 UTC Time Y - nil ; 54 LDAP Syntax Description Y - nil ; 55 Modify Rights Y - nil ; 56 LDAP Schema Definition Y - nil ; 57 LDAP Schema Description Y - nil ; 58 Substring Assertion Y - ] + [nil ; 1 ACI Item N + nil ; 2 Access Point Y + nil ; 3 Attribute Type Description Y + nil ; 4 Audio N + nil ; 5 Binary N + nil ; 6 Bit String Y + ldap-encode-boolean ; 7 Boolean Y + nil ; 8 Certificate N + nil ; 9 Certificate List N + nil ; 10 Certificate Pair N + ldap-encode-country-string ; 11 Country String Y + ldap-encode-string ; 12 DN Y + nil ; 13 Data Quality Syntax Y + nil ; 14 Delivery Method Y + ldap-encode-string ; 15 Directory String Y + nil ; 16 DIT Content Rule Description Y + nil ; 17 DIT Structure Rule Description Y + nil ; 18 DL Submit Permission Y + nil ; 19 DSA Quality Syntax Y + nil ; 20 DSE Type Y + nil ; 21 Enhanced Guide Y + nil ; 22 Facsimile Telephone Number Y + nil ; 23 Fax N + nil ; 24 Generalized Time Y + nil ; 25 Guide Y + nil ; 26 IA5 String Y + number-to-string ; 27 INTEGER Y + nil ; 28 JPEG N + nil ; 29 Master And Shadow Access Points Y + nil ; 30 Matching Rule Description Y + nil ; 31 Matching Rule Use Description Y + nil ; 32 Mail Preference Y + nil ; 33 MHS OR Address Y + nil ; 34 Name And Optional UID Y + nil ; 35 Name Form Description Y + nil ; 36 Numeric String Y + nil ; 37 Object Class Description Y + nil ; 38 OID Y + nil ; 39 Other Mailbox Y + nil ; 40 Octet String Y + ldap-encode-address ; 41 Postal Address Y + nil ; 42 Protocol Information Y + nil ; 43 Presentation Address Y + ldap-encode-string ; 44 Printable String Y + nil ; 45 Subtree Specification Y + nil ; 46 Supplier Information Y + nil ; 47 Supplier Or Consumer Y + nil ; 48 Supplier And Consumer Y + nil ; 49 Supported Algorithm N + nil ; 50 Telephone Number Y + nil ; 51 Teletex Terminal Identifier Y + nil ; 52 Telex Number Y + nil ; 53 UTC Time Y + nil ; 54 LDAP Syntax Description Y + nil ; 55 Modify Rights Y + nil ; 56 LDAP Schema Definition Y + nil ; 57 LDAP Schema Description Y + nil ; 58 Substring Assertion Y + ] "A vector of functions used to encode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2") (defvar ldap-attribute-syntax-decoders - [nil ; 1 ACI Item N - nil ; 2 Access Point Y - nil ; 3 Attribute Type Description Y - nil ; 4 Audio N - nil ; 5 Binary N - nil ; 6 Bit String Y - ldap-decode-boolean ; 7 Boolean Y - nil ; 8 Certificate N - nil ; 9 Certificate List N - nil ; 10 Certificate Pair N - ldap-decode-string ; 11 Country String Y - ldap-decode-string ; 12 DN Y - nil ; 13 Data Quality Syntax Y - nil ; 14 Delivery Method Y - ldap-decode-string ; 15 Directory String Y - nil ; 16 DIT Content Rule Description Y - nil ; 17 DIT Structure Rule Description Y - nil ; 18 DL Submit Permission Y - nil ; 19 DSA Quality Syntax Y - nil ; 20 DSE Type Y - nil ; 21 Enhanced Guide Y - nil ; 22 Facsimile Telephone Number Y - nil ; 23 Fax N - nil ; 24 Generalized Time Y - nil ; 25 Guide Y - nil ; 26 IA5 String Y - string-to-number ; 27 INTEGER Y - nil ; 28 JPEG N - nil ; 29 Master And Shadow Access Points Y - nil ; 30 Matching Rule Description Y - nil ; 31 Matching Rule Use Description Y - nil ; 32 Mail Preference Y - nil ; 33 MHS OR Address Y - nil ; 34 Name And Optional UID Y - nil ; 35 Name Form Description Y - nil ; 36 Numeric String Y - nil ; 37 Object Class Description Y - nil ; 38 OID Y - nil ; 39 Other Mailbox Y - nil ; 40 Octet String Y - ldap-decode-address ; 41 Postal Address Y - nil ; 42 Protocol Information Y - nil ; 43 Presentation Address Y - ldap-decode-string ; 44 Printable String Y - nil ; 45 Subtree Specification Y - nil ; 46 Supplier Information Y - nil ; 47 Supplier Or Consumer Y - nil ; 48 Supplier And Consumer Y - nil ; 49 Supported Algorithm N - nil ; 50 Telephone Number Y - nil ; 51 Teletex Terminal Identifier Y - nil ; 52 Telex Number Y - nil ; 53 UTC Time Y - nil ; 54 LDAP Syntax Description Y - nil ; 55 Modify Rights Y - nil ; 56 LDAP Schema Definition Y - nil ; 57 LDAP Schema Description Y - nil ; 58 Substring Assertion Y - ] + [nil ; 1 ACI Item N + nil ; 2 Access Point Y + nil ; 3 Attribute Type Description Y + nil ; 4 Audio N + nil ; 5 Binary N + nil ; 6 Bit String Y + ldap-decode-boolean ; 7 Boolean Y + nil ; 8 Certificate N + nil ; 9 Certificate List N + nil ; 10 Certificate Pair N + ldap-decode-string ; 11 Country String Y + ldap-decode-string ; 12 DN Y + nil ; 13 Data Quality Syntax Y + nil ; 14 Delivery Method Y + ldap-decode-string ; 15 Directory String Y + nil ; 16 DIT Content Rule Description Y + nil ; 17 DIT Structure Rule Description Y + nil ; 18 DL Submit Permission Y + nil ; 19 DSA Quality Syntax Y + nil ; 20 DSE Type Y + nil ; 21 Enhanced Guide Y + nil ; 22 Facsimile Telephone Number Y + nil ; 23 Fax N + nil ; 24 Generalized Time Y + nil ; 25 Guide Y + nil ; 26 IA5 String Y + string-to-number ; 27 INTEGER Y + nil ; 28 JPEG N + nil ; 29 Master And Shadow Access Points Y + nil ; 30 Matching Rule Description Y + nil ; 31 Matching Rule Use Description Y + nil ; 32 Mail Preference Y + nil ; 33 MHS OR Address Y + nil ; 34 Name And Optional UID Y + nil ; 35 Name Form Description Y + nil ; 36 Numeric String Y + nil ; 37 Object Class Description Y + nil ; 38 OID Y + nil ; 39 Other Mailbox Y + nil ; 40 Octet String Y + ldap-decode-address ; 41 Postal Address Y + nil ; 42 Protocol Information Y + nil ; 43 Presentation Address Y + ldap-decode-string ; 44 Printable String Y + nil ; 45 Subtree Specification Y + nil ; 46 Supplier Information Y + nil ; 47 Supplier Or Consumer Y + nil ; 48 Supplier And Consumer Y + nil ; 49 Supported Algorithm N + nil ; 50 Telephone Number Y + nil ; 51 Teletex Terminal Identifier Y + nil ; 52 Telex Number Y + nil ; 53 UTC Time Y + nil ; 54 LDAP Syntax Description Y + nil ; 55 Modify Rights Y + nil ; 56 LDAP Schema Definition Y + nil ; 57 LDAP Schema Description Y + nil ; 58 Substring Assertion Y + ] "A vector of functions used to decode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2") @@ -395,7 +395,7 @@ nil) (t (error "Wrong LDAP boolean string: %s" str)))) - + (defun ldap-encode-country-string (str) ;; We should do something useful here... (if (not (= 2 (length str))) @@ -421,16 +421,16 @@ ;; LDAP protocol functions - + (defun ldap-get-host-parameter (host parameter) "Get the value of PARAMETER for HOST in `ldap-host-parameters-alist'." (plist-get (cdr (assoc host ldap-host-parameters-alist)) parameter)) - + (defun ldap-decode-attribute (attr) "Decode the attribute/value pair ATTR according to LDAP rules. -The attribute name is looked up in `ldap-attribute-syntaxes-alist' -and the corresponding decoder is then retrieved from +The attribute name is looked up in `ldap-attribute-syntaxes-alist' +and the corresponding decoder is then retrieved from `ldap-attribute-syntax-decoders' and applied on the value(s)." (let* ((name (car attr)) (values (cdr attr)) @@ -458,13 +458,13 @@ decoded))) (defun ldap-search (arg1 &rest args) - "Perform an LDAP search." + "Perform an LDAP search." (apply (if (ldapp arg1) 'ldap-search-basic 'ldap-search-entries) arg1 args)) -(make-obsolete 'ldap-search - "Use `ldap-search-entries' instead or +(make-obsolete 'ldap-search + "Use `ldap-search-entries' instead or `ldap-search-basic' for the low-level search API.") (defun ldap-search-entries (filter &optional host attributes attrsonly withdn) @@ -477,7 +477,7 @@ the associated values. If WITHDN is non-nil each entry in the result will be prepennded with its distinguished name DN. -Additional search parameters can be specified through +Additional search parameters can be specified through `ldap-host-parameters-alist' which see. The function returns a list of matching entries. Each entry is itself an alist of attribute/value pairs optionally preceded by the DN of the @@ -494,7 +494,7 @@ (setq ldap (ldap-open host host-plist)) (if ldap-verbose (message "Searching with LDAP on %s..." host)) - (setq result (ldap-search ldap filter + (setq result (ldap-search ldap filter (plist-get host-plist 'base) (plist-get host-plist 'scope) attributes attrsonly withdn @@ -506,13 +506,13 @@ (defun ldap-add-entries (entries &optional host binddn passwd) "Add entries to an LDAP directory. -ENTRIES is a list of entry specifications of +ENTRIES is a list of entry specifications of the form (DN (ATTR . VALUE) (ATTR . VALUE) ...) where DN is the distinguished name of an entry to add, the following are cons cells containing attribute/value string pairs. -HOST is the LDAP host, defaulting to `ldap-default-host' -BINDDN is the DN to bind as to the server -PASSWD is the corresponding password" +HOST is the LDAP host, defaulting to `ldap-default-host'. +BINDDN is the DN to bind as to the server. +PASSWD is the corresponding password." (or host (setq host ldap-default-host) (error "No LDAP host specified")) @@ -542,17 +542,17 @@ (defun ldap-modify-entries (entry-mods &optional host binddn passwd) "Modify entries of an LDAP directory. -ENTRY_MODS is a list of entry modifications of the form - (DN MOD-SPEC1 MOD-SPEC2 ...) where DN is the distinguished name of -the entry to modify, the following are modification specifications. -A modification specification is itself a list of the form -(MOD-OP ATTR VALUE1 VALUE2 ...) MOD-OP and ATTR are mandatory, +ENTRY_MODS is a list of entry modifications of the form + (DN MOD-SPEC1 MOD-SPEC2 ...) where DN is the distinguished name of +the entry to modify, the following are modification specifications. +A modification specification is itself a list of the form +(MOD-OP ATTR VALUE1 VALUE2 ...) MOD-OP and ATTR are mandatory, VALUEs are optional depending on MOD-OP. MOD-OP is the type of modification, one of the symbols `add', `delete' or `replace'. ATTR is the LDAP attribute type to modify. -HOST is the LDAP host, defaulting to `ldap-default-host' -BINDDN is the DN to bind as to the server -PASSWD is the corresponding password" +HOST is the LDAP host, defaulting to `ldap-default-host'. +BINDDN is the DN to bind as to the server. +PASSWD is the corresponding password." (or host (setq host ldap-default-host) (error "No LDAP host specified")) @@ -582,10 +582,10 @@ (defun ldap-delete-entries (dn &optional host binddn passwd) "Delete an entry from an LDAP directory. -DN is the distinguished name of an entry to delete or +DN is the distinguished name of an entry to delete or a list of those. -HOST is the LDAP host, defaulting to `ldap-default-host' -BINDDN is the DN to bind as to the server +HOST is the LDAP host, defaulting to `ldap-default-host'. +BINDDN is the DN to bind as to the server. PASSWD is the corresponding password." (or host (setq host ldap-default-host) @@ -619,5 +619,5 @@ (provide 'ldap) - + ;;; ldap.el ends here diff -r a8296e22da4e -r 576fb035e263 lisp/lib-complete.el --- a/lisp/lib-complete.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/lib-complete.el Mon Aug 13 11:36:19 2007 +0200 @@ -128,8 +128,8 @@ ;;=== Completion caching ================================================== (defconst lib-complete:cache nil - "Used within read-library and read-library-internal to prevent -costly repeated calls to library-all-completions. + "Used within `read-library' and `read-library-internal' to prevent +costly repeated calls to `library-all-completions'. Format is a list of lists of the form ([ ] ...) diff -r a8296e22da4e -r 576fb035e263 lisp/lisp.el --- a/lisp/lisp.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/lisp.el Mon Aug 13 11:36:19 2007 +0200 @@ -80,17 +80,15 @@ move forward across N balanced expressions." ;; XEmacs change (for zmacs regions) (interactive "_p") - (or arg (setq arg 1)) - (forward-sexp (- arg))) + (forward-sexp (- (or arg 1)))) -(defun mark-sexp (arg) +(defun mark-sexp (&optional arg) "Set mark ARG sexps from point. The place mark goes is the same place \\[forward-sexp] would move to with the same argument. Repeat this command to mark more sexps in the same direction." (interactive "p") - ;; XEmacs change - (mark-something 'mark-sexp 'forward-sexp arg)) + (mark-something 'mark-sexp 'forward-sexp (or arg 1))) (defun forward-list (&optional arg) "Move forward across one balanced group of parentheses. @@ -98,8 +96,7 @@ Negative arg -N means move backward across N groups of parentheses." ;; XEmacs change (interactive "_p") - (or arg (setq arg 1)) - (goto-char (or (scan-lists (point) arg 0) (buffer-end arg)))) + (goto-char (or (scan-lists (point) (or arg 1) 0) (buffer-end (or arg 1))))) (defun backward-list (&optional arg) "Move backward across one balanced group of parentheses. @@ -107,56 +104,55 @@ Negative arg -N means move forward across N groups of parentheses." ;; XEmacs change (for zmacs regions) (interactive "_p") - (or arg (setq arg 1)) - (forward-list (- arg))) + (forward-list (- (or arg 1)))) -(defun down-list (arg) +(defun down-list (&optional arg) "Move forward down one level of parentheses. With argument, do this that many times. -A negative argument means move backward but still go down a level. -In Lisp programs, an argument is required." +A negative argument means move backward but still go down a level." ;; XEmacs change (for zmacs regions) (interactive "_p") + (or arg (setq arg 1)) (let ((inc (if (> arg 0) 1 -1))) (while (/= arg 0) (goto-char (or (scan-lists (point) inc -1) (buffer-end arg))) (setq arg (- arg inc))))) -(defun backward-up-list (arg) +(defun backward-up-list (&optional arg) "Move backward out of one level of parentheses. With argument, do this that many times. -A negative argument means move forward but still to a less deep spot. -In Lisp programs, an argument is required." +A negative argument means move forward but still to a less deep spot." (interactive "_p") - (up-list (- arg))) + (up-list (- (or arg 1)))) -(defun up-list (arg) +(defun up-list (&optional arg) "Move forward out of one level of parentheses. With argument, do this that many times. A negative argument means move backward but still to a less deep spot. In Lisp programs, an argument is required." ;; XEmacs change (for zmacs regions) (interactive "_p") + (or arg (setq arg 1)) (let ((inc (if (> arg 0) 1 -1))) (while (/= arg 0) (goto-char (or (scan-lists (point) inc 1) (buffer-end arg))) (setq arg (- arg inc))))) -(defun kill-sexp (arg) +(defun kill-sexp (&optional arg) "Kill the sexp (balanced expression) following the cursor. With argument, kill that many sexps after the cursor. Negative arg -N means kill N sexps before the cursor." (interactive "p") (let ((opoint (point))) - (forward-sexp arg) + (forward-sexp (or arg 1)) (kill-region opoint (point)))) -(defun backward-kill-sexp (arg) +(defun backward-kill-sexp (&optional arg) "Kill the sexp (balanced expression) preceding the cursor. With argument, kill that many sexps before the cursor. Negative arg -N means kill N sexps after the cursor." (interactive "p") - (kill-sexp (- arg))) + (kill-sexp (- (or arg 1)))) (defun beginning-of-defun (&optional arg) "Move backward to the beginning of a defun. diff -r a8296e22da4e -r 576fb035e263 lisp/loaddefs.el --- a/lisp/loaddefs.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/loaddefs.el Mon Aug 13 11:36:19 2007 +0200 @@ -85,7 +85,6 @@ ;; are ignored in completion, ;; making it more likely you will get a unique match. (setq completion-ignored-extensions - (mapcar 'purecopy ;; this is way way way bogus. ;; completely wtf? ;; the only things that should be here are those that are @@ -99,10 +98,10 @@ ; ".aux" ".a" ".ln" ; ".lof" ".blg" ".bbl" ".glo" ".idx" ".lot" ".fmt" ; ".diff" ".oi" ".class"))) - '(".o" ".obj" ".elc" "~" - ".bin" ".lbin" ;; #### these are doubtful, esp. the latter. - ".dvi";; possibly doubtful, too. - ".class"))) + '(".o" ".obj" ".elc" "~" + ".bin" ".lbin" ;; #### these are doubtful, esp. the latter. + ".dvi";; possibly doubtful, too. + ".class")) ;; This needs to be redone better. -slb diff -r a8296e22da4e -r 576fb035e263 lisp/menubar-items.el --- a/lisp/menubar-items.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/menubar-items.el Mon Aug 13 11:36:19 2007 +0200 @@ -121,7 +121,7 @@ (t ""))) (defconst default-menubar - (purecopy-menubar +; (purecopy-menubar ;purespace is dead ;; note backquote. `( ("%_File" @@ -1453,7 +1453,7 @@ ["View %_Splash Screen" xemacs-splash-buffer] ["%_Unix Manual..." manual-entry]) ["Send %_Bug Report..." report-emacs-bug - :active (fboundp 'report-emacs-bug)])))) + :active (fboundp 'report-emacs-bug)]))) (defun maybe-add-init-button () diff -r a8296e22da4e -r 576fb035e263 lisp/menubar.el --- a/lisp/menubar.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/menubar.el Mon Aug 13 11:36:19 2007 +0200 @@ -20,7 +20,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -96,7 +96,7 @@ ((stringp menuitem) (and (string-match "^\\(-+\\|=+\\):\\(.*\\)" menuitem) (setq item (match-string 2 menuitem)) - (or (member item '(;; Motif-compatible + (or (member item '(;; Motif-compatible "singleLine" "doubleLine" "singleDashedLine" @@ -289,14 +289,13 @@ BEFORE, if provided, is the name of a menu item before which this item should be added, if this item is not on the menu already. If the item is already present, it will not be moved. -If IN-MENU is present use that instead of `current-menubar' as the menu to -change. -" +IN-MENU, if provided, means use that instead of `current-menubar' as the + menu to change." ;; Note easymenu.el uses the fact that menu-leaf can be a submenu. (add-menu-item-1 t menu-path menu-leaf before in-menu)) ;; I actually liked the old name better, but the interface has changed too -;; drastically to keep it. --Stig +;; drastically to keep it. --Stig (defun add-submenu (menu-path submenu &optional before in-menu) "Add a menu to the menubar or one of its submenus. If the named menu exists already, it is changed. @@ -308,33 +307,38 @@ See the documentation of `current-menubar' for the syntax. BEFORE, if provided, is the name of a menu before which this menu should be added, if this menu is not on its parent already. If the menu is already - present, it will not be moved." + present, it will not be moved. +IN-MENU, if provided, means use that instead of `current-menubar' as the + menu to change." (check-menu-syntax submenu nil) (add-menu-item-1 nil menu-path submenu before in-menu)) - -(defun purecopy-menubar (x) - ;; this calls purecopy on the strings, and the contents of the vectors, - ;; but not on the vectors themselves, or the conses - those must be - ;; writable. - (cond ((vectorp x) - (let ((i (length x))) - (while (> i 0) - (aset x (1- i) (purecopy (aref x (1- i)))) - (setq i (1- i)))) - x) - ((consp x) - (let ((rest x)) - (while rest - (setcar rest (purecopy-menubar (car rest))) - (setq rest (cdr rest)))) - x) - (t - (purecopy x)))) +;; purespace is no more, so this function is unnecessary +;(defun purecopy-menubar (x) +; ;; this calls purecopy on the strings, and the contents of the vectors, +; ;; but not on the vectors themselves, or the conses - those must be +; ;; writable. +; (cond ((vectorp x) +; (let ((i (length x))) +; (while (> i 0) +; (aset x (1- i) (purecopy (aref x (1- i)))) +; (setq i (1- i)))) +; x) +; ((consp x) +; (let ((rest x)) +; (while rest +; (setcar rest (purecopy-menubar (car rest))) +; (setq rest (cdr rest)))) +; x) +; (t +; (purecopy x)))) (defun delete-menu-item (path &optional from-menu) "Remove the named menu item from the menu hierarchy. -PATH is a list of strings which identify the position of the menu item in -the menu hierarchy. The documentation of `add-submenu' describes menu-paths." +PATH is a list of strings which identify the position of the menu item +in the menu hierarchy. The documentation of `add-submenu' describes +menu paths. +FROM-MENU, if provided, means use that instead of `current-menubar' +as the menu to change." (let* ((pair (condition-case nil (find-menu-item (or from-menu current-menubar) path) (error nil))) @@ -352,13 +356,13 @@ (defun relabel-menu-item (path new-name) "Change the string of the specified menu item. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\". NEW-NAME is the string that the menu item will be printed as from now on." (or (stringp new-name) - (setq new-name (signal 'wrong-type-argument (list 'stringp new-name)))) + (setq new-name (wrong-type-argument 'stringp new-name))) (let* ((menubar current-menubar) (pair (find-menu-item menubar path)) (item (car pair)) @@ -380,7 +384,7 @@ ;; into the menubar if we didn't want people to use 'em? ;; x-font-menu.el is the only known offender right now and that ought to be ;; rehashed a bit. -;; +;; (defun enable-menu-item-1 (path toggle-p on-p) (let (menu item) @@ -430,33 +434,33 @@ (defun enable-menu-item (path) "Make the named menu item be selectable. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path nil t)) (defun disable-menu-item (path) "Make the named menu item be unselectable. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path nil nil)) (defun select-toggle-menu-item (path) "Make the named toggle- or radio-style menu item be in the `selected' state. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path t t)) (defun deselect-toggle-menu-item (path) "Make the named toggle- or radio-style menu item be in the `unselected' state. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path t nil)) @@ -554,7 +558,7 @@ (dispatch-event (next-event))) )) - + (defun popup-buffer-menu (event) "Pop up a copy of the Buffers menu (from the menubar) where the mouse is clicked." (interactive "e") diff -r a8296e22da4e -r 576fb035e263 lisp/minibuf.el --- a/lisp/minibuf.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/minibuf.el Mon Aug 13 11:36:19 2007 +0200 @@ -196,7 +196,7 @@ (define-key map "\M-\t" 'comint-dynamic-complete) (define-key map "\M-?" 'comint-dynamic-list-completions) map) - "Minibuffer keymap used by shell-command and related commands.") + "Minibuffer keymap used by `shell-command' and related commands.") (defcustom use-dialog-box t "*Variable controlling usage of the dialog box. @@ -376,8 +376,8 @@ Seventh arg DEFAULT, if non-nil, will be returned when user enters an empty string. -See also the variable completion-highlight-first-word-only for control over - completion display." +See also the variable `completion-highlight-first-word-only' for + control over completion display." (if (and (not enable-recursive-minibuffers) (> (minibuffer-depth) 0) (eq (selected-window) (minibuffer-window))) @@ -1212,7 +1212,7 @@ (defun minibuffer-smart-maybe-select-highlighted-completion (event &optional click-count) - "Like minibuffer-smart-select-highlighted-completion but does nothing if + "Like `minibuffer-smart-select-highlighted-completion' but does nothing if there is no completion (as opposed to executing the global binding). Useful as the value of `mouse-track-click-hook'." (interactive "e") diff -r a8296e22da4e -r 576fb035e263 lisp/modeline.el --- a/lisp/modeline.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/modeline.el Mon Aug 13 11:36:19 2007 +0200 @@ -588,14 +588,14 @@ "button2 cycles to the next buffer") (defconst modeline-buffer-identification - (list (cons modeline-buffer-id-left-extent (purecopy "XEmacs%N:")) + (list (cons modeline-buffer-id-left-extent "XEmacs%N:") ; this used to be "XEmacs:" - (cons modeline-buffer-id-right-extent (purecopy " %17b"))) + (cons modeline-buffer-id-right-extent " %17b")) "Modeline control for identifying the buffer being displayed. Its default value is - (list (cons modeline-buffer-id-left-extent (purecopy \"XEmacs%N:\")) - (cons modeline-buffer-id-right-extent (purecopy \" %17b\"))) + (list (cons modeline-buffer-id-left-extent \"XEmacs%N:\") + (cons modeline-buffer-id-right-extent \" %17b\"))) Major modes that edit things other than ordinary files may change this (e.g. Info, Dired,...).") @@ -626,7 +626,7 @@ (set-extent-property modeline-modified-extent 'help-echo "button2 toggles the buffer's read-only status") -(defconst modeline-modified (purecopy '("--%1*%1+-")) +(defconst modeline-modified '("--%1*%1+-") "Modeline control for displaying whether current buffer is modified.") (make-variable-buffer-local 'modeline-modified) @@ -645,21 +645,21 @@ (setq-default modeline-format (list - (purecopy "") + "" (cons modeline-modified-extent 'modeline-modified) (cons modeline-buffer-id-extent 'modeline-buffer-identification) - (purecopy " ") + " " 'global-mode-string - (purecopy " %[(") + " %[(" (cons modeline-minor-mode-extent - (list (purecopy "") 'mode-name 'minor-mode-alist)) - (cons modeline-narrowed-extent (purecopy "%n")) + (list "" 'mode-name 'minor-mode-alist)) + (cons modeline-narrowed-extent "%n") 'modeline-process - (purecopy ")%]----") - (list 'line-number-mode (purecopy "L%l--")) - (list 'column-number-mode (purecopy "C%c--")) - (cons -3 (purecopy "%p")) - (purecopy "-%-"))) + ")%]----" + (list 'line-number-mode "L%l--") + (list 'column-number-mode "C%c--") + (cons -3 "%p") + "-%-")) ;;; Added for XEmacs 20.3. Provide wrapper for vc since it may not always be ;;; present, and its symbols are not visible this early in the dump if it diff -r a8296e22da4e -r 576fb035e263 lisp/mouse.el --- a/lisp/mouse.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mouse.el Mon Aug 13 11:36:19 2007 +0200 @@ -119,7 +119,7 @@ (interactive "P") ;; we fallback to the clipboard if the current selection is not existent (let ((text (if check-cutbuffer-p - (or (get-selection-no-error) + (or (get-selection-no-error) (get-cutbuffer) (get-selection-no-error 'CLIPBOARD) (error "No selection, clipboard or cut buffer available")) @@ -222,7 +222,7 @@ ;; #### barely implemented. (when (click-inside-selection-p event) (cond ((featurep 'offix) - (offix-start-drag-region + (offix-start-drag-region event (extent-start-position zmacs-region-extent) (extent-end-position zmacs-region-extent)) @@ -238,7 +238,7 @@ "Evaluate the sexp under the mouse. Usually, this is the last sexp before the click, but if you click on a left paren, then it is the sexp beginning with the paren that is evaluated. Also, since strings evaluate to themselves, -they're fed to re-search-forward and the matched region is highlighted until +they're fed to `re-search-forward' and the matched region is highlighted until the mouse button is released. Perhaps the most useful thing about this function is that the evaluation of @@ -343,7 +343,7 @@ (switch-to-buffer val)))) (defun narrow-window-to-region (m n) - "Narrow window to region between point and last mark" + "Narrow window to region between point and last mark." (interactive "r") (save-excursion (save-restriction diff -r a8296e22da4e -r 576fb035e263 lisp/msw-font-menu.el --- a/lisp/msw-font-menu.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/msw-font-menu.el Mon Aug 13 11:36:19 2007 +0200 @@ -43,12 +43,11 @@ "Registry and encoding to use with font menu fonts.") (defvar mswindows-font-menu-junk-families - (purecopy - (mapconcat - #'identity - '("Symbol" - ) - "\\|")) + (mapconcat + #'identity + '("Symbol" + ) + "\\|") "A regexp matching font families which are uninteresting (e.g. cursor fonts).") (defvar mswindows-font-regexp-ascii nil diff -r a8296e22da4e -r 576fb035e263 lisp/mule/chinese.el --- a/lisp/mule/chinese.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/chinese.el Mon Aug 13 11:36:19 2007 +0200 @@ -255,8 +255,8 @@ ;; (setq font-ccl-encoder-alist ;; (cons (cons "big5" ccl-encode-big5-font) font-ccl-encoder-alist)) -(set-charset-ccl-program 'chinese-big5-1 ccl-encode-big5-font) -(set-charset-ccl-program 'chinese-big5-2 ccl-encode-big5-font) +(set-charset-ccl-program 'chinese-big5-1 'ccl-encode-big5-font) +(set-charset-ccl-program 'chinese-big5-2 'ccl-encode-big5-font) (set-language-info-alist "Chinese-BIG5" '((charset chinese-big5-1 chinese-big5-2) diff -r a8296e22da4e -r 576fb035e263 lisp/mule/cyrillic.el --- a/lisp/mule/cyrillic.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/cyrillic.el Mon Aug 13 11:36:19 2007 +0200 @@ -25,12 +25,13 @@ ;;; Commentary: -;; The character set ISO8859-5 is supported. KOI-8 and ALTERNATIVNYJ -;; are converted to ISO8859-5 internally. +;; The character set ISO8859-5 is supported. +;; KOI-8, Windows-1251, and ALTERNATIVNYJ are converted to ISO8859-5 +;; internally. ;;; Code: -;; For syntax of Cyrillic +;; Cyrillic syntax (modify-syntax-entry 'cyrillic-iso8859-5 "w") (modify-syntax-entry ?,L-(B ".") (modify-syntax-entry ?,Lp(B ".") @@ -40,21 +41,11 @@ ;;; CYRILLIC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ISO-8859-5 staff - -;; (make-coding-system -;; 'cyrillic-iso-8bit 2 ?5 -;; "ISO 2022 based 8-bit encoding for Cyrillic script (MIME:ISO-8859-5)" -;; '(ascii cyrillic-iso8859-5 nil nil -;; nil nil nil nil nil nil nil) -;; '((safe-charsets ascii cyrillic-iso8859-5) -;; (mime-charset . iso-8859-5))) - -;; (define-coding-system-alias 'iso-8859-5 'cyrillic-iso-8bit) +;; ISO-8859-5 (make-coding-system 'iso-8859-5 'iso2022 - "MIME ISO-8859-5" + "ISO-8859-5 (ISO 2022 based 8-bit encoding for Cyrillic script)" '(charset-g0 ascii charset-g1 cyrillic-iso8859-5 charset-g2 t @@ -73,7 +64,7 @@ (documentation . "Support for Cyrillic ISO-8859-5.")) '("Cyrillic")) -;; KOI-8 staff +;; KOI-8 (eval-and-compile @@ -133,31 +124,17 @@ (write-read-repeat r0 , cyrillic-koi8-r-encode-table)))))) "CCL program to encode KOI8.") -;; (make-coding-system -;; 'cyrillic-koi8 4 -;; ;; We used to use ?K. It is true that ?K is more strictly correct, -;; ;; but it is also used for Korean. -;; ;; So people who use koi8 for languages other than Russian -;; ;; will have to forgive us. -;; ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)" -;; '(ccl-decode-koi8 . ccl-encode-koi8) -;; '((safe-charsets ascii cyrillic-iso8859-5) -;; (mime-charset . koi8-r) -;; (valid-codes (0 . 127) 163 179 (192 . 255)) -;; (charset-origin-alist (cyrillic-iso8859-5 "KOI8-R" -;; cyrillic-encode-koi8-r-char)))) - ;; (define-coding-system-alias 'koi8-r 'cyrillic-koi8) ;; (define-coding-system-alias 'koi8 'cyrillic-koi8) (make-coding-system 'koi8-r 'ccl - "Coding-system used for KOI8-R." - `(decode ,ccl-decode-koi8 - encode ,ccl-encode-koi8 + "KOI8-R 8-bit encoding for Cyrillic." + '(decode ccl-decode-koi8 + encode ccl-encode-koi8 mnemonic "KOI8")) -;; it is not correct, but XEmacs doesn't have `ccl' category... +;; `iso-8-1' is not correct, but XEmacs doesn't have a `ccl' category (coding-system-put 'koi8-r 'category 'iso-8-1) ;; (define-ccl-program ccl-encode-koi8-font @@ -184,7 +161,88 @@ (documentation . "Support for Cyrillic KOI8-R.")) '("Cyrillic")) -;;; ALTERNATIVNYJ staff +;;; WINDOWS-1251 + +(eval-and-compile + +(defvar cyrillic-windows-1251-decode-table + [ + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 + 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 + 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 + 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 + 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 + 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 + ?,L"(B ?,L#(B 32 ?,Ls(B 32 32 32 32 32 32 ?,L)(B 32 ?,L*(B ?,L,(B ?,L+(B ?,L/(B ;" + ?,Lr(B 32 32 32 32 32 32 32 32 32 ?,Ly(B 32 ?,Lz(B ?,L|(B ?,L{(B ?,L(B + ?,L (B ?,L.(B ?,L~(B ?,L((B ?,A$(B 32 ?,A&(B ?,L}(B ?,L!(B ?,A)(B ?,L$(B ?,A+(B ?,A,(B ?,L-(B ?,A.(B ?,L'(B + ?,A0(B ?,A1(B ?,L&(B ?,Lv(B 32 ?,A5(B ?,A6(B ?,A7(B ?,Lq(B ?,Lp(B ?,Lt(B ?,A;(B ?,Lx(B ?,L%(B ?,Lu(B ?,Lw(B + ?,L0(B ?,L1(B ?,L2(B ?,L3(B ?,L4(B ?,L5(B ?,L6(B ?,L7(B ?,L8(B ?,L9(B ?,L:(B ?,L;(B ?,L<(B ?,L=(B ?,L>(B ?,L?(B + ?,L@(B ?,LA(B ?,LB(B ?,LC(B ?,LD(B ?,LE(B ?,LF(B ?,LG(B ?,LH(B ?,LI(B ?,LJ(B ?,LK(B ?,LL(B ?,LM(B ?,LN(B ?,LO(B + ?,LP(B ?,LQ(B ?,LR(B ?,LS(B ?,LT(B ?,LU(B ?,LV(B ?,LW(B ?,LX(B ?,LY(B ?,LZ(B ?,L[(B ?,L\(B ?,L](B ?,L^(B ?,L_(B + ?,L`(B ?,La(B ?,Lb(B ?,Lc(B ?,Ld(B ?,Le(B ?,Lf(B ?,Lg(B ?,Lh(B ?,Li(B ?,Lj(B ?,Lk(B ?,Ll(B ?,Lm(B ?,Ln(B ?,Lo(B ] + "Cyrillic Windows-1251 decoding table.") + +(defvar cyrillic-windows-1251-encode-table + (let ((table (make-vector 256 32)) + (i 0)) + (while (< i 256) + (let* ((ch (aref cyrillic-windows-1251-decode-table i)) + (split (split-char ch))) + (cond ((eq (car split) 'cyrillic-iso8859-5) + (aset table (logior (nth 1 split) 128) i) + ) + ((eq ch 32)) + ((eq (car split) 'ascii) + (aset table ch i) + ))) + (setq i (1+ i))) + table) + "Cyrillic Windows-1251 encoding table.") + +) + +(define-ccl-program ccl-decode-windows1251 + `(3 + ((read r0) + (loop + (write-read-repeat r0 ,cyrillic-windows-1251-decode-table)))) + "CCL program to decode Windows-1251.") + +(define-ccl-program ccl-encode-windows1251 + `(1 + ((read r0) + (loop + (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) + (write-read-repeat r0) + ((read r0) + (write-read-repeat r0 , cyrillic-windows-1251-encode-table)))))) + "CCL program to encode Windows-1251.") + +(make-coding-system + 'windows-1251 'ccl + "Coding-system used for Windows-1251." + '(decode ccl-decode-windows1251 + encode ccl-encode-windows1251 + mnemonic "CyrW")) + +;; `iso-8-1' is not correct, but XEmacs doesn't have a `ccl' category +(coding-system-put 'windows-1251 'category 'iso-8-1) + +(set-language-info-alist + "Cyrillic-Win" '((charset cyrillic-iso8859-5) + (coding-system windows-1251) + (coding-priority windows-1251) + (input-method . "cyrillic-yawerty") + (features cyril-util) + (tutorial . "TUTORIAL.ru") + (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") + (documentation . "Support for Cyrillic Windows-1251.")) + '("Cyrillic")) + +;;; ALTERNATIVNYJ (eval-and-compile @@ -242,26 +300,16 @@ (write-read-repeat r0 ,cyrillic-alternativnyj-encode-table)))))) "CCL program to encode Alternativnyj.") -;; (make-coding-system -;; 'cyrillic-alternativnyj 4 ?A -;; "ALTERNATIVNYJ 8-bit encoding for Cyrillic" -;; '(ccl-decode-alternativnyj . ccl-encode-alternativnyj) -;; '((safe-charsets ascii cyrillic-iso8859-5) -;; (valid-codes (0 . 175) (224 . 241) 255) -;; (charset-origin-alist (cyrillic-iso8859-5 "ALTERNATIVNYJ" -;; cyrillic-encode-koi8-r-char)))) - - ;; (define-coding-system-alias 'alternativnyj 'cyrillic-alternativnyj) (make-coding-system 'alternativnyj 'ccl "Coding-system used for Alternativnyj" - `(decode ,ccl-decode-alternativnyj - encode ,ccl-encode-alternativnyj + '(decode ccl-decode-alternativnyj + encode ccl-encode-alternativnyj mnemonic "Cy.Alt")) -;; it is not correct, but XEmacs doesn't have `ccl' category... +;; `iso-8-1' is not correct, but XEmacs doesn't have `ccl' category (coding-system-put 'alternativnyj 'category 'iso-8-1) ;; (define-ccl-program ccl-encode-alternativnyj-font diff -r a8296e22da4e -r 576fb035e263 lisp/mule/ethiopic.el --- a/lisp/mule/ethiopic.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/ethiopic.el Mon Aug 13 11:36:19 2007 +0200 @@ -65,7 +65,7 @@ ;; (setq font-ccl-encoder-alist ;; (cons (cons "ethiopic" ccl-encode-ethio-font) font-ccl-encoder-alist)) -(set-charset-ccl-program 'ethiopic ccl-encode-ethio-font) +(set-charset-ccl-program 'ethiopic 'ccl-encode-ethio-font) (set-language-info-alist "Ethiopic" '((setup-function . setup-ethiopic-environment-internal) diff -r a8296e22da4e -r 576fb035e263 lisp/mule/mule-category.el --- a/lisp/mule/mule-category.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/mule-category.el Mon Aug 13 11:36:19 2007 +0200 @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -79,21 +79,21 @@ (check-argument-type 'defined-category-p designator) (gethash designator defined-category-hashtable)) -(defun modify-category-entry (char-range designator &optional table reset) +(defun modify-category-entry (char-range designator &optional category-table reset) "Add a category to the categories associated with CHAR-RANGE. CHAR-RANGE is a single character or a range of characters, as per `put-char-table'. The category is given by a designator character. -The changes are made in TABLE, which defaults to the current buffer's - category table. +The changes are made in CATEGORY-TABLE, which defaults to the current + buffer's category table. If optional fourth argument RESET is non-nil, previous categories associated with CHAR-RANGE are removed before adding the specified category." - (or table (setq table (category-table))) - (check-argument-type 'category-table-p table) + (or category-table (setq category-table (category-table))) + (check-argument-type 'category-table-p category-table) (check-argument-type 'defined-category-p designator) (if reset ;; clear all existing stuff. - (put-char-table char-range nil table)) + (put-char-table char-range nil category-table)) (map-char-table #'(lambda (key value) ;; make sure that this range has a bit-vector assigned to it @@ -103,16 +103,16 @@ ;; set the appropriate bit in that vector. (aset value (- designator 32) 1) ;; put the vector back, thus assuring we have a unique setting for this range - (put-char-table key value table)) - table char-range)) + (put-char-table key value category-table)) + category-table char-range)) -(defun char-category-list (char &optional table) - "Return a list of the categories that CHAR is in. -TABLE defaults to the current buffer's category table. +(defun char-category-list (character &optional category-table) + "Return a list of the categories that CHARACTER is in. +CATEGORY-TABLE defaults to the current buffer's category table. The categories are given by their designators." - (or table (setq table (category-table))) - (check-argument-type 'category-table-p table) - (let ((vec (get-char-table char table))) + (or category-table (setq category-table (category-table))) + (check-argument-type 'category-table-p category-table) + (let ((vec (get-char-table character category-table))) (if (null vec) nil (let ((a 32) list) (while (< a 127) @@ -121,7 +121,7 @@ (setq a (1+ a))) (nreverse list))))) -;; implemented in c, file chartab.c (97/3/14 jhod@po.iijnet.or.jp) +;; implemented in C, file chartab.c (97/3/14 jhod@po.iijnet.or.jp) ;(defun char-in-category-p (char category &optional table) ; "Return non-nil if CHAR is in CATEGORY. ;TABLE defaults to the current buffer's category table. diff -r a8296e22da4e -r 576fb035e263 lisp/mule/mule-ccl.el --- a/lisp/mule/mule-ccl.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/mule-ccl.el Mon Aug 13 11:36:19 2007 +0200 @@ -22,7 +22,7 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. -;; Synched up with: FSF 20.2 +;; Synched up with: FSF 21.0.90 ;;; Commentary: @@ -39,66 +39,17 @@ ;; combination of three or more arithmetic operations can be ;; calculated faster than Emacs Lisp. ;; -;; Here's the syntax of CCL program in BNF notation. -;; -;; CCL_PROGRAM := -;; (BUFFER_MAGNIFICATION -;; CCL_MAIN_BLOCK -;; [ CCL_EOF_BLOCK ]) -;; -;; BUFFER_MAGNIFICATION := integer -;; CCL_MAIN_BLOCK := CCL_BLOCK -;; CCL_EOF_BLOCK := CCL_BLOCK -;; -;; CCL_BLOCK := -;; STATEMENT | (STATEMENT [STATEMENT ...]) -;; STATEMENT := -;; SET | IF | BRANCH | LOOP | REPEAT | BREAK | READ | WRITE | CALL -;; -;; SET := -;; (REG = EXPRESSION) -;; | (REG ASSIGNMENT_OPERATOR EXPRESSION) -;; | integer -;; -;; EXPRESSION := ARG | (EXPRESSION OPERATOR ARG) -;; -;; IF := (if EXPRESSION CCL_BLOCK CCL_BLOCK) -;; BRANCH := (branch EXPRESSION CCL_BLOCK [CCL_BLOCK ...]) -;; LOOP := (loop STATEMENT [STATEMENT ...]) -;; BREAK := (break) -;; REPEAT := -;; (repeat) -;; | (write-repeat [REG | integer | string]) -;; | (write-read-repeat REG [integer | ARRAY]) -;; READ := -;; (read REG ...) -;; | (read-if (REG OPERATOR ARG) CCL_BLOCK CCL_BLOCK) -;; | (read-branch REG CCL_BLOCK [CCL_BLOCK ...]) -;; | (read-multibyte-character REG {charset} REG {code-point}) -;; WRITE := -;; (write REG ...) -;; | (write EXPRESSION) -;; | (write integer) | (write string) | (write REG ARRAY) -;; | string -;; | (write-multibyte-character REG(charset) REG(codepoint)) -;; CALL := (call ccl-program-name) -;; END := (end) -;; -;; REG := r0 | r1 | r2 | r3 | r4 | r5 | r6 | r7 -;; ARG := REG | integer -;; OPERATOR := -;; + | - | * | / | % | & | '|' | ^ | << | >> | <8 | >8 | // -;; | < | > | == | <= | >= | != | de-sjis | en-sjis -;; ASSIGNMENT_OPERATOR := -;; += | -= | *= | /= | %= | &= | '|=' | ^= | <<= | >>= -;; ARRAY := '[' integer ... ']' +;; Syntax and semantics of CCL program is described in the +;; documentation of `define-ccl-program'. ;;; Code: (defconst ccl-command-table [if branch loop break repeat write-repeat write-read-repeat read read-if read-branch write call end - read-multibyte-character write-multibyte-character] + read-multibyte-character write-multibyte-character + translate-character + iterate-multiple-map map-multiple map-single] "Vector of CCL commands (symbols).") ;; Put a property to each symbol of CCL commands for the compiler. @@ -228,11 +179,26 @@ ;; Embed integer DATA in `ccl-program-vector' at `ccl-current-ic' and ;; increment it. If IC is specified, embed DATA at IC. (defun ccl-embed-data (data &optional ic) - (let ((val (if (characterp data) (char-int data) data))) - (if ic - (aset ccl-program-vector ic val) - (aset ccl-program-vector ccl-current-ic val) - (setq ccl-current-ic (1+ ccl-current-ic))))) + (if (characterp data) + (setq data (char-int data))) + (if ic + (aset ccl-program-vector ic data) + (let ((len (length ccl-program-vector))) + (if (>= ccl-current-ic len) + (let ((new (make-vector (* len 2) nil))) + (while (> len 0) + (setq len (1- len)) + (aset new len (aref ccl-program-vector len))) + (setq ccl-program-vector new)))) + (aset ccl-program-vector ccl-current-ic data) + (setq ccl-current-ic (1+ ccl-current-ic)))) + +;; Embed pair of SYMBOL and PROP where (get SYMBOL PROP) should give +;; proper index number for SYMBOL. PROP should be +;; `translation-table-id', `code-conversion-map-id', or +;; `ccl-program-idx'. +(defun ccl-embed-symbol (symbol prop) + (ccl-embed-data (cons symbol prop))) ;; Embed string STR of length LEN in `ccl-program-vector' at ;; `ccl-current-ic'. @@ -280,8 +246,7 @@ (logior (ash (get reg2 'ccl-register-number) 8) (ash data 11)) (ash data 8))))) - (aset ccl-program-vector ccl-current-ic code) - (setq ccl-current-ic (1+ ccl-current-ic)))) + (ccl-embed-data code))) ;; extended ccl command format ;; |- 14-bit -|- 3-bit --|- 3-bit --|- 3-bit --|- 5-bit -| @@ -297,18 +262,6 @@ (defun ccl-increment-ic (inc) (setq ccl-current-ic (+ ccl-current-ic inc))) -;;;###autoload -(defun ccl-program-p (obj) - "Return t if OBJECT is a valid CCL compiled code." - (and (vectorp obj) - (let ((i 0) (len (length obj)) (flag t)) - (if (> len 1) - (progn - (while (and flag (< i len)) - (setq flag (integerp (aref obj i))) - (setq i (1+ i))) - flag))))) - ;; If non-nil, index of the start of the current loop. (defvar ccl-loop-head nil) ;; If non-nil, list of absolute addresses of the breaking points of @@ -319,7 +272,7 @@ (defun ccl-compile (ccl-program) "Return a compiled code of CCL-PROGRAM as a vector of integer." (if (or (null (consp ccl-program)) - (null (integer-or-char-p (car ccl-program))) + (null (integerp (car ccl-program))) (null (listp (car (cdr ccl-program))))) (error "CCL: Invalid CCL program: %s" ccl-program)) (if (null (vectorp ccl-program-vector)) @@ -479,7 +432,8 @@ (setq left 'r7))) ;; Now EXPR has the form (LEFT OP RIGHT). - (if (eq rrr left) + (if (and (eq rrr left) + (< op (length ccl-assign-arith-table))) ;; Compile this SET statement as `(RRR OP= RIGHT)'. (if (integer-or-char-p right) (progn @@ -501,6 +455,7 @@ ;; Compile WRITE statement with string argument. (defun ccl-compile-write-string (str) + (setq str (encode-coding-string str 'binary)) (let ((len (length str))) (ccl-embed-code 'write-const-string 1 len) (ccl-embed-string len str)) @@ -712,6 +667,7 @@ (ccl-embed-code 'write-const-jump 0 ccl-loop-head) (ccl-embed-data arg)) ((stringp arg) + (setq arg (encode-coding-string arg 'binary)) (let ((len (length arg)) (i 0)) (ccl-embed-code 'write-string-jump 0 ccl-loop-head) @@ -825,11 +781,8 @@ (error "CCL: Invalid number of arguments: %s" cmd)) (if (not (symbolp (nth 1 cmd))) (error "CCL: Subroutine should be a symbol: %s" cmd)) - (let* ((name (nth 1 cmd)) - (idx (get name 'ccl-program-idx))) - (if (not idx) - (error "CCL: Unknown subroutine name: %s" name)) - (ccl-embed-code 'call 0 idx)) + (ccl-embed-code 'call 1 0) + (ccl-embed-symbol (nth 1 cmd) 'ccl-program-idx) nil) ;; Compile END statement. @@ -862,97 +815,99 @@ nil) ;; Compile translate-character -;; (defun ccl-compile-translate-character (cmd) -;; (if (/= (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((Rrr (nth 1 cmd)) -;; (RRR (nth 2 cmd)) -;; (rrr (nth 3 cmd))) -;; (ccl-check-register rrr cmd) -;; (ccl-check-register RRR cmd) -;; (cond ((and (symbolp Rrr) (not (get Rrr 'ccl-register-number))) -;; (if (not (get Rrr 'translation-table)) -;; (error "CCL: Invalid translation table %s in %s" Rrr cmd)) -;; (ccl-embed-extended-command 'translate-character-const-tbl -;; rrr RRR 0) -;; (ccl-embed-data Rrr)) -;; (t -;; (ccl-check-register Rrr cmd) -;; (ccl-embed-extended-command 'translate-character rrr RRR Rrr)))) -;; nil) +(defun ccl-compile-translate-character (cmd) + (if (/= (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let ((Rrr (nth 1 cmd)) + (RRR (nth 2 cmd)) + (rrr (nth 3 cmd))) + (ccl-check-register rrr cmd) + (ccl-check-register RRR cmd) + (cond ((and (symbolp Rrr) (not (get Rrr 'ccl-register-number))) + (ccl-embed-extended-command 'translate-character-const-tbl + rrr RRR 0) + (ccl-embed-symbol Rrr 'translation-table-id)) + (t + (ccl-check-register Rrr cmd) + (ccl-embed-extended-command 'translate-character rrr RRR Rrr)))) + nil) -;; (defun ccl-compile-iterate-multiple-map (cmd) -;; (ccl-compile-multiple-map-function 'iterate-multiple-map cmd) -;; nil) +(defun ccl-compile-iterate-multiple-map (cmd) + (ccl-compile-multiple-map-function 'iterate-multiple-map cmd) + nil) -;; (defun ccl-compile-map-multiple (cmd) -;; (if (/= (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((func '(lambda (arg mp) -;; (let ((len 0) result add) -;; (while arg -;; (if (consp (car arg)) -;; (setq add (funcall func (car arg) t) -;; result (append result add) -;; add (+ (-(car add)) 1)) -;; (setq result -;; (append result -;; (list (car arg))) -;; add 1)) -;; (setq arg (cdr arg) -;; len (+ len add))) -;; (if mp -;; (cons (- len) result) -;; result)))) -;; arg) -;; (setq arg (append (list (nth 0 cmd) (nth 1 cmd) (nth 2 cmd)) -;; (funcall func (nth 3 cmd) nil))) -;; (ccl-compile-multiple-map-function 'map-multiple arg)) -;; nil) +(defun ccl-compile-map-multiple (cmd) + (if (/= (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let (func arg) + (setq func + (lambda (arg mp) + (let ((len 0) result add) + (while arg + (if (consp (car arg)) + (setq add (funcall func (car arg) t) + result (append result add) + add (+ (- (car add)) 1)) + (setq result + (append result + (list (car arg))) + add 1)) + (setq arg (cdr arg) + len (+ len add))) + (if mp + (cons (- len) result) + result)))) + (setq arg (append (list (nth 0 cmd) (nth 1 cmd) (nth 2 cmd)) + (funcall func (nth 3 cmd) nil))) + (ccl-compile-multiple-map-function 'map-multiple arg)) + nil) -;; (defun ccl-compile-map-single (cmd) -;; (if (/= (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((RRR (nth 1 cmd)) -;; (rrr (nth 2 cmd)) -;; (map (nth 3 cmd)) -;; id) -;; (ccl-check-register rrr cmd) -;; (ccl-check-register RRR cmd) -;; (ccl-embed-extended-command 'map-single rrr RRR 0) -;; (cond ((symbolp map) -;; (if (get map 'code-conversion-map) -;; (ccl-embed-data map) -;; (error "CCL: Invalid map: %s" map))) -;; (t -;; (error "CCL: Invalid type of arguments: %s" cmd)))) -;; nil) +(defun ccl-compile-map-single (cmd) + (if (/= (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let ((RRR (nth 1 cmd)) + (rrr (nth 2 cmd)) + (map (nth 3 cmd)) + id) + (ccl-check-register rrr cmd) + (ccl-check-register RRR cmd) + (ccl-embed-extended-command 'map-single rrr RRR 0) + (cond ((symbolp map) + (if (get map 'code-conversion-map) + (ccl-embed-symbol map 'code-conversion-map-id) + (error "CCL: Invalid map: %s" map))) + (t + (error "CCL: Invalid type of arguments: %s" cmd)))) + nil) -;; (defun ccl-compile-multiple-map-function (command cmd) -;; (if (< (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((RRR (nth 1 cmd)) -;; (rrr (nth 2 cmd)) -;; (args (nthcdr 3 cmd)) -;; map) -;; (ccl-check-register rrr cmd) -;; (ccl-check-register RRR cmd) -;; (ccl-embed-extended-command command rrr RRR 0) -;; (ccl-embed-data (length args)) -;; (while args -;; (setq map (car args)) -;; (cond ((symbolp map) -;; (if (get map 'code-conversion-map) -;; (ccl-embed-data map) -;; (error "CCL: Invalid map: %s" map))) -;; ((numberp map) -;; (ccl-embed-data map)) -;; (t -;; (error "CCL: Invalid type of arguments: %s" cmd))) -;; (setq args (cdr args))))) +(defun ccl-compile-multiple-map-function (command cmd) + (if (< (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let ((RRR (nth 1 cmd)) + (rrr (nth 2 cmd)) + (args (nthcdr 3 cmd)) + map) + (ccl-check-register rrr cmd) + (ccl-check-register RRR cmd) + (ccl-embed-extended-command command rrr RRR 0) + (ccl-embed-data (length args)) + (while args + (setq map (car args)) + (cond ((symbolp map) + (if (get map 'code-conversion-map) + (ccl-embed-symbol map 'code-conversion-map-id) + (error "CCL: Invalid map: %s" map))) + ((numberp map) + (ccl-embed-data map)) + (t + (error "CCL: Invalid type of arguments: %s" cmd))) + (setq args (cdr args))))) -;;; CCL dump stuff +;;; CCL dump staffs + +;; To avoid byte-compiler warning. +(defvar ccl-code) ;;;###autoload (defun ccl-dump (ccl-code) @@ -980,7 +935,6 @@ ;; Return a CCL code in `ccl-code' at `ccl-current-ic'. (defun ccl-get-next-code () - (declare (special ccl-code)) (prog1 (aref ccl-code ccl-current-ic) (setq ccl-current-ic (1+ ccl-current-ic)))) @@ -1230,40 +1184,40 @@ (defun ccl-dump-write-multibyte-character (rrr RRR Rrr) (insert (format "write-multibyte-character r%d r%d\n" RRR rrr))) -;; (defun ccl-dump-translate-character (rrr RRR Rrr) -;; (insert (format "translation table(r%d) r%d r%d\n" Rrr RRR rrr))) +(defun ccl-dump-translate-character (rrr RRR Rrr) + (insert (format "translation table(r%d) r%d r%d\n" Rrr RRR rrr))) -;; (defun ccl-dump-translate-character-const-tbl (rrr RRR Rrr) -;; (let ((tbl (ccl-get-next-code))) -;; (insert (format "translation table(%S) r%d r%d\n" tbl RRR rrr)))) +(defun ccl-dump-translate-character-const-tbl (rrr RRR Rrr) + (let ((tbl (ccl-get-next-code))) + (insert (format "translation table(%S) r%d r%d\n" tbl RRR rrr)))) -;; (defun ccl-dump-iterate-multiple-map (rrr RRR Rrr) -;; (let ((notbl (ccl-get-next-code)) -;; (i 0) id) -;; (insert (format "iterate-multiple-map r%d r%d\n" RRR rrr)) -;; (insert (format "\tnumber of maps is %d .\n\t [" notbl)) -;; (while (< i notbl) -;; (setq id (ccl-get-next-code)) -;; (insert (format "%S" id)) -;; (setq i (1+ i))) -;; (insert "]\n"))) +(defun ccl-dump-iterate-multiple-map (rrr RRR Rrr) + (let ((notbl (ccl-get-next-code)) + (i 0) id) + (insert (format "iterate-multiple-map r%d r%d\n" RRR rrr)) + (insert (format "\tnumber of maps is %d .\n\t [" notbl)) + (while (< i notbl) + (setq id (ccl-get-next-code)) + (insert (format "%S" id)) + (setq i (1+ i))) + (insert "]\n"))) -;; (defun ccl-dump-map-multiple (rrr RRR Rrr) -;; (let ((notbl (ccl-get-next-code)) -;; (i 0) id) -;; (insert (format "map-multiple r%d r%d\n" RRR rrr)) -;; (insert (format "\tnumber of maps and separators is %d\n\t [" notbl)) -;; (while (< i notbl) -;; (setq id (ccl-get-next-code)) -;; (if (= id -1) -;; (insert "]\n\t [") -;; (insert (format "%S " id))) -;; (setq i (1+ i))) -;; (insert "]\n"))) +(defun ccl-dump-map-multiple (rrr RRR Rrr) + (let ((notbl (ccl-get-next-code)) + (i 0) id) + (insert (format "map-multiple r%d r%d\n" RRR rrr)) + (insert (format "\tnumber of maps and separators is %d\n\t [" notbl)) + (while (< i notbl) + (setq id (ccl-get-next-code)) + (if (= id -1) + (insert "]\n\t [") + (insert (format "%S " id))) + (setq i (1+ i))) + (insert "]\n"))) -;; (defun ccl-dump-map-single (rrr RRR Rrr) -;; (let ((id (ccl-get-next-code))) -;; (insert (format "map-single r%d r%d map(%S)\n" RRR rrr id)))) +(defun ccl-dump-map-single (rrr RRR Rrr) + (let ((id (ccl-get-next-code))) + (insert (format "map-single r%d r%d map(%S)\n" RRR rrr id)))) ;; CCL emulation staffs @@ -1276,16 +1230,222 @@ (defmacro declare-ccl-program (name &optional vector) "Declare NAME as a name of CCL program. -To compile a CCL program which calls another CCL program not yet -defined, it must be declared as a CCL program in advance. +This macro exists for backward compatibility. In the old version of +Emacs, to compile a CCL program which calls another CCL program not +yet defined, it must be declared as a CCL program in advance. But, +now CCL program names are resolved not at compile time but before +execution. + Optional arg VECTOR is a compiled CCL code of the CCL program." `(put ',name 'ccl-program-idx (register-ccl-program ',name ,vector))) ;;;###autoload (defmacro define-ccl-program (name ccl-program &optional doc) "Set NAME the compiled code of CCL-PROGRAM. -CCL-PROGRAM is `eval'ed before being handed to the CCL compiler `ccl-compile'. -The compiled code is a vector of integers." + +CCL-PROGRAM has this form: + (BUFFER_MAGNIFICATION + CCL_MAIN_CODE + [ CCL_EOF_CODE ]) + +BUFFER_MAGNIFICATION is an integer value specifying the approximate +output buffer magnification size compared with the bytes of input data +text. If the value is zero, the CCL program can't execute `read' and +`write' commands. + +CCL_MAIN_CODE and CCL_EOF_CODE are CCL program codes. CCL_MAIN_CODE +executed at first. If there's no more input data when `read' command +is executed in CCL_MAIN_CODE, CCL_EOF_CODE is executed. If +CCL_MAIN_CODE is terminated, CCL_EOF_CODE is not executed. + +Here's the syntax of CCL program code in BNF notation. The lines +starting by two semicolons (and optional leading spaces) describe the +semantics. + +CCL_MAIN_CODE := CCL_BLOCK + +CCL_EOF_CODE := CCL_BLOCK + +CCL_BLOCK := STATEMENT | (STATEMENT [STATEMENT ...]) + +STATEMENT := + SET | IF | BRANCH | LOOP | REPEAT | BREAK | READ | WRITE | CALL + | TRANSLATE | END + +SET := (REG = EXPRESSION) + | (REG ASSIGNMENT_OPERATOR EXPRESSION) + ;; The following form is the same as (r0 = integer). + | integer + +EXPRESSION := ARG | (EXPRESSION OPERATOR ARG) + +;; Evaluate EXPRESSION. If the result is nonzeor, execute +;; CCL_BLOCK_0. Otherwise, execute CCL_BLOCK_1. +IF := (if EXPRESSION CCL_BLOCK_0 CCL_BLOCK_1) + +;; Evaluate EXPRESSION. Provided that the result is N, execute +;; CCL_BLOCK_N. +BRANCH := (branch EXPRESSION CCL_BLOCK_0 [CCL_BLOCK_1 ...]) + +;; Execute STATEMENTs until (break) or (end) is executed. +LOOP := (loop STATEMENT [STATEMENT ...]) + +;; Terminate the most inner loop. +BREAK := (break) + +REPEAT := + ;; Jump to the head of the most inner loop. + (repeat) + ;; Same as: ((write [REG | integer | string]) + ;; (repeat)) + | (write-repeat [REG | integer | string]) + ;; Same as: ((write REG [ARRAY]) + ;; (read REG) + ;; (repeat)) + | (write-read-repeat REG [ARRAY]) + ;; Same as: ((write integer) + ;; (read REG) + ;; (repeat)) + | (write-read-repeat REG integer) + +READ := ;; Set REG_0 to a byte read from the input text, set REG_1 + ;; to the next byte read, and so on. + (read REG_0 [REG_1 ...]) + ;; Same as: ((read REG) + ;; (if (REG OPERATOR ARG) CCL_BLOCK_0 CCL_BLOCK_1)) + | (read-if (REG OPERATOR ARG) CCL_BLOCK_0 CCL_BLOCK_1) + ;; Same as: ((read REG) + ;; (branch REG CCL_BLOCK_0 [CCL_BLOCK_1 ...])) + | (read-branch REG CCL_BLOCK_0 [CCL_BLOCK_1 ...]) + ;; Read a character from the input text while parsing + ;; multibyte representation, set REG_0 to the charset ID of + ;; the character, set REG_1 to the code point of the + ;; character. If the dimension of charset is two, set REG_1 + ;; to ((CODE0 << 8) | CODE1), where CODE0 is the first code + ;; point and CODE1 is the second code point. + | (read-multibyte-character REG_0 REG_1) + +WRITE := + ;; Write REG_0, REG_1, ... to the output buffer. If REG_N is + ;; a multibyte character, write the corresponding multibyte + ;; representation. + (write REG_0 [REG_1 ...]) + ;; Same as: ((r7 = EXPRESSION) + ;; (write r7)) + | (write EXPRESSION) + ;; Write the value of `integer' to the output buffer. If it + ;; is a multibyte character, write the corresponding multibyte + ;; representation. + | (write integer) + ;; Write the byte sequence of `string' as is to the output + ;; buffer. It is encoded by binary coding system, thus, + ;; by this operation, you cannot write multibyte string + ;; as it is. + | (write string) + ;; Same as: (write string) + | string + ;; Provided that the value of REG is N, write Nth element of + ;; ARRAY to the output buffer. If it is a multibyte + ;; character, write the corresponding multibyte + ;; representation. + | (write REG ARRAY) + ;; Write a multibyte representation of a character whose + ;; charset ID is REG_0 and code point is REG_1. If the + ;; dimension of the charset is two, REG_1 should be ((CODE0 << + ;; 8) | CODE1), where CODE0 is the first code point and CODE1 + ;; is the second code point of the character. + | (write-multibyte-character REG_0 REG_1) + +;; Call CCL program whose name is ccl-program-name. +CALL := (call ccl-program-name) + +;; Terminate the CCL program. +END := (end) + +;; CCL registers that can contain any integer value. As r7 is also +;; used by CCL interpreter, its value is changed unexpectedly. +REG := r0 | r1 | r2 | r3 | r4 | r5 | r6 | r7 + +ARG := REG | integer + +OPERATOR := + ;; Normal arithmethic operators (same meaning as C code). + + | - | * | / | % + + ;; Bitwize operators (same meaning as C code) + | & | `|' | ^ + + ;; Shifting operators (same meaning as C code) + | << | >> + + ;; (REG = ARG_0 <8 ARG_1) means: + ;; (REG = ((ARG_0 << 8) | ARG_1)) + | <8 + + ;; (REG = ARG_0 >8 ARG_1) means: + ;; ((REG = (ARG_0 >> 8)) + ;; (r7 = (ARG_0 & 255))) + | >8 + + ;; (REG = ARG_0 // ARG_1) means: + ;; ((REG = (ARG_0 / ARG_1)) + ;; (r7 = (ARG_0 % ARG_1))) + | // + + ;; Normal comparing operators (same meaning as C code) + | < | > | == | <= | >= | != + + ;; If ARG_0 and ARG_1 are higher and lower byte of Shift-JIS + ;; code, and CHAR is the corresponding JISX0208 character, + ;; (REG = ARG_0 de-sjis ARG_1) means: + ;; ((REG = CODE0) + ;; (r7 = CODE1)) + ;; where CODE0 is the first code point of CHAR, CODE1 is the + ;; second code point of CHAR. + | de-sjis + + ;; If ARG_0 and ARG_1 are the first and second code point of + ;; JISX0208 character CHAR, and SJIS is the correponding + ;; Shift-JIS code, + ;; (REG = ARG_0 en-sjis ARG_1) means: + ;; ((REG = HIGH) + ;; (r7 = LOW)) + ;; where HIGH is the higher byte of SJIS, LOW is the lower + ;; byte of SJIS. + | en-sjis + +ASSIGNMENT_OPERATOR := + ;; Same meaning as C code + += | -= | *= | /= | %= | &= | `|=' | ^= | <<= | >>= + + ;; (REG <8= ARG) is the same as: + ;; ((REG <<= 8) + ;; (REG |= ARG)) + | <8= + + ;; (REG >8= ARG) is the same as: + ;; ((r7 = (REG & 255)) + ;; (REG >>= 8)) + + ;; (REG //= ARG) is the same as: + ;; ((r7 = (REG % ARG)) + ;; (REG /= ARG)) + | //= + +ARRAY := `[' integer ... `]' + + +TRANSLATE := + (translate-character REG(table) REG(charset) REG(codepoint)) + | (translate-character SYMBOL REG(charset) REG(codepoint)) +MAP := + (iterate-multiple-map REG REG MAP-IDs) + | (map-multiple REG REG (MAP-SET)) + | (map-single REG REG MAP-ID) +MAP-IDs := MAP-ID ... +MAP-SET := MAP-IDs | (MAP-IDs) MAP-SET +MAP-ID := integer +" `(let ((prog ,(ccl-compile (eval ccl-program)))) (defconst ,name prog ,doc) (put ',name 'ccl-program-idx (register-ccl-program ',name prog)) @@ -1294,25 +1454,23 @@ ;;;###autoload (defmacro check-ccl-program (ccl-program &optional name) "Check validity of CCL-PROGRAM. -If CCL-PROGRAM is a symbol denoting a valid CCL program, return +If CCL-PROGRAM is a symbol denoting a CCL program, return CCL-PROGRAM, else return nil. If CCL-PROGRAM is a vector and optional arg NAME (symbol) is supplied, register CCL-PROGRAM by name NAME, and return NAME." - `(let ((result ,ccl-program)) - (cond ((symbolp ,ccl-program) - (or (numberp (get ,ccl-program 'ccl-program-idx)) - (setq result nil))) - ((vectorp ,ccl-program) - (setq result ,name) - (register-ccl-program result ,ccl-program)) - (t - (setq result nil))) - result)) + `(if (ccl-program-p ,ccl-program) + (if (vectorp ,ccl-program) + (progn + (register-ccl-program ,name ,ccl-program) + ,name) + ,ccl-program))) ;;;###autoload (defun ccl-execute-with-args (ccl-prog &rest args) "Execute CCL-PROGRAM with registers initialized by the remaining args. -The return value is a vector of resulting CCL registers." +The return value is a vector of resulting CCL registers. + +See the documentation of `define-ccl-program' for the detail of CCL program." (let ((reg (make-vector 8 0)) (i 0)) (while (and args (< i 8)) diff -r a8296e22da4e -r 576fb035e263 lisp/mule/mule-cmds.el --- a/lisp/mule/mule-cmds.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/mule-cmds.el Mon Aug 13 11:36:19 2007 +0200 @@ -23,25 +23,20 @@ ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ;; 02111-1307, USA. +;; Note: Some of the code here is now in code-cmds.el + ;;; Code: ;;; MULE related key bindings and menus. -(defvar mule-keymap (make-sparse-keymap "Mule") - "Keymap for Mule (Multilingual environment) specific commands.") - -;; Keep "C-x C-m ..." for mule specific commands. -(define-key ctl-x-map "\C-m" mule-keymap) +(require 'code-cmds) -(define-key mule-keymap "f" 'set-buffer-file-coding-system) -(define-key mule-keymap "F" 'set-default-buffer-file-coding-system) ; XEmacs -(define-key mule-keymap "t" 'set-terminal-coding-system) -(define-key mule-keymap "k" 'set-keyboard-coding-system) -(define-key mule-keymap "p" 'set-buffer-process-coding-system) +;; Preserve the old name +(defvaralias 'mule-keymap 'coding-keymap) + (define-key mule-keymap "x" 'set-selection-coding-system) (define-key mule-keymap "X" 'set-next-selection-coding-system) (define-key mule-keymap "\C-\\" 'set-input-method) -(define-key mule-keymap "c" 'universal-coding-system-argument) ;;(define-key mule-keymap "c" 'list-coding-system-briefly) ; XEmacs (define-key mule-keymap "C" 'describe-coding-system) ; XEmacs (define-key mule-keymap "r" 'toggle-display-direction) ; XEmacs @@ -123,378 +118,6 @@ (let ((coding-system-for-read 'iso-2022-7bit)) (find-file-read-only (expand-file-name "HELLO" data-directory)))) -(defun universal-coding-system-argument () - "Execute an I/O command using the specified coding system." - (interactive) - (let* ((default (and buffer-file-coding-system - (not (eq (coding-system-type buffer-file-coding-system) - t)) - (coding-system-name buffer-file-coding-system))) - (coding-system - (read-coding-system - (if default - (format "Coding system for following command (default, %s): " - default) - "Coding system for following command: ") - default)) - (keyseq (read-key-sequence - (format "Command to execute with %s:" coding-system))) - (cmd (key-binding keyseq))) - (let ((coding-system-for-read coding-system) - (coding-system-for-write coding-system)) - (message "") - (call-interactively cmd)))) - -(defun set-default-coding-systems (coding-system) - "Set default value of various coding systems to CODING-SYSTEM. -This sets the following coding systems: - o coding system of a newly created buffer - o default coding system for terminal output - o default coding system for keyboard input - o default coding system for subprocess I/O - o default coding system for converting file names." - (check-coding-system coding-system) - ;;(setq-default buffer-file-coding-system coding-system) - (set-default-buffer-file-coding-system coding-system) - ;; (if default-enable-multibyte-characters - ;; (setq default-file-name-coding-system coding-system)) - ;; If coding-system is nil, honor that on MS-DOS as well, so - ;; that they could reset the terminal coding system. - ;; (unless (and (eq window-system 'pc) coding-system) - ;; (setq default-terminal-coding-system coding-system)) - (set-terminal-coding-system coding-system) - ;;(setq default-keyboard-coding-system coding-system) - (set-keyboard-coding-system coding-system) - ;;(setq default-process-coding-system (cons coding-system coding-system)) - ;; Refer to coding-system-for-read and coding-system-for-write - ;; so that C-x RET c works. - (add-hook 'comint-exec-hook - `(lambda () - (let ((proc (get-buffer-process (current-buffer)))) - (set-process-input-coding-system - proc (or coding-system-for-read ',coding-system)) - (set-process-output-coding-system - proc (or coding-system-for-write ',coding-system)))) - 'append) - (setq file-name-coding-system coding-system)) - -(defun prefer-coding-system (coding-system) - "Add CODING-SYSTEM at the front of the priority list for automatic detection. -This also sets the following coding systems: - o coding system of a newly created buffer - o default coding system for terminal output - o default coding system for keyboard input - o default coding system for converting file names. - -If CODING-SYSTEM specifies a certain type of EOL conversion, the coding -systems set by this function will use that type of EOL conversion. - -This command does not change the default value of terminal coding system -for MS-DOS terminal, because DOS terminals only support a single coding -system, and Emacs automatically sets the default to that coding system at -startup." - (interactive "zPrefer coding system: ") - (if (not (and coding-system (find-coding-system coding-system))) - (error "Invalid coding system `%s'" coding-system)) - (let ((coding-category (coding-system-category coding-system)) - (base (coding-system-base coding-system)) - (eol-type (coding-system-eol-type coding-system))) - (if (not coding-category) - ;; CODING-SYSTEM is no-conversion or undecided. - (error "Can't prefer the coding system `%s'" coding-system)) - (set-coding-category-system coding-category (or base coding-system)) - ;; (update-coding-systems-internal) - (or (eq coding-category (car (coding-category-list))) - ;; We must change the order. - (set-coding-priority-list (list coding-category))) - (if (and base (interactive-p)) - (message "Highest priority is set to %s (base of %s)" - base coding-system)) - ;; If they asked for specific EOL conversion, honor that. - (if (memq eol-type '(lf crlf mac)) - (setq coding-system - (coding-system-change-eol-conversion base eol-type)) - (setq coding-system base)) - (set-default-coding-systems coding-system))) - -;; (defun find-coding-systems-region-subset-p (list1 list2) -;; "Return non-nil if all elements in LIST1 are included in LIST2. -;; Comparison done with EQ." -;; (catch 'tag -;; (while list1 -;; (or (memq (car list1) list2) -;; (throw 'tag nil)) -;; (setq list1 (cdr list1))) -;; t)) - -;; (defun find-coding-systems-region (from to) -;; "Return a list of proper coding systems to encode a text between FROM and TO. -;; All coding systems in the list can safely encode any multibyte characters -;; in the text. -;; -;; If the text contains no multibyte characters, return a list of a single -;; element `undecided'." -;; (find-coding-systems-for-charsets (find-charset-region from to))) - -;; (defun find-coding-systems-string (string) -;; "Return a list of proper coding systems to encode STRING. -;; All coding systems in the list can safely encode any multibyte characters -;; in STRING. -;; -;; If STRING contains no multibyte characters, return a list of a single -;; element `undecided'." -;; (find-coding-systems-for-charsets (find-charset-string string))) - -;; (defun find-coding-systems-for-charsets (charsets) -;; "Return a list of proper coding systems to encode characters of CHARSETS. -;; CHARSETS is a list of character sets." -;; (if (or (null charsets) -;; (and (= (length charsets) 1) -;; (eq 'ascii (car charsets)))) -;; '(undecided) -;; (setq charsets (delq 'composition charsets)) -;; (let ((l (coding-system-list 'base-only)) -;; (charset-preferred-codings -;; (mapcar (function -;; (lambda (x) -;; (if (eq x 'unknown) -;; 'raw-text -;; (get-charset-property x 'preferred-coding-system)))) -;; charsets)) -;; (priorities (mapcar (function (lambda (x) (symbol-value x))) -;; coding-category-list)) -;; codings coding safe) -;; (if (memq 'unknown charsets) -;; ;; The region contains invalid multibyte characters. -;; (setq l '(raw-text))) -;; (while l -;; (setq coding (car l) l (cdr l)) -;; (if (and (setq safe (coding-system-get coding 'safe-charsets)) -;; (or (eq safe t) -;; (find-coding-systems-region-subset-p charsets safe))) -;; ;; We put the higher priority to coding systems included -;; ;; in CHARSET-PREFERRED-CODINGS, and within them, put the -;; ;; higher priority to coding systems which support smaller -;; ;; number of charsets. -;; (let ((priority -;; (+ (if (coding-system-get coding 'mime-charset) 4096 0) -;; (lsh (length (memq coding priorities)) 7) -;; (if (memq coding charset-preferred-codings) 64 0) -;; (if (> (coding-system-type coding) 0) 32 0) -;; (if (consp safe) (- 32 (length safe)) 0)))) -;; (setq codings (cons (cons priority coding) codings))))) -;; (mapcar 'cdr -;; (sort codings (function (lambda (x y) (> (car x) (car y)))))) -;; ))) - -;; (defun find-multibyte-characters (from to &optional maxcount excludes) -;; "Find multibyte characters in the region specified by FROM and TO. -;; If FROM is a string, find multibyte characters in the string. -;; The return value is an alist of the following format: -;; ((CHARSET COUNT CHAR ...) ...) -;; where -;; CHARSET is a character set, -;; COUNT is a number of characters, -;; CHARs are found characters of the character set. -;; Optional 3rd arg MAXCOUNT limits how many CHARs are put in the above list. -;; Optional 4th arg EXCLUDE is a list of character sets to be ignored. -;; -;; For invalid characters, CHARs are actually strings." -;; (let ((chars nil) -;; charset char) -;; (if (stringp from) -;; (let ((idx 0)) -;; (while (setq idx (string-match "[^\000-\177]" from idx)) -;; (setq char (aref from idx) -;; charset (char-charset char)) -;; (if (eq charset 'unknown) -;; (setq char (match-string 0))) -;; (if (or (eq charset 'unknown) -;; (not (or (eq excludes t) (memq charset excludes)))) -;; (let ((slot (assq charset chars))) -;; (if slot -;; (if (not (memq char (nthcdr 2 slot))) -;; (let ((count (nth 1 slot))) -;; (setcar (cdr slot) (1+ count)) -;; (if (or (not maxcount) (< count maxcount)) -;; (nconc slot (list char))))) -;; (setq chars (cons (list charset 1 char) chars))))) -;; (setq idx (1+ idx)))) -;; (save-excursion -;; (goto-char from) -;; (while (re-search-forward "[^\000-\177]" to t) -;; (setq char (preceding-char) -;; charset (char-charset char)) -;; (if (eq charset 'unknown) -;; (setq char (match-string 0))) -;; (if (or (eq charset 'unknown) -;; (not (or (eq excludes t) (memq charset excludes)))) -;; (let ((slot (assq charset chars))) -;; (if slot -;; (if (not (member char (nthcdr 2 slot))) -;; (let ((count (nth 1 slot))) -;; (setcar (cdr slot) (1+ count)) -;; (if (or (not maxcount) (< count maxcount)) -;; (nconc slot (list char))))) -;; (setq chars (cons (list charset 1 char) chars)))))))) -;; (nreverse chars))) - -;; (defvar last-coding-system-specified nil -;; "Most recent coding system explicitly specified by the user when asked. -;; This variable is set whenever Emacs asks the user which coding system -;; to use in order to write a file. If you set it to nil explicitly, -;; then call `write-region', then afterward this variable will be non-nil -;; only if the user was explicitly asked and specified a coding system.") - -;; (defun select-safe-coding-system (from to &optional default-coding-system) -;; "Ask a user to select a safe coding system from candidates. -;; The candidates of coding systems which can safely encode a text -;; between FROM and TO are shown in a popup window. -;; -;; Optional arg DEFAULT-CODING-SYSTEM specifies a coding system to be -;; checked at first. If omitted, buffer-file-coding-system of the -;; current buffer is used. -;; -;; If the text can be encoded safely by DEFAULT-CODING-SYSTEM, it is -;; returned without any user interaction. -;; -;; Kludgy feature: if FROM is a string, the string is the target text, -;; and TO is ignored." -;; (or default-coding-system -;; (setq default-coding-system buffer-file-coding-system)) -;; (let* ((charsets (if (stringp from) (find-charset-string from) -;; (find-charset-region from to))) -;; (safe-coding-systems (find-coding-systems-for-charsets charsets))) -;; (if (or (not enable-multibyte-characters) -;; (eq (car safe-coding-systems) 'undecided) -;; (eq default-coding-system 'no-conversion) -;; (and default-coding-system -;; (memq (coding-system-base default-coding-system) -;; safe-coding-systems))) -;; default-coding-system -;; -;; ;; At first, change each coding system to the corresponding -;; ;; mime-charset name if it is also a coding system. -;; (let ((l safe-coding-systems) -;; mime-charset) -;; (while l -;; (setq mime-charset (coding-system-get (car l) 'mime-charset)) -;; (if (and mime-charset (coding-system-p mime-charset)) -;; (setcar l mime-charset)) -;; (setq l (cdr l)))) -;; -;; (let ((non-safe-chars (find-multibyte-characters -;; from to 3 -;; (and default-coding-system -;; (coding-system-get default-coding-system -;; 'safe-charsets)))) -;; show-position overlays) -;; (save-excursion -;; ;; Highlight characters that default-coding-system can't encode. -;; (when (integerp from) -;; (goto-char from) -;; (let ((found nil)) -;; (while (and (not found) -;; (re-search-forward "[^\000-\177]" to t)) -;; (setq found (assq (char-charset (preceding-char)) -;; non-safe-chars)))) -;; (forward-line -1) -;; (setq show-position (point)) -;; (save-excursion -;; (while (and (< (length overlays) 256) -;; (re-search-forward "[^\000-\177]" to t)) -;; (let* ((char (preceding-char)) -;; (charset (char-charset char))) -;; (when (assq charset non-safe-chars) -;; (setq overlays (cons (make-overlay (1- (point)) (point)) -;; overlays)) -;; (overlay-put (car overlays) 'face 'highlight)))))) -;; -;; ;; At last, ask a user to select a proper coding system. -;; (unwind-protect -;; (save-window-excursion -;; (when show-position -;; ;; At first, be sure to show the current buffer. -;; (set-window-buffer (selected-window) (current-buffer)) -;; (set-window-start (selected-window) show-position)) -;; ;; Then, show a helpful message. -;; (with-output-to-temp-buffer "*Warning*" -;; (save-excursion -;; (set-buffer standard-output) -;; (insert "The target text contains the following non ASCII character(s):\n") -;; (let ((len (length non-safe-chars)) -;; (shown 0)) -;; (while (and non-safe-chars (< shown 3)) -;; (when (> (length (car non-safe-chars)) 2) -;; (setq shown (1+ shown)) -;; (insert (format "%25s: " (car (car non-safe-chars)))) -;; (let ((l (nthcdr 2 (car non-safe-chars)))) -;; (while l -;; (if (or (stringp (car l)) (char-valid-p (car l))) -;; (insert (car l))) -;; (setq l (cdr l)))) -;; (if (> (nth 1 (car non-safe-chars)) 3) -;; (insert "...")) -;; (insert "\n")) -;; (setq non-safe-chars (cdr non-safe-chars))) -;; (if (< shown len) -;; (insert (format "%27s\n" "...")))) -;; (insert (format "\ -;; These can't be encoded safely by the coding system %s. -;; -;; Please select one from the following safe coding systems:\n" -;; default-coding-system)) -;; (let ((pos (point)) -;; (fill-prefix " ")) -;; (mapcar (function (lambda (x) (princ " ") (princ x))) -;; safe-coding-systems) -;; (fill-region-as-paragraph pos (point))))) -;; -;; ;; Read a coding system. -;; (let* ((safe-names (mapcar (lambda (x) (list (symbol-name x))) -;; safe-coding-systems)) -;; (name (completing-read -;; (format "Select coding system (default %s): " -;; (car safe-coding-systems)) -;; safe-names nil t nil nil -;; (car (car safe-names))))) -;; (setq last-coding-system-specified (intern name)) -;; (if (integerp (coding-system-eol-type default-coding-system)) -;; (setq last-coding-system-specified -;; (coding-system-change-eol-conversion -;; last-coding-system-specified -;; (coding-system-eol-type default-coding-system)))) -;; last-coding-system-specified)) -;; (kill-buffer "*Warning*") -;; (while overlays -;; (delete-overlay (car overlays)) -;; (setq overlays (cdr overlays))))))))) - -;; (setq select-safe-coding-system-function 'select-safe-coding-system) - -;; (defun select-message-coding-system () -;; "Return a coding system to encode the outgoing message of the current buffer. -;; It at first tries the first coding system found in these variables -;; in this order: -;; (1) local value of `buffer-file-coding-system' -;; (2) value of `sendmail-coding-system' -;; (3) value of `default-buffer-file-coding-system' -;; (4) value of `default-sendmail-coding-system' -;; If the found coding system can't encode the current buffer, -;; or none of them are bound to a coding system, -;; it asks the user to select a proper coding system." -;; (let ((coding (or (and (local-variable-p 'buffer-file-coding-system) -;; buffer-file-coding-system) -;; sendmail-coding-system -;; default-buffer-file-coding-system -;; default-sendmail-coding-system))) -;; (if (eq coding 'no-conversion) -;; ;; We should never use no-conversion for outgoing mails. -;; (setq coding nil)) -;; (if (fboundp select-safe-coding-system-function) -;; (funcall select-safe-coding-system-function -;; (point-min) (point-max) coding) -;; coding))) ;;; Language support stuff. @@ -1057,7 +680,7 @@ The default status is as follows: - The default value of buffer-file-coding-system is nil. + The default value of `buffer-file-coding-system' is nil. The default coding system for process I/O is nil. The default value for the command `set-terminal-coding-system' is nil. The default value for the command `set-keyboard-coding-system' is nil. diff -r a8296e22da4e -r 576fb035e263 lisp/mule/mule-coding.el --- a/lisp/mule/mule-coding.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/mule-coding.el Mon Aug 13 11:36:19 2007 +0200 @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -31,8 +31,7 @@ (defun coding-system-force-on-output (coding-system register) "Return the 'force-on-output property of CODING-SYSTEM for the specified REGISTER." - (unless (integerp register) - (signal 'wrong-type-argument (list 'integerp register))) + (check-type register integer) (coding-system-property coding-system (case register diff -r a8296e22da4e -r 576fb035e263 lisp/mule/mule-misc.el --- a/lisp/mule/mule-misc.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/mule-misc.el Mon Aug 13 11:36:19 2007 +0200 @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -220,25 +220,6 @@ ; )))) -;;; Commands - -(defun set-buffer-process-coding-system (decoding encoding) - "Set coding systems for the process associated with the current buffer. -DECODING is the coding system to be used to decode input from the process, -ENCODING is the coding system to be used to encode output to the process. - -For a list of possible values of CODING-SYSTEM, use \\[list-coding-systems]." - (interactive - "zCoding-system for process input: \nzCoding-system for process output: ") - (let ((proc (get-buffer-process (current-buffer)))) - (if (null proc) - (error "no process") - (check-coding-system decoding) - (check-coding-system encoding) - (set-process-coding-system proc decoding encoding))) - (force-mode-line-update)) - - ;;; Language environments ;; (defvar current-language-environment nil) @@ -314,13 +295,13 @@ (coding-system-property coding-system prop) (error nil)))) -(defun coding-system-put (coding-system prop val) - "Change value in CODING-SYSTEM's property list PROP to VAL." +(defun coding-system-put (coding-system prop value) + "Change value in CODING-SYSTEM's property list PROP to VALUE." (put (coding-system-name coding-system) 'coding-system-property (plist-put (get (coding-system-name coding-system) 'coding-system-property) - prop val))) + prop value))) (defun coding-system-category (coding-system) "Return the coding category of CODING-SYSTEM." @@ -356,5 +337,5 @@ ((= dim 2) 'iso-8-2) (t 'iso-8-designate)) )))))))) - + ;;; mule-misc.el ends here diff -r a8296e22da4e -r 576fb035e263 lisp/mule/thai-xtis.el --- a/lisp/mule/thai-xtis.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/thai-xtis.el Mon Aug 13 11:36:19 2007 +0200 @@ -342,8 +342,8 @@ 'tis-620 'ccl "external=tis620, internal=thai-xtis" `(mnemonic "TIS620" - decode ,ccl-decode-thai-xtis - encode ,ccl-encode-thai-xtis)) + decode ccl-decode-thai-xtis + encode ccl-encode-thai-xtis)) (coding-system-put 'tis-620 'category 'iso-8-1)) (make-coding-system 'tis-620 4 ?T "external=tis620, internal=thai-xtis" diff -r a8296e22da4e -r 576fb035e263 lisp/mule/vietnamese.el --- a/lisp/mule/vietnamese.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mule/vietnamese.el Mon Aug 13 11:36:19 2007 +0200 @@ -209,8 +209,8 @@ 'viscii 'ccl "Coding-system used for VISCII 1.1." `(mnemonic "VISCII" - decode ,ccl-decode-viscii - encode ,ccl-encode-viscii)) + decode ccl-decode-viscii + encode ccl-encode-viscii)) ;; it is not correct, but XEmacs doesn't have `ccl' category... (coding-system-put 'viscii 'category 'iso-8-1) @@ -229,8 +229,8 @@ 'vscii 'ccl "Coding-system used for VSCII 1.1." `(mnemonic "VSCII" - decode ,ccl-decode-vscii - encode ,ccl-encode-vscii)) + decode ccl-decode-vscii + encode ccl-encode-vscii)) ;; (make-coding-system ;; 'vietnamese-vscii 4 ?v @@ -264,12 +264,12 @@ ;; For VISCII users (set-charset-ccl-program 'vietnamese-viscii-lower - ccl-encode-viscii-font) + 'ccl-encode-viscii-font) (set-charset-ccl-program 'vietnamese-viscii-upper - ccl-encode-viscii-font) + 'ccl-encode-viscii-font) ;; For VSCII users -(set-charset-ccl-program 'vietnamese-viscii-lower ccl-encode-vscii-font) -(set-charset-ccl-program 'vietnamese-viscii-upper ccl-encode-vscii-font) +(set-charset-ccl-program 'vietnamese-viscii-lower 'ccl-encode-vscii-font) +(set-charset-ccl-program 'vietnamese-viscii-upper 'ccl-encode-vscii-font) ;; (setq font-ccl-encoder-alist ;; (cons (cons "viscii" ccl-encode-viscii-font) font-ccl-encoder-alist)) diff -r a8296e22da4e -r 576fb035e263 lisp/multicast.el --- a/lisp/multicast.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/multicast.el Mon Aug 13 11:36:19 2007 +0200 @@ -45,7 +45,7 @@ (defun open-multicast-group (name buffer address) "Open a multicast connection on the specified address. -Returns a subprocess-object to represent the connection. +Returns a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER ADDRESS. NAME is a name for the process. It is modified if necessary to make it unique. diff -r a8296e22da4e -r 576fb035e263 lisp/mwheel.el --- a/lisp/mwheel.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/mwheel.el Mon Aug 13 11:36:19 2007 +0200 @@ -100,6 +100,7 @@ ;;;###autoload (defun mwheel-install () "Enable mouse wheel support." + (interactive) (let ((keys '([(mouse-4)] [(shift mouse-4)] [(mouse-5)] [(shift mouse-5)]))) ;; This condition-case is here because Emacs 19 will throw an error ;; if you try to define a key that it does not know about. I for one diff -r a8296e22da4e -r 576fb035e263 lisp/obsolete.el --- a/lisp/obsolete.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/obsolete.el Mon Aug 13 11:36:19 2007 +0200 @@ -57,7 +57,7 @@ setting NEWVAR and marks OLDVAR as obsolete. If OLDVAR was bound and NEWVAR was not, Set NEWVAR to OLDVAR. -Note: Use this before any other references (defvar/defcustom) to NEWVAR" +Note: Use this before any other references (defvar/defcustom) to NEWVAR." (let ((needs-setting (and (boundp oldvar) (not (boundp newvar)))) (value (and (boundp oldvar) (symbol-value oldvar)))) (defvaralias oldvar newvar) @@ -338,13 +338,13 @@ "Return a vector of characters in STRING." (mapvector #'identity string)) -(defun store-substring (string idx obj) - "Embed OBJ (string or character) at index IDX of STRING." - (let* ((str (cond ((stringp obj) obj) - ((characterp obj) (char-to-string obj)) +(defun store-substring (string idx object) + "Embed OBJECT (string or character) at index IDX of STRING." + (let* ((str (cond ((stringp object) object) + ((characterp object) (char-to-string object)) (t (error "Invalid argument (should be string or character): %s" - obj)))) + object)))) (string-len (length string)) (len (length str)) (i 0)) diff -r a8296e22da4e -r 576fb035e263 lisp/package-admin.el --- a/lisp/package-admin.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/package-admin.el Mon Aug 13 11:36:19 2007 +0200 @@ -42,9 +42,9 @@ 'package-admin-install-function-mswindows 'package-admin-default-install-function) "The function to call to install a package. -Three args are passed: FILENAME PKG-DIR BUF +Three args are passed: FILENAME PKG-DIR BUFFER Install package FILENAME into directory PKG-DIR, with any messages output -to buffer BUF.") +to buffer BUFFER.") (defvar package-admin-error-messages '( "No space left on device" @@ -123,31 +123,31 @@ ;; rest of command line follows package-admin-xemacs file destination))) -(defun package-admin-install-function-mswindows (file pkg-dir buf) - "Install function for mswindows" +(defun package-admin-install-function-mswindows (file pkg-dir buffer) + "Install function for mswindows." (let ((default-directory (file-name-as-directory pkg-dir))) (unless (file-directory-p default-directory) (make-directory default-directory t)) - (call-process "minitar" nil buf t file))) + (call-process "minitar" nil buffer t file))) -(defun package-admin-default-install-function (file pkg-dir buf) +(defun package-admin-default-install-function (filename pkg-dir buffer) "Default function to install a package. Install package FILENAME into directory PKG-DIR, with any messages output -to buffer BUF." +to BUFFER." (let* ((pkg-dir (file-name-as-directory pkg-dir)) (default-directory pkg-dir) - (filename (expand-file-name file))) + (filename (expand-file-name filename))) (unless (file-directory-p pkg-dir) (make-directory pkg-dir t)) ;; Don't assume GNU tar. - (if (shell-command (concat "gunzip -c " filename " | tar xvf -") buf) + (if (shell-command (concat "gunzip -c " filename " | tar xvf -") buffer) 0 1) )) ; (call-process "add-big-package.sh" ; nil -; buf +; buffer ; t ; ;; rest of command line follows ; package-admin-xemacs file pkg-dir)) @@ -180,7 +180,7 @@ (if (eq package 'xemacs-base) (car (last late-packages)) (package-admin-get-install-dir 'xemacs-base nil nil))))))) - + (defun package-admin-get-manifest-file (pkg-topdir package) @@ -294,7 +294,7 @@ ;; Create pkginfo, if necessary (if (not (file-directory-p pathname)) (make-directory pathname)) - (setq pathname (expand-file-name + (setq pathname (expand-file-name (concat "MANIFEST." package-name) pathname)) (save-excursion @@ -435,9 +435,9 @@ ;; Note, user might have removed the file! (condition-case () (delete-file file) - (error nil))) ;; We may want to turn the error into a Warning? + (error nil))) ;; We may want to turn the error into a Warning? (forward-line 1)) - + ;; Delete empty directories. (if dirs (let ( (orig-default-directory default-directory) @@ -473,7 +473,7 @@ (lambda (dir) (condition-case () (delete-directory dir))) - dirs)) + dirs)) (setq default-directory orig-default-directory) ))) ) @@ -499,7 +499,7 @@ (package-admin-rmtree package-lispdir) (message "Removing old lisp directory \"%s\" ... done" package-lispdir) - )) + )) ;; Delete the package from the database of installed packages. (package-delete-name package))) diff -r a8296e22da4e -r 576fb035e263 lisp/package-get.el --- a/lisp/package-get.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/package-get.el Mon Aug 13 11:36:19 2007 +0200 @@ -184,6 +184,7 @@ (defcustom package-get-download-sites '( ;; North America + ("Pre-Releases" "ftp.xemacs.org" "pub/xemacs/beta/experimental/packages") ("xemacs.org" "ftp.xemacs.org" "pub/xemacs/packages") ("crc.ca (Canada)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("ualberta.ca (Canada)" "sunsite.ualberta.ca" "pub/Mirror/xemacs/packages") @@ -457,11 +458,11 @@ (package-get-update-base-entries content-beg content-end) (message "Updated package-get database")))) -(defun package-get-update-base-entries (beg end) +(defun package-get-update-base-entries (start end) "Update the package-get database with the entries found between -BEG and END in the current buffer." +START and END in the current buffer." (save-excursion - (goto-char beg) + (goto-char start) (if (not (re-search-forward "^(package-get-update-base-entry" nil t)) (error "Buffer does not contain package-get database entries")) (beginning-of-line) diff -r a8296e22da4e -r 576fb035e263 lisp/packages.el --- a/lisp/packages.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/packages.el Mon Aug 13 11:36:19 2007 +0200 @@ -355,7 +355,7 @@ (and version-directory (list version-directory)) (and site-directory (list site-directory))))) -(defvar packages-special-base-regexp "^\\(etc\\|info\\|lisp\\|lib-src\\|bin\\|pkginfo\\)$" +(defvar packages-special-base-regexp "^\\(etc\\|info\\|man\\|lisp\\|lib-src\\|bin\\|pkginfo\\)$" "Special subdirectories of packages.") (defvar packages-no-package-hierarchy-regexp @@ -418,7 +418,7 @@ (or default (let ((packages '())) (while package-locations - (packages-deconstruct + (packages-deconstruct (car package-locations) #'(lambda (name a-time thunk) (if (and (eq time a-time) @@ -529,12 +529,12 @@ (defun packages-load-package-dumped-lisps (package-load-path) "Load dumped-lisp.el files along a load path. -Also load files off PACKAGE-LISP definitions there" +Also load files off PACKAGE-LISP definitions there." (packages-handle-package-dumped-lisps #'load package-load-path)) (defun packages-collect-package-dumped-lisps (package-load-path) "Load dumped-lisp.el files along a load path. -Return list of files off PACKAGE-LISP definitions there" +Return list of files off PACKAGE-LISP definitions there." (let ((*files* '())) (packages-handle-package-dumped-lisps #'(lambda (file) diff -r a8296e22da4e -r 576fb035e263 lisp/paragraphs.el --- a/lisp/paragraphs.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/paragraphs.el Mon Aug 13 11:36:19 2007 +0200 @@ -99,8 +99,7 @@ (point) (1+ (point)))))))))))) (setq use-hard-newlines t))) -;; XEmacs - use purecopy -(defconst paragraph-start (purecopy "[ \t\n\f]") "\ +(defconst paragraph-start "[ \t\n\f]" "\ *Regexp for beginning of a line that starts OR separates paragraphs. This regexp should match lines that separate paragraphs and should also match lines that start a paragraph @@ -123,8 +122,7 @@ ;; something very minimal, even including "." (which makes every hard newline ;; start a new paragraph). -;; XEmacs -- use purecopy -(defconst paragraph-separate (purecopy "[ \t\f]*$") "\ +(defconst paragraph-separate "[ \t\f]*$" "\ *Regexp for beginning of a line that separates paragraphs. If you change this, you may have to change paragraph-start also. @@ -133,8 +131,7 @@ ensures that the paragraph functions will work equally within a region of text indented by a margin setting.") -;; XEmacs -- use purecopy -(defconst sentence-end (purecopy "[.?!][]\"')}]*\\($\\| $\\|\t\\| \\)[ \t\n]*") "\ +(defconst sentence-end "[.?!][]\"')}]*\\($\\| $\\|\t\\| \\)[ \t\n]*" "\ *Regexp describing the end of a sentence. All paragraph boundaries also end sentences, regardless. @@ -142,8 +139,7 @@ question mark, or exclamation point must be followed by two spaces, unless it's inside some sort of quotes or parenthesis.") -;; XEmacs -- use purecopy -(defconst page-delimiter (purecopy "^\014") "\ +(defconst page-delimiter "^\014" "\ *Regexp describing line-beginnings that separate pages.") (defvar paragraph-ignore-fill-prefix nil "\ diff -r a8296e22da4e -r 576fb035e263 lisp/paths.el --- a/lisp/paths.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/paths.el Mon Aug 13 11:36:19 2007 +0200 @@ -91,7 +91,7 @@ (defvar mh-lib nil "Directory of MH library.") -(defvar rmail-file-name (purecopy "~/RMAIL") +(defvar rmail-file-name "~/RMAIL" "Name of user's primary mail file.") (defconst rmail-spool-directory nil @@ -104,7 +104,7 @@ (defconst remote-shell-program nil "Program used to execute shell commands on a remote machine.") -(defconst term-file-prefix (purecopy "term/") +(defconst term-file-prefix "term/" "If non-nil, Emacs startup does (load (concat term-file-prefix (getenv \"TERM\"))) You may set this variable to nil in your `.emacs' file if you do not wish the terminal-initialization file to be loaded.") @@ -112,7 +112,7 @@ (defconst manual-program nil "Program to run to print man pages.") -(defconst abbrev-file-name (purecopy "~/.abbrev_defs") +(defconst abbrev-file-name "~/.abbrev_defs" "*Default name of file to read abbrevs from.") (defconst directory-abbrev-alist nil) diff -r a8296e22da4e -r 576fb035e263 lisp/printer.el --- a/lisp/printer.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/printer.el Mon Aug 13 11:36:19 2007 +0200 @@ -134,32 +134,33 @@ user-name User full name" (error "not yet implemented")) -(defun generic-print-buffer (&optional buf) - "Print buffer BUF using a printing method appropriate to the O.S. being run. +(defun generic-print-buffer (&optional buffer) + "Print buffer BUFFER using a printing method appropriate to the O.S. being run. Under Unix, `lpr' is normally used to spool out a no-frills version of the buffer, or the `ps-print' package is used to pretty-print the buffer to a PostScript printer. Under MS Windows, the built-in printing support is used. -If BUF is nil or omitted, the current buffer is used." +If BUFFER is nil or omitted, the current buffer is used." (interactive) - (generic-print-region (point-min buf) (point-max buf) buf)) + (generic-print-region (point-min buffer) (point-max buffer) buffer)) -(defun generic-print-region (b e &optional buf) +(defun generic-print-region (start end &optional buffer) "Print region using a printing method appropriate to the O.S. being run. -The region between B and E of BUF (defaults to the current buffer) is printed. +The region between START and END of BUFFER (defaults to the current +buffer) is printed. Under Unix, `lpr' is normally used to spool out a no-frills version of the buffer, or the `ps-print' package is used to pretty-print the buffer to a PostScript printer. Under MS Windows, the built-in printing support is used." (cond ((valid-specifier-tag-p 'msprinter) (let (d f) - (setq buf (decode-buffer buf)) + (setq buffer (decode-buffer buffer)) (unwind-protect (progn (setq d (make-device 'msprinter printer-name)) (setq f (make-frame - (list* 'name (concat (substitute ?_ ?. - (buffer-name buf)) + (list* 'name (concat (substitute ?_ ?. + (buffer-name buffer)) " - XEmacs") '(menubar-visible-p nil has-modeline-p nil @@ -175,12 +176,12 @@ (pixel-vertical-clip-threshold (/ vertdpi 2)) (last-end 0) done) - (set-window-buffer w (or buf (current-buffer))) - (set-window-start w b) + (set-window-buffer w (or buffer (current-buffer))) + (set-window-start w start) (while (not done) (redisplay-frame f) (print-job-eject-page f) - (let ((end (window-end w)) + (let ((this-end (window-end w)) (pixvis (window-last-line-visible-height w))) ;; in case we get stuck somewhere, bow out ;; rather than printing an infinite number of @@ -188,14 +189,14 @@ ;; bigger than an entire page. but we really ;; need this check here. we should be more ;; clever in our check, to deal with this case. - (if (or (= end last-end) + (if (or (= this-end last-end) ;; #### fuckme! window-end returns a value ;; outside of the valid range of buffer ;; positions!!! - (>= end e)) + (>= this-end end)) (setq done t) - (setq last-end end) - (set-window-start w end) + (setq last-end this-end) + (set-window-start w this-end) (if pixvis (save-selected-window (select-window w) @@ -207,5 +208,5 @@ ))) ((and (not (eq system-type 'windows-nt)) (fboundp 'lpr-buffer)) - (lpr-region buf)) + (lpr-region buffer)) (t (error "No print support available")))) diff -r a8296e22da4e -r 576fb035e263 lisp/process.el --- a/lisp/process.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/process.el Mon Aug 13 11:36:19 2007 +0200 @@ -20,7 +20,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -258,7 +258,7 @@ (if (and output-buffer (not (or (bufferp output-buffer) (stringp output-buffer)))) (progn (barf-if-buffer-read-only) - (push-mark) + (push-mark nil (not (interactive-p))) ;; We do not use -f for csh; we will not support broken use of ;; .cshrcs. Even the BSD csh manual says to use ;; "if ($?prompt) exit" before things which are not useful @@ -405,7 +405,7 @@ (defun open-network-stream (name buffer host service &optional protocol) "Open a TCP connection for a service to a host. -Returns a subprocess-object to represent the connection. +Returns a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER HOST SERVICE. NAME is name for process. It is modified if necessary to make it unique. diff -r a8296e22da4e -r 576fb035e263 lisp/replace.el --- a/lisp/replace.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/replace.el Mon Aug 13 11:36:19 2007 +0200 @@ -56,7 +56,7 @@ (defvar replace-search-function (lambda (str limit) (search-forward str limit t)) - "Function used by perform-replace to search forward for a string. It will be + "Function used by perform-replace to search forward for a string. It will be called with two arguments: the string to search for and a limit bounding the search.") @@ -322,7 +322,7 @@ (defun occur-mode-mouse-goto (event) "Go to the occurrence highlighted by mouse. -This function is only reasonable when bound to a mouse key in the occur buffer" +This function should be bound to a mouse key in the `*Occur*' buffer." (interactive "e") (let ((window-save (selected-window)) (frame-save (selected-frame))) @@ -498,7 +498,7 @@ (insert "--------\n")) (setq first nil) (insert-buffer-substring buffer start end) - (set-marker final-context-start + (set-marker final-context-start (- (point) (- end (match-end 0)))) (backward-char (- end start)) (setq tem (if (< nlines 0) (- nlines) nlines)) @@ -511,7 +511,7 @@ (if (null tag) (setq tag (format "%5d" this-linenum))) (insert tag ?:) - ;; FSFmacs -- + ;; FSFmacs -- ;; we handle this using mode-motion-highlight-line, above. ;; (put-text-property (save-excursion ;; (beginning-of-line) @@ -546,8 +546,7 @@ ;; It would be nice to use \\[...], but there is no reasonable way ;; to make that display both SPC and Y. (defconst query-replace-help - (purecopy - "Type Space or `y' to replace one match, Delete or `n' to skip to next, + "Type Space or `y' to replace one match, Delete or `n' to skip to next, RET or `q' to exit, Period to replace one match and exit, Comma to replace but not move point immediately, C-r to enter recursive edit (\\[exit-recursive-edit] to get out again), @@ -555,7 +554,7 @@ C-l to clear the frame, redisplay, and offer same replacement again, ! to replace all remaining matches with no more questions, ^ to move point back to previous match." -) + "Help message while in query-replace") (defvar query-replace-map nil @@ -596,7 +595,7 @@ (define-key map "\C-]" 'quit) ;FSFmacs (define-key map "\e" 'exit-prefix) (define-key map [escape] 'exit-prefix) - + (setq query-replace-map map))) ;; isearch-mode is dumped, so don't autoload. @@ -624,15 +623,16 @@ (while (re-search-forward \"foo[ \t]+bar\" nil t) (replace-match \"foobar\" nil nil)) which will run faster and probably do exactly what you want. -When searching for a match, this function use `replace-search-function' and `replace-re-search-function'" +When searching for a match, this function uses +`replace-search-function' and `replace-re-search-function'." (or map (setq map query-replace-map)) (let* ((event (make-event)) (nocasify (not (and case-fold-search case-replace (string-equal from-string (downcase from-string))))) (literal (not regexp-flag)) - (search-function (if regexp-flag - replace-re-search-function + (search-function (if regexp-flag + replace-re-search-function replace-search-function)) (search-string from-string) (real-match-data nil) ; the match data for the current match @@ -692,7 +692,7 @@ (if (or (eobp) (and limit (>= (point) limit))) nil - ;; Don't replace the null string + ;; Don't replace the null string ;; right after end of previous replacement. (forward-char 1) (let ((case-fold-search qr-case-fold-search)) @@ -705,7 +705,7 @@ ;; Before we make the replacement, decide whether the search string ;; can match again just after this match. (if regexp-flag - (progn + (progn (setq match-again (looking-at search-string)) ;; XEmacs addition (store-match-data real-match-data))) diff -r a8296e22da4e -r 576fb035e263 lisp/select.el --- a/lisp/select.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/select.el Mon Aug 13 11:36:19 2007 +0200 @@ -20,7 +20,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -28,7 +28,7 @@ ;;; Commentary: -;; This file is dumped with XEmacs +;; This file is dumped with XEmacs ;;; Code: @@ -40,7 +40,7 @@ If a list is provided, the types are tried in sequence until there is a successful conversion.") -(defvar selection-sets-clipboard nil +(defvar selection-sets-clipboard nil "Controls the selection's relationship to the clipboard. When non-nil, any operation that sets the primary selection will also set the clipboard.") @@ -86,7 +86,7 @@ "Return the value of a window-system selection. The argument TYPE (default `PRIMARY') says which selection, and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule) -says how to convert the data. Returns NIL if there is no selection" +says how to convert the data. Returns NIL if there is no selection." (condition-case nil (get-selection type data-type) (t nil))) (defun get-selection (&optional type data-type) @@ -623,7 +623,7 @@ (defun select-convert-from-integer (selection type value) (cond ((integerp value) ; Integer value) - + ((and (consp value) ; (integer . integer) (integerp (car value)) (integerp (cdr value))) @@ -633,7 +633,7 @@ (< (cdr value) 0)) (cdr value) value))) - + ((and (listp value) ; (integer integer) (eq (length value) 2) (integerp (car value)) @@ -644,21 +644,21 @@ (< (cdr value) 0)) (- (cadr value)) (cons (car value) (cadr value))))) - + ((listp value) ; list (if (cdr value) (mapcar '(lambda (x) (select-convert-from-integer selection type x)) value) (select-convert-from-integer selection type (car value)))) - + ((vectorp value) ; vector (if (eq (length value) 1) (select-convert-from-integer selection type (aref value 0)) (mapvector '(lambda (x) (select-convert-from-integer selection type x)) value))) - + (t nil) )) @@ -740,7 +740,7 @@ (defun select-buffer-killed-text (selection type value buffer) (select-buffer-killed-default selection type value buffer)) - + ;; Types listed in here can be selections of XEmacs (setq selection-converter-out-alist '((TEXT . select-convert-to-text) diff -r a8296e22da4e -r 576fb035e263 lisp/simple.el --- a/lisp/simple.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/simple.el Mon Aug 13 11:36:19 2007 +0200 @@ -108,14 +108,14 @@ If REGEXP-FLAG is non-nil, disregard letters preceded by `\\' (but not `\\\\') since they have special meaning in a regexp." (let ((case-fold-search nil)) - (not (string-match (if regexp-flag + (not (string-match (if regexp-flag "\\(^\\|\\\\\\\\\\|[^\\]\\)[A-Z]" "[A-Z]") string)) )) (defmacro with-search-caps-disable-folding (string regexp-flag &rest body) "\ -Eval BODY with `case-fold-search' let to nil if `search-caps-disable-folding' +Eval BODY with `case-fold-search' let to nil if `search-caps-disable-folding' is non-nil, and if STRING (either a string or a regular expression according to REGEXP-FLAG) contains uppercase letters." `(let ((case-fold-search @@ -124,27 +124,27 @@ case-fold-search))) ,@body)) (put 'with-search-caps-disable-folding 'lisp-indent-function 2) -(put 'with-search-caps-disable-folding 'edebug-form-spec +(put 'with-search-caps-disable-folding 'edebug-form-spec '(sexp sexp &rest form)) -(defmacro with-interactive-search-caps-disable-folding (string regexp-flag +(defmacro with-interactive-search-caps-disable-folding (string regexp-flag &rest body) "Same as `with-search-caps-disable-folding', but only in the case of a function called interactively." `(let ((case-fold-search - (if (and (interactive-p) + (if (and (interactive-p) case-fold-search search-caps-disable-folding) (no-upper-case-p ,string ,regexp-flag) case-fold-search))) ,@body)) (put 'with-interactive-search-caps-disable-folding 'lisp-indent-function 2) -(put 'with-interactive-search-caps-disable-folding 'edebug-form-spec +(put 'with-interactive-search-caps-disable-folding 'edebug-form-spec '(sexp sexp &rest form)) -(defun newline (&optional arg) +(defun newline (&optional n) "Insert a newline, and move to left margin of the new line if it's blank. The newline is marked with the text-property `hard'. -With arg, insert that many newlines. +With optional arg N, insert that many newlines. In Auto Fill mode, if no numeric arg, break the preceding line if it's long." (interactive "*P") (barf-if-buffer-read-only nil (point)) @@ -178,16 +178,16 @@ ;; Don't auto-fill if we have a numeric argument. ;; Also not if flag is true (it would fill wrong line); ;; there is no need to since we're at BOL. - (auto-fill-function (if (or arg flag) nil auto-fill-function))) + (auto-fill-function (if (or n flag) nil auto-fill-function))) (unwind-protect - (self-insert-command (prefix-numeric-value arg)) + (self-insert-command (prefix-numeric-value n)) ;; If we get an error in self-insert-command, put point at right place. (if flag (forward-char 1)))) ;; If we did *not* get an error, cancel that forward-char. (if flag (backward-char 1)) ;; Mark the newline(s) `hard'. (if use-hard-newlines - (let* ((from (- (point) (if arg (prefix-numeric-value arg) 1))) + (let* ((from (- (point) (if n (prefix-numeric-value n) 1))) (sticky (get-text-property from 'end-open))) ; XEmacs (put-text-property from (point) 'hard 't) ;; If end-open is not "t", add 'hard to end-open list @@ -219,7 +219,7 @@ (put-text-property from (point) 'rear-nonsticky (cons 'hard sticky))))) -(defun open-line (arg) +(defun open-line (n) "Insert a newline and leave point before it. If there is a fill prefix and/or a left-margin, insert them on the new line if the line would have been blank. @@ -228,14 +228,14 @@ (let* ((do-fill-prefix (and fill-prefix (bolp))) (do-left-margin (and (bolp) (> (current-left-margin) 0))) (loc (point))) - (newline arg) + (newline n) (goto-char loc) - (while (> arg 0) + (while (> n 0) (cond ((bolp) (if do-left-margin (indent-to (current-left-margin))) (if do-fill-prefix (insert fill-prefix)))) (forward-line 1) - (setq arg (1- arg))) + (setq n (1- n))) (goto-char loc) (end-of-line))) @@ -827,33 +827,33 @@ (if eval-expression-insert-value (current-buffer) t))) ;; XEmacs -- extra parameter (variant, but equivalent logic) -(defun edit-and-eval-command (prompt command &optional history) - "Prompting with PROMPT, let user edit COMMAND and eval result. -COMMAND is a Lisp expression. Let user edit that expression in +(defun edit-and-eval-command (prompt form &optional history) + "Prompting with PROMPT, let user edit FORM and eval result. +FORM is a Lisp expression. Let user edit that expression in the minibuffer, then read and evaluate the result." - (let ((command (read-expression prompt - ;; first try to format the thing readably; - ;; and if that fails, print it normally. - (condition-case () - (let ((print-readably t)) - (prin1-to-string command)) - (error (prin1-to-string command))) - (or history '(command-history . 1))))) + (let ((form (read-expression prompt + ;; first try to format the thing readably; + ;; and if that fails, print it normally. + (condition-case () + (let ((print-readably t)) + (prin1-to-string form)) + (error (prin1-to-string form))) + (or history '(command-history . 1))))) (or history (setq history 'command-history)) (if (consp history) (setq history (car history))) (if (eq history t) nil - ;; If command was added to the history as a string, + ;; If form was added to the history as a string, ;; get rid of that. We want only evallable expressions there. (if (stringp (car (symbol-value history))) (set history (cdr (symbol-value history)))) - ;; If command to be redone does not match front of history, + ;; If form to be redone does not match front of history, ;; add it to the history. - (or (equal command (car (symbol-value history))) - (set history (cons command (symbol-value history))))) - (eval command))) + (or (equal form (car (symbol-value history))) + (set history (cons form (symbol-value history))))) + (eval form))) (defun repeat-complex-command (arg) "Edit and re-evaluate last complex command, or ARGth from last. @@ -880,21 +880,21 @@ ;; next-complete-history-element ;; previous-complete-history-element -(defun goto-line (arg) - "Goto line ARG, counting from line 1 at beginning of buffer." +(defun goto-line (line) + "Goto line LINE, counting from line 1 at beginning of buffer." (interactive "NGoto line: ") - (setq arg (prefix-numeric-value arg)) + (setq line (prefix-numeric-value line)) (save-restriction (widen) (goto-char 1) (if (eq selective-display t) - (re-search-forward "[\n\C-m]" nil 'end (1- arg)) - (forward-line (1- arg))))) + (re-search-forward "[\n\C-m]" nil 'end (1- line)) + (forward-line (1- line))))) ;Put this on C-x u, so we can force that rather than C-_ into startup msg (define-function 'advertised-undo 'undo) -(defun undo (&optional arg) +(defun undo (&optional count) "Undo some previous changes. Repeat this command to undo more changes. A numeric argument serves as a repeat count." @@ -910,7 +910,7 @@ (eq (current-buffer) last-undo-buffer)) ; XEmacs (progn (undo-start) (undo-more 1))) - (undo-more (or arg 1)) + (undo-more (or count 1)) ;; Don't specify a position in the undo record for the undo command. ;; Instead, undoing this should move point to where the change is. (let ((tail buffer-undo-list) @@ -1090,16 +1090,16 @@ ;; XEmacs -- keep zmacs-region active. -(defun forward-to-indentation (arg) - "Move forward ARG lines and position at first nonblank character." +(defun forward-to-indentation (count) + "Move forward COUNT lines and position at first nonblank character." (interactive "_p") - (forward-line arg) + (forward-line count) (skip-chars-forward " \t")) -(defun backward-to-indentation (arg) - "Move backward ARG lines and position at first nonblank character." +(defun backward-to-indentation (count) + "Move backward COUNT lines and position at first nonblank character." (interactive "_p") - (forward-line (- arg)) + (forward-line (- count)) (skip-chars-forward " \t")) (defcustom kill-whole-line nil @@ -1271,7 +1271,7 @@ (defun kill-new (string &optional replace) "Make STRING the latest kill in the kill ring. -Set the kill-ring-yank pointer to point to it. +Set `kill-ring-yank-pointer' to point to it. Run `kill-hooks'. Optional second argument REPLACE non-nil means that STRING will replace the front of the kill ring, rather than being added to the list." @@ -1331,7 +1331,7 @@ ;(defvar kill-read-only-ok nil ; "*Non-nil means don't signal an error for killing read-only text.") -(defun kill-region (beg end &optional verbose) ; verbose is XEmacs addition +(defun kill-region (start end &optional verbose) ; verbose is XEmacs addition "Kill between point and mark. The text is deleted but saved in the kill ring. The command \\[yank] can retrieve it from there. @@ -1352,18 +1352,18 @@ ; (prog1 ; (list (point) (mark) current-prefix-arg) ; (if region-hack (zmacs-deactivate-region))))) - ;; beg and end can be markers but the rest of this function is + ;; start and end can be markers but the rest of this function is ;; written as if they are only integers - (if (markerp beg) (setq beg (marker-position beg))) + (if (markerp start) (setq start (marker-position start))) (if (markerp end) (setq end (marker-position end))) - (or (and beg end) (if zmacs-regions ;; rewritten for I18N3 snarfing + (or (and start end) (if zmacs-regions ;; rewritten for I18N3 snarfing (error "The region is not active now") (error "The mark is not set now"))) (if verbose (if buffer-read-only (lmessage 'command "Copying %d characters" - (- (max beg end) (min beg end))) + (- (max start end) (min start end))) (lmessage 'command "Killing %d characters" - (- (max beg end) (min beg end))))) + (- (max start end) (min start end))))) (cond ;; I don't like this large change in behavior -- jwz @@ -1373,11 +1373,11 @@ ;; just isn't aware of this. However, there's no harm in putting ;; the region's text in the kill ring, anyway. ((or (and buffer-read-only (not inhibit-read-only)) - (text-property-not-all (min beg end) (max beg end) 'read-only nil)) + (text-property-not-all (min start end) (max start end) 'read-only nil)) ;; This is redundant. ;; (if verbose (message "Copying %d characters" - ;; (- (max beg end) (min beg end)))) - (copy-region-as-kill beg end) + ;; (- (max start end) (min start end)))) + (copy-region-as-kill start end) ;; ;; This should always barf, and give us the correct error. ;; (if kill-read-only-ok ;; (message "Read only text copied to kill ring") @@ -1390,13 +1390,13 @@ ((not (or (eq buffer-undo-list t) (eq last-command 'kill-region) ;; Use = since positions may be numbers or markers. - (= beg end))) + (= start end))) ;; Don't let the undo list be truncated before we can even access it. ;; FSF calls this `undo-strong-limit' - (let ((undo-high-threshold (+ (- end beg) 100)) + (let ((undo-high-threshold (+ (- end start) 100)) ;(old-list buffer-undo-list) tail) - (delete-region beg end) + (delete-region start end) ;; Search back in buffer-undo-list for this string, ;; in case a change hook made property changes. (setq tail buffer-undo-list) @@ -1411,31 +1411,31 @@ (t ;; if undo is not kept, grab the string then delete it (which won't ;; add another string to the undo list). - (copy-region-as-kill beg end) - (delete-region beg end))) + (copy-region-as-kill start end) + (delete-region start end))) (setq this-command 'kill-region)) ;; copy-region-as-kill no longer sets this-command, because it's confusing ;; to get two copies of the text when the user accidentally types M-w and ;; then corrects it with the intended C-w. -(defun copy-region-as-kill (beg end) +(defun copy-region-as-kill (start end) "Save the region as if killed, but don't kill it. Run `kill-hooks'." (interactive "r") (if (eq last-command 'kill-region) - (kill-append (buffer-substring beg end) (< end beg)) - (kill-new (buffer-substring beg end))) + (kill-append (buffer-substring start end) (< end start)) + (kill-new (buffer-substring start end))) nil) -(defun kill-ring-save (beg end) +(defun kill-ring-save (start end) "Save the region as if killed, but don't kill it. This command is similar to `copy-region-as-kill', except that it gives visual feedback indicating the extent of the region being copied." (interactive "r") - (copy-region-as-kill beg end) + (copy-region-as-kill start end) ;; copy before delay, for xclipboard's benefit (if (interactive-p) - (let ((other-end (if (= (point) beg) end beg)) + (let ((other-end (if (= (point) start) end start)) (opoint (point)) ;; Inhibit quitting so we can make a quit here ;; look like a C-g typed as a command. @@ -1457,7 +1457,7 @@ ;; too noisy. -- jwz ; (let* ((killed-text (current-kill 0)) ; (message-len (min (length killed-text) 40))) -; (if (= (point) beg) +; (if (= (point) start) ; ;; Don't say "killed"; that is misleading. ; (message "Saved text until \"%s\"" ; (substring killed-text (- message-len))) @@ -1656,7 +1656,7 @@ mark position to be lost. Normally, when a new mark is set, the old one should go on the stack. -This is why most applications should use push-mark, not set-mark. +This is why most applications should use `push-mark', not `set-mark'. Novice Emacs Lisp programmers often try to use the mark for the wrong purposes. The mark saves a location for the user's convenience. @@ -1664,7 +1664,7 @@ To remember a location for internal use in the Lisp program, store it in a Lisp variable. Example: - (let ((beg (point))) (forward-line 1) (delete-region beg (point)))." + (let ((start (point))) (forward-line 1) (delete-region start (point)))." (setq buffer (decode-buffer buffer)) (set-marker (mark-marker t buffer) pos buffer)) @@ -1960,7 +1960,7 @@ '(left right up down home end prior next kp-left kp-right kp-up kp-down kp-home kp-end kp-prior kp-next)))) - + (defun handle-pre-motion-command () (if (and @@ -2028,9 +2028,9 @@ (scroll-up-command 1)) (defun scroll-up-command (&optional n) - "Scroll text of current window upward ARG lines; or near full screen if no ARG. + "Scroll current window upward N lines; or near full screen if N is nil. A near full screen is `next-screen-context-lines' less than a full screen. -Negative ARG means scroll downward. +Negative N means scroll downward. When calling from a program, supply a number as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is @@ -2058,9 +2058,9 @@ (scroll-down-command 1)) (defun scroll-down-command (&optional n) - "Scroll text of current window downward ARG lines; or near full screen if no ARG. + "Scroll current window downward N lines; or near full screen if N is nil. A near full screen is `next-screen-context-lines' less than a full screen. -Negative ARG means scroll upward. +Negative N means scroll upward. When calling from a program, supply a number as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is @@ -2076,8 +2076,8 @@ (beginning-of-buffer nil) (end-of-buffer nil)))) -(defun next-line (arg) - "Move cursor vertically down ARG lines. +(defun next-line (count) + "Move cursor vertically down COUNT lines. If there is no character in the target line exactly under the current column, the cursor is positioned after the character in that line which spans this column, or at the end of the line if it is not long enough. @@ -2096,25 +2096,25 @@ using `forward-line' instead. It is usually easier to use and more reliable (no dependence on goal column, etc.)." (interactive "_p") - (if (and next-line-add-newlines (= arg 1)) + (if (and next-line-add-newlines (= count 1)) (let ((opoint (point))) (end-of-line) (if (eobp) (newline 1) (goto-char opoint) - (line-move arg))) + (line-move count))) (if (interactive-p) ;; XEmacs: Not sure what to do about this. It's inconsistent. -sb (condition-case nil - (line-move arg) + (line-move count) ((beginning-of-buffer end-of-buffer) (when signal-error-on-buffer-boundary (ding nil 'buffer-bound)))) - (line-move arg))) + (line-move count))) nil) -(defun previous-line (arg) - "Move cursor vertically up ARG lines. +(defun previous-line (count) + "Move cursor vertically up COUNT lines. If there is no character in the target line exactly over the current column, the cursor is positioned after the character in that line which spans this column, or at the end of the line if it is not long enough. @@ -2129,11 +2129,11 @@ (interactive "_p") (if (interactive-p) (condition-case nil - (line-move (- arg)) + (line-move (- count)) ((beginning-of-buffer end-of-buffer) (when signal-error-on-buffer-boundary ; XEmacs (ding nil 'buffer-bound)))) - (line-move (- arg))) + (line-move (- count))) nil) (defcustom block-movement-size 6 @@ -2186,8 +2186,8 @@ :group 'editing-basics) ;; This is the guts of next-line and previous-line. -;; Arg says how many lines to move. -(defun line-move (arg) +;; Count says how many lines to move. +(defun line-move (count) ;; Don't run any point-motion hooks, and disregard intangibility, ;; for intermediate positions. (let ((inhibit-point-motion-hooks t) @@ -2199,7 +2199,7 @@ (eq last-command 'previous-line))) (setq temporary-goal-column (if (and track-eol (eolp) - ;; Don't count beg of empty line as end of line + ;; Don't count start of empty line as end of line ;; unless we just did explicit end-of-line. (or (not (bolp)) (eq last-command 'end-of-line))) 9999 @@ -2207,21 +2207,21 @@ (if (and (not (integerp selective-display)) (not line-move-ignore-invisible)) ;; Use just newline characters. - (or (if (> arg 0) - (progn (if (> arg 1) (forward-line (1- arg))) - ;; This way of moving forward ARG lines + (or (if (> count 0) + (progn (if (> count 1) (forward-line (1- count))) + ;; This way of moving forward COUNT lines ;; verifies that we have a newline after the last one. ;; It doesn't get confused by intangible text. (end-of-line) (zerop (forward-line 1))) - (and (zerop (forward-line arg)) + (and (zerop (forward-line count)) (bolp))) - (signal (if (< arg 0) + (signal (if (< count 0) 'beginning-of-buffer 'end-of-buffer) nil)) - ;; Move by arg lines, but ignore invisible ones. - (while (> arg 0) + ;; Move by count lines, but ignore invisible ones. + (while (> count 0) (end-of-line) (and (zerop (vertical-motion 1)) (signal 'end-of-buffer nil)) @@ -2237,8 +2237,8 @@ (if (get-text-property (point) 'invisible) (goto-char (next-single-property-change (point) 'invisible)) (goto-char (next-extent-change (point))))) ; XEmacs - (setq arg (1- arg))) - (while (< arg 0) + (setq count (1- count))) + (while (< count 0) (beginning-of-line) (and (zerop (vertical-motion -1)) (signal 'beginning-of-buffer nil)) @@ -2252,7 +2252,7 @@ (if (get-text-property (1- (point)) 'invisible) (goto-char (previous-single-property-change (point) 'invisible)) (goto-char (previous-extent-change (point))))) ; XEmacs - (setq arg (1+ arg)))) + (setq count (1+ count)))) (move-to-column (or goal-column temporary-goal-column))) ;; Remember where we moved to, go back home, ;; then do the motion over again @@ -2269,7 +2269,7 @@ ;; It's not on a key, as of 20.2. So no need for this. ;(put 'set-goal-column 'disabled t) -(defun set-goal-column (arg) +(defun set-goal-column (column) "Set the current horizontal position as a goal for \\[next-line] and \\[previous-line]. Those commands will move to this position in the line moved to rather than trying to keep the same horizontal position. @@ -2277,13 +2277,13 @@ so that \\[next-line] and \\[previous-line] resume vertical motion. The goal column is stored in the variable `goal-column'." (interactive "_P") ; XEmacs - (if arg + (if column (progn (setq goal-column nil) (display-message 'command "No goal column")) (setq goal-column (current-column)) (lmessage 'command - "Goal column %d (use %s with an arg to unset it)" + "Goal column %d (use %s with a prefix arg to unset it)" goal-column (substitute-command-keys "\\[set-goal-column]"))) nil) @@ -2395,7 +2395,7 @@ (defun transpose-line-up (arg) "Move current line one line up, leaving point at beginning of that line. -This can be run repeatedly to move to current line up a number of lines." +This can be run repeatedly to move the current line up a number of lines." (interactive "*p") ;; Move forward over a line, ;; but create a newline if none exists yet. @@ -2408,7 +2408,7 @@ (defun transpose-line-down (arg) "Move current line one line down, leaving point at beginning of that line. -This can be run repeatedly to move to current line down a number of lines." +This can be run repeatedly to move the current line down a number of lines." (interactive "*p") ;; Move forward over a line, ;; but create a newline if none exists yet. @@ -2642,7 +2642,7 @@ (if arg (forward-line 1)) (setq count (1- count))))) -(defun comment-region (beg end &optional arg) +(defun comment-region (start end &optional arg) "Comment or uncomment each line in the region. With just C-u prefix arg, uncomment each line in region. Numeric prefix arg ARG means use ARG comment characters. @@ -2655,7 +2655,7 @@ ;; every line. (interactive "r\nP") (or comment-start (error "No comment syntax is defined")) - (if (> beg end) (let (mid) (setq mid beg beg end end mid))) + (if (> start end) (let (mid) (setq mid start start end end mid))) (save-excursion (save-restriction (let ((cs comment-start) (ce comment-end) @@ -2668,9 +2668,9 @@ (setq cs (concat cs comment-start) ce (concat ce comment-end)) (setq numarg (1- numarg)))) - ;; Loop over all lines from BEG to END. - (narrow-to-region beg end) - (goto-char beg) + ;; Loop over all lines from START to END. + (narrow-to-region start end) + (goto-char start) (while (not (eobp)) (if (or (eq numarg t) (< numarg 0)) (progn @@ -2902,7 +2902,7 @@ (= (point) fill-point)) ;; 1999-09-17 hniksic: turn off Kinsoku until ;; it's debugged. - (indent-new-comment-line) + (funcall comment-line-break-function) ;; 97/3/14 jhod: Kinsoku processing ; ;(indent-new-comment-line) ; (let ((spacep (memq (char-before (point)) '(?\ ?\t)))) @@ -3052,6 +3052,7 @@ (defun turn-on-auto-fill () "Unconditionally turn on Auto Fill mode." + (interactive) (auto-fill-mode 1)) (defun set-fill-column (arg) @@ -3206,14 +3207,14 @@ (add-hook 'change-major-mode-hook 'nuke-selective-display) -(defconst overwrite-mode-textual (purecopy " Ovwrt") +(defconst overwrite-mode-textual " Ovwrt" "The string displayed in the mode line when in overwrite mode.") -(defconst overwrite-mode-binary (purecopy " Bin Ovwrt") +(defconst overwrite-mode-binary " Bin Ovwrt" "The string displayed in the mode line when in binary overwrite mode.") (defun overwrite-mode (arg) "Toggle overwrite mode. -With arg, turn overwrite mode on iff arg is positive. +With arg, enable overwrite mode if arg is positive, else disable. In overwrite mode, printing characters typed in replace existing text on a one-for-one basis, rather than pushing it to the right. At the end of a line, such characters extend the line. Before a tab, @@ -3229,7 +3230,7 @@ (defun binary-overwrite-mode (arg) "Toggle binary overwrite mode. -With arg, turn binary overwrite mode on iff arg is positive. +With arg, enable binary overwrite mode if arg is positive, else disable. In binary overwrite mode, printing characters typed in replace existing text. Newlines are not treated specially, so typing at the end of a line joins the line to the next, with the typed character @@ -3256,7 +3257,7 @@ (defun line-number-mode (arg) "Toggle Line Number mode. -With arg, turn Line Number mode on iff arg is positive. +With arg, enable Line Number mode if arg is positive, else disable. When Line Number mode is enabled, the line number appears in the mode line." (interactive "P") @@ -3272,7 +3273,7 @@ (defun column-number-mode (arg) "Toggle Column Number mode. -With arg, turn Column Number mode on iff arg is positive. +With arg, enable Column Number mode if arg is positive, else disable. When Column Number mode is enabled, the column number appears in the mode line." (interactive "P") @@ -4399,5 +4400,5 @@ "Send a string to the debugging output. The string is formatted using (apply #'format FORMAT ARGS)." (princ (apply #'format format args) 'external-debugging-output)) - + ;;; simple.el ends here diff -r a8296e22da4e -r 576fb035e263 lisp/sound.el --- a/lisp/sound.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/sound.el Mon Aug 13 11:36:19 2007 +0200 @@ -163,12 +163,11 @@ ;; some conses in sound-alist might have been dumped with emacs. (if old (setq sound-alist (delq old (copy-sequence sound-alist))))) (setq sound-alist (cons - (purecopy - (nconc (list sound-name) - (if (and volume (not (eq 0 volume))) - (list ':volume volume)) - (list ':sound data))) - sound-alist))) + (nconc (list sound-name) + (if (and volume (not (eq 0 volume))) + (list ':volume volume)) + (list ':sound data)) + sound-alist))) sound-name) ;;;###autoload diff -r a8296e22da4e -r 576fb035e263 lisp/startup.el --- a/lisp/startup.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/startup.el Mon Aug 13 11:36:19 2007 +0200 @@ -136,7 +136,7 @@ ;; #### called `site-run-file' in FSFmacs -(defvar site-start-file (purecopy "site-start") +(defvar site-start-file "site-start" "File containing site-wide run-time initializations. This file is loaded at run-time before `.emacs'. It contains inits that need to be in place for the entire site, but @@ -171,11 +171,6 @@ :type 'string :group 'mail) -(defvar auto-save-list-file-prefix "~/.saves-" - "Prefix for generating auto-save-list-file-name. -Emacs's pid and the system name will be appended to -this prefix to create a unique file name.") - (defvar init-file-debug nil) (defvar init-file-had-error nil) @@ -190,23 +185,22 @@ (defvar command-switch-alist - (purecopy - '(("-help" . command-line-do-help) - ("-version". command-line-do-version) - ("-V" . command-line-do-version) - ("-funcall". command-line-do-funcall) - ("-f" . command-line-do-funcall) - ("-e" . command-line-do-funcall-1) - ("-eval" . command-line-do-eval) - ("-load" . command-line-do-load) - ("-l" . command-line-do-load) - ("-insert" . command-line-do-insert) - ("-i" . command-line-do-insert) - ("-kill" . command-line-do-kill) - ;; Options like +35 are handled specially. - ;; Window-system, site, or package-specific code might add to this. - ;; X11 handles its options by letting Xt remove args from this list. - )) + '(("-help" . command-line-do-help) + ("-version". command-line-do-version) + ("-V" . command-line-do-version) + ("-funcall". command-line-do-funcall) + ("-f" . command-line-do-funcall) + ("-e" . command-line-do-funcall-1) + ("-eval" . command-line-do-eval) + ("-load" . command-line-do-load) + ("-l" . command-line-do-load) + ("-insert" . command-line-do-insert) + ("-i" . command-line-do-insert) + ("-kill" . command-line-do-kill) + ;; Options like +35 are handled specially. + ;; Window-system, site, or package-specific code might add to this. + ;; X11 handles its options by letting Xt remove args from this list. + ) "Alist of command-line switches. Elements look like (SWITCH-STRING . HANDLER-FUNCTION). HANDLER-FUNCTION receives switch name as sole arg; @@ -444,12 +438,13 @@ (setq default-directory (abbreviate-file-name default-directory)) ;; Specify the file for recording all the auto save files of ;; this session. This is used by recover-session. - (setq auto-save-list-file-name - (expand-file-name - (format "%s%d-%s" - auto-save-list-file-prefix - (emacs-pid) - (system-name)))) + (if auto-save-list-file-prefix + (setq auto-save-list-file-name + (expand-file-name + (format "%s%d-%s" + auto-save-list-file-prefix + (emacs-pid) + (system-name))))) (run-hooks 'emacs-startup-hook) (and term-setup-hook (run-hooks 'term-setup-hook)) diff -r a8296e22da4e -r 576fb035e263 lisp/subr.el --- a/lisp/subr.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/subr.el Mon Aug 13 11:36:19 2007 +0200 @@ -359,7 +359,7 @@ NOTE: At some point, this will be moved into C and will be very fast." (with-current-buffer buffer (set sym val))) - + ;;;; String functions. ;; XEmacs @@ -446,13 +446,13 @@ (set-buffer ,buffer) ,@body)) -(defmacro with-temp-file (file &rest forms) - "Create a new buffer, evaluate FORMS there, and write the buffer to FILE. +(defmacro with-temp-file (filename &rest forms) + "Create a new buffer, evaluate FORMS there, and write the buffer to FILENAME. The value of the last form in FORMS is returned, like `progn'. See also `with-temp-buffer'." (let ((temp-file (make-symbol "temp-file")) (temp-buffer (make-symbol "temp-buffer"))) - `(let ((,temp-file ,file) + `(let ((,temp-file ,filename) (,temp-buffer (get-buffer-create (generate-new-buffer-name " *temp file*")))) (unwind-protect @@ -571,20 +571,20 @@ ;; getf, remf in cl*.el. -(defmacro putf (plist prop val) - "Add property PROP to plist PLIST with value VAL. -Analogous to (setq PLIST (plist-put PLIST PROP VAL))." - `(setq ,plist (plist-put ,plist ,prop ,val))) +(defmacro putf (plist property value) + "Add property PROPERTY to plist PLIST with value VALUE. +Analogous to (setq PLIST (plist-put PLIST PROPERTY VALUE))." + `(setq ,plist (plist-put ,plist ,property ,value))) -(defmacro laxputf (lax-plist prop val) - "Add property PROP to lax plist LAX-PLIST with value VAL. -Analogous to (setq LAX-PLIST (lax-plist-put LAX-PLIST PROP VAL))." - `(setq ,lax-plist (lax-plist-put ,lax-plist ,prop ,val))) +(defmacro laxputf (lax-plist property value) + "Add property PROPERTY to lax plist LAX-PLIST with value VALUE. +Analogous to (setq LAX-PLIST (lax-plist-put LAX-PLIST PROPERTY VALUE))." + `(setq ,lax-plist (lax-plist-put ,lax-plist ,property ,value))) -(defmacro laxremf (lax-plist prop) - "Remove property PROP from lax plist LAX-PLIST. -Analogous to (setq LAX-PLIST (lax-plist-remprop LAX-PLIST PROP))." - `(setq ,lax-plist (lax-plist-remprop ,lax-plist ,prop))) +(defmacro laxremf (lax-plist property) + "Remove property PROPERTY from lax plist LAX-PLIST. +Analogous to (setq LAX-PLIST (lax-plist-remprop LAX-PLIST PROPERTY))." + `(setq ,lax-plist (lax-plist-remprop ,lax-plist ,property))) ;;; Error functions @@ -746,9 +746,9 @@ ;;;; Miscellanea. ;; This is now in C. -;(defun buffer-substring-no-properties (beg end) -; "Return the text from BEG to END, without text properties, as a string." -; (let ((string (buffer-substring beg end))) +;(defun buffer-substring-no-properties (start end) +; "Return the text from START to END, without text properties, as a string." +; (let ((string (buffer-substring start end))) ; (set-text-properties 0 (length string) nil string) ; string)) diff -r a8296e22da4e -r 576fb035e263 lisp/syntax.el --- a/lisp/syntax.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/syntax.el Mon Aug 13 11:36:19 2007 +0200 @@ -16,7 +16,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -147,11 +147,11 @@ (setq code (cons code (aref string 1)))) code)) -(defun modify-syntax-entry (char-range spec &optional table) +(defun modify-syntax-entry (char-range spec &optional syntax-table) "Set syntax for the characters CHAR-RANGE according to string SPEC. CHAR-RANGE is a single character or a range of characters, as per `put-char-table'. -The syntax is changed only for table TABLE, which defaults to +The syntax is changed only for SYNTAX-TABLE, which defaults to the current buffer's syntax table. The first character of SPEC should be one of the following: Space whitespace syntax. w word constituent. @@ -181,26 +181,27 @@ between expressions. a means C is comment starter or comment ender for comment style a (default) b means C is comment starter or comment ender for comment style b." - (interactive + (interactive ;; I really don't know why this is interactive ;; help-form should at least be made useful while reading the second arg "cSet syntax for character: \nsSet syntax for %c to: ") - (cond ((syntax-table-p table)) - ((not table) - (setq table (syntax-table))) - (t - (setq table - (wrong-type-argument 'syntax-table-p table)))) - (let ((code (syntax-string-to-code spec))) - (simple-set-syntax-entry char-range code table)) + (simple-set-syntax-entry + char-range + (syntax-string-to-code spec) + (cond ((syntax-table-p syntax-table) + syntax-table) + ((null syntax-table) + (syntax-table)) + (t + (wrong-type-argument 'syntax-table-p syntax-table)))) nil) -(defun map-syntax-table (__function __table &optional __range) - "Map FUNCTION over entries in syntax table TABLE, collapsing inheritance. +(defun map-syntax-table (__function __syntax_table &optional __range) + "Map FUNCTION over entries in SYNTAX-TABLE, collapsing inheritance. This is similar to `map-char-table', but works only on syntax tables, and collapses any entries that call for inheritance by invisibly substituting the inherited values from the standard syntax table." - (check-argument-type 'syntax-table-p __table) + (check-argument-type 'syntax-table-p __syntax_table) (map-char-table #'(lambda (__key __value) (if (eq ?@ (char-syntax-from-code __value)) (map-char-table #'(lambda (__key __value) @@ -209,7 +210,7 @@ (standard-syntax-table) __key) (funcall __function __key __value))) - __table __range)) + __syntax_table __range)) ;(defun test-xm () ; (let ((o (copy-syntax-table)) diff -r a8296e22da4e -r 576fb035e263 lisp/term/bg-mouse.el --- a/lisp/term/bg-mouse.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/term/bg-mouse.el Mon Aug 13 11:36:19 2007 +0200 @@ -71,7 +71,7 @@ ((screen-mouse-x (min (1- (frame-width)) ;don't hit column 86! (/ (bg-get-tty-num semicolon) 9))) (screen-mouse-y (- (1- (frame-height)) ;assume default font size. - (/ (bg-get-tty-num semicolon) 16))) + (/ (bg-get-tty-num semicolon) 16))) (bg-mouse-buttons (% (bg-get-tty-num ?c) 8)) (bg-mouse-window (bg-window-from-x-y screen-mouse-x screen-mouse-y)) (bg-cursor-window (selected-window)) @@ -168,8 +168,8 @@ (scroll-up bg-mouse-y)) (defun bg-mouse-line-to-center () - "Scroll the line pointed to by the BitGraph mouse to the center -of the window" + "Scroll the line pointed to by the BitGraph mouse to the center +of the window." (interactive) (scroll-up (/ (+ 2 bg-mouse-y bg-mouse-y (- (window-height))) 2))) @@ -290,7 +290,7 @@ "Bind bg-mouse CLICK-CODE to run FUNCTION." (define-key mouse-map (char-to-string click-code) function)) -(bind-bg-mouse-click bg-button-l 'bg-set-point) +(bind-bg-mouse-click bg-button-l 'bg-set-point) (bind-bg-mouse-click bg-button-m 'bg-yank) (bind-bg-mouse-click bg-button-r 'bg-set-mark) (bind-bg-mouse-click (+ bg-button-l bg-button-m) 'yank-pop-1) diff -r a8296e22da4e -r 576fb035e263 lisp/term/sun-mouse.el --- a/lisp/term/sun-mouse.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/term/sun-mouse.el Mon Aug 13 11:36:19 2007 +0200 @@ -34,7 +34,7 @@ ;; Modelled after the GNUEMACS keymap interface. ;; ;; User Functions: -;; make-mousemap, copy-mousemap, +;; make-mousemap, copy-mousemap, ;; define-mouse, global-set-mouse, local-set-mouse, ;; use-global-mousemap, use-local-mousemap, ;; mouse-lookup, describe-mouse-bindings @@ -189,7 +189,7 @@ YESMINI says to include the minibuffer as a window. This is a macro, and does not evaluate its arguments." `(let ((OriginallySelectedWindow (selected-window))) - (unwind-protect + (unwind-protect (while (progn ,form (not (eq OriginallySelectedWindow @@ -216,7 +216,7 @@ (defun minibuffer-window-p (window) - "True iff this WINDOW is minibuffer." + "Return t if this WINDOW is a minibuffer." (= (frame-height) (nth 3 (window-edges window)) ; The bottom edge. )) @@ -224,9 +224,9 @@ (defun sun-mouse-handler (&optional hit) "Evaluates the function or list associated with a mouse hit. -Expecting to read a hit, which is a list: (button x y delta). -A form bound to button by define-mouse is found by mouse-lookup. -The variables: *mouse-window*, *mouse-x*, *mouse-y* are bound. +Expecting to read a hit, which is a list: (button x y delta). +A form bound to button by define-mouse is found by mouse-lookup. +The variables: *mouse-window*, *mouse-x*, *mouse-y* are bound. If the form is a symbol (symbolp), it is funcall'ed with *mouse-window*, *mouse-x*, and *mouse-y* as arguments; if the form is a list (listp), the form is eval'ed; if the form is neither of these, it is an error. @@ -242,8 +242,8 @@ (mouse-lookup mouse-code)))) (cond ((null form) (if (not (sm::hit-up-p hit)) ; undefined up hits are ok. - (error "Undefined mouse event: %s" - (prin1-to-string + (error "Undefined mouse event: %s" + (prin1-to-string (mouse-code-to-mouse-list mouse-code))))) ((symbolp form) (setq this-command form) @@ -268,9 +268,9 @@ (let ((hit2 (mouse-second-hit extra-click-wait))) (if hit2 ; we cons'd it, we can smash it. ; (setf (sm::hit-code hit1) (logior (sm::hit-code hit1) ...)) - (setcar hit1 (logior (sm::hit-code hit1) + (setcar hit1 (logior (sm::hit-code hit1) (sm::hit-code hit2) - (if (= (sm::hit-button hit1) + (if (= (sm::hit-button hit1) (sm::hit-button hit2)) sm::DoubleBits 0)))))) hit1)) @@ -280,7 +280,7 @@ but that uses minibuffer, and mucks up last-command." (let ((char-list nil) (char nil)) (while (not (equal 13 ; Carriage return. - (prog1 (setq char (read-char)) + (prog1 (setq char (read-char)) (setq char-list (cons char char-list)))))) (read (mapconcat 'char-to-string (nreverse char-list) "")) )) @@ -331,7 +331,7 @@ Returns list (window x y) where x and y are relative to window." (or (catch 'found - (eval-in-windows + (eval-in-windows (let ((we (window-edges (selected-window)))) (let ((le (nth 0 we)) (te (nth 1 we)) @@ -347,7 +347,7 @@ (if (and (>= x le) (< x re) (>= y te) (< y be)) - (throw 'found + (throw 'found (list (selected-window) (- x le) (- y te)))))) t)) ; include minibuffer in eval-in-windows ;;If x,y from a real mouse click, we shouldn't get here. @@ -375,14 +375,14 @@ (t 'text))))) (defun window-line-end (w x y) - "Return WINDOW column (ignore X) containing end of line Y" + "Return WINDOW column (ignore X) containing end of line Y." (eval-in-window w (save-excursion (move-to-loc (frame-width) y)))) ;;; ;;; The encoding of mouse events into a mousemap. ;;; These values must agree with coding in emacstool: ;;; -(defconst sm::keyword-alist +(defconst sm::keyword-alist '((left . 1) (middle . 2) (right . 4) (shift . 8) (control . 16) (meta . 32) (double . 64) (up . 128) (text . 256) (scrollbar . 512) (modeline . 1024) (minibuffer . 2048) @@ -538,7 +538,7 @@ (defun describe-mouse-briefly (mouse-list) "Print a short description of the function bound to MOUSE-LIST." - (interactive "xDescibe mouse list briefly: ") + (interactive "xDescribe mouse list briefly: ") (let ((function (mouse-lookup (mouse-list-to-mouse-code mouse-list)))) (if function (message "%s runs the command %s" mouse-list function) @@ -584,7 +584,7 @@ the FORM associated with the selected STRING is evaluated, and the resulting value is returned. Generally these FORMs are evaluated for their side-effects rather than their values. - If the selected form is a menu or a symbol whose value is a menu, + If the selected form is a menu or a symbol whose value is a menu, then it is displayed and evaluated as a pullright menu item. If the FORM of the first ITEM is nil, the STRING of the item is used as a label for the menu, i.e. it's inverted and not selectable." @@ -595,7 +595,7 @@ (defun sun-get-frame-data (code) "Sends the tty-sub-window escape sequence CODE to terminal, and returns a cons of the two numbers in returned escape sequence. -That is it returns (cons ) from \"\\E[n;;t\". +That is it returns (cons ) from \"\\E[n;;t\". CODE values: 13 = Tool-Position, 14 = Size-in-Pixels, 18 = Size-in-Chars." (send-string-to-terminal (concat "\033[" (int-to-string code) "t")) (let (char str x y) @@ -615,9 +615,9 @@ (chr (sun-get-frame-data 18))) ; returns size in chars (cons (/ (car pix) (car chr)) (/ (cdr pix) (cdr chr))))) -(defvar sm::menu-kludge-x nil +(defvar sm::menu-kludge-x nil "Cached frame-to-window X-Offset for sm::menu-kludge") -(defvar sm::menu-kludge-y nil +(defvar sm::menu-kludge-y nil "Cached frame-to-window Y-Offset for sm::menu-kludge") (defun sm::menu-kludge () @@ -641,10 +641,10 @@ (set-mark-command nil) (insert-string (sun-get-selection))) -(defun sun-select-region (beg end) +(defun sun-select-region (start end) "Set the sunwindows selection to the region in the current buffer." (interactive "r") - (sun-set-selection (buffer-substring beg end))) + (sun-set-selection (buffer-substring start end))) ;;; ;;; Support for emacstool @@ -653,7 +653,7 @@ (defun suspend-emacstool (&optional stuffstring) "Suspend emacstool. If running under as a detached process emacstool, -you don't want to suspend (there is no way to resume), +you don't want to suspend (there is no way to resume), just close the window, and wait for reopening." (interactive) (run-hooks 'suspend-hook) diff -r a8296e22da4e -r 576fb035e263 lisp/term/sun.el --- a/lisp/term/sun.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/term/sun.el Mon Aug 13 11:36:19 2007 +0200 @@ -43,10 +43,10 @@ (next-line n) (scroll-up n)) -(defun kill-region-and-unmark (beg end) +(defun kill-region-and-unmark (start end) "Like kill-region, but pops the mark [which equals point, anyway.]" (interactive "r") - (kill-region beg end) + (kill-region start end) (setq this-command 'kill-region-and-unmark) (set-mark-command t)) @@ -68,11 +68,11 @@ (let* ((command (car command-history)) (command-name (symbol-name (car command))) (search-arg (car (cdr command))) - (search-command + (search-command (and command-name (string-match "search" command-name))) ) (if (and search-command (stringp search-arg)) (setq grep-arg search-arg) - (setq search-command this-command + (setq search-command this-command grep-arg (read-string "REsearch: " grep-arg) this-command search-command) grep-arg)))) @@ -91,7 +91,7 @@ ;;; handle sun's extra function keys ;;; this version for those who run with standard .ttyswrc and no emacstool ;;; -;;; sunview picks up expose and open on the way UP, +;;; sunview picks up expose and open on the way UP, ;;; so we ignore them on the way down ;;; @@ -169,11 +169,11 @@ ;;; ;;; {c} is [a-j] for LEFT, [a-i] for TOP, [a-o] for RIGHT. ;;; A higher level insists on encoding {h,j,l,n}{r} (the arrow keys) -;;; as ANSI escape sequences. Use the shell command +;;; as ANSI escape sequences. Use the shell command ;;; % setkeys noarrows ;;; if you want these to come through for emacstool. ;;; -;;; If you are not using EmacsTool, +;;; If you are not using EmacsTool, ;;; you can also use this by creating a .ttyswrc file to do the conversion. ;;; but it won't include the CONTROL, META, or SHIFT keys! ;;; @@ -213,10 +213,10 @@ (define-key suntool-map "i\M-l" 'research-backward) ; M-Find (define-key suntool-map "i\M-," 're-search-backward) ; C-M-Find -(define-key suntool-map "jL" 'yank) ; DELETE +(define-key suntool-map "jL" 'yank) ; DELETE (define-key suntool-map "jl" 'kill-region-and-unmark) ; Delete (define-key suntool-map "j\M-l" 'exchange-point-and-mark); M-Delete -(define-key suntool-map "j," +(define-key suntool-map "j," #'(lambda () (interactive) (pop-mark 1))) ; C-Delete (define-key suntool-map "fT" 'shrink-window-horizontally) ; T6 @@ -249,7 +249,7 @@ ;;; ;;; C-x C-@ is the mouse command prefix. -(autoload 'sun-mouse-handler "sun-mouse" +(autoload 'sun-mouse-handler "sun-mouse" "Sun Emacstool handler for mouse blips (not loaded)." t) (defun emacstool-init () diff -r a8296e22da4e -r 576fb035e263 lisp/update-elc-2.el --- a/lisp/update-elc-2.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/update-elc-2.el Mon Aug 13 11:36:19 2007 +0200 @@ -52,18 +52,18 @@ (defvar update-elc-ignored-files ;; note: entries here are regexps '("^," ;; #### huh? - "^paths.el$" - "^loadup.el$" - "^loadup-el.el$" - "^update-elc.el$" - "^update-elc-2.el$" - "^dumped-lisp.el$" - "^make-docfile.el$" - "^site-start.el$" - "^site-load.el$" - "^site-init.el$" - "^version.el$" - "^very-early-lisp.el$")) + "^paths\\.el$" + "^loadup\\.el$" + "^loadup-el\\.el$" + "^update-elc\\.el$" + "^update-elc-2\\.el$" + "^dumped-lisp\\.el$" + "^make-docfile\\.el$" + "^site-start\\.el$" + "^site-load\\.el$" + "^site-init\\.el$" + "^version\\.el$" + "^very-early-lisp\\.el$")) ;; SEEN accumulates the list of already-handled dirs. (defun do-update-elc-2 (dir compile-stage-p seen) @@ -75,7 +75,7 @@ ;; Do this directory. (if compile-stage-p ;; Stage 2: Recompile necessary .els - (let ((files (directory-files dir t ".el$")) + (let ((files (directory-files dir t "\\.el$")) file file-c) (while (setq file (car files)) (setq files (cdr files)) @@ -95,7 +95,7 @@ ;; Stage 1. ;; Remove out-of-date elcs - (let ((files (directory-files dir t ".el$")) + (let ((files (directory-files dir t "\\.el$")) file file-c) (while (setq file (car files)) (setq files (cdr files)) @@ -105,7 +105,7 @@ (message "Removing out-of-date %s" file-c) (delete-file file-c)))) ;; Remove elcs without corresponding el - (let ((files (directory-files dir t ".elc$")) + (let ((files (directory-files dir t "\\.elc$")) file file-c) (while (setq file-c (car files)) (setq files (cdr files)) @@ -145,4 +145,4 @@ (message "Recompiling updated .els in directory tree `%s'...done" dir)) (setq command-line-args-left nil)) -;;; cleantree.el ends here +;;; update-elc-2.el ends here diff -r a8296e22da4e -r 576fb035e263 lisp/userlock.el --- a/lisp/userlock.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/userlock.el Mon Aug 13 11:36:19 2007 +0200 @@ -35,11 +35,11 @@ (define-error 'file-locked "File is locked" 'file-error) ; XEmacs -(defun ask-user-about-lock-minibuf (fn opponent) +(defun ask-user-about-lock-minibuf (filename other-user) (save-window-excursion (let (answer) (while (null answer) - (message "%s is locking %s: action (s, q, p, ?)? " opponent fn) + (message "%s is locking %s: action (s, q, p, ?)? " other-user filename) (let ((tem (let ((inhibit-quit t) (cursor-in-echo-area t)) (prog1 (downcase (read-char)) @@ -59,7 +59,7 @@ (ask-user-about-lock-help) (setq answer nil)) ((eq (cdr answer) 'yield) - (signal 'file-locked (list "File is locked" fn opponent))))))) + (signal 'file-locked (list "File is locked" filename other-user))))))) (cdr answer)))) (defun ask-user-about-lock-help () @@ -77,12 +77,12 @@ (define-error 'file-supersession "File changed on disk" 'file-error) ; XEmacs -(defun ask-user-about-supersession-threat-minibuf (fn) +(defun ask-user-about-supersession-threat-minibuf (filename) (save-window-excursion (let (answer) (while (null answer) (message "%s changed on disk; really edit the buffer? (y, n, r or C-h) " - (file-name-nondirectory fn)) + (file-name-nondirectory filename)) (let ((tem (downcase (let ((cursor-in-echo-area t)) (read-char))))) (setq answer @@ -104,10 +104,10 @@ (revert-buffer nil (not (buffer-modified-p))) ; ask confirmation iff buffer modified (signal 'file-supersession - (list "File reverted" fn))) + (list "File reverted" filename))) ((eq answer 'yield) (signal 'file-supersession - (list "File changed on disk" fn)))))) + (list "File changed on disk" filename)))))) (message "File on disk now will become a backup file if you save these changes.") (setq buffer-backed-up nil)))) @@ -131,14 +131,14 @@ ;;; dialog-box versions [XEmacs] -(defun ask-user-about-lock-dbox (fn opponent) +(defun ask-user-about-lock-dbox (filename other-user) (let ((echo-keystrokes 0)) (make-dialog-box 'question :question (format "%s is locking %s\n It has been detected that you want to modify a file that someone else has already started modifying in XEmacs." - opponent fn) + other-user filename) :buttons '(["Steal Lock\n\nThe other user will\nbecome the intruder" steal t] ["Proceed\n\nEdit file at your own\n\(and the other user's) risk" @@ -156,7 +156,7 @@ (throw 'aual-done t)) ((and (misc-user-event-p event) (eq (event-object event) 'yield)) - (signal 'file-locked (list "File is locked" fn opponent))) + (signal 'file-locked (list "File is locked" filename other-user))) ((and (misc-user-event-p event) (eq (event-object event) 'menu-no-selection-hook)) (signal 'quit nil)) @@ -170,7 +170,7 @@ (beep) (message "please answer the dialog box")))))))) -(defun ask-user-about-supersession-threat-dbox (fn) +(defun ask-user-about-supersession-threat-dbox (filename) (let ((echo-keystrokes 0)) (make-dialog-box 'question @@ -178,7 +178,7 @@ (format "File %s has changed on disk since its buffer was last read in or saved. -Do you really want to edit the buffer? " fn) +Do you really want to edit the buffer? " filename) :buttons '(["Yes\n\nEdit the buffer anyway,\nignoring the disk file" proceed t] @@ -192,14 +192,14 @@ (cond ((and (misc-user-event-p event) (eq (event-object event) 'proceed)) (throw 'auast-done nil)) ((and (misc-user-event-p event) (eq (event-object event) 'yield)) - (signal 'file-supersession (list fn))) + (signal 'file-supersession (list filename))) ((and (misc-user-event-p event) (eq (event-object event) 'revert)) - (or (equal fn (buffer-file-name)) + (or (equal filename (buffer-file-name)) (error "ask-user-about-supersession-threat called bogusly")) (revert-buffer nil t) (signal 'file-supersession - (list fn "(reverted)"))) + (list filename "(reverted)"))) ((and (misc-user-event-p event) (eq (event-object event) 'menu-no-selection-hook)) (signal 'quit nil)) @@ -217,31 +217,31 @@ ;;; top-level ;;;###autoload -(defun ask-user-about-lock (fn opponent) - "Ask user what to do when he wants to edit FILE but it is locked by USER. +(defun ask-user-about-lock (filename other-user) + "Ask user wanting to edit FILENAME, locked by OTHER-USER, what to do. This function has a choice of three things to do: - do (signal 'file-locked (list FILE USER)) + do (signal 'file-locked (list FILENAME OTHER-USER)) to refrain from editing the file return t (grab the lock on the file) return nil (edit the file even though it is locked). -You can rewrite it to use any criterion you like to choose which one to do." +You can rewrite it to use any criteria you like to choose which one to do." (discard-input) (if (should-use-dialog-box-p) - (ask-user-about-lock-dbox fn opponent) - (ask-user-about-lock-minibuf fn opponent))) + (ask-user-about-lock-dbox filename other-user) + (ask-user-about-lock-minibuf filename other-user))) ;;;###autoload -(defun ask-user-about-supersession-threat (fn) - "Ask a user who is about to modify an obsolete buffer what to do. +(defun ask-user-about-supersession-threat (filename) + "Ask user who is about to modify an obsolete buffer what to do. This function has two choices: it can return, in which case the modification -of the buffer will proceed, or it can (signal 'file-supersession (file)), +of the buffer will proceed, or it can (signal 'file-supersession (FILENAME)), in which case the proposed buffer modification will not be made. -You can rewrite this to use any criterion you like to choose which one to do. +You can rewrite this to use any criteria you like to choose which one to do. The buffer in question is current when this function is called." (discard-input) (if (should-use-dialog-box-p) - (ask-user-about-supersession-threat-dbox fn) - (ask-user-about-supersession-threat-minibuf fn))) + (ask-user-about-supersession-threat-dbox filename) + (ask-user-about-supersession-threat-minibuf filename))) ;;; userlock.el ends here diff -r a8296e22da4e -r 576fb035e263 lisp/version.el --- a/lisp/version.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/version.el Mon Aug 13 11:36:19 2007 +0200 @@ -36,20 +36,19 @@ Warning, this variable did not exist in XEmacs versions prior to 20.3") (defconst emacs-version - (purecopy - (format "%d.%d %s%s%s%s" - emacs-major-version - emacs-minor-version - (if emacs-patch-level - (format "(patch %d)" emacs-patch-level) - "") - (if xemacs-betaname - (concat " " xemacs-betaname) - "") - (if xemacs-codename - (concat " \"" xemacs-codename "\"") - "") - " XEmacs Lucid")) + (format "%d.%d %s%s%s%s" + emacs-major-version + emacs-minor-version + (if emacs-patch-level + (format "(patch %d)" emacs-patch-level) + "") + (if xemacs-betaname + (concat " " xemacs-betaname) + "") + (if xemacs-codename + (concat " \"" xemacs-codename "\"") + "") + " XEmacs Lucid") "Version numbers of this version of XEmacs.") (if (featurep 'infodock) @@ -131,9 +130,9 @@ ;; `what(1)' can extract from the executable or a core file. We don't ;; actually need this to be pointed to from lisp; pure objects can't ;; be GCed. -(purecopy (concat "\n@" "(#)" (emacs-version) - "\n@" "(#)" "Configuration: " - system-configuration "\n")) +(concat "\n@" "(#)" (emacs-version) + "\n@" "(#)" "Configuration: " + system-configuration "\n") ;;Local variables: ;;version-control: never diff -r a8296e22da4e -r 576fb035e263 lisp/view-less.el --- a/lisp/view-less.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/view-less.el Mon Aug 13 11:36:19 2007 +0200 @@ -7,17 +7,17 @@ ;; Keywords: wp, unix ;; This file is part of XEmacs. -;; +;; ;; XEmacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2 of the License, or ;; (at your option) any later version. -;; +;; ;; XEmacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. -;; +;; ;; You should have received a copy of the GNU General Public License ;; along with XEmacs; if not, write to the Free Software ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -32,7 +32,7 @@ ;; Originally written for v18 by David Gudeman (gudeman@arizona.edu) ;; Mods by Bengt Martensson, to closely resemble less (July 1987) ;; -;; If you would like all write-protected files to be visited in view-mode, +;; If you would like all write-protected files to be visited in view-mode, ;; then add the following to your .emacs file: ;; ;; (add-hook 'find-file-hooks 'auto-view-mode) @@ -108,33 +108,34 @@ map)) ;;;###autoload -(defun view-file (file &optional other-p) - "Find FILE, enter view mode. With prefix arg OTHER-P, use other window." +(defun view-file (filename &optional other-window-p) + "Find FILENAME, enter view mode. With prefix arg OTHER-WINDOW-P, use other window." (interactive "fView File: \nP") - (let ((old-p (get-file-buffer file)) + (let ((old-p (get-file-buffer filename)) (obuf (current-buffer))) - (if other-p - (find-file-other-window file) - (find-file file)) - (view-mode (if other-p nil obuf) + (if other-window-p + (find-file-other-window filename) + (find-file filename)) + (view-mode (if other-window-p nil obuf) (if old-p nil 'kill-buffer)) nil)) ;;;###autoload -(defun view-buffer (buf &optional other-p) - "Switch to BUF, enter view mode. With prefix arg use other window." +(defun view-buffer (buffer &optional other-window-p) + "Switch to BUFFER, enter view mode. With prefix arg use other window." (interactive "bView Buffer: \nP") (let ((obuf (current-buffer))) - (if other-p - (switch-to-buffer-other-window buf) - (switch-to-buffer buf)) - (view-mode (if other-p nil obuf) (if other-p nil 'bury-buffer)))) + (if other-window-p + (switch-to-buffer-other-window buffer) + (switch-to-buffer buffer)) + (view-mode (if other-window-p nil obuf) + (if other-window-p nil 'bury-buffer)))) ;;;###autoload -(defun view-file-other-window (file) - "Find FILE in other window, and enter view mode." +(defun view-file-other-window (filename) + "Find FILENAME in other window, and enter view mode." (interactive "fView File: ") - (view-file file t)) + (view-file filename t)) ;;;###autoload (defun view-buffer-other-window (buffer) @@ -252,7 +253,7 @@ "Exit view mode and execute the global binding of the key that invoked this command. Normally, this will toggle the state of `buffer-read-only', perhaps invoking some version-control mechanism." - (interactive) + (interactive) (setq view-exit-position nil) ;; Kludge so this works as advertised. Stig, why can't you write ;; bug-free code??? @@ -376,7 +377,7 @@ With prefix ARG, search forward that many occurrences." (interactive "sView search: \np") (unwind-protect - (re-search-forward + (re-search-forward (if (string-equal "" s) view-search-string s) nil nil p) (setq view-search-arg p) (or (string-equal "" s) diff -r a8296e22da4e -r 576fb035e263 lisp/wid-edit.el --- a/lisp/wid-edit.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/wid-edit.el Mon Aug 13 11:36:19 2007 +0200 @@ -512,14 +512,16 @@ (defun widget-specify-active (widget) "Make WIDGET active for user modifications." - (let ((inactive (widget-get widget :inactive))) + (let ((inactive (widget-get widget :inactive)) + (from (widget-get widget :from)) + (to (widget-get widget :to))) (when (and inactive (not (extent-detached-p inactive))) ;; Reactivate the buttons and fields covered by the extent. (map-extents 'widget-activation-widget-mapper - inactive nil nil :activate nil 'button-or-field) + nil from to :activate nil 'button-or-field) ;; Reactivate the glyphs. (map-extents 'widget-activation-glyph-mapper - inactive nil nil :activate nil 'end-glyph) + nil from to :activate nil 'end-glyph) (delete-extent inactive) (widget-put widget :inactive nil)))) @@ -566,7 +568,7 @@ value))) (defun widget-member (widget property) - "Non-nil iff there is a definition in WIDGET for PROPERTY." + "Return t if there is a definition in WIDGET for PROPERTY." (cond ((widget-plist-member (cdr widget) property) t) ((car widget) diff -r a8296e22da4e -r 576fb035e263 lisp/window-xemacs.el --- a/lisp/window-xemacs.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/window-xemacs.el Mon Aug 13 11:36:19 2007 +0200 @@ -51,11 +51,11 @@ (when (null n) (redraw-frame (window-frame window) t))) -(defun backward-other-window (arg &optional all-frames device) - "Select the ARG'th different window on this frame, going backwards. -This is just like calling `other-window' with the arg negated." +(defun backward-other-window (count &optional which-frames which-devices) + "Select the COUNT'th different window on this frame, going backwards. +This is just like calling `other-window' with COUNT negated." (interactive "p") - (other-window (- arg) all-frames device)) + (other-window (- count) which-frames which-devices)) (defalias 'windows-of-buffer 'get-buffer-window-list) diff -r a8296e22da4e -r 576fb035e263 lisp/window.el --- a/lisp/window.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/window.el Mon Aug 13 11:36:19 2007 +0200 @@ -33,32 +33,38 @@ ;;;; Window tree functions. -(defun one-window-p (&optional nomini all-frames device) +(defun one-window-p (&optional nomini which-frames which-devices) "Return non-nil if the selected window is the only window (in its frame). Optional arg NOMINI non-nil means don't count the minibuffer even if it is active. -The optional arg ALL-FRAMES t means count windows on all frames. -If it is `visible', count windows on all visible frames. -ALL-FRAMES nil or omitted means count only the selected frame, +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES nil or omitted means count only the selected frame, plus the minibuffer it uses (which may be on another frame). -ALL-FRAMES = 0 means count windows on all visible and iconified frames. -If ALL-FRAMES is any other value, count only the selected frame. +WHICH-FRAMES = `visible' means include windows on all visible frames. +WHICH-FRAMES = 0 means include windows on all visible and iconified frames. +WHICH-FRAMES = t means include windows on all frames including invisible frames. +If WHICH-FRAMES is any other value, count only the selected frame. -If optional third argument DEVICE is nil or omitted, count frames -on all devices. -If a device, count frames only on that device. -If a device type, count frames only on devices of that type. -Otherwise, count frames only on the selected device." +The optional third argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices." (let ((base-window (selected-window))) (if (and nomini (eq base-window (minibuffer-window))) (setq base-window (next-window base-window))) (eq base-window - (next-window base-window (if nomini 'arg) all-frames device)))) + (next-window base-window (if nomini 'arg) which-frames which-devices)))) -(defun walk-windows (proc &optional minibuf all-frames device) - "Cycle through all visible windows, calling PROC for each one. -PROC is called with a window as argument. +(defun walk-windows (function &optional minibuf which-frames which-devices) + "Cycle through all visible windows, calling FUNCTION for each one. +FUNCTION is called with a window as argument. Optional second arg MINIBUF t means count the minibuffer window even if not active. MINIBUF nil or omitted means count the minibuffer iff @@ -70,20 +76,25 @@ too. Therefore, when a separate minibuffer frame is active, `walk-windows' includes the windows in the frame from which you entered the minibuffer, as well as the minibuffer window. But if the -minibuffer does not count, only windows from WINDOW's frame count. +minibuffer does not count, only the selected window counts. -ALL-FRAMES is the optional third argument. -ALL-FRAMES nil or omitted means cycle within the frames as specified above. -ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -ALL-FRAMES = t means include windows on all frames including invisible frames. +By default, only the windows in the selected frame are included. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES nil or omitted means cycle within the frames as specified above. +WHICH-FRAMES = `visible' means include windows on all visible frames. +WHICH-FRAMES = 0 means include windows on all visible and iconified frames. +WHICH-FRAMES = t means include windows on all frames including invisible frames. Anything else means restrict to WINDOW's frame. -If optional fourth argument DEVICE is nil or omitted, include frames -on all devices. -If a device, include frames only on that device. -If a device type, include frames only on devices of that type. -Otherwise, include frames only on the selected device." +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices." ;; If we start from the minibuffer window, don't fail to come back to it. (if (window-minibuffer-p (selected-window)) (setq minibuf t)) @@ -94,9 +105,9 @@ (walk-windows-current walk-windows-start)) (while (progn (setq walk-windows-current - (next-window walk-windows-current minibuf all-frames - device)) - (funcall proc walk-windows-current) + (next-window walk-windows-current minibuf which-frames + which-devices)) + (funcall function walk-windows-current) (not (eq walk-windows-current walk-windows-start)))))) ;; The old XEmacs definition of the above clause. It's more correct in ;; that it will never hit a window that's already been hit even if you @@ -107,12 +118,12 @@ ; (walk-windows-current (selected-window))) ; (while (progn ; (setq walk-windows-current -; (next-window walk-windows-current minibuf all-frames -; device)) +; (next-window walk-windows-current minibuf which-frames +; which-devices)) ; (not (memq walk-windows-current walk-windows-history))) ; (setq walk-windows-history (cons walk-windows-current ; walk-windows-history)) -; (funcall proc walk-windows-current)))) +; (funcall function walk-windows-current)))) (defun minibuffer-window-active-p (window) "Return t if WINDOW (a minibuffer window) is now active." @@ -213,7 +224,7 @@ will get the same value of point as the current window. This is often more convenient for editing. -Otherwise, we chose window starts so as to minimize the amount of +Otherwise, we choose window starts so as to minimize the amount of redisplay; this is convenient on slow terminals. The new selected window is the one that the current value of point appears in. The value of point can change if the text around point is hidden by the @@ -329,30 +340,31 @@ (kill-buffer buffer)) (error "Aborted"))) -;;; New with XEmacs 20.3 -;;; Suggested by Noah Friedman, and tuned by Hrvoje Niksic. -(defun window-list (&optional minibuf all-frames device) +(defun window-list (&optional minibuf which-frames which-devices) "Return a list of existing windows. If the optional argument MINIBUF is non-nil, then include minibuffer windows in the result. By default, only the windows in the selected frame are returned. -The optional argument ALL-FRAMES changes this behavior: -ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -ALL-FRAMES = t means include windows on all frames including invisible frames. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means include windows on all visible frames. +WHICH-FRAMES = 0 means include windows on all visible and iconified frames. +WHICH-FRAMES = t means include windows on all frames including invisible frames. Anything else means restrict to the selected frame. -The optional fourth argument DEVICE further clarifies which frames to -search as specified by ALL-FRAMES. This value is only meaningful if -ALL-FRAMES is non-nil. -If nil or omitted, search only the selected device. -If a device, search frames only on that device. -If a device type, search frames only on devices of that type. -Any other non-nil value means search frames on all devices." + +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices." (let ((wins nil)) (walk-windows (lambda (win) (push win wins)) - minibuf all-frames device) + minibuf which-frames which-devices) wins)) ;;; window.el ends here diff -r a8296e22da4e -r 576fb035e263 lisp/x-faces.el --- a/lisp/x-faces.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/x-faces.el Mon Aug 13 11:36:19 2007 +0200 @@ -101,41 +101,38 @@ (encoding "[^-]+") ; false! ) (setq x-font-regexp - (purecopy - (concat "\\`\\*?[-?*]" - foundry - family - weight\? - slant\? - swidth - adstyle - - pixelsize - pointsize - resx - resy - spacing - avgwidth - - registry - encoding "\\'" - ))) + (concat "\\`\\*?[-?*]" + foundry - family - weight\? - slant\? - swidth - adstyle - + pixelsize - pointsize - resx - resy - spacing - avgwidth - + registry - encoding "\\'" + )) (setq x-font-regexp-head - (purecopy - (concat "\\`[-?*]" foundry - family - weight\? - slant\? - "\\([-*?]\\|\\'\\)"))) + (concat "\\`[-?*]" foundry - family - weight\? - slant\? + "\\([-*?]\\|\\'\\)")) (setq x-font-regexp-head-2 - (purecopy - (concat "\\`[-?*]" foundry - family - weight\? - slant\? - - swidth - adstyle - pixelsize - pointsize - "\\([-*?]\\|\\'\\)"))) - (setq x-font-regexp-slant (purecopy (concat - slant -))) - (setq x-font-regexp-weight (purecopy (concat - weight -))) + (concat "\\`[-?*]" foundry - family - weight\? - slant\? + - swidth - adstyle - pixelsize - pointsize + "\\([-*?]\\|\\'\\)")) + (setq x-font-regexp-slant (concat - slant -)) + (setq x-font-regexp-weight (concat - weight -)) ;; if we can't match any of the more specific regexps (unfortunate) then ;; look for digits; assume 2+ digits is 10ths of points, and 1-2 digits ;; is pixels. Bogus as hell. - (setq x-font-regexp-pixel (purecopy "[-?*]\\([0-9][0-9]?\\)[-?*]")) - (setq x-font-regexp-point (purecopy "[-?*]\\([0-9][0-9]+\\)[-?*]")) + (setq x-font-regexp-pixel "[-?*]\\([0-9][0-9]?\\)[-?*]") + (setq x-font-regexp-point "[-?*]\\([0-9][0-9]+\\)[-?*]") ;; the following two are used by x-font-menu.el. (setq x-font-regexp-foundry-and-family - (purecopy (concat "\\`[-?*]" foundry - "\\(" family "\\)" -))) + (concat "\\`[-?*]" foundry - "\\(" family "\\)" -)) (setq x-font-regexp-registry-and-encoding - (purecopy (concat - "\\(" registry "\\)" - "\\(" encoding "\\)\\'"))) + (concat - "\\(" registry "\\)" - "\\(" encoding "\\)\\'")) (setq x-font-regexp-spacing - (purecopy (concat - "\\(" spacing "\\)" - avgwidth - - registry - encoding "\\'"))) + (concat - "\\(" spacing "\\)" - avgwidth + - registry - encoding "\\'")) ) ;; A "loser font" is something like "8x13" -> "8x13bold". ;; These are supported only through extreme generosity. -(defconst x-loser-font-regexp (purecopy "\\`[0-9]+x[0-9]+\\'")) +(defconst x-loser-font-regexp "\\`[0-9]+x[0-9]+\\'") (defun x-frob-font-weight (font which) (if (font-instance-p font) (setq font (font-instance-name font))) diff -r a8296e22da4e -r 576fb035e263 lisp/x-font-menu.el --- a/lisp/x-font-menu.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/x-font-menu.el Mon Aug 13 11:36:19 2007 +0200 @@ -38,17 +38,16 @@ "Registry and encoding to use with font menu fonts.") (defvar x-fonts-menu-junk-families - (purecopy - (mapconcat - #'identity - '("cursor" "glyph" "symbol" ; Obvious losers. - "\\`Ax...\\'" ; FrameMaker fonts - there are just way too + (mapconcat + #'identity + '("cursor" "glyph" "symbol" ; Obvious losers. + "\\`Ax...\\'" ; FrameMaker fonts - there are just way too ; many of these, and there is a different ; font family for each font face! Losers. ; "Axcor" -> "Applix Courier Roman", ; "Axcob" -> "Applix Courier Bold", etc. - ) - "\\|")) + ) + "\\|") "A regexp matching font families which are uninteresting (e.g. cursor fonts).") (defun hack-font-truename (fn) diff -r a8296e22da4e -r 576fb035e263 lisp/x-mouse.el --- a/lisp/x-mouse.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/x-mouse.el Mon Aug 13 11:36:19 2007 +0200 @@ -40,7 +40,7 @@ (defun x-mouse-kill (event) "Kill the text between the point and mouse and copy it to the clipboard and -to the cut buffer" +to the cut buffer." (interactive "@e") (let ((old-point (point))) (mouse-set-point event) diff -r a8296e22da4e -r 576fb035e263 lisp/x-select.el --- a/lisp/x-select.el Mon Aug 13 11:35:05 2007 +0200 +++ b/lisp/x-select.el Mon Aug 13 11:36:19 2007 +0200 @@ -51,7 +51,7 @@ (define-obsolete-function-alias 'x-cut-copy-clear-internal 'cut-copy-clear-internal) (define-obsolete-function-alias 'x-get-selection 'get-selection) (define-obsolete-function-alias 'x-get-clipboard 'get-clipboard) -(define-obsolete-function-alias 'x-yank-clipboard-selection +(define-obsolete-function-alias 'x-yank-clipboard-selection 'yank-clipboard-selection) (define-obsolete-function-alias 'x-disown-selection-internal 'disown-selection-internal) @@ -72,14 +72,14 @@ (own-selection selection 'SECONDARY)) (defun x-notice-selection-requests (selection type successful) - "for possible use as the value of x-sent-selection-hooks." + "for possible use as the value of `x-sent-selection-hooks'." (if (not successful) (message "Selection request failed to convert %s to %s" selection type) (message "Sent selection %s as %s" selection type))) (defun x-notice-selection-failures (selection type successful) - "for possible use as the value of x-sent-selection-hooks." + "for possible use as the value of `x-sent-selection-hooks'." (or successful (message "Selection request failed to convert %s to %s" selection type))) @@ -95,32 +95,25 @@ "Return the value of one of the 8 X server cut buffers. Optional arg WHICH-ONE should be a number from 0 to 7, defaulting to 0. Cut buffers are considered obsolete; you should use selections instead. -This function does nothing if support for cut buffers was not compiled -into Emacs." - (and (fboundp 'x-get-cutbuffer-internal) - (x-get-cutbuffer-internal - (if which-one - (aref [CUT_BUFFER0 CUT_BUFFER1 CUT_BUFFER2 CUT_BUFFER3 - CUT_BUFFER4 CUT_BUFFER5 CUT_BUFFER6 CUT_BUFFER7] - which-one) - 'CUT_BUFFER0)))) +This function does nothing if cut buffer support was not compiled in." + (when (fboundp 'x-get-cutbuffer-internal) + (x-get-cutbuffer-internal + (aref [CUT_BUFFER0 CUT_BUFFER1 CUT_BUFFER2 CUT_BUFFER3 + CUT_BUFFER4 CUT_BUFFER5 CUT_BUFFER6 CUT_BUFFER7] + (or which-one 0))))) ;;; FSF name x-set-cut-buffer (defun x-store-cutbuffer (string &optional push) "Store STRING into the X server's primary cut buffer. -If PUSH is non-nil, also rotate the cut buffers: -this means the previous value of the primary cut buffer moves the second +If optional arg PUSH is non-nil, also rotate the cut buffers: this +means the previous value of the primary cut buffer moves to the second cut buffer, and the second to the third, and so on (there are 8 buffers.) Cut buffers are considered obsolete; you should use selections instead. -This function does nothing if support for cut buffers was not compiled -into Emacs." - (and (fboundp 'x-store-cutbuffer-internal) - (progn - ;; Check the data type of STRING. - (substring string 0 0) - (if push - (x-rotate-cutbuffers-internal 1)) - (x-store-cutbuffer-internal 'CUT_BUFFER0 string)))) +This function does nothing if cut buffer support was not compiled in." + (when (fboundp 'x-store-cutbuffer-internal) + (when push + (x-rotate-cutbuffers-internal 1)) + (x-store-cutbuffer-internal 'CUT_BUFFER0 string))) ;FSFmacs (provide 'select) diff -r a8296e22da4e -r 576fb035e263 lwlib/ChangeLog --- a/lwlib/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/lwlib/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,7 +1,21 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-11-02 Stephen J. Turnbull + + * lwlib.h: Typo fixes and tiny clarifications. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. +2000-09-21 Andy Piper + + * lwlib.h: declare copy_widget_value_tree. + + * lwlib.c (copy_widget_value_tree): make non-static. + 2000-09-19 Martin Buchholz * *: Spelling mega-patch diff -r a8296e22da4e -r 576fb035e263 lwlib/lwlib.h --- a/lwlib/lwlib.h Mon Aug 13 11:35:05 2007 +0200 +++ b/lwlib/lwlib.h Mon Aug 13 11:36:19 2007 +0200 @@ -104,7 +104,7 @@ ArgList args; int nargs; /* Copying args is impossible so we make the caller give us heap allocated - args and free them when on-one wants them any more. */ + args and free them when no one wants them any more. */ int ref_count; } widget_args; @@ -115,7 +115,7 @@ /* name of widget */ char* name; - /* value (meaning BOGUSLY depend on widget type) */ + /* value (meaning BOGUSLY depends on widget type) */ char* value; /* keyboard equivalent. no implications for XtTranslations */ char* key; @@ -134,11 +134,11 @@ Boolean edited; /* true if has changed (maintained by lw library) */ change_type change; - /* Contents of the sub-widgets, also selected slot for checkbox */ + /* Contents of sub-widgets, also selected slot for checkbox */ struct _widget_value* contents; /* data passed to callback */ XtPointer call_data; - /* next one in the list */ + /* next in the list of siblings */ struct _widget_value* next; /* slot for the toolkit dependent part. Always initialize to NULL. */ void* toolkit_data; diff -r a8296e22da4e -r 576fb035e263 man/ChangeLog --- a/man/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/man/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,3 +1,328 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-10-27 Martin Buchholz + + * xemacs/windows.texi (Other Window): + + * new-users-guide/files.texi (Saving Files): + * new-users-guide/search.texi (Search and Replace): + + * lispref/abbrevs.texi (Abbrev Tables): + * lispref/abbrevs.texi (Defining Abbrevs): + * lispref/abbrevs.texi (Abbrev Files): + * lispref/annotations.texi (Annotation Primitives): + * lispref/backups.texi (Auto-Saving): + * lispref/backups.texi (Reverting): + * lispref/buffers.texi (Current Buffer): + * lispref/buffers.texi (Buffer Names): + * lispref/buffers.texi (Buffer Modification): + * lispref/buffers.texi (Read Only Buffers): + * lispref/buffers.texi (The Buffer List): + * lispref/buffers.texi (Killing Buffers): + * lispref/buffers.texi (Indirect Buffers): + * lispref/building.texi (Building XEmacs): + * lispref/building.texi (Garbage Collection): + * lispref/commands.texi (Interactive Call): + * lispref/commands.texi (Events): + * lispref/commands.texi (Event Predicates): + * lispref/commands.texi (Working With Events): + * lispref/commands.texi (Converting Events): + * lispref/commands.texi (Key Sequence Input): + * lispref/commands.texi (Reading One Event): + * lispref/commands.texi (Waiting): + * lispref/commands.texi (Prefix Command Arguments): + * lispref/commands.texi (Recursive Editing): + * lispref/compile.texi (Compilation Functions): + * lispref/compile.texi (Compiled-Function Objects): + * lispref/consoles-devices.texi (Basic Device Functions): + * lispref/consoles-devices.texi (Console Types and Device Classes): + * lispref/consoles-devices.texi (Connecting to a Console or Device): + * lispref/control.texi (Signaling Errors): + * lispref/customize.texi (Type Keywords): + * lispref/databases.texi (Connecting to a Database): + * lispref/databases.texi (Working With a Database): + * lispref/databases.texi (Other Database Functions): + * lispref/debugging.texi (Function Debugging): + * lispref/display.texi (Refresh Screen): + * lispref/display.texi (The Echo Area): + * lispref/display.texi (Blinking): + * lispref/edebug-inc.texi (Tracing): + * lispref/edebug-inc.texi (Instrumenting Macro Calls): + * lispref/edebug-inc.texi (Edebug Options): + * lispref/eval.texi (Function Indirection): + * lispref/extents.texi (Creating and Modifying Extents): + * lispref/extents.texi (Finding Extents): + * lispref/extents.texi (Mapping Over Extents): + * lispref/extents.texi (Extent Properties): + * lispref/faces.texi (Basic Face Functions): + * lispref/faces.texi (Face Properties): + * lispref/faces.texi (Face Convenience Functions): + * lispref/faces.texi (Other Face Display Functions): + * lispref/faces.texi (Font Instance Characteristics): + * lispref/faces.texi (Color Specifiers): + * lispref/files.texi (Visiting Functions): + * lispref/files.texi (Reading from Files): + * lispref/files.texi (Changing File Attributes): + * lispref/files.texi (File Names): + * lispref/files.texi (File Name Components): + * lispref/files.texi (Directory Names): + * lispref/files.texi (Relative File Names): + * lispref/files.texi (File Name Expansion): + * lispref/files.texi (File Name Completion): + * lispref/files.texi (User Name Completion): + * lispref/files.texi (Magic File Names): + * lispref/files.texi (Creating a Partial File): + * lispref/files.texi (Format Conversion): + * lispref/frames.texi (Creating Frames): + * lispref/frames.texi (Property Access): + * lispref/frames.texi (Size and Position): + * lispref/frames.texi (Deleting Frames): + * lispref/frames.texi (Finding All Frames): + * lispref/frames.texi (Frames and Windows): + * lispref/frames.texi (Visibility of Frames): + * lispref/frames.texi (Frame Configurations): + * lispref/functions.texi (Calling Functions): + * lispref/functions.texi (Function Cells): + * lispref/glyphs.texi (Creating Glyphs): + * lispref/glyphs.texi (Image Specifiers): + * lispref/glyphs.texi (Image Instance Types): + * lispref/glyphs.texi (Image Instance Functions): + * lispref/gutter.texi (Creating Gutter): + * lispref/gutter.texi (Specifying a Gutter): + * lispref/gutter.texi (Other Gutter Variables): + * lispref/help.texi (Accessing Documentation): + * lispref/help.texi (Help Functions): + * lispref/help.texi (Obsoleteness): + * lispref/internationalization.texi (Domain Specification): + * lispref/intro.texi (Caveats): + * lispref/keymaps.texi (Active Keymaps): + * lispref/keymaps.texi (Functions for Key Lookup): + * lispref/keymaps.texi (Changing Key Bindings): + * lispref/keymaps.texi (Scanning Keymaps): + * lispref/ldap.texi (The High-Level LDAP API): + * lispref/ldap.texi (Low-level Operations on a LDAP Server): + * lispref/ldap.texi (Encoder/Decoder Functions): + * lispref/lists.texi (Setcar): + * lispref/lists.texi (Setcdr): + * lispref/lists.texi (Working With Normal Plists): + * lispref/lists.texi (Working With Lax Plists): + * lispref/loading.texi (Autoload): + * lispref/loading.texi (Named Features): + * lispref/markers.texi (Creating Markers): + * lispref/markers.texi (Changing Markers): + * lispref/markers.texi (The Mark): + * lispref/menus.texi (Modifying Menus): + * lispref/menus.texi (Pop-Up Menus): + * lispref/menus.texi (Menu Accelerator Functions): + * lispref/minibuf.texi (Text from Minibuffer): + * lispref/minibuf.texi (Object from Minibuffer): + * lispref/minibuf.texi (Basic Completion): + * lispref/minibuf.texi (High-Level Completion): + * lispref/minibuf.texi (Reading a Password): + * lispref/minibuf.texi (Minibuffer Misc): + * lispref/mouse.texi (Mouse Tracking): + * lispref/syntax.texi (Syntax Table Functions): + * lispref/numbers.texi (Arithmetic Operations): + * lispref/numbers.texi (Rounding Operations): + * lispref/numbers.texi (Math Functions): + * lispref/objects.texi (String Type): + * lispref/objects.texi (Equality Predicates): + * lispref/os.texi (Killing XEmacs): + * lispref/os.texi (Suspending XEmacs): + * lispref/os.texi (System Environment): + * lispref/os.texi (Time Conversion): + * lispref/os.texi (Timers): + * lispref/os.texi (Input Modes): + * lispref/os.texi (Translating Input): + * lispref/os.texi (Terminal Output): + * lispref/os.texi (Flow Control): + * lispref/positions.texi (Character Motion): + * lispref/positions.texi (Word Motion): + * lispref/positions.texi (Text Lines): + * lispref/positions.texi (Screen Lines): + * lispref/positions.texi (List Motion): + * lispref/positions.texi (Narrowing): + * lispref/postgresql.texi (Asynchronous Interface Functions): + * lispref/processes.texi (Subprocess Creation): + * lispref/processes.texi (Synchronous Processes): + * lispref/processes.texi (Asynchronous Processes): + * lispref/processes.texi (Process Information): + * lispref/processes.texi (Input to Processes): + * lispref/processes.texi (Signals to Processes): + * lispref/processes.texi (Process Buffers): + * lispref/processes.texi (Filter Functions): + * lispref/processes.texi (Network): + * lispref/range-tables.texi (Working With Range Tables): + * lispref/searching.texi (String Search): + * lispref/searching.texi (Regexp Search): + * lispref/searching.texi (POSIX Regexps): + * lispref/searching.texi (Replacing Match): + * lispref/searching.texi (Entire Match Data): + * lispref/sequences.texi (Bit Vector Functions): + * lispref/specifiers.texi (Adding Specifications): + * lispref/specifiers.texi (Creating Specifiers): + * lispref/specifiers.texi (Specifier Validation Functions): + * lispref/specifiers.texi (Other Specification Functions): + * lispref/streams.texi (Output Variables): + * lispref/symbols.texi (Other Plists): + * lispref/text.texi (Insertion): + * lispref/text.texi (Commands for Insertion): + * lispref/text.texi (Deletion): + * lispref/text.texi (User-Level Deletion): + * lispref/text.texi (Kill Functions): + * lispref/text.texi (Low-Level Kill Ring): + * lispref/text.texi (Undo): + * lispref/text.texi (Maintaining Undo): + * lispref/text.texi (Margins): + * lispref/text.texi (Sorting): + * lispref/text.texi (Columns): + * lispref/text.texi (Primitive Indent): + * lispref/text.texi (Mode-Specific Indent): + * lispref/text.texi (Region Indent): + * lispref/text.texi (Case Changes): + * lispref/text.texi (Examining Properties): + * lispref/text.texi (Property Search): + * lispref/text.texi (Registers): + * lispref/text.texi (Transformations): + * lispref/mule.texi (Charset Property Functions): + * lispref/mule.texi (MULE Characters): + * lispref/mule.texi (Composite Characters): + * lispref/mule.texi (Coding System Properties): + * lispref/mule.texi (Big5 and Shift-JIS Functions): + * lispref/mule.texi (CCL Statements): + * lispref/mule.texi (Calling CCL): + * lispref/mule.texi (Category Tables): + * lispref/toolbar.texi (Specifying the Toolbar): + * lispref/toolbar.texi (Other Toolbar Variables): + * lispref/tooltalk.texi (Elisp Interface for Sending Messages): + * lispref/tooltalk.texi (Elisp Interface for Receiving Messages): + * lispref/variables.texi (Creating Buffer-Local): + * lispref/variables.texi (Variable Aliases): + * lispref/windows.texi (Splitting Windows): + * lispref/windows.texi (Deleting Windows): + * lispref/windows.texi (Selecting Windows): + * lispref/windows.texi (Cyclic Window Ordering): + * lispref/windows.texi (Buffers and Windows): + * lispref/windows.texi (Displaying Buffers): + * lispref/windows.texi (Choosing Window): + * lispref/windows.texi (Window Point): + * lispref/windows.texi (Window Start): + * lispref/windows.texi (Vertical Scrolling): + * lispref/windows.texi (Horizontal Scrolling): + * lispref/windows.texi (Resizing Windows): + * lispref/windows.texi (Window Configurations): + * lispref/x-windows.texi (X Selections): + * lispref/x-windows.texi (Resources): + * lispref/strings.texi (Creating Strings): + * lispref/strings.texi (Character Codes): + * lispref/strings.texi (Text Comparison): + * lispref/strings.texi (String Conversion): + * lispref/strings.texi (Formatting Strings): + * lispref/strings.texi (Character Case): + * lispref/strings.texi (Case Tables): + * lispref/strings.texi (Char Table Types): + * lispref/strings.texi (Working With Char Tables): + Giant docstring parameter/Texinfo fixes. + + Don't use abbreviations for English words, especially when those + words have other meanings. For example, use START, not BEG. + Use OBJECT, not OBJ. + Use VALUE, not VAL. + Use BUFFER, not BUF. + Use PROCESS, not PROC. (Sometimes PROC was used to mean FUNCTION!) + Use CHARACTER, not CH or CHR. + Use NUMBER, not NUM. + Use COLUMN, not COL. + Use POSITION, not POS. + Use SYMBOL, not SYM. + Use STRING, not STR. + Use LIMIT, not LIM. + Use OTHER-WINDOW-P, not OTHER-P. + Use PRIORITY, not PRI. + + Use `non-nil', not `true'. + + Don't call a parameter an ALIST if it can also be a FUNCTION or OBARRAY. + + Use CASE-TABLE, CATEGORY-TABLE, CHAR-TABLE, etc. instead of TABLE. + + Try to find better parameter names than ARG. + + Use consistent parameter names. For example, s/NO-ERROR/NOERROR/g; + + Use type information in parameter names. For example, use + (make-bit-vector length bit), not (make-bit-vector length init). + + Completion functions should have parameters with names like + PARTIAL-FILENAME instead of the misleading FILENAME. + + Type predicates should consistently take an OBJECT parameter, + since any object is valid as input. + + Use WHICH-FRAMES and WHICH-DEVICES parameters consistently for + functions like next-window and next-frame that walk over window or + frame lists. + + Deleted duplicated documentation for: + one-window-p, format-insert-file + + Deleted 21 lines of VMS-specific texinfo documentation. + + Fixed up a few places where `_' was used in docstring parameter + names instead of `-'. + + Fixed up places that used nil or t without @code. + + Fixed up places that erroneously used @code instead of @var. + + Fixed many typos. + + Fixed many places where the parameters mentioned in the docstring + didn't match the actual parameters. + + Fixed 7 places that used `@var{nil}' instead of `@code{nil}'. + + Fixed 40 places where docstrings were missing trailing `.' + + Fixed the texi documentation of 41 functions where the + interactiveness of the function in the documentation did not match + the implementation. + + Fixed 117 functions where the names of parameters in the texi was + different from the names in the implementation. + + Fixed the texi documentation of 137 functions where the parameter + list of the function in the texi was semantically different from + the implementation. + +2000-10-28 Adrian Aichner + + * xemacs-faq.texi (Q1.2.1): Use @html instead of @ifhtml to + incorporate raw HTML output in the HTML version. + +2000-11-02 Stephen J. Turnbull + + * xemacs/menus.texi: + * widget.texi: + Typo fixes and tiny clarifications. + +2000-10-19 Stephen J. Turnbull + + * xemacs-faq.texi: Added Q2.0.13, Q2.0.14 - packages why and how. + Added Q2.1.25 - function not found due to package not installed. + + * xemacs/xemacs.texi: + * xemacs/abbrevs.texi: + * xemacs/basic.texi: + * xemacs/building.texi: + * xemacs/packages.texi: + * xemacs/startup.texi: + Moved "Packages" node to "Important General Concepts" section. + + * xemacs/packages.texi: Added package list from etc/PACKAGES. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff -r a8296e22da4e -r 576fb035e263 man/internals/internals.texi --- a/man/internals/internals.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/internals/internals.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1813,7 +1813,7 @@ Elisp. There are two sets of macros that iterate over lists. @code{EXTERNAL_LIST_LOOP_@var{n}} should be used when the list has been supplied by the user, and cannot be trusted to be acyclic and -nil-terminated. A @code{malformed-list} or @code{circular-list} error +@code{nil}-terminated. A @code{malformed-list} or @code{circular-list} error will be generated if the list being iterated over is not entirely kosher. @code{LIST_LOOP_@var{n}}, on the other hand, is faster and less safe, and can be used only on trusted lists. @@ -4810,7 +4810,7 @@ @code{setq}, etc., miscellaneous @code{gui_item_...} functions, everything related to @code{eval} (@code{Feval_buffer}, @code{call0}, ...) and inside @code{Fsignal}. The latter is used to handle signals, as -for example the ones raised by every @code{QUITE}-macro triggered after +for example the ones raised by every @code{QUIT}-macro triggered after pressing Ctrl-g. @node garbage_collect_1, mark_object, Invocation, Garbage Collection - Step by Step @@ -5390,7 +5390,7 @@ a function pointer (usually the @code{mark_object()} function), which is used to mark an object. All Lisp objects that are contained within the object need to be marked by applying this function to them. The mark -method should also return a Lisp object, which should be either nil or +method should also return a Lisp object, which should be either @code{nil} or an object to mark. (This can be used in lieu of calling @code{mark_object()} on the object, to reduce the recursion depth, and consequently should be the most heavily nested sub-object, such as a @@ -8113,7 +8113,7 @@ these are @dfn{hchild} (a list of horizontally-arrayed children), @dfn{vchild} (a list of vertically-arrayed children), and @dfn{buffer} (the buffer contained in a leaf window). Exactly one of -these will be non-nil. Remember that @dfn{horizontally-arrayed} +these will be non-@code{nil}. Remember that @dfn{horizontally-arrayed} means ``side-by-side'' and @dfn{vertically-arrayed} means @dfn{one above the other}. @@ -8121,7 +8121,7 @@ Leaf windows also have markers in their @code{start} (the first buffer position displayed in the window) and @code{pointm} (the window's stashed value of @code{point}---see above) fields, -while combination windows have nil in these fields. +while combination windows have @code{nil} in these fields. @item The list of children for a window is threaded through the @@ -8531,7 +8531,7 @@ @section Zero-Length Extents Extents can be zero-length, and will end up that way if their endpoints -are explicitly set that way or if their detachable property is nil +are explicitly set that way or if their detachable property is @code{nil} and all the text in the extent is deleted. (The exception is open-open zero-length extents, which are barred from existing because there is no sensible way to define their properties. Deletion of the text in diff -r a8296e22da4e -r 576fb035e263 man/lispref/abbrevs.texi --- a/man/lispref/abbrevs.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/abbrevs.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/abbrevs.info @node Abbrevs, Extents, Syntax Tables, Top @@ -42,7 +42,7 @@ @end menu @node Abbrev Mode -@section Setting Up Abbrev Mode +@section Setting Up Abbrev Mode Abbrev mode is a minor mode controlled by the value of the variable @code{abbrev-mode}. @@ -76,8 +76,8 @@ leaving it empty. The function returns @code{nil}. @end defun -@defun define-abbrev-table tabname definitions -This function defines @var{tabname} (a symbol) as an abbrev table name, +@defun define-abbrev-table table-name definitions +This function defines @var{table-name} (a symbol) as an abbrev table name, i.e., as a variable whose value is an abbrev table. It defines abbrevs in the table according to @var{definitions}, a list of elements of the form @code{(@var{abbrevname} @var{expansion} @var{hook} @@ -121,7 +121,7 @@ existing abbrev. @end defun -@defun define-abbrev table name expansion hook +@defun define-abbrev table name &optional expansion hook count This function defines an abbrev in @var{table} named @var{name}, to expand to @var{expansion}, and call @var{hook}. The return value is an uninterned symbol that represents the abbrev inside XEmacs; its name is @@ -165,7 +165,7 @@ This is the default file name for reading and saving abbrevs. @end defopt -@defun quietly-read-abbrev-file filename +@defun quietly-read-abbrev-file &optional filename This function reads abbrev definitions from a file named @var{filename}, previously written with @code{write-abbrev-file}. If @var{filename} is @code{nil}, the file specified in @code{abbrev-file-name} is used. @@ -181,7 +181,7 @@ @end defopt @defvar abbrevs-changed -This variable is set non-@code{nil} by defining or altering any +This variable is set non-@code{nil} by defining or altering any abbrevs. This serves as a flag for various XEmacs commands to offer to save your abbrevs. @end defvar diff -r a8296e22da4e -r 576fb035e263 man/lispref/annotations.texi --- a/man/lispref/annotations.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/annotations.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c Copyright (C) 1995 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/annotations.info @@ -123,10 +123,10 @@ @section Annotation Primitives @defun make-annotation glyph &optional position layout buffer with-event d-glyph rightp -This function creates a marginal annotation at position @var{pos} in +This function creates a marginal annotation at position @var{position} in @var{buffer}. The annotation is displayed using @var{glyph}, which should be a glyph object or a string, and is positioned using layout -policy @var{layout}. If @var{pos} is @code{nil}, point is used. If +policy @var{layout}. If @var{position} is @code{nil}, point is used. If @var{layout} is @code{nil}, @code{whitespace} is used. If @var{buffer} is @code{nil}, the current buffer is used. @@ -180,7 +180,7 @@ @defun annotation-face annotation This function returns the face associated with @var{annotation}. @end defun - + @defun set-annotation-face annotation face This function sets the face associated with @var{annotation} to @var{face}. diff -r a8296e22da4e -r 576fb035e263 man/lispref/backups.texi --- a/man/lispref/backups.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/backups.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/backups.info @node Backups and Auto-Saving, Buffers, Files, Top @@ -78,9 +78,9 @@ @smallexample @group -(add-hook 'rmail-mode-hook +(add-hook 'rmail-mode-hook (function (lambda () - (make-local-variable + (make-local-variable 'make-backup-files) (setq make-backup-files nil)))) @end group @@ -121,7 +121,7 @@ @subsection Backup by Renaming or by Copying? @cindex backup files, how to make them - There are two ways that XEmacs can make a backup file: + There are two ways that XEmacs can make a backup file: @itemize @bullet @item @@ -347,7 +347,7 @@ Some file comparison commands use this function so that they can automatically compare a file with its most recent backup. -@end defun +@end defun @node Auto-Saving @section Auto-Saving @@ -421,7 +421,7 @@ correspondingly. @end defun -@defun make-auto-save-file-name +@defun make-auto-save-file-name &optional filename This function returns the file name to use for auto-saving the current buffer. This is just the file name with hash marks (@samp{#}) appended and prepended to it. This function does not look at the variable @@ -581,7 +581,7 @@ of the file with the @code{revert-buffer} command. @xref{Reverting, , Reverting a Buffer, emacs, The XEmacs Reference Manual}. -@deffn Command revert-buffer &optional check-auto-save noconfirm +@deffn Command revert-buffer &optional check-auto-save noconfirm preserve-modes This command replaces the buffer text with the text of the visited file on disk. This action undoes all changes since the file was visited or saved. @@ -597,6 +597,10 @@ the buffer; but if the argument @var{noconfirm} is non-@code{nil}, @code{revert-buffer} does not ask for confirmation. +Optional third argument @var{preserve-modes} non-@code{nil} means don't +alter the files modes. Normally we reinitialize them using +@code{normal-mode}. + Reverting tries to preserve marker positions in the buffer by using the replacement feature of @code{insert-file-contents}. If the buffer contents and the file contents are identical before the revert diff -r a8296e22da4e -r 576fb035e263 man/lispref/buffers.texi --- a/man/lispref/buffers.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/buffers.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/buffers.info @node Buffers, Windows, Backups and Auto-Saving, Top @@ -13,7 +13,7 @@ exist at one time, exactly one buffer is designated the @dfn{current buffer} at any time. Most editing commands act on the contents of the current buffer. Each buffer, including the current buffer, may or may -not be displayed in any windows. +not be displayed in any window. @menu * Buffer Basics:: What is a buffer? @@ -134,7 +134,7 @@ Finally, @code{insert-buffer-substring} copies the string from the original current buffer to the new current buffer. - If the buffer appended to happens to be displayed in some window, + If the buffer appended to happens to be displayed in some window, the next redisplay will show how its text has changed. Otherwise, you will not see the change immediately on the screen. The buffer becomes current temporarily during the execution of the command, but this does @@ -194,9 +194,9 @@ window, so the user cannot necessarily see the buffer. But Lisp programs can in any case work on it. -This function returns the buffer identified by @var{buffer-or-name}. -An error is signaled if @var{buffer-or-name} does not identify an -existing buffer. +@var{buffer-or-name} must be a buffer or the name of an existing +buffer--else an error is signaled. This function returns the buffer +identified by @var{buffer-or-name}. @end defun @node Buffer Names @@ -265,11 +265,11 @@ @end deffn @defun get-buffer buffer-or-name -This function returns the buffer specified by @var{buffer-or-name}. -If @var{buffer-or-name} is a string and there is no buffer with that -name, the value is @code{nil}. If @var{buffer-or-name} is a buffer, it -is returned as given. (That is not very useful, so the argument is usually -a name.) For example: +This function returns the buffer named @var{buffer-or-name}. If +@var{buffer-or-name} is a string and there is no buffer with that name, +the value is @code{nil}. If @var{buffer-or-name} is actually a buffer, +it is returned as given. (That is not very useful, so the argument is +usually a name.) For example: @example @group @@ -289,8 +289,6 @@ See also the function @code{get-buffer-create} in @ref{Creating Buffers}. @end defun -@c Emacs 19 feature -@c IGNORE is only in XEmacs @defun generate-new-buffer-name starting-name &optional ignore This function returns a name that would be unique for a new buffer---but does not create the buffer. It starts with @var{starting-name}, and @@ -443,9 +441,10 @@ is tested. @end defun -@defun set-buffer-modified-p flag -This function marks the current buffer as modified if @var{flag} is +@defun set-buffer-modified-p flag &optional buffer +This function marks @var{buffer} as modified if @var{flag} is non-@code{nil}, or as unmodified if the flag is @code{nil}. +@var{buffer} defaults to the current buffer. Another effect of calling this function is to cause unconditional redisplay of the modeline for the current buffer. In fact, the @@ -477,7 +476,7 @@ @node Modification Time @section Comparison of Modification Time @cindex comparison of modification time -@cindex modification time, comparison of +@cindex modification time, comparison of Suppose that you visit a file and make changes in its buffer, and meanwhile the file itself is changed on disk. At this point, saving the @@ -545,7 +544,7 @@ Depending on the user's answer, the function may return normally, in which case the modification of the buffer proceeds, or it may signal a @code{file-supersession} error with data @code{(@var{filename})}, in which -case the proposed buffer modification is not allowed. +case the proposed buffer modification is not allowed. This function is called automatically by XEmacs on the proper occasions. It exists so you can customize XEmacs by redefining it. @@ -560,7 +559,7 @@ @cindex buffer, read-only If a buffer is @dfn{read-only}, then you cannot change its contents, -although you may change your view of the contents by scrolling and +although you may change your view of the contents by scrolling and narrowing. Read-only buffers are used in two kinds of situations: @@ -601,18 +600,35 @@ of the list (comparison is done with @code{eq}). @end defvar -@deffn Command toggle-read-only -This command changes whether the current buffer is read-only. It is -intended for interactive use; don't use it in programs. At any given -point in a program, you should know whether you want the read-only flag -on or off; so you can set @code{buffer-read-only} explicitly to the -proper value, @code{t} or @code{nil}. +@deffn Command toggle-read-only &optional arg +This command changes whether the current buffer is read-only. +Interactively, if a prefix arg @var{arg} is supplied, set the current +buffer read only if and only if @var{arg} is positive. + +This command is intended for interactive use only; don't use it in +programs. At any given point in a program, you should know whether you +want the read-only flag on or off; so you can set +@code{buffer-read-only} explicitly to the proper value, @code{t} or +@code{nil}. @end deffn -@defun barf-if-buffer-read-only -This function signals a @code{buffer-read-only} error if the current -buffer is read-only. @xref{Interactive Call}, for another way to -signal an error if the current buffer is read-only. +@defun barf-if-buffer-read-only &optional buffer start end +This function signals a @code{buffer-read-only} error if @var{buffer} is +read-only. @var{buffer} defaults to the current buffer. +@xref{Interactive Call}, for another way to signal an error if the +current buffer is read-only. + +If optional argument @var{start} is non-@code{nil}, all extents in the +buffer which overlap that part of the buffer are checked to ensure none +has a @code{read-only} property. (Extents that lie completely within the +range, however, are not checked.) @var{end} defaults to the value of +@var{start}. + +If @var{start} and @var{end} are equal, the range checked is +[@var{start}, @var{end}] (i.e. closed on both ends); otherwise, the +range checked is (@var{start}, @var{end}) \(open on both ends), except +that extents that lie completely within [@var{start}, @var{end}] are not +checked. See @code{extent-in-region-p} for a fuller discussion. @end defun @node The Buffer List @@ -656,7 +672,7 @@ ;; @r{Note that the name of the minibuffer} ;; @r{begins with a space!} (mapcar (function buffer-name) (buffer-list)) - @result{} ("buffers.texi" " *Minibuf-1*" + @result{} ("buffers.texi" " *Minibuf-1*" "buffer.c" "*Help*" "TAGS") @end group @end example @@ -698,7 +714,6 @@ Note that in FSF Emacs 19, there is no @var{frame} argument, and @var{visible-ok} is the second argument instead of the third. -FSF Emacs 19. @end defun @deffn Command list-buffers &optional files-only @@ -709,7 +724,7 @@ Reference Manual}. It returns @code{nil}. @end deffn -@deffn Command bury-buffer &optional buffer-or-name +@deffn Command bury-buffer &optional buffer-or-name before This function puts @var{buffer-or-name} at the end of the buffer list without changing the order of any of the other buffers on the list. This buffer therefore becomes the least desirable candidate for @@ -821,16 +836,17 @@ whether a buffer has been killed, you can either use this feature or the function @code{buffer-live-p}. -@defun buffer-live-p buffer -This function returns @code{nil} if @var{buffer} is deleted, and -@code{t} otherwise. +@defun buffer-live-p object +This function returns @code{t} if @var{object} is an editor buffer that +has not been deleted, @code{nil} otherwise. @end defun @deffn Command kill-buffer buffer-or-name This function kills the buffer @var{buffer-or-name}, freeing all its memory for use as space for other buffers. (Emacs version 18 and older was unable to return the memory to the operating system.) It returns -@code{nil}. +@code{nil}. The argument @var{buffer-or-name} may be a buffer or the +name of one. Any processes that have this buffer as the @code{process-buffer} are sent the @code{SIGHUP} signal, which normally causes them to terminate. @@ -917,7 +933,7 @@ This creates an indirect buffer named @var{name} whose base buffer is @var{base-buffer}. The argument @var{base-buffer} may be a buffer or a string. - + If @var{base-buffer} is an indirect buffer, its base buffer is used as the base for the new buffer. @@ -946,7 +962,7 @@ @defun buffer-indirect-children &optional buffer This function returns a list of all indirect buffers whose base buffer is @var{buffer}. If @var{buffer} is indirect, the return value will -always be nil; see @code{make-indirect-buffer}. If @var{buffer} is not +always be @code{nil}; see @code{make-indirect-buffer}. If @var{buffer} is not supplied, it defaults to the current buffer. @example diff -r a8296e22da4e -r 576fb035e263 man/lispref/building.texi --- a/man/lispref/building.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/building.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/building.info @node Building XEmacs and Object Allocation, Standard Errors, Tips, Top @@ -127,10 +127,14 @@ your XEmacs process and you'll be sorry. @end defun -@deffn Command emacs-version +@deffn Command emacs-version &optional arg This function returns a string describing the version of XEmacs that is running. It is useful to include this string in bug reports. +When called interactively with a prefix argument, insert string at point. +Don't use this function in programs to choose actions according +to the system configuration; look at @code{system-configuration} instead. + @example @group (emacs-version) @@ -150,7 +154,7 @@ @example @group emacs-build-time "Mon Apr 7 20:28:52 1997" - @result{} + @result{} @end group @end example @end defvar @@ -310,7 +314,7 @@ (@var{used-syms} . @var{free-syms}) @end group (@var{used-markers} . @var{free-markers}) - @var{used-string-chars} + @var{used-string-chars} @var{used-vector-slots} (@var{plist})) @@ -436,6 +440,7 @@ careful when setting @code{gc-cons-threshold} in that case!) @end defopt +@ignore @c Emacs 19 feature @defun memory-limit This function returns the address of the last byte XEmacs has allocated, @@ -445,6 +450,7 @@ You can use this to get a general idea of how your actions affect the memory usage. @end defun +@end ignore @defvar pre-gc-hook This is a normal hook to be run just before each garbage collection. diff -r a8296e22da4e -r 576fb035e263 man/lispref/commands.texi --- a/man/lispref/commands.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/commands.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/commands.info @node Command Loop, Keymaps, Minibuffers, Top @@ -11,7 +11,7 @@ When you run XEmacs, it enters the @dfn{editor command loop} almost immediately. This loop reads events, executes their definitions, and displays the results. In this chapter, we describe how these things -are done, and the subroutines that allow Lisp programs to do them. +are done, and the subroutines that allow Lisp programs to do them. @menu * Command Overview:: How the command loop reads commands. @@ -429,7 +429,7 @@ @node Interactive Examples @subsection Examples of Using @code{interactive} @cindex examples of using @code{interactive} -@cindex @code{interactive}, examples of using +@cindex @code{interactive}, examples of using Here are some examples of @code{interactive}: @@ -487,9 +487,9 @@ reads the arguments and calls the command. You can also call these functions yourself. -@defun commandp object -Returns @code{t} if @var{object} is suitable for calling interactively; -that is, if @var{object} is a command. Otherwise, returns @code{nil}. +@defun commandp function +Returns @code{t} if @var{function} is suitable for calling interactively; +that is, if @var{function} is a command. Otherwise, returns @code{nil}. The interactively callable objects include strings and vectors (treated as keyboard macros), lambda expressions that contain a top-level call to @@ -508,7 +508,7 @@ realistic example of using @code{commandp}. @end defun -@defun call-interactively command &optional record-flag +@defun call-interactively command &optional record-flag keys This function calls the interactively callable function @var{command}, reading arguments according to its interactive calling specifications. An error is signaled if @var{command} is not a function or if it cannot @@ -518,7 +518,7 @@ @c XEmacs feature? If @var{record-flag} is the symbol @code{lambda}, the interactive -calling arguments for @code{command} are read and returned as a list, +calling arguments for @var{command} are read and returned as a list, but the function is not called on them. @cindex record command history @@ -528,7 +528,7 @@ an argument. @xref{Command History}. @end defun -@defun command-execute command &optional record-flag +@defun command-execute command &optional record-flag keys @cindex keyboard macro execution This function executes @var{command} as an editing command. The argument @var{command} must satisfy the @code{commandp} predicate; i.e., @@ -632,7 +632,7 @@ @section Information from the Command Loop The editor command loop sets several Lisp variables to keep status -records for itself and for commands that are run. +records for itself and for commands that are run. @defvar last-command This variable records the name of the previous command executed by the @@ -792,7 +792,7 @@ @xref{Reading Input}. @defun eventp object -This function returns non-@code{nil} if @var{event} is an input event. +This function returns non-@code{nil} if @var{object} is an input event. @end defun @menu @@ -847,7 +847,7 @@ a portion of a frame needing to be redrawn) has occurred. The contents of this event are not accessible at the E-Lisp level, but @code{dispatch-event} knows what to do with an event of this type. - + @item eval event This is a special kind of event specifying that a particular function needs to be called when this event is dispatched. An event of this type @@ -1009,7 +1009,7 @@ This is true if @var{object} is a key-press event. @end defun -@defun button-event-p object object +@defun button-event-p object This is true if @var{object} is a mouse button-press or button-release event. @end defun @@ -1327,7 +1327,7 @@ only for button-press and button-release events. @item @code{modifiers} -The event modifiers. This is a list of modifier symbols. It is allowed +The event modifiers. This is a list of modifier symbols. It is allowed for key-press, button-press, button-release and motion events. @item @code{x} @@ -1430,10 +1430,11 @@ @end defun @defun copy-event event1 &optional event2 -This function makes a copy of the given event object. If a second -argument is given, the first event is copied into the second and the -second is returned. If the second argument is not supplied (or is -@code{nil}) then a new event will be made. +This function makes a copy of the event object @var{event1}. If a +second event argument @var{event2} is given, @var{event1} is copied into +@var{event2} and @var{event2} is returned. If @var{event2} is not +supplied (or is @code{nil}) then a new event will be made, as with +@code{make-event}. @end defun @defun deallocate-event event @@ -1442,7 +1443,7 @@ it. You will lose. It is not necessary to call this function, as event objects are garbage-collected like all other objects; however, it may be more efficient to explicitly deallocate events when you are sure that -that is safe. +it is safe to do so. @end defun @node Converting Events @@ -1452,25 +1453,32 @@ and other ways of representing keys. These are useful when working with @sc{ascii} strings and with keymaps. -@defun character-to-event ch &optional event device -This function converts a numeric @sc{ascii} value to an event structure, -replete with modifier bits. @var{ch} is the character to convert, and +@defun character-to-event key-description &optional event console use-console-meta-flag +This function converts a keystroke description to an event structure. +@var{key-description} is the specification of a key stroke, and @var{event} is the event object to fill in. This function contains knowledge about what the codes ``mean''---for example, the number 9 is converted to the character @key{Tab}, not the distinct character @key{Control-I}. -Note that @var{ch} does not have to be a numeric value, but can be a -symbol such as @code{clear} or a list such as @code{(control -backspace)}. - -If @code{event} is not @code{nil}, it is modified; otherwise, a -new event object is created. In both cases, the event is returned. - -Optional third arg @var{device} is the device to store in the event; -this also affects whether the high bit is interpreted as a meta key. A -value of @code{nil} means use the selected device but always treat the -high bit as meta. +Note that @var{key-description} can be an integer, a character, a symbol +such as @code{clear} or a list such as @code{(control backspace)}. + +If optional arg @var{event} is non-@code{nil}, it is modified; +otherwise, a new event object is created. In both cases, the event is +returned. + +Optional third arg @var{console} is the console to store in the event, +and defaults to the selected console. + +If @var{key-description} is an integer or character, the high bit may be +interpreted as the meta key. (This is done for backward compatibility in +lots of places.) If @var{use-console-meta-flag} is @code{nil}, this +will always be the case. If @var{use-console-meta-flag} is +non-@code{nil}, the @code{meta} flag for @var{console} affects whether +the high bit is interpreted as a meta key. (See @code{set-input-mode}.) +If you don't want this silly meta interpretation done, you should pass +in a list containing the character. Beware that @code{character-to-event} and @code{event-to-character} are not strictly inverse functions, since events contain much more @@ -1540,15 +1548,15 @@ @code{read-key-sequence}; for example, @code{describe-key} uses it to read the key to describe. -@defun read-key-sequence prompt +@defun read-key-sequence prompt &optional continue-echo dont-downcase-last @cindex key sequence This function reads a sequence of keystrokes or mouse clicks and returns -it as a vector of events. It keeps reading events until it has -accumulated a full key sequence; that is, enough to specify a non-prefix -command using the currently active keymaps. - -The vector and the event objects it contains are freshly created, and -will not be side-effected by subsequent calls to this function. +it as a vector of event objects read. It keeps reading events until it +has accumulated a full key sequence; that is, enough to specify a +non-prefix command using the currently active keymaps. + +The vector and the event objects it contains are freshly created (and +so will not be side-effected by subsequent calls to this function). The function @code{read-key-sequence} suppresses quitting: @kbd{C-g} typed while reading with this function works like any other character, @@ -1557,6 +1565,17 @@ The argument @var{prompt} is either a string to be displayed in the echo area as a prompt, or @code{nil}, meaning not to display a prompt. +Second optional arg @var{continue-echo} non-@code{nil} means this key +echoes as a continuation of the previous key. + +Third optional arg @var{dont-downcase-last} non-@code{nil} means do not +convert the last event to lower case. (Normally any upper case event is +converted to lower case if the original event is undefined and the lower +case equivalent is defined.) This argument is provided mostly for +@var{fsf} compatibility; the equivalent effect can be achieved more +generally by binding @code{retry-undefined-key-binding-unshifted} to +@code{nil} around the call to @code{read-key-sequence}. + @c XEmacs feature If the user selects a menu item while we are prompting for a key sequence, the returned value will be a vector of a single menu-selection @@ -1618,7 +1637,7 @@ appropriate. @end defun -@defun next-command-event &optional event +@defun next-command-event &optional event prompt This function returns the next available ``user'' event from the window system or terminal driver. Pass this object to @code{dispatch-event} to handle it. If an event object is supplied, it is filled in and @@ -1745,7 +1764,7 @@ For example, the function that implements numeric prefix arguments reads any number of digits. When it finds a non-digit event, it must unread the event so that it can be read normally by the command loop. -Likewise, incremental search uses this feature to unread events with no +Likewise, incremental search uses this feature to unread events with no special meaning in a search, because these events should exit the search and then execute normally. @@ -1823,7 +1842,7 @@ In the following example, the user may type a number of characters right after starting the evaluation of the form. After the @code{sleep-for} -finishes sleeping, @code{discard-input} discards any characters typed +finishes sleeping, @code{discard-input} discards any characters typed during the sleep. @example @@ -1850,7 +1869,7 @@ value), instead of a single argument that can be either an integer or a float. -@defun sit-for seconds &optional nodisp +@defun sit-for seconds &optional nodisplay This function performs redisplay (provided there is no pending input from the user), then waits @var{seconds} seconds, or until input is available. The result is @code{t} if @code{sit-for} waited the full @@ -1859,15 +1878,6 @@ The argument @var{seconds} need not be an integer. If it is a floating point number, @code{sit-for} waits for a fractional number of seconds. -@ignore FSF Emacs stuff -Some systems support only a whole number of seconds; on these systems, -@var{seconds} is rounded down. - -The optional argument @var{millisec} specifies an additional waiting -period measured in milliseconds. This adds to the period specified by -@var{seconds}. If the system doesn't support waiting fractions of a -second, you get an error if you specify nonzero @var{millisec}. -@end ignore @cindex forcing redisplay Redisplay is normally preempted if input arrives, and does not happen at @@ -1876,7 +1886,7 @@ Screen}.) If there is no input pending, you can force an update with no delay by using @code{(sit-for 0)}. -If @var{nodisp} is non-@code{nil}, then @code{sit-for} does not +If @var{nodisplay} is non-@code{nil}, then @code{sit-for} does not redisplay, but it still returns as soon as input is available (or when the timeout elapses). @@ -1946,7 +1956,7 @@ At the level of C code, quitting cannot happen just anywhere; only at the special places that check @code{quit-flag}. The reason for this is that quitting at other places might leave an inconsistency in XEmacs's -internal state. Because quitting is delayed until a safe place, quitting +internal state. Because quitting is delayed until a safe place, quitting cannot make XEmacs crash. Certain functions such as @code{read-key-sequence} or @@ -1955,7 +1965,7 @@ input. In the case of @code{read-key-sequence}, this serves to bring about the special behavior of @kbd{C-g} in the command loop. In the case of @code{read-quoted-char}, this is so that @kbd{C-q} can be used -to quote a @kbd{C-g}. +to quote a @kbd{C-g}. You can prevent quitting for a portion of a Lisp function by binding the variable @code{inhibit-quit} to a non-@code{nil} value. Then, @@ -2010,7 +2020,7 @@ You can specify a character other than @kbd{C-g} to use for quitting. See the function @code{set-input-mode} in @ref{Terminal Input}. - + @node Prefix Command Arguments @section Prefix Command Arguments @cindex prefix argument @@ -2081,13 +2091,13 @@ C-3 M-x display-prefix @print{} 3 ; @r{(Same as @code{C-u 3}.)} -C-u - M-x display-prefix @print{} - +C-u - M-x display-prefix @print{} - M-- M-x display-prefix @print{} - ; @r{(Same as @code{C-u -}.)} C-- M-x display-prefix @print{} - ; @r{(Same as @code{C-u -}.)} -C-u - 7 M-x display-prefix @print{} -7 +C-u - 7 M-x display-prefix @print{} -7 M-- 7 M-x display-prefix @print{} -7 ; @r{(Same as @code{C-u -7}.)} @@ -2108,9 +2118,9 @@ value of the prefix argument directly in the variable @code{current-prefix-arg}, but this is less clean. -@defun prefix-numeric-value arg +@defun prefix-numeric-value raw This function returns the numeric meaning of a valid raw prefix argument -value, @var{arg}. The argument may be a symbol, a number, or a list. +value, @var{raw}. The argument may be a symbol, a number, or a list. If it is @code{nil}, the value 1 is returned; if it is @code{-}, the value @minus{}1 is returned; if it is a number, that number is returned; if it is a list, the @sc{car} of that list (which should be a number) is @@ -2219,7 +2229,7 @@ Recursive editing levels are also used when you type @kbd{C-r} in @code{query-replace} or use @kbd{C-x q} (@code{kbd-macro-query}). -@defun recursive-edit +@deffn Command recursive-edit @cindex suspend evaluation This function invokes the editor command loop. It is called automatically by the initialization of XEmacs, to let the user begin @@ -2241,17 +2251,17 @@ (simple-rec) @result{} nil @end example -@end defun +@end deffn @deffn Command exit-recursive-edit This function exits from the innermost recursive edit (including minibuffer input). Its definition is effectively @code{(throw 'exit -nil)}. +nil)}. @end deffn @deffn Command abort-recursive-edit This function aborts the command that requested the innermost recursive -edit (including minibuffer input), by signaling @code{quit} +edit (including minibuffer input), by signaling @code{quit} after exiting the recursive edit. Its definition is effectively @code{(throw 'exit t)}. @xref{Quitting}. @end deffn @@ -2394,7 +2404,7 @@ The argument @var{count} is a repeat count; @var{macro} is executed that many times. If @var{count} is omitted or @code{nil}, @var{macro} is executed once. If it is 0, @var{macro} is executed over and over until it -encounters an error or a failing search. +encounters an error or a failing search. @end defun @defvar executing-macro diff -r a8296e22da4e -r 576fb035e263 man/lispref/compile.texi --- a/man/lispref/compile.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/compile.texi Mon Aug 13 11:36:19 2007 +0200 @@ -213,17 +213,23 @@ @end deffn @c flag is not optional in FSF Emacs -@deffn Command byte-recompile-directory directory &optional flag +@deffn Command byte-recompile-directory directory &optional flag norecursion force @cindex library compilation This function recompiles every @samp{.el} file in @var{directory} that needs recompilation. A file needs recompilation if a @samp{.elc} file exists but is older than the @samp{.el} file. +Files in subdirectories of @var{directory} are also processed unless +optional argument @var{norecursion} is non-@code{nil}. + When a @samp{.el} file has no corresponding @samp{.elc} file, then @var{flag} says what to do. If it is @code{nil}, these files are ignored. If it is non-@code{nil}, the user is asked whether to compile each such file. +If the fourth optional argument @var{force} is non-@code{nil}, +recompile every @samp{.el} file that already has a @samp{.elc} file. + The return value of this command is unpredictable. @end deffn @@ -254,7 +260,7 @@ @code{batch-byte-recompile-directory}. @end defvar -@defun byte-code instructions constants stack-size +@defun byte-code instructions constants stack-depth @cindex byte-code interpreter This function actually interprets byte-code. Don't call this function yourself. Only the byte compiler knows how to @@ -451,7 +457,7 @@ The vector of Lisp objects referenced by the byte code. These include symbols used as function names and variable names. -@item stack-size +@item stack-depth The maximum stack size this function needs. @item doc-string @@ -485,7 +491,7 @@ The primitive way to create a compiled-function object is with @code{make-byte-code}: -@defun make-byte-code arglist instructions constants stack-size &optional doc-string interactive +@defun make-byte-code arglist instructions constants stack-depth &optional doc-string interactive This function constructs and returns a compiled-function object with the specified attributes. @@ -522,7 +528,7 @@ compiled-function object @var{function}. @end defun -@defun compiled-function-stack-size function +@defun compiled-function-stack-depth function This function returns the maximum stack size needed by compiled-function object @var{function}. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/consoles-devices.texi --- a/man/lispref/consoles-devices.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/consoles-devices.texi Mon Aug 13 11:36:19 2007 +0200 @@ -90,12 +90,14 @@ in many respects and many functions can operate on either one. @end defun -@defun device-frame-list device +@defun device-frame-list &optional device This function returns a list of all frames on @var{device}. +@var{device} defaults to the currently selected device. @end defun -@defun frame-device frame +@defun frame-device &optional frame This function returns the device that @var{frame} is on. +@var{frame} defaults to the currently selected frame. @end defun @node Console Types and Device Classes @@ -136,16 +138,17 @@ A device that can only display two colors (e.g. black and white). @end table -@defun device-type device +@defun device-type &optional device This function returns the type of @var{device}. This is a symbol whose -name is one of the device types mentioned above. +name is one of the device types mentioned above. @var{device} defaults +to the selected device. @end defun @defun device-or-frame-type device-or-frame This function returns the type of @var{device-or-frame}. @end defun -@defun device-class device +@defun device-class &optional device This function returns the class (color behavior) of @var{device}. This is a symbol whose name is one of the device classes mentioned above. @end defun @@ -168,14 +171,14 @@ @node Connecting to a Console or Device @section Connecting to a Console or Device -@defun make-device &optional type device-data +@defun make-device type connection &optional props This function creates a new device. @end defun The following two functions create devices of specific types and are written in terms of @code{make-device}. -@defun make-tty-device &optional tty terminal-type +@defun make-tty-device &optional tty terminal-type This function creates a new tty device on @var{tty}. This also creates the tty's first frame. @var{tty} should be a string giving the name of a tty device file (e.g. @samp{/dev/ttyp3} under SunOS et al.), as @@ -193,7 +196,7 @@ options. @end defun -@defun delete-device device +@defun delete-device device &optional force This function deletes @var{device}, permanently eliminating it from use. This disconnects XEmacs's connection to the device. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/control.texi --- a/man/lispref/control.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/control.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/control.info @node Control Structures, Variables, Evaluation, Top @@ -152,7 +152,7 @@ non-@code{nil}, @var{then-form} is evaluated and the result returned. Otherwise, the @var{else-forms} are evaluated in textual order, and the value of the last one is returned. (The @var{else} part of @code{if} is -an example of an implicit @code{progn}. @xref{Sequencing}.) +an example of an implicit @code{progn}. @xref{Sequencing}.) If @var{condition} has the value @code{nil}, and no @var{else-forms} are given, @code{if} returns @code{nil}. @@ -163,8 +163,8 @@ @example @group -(if nil - (print 'true) +(if nil + (print 'true) 'very-false) @result{} very-false @end group @@ -226,7 +226,7 @@ never @code{nil}, so this clause never fails, provided the @code{cond} gets to it at all. -For example, +For example, @example @group @@ -360,7 +360,7 @@ @example @group (if @var{arg1} @var{arg1} - (if @var{arg2} @var{arg2} + (if @var{arg2} @var{arg2} @var{arg3})) @end group @end example @@ -581,7 +581,7 @@ @end group @group -(catch 'hack +(catch 'hack (print (catch2 'hack)) 'no) @print{} yes @@ -664,48 +664,161 @@ buffer; you can also signal errors explicitly with the functions @code{error}, @code{signal}, and others. - Quitting, which happens when the user types @kbd{C-g}, is not + Quitting, which happens when the user types @kbd{C-g}, is not considered an error, but it is handled almost like an error. @xref{Quitting}. -@defun error format-string &rest args -This function signals an error with an error message constructed by -applying @code{format} (@pxref{String Conversion}) to -@var{format-string} and @var{args}. +XEmacs has a rich hierarchy of error symbols predefined via @code{deferror}. + +@example +error + syntax-error + invalid-read-syntax + list-formation-error + malformed-list + malformed-property-list + circular-list + circular-property-list + + invalid-argument + wrong-type-argument + args-out-of-range + wrong-number-of-arguments + invalid-function + no-catch + + invalid-state + void-function + cyclic-function-indirection + void-variable + cyclic-variable-indirection + + invalid-operation + invalid-change + setting-constant + editing-error + beginning-of-buffer + end-of-buffer + buffer-read-only + io-error + end-of-file + arith-error + range-error + domain-error + singularity-error + overflow-error + underflow-error +@end example + +The five most common errors you will probably use or base your new +errors off of are @code{syntax-error}, @code{invalid-argument}, +@code{invalid-state}, @code{invalid-operation}, and +@code{invalid-change}. Note the semantic differences: + +@itemize @bullet +@item +@code{syntax-error} is for errors in complex structures: parsed strings, +lists, and the like. + +@item +@code{invalid-argument} is for errors in a simple value. Typically, the +entire value, not just one part of it, is wrong. + +@item +@code{invalid-state} means that some settings have been changed in such +a way that their current state is unallowable. More and more, code is +being written more carefully, and catches the error when the settings +are being changed, rather than afterwards. This leads us to the next +error: + +@item +@code{invalid-change} means that an attempt is being made to change some +settings into an invalid state. @code{invalid-change} is a type of +@code{invalid-operation}. + +@item +@code{invalid-operation} refers to all cases where code is trying to do +something that's disallowed. This includes file errors, buffer errors +(e.g. running off the end of a buffer), @code{invalid-change} as just +mentioned, and arithmetic errors. +@end itemize + +@defun error datum &rest args +This function signals a non-continuable error. + +@var{datum} should normally be an error symbol, i.e. a symbol defined +using @code{define-error}. @var{args} will be made into a list, and +@var{datum} and @var{args} passed as the two arguments to @code{signal}, +the most basic error handling function. This error is not continuable: you cannot continue execution after the -error using the debugger @kbd{r} or @kbd{c} commands. If you wish the -user to be able to continue execution, use @code{cerror} or -@code{signal} instead. +error using the debugger @kbd{r} command. See also @code{cerror}. + +The correct semantics of @var{args} varies from error to error, but for +most errors that need to be generated in Lisp code, the first argument +should be a string describing the *context* of the error (i.e. the exact +operation being performed and what went wrong), and the remaining +arguments or \"frobs\" (most often, there is one) specify the offending +object(s) and/or provide additional details such as the exact error when +a file error occurred, e.g.: + +@itemize @bullet +@item +the buffer in which an editing error occurred. +@item +an invalid value that was encountered. (In such cases, the string +should describe the purpose or \"semantics\" of the value [e.g. if the +value is an argument to a function, the name of the argument; if the value +is the value corresponding to a keyword, the name of the keyword; if the +value is supposed to be a list length, say this and say what the purpose +of the list is; etc.] as well as specifying why the value is invalid, if +that's not self-evident.) +@item +the file in which an error occurred. (In such cases, there should be a +second frob, probably a string, specifying the exact error that occurred. +This does not occur in the string that precedes the first frob, because +that frob describes the exact operation that was happening. +@end itemize + +For historical compatibility, DATUM can also be a string. In this case, +@var{datum} and @var{args} are passed together as the arguments to +@code{format}, and then an error is signalled using the error symbol +@code{error} and formatted string. Although this usage of @code{error} +is very common, it is deprecated because it totally defeats the purpose +of having structured errors. There is now a rich set of defined errors +to use. + +See also @code{cerror}, @code{signal}, and @code{signal-error}." These examples show typical uses of @code{error}: @example @group -(error "You have committed an error. +(error 'syntax-error + "Dialog descriptor must supply at least one button" + descriptor) +@end group + +@group +(error "You have committed an error. Try something else.") - @error{} You have committed an error. + @error{} You have committed an error. Try something else. @end group @group (error "You have committed %d errors." 10) - @error{} You have committed 10 errors. + @error{} You have committed 10 errors. @end group @end example -@code{error} works by calling @code{signal} with two arguments: the -error symbol @code{error}, and a list containing the string returned by -@code{format}. This is repeated in an endless loop, to ensure that -@code{error} never returns. - If you want to use your own string as an error message verbatim, don't just write @code{(error @var{string})}. If @var{string} contains @samp{%}, it will be interpreted as a format specifier, with undesirable results. Instead, use @code{(error "%s" @var{string})}. @end defun -@defun cerror format-string &rest args +@defun cerror datum &rest args This function behaves like @code{error}, except that the error it signals is continuable. That means that debugger commands @kbd{c} and @kbd{r} can resume execution. @@ -966,9 +1079,9 @@ @smallexample @group (defun safe-divide (dividend divisor) - (condition-case err + (condition-case err ;; @r{Protected form.} - (/ dividend divisor) + (/ dividend divisor) ;; @r{The handler.} (arith-error ; @r{Condition.} (princ (format "Arithmetic error: %s" err)) @@ -1011,7 +1124,7 @@ ;; @r{This is a call to the function @code{error}.} (error "Rats! The variable %s was %s, not 35" 'baz baz)) ;; @r{This is the handler; it is not a form.} - (error (princ (format "The error was: %s" err)) + (error (princ (format "The error was: %s" err)) 2)) @print{} The error was: (error "Rats! The variable baz was 34, not 35") @result{} 2 @@ -1119,7 +1232,7 @@ when you write an error handler. Using error symbols alone would eliminate all but the narrowest level of classification. - + @xref{Standard Errors}, for a list of all the standard error symbols and their conditions. diff -r a8296e22da4e -r 576fb035e263 man/lispref/customize.texi --- a/man/lispref/customize.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/customize.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1997, 1998 Free Software Foundation, Inc. +@c Copyright (C) 1997, 1998 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../info/customize @node Customization, , , Top @@ -13,8 +13,8 @@ @menu * Common Keywords:: -* Group Definitions:: -* Variable Definitions:: +* Group Definitions:: +* Variable Definitions:: * Customization Types:: @end menu @@ -627,7 +627,7 @@ keyword. @item %% -Display a literal @samp{%}. +Display a literal @samp{%}. @end table @item :action @var{action} @@ -710,7 +710,7 @@ representation of the @code{:value} property if not. @item :validate -A function which takes a widget as an argument, and return nil if the +A function which takes a widget as an argument, and returns @code{nil} if the widgets current value is valid for the widget. Otherwise, it should return the widget containing the invalid data, and set that widgets @code{:error} property to a string explaining the error. @@ -727,7 +727,7 @@ @item Widgets with tabbing order @code{-1} are ignored. -@item +@item (Unimplemented) When on a widget with tabbing order @var{n}, go to the next widget in the buffer with tabbing order @var{n+1} or @code{nil}, whichever comes first. diff -r a8296e22da4e -r 576fb035e263 man/lispref/databases.texi --- a/man/lispref/databases.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/databases.texi Mon Aug 13 11:36:19 2007 +0200 @@ -35,58 +35,58 @@ For a @var{type} of @code{'berkeley-db}, the following subtypes are available: @code{'hash}, @code{'btree}, and @code{'recno}. See the -manpages for the Berkeley DB functions for more information about these +manpages for the Berkeley DB functions for more information about these types. @end defun -@defun close-database obj -This function closes database @var{obj}. +@defun close-database database +This function closes database @var{database}. @end defun -@defun database-live-p obj -This function returns @code{t} iff @var{obj} is an active database, else +@defun database-live-p object +This function returns @code{t} if @var{object} is an active database, else @code{nil}. @end defun @node Working With a Database @section Working With a Database -@defun get-database key dbase &optional default +@defun get-database key database &optional default This function finds the value for @var{key} in @var{database}. If there is no corresponding value, @var{default} is returned (@code{nil} if @var{default} is omitted). @end defun -@defun map-database function dbase +@defun map-database function database This function maps @var{function} over entries in @var{database}, calling it with two args, each key and value in the database. @end defun -@defun put-database key val dbase &optional replace -This function stores @var{key} and @var{val} in @var{database}. If -optional fourth arg @var{replace} is non-@code{nil}, replace any +@defun put-database key value database &optional replace +This function stores @var{key} and @var{value} in @var{database}. +If optional fourth arg @var{replace} is non-@code{nil}, replace any existing entry in the database. @end defun -@defun remove-database key dbase +@defun remove-database key database This function removes @var{key} from @var{database}. @end defun @node Other Database Functions @section Other Database Functions -@defun database-file-name obj -This function returns the filename associated with the database @var{obj}. +@defun database-file-name database +This function returns the filename associated with @var{database}. @end defun -@defun database-last-error &optional obj -This function returns the last error associated with database @var{obj}. +@defun database-last-error &optional database +This function returns the last error associated with @var{database}. @end defun -@defun database-subtype obj -This function returns the subtype of database @var{obj}, if any. +@defun database-subtype database +This function returns the subtype of @var{database}, if any. @end defun -@defun database-type obj -This function returns the type of database @var{obj}. +@defun database-type database +This function returns the type of @var{database}. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/debugging.texi --- a/man/lispref/debugging.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/debugging.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/debugging.info @node Debugging, Read and Print, Byte Compilation, Top @@ -232,7 +232,7 @@ @end example @end deffn -@deffn Command cancel-debug-on-entry function-name +@deffn Command cancel-debug-on-entry &optional function-name This function undoes the effect of @code{debug-on-entry} on @var{function-name}. When called interactively, it prompts for @var{function-name} in the minibuffer. If @var{function-name} is diff -r a8296e22da4e -r 576fb035e263 man/lispref/dialog.texi --- a/man/lispref/dialog.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/dialog.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/dialog.info @node Dialog Boxes, Toolbar, Menus, Top diff -r a8296e22da4e -r 576fb035e263 man/lispref/display.texi --- a/man/lispref/display.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/display.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/display.info @node Display, Hash Tables, Annotations, Top @@ -30,9 +30,14 @@ The function @code{redraw-frame} redisplays the entire contents of a given frame. @xref{Frames}. -@c Emacs 19 feature -@defun redraw-frame frame +@defun redraw-frame &optional frame no-preempt This function clears and redisplays frame @var{frame}. + +@var{frame} defaults to the selected frame if omitted. + +Normally, redisplay is preempted as normal if input arrives. However, +if optional second arg @var{no-preempt} is non-@code{nil}, redisplay +will not stop for input and is guaranteed to proceed to completion. @end defun Even more powerful is @code{redraw-display}: @@ -72,9 +77,9 @@ @code{next-event} or @code{sit-for} is called; however, a display update will not occur if there is input pending. @xref{Command Loop}. -@defun force-cursor-redisplay -This function causes an immediate update of the cursor on the selected -frame. (This function does not exist in FSF Emacs.) +@defun force-cursor-redisplay &optional frame +This function causes an immediate update of the cursor on @var{frame}, +which defaults to the selected frame. @end defun @node Truncation @@ -216,16 +221,16 @@ @item @code{progress}---progress indicators like @samp{Converting... 45%} (not logged by default); -@item @code{prompt}---prompt-like messages like @samp{Isearch: foo} (not +@item @code{prompt}---prompt-like messages like @samp{Isearch: foo} (not logged by default); -@item @code{command}---helper command messages like @samp{Mark set} (not +@item @code{command}---helper command messages like @samp{Mark set} (not logged by default); @item @code{no-log}---messages that should never be logged @end itemize -Several messages may be stacked in the echo area at once. Lisp programs +Several messages may be stacked in the echo area at once. Lisp programs may access these messages, or remove them as appropriate, via the message stack. @@ -273,7 +278,7 @@ If a message remains at the head of the message-stack and @var{no-restore} is @code{nil}, it will be displayed. The string which remains in the echo area will be returned, or @code{nil} if the -message-stack is now empty. If @var{label} is nil, the entire +message-stack is now empty. If @var{label} is @code{nil}, the entire message-stack is cleared. @example @@ -554,7 +559,7 @@ @defvar selective-display This buffer-local variable enables selective display. This means that -lines, or portions of lines, may be made invisible. +lines, or portions of lines, may be made invisible. @itemize @bullet @item @@ -823,7 +828,7 @@ good results, but the default is 1, which works on all systems. @end defvar -@defun blink-matching-open +@deffn Command blink-matching-open This function is the default value of @code{blink-paren-function}. It assumes that point follows a character with close parenthesis syntax and moves the cursor momentarily to the matching opening character. If that @@ -836,9 +841,6 @@ @smallexample @group (defun interactive-blink-matching-open () -@c Do not break this line! -- rms. -@c The first line of a doc string -@c must stand alone. "Indicate momentarily the start of sexp before point." (interactive) @end group @@ -849,7 +851,7 @@ (blink-matching-open))) @end group @end smallexample -@end defun +@end deffn @node Usual Display @section Usual Display Conventions diff -r a8296e22da4e -r 576fb035e263 man/lispref/dragndrop.texi --- a/man/lispref/dragndrop.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/dragndrop.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,7 +1,7 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. @c Copyright (C) 1998 Oliver Graf -@c Original reference is (c) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Original reference is (c) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/dragndrop.texi @node Drag and Drop, Modes, Scrollbars, Top @@ -57,10 +57,10 @@ the feature 'offix is defined. Unfortunately it uses it's own data types. Examples are: File, Files, -Exe, Link, URL, MIME. The API tries to choose the right type for the data that +Exe, Link, URL, MIME. The API tries to choose the right type for the data that is dragged from XEmacs (well, not yet...). -XEmacs supports both MIME and URL drags and drops using this API. No application +XEmacs supports both MIME and URL drags and drops using this API. No application interaction is possible while dragging is in progress. For information about the OffiX project have a look at http://leb.net/~offix/ @@ -107,7 +107,7 @@ This misc-user-event has its function argument set to @code{dragdrop-drop-dispatch} and the object contains the data of the drop (converted to URL/MIME specific data). This function will search the variable -@code{experimental-dragdrop-drop-functions} for a function that can handle the +@code{experimental-dragdrop-drop-functions} for a function that can handle the dropped data. To modify the drop behavior, the user can modify the variable @@ -118,7 +118,7 @@ variable. The customization group @code{drag-n-drop} shows all variables of user -interest. +interest. @node Drag Interface @section Drag Interface diff -r a8296e22da4e -r 576fb035e263 man/lispref/edebug-inc.texi --- a/man/lispref/edebug-inc.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/edebug-inc.texi Mon Aug 13 11:36:19 2007 +0200 @@ -22,10 +22,10 @@ @item Display expression results and evaluate expressions as if outside of -Edebug. Interface with the custom printing package +Edebug. Interface with the custom printing package for printing circular structures. -@item +@item Automatically reevaluate a list of expressions and display their results each time Edebug updates the display. @@ -108,7 +108,7 @@ @cindex stop points The places within a function where Edebug can stop execution are called @dfn{stop points}. These occur both before and after each subexpression -that is a list, and also after each variable reference. +that is a list, and also after each variable reference. Here we show with periods the stop points found in the function @code{fac}: @@ -134,7 +134,7 @@ @end example When Edebug stops execution after an expression, it displays the -expression's value in the echo area. +expression's value in the echo area. Other frequently used commands are @kbd{b} to set a breakpoint at a stop point, @kbd{g} to execute until a breakpoint is reached, and @kbd{q} to @@ -190,7 +190,7 @@ @file{my-package.el}. @example -(add-hook 'edebug-setup-hook +(add-hook 'edebug-setup-hook (function (lambda () (require 'my-specs)))) @end example @@ -288,7 +288,7 @@ When you enter a new Edebug level, the initial execution mode comes from the value of the variable @code{edebug-initial-mode}. By default, this specifies @code{step} mode. Note that you may reenter the same Edebug -level several times if, for example, an instrumented function is called +level several times if, for example, an instrumented function is called several times from one command. While executing or tracing, you can interrupt the execution by typing @@ -342,7 +342,7 @@ @item o Continue ``out of'' an expression (@code{edebug-step-out}). It places a -temporary breakpoint at the end of the sexp containing point. +temporary breakpoint at the end of the sexp containing point. If the containing sexp is a function definition itself, it continues until just before the last sexp in the definition. If that is where you @@ -410,7 +410,7 @@ From the Edebug recursive edit, you may invoke commands that activate Edebug again recursively. Any time Edebug is active, you can quit to the top level with @kbd{q} or abort one recursive edit level with -@kbd{C-]}. You can display a backtrace of all the +@kbd{C-]}. You can display a backtrace of all the pending evaluations with @kbd{d}. @@ -479,7 +479,7 @@ command does not continue execution---it just moves point in the buffer. @menu -* Global Break Condition:: Breaking on an event. +* Global Break Condition:: Breaking on an event. * Embedded Breakpoints:: Embedding breakpoints in code. @end menu @@ -495,7 +495,7 @@ stop point. If it evaluates to a non-@code{nil} value, then execution is stopped or paused depending on the execution mode, just like a breakpoint. Any errors that might occur as a result of evaluating the -condition are ignored, as if the result were @code{nil}. +condition are ignored, as if the result were @code{nil}. @findex edebug-set-global-break-condition @vindex edebug-global-break-condition @@ -831,7 +831,7 @@ @findex edebug-print-trace-before @findex edebug-print-trace-after -If the variable @code{edebug-trace} is non-nil, each function entry and +If the variable @code{edebug-trace} is non-@code{nil}, each function entry and exit adds lines to the trace buffer. On function entry, Edebug prints @samp{::::@{} followed by the function name and argument values. On function exit, Edebug prints @samp{::::@}} followed by the function name @@ -903,13 +903,13 @@ @example (defun fac (n) (if (= n 0) (edebug)) -;#6 1 0 =5 +;#6 1 0 =5 (if (< 0 n) -;#5 = +;#5 = (* n (fac (1- n))) -;# 5 0 +;# 5 0 1)) -;# 0 +;# 0 @end example The comment lines show that @code{fac} has been called 6 times. The @@ -945,12 +945,12 @@ action, it needs to save and restore certain data. @itemize @bullet -@item +@item @code{max-lisp-eval-depth} and @code{max-specpdl-size} are both incremented one time to reduce Edebug's impact on the stack. You could, however, still run out of stack space when using Edebug. -@item +@item The state of keyboard macro execution is saved and restored. While Edebug is active, @code{executing-macro} is bound to @code{edebug-continue-kbd-macro}. @@ -978,19 +978,19 @@ error or quit signal occurs. @itemize @bullet -@item +@item @cindex current buffer point and mark (Edebug) Which buffer is current, and where point and mark are in the current buffer are saved and restored. -@item +@item @cindex window configuration (Edebug) @findex save-excursion (Edebug) @vindex edebug-save-windows The Edebug Display Update, is saved and restored if @code{edebug-save-windows} is non-@code{nil}. It is not restored on error or quit, but the outside selected window @emph{is} reselected even -on error or quit in case a @code{save-excursion} is active. +on error or quit in case a @code{save-excursion} is active. If the value of @code{edebug-save-windows} is a list, only the listed windows are saved and restored. @@ -1007,7 +1007,7 @@ @code{overlay-arrow-string} are saved and restored. So you can safely invoke Edebug from the recursive edit elsewhere in the same buffer. -@item +@item @code{cursor-in-echo-area} is locally bound to @code{nil} so that the cursor shows up in the window. @@ -1055,7 +1055,7 @@ by the @code{recursive-edit}, but Edebug temporarily restores them during evaluations. -@item +@item The state of keyboard macro definition is saved and restored. While Edebug is active, @code{defining-kbd-macro} is bound to @code{edebug-continue-kbd-macro}. @@ -1074,7 +1074,7 @@ the format of macro call arguments by using @code{def-edebug-spec} to define an @dfn{Edebug specification} for each macro. -@deffn Macro def-edebug-spec macro specification +@defmac def-edebug-spec macro specification Specify which expressions of a call to macro @var{macro} are forms to be evaluated. For simple macros, the @var{specification} often looks very similar to the formal argument list of the macro definition, but @@ -1086,7 +1086,7 @@ Unless you are using Emacs 19 or XEmacs, this macro is only defined in Edebug, so you may want to use the following which is equivalent: @code{(put '@var{macro} 'edebug-form-spec '@var{specification})} -@end deffn +@end defmac Here is a simple example that defines the specification for the @code{for} macro described in the XEmacs Lisp Reference Manual, followed @@ -1194,7 +1194,7 @@ @item &optional @cindex &optional (Edebug) All following elements in the specification list are optional; as soon -as one does not match, Edebug stops matching at this level. +as one does not match, Edebug stops matching at this level. To make just a few elements optional followed by non-optional elements, use @code{[&optional @var{specs}@dots{}]}. To specify that several @@ -1229,7 +1229,7 @@ of them match, nothing is matched, but the @code{¬} specification succeeds. -@item &define +@item &define @cindex &define (Edebug) Indicates that the specification is for a defining form. The defining form itself is not instrumented (i.e. Edebug does not stop before and @@ -1243,7 +1243,7 @@ @table @code @item name -The argument, a symbol, is the name of the defining form. +The argument, a symbol, is the name of the defining form. But a defining form need not be named at all, in which case a unique name will be created for it. @@ -1442,7 +1442,7 @@ arguments must use @code{def-form} instead of @code{form}. (This is to reestablish the Edebugging context for those external forms.) -For example, the @code{for} macro +For example, the @code{for} macro @c (@pxref{Problems with Macros}) @c in XEmacs Lisp Reference Manual (@pxref{Problems with Macros,,,, XEmacs Lisp Reference Manual}) @c Edebug Doc is shown here but with @code{edebug-`} @@ -1517,8 +1517,8 @@ @example (def-edebug-spec defmacro defun) ; @r{Indirect ref to @code{defun} spec} -(def-edebug-spec defun - (&define name lambda-list +(def-edebug-spec defun + (&define name lambda-list [&optional stringp] ; @r{Match the doc string, if present.} [&optional ("interactive" interactive)] def-body)) @@ -1594,7 +1594,7 @@ @code{nil}. If the value is a list, only the listed windows are saved and -restored. +restored. @kbd{M-x edebug-toggle-save-windows} may be used to change this variable. This command is bound to @kbd{W} in source code buffers. @@ -1621,7 +1621,7 @@ @code{step}, @code{next}, @code{go}, @code{Go-nonstop}, @code{trace}, @code{Trace-fast}, @code{continue}, and @code{Continue-fast}. -The default value is @code{step}. +The default value is @code{step}. See @ref{Edebug Execution Modes}. @end defopt @@ -1630,15 +1630,15 @@ @findex edebug-print-trace-after Non-@code{nil} means display a trace of function entry and exit. Tracing output is displayed in a buffer named @samp{*edebug-trace*}, one -function entry or exit per line, indented by the recursion level. +function entry or exit per line, indented by the recursion level. -The default value is @code{nil}. +The default value is @code{nil}. Also see @code{edebug-tracing}. See @ref{Tracing}. @end defopt -@defopt edebug-test-coverage +@defopt edebug-test-coverage If non-@code{nil}, Edebug tests coverage of all expressions debugged. This is done by comparing the result of each expression with the previous result. Coverage is considered OK if two different @@ -1651,7 +1651,7 @@ See @ref{Coverage Testing}. @end defopt -@defopt edebug-continue-kbd-macro +@defopt edebug-continue-kbd-macro If non-@code{nil}, continue defining or executing any keyboard macro that is executing outside of Edebug. Use this with caution since it is not debugged. @@ -1664,12 +1664,12 @@ See @ref{Printing in Edebug}. @end defopt -@defopt edebug-print-level +@defopt edebug-print-level If non-@code{nil}, bind @code{print-level} to this while printing results in Edebug. The default value is @code{50}. @end defopt -@defopt edebug-print-circle +@defopt edebug-print-circle If non-@code{nil}, bind @code{print-circle} to this while printing results in Edebug. The default value is @code{nil}. @end defopt @@ -1694,6 +1694,6 @@ @defopt edebug-global-break-condition If non-@code{nil}, an expression to test for at every stop point. -If the result is non-nil, then break. Errors are ignored. +If the result is non-@code{nil}, then break. Errors are ignored. See @ref{Global Break Condition}. @end defopt diff -r a8296e22da4e -r 576fb035e263 man/lispref/edebug.texi --- a/man/lispref/edebug.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/edebug.texi Mon Aug 13 11:36:19 2007 +0200 @@ -149,7 +149,7 @@ There is a bug in window updating when there is both a trace buffer and an evaluation list - the source buffer doesn't get displayed. -@item +@item Killing and reinserting an instrumented definition or parts of it leaves marks in the buffer which may confuse Edebug later. @@ -170,7 +170,7 @@ There are no other known bugs, so if you find any, please let me know. There is nothing worse than a buggy debugger! -@item +@item I need to rethink locally binding @code{debug-on-error}, @code{debug-on-quit}, and keyboard macro state variables. Should we allow the global values to be changed by the user? @@ -208,7 +208,7 @@ Better integration with standard debug. @item -Use @code{inhibit-quit} while edebugging? +Use @code{inhibit-quit} while edebugging? @item Crawl mode would @code{sit-for} 0 or 1 in the outside window configuration diff -r a8296e22da4e -r 576fb035e263 man/lispref/errors.texi --- a/man/lispref/errors.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/errors.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/errors.info @node Standard Errors, Standard Buffer-Local Variables, Building XEmacs and Object Allocation, Top @@ -75,7 +75,7 @@ condition @code{file-error} is present.@* @xref{Files}. -@item file-locked +@item file-locked This is a @code{file-error}.@* @xref{File Locks}. @@ -128,7 +128,7 @@ @xref{Searching and Matching}. @item setting-constant -@code{"Attempt to set a constant symbol"}@* +@code{"Attempt to set a constant symbol"}@* @xref{Constant Variables, , Variables that Never Change}. @c XEmacs feature diff -r a8296e22da4e -r 576fb035e263 man/lispref/eval.texi --- a/man/lispref/eval.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/eval.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/eval.info @node Evaluation, Control Structures, Symbols, Top @@ -30,7 +30,7 @@ @section Introduction to Evaluation The Lisp interpreter, or evaluator, is the program that computes -the value of an expression that is given to it. When a function +the value of an expression that is given to it. When a function written in Lisp is called, the evaluator computes the value of the function by evaluating the expressions in the function body. Thus, running any Lisp program really means running the Lisp interpreter. @@ -433,7 +433,7 @@ @smallexample @group ((lambda (arg) (erste arg)) - '(1 2 3)) + '(1 2 3)) @result{} 1 @end group @end smallexample @@ -445,12 +445,11 @@ The built-in function @code{indirect-function} provides an easy way to perform symbol function indirection explicitly. -@c Emacs 19 feature -@defun indirect-function function -This function returns the meaning of @var{function} as a function. If -@var{function} is a symbol, then it finds @var{function}'s function -definition and starts over with that value. If @var{function} is not a -symbol, then it returns @var{function} itself. +@defun indirect-function object +This function returns the meaning of @var{object} as a function. If +@var{object} is a symbol, then it finds @var{object}'s function +definition and starts over with that value. If @var{object} is not a +symbol, then it returns @var{object} itself. Here is how you could define @code{indirect-function} in Lisp: diff -r a8296e22da4e -r 576fb035e263 man/lispref/extents.texi --- a/man/lispref/extents.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/extents.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c Copyright (C) 1996 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/extents.info @@ -108,16 +108,16 @@ @node Creating and Modifying Extents @section Creating and Modifying Extents -@defun make-extent from to &optional object +@defun make-extent from to &optional buffer-or-string This function makes an extent for the range [@var{from}, @var{to}) in -@var{object} (a buffer or string). @var{object} defaults to the current -buffer. Insertions at point @var{to} will be outside of the extent; -insertions at @var{from} will be inside the extent, causing the extent -to grow (@pxref{Extent Endpoints}). This is the same way that markers -behave. The extent is initially detached if both @var{from} and -@var{to} are @code{nil}, and in this case @var{object} defaults to -@code{nil}, meaning the extent is in no buffer or string -(@pxref{Detached Extents}). +@var{buffer-or-string} (a buffer or string). @var{buffer-or-string} +defaults to the current buffer. Insertions at point @var{to} will be +outside of the extent; insertions at @var{from} will be inside the +extent, causing the extent to grow (@pxref{Extent Endpoints}). This is +the same way that markers behave. The extent is initially detached if +both @var{from} and @var{to} are @code{nil}, and in this case +@var{buffer-or-string} defaults to @code{nil}, meaning the extent is in +no buffer or string (@pxref{Detached Extents}). @end defun @defun delete-extent extent @@ -135,9 +135,9 @@ @code{nil}. @end defun -@defun extent-live-p extent -This function returns @code{nil} if @var{extent} is deleted, and -@code{t} otherwise. +@defun extent-live-p object +This function returns @code{t} if @var{object} is an extent that has not +been deleted, and @code{nil} otherwise. @end defun @node Extent Endpoints @@ -231,7 +231,7 @@ this section, keep in mind the way that extents are ordered (@pxref{Extent Endpoints}). -@defun extent-list &optional buffer-or-string from to flags +@defun extent-list &optional buffer-or-string from to flags property value This function returns a list of the extents in @var{buffer-or-string}. @var{buffer-or-string} defaults to the current buffer if omitted. @var{from} and @var{to} can be used to limit the range over which @@ -245,10 +245,19 @@ @var{flags} controls how end cases are treated. For a discussion of this, and exactly what ``overlap'' means, see @code{map-extents}. + +The optional arguments @var{property} and @var{value} can be used to +further restrict which extents are returned. They have the same meaning +as for @code{map-extents}. + +If you want to map a function over the extents in a buffer or string, +consider using @code{map-extents} or @code{mapcar-extents} instead. + +See also the function @code{extents-at}. @end defun Functions that create extents must be prepared for the possibility -that there are other extents in the same area, created by other +that there are other extents in the same area, created by other functions. To deal with this, functions typically mark their own extents by setting a particular property on them. The following function makes it easier to locate those extents. @@ -326,8 +335,8 @@ @var{function} is called with the arguments (extent, @var{maparg}). The arguments @var{object}, @var{from}, @var{to}, @var{maparg}, and @var{flags} are all optional and default to the current buffer, the -beginning of @var{object}, the end of @var{object}, @var{nil}, and -@var{nil}, respectively. @code{map-extents} returns the first +beginning of @var{object}, the end of @var{object}, @code{nil}, and +@code{nil}, respectively. @code{map-extents} returns the first non-@code{nil} result produced by @var{function}, and no more calls to @var{function} are made after it returns non-@code{nil}. @@ -436,7 +445,7 @@ @end defun @defun extent-in-region-p extent &optional from to flags -This function returns @var{t} if @code{map-extents} would visit +This function returns @code{t} if @code{map-extents} would visit @var{extent} if called with the given arguments. @end defun @@ -463,9 +472,9 @@ has a parent), and setting a property of the extent actually sets that property on the parent. @xref{Extent Parents}. -@defun extent-property extent property -This function returns the value of @var{property} in @var{extent}. If -@var{property} is undefined, @code{nil} is returned. +@defun extent-property extent property &optional default +This function returns @var{extent}'s value for @var{property}, or +@var{default} if no such property exists. @end defun @defun extent-properties extent @@ -669,9 +678,9 @@ The following convenience functions are provided for setting particular properties of an extent. -@defun set-extent-priority extent pri +@defun set-extent-priority extent priority This function sets the @code{priority} property of @var{extent} to -@var{pri}. +@var{priority}. @end defun @defun set-extent-face extent face @@ -713,7 +722,7 @@ @end defun @defun set-extent-initial-redisplay-function extent function -This function sets the @code{initial-redisplay-function} property of the +This function sets the @code{initial-redisplay-function} property of the extent to @var{function}. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/faces.texi --- a/man/lispref/faces.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/faces.texi Mon Aug 13 11:36:19 2007 +0200 @@ -127,16 +127,18 @@ @end defun @defun facep object -This function returns whether the given object is a face. +This function returns @code{t} if @var{object} is a face, else @code{nil}. @end defun -@defun copy-face old-face new-name &optional locale how-to-add +@defun copy-face old-face new-name &optional locale tag-set exact-p how-to-add This function defines a new face named @var{new-name} which is a copy of the existing face named @var{old-face}. If there is already a face named @var{new-name}, then it alters the face to have the same -properties as @var{old-face}. @var{locale} and @var{how-to-add} -let you copy just parts of the old face rather than the whole face, -and are as in @code{copy-specifier} (@pxref{Specifiers}). +properties as @var{old-face}. + +@var{locale}, @var{tag-set}, @var{exact-p} and @var{how-to-add} let you +copy just parts of the old face rather than the whole face, and are as +in @code{copy-specifier} (@pxref{Specifiers}). @end defun @node Face Properties @@ -187,7 +189,7 @@ locale-specific values. @end table -@defun set-face-property face property value &optional locale tag how-to-add +@defun set-face-property face property value &optional locale tag-set how-to-add This function changes a property of a @var{face}. For built-in properties, the actual value of the property is a specifier @@ -248,7 +250,7 @@ specifier. @end defun -@defun remove-face-property face property &optional local tag-set exact-p +@defun remove-face-property face property &optional locale tag-set exact-p This function removes a property of a @var{face}. For built-in properties, this is analogous to @code{remove-specifier}. @@ -263,7 +265,7 @@ automatically. @end defun -@defun face-property face property &optional locale +@defun face-property face property &optional locale tag-set exact-p This function returns @var{face}'s value of the given @var{property}. If @var{locale} is omitted, the @var{face}'s actual value for @@ -354,15 +356,15 @@ @node Face Convenience Functions @subsection Face Convenience Functions -@defun set-face-foreground face color &optional locale tag how-to-add -@defunx set-face-background face color &optional locale tag how-to-add +@deffn Command set-face-foreground face color &optional locale tag-set how-to-add +@deffnx Command set-face-background face color &optional locale tag-set how-to-add These functions set the foreground (respectively, background) color of face @var{face} to @var{color}. The argument @var{color} should be a string (the name of a color) or a color object as returned by @code{make-color} (@pxref{Colors}). -@end defun +@end deffn -@defun set-face-background-pixmap face pixmap &optional locale tag how-to-add +@deffn Command set-face-background-pixmap face pixmap &optional locale tag-set how-to-add This function sets the background pixmap of face @var{face} to @var{pixmap}. The argument @var{pixmap} should be a string (the name of a bitmap or pixmap file; the directories listed in the variable @@ -371,33 +373,34 @@ be a list of the form @code{(@var{width} @var{height} @var{data})} where @var{width} and @var{height} are the size in pixels, and @var{data} is a string, containing the raw bits of the bitmap. -@end defun +@end deffn -@defun set-face-font face font &optional locale tag how-to-add +@deffn Command set-face-font face font &optional locale tag-set how-to-add This function sets the font of face @var{face}. The argument @var{font} should be a string or a font object as returned by @code{make-font} (@pxref{Fonts}). -@end defun +@end deffn -@defun set-face-underline-p face underline-p &optional locale tag how-to-add +@deffn Command set-face-underline-p face underline-p &optional locale tag-set how-to-add This function sets the underline property of face @var{face}. -@end defun +@end deffn -@defun face-foreground face &optional locale -@defunx face-background face &optional locale +@defun face-foreground face &optional locale tag-set exact-p +@defunx face-background face &optional locale tag-set exact-p These functions return the foreground (respectively, background) color specifier of face @var{face}. @xref{Colors}. @end defun -@defun face-background-pixmap face &optional locale +@defun face-background-pixmap face &optional locale tag-set exact-p This function return the background-pixmap glyph object of face @var{face}. @end defun -@defun face-font face &optional locale +@defun face-font face &optional locale tag-set exact-p This function returns the font specifier of face @var{face}. (Note: This is not the same as the function @code{face-font} in FSF Emacs.) + @xref{Fonts}. @end defun @@ -433,11 +436,11 @@ @node Other Face Display Functions @subsection Other Face Display Functions -@defun invert-face face &optional locale +@deffn Command invert-face face &optional locale Swap the foreground and background colors of face @var{face}. If the face doesn't specify both foreground and background, then its foreground and background are set to the default background and foreground. -@end defun +@end deffn @defun face-equal face1 face2 &optional domain This returns @code{t} if the faces @var{face1} and @var{face2} will @@ -584,7 +587,7 @@ @cindex italic @cindex oblique -@defun font-instance-properties font +@defun font-instance-properties font-instance This function returns the properties (an alist or @code{nil}) of @var{font-instance}. @end defun @@ -711,7 +714,7 @@ symbol naming the property of that face to inherit from (if omitted, defaults to the same property that this face-boolean specifier is used for; if this specifier is not part of a face, the instantiator would not -be valid), and optionally a value which, if non-nil, means to invert the +be valid), and optionally a value which, if non-@code{nil}, means to invert the sense of the inherited property. @end itemize @@ -736,7 +739,7 @@ color of the @code{default} face is displayed in the next window after the selected one. -@defun color-instance-p object +@defun color-instance-p object This function returns non-@code{nil} if @var{object} is a color-instance. @end defun @@ -744,7 +747,7 @@ @subsection Color Instance Properties @defun color-instance-name color-instance -This function returns the name used to allocate @var{color-instance}. +This function returns the name used to allocate @var{color-instance}. @end defun @defun color-instance-rgb-components color-instance diff -r a8296e22da4e -r 576fb035e263 man/lispref/files.texi --- a/man/lispref/files.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/files.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/files.info @node Files, Backups and Auto-Saving, Documentation, Top @@ -86,7 +86,7 @@ @deffn Command find-file filename This command selects a buffer visiting the file @var{filename}, -using an existing buffer if there is one, and otherwise creating a +using an existing buffer if there is one, and otherwise creating a new buffer and reading the file into it. It also returns that buffer. The body of the @code{find-file} function is very simple and looks @@ -121,7 +121,7 @@ the echo area, and leaves the buffer empty. @c XEmacs feature -If @var{no-warn} is non-@code{nil}, various warnings that XEmacs normally +If @var{nowarn} is non-@code{nil}, various warnings that XEmacs normally gives (e.g. if another buffer is already visiting @var{filename} but @var{filename} has been removed from disk since that buffer was created) are suppressed. @@ -161,7 +161,7 @@ @var{filename}. @end deffn -@deffn Command view-file filename +@deffn Command view-file filename &optional other-window-p This command visits @var{filename} in View mode, and displays it in a recursive edit, returning to the previous buffer when done. View mode is a mode that allows you to skim rapidly through the file but does not @@ -170,6 +170,9 @@ When @code{view-file} is called interactively, it prompts for @var{filename}. + +With non-@code{nil} prefix arg @var{other-window-p}, visit @var{filename} +in another window. @end deffn @defvar find-file-hooks @@ -403,7 +406,7 @@ using the @code{insert-file-contents} function. Don't use the user-level command @code{insert-file} in a Lisp program, as that sets the mark. -@defun insert-file-contents filename &optional visit beg end replace +@defun insert-file-contents filename &optional visit start end replace This function inserts the contents of file @var{filename} into the current buffer after point. It returns a list of the absolute file name and the length of the data inserted. An error is signaled if @@ -421,7 +424,7 @@ file name and its last save file modtime. This feature is used by @code{find-file-noselect} and you probably should not use it yourself. -If @var{beg} and @var{end} are non-@code{nil}, they should be integers +If @var{start} and @var{end} are non-@code{nil}, they should be integers specifying the portion of the file to insert. In this case, @var{visit} must be @code{nil}. For example, @@ -548,10 +551,10 @@ does nothing if the current buffer is not visiting a file. @end defun -@defun ask-user-about-lock file other-user -This function is called when the user tries to modify @var{file}, but it -is locked by another user named @var{other-user}. The value it returns -determines what happens next: +@defun ask-user-about-lock filename other-user +This function is called when the user tries to modify @var{filename}, +but it is locked by another user named @var{other-user}. The value it +returns determines what happens next: @itemize @bullet @item @@ -570,11 +573,11 @@ The error message for this error looks like this: @example -@error{} File is locked: @var{file} @var{other-user} +@error{} File is locked: @var{filename} @var{other-user} @end example @noindent -where @code{file} is the name of the file and @var{other-user} is the +where @var{filename} is the name of the file and @var{other-user} is the name of the user who has locked the file. @end itemize @@ -749,7 +752,7 @@ may be a nonexistent file name. If the file @var{filename} is not a symbolic link (or there is no such file), -@code{file-symlink-p} returns @code{nil}. +@code{file-symlink-p} returns @code{nil}. @example @group @@ -968,16 +971,16 @@ @example @group (file-attributes "files.texi") - @result{} (nil - 1 - 2235 - 75 - (8489 20284) - (8489 20284) + @result{} (nil + 1 + 2235 + 75 + (8489 20284) + (8489 20284) (8489 20285) - 14906 - "-rw-rw-rw-" - nil + 14906 + "-rw-rw-rw-" + nil 129500 -32252) @end group @@ -1037,9 +1040,10 @@ The functions in this section rename, copy, delete, link, and set the modes of files. - In the functions that have an argument @var{newname}, if a file by the -name of @var{newname} already exists, the actions taken depend on the -value of the argument @var{ok-if-already-exists}: + In the functions that have arguments @var{newname} and +@var{ok-if-already-exists}, if a file by the name of @var{newname} +already exists, the actions taken depend on the value of +@var{ok-if-already-exists}: @itemize @bullet @item @@ -1047,19 +1051,20 @@ @var{ok-if-already-exists} is @code{nil}. @item -Request confirmation if @var{ok-if-already-exists} is a number. +Request confirmation if @var{ok-if-already-exists} is a number. This is +what happens when the function is invoked interactively. @item Replace the old file without confirmation if @var{ok-if-already-exists} is any other value. @end itemize -@deffn Command add-name-to-file oldname newname &optional ok-if-already-exists +@deffn Command add-name-to-file filename newname &optional ok-if-already-exists @cindex file with multiple names @cindex file hard link -This function gives the file named @var{oldname} the additional name +This function gives the file named @var{filename} the additional name @var{newname}. This means that @var{newname} becomes a new ``hard -link'' to @var{oldname}. +link'' to @var{filename}. Both these arguments must be strings. In the first part of the following example, we list two files, @file{foo} and @file{foo3}. @@ -1116,8 +1121,8 @@ @end group @end example - This function is meaningless on VMS, where multiple names for one file -are not allowed. +This function is meaningless on non-Unix systems, where multiple names +for one file are not allowed. See also @code{file-nlinks} in @ref{File Attributes}. @end deffn @@ -1135,9 +1140,9 @@ @var{newname} already exists. @end deffn -@deffn Command copy-file oldname newname &optional ok-if-exists time -This command copies the file @var{oldname} to @var{newname}. An -error is signaled if @var{oldname} does not exist. +@deffn Command copy-file filename newname &optional ok-if-already-exists time +This command copies the file @var{filename} to @var{newname}. An +error is signaled if @var{filename} does not exist. If @var{time} is non-@code{nil}, then this functions gives the new file the same last-modified time that the old one has. (This works on @@ -1161,7 +1166,7 @@ See also @code{delete-directory} in @ref{Create/Delete Dirs}. @end deffn -@deffn Command make-symbolic-link filename newname &optional ok-if-exists +@deffn Command make-symbolic-link filename newname &optional ok-if-already-exists @pindex ln @kindex file-already-exists This command makes a symbolic link to @var{filename}, named @@ -1173,11 +1178,6 @@ @var{newname} already exists. @end deffn -@defun define-logical-name varname string -This function defines the logical name @var{name} to have the value -@var{string}. It is available only on VMS. -@end defun - @defun set-file-modes filename mode This function sets mode bits of @var{filename} to @var{mode} (which must be an integer). Only the low 12 bits of @var{mode} are used. @@ -1226,11 +1226,10 @@ can operate on file names that do not refer to an existing file or directory. - On VMS, all these functions understand both VMS file-name syntax and -Unix syntax. This is so that all the standard Lisp libraries can -specify file names in Unix syntax and work properly on VMS without -change. On MS-DOS, these functions understand MS-DOS file-name syntax -as well as Unix syntax. +On MS-DOS, these functions understand MS-DOS file-name syntax as well as +Unix syntax. This is so that all the standard Lisp libraries can specify +file names in Unix syntax and work properly on all systems without +change. Similarly for other operating systems. @menu * File Name Components:: The directory part of a file name, and the rest. @@ -1257,22 +1256,16 @@ Concatenating these two parts reproduces the original file name. On Unix, the directory part is everything up to and including the last -slash; the nondirectory part is the rest. The rules in VMS syntax are -complicated. +slash; the nondirectory part is the rest. For some purposes, the nondirectory part is further subdivided into the name proper and the @dfn{version number}. On Unix, only backup -files have version numbers in their names; on VMS, every file has a -version number, but most of the time the file name actually used in -XEmacs omits the version number. Version numbers are found mostly in -directory lists. +files have version numbers in their names. @defun file-name-directory filename This function returns the directory part of @var{filename} (or @code{nil} if @var{filename} does not include a directory part). On -Unix, the function returns a string ending in a slash. On VMS, it -returns a string ending in one of the three characters @samp{:}, -@samp{]}, or @samp{>}. +Unix, the function returns a string ending in a slash. @example @group @@ -1283,10 +1276,6 @@ (file-name-directory "foo") ; @r{Unix example} @result{} nil @end group -@group -(file-name-directory "[X]FOO.TMP") ; @r{VMS example} - @result{} "[X]" -@end group @end example @end defun @@ -1302,11 +1291,6 @@ (file-name-nondirectory "foo") @result{} "foo" @end group -@group -;; @r{The following example is accurate only on VMS.} -(file-name-nondirectory "[X]FOO.TMP") - @result{} "FOO.TMP" -@end group @end example @end defun @@ -1331,11 +1315,6 @@ (file-name-sans-versions "~rms/foo") @result{} "~rms/foo" @end group -@group -;; @r{The following example applies to VMS only.} -(file-name-sans-versions "foo;23") - @result{} "foo" -@end group @end example @end defun @@ -1363,7 +1342,7 @@ Unix terminology.) These two different names for the same entity are related by a syntactic transformation. On Unix, this is simple: a directory name ends in a slash, whereas the directory's name as a file -lacks that slash. On VMS, the relationship is more complicated. +lacks that slash. The difference between a directory name and its name as a file is subtle but crucial. When an XEmacs variable or function argument is @@ -1377,9 +1356,7 @@ @defun file-name-as-directory filename This function returns a string representing @var{filename} in a form that the operating system will interpret as the name of a directory. In -Unix, this means appending a slash to the string. On VMS, the function -converts a string of the form @file{[X]Y.DIR.1} to the form -@file{[X.Y]}. +Unix, this means appending a slash to the string. @example @group @@ -1392,9 +1369,7 @@ @defun directory-file-name dirname This function returns a string representing @var{dirname} in a form that the operating system will interpret as the name of a file. On -Unix, this means removing a final slash from the string. On VMS, the -function converts a string of the form @file{[X.Y]} to -@file{[X]Y.DIR.1}. +Unix, this means removing a final slash from the string. @example @group @@ -1415,7 +1390,7 @@ If you wish to convert a directory name to its abbreviation, use this function: -@defun abbreviate-file-name dirname &optional hack-homedir +@defun abbreviate-file-name filename &optional hack-homedir This function applies abbreviations from @code{directory-abbrev-alist} to its argument, and substitutes @samp{~} for the user's home directory. @@ -1468,13 +1443,11 @@ file name. Or it can specify the position of the file in the tree relative to a default directory; then it is called a @dfn{relative} file name. On Unix, an absolute file name starts with a slash or a -tilde (@samp{~}), and a relative one does not. The rules on VMS are -complicated. +tilde (@samp{~}), and a relative one does not. @defun file-name-absolute-p filename This function returns @code{t} if file @var{filename} is an absolute -file name, @code{nil} otherwise. On VMS, this function understands both -Unix syntax and VMS syntax. +file name, @code{nil} otherwise. @example @group @@ -1622,9 +1595,6 @@ @result{} "/xcssun/users/rms/foo" @end group @end example - -On VMS, @samp{$} substitution is not done, so this function does nothing -on VMS except discard superfluous initial components as shown above. @end defun @node Unique File Names @@ -1666,7 +1636,7 @@ @end example In addition, this function makes an attempt to choose a name that does -not specify an existing file. To make this work, @var{prefix} should be +not specify an existing file. To make this work, @var{prefix} should be an absolute file name. To avoid confusion, each Lisp application should preferably use a unique @@ -1682,7 +1652,7 @@ name. For other completion functions, see @ref{Completion}. @defun file-name-all-completions partial-filename directory -This function returns a list of all possible completions for a file +This function returns a list of all possible completions for files whose name starts with @var{partial-filename} in directory @var{directory}. The order of the completions is the order of the files in the directory, which is unpredictable and conveys no useful @@ -1692,6 +1662,11 @@ directory part and no slash. The current buffer's default directory is prepended to @var{directory}, if @var{directory} is not absolute. +File names which end with any member of @code{completion-ignored-extensions} +are not considered as possible completions for @var{partial-filename} unless +there is no other possible completion. @code{completion-ignored-extensions} +is not applied to the names of directories. + In the following example, suppose that the current default directory, @file{~rms/lewis}, has five files whose names begin with @samp{f}: @file{foo}, @file{file~}, @file{file.c}, @file{file.c.~1~}, and @@ -1700,25 +1675,30 @@ @example @group (file-name-all-completions "f" "") - @result{} ("foo" "file~" "file.c.~2~" + @result{} ("foo" "file~" "file.c.~2~" "file.c.~1~" "file.c") @end group @group -(file-name-all-completions "fo" "") +(file-name-all-completions "fo" "") @result{} ("foo") @end group @end example @end defun -@defun file-name-completion filename directory -This function completes the file name @var{filename} in directory +@defun file-name-completion partial-filename directory +This function completes the file name @var{partial-filename} in directory @var{directory}. It returns the longest prefix common to all file names -in directory @var{directory} that start with @var{filename}. +in directory @var{directory} that start with @var{partial-filename}. -If only one match exists and @var{filename} matches it exactly, the +If only one match exists and @var{partial-filename} matches it exactly, the function returns @code{t}. The function returns @code{nil} if directory -@var{directory} contains no name starting with @var{filename}. +@var{directory} contains no name starting with @var{partial-filename}. + +File names which end with any member of @code{completion-ignored-extensions} +are not considered as possible completions for @var{partial-filename} unless +there is no other possible completion. @code{completion-ignored-extensions} +is not applied to the names of directories. In the following example, suppose that the current default directory has five files whose names begin with @samp{f}: @file{foo}, @@ -1773,26 +1753,27 @@ name. For other completion functions, see @ref{Completion}. @defun user-name-all-completions partial-username -This function returns a list of all possible completions for a user -whose name starts with @var{partial-username}. The order of the -completions is unpredictable and conveys no useful information. +This function returns a list of all possible completions for a user name +starting with @var{partial-username}. The order of the completions is +unpredictable and conveys no useful information. -The argument @var{partial-username} must be a partial user name +The argument @var{partial-username} must be a partial user name containing no tilde character and no slash. @end defun -@defun user-name-completion username -This function completes the user name @var{username}. It returns the -longest prefix common to all user names that start with @var{username}. +@defun user-name-completion partial-username +This function completes a user name from @var{partial-username}. It +returns the longest prefix common to all user names that start with +@var{partial-username}. -If only one match exists and @var{username} matches it exactly, the -function returns @code{t}. The function returns @code{nil} if no user -name starting with @var{username} exists. +If only one match exists and @var{partial-username} matches it exactly, +the function returns @code{t}. The function returns @code{nil} if no +user name starting with @var{partial-username} exists. @end defun -@defun user-name-completion-1 username -This function completes the user name @var{username}, like -@code{user-name-completion}, differing only in the return value. +@defun user-name-completion-1 partial-username +This function completes the partial user name @var{partial-username}, +like @code{user-name-completion}, differing only in the return value. This function returns the cons of the completion returned by @code{user-name-completion}, and a boolean indicating whether that completion was unique. @@ -1843,7 +1824,7 @@ @group (directory-files "~lewis") @result{} ("#foo#" "#foo.el#" "." ".." - "dired-mods.el" "files.texi" + "dired-mods.el" "files.texi" "files.texi.~1~") @end group @end example @@ -2002,7 +1983,7 @@ @dots{} ;; @r{Handle any operation we don't know about.} (t (let ((inhibit-file-name-handlers - (cons 'my-file-handler + (cons 'my-file-handler (and (eq inhibit-file-name-operation operation) inhibit-file-name-handlers))) (inhibit-file-name-operation operation)) @@ -2028,8 +2009,8 @@ The operation for which certain handlers are presently inhibited. @end defvar -@defun find-file-name-handler file operation -This function returns the handler function for file name @var{file}, or +@defun find-file-name-handler filename &optional operation +This function returns the handler function for file name @var{filename}, or @code{nil} if there is none. The argument @var{operation} should be the operation to be performed on the file---the value you will pass to the handler as its first argument when you call it. The operation is needed @@ -2095,7 +2076,7 @@ @node Creating a Partial File @subsection Creating a Partial File -@defun make-file-part &optional start end name buffer +@deffn Command make-file-part &optional start end name buffer Make a file part on buffer @var{buffer} out of the region. Call it @var{name}. This command creates a new buffer containing the contents of the region and marks the buffer as referring to the specified buffer, @@ -2106,9 +2087,9 @@ When called from a function, expects four arguments, @var{start}, @var{end}, @var{name}, and @var{buffer}, all of which are optional and default to the beginning of @var{buffer}, the end of @var{buffer}, a -name generated from @var{buffer} name, and the current buffer, +name generated from @var{buffer}'s name, and the current buffer, respectively. -@end defun +@end deffn @node Detached Partial Files @subsection Detached Partial Files @@ -2237,14 +2218,14 @@ encoding functions for the formats listed in @code{buffer-file-format}, in the order of appearance in the list. -@defun format-write-file file format +@deffn Command format-write-file file format This command writes the current buffer contents into the file @var{file} in format @var{format}, and makes that format the default for future saves of the buffer. The argument @var{format} is a list of format names. -@end defun +@end deffn -@defun format-find-file file format +@deffn Command format-find-file file format This command finds the file @var{file}, converting it according to format @var{format}. It also makes @var{format} the default if the buffer is saved later. @@ -2252,11 +2233,11 @@ The argument @var{format} is a list of format names. If @var{format} is @code{nil}, no conversion takes place. Interactively, typing just @key{RET} for @var{format} specifies @code{nil}. -@end defun +@end deffn -@defun format-insert-file file format &optional beg end +@deffn Command format-insert-file file format &optional start end This command inserts the contents of file @var{file}, converting it -according to format @var{format}. If @var{beg} and @var{end} are +according to format @var{format}. If @var{start} and @var{end} are non-@code{nil}, they specify which part of the file to read, as in @code{insert-file-contents} (@pxref{Reading from Files}). @@ -2267,32 +2248,7 @@ The argument @var{format} is a list of format names. If @var{format} is @code{nil}, no conversion takes place. Interactively, typing just @key{RET} for @var{format} specifies @code{nil}. -@end defun - -@defun format-find-file file format -This command finds the file @var{file}, converting it according to -format @var{format}. It also makes @var{format} the default if the -buffer is saved later. - -The argument @var{format} is a list of format names. If @var{format} is -@code{nil}, no conversion takes place. Interactively, typing just -@key{RET} for @var{format} specifies @code{nil}. -@end defun - -@defun format-insert-file file format &optional beg end -This command inserts the contents of file @var{file}, converting it -according to format @var{format}. If @var{beg} and @var{end} are -non-@code{nil}, they specify which part of the file to read, -as in @code{insert-file-contents} (@pxref{Reading from Files}). - -The return value is like what @code{insert-file-contents} returns: a -list of the absolute file name and the length of the data inserted -(after conversion). - -The argument @var{format} is a list of format names. If @var{format} is -@code{nil}, no conversion takes place. Interactively, typing just -@key{RET} for @var{format} specifies @code{nil}. -@end defun +@end deffn @defvar auto-save-file-format This variable specifies the format to use for auto-saving. Its value is diff -r a8296e22da4e -r 576fb035e263 man/lispref/frames.texi --- a/man/lispref/frames.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/frames.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c Copyright (C) 1995, 1996 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/frames.info @@ -63,7 +63,7 @@ To create a new frame, call the function @code{make-frame}. -@defun make-frame &optional props device +@deffn Command make-frame &optional props device This function creates a new frame on @var{device}, if @var{device} permits creation of frames. (An X server does; an ordinary terminal does not (yet).) @var{device} defaults to the selected device if omitted. @@ -83,7 +83,7 @@ window system XEmacs uses to display its frames. @xref{X Frame Properties}, for documentation of individual properties you can specify when creating an X window frame. -@end defun +@end deffn @node Frame Properties @section Frame Properties @@ -116,7 +116,7 @@ @defun frame-property frame property &optional default This function returns @var{frame}'s value for the property -@var{property}. +@var{property}, or @var{default} if there is no such property. @end defun @defun set-frame-properties frame plist @@ -125,9 +125,9 @@ in @var{plist}, its value doesn't change. @end defun -@defun set-frame-property frame prop val -This function sets the property @var{prop} of frame @var{frame} to the -value @var{val}. +@defun set-frame-property frame property value +This function sets the property @var{property} of frame @var{frame} to the +value @var{value}. @end defun @node Initial Properties @@ -362,7 +362,7 @@ @defun set-frame-size frame cols rows &optional pretend This function sets the size of @var{frame}, measured in characters; @var{cols} and @var{rows} specify the new width and height. (If -@var{pretend} is non-nil, it means that redisplay should act as if +@var{pretend} is non-@code{nil}, it means that redisplay should act as if the frame's size is @var{cols} by @var{rows}, but the actual size of the frame should not be changed. You should not normally use this option.) @@ -498,9 +498,16 @@ them. A deleted frame cannot appear on the screen, but continues to exist as a Lisp object until there are no references to it. -@deffn Command delete-frame &optional frame +@deffn Command delete-frame &optional frame force This function deletes the frame @var{frame}. By default, @var{frame} is the selected frame. + +A frame may not be deleted if its minibuffer is used by other frames. +Normally, you cannot delete the last non-minibuffer-only frame (you must +use @code{save-buffers-kill-emacs} or @code{kill-emacs}). However, if +optional second argument @var{force} is non-@code{nil}, you can delete +the last frame. (This will automatically call +@code{save-buffers-kill-emacs}.) @end deffn @defun frame-live-p frame @@ -538,34 +545,84 @@ ``visible'', even though only the selected one is actually displayed.) @end defun -@defun next-frame &optional frame minibuf +@defun next-frame &optional frame which-frames which-devices The function @code{next-frame} lets you cycle conveniently through all the frames from an arbitrary starting point. It returns the ``next'' -frame after @var{frame} in the cycle. If @var{frame} is omitted or -@code{nil}, it defaults to the selected frame. +frame after @var{frame} in the cycle. If @var{frame} defaults to the +selected frame. + +The second argument, @var{which-frames}, says which frames to consider: + +@table @asis +@item @code{visible} +Consider only frames that are visible. + +@item @code{iconic} +Consider only frames that are iconic. + +@item @code{invisible} +Consider only frames that are invisible (this is different from iconic). + +@item @code{visible-iconic} +Consider frames that are visible or iconic. + +@item @code{invisible-iconic} +Consider frames that are invisible or iconic. + +@item @code{nomini} +Consider all frames except minibuffer-only ones. -The second argument, @var{minibuf}, says which frames to consider: +@item @code{visible-nomini} +Like @code{visible} but omits minibuffer-only frames. + +@item @code{iconic-nomini} +Like @code{iconic} but omits minibuffer-only frames. + +@item @code{invisible-nomini} +Like @code{invisible} but omits minibuffer-only frames. + +@item @code{visible-iconic-nomini} +Like @code{visible-iconic} but omits minibuffer-only frames. + +@item @code{invisible-iconic-nomini} +Like @code{invisible-iconic} but omits minibuffer-only frames. + +@item @code{nil} +Identical to @code{nomini}. + +@item @var{window} +Consider only the window @var{window}'s frame and any frame now using +@var{window} as the minibuffer. + +@item any other value +Consider all frames. +@end table + +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. @table @asis @item @code{nil} -Exclude minibuffer-only frames. -@item @code{visible} -Consider all visible frames. -@item 0 -Consider all visible or iconified frames. -@item a window -Consider only the frames using that particular window as their -minibuffer. -@item the symbol @code{visible} -Include all visible frames. -@item @code{0} -Include all visible and iconified frames. +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + @item anything else -Consider all frames. +Consider all devices without restriction. @end table @end defun -@defun previous-frame &optional frame minibuf +@defun previous-frame &optional frame which-frames which-devices Like @code{next-frame}, but cycles through all frames in the opposite direction. @end defun @@ -595,10 +652,39 @@ the lower right corner (always the minibuffer window, if the frame has one), and then it moves back to the top. -@defun frame-top-window frame -This returns the topmost, leftmost window of frame @var{frame}. +@defun frame-highest-window &optional frame position +This function returns the topmost, leftmost window of frame @var{frame} +at position @var{position}. + +If omitted, @var{frame} defaults to the currently selected frame. + +@var{position} is used to distinguish between multiple windows that abut +the top of the frame: 0 means the leftmost window abutting the top of +the frame, 1 the next-leftmost, etc. @var{position} can also be less +than zero: -1 means the rightmost window abutting the top of the frame, +-2 the next-rightmost, etc. If omitted, @var{position} defaults to 0, +i.e. the leftmost highest window. If there is no window at the given +@var{position}, @code{nil} is returned. @end defun +The following three functions work similarly. + +@defun frame-lowest-window &optional frame position +This function returns the lowest window on @var{frame} which is at +@var{position}. +@end defun + +@defun frame-leftmost-window &optional frame position +This function returns the leftmost window on @var{frame} which is at +@var{position}. +@end defun + +@defun frame-rightmost-window &optional frame position +This function returns the rightmost window on @var{frame} which is at +@var{position}. +@end defun + + At any time, exactly one window on any frame is @dfn{selected within the frame}. The significance of this designation is that selecting the frame also selects this window. You can get the frame's current @@ -699,18 +785,18 @@ @code{focus-follows-mouse}. @end defun -@defmac save-selected-frame forms@dots{} -This macro records the selected frame, executes @var{forms} in sequence, -then restores the earlier selected frame. The value returned is the -value of the last form. -@end defmac +@defspec save-selected-frame forms@dots{} +This special form records the selected frame, executes @var{forms} in +sequence, then restores the earlier selected frame. The value returned +is the value of the last form. +@end defspec -@defmac with-selected-frame frame forms@dots{} -This macro records the selected frame, then selects @var{frame} and -executes @var{forms} in sequence. After the last form is finished, the -earlier selected frame is restored. The value returned is the value of -the last form. -@end defmac +@defspec with-selected-frame frame forms@dots{} +This special form records the selected frame, then selects @var{frame} +and executes @var{forms} in sequence. After the last form is finished, +the earlier selected frame is restored. The value returned is the value +of the last form. +@end defspec @ignore (FSF Emacs, continued from defun select-frame) XEmacs cooperates with the X server and the window managers by arranging @@ -765,7 +851,7 @@ @cindex iconified frame @cindex frame visibility -An X window frame may be @dfn{visible}, @dfn{invisible}, or +An frame on a window system may be @dfn{visible}, @dfn{invisible}, or @dfn{iconified}. If it is visible, you can see its contents. If it is iconified, the frame's contents do not appear on the screen, but an icon does. If the frame is invisible, it doesn't show on the screen, not @@ -774,31 +860,31 @@ Visibility is meaningless for TTY frames, since only the selected one is actually displayed in any case. -@deffn Command make-frame-visible &optional frame +@defun make-frame-visible &optional frame This function makes frame @var{frame} visible. If you omit @var{frame}, it makes the selected frame visible. -@end deffn +@end defun -@deffn Command make-frame-invisible &optional frame +@defun make-frame-invisible &optional frame force This function makes frame @var{frame} invisible. -@end deffn +@end defun @deffn Command iconify-frame &optional frame This function iconifies frame @var{frame}. @end deffn -@deffn Command deiconify-frame &optional frame -This function de-iconifies frame @var{frame}. Under X, this is -equivalent to @code{make-frame-visible}. -@end deffn +@defun Command deiconify-frame &optional frame +This function de-iconifies frame @var{frame}. Under a window system, +this is equivalent to @code{make-frame-visible}. +@end defun -@defun frame-visible-p frame +@defun frame-visible-p &optional frame This returns whether @var{frame} is currently ``visible'' (actually in use for display). A frame that is not visible is not updated, and, if it works through a window system, may not show at all. @end defun -@defun frame-iconified-p frame +@defun frame-iconified-p &optional frame This returns whether @var{frame} is iconified. Not all window managers use icons; some merely unmap the window, so this function is not the inverse of @code{frame-visible-p}. It is possible for a frame to not @@ -807,7 +893,7 @@ of this function is obtained through @code{frame-visible-p}.) @end defun -@defun frame-totally-visible-p frame +@defun frame-totally-visible-p &optional frame This returns whether @var{frame} is not obscured by any other X windows. On TTY frames, this is the same as @code{frame-visible-p}. @end defun @@ -904,9 +990,18 @@ the current arrangement of frames and their contents. @end defun -@defun set-frame-configuration configuration -This function restores the state of frames described in +@defun set-frame-configuration configuration &optional nodelete +This function restores the state of frames described by +@var{configuration}, which should be the return value from a previous +call to @code{current-frame-configuration}. + +Each frame listed in @var{configuration} has its position, size, window +configuration, and other properties set as specified in @var{configuration}. + +Ordinarily, this function deletes all existing frames not listed in +@var{configuration}. But if optional second argument @var{nodelete} is +non-@code{nil}, the unwanted frames are iconified instead. @end defun @node Frame Hooks diff -r a8296e22da4e -r 576fb035e263 man/lispref/functions.texi --- a/man/lispref/functions.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/functions.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/functions.info @node Functions, Macros, Variables, Top @@ -17,7 +17,7 @@ * Defining Functions:: Lisp expressions for defining functions. * Calling Functions:: How to use an existing function. * Mapping Functions:: Applying a function to each element of a list, etc. -* Anonymous Functions:: Lambda expressions are functions with no names. +* Anonymous Functions:: Lambda expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. * Inline Functions:: Defining functions that the compiler will open code. @@ -671,9 +671,9 @@ This function returns @var{arg} and has no side effects. @end defun -@defun ignore &rest args +@deffn Command ignore &rest args This function ignores any arguments and returns @code{nil}. -@end defun +@end deffn @node Mapping Functions @section Mapping Functions @@ -718,10 +718,10 @@ "Apply FUNCTION to successive cars of all ARGS. Return the list of results." ;; @r{If no list is exhausted,} - (if (not (memq 'nil args)) + (if (not (memq 'nil args)) ;; @r{apply function to @sc{car}s.} - (cons (apply f (mapcar 'car args)) - (apply 'mapcar* f + (cons (apply f (mapcar 'car args)) + (apply 'mapcar* f ;; @r{Recurse for rest of elements.} (mapcar 'cdr args))))) @end group @@ -743,7 +743,7 @@ The argument @var{function} must be a function that can take one argument and return a string. The argument @var{sequence} can be any kind of sequence; that is, a list, a vector, a bit vector, or a string. - + @smallexample @group (mapconcat 'symbol-name @@ -931,7 +931,7 @@ can make it void once more using @code{fmakunbound}. @defun fboundp symbol -This function returns @code{t} if the symbol has an object in its +This function returns @code{t} if @var{symbol} has an object in its function cell, @code{nil} otherwise. It does not check that the object is a legitimate function. @end defun @@ -976,9 +976,9 @@ @item Giving a symbol a function definition that is not a list and therefore cannot be made with @code{defun}. For example, you can use @code{fset} -to give a symbol @code{s1} a function definition which is another symbol -@code{s2}; then @code{s1} serves as an alias for whatever definition -@code{s2} presently has. +to give a symbol @var{symbol1} a function definition which is another symbol +@var{symbol2}; then @var{symbol1} serves as an alias for whatever definition +@var{symbol2} presently has. @item In constructs for defining or altering functions. If @code{defun} diff -r a8296e22da4e -r 576fb035e263 man/lispref/glyphs.texi --- a/man/lispref/glyphs.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/glyphs.texi Mon Aug 13 11:36:19 2007 +0200 @@ -82,7 +82,7 @@ Creating a glyph using @code{make-glyph} does not specify @emph{where} the glyph will be used, but it does specify @emph{what} the glyph will -look like. In particular, SPEC-LIST is used to specify this, and it's +look like. In particular, @var{spec-list} is used to specify this, and it's used to initialize the glyph's @code{image} property, which is an image specifier. (Note that @dfn{image} as used in the context of a glyph's @code{image} property or in the terms @dfn{image specifier}, @dfn{image @@ -90,7 +90,7 @@ normally think of as an image (which in XEmacs is called a @dfn{pixmap}), but to any graphical element---a pixmap, a widget, or even a block of text, when used in the places that call for a glyph.) -The format of the SPEC-LIST is typically an image instantiator (a string +The format of the @var{spec-list} is typically an image instantiator (a string or a vector; @ref{Image Specifiers}), but can also be a list of such instantiators (each one in turn is tried until an image is successfully produced), a cons of a locale (frame, buffer, etc.) and an @@ -235,7 +235,7 @@ @end itemize It is extremely rare that you will ever have to specify a value for -TYPE, which should be one of @code{buffer} (used for glyphs in an +@var{type}, which should be one of @code{buffer} (used for glyphs in an extent, the modeline, the toolbar, or elsewhere in a buffer), @code{pointer} (used for the mouse-pointer), or @code{icon} (used for a frame's icon), and defaults to @code{buffer}. The only cases where it @@ -880,10 +880,15 @@ does not need to exist at any other time (e.g. it may safely be a temporary file). -@defun valid-image-instantiator-format-p format +@defun valid-image-instantiator-format-p format &optional locale This function returns non-@code{nil} if @var{format} is a valid image -instantiator format. Note that the return value for many formats listed -above depends on whether XEmacs was compiled with support for that format. +instantiator format. + +If @var{locale} is non-@code{nil} then the format is checked in that locale. +If @var{locale} is @code{nil} the current console is used. + +Note that the return value for many formats listed above depends on +whether XEmacs was compiled with support for that format. @end defun @defun image-instantiator-format-list @@ -906,7 +911,7 @@ @end defvar @defvar x-bitmap-file-path -A list of the directories in which X bitmap files may be found. If nil, +A list of the directories in which X bitmap files may be found. If @code{nil}, this is initialized from the @samp{"*bitmapFilePath"} resource. This is used by the @code{make-image-instance} function (however, note that if the environment variable @samp{XBMLANGPATH} is set, it is consulted @@ -1047,13 +1052,13 @@ @end defun @defun widget-image-instance-p object -Return t if @var{object} is an image instance of type @code{widget}. +Return @code{t} if @var{object} is an image instance of type @code{widget}. @end defun @node Image Instance Functions @subsubsection Image Instance Functions -@defun make-image-instance data &optional domain dest-types no-error +@defun make-image-instance data &optional domain dest-types noerror This function creates a new image-instance object. @var{data} is an image instantiator, which describes the image @@ -1110,10 +1115,10 @@ n If omitted, @var{domain} defaults to the selected window. -@var{no-error} controls what happens when the image cannot be generated. -If @var{nil}, an error message is generated. If @var{t}, no messages -are generated and this function returns @var{nil}. If anything else, a -warning message is generated and this function returns @var{nil}. +@var{noerror} controls what happens when the image cannot be generated. +If @code{nil}, an error message is generated. If @code{t}, no messages +are generated and this function returns @code{nil}. If anything else, a +warning message is generated and this function returns @code{nil}. @end defun @defun colorize-image-instance image-instance foreground background diff -r a8296e22da4e -r 576fb035e263 man/lispref/gutter.texi --- a/man/lispref/gutter.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/gutter.texi Mon Aug 13 11:36:19 2007 +0200 @@ -115,10 +115,10 @@ @code{right-gutter-visible-p}, and @code{bottom-gutter-visible-p} are always gutter-visible specifiers. -Valid gutter-visible instantiators are t, nil or a list of symbols. If -a gutter-visible instantiator is set to a list of symbols, and the -corresponding gutter specification is a property-list strings, then -elements of the gutter specification will only be visible if the +Valid gutter-visible instantiators are @code{t}, @code{nil} or a list of +symbols. If a gutter-visible instantiator is set to a list of symbols, +and the corresponding gutter specification is a property-list strings, +then elements of the gutter specification will only be visible if the corresponding symbol occurs in the gutter-visible instantiator. @end defun @@ -252,7 +252,7 @@ @defvr Specifier default-gutter The position of this gutter is specified in the function -@code{default-gutter-position}. If the corresponding +@code{default-gutter-position}. If the corresponding position-specific gutter (e.g. @code{top-gutter} if @code{default-gutter-position} is @code{top}) does not specify a gutter in a particular domain, then the value of @code{default-gutter} @@ -312,7 +312,7 @@ @end defvr @defun gutter-specifier-p object -This function returns non-nil if @var{object} is a gutter specifier. +This function returns non-@code{nil} if @var{object} is a gutter specifier. Gutter specifiers are the actual objects contained in the gutter variables described above, and their valid instantiators are gutter descriptors (@pxref{Gutter Descriptor Format}). @@ -408,7 +408,7 @@ left gutter width for that frame to 68 pixels, then the frame will be sized to fit 80 characters plus a 68-pixel left gutter. If you then set the left gutter width to 0 for a particular buffer (or if that -buffer does not specify a left gutter or has a nil value specified for +buffer does not specify a left gutter or has a @code{nil} value specified for @code{left-gutter-visible-p}), you will find that, when that buffer is displayed in the selected window, the window will have a width of 86 or 87 characters -- the frame is sized for a 68-pixel left gutter but the diff -r a8296e22da4e -r 576fb035e263 man/lispref/help.texi --- a/man/lispref/help.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/help.texi Mon Aug 13 11:36:19 2007 +0200 @@ -226,7 +226,7 @@ @group Those commands will move to this position in the line moved to rather than trying to keep the same horizontal position. -With a non-nil argument, clears out the goal column +With a non-@code{nil} argument, clears out the goal column so that C-n and C-p resume vertical motion. The goal column is stored in the variable `goal-column'. @end group @@ -359,14 +359,14 @@ @group (substitute-command-keys "Substrings of the form \\=\\@{MAPVAR@} are replaced by summaries -\(made by describe-bindings) of the value of MAPVAR, taken as a keymap. +\(made by `describe-bindings') of the value of MAPVAR, taken as a keymap. Substrings of the form \\=\\ specify to use the value of MAPVAR as the keymap for future \\=\\[COMMAND] substrings. \\=\\= quotes the following character and is discarded; thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ into the output.") @result{} "Substrings of the form \@{MAPVAR@} are replaced by summaries -(made by describe-bindings) of the value of MAPVAR, taken as a keymap. +(made by `describe-bindings') of the value of MAPVAR, taken as a keymap. Substrings of the form \ specify to use the value of MAPVAR as the keymap for future \[COMMAND] substrings. \= quotes the following character and is discarded; @@ -606,12 +606,12 @@ The variable's default value is @code{describe-prefix-bindings}. @end defvar -@defun describe-prefix-bindings +@deffn Command describe-prefix-bindings This function calls @code{describe-bindings} to display a list of all the subcommands of the prefix key of the most recent key sequence. The prefix described consists of all but the last event of that key sequence. (The last event is, presumably, the help character.) -@end defun +@end deffn The following two functions are found in the library @file{helper}. They are for modes that want to provide help without relinquishing @@ -676,7 +676,7 @@ XEmacs Lisp lets you mark a function or variable as @dfn{obsolete}, and indicate what should be used instead. -@defun make-obsolete function new +@deffn Command make-obsolete function new This function indicates that @var{function} is an obsolete function, and the function @var{new} should be used instead. The byte compiler will issue a warning to this effect when it encounters a usage of the @@ -685,11 +685,11 @@ function with the same functionality any more), and should be a descriptive statement, such as "use @var{foo} or @var{bar} instead" or "this function is unnecessary". -@end defun +@end deffn -@defun make-obsolete-variable variable new +@deffn Command make-obsolete-variable variable new This is like @code{make-obsolete} but is for variables instead of functions. -@end defun +@end deffn @defun define-obsolete-function-alias oldfun newfun This function combines @code{make-obsolete} and @code{define-function}, diff -r a8296e22da4e -r 576fb035e263 man/lispref/hooks.texi --- a/man/lispref/hooks.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/hooks.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,13 +1,13 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/hooks.info @node Standard Hooks, Index, Standard Keymaps, Top @appendix Standard Hooks The following is a list of hook variables that let you provide -functions to be called from within Emacs on suitable occasions. +functions to be called from within Emacs on suitable occasions. Most of these variables have names ending with @samp{-hook}. They are @dfn{normal hooks}, run by means of @code{run-hooks}. The value of such @@ -98,8 +98,8 @@ @item ediff-long-help-message-function @item ediff-make-wide-display-function @item ediff-merge-split-window-function -@item ediff-meta-action-function -@item ediff-meta-redraw-function +@item ediff-meta-action-function +@item ediff-meta-redraw-function @item ediff-mode-hook @item ediff-prepare-buffer-hook @item ediff-quit-hook diff -r a8296e22da4e -r 576fb035e263 man/lispref/index.texi --- a/man/lispref/index.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/index.texi Mon Aug 13 11:36:19 2007 +0200 @@ -24,7 +24,7 @@ @ignore All variables, functions, keys, programs, files, and concepts are -in this one index. +in this one index. All names and concepts are permuted, so they appear several times, one for each permutation of the parts of the name. For example, diff -r a8296e22da4e -r 576fb035e263 man/lispref/internationalization.texi --- a/man/lispref/internationalization.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/internationalization.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/internationalization.info @node Internationalization, MULE, PostgreSQL Support, top @@ -160,12 +160,8 @@ @end example @end defspec -Autoloaded functions which are specified in @file{loaddefs.el} do not need -to have a domain specification, because their documentation strings are -extracted into the main message base. However, for autoloaded functions -which are specified in a separate package, use following syntax: - -@defun autoload symbol filename &optional docstring interactive macro domain +@defun autoload function filename &optional docstring interactive type +This function defines @var{function} to autoload from @var{filename} Example: @example (autoload 'explore "jungle" "Explore the jungle." nil nil "emacs-gorilla") diff -r a8296e22da4e -r 576fb035e263 man/lispref/intro.texi --- a/man/lispref/intro.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/intro.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/intro.info @@ -368,7 +368,7 @@ Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c' +to redistribute it under certain conditions; type `show c' for details. @end smallexample @@ -386,7 +386,7 @@ @group Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' -(which makes passes at compilers) written +(which makes passes at compilers) written by James Hacker. @var{signature of Ty Coon}, 1 April 1989 @@ -441,7 +441,7 @@ because we consider them secondary (such as most of the individual modes) or because they are yet to be written. Because we are not able to deal with them completely, we have left out several parts -intentionally. This includes most information about usage on VMS. +intentionally. The manual should be fully correct in what it does cover, and it is therefore open to criticism on anything it says---from specific examples @@ -712,7 +712,7 @@ function, @code{foo}. * A Sample Variable Description:: A description of an imaginary variable, - @code{electric-future-map}. + @code{electric-future-map}. @end menu @node A Sample Function Description diff -r a8296e22da4e -r 576fb035e263 man/lispref/keymaps.texi --- a/man/lispref/keymaps.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/keymaps.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c Copyright (C) 1996 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/keymaps.info @@ -131,7 +131,7 @@ in it are @code{nil}, meaning ``command undefined''. The only difference between this function and @code{make-keymap} is that this function returns a ``smaller'' keymap (one that is expected to contain -fewer entries). As keymaps dynamically resize, the distinction is not +fewer entries). As keymaps dynamically resize, this distinction is not great. Optional argument @var{name} specifies a name to assign to the keymap, @@ -282,7 +282,7 @@ A ?A 65 (A) (?A) (65) [A] [?A] [65] [(A)] [(?A)] [(65)] @end example - + the @kbd{control-a} keystroke is represented by these forms: @example @@ -602,11 +602,13 @@ @end example @end defun -@defun current-local-map -This function returns the current buffer's local keymap, or @code{nil} -if it has none. In the following example, the keymap for the -@samp{*scratch*} buffer (using Lisp Interaction mode) has a number -of entries, including one prefix key, @kbd{C-x}. +@defun current-local-map &optional buffer +This function returns @var{buffer}'s local keymap, or @code{nil} +if it has none. @var{buffer} defaults to the current buffer. + +In the following example, the keymap for the @samp{*scratch*} buffer +(using Lisp Interaction mode) has a number of entries, including one +prefix key, @kbd{C-x}. @example @group @@ -931,8 +933,8 @@ @end example @end defun -@defun local-key-binding key &optional accept-defaults -This function returns the binding for @var{key} in the current +@defun local-key-binding keys &optional accept-defaults +This function returns the binding for @var{keys} in the current local keymap, or @code{nil} if it is undefined there. @c Emacs 19 feature @@ -940,8 +942,8 @@ as in @code{lookup-key} (above). @end defun -@defun global-key-binding key &optional accept-defaults -This function returns the binding for command @var{key} in the +@defun global-key-binding keys &optional accept-defaults +This function returns the binding for command @var{keys} in the current global keymap, or @code{nil} if it is undefined there. @c Emacs 19 feature @@ -1002,7 +1004,7 @@ @end group @group (setq meta-prefix-char 24) - @result{} 24 + @result{} 24 @end group @group (key-binding "\C-xb") @@ -1149,26 +1151,28 @@ changing the bindings of both @kbd{C-p C-f} and @kbd{C-x C-f} in the default global map. -@defun substitute-key-definition olddef newdef keymap &optional oldmap +@defun substitute-key-definition olddef newdef keymap &optional oldmap prefix @cindex replace bindings This function replaces @var{olddef} with @var{newdef} for any keys in @var{keymap} that were bound to @var{olddef}. In other words, -@var{olddef} is replaced with @var{newdef} wherever it appears. The -function returns @code{nil}. +@var{olddef} is replaced with @var{newdef} wherever it appears. Prefix +keymaps are checked recursively. + +The function returns @code{nil}. For example, this redefines @kbd{C-x C-f}, if you do it in an XEmacs with standard bindings: @smallexample @group -(substitute-key-definition +(substitute-key-definition 'find-file 'find-file-read-only (current-global-map)) @end group @end smallexample @c Emacs 19 feature If @var{oldmap} is non-@code{nil}, then its bindings determine which -keys to rebind. The rebindings still happen in @var{newmap}, not in +keys to rebind. The rebindings still happen in @var{keymap}, not in @var{oldmap}. Thus, you can change one map under the control of the bindings in another. For example, @@ -1182,6 +1186,11 @@ puts the special deletion command in @code{my-map} for whichever keys are globally bound to the standard deletion command. +If argument @var{prefix} is non-@code{nil}, then only those occurrences +of @var{olddef} found in keymaps accessible through the keymap bound to +@var{prefix} in @var{keymap} are redefined. See also +@code{accessible-keymaps}. + @ignore @c Emacs 18 only Prefix keymaps that appear within @var{keymap} are not checked @@ -1194,9 +1203,9 @@ @smallexample @group -(setq map '(keymap - (?1 . olddef-1) - (?2 . olddef-2) +(setq map '(keymap + (?1 . olddef-1) + (?2 . olddef-2) (?3 . olddef-1))) @result{} (keymap (49 . olddef-1) (50 . olddef-2) (51 . olddef-1)) @end group @@ -1225,8 +1234,8 @@ @code{negative-argument}. Otherwise it makes them undefined like the rest of the printing characters. -@cindex yank suppression -@cindex @code{quoted-insert} suppression +@cindex yank suppression +@cindex @code{quoted-insert} suppression The @code{suppress-keymap} function does not make it impossible to modify a buffer, as it does not suppress commands such as @code{yank} and @code{quoted-insert}. To prevent any modification of a buffer, make @@ -1404,7 +1413,7 @@ @smallexample @group -(current-local-map) +(current-local-map) @result{} # (accessible-keymaps (current-local-map)) @result{}(([] . #) @@ -1452,7 +1461,7 @@ @end defun @defun map-keymap function keymap &optional sort-first -This function applies @var{function} to each element of @code{KEYMAP}. +This function applies @var{function} to each element of @var{keymap}. @var{function} will be called with two arguments: a key-description list, and the binding. The order in which the elements of the keymap are passed to the function is unspecified. If the function inserts new @@ -1482,14 +1491,14 @@ The argument @var{definition} can be any object; it is compared with all keymap entries using @code{eq}. -KEYMAPS can be either a keymap (meaning search in that keymap and the +@var{keymaps} can be either a keymap (meaning search in that keymap and the current global keymap) or a list of keymaps (meaning search in exactly -those keymaps and no others). If KEYMAPS is nil, search in the currently -applicable maps for EVENT-OR-KEYS. +those keymaps and no others). If @var{keymaps} is nil, search in the currently +applicable maps for @var{event-or-keys}. -If @var{keymap} is a keymap, then the maps searched are @var{keymap} and -the global keymap. If @var{keymap} is a list of keymaps, then the maps -searched are exactly those keymaps, and no others. If @var{keymap} is +If @var{keymaps} is a keymap, then the maps searched are @var{keymaps} and +the global keymap. If @var{keymaps} is a list of keymaps, then the maps +searched are exactly those keymaps, and no others. If @var{keymaps} is @code{nil}, then the maps used are the current active keymaps for @var{event-or-keys} (this is equivalent to specifying @code{(current-keymaps @var{event-or-keys})} as the argument to @@ -1538,13 +1547,14 @@ @code{describe-bindings-internal} is used to implement the help command @code{describe-bindings}. -@deffn Command describe-bindings prefix mouse-only-p +@deffn Command describe-bindings &optional prefix mouse-only-p This function creates a listing of all defined keys and their definitions. It writes the listing in a buffer named @samp{*Help*} and displays it in a window. -If @var{prefix} is non-@code{nil}, it should be a prefix key; then the -listing includes only keys that start with @var{prefix}. +If optional argument @var{prefix} is non-@code{nil}, it should be a +prefix key; then the listing includes only keys that start with +@var{prefix}. When several characters with consecutive @sc{ascii} codes have the same definition, they are shown together, as @@ -1556,8 +1566,9 @@ the normal printing characters, (e.g., letters, digits, punctuation, etc.@:); all these characters are bound to @code{self-insert-command}. -If the second argument (prefix arg, interactively) is non-@code{nil} -then only the mouse bindings are displayed. +If the second optional argument @var{mouse-only-p} (prefix arg, +interactively) is non-@code{nil} then only the mouse bindings are +displayed. @end deffn @node Other Keymap Functions diff -r a8296e22da4e -r 576fb035e263 man/lispref/ldap.texi --- a/man/lispref/ldap.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/ldap.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1998 Free Software Foundation, Inc. +@c Copyright (C) 1998 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/ldap.info @node LDAP Support, PostgreSQL Support, ToolTalk Support, top @@ -58,7 +58,7 @@ @menu * LDAP Variables:: Lisp variables related to LDAP -* The High-Level LDAP API:: High-level LDAP lisp functions +* The High-Level LDAP API:: High-level LDAP lisp functions * The Low-Level LDAP API:: Low-level LDAP lisp primitives * LDAP Internationalization:: I18n variables and functions @end menu @@ -70,7 +70,7 @@ @defvar ldap-default-host The default LDAP server hostname. -A TCP port number can be appended to that name using a colon as +A TCP port number can be appended to that name using a colon as a separator. @end defvar @@ -87,7 +87,7 @@ @end defvar @defvar ldap-host-parameters-alist -An alist of per host options for LDAP transactions. +An alist of per host options for LDAP transactions. The list elements look like @code{(HOST PROP1 VAL1 PROP2 VAL2 ...)} @var{host} is the name of an LDAP server. A TCP port number can be appended to that name using a colon as a separator. @@ -105,12 +105,12 @@ library XEmacs was compiled with, they may include @code{simple}, @code{krbv41} and @code{krbv42}. @item base -The base for the search. This may look like @samp{cÿ, o¬me}, see +The base for the search. This may look like @samp{cÿ, o¬me}, see RFC 1779 for syntax details. @item scope -One of the symbols @code{base}, @code{onelevel} or @code{subtree} +One of the symbols @code{base}, @code{onelevel} or @code{subtree} indicating the scope of the search limited to a base -object, to a single level or to the whole subtree. +object, to a single level or to the whole subtree. @item deref The dereference policy is one of the symbols @code{never}, @code{always}, @code{search} or @code{find} and defines how aliases are @@ -146,63 +146,64 @@ operation (add/search/modify/delete) on one or several entries and cleanly close the connection thus insulating the user from all the details of the low-level interface such as LDAP Lisp objects @pxref{The -Low-Level LDAP API}. +Low-Level LDAP API}. Note that @code{ldap-search} which used to be the name of the high-level -search function in XEmacs 21.1 is now obsolete. For consistency in the +search function in XEmacs 21.1 is now obsolete. For consistency in the naming as well as backward compatibility, that function now acts as a wrapper that calls either @code{ldap-search-basic} (low-level search function) or @code{ldap-search-entries} (high-level search function) according to the actual parameters. A direct call to one of these two functions is preferred since it is faster and unambiguous. -@defun ldap-search-entries filter &optional host attributes attrsonly withdn +@deffn Command ldap-search-entries filter &optional host attributes attrsonly withdn Perform an LDAP search. @var{filter} is the search filter @pxref{Syntax of Search Filters} @var{host} is the LDAP host on which to perform the search. -@var{attributes} is the specific attributes to retrieve, @code{nil} means +@var{attributes} is the specific attributes to retrieve, @code{nil} means retrieve all. -@var{attrsonly} if non-@code{nil} retrieves the attributes only without +@var{attrsonly} if non-@code{nil} retrieves the attributes only without their associated values. If @var{withdn} is non-@code{nil} each entry in the result will be prepended with its distinguished name DN. -Additional search parameters can be specified through +Additional search parameters can be specified through @code{ldap-host-parameters-alist}. The function returns a list of matching entries. Each entry is itself an alist of attribute/value pairs optionally preceded by the DN of the entry according to the value of @var{withdn}. -@end defun +@end deffn @defun ldap-add-entries entries &optional host binddn passwd Add entries to an LDAP directory. @var{entries} is a list of entry -specifications of the form @code{(DN (ATTR . VALUE) (ATTR . VALUE) ...)} +specifications of the form @code{(DN (ATTR . VALUE) (ATTR . VALUE) ...)} where @var{dn} the distinguished name of an entry to add, the following -are cons cells containing attribute/value string pairs. @var{host} is -the LDAP host, defaulting to `ldap-default-host' @var{binddn} is the DN -to bind as to the server @var{passwd} is the corresponding password. +are cons cells containing attribute/value string pairs. +@var{host} is the LDAP host, defaulting to @code{ldap-default-host}. +@var{binddn} is the DN to bind as to the server. +@var{passwd} is the corresponding password. @end defun @defun ldap-modify-entries entry-mods &optional host binddn passwd Modify entries of an LDAP directory. -@var{entry_mods} is a list of entry modifications of the form -@code{(DN MOD-SPEC1 MOD-SPEC2 ...)} where @var{dn} is the distinguished name of -the entry to modify, the following are modification specifications. -A modification specification is itself a list of the form -@code{(MOD-OP ATTR VALUE1 VALUE2 ...)} @var{mod-op} and @var{attr} are mandatory, +@var{entry_mods} is a list of entry modifications of the form +@code{(DN MOD-SPEC1 MOD-SPEC2 ...)} where @var{dn} is the distinguished name of +the entry to modify, the following are modification specifications. +A modification specification is itself a list of the form +@code{(MOD-OP ATTR VALUE1 VALUE2 ...)} @var{mod-op} and @var{attr} are mandatory, @var{values} are optional depending on @var{mod-op}. @var{mod-op} is the type of modification, one of the symbols @code{add}, @code{delete} or @code{replace}. @var{attr} is the LDAP attribute type to modify. -@var{host} is the LDAP host, defaulting to @code{ldap-default-host} -@var{binddn} is the DN to bind as to the server -@var{passwd} is the corresponding password" +@var{host} is the LDAP host, defaulting to @code{ldap-default-host}. +@var{binddn} is the DN to bind as to the server. +@var{passwd} is the corresponding password. @end defun @defun ldap-delete-entries dn &optional host binddn passwd Delete an entry from an LDAP directory. -@var{dn} is the distinguished name of an entry to delete or +@var{dn} is the distinguished name of an entry to delete or a list of those. -@var{host} is the LDAP host, defaulting to @code{ldap-default-host} -@var{binddn} is the DN to bind as to the server +@var{host} is the LDAP host, defaulting to @code{ldap-default-host}. +@var{binddn} is the DN to bind as to the server. @var{passwd} is the corresponding password. @end defun @@ -222,9 +223,9 @@ renamed in XEmacs 21.2 @menu -* The LDAP Lisp Object:: -* Opening and Closing a LDAP Connection:: -* Low-level Operations on a LDAP Server:: +* The LDAP Lisp Object:: +* Opening and Closing a LDAP Connection:: +* Low-level Operations on a LDAP Server:: @end menu @node The LDAP Lisp Object, Opening and Closing a LDAP Connection, The Low-Level LDAP API, The Low-Level LDAP API @@ -239,11 +240,11 @@ @end defun @defun ldap-host ldap -Return the server host of the connection represented by @var{ldap} +Return the server host of the connection represented by @var{ldap}. @end defun @defun ldap-live-p ldap -Return non-@code{nil} if @var{ldap} is an active LDAP connection +Return non-@code{nil} if @var{ldap} is an active LDAP connection. @end defun @@ -274,13 +275,13 @@ dereferenced. @table @code @item never -Aliases are never dereferenced +Aliases are never dereferenced. @item always -Aliases are always dereferenced +Aliases are always dereferenced. @item search -Aliases are dereferenced when searching +Aliases are dereferenced when searching. @item find -Aliases are dereferenced when locating the base object for the search +Aliases are dereferenced when locating the base object for the search. @end table The default is @code{never}. @item timelimit @@ -291,7 +292,7 @@ @end defun @defun ldap-close ldap -Close the connection represented by @var{ldap} +Close the connection represented by @var{ldap}. @end defun @@ -305,7 +306,7 @@ searches can be made on the same connection, then the session must be closed with @code{ldap-close}. -@defun ldap-search-basic ldap filter base scope attrs attrsonly +@defun ldap-search-basic ldap filter &optional base scope attrs attrsonly withdn verbose Perform a search on an open connection @var{ldap} created with @code{ldap-open}. @var{filter} is a filter string for the search @pxref{Syntax of Search Filters} @var{base} is the distinguished name at which to start the search. @@ -313,16 +314,16 @@ @code{subtree} indicating the scope of the search limited to a base object, to a single level or to the whole subtree. The default is @code{subtree}. -@code{attrs} is a list of strings indicating which attributes to retrieve +@var{attrs} is a list of strings indicating which attributes to retrieve for each matching entry. If @code{nil} all available attributes are returned. -If @code{attrsonly} is non-@code{nil} then only the attributes are retrieved, not -their associated values -If @code{withdn} is non-@code{nil} then each entry in the result is prepended with -its distinguished name DN -If @code{verbose} is non-@code{nil} then progress messages are echoed +If @var{attrsonly} is non-@code{nil} then only the attributes are +retrieved, not their associated values. +If @var{withdn} is non-@code{nil} then each entry in the result is +prepended with its distinguished name DN. +If @var{verbose} is non-@code{nil} then progress messages are echoed The function returns a list of matching entries. Each entry is itself an alist of attribute/value pairs optionally preceded by the DN of the -entry according to the value of @code{withdn}. +entry according to the value of @var{withdn}. @end defun @defun ldap-add ldap dn entry @@ -341,13 +342,13 @@ A modification is a list of the form @code{(MOD-OP ATTR VALUE1 VALUE2 ...)} @var{mod-op} and @var{attr} are mandatory, @var{values} are optional depending on @var{mod-op}. @var{mod-op} is the type of modification, one of the symbols @code{add}, @code{delete} -or @code{replace}. @var{attr} is the LDAP attribute type to modify +or @code{replace}. @var{attr} is the LDAP attribute type to modify. @end defun @defun ldap-delete ldap dn Delete an entry to an LDAP directory. @var{ldap} is an LDAP connection object created with @code{ldap-open}. -@var{dn} is the distinguished name of the entry to delete +@var{dn} is the distinguished name of the entry to delete. @end defun @@ -370,8 +371,8 @@ @end defun @menu -* LDAP Internationalization Variables:: -* Encoder/Decoder Functions:: +* LDAP Internationalization Variables:: +* Encoder/Decoder Functions:: @end menu @node LDAP Internationalization Variables, Encoder/Decoder Functions, LDAP Internationalization, LDAP Internationalization @@ -384,20 +385,20 @@ @defvar ldap-coding-system Coding system of LDAP string values. -LDAP v3 specifies the coding system of strings to be UTF-8. +LDAP v3 specifies the coding system of strings to be UTF-8. You need an XEmacs with Mule support for this. @end defvar @defvar ldap-default-attribute-decoder Decoder function to use for attributes whose syntax is unknown. Such a function receives an encoded attribute value as a string and should -return the decoded value as a string +return the decoded value as a string. @end defvar @defvar ldap-attribute-syntax-encoders A vector of functions used to encode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2. As of this writing, only a few encoder functions are available. @end defvar @@ -405,14 +406,14 @@ @defvar ldap-attribute-syntax-decoders A vector of functions used to decode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2. As of this writing, only a few decoder functions are available. @end defvar @defvar ldap-attribute-syntaxes-alist A map of LDAP attribute names to their type object id minor number. -This table is built from RFC2252 Section 5 and RFC2256 Section 5 +This table is built from RFC2252 Section 5 and RFC2256 Section 5. @end defvar @node Encoder/Decoder Functions, , LDAP Internationalization Variables, LDAP Internationalization @@ -421,32 +422,32 @@ @defun ldap-encode-boolean bool A function that encodes an elisp boolean @var{bool} into a LDAP -boolean string representation +boolean string representation. @end defun @defun ldap-decode-boolean str A function that decodes a LDAP boolean string representation -@var{str} into an elisp boolean +@var{str} into an elisp boolean. @end defun @defun ldap-decode-string str -Decode a string @var{str} according to `ldap-coding-system' +Decode a string @var{str} according to @var{ldap-coding-system}. @end defun @defun ldap-encode-string str -Encode a string @var{str} according to `ldap-coding-system' +Encode a string @var{str} according to @var{ldap-coding-system}. @end defun @defun ldap-decode-address str -Decode an address @var{str} according to `ldap-coding-system' and +Decode an address @var{str} according to @var{ldap-coding-system} and replacing $ signs with newlines as specified by LDAP encoding rules for -addresses +addresses. @end defun @defun ldap-encode-address str -Encode an address @var{str} according to `ldap-coding-system' and +Encode an address @var{str} according to @var{ldap-coding-system} and replacing newlines with $ signs as specified by LDAP encoding rules for -addresses +addresses. @end defun @@ -468,9 +469,9 @@ @code{} is the corresponding value. This is generally an exact string but may also contain @code{*} characters as wildcards -@code{filtertype} is one @code{=} @code{~=}, @code{<=}, @code{>=} which +@code{filtertype} is one @code{=} @code{~=}, @code{<=}, @code{>=} which respectively describe equality, approximate equality, inferiority and -superiority. +superiority. Thus @code{(cn=John Smith)} matches all records having a canonical name equal to John Smith. @@ -485,5 +486,5 @@ @code{(&(objectClass=Person)(mail=*)(|(sn=Smith)(givenname=John)))} matches records of class @code{Person} containing a @code{mail} -attribute and corresponding to people whose last name is @code{Smith} or +attribute and corresponding to people whose last name is @code{Smith} or whose first name is @code{John}. diff -r a8296e22da4e -r 576fb035e263 man/lispref/lispref.texi --- a/man/lispref/lispref.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/lispref.texi Mon Aug 13 11:36:19 2007 +0200 @@ -247,8 +247,8 @@ Format of Descriptions -* A Sample Function Description:: -* A Sample Variable Description:: +* A Sample Function Description:: +* A Sample Variable Description:: Lisp Data Types @@ -365,7 +365,7 @@ * Intro Eval:: Evaluation in the scheme of things. * Eval:: How to invoke the Lisp interpreter explicitly. * Forms:: How various sorts of objects are evaluated. -* Quoting:: Avoiding evaluation (to put constants in +* Quoting:: Avoiding evaluation (to put constants in the program). Kinds of Forms @@ -418,11 +418,11 @@ Scoping Rules for Variable Bindings -* Scope:: Scope means where in the program a value +* Scope:: Scope means where in the program a value is visible. Comparison with other languages. * Extent:: Extent means how long in time a value exists. * Impl of Scope:: Two ways to implement dynamic scoping. -* Using Scoping:: How to use dynamic scoping carefully and +* Using Scoping:: How to use dynamic scoping carefully and avoid problems. Buffer-Local Variables @@ -440,11 +440,11 @@ * Defining Functions:: Lisp expressions for defining functions. * Calling Functions:: How to use an existing function. * Mapping Functions:: Applying a function to each element of a list, etc. -* Anonymous Functions:: Lambda-expressions are functions with no names. +* Anonymous Functions:: Lambda-expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. * Related Topics:: Cross-references to specific Lisp primitives - that have a special bearing on how + that have a special bearing on how functions work. Lambda Expressions @@ -480,10 +480,10 @@ * Debugger:: How the XEmacs Lisp debugger is implemented. * Syntax Errors:: How to find syntax errors. -* Compilation Errors:: How to find errors that show up in +* Compilation Errors:: How to find errors that show up in byte compilation. * Edebug:: A source-level XEmacs Lisp debugger. - + The Lisp Debugger * Error Debugging:: Entering the debugger when an error happens. @@ -502,10 +502,10 @@ Reading and Printing Lisp Objects * Streams Intro:: Overview of streams, reading and printing. -* Input Streams:: Various data types that can be used as +* Input Streams:: Various data types that can be used as input streams. * Input Functions:: Functions to read Lisp objects from text. -* Output Streams:: Various data types that can be used as +* Output Streams:: Various data types that can be used as output streams. * Output Functions:: Functions to print Lisp objects as text. @@ -634,7 +634,7 @@ * Major Modes:: Defining major modes. * Minor Modes:: Defining minor modes. * Modeline Format:: Customizing the text that appears in the modeline. -* Hooks:: How to use hooks; how to write code that +* Hooks:: How to use hooks; how to write code that provides hooks. Major Modes @@ -694,7 +694,7 @@ * File Name Components:: The directory part of a file name, and the rest. * Directory Names:: A directory's name as a directory is different from its name as a file. -* Relative File Names:: Some file names are relative to a +* Relative File Names:: Some file names are relative to a current directory. * File Name Expansion:: Converting relative file names to absolute ones. * Unique File Names:: Generating names for temporary files. @@ -702,17 +702,17 @@ Backups and Auto-Saving -* Backup Files:: How backup files are made; how their names +* Backup Files:: How backup files are made; how their names are chosen. * Auto-Saving:: How auto-save files are made; how their names are chosen. -* Reverting:: @code{revert-buffer}, and how to customize +* Reverting:: @code{revert-buffer}, and how to customize what it does. Backup Files * Making Backups:: How XEmacs makes backup files, and when. -* Rename or Copy:: Two alternatives: renaming the old file +* Rename or Copy:: Two alternatives: renaming the old file or copying it. * Numbered Backups:: Keeping multiple backups for each source file. * Backup Names:: How backup file names are computed; customization. @@ -746,7 +746,7 @@ and choosing a window for it. * Window Point:: Each window has its own location of point. * Window Start:: The display-start position controls which text - is on-screen in the window. + is on-screen in the window. * Vertical Scrolling:: Moving text up and down in the window. * Horizontal Scrolling:: Moving text sideways on the window. * Size of Window:: Accessing the size of a window. @@ -792,7 +792,7 @@ * Predicates on Markers:: Testing whether an object is a marker. * Creating Markers:: Making empty markers or markers at certain places. * Information from Markers:: Finding the marker's buffer or character - position. + position. * Changing Markers:: Moving the marker to a new buffer or position. * The Mark:: How ``the mark'' is implemented with a marker. * The Region:: How to access ``the region''. @@ -823,7 +823,7 @@ position stored in a register. * Transposition:: Swapping two portions of a buffer. * Change Hooks:: Supplying functions to be run when text is changed. - + The Kill Ring * Kill Ring Concepts:: What text looks like in the kill ring. @@ -1097,20 +1097,20 @@ XEmacs LDAP API * LDAP Variables:: Lisp variables related to LDAP -* The High-Level LDAP API:: High-level LDAP lisp functions +* The High-Level LDAP API:: High-level LDAP lisp functions * The Low-Level LDAP API:: Low-level LDAP lisp primitives * LDAP Internationalization:: I18n variables and functions The Low-Level LDAP API -* The LDAP Lisp Object:: -* Opening and Closing a LDAP Connection:: -* Low-level Operations on a LDAP Server:: +* The LDAP Lisp Object:: +* Opening and Closing a LDAP Connection:: +* Low-level Operations on a LDAP Server:: LDAP Internationalization -* LDAP Internationalization Variables:: -* Encoder/Decoder Functions:: +* LDAP Internationalization Variables:: +* Encoder/Decoder Functions:: Internationalization diff -r a8296e22da4e -r 576fb035e263 man/lispref/lists.texi --- a/man/lispref/lists.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/lists.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/lists.info @node Lists, Sequences Arrays Vectors, Strings and Characters, Top @@ -698,8 +698,8 @@ used on a list, @code{setcar} replaces one element of a list with a different element. -@defun setcar cons object -This function stores @var{object} as the new @sc{car} of @var{cons}, +@defun setcar cons-cell object +This function stores @var{object} as the new @sc{car} of @var{cons-cell}, replacing its previous @sc{car}. It returns the value @var{object}. For example: @@ -798,8 +798,8 @@ The lowest-level primitive for modifying a @sc{cdr} is @code{setcdr}: -@defun setcdr cons object -This function stores @var{object} as the new @sc{cdr} of @var{cons}, +@defun setcdr cons-cell object +This function stores @var{object} as the new @sc{cdr} of @var{cons-cell}, replacing its previous @sc{cdr}. It returns the value @var{object}. @end defun @@ -1598,30 +1598,30 @@ @node Working With Normal Plists @subsection Working With Normal Plists -@defun plist-get plist prop &optional default +@defun plist-get plist property &optional default This function extracts a value from a property list. The function -returns the value corresponding to the given @var{prop}, or -@var{default} if @var{prop} is not one of the properties on the list. +returns the value corresponding to the given @var{property}, or +@var{default} if @var{property} is not one of the properties on the list. @end defun -@defun plist-put plist prop val -This function changes the value in @var{plist} of @var{prop} to -@var{val}. If @var{prop} is already a property on the list, its value is -set to @var{val}, otherwise the new @var{prop} @var{val} pair is added. -The new plist is returned; use @code{(setq x (plist-put x prop val))} to +@defun plist-put plist property value +This function changes the value in @var{plist} of @var{property} to +@var{value}. If @var{property} is already a property on the list, its value is +set to @var{value}, otherwise the new @var{property} @var{value} pair is added. +The new plist is returned; use @code{(setq x (plist-put x property value))} to be sure to use the new value. The @var{plist} is modified by side effects. @end defun -@defun plist-remprop plist prop -This function removes from @var{plist} the property @var{prop} and its +@defun plist-remprop plist property +This function removes from @var{plist} the property @var{property} and its value. The new plist is returned; use @code{(setq x (plist-remprop x -prop val))} to be sure to use the new value. The @var{plist} is +property))} to be sure to use the new value. The @var{plist} is modified by side effects. @end defun -@defun plist-member plist prop -This function returns @code{t} if @var{prop} has a value specified in +@defun plist-member plist property +This function returns @code{t} if @var{property} has a value specified in @var{plist}. @end defun @@ -1657,25 +1657,25 @@ Recall that a @dfn{lax plist} is a property list whose keys are compared using @code{equal} instead of @code{eq}. -@defun lax-plist-get lax-plist prop &optional default +@defun lax-plist-get lax-plist property &optional default This function extracts a value from a lax property list. The function -returns the value corresponding to the given @var{prop}, or -@var{default} if @var{prop} is not one of the properties on the list. +returns the value corresponding to the given @var{property}, or +@var{default} if @var{property} is not one of the properties on the list. @end defun -@defun lax-plist-put lax-plist prop val -This function changes the value in @var{lax-plist} of @var{prop} to @var{val}. +@defun lax-plist-put lax-plist property value +This function changes the value in @var{lax-plist} of @var{property} to @var{value}. @end defun -@defun lax-plist-remprop lax-plist prop -This function removes from @var{lax-plist} the property @var{prop} and +@defun lax-plist-remprop lax-plist property +This function removes from @var{lax-plist} the property @var{property} and its value. The new plist is returned; use @code{(setq x -(lax-plist-remprop x prop val))} to be sure to use the new value. The +(lax-plist-remprop x property))} to be sure to use the new value. The @var{lax-plist} is modified by side effects. @end defun -@defun lax-plist-member lax-plist prop -This function returns @code{t} if @var{prop} has a value specified in +@defun lax-plist-member lax-plist property +This function returns @code{t} if @var{property} has a value specified in @var{lax-plist}. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/loading.texi --- a/man/lispref/loading.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/loading.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/loading.info @node Loading, Byte Compilation, Macros, Top @@ -300,9 +300,9 @@ specifies the file to load to get the real definition of @var{function}. The argument @var{docstring} is the documentation string for the -function. Normally, this is the identical to the documentation string -in the function definition itself. Specifying the documentation string -in the call to @code{autoload} makes it possible to look at the +function. Normally, this is identical to the documentation string in +the function definition itself. Specifying the documentation string in +the call to @code{autoload} makes it possible to look at the documentation without loading the function's real definition. If @var{interactive} is non-@code{nil}, then the function can be called @@ -314,9 +314,9 @@ You can autoload macros and keymaps as well as ordinary functions. Specify @var{type} as @code{macro} if @var{function} is really a macro. -Specify @var{type} as @code{keymap} if @var{function} is really a -keymap. Various parts of Emacs need to know this information without -loading the real definition. +Specify @var{type} as @code{keymap} if @var{function} is really a keymap. +Various parts of Emacs need to know this information without loading the +real definition. An autoloaded keymap loads automatically during key lookup when a prefix key's binding is the symbol @var{function}. Autoloading does not occur @@ -335,7 +335,7 @@ (autoload @var{filename} @var{docstring} @var{interactive} @var{type}) @end example -For example, +For example, @example @group @@ -509,7 +509,7 @@ Features are normally named after the files that provide them, so that @code{require} need not be given the file name. - For example, in @file{emacs/lisp/prolog.el}, + For example, in @file{emacs/lisp/prolog.el}, the definition for @code{run-prolog} includes the following code: @smallexample @@ -609,11 +609,11 @@ @var{fexp} can be a symbol, a number, or a list. -If @var{fexp} is a symbol, it is looked up in the `features' variable, +If @var{fexp} is a symbol, it is looked up in the @code{features} variable, and @code{t} is returned if it is found, @code{nil} otherwise. If @var{fexp} is a number, the function returns @code{t} if this Emacs -has an equal or greater number than @code{fexp}, @code{nil} otherwise. +has an equal or greater number than @var{fexp}, @code{nil} otherwise. Note that minor Emacs version is expected to be 2 decimal places wide, so @code{(featurep 20.4)} will return @code{nil} on XEmacs 20.4---you must write @code{(featurep 20.04)}, unless you wish to match for XEmacs @@ -627,7 +627,7 @@ returns @code{t} if any the features in its cdr are present, @code{nil} otherwise. -If @var{fexp} is a list whose car is the symbol @code{not}, the function +If @var{fexp} is a list whose car is the symbol @code{not}, the function returns @code{t} if the feature is not present, @code{nil} otherwise. Examples: diff -r a8296e22da4e -r 576fb035e263 man/lispref/locals.texi --- a/man/lispref/locals.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/locals.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/locals.info @node Standard Buffer-Local Variables, Standard Keymaps, Standard Errors, Top diff -r a8296e22da4e -r 576fb035e263 man/lispref/macros.texi --- a/man/lispref/macros.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/macros.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/macros.info @node Macros, Loading, Functions, Top @@ -282,7 +282,7 @@ @end group @end example -@quotation +@quotation In older versions of Emacs (before XEmacs 19.12 or FSF Emacs version 19.29), @samp{`} used a different syntax which required an extra level of parentheses around the entire backquote construct. Likewise, each @@ -397,7 +397,7 @@ @end group @end smallexample -Here is a macro definition that creates this expansion: +Here is a macro definition that creates this expansion: @smallexample @group diff -r a8296e22da4e -r 576fb035e263 man/lispref/maps.texi --- a/man/lispref/maps.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/maps.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/maps.info @node Standard Keymaps, Standard Hooks, Standard Buffer-Local Variables, Top @@ -163,7 +163,7 @@ @item read-shell-command-map @vindex read-shell-command-map -The minibuffer keymap used by shell-command and related commands. +The minibuffer keymap used by @code{shell-command} and related commands. @item shared-lisp-mode-map @vindex shared-lisp-mode-map diff -r a8296e22da4e -r 576fb035e263 man/lispref/markers.texi --- a/man/lispref/markers.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/markers.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/markers.info @node Markers, Text, Positions, Top @@ -258,7 +258,7 @@ @end example @end defun -@defun copy-marker marker-or-integer +@defun copy-marker marker-or-integer &optional marker-type If passed a marker as its argument, @code{copy-marker} returns a new marker that points to the same place and the same buffer as does @var{marker-or-integer}. If passed an integer as its argument, @@ -271,8 +271,11 @@ @code{copy-marker} returns a new marker that points to the end of the buffer. -An error is signaled if @var{marker} is neither a marker nor an -integer. +An error is signaled if @var{marker-or-integer} is neither a marker nor +an integer. + +Optional second argument @var{marker-type} specifies the insertion type +of the new marker; see @code{marker-insertion-type}. @example @group @@ -399,11 +402,14 @@ in @var{buffer}. If @var{buffer} is not provided, it defaults to the current buffer. -If @var{position} is less than 1, @code{set-marker} moves @var{marker} -to the beginning of the buffer. If @var{position} is greater than the -size of the buffer, @code{set-marker} moves marker to the end of the -buffer. If @var{position} is @code{nil} or a marker that points -nowhere, then @var{marker} is set to point nowhere. +@var{position} can be a marker, an integer or @code{nil}. If +@var{position} is an integer, @code{set-marker} moves @var{marker} to +point before the @var{position}th character in @var{buffer}. If +@var{position} is @code{nil}, @var{marker} is made to point nowhere. +Then it no longer slows down editing in any buffer. If @var{position} +is less than 1, @var{marker} is moved to the beginning of @var{buffer}. +If @var{position} is greater than the size of @var{buffer}, @var{marker} +is moved to the end of @var{buffer}. The value returned is @var{marker}. @@ -510,7 +516,7 @@ a mistake; see the documentation of @code{set-mark} below. @end defun -@defun mark-marker inactive-p buffer +@defun mark-marker &optional force buffer This function returns @var{buffer}'s mark. @var{buffer} defaults to the current buffer if omitted. This is the very marker that records the mark location inside XEmacs, not a copy. Therefore, changing this @@ -576,9 +582,9 @@ @example @group -(let ((beg (point))) +(let ((start (point))) (forward-line 1) - (delete-region beg (point))). + (delete-region start (point))). @end group @end example @end defun @@ -621,7 +627,7 @@ @example @group mark-ring -@result{} (# +@result{} (# # @dots{}) @end group diff -r a8296e22da4e -r 576fb035e263 man/lispref/menus.texi --- a/man/lispref/menus.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/menus.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1997 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1997 Free Software Foundation, Inc. @c Copyright (C) 1995 Sun Microsystems. @c See the file lispref.texi for copying conditions. @setfilename ../../info/menu.info @@ -366,7 +366,7 @@ top-level ``File'' menu. @code{("Menu" "Foo" "Item")} means the menu item called ``Item'' under the ``Foo'' submenu of ``Menu''. -@defun add-submenu menu-path submenu &optional before +@defun add-submenu menu-path submenu &optional before in-menu This function adds a menu to the menubar or one of its submenus. If the named menu exists already, it is changed. @@ -379,9 +379,12 @@ @var{before}, if provided, is the name of a menu before which this menu should be added, if this menu is not on its parent already. If the menu is already present, it will not be moved. + +If @var{in-menu} is present use that instead of @code{current-menubar} +as the menu to change. @end defun -@defun add-menu-button menu-path menu-leaf &optional before +@defun add-menu-button menu-path menu-leaf &optional before in-menu This function adds a menu item to some menu, creating the menu first if necessary. If the named item exists already, it is changed. @@ -393,11 +396,17 @@ @var{before}, if provided, is the name of a menu before which this item should be added, if this item is not on the menu already. If the item is already present, it will not be moved. + +If @var{in-menu} is present use that instead of @code{current-menubar} +as the menu to change. @end defun -@defun delete-menu-item menu-item-path +@defun delete-menu-item menu-item-path &optional from-menu This function removes the menu item specified by @var{menu-item-path} from the menu hierarchy. + +If @var{from-menu} is present use that instead of @code{current-menubar} +as the menu to change. @end defun @defun enable-menu-item menu-item-path @@ -526,10 +535,10 @@ @section Pop-Up Menus @cindex pop-up menu -@defun popup-menu menu-desc -This function pops up a menu specified by @var{menu-desc}, which is a -menu description (@pxref{Menu Format}). The menu is displayed at the -current mouse position. +@defun popup-menu menu-description &optional event +This function pops up a menu specified by @var{menu-description}, which +is a menu description (@pxref{Menu Format}). The menu is displayed at +the current mouse position. @end defun @defun popup-menu-up-p @@ -579,14 +588,15 @@ The following convenience functions are provided for displaying pop-up menus. -@defun popup-buffer-menu event +@deffn Command popup-buffer-menu event This function pops up a copy of the @samp{Buffers} menu (from the menubar) -where the mouse is clicked. -@end defun +where the mouse is clicked. It should be bound to a mouse button event. +@end deffn -@defun popup-menubar-menu event +@deffn Command popup-menubar-menu event This function pops up a copy of menu that also appears in the menubar. -@end defun +It should be bound to a mouse button event. +@end deffn @node Menu Accelerators @section Menu Accelerators @@ -651,10 +661,10 @@ @node Menu Accelerator Functions @subsection Menu Accelerator Functions -@defun accelerate-menu +@deffn Command accelerate-menu Make the menubar immediately active and place the cursor on the left most entry in the top level menu. Menu items can be selected as usual. -@end defun +@end deffn @defvar menu-accelerator-enabled Whether menu accelerator keys can cause the menubar to become active. diff -r a8296e22da4e -r 576fb035e263 man/lispref/minibuf.texi --- a/man/lispref/minibuf.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/minibuf.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/minibuf.info @node Minibuffers, Command Loop, Read and Print, Top @@ -95,7 +95,7 @@ @code{read} to convert the text into a Lisp object (@pxref{Input Functions}). -The first thing this function does is to activate a minibuffer and +The first thing this function does is to activate a minibuffer and display it with @var{prompt-string} as the prompt. This value must be a string. @@ -156,9 +156,9 @@ @code{read-from-minibuffer}. The keymap used is @code{minibuffer-local-map}. -The optional argument @var{history}, if non-nil, specifies a history +The optional argument @var{history}, if non-@code{nil}, specifies a history list and optionally the initial position in the list. The optional -argument @var{default} specifies a default value to return if the user +argument @var{default-value} specifies a default value to return if the user enters null input; it should be a string. This function is a simplified interface to the @@ -213,7 +213,7 @@ without evaluating it. The arguments @var{prompt} and @var{initial} are used as in @code{read-from-minibuffer}. -The optional argument @var{history}, if non-nil, specifies a history +The optional argument @var{history}, if non-@code{nil}, specifies a history list and optionally the initial position in the list. The optional argument @var{default-value} specifies a default value to return if the user enters null input; it should be a string. @@ -264,7 +264,7 @@ it, then returns the result. The arguments @var{prompt} and @var{initial} are used as in @code{read-from-minibuffer}. -The optional argument @var{history}, if non-nil, specifies a history +The optional argument @var{history}, if non-@code{nil}, specifies a history list and optionally the initial position in the list. The optional argument @var{default-value} specifies a default value to return if the user enters null input; it should be a string. @@ -281,10 +281,10 @@ @end smallexample @end defun -@defun edit-and-eval-command prompt command &optional history +@defun edit-and-eval-command prompt form &optional history This function reads a Lisp expression in the minibuffer, and then evaluates it. The difference between this command and -@code{eval-minibuffer} is that here the initial @var{command} is not +@code{eval-minibuffer} is that here the initial @var{form} is not optional and it is treated as a Lisp object to be converted to printed representation rather than as a string of text. It is printed with @code{prin1}, so if it is a string, double-quote characters (@samp{"}) @@ -304,7 +304,7 @@ @group (edit-and-eval-command "Please edit: " '(forward-word 1)) -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following appears in the minibuffer:} @end group @@ -456,7 +456,7 @@ features that do use the minibuffer. @defun try-completion string collection &optional predicate -This function returns the longest common substring of all possible +This function returns the longest common prefix of all possible completions of @var{string} in @var{collection}. The value of @var{collection} must be an alist, an obarray, or a function that implements a virtual set of strings (see below). @@ -506,7 +506,7 @@ @smallexample @group -(try-completion +(try-completion "foo" '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))) @result{} "fooba" @@ -536,44 +536,40 @@ @smallexample @group -(defun test (s) +(defun test (s) (> (length (car s)) 6)) @result{} test @end group @group -(try-completion +(try-completion "foo" - '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) + '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) 'test) @result{} "foobar" @end group @end smallexample @end defun -@defun all-completions string collection &optional predicate nospace -This function returns a list of all possible completions of -@var{string}. The arguments to this function are the same as those of -@code{try-completion}. +@defun all-completions string collection &optional predicate +This function returns a list of all possible completions of @var{string}. +The arguments to this function are the same as those of @code{try-completion}. If @var{collection} is a function, it is called with three arguments: @var{string}, @var{predicate} and @code{t}; then @code{all-completions} returns whatever the function returns. @xref{Programmed Completion}. -If @var{nospace} is non-@code{nil}, completions that start with a space -are ignored unless @var{string} also starts with a space. - Here is an example, using the function @code{test} shown in the example for @code{try-completion}: @smallexample @group -(defun test (s) +(defun test (s) (> (length (car s)) 6)) @result{} test @end group @group -(all-completions +(all-completions "foo" '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) 'test) @@ -583,7 +579,7 @@ @end defun @defvar completion-ignore-case -If the value of this variable is +If the value of this variable is non-@code{nil}, XEmacs does not consider case significant in completion. @end defvar @@ -649,7 +645,7 @@ @end group @group -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following appears in the minibuffer:} ---------- Buffer: Minibuffer ---------- @@ -834,7 +830,7 @@ @example (read-buffer "Buffer name? " "foo" t) @group -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following prompt appears,} ;; @r{with an empty minibuffer:} @end group @@ -869,13 +865,13 @@ (read-command "Command name? ") @group -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following prompt appears with an empty minibuffer:} @end group @group ----------- Buffer: Minibuffer ---------- -Command name? +---------- Buffer: Minibuffer ---------- +Command name? ---------- Buffer: Minibuffer ---------- @end group @end example @@ -894,7 +890,7 @@ @group (read-command @var{prompt}) @equiv{} -(intern (completing-read @var{prompt} obarray +(intern (completing-read @var{prompt} obarray 'commandp t nil)) @end group @end example @@ -906,7 +902,7 @@ The argument @var{default-value} specifies what to return if the user enters null input. It can be a symbol or a string; if it is a string, -@code{read-variable} interns it before returning it. If @var{default} +@code{read-variable} interns it before returning it. If @var{default-value} is @code{nil}, that means no default has been specified; then if the user enters null input, the return value is @code{nil}. @@ -914,8 +910,8 @@ @group (read-variable "Variable name? ") -;; @r{After evaluation of the preceding expression,} -;; @r{the following prompt appears,} +;; @r{After evaluation of the preceding expression,} +;; @r{the following prompt appears,} ;; @r{with an empty minibuffer:} @end group @@ -980,13 +976,13 @@ @var{initial} is @code{nil}---don't insert any file name. To see what @var{initial} does, try the command @kbd{C-x C-v}. -Here is an example: +Here is an example: @example @group (read-file-name "The file is ") -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following appears in the minibuffer:} @end group @@ -1172,13 +1168,13 @@ @group (y-or-n-p "Do you need a lift? ") -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following prompt appears in the echo area:} @end group @group ---------- Echo area ---------- -Do you need a lift? (y or n) +Do you need a lift? (y or n) ---------- Echo area ---------- @end group @@ -1186,7 +1182,7 @@ @group ---------- Echo area ---------- -Please answer y or n. Do you need a lift? (y or n) +Please answer y or n. Do you need a lift? (y or n) ---------- Echo area ---------- @end group @@ -1225,14 +1221,14 @@ @group (yes-or-no-p "Do you really want to remove everything? ") -;; @r{After evaluation of the preceding expression,} -;; @r{the following prompt appears,} +;; @r{After evaluation of the preceding expression,} +;; @r{the following prompt appears,} ;; @r{with an empty minibuffer:} @end group @group ---------- Buffer: minibuffer ---------- -Do you really want to remove everything? (yes or no) +Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ---------- @end group @end smallexample @@ -1390,13 +1386,13 @@ @end defun @defopt passwd-invert-frame-when-keyboard-grabbed -If non-nil swap the foreground and background colors of all faces while -reading a password. Default values is @code{t} unless feature +If non-@code{nil}, swap the foreground and background colors of all faces while +reading a password. Default values is @code{t}, unless feature @code{infodock} is provided. @end defopt @defopt passwd-echo -This specifies the character echoed when typing a password. When nil, +This specifies the character echoed when typing a password. When @code{nil}, nothing is echoed. @end defopt @@ -1478,7 +1474,7 @@ @end defun @c Emacs 19 feature -@defun window-minibuffer-p window +@defun window-minibuffer-p &optional window This function returns non-@code{nil} if @var{window} is a minibuffer window. @end defun @@ -1515,7 +1511,7 @@ editing the inner one. This variable only affects invoking the minibuffer while the -minibuffer window is selected. If you switch windows while in the +minibuffer window is selected. If you switch windows while in the minibuffer, you can always invoke minibuffer commands while some other window is selected. @end defopt diff -r a8296e22da4e -r 576fb035e263 man/lispref/modes.texi --- a/man/lispref/modes.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/modes.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/modes.info @node Modes, Documentation, Drag and Drop, Top @@ -79,7 +79,7 @@ * Example Major Modes:: Text mode and Lisp modes. * Auto Major Mode:: How XEmacs chooses the major mode automatically. * Mode Help:: Finding out how to use a mode. -* Derived Modes:: Defining a new major mode based on another major +* Derived Modes:: Defining a new major mode based on another major mode. @end menu @@ -249,7 +249,7 @@ @smallexample @group ;; @r{Create mode-specific tables.} -(defvar text-mode-syntax-table nil +(defvar text-mode-syntax-table nil "Syntax table used while in text mode.") @end group @@ -285,7 +285,7 @@ @smallexample @group (defun text-mode () - "Major mode for editing text intended for humans to read. + "Major mode for editing text intended for humans to read. Special commands: \\@{text-mode-map@} @end group @group @@ -315,7 +315,7 @@ @smallexample @group ;; @r{Create mode-specific table variables.} -(defvar lisp-mode-syntax-table nil "") +(defvar lisp-mode-syntax-table nil "") (defvar emacs-lisp-mode-syntax-table nil "") (defvar lisp-mode-abbrev-table nil "") @end group @@ -331,7 +331,7 @@ ;; @r{Set syntax of chars up to 0 to class of chars that are} ;; @r{part of symbol names but not words.} ;; @r{(The number 0 is @code{48} in the @sc{ascii} character set.)} - (while (< i ?0) + (while (< i ?0) (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table) (setq i (1+ i))) @dots{} @@ -432,7 +432,7 @@ @smallexample @group -(defvar emacs-lisp-mode-map () "") +(defvar emacs-lisp-mode-map () "") (if emacs-lisp-mode-map () (setq emacs-lisp-mode-map (make-sparse-keymap)) @@ -442,7 +442,7 @@ @end smallexample Finally, here is the complete major mode function definition for -Emacs Lisp mode. +Emacs Lisp mode. @smallexample @group @@ -545,7 +545,7 @@ How Major Modes are Chosen, emacs, The XEmacs Reference Manual}. @end defun -@defopt default-major-mode +@defopt default-major-mode This variable holds the default major mode for new buffers. The standard value is @code{fundamental-mode}. @@ -593,7 +593,7 @@ @end group @group ("\\.el\\'" . emacs-lisp-mode) - ("\\.c\\'" . c-mode) + ("\\.c\\'" . c-mode) ("\\.h\\'" . c-mode) @dots{}) @end group @@ -621,11 +621,11 @@ @smallexample @group (setq auto-mode-alist - (append + (append ;; @r{File name starts with a dot.} - '(("/\\.[^/]*\\'" . fundamental-mode) + '(("/\\.[^/]*\\'" . fundamental-mode) ;; @r{File name has no dot.} - ("[^\\./]*\\'" . fundamental-mode) + ("[^\\./]*\\'" . fundamental-mode) ;; @r{File name ends in @samp{.C}.} ("\\.C\\'" . c++-mode)) auto-mode-alist)) @@ -697,7 +697,7 @@ The new command @var{variant} is defined to call the function @var{parent}, then override certain aspects of that parent mode: -@itemize @bullet +@itemize @bullet @item The new mode has its own keymap, named @code{@var{variant}-map}. @code{define-derived-mode} initializes this map to inherit from @@ -706,25 +706,25 @@ @item The new mode has its own syntax table, kept in the variable @code{@var{variant}-syntax-table}. -@code{define-derived-mode} initializes this variable by copying +@code{define-derived-mode} initializes this variable by copying @code{@var{parent}-syntax-table}, if it is not already set. @item The new mode has its own abbrev table, kept in the variable @code{@var{variant}-abbrev-table}. -@code{define-derived-mode} initializes this variable by copying +@code{define-derived-mode} initializes this variable by copying @code{@var{parent}-abbrev-table}, if it is not already set. @item The new mode has its own mode hook, @code{@var{variant}-hook}, which it runs in standard fashion as the very last thing that it does. -(The new mode also runs the mode hook of @var{parent} as part +(The new mode also runs the mode hook of @var{parent} as part of calling @var{parent}.) @end itemize In addition, you can specify how to override other aspects of @var{parent} with @var{body}. The command @var{variant} -evaluates the forms in @var{body} after setting up all its usual +evaluates the forms in @var{body} after setting up all its usual overrides, just before running @code{@var{variant}-hook}. The argument @var{docstring} specifies the documentation string for the @@ -1028,18 +1028,18 @@ (setq modeline-format (list "" 'modeline-modified - "%b--" + "%b--" @end group (getenv "HOST") ; @r{One element is not constant.} - ":" + ":" 'default-directory " " 'global-mode-string " %[(" - 'mode-name - 'modeline-process - 'minor-mode-alist - "%n" + 'mode-name + 'modeline-process + 'minor-mode-alist + "%n" ")%]----" @group '(line-number-mode "L%l--") @@ -1120,9 +1120,9 @@ @group minor-mode-alist @result{} ((vc-mode vc-mode) - (abbrev-mode " Abbrev") - (overwrite-mode overwrite-mode) - (auto-fill-function " Fill") + (abbrev-mode " Abbrev") + (overwrite-mode overwrite-mode) + (auto-fill-function " Fill") (defining-kbd-macro " Def") (isearch-mode isearch-mode)) @end group @@ -1158,12 +1158,12 @@ " " global-mode-string " %[(" - mode-name + mode-name @end group @group modeline-process - minor-mode-alist - "%n" + minor-mode-alist + "%n" ")%]----" (line-number-mode "L%l--") (-3 . "%p") @@ -1294,7 +1294,7 @@ Most of the hooks in XEmacs are @dfn{normal hooks}. These variables contain lists of functions to be called with no arguments. The reason most hooks are normal hooks is so that you can use them in a uniform -way. You can usually tell when a hook is a normal hook, because its +way. You can usually tell when a hook is a normal hook, because its name ends in @samp{-hook}. The recommended way to add a hook function to a normal hook is by @@ -1333,7 +1333,7 @@ @cindex lambda expression in hook @example @group -(add-hook 'c-mode-hook +(add-hook 'c-mode-hook (function (lambda () (setq c-indent-level 4 c-argdecl-indent 0 @@ -1358,17 +1358,17 @@ (setq modeline-format '(modeline-modified "Emacs: %14b" - " " + " " @end group @group default-directory " " global-mode-string - "%[(" - mode-name - minor-mode-alist - "%n" - modeline-process + "%[(" + mode-name + minor-mode-alist + "%n" + modeline-process ") %]---" (-3 . "%p") "-%-"))))) @@ -1440,7 +1440,7 @@ @end defun @defun make-local-hook hook -This function makes the hook variable @code{hook} local to the current +This function makes the hook variable @var{hook} local to the current buffer. When a hook variable is local, it can have local and global hook functions, and @code{run-hooks} runs all of them. diff -r a8296e22da4e -r 576fb035e263 man/lispref/mouse.texi --- a/man/lispref/mouse.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/mouse.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/mouse.info @node Mouse @@ -27,14 +27,14 @@ to change the text, and the body of @code{track-mouse} normally reads the events itself and does not do redisplay. -@defun x-contour-region window beg end -This function draws lines to make a box around the text from @var{beg} +@defun x-contour-region window start end +This function draws lines to make a box around the text from @var{start} to @var{end}, in window @var{window}. @end defun -@defun x-uncontour-region window beg end +@defun x-uncontour-region window start end This function erases the lines that would make a box around the text -from @var{beg} to @var{end}, in window @var{window}. Use it to remove +from @var{start} to @var{end}, in window @var{window}. Use it to remove a contour that you previously made by calling @code{x-contour-region}. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/mule.texi --- a/man/lispref/mule.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/mule.texi Mon Aug 13 11:36:19 2007 +0200 @@ -47,7 +47,7 @@ where characters are extremely complicated to write, completely different shapes may be defined as the "same" character in national standards. The Taiwanese variant of Hanzi is generally the most -complicated; over the centuries, the Japanese, Koreans, and the People's +complicated; over the centuries, the Japanese, Koreans, and the People's Republic of China have adopted simplifications of the shape, but the line of descent from the original shape is recorded, and the meanings and pronunciation of different forms of the same character are @@ -399,8 +399,8 @@ This function returns the name of @var{charset}. This will be a symbol. @end defun -@defun charset-doc-string charset -This function returns the doc string of @var{charset}. +@defun charset-description charset +This function returns the documentation string of @var{charset}. @end defun @defun charset-registry charset @@ -416,7 +416,7 @@ @var{charset}. @end defun -@defun charset-columns charset +@defun charset-width charset This function returns the number of display columns per character (in TTY mode) of @var{charset}. @end defun @@ -426,12 +426,12 @@ @code{l2r} or @code{r2l}. @end defun -@defun charset-final charset +@defun charset-iso-final-char charset This function returns the final byte of the ISO 2022 escape sequence designating @var{charset}. @end defun -@defun charset-graphic charset +@defun charset-iso-graphic-plane charset This function returns either 0 or 1, depending on whether the position codes of characters in @var{charset} map to the left or right half of their font, respectively. @@ -520,13 +520,13 @@ @var{arg1} and @var{arg2}. @end defun -@defun char-charset ch -This function returns the character set of char @var{ch}. +@defun char-charset character +This function returns the character set of char @var{character}. @end defun -@defun char-octet ch &optional n +@defun char-octet character &optional n This function returns the octet (i.e. position code) numbered @var{n} -(should be 0 or 1) of char @var{ch}. @var{n} defaults to 0 if omitted. +(should be 0 or 1) of char @var{character}. @var{n} defaults to 0 if omitted. @end defun @defun find-charset-region start end &optional buffer @@ -550,7 +550,7 @@ string. @end defun -@defun composite-char-string ch +@defun composite-char-string character This function returns a string of the characters comprising a composite character. @end defun @@ -702,7 +702,7 @@ ISO 2022 provides for switching between character sets via escape sequences. This switching is somewhat complicated, because ISO 2022 provides for both legacy applications like Internet mail that accept -only 7 significant bits in some contexts (RFC 822 headers, for example), +only 7 significant bits in some contexts (RFC 822 headers, for example), and more modern "8-bit clean" applications. It also provides for compact and transparent representation of languages like Japanese which mix ASCII and a national script (even outside of computer programs). @@ -719,7 +719,7 @@ C1 (0x80-0x9F), and GR (0xA0-0xFF). GL and GR stand for "graphic left" and "graphic right", respectively, because of the standard method of displaying graphic character sets in tables with the high byte indexing -columns and the low byte indexing rows. I don't find it very intuitive, +columns and the low byte indexing rows. I don't find it very intuitive, but these are called "registers". An ISO 2022-conformant encoding for a graphic character set must use a @@ -890,7 +890,7 @@ (#### Ben says: I think the above is slightly incorrect. It appears that SS2 invokes G2 into GR and SS3 invokes G3 into GR, whereas ESC N and -ESC O behave as indicated. The above definitions will not parse +ESC O behave as indicated. The above definitions will not parse EUC-encoded text correctly, and it looks like the code in mule-coding.c has similar problems.) @@ -1021,25 +1021,25 @@ listed in @ref{EOL Conversion}. @item eol-lf -The coding system which is the same as this one, except that it uses the +The coding system which is the same as this one, except that it uses the Unix line-breaking convention. @item eol-crlf -The coding system which is the same as this one, except that it uses the +The coding system which is the same as this one, except that it uses the DOS line-breaking convention. @item eol-cr -The coding system which is the same as this one, except that it uses the +The coding system which is the same as this one, except that it uses the Macintosh line-breaking convention. @item post-read-conversion Function called after a file has been read in, to perform the decoding. -Called with two arguments, @var{beg} and @var{end}, denoting a region of +Called with two arguments, @var{start} and @var{end}, denoting a region of the current buffer to be decoded. @item pre-write-conversion Function called before a file is written out, to perform the encoding. -Called with two arguments, @var{beg} and @var{end}, denoting a region of +Called with two arguments, @var{start} and @var{end}, denoting a region of the current buffer to be encoded. @end table @@ -1098,7 +1098,7 @@ If non-@code{nil}, don't use ISO6429's direction specification. @item escape-quoted -If non-nil, literal control characters that are the same as the +If non-@code{nil}, literal control characters that are the same as the beginning of a recognized ISO 2022 or ISO 6429 escape sequence (in particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E), SS3 (0x8F), and CSI (0x9B)) are ``quoted'' with an escape character so that they can @@ -1274,10 +1274,10 @@ The corresponding character is returned. @end defun -@defun encode-shift-jis-char ch -This function encodes a JIS X 0208 character @var{ch} to SHIFT-JIS -coding-system. The corresponding character code in SHIFT-JIS is -returned as a cons of two bytes. +@defun encode-shift-jis-char character +This function encodes a JIS X 0208 character @var{character} to +SHIFT-JIS coding-system. The corresponding character code in SHIFT-JIS +is returned as a cons of two bytes. @end defun @defun decode-big5-char code @@ -1286,8 +1286,8 @@ is returned. @end defun -@defun encode-big5-char ch -This function encodes the Big5 character @var{char} to BIG5 +@defun encode-big5-char character +This function encodes the Big5 character @var{character} to BIG5 coding-system. The corresponding character code in Big5 is returned. @end defun @@ -1297,16 +1297,16 @@ MULE initializes most of the commonly used coding systems at XEmacs's startup. A few others are initialized only when the relevant language environment is selected and support libraries are loaded. (NB: The -following list is based on XEmacs 21.2.19, the development branch at the +following list is based on XEmacs 21.2.19, the development branch at the time of writing. The list may be somewhat different for other versions. Recent versions of GNU Emacs 20 implement a few more rare coding systems; work is being done to port these to XEmacs.) - Unfortunately, there is not a consistent naming convention for character -sets, and for practical purposes coding systems often take their name + Unfortunately, there is not a consistent naming convention for character +sets, and for practical purposes coding systems often take their name from their principal character sets (ASCII, KOI8-R, Shift JIS). Others -take their names from the coding system (ISO-2022-JP, EUC-KR), and a few -from their non-text usages (internal, binary). To provide for this, and +take their names from the coding system (ISO-2022-JP, EUC-KR), and a few +from their non-text usages (internal, binary). To provide for this, and for the fact that many coding systems have several common names, an aliasing system is provided. Finally, some effort has been made to use names that are registered as MIME charsets (this is why the name @@ -1337,7 +1337,7 @@ need language usage for the ISO-8859 family. Note that although true coding system aliases have been implemented for -XEmacs 21.2, the coding system initialization has not yet been converted +XEmacs 21.2, the coding system initialization has not yet been converted as of 21.2.19. So coding systems described as aliases have the same properties as the aliased coding system, but will not be equal as Lisp objects. @@ -1671,7 +1671,7 @@ @code{r7}, a number of control structures, and some I/O operators. Take care when using registers @code{r0} (used in implicit @dfn{set} statements) and especially @code{r7} (used internally by several -statements and operations, especially for multiple return values and I/O +statements and operations, especially for multiple return values and I/O operations). CCL is used for code conversion during process I/O and file I/O for @@ -1707,9 +1707,9 @@ block are CCL blocks. A @dfn{CCL block} is either a CCL statement or list of CCL statements. -A @dfn{CCL statement} is either a @dfn{set statement} (either an integer +A @dfn{CCL statement} is either a @dfn{set statement} (either an integer or an @dfn{assignment}, which is a list of a register to receive the -assignment, an assignment operator, and an expression) or a @dfn{control +assignment, an assignment operator, and an expression) or a @dfn{control statement} (a list starting with a keyword, whose allowable syntax depends on the keyword). @@ -1804,7 +1804,7 @@ @heading I/O statements: The @dfn{read} statement takes one or more registers as arguments. It -reads one byte (a C char) from the input into each register in turn. +reads one byte (a C char) from the input into each register in turn. The @dfn{write} takes several forms. In the form @samp{(write @var{reg} ...)} it takes one or more registers as arguments and writes each in @@ -1841,7 +1841,7 @@ index of the CCL block to execute. Null CCL blocks may be used as no-ops, continuing execution with the statement following the @code{branch} statement in the containing CCL block. Out-of-range -values for the @var{EXPRESSION} are also treated as no-ops. +values for the @var{expression} are also treated as no-ops. The @dfn{read-branch} variant of the @dfn{branch} statement takes an @var{register}, a @var{CCL block}, and an optional @var{second CCL @@ -1852,19 +1852,19 @@ @heading Loop control statements: The @dfn{loop} statement creates a block with an implied jump from the -end of the block back to its head. The loop is exited on a @code{break} +end of the block back to its head. The loop is exited on a @code{break} statement, and continued without executing the tail by a @code{repeat} statement. The @dfn{break} statement, written @samp{(break)}, terminates the current loop and continues with the next statement in the current -block. +block. The @dfn{repeat} statement has three variants, @code{repeat}, @code{write-repeat}, and @code{write-read-repeat}. Each continues the current loop from its head, possibly after performing I/O. @code{repeat} takes no arguments and does no I/O before jumping. -@code{write-repeat} takes a single argument (a register, an +@code{write-repeat} takes a single argument (a register, an integer, or a string), writes it to the output, then jumps. @code{write-read-repeat} takes one or two arguments. The first must be a register. The second may be an integer or an array; if absent, it @@ -1950,7 +1950,7 @@ @defun ccl-execute ccl-program status Execute @var{ccl-program} with registers initialized by @var{status}. @var{ccl-program} is a vector of compiled CCL code -created by @code{ccl-compile}. It is an error for the program to try to +created by @code{ccl-compile}. It is an error for the program to try to execute a CCL I/O command. @var{status} must be a vector of nine values, specifying the initial value for the R0, R1 .. R7 registers and for the instruction counter IC. A @code{nil} value for a register @@ -1958,10 +1958,10 @@ the IC initializer causes execution to start at the beginning of the program. When the program is done, @var{status} is modified (by side-effect) to contain the ending values for the corresponding -registers and IC. +registers and IC. @end defun -@defun ccl-execute-on-string ccl-program status str &optional continue +@defun ccl-execute-on-string ccl-program status string &optional continue Execute @var{ccl-program} with initial @var{status} on @var{string}. @var{ccl-program} is a vector of compiled CCL code created by @code{ccl-compile}. @var{status} must be a vector of nine @@ -1969,11 +1969,11 @@ for the instruction counter IC. A @code{nil} value for a register initializer causes the register to be set to 0. A @code{nil} value for the IC initializer causes execution to start at the beginning of the -program. An optional fourth argument @var{continue}, if non-nil, causes +program. An optional fourth argument @var{continue}, if non-@code{nil}, causes the IC to remain on the unsatisfied read operation if the program terminates due to exhaustion of the input buffer. Otherwise the IC is set to the end -of the program. When the program is done, @var{status} is modified (by +of the program. When the program is done, @var{status} is modified (by side-effect) to contain the ending values for the corresponding registers and IC. Returns the resulting string. @end defun @@ -1982,9 +1982,9 @@ registered: @defun register-ccl-program name ccl-program -Register @var{name} for CCL program @var{program} in -@code{ccl-program-table}. @var{program} should be the compiled form of -a CCL program, or nil. Return index number of the registered CCL +Register @var{name} for CCL program @var{ccl-program} in +@code{ccl-program-table}. @var{ccl-program} should be the compiled form of +a CCL program, or @code{nil}. Return index number of the registered CCL program. @end defun @@ -2034,8 +2034,8 @@ Special Lisp functions are provided that abstract this, so you do not have to directly manipulate bit vectors. -@defun category-table-p obj -This function returns @code{t} if @var{arg} is a category table. +@defun category-table-p object +This function returns @code{t} if @var{object} is a category table. @end defun @defun category-table &optional buffer @@ -2049,24 +2049,23 @@ for new buffers. @end defun -@defun copy-category-table &optional table -This function constructs a new category table and return it. It is a -copy of the @var{table}, which defaults to the standard category table. +@defun copy-category-table &optional category-table +This function returns a new category table which is a copy of +@var{category-table}, which defaults to the standard category table. @end defun -@defun set-category-table table &optional buffer -This function selects a new category table for @var{buffer}. One -argument, a category table. @var{buffer} defaults to the current buffer -if omitted. +@defun set-category-table category-table &optional buffer +This function selects @var{category-table} as the new category table for +@var{buffer}. @var{buffer} defaults to the current buffer if omitted. @end defun -@defun category-designator-p obj -This function returns @code{t} if @var{arg} is a category designator (a +@defun category-designator-p object +This function returns @code{t} if @var{object} is a category designator (a char in the range @samp{' '} to @samp{'~'}). @end defun -@defun category-table-value-p obj -This function returns @code{t} if @var{arg} is a category table value. +@defun category-table-value-p object +This function returns @code{t} if @var{object} is a category table value. Valid values are @code{nil} or a bit vector of size 95. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/numbers.texi --- a/man/lispref/numbers.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/numbers.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/numbers.info @node Numbers, Strings and Characters, Lisp Data Types, Top @@ -37,17 +37,17 @@ The range of values for an integer depends on the machine. The minimum range is @minus{}134217728 to 134217727 (28 bits; i.e., -@ifinfo +@ifinfo -2**27 @end ifinfo -@tex +@tex $-2^{27}$ @end tex -to -@ifinfo +to +@ifinfo 2**27 - 1), @end ifinfo -@tex +@tex $2^{27}-1$), @end tex but some machines may provide a wider range. Many examples in this @@ -410,8 +410,11 @@ do not check for overflow. Thus @code{(1+ 134217727)} may evaluate to @minus{}134217728, depending on your hardware. -@defun 1+ number-or-marker -This function returns @var{number-or-marker} plus 1. +@defun 1+ number +This function returns @var{number} plus one. @var{number} may be a +number, character or marker. Markers and characters are converted to +integers. + For example, @example @@ -442,18 +445,23 @@ @w{@code{(incf foo)}}. @end defun -@defun 1- number-or-marker -This function returns @var{number-or-marker} minus 1. +@defun 1- number +This function returns @var{number} minus one. @var{number} may be a +number, character or marker. Markers and characters are converted to +integers. @end defun @defun abs number This returns the absolute value of @var{number}. @end defun -@defun + &rest numbers-or-markers +@defun + &rest numbers This function adds its arguments together. When given no arguments, @code{+} returns 0. +If any of the arguments are characters or markers, they are first +converted to integers. + @example (+) @result{} 0 @@ -464,12 +472,15 @@ @end example @end defun -@defun - &optional number-or-marker &rest other-numbers-or-markers +@defun - &optional number &rest other-numbers The @code{-} function serves two purposes: negation and subtraction. When @code{-} has a single argument, the value is the negative of the argument. When there are multiple arguments, @code{-} subtracts each of -the @var{other-numbers-or-markers} from @var{number-or-marker}, -cumulatively. If there are no arguments, the result is 0. +the @var{other-numbers} from @var{number}, cumulatively. If there are +no arguments, an error is signaled. + +If any of the arguments are characters or markers, they are first +converted to integers. @example (- 10 1 2 3 4) @@ -481,10 +492,13 @@ @end example @end defun -@defun * &rest numbers-or-markers +@defun * &rest numbers This function multiplies its arguments together, and returns the product. When given no arguments, @code{*} returns 1. +If any of the arguments are characters or markers, they are first +converted to integers. + @example (*) @result{} 1 @@ -495,13 +509,14 @@ @end example @end defun -@defun / dividend divisor &rest divisors -This function divides @var{dividend} by @var{divisor} and returns the -quotient. If there are additional arguments @var{divisors}, then it -divides @var{dividend} by each divisor in turn. Each argument may be a -number or a marker. +@defun / dividend &rest divisors +The @code{/} function serves two purposes: inversion and division. When +@code{/} has a single argument, the value is the inverse of the +argument. When there are multiple arguments, @code{/} divides +@var{dividend} by each of the @var{divisors}, cumulatively, returning +the quotient. If there are no arguments, an error is signaled. -If all the arguments are integers, then the result is an integer too. +If none of the arguments are floats, then the result is an integer. This means the result has to be rounded. On most machines, the result is rounded towards zero after each division, but some machines may round differently with negative arguments. This is because the Lisp function @@ -509,6 +524,9 @@ permits machine-dependent rounding. As a practical matter, all known machines round in the standard fashion. +If any of the arguments are characters or markers, they are first +converted to integers. + @cindex @code{arith-error} in division If you divide by 0, an @code{arith-error} error is signaled. (@xref{Errors}.) @@ -522,6 +540,8 @@ @result{} 2 (/ 25 3 2) @result{} 4 +(/ 3.0) + @result{} 0.3333333333333333 (/ -17 6) @result{} -2 @end example @@ -627,23 +647,23 @@ @code{ftruncate}, the nearest integer in the direction towards zero; @code{fround}, the nearest integer. -@defun ffloor float -This function rounds @var{float} to the next lower integral value, and +@defun ffloor number +This function rounds @var{number} to the next lower integral value, and returns that value as a floating point number. @end defun -@defun fceiling float -This function rounds @var{float} to the next higher integral value, and +@defun fceiling number +This function rounds @var{number} to the next higher integral value, and returns that value as a floating point number. @end defun -@defun ftruncate float -This function rounds @var{float} towards zero to an integral value, and +@defun ftruncate number +This function rounds @var{number} towards zero to an integral value, and returns that value as a floating point number. @end defun -@defun fround float -This function rounds @var{float} to the nearest integral value, +@defun fround number +This function rounds @var{number} to the nearest integral value, and returns that value as a floating point number. @end defun @@ -698,7 +718,7 @@ (lsh 3 2) @result{} 12 ;; @r{Decimal 3 becomes decimal 12.} -00000011 @result{} 00001100 +00000011 @result{} 00001100 @end group @end example @@ -709,14 +729,14 @@ (lsh 6 -1) @result{} 3 ;; @r{Decimal 6 becomes decimal 3.} -00000110 @result{} 00000011 +00000110 @result{} 00000011 @end group @group (lsh 5 -1) @result{} 2 ;; @r{Decimal 5 becomes decimal 2.} -00000101 @result{} 00000010 +00000101 @result{} 00000010 @end group @end example @@ -739,7 +759,7 @@ @example @group ;; @r{Decimal 134,217,727} -0111 1111 1111 1111 1111 1111 1111 +0111 1111 1111 1111 1111 1111 1111 @end group @end example @@ -749,7 +769,7 @@ @example @group ;; @r{Decimal @minus{}2} -1111 1111 1111 1111 1111 1111 1110 +1111 1111 1111 1111 1111 1111 1110 @end group @end example @end defun @@ -770,10 +790,10 @@ @example @group -(ash -6 -1) @result{} -3 +(ash -6 -1) @result{} -3 ;; @r{Decimal @minus{}6 becomes decimal @minus{}3.} 1111 1111 1111 1111 1111 1111 1010 - @result{} + @result{} 1111 1111 1111 1111 1111 1111 1101 @end group @end example @@ -786,7 +806,7 @@ (lsh -6 -1) @result{} 134217725 ;; @r{Decimal @minus{}6 becomes decimal 134,217,725.} 1111 1111 1111 1111 1111 1111 1010 - @result{} + @result{} 0111 1111 1111 1111 1111 1111 1101 @end group @end example @@ -944,7 +964,7 @@ @var{integer}, and vice-versa. @example -(lognot 5) +(lognot 5) @result{} -6 ;; 5 = @r{0000 0000 0000 0000 0000 0000 0101} ;; @r{becomes} @@ -961,71 +981,60 @@ supported (which is the normal state of affairs). They allow integers as well as floating point numbers as arguments. -@defun sin arg -@defunx cos arg -@defunx tan arg +@defun sin number +@defunx cos number +@defunx tan number These are the ordinary trigonometric functions, with argument measured in radians. @end defun -@defun asin arg -The value of @code{(asin @var{arg})} is a number between @minus{}pi/2 -and pi/2 (inclusive) whose sine is @var{arg}; if, however, @var{arg} +@defun asin number +The value of @code{(asin @var{number})} is a number between @minus{}pi/2 +and pi/2 (inclusive) whose sine is @var{number}; if, however, @var{number} is out of range (outside [-1, 1]), then the result is a NaN. @end defun -@defun acos arg -The value of @code{(acos @var{arg})} is a number between 0 and pi -(inclusive) whose cosine is @var{arg}; if, however, @var{arg} +@defun acos number +The value of @code{(acos @var{number})} is a number between 0 and pi +(inclusive) whose cosine is @var{number}; if, however, @var{number} is out of range (outside [-1, 1]), then the result is a NaN. @end defun -@defun atan arg -The value of @code{(atan @var{arg})} is a number between @minus{}pi/2 -and pi/2 (exclusive) whose tangent is @var{arg}. +@defun atan number &optional number2 +The value of @code{(atan @var{number})} is a number between @minus{}pi/2 +and pi/2 (exclusive) whose tangent is @var{number}. + +If optional argument @var{number2} is supplied, the function returns +@code{atan2(@var{number},@var{number2})}. @end defun -@defun sinh arg -@defunx cosh arg -@defunx tanh arg +@defun sinh number +@defunx cosh number +@defunx tanh number These are the ordinary hyperbolic trigonometric functions. @end defun -@defun asinh arg -@defunx acosh arg -@defunx atanh arg +@defun asinh number +@defunx acosh number +@defunx atanh number These are the inverse hyperbolic trigonometric functions. @end defun -@defun exp arg +@defun exp number This is the exponential function; it returns @i{e} to the power -@var{arg}. @i{e} is a fundamental mathematical constant also called the +@var{number}. @i{e} is a fundamental mathematical constant also called the base of natural logarithms. @end defun -@defun log arg &optional base -This function returns the logarithm of @var{arg}, with base @var{base}. -If you don't specify @var{base}, the base @var{e} is used. If @var{arg} +@defun log number &optional base +This function returns the logarithm of @var{number}, with base @var{base}. +If you don't specify @var{base}, the base @var{e} is used. If @var{number} is negative, the result is a NaN. @end defun -@ignore -@defun expm1 arg -This function returns @code{(1- (exp @var{arg}))}, but it is more -accurate than that when @var{arg} is negative and @code{(exp @var{arg})} -is close to 1. -@end defun - -@defun log1p arg -This function returns @code{(log (1+ @var{arg}))}, but it is more -accurate than that when @var{arg} is so small that adding 1 to it would -lose accuracy. -@end defun -@end ignore - -@defun log10 arg -This function returns the logarithm of @var{arg}, with base 10. If -@var{arg} is negative, the result is a NaN. @code{(log10 @var{x})} +@defun log10 number +This function returns the logarithm of @var{number}, with base 10. If +@var{number} is negative, the result is a NaN. @code{(log10 @var{x})} @equiv{} @code{(log @var{x} 10)}, at least approximately. @end defun @@ -1036,13 +1045,13 @@ integer values. @end defun -@defun sqrt arg -This returns the square root of @var{arg}. If @var{arg} is negative, +@defun sqrt number +This returns the square root of @var{number}. If @var{number} is negative, the value is a NaN. @end defun -@defun cube-root arg -This returns the cube root of @var{arg}. +@defun cube-root number +This returns the cube root of @var{number}. @end defun @node Random Numbers diff -r a8296e22da4e -r 576fb035e263 man/lispref/objects.texi --- a/man/lispref/objects.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/objects.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1081,11 +1081,11 @@ of three as follows: @example -@var{beg} @var{end} @var{plist} +@var{start} @var{end} @var{plist} @end example @noindent -The elements @var{beg} and @var{end} are integers, and together specify +The elements @var{start} and @var{end} are integers, and together specify a range of indices in the string; @var{plist} is the property list for that range. @end ignore @@ -2255,7 +2255,7 @@ @end defun -@defun old-eq obj1 obj2 +@defun old-eq object1 object2 This function exists under XEmacs 20 and is exactly like @code{eq} except that it suffers from the char-int confoundance disease. In other words, it returns @code{t} if given a character and the diff -r a8296e22da4e -r 576fb035e263 man/lispref/os.texi --- a/man/lispref/os.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/os.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/os.info @node System Interface, X-Windows, Processes, Top @@ -77,13 +77,13 @@ @file{site-start.el}. @cindex @file{site-start.el} -@item +@item It loads the file @file{~/.emacs} unless @samp{-q} was specified on the command line. (This is not done in @samp{-batch} mode.) The @samp{-u} option can specify the user name whose home directory should be used instead of @file{~}. -@item +@item It loads the library @file{default} unless @code{inhibit-default-init} is non-@code{nil}. (This is not done in @samp{-batch} mode or if @samp{-q} was specified on the command line.) The library's file name @@ -98,7 +98,7 @@ the buffer @samp{*scratch*} is still current and still in Fundamental mode. -@item +@item It loads the terminal-specific Lisp file, if any, except when in batch mode or using a window system. @@ -106,10 +106,10 @@ It displays the initial echo area message, unless you have suppressed that with @code{inhibit-startup-echo-area-message}. -@item +@item It processes the action arguments from the command line. -@item +@item It runs @code{term-setup-hook}. @item @@ -117,10 +117,10 @@ parameters of the selected frame according to whatever the init files specify. -@item +@item It runs @code{window-setup-hook}. @xref{Terminal-Specific}. -@item +@item It displays copyleft, nonwarranty, and basic use information, provided there were no remaining command line arguments (a few steps above) and the value of @code{inhibit-startup-message} is @code{nil}. @@ -272,7 +272,7 @@ your @file{.emacs} file: @code{(setq term-file-prefix nil)}. @end defvar -@defvar term-setup-hook +@defvar term-setup-hook This variable is a normal hook that XEmacs runs after loading your @file{.emacs} file, the default initialization file (if any) and the terminal-specific Lisp file. @@ -346,7 +346,7 @@ -@var{option} @end example -The elements of the @code{command-switch-alist} look like this: +The elements of the @code{command-switch-alist} look like this: @example (@var{option} . @var{handler-function}) @@ -416,7 +416,7 @@ parent process normally resumes control. The low-level primitive for killing XEmacs is @code{kill-emacs}. -@defun kill-emacs &optional exit-data +@deffn Command kill-emacs &optional exit-data This function exits the XEmacs process and kills it. If @var{exit-data} is an integer, then it is used as the exit status @@ -426,7 +426,7 @@ If @var{exit-data} is a string, its contents are stuffed into the terminal input buffer so that the shell (or whatever program next reads input) can read them. -@end defun +@end deffn All the information in the XEmacs process, aside from files that have been saved, is lost when the XEmacs is killed. Because killing XEmacs @@ -470,15 +470,15 @@ moving to a different window. Therefore, suspending is not allowed when XEmacs is an X client. -@defun suspend-emacs string +@deffn Command suspend-emacs &optional stuffstring This function stops XEmacs and returns control to the superior process. If and when the superior process resumes XEmacs, @code{suspend-emacs} returns @code{nil} to its caller in Lisp. -If @var{string} is non-@code{nil}, its characters are sent to be read -as terminal input by XEmacs's superior shell. The characters in -@var{string} are not echoed by the superior shell; only the results -appear. +If optional arg @var{stuffstring} is non-@code{nil}, its characters are +sent to be read as terminal input by XEmacs's superior shell. The +characters in @var{stuffstring} are not echoed by the superior shell; +only the results appear. Before suspending, @code{suspend-emacs} runs the normal hook @code{suspend-hook}. In Emacs version 18, @code{suspend-hook} was not a @@ -538,7 +538,7 @@ Resumed! @end group @end smallexample -@end defun +@end deffn @defvar suspend-hook This variable is a normal hook run before suspending. @@ -597,9 +597,6 @@ @item usg-unix-v AT&T System V. -@item vax-vms -VAX VMS. - @item windows-nt Microsoft windows NT. @@ -645,12 +642,14 @@ XEmacs was dumped. @xref{Building XEmacs}.) @end defvar -@defun getenv var +@deffn Command getenv var &optional interactivep @cindex environment variable access This function returns the value of the environment variable @var{var}, as a string. Within XEmacs, the environment variable values are kept in the Lisp variable @code{process-environment}. +When invoked interactively, @code{getenv} prints the value in the echo area. + @example @group (getenv "USER") @@ -668,10 +667,9 @@ HOME=/user/lewis @end group @end example -@end defun +@end deffn -@c Emacs 19 feature -@deffn Command setenv variable value +@deffn Command setenv variable &optional value unset This command sets the value of the environment variable named @var{variable} to @var{value}. Both arguments should be strings. This function works by modifying @code{process-environment}; binding that @@ -680,18 +678,18 @@ @defvar process-environment This variable is a list of strings, each describing one environment -variable. The functions @code{getenv} and @code{setenv} work by means -of this variable. +variable. The functions @code{getenv} and @code{setenv} work by +manipulating this variable. @smallexample @group process-environment @result{} ("l=/usr/stanford/lib/gnuemacs/lisp" "PATH=.:/user/lewis/bin:/usr/class:/nfsusr/local/bin" - "USER=lewis" + "USER=lewis" @end group @group - "TERM=ibmapa16" + "TERM=ibmapa16" "SHELL=/bin/csh" "HOME=/user/lewis") @end group @@ -729,7 +727,7 @@ system load averages. (The load averages indicate the number of processes trying to run.) -When @var{use-floats} is non-@code{nil}, floats will be returned instead +When @var{use-floats} is non-@code{nil}, floats will be returned instead of integers. These floats are not multiplied by 100. @example @@ -750,7 +748,7 @@ If the 5-minute or 15-minute load averages are not available, return a shortened list, containing only those averages which are available. -On some systems, this function may require special privileges to run, or +On some systems, this function may require special privileges to run, or it may be unimplemented for the particular system type. In that case, the function will signal an error. @end defun @@ -759,18 +757,6 @@ This function returns the process @sc{id} of the Emacs process. @end defun -@defun setprv privilege-name &optional setp getprv -This function sets or resets a VMS privilege. (It does not exist on -Unix.) The first arg is the privilege name, as a string. The second -argument, @var{setp}, is @code{t} or @code{nil}, indicating whether the -privilege is to be turned on or off. Its default is @code{nil}. The -function returns @code{t} if successful, @code{nil} otherwise. - - If the third argument, @var{getprv}, is non-@code{nil}, @code{setprv} -does not change the privilege, but returns @code{t} or @code{nil} -indicating whether the privilege is currently enabled. -@end defun - @node User Identification @section User Identification @@ -807,7 +793,7 @@ @defvar user-full-name This variable holds the name of the user running this Emacs. It is initialized at startup time from the value of @code{NAME} environment -variable. You can change the value of this variable to alter the result +variable. You can change the value of this variable to alter the result of the @code{user-full-name} function. @end defvar @@ -817,7 +803,7 @@ the value of @code{user-full-name} variable, if non-@code{nil}, will be used. -If @var{user} is specified explicitly, @code{user-full-name} variable is +If @var{user} is specified explicitly, @code{user-full-name} variable is ignored. @example @@ -855,7 +841,7 @@ @end defun @defun user-uid -This function returns the effective @sc{uid} of the user. +This function returns the effective @sc{uid} of the user. @end defun @defun user-home-directory @@ -1052,9 +1038,14 @@ @end table @end defun -@defun decode-time time +@defun decode-time &optional specified-time This function converts a time value into calendrical information. The -return value is a list of nine elements, as follows: +optional @var{specified-time} should be a list of +(@var{high} @var{low} . @var{ignored}) or (@var{high} . @var{low}), as from +@code{current-time} and @code{file-attributes}, or @code{nil} to use the +current time. + +The return value is a list of nine elements, as follows: @example (@var{seconds} @var{minutes} @var{hour} @var{day} @var{month} @var{year} @var{dow} @var{dst} @var{zone}) @@ -1117,8 +1108,8 @@ or a float. @var{function} will be called after that many seconds have elapsed, with one argument, the given @var{object}. If the optional @var{resignal} argument is provided, then after this timeout expires, -`add-timeout' will automatically be called again with @var{resignal} as the -first argument. +@code{add-timeout} will automatically be called again with +@var{resignal} as the first argument. This function returns an object which is the @dfn{id} of this particular timeout. You can pass that object to @code{disable-timeout} to turn off @@ -1170,7 +1161,7 @@ @cindex input modes @cindex terminal input modes -@defun set-input-mode interrupt flow meta quit-char +@defun set-input-mode interrupt flow meta &optional quit-char console This function sets the mode for reading keyboard input. If @var{interrupt} is non-null, then XEmacs uses input interrupts. If it is @code{nil}, then it uses @sc{cbreak} mode. When XEmacs communicates @@ -1203,7 +1194,7 @@ XEmacs is currently using. @c Emacs 19 feature -@defun current-input-mode +@defun current-input-mode &optional console This function returns current mode for reading keyboard input. It returns a list, corresponding to the arguments of @code{set-input-mode}, of the form @code{(@var{interrupt} @var{flow} @var{meta} @var{quit})} in @@ -1306,10 +1297,11 @@ translation. @end defvar -@defun keyboard-translate from to +@defun keyboard-translate &rest pairs This function modifies @code{keyboard-translate-table} to translate character code @var{from} into character code @var{to}. It creates -or enlarges the translate table if necessary. +or enlarges the translate table if necessary. Multiple +@var{from}-@var{to} pairs may be specified. @end defun @end ignore @@ -1441,7 +1433,7 @@ @end defun @defun set-recent-keys-ring-size size -This function changes the number of events stored by XEmacs and returned +This function changes the number of events stored by XEmacs and returned by @code{recent-keys}. For example, @code{(set-recent-keys-ring-size 250)} will make XEmacs @@ -1449,7 +1441,7 @@ 250 events by default. @end defun -@deffn Command open-dribble-file filename +@deffn Command open-dribble-file filename @cindex dribble file This function opens a @dfn{dribble file} named @var{filename}. When a dribble file is open, each input event from the keyboard or mouse (but @@ -1505,10 +1497,10 @@ makes decisions that are less than optimal. To fix the problem, use @code{set-device-baud-rate}. -@defun set-device-baud-rate &optional device +@defun set-device-baud-rate device baud-rate This function sets the output speed of @var{device}. See @code{device-baud-rate}. @var{device} defaults to the selected device -(usually the only device) if omitted. +(usually the only device) if @code{nil}. @end defun @defun send-string-to-terminal char-or-string &optional stdout-p device @@ -1629,11 +1621,15 @@ XEmacs provides a convenient way of enabling flow control if you want it: call the function @code{enable-flow-control}. -@defun enable-flow-control +@deffn Command enable-flow-control &optional argument This function enables use of @kbd{C-s} and @kbd{C-q} for output flow control, and provides the characters @kbd{C-\} and @kbd{C-^} as aliases for them using @code{keyboard-translate-table} (@pxref{Translating Input}). -@end defun + +With optional argument @var{argument} (interactively the prefix +argument), enable flow control mode if @var{argument} is positive; else +disable it. +@end deffn You can use the function @code{enable-flow-control-on} in your @file{.emacs} file to enable flow control automatically on certain diff -r a8296e22da4e -r 576fb035e263 man/lispref/positions.texi --- a/man/lispref/positions.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/positions.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/positions.info @node Positions, Markers, Consoles and Devices, Top @@ -249,26 +249,26 @@ documented here to warn you not to use them in Lisp programs, because they set the mark and display messages in the echo area. -@deffn Command beginning-of-buffer &optional n +@deffn Command beginning-of-buffer &optional count This function moves point to the beginning of the buffer (or the limits of the accessible portion, when narrowing is in effect), setting the -mark at the previous position. If @var{n} is non-@code{nil}, then it -puts point @var{n} tenths of the way from the beginning of the buffer. +mark at the previous position. If @var{count} is non-@code{nil}, then it +puts point @var{count} tenths of the way from the beginning of the buffer. -In an interactive call, @var{n} is the numeric prefix argument, -if provided; otherwise @var{n} defaults to @code{nil}. +In an interactive call, @var{count} is the numeric prefix argument, +if provided; otherwise @var{count} defaults to @code{nil}. Don't use this function in Lisp programs! @end deffn -@deffn Command end-of-buffer &optional n +@deffn Command end-of-buffer &optional count This function moves point to the end of the buffer (or the limits of the accessible portion, when narrowing is in effect), setting the mark -at the previous position. If @var{n} is non-@code{nil}, then it puts -point @var{n} tenths of the way from the end of the buffer. +at the previous position. If @var{count} is non-@code{nil}, then it puts +point @var{count} tenths of the way from the end of the buffer. -In an interactive call, @var{n} is the numeric prefix argument, -if provided; otherwise @var{n} defaults to @code{nil}. +In an interactive call, @var{count} is the numeric prefix argument, +if provided; otherwise @var{count} defaults to @code{nil}. Don't use this function in Lisp programs! @end deffn @@ -353,7 +353,7 @@ In an interactive call, @var{count} is the numeric prefix argument. @end deffn -@defun count-lines start end +@defun count-lines start end &optional ignore-invisible-lines-flag @cindex lines in region This function returns the number of lines between the positions @var{start} and @var{end} in the current buffer. If @var{start} and @@ -362,6 +362,16 @@ because the text between them, considered in isolation, must contain at least one line unless it is empty. +With optional @var{ignore-invisible-lines-flag} non-@code{nil}, lines +collapsed with selective-display are excluded from the line count. + +@strong{Note:} The expression to return the current line number is not +obvious: + +@example +(1+ (count-lines 1 (point-at-bol))) +@end example + Here is an example of using @code{count-lines}: @example @@ -475,7 +485,7 @@ This function moves point to the start of the frame line @var{count} frame lines down from the frame line containing point. If @var{count} is negative, it moves up instead. The optional second argument -@var{window} may be used to specify a window other than the +@var{window} may be used to specify a window other than the selected window in which to perform the motion. Normally, @code{vertical-motion} returns the number of lines moved. The @@ -592,7 +602,7 @@ @end ignore @node List Motion -@subsection Moving over Balanced Expressions +@subsection Moving over Balanced Expressions @cindex sexp motion @cindex Lisp expression motion @cindex list motion @@ -612,29 +622,30 @@ is negative, move backward across that many groups of parentheses. @end deffn -@deffn Command backward-list &optional arg -This function moves backward across @var{arg} balanced groups of +@deffn Command backward-list &optional count +This function moves backward across @var{count} balanced groups of parentheses. (Other syntactic entities such as words or paired string -quotes are ignored.) @var{arg} defaults to 1 if omitted. If @var{arg} -is negative, move forward across that many groups of parentheses. +quotes are ignored.) @var{count} defaults to 1 if omitted. If +@var{count} is negative, move forward across that many groups of +parentheses. @end deffn -@deffn Command up-list arg -This function moves forward out of @var{arg} levels of parentheses. +@deffn Command up-list &optional count +This function moves forward out of @var{count} levels of parentheses. A negative argument means move backward but still to a less deep spot. @end deffn -@deffn Command down-list arg -This function moves forward into @var{arg} levels of parentheses. A -negative argument means move backward but still go -deeper in parentheses (@minus{}@var{arg} levels). +@deffn Command down-list &optional count +This function moves forward into @var{count} levels of parentheses. +A negative argument means move backward but still go deeper in +parentheses (@minus{}@var{count} levels). @end deffn -@deffn Command forward-sexp &optional arg -This function moves forward across @var{arg} balanced expressions. +@deffn Command forward-sexp &optional count +This function moves forward across @var{count} balanced expressions. Balanced expressions include both those delimited by parentheses and -other kinds, such as words and string constants. @var{arg} defaults to -1 if omitted. If @var{arg} is negative, move backward across that many +other kinds, such as words and string constants. @var{count} defaults to +1 if omitted. If @var{count} is negative, move backward across that many balanced expressions. For example, @example @@ -655,24 +666,24 @@ @end example @end deffn -@deffn Command backward-sexp &optional arg -This function moves backward across @var{arg} balanced expressions. -@var{arg} defaults to 1 if omitted. If @var{arg} is negative, move +@deffn Command backward-sexp &optional count +This function moves backward across @var{count} balanced expressions. +@var{count} defaults to 1 if omitted. If @var{count} is negative, move forward across that many balanced expressions. @end deffn -@deffn Command beginning-of-defun &optional arg -This function moves back to the @var{arg}th beginning of a defun. If -@var{arg} is negative, this actually moves forward, but it still moves -to the beginning of a defun, not to the end of one. @var{arg} defaults -to 1 if omitted. +@deffn Command beginning-of-defun &optional count +This function moves back to the @var{count}th beginning of a defun. +If @var{count} is negative, this actually moves forward, but it still +moves to the beginning of a defun, not to the end of one. @var{count} +defaults to 1 if omitted. @end deffn -@deffn Command end-of-defun &optional arg -This function moves forward to the @var{arg}th end of a defun. If -@var{arg} is negative, this actually moves backward, but it still moves -to the end of a defun, not to the beginning of one. @var{arg} defaults -to 1 if omitted. +@deffn Command end-of-defun &optional count +This function moves forward to the @var{count}th end of a defun. +If @var{count} is negative, this actually moves backward, but it still +moves to the end of a defun, not to the beginning of one. @var{count} +defaults to 1 if omitted. @end deffn @defopt defun-prompt-regexp @@ -813,9 +824,9 @@ buffer. It returns the value of the last form. @end defspec -@defspec with-temp-file file forms@dots{} +@defspec with-temp-file filename forms@dots{} This special form creates a new buffer, evaluates @var{forms} there, and -writes the buffer to @var{file}. It returns the value of the last form +writes the buffer to @var{filename}. It returns the value of the last form evaluated. @end defspec @@ -925,13 +936,13 @@ @example @group -(let ((beg (point-min-marker)) +(let ((start (point-min-marker)) (end (point-max-marker))) (unwind-protect (progn @var{body}) (save-excursion - (set-buffer (marker-buffer beg)) - (narrow-to-region beg end)))) + (set-buffer (marker-buffer start)) + (narrow-to-region start end)))) @end group @end example diff -r a8296e22da4e -r 576fb035e263 man/lispref/postgresql.texi --- a/man/lispref/postgresql.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/postgresql.texi Mon Aug 13 11:36:19 2007 +0200 @@ -781,7 +781,7 @@ Retrieve an asynchronous result from a query. @var{conn} A database connection object. -NIL is returned when no more query work remains. +@code{nil} is returned when no more query work remains. @end defun @defun pq-set-nonblocking conn arg diff -r a8296e22da4e -r 576fb035e263 man/lispref/processes.texi --- a/man/lispref/processes.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/processes.texi Mon Aug 13 11:36:19 2007 +0200 @@ -60,7 +60,7 @@ create a synchronous process and do not return a process object (@pxref{Synchronous Processes}). - Synchronous and asynchronous processes are explained in following + Synchronous and asynchronous processes are explained in the following sections. Since the three functions are all called in a similar fashion, their common arguments are described here. @@ -98,6 +98,10 @@ name of the program; it may not contain any command-line arguments. You must use @var{args} to provide those. +If you want to use features of the shell, then invoke the shell directly +using, for example, @var{program} of @code{"sh"}, and @var{args} of +@code{"-c"} and @var{"command line..."}. + The subprocess gets its current directory from the value of @code{default-directory} (@pxref{File Name Expansion}). @@ -246,13 +250,13 @@ @end smallexample @end defun -@defun call-process-region start end program &optional delete destination display &rest args +@defun call-process-region start end program &optional deletep destination displayp &rest args This function sends the text between @var{start} to @var{end} as standard input to a process running @var{program}. It deletes the text -sent if @var{delete} is non-@code{nil}; this is useful when @var{buffer} +sent if @var{deletep} is non-@code{nil}; this is useful when @var{buffer} is @code{t}, to insert the output in the current buffer. -The arguments @var{destination} and @var{display} control what to do +The arguments @var{destination} and @var{displayp} control what to do with the output from the subprocess, and whether to update the display as it comes in. For details, see the description of @code{call-process}, above. If @var{destination} is the integer 0, @@ -406,7 +410,9 @@ For subprocesses used for internal purposes by programs, it is often better to use a pipe, because they are more efficient. In addition, the total number of @sc{pty}s is limited on many systems and it is good not -to waste them. +to waste them. A rule of thumb is to use ptys for processes the user +interacts with directly, and pipes for processes that are hidden from +the user. The value @code{process-connection-type} is used when @code{start-process} is called. So you can specify how to communicate @@ -425,6 +431,16 @@ Information}). @end defvar +Lisp functions that manipulate processes usually accept a @var{process} +argument. Besides using an actual process object for this argument, you +can use a process name, a buffer object, the name of a buffer, or +@code{nil}. Specifying a buffer or buffer name for the @var{process} +argument means use the process associated with the buffer (or the most +recent one, if there is more than one). @code{nil} means use the +process associated with the current buffer. +@xref{Process Information}. +@xref{Process Buffers}. + @node Deleting Processes @section Deleting Processes @cindex deleting processes @@ -500,9 +516,12 @@ @end smallexample @end defun -@defun get-process name -This function returns the process named @var{name}, or @code{nil} if -there is none. An error is signaled if @var{name} is not a string. +@defun get-process process-name +This function returns the process named @var{process-name}. If +@var{process-name} is a string and there is no process with that name, the +value is @code{nil}. If @var{process-name} is actually a process, it is +returned as given. (That is not very useful, so the argument is usually +a name.) For example: @smallexample @group @@ -538,9 +557,9 @@ This function returns the name of @var{process}. @end defun -@defun process-status process-name -This function returns the status of @var{process-name} as a symbol. -The argument @var{process-name} must be a process, a buffer, a +@defun process-status process +This function returns the status of @var{process} as a symbol. +The argument @var{process} must be a process, a buffer, a process name (string) or a buffer name (string). The possible values for an actual subprocess are: @@ -561,7 +580,7 @@ is closed, you cannot reopen it, though you might be able to open a new connection to the same place. @item nil -if @var{process-name} is not the name of an existing process. +if @var{process} does not identify an existing process. @end table @smallexample @@ -619,15 +638,21 @@ data appears on the ``standard input'' of the subprocess. Some operating systems have limited space for buffered input in a -@sc{pty}. On these systems, Emacs sends an @sc{eof} periodically amidst -the other characters, to force them through. For most programs, -these @sc{eof}s do no harm. +@sc{pty}. On these systems, XEmacs sends long input in chunks, with +@sc{eof} characters added amidst the other characters, to force the +operating system to periodically drain the input buffer. For most +programs, these @sc{eof}s do no harm. -@defun process-send-string process-name string -This function sends @var{process-name} the contents of @var{string} as -standard input. The argument @var{process-name} must be a process or -the name of a process. If it is @code{nil}, the current buffer's -process is used. +@defun process-send-string process string &optional start end +This function sends @var{process} the contents of @var{string} as +standard input. + +The argument @var{process} may be a process or the name of a process, or +a buffer or the name of a buffer, in which case the buffer's process is +used. If it is @code{nil}, the current buffer's process is used. + +Optional arguments @var{start} and @var{end} specify part of @var{string}; +see @code{substring}. The function returns @code{nil}. @@ -650,26 +675,28 @@ @end smallexample @end defun -@deffn Command process-send-region process-name start end +@defun process-send-region process start end &optional buffer This function sends the text in the region defined by @var{start} and -@var{end} as standard input to @var{process-name}, which is a process or -a process name. (If it is @code{nil}, the current buffer's process is -used.) +@var{end} as standard input to @var{process}. + +The argument @var{process} may be a process or the name of a process, or +a buffer or the name of a buffer, in which case the buffer's process is +used. If it is @code{nil}, the current buffer's process is used. An error is signaled unless both @var{start} and @var{end} are integers or markers that indicate positions in the current buffer. (It is unimportant which number is larger.) -@end deffn +@end defun -@defun process-send-eof &optional process-name - This function makes @var{process-name} see an end-of-file in its +@defun process-send-eof &optional process + This function makes @var{process} see an end-of-file in its input. The @sc{eof} comes after any text already sent to it. - If @var{process-name} is not supplied, or if it is @code{nil}, then -this function sends the @sc{eof} to the current buffer's process. An -error is signaled if the current buffer has no process. +@var{process} may be a process, a buffer, the name of a process or +buffer, or @code{nil}, indicating the current buffer's process. An +error is signaled if @var{process} does not identify any process. - The function returns @var{process-name}. +The function returns the process object identified by @var{process}. @smallexample @group @@ -779,11 +806,11 @@ stopped previously. @end defun -@defun signal-process pid signal +@deffn Command signal-process pid signal This function sends a signal to the process with process id @var{pid}, which need not be a child of XEmacs. The argument @var{signal} specifies which signal to send. -@end defun +@end deffn @node Output from Processes @section Receiving Output from Processes @@ -862,10 +889,10 @@ @defun get-buffer-process buffer-or-name This function returns the process associated with @var{buffer-or-name}. -If there are several processes associated with it, then one is chosen. -(Presently, the one chosen is the one most recently created.) It is -usually a bad idea to have more than one process associated with the -same buffer. +If there are several processes associated with @var{buffer-or-name}, +then one is chosen. (Presently, the one chosen is the one most recently +created.) It is usually a bad idea to have more than one process +associated with the same buffer. @smallexample @group @@ -926,20 +953,20 @@ @smallexample @group -(defun ordinary-insertion-filter (proc string) +(defun ordinary-insertion-filter (process string) (let ((old-buffer (current-buffer))) (unwind-protect (let (moving) - (set-buffer (process-buffer proc)) - (setq moving (= (point) (process-mark proc))) + (set-buffer (process-buffer process)) + (setq moving (= (point) (process-mark process))) @end group @group (save-excursion ;; @r{Insert the text, moving the process-marker.} - (goto-char (process-mark proc)) + (goto-char (process-mark process)) (insert string) - (set-marker (process-mark proc) (point))) - (if moving (goto-char (process-mark proc)))) + (set-marker (process-mark process) (point))) + (if moving (goto-char (process-mark process)))) (set-buffer old-buffer)))) @end group @end smallexample @@ -954,7 +981,7 @@ @code{unwind-protect}: @smallexample -(display-buffer (process-buffer proc)) +(display-buffer (process-buffer process)) @end smallexample To force point to move to the end of the new output no matter where @@ -1032,15 +1059,15 @@ @group ;; @r{Insert input in the buffer specified by @code{my-shell-buffer}} ;; @r{and make sure that buffer is shown in some window.} -(defun my-process-filter (proc str) +(defun my-process-filter (process string) (let ((cur (selected-window)) (pop-up-windows t)) (pop-to-buffer my-shell-buffer) @end group @group (goto-char (point-max)) - (insert str) - (set-marker (process-mark proc) (point-max)) + (insert string) + (set-marker (process-mark process) (point-max)) (select-window cur))) @end group @end smallexample @@ -1254,21 +1281,35 @@ network connection, and it never returns either of those values for a real subprocess. @xref{Process Information}. -@defun open-network-stream name buffer-or-name host service +@defun open-network-stream name buffer-or-name host service &optional protocol This function opens a TCP connection for a service to a host. It returns a process object to represent the connection. +Input and output work as for other process objects. +@code{delete-process} closes the connection. + The @var{name} argument specifies the name for the process object. It is modified as necessary to make it unique. The @var{buffer-or-name} argument is the buffer to associate with the -connection. Output from the connection is inserted in the buffer, -unless you specify a filter function to handle the output. If -@var{buffer-or-name} is @code{nil}, it means that the connection is not -associated with any buffer. +connection. It can be a buffer or the name of one. Output from the +connection is inserted in the buffer, unless you specify a filter +function to handle the output. If @var{buffer-or-name} is @code{nil}, +it means that the connection is not associated with any buffer. The arguments @var{host} and @var{service} specify where to connect to; @var{host} is the host name or IP address (a string), and @var{service} is the name of a defined network service (a string) or a port number (an integer). + +Optional fifth arg @var{protocol} is the network protocol to use. +Currently only @code{tcp} (Transmission Control Protocol) and @code{udp} +(User Datagram Protocol) are supported. When omitted, @code{tcp} is assumed. + +Output via @code{process-send-string} and input via buffer or filter +(see @code{set-process-filter}) are stream-oriented. That means +UDP datagrams are not guaranteed to be sent and received in +discrete packets. (But small datagrams around 500 bytes that are not +truncated by @code{process-send-string} are usually fine.) Note further +that the UDP protocol does not guard against lost packets. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/range-tables.texi --- a/man/lispref/range-tables.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/range-tables.texi Mon Aug 13 11:36:19 2007 +0200 @@ -36,37 +36,38 @@ Make a new, empty range table. @end defun -@defun copy-range-table old-table -Make a new range table which contains the same values for the same -ranges as the given table. The values will not themselves be copied. +@defun copy-range-table range-table +This function returns a new range table which contains the same values +for the same ranges as @var{range-table}. The values will not +themselves be copied. @end defun @node Working With Range Tables @section Working With Range Tables -@defun get-range-table pos table &optional default -This function finds value for position @var{pos} in @var{table}. If -there is no corresponding value, return @var{default} (defaults to +@defun get-range-table pos range-table &optional default +This function finds value for position @var{pos} in @var{range-table}. +If there is no corresponding value, return @var{default} (defaults to @code{nil}). @end defun -@defun put-range-table start end val table +@defun put-range-table start end value range-table This function sets the value for range (@var{start}, @var{end}) to be -@var{val} in @var{table}. +@var{value} in @var{range-table}. @end defun -@defun remove-range-table start end table +@defun remove-range-table start end range-table This function removes the value for range (@var{start}, @var{end}) in -@var{table}. +@var{range-table}. @end defun -@defun clear-range-table table -This function flushes @var{table}. +@defun clear-range-table range-table +This function flushes @var{range-table}. @end defun -@defun map-range-table function table -This function maps @var{function} over entries in @var{table}, calling -it with three args, the beginning and end of the range and the +@defun map-range-table function range-table +This function maps @var{function} over entries in @var{range-table}, +calling it with three args, the beginning and end of the range and the corresponding value. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/searching.texi --- a/man/lispref/searching.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/searching.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/searching.info @node Searching and Matching, Syntax Tables, Text, Top @@ -35,15 +35,14 @@ These are the primitive functions for searching through the text in a buffer. They are meant for use in programs, but you may call them interactively. If you do so, they prompt for the search string; -@var{limit} and @var{noerror} are set to @code{nil}, and @var{repeat} +@var{limit} and @var{noerror} are set to @code{nil}, and @var{count} is set to 1. -@deffn Command search-forward string &optional limit noerror repeat +@deffn Command search-forward string &optional limit noerror count buffer This function searches forward from point for an exact match for @var{string}. If successful, it sets point to the end of the occurrence found, and returns the new value of point. If no match is found, the value and side effects depend on @var{noerror} (see below). -@c Emacs 19 feature In the following example, point is initially at the beginning of the line. Then @code{(search-forward "fox")} moves point after the last @@ -81,25 +80,26 @@ to return the new position of point in that case, but some programs may depend on a value of @code{nil}.) -If @var{repeat} is supplied (it must be a positive number), then the -search is repeated that many times (each time starting at the end of the -previous time's match). If these successive searches succeed, the -function succeeds, moving point and returning its new value. Otherwise -the search fails. +If @var{count} is supplied (it must be an integer), then the search is +repeated that many times (each time starting at the end of the previous +time's match). If @var{count} is negative, the search direction is +backward. If the successive searches succeed, the function succeeds, +moving point and returning its new value. Otherwise the search fails. + +@var{buffer} is the buffer to search in, and defaults to the current buffer. @end deffn -@deffn Command search-backward string &optional limit noerror repeat +@deffn Command search-backward string &optional limit noerror count buffer This function searches backward from point for @var{string}. It is just like @code{search-forward} except that it searches backwards and leaves point at the beginning of the match. @end deffn -@deffn Command word-search-forward string &optional limit noerror repeat +@deffn Command word-search-forward string &optional limit noerror count buffer @cindex word search This function searches forward from point for a ``word'' match for @var{string}. If it finds a match, it sets point to the end of the match found, and returns the new value of point. -@c Emacs 19 feature Word matching regards @var{string} as a sequence of words, disregarding punctuation that separates them. It searches the buffer for the same @@ -140,11 +140,13 @@ neither @code{nil} nor @code{t}, it moves point to @var{limit} (or the end of the buffer) and returns @code{nil}. -If @var{repeat} is non-@code{nil}, then the search is repeated that many +If @var{count} is non-@code{nil}, then the search is repeated that many times. Point is positioned at the end of the last match. + +@var{buffer} is the buffer to search in, and defaults to the current buffer. @end deffn -@deffn Command word-search-backward string &optional limit noerror repeat +@deffn Command word-search-backward string &optional limit noerror count buffer This function searches backward from point for a word match to @var{string}. This function is just like @code{word-search-forward} except that it searches backward and normally leaves point at the @@ -585,7 +587,7 @@ Here is a complicated regexp, used by XEmacs to recognize the end of a sentence together with any whitespace that follows. It is the value of -the variable @code{sentence-end}. +the variable @code{sentence-end}. First, we show the regexp as a string in Lisp syntax to distinguish spaces from tab characters. The string constant begins and ends with a @@ -604,7 +606,7 @@ @group sentence-end @result{} -"[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[ +"[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[ ]*" @end group @end example @@ -655,7 +657,7 @@ functions useful in programs. The principal one is @code{re-search-forward}. -@deffn Command re-search-forward regexp &optional limit noerror repeat +@deffn Command re-search-forward regexp &optional limit noerror count buffer This function searches forward in the current buffer for a string of text that is matched by the regular expression @var{regexp}. The function skips over any amount of text that is not matched by @@ -674,7 +676,7 @@ @code{re-search-forward} moves point to @var{limit} (or the end of the buffer) and returns @code{nil}. -If @var{repeat} is supplied (it must be a positive number), then the +If @var{count} is supplied (it must be a positive number), then the search is repeated that many times (each time starting at the end of the previous time's match). If these successive searches succeed, the function succeeds, moving point and returning its new value. Otherwise @@ -704,7 +706,7 @@ @end example @end deffn -@deffn Command re-search-backward regexp &optional limit noerror repeat +@deffn Command re-search-backward regexp &optional limit noerror count buffer This function searches backward in the current buffer for a string of text that is matched by the regular expression @var{regexp}, leaving point at the beginning of the first text found. @@ -723,12 +725,17 @@ trouble of implementing that. @end deffn -@defun string-match regexp string &optional start +@defun string-match regexp string &optional start buffer This function returns the index of the start of the first match for the regular expression @var{regexp} in @var{string}, or @code{nil} if there is no match. If @var{start} is non-@code{nil}, the search starts at that index in @var{string}. + +Optional arg @var{buffer} controls how case folding is done (according +to the value of @code{case-fold-search} in @var{buffer} and +@var{buffer}'s case tables) and defaults to the current buffer. + For example, @example @@ -801,7 +808,7 @@ be @samp{:}, while under Windows, it will be @samp{;}. @end defun -@defun looking-at regexp +@defun looking-at regexp &optional buffer This function determines whether the text in the current buffer directly following point matches the regular expression @var{regexp}. ``Directly following'' means precisely that: the search is ``anchored'' and it can @@ -846,28 +853,32 @@ In Emacs versions prior to 19.29, these functions did not exist, and the functions described above implemented full POSIX backtracking. -@defun posix-search-forward regexp &optional limit noerror repeat +@deffn Command posix-search-forward regexp &optional limit noerror count buffer This is like @code{re-search-forward} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. -@end defun +@end deffn -@defun posix-search-backward regexp &optional limit noerror repeat +@deffn Command posix-search-backward regexp &optional limit noerror count buffer This is like @code{re-search-backward} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. -@end defun +@end deffn -@defun posix-looking-at regexp +@defun posix-looking-at regexp &optional buffer This is like @code{looking-at} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. @end defun -@defun posix-string-match regexp string &optional start +@defun posix-string-match regexp string &optional start buffer This is like @code{string-match} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. + +Optional arg @var{buffer} controls how case folding is done (according +to the value of @code{case-fold-search} in @var{buffer} and +@var{buffer}'s case tables) and defaults to the current buffer. @end defun @ignore @@ -900,29 +911,29 @@ @end deffn @deffn Command flush-lines regexp -This function is the same as @code{delete-matching-lines}. +This function is an alias of @code{delete-matching-lines}. @end deffn -@defun delete-non-matching-lines regexp +@deffn Command delete-non-matching-lines regexp This function deletes all lines following point which don't contain a match for the regular expression @var{regexp}. -@end defun +@end deffn @deffn Command keep-lines regexp This function is the same as @code{delete-non-matching-lines}. @end deffn -@deffn Command how-many regexp +@deffn Command count-matches regexp This function counts the number of matches for @var{regexp} there are in the current buffer following point. It prints this number in the echo area, returning the string printed. @end deffn -@deffn Command count-matches regexp -This function is a synonym of @code{how-many}. +@deffn Command how-many regexp +This function is an alias of @code{count-matches}. @end deffn -@deffn Command list-matching-lines regexp nlines +@deffn Command list-matching-lines regexp &optional nlines This function is a synonym of @code{occur}. Show all lines following point containing a match for @var{regexp}. Display each line with @var{nlines} lines before and after, @@ -1124,7 +1135,7 @@ @group (string-match "\\(qu\\)\\(ick\\)" "The quick fox jumped quickly.") - ;0123456789 + ;0123456789 @result{} 4 @end group @@ -1191,7 +1202,7 @@ @var{replacement}. @cindex case in replacements -@defun replace-match replacement &optional fixedcase literal string +@defun replace-match replacement &optional fixedcase literal string strbuffer This function replaces the text in the buffer (or in @var{string}) that was matched by the last search. It replaces that text with @var{replacement}. @@ -1205,6 +1216,12 @@ Then @code{replace-match} does the replacement by constructing and returning a new string. +If the fourth argument @var{string} is a string, fifth argument +@var{strbuffer} specifies the buffer to be used for syntax-table and +case-table lookup and defaults to the current buffer. When @var{string} +is not a string, the buffer that the match occurred in has automatically +been remembered and you do not need to specify it. + If @var{fixedcase} is non-@code{nil}, then the case of the replacement text is not changed; otherwise, the replacement text is converted to a different case depending upon the capitalization of the text to be @@ -1216,7 +1233,7 @@ rather than all upper case. If @code{case-replace} is @code{nil}, then case conversion is not done, -regardless of the value of @var{fixed-case}. @xref{Searching and Case}. +regardless of the value of @var{fixedcase}. @xref{Searching and Case}. If @var{literal} is non-@code{nil}, then @var{replacement} is inserted exactly as it is, the only alterations being case changes as needed. @@ -1247,7 +1264,7 @@ The functions @code{match-data} and @code{set-match-data} read or write the entire match data, all at once. -@defun match-data +@defun match-data &optional integers reuse This function returns a newly constructed list containing all the information on what text the last search matched. Element zero is the position of the beginning of the match for the whole expression; element @@ -1272,9 +1289,13 @@ All the elements are markers or @code{nil} if matching was done on a buffer, and all are integers or @code{nil} if matching was done on a -string with @code{string-match}. (In Emacs 18 and earlier versions, -markers were used even for matching on a string, except in the case -of the integer 0.) +string with @code{string-match}. However, if the optional first +argument @var{integers} is non-@code{nil}, always use integers (rather +than markers) to represent buffer positions. + +If the optional second argument @var{reuse} is a list, reuse it as part +of the value. If @var{reuse} is long enough to hold all the values, and if +@var{integers} is non-@code{nil}, no new lisp objects are created. As always, there must be no possibility of intervening searches between the call to a search function and the call to @code{match-data} that is @@ -1324,10 +1345,10 @@ You can save and restore the match data with @code{save-match-data}: -@defmac save-match-data body@dots{} +@defspec save-match-data body@dots{} This special form executes @var{body}, saving and restoring the match data around it. -@end defmac +@end defspec You can use @code{set-match-data} together with @code{match-data} to imitate the effect of the special form @code{save-match-data}. This is diff -r a8296e22da4e -r 576fb035e263 man/lispref/sequences.texi --- a/man/lispref/sequences.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/sequences.texi Mon Aug 13 11:36:19 2007 +0200 @@ -603,9 +603,9 @@ This function returns @code{t} if @var{object} is either 0 or 1. @end defun -@defun bit-vector &rest objects +@defun bit-vector &rest bits This function creates and returns a bit vector whose elements are the -arguments @var{objects}. The elements must be either of the two +arguments @var{bits}. Each argument must be a bit, i.e. one of the two integers 0 or 1. @example @@ -618,9 +618,10 @@ @end example @end defun -@defun make-bit-vector length object +@defun make-bit-vector length bit This function creates and returns a bit vector consisting of -@var{length} elements, each initialized to @var{object}. +@var{length} elements, each initialized to @var{bit}, which must be +one of the two integers 0 or 1. @example @group diff -r a8296e22da4e -r 576fb035e263 man/lispref/specifiers.texi --- a/man/lispref/specifiers.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/specifiers.texi Mon Aug 13 11:36:19 2007 +0200 @@ -478,7 +478,7 @@ more convenient and should be used instead. @end defun -@deffn Macro let-specifier specifier-list &rest body +@defspec let-specifier specifier-list &rest body This special form temporarily adds specifications to specifiers, evaluates forms in @var{body} and restores the specifiers to their previous states. The specifiers and their temporary specifications are @@ -516,9 +516,9 @@ (let-specifier ((modeline-shadow-thickness 0 (selected-window))) (sit-for 1)) @end example -@end deffn +@end defspec -@defun set-specifier specifier value &optional how-to-add +@defun set-specifier specifier value &optional locale tag-set how-to-add This function adds some specifications to @var{specifier}. @var{value} can be a single instantiator or tagged instantiator (added as a global specification), a list of tagged and/or untagged instantiators (added as @@ -527,7 +527,8 @@ reasonable form. More specifically, @var{value} can be anything accepted by @code{canonicalize-spec-list}. -@var{how-to-add} is the same as in @code{add-spec-to-specifier}. +@var{locale}, @var{tag-set}, and @var{how-to-add} are the same as in +@code{add-spec-to-specifier}. Note that @code{set-specifier} is exactly complementary to @code{specifier-specs} except in the case where @var{specifier} has no @@ -626,7 +627,7 @@ or the symbol @code{global}), a spec-list consisting of the specification for that locale will be returned. -If @var{locale} is a locale type (i.e. a symbol @code{window}, +If @var{locale} is a locale type (i.e. one of the symbols @code{window}, @code{buffer}, @code{frame}, or @code{device}), a spec-list of the specifications for all locales of that type will be returned. @@ -639,7 +640,7 @@ Only instantiators where @var{tag-set} (a list of zero or more tags) is a subset of (or possibly equal to) the instantiator's tag set are -returned. (The default value of@code{ nil} is a subset of all tag sets, +returned. (The default value of @code{nil} is a subset of all tag sets, so in this case no instantiators will be screened out.) If @var{exact-p} is non-@code{nil}, however, @var{tag-set} must be equal to an instantiator's tag set for the instantiator to be returned. @@ -922,8 +923,8 @@ and can further be restricted to a particular device-type or device-class. Specifiers are used, for example, for the various built-in properties of a face; this allows a face to have different values in different frames, -buffers, etc. For more information, see `specifier-instance', -`specifier-specs', and `add-spec-to-specifier'; or, for a detailed +buffers, etc. For more information, see @code{specifier-instance}, +@code{specifier-specs}, and @code{add-spec-to-specifier}; or, for a detailed description of specifiers, including how they are instantiated over a particular domain (i.e. how their value in that domain is determined), see the chapter on specifiers in the XEmacs Lisp Reference Manual. @@ -1024,7 +1025,7 @@ @end defun @defun valid-specifier-locale-type-p locale-type -Given a specifier @var{locale-type}, this function returns non-nil if it +Given a specifier @var{locale-type}, this function returns non-@code{nil} if it is valid. Valid locale types are the symbols @code{global}, @code{device}, @code{frame}, @code{window}, and @code{buffer}. (Note, however, that in functions that accept either a locale or a locale type, @@ -1101,7 +1102,7 @@ instantiator's tag set for the instantiator to be copied. Optional argument @var{how-to-add} specifies what to do with existing -specifications in @var{dest}. If nil, then whichever locales or locale +specifications in @var{dest}. If @code{nil}, then whichever locales or locale types are copied will first be completely erased in @var{dest}. Otherwise, it is the same as in @code{add-spec-to-specifier}. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/streams.texi --- a/man/lispref/streams.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/streams.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/streams.info @node Read and Print, Minibuffers, Debugging, Top @@ -558,13 +558,13 @@ (progn (print 'The\ cat\ in) (print "the hat") (print " came back")) - @print{} + @print{} @print{} The\ cat\ in - @print{} + @print{} @print{} "the hat" - @print{} + @print{} @print{} " came back" - @print{} + @print{} @result{} " came back" @end group @end example @@ -578,8 +578,8 @@ @example @group -(progn (prin1 'The\ cat\ in) - (prin1 "the hat") +(progn (prin1 'The\ cat\ in) + (prin1 "the hat") (prin1 " came back")) @print{} The\ cat\ in"the hat"" came back" @result{} " came back" @@ -789,7 +789,7 @@ the decimal point. With @samp{f}, a precision of 0 means to omit the decimal point. 0 is not allowed with @samp{f} or @samp{g}. -A value of nil means to use @samp{%.16g}. +A value of @code{nil} means to use @samp{%.16g}. Regardless of the value of @code{float-output-format}, a floating point number will never be printed in such a way that it is ambiguous with an diff -r a8296e22da4e -r 576fb035e263 man/lispref/strings.texi --- a/man/lispref/strings.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/strings.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/strings.info @node Strings and Characters, Lists, Numbers, Top @@ -138,13 +138,14 @@ Analogous functions operating on other data types include @code{list}, @code{cons} (@pxref{Building Lists}), @code{vector} (@pxref{Vectors}) -and @code{bit-vector} (@pxref{Bit Vectors}). This function has not been +and @code{bit-vector} (@pxref{Bit Vectors}). This function has not been available in XEmacs prior to 21.0 and FSF Emacs prior to 20.3. @end defun -@defun make-string count character - This function returns a string made up of @var{count} repetitions of -@var{character}. If @var{count} is negative, an error is signaled. +@defun make-string length character +This function returns a new string consisting entirely of @var{length} +successive copies of @var{character}. @var{length} must be a +non-negative integer. @example (make-string 5 ?x) @@ -179,7 +180,7 @@ is 3 is actually the fourth character in the string. A negative number counts from the end of the string, so that @minus{}1 -signifies the index of the last character of the string. For example: +signifies the index of the last character of the string. For example: @example @group @@ -312,7 +313,7 @@ @node Character Codes @section Character Codes -@defun char-int ch +@defun char-int character This function converts a character into an equivalent integer. The resulting integer will always be non-negative. The integers in the range 0 - 255 map to characters as follows: @@ -357,10 +358,11 @@ @section Comparison of Characters and Strings @cindex string equality -@defun char-equal character1 character2 +@defun char-equal character1 character2 &optional buffer This function returns @code{t} if the arguments represent the same character, @code{nil} otherwise. This function ignores differences -in case if @code{case-fold-search} is non-@code{nil}. +in case if the value of @code{case-fold-search} is non-@code{nil} in +@var{buffer}, which defaults to the current buffer. @example (char-equal ?x ?x) @@ -460,7 +462,7 @@ (string< "abc" "ab") @result{} nil (string< "" "") - @result{} nil + @result{} nil @end group @end example @end defun @@ -560,13 +562,13 @@ @defun string-to-number string &optional base @cindex string to number -This function returns the numeric value of the characters in -@var{string}, read in @var{base}. It skips spaces and tabs at the -beginning of @var{string}, then reads as much of @var{string} as it can -interpret as a number. (On some systems it ignores other whitespace at -the beginning, not just spaces and tabs.) If the first character after -the ignored whitespace is not a digit or a minus sign, this function -returns 0. +This function returns the numeric value represented by @var{string}, +read in @var{base}. It skips spaces and tabs at the beginning of +@var{string}, then reads as much of @var{string} as it can interpret as +a number. (On some systems it ignores other whitespace at the +beginning, not just spaces and tabs.) If the first character after the +ignored whitespace is not a digit or a minus sign, this function returns +0. If @var{base} is not specified, it defaults to ten. With @var{base} other than ten, only integers can be read. @@ -637,7 +639,7 @@ @defun format string &rest objects This function returns a new string that is made by copying -@var{string} and then replacing any format specification +@var{string} and then replacing any format specification in the copy with encodings of the corresponding @var{objects}. The arguments @var{objects} are the computed values to be formatted. @end defun @@ -745,9 +747,9 @@ (format "The buffer object prints as %s." (current-buffer)) @result{} "The buffer object prints as #." -(format "The octal value of %d is %o, +(format "The octal value of %d is %o, and the hex value is %x." 18 18 18) - @result{} "The octal value of 18 is 22, + @result{} "The octal value of 18 is 22, and the hex value is 12." @end group @end example @@ -782,9 +784,9 @@ specifications. Normally the first specification uses the first argument, the second specification uses the second argument, etc. Using a repositioning specification, you can change this. By placing a number -@var{N} followed by a @samp{$} between the @samp{%} and the format -character, you cause the specification to use the @var{N}th argument. -The next specification will use the @var{N}+1'th argument, etc. +@var{n} followed by a @samp{$} between the @samp{%} and the format +character, you cause the specification to use the @var{n}th argument. +The next specification will use the @var{n}+1'th argument, etc. For example: @@ -846,23 +848,23 @@ second case, the string @code{"specification"} is 13 letters wide but is not truncated. In the third case, the padding is on the right. -@smallexample +@smallexample @group (format "The word `%7s' actually has %d letters in it." "foo" (length "foo")) - @result{} "The word ` foo' actually has 3 letters in it." + @result{} "The word ` foo' actually has 3 letters in it." @end group @group (format "The word `%7s' actually has %d letters in it." - "specification" (length "specification")) - @result{} "The word `specification' actually has 13 letters in it." + "specification" (length "specification")) + @result{} "The word `specification' actually has 13 letters in it." @end group @group (format "The word `%-7s' actually has %d letters in it." "foo" (length "foo")) - @result{} "The word `foo ' actually has 3 letters in it." + @result{} "The word `foo ' actually has 3 letters in it." @end group @end smallexample @@ -899,9 +901,9 @@ @node Character Case @section Character Case -@cindex upper case -@cindex lower case -@cindex character case +@cindex upper case +@cindex lower case +@cindex character case The character case functions change the case of single characters or of the contents of strings. The functions convert only alphabetic @@ -912,7 +914,7 @@ The examples below use the characters @samp{X} and @samp{x} which have @sc{ascii} codes 88 and 120 respectively. -@defun downcase string-or-char +@defun downcase string-or-char &optional buffer This function converts a character or a string to lower case. When the argument to @code{downcase} is a string, the function creates @@ -923,6 +925,9 @@ under XEmacs 19.) If the original character is lower case, or is not a letter, then the value equals the original character. +Optional second arg @var{buffer} specifies which buffer's case tables to +use, and defaults to the current buffer. + @example (downcase "The cat in the hat") @result{} "the cat in the hat" @@ -934,7 +939,7 @@ @end example @end defun -@defun upcase string-or-char +@defun upcase string-or-char &optional buffer This function converts a character or a string to upper case. When the argument to @code{upcase} is a string, the function creates @@ -946,6 +951,9 @@ integer under XEmacs 19.) If the original character is upper case, or is not a letter, then the value equals the original character. +Optional second arg @var{buffer} specifies which buffer's case tables to +use, and defaults to the current buffer. + @example (upcase "The cat in the hat") @result{} "THE CAT IN THE HAT" @@ -956,7 +964,7 @@ @end example @end defun -@defun capitalize string-or-char +@defun capitalize string-or-char &optional buffer @cindex capitalization This function capitalizes strings or characters. If @var{string-or-char} is a string, the function creates and returns a new @@ -972,6 +980,9 @@ When the argument to @code{capitalize} is a character, @code{capitalize} has the same result as @code{upcase}. +Optional second arg @var{buffer} specifies which buffer's case tables to +use, and defaults to the current buffer. + @example (capitalize "The cat in the hat") @result{} "The Cat In The Hat" @@ -1045,21 +1056,22 @@ table. @end defun -@defun set-standard-case-table table -This function makes @var{table} the standard case table, so that it will -apply to any buffers created subsequently. +@defun set-standard-case-table case-table +This function makes @var{case-table} the standard case table, so that it +will apply to any buffers created subsequently. @end defun @defun standard-case-table This returns the standard case table. @end defun -@defun current-case-table -This function returns the current buffer's case table. +@defun current-case-table &optional buffer +This function returns the case table of @var{buffer}, which defaults to +the current buffer. @end defun -@defun set-case-table table -This sets the current buffer's case table to @var{table}. +@defun set-case-table case-table +This sets the current buffer's case table to @var{case-table}. @end defun The following three functions are convenient subroutines for packages @@ -1171,8 +1183,8 @@ working with syntax tables. The valid values are integers. @end table -@defun char-table-type table -This function returns the type of char table @var{table}. +@defun char-table-type char-table +This function returns the type of char table @var{char-table}. @end defun @defun char-table-type-list @@ -1192,9 +1204,9 @@ @code{display}, @code{generic}, or @code{syntax}. @end defun -@defun put-char-table range val table -This function sets the value for chars in @var{range} to be @var{val} in -@var{table}. +@defun put-char-table range value char-table +This function sets the value for chars in @var{range} to be @var{value} in +@var{char-table}. @var{range} specifies one or more characters to be affected and should be one of the following: @@ -1211,24 +1223,24 @@ A single character @end itemize -@var{val} must be a value appropriate for the type of @var{table}. +@var{value} must be a value appropriate for the type of @var{char-table}. @end defun -@defun get-char-table ch table -This function finds the value for char @var{ch} in @var{table}. +@defun get-char-table character char-table +This function finds the value for @var{character} in @var{char-table}. @end defun -@defun get-range-char-table range table &optional multi -This function finds the value for a range in @var{table}. If there is +@defun get-range-char-table range char-table &optional multi +This function finds the value for a range in @var{char-table}. If there is more than one value, @var{multi} is returned (defaults to @code{nil}). @end defun -@defun reset-char-table table -This function resets a char table to its default state. +@defun reset-char-table char-table +This function resets @var{char-table} to its default state. @end defun -@defun map-char-table function table &optional range -This function maps @var{function} over entries in @var{table}, calling +@defun map-char-table function char-table &optional range +This function maps @var{function} over entries in @var{char-table}, calling it with two args, each key and value in the table. @var{range} specifies a subrange to map over and is in the same format diff -r a8296e22da4e -r 576fb035e263 man/lispref/symbols.texi --- a/man/lispref/symbols.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/symbols.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/symbols.info @node Symbols, Evaluation, Sequences Arrays Vectors, Top @@ -532,7 +532,7 @@ @end example @end defun -@defun putf plist property value +@defmac putf plist property value This stores @var{value} as the value of the @var{property} property in the property list @var{plist}. It may modify @var{plist} destructively, or it may construct a new list structure without altering the old. The @@ -547,7 +547,7 @@ (setq my-plist (putf my-plist 'quux '(a))) @result{} (quux (a) bar t foo 5) @end example -@end defun +@end defmac @defun plists-eq a b This function returns non-@code{nil} if property lists @var{a} and @var{b} diff -r a8296e22da4e -r 576fb035e263 man/lispref/syntax.texi --- a/man/lispref/syntax.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/syntax.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/syntax.info @node Syntax Tables, Abbrevs, Searching and Matching, Top @@ -368,7 +368,7 @@ In this section we describe functions for creating, accessing and altering syntax tables. -@defun make-syntax-table &optional table +@defun make-syntax-table &optional oldtable This function creates a new syntax table. Character codes 0 through 31 and 128 through 255 are set up to inherit from the standard syntax table. The other character codes are set up by copying what the @@ -377,28 +377,28 @@ Most major mode syntax tables are created in this way. @end defun -@defun copy-syntax-table &optional table -This function constructs a copy of @var{table} and returns it. If -@var{table} is not supplied (or is @code{nil}), it returns a copy of the -current syntax table. Otherwise, an error is signaled if @var{table} is -not a syntax table. +@defun copy-syntax-table &optional syntax-table +This function constructs a copy of @var{syntax-table} and returns it. +If @var{syntax-table} is not supplied (or is @code{nil}), it returns a +copy of the current syntax table. Otherwise, an error is signaled if +@var{syntax-table} is not a syntax table. @end defun -@deffn Command modify-syntax-entry char syntax-descriptor &optional table -This function sets the syntax entry for @var{char} according to -@var{syntax-descriptor}. The syntax is changed only for @var{table}, -which defaults to the current buffer's syntax table, and not in any -other syntax table. The argument @var{syntax-descriptor} specifies the -desired syntax; this is a string beginning with a class designator -character, and optionally containing a matching character and flags as -well. @xref{Syntax Descriptors}. +@deffn Command modify-syntax-entry char-range syntax-descriptor &optional syntax-table +This function sets the syntax entry for @var{char-range} according to +@var{syntax-descriptor}. @var{char-range} is either a single character +or a range of characters, as used with @code{put-char-table}. The syntax +is changed only for @var{syntax-table}, which defaults to the current +buffer's syntax table, and not in any other syntax table. The argument +@var{syntax-descriptor} specifies the desired syntax; this is a string +beginning with a class designator character, and optionally containing a +matching character and flags as well. @xref{Syntax Descriptors}. This function always returns @code{nil}. The old syntax information in -the table for this character is discarded. +the table for @var{char-range} is discarded. An error is signaled if the first character of the syntax descriptor is not -one of the twelve syntax class designator characters. An error is also -signaled if @var{char} is not a character. +one of the twelve syntax class designator characters. @example @group @@ -434,12 +434,18 @@ @end example @end deffn -@defun char-syntax character +@defun char-syntax character &optional syntax-table This function returns the syntax class of @var{character}, represented by its mnemonic designator character. This @emph{only} returns the class, not any matching parenthesis or flags. -An error is signaled if @var{char} is not a character. +An error is signaled if @var{character} is not a character. + +The characters that correspond to various syntax codes +are listed in the documentation of @code{modify-syntax-entry}. + +Optional second argument @var{syntax-table} is the syntax table to be +used, and defaults to the current buffer's syntax table. The following examples apply to C mode. The first example shows that the syntax class of space is whitespace (represented by a space). The @@ -467,9 +473,9 @@ @end example @end defun -@defun set-syntax-table table &optional buffer -This function makes @var{table} the syntax table for @var{buffer}, which -defaults to the current buffer if omitted. It returns @var{table}. +@defun set-syntax-table syntax-table &optional buffer +This function makes @var{syntax-table} the syntax table for @var{buffer}, which +defaults to the current buffer if omitted. It returns @var{syntax-table}. @end defun @defun syntax-table &optional buffer @@ -560,33 +566,33 @@ the parse: @enumerate 0 -@item +@item The depth in parentheses, counting from 0. -@item +@item @cindex innermost containing parentheses The character position of the start of the innermost parenthetical grouping containing the stopping point; @code{nil} if none. -@item +@item @cindex previous complete subexpression The character position of the start of the last complete subexpression terminated; @code{nil} if none. -@item +@item @cindex inside string Non-@code{nil} if inside a string. More precisely, this is the character that will terminate the string. -@item +@item @cindex inside comment @code{t} if inside a comment (of either style). -@item +@item @cindex quote character @code{t} if point is just after a quote character. -@item +@item The minimum parenthesis depth encountered during this scan. @item diff -r a8296e22da4e -r 576fb035e263 man/lispref/text.texi --- a/man/lispref/text.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/text.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/text.info @node Text, Searching and Matching, Markers, Top @@ -329,13 +329,16 @@ use @code{insert}). @end defun -@defun insert-char character count &optional buffer +@defun insert-char character &optional count ignored buffer This function inserts @var{count} instances of @var{character} into @var{buffer} before point. @var{count} must be a number, and -@var{character} must be a character. The value is @code{nil}. If -optional argument @var{buffer} is @code{nil}, the current buffer is -assumed. (In FSF Emacs, the third argument is called @var{inherit} -and refers to text properties.) +@var{character} must be a character. + +If optional argument @var{buffer} is @code{nil}, the current buffer is +assumed. (In FSF Emacs, the third argument is called @var{inherit} and +refers to text properties. In XEmacs, it is always ignored.) + +This function always returns @code{nil}. @end defun @defun insert-buffer-substring from-buffer-or-name &optional start end @@ -403,19 +406,19 @@ the inserted character has close parenthesis syntax (@pxref{Blinking}). @end deffn -@deffn Command newline &optional number-of-newlines +@deffn Command newline &optional count This command inserts newlines into the current buffer before point. -If @var{number-of-newlines} is supplied, that many newline characters +If @var{count} is supplied, that many newline characters are inserted. @cindex newline and Auto Fill mode This function calls @code{auto-fill-function} if the current column number is greater than the value of @code{fill-column} and -@var{number-of-newlines} is @code{nil}. Typically what +@var{count} is @code{nil}. Typically what @code{auto-fill-function} does is insert a newline; thus, the overall result in this case is to insert two newlines at different places: one at point, and another earlier in the line. @code{newline} does not -auto-fill if @var{number-of-newlines} is non-@code{nil}. +auto-fill if @var{count} is non-@code{nil}. This command indents to the left margin if that is not zero. @xref{Margins}. @@ -453,7 +456,7 @@ All of the deletion functions operate on the current buffer, and all return a value of @code{nil}. -@defun erase-buffer &optional buffer +@deffn Command erase-buffer &optional buffer This function deletes the entire text of @var{buffer}, leaving it empty. If the buffer is read-only, it signals a @code{buffer-read-only} error. Otherwise, it deletes the text without asking for any @@ -465,7 +468,7 @@ @code{erase-buffer} does not do this, the idea being that the future text is not really related to the former text, and its size should not be compared with that of the former text. -@end defun +@end deffn @deffn Command delete-region start end &optional buffer This command deletes the text in @var{buffer} in the region defined by @@ -564,7 +567,7 @@ @end example @end deffn -@deffn Command delete-indentation &optional join-following-p +@deffn Command delete-indentation &optional join-following-p This function joins the line point is on to the previous line, deleting any whitespace at the join and in some cases replacing it with one space. If @var{join-following-p} is non-@code{nil}, @@ -601,7 +604,7 @@ responsible for deciding whether to leave a space at the junction. @end deffn -@defun fixup-whitespace +@deffn Command fixup-whitespace This function replaces all the white space surrounding point with either one space or no space, according to the context. It returns @code{nil}. @@ -637,7 +640,7 @@ ---------- Buffer: foo ---------- @end group @end smallexample -@end defun +@end deffn @deffn Command just-one-space @comment !!SourceFile simple.el @@ -738,7 +741,7 @@ variable to determine whether the previous command was a kill command, and if so appends the killed text to the most recent entry. -@deffn Command kill-region start end +@deffn Command kill-region start end &optional verbose This function kills the text in the region defined by @var{start} and @var{end}. The text is deleted but saved in the kill ring, along with its text properties. The value is always @code{nil}. @@ -822,26 +825,32 @@ interaction with X Window selections. They do not exist in Emacs version 18. -@defun current-kill n &optional do-not-move +@defun current-kill count &optional do-not-move The function @code{current-kill} rotates the yanking pointer which -designates the ``front'' of the kill ring by @var{n} places (from newer +designates the ``front'' of the kill ring by @var{count} places (from newer kills to older ones), and returns the text at that place in the ring. If the optional second argument @var{do-not-move} is non-@code{nil}, then @code{current-kill} doesn't alter the yanking pointer; it just -returns the @var{n}th kill, counting from the current yanking pointer. - -If @var{n} is zero, indicating a request for the latest kill, +returns the @var{count}th kill, counting from the current yanking pointer. + +If @var{count} is zero, indicating a request for the latest kill, @code{current-kill} calls the value of @code{interprogram-paste-function} (documented below) before consulting the kill ring. @end defun -@defun kill-new string -This function puts the text @var{string} into the kill ring as a new -entry at the front of the ring. It discards the oldest entry if -appropriate. It also invokes the value of -@code{interprogram-cut-function} (see below). +@defun kill-new string &optional replace +This function makes the text @var{string} the latest entry in the kill +ring, and sets @code{kill-ring-yank-pointer} to point to it. + +Normally, @var{string} is added to the front of the kill ring as a new +entry. However, if optional argument @var{replace} is non-@code{nil}, +the entry previously at the front of the kill ring is discarded, and +@var{string} replaces it. + +This function runs the functions on @code{kill-hooks}, and also invokes +the value of @code{interprogram-cut-function} (see below). @end defun @defun kill-append string before-p @@ -884,7 +893,7 @@ The variable @code{kill-ring} holds the kill ring contents, in the form of a list of strings. The most recent kill is always at the front -of the list. +of the list. The @code{kill-ring-yank-pointer} variable points to a link in the kill ring list, whose @sc{car} is the text to yank next. We say it @@ -909,7 +918,7 @@ Here is a diagram that shows the variable @code{kill-ring-yank-pointer} pointing to the second entry in the kill ring @code{("some text" "a -different piece of text" "yet older text")}. +different piece of text" "yet older text")}. @example @group @@ -917,11 +926,11 @@ | | | ___ ___ ---> ___ ___ ___ ___ --> |___|___|------> |___|___|--> |___|___|--> nil - | | | - | | | - | | -->"yet older text" + | | | + | | | + | | -->"yet older text" | | - | --> "a different piece of text" + | --> "a different piece of text" | --> "some text" @end group @@ -973,9 +982,9 @@ motion does not get any sort of undo record, but deletion commands use these entries to record where point was before the command. -@item (@var{beg} . @var{end}) +@item (@var{start} . @var{end}) This kind of element indicates how to delete text that was inserted. -Upon insertion, the text occupied the range @var{beg}--@var{end} in the +Upon insertion, the text occupied the range @var{start}--@var{end} in the buffer. @item (@var{text} . @var{position}) @@ -991,12 +1000,12 @@ values to determine whether to mark the buffer as unmodified once again; it does so only if the file's modification time matches those numbers. -@item (nil @var{property} @var{value} @var{beg} . @var{end}) +@item (nil @var{property} @var{value} @var{start} . @var{end}) This kind of element records a change in a text property. Here's how you might undo the change: @example -(put-text-property @var{beg} @var{end} @var{property} @var{value}) +(put-text-property @var{start} @var{end} @var{property} @var{value}) @end example @item @var{position} @@ -1072,8 +1081,8 @@ You cannot specify any other buffer. @end deffn -@defun buffer-disable-undo &optional buffer -@defunx buffer-flush-undo &optional buffer +@deffn Command buffer-disable-undo &optional buffer +@deffnx Command buffer-flush-undo &optional buffer @cindex disable undo This function discards the undo list of @var{buffer}, and disables further recording of undo information. As a result, it is no longer @@ -1086,7 +1095,7 @@ The name @code{buffer-flush-undo} is not considered obsolete, but the preferred name @code{buffer-disable-undo} is new as of Emacs versions 19. -@end defun +@end deffn As editing continues, undo lists get longer and longer. To prevent them from using up all available memory space, garbage collection trims @@ -1321,11 +1330,14 @@ indentation if that doesn't match the left margin value. @end deffn -@defun delete-to-left-margin from to +@defun delete-to-left-margin &optional from to This function removes left margin indentation from the text between @var{from} and @var{to}. The amount of indentation to delete is determined by calling @code{current-left-margin}. In no case does this function delete non-whitespace. + +The arguments @var{from} and @var{to} are optional; the default is the +whole buffer. @end defun @defun indent-to-left-margin @@ -1441,16 +1453,16 @@ @group ;; @r{Note that the first two lines of doc string} ;; @r{are effectively one line when viewed by a user.} -(defun sort-lines (reverse beg end) +(defun sort-lines (reverse start end) "Sort lines in region alphabetically. Called from a program, there are three arguments: @end group @group REVERSE (non-nil means reverse order), -and BEG and END (the region to sort)." +and START and END (the region to sort)." (interactive "P\nr") (save-restriction - (narrow-to-region beg end) + (narrow-to-region start end) (goto-char (point-min)) (sort-subr reverse 'forward-line @@ -1469,8 +1481,8 @@ @example @group (sort-subr reverse - (function - (lambda () + (function + (lambda () (skip-chars-forward "\n \t\f"))) 'forward-paragraph) @end group @@ -1582,16 +1594,16 @@ is useful for sorting tables. @end deffn -@deffn Command sort-columns reverse &optional beg end -This command sorts the lines in the region between @var{beg} and +@deffn Command sort-columns reverse &optional start end +This command sorts the lines in the region between @var{start} and @var{end}, comparing them alphabetically by a certain range of columns. -The column positions of @var{beg} and @var{end} bound the range of +The column positions of @var{start} and @var{end} bound the range of columns to sort on. If @var{reverse} is non-@code{nil}, the sort is in reverse order. One unusual thing about this command is that the entire line -containing position @var{beg}, and the entire line containing position +containing position @var{start}, and the entire line containing position @var{end}, are included in the region sorted. Note that @code{sort-columns} uses the @code{sort} utility program, @@ -1620,17 +1632,29 @@ amount of horizontal scrolling. Consequently, a column value can be arbitrarily high. The first (or leftmost) column is numbered 0. -@defun current-column +@defun current-column &optional buffer This function returns the horizontal position of point, measured in -columns, counting from 0 at the left margin. The column position is the -sum of the widths of all the displayed representations of the characters -between the start of the current line and point. +columns, counting from 0 at the left margin. + +This is calculated by adding together the widths of all the displayed +representations of the character between the start of the previous line +and point. (e.g. control characters will have a width of 2 or 4, tabs +will have a variable width.) + +Ignores the finite width of frame displaying the buffer, which means +that this function may return values greater than +@code{(frame-width)}. + +Whether the line is visible (if @code{selective-display} is t) has no effect; +however, ^M is treated as end of line when @code{selective-display} is t. + +If @var{buffer} is nil, the current buffer is assumed. For an example of using @code{current-column}, see the description of @code{count-lines} in @ref{Text Lines}. @end defun -@defun move-to-column column &optional force +@defun move-to-column column &optional force buffer This function moves point to @var{column} in the current line. The calculation of @var{column} takes into account the widths of the displayed representations of the characters between the start of the @@ -1649,10 +1673,11 @@ @var{force}, since there is no way to split them. The argument @var{force} also has an effect if the line isn't long -enough to reach column @var{column}; in that case, it says to add +enough to reach column @var{column}; in that case, unless the value of +@var{force} is the special value @code{coerce}, it says to add whitespace at the end of the line to reach that column. -If @var{column} is not an integer, an error is signaled. +If @var{column} is not a non-negative integer, an error is signaled. The return value is the column number actually moved to. @end defun @@ -1682,7 +1707,7 @@ insert indentation. The functions in the following sections use these primitives. -@defun current-indentation +@defun current-indentation &optional buffer @comment !!Type Primitive Function @comment !!SourceFile indent.c This function returns the indentation of the current line, which is @@ -1691,7 +1716,7 @@ end of the line. @end defun -@deffn Command indent-to column &optional minimum +@deffn Command indent-to column &optional minimum buffer @comment !!Type Primitive Function @comment !!SourceFile indent.c This function indents from point with tabs and spaces until @var{column} @@ -1699,7 +1724,7 @@ least that many spaces are inserted even if this requires going beyond @var{column}. Otherwise the function does nothing if point is already beyond @var{column}. The value is the column at which the inserted -indentation ends. +indentation ends. If @var{buffer} is @code{nil}, the current buffer is assumed. @end deffn @defopt indent-tabs-mode @@ -1734,7 +1759,7 @@ indent the current line in a way appropriate for the current major mode. @end deffn -@deffn Command indent-for-tab-command +@deffn Command indent-for-tab-command &optional prefix-arg This command calls the function in @code{indent-line-function} to indent the current line; except that if that function is @code{indent-to-left-margin}, it calls @code{insert-tab} instead. (That @@ -1826,13 +1851,13 @@ replied to. @end deffn -@defun indent-code-rigidly start end columns &optional nochange-regexp +@deffn Command indent-code-rigidly start end columns &optional nochange-regexp This is like @code{indent-rigidly}, except that it doesn't alter lines that start within strings or comments. In addition, it doesn't alter a line if @var{nochange-regexp} matches at the beginning of the line (if @var{nochange-regexp} is non-@code{nil}). -@end defun +@end deffn @node Relative Indent @subsection Indentation Relative to Previous Lines @@ -1946,7 +1971,7 @@ These commands, primarily for interactive use, act based on the indentation in the text. -@deffn Command back-to-indentation +@deffn Command back-to-indentation @comment !!SourceFile simple.el This command moves point to the first non-whitespace character in the current line (which is the line in which point is located). It returns @@ -1974,7 +1999,7 @@ on strings and characters. @xref{Case Tables}, for how to customize which characters are upper or lower case and how to convert them. -@deffn Command capitalize-region start end +@deffn Command capitalize-region start end &optional buffer This function capitalizes all words in the region defined by @var{start} and @var{end}. To capitalize means to convert each word's first character to upper case and convert the rest of each word to lower @@ -2004,7 +2029,7 @@ @end example @end deffn -@deffn Command downcase-region start end +@deffn Command downcase-region start end &optional buffer This function converts all of the letters in the region defined by @var{start} and @var{end} to lower case. The function returns @code{nil}. @@ -2013,7 +2038,7 @@ @var{end} are point and the mark, with the smallest first. @end deffn -@deffn Command upcase-region start end +@deffn Command upcase-region start end &optional buffer This function converts all of the letters in the region defined by @var{start} and @var{end} to upper case. The function returns @code{nil}. @@ -2022,7 +2047,7 @@ @var{end} are point and the mark, with the smallest first. @end deffn -@deffn Command capitalize-word count +@deffn Command capitalize-word count &optional buffer This function capitalizes @var{count} words after point, moving point over as it does. To capitalize means to convert each word's first character to upper case and convert the rest of each word to lower case. @@ -2037,7 +2062,7 @@ set to the numeric prefix argument. @end deffn -@deffn Command downcase-word count +@deffn Command downcase-word count &optional buffer This function converts the @var{count} words after point to all lower case, moving point over as it does. If @var{count} is negative, it converts the @minus{}@var{count} previous words but does not move point. @@ -2047,7 +2072,7 @@ to the numeric prefix argument. @end deffn -@deffn Command upcase-word count +@deffn Command upcase-word count &optional buffer This function converts the @var{count} words after point to all upper case, moving point over as it does. If @var{count} is negative, it converts the @minus{}@var{count} previous words but does not move point. @@ -2115,7 +2140,7 @@ positions in a string start from 0, whereas positions in a buffer start from 1.) -@defun get-text-property pos prop &optional object +@defun get-text-property pos prop &optional object at-flag This function returns the value of the @var{prop} property of the character after position @var{pos} in @var{object} (a buffer or string). The argument @var{object} is optional and defaults to the current @@ -2127,7 +2152,7 @@ @end ignore @end defun -@defun get-char-property pos prop &optional object +@defun get-char-property pos prop &optional object at-flag This function is like @code{get-text-property}, except that it checks all extents, not just text-property extents. @@ -2280,7 +2305,7 @@ @var{pos}. If @var{limit} is non-@code{nil}, then the scan ends at position -@var{limit}. If there is no property change before that point, +@var{limit}. If there is no property change before that point, @code{next-property-change} returns @var{limit}. The value is @code{nil} if the properties remain unchanged all the way @@ -2311,7 +2336,7 @@ @var{pos}. If @var{limit} is non-@code{nil}, then the scan ends at position -@var{limit}. If there is no property change before that point, +@var{limit}. If there is no property change before that point, @code{next-single-property-change} returns @var{limit}. The value is @code{nil} if the property remains unchanged all the way to @@ -2321,14 +2346,14 @@ @end defun @defun previous-property-change pos &optional object limit -This is like @code{next-property-change}, but scans back from @var{pos} +This is like @code{next-property-change}, but scans backward from @var{pos} instead of forward. If the value is non-@code{nil}, it is a position less than or equal to @var{pos}; it equals @var{pos} only if @var{limit} equals @var{pos}. @end defun @defun previous-single-property-change pos prop &optional object limit -This is like @code{next-single-property-change}, but scans back from +This is like @code{next-single-property-change}, but scans backward from @var{pos} instead of forward. If the value is non-@code{nil}, it is a position less than or equal to @var{pos}; it equals @var{pos} only if @var{limit} equals @var{pos}. @@ -2372,7 +2397,7 @@ @cindex saving text properties You can save text properties in files, and restore text properties -when inserting the files, using these two hooks: +when inserting the files, using these two hooks: @defvar write-region-annotate-functions This variable's value is a list of functions for @code{write-region} to @@ -2422,7 +2447,7 @@ We invite users to write Lisp programs to store and retrieve text properties in files, using these hooks, and thus to experiment with -various data formats and find good ones. Eventually we hope users +various data formats and find good ones. Eventually we hope users will produce good, general extensions we can install in Emacs. We suggest not trying to handle arbitrary Lisp objects as property @@ -2477,7 +2502,7 @@ buffer between positions @var{start} and @var{end}. The translation table @var{table} can be either a string, a vector, or a char-table. -If @var{table} is a string, its @var{n}th element is the mapping for the +If @var{table} is a string, its @var{n}th element is the mapping for the character with code @var{n}. If @var{table} is a vector, its @var{n}th element is the mapping for @@ -2557,44 +2582,44 @@ rectangle; its elements are strings, one per line of the rectangle. @end defvar -@defun get-register reg +@defun get-register register This function returns the contents of the register -@var{reg}, or @code{nil} if it has no contents. +@var{register}, or @code{nil} if it has no contents. @end defun -@defun set-register reg value -This function sets the contents of register @var{reg} to @var{value}. +@defun set-register register value +This function sets the contents of register @var{register} to @var{value}. A register can be set to any value, but the other register functions expect only certain data types. The return value is @var{value}. @end defun -@deffn Command view-register reg -This command displays what is contained in register @var{reg}. +@deffn Command view-register register +This command displays what is contained in register @var{register}. @end deffn @ignore -@deffn Command point-to-register reg +@deffn Command point-to-register register This command stores both the current location of point and the current -buffer in register @var{reg} as a marker. +buffer in register @var{register} as a marker. @end deffn -@deffn Command jump-to-register reg -@deffnx Command register-to-point reg +@deffn Command jump-to-register register +@deffnx Command register-to-point register @comment !!SourceFile register.el -This command restores the status recorded in register @var{reg}. - -If @var{reg} contains a marker, it moves point to the position stored in -the marker. Since both the buffer and the location within the buffer -are stored by the @code{point-to-register} function, this command can -switch you to another buffer. - -If @var{reg} contains a window configuration or a frame configuration. +This command restores the status recorded in register @var{register}. + +If @var{register} contains a marker, it moves point to the position +stored in the marker. Since both the buffer and the location within the +buffer are stored by the @code{point-to-register} function, this command +can switch you to another buffer. + +If @var{register} contains a window configuration or a frame configuration. @code{jump-to-register} restores that configuration. @end deffn @end ignore -@deffn Command insert-register reg &optional beforep -This command inserts contents of register @var{reg} into the current +@deffn Command insert-register register &optional beforep +This command inserts contents of register @var{register} into the current buffer. Normally, this command puts point before the inserted text, and the @@ -2613,39 +2638,39 @@ @end deffn @ignore -@deffn Command copy-to-register reg start end &optional delete-flag +@deffn Command copy-to-register register start end &optional delete-flag This command copies the region from @var{start} to @var{end} into -register @var{reg}. If @var{delete-flag} is non-@code{nil}, it deletes +register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it into the register. @end deffn -@deffn Command prepend-to-register reg start end &optional delete-flag +@deffn Command prepend-to-register register start end &optional delete-flag This command prepends the region from @var{start} to @var{end} into -register @var{reg}. If @var{delete-flag} is non-@code{nil}, it deletes +register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it to the register. @end deffn -@deffn Command append-to-register reg start end &optional delete-flag +@deffn Command append-to-register register start end &optional delete-flag This command appends the region from @var{start} to @var{end} to the -text already in register @var{reg}. If @var{delete-flag} is +text already in register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it to the register. @end deffn -@deffn Command copy-rectangle-to-register reg start end &optional delete-flag +@deffn Command copy-rectangle-to-register register start end &optional delete-flag This command copies a rectangular region from @var{start} to @var{end} -into register @var{reg}. If @var{delete-flag} is non-@code{nil}, it +into register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it to the register. @end deffn -@deffn Command window-configuration-to-register reg +@deffn Command window-configuration-to-register register This function stores the window configuration of the selected frame in -register @var{reg}. +register @var{register}. @end deffn -@deffn Command frame-configuration-to-register reg +@deffn Command frame-configuration-to-register register This function stores the current frame configuration in register -@var{reg}. +@var{register}. @end deffn @end ignore @@ -2742,14 +2767,23 @@ Emacs Lisp interface to MD5 consists of a single function @code{md5}: -@defun md5 object &optional start end +@defun md5 object &optional start end coding noerror This function returns the MD5 message digest of @var{object}, a buffer or string. Optional arguments @var{start} and @var{end} denote positions for computing the digest of a portion of @var{object}. -Some examples of usage: +The optional @var{coding} argument specifies the coding system the text +is to be represented in while computing the digest. If unspecified, it +defaults to the current format of the data, or is guessed. + +If @var{noerror} is non-@code{nil}, silently assume binary coding if the +guesswork fails. Normally, an error is signaled in such case. + +@var{coding} and @var{noerror} arguments are meaningful only in XEmacsen +with file-coding or Mule support. Otherwise, they are ignored. Some +examples of usage: @example @group @@ -2779,13 +2813,13 @@ The Lisp interface to base64 consists of four functions: -@defun base64-encode-region beg end &optional no-line-break -This function encodes the region between @var{beg} and @var{end} of the -current buffer to base64 format. This means that the original region is +@deffn Command base64-encode-region start end &optional no-line-break +This function encodes the region between @var{start} and @var{end} of the +current buffer to base64 format. This means that the original region is deleted, and replaced with its base64 equivalent. Normally, encoded base64 output is multi-line, with 76-character lines. -If @var{no-line-break} is non-@code{nil}, newlines will not be inserted, +If @var{no-line-break} is non-@code{nil}, newlines will not be inserted, resulting in single-line output. Mule note: you should make sure that you convert the multibyte @@ -2805,12 +2839,16 @@ The function can also be used interactively, in which case it works on the currently active region. -@end defun - -@defun base64-encode-string string +@end deffn + +@defun base64-encode-string string &optional no-line-break This function encodes @var{string} to base64, and returns the encoded string. +Normally, encoded base64 output is multi-line, with 76-character lines. +If @var{no-line-break} is non-@code{nil}, newlines will not be inserted, +resulting in single-line output. + For Mule, the same considerations apply as for @code{base64-encode-region}. @@ -2822,12 +2860,12 @@ @end example @end defun -@defun base64-decode-region beg end -This function decodes the region between @var{beg} and @var{end} of the +@deffn Command base64-decode-region start end +This function decodes the region between @var{start} and @var{end} of the current buffer. The region should be in base64 encoding. If the region was decoded correctly, @code{base64-decode-region} returns -the length of the decoded region. If the decoding failed, @code{nil} is +the length of the decoded region. If the decoding failed, @code{nil} is returned. @example @@ -2836,7 +2874,7 @@ (base64-decode-region (point-min) (point-max)) @end group @end example -@end defun +@end deffn @defun base64-decode-string string This function decodes @var{string} to base64, and returns the decoded diff -r a8296e22da4e -r 576fb035e263 man/lispref/tips.texi --- a/man/lispref/tips.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/tips.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/tips.info @node Tips, Building XEmacs and Object Allocation, MULE, Top @@ -160,7 +160,7 @@ @item Redefining an Emacs primitive is an even worse idea. -It may do the right thing for a particular program, but +It may do the right thing for a particular program, but there is no telling what other programs might break as a result. @item @@ -284,7 +284,7 @@ search functions can be used. @item -Certain built-in functions are handled specially in byte-compiled code, +Certain built-in functions are handled specially in byte-compiled code, avoiding the need for an ordinary function call. It is a good idea to use these functions rather than alternatives. To see whether a function is handled specially by the compiler, examine its @code{byte-compile} @@ -369,13 +369,13 @@ @item Format the documentation string so that it fits in an Emacs window on an 80-column screen. It is a good idea for most lines to be no wider than -60 characters. The first line can be wider if necessary to fit the +60 characters. The first line can be wider if necessary to fit the information that ought to be there. However, rather than simply filling the entire documentation string, you can make it much more readable by choosing line breaks with care. Use blank lines between topics if the documentation string is long. - + @item @strong{Do not} indent subsequent lines of a documentation string so that the text is lined up in the source code with the text of the first diff -r a8296e22da4e -r 576fb035e263 man/lispref/toolbar.texi --- a/man/lispref/toolbar.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/toolbar.texi Mon Aug 13 11:36:19 2007 +0200 @@ -210,7 +210,7 @@ @defvr Specifier default-toolbar The position of this toolbar is specified in the function -@code{default-toolbar-position}. If the corresponding +@code{default-toolbar-position}. If the corresponding position-specific toolbar (e.g. @code{top-toolbar} if @code{default-toolbar-position} is @code{top}) does not specify a toolbar in a particular domain, then the value of @code{default-toolbar} @@ -270,7 +270,7 @@ @end defvr @defun toolbar-specifier-p object -This function returns non-nil if @var{object} is a toolbar specifier. +This function returns non-@code{nil} if @var{object} is a toolbar specifier. Toolbar specifiers are the actual objects contained in the toolbar variables described above, and their valid instantiators are toolbar descriptors (@pxref{Toolbar Descriptor Format}). @@ -366,7 +366,7 @@ left toolbar width for that frame to 68 pixels, then the frame will be sized to fit 80 characters plus a 68-pixel left toolbar. If you then set the left toolbar width to 0 for a particular buffer (or if that -buffer does not specify a left toolbar or has a nil value specified for +buffer does not specify a left toolbar or has a @code{nil} value specified for @code{left-toolbar-visible-p}), you will find that, when that buffer is displayed in the selected window, the window will have a width of 86 or 87 characters---the frame is sized for a 68-pixel left toolbar but the diff -r a8296e22da4e -r 576fb035e263 man/lispref/tooltalk.texi --- a/man/lispref/tooltalk.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/tooltalk.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/tooltalk.info @node ToolTalk Support, LDAP Support, X-Windows, top @@ -38,7 +38,7 @@ have a function binding). @item -The session attribute for messages and patterns is always +The session attribute for messages and patterns is always initialized to the default session. @item @@ -74,8 +74,8 @@ (message "Random query turns up nothing"))))) (defvar random-query-message - '( class TT_REQUEST - scope TT_SESSION + '( class TT_REQUEST + scope TT_SESSION address TT_PROCEDURE op "random-query" args '((TT_INOUT "?" "string")) @@ -90,12 +90,12 @@ @defun make-tooltalk-message attributes Create a ToolTalk message and initialize its attributes. -The value of @var{attributes} must be a list of alternating keyword/values, -where keywords are symbols that name valid message attributes. +The value of @var{attributes} must be a list of alternating keyword/values, +where keywords are symbols that name valid message attributes. For example: @example - (make-tooltalk-message + (make-tooltalk-message '(class TT_NOTICE scope TT_SESSION address TT_PROCEDURE @@ -223,12 +223,16 @@ @refill @end defun -@defun create-tooltalk-message +@defun create-tooltalk-message &optional no-callback Create a new ToolTalk message. The message's session attribute is initialized to the default session. Other attributes can be initialized with @code{set-tooltalk-message-attribute}. @code{make-tooltalk-message} is the preferred way to create and initialize a message. + +Optional arg @var{no-callback} says don't add a C-level callback at all. +Normally don't do that; just don't specify the Lisp callback when +calling @code{make-tooltalk-message}. @refill @end defun @@ -275,19 +279,19 @@ @defun make-tooltalk-pattern attributes Create a ToolTalk pattern and initialize its attributes. -The value of attributes must be a list of alternating keyword/values, +The value of attributes must be a list of alternating keyword/values, where keywords are symbols that name valid pattern attributes or lists of valid attributes. For example: @example - (make-tooltalk-pattern + (make-tooltalk-pattern '(category TT_OBSERVE scope TT_SESSION op ("operation1" "operation2") args ("arg1" 12345 (TT_INOUT "arg3" "string")))) @end example -Attribute names are the same as those supported by +Attribute names are the same as those supported by @code{add-tooltalk-pattern-attribute}, plus @code{'args}. Values must always be strings, integers, or symbols that represent @@ -316,15 +320,15 @@ @refill @end defun -@defun register-tooltalk-pattern pat +@defun register-tooltalk-pattern pattern XEmacs will begin receiving messages that match this pattern. @end defun -@defun unregister-tooltalk-pattern pat +@defun unregister-tooltalk-pattern pattern XEmacs will stop receiving messages that match this pattern. @end defun -@defun add-tooltalk-pattern-attribute value pat indicator +@defun add-tooltalk-pattern-attribute value pattern indicator Add one value to the indicated pattern attribute. The names of attributes are the same as the ToolTalk accessors used to set them less the @samp{tooltalk_pattern_} prefix and the @samp{_add} suffix. For @@ -340,9 +344,9 @@ message. @end defun -@defun add-tooltalk-pattern-arg pat mode type value +@defun add-tooltalk-pattern-arg pattern mode vtype &optional value Add one fully-specified argument to a ToolTalk pattern. @var{mode} must -be one of @code{TT_IN}, @code{TT_INOUT}, or @code{TT_OUT}. @var{type} +be one of @code{TT_IN}, @code{TT_INOUT}, or @code{TT_OUT}. @var{vtype} must be a string. @var{value} can be an integer, string or @code{nil}. If @var{value} is an integer then an integer argument (@samp{tt_pattern_iarg_add}) is added; otherwise a string argument is @@ -355,7 +359,7 @@ be the default session. @end defun -@defun destroy-tooltalk-pattern pat +@defun destroy-tooltalk-pattern pattern Apply @samp{tt_pattern_destroy} to the pattern. This effectively unregisters the pattern. @end defun diff -r a8296e22da4e -r 576fb035e263 man/lispref/variables.texi --- a/man/lispref/variables.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/variables.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/variables.info @node Variables, Functions, Control Structures, Top @@ -190,7 +190,7 @@ @result{} 2 @end group @group -(let ((Y 1) +(let ((Y 1) (Z Y)) (list Y Z)) @result{} (1 2) @@ -635,7 +635,7 @@ x ; @r{@code{x} now has a global value.} @result{} 3 @group -(let ((x 5)) +(let ((x 5)) (setq x 6) ; @r{The local binding of @code{x} is set.} x) @result{} 6 @@ -652,7 +652,7 @@ @group (setq x 10 ; @r{Notice that @code{x} is set before} y (1+ x)) ; @r{the value of @code{y} is computed.} - @result{} 11 + @result{} 11 @end group @end example @end defspec @@ -1101,10 +1101,26 @@ The value returned is @var{variable}. @end deffn -@defun local-variable-p variable &optional buffer +@defun local-variable-p variable buffer &optional after-set This returns @code{t} if @var{variable} is buffer-local in buffer -@var{buffer} (which defaults to the current buffer); otherwise, -@code{nil}. +@var{buffer}; else @code{nil}. + +If optional third arg @var{after-set} is non-@code{nil}, return @code{t} +if @var{symbol} would be buffer-local after it is set, regardless of +whether it is so presently. + +A @code{nil} value for @var{buffer} is @emph{not} the same as +@code{(current-buffer)}, but means "no buffer". Specifically: + +If @var{buffer} is @code{nil} and @var{after-set} is @code{nil}, a +return value of @code{t} indicates that the variable is one of the +special built-in variables that is always buffer-local. (This includes +@code{buffer-file-name}, @code{buffer-read-only}, +@code{buffer-undo-list}, and others.) + +If @var{buffer} is @code{nil} and @var{after-set} is @code{t}, a return +value of @code{t} indicates that the variable has had +@code{make-variable-buffer-local} applied to it. @end defun @defun buffer-local-variables &optional buffer @@ -1129,7 +1145,7 @@ (mode-name . "Fundamental") @dots{} @group - ;; @r{Next, non-built-in local variables.} + ;; @r{Next, non-built-in local variables.} ;; @r{This one is local and void:} foobar ;; @r{This one is local and nonvoid:} @@ -1330,13 +1346,13 @@ in any buffer, or the symbols @code{nil} or @code{t}. @end defun -@defun variable-alias variable +@defun variable-alias variable &optional follow-past-lisp-magic If @var{variable} is aliased to another variable, this function returns that variable. @var{variable} should be a symbol. If @var{variable} is not aliased, this function returns @code{nil}. @end defun -@defun indirect-variable object +@defun indirect-variable object &optional follow-past-lisp-magic This function returns the variable at the end of @var{object}'s variable-alias chain. If @var{object} is a symbol, follow all variable aliases and return the final (non-aliased) symbol. If @var{object} is diff -r a8296e22da4e -r 576fb035e263 man/lispref/windows.texi --- a/man/lispref/windows.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/windows.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/windows.info @node Windows, Frames, Buffers, Top @@ -22,7 +22,7 @@ * Choosing Window:: How to choose a window for displaying a buffer. * Window Point:: Each window has its own location of point. * Window Start:: The display-start position controls which text - is on-screen in the window. + is on-screen in the window. * Vertical Scrolling:: Moving text up and down in the window. * Horizontal Scrolling:: Moving text sideways on the window. * Size of Window:: Accessing the size of a window. @@ -66,31 +66,31 @@ @item containing frame -@item +@item window height -@item +@item window width -@item +@item window edges with respect to the frame or screen -@item +@item the buffer it displays -@item +@item position within the buffer at the upper left of the window -@item +@item amount of horizontal scrolling, in columns -@item +@item point -@item +@item the mark -@item +@item how recently the window was selected @end itemize @@ -139,33 +139,15 @@ The two ``halves'' of the split window initially display the same buffer previously visible in the window that was split. -@defun one-window-p &optional no-mini all-frames +@defun one-window-p &optional nomini which-frames which-devices This function returns non-@code{nil} if there is only one window. The -argument @var{no-mini}, if non-@code{nil}, means don't count the +argument @var{nomini}, if non-@code{nil}, means don't count the minibuffer even if it is active; otherwise, the minibuffer window is included, if active, in the total number of windows which is compared against one. - The argument @var{all-frame} controls which set of windows are -counted. -@itemize @bullet -@item -If it is @code{nil} or omitted, then count only the selected frame, plus -the minibuffer it uses (which may be on another frame). -@item -If it is @code{t}, then windows on all frames that currently exist -(including invisible and iconified frames) are counted. -@item -If it is the symbol @code{visible}, then windows on all visible frames -are counted. -@item -If it is the number 0, then windows on all visible and iconified frames -are counted. -@item -If it is any other value, then precisely the windows in @var{window}'s -frame are counted, excluding the minibuffer in use if it lies in -some other frame. -@end itemize +The remaining arguments controls which set of windows are counted, as +with @code{next-window}. @end defun @deffn Command split-window &optional window size horizontal @@ -202,7 +184,7 @@ @group ;; @r{Returns window created} -(setq w2 (split-window w 15)) +(setq w2 (split-window w 15)) @result{} # @end group @group @@ -220,8 +202,8 @@ @smallexample @group - __________ - | | line 0 + __________ + | | line 0 | w | |__________| | | line 15 @@ -259,8 +241,8 @@ @smallexample @group column 35 - __________ - | | | line 0 + __________ + | | | line 0 | w | w3 | |___|______| | | line 15 @@ -281,7 +263,7 @@ This function splits the selected window into two windows, one above the other, leaving the selected window with @var{size} lines. -This function is simply an interface to @code{split-windows}. +This function is simply an interface to @code{split-window}. Here is the complete function definition for it: @smallexample @@ -298,7 +280,7 @@ This function splits the selected window into two windows side-by-side, leaving the selected window with @var{size} columns. -This function is simply an interface to @code{split-windows}. Here is +This function is simply an interface to @code{split-window}. Here is the complete definition for @code{split-window-horizontally} (except for part of the documentation string): @@ -312,35 +294,6 @@ @end smallexample @end deffn -@defun one-window-p &optional no-mini all-frames -This function returns non-@code{nil} if there is only one window. The -argument @var{no-mini}, if non-@code{nil}, means don't count the -minibuffer even if it is active; otherwise, the minibuffer window is -included, if active, in the total number of windows, which is compared -against one. - -The argument @var{all-frames} specifies which frames to consider. Here -are the possible values and their meanings: - -@table @asis -@item @code{nil} -Count the windows in the selected frame, plus the minibuffer used -by that frame even if it lies in some other frame. - -@item @code{t} -Count all windows in all existing frames. - -@item @code{visible} -Count all windows in all visible frames. - -@item 0 -Count all windows in all visible or iconified frames. - -@item anything else -Count precisely the windows in the selected frame, and no others. -@end table -@end defun - @node Deleting Windows @section Deleting Windows @cindex deleting windows @@ -366,15 +319,21 @@ using a deleted window as if it were live. @end defun -@deffn Command delete-window &optional window -This function removes @var{window} from the display. If @var{window} -is omitted, then the selected window is deleted. An error is signaled -if there is only one window when @code{delete-window} is called. +@deffn Command delete-window &optional window force +This function removes @var{window} from the display. If @var{window} is +omitted, then the selected window is deleted. If window is the only one +on its frame, the frame is deleted as well. + +Normally, you cannot delete the last non-minibuffer-only frame (you must +use @code{save-buffers-kill-emacs} or @code{kill-emacs}); an error is +signaled instead. However, if optional second argument @var{force} is +non-@code{nil}, you can delete the last frame. (This will automatically +call @code{save-buffers-kill-emacs}.) This function returns @code{nil}. -When @code{delete-window} is called interactively, @var{window} -defaults to the selected window. +When @code{delete-window} is called interactively, the selected window +is deleted. @end deffn @deffn Command delete-other-windows &optional window @@ -385,7 +344,7 @@ The result is @code{nil}. @end deffn -@deffn Command delete-windows-on buffer &optional frame +@deffn Command delete-windows-on buffer &optional which-frames which-devices This function deletes all windows showing @var{buffer}. If there are no windows showing @var{buffer}, it does nothing. @@ -397,20 +356,52 @@ single window showing another buffer chosen with @code{other-buffer}. @xref{The Buffer List}. -The argument @var{frame} controls which frames to operate on: +The argument @var{which-frames} controls which frames to operate on: + +@table @asis +@item @code{nil} +Delete all windows showing @var{buffer} in any frame. + +@item @code{t} +Delete only windows showing @var{buffer} in the selected frame. + +@item @code{visible} +Delete all windows showing @var{buffer} in any visible frame. + +@item @code{0} +Delete all windows showing @var{buffer} in any visible frame. + +@item @var{frame} +If it is a frame, delete all windows showing @var{buffer} in that frame. +@end table + +@strong{Warning:} This is similar to, but not identical to, the meaning +of the @var{which-frames} argument to @code{next-window}; the meanings +of @code{nil} and @code{t} are reversed. -@itemize @bullet -@item -If it is @code{nil}, operate on the selected frame. -@item -If it is @code{t}, operate on all frames. -@item -If it is @code{visible}, operate on all visible frames. -@item 0 -If it is 0, operate on all visible or iconified frames. -@item -If it is a frame, operate on that frame. -@end itemize +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. +This value is only meaningful if @var{which-frames} is not @code{t}. + +@table @asis +@item @code{nil} +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + +@item anything else +Consider all devices without restriction. +@end table This function always returns @code{nil}. @end deffn @@ -438,7 +429,7 @@ If optional argument @var{norecord} is non-@code{nil} then the global and per-frame buffer orderings are not modified, as by the function -@code{record-buffer}. +@code{record-buffer}. The return value is @var{window}. @@ -451,19 +442,18 @@ @end example @end defun -@defmac save-selected-window forms@dots{} -This macro records the selected window, executes @var{forms} -in sequence, then restores the earlier selected window. -It does not save or restore anything about the sizes, arrangement -or contents of windows; therefore, if the @var{forms} change them, -the changes are permanent. -@end defmac +@defspec save-selected-window forms@dots{} +This special form records the selected window, executes @var{forms} in +sequence, then restores the earlier selected window. It does not save +or restore anything about the sizes, arrangement or contents of windows; +therefore, if the @var{forms} change them, the changes are permanent. +@end defspec @cindex finding windows The following functions choose one of the windows on the screen, offering various criteria for the choice. -@defun get-lru-window &optional frame +@defun get-lru-window &optional which-frames which-devices This function returns the window least recently ``used'' (that is, selected). The selected window is always the most recently used window. @@ -471,23 +461,59 @@ only window. A newly created window becomes the least recently used window until it is selected. A minibuffer window is never a candidate. -The argument @var{frame} controls which windows are considered. +By default, only the windows in the selected frame are considered. +The optional argument @var{which-frames} changes this behavior. +Here are the possible values and their meanings: + +@table @asis +@item @code{nil} +Consider all the windows in the selected windows's frame, plus the +minibuffer used by that frame even if it lies in some other frame. + +@item @code{t} +Consider all windows in all existing frames. + +@item @code{visible} +Consider all windows in all visible frames. (To get useful results, you +must ensure @var{window} is in a visible frame.) + +@item @code{0} +Consider all windows in all visible or iconified frames. + +@item @var{frame} +Consider all windows on frame @var{frame}. -@itemize @bullet -@item -If it is @code{nil}, consider windows on the selected frame. -@item -If it is @code{t}, consider windows on all frames. -@item -If it is @code{visible}, consider windows on all visible frames. -@item -If it is 0, consider windows on all visible or iconified frames. -@item -If it is a frame, consider windows on that frame. -@end itemize +@item anything else +Consider precisely the windows in the selected window's frame, and no others. +@end table + +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. +This value is only meaningful if @var{which-frames} is non-@code{nil}. + +@table @asis +@item @code{nil} +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + +@item anything else +Consider all devices without restriction. +@end table + @end defun -@defun get-largest-window &optional frame +@defun get-largest-window &optional which-frames which-devices This function returns the window with the largest area (height times width). If there are no side-by-side windows, then this is the window with the most lines. A minibuffer window is never a candidate. @@ -496,15 +522,15 @@ the window that is first in the cyclic ordering of windows (see following section), starting from the selected window. -The argument @var{frame} controls which set of windows are -considered. See @code{get-lru-window}, above. +The remaining arguments control which set of windows are considered. +See @code{next-window}, above. @end defun @node Cyclic Window Ordering @section Cyclic Ordering of Windows @cindex cyclic ordering of windows @cindex ordering of windows, cyclic -@cindex window ordering, cyclic +@cindex window ordering, cyclic When you use the command @kbd{C-x o} (@code{other-window}) to select the next window, it moves through all the windows on the screen in a @@ -523,7 +549,7 @@ In general, within each set of siblings at any level in the window tree, the order is left to right, or top to bottom. -@defun next-window &optional window minibuf all-frames +@defun next-window &optional window minibuf which-frames which-devices @cindex minibuffer window This function returns the window following @var{window} in the cyclic ordering of windows. This is the window that @kbd{C-x o} would select @@ -543,8 +569,9 @@ If @var{minibuf} is neither @code{t} nor @code{nil}, then the minibuffer window is not included even if it is active. -The argument @var{all-frames} specifies which frames to consider. Here -are the possible values and their meanings: +By default, only the windows in the selected frame are considered. +The optional argument @var{which-frames} changes this behavior. +Here are the possible values and their meanings: @table @asis @item @code{nil} @@ -558,14 +585,47 @@ Consider all windows in all visible frames. (To get useful results, you must ensure @var{window} is in a visible frame.) -@item 0 +@item @code{0} Consider all windows in all visible or iconified frames. +@item @var{frame} +Consider all windows on frame @var{frame}. + @item anything else Consider precisely the windows in @var{window}'s frame, and no others. @end table -This example assumes there are two windows, both displaying the +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. +This value is only meaningful if @var{which-frames} is non-@code{nil}. + +@table @asis +@item @code{nil} +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + +@item anything else +Consider all devices without restriction. +@end table + +If you use consistent values for @var{minibuf}, @var{which-frames}, and +@var{which-devices}, you can use @code{next-window} to iterate through the +entire cycle of acceptable windows, eventually ending up back at the +window you started with. @code{previous-window} traverses the same +cycle, in the reverse order. + +This example assumes there are two windows, both displaying the buffer @samp{windows.texi}: @example @@ -584,48 +644,29 @@ @end example @end defun -@defun previous-window &optional window minibuf all-frames +@defun previous-window &optional window minibuf which-frames which-devices This function returns the window preceding @var{window} in the cyclic ordering of windows. The other arguments specify which windows to include in the cycle, as in @code{next-window}. @end defun -@deffn Command other-window count &optional frame -This function selects the @var{count}th following window in the cyclic -order. If count is negative, then it selects the @minus{}@var{count}th +@deffn Command other-window count &optional which-frames which-devices +This function selects the @var{count}th following window in the cyclic order. +If @var{count} is negative, then it selects the @minus{}@var{count}th preceding window. It returns @code{nil}. In an interactive call, @var{count} is the numeric prefix argument. -The argument @var{frame} controls which set of windows are considered. -@itemize @bullet -@item -If it is @code{nil} or omitted, then windows on the selected frame are -considered. -@item -If it is a frame, then windows on that frame are considered. -@item -If it is @code{t}, then windows on all frames that currently exist -(including invisible and iconified frames) are considered. -@item -If it is the symbol @code{visible}, then windows on all visible frames -are considered. -@item -If it is the number 0, then windows on all visible and iconified frames -are considered. -@item -If it is any other value, then the behavior is undefined. -@end itemize +The other arguments specify which windows to include in the cycle, as in +@code{next-window}. @end deffn -@c Emacs 19 feature -@defun walk-windows proc &optional minibuf all-frames -This function cycles through all windows, calling @code{proc} +@defun walk-windows function &optional minibuf which-frames which-devices +This function cycles through all windows, calling @code{function} once for each window with the window as its sole argument. -The optional arguments @var{minibuf} and @var{all-frames} specify the -set of windows to include in the scan. See @code{next-window}, above, -for details. +The other arguments specify which windows to cycle through, as in +@code{next-window}. @end defun @node Buffers and Windows @@ -647,9 +688,14 @@ employ heuristics in choosing or creating a window; use these functions when you need complete control. -@defun set-window-buffer window buffer-or-name +@defun set-window-buffer window buffer-or-name &optional norecord This function makes @var{window} display @var{buffer-or-name} as its -contents. It returns @code{nil}. +contents. @var{buffer-or-name} can be a buffer or a buffer name. + +With non-@code{nil} optional argument @var{norecord}, do not modify the +global or per-frame buffer ordering. + +This function returns @code{nil}. @example @group @@ -672,27 +718,15 @@ @end example @end defun -@defun get-buffer-window buffer-or-name &optional frame +@defun get-buffer-window buffer-or-name &optional which-frames which-devices This function returns a window currently displaying @var{buffer-or-name}, or @code{nil} if there is none. If there are several such windows, then the function returns the first one in the cyclic ordering of windows, starting from the selected window. @xref{Cyclic Window Ordering}. -The argument @var{all-frames} controls which windows to consider. - -@itemize @bullet -@item -If it is @code{nil}, consider windows on the selected frame. -@item -If it is @code{t}, consider windows on all frames. -@item -If it is @code{visible}, consider windows on all visible frames. -@item -If it is 0, consider windows on all visible or iconified frames. -@item -If it is a frame, consider windows on that frame. -@end itemize +The remaining arguments control which windows to consider. They have +the same meaning as for @code{next-window}. @end defun @node Displaying Buffers @@ -801,13 +835,16 @@ Functions}. @end defun -@deffn Command replace-buffer-in-windows buffer +@deffn Command replace-buffer-in-windows buffer &optional which-frames which-devices This function replaces @var{buffer} with some other buffer in all windows displaying it. The other buffer used is chosen with @code{other-buffer}. In the usual applications of this function, you don't care which other buffer is used; you just want to make sure that @var{buffer} is no longer displayed. +The optional arguments @var{which-frames} and @var{which-devices} have +the same meaning as with @code{delete-windows-on}. + This function returns @code{nil}. @end deffn @@ -819,12 +856,14 @@ functions and commands use this subroutine. Here we describe how to use @code{display-buffer} and how to customize it. -@deffn Command display-buffer buffer-or-name &optional not-this-window +@deffn Command display-buffer buffer-or-name &optional not-this-window override-frame This command makes @var{buffer-or-name} appear in some window, like @code{pop-to-buffer}, but it does not select that window and does not make the buffer current. The identity of the selected window is unaltered by this function. +@var{buffer-or-name} can be a buffer or the name of one. + If @var{not-this-window} is non-@code{nil}, it means to display the specified buffer in a window other than the selected one, even if it is already on display in the selected window. This can cause the buffer to @@ -832,8 +871,10 @@ already being displayed in any window, that is good enough, so this function does nothing. -@code{display-buffer} returns the window chosen to display -@var{buffer-or-name}. +If @var{override-frame} is non-@code{nil}, display on that frame instead +of the current frame (or the dedicated frame). + +@code{display-buffer} returns the window chosen to display @var{buffer-or-name}. Precisely how @code{display-buffer} finds or creates a window depends on the variables described below. @@ -1039,13 +1080,14 @@ when the user switches to another buffer, the cursor jumps to the position of point in that buffer. -@defun window-point window +@defun window-point &optional window This function returns the current position of point in @var{window}. For a non-selected window, this is the value point would have (in that window's buffer) if that window were selected. When @var{window} is the selected window and its buffer is also the -current buffer, the value returned is the same as point in that buffer. +current buffer, the value returned is the same as the value of point in +that buffer. Strictly speaking, it would be more correct to return the ``top-level'' value of point, outside of any @code{save-excursion} @@ -1071,7 +1113,7 @@ @cindex window top line This function returns the display-start position of window @var{window}. If @var{window} is @code{nil}, the selected window is -used. For example, +used. For example, @example @group @@ -1088,19 +1130,25 @@ @ref{Text Lines}. @end defun -@defun window-end &optional window +@defun window-end &optional window guarantee This function returns the position of the end of the display in window @var{window}. If @var{window} is @code{nil}, the selected window is used. -Simply changing the buffer text or moving point does not update the -value that @code{window-end} returns. The value is updated only when -Emacs redisplays and redisplay actually finishes. +Simply changing the buffer text or setting @code{window-start} does not +update the value that @code{window-end} returns. The value is updated +only when Emacs redisplays and redisplay actually finishes. If the last redisplay of @var{window} was preempted, and did not finish, Emacs does not know the position of the end of display in that window. In that case, this function returns a value that is not correct. In a future version, @code{window-end} will return @code{nil} in that case. + +If optional arg @var{guarantee} is non-@code{nil}, the return value is +guaranteed to be the same as @code{window-end} would return at the end +of the next full redisplay assuming nothing else changes in the +meantime. This function is potentially much slower with this flag set. + @ignore in that case, this function returns @code{nil}. You can compute where the end of the window @emph{would} have been, if redisplay had finished, @@ -1229,33 +1277,33 @@ unpredictable results if the current buffer is different from the buffer that is displayed in the selected window. @xref{Current Buffer}. -@deffn Command scroll-up &optional count +@deffn Command scroll-up &optional lines This function scrolls the text in the selected window upward -@var{count} lines. If @var{count} is negative, scrolling is actually +@var{lines} lines. If @var{lines} is negative, scrolling is actually downward. -If @var{count} is @code{nil} (or omitted), then the length of scroll +If @var{lines} is @code{nil} (or omitted), then the length of scroll is @code{next-screen-context-lines} lines less than the usable height of the window (not counting its modeline). @code{scroll-up} returns @code{nil}. @end deffn -@deffn Command scroll-down &optional count +@deffn Command scroll-down &optional lines This function scrolls the text in the selected window downward -@var{count} lines. If @var{count} is negative, scrolling is actually +@var{lines} lines. If @var{lines} is negative, scrolling is actually upward. -If @var{count} is omitted or @code{nil}, then the length of the scroll +If @var{lines} is omitted or @code{nil}, then the length of the scroll is @code{next-screen-context-lines} lines less than the usable height of the window (not counting its mode line). @code{scroll-down} returns @code{nil}. @end deffn -@deffn Command scroll-other-window &optional count -This function scrolls the text in another window upward @var{count} -lines. Negative values of @var{count}, or @code{nil}, are handled +@deffn Command scroll-other-window &optional lines +This function scrolls the text in another window upward @var{lines} +lines. Negative values of @var{lines}, or @code{nil}, are handled as in @code{scroll-up}. You can specify a buffer to scroll with the variable @@ -1305,26 +1353,27 @@ @code{2}. @end defopt -@deffn Command recenter &optional count +@deffn Command recenter &optional location window @cindex centering point -This function scrolls the selected window to put the text where point -is located at a specified vertical position within the window. +This function scrolls @var{window} (which defaults to the selected +window) to put the text where point is located at a specified vertical +position within the window. -If @var{count} is a nonnegative number, it puts the line containing -point @var{count} lines down from the top of the window. If @var{count} +If @var{location} is a nonnegative number, it puts the line containing +point @var{location} lines down from the top of the window. If @var{location} is a negative number, then it counts upward from the bottom of the window, so that @minus{}1 stands for the last usable line in the window. -If @var{count} is a non-@code{nil} list, then it stands for the line in +If @var{location} is a non-@code{nil} list, then it stands for the line in the middle of the window. -If @var{count} is @code{nil}, @code{recenter} puts the line containing +If @var{location} is @code{nil}, @code{recenter} puts the line containing point in the middle of the window, then clears and redisplays the entire selected frame. -When @code{recenter} is called interactively, @var{count} is the raw +When @code{recenter} is called interactively, @var{location} is the raw prefix argument. Thus, typing @kbd{C-u} as the prefix sets the -@var{count} to a non-@code{nil} list, while typing @kbd{C-u 4} sets -@var{count} to 4, which positions the current line four lines from the +@var{location} to a non-@code{nil} list, while typing @kbd{C-u 4} sets +@var{location} to 4, which positions the current line four lines from the top. With an argument of zero, @code{recenter} positions the current line at @@ -1336,10 +1385,10 @@ (defun line-to-top-of-window () "Scroll current line to top of window. Replaces three keystroke sequence C-u 0 C-l." - (interactive) + (interactive) (recenter 0)) -(global-set-key [kp-multiply] 'line-to-top-of-window) +(global-set-key [kp-multiply] 'line-to-top-of-window) @end group @end example @end deffn @@ -1368,14 +1417,14 @@ to how far left you can scroll, but eventually all the text will disappear off the left edge. -@deffn Command scroll-left count +@deffn Command scroll-left &optional count This function scrolls the selected window @var{count} columns to the left (or to the right if @var{count} is negative). The return value is the total amount of leftward horizontal scrolling in effect after the change---just like the value returned by @code{window-hscroll} (below). @end deffn -@deffn Command scroll-right count +@deffn Command scroll-right &optional count This function scrolls the selected window @var{count} columns to the right (or to the left if @var{count} is negative). The return value is the total amount of leftward horizontal scrolling in effect after the @@ -1433,9 +1482,9 @@ @example @group (defun hscroll-on-screen (window position) - (save-excursion + (save-excursion (goto-char position) - (and + (and (>= (- (current-column) (window-hscroll window)) 0) (< (- (current-column) (window-hscroll window)) (window-width window))))) @@ -1590,7 +1639,7 @@ This function returns the height in pixels of the text displayed in @var{window}, which defaults to the selected window. Unlike @code{window-text-area-pixel-height}, any blank space below the -end of the buffer is not included. If optional argument @var{noclipped} +end of the buffer is not included. If optional argument @var{noclipped} is non-@code{nil}, any space occupied by clipped lines will not be included. @end defun @@ -1611,20 +1660,20 @@ The order of the list is @code{(@var{left} @var{top} @var{right} @var{bottom})}, all elements relative to 0, 0 at the top left corner of -the frame. The element @var{right} of the value is one more than the -rightmost pixel used by @var{window} (including any left margin, right -margin, or vertical scrollbar displayed alongside it), and +@var{window}'s frame. The element @var{right} of the value is one more +than the rightmost pixel used by @var{window} (including any left +margin, right margin, or vertical scrollbar displayed alongside it), and @var{bottom} is one more than the bottommost pixel used by @var{window} -(including any modeline or horizontal scrollbar displayed above -or below it). The frame area does not include any frame menubars or -toolbars that may be displayed; thus, for example, if there is only -one window on the frame, the values for @var{left} and @var{top} will -always be 0. +(including any modeline or horizontal scrollbar displayed above or below +it). The frame area does not include any frame menubars, toolbars, or +gutters that may be displayed; thus, for example, if there is only one +window on the frame, the values for @var{left} and @var{top} will always +be 0. If @var{window} is at the upper left corner of its frame, @var{right} and @var{bottom} are the same as the values returned by @code{(window-pixel-width)} and @code{(window-pixel-height)} -respectively, and @var{top} and @var{bottom} are zero. +respectively, and @var{left} and @var{top} are zero. @end defun There is no longer a function @code{window-edges} because it does not @@ -1660,15 +1709,15 @@ window size. XEmacs does not permit overlapping windows or gaps between windows, so resizing one window affects other windows. -@deffn Command enlarge-window size &optional horizontal window -This function makes the selected window @var{size} lines taller, +@deffn Command enlarge-window count &optional horizontal window +This function makes the selected window @var{count} lines taller, stealing lines from neighboring windows. It takes the lines from one window at a time until that window is used up, then takes from another. If a window from which lines are stolen shrinks below @code{window-min-height} lines, that window disappears. If @var{horizontal} is non-@code{nil}, this function makes -@var{window} wider by @var{size} columns, stealing columns instead of +@var{window} wider by @var{count} columns, stealing columns instead of lines. If a window from which columns are stolen shrinks below @code{window-min-width} columns, that window disappears. @@ -1676,15 +1725,15 @@ function makes the window occupy the entire height (or width) of the frame. -If @var{size} is negative, this function shrinks the window by -@minus{}@var{size} lines or columns. If that makes the window smaller +If @var{count} is negative, this function shrinks the window by +@minus{}@var{count} lines or columns. If that makes the window smaller than the minimum size (@code{window-min-height} and @code{window-min-width}), @code{enlarge-window} deletes the window. If @var{window} is non-@code{nil}, it specifies a window to change instead of the selected window. -@code{enlarge-window} returns @code{nil}. +@code{enlarge-window} returns @code{nil}. @end deffn @deffn Command enlarge-window-horizontally columns @@ -1700,20 +1749,20 @@ @end deffn @deffn Command enlarge-window-pixels count &optional side window -This function makes the selected window @var{count} pixels larger. When -called from Lisp, optional second argument @var{side} non-@code{nil} -means to grow sideways @var{count} pixels, and optional third argument -@var{window} specifies the window to change instead of the selected -window. +This function makes the selected window @var{count} pixels larger. +When called from Lisp, optional second argument @var{side} +non-@code{nil} means to grow sideways @var{count} pixels, and optional +third argument @var{window} specifies the window to change instead of +the selected window. @end deffn -@deffn Command shrink-window size &optional horizontal window +@deffn Command shrink-window count &optional horizontal window This function is like @code{enlarge-window} but negates the argument -@var{size}, making the selected window smaller by giving lines (or +@var{count}, making the selected window smaller by giving lines (or columns) to the other windows. If the window shrinks below @code{window-min-height} or @code{window-min-width}, then it disappears. -If @var{size} is negative, the window is enlarged by @minus{}@var{size} +If @var{count} is negative, the window is enlarged by @minus{}@var{count} lines or columns. If @var{window} is non-@code{nil}, it specifies a window to change @@ -1800,13 +1849,15 @@ configuration instead of a window configuration. @xref{Frame Configurations}. -@defun current-window-configuration -This function returns a new object representing XEmacs's current window -configuration, namely the number of windows, their sizes and current -buffers, which window is the selected window, and for each window the -displayed buffer, the display-start position, and the positions of point -and the mark. An exception is made for point in the current buffer, -whose value is not saved. +@defun current-window-configuration &optional frame +This function returns a new object representing the current current +window configuration of @var{frame}, namely the number of windows, their +sizes and current buffers, which window is the selected window, and for +each window the displayed buffer, the display-start position, and the +positions of point and the mark. An exception is made for point in the +current buffer, whose value is not saved. + +@var{frame} defaults to the selected frame. @end defun @defun set-window-configuration configuration diff -r a8296e22da4e -r 576fb035e263 man/lispref/x-windows.texi --- a/man/lispref/x-windows.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/lispref/x-windows.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/x-windows.texinfo @node X-Windows, ToolTalk Support, System Interface, Top @@ -72,11 +72,23 @@ function is called @code{x-get-cut-buffer} in FSF Emacs.) @end defun -@defun x-store-cutbuffer string +@defun x-store-cutbuffer string &optional push This function stores @var{string} into the first cut buffer (cut buffer -0), moving the other values down through the series of cut buffers, -kill-ring-style. (This function is called @code{x-set-cut-buffer} in FSF -Emacs.) +0). + +Normally, the contents of the first cut buffer are simply replaced by +@var{string}. However, if optional argument @var{push} is +non-@code{nil}, the cut buffers are rotated. This means that the +previous value of the first cut buffer moves to the second cut buffer, +and the second to the third, and so on, moving the other values down +through the series of cut buffers, kill-ring-style. There are 8 cut +buffers altogether. + +Cut buffers are considered obsolete; you should use selections instead. + +This function has no effect if support for cut buffers was not compiled in. + +This function is called @code{x-set-cut-buffer} in FSF Emacs. @end defun @node X Server @@ -237,7 +249,7 @@ this variable may only be changed before XEmacs is dumped, or by setting it in the file @file{lisp/term/x-win.el}. -By default, this variable is nil at startup. When the connection +By default, this variable is @code{nil} at startup. When the connection to the X server is first initialized, the X resource database will be consulted and the value will be set according to whether any resources are found for the application class ``XEmacs''. @@ -251,7 +263,7 @@ corresponding to a particular device. The device argument is generally optional and defaults to the selected device. -@defun x-server-version &optional device +@defun x-server-version &optional device This function returns the list of version numbers of the X server @var{device} is on. The returned value is a list of three integers: the major and minor version numbers of the X protocol in use, and the diff -r a8296e22da4e -r 576fb035e263 man/new-users-guide/files.texi --- a/man/new-users-guide/files.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/new-users-guide/files.texi Mon Aug 13 11:36:19 2007 +0200 @@ -6,7 +6,7 @@ The basic unit of stored data in Unix is the @dfn{file}. To edit a file, you must tell Emacs to read the file into a buffer. This is called @dfn{visiting} the file. You can now edit the buffer and to save the -changes you must write the buffer back to the file. +changes you must write the buffer back to the file. In addition to visiting and saving files, Emacs can delete, copy, rename, and append to files, and operate on file directories. @@ -51,7 +51,7 @@ menu. When Emacs prompts you for the variable name to describe, type @var{default-directory}. If you wish to open a file in some other directory, use @key{DEL} or the @key{BackSpace} key to go back and type -the path name of the new directory. +the path name of the new directory. You can create a new directory by typing @kbd{M-x make-directory}. This command will prompt you for a directory name: @@ -72,7 +72,7 @@ @kbd{remove-directory}. The command @kbd{M-x pwd} will print the current buffer's default directory. For more information on file names, @xref{File Names,,,xemacs,XEmacs User's Manual}. - + @node Visiting, Saving Files, File Names, Files @section Visiting Files @@ -109,14 +109,14 @@ already exists in Emacs, the buffer containing that file will be selected. You will get an error message if the filename does not exist. If you still press @key{RET}, a new buffer with the given -filename will be displayed on the screen. +filename will be displayed on the screen. @item C-x C-v @kindex C-x C-v @findex find-alternate-file This command (@code{find-alternate-file}), will visit a different file instead of the one visited last. It is similar to @kbd{C-c C-f} except -that it kills the current buffer (after offering to save it). +that it kills the current buffer (after offering to save it). @item C-x 5 C-f @kindex C-x 5 C-f @@ -126,7 +126,7 @@ frame. The @b{Open in New Frame...} from the @b{File} menu will do the same thing. It will prompt you for a file name in the echo area. After you type the file name and press @key{RET}, the specified file will be -read into a new buffer and displayed on a new frame. +read into a new buffer and displayed on a new frame. @end table @node Saving Files, , Visiting, Files @@ -153,7 +153,7 @@ @noindent Try using this command twice. You will get the above message the first time you use this command, the second time you will get the following -message: +message: @example (No changes need to be saved) @@ -161,7 +161,7 @@ @noindent This message indicates that you haven't made any changes since the last -time you saved the file. +time you saved the file. @item C-x s @kindex C-x s @@ -175,7 +175,7 @@ @noindent You will get the above message for all the buffers. Type "y" if you want -to save the buffer. +to save the buffer. @item C-x C-w @findex write file @@ -191,17 +191,17 @@ @noindent After you type in a file name, press @key{RET}. The buffer will be saved in a new file. You can make copies of a particular file using this -command. +command. @end table You can also undo all the changes made since the file was visited or saved by reading the text from the file again (called @dfn{reverting}). For more information on this option, -@xref{Reverting,,,xemacs,XEmacs User's Manual}. +@xref{Reverting,,,xemacs,XEmacs User's Manual}. @vindex make-backup-files When you save a file in Emacs, it destroys its old contents. However, -if you set the variable @var{make-backup-files} to non-@var{nil} +if you set the variable @var{make-backup-files} to non-@code{nil} i.e. @samp{t}, Emacs will create a @dfn{backup} file. Select the @b{Describe variable} option from the @b{Help} menu and look at the documentation for this variable. Its default value should be @@ -209,7 +209,7 @@ to @samp{t} (@pxref{Setting Variables}). The backup file will contain the contents from the last time you visited the file. Emacs also provides options for creating numbered backups. For more information on -backups, @xref{Backup,,,xemacs,XEmacs User's Manual}. +backups, @xref{Backup,,,xemacs,XEmacs User's Manual}. @cindex auto saving Emacs also saves all the files from time to time so that in case of a @@ -219,7 +219,7 @@ character @samp{#} in front and back. For example a file called "myfile.texinfo" would be named as @file{#myfile.texinfo#}. For information on controlling auto-saving and recovering data from -auto-saving, @xref{Auto Save Files,,,xemacs,XEmacs User's Manual}. +auto-saving, @xref{Auto Save Files,,,xemacs,XEmacs User's Manual}. @cindex simultaneous editing Emacs provides protection from simultaneous editing which occurs if @@ -230,10 +230,6 @@ options. For more information on protection against simultaneous editing, @xref{Interlocking,,,xemacs,XEmacs User's Manual}. - - - - @@ -252,3 +248,7 @@ + + + + diff -r a8296e22da4e -r 576fb035e263 man/new-users-guide/search.texi --- a/man/new-users-guide/search.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/new-users-guide/search.texi Mon Aug 13 11:36:19 2007 +0200 @@ -12,9 +12,9 @@ then "string" will also be one of the selections. If you want a case sensitive search select the @b{Case Sensitive Search} from the @b{Option} menu. You can also set the variable @var{case-fold-search} to -@var{nil} for making searches case-sensitive. For information on setting +@code{nil} for making searches case-sensitive. For information on setting variables, @xref{Setting Variables}. The two commands for searching for -strings in XEmacs are: +strings in XEmacs are: @table @kbd @item C-s @@ -34,9 +34,9 @@ hit @key{RET} or type @kbd{C-f} or @kbd{C-b} to set the cursor's position. If you find a matching string "myname" but you were looking for a different occurrence of it, use @kbd{C-s} again. If the search is -unable to find the string, it will give you an error message. +unable to find the string, it will give you an error message. -@item C-r +@item C-r @findex isearch-backward @kindex C-r This command will perform an incremental search in the backward @@ -56,7 +56,7 @@ If you make a mistake while typing the string names when you use the above commands, you can use the @key{DEL} key to erase characters. Each @key{DEL} will erase the last character. At any time if you want to quit -the search, just type @kbd{C-g}. +the search, just type @kbd{C-g}. To do a non-incremental search i.e. to start the search only after you have typed the whole string you can use the following commands: @@ -64,7 +64,7 @@ @table @kbd @item C-s RET @dfn{string} RET This command will search for the specified string in the forward -direction and will give an error message if the string is not found. +direction and will give an error message if the string is not found. @item C-r RET @dfn{string} RET This command will search for the specified string in the backward @@ -72,13 +72,13 @@ @end table For information on how Emacs searches for words and regular -expressions, @xref{Search,,,xemacs,XEmacs User's Manual}. +expressions, @xref{Search,,,xemacs,XEmacs User's Manual}. To replace all occurrences of a string in Emacs, you can use the -following command: +following command: @findex replace-string @example -M-x replace-string +M-x replace-string @end example @noindent @@ -111,8 +111,8 @@ check for spellings: @noindent -Evaluate the expression @code{(load "big-menubar")}. To evaluate this +Evaluate the expression @code{(load "big-menubar")}. To evaluate this expression you need to hit the @key{META} or the @key{ESC} key twice and type in the expression in the echo area before hitting @key{RET}. You will get an extensive menubar. Select the @b{Spell Check} menu item from -the @b{Utilities} menu for checking spellings. +the @b{Utilities} menu for checking spellings. diff -r a8296e22da4e -r 576fb035e263 man/widget.texi --- a/man/widget.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/widget.texi Mon Aug 13 11:36:19 2007 +0200 @@ -94,7 +94,7 @@ @enumerate @item -More complex field than just editable text are supported. +More complex fields than just editable text are supported. @item You can give the user immediate feedback if he enters invalid data in a text field, and sometimes prevent entering invalid data. @@ -430,7 +430,7 @@ | NAME @end example -Where, @var{name} is a widget name, @var{keyword} is the name of a +where @var{name} is a widget name, @var{keyword} is the name of a property, @var{argument} is the value of the property, and @var{args} are interpreted in a widget specific way. @@ -510,7 +510,7 @@ @end table @item :doc -The string inserted by the @samp{%d} escape in the format +The string inserted by the @samp{%d} or @samp{%h} escape in the format string. @item :tag @@ -559,7 +559,7 @@ and returning non-nil if the widget can represent the specified value. @item :validate -A function which takes a widget as an argument, and return nil if the +A function which takes a widget as an argument, and returns nil if the widget's current value is valid for the widget. Otherwise it should return the widget containing the invalid data, and set that widget's @code{:error} property to a string explaining the error. @@ -722,8 +722,10 @@ @table @code @item :size -The width of the editable field.@* -By default the field will reach to the end of the line. +The minimum width of the editable field.@* +By default the field will reach to the end of the line. If the +content is too large, the displayed representation will expand to +contain it. The content is not truncated to size. @item :value-face Face used for highlighting the editable field. Default is @@ -742,7 +744,7 @@ @item :keymap Keymap used in the editable field. The default value is @code{widget-field-keymap}, which allows you to use all the normal -editing commands, even if the buffers major mode suppress some of them. +editing commands, even if the buffer's major mode suppress some of them. Pressing return invokes the function specified by @code{:action}. @end table diff -r a8296e22da4e -r 576fb035e263 man/xemacs-faq.texi --- a/man/xemacs-faq.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs-faq.texi Mon Aug 13 11:36:19 2007 +0200 @@ -7,7 +7,7 @@ @finalout @titlepage @title XEmacs FAQ -@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2000/09/19 07:50:41 $ +@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2000/11/02 21:51:16 $ @sp 1 @author Tony Rossini @author Ben Wing @@ -148,6 +148,8 @@ * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? +* Q2.0.13:: I don't need no steenkin' packages. Do I? (NEW) +* Q2.0.14:: How do I figure out which packages to install? (NEW) Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -174,6 +176,7 @@ * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) +* Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) Customization and Options @@ -787,23 +790,23 @@ @itemize @bullet @item @email{martin@@xemacs.org, Martin Buchholz} -@ifhtml +@html
Portrait of Martin Buchholz
-@end ifhtml +@end html @item @email{steve@@xemacs.org, Steve Baur} -@ifhtml +@html
Portrait of Steve Baur
-@end ifhtml +@end html @item @email{hniksic@@xemacs.org, Hrvoje Niksic} -@ifhtml +@html
Portrait of Hrvoje Niksic
-@end ifhtml +@end html @end itemize @@ -811,26 +814,26 @@ @itemize @bullet @item @email{cthomp@@xemacs.org, Chuck Thompson} -@ifhtml +@html
Portrait of Chuck Thompson
-@end ifhtml +@end html Chuck was Mr. XEmacs from 19.11 through 19.14, and is responsible for XEmacs becoming a widely distributed program over the Internet. @item @email{ben@@xemacs.org, Ben Wing} -@ifhtml +@html
Portrait of Ben Wing
-@end ifhtml +@end html @end itemize @itemize @bullet @item @email{jwz@@jwz.org, Jamie Zawinski} -@ifhtml +@html
Portrait of Jamie Zawinski
-@end ifhtml +@end html Jamie Zawinski was Mr. Lucid Emacs from 19.0 through 19.10, the last release actually named Lucid Emacs. Richard Mlynarik was crucial to @@ -1212,6 +1215,8 @@ * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? +* Q2.0.13:: I don't need no steenkin' packages. Do I? (NEW) +* Q2.0.14:: I don't want to install a million .els one at a time! (NEW) Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -1238,6 +1243,7 @@ * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) +* Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) @end menu @node Q2.0.1, Q2.0.2, Installation, Installation @@ -1520,7 +1526,7 @@ to link against the DNS resolver library code. @end quotation -@node Q2.0.12, Q2.1.1, Q2.0.11, Installation +@node Q2.0.12, Q2.0.13, Q2.0.11, Installation @unnumberedsubsec Q2.0.12: Why can't I strip XEmacs? @email{cognot@@fronsac.ensg.u-nancy.fr, Richard Cognot} writes: @@ -1575,7 +1581,42 @@ @end enumerate @end quotation -@node Q2.1.1, Q2.1.2, Q2.0.12, Installation +@node Q2.0.13, Q2.0.14, Q2.0.12, Installation +@unnumberedsubsec Q2.0.13: I don't need no steenkin' packages. Do I? (NEW) + +Strictly speaking, no. XEmacs will build and install just fine without +any packages installed. However, only the most basic editing functions +will be available with no packages installed, so installing packages is +an essential part of making your installed XEmacs _useful_. + +@node Q2.0.14, Q2.1.1, Q2.0.13, Installation +@unnumberedsubsec Q2.0.12: How do I figure out which packages to install? (NEW) + +Many people really liked the old way that packages were bundled and do +not want to mess with packages at all. You can grab all the packages at +once like you used to with old XEmacs versions. Download the file + +@file{xemacs-sumo.tar.gz} + +For an XEmacs compiled with Mule you also need + +@file{xemacs-mule-sumo.tar.gz} + +from the @file{packages} directory on your XEmacs mirror archive. +N.B. They are called 'Sumo Tarballs' for good reason. They are +currently about 15MB and 2.3MB (gzipped) respectively. + +Install them by + +@code{cd $prefix/lib/xemacs ; gunzip -c | tar xf -} + +See README.packages for more detailed installation instructions. + +As the Sumo tarballs are not regenerated as often as the individual +packages, it is recommended that you use the automatic package tools +afterwards to pick up any recent updates. + +@node Q2.1.1, Q2.1.2, Q2.0.14, Installation @unnumberedsec 2.1: Trouble Shooting @unnumberedsubsec Q2.1.1: Help! XEmacs just crashed on me! @@ -2274,7 +2315,7 @@ @end example @end quotation -@node Q2.1.24, , Q2.1.23, Installation +@node Q2.1.24, Q2.1.25, Q2.1.23, Installation @unnumberedsubsec Q2.1.24: XEmacs won't start without network. (NEW) If XEmacs starts when you're on the network, but fails when you're not @@ -2287,6 +2328,18 @@ Add that line, and XEmacs will be happy. +@node Q2.1.25, , Q2.1.24, Installation +@unnumberedsubsec Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) + +You have been used to doing `foo', but now when you invoke it (or click +the toolbar button or select the menu item), nothing (or an error) +happens. The simplest explanation is that you are missing a package +that is essential to you. You can either track it down and install it +(there is a list of packages and brief descriptions of their contents in +@file{etc/PACKAGES}), or install the `Sumo Tarball' (see @pxref{Q2.0.14}). + +@c #### should xref to XEmacs manual here + @node Customization, Subsystems, Installation, Top @unnumbered 3 Customization and Options diff -r a8296e22da4e -r 576fb035e263 man/xemacs/abbrevs.texi --- a/man/xemacs/abbrevs.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/abbrevs.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,5 +1,5 @@ -@node Abbrevs, Picture, Packages, Top +@node Abbrevs, Picture, Running, Top @chapter Abbrevs @cindex abbrevs @cindex expansion (of abbrevs) diff -r a8296e22da4e -r 576fb035e263 man/xemacs/basic.texi --- a/man/xemacs/basic.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/basic.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,7 +1,7 @@ @c This is part of the XEmacs manual. @c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. @c See file xemacs.texi for copying conditions. -@node Basic, Undo, Startup Paths, Top +@node Basic, Undo, Packages, Top @chapter Basic Editing Commands @kindex C-h t diff -r a8296e22da4e -r 576fb035e263 man/xemacs/building.texi --- a/man/xemacs/building.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/building.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,5 +1,5 @@ -@node Running, Packages, Programs, Top +@node Running, Abbrevs, Programs, Top @chapter Compiling and Testing Programs The previous chapter discusses the Emacs commands that are useful for @@ -71,7 +71,7 @@ compilation continues in any case. @findex kill-compilation - To kill the compilation process, type @kbd{M-x-kill-compilation}. The mode + To kill the compilation process, type @kbd{M-x kill-compilation}. The mode line of the @samp{*compilation*} buffer changes to say @samp{signal} instead of @samp{run}. Starting a new compilation also kills any running compilation, as only one can occur at any time. Starting a new diff -r a8296e22da4e -r 576fb035e263 man/xemacs/files.texi --- a/man/xemacs/files.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/files.texi Mon Aug 13 11:36:19 2007 +0200 @@ -212,8 +212,10 @@ @code{buffer-file-truename} of all visited files when deciding whether a given file is already in a buffer, instead of just @code{buffer-file-name}. If you attempt to visit another file which is -a hard-link or symbolic-link to a file that is already in a buffer, the -existing buffer will be found instead of a newly created one. +a symbolic link to a file that is already in a buffer, the existing +buffer will be found instead of a newly created one. This works if any +component of the pathname (including a non-terminal component) is a +symbolic link as well, but doesn't work with hard links (nothing does). @cindex creating files If you want to create a file, just visit it. Emacs prints diff -r a8296e22da4e -r 576fb035e263 man/xemacs/menus.texi --- a/man/xemacs/menus.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/menus.texi Mon Aug 13 11:36:19 2007 +0200 @@ -21,6 +21,9 @@ cutting, copying, pasting, and killing selected text. @cindex Edit menu +@c #### The Mule menu needs to be documented, but this is not the place +@c for it since Ben just moved it. + @item Apps Access to sub-applications implemented within XEmacs, such as the mail reader, the World Wide Web browser, the spell-checker, and the calendar diff -r a8296e22da4e -r 576fb035e263 man/xemacs/packages.texi --- a/man/xemacs/packages.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/packages.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,4 +1,7 @@ -@node Packages, Abbrevs, Running, Top +@c This is part of the XEmacs manual. +@c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. +@c See file xemacs.texi for copying conditions. +@node Packages, Basic, Startup Paths, Top @comment node-name, next, previous, up @section Packages @@ -16,6 +19,7 @@ * Package Terminology:: Understanding different kinds of packages. * Using Packages:: How to install and use packages. * Building Packages:: Building packages from sources. +* Available Packages:: A brief, out-of-date, directory of packaged LISP. @end menu @node Package Terminology, Using Packages, , Packages @@ -335,7 +339,7 @@ @end enumerate -@node Building Packages, , Using Packages, Packages +@node Building Packages, Available Packages, Using Packages, Packages @comment node-name, next, previous, up Source packages are available from the @file{packages/source-packages} @@ -397,3 +401,272 @@ primarily of use by XEmacs maintainers producing files for distribution. @end table + +@node Available Packages, , Building Packages, Packages +@comment node-name, next, previous, up + +This section is surely out-of-date. If you're sure that XEmacs is +able to do something, but your installed XEmacs won't do it for you, +it's probably in a package. If you can't find it in this section, +that's a bug---please report it. It is very hard to keep this section +up-to-date; your reports, comments, and questions will help a lot. + +This data is up-to-date as of 10 February 1999. (Ouch! I told you!) + +@subsection Library Packages (libs) + +These packages are required to build and support most of the rest of +XEmacs. By design, xemacs-base is a `regular' package. Use restraint +when adding new files there as it is required by almost everything. + +@table @file +@item Sun +Support for Sparcworks. + +@item apel +A Portable Emacs Library. Used by XEmacs MIME support. + +@item edebug +A Lisp debugger. + +@item dired +The DIRectory EDitor is for manipulating, and running commands on +files in a directory. + +@item efs +Treat files on remote systems the same as local files. + +@item mail-lib +Fundamental lisp files for providing email support. + +@item tooltalk +Support for building with Tooltalk. + +@item xemacs-base +Fundamental XEmacs support. Install this unless you wish a totally +naked XEmacs. + +@item xemacs-devel +XEmacs Lisp developer support. This package contains utilities for +supporting Lisp development. It is a single-file package so it may be +tailored. +@end table + +@subsection Communications Packages (comm) + +These packages provide support for various communications, primarily +email and usenet. + +@table @file +@item footnote +Footnoting in mail message editing modes. + +@item gnats +XEmacs bug reports. + +@item gnus +The Gnus Newsreader and Mailreader. + +@item mailcrypt +Support for messaging encryption with PGP. + +@item mh-e +Front end support for MH. + +@item net-utils +Miscellaneous Networking Utilities. This is a single-file package and +files may be deleted at will. + +@item ph +Emacs implementation of the ph client to CCSO/qi directory servers. + +@item rmail +An obsolete Emacs mailer. If you do not already use it don't start. + +@item supercite +An Emacs citation tool. Useful with all Emacs Mailers and Newsreaders. + +@item tm +Emacs MIME support. + +@item vm +An Emacs mailer. + +@item w3 +A Web browser. +@end table + +@subsection Games and Amusements (games) + +@table @file +@item cookie +Spook and Yow (Zippy quotes). + +@item games +Tetris, Sokoban, and Snake. + +@item mine +Minehunt. + +@item misc-games +Other amusements and diversions. +@end table + +@subsection Mule Support (mule) + +@table @file +@item egg-its +Wnn (4.2 and 6) support. SJ3 support. Must be installed prior to +XEmacs build. + +@item leim +Quail. Used for everything other than English and Japanese. + +@item locale +Used for localized menubars (French and Japanese) and localized splash +screens (Japanese). + +@item mule-base +Basic Mule support. Must be installed prior to building with Mule. + +@item skk +Another Japanese Language Input Method. Can be used without a +separate process running as a dictionary server. +@end table + +@subsection Productivity Packages (oa) + +@table @file +@item calendar +Calendar and diary support. + +@item edit-utils +Single file lisp packages for various XEmacs goodies. Load this and +weed out the junk you don't want. + +@item forms +Forms editing support (obsolete, use the builtin Widget instead). + +@item frame-icon +Provide a WM icon based on major mode. + +@item hm--html-menus +HTML editing. + +@item ispell +Spell-checking with ispell. + +@item pc +PC style interface emulation. + +@item psgml +Validated HTML/SGML editing. + +@item sgml +SGML/Linuxdoc-SGML editing. + +@item slider +User interface tool. + +@item speedbar +??? Document me. + +@item strokes +Mouse enhancement utility. + +@item text-modes +Various single file lisp packages for editing text files. + +@item time +Display time & date on the modeline. +@end table + +@subsection Operating System Utilities (os) + +@table @file +@item eterm +Terminal emulator. + +@item igrep +Enhanced front-end for Grep. + +@item ilisp +Front-end for Inferior Lisp. + +@item os-utils +Miscellaneous single-file O/S utilities, for printing, archiving, +compression, remote shells, etc. + +@item view-process +A Unix process browsing tool. +@end table + +@subsection Program Editing Support (prog) + +@table @file +@item ada +Ada language support. + +@item c-support +Basic single-file add-ons for editing C code. + +@item cc-mode +C, C++ and Java language support. + +@item debug +GUD, gdb, dbx debugging support. + +@item ediff +Interface over patch. + +@item emerge +Another interface over patch. + +@item pcl-cvs +CVS frontend. + +@item prog-modes +Miscellaneous single-file lisp files for various programming languages. + +@item scheme +Front-end support for Inferior Scheme. + +@item sh-script +Support for editing shell scripts. + +@item vc +Version Control for Free systems. + +@item vc-cc +Version Control for ClearCase. This package must be installed prior +to building XEmacs [broken as of XEmacs 20.5-beta19]. + +@item vhdl +Support for VHDL. +@end table + +@subsection Word Processing (wp) + +@table @file +@item auctex +Basic TeX/LaTeX support. + +@item crisp +Crisp/Brief emulation. + +@item edt +DEC EDIT/EDT emulation. + +@item texinfo +XEmacs TeXinfo support. + +@item textools +Single-file TeX support. + +@item tpu +DEC EDIT/TPU support. + +@item viper +VI emulation support. +@end table + diff -r a8296e22da4e -r 576fb035e263 man/xemacs/startup.texi --- a/man/xemacs/startup.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/startup.texi Mon Aug 13 11:36:19 2007 +0200 @@ -1,4 +1,4 @@ -@node Startup Paths, Basic, Command Switches, Top +@node Startup Paths, Packages, Command Switches, Top @comment node-name, next, previous, up @section How XEmacs finds Directories and Files diff -r a8296e22da4e -r 576fb035e263 man/xemacs/windows.texi --- a/man/xemacs/windows.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/windows.texi Mon Aug 13 11:36:19 2007 +0200 @@ -6,7 +6,7 @@ Emacs can split the frame into two or many windows, which can display parts of different buffers or different parts of one buffer. If you are running XEmacs under X, that means you can have the X window that contains -the Emacs frame have multiple subwindows. +the Emacs frame have multiple subwindows. @menu * Basic Window:: Introduction to Emacs windows. @@ -30,7 +30,7 @@ displayed by that window is the current buffer. The cursor shows the location of point in that window. Each other window has a location of point as well, but since the terminal has only one cursor, it -cannot show the location of point in the other windows. +cannot show the location of point in the other windows. Commands to move point affect the value of point for the selected Emacs window only. They do not change the value of point in any other Emacs @@ -127,7 +127,7 @@ and bottommost window, it goes back to the one at the upper left corner. A numeric argument, @var{n}, moves several steps in the cyclic order of windows. A negative numeric argument moves around the cycle in the -opposite order. If the optional second argument @var{all-frames} is +opposite order. If the optional second argument @var{which-frames} is non-@code{nil}, the function cycles through all frames. When the minibuffer is active, the minibuffer is the last window in the cycle; you can switch from the minibuffer window to one of the other windows, @@ -146,7 +146,7 @@ The usual scrolling commands (@pxref{Display}) apply to the selected window only. @kbd{M-C-v} (@code{scroll-other-window}) scrolls the window that @kbd{C-x o} would select. Like @kbd{C-v}, it takes positive -and negative arguments. +and negative arguments. @findex compare-windows The command @kbd{M-x compare-windows} compares the text in the current @@ -178,7 +178,7 @@ @findex mail-other-window @table @kbd @item C-x 4 b @var{bufname} @key{RET} -Select buffer @var{bufname} in another window. This runs +Select buffer @var{bufname} in another window. This runs @code{switch-to-buffer-other-window}. @item C-x 4 f @var{filename} @key{RET} Visit file @var{filename} and select its buffer in another window. This @@ -209,10 +209,10 @@ @table @kbd @item C-x 0 -Get rid of the selected window (@code{delete-window}). That is a zero. +Get rid of the selected window (@code{delete-window}). That is a zero. If there is more than one Emacs frame, deleting the sole remaining window on that frame deletes the frame as well. If the current frame -is the only frame, it is not deleted. +is the only frame, it is not deleted. @item C-x 1 Get rid of all windows except the selected one (@code{delete-other-windows}). diff -r a8296e22da4e -r 576fb035e263 man/xemacs/xemacs.texi --- a/man/xemacs/xemacs.texi Mon Aug 13 11:35:05 2007 +0200 +++ b/man/xemacs/xemacs.texi Mon Aug 13 11:36:19 2007 +0200 @@ -129,7 +129,8 @@ * Command Switches:: Hairy startup options. * Startup Paths:: - How XEmacs finds Directories and Files + How XEmacs finds Directories and Files. +* Packages:: How XEmacs organizes its high-level functionality. Fundamental Editing Commands * Basic:: The most basic editing commands. @@ -168,7 +169,6 @@ * Text:: Commands and modes for editing English. * Programs:: Commands and modes for editing programs. * Running:: Compiling, running and debugging programs. -* Packages:: How to add new packages to XEmacs. * Abbrevs:: How to define text abbreviations to reduce the number of characters you must type. * Picture:: Editing pictures made up of characters @@ -234,6 +234,13 @@ * Menu Customization:: Adding and removing menu items and related operations. +Packages + +* Packages:: Introduction to XEmacs Packages. +* Package Terminology:: Understanding different kinds of packages. +* Using Packages:: How to install and use packages. +* Building Packages:: Building packages from sources. + Basic Editing Commands * Blank Lines:: Commands to make or delete blank lines. @@ -503,13 +510,6 @@ * Compiling Libraries:: Compiling a library makes it load and run faster. * Mocklisp:: Converting Mocklisp to Lisp so XEmacs can run it. -Packages - -* Packages:: Introduction to XEmacs Packages. -* Package Terminology:: Understanding different kinds of packages. -* Using Packages:: How to install and use packages. -* Building Packages:: Building packages from sources. - Abbrevs * Defining Abbrevs:: Defining an abbrev, so it will expand when typed. diff -r a8296e22da4e -r 576fb035e263 modules/base64/base64.c --- a/modules/base64/base64.c Mon Aug 13 11:35:05 2007 +0200 +++ b/modules/base64/base64.c Mon Aug 13 11:36:19 2007 +0200 @@ -66,7 +66,7 @@ /* set up the in stream */ if (BUFFERP (object)) { - struct buffer *b = decode_buffer (object, 1); + struct buffer *b = XBUFFER (object); Bufpos begv, endv; /* Figure out where we need to get info from */ get_buffer_range_char (b, start, end, &begv, &endv, GB_ALLOW_NIL); @@ -256,7 +256,7 @@ /* set up the in stream */ if (BUFFERP (object)) { - struct buffer *b = decode_buffer (object, 1); + struct buffer *b = XBUFFER (object); Bufpos begv, endv; /* Figure out where we need to get info from */ get_buffer_range_char (b, start, end, &begv, &endv, GB_ALLOW_NIL); diff -r a8296e22da4e -r 576fb035e263 nt/ChangeLog --- a/nt/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/nt/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,3 +1,27 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-10-27 Martin Buchholz + + * config.h: Oops, _getpt ==> _getpty + +2000-10-11 Martin Buchholz + + * config.h (HAVE_XFREE86): Remove. + (HAVE_XREGISTERIMINSTANTIATECALLBACK): New. + (XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE): New. + +2000-10-10 Martin Buchholz + + * config.h: + Sync with pty/signaling related changes to src/config.h.in + +2000-10-07 Adrian Aichner + + * xemacs.mak (default): Enforce runnig nmake from xemacs.mak's + directory to avoid problems with relative paths. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff -r a8296e22da4e -r 576fb035e263 nt/README --- a/nt/README Mon Aug 13 11:35:05 2007 +0200 +++ b/nt/README Mon Aug 13 11:36:19 2007 +0200 @@ -137,7 +137,7 @@ it somewhere. Copy nt\tiff.mak from the xemacs sources to the contrib\winnt subdirectory of the tiff sources, cd to that directory and build libtiff with 'nmake -f tiff.mak'. Note: tiff.mak has only been - verified to work under WinNT, not Win95 or 98. However, the lastest + verified to work under WinNT, not Win95 or 98. However, the latest distribution of libtiff includes a contrib\win95\makefile.w95; that might work. diff -r a8296e22da4e -r 576fb035e263 nt/config.h --- a/nt/config.h Mon Aug 13 11:35:05 2007 +0200 +++ b/nt/config.h Mon Aug 13 11:36:19 2007 +0200 @@ -92,8 +92,8 @@ #define FUNCPROTO 15 #endif -/* Define this if you're using XFree386. */ -#undef HAVE_XFREE386 +#define HAVE_XREGISTERIMINSTANTIATECALLBACK +#undef XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE #undef THIS_IS_X11R4 #undef THIS_IS_X11R5 @@ -148,7 +148,6 @@ /* Some things figured out by the configure script, grouped as they are in configure.in. */ #undef HAVE_MACH_MACH_H -#undef HAVE_SYS_STROPTS_H #undef HAVE_SYS_TIMEB_H #undef HAVE_UNISTD_H #undef HAVE_UTIME_H @@ -261,6 +260,22 @@ #undef HAVE_TZSET #undef HAVE_UTIMES #undef HAVE_WAITPID +#undef HAVE_VSNPRINTF + +/* PTY support functions */ +#undef HAVE_GETPT /* glibc's easy pty allocation function */ +#undef HAVE__GETPTY /* SGI's easy pty allocation function */ +#undef HAVE_OPENPTY /* BSD's easy pty allocation function */ +#undef HAVE_GRANTPT /* Unix98 */ +#undef HAVE_UNLOCKPT /* Unix98 */ +#undef HAVE_PTSNAME /* Unix98 */ +#undef HAVE_KILLPG /* BSD */ +#undef HAVE_TCGETPGRP /* Posix 1 */ +#undef HAVE_ISASTREAM /* SysV streams */ +#undef HAVE_PTY_H /* Linux, Tru64 openpty */ +#undef HAVE_LIBUTIL_H /* BSD openpty */ +#undef HAVE_STROPTS_H /* SysV streams */ +#undef HAVE_STRTIO_H /* SysV streams TIOCSIGNAL */ #define HAVE_SOCKETS #undef HAVE_SOCKADDR_SUN_LEN diff -r a8296e22da4e -r 576fb035e263 nt/xemacs.mak --- a/nt/xemacs.mak Mon Aug 13 11:35:05 2007 +0200 +++ b/nt/xemacs.mak Mon Aug 13 11:36:19 2007 +0200 @@ -26,7 +26,14 @@ default: all -XEMACS=.. +# APA: Since there seems to be no way to determine the directory where +# xemacs.mak is located (from within nmake) we just insist on the user +# to invoke nmake in the directory where xemacs.mak is. +!if !exist("$(MAKEDIR)\xemacs.mak") +!error Please run nmake from the directory of this makefile (xemacs\nt). +!endif + +XEMACS=$(MAKEDIR)\.. LISP=$(XEMACS)\lisp LIB_SRC=$(XEMACS)\lib-src MODULES=$(XEMACS)\modules diff -r a8296e22da4e -r 576fb035e263 src/ChangeLog --- a/src/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/src/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,7 +1,773 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-11-13 Yoshiki Hayashi + + * fileio.c (Finsert_file_contents_internal): UNGCPRO before return. + Add comments about discarded return value. + +2000-11-09 Yoshiki Hayashi + + * callint.c: + * event-stream.c: Fix comments. Remove some #if 0'ed part. + +2000-10-27 Andy Piper + + * gutter.c (Fset_default_gutter_position): default left and right + gutters to visible. + (calculate_gutter_size): calculate resonable heuristic for left + and right gutter sizes. + (specifier_vars_of_gutter): change left and right gutter sizes to + autodetect. + (calculate_gutter_size_from_display_lines): new function. + (output_gutter): check for resizing on left and right gutters. + (clear_gutter): don't special case top and left gutters. + (specifier_vars_of_gutter): use new signature for + set_specifier_caching. + + * glyphs-x.c (x_redisplay_widget): spelling fix. + * glyphs.c (specifier_vars_of_glyphs): + * menubar.c (specifier_vars_of_menubar): + * redisplay.c (specifier_vars_of_redisplay): + * toolbar.c (specifier_vars_of_toolbar): + * window.c (specifier_vars_of_window): + * scrollbar.c (specifier_vars_of_scrollbar): + (complex_vars_of_scrollbar): use new signature for + set_specifier_caching. + + * specifier.c (set_specifier_caching): include recompute flag. + (recompute_one_cached_specifier_in_window): always recompute if + flag set. + (recompute_one_cached_specifier_in_frame): ditto. + + * specifier.h (struct specifier_caching): add recompute flag. + +2000-10-24 Andy Piper + + * unexcw.c (copy_executable_and_dump_data_section): add new + BSS_PAD_SIZE so that we can re-instate a mini-bss. This keeps gdb + 5.0 happy. + +2000-11-06 Yoshiki Hayashi + + * console-x.h (x_device): New member modifier_release_time. + * event-Xt.c (x_handle_sticky_modifiers): + Bound interval modifier keys are sticky. + * event-stream.c (Vmodifier_keys_sticky_time): New variable. + * events.h: extern it. + +2000-11-06 Yoshiki Hayashi + + * cmdloop.c (Fcommand_loop_1): Just add C-g to event queue. + +2000-11-06 Yoshiki Hayashi + + * event-stream.c (execute_command_event): Preserve current_events + and the like when event is misc-user-event. + Inhibit quit during the call to maybe_echo_keys. + +2000-10-31 Yoshiki Hayashi + + * filelock.c (lock_buffer): Cope with kill-buffer. Don't create a + symlink when buffer is killed. + (inhibit_clash_detection): New variable. + +2000-10-30 Yoshiki Hayashi + + * console.c (Fset_input_method): Trigger redisplay on tty. + +2000-11-07 Martin Buchholz + + * process.c (Fprocess_status): Revert to previous behavior: + (process-status "nosuchprocess") ==> nil + +2000-11-06 Martin Buchholz + + * mule-charset.h (CHARSET_BY_LEADING_BYTE): + Work around another GCC 2.95.2 optimizer bug. + +2000-11-02 Martin Buchholz + + * process.c (Fget_process): Use LIST_LOOP_2. + (kill_buffer_processes): Use LIST_LOOP_2. + + * minibuf.c (Fall_completions): + Delete old non-functional code for FSF fourth argument. + + * frame.c (frame_matches_frame_spec): + Renamed from `frame_matches_frametype'. Update all callers. + (device_matches_device_spec): + Renamed from 'device_matches_console_spec'. Update all callers. + + * doc.c (Fsubstitute_command_keys): + Remove buffer overflow crash. Small code cleanups. + + * casetab.c (check_case_table): Simpler code. + + * window.c (Freplace_buffer_in_windows): + Give this the same WHICH-FRAMES and WHICH-DEVICES parameters + (and similar implementation) as Fdelete_windows_on. + Update all callers. + + * alloc.c (Fmake_list): + * alloc.c (make_vector): + * alloc.c (Fmake_vector): + * alloc.c (make_bit_vector): + * alloc.c (Fmake_bit_vector): + * alloc.c (Fbit_vector): + * alloc.c (Fmake_string): + * alloc.c (Fpurecopy): + * alloc.c (Fmemory_limit): + * buffer.c: + * buffer.c (Fget_buffer): + * buffer.c (Fkill_buffer): + * buffer.c (complex_vars_of_buffer): + * bytecode.c (Fcompiled_function_stack_depth): + * callint.c (Fprefix_numeric_value): + * event-stream.c: + * event-stream.c (Fread_key_sequence): + * casetab.c: + * casetab.c (Fcase_table_p): + * casetab.c (check_case_table): + * casetab.c (Fset_case_table): + * casetab.c (Fset_standard_case_table): + * chartab.c: + * chartab.c (Fchar_table_type): + * chartab.c (Freset_char_table): + * chartab.c (Fget_char_table): + * chartab.c (Fget_range_char_table): + * chartab.c (Fput_char_table): + * chartab.c (Fmap_char_table): + * chartab.c (Fcategory_table_p): + * chartab.c (Fcheck_category_at): + * chartab.c (Fchar_in_category_p): + * chartab.c (Fcategory_table): + * chartab.c (Fcopy_category_table): + * chartab.c (Fset_category_table): + * chartab.c (Fcategory_designator_p): + * chartab.c (Fcategory_table_value_p): + * cmds.c (Fdelete_char): + * cmds.c (Fdelete_backward_char): + * cmds.c (Fself_insert_command): + * cmds.c (Fself_insert_internal): + * console.c (Fvalid_console_type_p): + * console.c (Fcdfw_console): + * console.c (Fconsole_type): + * console.c (Fconsole_name): + * console.c (Fconsole_device_list): + * console.c (Fconsole_on_window_system_p): + * data.c: + * data.c (Feq): + * data.c (Fold_eq): + * data.c (Fsubr_interactive): + * data.c (Fchar_to_int): + * data.c (Fint_to_char): + * data.c (Fsetcar): + * data.c (Fsetcdr): + * data.c (Fnumber_to_string): + * data.c (Fstring_to_number): + * data.c (Frem): + * database.c (mark_database): + * database.c (finalize_database): + * database.c (Fdatabase_live_p): + * database.c (Fdatabasep): + * device-x.c (Fx_get_resource): + * device.c (Fdfw_device): + * dired.c: + * dired.c (Ffile_name_completion): + * dired.c (Ffile_name_all_completions): + * dired.c (Fuser_name_completion): + * dired.c (Fuser_name_completion_1): + * dired.c (Fuser_name_all_completions): + * doc.c (Fdocumentation): + * doc.c (Fdocumentation_property): + * doc.c (Fsubstitute_command_keys): + * editfns.c: + * editfns.c (Fchar_to_string): + * editfns.c (Fstring_to_char): + * editfns.c (Ftemp_directory): + * editfns.c (Finsert_char): + * editfns.c (Fbuffer_substring_no_properties): + * editfns.c (Fnarrow_to_region): + * editfns.c (Fchar_equal): + * editfns.c (Fchar_Equal): + * editfns.c (Ftranspose_regions): + * emacs.c (Fdump_emacs): + * eval.c (Fthrow): + * eval.c (Fcommand_execute): + * eval.c (Fautoload): + * eval.c (Fbacktrace): + * eval.c (Fbacktrace_frame): + * events.c: + * events.c (Fcopy_event): + * events.c (Fcharacter_to_event): + * events.c (Fevent_button): + * events.c (Fevent_process): + * extents.c: + * extents.c (Fnext_extent_change): + * extents.c (Fextent_property): + * faces.c (Ffacep): + * faces.c (Fmake_face): + * file-coding.c: + * file-coding.c (Fencode_shift_jis_char): + * file-coding.c (Fencode_big5_char): + * fileio.c (Ffile_name_directory): + * fileio.c (Ffile_name_nondirectory): + * fileio.c (Ffile_name_as_directory): + * fileio.c (Fdirectory_file_name): + * fileio.c (Ffile_truename): + * fileio.c (Fsubstitute_in_file_name): + * fileio.c (Ffile_modes): + * fileio.c (Fset_file_modes): + * fileio.c (Fset_default_file_modes): + * fileio.c (Fverify_visited_file_modtime): + * floatfns.c (Facos): + * floatfns.c (Fasin): + * floatfns.c (Fatan): + * floatfns.c (Fcos): + * floatfns.c (Fsin): + * floatfns.c (Ftan): + * floatfns.c (Fbessel_j0): + * floatfns.c (Fbessel_j1): + * floatfns.c (Fbessel_jn): + * floatfns.c (Fbessel_y0): + * floatfns.c (Fbessel_y1): + * floatfns.c (Fbessel_yn): + * floatfns.c (Ferf): + * floatfns.c (Ferfc): + * floatfns.c (Flog_gamma): + * floatfns.c (Fexp): + * floatfns.c (Fexpt): + * floatfns.c (Flog): + * floatfns.c (Flog10): + * floatfns.c (Fsqrt): + * floatfns.c (Fcube_root): + * floatfns.c (Facosh): + * floatfns.c (Fasinh): + * floatfns.c (Fatanh): + * floatfns.c (Fcosh): + * floatfns.c (Fsinh): + * floatfns.c (Ftanh): + * floatfns.c (Fabs): + * floatfns.c (Ffloat): + * floatfns.c (Flogb): + * floatfns.c (Fceiling): + * floatfns.c (Ffloor): + * floatfns.c (Fround): + * floatfns.c (Ftruncate): + * floatfns.c (Ffceiling): + * floatfns.c (Fffloor): + * floatfns.c (Ffround): + * floatfns.c (Fftruncate): + * fns.c (Fstring_equal): + * fns.c (Fstring_lessp): + * fns.c (concat2): + * fns.c (concat3): + * fns.c (vconcat2): + * fns.c (vconcat3): + * fns.c (Fsubstring): + * fns.c (Fassoc): + * fns.c (Fold_assoc): + * fns.c (assoc_no_quit): + * fns.c (Fassq): + * fns.c (Fold_assq): + * fns.c (assq_no_quit): + * fns.c (Frassoc): + * fns.c (Fold_rassoc): + * fns.c (Frassq): + * fns.c (Fold_rassq): + * fns.c (rassq_no_quit): + * fns.c (Fremassoc): + * fns.c (remassoc_no_quit): + * fns.c (Fremassq): + * fns.c (remassq_no_quit): + * fns.c (Fremrassoc): + * fns.c (Fremrassq): + * fns.c (remrassq_no_quit): + * fns.c (Fsort): + * fns.c (Fplist_get): + * fns.c (Fplist_put): + * fns.c (Fplist_remprop): + * fns.c (Fplist_member): + * fns.c (Flax_plist_get): + * fns.c (Flax_plist_put): + * fns.c (Flax_plist_remprop): + * fns.c (Flax_plist_member): + * fns.c (Fequal): + * fns.c (Fold_equal): + * fns.c (Frequire): + * fns.c (Fbase64_encode_region): + * fns.c (Fbase64_encode_string): + * fns.c (Fbase64_decode_region): + * frame.c: + * frame.c (frame_matches_frame_spec): + * frame.c (device_matches_device_spec): + * frame.c (next_frame): + * frame.c (previous_frame): + * frame.c (Fnext_frame): + * frame.c (Fprevious_frame): + * frame.c (Fframe_property): + * frame.c (Fset_frame_height): + * frame.c (Fset_frame_size): + * frame.h: + * glyphs.c: + * glyphs.c (if): + * glyphs.c (decode_error_behavior_flag): + * glyphs.c (Fmake_image_instance): + * indent.c (Findent_to): + * intl.c (Fignore_defer_gettext): + * keymap.c (Fkeymapp): + * keymap.c (Flookup_key): + * lread.c: + * lread.c (Fload_internal): + * lread.c (Feval_buffer): + * lread.c (Feval_region): + * macros.c (Fexecute_kbd_macro): + * marker.c (set_marker_internal): + * marker.c (Fset_marker): + * marker.c (set_marker_restricted): + * marker.c (Fcopy_marker): + * marker.c (noseeum_copy_marker): + * menubar.c: + * menubar.c (Fpopup_menu): + * minibuf.c: + * mule-charset.c (Fcharset_name): + * mule-charset.c (Fchar_charset): + * mule-charset.c (Fchar_octet): + * mule-charset.c (Fsplit_char): + * mule-wnnfns.c (Fwnn_open): + * mule-wnnfns.c (Fwnn_dict_comment): + * mule-wnnfns.c (Fwnn_quit_henkan): + * mule-wnnfns.c (Fwnn_word_toroku): + * mule-wnnfns.c (Fwnn_word_sakujo): + * mule-wnnfns.c (Fwnn_word_use): + * mule-wnnfns.c (Fwnn_hindo_set): + * objects.c: + * objects.c (Fmake_color_instance): + * objects.c (Fmake_font_instance): + * print.c (Fwrite_char): + * process.c: + * process.c (mark_process): + * process.c (print_process): + * process.c (get_process_from_usid): + * process.c (Fprocessp): + * process.c (Fprocess_live_p): + * process.c (Fget_process): + * process.c (Fget_buffer_process): + * process.c (get_process): + * process.c (Fprocess_id): + * process.c (Fprocess_name): + * process.c (Fprocess_command): + * process.c (init_process_io_handles): + * process.c (start_process_unwind): + * process.c (Fstart_process_internal): + * process.c (Fopen_multicast_group_internal): + * process.c (Fset_process_window_size): + * process.c (read_process_output): + * process.c (send_process): + * process.c (Fprocess_tty_name): + * process.c (Fset_process_buffer): + * process.c (Fprocess_buffer): + * process.c (Fprocess_mark): + * process.c (set_process_filter): + * process.c (Fset_process_filter): + * process.c (Fprocess_filter): + * process.c (Fprocess_send_region): + * process.c (Fprocess_send_string): + * process.c (exec_sentinel): + * process.c (Fset_process_sentinel): + * process.c (Fprocess_sentinel): + * process.c (status_notify): + * process.c (Fprocess_status): + * process.c (Fprocess_exit_status): + * process.c (process_send_signal): + * process.c (Fprocess_send_eof): + * process.c (deactivate_process): + * process.c (remove_process): + * process.c (Fdelete_process): + * process.c (kill_buffer_processes): + * process.c (Fprocess_kill_without_query): + * process.c (Fprocess_kill_without_query_p): + * rangetab.c: + * rangetab.c (Fget_range_table): + * rangetab.c (Fput_range_table): + * rangetab.c (Fremove_range_table): + * rangetab.c (Fclear_range_table): + * search.c: + * search.c (Fskip_chars_forward): + * search.c (Fskip_chars_backward): + * search.c (Fskip_syntax_forward): + * search.c (Fskip_syntax_backward): + * search.c (search_command): + * search.c (Freplace_match): + * search.c (Fregexp_quote): + * select.c (Fown_selection_internal): + * select.c (Fselection_owner_p): + * select.c (Fselection_exists_p): + * select.c (Fget_selection_internal): + * specifier.c: + * symbols.c: + * symbols.c (Fintern): + * symbols.c (Fintern_soft): + * symbols.c (Funintern): + * symbols.c (Fapropos_internal): + * symbols.c (Fset_default): + * syntax.c: + * syntax.c (Fsyntax_table_p): + * syntax.c (Fcopy_syntax_table): + * syntax.c (Fset_syntax_table): + * syntax.c (Fchar_syntax): + * syntax.c (syntax_match): + * syntax.c (Fmatching_paren): + * syntax.c (Fforward_word): + * syntax.c (scan_lists): + * syntax.c (Fscan_lists): + * syntax.c (Fscan_sexps): + * syntax.c (Fparse_partial_sexp): + * toolbar.c (Fcheck_toolbar_button_syntax): + * tooltalk.doc: + * window.c: + * window.c (Fwindowp): + * window.c (Fwindow_live_p): + * window.c (Fwindow_point): + * window.c (Fdelete_window): + * window.c (Fnext_window): + * window.c (Fprevious_window): + * window.c (Fother_window): + * window.c (window_loop): + * window.c (Fget_lru_window): + * window.c (Fsplit_window): + * window.c (Fenlarge_window): + * window.c (Fenlarge_window_pixels): + * window.c (Fshrink_window): + * window.c (Fshrink_window_pixels): + * window.c (change_window_height): + * window.c (Fwindow_configuration_p): + * window.c (Fcurrent_window_configuration): + * window.h: + * casefiddle.c (casify_object): + * casefiddle.c (Fupcase): + * casefiddle.c (Fdowncase): + * casefiddle.c (Fcapitalize): + * casefiddle.c (Fupcase_initials): + * casefiddle.c (casify_region_internal): + * casefiddle.c (casify_region): + * casefiddle.c (Fupcase_region): + * casefiddle.c (Fdowncase_region): + * casefiddle.c (Fcapitalize_region): + * casefiddle.c (Fupcase_initials_region): + * casefiddle.c (Fupcase_word): + * casefiddle.c (Fdowncase_word): + * casefiddle.c (Fcapitalize_word): + Docstring arglist/Texinfo fixes. See man/ChangeLog for details. + Replace 0 with '\0' when working with bytes. + Replace initial "(" with "\(" in docstrings. + +2000-11-01 Martin Buchholz + + * config.h.in: Handle alloca with Compaq C on Alpha Linux. + + * m/alpha.h: Let configure handle SYSTEM_MALLOC on Linux. + +2000-10-31 Martin Buchholz + + * eldap.c (print_ldap): 64-bit cleaner. Fixes warning. + +2000-10-30 Yoshiki Hayashi + + * doprnt.c (emacs_do_prnt_1): Format (format "%01.2d" 10) + correctly. + +2000-10-30 Yoshiki Hayashi + + * fileio.c (Vauto_save_list_file_prefix): Moved from startup.el. + (inhibit_auto_save_session): New variable. + (vars_of_fileio): Declare and initialize them. + * fileio.c (Fdo_auto_save): Don't create session file if + Vinhibit_auto_save_session or Vauto_save_list_file_prefix is non-nil. + +2000-10-31 Martin Buchholz + + * sgiplay.c (play_internal): C++ compilability. + * alloc.c (SWEEP_FIXED_TYPE_BLOCK): Remove unused var `SFTB_prev'. + * callproc.c (Fold_call_process_internal): + Remove unused vars `env', `first'. + * scrollbar.c (update_scrollbar_instance): + #### unused var `current_window'. + * redisplay-tty.c: Put currently unused vars insert_mode_on, + etc. within #ifdef NOT_YET. + * emacs.c: #### unused vars `initial_argc', `initial_argv'. + * dialog-x.c (dbox_descriptor_to_widget_value): ### unused var `title'. + * specifier.c (specifier_instance): + #### unused var `tag'. + Use WINDOW_BUFFER, FRAME_DEVICE instead of their expansion. + +2000-10-27 Martin Buchholz + + * fns.c (Fbutlast): + * fns.c (list_sort): + * fns.c (Ffillarray): + * fns.c (bytecode_nconc2): + * fns.c (Fnconc): + * fns.c (mapcar1): + * fns.c (Fmapconcat): + Be pedantically 64-bit correct. For the time when someone will + want to have a list with length > 2**32. + + * lisp.h (PRIVATE_EXTERNAL_LIST_LOOP_6): + Work around MIPSpro compiler bug. + + * process-unix.c (unix_kill_child_process): Add snarky comment. + * process-unix.c (try_to_initialize_subtty): Oops, `=' ==> `==' + + * config.h.in: Oops, _getpt ==> _getpty + +2000-10-26 Martin Buchholz + + * config.h.in: + * regex.c: + Use void*, not char*, as return type of alloca(). + + * alloc.c (free_marker): Side effect inside assert expression! + +2000-10-16 MIYASHITA Hisashi + + * mule-charset.c (Fset_charset_ccl_program): To check + if the given ccl program is valid, use setup_ccl_program() + instead of CHECK_VECTOR(). + (Fmake_charset): Likewise. + +2000-10-20 Golubev I. N. + + * faces.c (get_extent_fragment_face_cache_index): + Fix cachel.merged_faces memory leak. + +2000-10-14 MIYASHITA Hisashi + + * mule-ccl.c (ccl_driver): + Reset MSB of octets obtained by DECODE_SJIS + because of the incompatibility with Emacs. + (ccl_driver): + Set MSB of octets before passing them to + ENCODE_SJIS because of the incompatibility + with Emacs. + +2000-10-18 Daiki Ueno + + * lrecord.h (DECLARE_TYPECHECK_LRECORD): Abolish. + (DECLARE_LRECORD): Undo the last change. + (DECLARE_EXTERNAL_LRECORD): Expand typechecking stuff. + +2000-10-17 Daiki Ueno + + * lrecord.h (INIT_EXTERNAL_LRECORD_IMPLEMENTATION): Connect + the implementation to lrecord_implementations_table. + +2000-10-14 Daiki Ueno + + * lrecord.h (MAKE_EXTERNAL_LRECORD_IMPLEMENTATION): Don't set the + initial value of `lrecord_type_##c_name' and + `lrecord_##c_name.lrecord_type_index'; discard "const" qualifier. + (INIT_EXTERNAL_LRECORD_IMPLEMENTATION): New macro. + [ERROR_CHECK_TYPECHECK] (DECLARE_TYPECHECK_LRECORD): New macro. + [ERROR_CHECK_TYPECHECK] (DECLARE_LRECORD): Use it. + [ERROR_CHECK_TYPECHECK] (DECLARE_EXTERNAL_LRECORD): Use it. + +2000-10-17 Martin Buchholz + + * miscplay.c (sndcnv8S_2mono): + (sndcnv2monounsigned): + (sndcnvULaw_2linear): + (sndcnv16swap): + Remove implementation-defined behavior. + +2000-10-12 Martin Buchholz + + * input-method-xlib.c: Warning suppression. + +2000-10-05 MIYASHITA Hisashi + + * mule-ccl.c: Sync up with Emacs 21.0.90. + (ccl_driver): Disabled. + Do nothing. + (ccl_driver): + Likewise. + (ccl_driver[WriteMultibyteChar2]): Bug fix. + Use MAX_LEADING_BYTE_OFFICIAL_2 instead of + MIN_LEADING_BYTE_OFFICIAL_2 to check whether the + leading char belongs to official 2-dimensional charset. + (CCL_WRITE_CHAR): When CCL_MODE_ENCODING, + write the given character as is. Otherwise, + if it is a multibyte char, convert it by + non_ascii_set_charptr_emchar, then write it. + (CCL_WRITE_STRING): Likewise. + (ccl_get_compiled_code): New function. + (setup_ccl_program): When ccl_prog is invalid, + return -1. + (Fregister_code_conversion_map): New function. + (syms_of_mule_ccl): defsubr Fregister_code_conversion_map. + + * mule-ccl.h: Sync up with Emacs 21.0.90. + (Fregister_ccl_program): export it. + + * redisplay-msw.c (separate_textual_runs): + If ccl program is not valid, don't do ccl conversion. + + * redisplay-x.c (separate_textual_runs): Ditto. + + * file-coding.c (Fmake_coding_system): + When type is ccl and value is vector, register it + with a proper symbol. And checks whether the + given ccl program is valid. + (mule_decode): When calling ccl_driver, if src indicates + NULL pointer, set an empty string instead. + (mule_encode): Likewise. + +2000-10-11 Martin Buchholz + + The following large batch of changes gets us back to a state of + C++ compilability. Extbyte is now a char, which means that + Extbyte * and Bufbyte * cannot be freely interchanged - a win! + + * tooltalk.c (Fset_tooltalk_message_attribute): Type correctness. + + * sound.c (Fplay_sound): Type correctness. + + * select-x.c (hack_motif_clipboard_selection): Type correctness. + (x_get_window_property): Type correctness. + (receive_incremental_selection): unsigned char ==> Extbyte + (selection_data_to_lisp_data): unsigned char ==> Extbyte + (Fx_get_cutbuffer_internal): unsigned char ==> Extbyte + (Fx_store_cutbuffer_internal): Type correctness. + + * process-unix.c (try_to_initialize_subtty): Type correctness. + + * objects-x.c (x_print_color_instance): Type correctness. + (x_print_font_instance): Type correctness. + (x_list_fonts): SExtbyte ==> Extbyte. + (valid_x_font_name_p): SExtbyte ==> Extbyte. + (x_find_charset_font): SExtbyte ==> Extbyte. + Use TO_INTERNAL_FORMAT. build_string ==> make_string. + (truename_via_XListFonts): SExtbyte ==> Extbyte. + (x_font_instance_properties): Use TO_INTERNAL_FORMAT. + Use bufbyte_strcmp. + + * mule-charset.h (LEADING_BYTE_PREFIX_P): unsigned char ==> Bufbyte + (PRIVATE_LEADING_BYTE_PREFIX): Add paranoia cast. + (BYTE_ASCII_P): Use bit ops for char-signedness safety. + (BYTE_C0_P): Use bit ops for char-signedness safety. + (BYTE_C1_P): Use bit ops for char-signedness safety. + (CHARSET_BY_LEADING_BYTE): + (CHARSET_BY_ATTRIBUTES): + Always use inline function. + Use type_checking_assert. + Hide chlook. + + * mule-charset.c (non_ascii_charptr_copy_char): + Modify to work with both ASCII and non-ASCII characters. + Improve docs and variable names. + Replace over-clever fall-through switch with a simple loop. + (Lstream_get_emchar_1): + Replace over-clever fall-through switch with a simple loop. + + * menubar-x.c (menu_item_descriptor_to_widget_value_1): + Warning suppression. + + * lstream.h (Lstream_get_emchar): BYTE_ASCII_P cannot be used on + the return value of Lstream_getc, which could be EOF as well. + + * lstream.c (Lstream_raw_read): Now returns ssize_t, not int. + + * lisp.h: Make Extbyte a char, not unsigned char, so that external + APIs can be used on Extbytes without casts. Risky! + (SExtbyte): Remove. + (UExtbyte): Remove. + + * input-method-xlib.c (XIM_init_device): + Use Xlib.h instead of IntrinsicP.h. + Use HAVE_XREGISTERIMINSTANTIATECALLBACK instead of THIS_IS_X11R6, + which will break in X11R7. + Use XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE, + to call XRegisterIMInstantiateCallback with correct types. + + * gui-x.c (button_item_to_widget_value): Type correctness. + + * glyphs.c (bitmap_to_lisp_data): Type correctness. + + * glyphs-x.c (pixmap_from_xbm_inline): Type correctness. + (xbm_instantiate_1): Type correctness. + (BUILD_GLYPH_INST): Type correctness. + + * fileio.c (Fsubstitute_in_file_name): Type correctness. + + * file-coding.c: + (decode_coding_sjis): + (decode_coding_big5): + (decode_coding_ucs4): + (decode_coding_utf8): + (decode_coding_iso2022): + (decode_coding_no_conversion): + Make all decoding functions take an Extbyte * arg. + (encode_coding_sjis): + (encode_coding_big5): + (encode_coding_ucs4): + (encode_coding_utf8): + (encode_coding_iso2022): + (encode_coding_no_conversion): + Make all encoding functions take a Bufbyte * arg. + Use size_t instead of unsigned int for memory sizes. + Only cast to unsigned char whenever dereferencing Extbyte *. + + * doc.c (unparesseuxify_doc_string): Type correctness. + + * console-x.c (split_up_display_spec): + Rewrite without using details of internal string representation. + (x_semi_canonicalize_device_connection): Type correctness. + + * config.h.in: + (HAVE_XREGISTERIMINSTANTIATECALLBACK): New. + (XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE): New. + (HAVE_XFREE386): Removed. + + * buffer.h (DEC_CHARPTR): `const' correctness. + (bufbyte_strcmp): New. + (bufbyte_memcmp): New. + + * buffer.c (dfc_convert_to_internal_format): Extbyte ==> Bufbyte + + * buffer.h (XCHAR_OR_CHAR_INT): + Always use inline function. + Remove redundant type checking assert() - XINT will abort quite nicely. + +2000-10-03 Yoshiki Hayashi + + * search.c (Freplace_match): Set newtext to an empty string. + +2000-10-10 Martin Buchholz + + * s/decosf1-3.h: Remove #include of stropts.h + * s/ptx.h: Remove #include of stropts.h + * s/usg5-4.h: Remove #include of stropts.h + * sysproc.h: + * config.h.in: + Use stropts.h, not sys/stropts.h. + Use strtio.h, not sys/strtio.h. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. +2000-09-21 Andy Piper + + * glyphs-x.c (x_redisplay_widget): make sure non-structural + changes still involve copying the widget tree. + (update_widget_face): make sure a change is register in the widget + tree. Call update_tab_widget_face appropriately. + (update_tab_widget_face): ditto. + (x_tab_control_redisplay): make sure non-structural changes still + involve copying the widget tree. + 2000-08-31 Daiki Ueno * lread.c (locate_file): Check the path element is non-nil. @@ -6190,7 +6956,7 @@ * glyphs.h: Prototyped it. * redisplay.c (add_glyph_rune): Call it. - (redisplay_window): Reset glyphs cachels when frame faces has + (redisplay_window): Reset glyphs cachels when frame faces have changed, thus forcing recomputation of built-in border glyphs. 2000-01-30 Martin Buchholz diff -r a8296e22da4e -r 576fb035e263 src/alloc.c --- a/src/alloc.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/alloc.c Mon Aug 13 11:36:19 2007 +0200 @@ -1006,9 +1006,9 @@ } DEFUN ("make-list", Fmake_list, 2, 2, 0, /* -Return a new list of length LENGTH, with each element being INIT. +Return a new list of length LENGTH, with each element being OBJECT. */ - (length, init)) + (length, object)) { CHECK_NATNUM (length); @@ -1017,7 +1017,7 @@ size_t size = XINT (length); while (size--) - val = Fcons (init, val); + val = Fcons (object, val); return val; } } @@ -1128,13 +1128,13 @@ } Lisp_Object -make_vector (size_t length, Lisp_Object init) +make_vector (size_t length, Lisp_Object object) { Lisp_Vector *vecp = make_vector_internal (length); Lisp_Object *p = vector_data (vecp); while (length--) - *p++ = init; + *p++ = object; { Lisp_Object vector; @@ -1144,13 +1144,13 @@ } DEFUN ("make-vector", Fmake_vector, 2, 2, 0, /* -Return a new vector of length LENGTH, with each element being INIT. +Return a new vector of length LENGTH, with each element being OBJECT. See also the function `vector'. */ - (length, init)) + (length, object)) { CONCHECK_NATNUM (length); - return make_vector (XINT (length), init); + return make_vector (XINT (length), object); } DEFUN ("vector", Fvector, 0, MANY, 0, /* @@ -1299,14 +1299,14 @@ } Lisp_Object -make_bit_vector (size_t length, Lisp_Object init) +make_bit_vector (size_t length, Lisp_Object bit) { Lisp_Bit_Vector *p = make_bit_vector_internal (length); size_t num_longs = BIT_VECTOR_LONG_STORAGE (length); - CHECK_BIT (init); - - if (ZEROP (init)) + CHECK_BIT (bit); + + if (ZEROP (bit)) memset (p->bits, 0, num_longs * sizeof (long)); else { @@ -1342,19 +1342,20 @@ } DEFUN ("make-bit-vector", Fmake_bit_vector, 2, 2, 0, /* -Return a new bit vector of length LENGTH. with each bit being INIT. -Each element is set to INIT. See also the function `bit-vector'. +Return a new bit vector of length LENGTH. with each bit set to BIT. +BIT must be one of the integers 0 or 1. See also the function `bit-vector'. */ - (length, init)) + (length, bit)) { CONCHECK_NATNUM (length); - return make_bit_vector (XINT (length), init); + return make_bit_vector (XINT (length), bit); } DEFUN ("bit-vector", Fbit_vector, 0, MANY, 0, /* Return a newly created bit vector with specified arguments as elements. Any number of arguments, even zero arguments, are allowed. +Each argument must be one of the integers 0 or 1. */ (int nargs, Lisp_Object *args)) { @@ -2035,21 +2036,21 @@ #endif /* MULE */ DEFUN ("make-string", Fmake_string, 2, 2, 0, /* -Return a new string of length LENGTH, with each character being INIT. -LENGTH must be an integer and INIT must be a character. +Return a new string consisting of LENGTH copies of CHARACTER. +LENGTH must be a non-negative integer. */ - (length, init)) + (length, character)) { CHECK_NATNUM (length); - CHECK_CHAR_COERCE_INT (init); + CHECK_CHAR_COERCE_INT (character); { Bufbyte init_str[MAX_EMCHAR_LEN]; - int len = set_charptr_emchar (init_str, XCHAR (init)); + int len = set_charptr_emchar (init_str, XCHAR (character)); Lisp_Object val = make_uninit_string (len * XINT (length)); if (len == 1) /* Optimize the single-byte case */ - memset (XSTRING_DATA (val), XCHAR (init), XSTRING_LENGTH (val)); + memset (XSTRING_DATA (val), XCHAR (character), XSTRING_LENGTH (val)); else { size_t i; @@ -2324,9 +2325,9 @@ Recursively copies contents of vectors and cons cells. Does not copy symbols. */ - (obj)) + (object)) { - return obj; + return object; } @@ -2679,12 +2680,10 @@ #define SWEEP_FIXED_TYPE_BLOCK(typename, obj_type) \ do { \ struct typename##_block *SFTB_current; \ - struct typename##_block **SFTB_prev; \ int SFTB_limit; \ int num_free = 0, num_used = 0; \ \ - for (SFTB_prev = ¤t_##typename##_block, \ - SFTB_current = current_##typename##_block, \ + for (SFTB_current = current_##typename##_block, \ SFTB_limit = current_##typename##_block_index; \ SFTB_current; \ ) \ @@ -2714,7 +2713,6 @@ UNMARK_##typename (SFTB_victim); \ } \ } \ - SFTB_prev = &(SFTB_current->prev); \ SFTB_current = SFTB_current->prev; \ SFTB_limit = countof (current_##typename##_block->block); \ } \ @@ -2938,7 +2936,7 @@ free_marker (Lisp_Marker *ptr) { /* Perhaps this will catch freeing an already-freed marker. */ - gc_checking_assert (ptr->lheader.type = lrecord_type_marker); + gc_checking_assert (ptr->lheader.type == lrecord_type_marker); #ifndef ALLOC_NO_POOLS FREE_FIXED_TYPE_WHEN_NOT_IN_GC (marker, Lisp_Marker, ptr); @@ -3707,7 +3705,7 @@ } #if 0 -DEFUN ("memory-limit", Fmemory_limit, 0, 0, "", /* +DEFUN ("memory-limit", Fmemory_limit, 0, 0, 0, /* Return the address of the last byte Emacs has allocated, divided by 1024. This may be helpful in debugging Emacs's memory usage. The value is divided by 1024 to make sure it will fit in a lisp integer. diff -r a8296e22da4e -r 576fb035e263 src/buffer.c --- a/src/buffer.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/buffer.c Mon Aug 13 11:36:19 2007 +0200 @@ -402,11 +402,10 @@ #endif /* FSFmacs */ DEFUN ("get-buffer", Fget_buffer, 1, 1, 0, /* -Return the buffer named NAME (a string). -If there is no live buffer named NAME, return nil. -NAME may also be a buffer; if so, the value is that buffer. +Return the buffer named BUFFER-NAME (a string), or nil if there is none. +BUFFER-NAME may also be a buffer; if so, the value is that buffer. */ - (name)) + (buffer_name)) { #ifdef I18N3 /* #### Doc string should indicate that the buffer name will get @@ -415,9 +414,9 @@ /* #### This might return a dead buffer. This is gross. This is called FSF compatibility. */ - if (BUFFERP (name)) - return name; - return get_buffer (name, 0); + if (BUFFERP (buffer_name)) + return buffer_name; + return get_buffer (buffer_name, 0); /* FSFmacs 19.29 calls assoc_ignore_text_properties() here. Bleagh!! */ } @@ -633,10 +632,11 @@ DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, 2, 2, "bMake indirect buffer (to buffer): \nBName of indirect buffer: ", /* -Create and return an indirect buffer for buffer BASE, named NAME. -BASE should be an existing buffer (or buffer name). +Create and return an indirect buffer for buffer BASE-BUFFER, named NAME. +BASE-BUFFER should be an existing buffer (or buffer name). NAME should be a string which is not the name of an existing buffer. -If BASE is an indirect buffer itself, the base buffer for that buffer + +If BASE-BUFFER is itself an indirect buffer, the base buffer for that buffer is made the base buffer for the newly created buffer. (Thus, there will never be indirect buffers whose base buffers are themselves indirect.) */ @@ -924,7 +924,7 @@ display). We still need to make sure redisplay realizes that the contents have potentially altered and it needs to do some work. */ - buf = decode_buffer(buffer, 0); + buf = decode_buffer (buffer, 0); BUF_MODIFF (buf)++; BUF_SAVE_MODIFF (buf) = NILP (flag) ? BUF_MODIFF (buf) : 0; MARK_MODELINE_CHANGED; @@ -1078,7 +1078,7 @@ } DEFUN ("buffer-disable-undo", Fbuffer_disable_undo, 0, 1, "", /* -Make BUFFER stop keeping undo information. +Stop keeping undo information for BUFFER. Any undo records it already has are discarded. No argument or nil as argument means do this for the current buffer. */ @@ -1091,7 +1091,7 @@ } DEFUN ("buffer-enable-undo", Fbuffer_enable_undo, 0, 1, "", /* -Start keeping undo information for buffer BUFFER. +Start keeping undo information for BUFFER. No argument or nil as argument means do this for the current buffer. */ (buffer)) @@ -1280,7 +1280,7 @@ /* #### This is a problem if this buffer is in a dedicated window. Need to undedicate any windows of this buffer first (and delete them?) */ - Freplace_buffer_in_windows (buf); + Freplace_buffer_in_windows (buf, Qnil, Qnil); font_lock_buffer_was_killed (b); @@ -1524,7 +1524,7 @@ DEFUN ("barf-if-buffer-read-only", Fbarf_if_buffer_read_only, 0, 3, 0, /* -Signal a `buffer-read-only' error if the buffer is read-only. +Signal a `buffer-read-only' error if BUFFER is read-only. Optional argument BUFFER defaults to the current buffer. If optional argument START is non-nil, all extents in the buffer @@ -1968,7 +1968,7 @@ if (sink_type != DFC_TYPE_LISP_LSTREAM) { sink->data.len = Dynarr_length (conversion_out_dynarr); - Dynarr_add (conversion_out_dynarr, 0); + Dynarr_add (conversion_out_dynarr, '\0'); /* NUL-terminate! */ sink->data.ptr = Dynarr_atp (conversion_out_dynarr, 0); } } @@ -2017,7 +2017,7 @@ for (; ptr < end; ptr++) { - Extbyte c = *ptr; + Bufbyte c = *ptr; if (BYTE_ASCII_P (c)) Dynarr_add (conversion_in_dynarr, c); @@ -2106,7 +2106,7 @@ if (sink_type != DFC_TYPE_LISP_LSTREAM) { sink->data.len = Dynarr_length (conversion_in_dynarr); - Dynarr_add (conversion_in_dynarr, 0); /* remember to zero-terminate! */ + Dynarr_add (conversion_in_dynarr, '\0'); /* NUL-terminate! */ sink->data.ptr = Dynarr_atp (conversion_in_dynarr, 0); } } @@ -2216,16 +2216,16 @@ Vchange_major_mode_hook = Qnil; DEFVAR_BOOL ("find-file-compare-truenames", &find_file_compare_truenames /* -If this is true, then the find-file command will check the truenames +If this is true, then the `find-file' command will check the truenames of all visited files when deciding whether a given file is already in -a buffer, instead of just the buffer-file-name. This means that if you -attempt to visit another file which is a symbolic-link to a file which is -already in a buffer, the existing buffer will be found instead of a newly- -created one. This works if any component of the pathname (including a non- -terminal component) is a symbolic link as well, but doesn't work with hard -links (nothing does). - -See also the variable find-file-use-truenames. +a buffer, instead of just `buffer-file-name'. This means that if you +attempt to visit another file which is a symbolic link to a file which +is already in a buffer, the existing buffer will be found instead of a +newly-created one. This works if any component of the pathname +(including a non-terminal component) is a symbolic link as well, but +doesn't work with hard links (nothing does). + +See also the variable `find-file-use-truenames'. */ ); find_file_compare_truenames = 0; @@ -2236,7 +2236,7 @@ That is, the buffer-file-name and buffer-file-truename will be equal. This doesn't work with hard links. -See also the variable find-file-compare-truenames. +See also the variable `find-file-compare-truenames'. */ ); find_file_use_truenames = 0; @@ -2920,8 +2920,8 @@ List of undo entries in current buffer. Recent changes come first; older changes follow newer. -An entry (BEG . END) represents an insertion which begins at -position BEG and ends at position END. +An entry (START . END) represents an insertion which begins at +position START and ends at position END. An entry (TEXT . POSITION) represents the deletion of the string TEXT from (abs POSITION). If POSITION is positive, point was at the front @@ -3005,8 +3005,8 @@ if it has (or is covered by an extent with) a non-nil `invisible' property. If the value is a list, a text character is invisible if its `invisible' property is an element in that list. -If an element is a cons cell of the form (PROP . ELLIPSIS), -then characters with property value PROP are invisible, +If an element is a cons cell of the form (PROPERTY . ELLIPSIS), +then characters with property value PROPERTY are invisible, and they have an ellipsis as well if ELLIPSIS is non-nil. Note that the actual characters used for the ellipsis are controllable using `invisible-text-glyph', and default to "...". diff -r a8296e22da4e -r 576fb035e263 src/buffer.h --- a/src/buffer.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/buffer.h Mon Aug 13 11:36:19 2007 +0200 @@ -408,7 +408,7 @@ #define REAL_INC_CHARPTR(ptr) \ ((void) ((ptr) += REP_BYTES_BY_FIRST_BYTE (* (unsigned char *) (ptr)))) -#define REAL_INC_CHARBYTIND(ptr,pos) \ +#define REAL_INC_CHARBYTIND(ptr, pos) \ (pos += REP_BYTES_BY_FIRST_BYTE (* (unsigned char *) (ptr))) #define REAL_DEC_CHARPTR(ptr) do { \ @@ -421,9 +421,9 @@ REAL_INC_CHARPTR (ptr); \ } while (0) -#define INC_CHARBYTIND(ptr,pos) do { \ - ASSERT_VALID_CHARPTR (ptr); \ - REAL_INC_CHARBYTIND (ptr,pos); \ +#define INC_CHARBYTIND(ptr, pos) do { \ + ASSERT_VALID_CHARPTR (ptr); \ + REAL_INC_CHARBYTIND (ptr, pos); \ } while (0) #define DEC_CHARPTR(ptr) do { \ @@ -432,11 +432,11 @@ REAL_DEC_CHARPTR (dc_ptr2); \ assert (dc_ptr1 - dc_ptr2 == \ REP_BYTES_BY_FIRST_BYTE (*dc_ptr2)); \ - (ptr) = dc_ptr2; \ + (ptr) = (Bufbyte *) dc_ptr2; \ } while (0) #else /* ! ERROR_CHECK_BUFPOS */ -#define INC_CHARBYTIND(ptr,pos) REAL_INC_CHARBYTIND (ptr,pos) +#define INC_CHARBYTIND(ptr, pos) REAL_INC_CHARBYTIND (ptr, pos) #define INC_CHARPTR(ptr) REAL_INC_CHARPTR (ptr) #define DEC_CHARPTR(ptr) REAL_DEC_CHARPTR (ptr) #endif /* ! ERROR_CHECK_BUFPOS */ @@ -490,7 +490,7 @@ Emchar non_ascii_charptr_emchar (const Bufbyte *ptr); Bytecount non_ascii_set_charptr_emchar (Bufbyte *ptr, Emchar c); -Bytecount non_ascii_charptr_copy_char (const Bufbyte *ptr, Bufbyte *ptr2); +Bytecount non_ascii_charptr_copy_char (const Bufbyte *src, Bufbyte *dst); INLINE_HEADER Emchar charptr_emchar (const Bufbyte *ptr); INLINE_HEADER Emchar @@ -510,14 +510,16 @@ non_ascii_set_charptr_emchar (ptr, x); } +/* Copy the character pointed to by SRC into DST. + Return the number of bytes copied. */ INLINE_HEADER Bytecount -charptr_copy_char (const Bufbyte *ptr, Bufbyte *ptr2); +charptr_copy_char (const Bufbyte *src, Bufbyte *dst); INLINE_HEADER Bytecount -charptr_copy_char (const Bufbyte *ptr, Bufbyte *ptr2) +charptr_copy_char (const Bufbyte *src, Bufbyte *dst) { - return BYTE_ASCII_P (*ptr) ? - simple_charptr_copy_char (ptr, ptr2) : - non_ascii_charptr_copy_char (ptr, ptr2); + return BYTE_ASCII_P (*src) ? + simple_charptr_copy_char (src, dst) : + non_ascii_charptr_copy_char (src, dst); } #else /* not MULE */ @@ -557,22 +559,13 @@ #define CHAR_OR_CHAR_INTP(x) (CHARP (x) || CHAR_INTP (x)) -#ifdef ERROR_CHECK_TYPECHECK - INLINE_HEADER Emchar XCHAR_OR_CHAR_INT (Lisp_Object obj); INLINE_HEADER Emchar XCHAR_OR_CHAR_INT (Lisp_Object obj) { - assert (CHAR_OR_CHAR_INTP (obj)); return CHARP (obj) ? XCHAR (obj) : XINT (obj); } -#else - -#define XCHAR_OR_CHAR_INT(obj) (CHARP (obj) ? XCHAR (obj) : XINT (obj)) - -#endif - #define CHECK_CHAR_COERCE_INT(x) do { \ if (CHARP (x)) \ ; \ @@ -1063,8 +1056,8 @@ DATA, (ptr, len), // input data is a fixed buffer of size len ALLOCA, (ptr, len), // output data is in a alloca()ed buffer of size len MALLOC, (ptr, len), // output data is in a malloc()ed buffer of size len - C_STRING_ALLOCA, ptr, // equivalent to ALLOCA (ptr, len_ignored) on output. - C_STRING_MALLOC, ptr, // equivalent to MALLOC (ptr, len_ignored) on output. + C_STRING_ALLOCA, ptr, // equivalent to ALLOCA (ptr, len_ignored) on output + C_STRING_MALLOC, ptr, // equivalent to MALLOC (ptr, len_ignored) on output C_STRING, ptr, // equivalent to DATA, (ptr, strlen (ptr) + 1) on input LISP_STRING, string, // input or output is a Lisp_Object of type string LISP_BUFFER, buffer, // output is written to (point) in lisp buffer @@ -1787,4 +1780,60 @@ #define DOWNCASE(buf, ch) DOWNCASE_TABLE_OF (buf, ch) +/************************************************************************/ +/* Lisp string representation convenience functions */ +/************************************************************************/ +/* Because the representation of internally formatted data is subject to change, + It's bad style to do something like strcmp (XSTRING_DATA (s), "foo") + Instead, use the portable: bufbyte_strcmp (XSTRING_DATA (s), "foo") + or bufbyte_memcmp (XSTRING_DATA (s), "foo", 3) */ + +/* Like strcmp, except first arg points at internally formatted data, + while the second points at a string of only ASCII chars. */ +INLINE_HEADER int +bufbyte_strcmp (const Bufbyte *bp, const char *ascii_string); +INLINE_HEADER int +bufbyte_strcmp (const Bufbyte *bp, const char *ascii_string) +{ +#ifdef MULE + while (1) + { + int diff; + type_checking_assert (BYTE_ASCII_P (*ascii_string)); + if ((diff = charptr_emchar (bp) - *(Bufbyte *) ascii_string) != 0) + return diff; + if (*ascii_string == '\0') + return 0; + ascii_string++; + INC_CHARPTR (bp); + } +#else + return strcmp ((char *)bp, ascii_string); +#endif +} + + +/* Like memcmp, except first arg points at internally formatted data, + while the second points at a string of only ASCII chars. */ +INLINE_HEADER int +bufbyte_memcmp (const Bufbyte *bp, const char *ascii_string, size_t len); +INLINE_HEADER int +bufbyte_memcmp (const Bufbyte *bp, const char *ascii_string, size_t len) +{ +#ifdef MULE + while (len--) + { + int diff = charptr_emchar (bp) - *(Bufbyte *) ascii_string; + type_checking_assert (BYTE_ASCII_P (*ascii_string)); + if (diff != 0) + return diff; + ascii_string++; + INC_CHARPTR (bp); + } + return 0; +#else + return memcmp (bp, ascii_string, len); +#endif +} + #endif /* INCLUDED_buffer_h_ */ diff -r a8296e22da4e -r 576fb035e263 src/bytecode.c --- a/src/bytecode.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/bytecode.c Mon Aug 13 11:36:19 2007 +0200 @@ -2264,7 +2264,7 @@ } DEFUN ("compiled-function-stack-depth", Fcompiled_function_stack_depth, 1, 1, 0, /* -Return the max stack depth of the compiled-function object FUNCTION. +Return the maximum stack depth of the compiled-function object FUNCTION. */ (function)) { diff -r a8296e22da4e -r 576fb035e263 src/callint.c --- a/src/callint.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/callint.c Mon Aug 13 11:36:19 2007 +0200 @@ -53,6 +53,9 @@ #endif #if 0 /* ill-conceived */ +/* FSF calls Qmouse_leave_buffer_hook at all sorts of random places, + including a bunch of places in their mouse.el. If this is + implemented, it has to be done cleanly. */ Lisp_Object Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook; #endif @@ -807,14 +810,6 @@ } case 'S': /* Any symbol. */ { -#if 0 /* Historical crock */ - Lisp_Object tem = intern ("minibuffer-local-ns-map"); - tem = find_symbol_value (tem); - if (UNBOUNDP (tem)) tem = Qnil; - tem = call3 (Qread_from_minibuffer, PROMPT (), Qnil, - tem); - args[argnum] = Fintern (tem, Qnil); -#else /* 1 */ visargs[argnum] = Qnil; for (;;) { @@ -837,7 +832,6 @@ directly */ break; } -#endif /* 1 */ arg_from_tty = 1; break; } @@ -952,7 +946,7 @@ } DEFUN ("prefix-numeric-value", Fprefix_numeric_value, 1, 1, 0, /* -Return numeric meaning of raw prefix argument ARG. +Return numeric meaning of raw prefix argument RAW. A raw prefix argument is what you get from `(interactive "P")'. Its numeric meaning is what you would get from `(interactive "p")'. */ diff -r a8296e22da4e -r 576fb035e263 src/callproc.c --- a/src/callproc.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/callproc.c Mon Aug 13 11:36:19 2007 +0200 @@ -331,9 +331,6 @@ REGISTER char **save_environ = environ; REGISTER int fd1 = fd[1]; int fd_error = fd1; - char **env; - - env = environ; /* Record that we're about to create a synchronous process. */ synch_process_alive = 1; @@ -452,7 +449,6 @@ { int nread; - int first = 1; int total_read = 0; Lisp_Object instream; struct gcpro ngcpro1; @@ -536,7 +532,6 @@ if (!NILP (display) && INTERACTIVE) { - first = 0; redisplay (); } } diff -r a8296e22da4e -r 576fb035e263 src/casefiddle.c --- a/src/casefiddle.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/casefiddle.c Mon Aug 13 11:36:19 2007 +0200 @@ -30,28 +30,29 @@ enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP}; static Lisp_Object -casify_object (enum case_action flag, Lisp_Object obj, Lisp_Object buffer) +casify_object (enum case_action flag, Lisp_Object string_or_char, + Lisp_Object buffer) { struct buffer *buf = decode_buffer (buffer, 0); retry: - if (CHAR_OR_CHAR_INTP (obj)) + if (CHAR_OR_CHAR_INTP (string_or_char)) { Emchar c; - CHECK_CHAR_COERCE_INT (obj); - c = XCHAR (obj); + CHECK_CHAR_COERCE_INT (string_or_char); + c = XCHAR (string_or_char); c = (flag == CASE_DOWN) ? DOWNCASE (buf, c) : UPCASE (buf, c); return make_char (c); } - if (STRINGP (obj)) + if (STRINGP (string_or_char)) { Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->mirror_syntax_table); Bufbyte *storage = - alloca_array (Bufbyte, XSTRING_LENGTH (obj) * MAX_EMCHAR_LEN); + alloca_array (Bufbyte, XSTRING_LENGTH (string_or_char) * MAX_EMCHAR_LEN); Bufbyte *newp = storage; - Bufbyte *oldp = XSTRING_DATA (obj); + Bufbyte *oldp = XSTRING_DATA (string_or_char); int wordp = 0, wordp_prev; while (*oldp) @@ -87,91 +88,90 @@ return make_string (storage, newp - storage); } - obj = wrong_type_argument (Qchar_or_string_p, obj); + string_or_char = wrong_type_argument (Qchar_or_string_p, string_or_char); goto retry; } DEFUN ("upcase", Fupcase, 1, 2, 0, /* -Convert OBJECT to upper case and return that. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +Convert STRING-OR-CHAR to upper case and return that. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. See also `capitalize', `downcase' and `upcase-initials'. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_UP, object, buffer); + return casify_object (CASE_UP, string_or_char, buffer); } DEFUN ("downcase", Fdowncase, 1, 2, 0, /* -Convert OBJECT to lower case and return that. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +Convert STRING-OR-CHAR to lower case and return that. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_DOWN, object, buffer); + return casify_object (CASE_DOWN, string_or_char, buffer); } DEFUN ("capitalize", Fcapitalize, 1, 2, 0, /* -Convert OBJECT to capitalized form and return that. +Convert STRING-OR-CHAR to capitalized form and return that. This means that each word's first character is upper case and the rest is lower case. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_CAPITALIZE, object, buffer); + return casify_object (CASE_CAPITALIZE, string_or_char, buffer); } /* Like Fcapitalize but change only the initial characters. */ DEFUN ("upcase-initials", Fupcase_initials, 1, 2, 0, /* -Convert the initial of each word in OBJECT to upper case. +Convert the initial of each word in STRING-OR-CHAR to upper case. Do not change the other letters of each word. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_CAPITALIZE_UP, object, buffer); + return casify_object (CASE_CAPITALIZE_UP, string_or_char, buffer); } /* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP. - b and e specify range of buffer to operate on. */ + START and END specify range of buffer to operate on. */ static void -casify_region_internal (enum case_action flag, Lisp_Object b, Lisp_Object e, - struct buffer *buf) +casify_region_internal (enum case_action flag, Lisp_Object start, + Lisp_Object end, struct buffer *buf) { /* This function can GC */ - REGISTER Bufpos i; - Bufpos start, end; + Bufpos pos, s, e; Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->mirror_syntax_table); int mccount; - Emchar oldc, c; int wordp = 0, wordp_prev; - if (EQ (b, e)) + if (EQ (start, end)) /* Not modifying because nothing marked */ return; - get_buffer_range_char (buf, b, e, &start, &end, 0); + get_buffer_range_char (buf, start, end, &s, &e, 0); + + mccount = begin_multiple_change (buf, s, e); + record_change (buf, s, e - s); - mccount = begin_multiple_change (buf, start, end); - record_change (buf, start, end - start); - - for (i = start; i < end; i++) + for (pos = s; pos < e; pos++) { - c = oldc = BUF_FETCH_CHAR (buf, i); + Emchar oldc = BUF_FETCH_CHAR (buf, pos); + Emchar c = oldc; switch (flag) { @@ -199,7 +199,7 @@ } if (oldc == c) continue; - buffer_replace_char (buf, i, c, 1, (i == start)); + buffer_replace_char (buf, pos, c, 1, (pos == s)); BUF_MODIFF (buf)++; } @@ -207,10 +207,10 @@ } static Lisp_Object -casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e, +casify_region (enum case_action flag, Lisp_Object start, Lisp_Object end, Lisp_Object buffer) { - casify_region_internal (flag, b, e, decode_buffer (buffer, 1)); + casify_region_internal (flag, start, end, decode_buffer (buffer, 1)); return Qnil; } @@ -222,10 +222,10 @@ See also `capitalize-region'. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - return casify_region (CASE_UP, b, e, buffer); + return casify_region (CASE_UP, start, end, buffer); } DEFUN ("downcase-region", Fdowncase_region, 2, 3, "r", /* @@ -235,10 +235,10 @@ point and the mark is operated on. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - return casify_region (CASE_DOWN, b, e, buffer); + return casify_region (CASE_DOWN, start, end, buffer); } DEFUN ("capitalize-region", Fcapitalize_region, 2, 3, "r", /* @@ -249,10 +249,10 @@ character positions to operate on. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - return casify_region (CASE_CAPITALIZE, b, e, buffer); + return casify_region (CASE_CAPITALIZE, start, end, buffer); } /* Like Fcapitalize_region but change only the initials. */ @@ -264,9 +264,9 @@ character positions to operate on. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { - return casify_region (CASE_CAPITALIZE_UP, b, e, buffer); + return casify_region (CASE_CAPITALIZE_UP, start, end, buffer); } @@ -288,39 +288,39 @@ } DEFUN ("upcase-word", Fupcase_word, 1, 2, "p", /* -Convert following word (or N words) to upper case, moving over. +Convert following word (or COUNT words) to upper case, moving over. With negative argument, convert previous words but do not move. See also `capitalize-word'. Optional second arg BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { /* This function can GC */ - return casify_word (CASE_UP, n, buffer); + return casify_word (CASE_UP, count, buffer); } DEFUN ("downcase-word", Fdowncase_word, 1, 2, "p", /* -Convert following word (or N words) to lower case, moving over. +Convert following word (or COUNT words) to lower case, moving over. With negative argument, convert previous words but do not move. Optional second arg BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { /* This function can GC */ - return casify_word (CASE_DOWN, n, buffer); + return casify_word (CASE_DOWN, count, buffer); } DEFUN ("capitalize-word", Fcapitalize_word, 1, 2, "p", /* -Capitalize the following word (or N words), moving over. +Capitalize the following word (or COUNT words), moving over. This gives the word(s) a first character in upper case and the rest lower case. With negative argument, capitalize previous words but do not move. Optional second arg BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { /* This function can GC */ - return casify_word (CASE_CAPITALIZE, n, buffer); + return casify_word (CASE_CAPITALIZE, count, buffer); } diff -r a8296e22da4e -r 576fb035e263 src/casetab.c --- a/src/casetab.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/casetab.c Mon Aug 13 11:36:19 2007 +0200 @@ -55,16 +55,16 @@ #define STRING256_P(obj) (STRINGP (obj) && XSTRING_CHAR_LENGTH (obj) == 256) DEFUN ("case-table-p", Fcase_table_p, 1, 1, 0, /* -Return t if ARG is a case table. +Return t if OBJECT is a case table. See `set-case-table' for more information on these data structures. */ - (table)) + (object)) { Lisp_Object down, up, canon, eqv; - if (!CONSP (table)) return Qnil; down = XCAR (table); table = XCDR (table); - if (!CONSP (table)) return Qnil; up = XCAR (table); table = XCDR (table); - if (!CONSP (table)) return Qnil; canon = XCAR (table); table = XCDR (table); - if (!CONSP (table)) return Qnil; eqv = XCAR (table); + if (!CONSP (object)) return Qnil; down = XCAR (object); object = XCDR (object); + if (!CONSP (object)) return Qnil; up = XCAR (object); object = XCDR (object); + if (!CONSP (object)) return Qnil; canon = XCAR (object); object = XCDR (object); + if (!CONSP (object)) return Qnil; eqv = XCAR (object); return (STRING256_P (down) && (NILP (up) || STRING256_P (up)) @@ -75,13 +75,11 @@ } static Lisp_Object -check_case_table (Lisp_Object obj) +check_case_table (Lisp_Object object) { - REGISTER Lisp_Object tem; - - while (tem = Fcase_table_p (obj), NILP (tem)) - obj = wrong_type_argument (Qcase_tablep, obj); - return (obj); + while (NILP (Fcase_table_p (object))) + object = wrong_type_argument (Qcase_tablep, object); + return object; } DEFUN ("current-case-table", Fcurrent_case_table, 0, 1, 0, /* @@ -113,7 +111,7 @@ DEFUN ("set-case-table", Fset_case_table, 1, 1, 0, /* -Select a new case table for the current buffer. +Select CASE-TABLE as the new case table for the current buffer. A case table is a list (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES) where each element is either nil or a string of length 256. DOWNCASE maps each character to its lower-case equivalent. @@ -134,18 +132,18 @@ will not correctly conflate a-umlaut and A-umlaut even if the case tables call for this. */ - (table)) + (case_table)) { - return set_case_table (table, 0); + return set_case_table (case_table, 0); } DEFUN ("set-standard-case-table", Fset_standard_case_table, 1, 1, 0, /* -Select a new standard case table for new buffers. +Select CASE-TABLE as the new standard case table for new buffers. See `set-case-table' for more info on case tables. */ - (table)) + (case_table)) { - return set_case_table (table, 1); + return set_case_table (case_table, 1); } #ifdef MULE diff -r a8296e22da4e -r 576fb035e263 src/chartab.c --- a/src/chartab.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/chartab.c Mon Aug 13 11:36:19 2007 +0200 @@ -468,12 +468,12 @@ -- all characters -- a single character -To create a char table, use `make-char-table'. To modify a char -table, use `put-char-table' or `remove-char-table'. To retrieve the -value for a particular character, use `get-char-table'. See also -`map-char-table', `clear-char-table', `copy-char-table', -`valid-char-table-type-p', `char-table-type-list', `valid-char-table-value-p', -and `check-char-table-value'. +To create a char table, use `make-char-table'. +To modify a char table, use `put-char-table' or `remove-char-table'. +To retrieve the value for a particular character, use `get-char-table'. +See also `map-char-table', `clear-char-table', `copy-char-table', +`valid-char-table-type-p', `char-table-type-list', +`valid-char-table-value-p', and `check-char-table-value'. */ (object)) { @@ -533,13 +533,13 @@ } DEFUN ("char-table-type", Fchar_table_type, 1, 1, 0, /* -Return the type of char table TABLE. +Return the type of CHAR-TABLE. See `valid-char-table-type-p'. */ - (table)) + (char_table)) { - CHECK_CHAR_TABLE (table); - return char_table_type_to_symbol (XCHAR_TABLE (table)->type); + CHECK_CHAR_TABLE (char_table); + return char_table_type_to_symbol (XCHAR_TABLE (char_table)->type); } void @@ -559,14 +559,14 @@ } DEFUN ("reset-char-table", Freset_char_table, 1, 1, 0, /* -Reset a char table to its default state. +Reset CHAR-TABLE to its default state. */ - (table)) + (char_table)) { Lisp_Char_Table *ct; - CHECK_CHAR_TABLE (table); - ct = XCHAR_TABLE (table); + CHECK_CHAR_TABLE (char_table); + ct = XCHAR_TABLE (char_table); switch (ct->type) { @@ -666,18 +666,18 @@ #endif /* MULE */ DEFUN ("copy-char-table", Fcopy_char_table, 1, 1, 0, /* -Make a new char table which is a copy of OLD-TABLE. +Return a new char table which is a copy of CHAR-TABLE. It will contain the same values for the same characters and ranges -as OLD-TABLE. The values will not themselves be copied. +as CHAR-TABLE. The values will not themselves be copied. */ - (old_table)) + (char_table)) { Lisp_Char_Table *ct, *ctnew; Lisp_Object obj; int i; - CHECK_CHAR_TABLE (old_table); - ct = XCHAR_TABLE (old_table); + CHECK_CHAR_TABLE (char_table); + ct = XCHAR_TABLE (char_table); ctnew = alloc_lcrecord_type (Lisp_Char_Table, &lrecord_char_table); ctnew->type = ct->type; @@ -842,32 +842,29 @@ DEFUN ("get-char-table", Fget_char_table, 2, 2, 0, /* -Find value for char CH in TABLE. +Find value for CHARACTER in CHAR-TABLE. */ - (ch, table)) + (character, char_table)) { - Lisp_Char_Table *ct; + CHECK_CHAR_TABLE (char_table); + CHECK_CHAR_COERCE_INT (character); - CHECK_CHAR_TABLE (table); - ct = XCHAR_TABLE (table); - CHECK_CHAR_COERCE_INT (ch); - - return get_char_table (XCHAR (ch), ct); + return get_char_table (XCHAR (character), XCHAR_TABLE (char_table)); } DEFUN ("get-range-char-table", Fget_range_char_table, 2, 3, 0, /* -Find value for a range in TABLE. +Find value for a range in CHAR-TABLE. If there is more than one value, return MULTI (defaults to nil). */ - (range, table, multi)) + (range, char_table, multi)) { Lisp_Char_Table *ct; struct chartab_range rainj; if (CHAR_OR_CHAR_INTP (range)) - return Fget_char_table (range, table); - CHECK_CHAR_TABLE (table); - ct = XCHAR_TABLE (table); + return Fget_char_table (range, char_table); + CHECK_CHAR_TABLE (char_table); + ct = XCHAR_TABLE (char_table); decode_char_table_range (range, &rainj); switch (rainj.type) @@ -1138,7 +1135,7 @@ } DEFUN ("put-char-table", Fput_char_table, 3, 3, 0, /* -Set the value for chars in RANGE to be VAL in TABLE. +Set the value for chars in RANGE to be VALUE in CHAR-TABLE. RANGE specifies one or more characters to be affected and should be one of the following: @@ -1149,20 +1146,20 @@ (only allowed when Mule support is present) -- A single character -VAL must be a value appropriate for the type of TABLE. +VALUE must be a value appropriate for the type of CHAR-TABLE. See `valid-char-table-type-p'. */ - (range, val, table)) + (range, value, char_table)) { Lisp_Char_Table *ct; struct chartab_range rainj; - CHECK_CHAR_TABLE (table); - ct = XCHAR_TABLE (table); - check_valid_char_table_value (val, ct->type, ERROR_ME); + CHECK_CHAR_TABLE (char_table); + ct = XCHAR_TABLE (char_table); + check_valid_char_table_value (value, ct->type, ERROR_ME); decode_char_table_range (range, &rainj); - val = canonicalize_char_table_value (val, ct->type); - put_char_table (ct, &rainj, val); + value = canonicalize_char_table_value (value, ct->type); + put_char_table (ct, &rainj, value); return Qnil; } @@ -1440,22 +1437,22 @@ } DEFUN ("map-char-table", Fmap_char_table, 2, 3, 0, /* -Map FUNCTION over entries in TABLE, calling it with two args, +Map FUNCTION over entries in CHAR-TABLE, calling it with two args, each key and value in the table. RANGE specifies a subrange to map over and is in the same format as the RANGE argument to `put-range-table'. If omitted or t, it defaults to the entire table. */ - (function, table, range)) + (function, char_table, range)) { Lisp_Char_Table *ct; struct slow_map_char_table_arg slarg; struct gcpro gcpro1, gcpro2; struct chartab_range rainj; - CHECK_CHAR_TABLE (table); - ct = XCHAR_TABLE (table); + CHECK_CHAR_TABLE (char_table); + ct = XCHAR_TABLE (char_table); if (NILP (range)) range = Qt; decode_char_table_range (range, &rainj); @@ -1572,7 +1569,7 @@ /************************************************************************/ DEFUN ("category-table-p", Fcategory_table_p, 1, 1, 0, /* -Return t if ARG is a category table. +Return t if OBJECT is a category table. A category table is a type of char table used for keeping track of categories. Categories are used for classifying characters for use in regexps -- you can refer to a category rather than having to use @@ -1595,21 +1592,21 @@ Special Lisp functions are provided that abstract this, so you do not have to directly manipulate bit vectors. */ - (obj)) + (object)) { - return (CHAR_TABLEP (obj) && - XCHAR_TABLE_TYPE (obj) == CHAR_TABLE_TYPE_CATEGORY) ? + return (CHAR_TABLEP (object) && + XCHAR_TABLE_TYPE (object) == CHAR_TABLE_TYPE_CATEGORY) ? Qt : Qnil; } static Lisp_Object -check_category_table (Lisp_Object obj, Lisp_Object def) +check_category_table (Lisp_Object object, Lisp_Object default_) { - if (NILP (obj)) - obj = def; - while (NILP (Fcategory_table_p (obj))) - obj = wrong_type_argument (Qcategory_table_p, obj); - return obj; + if (NILP (object)) + object = default_; + while (NILP (Fcategory_table_p (object))) + object = wrong_type_argument (Qcategory_table_p, object); + return object; } int @@ -1632,32 +1629,33 @@ } DEFUN ("check-category-at", Fcheck_category_at, 2, 4, 0, /* -Return t if category of a character at POS includes DESIGNATOR, -else return nil. Optional third arg specifies which buffer -\(defaulting to current), and fourth specifies the CATEGORY-TABLE, -\(defaulting to the buffer's category table). +Return t if category of the character at POSITION includes DESIGNATOR. +Optional third arg BUFFER specifies which buffer to use, and defaults +to the current buffer. +Optional fourth arg CATEGORY-TABLE specifies the category table to +use, and defaults to BUFFER's category table. */ - (pos, designator, buffer, category_table)) + (position, designator, buffer, category_table)) { Lisp_Object ctbl; Emchar ch; unsigned int des; struct buffer *buf = decode_buffer (buffer, 0); - CHECK_INT (pos); + CHECK_INT (position); CHECK_CATEGORY_DESIGNATOR (designator); des = XCHAR (designator); ctbl = check_category_table (category_table, Vstandard_category_table); - ch = BUF_FETCH_CHAR (buf, XINT (pos)); + ch = BUF_FETCH_CHAR (buf, XINT (position)); return check_category_char (ch, ctbl, des, 0) ? Qt : Qnil; } DEFUN ("char-in-category-p", Fchar_in_category_p, 2, 3, 0, /* -Return t if category of character CHR includes DESIGNATOR, else nil. -Optional third arg specifies the CATEGORY-TABLE to use, -which defaults to the system default table. +Return t if category of CHARACTER includes DESIGNATOR, else nil. +Optional third arg CATEGORY-TABLE specifies the category table to use, +and defaults to the standard category table. */ - (chr, designator, category_table)) + (character, designator, category_table)) { Lisp_Object ctbl; Emchar ch; @@ -1665,16 +1663,15 @@ CHECK_CATEGORY_DESIGNATOR (designator); des = XCHAR (designator); - CHECK_CHAR (chr); - ch = XCHAR (chr); + CHECK_CHAR (character); + ch = XCHAR (character); ctbl = check_category_table (category_table, Vstandard_category_table); return check_category_char (ch, ctbl, des, 0) ? Qt : Qnil; } DEFUN ("category-table", Fcategory_table, 0, 1, 0, /* -Return the current category table. -This is the one specified by the current buffer, or by BUFFER if it -is non-nil. +Return BUFFER's current category table. +BUFFER defaults to the current buffer. */ (buffer)) { @@ -1691,48 +1688,48 @@ } DEFUN ("copy-category-table", Fcopy_category_table, 0, 1, 0, /* -Construct a new category table and return it. -It is a copy of the TABLE, which defaults to the standard category table. +Return a new category table which is a copy of CATEGORY-TABLE. +CATEGORY-TABLE defaults to the standard category table. */ - (table)) + (category_table)) { if (NILP (Vstandard_category_table)) return Fmake_char_table (Qcategory); - table = check_category_table (table, Vstandard_category_table); - return Fcopy_char_table (table); + category_table = + check_category_table (category_table, Vstandard_category_table); + return Fcopy_char_table (category_table); } DEFUN ("set-category-table", Fset_category_table, 1, 2, 0, /* -Select a new category table for BUFFER. -One argument, a category table. +Select CATEGORY-TABLE as the new category table for BUFFER. BUFFER defaults to the current buffer if omitted. */ - (table, buffer)) + (category_table, buffer)) { struct buffer *buf = decode_buffer (buffer, 0); - table = check_category_table (table, Qnil); - buf->category_table = table; + category_table = check_category_table (category_table, Qnil); + buf->category_table = category_table; /* Indicate that this buffer now has a specified category table. */ buf->local_var_flags |= XINT (buffer_local_flags.category_table); - return table; + return category_table; } DEFUN ("category-designator-p", Fcategory_designator_p, 1, 1, 0, /* -Return t if ARG is a category designator (a char in the range ' ' to '~'). +Return t if OBJECT is a category designator (a char in the range ' ' to '~'). */ - (obj)) + (object)) { - return CATEGORY_DESIGNATORP (obj) ? Qt : Qnil; + return CATEGORY_DESIGNATORP (object) ? Qt : Qnil; } DEFUN ("category-table-value-p", Fcategory_table_value_p, 1, 1, 0, /* -Return t if ARG is a category table value. +Return t if OBJECT is a category table value. Valid values are nil or a bit vector of size 95. */ - (obj)) + (object)) { - return CATEGORY_TABLE_VALUEP (obj) ? Qt : Qnil; + return CATEGORY_TABLE_VALUEP (object) ? Qt : Qnil; } @@ -1882,7 +1879,7 @@ word (i.e. finds no word boundary between them) iff they belongs to the same charset. But, exceptions are allowed in the following cases. -(1) The case that characters are in different charsets is controlled +\(1) The case that characters are in different charsets is controlled by the variable `word-combining-categories'. Emacs finds no word boundary between characters of different charsets @@ -1896,7 +1893,7 @@ form a single word, the element `(?l . ?l)' should be in this list because both characters have the category `l' (Latin characters). -(2) The case that character are in the same charset is controlled by +\(2) The case that character are in the same charset is controlled by the variable `word-separating-categories'. Emacs find a word boundary between characters of the same charset diff -r a8296e22da4e -r 576fb035e263 src/cmdloop.c --- a/src/cmdloop.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/cmdloop.c Mon Aug 13 11:36:19 2007 +0200 @@ -549,9 +549,13 @@ } } +#if 0 /* What's wrong with going through ordinary procedure of quit? + quitting here leaves overriding-terminal-local-map + when you type C-u C-u C-g. */ /* If ^G was typed before we got here (that is, before emacs was idle and waiting for input) then we treat that as an interrupt. */ QUIT; +#endif /* If minibuffer on and echo area in use, wait 2 sec and redraw minibuffer. Treat a ^G here as a command, not an interrupt. diff -r a8296e22da4e -r 576fb035e263 src/cmds.c --- a/src/cmds.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/cmds.c Mon Aug 13 11:36:19 2007 +0200 @@ -46,31 +46,31 @@ Lisp_Object Vauto_fill_chars; DEFUN ("forward-char", Fforward_char, 0, 2, "_p", /* -Move point right N characters (left if N negative). +Move point right COUNT characters (left if COUNT is negative). On attempt to pass end of buffer, stop and signal `end-of-buffer'. On attempt to pass beginning of buffer, stop and signal `beginning-of-buffer'. On reaching end of buffer, stop and signal error. */ - (n, buffer)) + (count, buffer)) { struct buffer *buf = decode_buffer (buffer, 1); - EMACS_INT count; + EMACS_INT n; - if (NILP (n)) - count = 1; + if (NILP (count)) + n = 1; else { - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); } - /* This used to just set point to point + XINT (n), and then check + /* This used to just set point to point + XINT (count), and then check to see if it was within boundaries. But now that SET_PT can potentially do a lot of stuff (calling entering and exiting hooks, etcetera), that's not a good approach. So we validate the proposed position, then set point. */ { - Bufpos new_point = BUF_PT (buf) + count; + Bufpos new_point = BUF_PT (buf) + n; if (new_point < BUF_BEGV (buf)) { @@ -92,49 +92,49 @@ } DEFUN ("backward-char", Fbackward_char, 0, 2, "_p", /* -Move point left N characters (right if N negative). +Move point left COUNT characters (right if COUNT is negative). On attempt to pass end of buffer, stop and signal `end-of-buffer'. On attempt to pass beginning of buffer, stop and signal `beginning-of-buffer'. */ - (n, buffer)) + (count, buffer)) { - if (NILP (n)) - n = make_int (-1); + if (NILP (count)) + count = make_int (-1); else { - CHECK_INT (n); - XSETINT (n, - XINT (n)); + CHECK_INT (count); + count = make_int (- XINT (count)); } - return Fforward_char (n, buffer); + return Fforward_char (count, buffer); } DEFUN ("forward-line", Fforward_line, 0, 2, "_p", /* -Move N lines forward (backward if N is negative). -Precisely, if point is on line I, move to the start of line I + N. +Move COUNT lines forward (backward if COUNT is negative). +Precisely, if point is on line I, move to the start of line I + COUNT. If there isn't room, go as far as possible (no error). Returns the count of lines left to move. If moving forward, -that is N - number of lines moved; if backward, N + number moved. -With positive N, a non-empty line at the end counts as one line +that is COUNT - number of lines moved; if backward, COUNT + number moved. +With positive COUNT, a non-empty line at the end counts as one line successfully moved (for the return value). If BUFFER is nil, the current buffer is assumed. */ - (n, buffer)) + (count, buffer)) { struct buffer *buf = decode_buffer (buffer, 1); Bufpos pos2 = BUF_PT (buf); Bufpos pos; - EMACS_INT count, shortage, negp; + EMACS_INT n, shortage, negp; - if (NILP (n)) - count = 1; + if (NILP (count)) + n = 1; else { - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); } - negp = count <= 0; - pos = scan_buffer (buf, '\n', pos2, 0, count - negp, &shortage, 1); + negp = n <= 0; + pos = scan_buffer (buf, '\n', pos2, 0, n - negp, &shortage, 1); if (shortage > 0 && (negp || (BUF_ZV (buf) > BUF_BEGV (buf) @@ -147,26 +147,26 @@ DEFUN ("point-at-bol", Fpoint_at_bol, 0, 2, 0, /* Return the character position of the first character on the current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, return that position. This function does not move point. */ - (n, buffer)) + (count, buffer)) { struct buffer *b = decode_buffer (buffer, 1); REGISTER int orig, end; XSETBUFFER (buffer, b); - if (NILP (n)) - n = make_int (0); + if (NILP (count)) + count = make_int (0); else { - CHECK_INT (n); - n = make_int (XINT (n) - 1); + CHECK_INT (count); + count = make_int (XINT (count) - 1); } orig = BUF_PT (b); - Fforward_line (n, buffer); + Fforward_line (count, buffer); end = BUF_PT (b); BUF_SET_PT (b, orig); @@ -175,75 +175,75 @@ DEFUN ("beginning-of-line", Fbeginning_of_line, 0, 2, "_p", /* Move point to beginning of current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, stop there without error. If BUFFER is nil, the current buffer is assumed. */ - (n, buffer)) + (count, buffer)) { struct buffer *b = decode_buffer (buffer, 1); - BUF_SET_PT (b, XINT (Fpoint_at_bol (n, buffer))); + BUF_SET_PT (b, XINT (Fpoint_at_bol (count, buffer))); return Qnil; } DEFUN ("point-at-eol", Fpoint_at_eol, 0, 2, 0, /* Return the character position of the last character on the current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, return that position. This function does not move point. */ - (n, buffer)) + (count, buffer)) { struct buffer *buf = decode_buffer (buffer, 1); - int count; + int n; - if (NILP (n)) - count = 1; + if (NILP (count)) + n = 1; else { - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); } return make_int (find_before_next_newline (buf, BUF_PT (buf), 0, - count - (count <= 0))); + n - (n <= 0))); } DEFUN ("end-of-line", Fend_of_line, 0, 2, "_p", /* Move point to end of current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, stop there without error. If BUFFER is nil, the current buffer is assumed. */ - (n, buffer)) + (count, buffer)) { struct buffer *b = decode_buffer (buffer, 1); - BUF_SET_PT (b, XINT (Fpoint_at_eol (n, buffer))); + BUF_SET_PT (b, XINT (Fpoint_at_eol (count, buffer))); return Qnil; } DEFUN ("delete-char", Fdelete_char, 1, 2, "*p\nP", /* -Delete the following N characters (previous, with negative N). -Optional second arg KILLFLAG non-nil means kill instead (save in kill ring). -Interactively, N is the prefix arg, and KILLFLAG is set if -N was explicitly specified. +Delete the following COUNT characters (previous, with negative COUNT). +Optional second arg KILLP non-nil means kill instead (save in kill ring). +Interactively, COUNT is the prefix arg, and KILLP is set if +COUNT was explicitly specified. */ - (n, killflag)) + (count, killp)) { /* This function can GC */ Bufpos pos; struct buffer *buf = current_buffer; - int count; + int n; - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); - pos = BUF_PT (buf) + count; - if (NILP (killflag)) + pos = BUF_PT (buf) + n; + if (NILP (killp)) { - if (count < 0) + if (n < 0) { if (pos < BUF_BEGV (buf)) signal_error (Qbeginning_of_buffer, Qnil); @@ -260,22 +260,22 @@ } else { - call1 (Qkill_forward_chars, n); + call1 (Qkill_forward_chars, count); } return Qnil; } DEFUN ("delete-backward-char", Fdelete_backward_char, 1, 2, "*p\nP", /* -Delete the previous N characters (following, with negative N). -Optional second arg KILLFLAG non-nil means kill instead (save in kill ring). -Interactively, N is the prefix arg, and KILLFLAG is set if -N was explicitly specified. +Delete the previous COUNT characters (following, with negative COUNT). +Optional second arg KILLP non-nil means kill instead (save in kill ring). +Interactively, COUNT is the prefix arg, and KILLP is set if +COUNT was explicitly specified. */ - (n, killflag)) + (count, killp)) { /* This function can GC */ - CHECK_INT (n); - return Fdelete_char (make_int (- XINT (n)), killflag); + CHECK_INT (count); + return Fdelete_char (make_int (- XINT (count)), killp); } static void internal_self_insert (Emchar ch, int noautofill); @@ -283,16 +283,17 @@ DEFUN ("self-insert-command", Fself_insert_command, 1, 1, "*p", /* Insert the character you type. Whichever character you type to run this command is inserted. +If a prefix arg COUNT is specified, the character is inserted COUNT times. */ - (n)) + (count)) { /* This function can GC */ Emchar ch; Lisp_Object c; - int count; + int n; - CHECK_NATNUM (n); - count = XINT (n); + CHECK_NATNUM (count); + n = XINT (count); if (CHAR_OR_CHAR_INTP (Vlast_command_char)) c = Vlast_command_char; @@ -307,8 +308,8 @@ ch = XCHAR (c); - while (count--) - internal_self_insert (ch, (count != 0)); + while (n--) + internal_self_insert (ch, (n != 0)); return Qnil; } @@ -447,13 +448,13 @@ /* (this comes from Mule but is a generally good idea) */ DEFUN ("self-insert-internal", Fself_insert_internal, 1, 1, 0, /* -Invoke `self-insert-command' as if CH is entered from keyboard. +Invoke `self-insert-command' as if CHARACTER is entered from keyboard. */ - (ch)) + (character)) { /* This function can GC */ - CHECK_CHAR_COERCE_INT (ch); - internal_self_insert (XCHAR (ch), 0); + CHECK_CHAR_COERCE_INT (character); + internal_self_insert (XCHAR (character), 0); return Qnil; } @@ -506,7 +507,7 @@ DEFVAR_LISP ("auto-fill-chars", &Vauto_fill_chars /* A char-table for characters which invoke auto-filling. -Such characters has value t in this table. +Such characters have value t in this table. */); Vauto_fill_chars = Fmake_char_table (Qgeneric); XCHAR_TABLE (Vauto_fill_chars)->ascii[' '] = Qt; diff -r a8296e22da4e -r 576fb035e263 src/config.h.in --- a/src/config.h.in Mon Aug 13 11:35:05 2007 +0200 +++ b/src/config.h.in Mon Aug 13 11:36:19 2007 +0200 @@ -34,12 +34,15 @@ #ifndef NOT_C_CODE #ifdef __GNUC__ #define alloca __builtin_alloca -#elif HAVE_ALLOCA_H +#elif defined __DECC +#include +#pragma intrinsic(alloca) +#elif defined HAVE_ALLOCA_H #include #elif defined(_AIX) #pragma alloca #elif ! defined (alloca) -char *alloca (); +void *alloca (); #endif #endif /* C code */ @@ -172,8 +175,9 @@ #define HAVE_UNIXOID_EVENT_LOOP #endif -/* Are we using XFree386? */ -#undef HAVE_XFREE386 +/* XFree86 has a different prototype for this function */ +#undef HAVE_XREGISTERIMINSTANTIATECALLBACK +#undef XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE #undef THIS_IS_X11R4 #undef THIS_IS_X11R5 @@ -331,7 +335,7 @@ /* PTY support functions */ #undef HAVE_GETPT /* glibc's easy pty allocation function */ -#undef HAVE__GETPT /* SGI's easy pty allocation function */ +#undef HAVE__GETPTY /* SGI's easy pty allocation function */ #undef HAVE_OPENPTY /* BSD's easy pty allocation function */ #undef HAVE_GRANTPT /* Unix98 */ #undef HAVE_UNLOCKPT /* Unix98 */ @@ -341,8 +345,8 @@ #undef HAVE_ISASTREAM /* SysV streams */ #undef HAVE_PTY_H /* Linux, Tru64 openpty */ #undef HAVE_LIBUTIL_H /* BSD openpty */ -#undef HAVE_SYS_STROPTS_H /* SysV streams */ -#undef HAVE_SYS_STRTIO_H /* SysV streams TIOCSIGNAL */ +#undef HAVE_STROPTS_H /* SysV streams */ +#undef HAVE_STRTIO_H /* SysV streams TIOCSIGNAL */ #undef HAVE_SOCKETS #undef HAVE_SOCKADDR_SUN_LEN @@ -707,7 +711,7 @@ Also, SunOS 4.1.1 contains buggy versions of strcmp and strcpy that sometimes reference memory past the end of the string, which can segv. - I don't know whether this is has been fixed as of 4.1.2 or 4.1.3. */ + I don't know whether this has been fixed as of 4.1.2 or 4.1.3. */ #if defined (sparc) && !defined (USG) #define OBJECTS_SYSTEM sunOS-fix.o strcmp.o strcpy.o #endif diff -r a8296e22da4e -r 576fb035e263 src/console-stream.c --- a/src/console-stream.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/console-stream.c Mon Aug 13 11:36:19 2007 +0200 @@ -279,17 +279,17 @@ vars_of_console_stream (void) { DEFVAR_LISP ("terminal-console", &Vterminal_console /* -The initial console-object, which represents XEmacs' stdout. +The initial console object, which represents XEmacs' stdout. */ ); Vterminal_console = Qnil; DEFVAR_LISP ("terminal-device", &Vterminal_device /* -The initial device-object, which represents XEmacs' stdout. +The initial device object, which represents XEmacs' stdout. */ ); Vterminal_device = Qnil; DEFVAR_LISP ("terminal-frame", &Vterminal_frame /* -The initial frame-object, which represents XEmacs' stdout. +The initial frame object, which represents XEmacs' stdout. */ ); Vterminal_frame = Qnil; diff -r a8296e22da4e -r 576fb035e263 src/console-x.c --- a/src/console-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/console-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -43,31 +43,43 @@ return 1; } +/* Parse a DISPLAY specification like "host:10.0" or ":0" */ static void split_up_display_spec (Lisp_Object display, int *hostname_length, int *display_length, int *screen_length) { - Bufbyte *dotptr; + Bufbyte *beg = XSTRING_DATA (display); + Bufbyte *end = beg + XSTRING_LENGTH (display); + Bufbyte *p = end; - dotptr = strrchr ((char *) XSTRING_DATA (display), ':'); - if (!dotptr) + while (p > beg) { - *hostname_length = XSTRING_LENGTH (display); - *display_length = 0; - } - else - { - *hostname_length = dotptr - XSTRING_DATA (display); + DEC_CHARPTR (p); + if (charptr_emchar (p) == ':') + { + *hostname_length = p - beg; - dotptr = strchr ((char *) dotptr, '.'); - if (dotptr) - *display_length = (dotptr - XSTRING_DATA (display) - *hostname_length); - else - *display_length = XSTRING_LENGTH (display) - *hostname_length; + while (p < end - 1) + { + INC_CHARPTR (p); + if (charptr_emchar (p) == '.') + { + *display_length = p - beg - *hostname_length; + *screen_length = end - p; + return; + } + } + /* No '.' found. */ + *display_length = XSTRING_LENGTH (display) - *hostname_length; + *screen_length = 0; + return; + } } - *screen_length = (XSTRING_LENGTH (display) - *display_length - - *hostname_length); + /* No ':' found. */ + *hostname_length = XSTRING_LENGTH (display); + *display_length = 0; + *screen_length = 0; } /* Remember, in all of the following functions, we have to verify @@ -182,11 +194,26 @@ connection = x_device_to_console_connection (connection, errb); /* Check for a couple of standard special cases */ - if (string_byte (XSTRING (connection), 0) == ':') + if (string_char (XSTRING (connection), 0) == ':') connection = concat2 (build_string ("localhost"), connection); - else if (!strncmp (XSTRING_DATA (connection), "unix:", 5)) - connection = concat2 (build_string ("localhost:"), - Fsubstring (connection, make_int (5), Qnil)); + else + { + /* connection =~ s/^unix:/localhost:/; */ + const Bufbyte *p = XSTRING_DATA (connection); + const Bufbyte *end = XSTRING_DATA (connection) + XSTRING_LENGTH (connection); + size_t i; + + for (i = 0; i < sizeof ("unix:") - 1; i++) + { + if (p == end || charptr_emchar (p) != "unix:"[i]) + goto ok; + INC_CHARPTR (p); + } + + connection = concat2 (build_string ("localhost:"), + make_string (p, end - p)); + } + ok: RETURN_UNGCPRO (connection); } @@ -262,8 +289,8 @@ split_up_display_spec (connection, &hostname_length, &display_length, &screen_length); - screen_str = build_string (XSTRING_DATA (connection) - + hostname_length + display_length); + screen_str = make_string (XSTRING_DATA (connection) + + hostname_length + display_length, screen_length); connection = x_canonicalize_console_connection (connection, errb); RETURN_UNGCPRO (concat2 (connection, screen_str)); diff -r a8296e22da4e -r 576fb035e263 src/console-x.h --- a/src/console-x.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/console-x.h Mon Aug 13 11:36:19 2007 +0200 @@ -181,6 +181,7 @@ unsigned int need_to_add_mask, down_mask; KeyCode last_downkey; Time release_time; + Time modifier_release_time; }; #define DEVICE_X_DATA(d) DEVICE_TYPE_DATA (d, x) diff -r a8296e22da4e -r 576fb035e263 src/console.c --- a/src/console.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/console.c Mon Aug 13 11:36:19 2007 +0200 @@ -196,7 +196,7 @@ } DEFUN ("valid-console-type-p", Fvalid_console_type_p, 1, 1, 0, /* -Given a CONSOLE-TYPE, return t if it is valid. +Return t if CONSOLE-TYPE is a valid console type. Valid types are 'x, 'tty, and 'stream. */ (console_type)) @@ -216,9 +216,9 @@ Given a console, device, frame, or window, return the associated console. Return nil otherwise. */ - (obj)) + (object)) { - return CDFW_CONSOLE (obj); + return CDFW_CONSOLE (object); } @@ -307,7 +307,7 @@ } DEFUN ("console-type", Fconsole_type, 0, 1, 0, /* -Return the type of the specified console (e.g. `x' or `tty'). +Return the console type (e.g. `x' or `tty') of CONSOLE. Value is `tty' for a tty console (a character-only terminal), `x' for a console that is an X display, `mswindows' for a console that is a Windows NT/95/97 connection, @@ -327,7 +327,7 @@ } DEFUN ("console-name", Fconsole_name, 0, 1, 0, /* -Return the name of the specified console. +Return the name of CONSOLE. */ (console)) { @@ -750,7 +750,7 @@ DEFUN ("console-device-list", Fconsole_device_list, 0, 1, 0, /* Return a list of all devices on CONSOLE. -If CONSOLE is nil, the selected console will be used. +If CONSOLE is nil, the selected console is used. */ (console)) { @@ -780,7 +780,8 @@ } DEFUN ("console-on-window-system-p", Fconsole_on_window_system_p, 0, 1, 0, /* -Return non-nil if this console is on a window system. +Return t if CONSOLE is on a window system. +If CONSOLE is nil, the selected console is used. This generally means that there is support for the mouse, the menubar, the toolbar, glyphs, etc. */ @@ -1023,6 +1024,7 @@ TTY_FLAGS (con).flow_control = !NILP (flow); TTY_FLAGS (con).meta_key = meta_key; init_one_console (con); + MARK_FRAME_CHANGED (XFRAME (CONSOLE_SELECTED_FRAME (con))); } #endif diff -r a8296e22da4e -r 576fb035e263 src/data.c --- a/src/data.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/data.c Mon Aug 13 11:36:19 2007 +0200 @@ -182,9 +182,9 @@ DEFUN ("eq", Feq, 2, 2, 0, /* Return t if the two args are the same Lisp object. */ - (obj1, obj2)) + (object1, object2)) { - return EQ_WITH_EBOLA_NOTICE (obj1, obj2) ? Qt : Qnil; + return EQ_WITH_EBOLA_NOTICE (object1, object2) ? Qt : Qnil; } DEFUN ("old-eq", Fold_eq, 2, 2, 0, /* @@ -199,10 +199,10 @@ Do not use this function! */ - (obj1, obj2)) + (object1, object2)) { /* #### blasphemy */ - return HACKEQ_UNSAFE (obj1, obj2) ? Qt : Qnil; + return HACKEQ_UNSAFE (object1, object2) ? Qt : Qnil; } DEFUN ("null", Fnull, 1, 1, 0, /* @@ -357,7 +357,7 @@ } DEFUN ("subr-interactive", Fsubr_interactive, 1, 1, 0, /* -Return the interactive spec of the subr object, or nil. +Return the interactive spec of the subr object SUBR, or nil. If non-nil, the return value will be a list whose first element is `interactive' and whose second element is the interactive spec. */ @@ -395,7 +395,7 @@ } DEFUN ("char-to-int", Fchar_to_int, 1, 1, 0, /* -Convert a character into an equivalent integer. +Convert CHARACTER into an equivalent integer. The resulting integer will always be non-negative. The integers in the range 0 - 255 map to characters as follows: @@ -409,14 +409,14 @@ may vary depending on the particular version of XEmacs, the order in which character sets were loaded, etc., and you should not depend on them. */ - (ch)) + (character)) { - CHECK_CHAR (ch); - return make_int (XCHAR (ch)); + CHECK_CHAR (character); + return make_int (XCHAR (character)); } DEFUN ("int-to-char", Fint_to_char, 1, 1, 0, /* -Convert an integer into the equivalent character. +Convert integer INTEGER into the equivalent character. Not all integers correspond to valid characters; use `char-int-p' to determine whether this is the case. If the integer cannot be converted, nil is returned. @@ -614,26 +614,26 @@ } DEFUN ("setcar", Fsetcar, 2, 2, 0, /* -Set the car of CONSCELL to be NEWCAR. Return NEWCAR. +Set the car of CONS-CELL to be NEWCAR. Return NEWCAR. */ - (conscell, newcar)) + (cons_cell, newcar)) { - if (!CONSP (conscell)) - conscell = wrong_type_argument (Qconsp, conscell); + if (!CONSP (cons_cell)) + cons_cell = wrong_type_argument (Qconsp, cons_cell); - XCAR (conscell) = newcar; + XCAR (cons_cell) = newcar; return newcar; } DEFUN ("setcdr", Fsetcdr, 2, 2, 0, /* -Set the cdr of CONSCELL to be NEWCDR. Return NEWCDR. +Set the cdr of CONS-CELL to be NEWCDR. Return NEWCDR. */ - (conscell, newcdr)) + (cons_cell, newcdr)) { - if (!CONSP (conscell)) - conscell = wrong_type_argument (Qconsp, conscell); + if (!CONSP (cons_cell)) + cons_cell = wrong_type_argument (Qconsp, cons_cell); - XCDR (conscell) = newcdr; + XCDR (cons_cell) = newcdr; return newcdr; } @@ -1002,27 +1002,27 @@ DEFUN ("number-to-string", Fnumber_to_string, 1, 1, 0, /* -Convert NUM to a string by printing it in decimal. +Convert NUMBER to a string by printing it in decimal. Uses a minus sign if negative. -NUM may be an integer or a floating point number. +NUMBER may be an integer or a floating point number. */ - (num)) + (number)) { char buffer[VALBITS]; - CHECK_INT_OR_FLOAT (num); + CHECK_INT_OR_FLOAT (number); #ifdef LISP_FLOAT_TYPE - if (FLOATP (num)) + if (FLOATP (number)) { char pigbuf[350]; /* see comments in float_to_string */ - float_to_string (pigbuf, XFLOAT_DATA (num)); + float_to_string (pigbuf, XFLOAT_DATA (number)); return build_string (pigbuf); } #endif /* LISP_FLOAT_TYPE */ - long_to_string (buffer, XINT (num)); + long_to_string (buffer, XINT (number)); return build_string (buffer); } @@ -1039,12 +1039,12 @@ } DEFUN ("string-to-number", Fstring_to_number, 1, 2, 0, /* -Convert STRING to a number by parsing it as a decimal number. +Convert STRING to a number by parsing it as a number in base BASE. This parses both integers and floating point numbers. It ignores leading spaces and tabs. -If BASE, interpret STRING as a number in that base. If BASE isn't -present, base 10 is used. BASE must be between 2 and 16 (inclusive). +If BASE is nil or omitted, base 10 is used. +BASE must be an integer between 2 and 16 (inclusive). Floating point numbers always use base 10. */ (string, base)) @@ -1088,7 +1088,7 @@ } else { - int digit, negative = 1; + int negative = 1; EMACS_INT v = 0; if (*p == '-') @@ -1100,7 +1100,7 @@ p++; while (1) { - digit = digit_to_number (*p++, b); + int digit = digit_to_number (*p++, b); if (digit < 0) break; v = v * b + digit; @@ -1417,10 +1417,10 @@ Return remainder of first arg divided by second. Both must be integers, characters or markers. */ - (num1, num2)) + (number1, number2)) { - EMACS_INT ival1 = integer_char_or_marker_to_int (num1); - EMACS_INT ival2 = integer_char_or_marker_to_int (num2); + EMACS_INT ival1 = integer_char_or_marker_to_int (number1); + EMACS_INT ival2 = integer_char_or_marker_to_int (number2); if (ival2 == 0) Fsignal (Qarith_error, Qnil); diff -r a8296e22da4e -r 576fb035e263 src/database.c --- a/src/database.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/database.c Mon Aug 13 11:36:19 2007 +0200 @@ -144,9 +144,9 @@ } static Lisp_Object -mark_database (Lisp_Object obj) +mark_database (Lisp_Object object) { - Lisp_Database *db = XDATABASE (obj); + Lisp_Database *db = XDATABASE (object); return db->fname; } @@ -178,11 +178,11 @@ if (for_disksave) { - Lisp_Object obj; - XSETDATABASE (obj, db); + Lisp_Object object; + XSETDATABASE (object, db); signal_simple_error - ("Can't dump an emacs containing database objects", obj); + ("Can't dump an emacs containing database objects", object); } db->funcs->close (db); } @@ -226,11 +226,12 @@ } DEFUN ("database-live-p", Fdatabase_live_p, 1, 1, 0, /* -Return t if OBJ is an active database. +Return t if OBJECT is an active database. */ - (obj)) + (object)) { - return DATABASEP (obj) && DATABASE_LIVE_P (XDATABASE (obj)) ? Qt : Qnil; + return DATABASEP (object) && DATABASE_LIVE_P (XDATABASE (object)) ? + Qt : Qnil; } DEFUN ("database-file-name", Fdatabase_file_name, 1, 1, 0, /* @@ -244,11 +245,11 @@ } DEFUN ("databasep", Fdatabasep, 1, 1, 0, /* -Return t if OBJ is a database. +Return t if OBJECT is a database. */ - (obj)) + (object)) { - return DATABASEP (obj) ? Qt : Qnil; + return DATABASEP (object) ? Qt : Qnil; } #ifdef HAVE_DBM diff -r a8296e22da4e -r 576fb035e263 src/depend --- a/src/depend Mon Aug 13 11:35:05 2007 +0200 +++ b/src/depend Mon Aug 13 11:36:19 2007 +0200 @@ -204,7 +204,7 @@ unexcw.o: config.h sysfile.h unexec.o: $(LISP_H) getpagesize.h unexelf.o: config.h -unexelfsgi.o: $(LISP_H) +unexelfsgi.o: config.h unexenix.o: config.h unexfreebsd.o: config.h unexhp9k3.o: config.h sysdep.h diff -r a8296e22da4e -r 576fb035e263 src/device-x.c --- a/src/device-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/device-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -1434,13 +1434,13 @@ returned value is the list (t) for true, (nil) for false, and is nil to mean ``unspecified''. */ - (name, class, type, locale, device, no_error)) + (name, class, type, locale, device, noerror)) { char* name_string, *class_string; char *raw_result; XrmDatabase db; Display *display; - Error_behavior errb = decode_error_behavior_flag (no_error); + Error_behavior errb = decode_error_behavior_flag (noerror); CHECK_STRING (name); CHECK_STRING (class); diff -r a8296e22da4e -r 576fb035e263 src/device.c --- a/src/device.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/device.c Mon Aug 13 11:36:19 2007 +0200 @@ -227,9 +227,9 @@ Given a device, frame, or window, return the associated device. Return nil otherwise. */ - (obj)) + (object)) { - return DFW_DEVICE (obj); + return DFW_DEVICE (object); } diff -r a8296e22da4e -r 576fb035e263 src/dialog-msw.c --- a/src/dialog-msw.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/dialog-msw.c Mon Aug 13 11:36:19 2007 +0200 @@ -157,6 +157,9 @@ LIST_LOOP_2 (popup, Vpopup_frame_list) { HWND hwnd = FRAME_MSWINDOWS_HANDLE (XFRAME (popup)); + /* This is a windows feature that allows dialog type + processing to be applied to standard windows containing + controls. */ if (IsDialogMessage (hwnd, msg)) return 1; } diff -r a8296e22da4e -r 576fb035e263 src/dialog-x.c --- a/src/dialog-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/dialog-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -128,7 +128,9 @@ int n = 0; int count = specpdl_depth (); Lisp_Object wv_closure, gui_item; - Lisp_Object question = Qnil, title = Qnil, buttons = Qnil; + Lisp_Object question = Qnil; + Lisp_Object title = Qnil; /* #### currently unused */ + Lisp_Object buttons = Qnil; { EXTERNAL_PROPERTY_LIST_LOOP_3 (key, value, keys) diff -r a8296e22da4e -r 576fb035e263 src/dired.c --- a/src/dired.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/dired.c Mon Aug 13 11:36:19 2007 +0200 @@ -179,18 +179,18 @@ int all_flag, int ver_flag); DEFUN ("file-name-completion", Ffile_name_completion, 2, 2, 0, /* -Complete file name FILE in directory DIRECTORY. -Returns the longest string common to all filenames in DIRECTORY -that start with FILE. -If there is only one and FILE matches it exactly, returns t. -Returns nil if DIRECTORY contains no name starting with FILE. +Complete file name PARTIAL-FILENAME in directory DIRECTORY. +Return the longest prefix common to all file names in DIRECTORY +that start with PARTIAL-FILENAME. +If there is only one and PARTIAL-FILENAME matches it exactly, return t. +Return nil if DIRECTORY contains no name starting with PARTIAL-FILENAME. -Filenames which end with any member of `completion-ignored-extensions' -are not considered as possible completions for FILE unless there is no -other possible completion. `completion-ignored-extensions' is not applied -to the names of directories. +File names which end with any member of `completion-ignored-extensions' +are not considered as possible completions for PARTIAL-FILENAME unless +there is no other possible completion. `completion-ignored-extensions' +is not applied to the names of directories. */ - (file, directory)) + (partial_filename, directory)) { /* This function can GC. GC checked 1996.04.06. */ Lisp_Object handler; @@ -199,27 +199,27 @@ call the corresponding file handler. */ handler = Ffind_file_name_handler (directory, Qfile_name_completion); if (!NILP (handler)) - return call3 (handler, Qfile_name_completion, file, directory); + return call3 (handler, Qfile_name_completion, partial_filename, directory); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_completion); + handler = Ffind_file_name_handler (partial_filename, Qfile_name_completion); if (!NILP (handler)) - return call3 (handler, Qfile_name_completion, file, directory); + return call3 (handler, Qfile_name_completion, partial_filename, directory); - return file_name_completion (file, directory, 0, 0); + return file_name_completion (partial_filename, directory, 0, 0); } DEFUN ("file-name-all-completions", Ffile_name_all_completions, 2, 2, 0, /* -Return a list of all completions of file name FILE in directory DIRECTORY. -These are all file names in directory DIRECTORY which begin with FILE. +Return a list of all completions of PARTIAL-FILENAME in DIRECTORY. +These are all file names in DIRECTORY which begin with PARTIAL-FILENAME. File names which end with any member of `completion-ignored-extensions' -are not considered as possible completions for FILE unless there is no -other possible completion. `completion-ignored-extensions' is not applied -to the names of directories. +are not considered as possible completions for PARTIAL-FILENAME unless +there is no other possible completion. `completion-ignored-extensions' +is not applied to the names of directories. */ - (file, directory)) + (partial_filename, directory)) { /* This function can GC. GC checked 1997.06.04. */ Lisp_Object handler; @@ -232,10 +232,10 @@ handler = Ffind_file_name_handler (directory, Qfile_name_all_completions); UNGCPRO; if (!NILP (handler)) - return call3 (handler, Qfile_name_all_completions, file, + return call3 (handler, Qfile_name_all_completions, partial_filename, directory); - return file_name_completion (file, directory, 1, 0); + return file_name_completion (partial_filename, directory, 1, 0); } static int @@ -516,44 +516,45 @@ int *uniq); DEFUN ("user-name-completion", Fuser_name_completion, 1, 1, 0, /* -Complete user name USER. - -Returns the longest string common to all user names that start -with USER. If there is only one and USER matches it exactly, -returns t. Returns nil if there is no user name starting with USER. +Complete user name from PARTIAL-USERNAME. +Return the longest prefix common to all user names starting with +PARTIAL-USERNAME. If there is only one and PARTIAL-USERNAME matches +it exactly, returns t. Return nil if there is no user name starting +with PARTIAL-USERNAME. */ - (user)) + (partial_username)) { - return user_name_completion (user, 0, NULL); + return user_name_completion (partial_username, 0, NULL); } DEFUN ("user-name-completion-1", Fuser_name_completion_1, 1, 1, 0, /* -Complete user name USER. +Complete user name from PARTIAL-USERNAME. This function is identical to `user-name-completion', except that the cons of the completion and an indication of whether the completion was unique is returned. -The car of the returned value is the longest string common to all -user names that start with USER. If there is only one and USER -matches it exactly, the car is t. The car is nil if there is no -user name starting with USER. The cdr of the result is non-nil -if and only if the completion returned in the car was unique. +The car of the returned value is the longest prefix common to all user +names that start with PARTIAL-USERNAME. If there is only one and +PARTIAL-USERNAME matches it exactly, the car is t. The car is nil if +there is no user name starting with PARTIAL-USERNAME. The cdr of the +result is non-nil if and only if the completion returned in the car +was unique. */ - (user)) + (partial_username)) { int uniq; - Lisp_Object completed = user_name_completion (user, 0, &uniq); + Lisp_Object completed = user_name_completion (partial_username, 0, &uniq); return Fcons (completed, uniq ? Qt : Qnil); } DEFUN ("user-name-all-completions", Fuser_name_all_completions, 1, 1, 0, /* -Return a list of all completions of user name USER. -These are all user names which begin with USER. +Return a list of all user name completions from PARTIAL-USERNAME. +These are all the user names which begin with PARTIAL-USERNAME. */ - (user)) + (partial_username)) { - return user_name_completion (user, 1, NULL); + return user_name_completion (partial_username, 1, NULL); } struct user_name diff -r a8296e22da4e -r 576fb035e263 src/doc.c --- a/src/doc.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/doc.c Mon Aug 13 11:36:19 2007 +0200 @@ -138,7 +138,7 @@ } /* #### mrb: following STILL completely broken */ - return_me = make_ext_string ((Bufbyte *) buffer, to - buffer, Qbinary); + return_me = make_ext_string (buffer, to - buffer, Qbinary); done: if (buffer != buf) /* We must have allocated buffer above */ @@ -261,7 +261,7 @@ DEFUN ("documentation", Fdocumentation, 1, 2, 0, /* Return the documentation string of FUNCTION. -Unless a non-nil second argument is given, the +Unless a non-nil second argument RAW is given, the string is passed through `substitute-command-keys'. */ (function, raw)) @@ -359,7 +359,7 @@ through `substitute-command-keys'. A non-nil third argument avoids this translation. */ - (sym, prop, raw)) + (symbol, prop, raw)) { /* This function can GC */ REGISTER Lisp_Object doc = Qnil; @@ -370,7 +370,7 @@ GCPRO1 (doc); - doc = Fget (sym, prop, Qnil); + doc = Fget (symbol, prop, Qnil); if (INTP (doc)) doc = get_doc_string (XINT (doc) > 0 ? doc : make_int (- XINT (doc))); else if (CONSP (doc)) @@ -378,7 +378,7 @@ #ifdef I18N3 if (!NILP (doc)) { - domain = Fget (sym, Qvariable_domain, Qnil); + domain = Fget (symbol, Qvariable_domain, Qnil); if (NILP (domain)) doc = Fgettext (doc); else @@ -739,13 +739,13 @@ replaced by either: a keystroke sequence that will invoke COMMAND, or "M-x COMMAND" if COMMAND is not on any keys. Substrings of the form \\=\\{MAPVAR} are replaced by summaries -\(made by describe-bindings) of the value of MAPVAR, taken as a keymap. +\(made by `describe-bindings') of the value of MAPVAR, taken as a keymap. Substrings of the form \\=\\ specify to use the value of MAPVAR as the keymap for future \\=\\[COMMAND] substrings. \\=\\= quotes the following character and is discarded; thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ into the output. */ - (str)) + (string)) { /* This function can GC */ Bufbyte *buf; @@ -756,33 +756,30 @@ Bytecount idx; Bytecount bsize; Bufbyte *new; - Lisp_Object tem; - Lisp_Object keymap; + Lisp_Object tem = Qnil; + Lisp_Object keymap = Qnil; + Lisp_Object name = Qnil; Bufbyte *start; Bytecount length; - Lisp_Object name; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; - if (NILP (str)) + if (NILP (string)) return Qnil; - CHECK_STRING (str); - tem = Qnil; - keymap = Qnil; - name = Qnil; - GCPRO4 (str, tem, keymap, name); + CHECK_STRING (string); + GCPRO4 (string, tem, keymap, name); /* There is the possibility that the string is not destined for a translating stream, and it could be argued that we should do the same thing here as in Fformat(), but there are very few times when this will be the case and many calls to this function would have to have `gettext' calls added. (I18N3) */ - str = LISP_GETTEXT (str); + string = LISP_GETTEXT (string); /* KEYMAP is either nil (which means search all the active keymaps) or a specified local map (which means search just that and the global map). If non-nil, it might come from Voverriding_local_map, - or from a \\ construct in STR itself.. */ + or from a \\ construct in STRING itself.. */ #if 0 /* FSFmacs */ /* This is really weird and garbagey. If keymap is nil and there's an overriding-local-map, `where-is-internal' will correctly note @@ -795,13 +792,13 @@ */ #endif - strlength = XSTRING_LENGTH (str); + strlength = XSTRING_LENGTH (string); bsize = 1 + strlength; buf = (Bufbyte *) xmalloc (bsize); bufp = buf; /* Have to reset strdata every time GC might be called */ - strdata = XSTRING_DATA (str); + strdata = XSTRING_DATA (string); for (idx = 0; idx < strlength; ) { Bufbyte *strp = strdata + idx; @@ -856,15 +853,15 @@ tem = Fwhere_is_internal (tem, keymap, Qt, Qnil, Qnil); #if 0 /* FSFmacs */ - /* Disregard menu bar bindings; it is positively annoying to - mention them when there's no menu bar, and it isn't terribly - useful even when there is a menu bar. */ - if (!NILP (tem)) - { - firstkey = Faref (tem, Qzero); - if (EQ (firstkey, Qmenu_bar)) - tem = Qnil; - } + /* Disregard menu bar bindings; it is positively annoying to + mention them when there's no menu bar, and it isn't terribly + useful even when there is a menu bar. */ + if (!NILP (tem)) + { + firstkey = Faref (tem, Qzero); + if (EQ (firstkey, Qmenu_bar)) + tem = Qnil; + } #endif if (NILP (tem)) /* but not on any keys */ @@ -885,13 +882,8 @@ case '{': case '<': { - /* #### jump to label `subst_string|subst' crosses - initialization of `buffer|_buf' */ - Lisp_Object buffer; - struct buffer *buf_; - - buffer = Fget_buffer_create (QSsubstitute); - buf_ = XBUFFER (buffer); + Lisp_Object buffer = Fget_buffer_create (QSsubstitute); + struct buffer *buf_ = XBUFFER (buffer); Fbuffer_disable_undo (buffer); Ferase_buffer (buffer); @@ -926,16 +918,9 @@ if (NILP (tem)) { - char boof[255], *b = boof; - *b++ = '\n'; - /* #### This sprintf() is potentially dangerous! */ - sprintf (b, GETTEXT ( - "Uses keymap \"%s\", which is not currently defined."), - (char *) XSTRING_DATA (Fsymbol_name (name))); - b += strlen (b); - *b++ = '\n'; - *b++ = 0; - buffer_insert_c_string (buf_, boof); + buffer_insert_c_string (buf_, "(uses keymap \""); + buffer_insert_lisp_string (buf_, Fsymbol_name (name)); + buffer_insert_c_string (buf_, "\", which is not currently defined) "); if (start[-1] == '<') keymap = Qnil; } @@ -947,31 +932,31 @@ tem = make_string_from_buffer (buf_, BUF_BEG (buf_), BUF_Z (buf_) - BUF_BEG (buf_)); Ferase_buffer (buffer); - goto subst_string; + } + goto subst_string; - subst_string: - start = XSTRING_DATA (tem); - length = XSTRING_LENGTH (tem); - subst: - bsize += length; - new = (Bufbyte *) xrealloc (buf, bsize); - bufp += new - buf; - buf = new; - memcpy (bufp, start, length); - bufp += length; + subst_string: + start = XSTRING_DATA (tem); + length = XSTRING_LENGTH (tem); + subst: + bsize += length; + new = (Bufbyte *) xrealloc (buf, bsize); + bufp += new - buf; + buf = new; + memcpy (bufp, start, length); + bufp += length; - /* Reset STRDATA in case gc relocated it. */ - strdata = XSTRING_DATA (str); + /* Reset STRDATA in case gc relocated it. */ + strdata = XSTRING_DATA (string); - break; - } + break; } } if (changed) /* don't bother if nothing substituted */ tem = make_string (buf, bufp - buf); else - tem = str; + tem = string; xfree (buf); UNGCPRO; return tem; diff -r a8296e22da4e -r 576fb035e263 src/doprnt.c --- a/src/doprnt.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/doprnt.c Mon Aug 13 11:36:19 2007 +0200 @@ -651,7 +651,7 @@ strcat (constructed_spec, " "); if (spec->number_flag) strcat (constructed_spec, "#"); - if (spec->precision >= 0) + if (spec->precision >= 0 && !spec->minwidth) { strcat (constructed_spec, "."); long_to_string (constructed_spec + strlen (constructed_spec), diff -r a8296e22da4e -r 576fb035e263 src/editfns.c --- a/src/editfns.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/editfns.c Mon Aug 13 11:36:19 2007 +0200 @@ -99,26 +99,26 @@ } DEFUN ("char-to-string", Fchar_to_string, 1, 1, 0, /* -Convert arg CH to a one-character string containing that character. +Convert CHARACTER to a one-character string containing that character. */ - (ch)) + (character)) { Bytecount len; Bufbyte str[MAX_EMCHAR_LEN]; - if (EVENTP (ch)) + if (EVENTP (character)) { - Lisp_Object ch2 = Fevent_to_character (ch, Qt, Qnil, Qnil); + Lisp_Object ch2 = Fevent_to_character (character, Qt, Qnil, Qnil); if (NILP (ch2)) return signal_simple_continuable_error - ("character has no ASCII equivalent:", Fcopy_event (ch, Qnil)); - ch = ch2; + ("character has no ASCII equivalent:", Fcopy_event (character, Qnil)); + character = ch2; } - CHECK_CHAR_COERCE_INT (ch); + CHECK_CHAR_COERCE_INT (character); - len = set_charptr_emchar (str, XCHAR (ch)); + len = set_charptr_emchar (str, XCHAR (character)); return make_string (str, len); } @@ -126,12 +126,12 @@ Convert arg STRING to a character, the first character of that string. An empty string will return the constant `nil'. */ - (str)) + (string)) { Lisp_String *p; - CHECK_STRING (str); + CHECK_STRING (string); - p = XSTRING (str); + p = XSTRING (string); if (string_length (p) != 0) return make_char (string_char (p, 0)); else @@ -611,7 +611,7 @@ Return the pathname to the directory to use for temporary files. On MS Windows, this is obtained from the TEMP or TMP environment variables, defaulting to / if they are both undefined. -On Unix it is obtained from TMPDIR, with /tmp as the default +On Unix it is obtained from TMPDIR, with /tmp as the default. */ ()) { @@ -1579,7 +1579,7 @@ DEFUN ("insert-char", Finsert_char, 1, 4, 0, /* -Insert COUNT (second arg) copies of CHR (first arg). +Insert COUNT copies of CHARACTER into BUFFER. Point and all markers are affected as in the function `insert'. COUNT defaults to 1 if omitted. The optional third arg IGNORED is INHERIT under FSF Emacs. @@ -1588,7 +1588,7 @@ The optional fourth arg BUFFER specifies the buffer to insert the text into. If BUFFER is nil, the current buffer is assumed. */ - (chr, count, ignored, buffer)) + (character, count, ignored, buffer)) { /* This function can GC */ REGISTER Bufbyte *string; @@ -1600,7 +1600,7 @@ struct buffer *b = decode_buffer (buffer, 1); int cou; - CHECK_CHAR_COERCE_INT (chr); + CHECK_CHAR_COERCE_INT (character); if (NILP (count)) cou = 1; else @@ -1609,7 +1609,7 @@ cou = XINT (count); } - charlen = set_charptr_emchar (str, XCHAR (chr)); + charlen = set_charptr_emchar (str, XCHAR (character)); n = cou * charlen; if (n <= 0) return Qnil; @@ -1668,7 +1668,7 @@ and what the function does is probably good enough for what the user-code will typically want to use it for. */ DEFUN ("buffer-substring-no-properties", Fbuffer_substring_no_properties, 0, 3, 0, /* -Return the text from BEG to END, as a string, without copying the extents. +Return the text from START to END as a string, without copying the extents. */ (start, end, buffer)) { @@ -1991,18 +1991,18 @@ DEFUN ("delete-region", Fdelete_region, 2, 3, "r", /* Delete the text between point and mark. -When called from a program, expects two arguments, -positions (integers or markers) specifying the stretch to be deleted. -If BUFFER is nil, the current buffer is assumed. +When called from a program, expects two arguments START and END +\(integers or markers) specifying the stretch to be deleted. +If optional third arg BUFFER is nil, the current buffer is assumed. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - Bufpos start, end; + Bufpos bp_start, bp_end; struct buffer *buf = decode_buffer (buffer, 1); - get_buffer_range_char (buf, b, e, &start, &end, 0); - buffer_delete_range (buf, start, end, 0); + get_buffer_range_char (buf, start, end, &bp_start, &bp_end, 0); + buffer_delete_range (buf, bp_start, bp_end, 0); zmacs_region_stays = 0; return Qnil; } @@ -2055,22 +2055,23 @@ When calling from a program, pass two arguments; positions (integers or markers) bounding the text that should remain visible. */ - (b, e, buffer)) + (start, end, buffer)) { - Bufpos start, end; + Bufpos bp_start, bp_end; struct buffer *buf = decode_buffer (buffer, 1); Bytind bi_start, bi_end; - get_buffer_range_char (buf, b, e, &start, &end, GB_ALLOW_PAST_ACCESSIBLE); - bi_start = bufpos_to_bytind (buf, start); - bi_end = bufpos_to_bytind (buf, end); + get_buffer_range_char (buf, start, end, &bp_start, &bp_end, + GB_ALLOW_PAST_ACCESSIBLE); + bi_start = bufpos_to_bytind (buf, bp_start); + bi_end = bufpos_to_bytind (buf, bp_end); - SET_BOTH_BUF_BEGV (buf, start, bi_start); - SET_BOTH_BUF_ZV (buf, end, bi_end); - if (BUF_PT (buf) < start) - BUF_SET_PT (buf, start); - if (BUF_PT (buf) > end) - BUF_SET_PT (buf, end); + SET_BOTH_BUF_BEGV (buf, bp_start, bi_start); + SET_BOTH_BUF_ZV (buf, bp_end, bi_end); + if (BUF_PT (buf) < bp_start) + BUF_SET_PT (buf, bp_start); + if (BUF_PT (buf) > bp_end) + BUF_SET_PT (buf, bp_end); MARK_CLIP_CHANGED; /* Changing the buffer bounds invalidates any recorded current column. */ invalidate_current_column (); @@ -2270,15 +2271,15 @@ Case is ignored if `case-fold-search' is non-nil in BUFFER. If BUFFER is nil, the current buffer is assumed. */ - (c1, c2, buffer)) + (character1, character2, buffer)) { Emchar x1, x2; struct buffer *b = decode_buffer (buffer, 1); - CHECK_CHAR_COERCE_INT (c1); - CHECK_CHAR_COERCE_INT (c2); - x1 = XCHAR (c1); - x2 = XCHAR (c2); + CHECK_CHAR_COERCE_INT (character1); + CHECK_CHAR_COERCE_INT (character2); + x1 = XCHAR (character1); + x2 = XCHAR (character2); return (!NILP (b->case_fold_search) ? DOWNCASE (b, x1) == DOWNCASE (b, x2) @@ -2290,12 +2291,12 @@ Return t if two characters match, case is significant. Both arguments must be characters (i.e. NOT integers). */ - (c1, c2)) + (character1, character2)) { - CHECK_CHAR_COERCE_INT (c1); - CHECK_CHAR_COERCE_INT (c2); + CHECK_CHAR_COERCE_INT (character1); + CHECK_CHAR_COERCE_INT (character2); - return EQ (c1, c2) ? Qt : Qnil; + return EQ (character1, character2) ? Qt : Qnil; } #if 0 /* Undebugged FSFmacs code */ @@ -2367,36 +2368,36 @@ The regions may not be overlapping, because the size of the buffer is never changed in a transposition. -Optional fifth arg LEAVE_MARKERS, if non-nil, means don't transpose +Optional fifth arg LEAVE-MARKERS, if non-nil, means don't transpose any markers that happen to be located in the regions. (#### BUG: currently -this function always acts as if LEAVE_MARKERS is non-nil.) +this function always acts as if LEAVE-MARKERS is non-nil.) Transposing beyond buffer boundaries is an error. */ - (startr1, endr1, startr2, endr2, leave_markers)) + (start1, end1, start2, end2, leave_markers)) { - Bufpos start1, end1, start2, end2; + Bufpos startr1, endr1, startr2, endr2; Charcount len1, len2; Lisp_Object string1, string2; struct buffer *buf = current_buffer; - get_buffer_range_char (buf, startr1, endr1, &start1, &end1, 0); - get_buffer_range_char (buf, startr2, endr2, &start2, &end2, 0); + get_buffer_range_char (buf, start1, end1, &startr1, &endr1, 0); + get_buffer_range_char (buf, start2, end2, &startr2, &endr2, 0); - len1 = end1 - start1; - len2 = end2 - start2; + len1 = endr1 - startr1; + len2 = endr2 - startr2; - if (start2 < end1) + if (startr2 < endr1) error ("transposed regions not properly ordered"); - else if (start1 == end1 || start2 == end2) + else if (startr1 == endr1 || startr2 == endr2) error ("transposed region may not be of length 0"); - string1 = make_string_from_buffer (buf, start1, len1); - string2 = make_string_from_buffer (buf, start2, len2); - buffer_delete_range (buf, start2, end2, 0); - buffer_insert_lisp_string_1 (buf, start2, string1, 0); - buffer_delete_range (buf, start1, end1, 0); - buffer_insert_lisp_string_1 (buf, start1, string2, 0); + string1 = make_string_from_buffer (buf, startr1, len1); + string2 = make_string_from_buffer (buf, startr2, len2); + buffer_delete_range (buf, startr2, endr2, 0); + buffer_insert_lisp_string_1 (buf, startr2, string1, 0); + buffer_delete_range (buf, startr1, endr1, 0); + buffer_insert_lisp_string_1 (buf, startr1, string2, 0); /* In FSFmacs there is a whole bunch of really ugly code here to attempt to transpose the regions without using up any @@ -2510,7 +2511,7 @@ - Commands which operate on the region only work if the region is active. - Only a very small set of commands cause the region to become active: - Those commands whose semantics are to mark an area, like mark-defun. + Those commands whose semantics are to mark an area, like `mark-defun'. - The region is deactivated after each command that is executed, except that: - "Motion" commands do not change whether the region is active or not. diff -r a8296e22da4e -r 576fb035e263 src/eldap.c --- a/src/eldap.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/eldap.c Mon Aug 13 11:36:19 2007 +0200 @@ -120,7 +120,7 @@ print_internal (ldap->host, printcharfun, 1); if (!ldap->ld) write_c_string ("(dead) ",printcharfun); - sprintf (buf, " 0x%x>", (unsigned int)ldap); + sprintf (buf, " 0x%lx>", (long)ldap); write_c_string (buf, printcharfun); } diff -r a8296e22da4e -r 576fb035e263 src/elhash.c --- a/src/elhash.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/elhash.c Mon Aug 13 11:36:19 2007 +0200 @@ -71,9 +71,9 @@ #define HASH_TABLE_MIN_SIZE 10 #define HASH_CODE(key, ht) \ -((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key)) \ - * (ht)->golden_ratio) \ - % (ht)->size) + ((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key)) \ + * (ht)->golden_ratio) \ + % (ht)->size) #define KEYS_EQUAL_P(key1, key2, testfun) \ (EQ (key1, key2) || ((testfun) && (testfun) (key1, key2))) @@ -1432,7 +1432,7 @@ DEFUN ("sxhash", Fsxhash, 1, 1, 0, /* Return a hash value for OBJECT. -(equal obj1 obj2) implies (= (sxhash obj1) (sxhash obj2)). +\(equal obj1 obj2) implies (= (sxhash obj1) (sxhash obj2)). */ (object)) { diff -r a8296e22da4e -r 576fb035e263 src/emacs.c --- a/src/emacs.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/emacs.c Mon Aug 13 11:36:19 2007 +0200 @@ -385,8 +385,8 @@ int debug_paths; /* Save argv and argc. */ -static Extbyte **initial_argv; -static int initial_argc; +static Extbyte **initial_argv; /* #### currently unused */ +static int initial_argc; /* #### currently unused */ static void sort_args (int argc, char **argv); @@ -1678,6 +1678,9 @@ vars_of_extents (); vars_of_faces (); vars_of_fileio (); +#ifdef CLASH_DETECTION + vars_of_filelock (); +#endif vars_of_floatfns (); vars_of_font_lock (); vars_of_frame (); @@ -2912,13 +2915,13 @@ if you want the dumped XEmacs to process its command line and announce itself normally when it is run. */ - (intoname, symname)) + (filename, symfile)) { /* This function can GC */ struct gcpro gcpro1, gcpro2; int opurify; - GCPRO2 (intoname, symname); + GCPRO2 (filename, symfile); #ifdef FREE_CHECKING Freally_free (Qnil); @@ -2927,15 +2930,15 @@ disable_free_hook (); #endif - CHECK_STRING (intoname); - intoname = Fexpand_file_name (intoname, Qnil); - if (!NILP (symname)) + CHECK_STRING (filename); + filename = Fexpand_file_name (filename, Qnil); + if (!NILP (symfile)) { - CHECK_STRING (symname); - if (XSTRING_LENGTH (symname) > 0) - symname = Fexpand_file_name (symname, Qnil); + CHECK_STRING (symfile); + if (XSTRING_LENGTH (symfile) > 0) + symfile = Fexpand_file_name (symfile, Qnil); else - symname = Qnil; + symfile = Qnil; } opurify = purify_flag; @@ -2962,15 +2965,15 @@ UNGCPRO; { - char *intoname_ext; - char *symname_ext; - - LISP_STRING_TO_EXTERNAL (intoname, intoname_ext, Qfile_name); - - if (STRINGP (symname)) - LISP_STRING_TO_EXTERNAL (symname, symname_ext, Qfile_name); + char *filename_ext; + char *symfile_ext; + + LISP_STRING_TO_EXTERNAL (filename, filename_ext, Qfile_name); + + if (STRINGP (symfile)) + LISP_STRING_TO_EXTERNAL (symfile, symfile_ext, Qfile_name); else - symname_ext = 0; + symfile_ext = 0; garbage_collect_1 (); @@ -2987,7 +2990,7 @@ modify all the unexec routines to ensure that filename conversion is applied everywhere. Don't worry about memory leakage because this call only happens once. */ - unexec (intoname_ext, symname_ext, (uintptr_t) my_edata, 0, 0); + unexec (filename_ext, symfile_ext, (uintptr_t) my_edata, 0, 0); #ifdef DOUG_LEA_MALLOC free (malloc_state_ptr); #endif @@ -3521,7 +3524,7 @@ DEFVAR_LISP ("emacs-program-version", &Vemacs_program_version /* *Version of the Emacs variant. -This typically has the form XX.XX[-bXX]. +This typically has the form NN.NN-bNN. This is mainly meant for use in path searching. */ ); Vemacs_program_version = build_string ((char *) PATH_VERSION); @@ -3540,7 +3543,7 @@ DEFVAR_LISP ("configure-exec-directory", &Vconfigure_exec_directory /* For internal use by the build procedure only. -configure's idea of what EXEC-DIRECTORY will be. +configure's idea of what `exec-directory' will be. */ ); #ifdef PATH_EXEC Vconfigure_exec_directory = Ffile_name_as_directory @@ -3556,7 +3559,7 @@ DEFVAR_LISP ("configure-lisp-directory", &Vconfigure_lisp_directory /* For internal use by the build procedure only. -configure's idea of what LISP-DIRECTORY will be. +configure's idea of what `lisp-directory' will be. */ ); #ifdef PATH_LOADSEARCH Vconfigure_lisp_directory = Ffile_name_as_directory @@ -3572,7 +3575,7 @@ DEFVAR_LISP ("configure-module-directory", &Vconfigure_module_directory /* For internal use by the build procedure only. -configure's idea of what MODULE-DIRECTORY will be. +configure's idea of what `module-directory' will be. */ ); #ifdef PATH_MODULESEARCH Vconfigure_module_directory = Ffile_name_as_directory @@ -3602,7 +3605,7 @@ DEFVAR_LISP ("configure-data-directory", &Vconfigure_data_directory /* For internal use by the build procedure only. -configure's idea of what DATA-DIRECTORY will be. +configure's idea of what `data-directory' will be. */ ); #ifdef PATH_DATA Vconfigure_data_directory = Ffile_name_as_directory @@ -3624,7 +3627,7 @@ DEFVAR_LISP ("configure-site-directory", &Vconfigure_site_directory /* For internal use by the build procedure only. -configure's idea of what SITE-DIRECTORY will be. +configure's idea of what `site-directory' will be. */ ); #ifdef PATH_SITE Vconfigure_site_directory = Ffile_name_as_directory @@ -3640,7 +3643,7 @@ DEFVAR_LISP ("configure-site-module-directory", &Vconfigure_site_module_directory /* For internal use by the build procedure only. -configure's idea of what SITE-DIRECTORY will be. +configure's idea of what `site-directory' will be. */ ); #ifdef PATH_SITE_MODULES Vconfigure_site_module_directory = Ffile_name_as_directory @@ -3651,13 +3654,13 @@ DEFVAR_LISP ("doc-directory", &Vdoc_directory /* *Directory containing the DOC file that comes with XEmacs. -This is usually the same as exec-directory. +This is usually the same as `exec-directory'. */ ); Vdoc_directory = Qnil; DEFVAR_LISP ("configure-doc-directory", &Vconfigure_doc_directory /* For internal use by the build procedure only. -configure's idea of what DOC-DIRECTORY will be. +configure's idea of what `doc-directory' will be. */ ); #ifdef PATH_DOC Vconfigure_doc_directory = Ffile_name_as_directory @@ -3668,7 +3671,7 @@ DEFVAR_LISP ("configure-exec-prefix-directory", &Vconfigure_exec_prefix_directory /* For internal use by the build procedure only. -configure's idea of what EXEC-PREFIX-DIRECTORY will be. +configure's idea of what `exec-prefix-directory' will be. */ ); #ifdef PATH_EXEC_PREFIX Vconfigure_exec_prefix_directory = Ffile_name_as_directory @@ -3679,7 +3682,7 @@ DEFVAR_LISP ("configure-prefix-directory", &Vconfigure_prefix_directory /* For internal use by the build procedure only. -configure's idea of what PREFIX-DIRECTORY will be. +configure's idea of what `prefix-directory' will be. */ ); #ifdef PATH_PREFIX Vconfigure_prefix_directory = Ffile_name_as_directory diff -r a8296e22da4e -r 576fb035e263 src/emodules.c --- a/src/emodules.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/emodules.c Mon Aug 13 11:36:19 2007 +0200 @@ -79,7 +79,7 @@ Messages informing you of the progress of the load are displayed unless the variable `load-modules-quietly' is non-NIL. */ - (file,name,version)) + (file, name, version)) { char *mod, *mname, *mver; int speccount = specpdl_depth(); @@ -118,7 +118,7 @@ requested a module to be unloaded, it will be unloaded from memory as soon as the last reference to symbols within the module is destroyed. */ - (file,name,version)) + (file, name, version)) { int x; char *mod, *mname, *mver; diff -r a8296e22da4e -r 576fb035e263 src/eval.c --- a/src/eval.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/eval.c Mon Aug 13 11:36:19 2007 +0200 @@ -67,7 +67,7 @@ #define AV_8(av) AV_7(av), av[7] #define PRIMITIVE_FUNCALL_1(fn, av, ac) \ -(((Lisp_Object (*)(EXFUN_##ac)) (fn)) (AV_##ac (av))) + (((Lisp_Object (*)(EXFUN_##ac)) (fn)) (AV_##ac (av))) /* If subrs take more than 8 arguments, more cases need to be added to this switch. (But wait - don't do it - if you really need @@ -727,7 +727,7 @@ } DEFUN ("cond", Fcond, 0, UNEVALLED, 0, /* -(cond CLAUSES...): try each clause until one succeeds. +\(cond CLAUSES...): try each clause until one succeeds. Each clause looks like (CONDITION BODY...). CONDITION is evaluated and, if the value is non-nil, this clause succeeds: then the expressions in BODY are evaluated and the last one's @@ -1471,12 +1471,12 @@ */ DEFUN ("throw", Fthrow, 2, 2, 0, /* -\(throw TAG VALUE): throw to the catch for TAG and return VALUE from it. +Throw to the catch for TAG and return VALUE from it. Both TAG and VALUE are evalled. */ - (tag, val)) -{ - throw_or_bomb_out (tag, val, 0, Qnil, Qnil); /* Doesn't return */ + (tag, value)) +{ + throw_or_bomb_out (tag, value, 0, Qnil, Qnil); /* Doesn't return */ return Qnil; } @@ -2932,7 +2932,7 @@ The argument KEYS specifies the value to use instead of (this-command-keys) when reading the arguments. */ - (cmd, record, keys)) + (cmd, record_flag, keys)) { /* This function can GC */ Lisp_Object prefixarg; @@ -2967,7 +2967,7 @@ backtrace.debug_on_exit = 0; PUSH_BACKTRACE (backtrace); - final = Fcall_interactively (cmd, record, keys); + final = Fcall_interactively (cmd, record_flag, keys); POP_BACKTRACE (backtrace); return final; @@ -3066,24 +3066,24 @@ /************************************************************************/ DEFUN ("autoload", Fautoload, 2, 5, 0, /* -Define FUNCTION to autoload from FILE. -FUNCTION is a symbol; FILE is a file name string to pass to `load'. -Third arg DOCSTRING is documentation for the function. -Fourth arg INTERACTIVE if non-nil says function can be called interactively. -Fifth arg TYPE indicates the type of the object: +Define FUNCTION to autoload from FILENAME. +FUNCTION is a symbol; FILENAME is a file name string to pass to `load'. +The remaining optional arguments provide additional info about the +real definition. +DOCSTRING is documentation for FUNCTION. +INTERACTIVE, if non-nil, says FUNCTION can be called interactively. +TYPE indicates the type of the object: nil or omitted says FUNCTION is a function, `keymap' says FUNCTION is really a keymap, and `macro' or t says FUNCTION is really a macro. -Third through fifth args give info about the real definition. -They default to nil. -If FUNCTION is already defined other than as an autoload, -this does nothing and returns nil. +If FUNCTION already has a non-void function definition that is not an +autoload object, this function does nothing and returns nil. */ - (function, file, docstring, interactive, type)) + (function, filename, docstring, interactive, type)) { /* This function can GC */ CHECK_SYMBOL (function); - CHECK_STRING (file); + CHECK_STRING (filename); /* If function is defined and not as an autoload, don't override */ { @@ -3095,10 +3095,10 @@ if (purify_flag) { /* Attempt to avoid consing identical (string=) pure strings. */ - file = Fsymbol_name (Fintern (file, Qnil)); + filename = Fsymbol_name (Fintern (filename, Qnil)); } - return Ffset (function, Fcons (Qautoload, list4 (file, + return Ffset (function, Fcons (Qautoload, list4 (filename, docstring, interactive, type))); @@ -3897,7 +3897,7 @@ the given arguments and its return value is returned. If it is a list of functions, those functions are called, in order, with the given arguments ARGS. -It is best not to depend on the value return by `run-hook-with-args', +It is best not to depend on the value returned by `run-hook-with-args', as that may change. To make a hook variable buffer-local, use `make-local-hook', @@ -5103,10 +5103,10 @@ DEFUN ("backtrace", Fbacktrace, 0, 2, "", /* Print a trace of Lisp function calls currently active. Optional arg STREAM specifies the output stream to send the backtrace to, -and defaults to the value of `standard-output'. Optional second arg -DETAILED means show places where currently active variable bindings, -catches, condition-cases, and unwind-protects were made as well as -function calls. +and defaults to the value of `standard-output'. +Optional second arg DETAILED non-nil means show places where currently +active variable bindings, catches, condition-cases, and +unwind-protects, as well as function calls, were made. */ (stream, detailed)) { @@ -5231,8 +5231,8 @@ } -DEFUN ("backtrace-frame", Fbacktrace_frame, 1, 1, "", /* -Return the function and arguments N frames up from current execution point. +DEFUN ("backtrace-frame", Fbacktrace_frame, 1, 1, 0, /* +Return the function and arguments NFRAMES up from current execution point. If that frame has not evaluated the arguments yet (or is a special form), the value is (nil FUNCTION ARG-FORMS...). If that frame has evaluated its arguments and called its function already, @@ -5240,7 +5240,7 @@ A &rest arg is represented as the tail of the list ARG-VALUES. FUNCTION is whatever was supplied as car of evaluated list, or a lambda expression for macro calls. -If N is more than the number of frames, the value is nil. +If NFRAMES is more than the number of frames, the value is nil. */ (nframes)) { diff -r a8296e22da4e -r 576fb035e263 src/event-Xt.c --- a/src/event-Xt.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/event-Xt.c Mon Aug 13 11:36:19 2007 +0200 @@ -687,20 +687,29 @@ { /* Not a modifier key */ Bool key_event_p = (type == KeyPress || type == KeyRelease); - if (type == KeyPress && !xd->last_downkey) - xd->last_downkey = keycode; - else if (type == ButtonPress || - (type == KeyPress && xd->last_downkey && - (keycode != xd->last_downkey || - ev->xkey.time != xd->release_time))) + if (type == ButtonPress + || (type == KeyPress + && ((xd->last_downkey + && ((keycode != xd->last_downkey + || ev->xkey.time != xd->release_time))) + || (INTP (Vmodifier_keys_sticky_time) + && ev->xkey.time + > (xd->modifier_release_time + + XINT (Vmodifier_keys_sticky_time)))))) { xd->need_to_add_mask = 0; xd->last_downkey = 0; } + else if (type == KeyPress && !xd->last_downkey) + xd->last_downkey = keycode; + if (type == KeyPress) xd->release_time = 0; if (type == KeyPress || type == ButtonPress) - xd->down_mask = 0; + { + xd->down_mask = 0; + xd->modifier_release_time = 0; + } if (key_event_p) ev->xkey.state |= xd->need_to_add_mask; @@ -722,7 +731,8 @@ So we assume that if the release and the next press occur at the same time, the key was actually auto- repeated. Under Open-Windows, at least, this works. */ - xd->release_time = key_event_p ? ev->xkey.time : ev->xbutton.time; + xd->modifier_release_time = xd->release_time + = key_event_p ? ev->xkey.time : ev->xbutton.time; } else /* Modifier key pressed */ { @@ -742,6 +752,15 @@ xd->need_to_add_mask = 0; } + if (xd->modifier_release_time + && INTP (Vmodifier_keys_sticky_time) + && (ev->xkey.time + > xd->modifier_release_time + XINT (Vmodifier_keys_sticky_time))) + { + xd->need_to_add_mask = 0; + xd->down_mask = 0; + } + #define FROB(mask) \ do { \ if (type == KeyPress) \ @@ -767,6 +786,7 @@ xd->need_to_add_mask |= mask; \ } \ } \ + xd->modifier_release_time = ev->xkey.time; \ } while (0) for (i = 0; i < xd->x_keysym_map_keysyms_per_code; i++) diff -r a8296e22da4e -r 576fb035e263 src/event-msw.c --- a/src/event-msw.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/event-msw.c Mon Aug 13 11:36:19 2007 +0200 @@ -1276,6 +1276,8 @@ { char class_name_buf [sizeof (XEMACS_CLASS) + 2] = ""; + /* Don't translate messages destined for a dialog box, this + makes keyboard traversal work. I think?? */ if (mswindows_is_dialog_msg (&msg)) { mswindows_unmodalize_signal_maybe (); @@ -2792,6 +2794,8 @@ case CBN_SELCHANGE: if (!NILP (mswindows_handle_gui_wm_command (frame, cid, id))) return 0; + case BN_SETFOCUS: + } /* menubars always must come last since the hashtables do not always exist*/ diff -r a8296e22da4e -r 576fb035e263 src/event-stream.c --- a/src/event-stream.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/event-stream.c Mon Aug 13 11:36:19 2007 +0200 @@ -52,8 +52,6 @@ /* TODO: This stuff is way too hard to maintain - needs rework. - C-x @ h x causes a crash. - The command builder should deal only with key and button events. Other command events should be able to come in the MIDDLE of a key sequence, without disturbing the key sequence composition, or the @@ -121,23 +119,19 @@ /* Control gratuitous keyboard focus throwing. */ int focus_follows_mouse; +/* When true, modifier keys are sticky. */ int modifier_keys_are_sticky; - -#if 0 /* FSF Emacs crap */ -/* Hook run after a command if there's no more input soon. */ -Lisp_Object Qpost_command_idle_hook, Vpost_command_idle_hook; - -/* Delay time in microseconds before running post-command-idle-hook. */ -int post_command_idle_delay; - -/* List of deferred actions to be performed at a later time. - The precise format isn't relevant here; we just check whether it is nil. */ -Lisp_Object Vdeferred_action_list; - -/* Function to call to handle deferred actions, when there are any. */ -Lisp_Object Vdeferred_action_function; -Lisp_Object Qdeferred_action_function; -#endif /* FSF Emacs crap */ +/* Modifier keys are sticky for this many milliseconds. */ +Lisp_Object Vmodifier_keys_sticky_time; + +/* Here FSF Emacs 20.7 defines Vpost_command_idle_hook, + post_command_idle_delay, Vdeferred_action_list, and + Vdeferred_action_function, but we don't because that stuff is crap, + and we're smarter than them, and their momas are fat. */ + +/* FSF Emacs 20.7 also defines Vinput_method_function, + Qinput_method_exit_on_first_char and Qinput_method_use_echo_area. + I don't know this should be imported or not. */ /* Non-nil disable property on a command means do not execute it; call disabled-command-hook's value instead. */ @@ -502,15 +496,7 @@ Let's hope it doesn't. I think the code here is fairly clean and doesn't do this. */ emacs_is_blocking = 1; -#if 0 - /* Do this if the poll-for-quit timer seems to be taking too - much CPU time when idle ... */ - reset_poll_for_quit (); -#endif event_stream->next_event_cb (event); -#if 0 - init_poll_for_quit (); -#endif emacs_is_blocking = 0; #ifdef DEBUG_XEMACS @@ -798,7 +784,8 @@ keystrokes_since_auto_save is equivalent to the difference between num_nonmacro_input_chars and last_auto_save. */ -/* When an auto-save happens, record the "time", and don't do again soon. */ +/* When an auto-save happens, record the number of keystrokes, and + don't do again soon. */ void record_auto_save (void) @@ -812,10 +799,6 @@ force_auto_save_soon (void) { keystrokes_since_auto_save = 1 + max (auto_save_interval, 20); - -#if 0 /* FSFmacs */ - record_asynch_buffer_change (); -#endif } static void @@ -1695,19 +1678,6 @@ static void run_deselect_frame_hook (void) { -#if 0 /* unclean! FSF calls this at all sorts of random places, - including a bunch of places in their mouse.el. If this - is implemented, it has to be done cleanly. */ - run_hook (Qmouse_leave_buffer_hook); /* #### Correct? It's also - called in `call-interactively'. - Does this mean it will be - called twice? Oh well, FSF - bug -- FSF calls it in - `handle-switch-frame', - which is approximately the - same as the caller of this - function. */ -#endif run_hook (Qdeselect_frame_hook); } @@ -2684,11 +2654,11 @@ } DEFUN ("sleep-for", Fsleep_for, 1, 1, 0, /* -Pause, without updating display, for ARG seconds. -ARG may be a float, meaning pause for some fractional part of a second. +Pause, without updating display, for SECONDS seconds. +SECONDS may be a float, allowing pauses for fractional parts of a second. It is recommended that you never call sleep-for from inside of a process - filter function or timer event (either synchronous or asynchronous). +filter function or timer event (either synchronous or asynchronous). */ (seconds)) { @@ -2751,9 +2721,9 @@ } DEFUN ("sit-for", Fsit_for, 1, 2, 0, /* -Perform redisplay, then wait ARG seconds or until user input is available. -ARG may be a float, meaning a fractional part of a second. -Optional second arg non-nil means don't redisplay, just wait for input. +Perform redisplay, then wait SECONDS seconds or until user input is available. +SECONDS may be a float, meaning a fractional part of a second. +Optional second arg NODISPLAY non-nil means don't redisplay; just wait. Redisplay is preempted as always if user input arrives, and does not happen if input is available before it starts. Value is t if waited the full time with no input arriving. @@ -3795,7 +3765,10 @@ struct gcpro gcpro1; GCPRO1 (event); /* event may be freshly created */ - reset_current_events (command_builder); + + /* To fix C-x @ h x crash. */ + if (XEVENT (event)->event_type != misc_user_event) + reset_current_events (command_builder); switch (XEVENT (event)->event_type) { @@ -3862,17 +3835,15 @@ post_command_hook (); -#if 0 /* #### here was an attempted fix that didn't work */ - if (XEVENT (event)->event_type == misc_user_event) - ; - else -#endif if (!NILP (con->prefix_arg)) { /* Commands that set the prefix arg don't update last-command, don't reset the echoing state, and don't go into keyboard macros unless - followed by another command. */ + followed by another command. Also don't quit here. */ + int speccount = specpdl_depth (); + specbind (Qinhibit_quit, Qt); maybe_echo_keys (command_builder, 0); + unbind_to (speccount, Qnil); /* If we're recording a keyboard macro, and the last command executed set a prefix argument, then decrement the pointer to @@ -3891,7 +3862,8 @@ /* Emacs 18 doesn't unconditionally clear the echoed keystrokes, so we don't either */ - reset_this_command_keys (make_console (con), 0); + if (XEVENT (event)->event_type != misc_user_event) + reset_this_command_keys (make_console (con), 0); } } @@ -3955,34 +3927,6 @@ ("Error in `post-command-hook' (setting hook to nil)", Qpost_command_hook, 1); -#if 0 /* FSF Emacs crap */ - if (!NILP (Vdeferred_action_list)) - call0 (Vdeferred_action_function); - - if (NILP (Vunread_command_events) - && NILP (Vexecuting_macro) - && !NILP (Vpost_command_idle_hook) - && !NILP (Fsit_for (make_float ((double) post_command_idle_delay - / 1000000), Qnil))) - safe_run_hook_trapping_errors - ("Error in `post-command-idle-hook' (setting hook to nil)", - Qpost_command_idle_hook, 1); -#endif /* FSF Emacs crap */ - -#if 0 /* FSF Emacs */ - if (!NILP (current_buffer->mark_active)) - { - if (!NILP (Vdeactivate_mark) && !NILP (Vtransient_mark_mode)) - { - current_buffer->mark_active = Qnil; - run_hook (intern ("deactivate-mark-hook")); - } - else if (current_buffer != prev_buffer || - BUF_MODIFF (current_buffer) != prev_modiff) - run_hook (intern ("activate-mark-hook")); - } -#endif /* FSF Emacs */ - /* #### Kludge!!! This is necessary to make sure that things are properly positioned even if post-command-hook moves point. #### There should be a cleaner way of handling this. */ @@ -3991,7 +3935,7 @@ DEFUN ("dispatch-event", Fdispatch_event, 1, 1, 0, /* -Given an event object as returned by `next-event', execute it. +Given an event object EVENT as returned by `next-event', execute it. Key-press, button-press, and button-release events get accumulated until a complete key sequence (see `read-key-sequence') is reached, @@ -4161,13 +4105,6 @@ command_builder->self_insert_countdown = 0; if (NILP (XCONSOLE (console)->prefix_arg) && NILP (Vexecuting_macro) -#if 0 - /* This was done in the days when there was no undo - in the minibuffer. If we don't disable this code, - then each instance of "undo" undoes everything in - the minibuffer. */ - && !EQ (minibuf_window, Fselected_window (Qnil)) -#endif && command_builder->self_insert_countdown == 0) Fundo_boundary (); @@ -4178,13 +4115,13 @@ } execute_command_event (command_builder, - internal_equal (event, command_builder-> most_current_event, 0) + internal_equal (event, command_builder->most_current_event, 0) ? event /* Use the translated event that was most recently seen. This way, last-command-event becomes f1 instead of the P from ESC O P. But we must copy it, else we'll lose when the command-builder events are deallocated. */ - : Fcopy_event (command_builder-> most_current_event, Qnil)); + : Fcopy_event (command_builder->most_current_event, Qnil)); } break; } @@ -4239,7 +4176,7 @@ DEFUN ("read-key-sequence", Fread_key_sequence, 1, 3, 0, /* Read a sequence of keystrokes or mouse clicks. Returns a vector of the event objects read. The vector and the event -objects it contains are freshly created (and will not be side-effected +objects it contains are freshly created (and so will not be side-effected by subsequent calls to this function). The sequence read is sufficient to specify a non-prefix command starting @@ -4247,19 +4184,17 @@ function is treated like any other character, and `quit-flag' is not set. First arg PROMPT is a prompt string. If nil, do not prompt specially. -Second (optional) arg CONTINUE-ECHO, if non-nil, means this key echoes -as a continuation of the previous key. - -The third (optional) arg DONT-DOWNCASE-LAST, if non-nil, means do not -convert the last event to lower case. (Normally any upper case event -is converted to lower case if the original event is undefined and the lower -case equivalent is defined.) This argument is provided mostly for -FSF compatibility; the equivalent effect can be achieved more generally -by binding `retry-undefined-key-binding-unshifted' to nil around the -call to `read-key-sequence'. - -A C-g typed while in this function is treated like any other character, -and `quit-flag' is not set. + +Second optional arg CONTINUE-ECHO non-nil means this key echoes as a +continuation of the previous key. + +Third optional arg DONT-DOWNCASE-LAST non-nil means do not convert the +last event to lower case. (Normally any upper case event is converted +to lower case if the original event is undefined and the lower case +equivalent is defined.) This argument is provided mostly for FSF +compatibility; the equivalent effect can be achieved more generally by +binding `retry-undefined-key-binding-unshifted' to nil around the call +to `read-key-sequence'. If the user selects a menu item while we are prompting for a key-sequence, the returned value will be a vector of a single menu-selection event. @@ -4267,8 +4202,8 @@ related function. `read-key-sequence' checks `function-key-map' for function key -sequences, where they wouldn't conflict with ordinary bindings. See -`function-key-map' for more details. +sequences, where they wouldn't conflict with ordinary bindings. +See `function-key-map' for more details. */ (prompt, continue_echo, dont_downcase_last)) { @@ -4404,10 +4339,10 @@ DEFUN ("open-dribble-file", Fopen_dribble_file, 1, 1, "FOpen dribble file: ", /* -Start writing all keyboard characters to a dribble file called FILE. -If FILE is nil, close any open dribble file. +Start writing all keyboard characters to a dribble file called FILENAME. +If FILENAME is nil, close any open dribble file. */ - (file)) + (filename)) { /* This function can GC */ /* XEmacs change: always close existing dribble file. */ @@ -4417,12 +4352,12 @@ Lstream_close (XLSTREAM (Vdribble_file)); Vdribble_file = Qnil; } - if (!NILP (file)) + if (!NILP (filename)) { int fd; - file = Fexpand_file_name (file, Qnil); - fd = open ((char*) XSTRING_DATA (file), + filename = Fexpand_file_name (filename, Qnil); + fd = open ((char*) XSTRING_DATA (filename), O_WRONLY | O_TRUNC | O_CREAT | OPEN_BINARY, CREAT_MODE); if (fd < 0) @@ -4500,10 +4435,6 @@ defsymbol (&Qpre_idle_hook, "pre-idle-hook"); defsymbol (&Qhandle_pre_motion_command, "handle-pre-motion-command"); defsymbol (&Qhandle_post_motion_command, "handle-post-motion-command"); -#if 0 /* FSF Emacs crap */ - defsymbol (&Qpost_command_idle_hook, "post-command-idle-hook"); - defsymbol (&Qdeferred_action_function, "deferred-action-function"); -#endif defsymbol (&Qretry_undefined_key_binding_unshifted, "retry-undefined-key-binding-unshifted"); defsymbol (&Qauto_show_make_point_visible, @@ -4602,41 +4533,6 @@ */ ); focus_follows_mouse = 0; -#if 0 /* FSF Emacs crap */ - /* Ill-conceived because it's not run in all sorts of cases - where XEmacs is blocking. That's what `pre-idle-hook' - is designed to solve. */ - xxDEFVAR_LISP ("post-command-idle-hook", &Vpost_command_idle_hook /* -Normal hook run after each command is executed, if idle. -`post-command-idle-delay' specifies a time in microseconds that XEmacs -must be idle for in order for the functions on this hook to be called. -Errors running the hook are caught and ignored. -*/ ); - Vpost_command_idle_hook = Qnil; - - xxDEFVAR_INT ("post-command-idle-delay", &post_command_idle_delay /* -Delay time before running `post-command-idle-hook'. -This is measured in microseconds. -*/ ); - post_command_idle_delay = 5000; - - /* Random FSFmacs crap. There is absolutely nothing to gain, - and a great deal to lose, in using this in place of just - setting `post-command-hook'. */ - xxDEFVAR_LISP ("deferred-action-list", &Vdeferred_action_list /* -List of deferred actions to be performed at a later time. -The precise format isn't relevant here; we just check whether it is nil. -*/ ); - Vdeferred_action_list = Qnil; - - xxDEFVAR_LISP ("deferred-action-function", &Vdeferred_action_function /* -Function to call to handle deferred actions, after each command. -This function is called with no arguments after each command -whenever `deferred-action-list' is non-nil. -*/ ); - Vdeferred_action_function = Qnil; -#endif /* FSF Emacs crap */ - DEFVAR_LISP ("last-command-event", &Vlast_command_event /* Last keyboard or mouse button event that was part of a command. This variable is off limits: you may not set its value or modify the event that @@ -4815,9 +4711,22 @@ the key that you wish to be modified. Although this is non-standard behavior, it is recommended because it reduces the strain on your hand, thus reducing the incidence of the dreaded Emacs-pinky syndrome. + +Modifier keys are sticky within the inverval specified by +`modifier-keys-sticky-time'. */ ); modifier_keys_are_sticky = 0; + DEFVAR_LISP ("modifier-keys-sticky-time", &Vmodifier_keys_sticky_time /* +*Modifier keys are sticky within this many milliseconds. +If you don't want modifier keys sticking to be bounded, set this to +non-integer value. + +This variable has no effect when `modifier-keys-are-sticky' is nil. +Currently only implemented under X Window System. +*/ ); + Vmodifier_keys_sticky_time = make_int (500); + #ifdef HAVE_XIM DEFVAR_LISP ("composed-character-default-binding", &Vcomposed_character_default_binding /* @@ -4936,20 +4845,23 @@ (global-set-key "\^Q" 'foo) without the read-key-sequence: - ^Q ==> (65 17 65 [... ^Q] [^Q]) - ^U^U^Q ==> (65 17 65 [... ^U ^U ^Q] [^U ^U ^Q]) - ^U^U^U^G^Q ==> (65 17 65 [... ^U ^U ^U ^G ^Q] [^Q]) + ^Q ==> (?A ?\^Q ?A [... ^Q] [^Q]) + ^U^U^Q ==> (?A ?\^Q ?A [... ^U ^U ^Q] [^U ^U ^Q]) + ^U^U^U^G^Q ==> (?A ?\^Q ?A [... ^U ^U ^U ^G ^Q] [^Q]) with the read-key-sequence: - ^Qb ==> (65 [b] 17 98 [... ^Q b] [b]) - ^U^U^Qb ==> (65 [b] 17 98 [... ^U ^U ^Q b] [b]) - ^U^U^U^G^Qb ==> (65 [b] 17 98 [... ^U ^U ^U ^G ^Q b] [b]) + ^Qb ==> (?A [b] ?\^Q ?b [... ^Q b] [b]) + ^U^U^Qb ==> (?A [b] ?\^Q ?b [... ^U ^U ^Q b] [b]) + ^U^U^U^G^Qb ==> (?A [b] ?\^Q ?b [... ^U ^U ^U ^G ^Q b] [b]) ;the evi-mode command "4dlj.j.j.j.j.j." is also a good testcase (gag) ;(setq x (list (read-char) quit-flag))^J^G ;(let ((inhibit-quit t)) (setq x (list (read-char) quit-flag)))^J^G ;for BOTH, x should get set to (7 t), but no result should be printed. +;; #### According to the doc of quit-flag, second test should return +;; (?\^G nil). Accidentaly XEmacs returns correct value. However, +;; XEmacs 21.1.12 and 21.2.36 both fails on first test. ;also do this: make two frames, one viewing "*scratch*", the other "foo". ;in *scratch*, type (sit-for 20)^J @@ -4969,9 +4881,9 @@ (quit c)) (read-char))) - (tst)^Ja^G ==> ((quit) 97) with no signal - (tst)^J^Ga ==> ((quit) 97) with no signal - (tst)^Jabc^G ==> ((quit) 97) with no signal, and "bc" inserted in buffer + (tst)^Ja^G ==> ((quit) ?a) with no signal + (tst)^J^Ga ==> ((quit) ?a) with no signal + (tst)^Jabc^G ==> ((quit) ?a) with no signal, and "bc" inserted in buffer ; with sit-for only do the 2nd test. ; Do all 3 tests with (accept-process-output nil 20) diff -r a8296e22da4e -r 576fb035e263 src/events.c --- a/src/events.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/events.c Mon Aug 13 11:36:19 2007 +0200 @@ -762,11 +762,11 @@ } DEFUN ("copy-event", Fcopy_event, 1, 2, 0, /* -Make a copy of the given event object. -If a second argument is given, the first event is copied into the second -and the second is returned. If the second argument is not supplied (or -is nil) then a new event will be made as with `make-event'. See also -the function `deallocate-event'. +Make a copy of the event object EVENT1. +If a second event argument EVENT2 is given, EVENT1 is copied into +EVENT2 and EVENT2 is returned. If EVENT2 is not supplied (or is nil) +then a new event will be made as with `make-event'. See also the +function `deallocate-event'. */ (event1, event2)) { @@ -1145,46 +1145,48 @@ } DEFUN ("character-to-event", Fcharacter_to_event, 1, 4, 0, /* -Convert keystroke CH into an event structure ,replete with bucky bits. -The keystroke is the first argument, and the event to fill -in is the second. This function contains knowledge about what the codes -``mean'' -- for example, the number 9 is converted to the character ``Tab'', -not the distinct character ``Control-I''. +Convert KEY-DESCRIPTION into an event structure, replete with bucky bits. -Note that CH (the keystroke specifier) can be an integer, a character, -a symbol such as 'clear, or a list such as '(control backspace). +KEY-DESCRIPTION is the first argument, and the event to fill in is the +second. This function contains knowledge about what various kinds of +arguments ``mean'' -- for example, the number 9 is converted to the +character ``Tab'', not the distinct character ``Control-I''. -If the optional second argument is an event, it is modified; -otherwise, a new event object is created. +KEY-DESCRIPTION can be an integer, a character, a symbol such as 'clear, +or a list such as '(control backspace). + +If the optional second argument EVENT is an event, it is modified and +returned; otherwise, a new event object is created and returned. Optional third arg CONSOLE is the console to store in the event, and defaults to the selected console. -If CH is an integer or character, the high bit may be interpreted as the -meta key. (This is done for backward compatibility in lots of places.) -If USE-CONSOLE-META-FLAG is nil, this will always be the case. If -USE-CONSOLE-META-FLAG is non-nil, the `meta' flag for CONSOLE affects -whether the high bit is interpreted as a meta key. (See `set-input-mode'.) -If you don't want this silly meta interpretation done, you should pass -in a list containing the character. +If KEY-DESCRIPTION is an integer or character, the high bit may be +interpreted as the meta key. (This is done for backward compatibility +in lots of places.) If USE-CONSOLE-META-FLAG is nil, this will always +be the case. If USE-CONSOLE-META-FLAG is non-nil, the `meta' flag for +CONSOLE affects whether the high bit is interpreted as a meta +key. (See `set-input-mode'.) If you don't want this silly meta +interpretation done, you should pass in a list containing the +character. Beware that character-to-event and event-to-character are not strictly inverse functions, since events contain much more information than the -ASCII character set can encode. +Lisp character object type can encode. */ - (ch, event, console, use_console_meta_flag)) + (keystroke, event, console, use_console_meta_flag)) { struct console *con = decode_console (console); if (NILP (event)) event = Fmake_event (Qnil, Qnil); else CHECK_LIVE_EVENT (event); - if (CONSP (ch) || SYMBOLP (ch)) - key_desc_list_to_event (ch, event, 1); + if (CONSP (keystroke) || SYMBOLP (keystroke)) + key_desc_list_to_event (keystroke, event, 1); else { - CHECK_CHAR_COERCE_INT (ch); - character_to_event (XCHAR (ch), XEVENT (event), con, + CHECK_CHAR_COERCE_INT (keystroke); + character_to_event (XCHAR (keystroke), XEVENT (event), con, !NILP (use_console_meta_flag), 1); } return event; @@ -1527,7 +1529,7 @@ } DEFUN ("event-button", Fevent_button, 1, 1, 0, /* -Return the button-number of the given button-press or button-release event. +Return the button-number of the button-press or button-release event EVENT. */ (event)) { @@ -2122,7 +2124,7 @@ } DEFUN ("event-process", Fevent_process, 1, 1, 0, /* -Return the process of the given process-output event. +Return the process of the process-output event EVENT. */ (event)) { diff -r a8296e22da4e -r 576fb035e263 src/events.h --- a/src/events.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/events.h Mon Aug 13 11:36:19 2007 +0200 @@ -533,6 +533,7 @@ extern Lisp_Object QKbackspace, QKdelete, QKescape, QKlinefeed, QKreturn; extern Lisp_Object QKspace, QKtab, Qmouse_event_p, Vcharacter_set_property; extern Lisp_Object Qcancel_mode_internal; +extern Lisp_Object Vmodifier_keys_sticky_time; /* Note: under X Windows, XEMACS_MOD_ALT is generated by the Alt key if there are both Alt and Meta keys. If there are no Meta keys, then Alt generates diff -r a8296e22da4e -r 576fb035e263 src/extents.c --- a/src/extents.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/extents.c Mon Aug 13 11:36:19 2007 +0200 @@ -3426,7 +3426,7 @@ Return the next position after POS where an extent begins or ends. If POS is at the end of the buffer or string, POS will be returned; otherwise a position greater than POS will always be returned. -If BUFFER is nil, the current buffer is assumed. +If OBJECT is nil, the current buffer is assumed. */ (pos, object)) { @@ -4916,7 +4916,7 @@ /* Do we need a lisp-level function ? */ DEFUN ("set-extent-initial-redisplay-function", Fset_extent_initial_redisplay_function, - 2,2,0,/* + 2,2,0, /* Note: This feature is experimental! Set initial-redisplay-function of EXTENT to the function @@ -5437,6 +5437,7 @@ DEFUN ("extent-property", Fextent_property, 2, 3, 0, /* Return EXTENT's value for property PROPERTY. +If no such property exists, DEFAULT is returned. See `set-extent-property' for the built-in property names. */ (extent, property, default_)) @@ -6596,7 +6597,7 @@ argument OBJECT is the buffer or string to scan (defaults to the current buffer). The property values are compared with `eq'. -Return nil if the property is constant all the way to the end of BUFFER. +Return nil if the property is constant all the way to the end of OBJECT. If the value is non-nil, it is a position greater than POS, never equal. If the optional fourth argument LIMIT is non-nil, don't search @@ -6663,7 +6664,7 @@ argument OBJECT is the buffer or string to scan (defaults to the current buffer). The property values are compared with `eq'. -Return nil if the property is constant all the way to the start of BUFFER. +Return nil if the property is constant all the way to the start of OBJECT. If the value is non-nil, it is a position less than POS, never equal. If the optional fourth argument LIMIT is non-nil, don't search back diff -r a8296e22da4e -r 576fb035e263 src/faces.c --- a/src/faces.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/faces.c Mon Aug 13 11:36:19 2007 +0200 @@ -596,7 +596,7 @@ DEFUN ("facep", Ffacep, 1, 1, 0, /* -Return non-nil if OBJECT is a face. +Return t if OBJECT is a face. */ (object)) { @@ -762,8 +762,8 @@ } DEFUN ("make-face", Fmake_face, 1, 3, 0, /* -Define and return a new FACE described by DOC-STRING. -You can modify the font, color, etc of a face with the set-face-* functions. +Define a new face with name NAME (a symbol), described by DOC-STRING. +You can modify the font, color, etc. of a face with the set-face-* functions. If the face already exists, it is unmodified. If TEMPORARY is non-nil, this face will cease to exist if not in use. */ @@ -1575,7 +1575,16 @@ findex = get_builtin_face_cache_index (w, Vdefault_face); merge_face_cachel_data (w, findex, &cachel); - return get_merged_face_cache_index (w, &cachel); + findex = get_merged_face_cache_index (w, &cachel); + if (cachel.merged_faces && + /* merged_faces did not get stored and available via return value */ + Dynarr_at (w->face_cachels, findex).merged_faces != + cachel.merged_faces) + { + Dynarr_free (cachel.merged_faces); + cachel.merged_faces = 0; + } + return findex; } } diff -r a8296e22da4e -r 576fb035e263 src/file-coding.c --- a/src/file-coding.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/file-coding.c Mon Aug 13 11:36:19 2007 +0200 @@ -176,68 +176,47 @@ #ifdef MULE struct detection_state; static int detect_coding_sjis (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_sjis (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); -static void encode_coding_sjis (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_sjis (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_sjis (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int detect_coding_big5 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_big5 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_big5 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_big5 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_big5 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int detect_coding_ucs4 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_ucs4 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_ucs4 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_ucs4 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_ucs4 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int detect_coding_utf8 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_utf8 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_utf8 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_utf8 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_utf8 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int postprocess_iso2022_mask (int mask); static void reset_iso2022 (Lisp_Object coding_system, struct iso2022_decoder *iso); static int detect_coding_iso2022 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_iso2022 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_iso2022 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_iso2022 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_iso2022 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); #endif /* MULE */ -static void decode_coding_no_conversion (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); -static void encode_coding_no_conversion (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); -static void mule_decode (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void mule_encode (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); +static void decode_coding_no_conversion (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_no_conversion (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void mule_decode (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void mule_encode (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); typedef struct codesys_prop codesys_prop; struct codesys_prop @@ -789,12 +768,12 @@ 'post-read-conversion Function called after a file has been read in, to perform the - decoding. Called with two arguments, BEG and END, denoting + decoding. Called with two arguments, START and END, denoting a region of the current buffer to be decoded. 'pre-write-conversion Function called before a file is written out, to perform the - encoding. Called with two arguments, BEG and END, denoting + encoding. Called with two arguments, START and END, denoting a region of the current buffer to be encoded. @@ -983,18 +962,42 @@ } else if (EQ (type, Qccl)) { + Lisp_Object sym; + struct ccl_program test_ccl; + Extbyte *suffix; + + /* Check key first. */ if (EQ (key, Qdecode)) + suffix = "-ccl-decode"; + else if (EQ (key, Qencode)) + suffix = "-ccl-encode"; + else + signal_simple_error ("Unrecognized property", key); + + /* If value is vector, register it as a ccl program + associated with an newly created symbol for + backward compatibility. */ + if (VECTORP (value)) { - CHECK_VECTOR (value); - CODING_SYSTEM_CCL_DECODE (codesys) = value; - } - else if (EQ (key, Qencode)) - { - CHECK_VECTOR (value); - CODING_SYSTEM_CCL_ENCODE (codesys) = value; + sym = Fintern (concat2 (Fsymbol_name (name), + build_string (suffix)), + Qnil); + Fregister_ccl_program (sym, value); } else - signal_simple_error ("Unrecognized property", key); + { + CHECK_SYMBOL (value); + sym = value; + } + /* check if the given ccl programs are valid. */ + if (setup_ccl_program (&test_ccl, sym) < 0) + signal_simple_error ("Invalid CCL program", value); + + if (EQ (key, Qdecode)) + CODING_SYSTEM_CCL_DECODE (codesys) = sym; + else if (EQ (key, Qencode)) + CODING_SYSTEM_CCL_ENCODE (codesys) = sym; + } #endif /* MULE */ else @@ -1628,14 +1631,12 @@ } static eol_type_t -detect_eol_type (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_eol_type (struct detection_state *st, const Extbyte *src, + size_t n) { - int c; - while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (c == '\n') { if (st->eol.just_saw_cr) @@ -1674,10 +1675,8 @@ static int detect_coding_type (struct detection_state *st, const Extbyte *src, - unsigned int n, int just_do_eol) + size_t n, int just_do_eol) { - int c; - if (st->eol_type == EOL_AUTODETECT) st->eol_type = detect_eol_type (st, src, n); @@ -1688,7 +1687,7 @@ { for (; n; n--, src++) { - c = *src; + unsigned char c = *(unsigned char *) src; if ((c < 0x20 && !acceptable_control_char_p (c)) || c >= 0x80) { st->seen_non_ascii = 1; @@ -1914,8 +1913,8 @@ DEFUN ("detect-coding-region", Fdetect_coding_region, 2, 3, 0, /* Detect coding system of the text in the region between START and END. -Returned a list of possible coding systems ordered by priority. -If only ASCII characters are found, it returns 'undecided or one of +Return a list of possible coding systems ordered by priority. +If only ASCII characters are found, return 'undecided or one of its subsidiary coding systems according to a detected end-of-line type. Optional arg BUFFER defaults to the current buffer. */ @@ -1940,7 +1939,7 @@ decst.mask = ~0; while (1) { - unsigned char random_buffer[4096]; + Extbyte random_buffer[4096]; ssize_t nread = Lstream_read (istr, random_buffer, sizeof (random_buffer)); if (!nread) @@ -2196,7 +2195,7 @@ /* There might be some more end data produced in the translation. See the comment above. */ str->flags |= CODING_STATE_END; - mule_decode (stream, data, str->runoff, read_size); + mule_decode (stream, (Extbyte *) data, str->runoff, read_size); } if (data - orig_data == 0) @@ -2214,7 +2213,7 @@ /* Decode all our data into the runoff, and then attempt to write it all out to the other end. Remove whatever chunk we succeeded in writing. */ - mule_decode (stream, data, str->runoff, size); + mule_decode (stream, (Extbyte *) data, str->runoff, size); retval = Lstream_write (str->other_end, Dynarr_atp (str->runoff, 0), Dynarr_length (str->runoff)); if (retval > 0) @@ -2366,8 +2365,8 @@ be used for both reading and writing. */ static void -mule_decode (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +mule_decode (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); @@ -2431,7 +2430,10 @@ break; case CODESYS_CCL: str->ccl.last_block = str->flags & CODING_STATE_END; - ccl_driver (&str->ccl, src, dst, n, 0, CCL_MODE_DECODING); + /* When applying ccl program to stream, MUST NOT set NULL + pointer to src. */ + ccl_driver (&str->ccl, (src ? (unsigned char *)src : (unsigned char*)""), + dst, n, 0, CCL_MODE_DECODING); break; case CODESYS_ISO2022: decode_coding_iso2022 (decoding, src, dst, n); @@ -2810,8 +2812,8 @@ Store the encoded data into DST. */ static void -mule_encode (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +mule_encode (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); @@ -2843,7 +2845,10 @@ break; case CODESYS_CCL: str->ccl.last_block = str->flags & CODING_STATE_END; - ccl_driver (&str->ccl, src, dst, n, 0, CCL_MODE_ENCODING); + /* When applying ccl program to stream, MUST NOT set NULL + pointer to src. */ + ccl_driver (&str->ccl, ((src) ? src : (unsigned char*)""), + dst, n, 0, CCL_MODE_ENCODING); break; case CODESYS_ISO2022: encode_coding_iso2022 (encoding, src, dst, n); @@ -2957,14 +2962,11 @@ ((c) >= 0xA1 && (c) <= 0xDF) static int -detect_coding_sjis (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_sjis (struct detection_state *st, const Extbyte *src, size_t n) { - int c; - while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO) return 0; if (st->shift_jis.in_second_byte) @@ -2982,10 +2984,9 @@ /* Convert Shift-JIS data to internal format. */ static void -decode_coding_sjis (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_sjis (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -2993,7 +2994,7 @@ while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (ch) { @@ -3039,10 +3040,9 @@ /* Convert internally-formatted data to Shift-JIS. */ static void -encode_coding_sjis (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_sjis (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -3050,7 +3050,7 @@ while (n--) { - c = *src++; + Bufbyte c = *src++; if (c == '\n') { if (eol_type != EOL_LF && eol_type != EOL_AUTODETECT) @@ -3119,16 +3119,16 @@ } DEFUN ("encode-shift-jis-char", Fencode_shift_jis_char, 1, 1, 0, /* -Encode a JISX0208 character CHAR to SHIFT-JIS coding-system. +Encode a JISX0208 character CHARACTER to SHIFT-JIS coding-system. Return the corresponding character code in SHIFT-JIS as a cons of two bytes. */ - (ch)) + (character)) { Lisp_Object charset; int c1, c2, s1, s2; - CHECK_CHAR_COERCE_INT (ch); - BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); + CHECK_CHAR_COERCE_INT (character); + BREAKUP_CHAR (XCHAR (character), charset, c1, c2); if (EQ (charset, Vcharset_japanese_jisx0208)) { ENCODE_SJIS (c1 | 0x80, c2 | 0x80, s1, s2); @@ -3243,14 +3243,11 @@ } while (0) static int -detect_coding_big5 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_big5 (struct detection_state *st, const Extbyte *src, size_t n) { - int c; - while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO || (c >= 0x80 && c <= 0xA0)) return 0; @@ -3269,10 +3266,9 @@ /* Convert Big5 data to internal format. */ static void -decode_coding_big5 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_big5 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -3280,7 +3276,7 @@ while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (ch) { /* Previous character was first byte of Big5 char. */ @@ -3319,8 +3315,8 @@ /* Convert internally-formatted data to Big5. */ static void -encode_coding_big5 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_big5 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { unsigned char c; struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); @@ -3407,16 +3403,16 @@ } DEFUN ("encode-big5-char", Fencode_big5_char, 1, 1, 0, /* -Encode the Big5 character CH to BIG5 coding-system. +Encode the Big5 character CHARACTER in the BIG5 coding-system. Return the corresponding character code in Big5. */ - (ch)) + (character)) { Lisp_Object charset; int c1, c2, b1, b2; - CHECK_CHAR_COERCE_INT (ch); - BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); + CHECK_CHAR_COERCE_INT (character); + BREAKUP_CHAR (XCHAR (character), charset, c1, c2); if (EQ (charset, Vcharset_chinese_big5_1) || EQ (charset, Vcharset_chinese_big5_2)) { @@ -3586,12 +3582,11 @@ } static int -detect_coding_ucs4 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_ucs4 (struct detection_state *st, const Extbyte *src, size_t n) { while (n--) { - int c = *src++; + unsigned char c = *(unsigned char *)src++; switch (st->ucs4.in_byte) { case 0: @@ -3611,8 +3606,8 @@ } static void -decode_coding_ucs4 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_ucs4 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; @@ -3621,7 +3616,7 @@ while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; switch (counter) { case 0: @@ -3647,8 +3642,8 @@ } static void -encode_coding_ucs4 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_ucs4 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); unsigned int flags = str->flags; @@ -3713,9 +3708,9 @@ { /* #### Bother! We don't know how to handle this yet. */ - Dynarr_add (dst, 0); - Dynarr_add (dst, 0); - Dynarr_add (dst, 0); + Dynarr_add (dst, '\0'); + Dynarr_add (dst, '\0'); + Dynarr_add (dst, '\0'); Dynarr_add (dst, '~'); } else @@ -3786,12 +3781,11 @@ /************************************************************************/ static int -detect_coding_utf8 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_utf8 (struct detection_state *st, const Extbyte *src, size_t n) { while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; switch (st->utf8.in_byte) { case 0: @@ -3821,8 +3815,8 @@ } static void -decode_coding_utf8 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_utf8 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; @@ -3832,7 +3826,7 @@ while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; switch (counter) { case 0: @@ -3935,8 +3929,8 @@ } static void -encode_coding_utf8 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_utf8 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); unsigned int flags = str->flags; @@ -4654,8 +4648,7 @@ } static int -detect_coding_iso2022 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_iso2022 (struct detection_state *st, const Extbyte *src, size_t n) { int mask; @@ -4685,7 +4678,7 @@ while (n--) { - int c = *src++; + unsigned char c = *(unsigned char *)src++; if (c >= 0xA0) { mask &= ~CODING_CATEGORY_ISO_7_MASK; @@ -4845,8 +4838,8 @@ /* Convert ISO2022-format data to internal format. */ static void -decode_coding_iso2022 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_iso2022 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; @@ -4866,7 +4859,7 @@ while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; if (flags & CODING_STATE_ESCAPE) { /* Within ESC sequence */ int retval = parse_iso2022_esc (coding_system, &str->iso2022, @@ -5171,8 +5164,8 @@ /* Convert internally-formatted data to ISO2022 format. */ static void -encode_coding_iso2022 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_iso2022 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { unsigned char charmask, c; unsigned char char_boundary; @@ -5480,10 +5473,9 @@ contain all 256 possible byte values and that are not to be interpreted as being in any particular decoding. */ static void -decode_coding_no_conversion (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_no_conversion (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -5491,7 +5483,7 @@ while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; DECODE_HANDLE_EOL_TYPE (eol_type, c, flags, dst); DECODE_ADD_BINARY_CHAR (c, dst); @@ -5505,8 +5497,8 @@ } static void -encode_coding_no_conversion (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_no_conversion (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { unsigned char c; struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); diff -r a8296e22da4e -r 576fb035e263 src/fileio.c --- a/src/fileio.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/fileio.c Mon Aug 13 11:36:19 2007 +0200 @@ -94,6 +94,12 @@ /* File name in which we write a list of all our auto save files. */ Lisp_Object Vauto_save_list_file_name; +/* Prefix used to construct Vauto_save_list_file_name. */ +Lisp_Object Vauto_save_list_file_prefix; + +/* When non-nil, it prevents auto-save list file creation. */ +int inhibit_auto_save_session; + int disable_auto_save_when_buffer_shrinks; Lisp_Object Vdirectory_sep_char; @@ -393,31 +399,31 @@ DEFUN ("file-name-directory", Ffile_name_directory, 1, 1, 0, /* -Return the directory component in file name NAME. -Return nil if NAME does not include a directory. +Return the directory component in file name FILENAME. +Return nil if FILENAME does not include a directory. Otherwise return a directory spec. Given a Unix syntax file name, returns a string ending in slash. */ - (file)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ Bufbyte *beg; Bufbyte *p; Lisp_Object handler; - CHECK_STRING (file); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_directory); + handler = Ffind_file_name_handler (filename, Qfile_name_directory); if (!NILP (handler)) - return call2_check_string_or_nil (handler, Qfile_name_directory, file); + return call2_check_string_or_nil (handler, Qfile_name_directory, filename); #ifdef FILE_SYSTEM_CASE - file = FILE_SYSTEM_CASE (file); + filename = FILE_SYSTEM_CASE (filename); #endif - beg = XSTRING_DATA (file); - p = beg + XSTRING_LENGTH (file); + beg = XSTRING_DATA (filename); + p = beg + XSTRING_LENGTH (filename); while (p != beg && !IS_ANY_SEP (p[-1]) #ifdef WIN32_NATIVE @@ -452,27 +458,27 @@ } DEFUN ("file-name-nondirectory", Ffile_name_nondirectory, 1, 1, 0, /* -Return file name NAME sans its directory. +Return file name FILENAME sans its directory. For example, in a Unix-syntax file name, this is everything after the last slash, or the entire name if it contains no slash. */ - (file)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ Bufbyte *beg, *p, *end; Lisp_Object handler; - CHECK_STRING (file); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_nondirectory); + handler = Ffind_file_name_handler (filename, Qfile_name_nondirectory); if (!NILP (handler)) - return call2_check_string (handler, Qfile_name_nondirectory, file); - - beg = XSTRING_DATA (file); - end = p = beg + XSTRING_LENGTH (file); + return call2_check_string (handler, Qfile_name_nondirectory, filename); + + beg = XSTRING_DATA (filename); + end = p = beg + XSTRING_LENGTH (filename); while (p != beg && !IS_ANY_SEP (p[-1]) #ifdef WIN32_NATIVE @@ -493,7 +499,7 @@ The `call-process' and `start-process' functions use this function to get a current directory to run processes in. */ - (filename)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ Lisp_Object handler; @@ -543,23 +549,23 @@ For a Unix-syntax file name, just appends a slash, except for (file-name-as-directory \"\") => \"./\". */ - (file)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ char *buf; Lisp_Object handler; - CHECK_STRING (file); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_as_directory); + handler = Ffind_file_name_handler (filename, Qfile_name_as_directory); if (!NILP (handler)) - return call2_check_string (handler, Qfile_name_as_directory, file); - - buf = (char *) alloca (XSTRING_LENGTH (file) + 10); + return call2_check_string (handler, Qfile_name_as_directory, filename); + + buf = (char *) alloca (XSTRING_LENGTH (filename) + 10); return build_string (file_name_as_directory - (buf, (char *) XSTRING_DATA (file))); + (buf, (char *) XSTRING_DATA (filename))); } /* @@ -588,8 +594,8 @@ } DEFUN ("directory-file-name", Fdirectory_file_name, 1, 1, 0, /* -Return the file name of the directory named DIR. -This is the name of the file that holds the data for the directory DIR. +Return the file name of the directory named DIRECTORY. +This is the name of the file that holds the data for the directory. This operation exists because a directory is also a file, but its name as a directory is different from its name as a file. In Unix-syntax, this function just removes the final slash. @@ -731,7 +737,7 @@ Convert filename NAME to absolute, and canonicalize it. Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative (does not start with slash); if DEFAULT-DIRECTORY is nil or missing, -the current buffer's value of default-directory is used. +the current buffer's value of `default-directory' is used. File name components that are `.' are removed, and so are file name components followed by `..', along with the `..' itself; note that these simplifications are done without checking the resulting @@ -1247,10 +1253,10 @@ } DEFUN ("file-truename", Ffile_truename, 1, 2, 0, /* -Return the canonical name of the given FILE. -Second arg DEFAULT is directory to start with if FILE is relative +Return the canonical name of FILENAME. +Second arg DEFAULT is directory to start with if FILENAME is relative (does not start with slash); if DEFAULT is nil or missing, - the current buffer's value of default-directory is used. + the current buffer's value of `default-directory' is used. No component of the resulting pathname will be a symbolic link, as in the realpath() function. */ @@ -1389,12 +1395,11 @@ Substitute environment variables referred to in FILENAME. `$FOO' where FOO is an environment variable name means to substitute the value of that variable. The variable name should be terminated -with a character not a letter, digit or underscore; otherwise, enclose +with a character, not a letter, digit or underscore; otherwise, enclose the entire variable name in braces. If `/~' appears, all of FILENAME through that `/' is discarded. - */ - (string)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben. */ Bufbyte *nm; @@ -1406,17 +1411,17 @@ Bufbyte *xnm; Lisp_Object handler; - CHECK_STRING (string); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (string, Qsubstitute_in_file_name); + handler = Ffind_file_name_handler (filename, Qsubstitute_in_file_name); if (!NILP (handler)) return call2_check_string_or_nil (handler, Qsubstitute_in_file_name, - string); - - nm = XSTRING_DATA (string); - endp = nm + XSTRING_LENGTH (string); + filename); + + nm = XSTRING_DATA (filename); + endp = nm + XSTRING_LENGTH (filename); /* If /~ or // appears, discard everything through first slash. */ @@ -1496,11 +1501,11 @@ } if (!substituted) - return string; - - /* If substitution required, recopy the string and do it */ + return filename; + + /* If substitution required, recopy the filename and do it */ /* Make space in stack frame for the new copy */ - xnm = (Bufbyte *) alloca (XSTRING_LENGTH (string) + total + 1); + xnm = (Bufbyte *) alloca (XSTRING_LENGTH (filename) + total + 1); x = xnm; /* Copy the rest of the name through, replacing $ constructs with values */ @@ -1572,13 +1577,13 @@ return make_string (xnm, x - xnm); badsubst: - syntax_error ("Bad format environment-variable substitution", string); + syntax_error ("Bad format environment-variable substitution", filename); missingclose: syntax_error ("Missing \"}\" in environment-variable substitution", - string); + filename); badvar: syntax_error_2 ("Substituting nonexistent environment variable", - string, build_string (target)); + filename, build_string ((char *) target)); /* NOTREACHED */ return Qnil; /* suppress compiler warning */ @@ -1662,7 +1667,7 @@ DEFUN ("copy-file", Fcopy_file, 2, 4, "fCopy file: \nFCopy %s to file: \np\nP", /* -Copy FILE to NEWNAME. Both args must be strings. +Copy FILENAME to NEWNAME. Both args must be strings. Signals a `file-already-exists' error if file NEWNAME already exists, unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil. A number as third arg means request confirmation if NEWNAME already exists. @@ -1922,8 +1927,8 @@ DEFUN ("rename-file", Frename_file, 2, 3, "fRename file: \nFRename %s to file: \np", /* -Rename FILE as NEWNAME. Both args strings. -If file has names other than FILE, it continues to have those names. +Rename FILENAME as NEWNAME. Both args must be strings. +If file has names other than FILENAME, it continues to have those names. Signals a `file-already-exists' error if a file NEWNAME already exists unless optional third argument OK-IF-ALREADY-EXISTS is non-nil. A number as third arg means request confirmation if NEWNAME already exists. @@ -2006,7 +2011,7 @@ DEFUN ("add-name-to-file", Fadd_name_to_file, 2, 3, "fAdd name to file: \nFName to add to %s: \np", /* -Give FILE additional name NEWNAME. Both args strings. +Give FILENAME additional name NEWNAME. Both args must be strings. Signals a `file-already-exists' error if a file NEWNAME already exists unless optional third argument OK-IF-ALREADY-EXISTS is non-nil. A number as third arg means request confirmation if NEWNAME already exists. @@ -2494,7 +2499,7 @@ } DEFUN ("file-modes", Ffile_modes, 1, 1, 0, /* -Return mode bits of FILE, as an integer. +Return mode bits of file named FILENAME, as an integer. */ (filename)) { @@ -2531,7 +2536,7 @@ } DEFUN ("set-file-modes", Fset_file_modes, 2, 2, 0, /* -Set mode bits of FILE to MODE (an integer). +Set mode bits of file named FILENAME to MODE (an integer). Only the 12 low bits of MODE are used. */ (filename, mode)) @@ -2563,9 +2568,9 @@ DEFUN ("set-default-file-modes", Fset_default_file_modes, 1, 1, 0, /* Set the file permission bits for newly created files. -MASK should be an integer; if a permission's bit in MASK is 1, -subsequently created files will not have that permission enabled. -Only the low 9 bits are used. +The argument MODE should be an integer; if a bit in MODE is 1, +subsequently created files will not have the permission corresponding +to that bit enabled. Only the low 9 bits are used. This setting is inherited by subprocesses. */ (mode)) @@ -2669,13 +2674,12 @@ decoding is stored into it. It will in general be different from CODESYS if CODESYS specifies automatic encoding detection or end-of-line detection. -Currently BEG and END refer to byte positions (as opposed to character +Currently START and END refer to byte positions (as opposed to character positions), even in Mule. (Fixing this is very difficult.) */ - (filename, visit, beg, end, replace, codesys, used_codesys)) + (filename, visit, start, end, replace, codesys, used_codesys)) { /* This function can call lisp */ - /* #### dmoore - this function hasn't been checked for gc recently */ struct stat st; int fd; int saverrno = 0; @@ -2720,7 +2724,7 @@ if (!NILP (handler)) { val = call6 (handler, Qinsert_file_contents, filename, - visit, beg, end, replace); + visit, start, end, replace); goto handled; } @@ -2729,7 +2733,7 @@ CHECK_SYMBOL (used_codesys); #endif - if ( (!NILP (beg) || !NILP (end)) && !NILP (visit) ) + if ( (!NILP (start) || !NILP (end)) && !NILP (visit) ) error ("Attempt to visit less than an entire file"); fd = -1; @@ -2746,7 +2750,7 @@ #ifdef S_IFREG /* Signal an error if we are accessing a non-regular file, with - REPLACE, BEG or END being non-nil. */ + REPLACE, START or END being non-nil. */ if (!S_ISREG (st.st_mode)) { not_regular = 1; @@ -2754,21 +2758,22 @@ if (!NILP (visit)) goto notfound; - if (!NILP (replace) || !NILP (beg) || !NILP (end)) + if (!NILP (replace) || !NILP (start) || !NILP (end)) { end_multiple_change (buf, mc_count); - return Fsignal (Qfile_error, - list2 (build_translated_string("not a regular file"), - filename)); + RETURN_UNGCPRO + (Fsignal (Qfile_error, + list2 (build_translated_string("not a regular file"), + filename))); } } #endif /* S_IFREG */ - if (!NILP (beg)) - CHECK_INT (beg); + if (!NILP (start)) + CHECK_INT (start); else - beg = Qzero; + start = Qzero; if (!NILP (end)) CHECK_INT (end); @@ -2911,7 +2916,7 @@ same_at_end += overlap; /* Arrange to read only the nonmatching middle part of the file. */ - beg = make_int (same_at_start - BUF_BEGV (buf)); + start = make_int (same_at_start - BUF_BEGV (buf)); end = make_int (st.st_size - (BUF_ZV (buf) - same_at_end)); buffer_delete_range (buf, same_at_start, same_at_end, @@ -2923,7 +2928,7 @@ if (!not_regular) { - total = XINT (end) - XINT (beg); + total = XINT (end) - XINT (start); /* Make sure point-max won't overflow after this insertion. */ if (total != XINT (make_int (total))) @@ -2934,7 +2939,7 @@ will make the stream functions read as much as possible. */ total = -1; - if (XINT (beg) != 0 + if (XINT (start) != 0 #ifdef FSFMACS_SPEEDY_INSERT /* why was this here? asked jwz. The reason is that the replace-mode connivings above will normally put the file pointer other than @@ -2943,7 +2948,7 @@ #endif /* !FSFMACS_SPEEDY_INSERT */ ) { - if (lseek (fd, XINT (beg), 0) < 0) + if (lseek (fd, XINT (start), 0) < 0) report_file_error ("Setting file position", list1 (filename)); } @@ -3027,6 +3032,9 @@ it could be called here. But that's just silly. There's no reason C code can't call out to Lisp code, and it's a lot cleaner this way. */ + /* Note: compute-buffer-file-truename is called for + side-effect! Its return value is intentionally + ignored. */ if (!NILP (Ffboundp (Qcompute_buffer_file_truename))) call1 (Qcompute_buffer_file_truename, make_buffer (buf)); } @@ -3647,18 +3655,18 @@ DEFUN ("verify-visited-file-modtime", Fverify_visited_file_modtime, 1, 1, 0, /* -Return t if last mod time of BUF's visited file matches what BUF records. +Return t if last mod time of BUFFER's visited file matches what BUFFER records. This means that the file has not been changed since it was visited or saved. */ - (buf)) + (buffer)) { /* This function can call lisp; GC checked 2000-07-11 ben */ struct buffer *b; struct stat st; Lisp_Object handler; - CHECK_BUFFER (buf); - b = XBUFFER (buf); + CHECK_BUFFER (buffer); + b = XBUFFER (buffer); if (!STRINGP (b->filename)) return Qt; if (b->modtime == 0) return Qt; @@ -3668,7 +3676,7 @@ handler = Ffind_file_name_handler (b->filename, Qverify_visited_file_modtime); if (!NILP (handler)) - return call2 (handler, Qverify_visited_file_modtime, buf); + return call2 (handler, Qverify_visited_file_modtime, buffer); if (xemacs_stat ((char *) XSTRING_DATA (b->filename), &st) < 0) { @@ -3982,7 +3990,9 @@ /* Open the auto-save list file, if necessary. We only do this now so that the file only exists if we actually auto-saved any files. */ - if (!auto_saved && STRINGP (listfile) && listdesc < 0) + if (!auto_saved && !inhibit_auto_save_session + && !NILP (Vauto_save_list_file_prefix) + && STRINGP (listfile) && listdesc < 0) { listdesc = open ((char *) XSTRING_DATA (listfile), O_WRONLY | O_TRUNC | O_CREAT | OPEN_BINARY, @@ -4298,6 +4308,18 @@ */ ); Vauto_save_list_file_name = Qnil; + DEFVAR_LISP ("auto-save-list-file-prefix", &Vauto_save_list_file_prefix /* +Prefix for generating auto-save-list-file-name. +Emacs's pid and the system name will be appended to +this prefix to create a unique file name. +*/ ); + Vauto_save_list_file_prefix = build_string ("~/.saves-"); + + DEFVAR_BOOL ("inhibit-auto-save-session", &inhibit_auto_save_session /* +When non-nil, inhibit auto save list file creation. +*/ ); + inhibit_auto_save_session = 0; + DEFVAR_BOOL ("disable-auto-save-when-buffer-shrinks", &disable_auto_save_when_buffer_shrinks /* If non-nil, auto-saving is disabled when a buffer shrinks too much. diff -r a8296e22da4e -r 576fb035e263 src/filelock.c --- a/src/filelock.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/filelock.c Mon Aug 13 11:36:19 2007 +0200 @@ -32,6 +32,7 @@ Lisp_Object Qask_user_about_supersession_threat; Lisp_Object Qask_user_about_lock; +int inhibit_clash_detection; #ifdef CLASH_DETECTION @@ -311,10 +312,15 @@ register Lisp_Object attack, orig_fn; register char *lfname, *locker; lock_info_type lock_info; - struct gcpro gcpro1,gcpro2; + struct gcpro gcpro1, gcpro2, gcpro3; + Lisp_Object old_current_buffer; Lisp_Object subject_buf; - GCPRO2 (fn, subject_buf); + if (inhibit_clash_detection) + return; + + XSETBUFFER (old_current_buffer, current_buffer); + GCPRO3 (fn, subject_buf, old_current_buffer); orig_fn = fn; fn = Fexpand_file_name (fn, Qnil); @@ -333,8 +339,10 @@ } /* Try to lock the lock. */ - if (lock_if_free (&lock_info, lfname) <= 0) - /* Return now if we have locked it, or if lock creation failed */ + if (current_buffer != XBUFFER (old_current_buffer) + || lock_if_free (&lock_info, lfname) <= 0) + /* Return now if we have locked it, or if lock creation failed + or current buffer is killed. */ goto done; /* Else consider breaking the lock */ @@ -347,7 +355,7 @@ attack = call2_in_buffer (BUFFERP (subject_buf) ? XBUFFER (subject_buf) : current_buffer, Qask_user_about_lock , fn, build_string (locker)); - if (!NILP (attack)) + if (!NILP (attack) && current_buffer == XBUFFER (old_current_buffer)) /* User says take the lock */ { lock_file_1 (lfname, 1); @@ -488,5 +496,13 @@ defsymbol (&Qask_user_about_lock, "ask-user-about-lock"); } +void +vars_of_filelock (void) +{ + DEFVAR_BOOL ("inhibit-clash-detection", &inhibit_clash_detection /* +Non-nil inhibits creation of lock file to detect clash. +*/); + inhibit_clash_detection = 0; +} #endif /* CLASH_DETECTION */ diff -r a8296e22da4e -r 576fb035e263 src/floatfns.c --- a/src/floatfns.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/floatfns.c Mon Aug 13 11:36:19 2007 +0200 @@ -212,86 +212,88 @@ #ifdef LISP_FLOAT_TYPE DEFUN ("acos", Facos, 1, 1, 0, /* -Return the inverse cosine of ARG. +Return the inverse cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 1.0 || d < -1.0) - domain_error ("acos", arg); + domain_error ("acos", number); #endif - IN_FLOAT (d = acos (d), "acos", arg); + IN_FLOAT (d = acos (d), "acos", number); return make_float (d); } DEFUN ("asin", Fasin, 1, 1, 0, /* -Return the inverse sine of ARG. +Return the inverse sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 1.0 || d < -1.0) - domain_error ("asin", arg); + domain_error ("asin", number); #endif - IN_FLOAT (d = asin (d), "asin", arg); + IN_FLOAT (d = asin (d), "asin", number); return make_float (d); } DEFUN ("atan", Fatan, 1, 2, 0, /* -Return the inverse tangent of ARG. +Return the inverse tangent of NUMBER. +If optional second argument NUMBER2 is provided, +return atan2 (NUMBER, NUMBER2). */ - (arg1, arg2)) + (number, number2)) { - double d = extract_float (arg1); + double d = extract_float (number); - if (NILP (arg2)) - IN_FLOAT (d = atan (d), "atan", arg1); + if (NILP (number2)) + IN_FLOAT (d = atan (d), "atan", number); else { - double d2 = extract_float (arg2); + double d2 = extract_float (number2); #ifdef FLOAT_CHECK_DOMAIN if (d == 0.0 && d2 == 0.0) - domain_error2 ("atan", arg1, arg2); + domain_error2 ("atan", number, number2); #endif - IN_FLOAT2 (d = atan2 (d, d2), "atan", arg1, arg2); + IN_FLOAT2 (d = atan2 (d, d2), "atan", number, number2); } return make_float (d); } DEFUN ("cos", Fcos, 1, 1, 0, /* -Return the cosine of ARG. +Return the cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = cos (d), "cos", arg); + double d = extract_float (number); + IN_FLOAT (d = cos (d), "cos", number); return make_float (d); } DEFUN ("sin", Fsin, 1, 1, 0, /* -Return the sine of ARG. +Return the sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = sin (d), "sin", arg); + double d = extract_float (number); + IN_FLOAT (d = sin (d), "sin", number); return make_float (d); } DEFUN ("tan", Ftan, 1, 1, 0, /* -Return the tangent of ARG. +Return the tangent of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); double c = cos (d); #ifdef FLOAT_CHECK_DOMAIN if (c == 0.0) - domain_error ("tan", arg); + domain_error ("tan", number); #endif - IN_FLOAT (d = (sin (d) / c), "tan", arg); + IN_FLOAT (d = (sin (d) / c), "tan", number); return make_float (d); } #endif /* LISP_FLOAT_TYPE (trig functions) */ @@ -302,68 +304,68 @@ /* #ifdef LISP_FLOAT_TYPE */ DEFUN ("bessel-j0", Fbessel_j0, 1, 1, 0, /* -Return the bessel function j0 of ARG. +Return the bessel function j0 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = j0 (d), "bessel-j0", arg); + double d = extract_float (number); + IN_FLOAT (d = j0 (d), "bessel-j0", number); return make_float (d); } DEFUN ("bessel-j1", Fbessel_j1, 1, 1, 0, /* -Return the bessel function j1 of ARG. +Return the bessel function j1 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = j1 (d), "bessel-j1", arg); + double d = extract_float (number); + IN_FLOAT (d = j1 (d), "bessel-j1", number); return make_float (d); } DEFUN ("bessel-jn", Fbessel_jn, 2, 2, 0, /* -Return the order N bessel function output jn of ARG. -The first arg (the order) is truncated to an integer. +Return the order N bessel function output jn of NUMBER. +The first number (the order) is truncated to an integer. */ - (arg1, arg2)) + (number1, number2)) { - int i1 = extract_float (arg1); - double f2 = extract_float (arg2); + int i1 = extract_float (number1); + double f2 = extract_float (number2); - IN_FLOAT (f2 = jn (i1, f2), "bessel-jn", arg1); + IN_FLOAT (f2 = jn (i1, f2), "bessel-jn", number1); return make_float (f2); } DEFUN ("bessel-y0", Fbessel_y0, 1, 1, 0, /* -Return the bessel function y0 of ARG. +Return the bessel function y0 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = y0 (d), "bessel-y0", arg); + double d = extract_float (number); + IN_FLOAT (d = y0 (d), "bessel-y0", number); return make_float (d); } DEFUN ("bessel-y1", Fbessel_y1, 1, 1, 0, /* -Return the bessel function y1 of ARG. +Return the bessel function y1 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = y1 (d), "bessel-y0", arg); + double d = extract_float (number); + IN_FLOAT (d = y1 (d), "bessel-y0", number); return make_float (d); } DEFUN ("bessel-yn", Fbessel_yn, 2, 2, 0, /* -Return the order N bessel function output yn of ARG. -The first arg (the order) is truncated to an integer. +Return the order N bessel function output yn of NUMBER. +The first number (the order) is truncated to an integer. */ - (arg1, arg2)) + (number1, number2)) { - int i1 = extract_float (arg1); - double f2 = extract_float (arg2); + int i1 = extract_float (number1); + double f2 = extract_float (number2); - IN_FLOAT (f2 = yn (i1, f2), "bessel-yn", arg1); + IN_FLOAT (f2 = yn (i1, f2), "bessel-yn", number1); return make_float (f2); } @@ -374,32 +376,32 @@ /* #ifdef LISP_FLOAT_TYPE */ DEFUN ("erf", Ferf, 1, 1, 0, /* -Return the mathematical error function of ARG. +Return the mathematical error function of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = erf (d), "erf", arg); + double d = extract_float (number); + IN_FLOAT (d = erf (d), "erf", number); return make_float (d); } DEFUN ("erfc", Ferfc, 1, 1, 0, /* -Return the complementary error function of ARG. +Return the complementary error function of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = erfc (d), "erfc", arg); + double d = extract_float (number); + IN_FLOAT (d = erfc (d), "erfc", number); return make_float (d); } DEFUN ("log-gamma", Flog_gamma, 1, 1, 0, /* -Return the log gamma of ARG. +Return the log gamma of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = lgamma (d), "log-gamma", arg); + double d = extract_float (number); + IN_FLOAT (d = lgamma (d), "log-gamma", number); return make_float (d); } @@ -410,35 +412,35 @@ #ifdef LISP_FLOAT_TYPE DEFUN ("exp", Fexp, 1, 1, 0, /* -Return the exponential base e of ARG. +Return the exponential base e of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 709.7827) /* Assume IEEE doubles here */ - range_error ("exp", arg); + range_error ("exp", number); else if (d < -709.0) return make_float (0.0); else #endif - IN_FLOAT (d = exp (d), "exp", arg); + IN_FLOAT (d = exp (d), "exp", number); return make_float (d); } #endif /* LISP_FLOAT_TYPE */ DEFUN ("expt", Fexpt, 2, 2, 0, /* -Return the exponential ARG1 ** ARG2. +Return the exponential NUMBER1 ** NUMBER2. */ - (arg1, arg2)) + (number1, number2)) { - if (INTP (arg1) && /* common lisp spec */ - INTP (arg2)) /* don't promote, if both are ints */ + if (INTP (number1) && /* common lisp spec */ + INTP (number2)) /* don't promote, if both are ints */ { EMACS_INT retval; - EMACS_INT x = XINT (arg1); - EMACS_INT y = XINT (arg2); + EMACS_INT x = XINT (number1); + EMACS_INT y = XINT (number2); if (y < 0) { @@ -465,98 +467,99 @@ #ifdef LISP_FLOAT_TYPE { - double f1 = extract_float (arg1); - double f2 = extract_float (arg2); + double f1 = extract_float (number1); + double f2 = extract_float (number2); /* Really should check for overflow, too */ if (f1 == 0.0 && f2 == 0.0) f1 = 1.0; # ifdef FLOAT_CHECK_DOMAIN else if ((f1 == 0.0 && f2 < 0.0) || (f1 < 0 && f2 != floor(f2))) - domain_error2 ("expt", arg1, arg2); + domain_error2 ("expt", number1, number2); # endif /* FLOAT_CHECK_DOMAIN */ - IN_FLOAT2 (f1 = pow (f1, f2), "expt", arg1, arg2); + IN_FLOAT2 (f1 = pow (f1, f2), "expt", number1, number2); return make_float (f1); } #else - CHECK_INT_OR_FLOAT (arg1); - CHECK_INT_OR_FLOAT (arg2); - return Fexpt (arg1, arg2); + CHECK_INT_OR_FLOAT (number1); + CHECK_INT_OR_FLOAT (number2); + return Fexpt (number1, number2); #endif /* LISP_FLOAT_TYPE */ } #ifdef LISP_FLOAT_TYPE DEFUN ("log", Flog, 1, 2, 0, /* -Return the natural logarithm of ARG. -If second optional argument BASE is given, return log ARG using that base. +Return the natural logarithm of NUMBER. +If second optional argument BASE is given, return the logarithm of +NUMBER using that base. */ - (arg, base)) + (number, base)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d <= 0.0) - domain_error2 ("log", arg, base); + domain_error2 ("log", number, base); #endif if (NILP (base)) - IN_FLOAT (d = log (d), "log", arg); + IN_FLOAT (d = log (d), "log", number); else { double b = extract_float (base); #ifdef FLOAT_CHECK_DOMAIN if (b <= 0.0 || b == 1.0) - domain_error2 ("log", arg, base); + domain_error2 ("log", number, base); #endif if (b == 10.0) - IN_FLOAT2 (d = log10 (d), "log", arg, base); + IN_FLOAT2 (d = log10 (d), "log", number, base); else - IN_FLOAT2 (d = (log (d) / log (b)), "log", arg, base); + IN_FLOAT2 (d = (log (d) / log (b)), "log", number, base); } return make_float (d); } DEFUN ("log10", Flog10, 1, 1, 0, /* -Return the logarithm base 10 of ARG. +Return the logarithm base 10 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d <= 0.0) - domain_error ("log10", arg); + domain_error ("log10", number); #endif - IN_FLOAT (d = log10 (d), "log10", arg); + IN_FLOAT (d = log10 (d), "log10", number); return make_float (d); } DEFUN ("sqrt", Fsqrt, 1, 1, 0, /* -Return the square root of ARG. +Return the square root of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d < 0.0) - domain_error ("sqrt", arg); + domain_error ("sqrt", number); #endif - IN_FLOAT (d = sqrt (d), "sqrt", arg); + IN_FLOAT (d = sqrt (d), "sqrt", number); return make_float (d); } DEFUN ("cube-root", Fcube_root, 1, 1, 0, /* -Return the cube root of ARG. +Return the cube root of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef HAVE_CBRT - IN_FLOAT (d = cbrt (d), "cube-root", arg); + IN_FLOAT (d = cbrt (d), "cube-root", number); #else if (d >= 0.0) - IN_FLOAT (d = pow (d, 1.0/3.0), "cube-root", arg); + IN_FLOAT (d = pow (d, 1.0/3.0), "cube-root", number); else - IN_FLOAT (d = -pow (-d, 1.0/3.0), "cube-root", arg); + IN_FLOAT (d = -pow (-d, 1.0/3.0), "cube-root", number); #endif return make_float (d); } @@ -568,90 +571,90 @@ /* #if 0 Not clearly worth adding... */ DEFUN ("acosh", Facosh, 1, 1, 0, /* -Return the inverse hyperbolic cosine of ARG. +Return the inverse hyperbolic cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d < 1.0) - domain_error ("acosh", arg); + domain_error ("acosh", number); #endif #ifdef HAVE_INVERSE_HYPERBOLIC - IN_FLOAT (d = acosh (d), "acosh", arg); + IN_FLOAT (d = acosh (d), "acosh", number); #else - IN_FLOAT (d = log (d + sqrt (d*d - 1.0)), "acosh", arg); + IN_FLOAT (d = log (d + sqrt (d*d - 1.0)), "acosh", number); #endif return make_float (d); } DEFUN ("asinh", Fasinh, 1, 1, 0, /* -Return the inverse hyperbolic sine of ARG. +Return the inverse hyperbolic sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef HAVE_INVERSE_HYPERBOLIC - IN_FLOAT (d = asinh (d), "asinh", arg); + IN_FLOAT (d = asinh (d), "asinh", number); #else - IN_FLOAT (d = log (d + sqrt (d*d + 1.0)), "asinh", arg); + IN_FLOAT (d = log (d + sqrt (d*d + 1.0)), "asinh", number); #endif return make_float (d); } DEFUN ("atanh", Fatanh, 1, 1, 0, /* -Return the inverse hyperbolic tangent of ARG. +Return the inverse hyperbolic tangent of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d >= 1.0 || d <= -1.0) - domain_error ("atanh", arg); + domain_error ("atanh", number); #endif #ifdef HAVE_INVERSE_HYPERBOLIC - IN_FLOAT (d = atanh (d), "atanh", arg); + IN_FLOAT (d = atanh (d), "atanh", number); #else - IN_FLOAT (d = 0.5 * log ((1.0 + d) / (1.0 - d)), "atanh", arg); + IN_FLOAT (d = 0.5 * log ((1.0 + d) / (1.0 - d)), "atanh", number); #endif return make_float (d); } DEFUN ("cosh", Fcosh, 1, 1, 0, /* -Return the hyperbolic cosine of ARG. +Return the hyperbolic cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 710.0 || d < -710.0) - range_error ("cosh", arg); + range_error ("cosh", number); #endif - IN_FLOAT (d = cosh (d), "cosh", arg); + IN_FLOAT (d = cosh (d), "cosh", number); return make_float (d); } DEFUN ("sinh", Fsinh, 1, 1, 0, /* -Return the hyperbolic sine of ARG. +Return the hyperbolic sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 710.0 || d < -710.0) - range_error ("sinh", arg); + range_error ("sinh", number); #endif - IN_FLOAT (d = sinh (d), "sinh", arg); + IN_FLOAT (d = sinh (d), "sinh", number); return make_float (d); } DEFUN ("tanh", Ftanh, 1, 1, 0, /* -Return the hyperbolic tangent of ARG. +Return the hyperbolic tangent of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = tanh (d), "tanh", arg); + double d = extract_float (number); + IN_FLOAT (d = tanh (d), "tanh", number); return make_float (d); } #endif /* LISP_FLOAT_TYPE (inverse trig functions) */ @@ -659,64 +662,64 @@ /* Rounding functions */ DEFUN ("abs", Fabs, 1, 1, 0, /* -Return the absolute value of ARG. +Return the absolute value of NUMBER. */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { - IN_FLOAT (arg = make_float (fabs (XFLOAT_DATA (arg))), - "abs", arg); - return arg; + IN_FLOAT (number = make_float (fabs (XFLOAT_DATA (number))), + "abs", number); + return number; } #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return (XINT (arg) >= 0) ? arg : make_int (- XINT (arg)); + if (INTP (number)) + return (XINT (number) >= 0) ? number : make_int (- XINT (number)); - return Fabs (wrong_type_argument (Qnumberp, arg)); + return Fabs (wrong_type_argument (Qnumberp, number)); } #ifdef LISP_FLOAT_TYPE DEFUN ("float", Ffloat, 1, 1, 0, /* -Return the floating point number numerically equal to ARG. +Return the floating point number numerically equal to NUMBER. */ - (arg)) + (number)) { - if (INTP (arg)) - return make_float ((double) XINT (arg)); + if (INTP (number)) + return make_float ((double) XINT (number)); - if (FLOATP (arg)) /* give 'em the same float back */ - return arg; + if (FLOATP (number)) /* give 'em the same float back */ + return number; - return Ffloat (wrong_type_argument (Qnumberp, arg)); + return Ffloat (wrong_type_argument (Qnumberp, number)); } #endif /* LISP_FLOAT_TYPE */ #ifdef LISP_FLOAT_TYPE DEFUN ("logb", Flogb, 1, 1, 0, /* -Return largest integer <= the base 2 log of the magnitude of ARG. +Return largest integer <= the base 2 log of the magnitude of NUMBER. This is the same as the exponent of a float. */ - (arg)) + (number)) { - double f = extract_float (arg); + double f = extract_float (number); if (f == 0.0) return make_int (- (EMACS_INT)(((EMACS_UINT) 1) << (VALBITS - 1))); /* most-negative-fixnum */ #ifdef HAVE_LOGB { Lisp_Object val; - IN_FLOAT (val = make_int ((EMACS_INT) logb (f)), "logb", arg); + IN_FLOAT (val = make_int ((EMACS_INT) logb (f)), "logb", number); return val; } #else #ifdef HAVE_FREXP { int exqp; - IN_FLOAT (frexp (f, &exqp), "logb", arg); + IN_FLOAT (frexp (f, &exqp), "logb", number); return make_int (exqp - 1); } #else @@ -750,33 +753,34 @@ DEFUN ("ceiling", Fceiling, 1, 1, 0, /* -Return the smallest integer no less than ARG. (Round toward +inf.) +Return the smallest integer no less than NUMBER. (Round toward +inf.) */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { double d; - IN_FLOAT ((d = ceil (XFLOAT_DATA (arg))), "ceiling", arg); - return (float_to_int (d, "ceiling", arg, Qunbound)); + IN_FLOAT ((d = ceil (XFLOAT_DATA (number))), "ceiling", number); + return (float_to_int (d, "ceiling", number, Qunbound)); } #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return arg; + if (INTP (number)) + return number; - return Fceiling (wrong_type_argument (Qnumberp, arg)); + return Fceiling (wrong_type_argument (Qnumberp, number)); } DEFUN ("floor", Ffloor, 1, 2, 0, /* -Return the largest integer no greater than ARG. (Round towards -inf.) -With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR. +Return the largest integer no greater than NUMBER. (Round towards -inf.) +With optional second argument DIVISOR, return the largest integer no +greater than NUMBER/DIVISOR. */ - (arg, divisor)) + (number, divisor)) { - CHECK_INT_OR_FLOAT (arg); + CHECK_INT_OR_FLOAT (number); if (! NILP (divisor)) { @@ -785,20 +789,20 @@ CHECK_INT_OR_FLOAT (divisor); #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg) || FLOATP (divisor)) + if (FLOATP (number) || FLOATP (divisor)) { - double f1 = extract_float (arg); + double f1 = extract_float (number); double f2 = extract_float (divisor); if (f2 == 0) Fsignal (Qarith_error, Qnil); - IN_FLOAT2 (f1 = floor (f1 / f2), "floor", arg, divisor); - return float_to_int (f1, "floor", arg, divisor); + IN_FLOAT2 (f1 = floor (f1 / f2), "floor", number, divisor); + return float_to_int (f1, "floor", number, divisor); } #endif /* LISP_FLOAT_TYPE */ - i1 = XINT (arg); + i1 = XINT (number); i2 = XINT (divisor); if (i2 == 0) @@ -814,53 +818,53 @@ } #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { double d; - IN_FLOAT ((d = floor (XFLOAT_DATA (arg))), "floor", arg); - return (float_to_int (d, "floor", arg, Qunbound)); + IN_FLOAT ((d = floor (XFLOAT_DATA (number))), "floor", number); + return (float_to_int (d, "floor", number, Qunbound)); } #endif /* LISP_FLOAT_TYPE */ - return arg; + return number; } DEFUN ("round", Fround, 1, 1, 0, /* -Return the nearest integer to ARG. +Return the nearest integer to NUMBER. */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { double d; /* Screw the prevailing rounding mode. */ - IN_FLOAT ((d = emacs_rint (XFLOAT_DATA (arg))), "round", arg); - return (float_to_int (d, "round", arg, Qunbound)); + IN_FLOAT ((d = emacs_rint (XFLOAT_DATA (number))), "round", number); + return (float_to_int (d, "round", number, Qunbound)); } #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return arg; + if (INTP (number)) + return number; - return Fround (wrong_type_argument (Qnumberp, arg)); + return Fround (wrong_type_argument (Qnumberp, number)); } DEFUN ("truncate", Ftruncate, 1, 1, 0, /* Truncate a floating point number to an integer. Rounds the value toward zero. */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) - return float_to_int (XFLOAT_DATA (arg), "truncate", arg, Qunbound); + if (FLOATP (number)) + return float_to_int (XFLOAT_DATA (number), "truncate", number, Qunbound); #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return arg; + if (INTP (number)) + return number; - return Ftruncate (wrong_type_argument (Qnumberp, arg)); + return Ftruncate (wrong_type_argument (Qnumberp, number)); } /* Float-rounding functions. */ @@ -868,34 +872,34 @@ /* #if 1 It's not clear these are worth adding... */ DEFUN ("fceiling", Ffceiling, 1, 1, 0, /* -Return the smallest integer no less than ARG, as a float. +Return the smallest integer no less than NUMBER, as a float. \(Round toward +inf.\) */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = ceil (d), "fceiling", arg); + double d = extract_float (number); + IN_FLOAT (d = ceil (d), "fceiling", number); return make_float (d); } DEFUN ("ffloor", Fffloor, 1, 1, 0, /* -Return the largest integer no greater than ARG, as a float. +Return the largest integer no greater than NUMBER, as a float. \(Round towards -inf.\) */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = floor (d), "ffloor", arg); + double d = extract_float (number); + IN_FLOAT (d = floor (d), "ffloor", number); return make_float (d); } DEFUN ("fround", Ffround, 1, 1, 0, /* -Return the nearest integer to ARG, as a float. +Return the nearest integer to NUMBER, as a float. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = emacs_rint (d), "fround", arg); + double d = extract_float (number); + IN_FLOAT (d = emacs_rint (d), "fround", number); return make_float (d); } @@ -903,13 +907,13 @@ Truncate a floating point number to an integral float value. Rounds the value toward zero. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); if (d >= 0.0) - IN_FLOAT (d = floor (d), "ftruncate", arg); + IN_FLOAT (d = floor (d), "ftruncate", number); else - IN_FLOAT (d = ceil (d), "ftruncate", arg); + IN_FLOAT (d = ceil (d), "ftruncate", number); return make_float (d); } diff -r a8296e22da4e -r 576fb035e263 src/fns.c --- a/src/fns.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/fns.c Mon Aug 13 11:36:19 2007 +0200 @@ -270,25 +270,25 @@ `equal' is the same as in XEmacs, in that respect.) Symbols are also allowed; their print names are used instead. */ - (s1, s2)) + (string1, string2)) { Bytecount len; Lisp_String *p1, *p2; - if (SYMBOLP (s1)) - p1 = XSYMBOL (s1)->name; + if (SYMBOLP (string1)) + p1 = XSYMBOL (string1)->name; else { - CHECK_STRING (s1); - p1 = XSTRING (s1); + CHECK_STRING (string1); + p1 = XSTRING (string1); } - if (SYMBOLP (s2)) - p2 = XSYMBOL (s2)->name; + if (SYMBOLP (string2)) + p2 = XSYMBOL (string2)->name; else { - CHECK_STRING (s2); - p2 = XSTRING (s2); + CHECK_STRING (string2); + p2 = XSTRING (string2); } return (((len = string_length (p1)) == string_length (p2)) && @@ -318,26 +318,26 @@ Unicode. When Unicode support is added to XEmacs/Mule, this problem may be solved. */ - (s1, s2)) + (string1, string2)) { Lisp_String *p1, *p2; Charcount end, len2; int i; - if (SYMBOLP (s1)) - p1 = XSYMBOL (s1)->name; + if (SYMBOLP (string1)) + p1 = XSYMBOL (string1)->name; else { - CHECK_STRING (s1); - p1 = XSTRING (s1); + CHECK_STRING (string1); + p1 = XSTRING (string1); } - if (SYMBOLP (s2)) - p2 = XSYMBOL (s2)->name; + if (SYMBOLP (string2)) + p2 = XSYMBOL (string2)->name; else { - CHECK_STRING (s2); - p2 = XSTRING (s2); + CHECK_STRING (string2); + p2 = XSTRING (string2); } end = string_char_length (p1); @@ -435,40 +435,40 @@ int last_special); Lisp_Object -concat2 (Lisp_Object s1, Lisp_Object s2) +concat2 (Lisp_Object string1, Lisp_Object string2) { Lisp_Object args[2]; - args[0] = s1; - args[1] = s2; + args[0] = string1; + args[1] = string2; return concat (2, args, c_string, 0); } Lisp_Object -concat3 (Lisp_Object s1, Lisp_Object s2, Lisp_Object s3) +concat3 (Lisp_Object string1, Lisp_Object string2, Lisp_Object string3) { Lisp_Object args[3]; - args[0] = s1; - args[1] = s2; - args[2] = s3; + args[0] = string1; + args[1] = string2; + args[2] = string3; return concat (3, args, c_string, 0); } Lisp_Object -vconcat2 (Lisp_Object s1, Lisp_Object s2) +vconcat2 (Lisp_Object vec1, Lisp_Object vec2) { Lisp_Object args[2]; - args[0] = s1; - args[1] = s2; + args[0] = vec1; + args[1] = vec2; return concat (2, args, c_vector, 0); } Lisp_Object -vconcat3 (Lisp_Object s1, Lisp_Object s2, Lisp_Object s3) +vconcat3 (Lisp_Object vec1, Lisp_Object vec2, Lisp_Object vec3) { Lisp_Object args[3]; - args[0] = s1; - args[1] = s2; - args[2] = s3; + args[0] = vec1; + args[1] = vec2; + args[2] = vec3; return concat (3, args, c_vector, 0); } @@ -895,26 +895,26 @@ } DEFUN ("substring", Fsubstring, 2, 3, 0, /* -Return a substring of STRING, starting at index FROM and ending before TO. -TO may be nil or omitted; then the substring runs to the end of STRING. -If FROM or TO is negative, it counts from the end. -Relevant parts of the string-extent-data are copied in the new string. +Return the substring of STRING starting at START and ending before END. +END may be nil or omitted; then the substring runs to the end of STRING. +If START or END is negative, it counts from the end. +Relevant parts of the string-extent-data are copied to the new string. */ - (string, from, to)) + (string, start, end)) { - Charcount ccfr, ccto; - Bytecount bfr, blen; + Charcount ccstart, ccend; + Bytecount bstart, blen; Lisp_Object val; CHECK_STRING (string); - CHECK_INT (from); - get_string_range_char (string, from, to, &ccfr, &ccto, + CHECK_INT (start); + get_string_range_char (string, start, end, &ccstart, &ccend, GB_HISTORICAL_STRING_BEHAVIOR); - bfr = charcount_to_bytecount (XSTRING_DATA (string), ccfr); - blen = charcount_to_bytecount (XSTRING_DATA (string) + bfr, ccto - ccfr); - val = make_string (XSTRING_DATA (string) + bfr, blen); - /* Copy any applicable extent information into the new string: */ - copy_string_extents (val, string, 0, bfr, blen); + bstart = charcount_to_bytecount (XSTRING_DATA (string), ccstart); + blen = charcount_to_bytecount (XSTRING_DATA (string) + bstart, ccend - ccstart); + val = make_string (XSTRING_DATA (string) + bstart, blen); + /* Copy any applicable extent information into the new string. */ + copy_string_extents (val, string, 0, bstart, blen); return val; } @@ -1185,7 +1185,7 @@ */ (list, n)) { - int int_n; + EMACS_INT int_n; CHECK_LIST (list); @@ -1286,13 +1286,13 @@ } DEFUN ("assoc", Fassoc, 2, 2, 0, /* -Return non-nil if KEY is `equal' to the car of an element of LIST. -The value is actually the element of LIST whose car equals KEY. +Return non-nil if KEY is `equal' to the car of an element of ALIST. +The value is actually the element of ALIST whose car equals KEY. */ - (key, list)) + (key, alist)) { /* This function can GC. */ - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { if (internal_equal (key, elt_car, 0)) return elt; @@ -1301,13 +1301,13 @@ } DEFUN ("old-assoc", Fold_assoc, 2, 2, 0, /* -Return non-nil if KEY is `old-equal' to the car of an element of LIST. -The value is actually the element of LIST whose car equals KEY. +Return non-nil if KEY is `old-equal' to the car of an element of ALIST. +The value is actually the element of ALIST whose car equals KEY. */ - (key, list)) + (key, alist)) { /* This function can GC. */ - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { if (internal_old_equal (key, elt_car, 0)) return elt; @@ -1316,21 +1316,21 @@ } Lisp_Object -assoc_no_quit (Lisp_Object key, Lisp_Object list) +assoc_no_quit (Lisp_Object key, Lisp_Object alist) { int speccount = specpdl_depth (); specbind (Qinhibit_quit, Qt); - return unbind_to (speccount, Fassoc (key, list)); + return unbind_to (speccount, Fassoc (key, alist)); } DEFUN ("assq", Fassq, 2, 2, 0, /* -Return non-nil if KEY is `eq' to the car of an element of LIST. -The value is actually the element of LIST whose car is KEY. -Elements of LIST that are not conses are ignored. +Return non-nil if KEY is `eq' to the car of an element of ALIST. +The value is actually the element of ALIST whose car is KEY. +Elements of ALIST that are not conses are ignored. */ - (key, list)) + (key, alist)) { - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { if (EQ_WITH_EBOLA_NOTICE (key, elt_car)) return elt; @@ -1339,15 +1339,15 @@ } DEFUN ("old-assq", Fold_assq, 2, 2, 0, /* -Return non-nil if KEY is `old-eq' to the car of an element of LIST. -The value is actually the element of LIST whose car is KEY. -Elements of LIST that are not conses are ignored. +Return non-nil if KEY is `old-eq' to the car of an element of ALIST. +The value is actually the element of ALIST whose car is KEY. +Elements of ALIST that are not conses are ignored. This function is provided only for byte-code compatibility with v19. Do not use it. */ - (key, list)) + (key, alist)) { - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { if (HACKEQ_UNSAFE (key, elt_car)) return elt; @@ -1359,10 +1359,10 @@ Use only on lists known never to be circular. */ Lisp_Object -assq_no_quit (Lisp_Object key, Lisp_Object list) +assq_no_quit (Lisp_Object key, Lisp_Object alist) { /* This cannot GC. */ - LIST_LOOP_2 (elt, list) + LIST_LOOP_2 (elt, alist) { Lisp_Object elt_car = XCAR (elt); if (EQ_WITH_EBOLA_NOTICE (key, elt_car)) @@ -1372,70 +1372,70 @@ } DEFUN ("rassoc", Frassoc, 2, 2, 0, /* -Return non-nil if KEY is `equal' to the cdr of an element of LIST. -The value is actually the element of LIST whose cdr equals KEY. +Return non-nil if VALUE is `equal' to the cdr of an element of ALIST. +The value is actually the element of ALIST whose cdr equals VALUE. */ - (key, list)) + (value, alist)) { - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { - if (internal_equal (key, elt_cdr, 0)) + if (internal_equal (value, elt_cdr, 0)) return elt; } return Qnil; } DEFUN ("old-rassoc", Fold_rassoc, 2, 2, 0, /* -Return non-nil if KEY is `old-equal' to the cdr of an element of LIST. -The value is actually the element of LIST whose cdr equals KEY. +Return non-nil if VALUE is `old-equal' to the cdr of an element of ALIST. +The value is actually the element of ALIST whose cdr equals VALUE. */ - (key, list)) + (value, alist)) { - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { - if (internal_old_equal (key, elt_cdr, 0)) + if (internal_old_equal (value, elt_cdr, 0)) return elt; } return Qnil; } DEFUN ("rassq", Frassq, 2, 2, 0, /* -Return non-nil if KEY is `eq' to the cdr of an element of LIST. -The value is actually the element of LIST whose cdr is KEY. +Return non-nil if VALUE is `eq' to the cdr of an element of ALIST. +The value is actually the element of ALIST whose cdr is VALUE. */ - (key, list)) + (value, alist)) { - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { - if (EQ_WITH_EBOLA_NOTICE (key, elt_cdr)) + if (EQ_WITH_EBOLA_NOTICE (value, elt_cdr)) return elt; } return Qnil; } DEFUN ("old-rassq", Fold_rassq, 2, 2, 0, /* -Return non-nil if KEY is `old-eq' to the cdr of an element of LIST. -The value is actually the element of LIST whose cdr is KEY. +Return non-nil if VALUE is `old-eq' to the cdr of an element of ALIST. +The value is actually the element of ALIST whose cdr is VALUE. */ - (key, list)) + (value, alist)) { - EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, list) + EXTERNAL_ALIST_LOOP_4 (elt, elt_car, elt_cdr, alist) { - if (HACKEQ_UNSAFE (key, elt_cdr)) + if (HACKEQ_UNSAFE (value, elt_cdr)) return elt; } return Qnil; } -/* Like Frassq, but caller must ensure that LIST is properly +/* Like Frassq, but caller must ensure that ALIST is properly nil-terminated and ebola-free. */ Lisp_Object -rassq_no_quit (Lisp_Object key, Lisp_Object list) +rassq_no_quit (Lisp_Object value, Lisp_Object alist) { - LIST_LOOP_2 (elt, list) + LIST_LOOP_2 (elt, alist) { Lisp_Object elt_cdr = XCDR (elt); - if (EQ_WITH_EBOLA_NOTICE (key, elt_cdr)) + if (EQ_WITH_EBOLA_NOTICE (value, elt_cdr)) return elt; } return Qnil; @@ -1546,92 +1546,92 @@ } DEFUN ("remassoc", Fremassoc, 2, 2, 0, /* -Delete by side effect any elements of LIST whose car is `equal' to KEY. -The modified LIST is returned. If the first member of LIST has a car +Delete by side effect any elements of ALIST whose car is `equal' to KEY. +The modified ALIST is returned. If the first member of ALIST has a car that is `equal' to KEY, there is no way to remove it by side effect; therefore, write `(setq foo (remassoc key foo))' to be sure of changing the value of `foo'. */ - (key, list)) + (key, alist)) { - EXTERNAL_LIST_LOOP_DELETE_IF (elt, list, + EXTERNAL_LIST_LOOP_DELETE_IF (elt, alist, (CONSP (elt) && internal_equal (key, XCAR (elt), 0))); - return list; + return alist; } Lisp_Object -remassoc_no_quit (Lisp_Object key, Lisp_Object list) +remassoc_no_quit (Lisp_Object key, Lisp_Object alist) { int speccount = specpdl_depth (); specbind (Qinhibit_quit, Qt); - return unbind_to (speccount, Fremassoc (key, list)); + return unbind_to (speccount, Fremassoc (key, alist)); } DEFUN ("remassq", Fremassq, 2, 2, 0, /* -Delete by side effect any elements of LIST whose car is `eq' to KEY. -The modified LIST is returned. If the first member of LIST has a car +Delete by side effect any elements of ALIST whose car is `eq' to KEY. +The modified ALIST is returned. If the first member of ALIST has a car that is `eq' to KEY, there is no way to remove it by side effect; therefore, write `(setq foo (remassq key foo))' to be sure of changing the value of `foo'. */ - (key, list)) + (key, alist)) { - EXTERNAL_LIST_LOOP_DELETE_IF (elt, list, + EXTERNAL_LIST_LOOP_DELETE_IF (elt, alist, (CONSP (elt) && EQ_WITH_EBOLA_NOTICE (key, XCAR (elt)))); - return list; + return alist; } /* no quit, no errors; be careful */ Lisp_Object -remassq_no_quit (Lisp_Object key, Lisp_Object list) +remassq_no_quit (Lisp_Object key, Lisp_Object alist) { - LIST_LOOP_DELETE_IF (elt, list, + LIST_LOOP_DELETE_IF (elt, alist, (CONSP (elt) && EQ_WITH_EBOLA_NOTICE (key, XCAR (elt)))); - return list; + return alist; } DEFUN ("remrassoc", Fremrassoc, 2, 2, 0, /* -Delete by side effect any elements of LIST whose cdr is `equal' to VALUE. -The modified LIST is returned. If the first member of LIST has a car +Delete by side effect any elements of ALIST whose cdr is `equal' to VALUE. +The modified ALIST is returned. If the first member of ALIST has a car that is `equal' to VALUE, there is no way to remove it by side effect; therefore, write `(setq foo (remrassoc value foo))' to be sure of changing the value of `foo'. */ - (value, list)) + (value, alist)) { - EXTERNAL_LIST_LOOP_DELETE_IF (elt, list, + EXTERNAL_LIST_LOOP_DELETE_IF (elt, alist, (CONSP (elt) && internal_equal (value, XCDR (elt), 0))); - return list; + return alist; } DEFUN ("remrassq", Fremrassq, 2, 2, 0, /* -Delete by side effect any elements of LIST whose cdr is `eq' to VALUE. -The modified LIST is returned. If the first member of LIST has a car +Delete by side effect any elements of ALIST whose cdr is `eq' to VALUE. +The modified ALIST is returned. If the first member of ALIST has a car that is `eq' to VALUE, there is no way to remove it by side effect; therefore, write `(setq foo (remrassq value foo))' to be sure of changing the value of `foo'. */ - (value, list)) + (value, alist)) { - EXTERNAL_LIST_LOOP_DELETE_IF (elt, list, + EXTERNAL_LIST_LOOP_DELETE_IF (elt, alist, (CONSP (elt) && EQ_WITH_EBOLA_NOTICE (value, XCDR (elt)))); - return list; + return alist; } /* Like Fremrassq, fast and unsafe; be careful */ Lisp_Object -remrassq_no_quit (Lisp_Object value, Lisp_Object list) +remrassq_no_quit (Lisp_Object value, Lisp_Object alist) { - LIST_LOOP_DELETE_IF (elt, list, + LIST_LOOP_DELETE_IF (elt, alist, (CONSP (elt) && EQ_WITH_EBOLA_NOTICE (value, XCDR (elt)))); - return list; + return alist; } DEFUN ("nreverse", Fnreverse, 1, 1, 0, /* @@ -1689,12 +1689,11 @@ Lisp_Object back, tem; Lisp_Object front = list; Lisp_Object len = Flength (list); - int length = XINT (len); - - if (length < 2) + + if (XINT (len) < 2) return list; - XSETINT (len, (length / 2) - 1); + len = make_int (XINT (len) / 2 - 1); tem = Fnthcdr (len, list); back = Fcdr (tem); Fsetcdr (tem, Qnil); @@ -1735,9 +1734,9 @@ PREDICATE is called with two elements of LIST, and should return T if the first element is "less" than the second. */ - (list, pred)) + (list, predicate)) { - return list_sort (list, pred, merge_pred_function); + return list_sort (list, predicate, merge_pred_function); } Lisp_Object @@ -2267,51 +2266,54 @@ DEFUN ("plist-get", Fplist_get, 2, 3, 0, /* Extract a value from a property list. PLIST is a property list, which is a list of the form -\(PROP1 VALUE1 PROP2 VALUE2...). This function returns the value -corresponding to the given PROP, or DEFAULT if PROP is not -one of the properties on the list. +\(PROPERTY1 VALUE1 PROPERTY2 VALUE2...). +PROPERTY is usually a symbol. +This function returns the value corresponding to the PROPERTY, +or DEFAULT if PROPERTY is not one of the properties on the list. */ - (plist, prop, default_)) + (plist, property, default_)) { - Lisp_Object val = external_plist_get (&plist, prop, 0, ERROR_ME); - return UNBOUNDP (val) ? default_ : val; + Lisp_Object value = external_plist_get (&plist, property, 0, ERROR_ME); + return UNBOUNDP (value) ? default_ : value; } DEFUN ("plist-put", Fplist_put, 3, 3, 0, /* -Change value in PLIST of PROP to VAL. -PLIST is a property list, which is a list of the form \(PROP1 VALUE1 -PROP2 VALUE2 ...). PROP is usually a symbol and VAL is any object. -If PROP is already a property on the list, its value is set to VAL, -otherwise the new PROP VAL pair is added. The new plist is returned; -use `(setq x (plist-put x prop val))' to be sure to use the new value. -The PLIST is modified by side effects. +Change value in PLIST of PROPERTY to VALUE. +PLIST is a property list, which is a list of the form +\(PROPERTY1 VALUE1 PROPERTY2 VALUE2 ...). +PROPERTY is usually a symbol and VALUE is any object. +If PROPERTY is already a property on the list, its value is set to VALUE, +otherwise the new PROPERTY VALUE pair is added. +The new plist is returned; use `(setq x (plist-put x property value))' +to be sure to use the new value. PLIST is modified by side effect. */ - (plist, prop, val)) + (plist, property, value)) { - external_plist_put (&plist, prop, val, 0, ERROR_ME); + external_plist_put (&plist, property, value, 0, ERROR_ME); return plist; } DEFUN ("plist-remprop", Fplist_remprop, 2, 2, 0, /* -Remove from PLIST the property PROP and its value. -PLIST is a property list, which is a list of the form \(PROP1 VALUE1 -PROP2 VALUE2 ...). PROP is usually a symbol. The new plist is -returned; use `(setq x (plist-remprop x prop val))' to be sure to use -the new value. The PLIST is modified by side effects. +Remove from PLIST the property PROPERTY and its value. +PLIST is a property list, which is a list of the form +\(PROPERTY1 VALUE1 PROPERTY2 VALUE2 ...). +PROPERTY is usually a symbol. +The new plist is returned; use `(setq x (plist-remprop x property))' +to be sure to use the new value. PLIST is modified by side effect. */ - (plist, prop)) + (plist, property)) { - external_remprop (&plist, prop, 0, ERROR_ME); + external_remprop (&plist, property, 0, ERROR_ME); return plist; } DEFUN ("plist-member", Fplist_member, 2, 2, 0, /* -Return t if PROP has a value specified in PLIST. +Return t if PROPERTY has a value specified in PLIST. */ - (plist, prop)) + (plist, property)) { - Lisp_Object val = Fplist_get (plist, prop, Qunbound); - return UNBOUNDP (val) ? Qnil : Qt; + Lisp_Object value = Fplist_get (plist, property, Qunbound); + return UNBOUNDP (value) ? Qnil : Qt; } DEFUN ("check-valid-plist", Fcheck_valid_plist, 1, 1, 0, /* @@ -2409,58 +2411,60 @@ DEFUN ("lax-plist-get", Flax_plist_get, 2, 3, 0, /* Extract a value from a lax property list. - -LAX-PLIST is a lax property list, which is a list of the form \(PROP1 -VALUE1 PROP2 VALUE2...), where comparisons between properties is done -using `equal' instead of `eq'. This function returns the value -corresponding to the given PROP, or DEFAULT if PROP is not one of the -properties on the list. +LAX-PLIST is a lax property list, which is a list of the form +\(PROPERTY1 VALUE1 PROPERTY2 VALUE2...), where comparisons between +properties is done using `equal' instead of `eq'. +PROPERTY is usually a symbol. +This function returns the value corresponding to PROPERTY, +or DEFAULT if PROPERTY is not one of the properties on the list. */ - (lax_plist, prop, default_)) + (lax_plist, property, default_)) { - Lisp_Object val = external_plist_get (&lax_plist, prop, 1, ERROR_ME); - return UNBOUNDP (val) ? default_ : val; + Lisp_Object value = external_plist_get (&lax_plist, property, 1, ERROR_ME); + return UNBOUNDP (value) ? default_ : value; } DEFUN ("lax-plist-put", Flax_plist_put, 3, 3, 0, /* -Change value in LAX-PLIST of PROP to VAL. -LAX-PLIST is a lax property list, which is a list of the form \(PROP1 -VALUE1 PROP2 VALUE2...), where comparisons between properties is done -using `equal' instead of `eq'. PROP is usually a symbol and VAL is -any object. If PROP is already a property on the list, its value is -set to VAL, otherwise the new PROP VAL pair is added. The new plist -is returned; use `(setq x (lax-plist-put x prop val))' to be sure to -use the new value. The LAX-PLIST is modified by side effects. +Change value in LAX-PLIST of PROPERTY to VALUE. +LAX-PLIST is a lax property list, which is a list of the form +\(PROPERTY1 VALUE1 PROPERTY2 VALUE2...), where comparisons between +properties is done using `equal' instead of `eq'. +PROPERTY is usually a symbol and VALUE is any object. +If PROPERTY is already a property on the list, its value is set to +VALUE, otherwise the new PROPERTY VALUE pair is added. +The new plist is returned; use `(setq x (lax-plist-put x property value))' +to be sure to use the new value. LAX-PLIST is modified by side effect. */ - (lax_plist, prop, val)) + (lax_plist, property, value)) { - external_plist_put (&lax_plist, prop, val, 1, ERROR_ME); + external_plist_put (&lax_plist, property, value, 1, ERROR_ME); return lax_plist; } DEFUN ("lax-plist-remprop", Flax_plist_remprop, 2, 2, 0, /* -Remove from LAX-PLIST the property PROP and its value. -LAX-PLIST is a lax property list, which is a list of the form \(PROP1 -VALUE1 PROP2 VALUE2...), where comparisons between properties is done -using `equal' instead of `eq'. PROP is usually a symbol. The new -plist is returned; use `(setq x (lax-plist-remprop x prop val))' to be -sure to use the new value. The LAX-PLIST is modified by side effects. +Remove from LAX-PLIST the property PROPERTY and its value. +LAX-PLIST is a lax property list, which is a list of the form +\(PROPERTY1 VALUE1 PROPERTY2 VALUE2...), where comparisons between +properties is done using `equal' instead of `eq'. +PROPERTY is usually a symbol. +The new plist is returned; use `(setq x (lax-plist-remprop x property))' +to be sure to use the new value. LAX-PLIST is modified by side effect. */ - (lax_plist, prop)) + (lax_plist, property)) { - external_remprop (&lax_plist, prop, 1, ERROR_ME); + external_remprop (&lax_plist, property, 1, ERROR_ME); return lax_plist; } DEFUN ("lax-plist-member", Flax_plist_member, 2, 2, 0, /* -Return t if PROP has a value specified in LAX-PLIST. -LAX-PLIST is a lax property list, which is a list of the form \(PROP1 -VALUE1 PROP2 VALUE2...), where comparisons between properties is done -using `equal' instead of `eq'. +Return t if PROPERTY has a value specified in LAX-PLIST. +LAX-PLIST is a lax property list, which is a list of the form +\(PROPERTY1 VALUE1 PROPERTY2 VALUE2...), where comparisons between +properties is done using `equal' instead of `eq'. */ - (lax_plist, prop)) + (lax_plist, property)) { - return UNBOUNDP (Flax_plist_get (lax_plist, prop, Qunbound)) ? Qnil : Qt; + return UNBOUNDP (Flax_plist_get (lax_plist, property, Qunbound)) ? Qnil : Qt; } DEFUN ("canonicalize-lax-plist", Fcanonicalize_lax_plist, 1, 2, 0, /* @@ -2679,9 +2683,9 @@ Vectors and strings are compared element by element. Numbers are compared by value. Symbols must match exactly. */ - (obj1, obj2)) + (object1, object2)) { - return internal_equal (obj1, obj2, 0) ? Qt : Qnil; + return internal_equal (object1, object2, 0) ? Qt : Qnil; } DEFUN ("old-equal", Fold_equal, 2, 2, 0, /* @@ -2693,9 +2697,9 @@ This function is provided only for byte-code compatibility with v19. Do not use it. */ - (obj1, obj2)) + (object1, object2)) { - return internal_old_equal (obj1, obj2, 0) ? Qt : Qnil; + return internal_old_equal (object1, object2, 0) ? Qt : Qnil; } @@ -2735,7 +2739,7 @@ else if (VECTORP (array)) { Lisp_Object *p = XVECTOR_DATA (array); - int len = XVECTOR_LENGTH (array); + size_t len = XVECTOR_LENGTH (array); CHECK_LISP_WRITEABLE (array); while (len--) *p++ = item; @@ -2743,11 +2747,11 @@ else if (BIT_VECTORP (array)) { Lisp_Bit_Vector *v = XBIT_VECTOR (array); - int len = bit_vector_length (v); + size_t len = bit_vector_length (v); int bit; CHECK_BIT (item); + bit = XINT (item); CHECK_LISP_WRITEABLE (array); - bit = XINT (item); while (len--) set_bit_vector_bit (v, len, bit); } @@ -2782,7 +2786,7 @@ { /* (setcdr (last args[0]) args[1]) */ Lisp_Object tortoise, hare; - int count; + size_t count; for (hare = tortoise = args[0], count = 0; CONSP (XCDR (hare)); @@ -2851,7 +2855,7 @@ if (CONSP (next) || argnum == nargs -1) { /* (setcdr (last val) next) */ - int count; + size_t count; for (count = 0; CONSP (XCDR (last_cons)); @@ -2905,7 +2909,6 @@ { Lisp_Object result; Lisp_Object args[2]; - int i; struct gcpro gcpro1; if (vals) @@ -2935,6 +2938,7 @@ if (vals) { Lisp_Object *val = vals; + size_t i; LIST_LOOP_2 (elt, sequence) *val++ = elt; @@ -2969,6 +2973,7 @@ else if (VECTORP (sequence)) { Lisp_Object *objs = XVECTOR_DATA (sequence); + size_t i; for (i = 0; i < leni; i++) { args[1] = *objs++; @@ -2996,6 +3001,7 @@ else if (BIT_VECTORP (sequence)) { Lisp_Bit_Vector *v = XBIT_VECTOR (sequence); + size_t i; for (i = 0; i < leni; i++) { args[1] = make_int (bit_vector_bit (v, i)); @@ -3018,10 +3024,10 @@ */ (function, sequence, separator)) { - size_t len = XINT (Flength (sequence)); + EMACS_INT len = XINT (Flength (sequence)); Lisp_Object *args; - int i; - int nargs = len + len - 1; + EMACS_INT i; + EMACS_INT nargs = len + len - 1; if (len == 0) return build_string (""); @@ -3312,7 +3318,7 @@ is not loaded; so load the file FILENAME. If FILENAME is omitted, the printname of FEATURE is used as the file name. */ - (feature, file_name)) + (feature, filename)) { Lisp_Object tem; CHECK_SYMBOL (feature); @@ -3328,7 +3334,7 @@ record_unwind_protect (un_autoload, Vautoload_queue); Vautoload_queue = Qt; - call4 (Qload, NILP (file_name) ? Fsymbol_name (feature) : file_name, + call4 (Qload, NILP (filename) ? Fsymbol_name (feature) : filename, Qnil, Qt, Qnil); tem = Fmemq (feature, Vfeatures); @@ -3587,12 +3593,12 @@ } while (0) DEFUN ("base64-encode-region", Fbase64_encode_region, 2, 3, "r", /* -Base64-encode the region between BEG and END. +Base64-encode the region between START and END. Return the length of the encoded text. Optional third argument NO-LINE-BREAK means do not break long lines into shorter lines. */ - (beg, end, no_line_break)) + (start, end, no_line_break)) { Bufbyte *encoded; Bytind encoded_length; @@ -3602,7 +3608,7 @@ Lisp_Object input; int speccount = specpdl_depth(); - get_buffer_range_char (buf, beg, end, &begv, &zv, 0); + get_buffer_range_char (buf, start, end, &begv, &zv, 0); barf_if_buffer_read_only (buf, begv, zv); /* We need to allocate enough room for encoding the text. @@ -3639,6 +3645,8 @@ DEFUN ("base64-encode-string", Fbase64_encode_string, 1, 2, 0, /* Base64 encode STRING and return the result. +Optional argument NO-LINE-BREAK means do not break long lines +into shorter lines. */ (string, no_line_break)) { @@ -3667,12 +3675,12 @@ } DEFUN ("base64-decode-region", Fbase64_decode_region, 2, 2, "r", /* -Base64-decode the region between BEG and END. +Base64-decode the region between START and END. Return the length of the decoded text. If the region can't be decoded, return nil and don't modify the buffer. Characters out of the base64 alphabet are ignored. */ - (beg, end)) + (start, end)) { struct buffer *buf = current_buffer; Bufpos begv, zv, old_pt = BUF_PT (buf); @@ -3682,7 +3690,7 @@ Lisp_Object input; int speccount = specpdl_depth(); - get_buffer_range_char (buf, beg, end, &begv, &zv, 0); + get_buffer_range_char (buf, start, end, &begv, &zv, 0); barf_if_buffer_read_only (buf, begv, zv); length = zv - begv; diff -r a8296e22da4e -r 576fb035e263 src/frame.c --- a/src/frame.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/frame.c Mon Aug 13 11:36:19 2007 +0200 @@ -972,7 +972,7 @@ } static int -frame_matches_frametype (Lisp_Object frame, Lisp_Object type) +frame_matches_frame_spec (Lisp_Object frame, Lisp_Object type) { struct frame *f = XFRAME (frame); @@ -1033,25 +1033,25 @@ } int -device_matches_console_spec (Lisp_Object device, Lisp_Object console) +device_matches_device_spec (Lisp_Object device, Lisp_Object device_spec) { - if (EQ (console, Qwindow_system)) + if (EQ (device_spec, Qwindow_system)) return DEVICE_WIN_P (XDEVICE (device)); - if (DEVICEP (console)) - return EQ (device, console); - if (CONSOLEP (console)) - return EQ (DEVICE_CONSOLE (XDEVICE (device)), console); - if (valid_console_type_p (console)) - return EQ (DEVICE_TYPE (XDEVICE (device)), console); + if (DEVICEP (device_spec)) + return EQ (device, device_spec); + if (CONSOLEP (device_spec)) + return EQ (DEVICE_CONSOLE (XDEVICE (device)), device_spec); + if (valid_console_type_p (device_spec)) + return EQ (DEVICE_TYPE (XDEVICE (device)), device_spec); return 1; } /* Return the next frame in the frame list after FRAME. - FRAMETYPE and CONSOLE control which frames and devices + WHICH-FRAMES and WHICH-DEVICES control which frames and devices are considered; see `next-frame'. */ Lisp_Object -next_frame (Lisp_Object frame, Lisp_Object frametype, Lisp_Object console) +next_frame (Lisp_Object frame, Lisp_Object which_frames, Lisp_Object which_devices) { Lisp_Object first = Qnil; Lisp_Object devcons, concons; @@ -1064,7 +1064,7 @@ Lisp_Object device = XCAR (devcons); Lisp_Object frmcons; - if (!device_matches_console_spec (device, console)) + if (!device_matches_device_spec (device, which_devices)) { if (EQ (device, FRAME_DEVICE (XFRAME (frame)))) passed = 1; @@ -1077,7 +1077,7 @@ if (passed) { - if (frame_matches_frametype (f, frametype)) + if (frame_matches_frame_spec (f, which_frames)) return f; } else @@ -1088,7 +1088,7 @@ } else { - if (NILP (first) && frame_matches_frametype (f, frametype)) + if (NILP (first) && frame_matches_frame_spec (f, which_frames)) first = f; } } @@ -1107,11 +1107,11 @@ } /* Return the previous frame in the frame list before FRAME. - FRAMETYPE and CONSOLE control which frames and devices + WHICH-FRAMES and WHICH-DEVICES control which frames and devices are considered; see `next-frame'. */ Lisp_Object -previous_frame (Lisp_Object frame, Lisp_Object frametype, Lisp_Object console) +previous_frame (Lisp_Object frame, Lisp_Object which_frames, Lisp_Object which_devices) { Lisp_Object devcons, concons; Lisp_Object last = Qnil; @@ -1123,7 +1123,7 @@ Lisp_Object device = XCAR (devcons); Lisp_Object frmcons; - if (!device_matches_console_spec (device, console)) + if (!device_matches_device_spec (device, which_devices)) { if (EQ (device, FRAME_DEVICE (XFRAME (frame))) && !NILP (last)) @@ -1142,7 +1142,7 @@ } else { - if (frame_matches_frametype (f, frametype)) + if (frame_matches_frame_spec (f, which_frames)) last = f; } } @@ -1161,13 +1161,13 @@ DEFUN ("next-frame", Fnext_frame, 0, 3, 0, /* Return the next frame of the right type in the frame list after FRAME. -FRAMETYPE controls which frames are eligible to be returned; all +WHICH-FRAMES controls which frames are eligible to be returned; all others will be skipped. Note that if there is only one eligible frame, then `next-frame' called repeatedly will always return the same frame, and if there is no eligible frame, then FRAME is returned. -Possible values for FRAMETYPE are +Possible values for WHICH-FRAMES are 'visible Consider only frames that are visible. 'iconic Consider only frames that are iconic. @@ -1185,43 +1185,44 @@ frames. any other value Consider all frames. -If FRAMETYPE is omitted, 'nomini is used. A FRAMETYPE of 0 (a number) -is treated like 'iconic, for backwards compatibility. - -If FRAMETYPE is a window, include only its own frame and any frame now -using that window as the minibuffer. - -Optional third argument CONSOLE controls which consoles or devices the -returned frame may be on. If CONSOLE is a console, return frames only -on that console. If CONSOLE is a device, return frames only on that -device. If CONSOLE is a console type, return frames only on consoles -of that type. If CONSOLE is 'window-system, return any frames on any -window-system consoles. If CONSOLE is nil or omitted, return frames only -on the FRAME's console. Otherwise, all frames are considered. +If WHICH-FRAMES is omitted, 'nomini is used. A value for WHICH-FRAMES +of 0 (a number) is treated like 'iconic, for backwards compatibility. + +If WHICH-FRAMES is a window, include only its own frame and any frame +now using that window as the minibuffer. + +The optional third argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. +If nil or omitted, search all devices on FRAME's console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all window-system devices. +Any other non-nil value means search all devices. */ - (frame, frametype, console)) + (frame, which_frames, which_devices)) { XSETFRAME (frame, decode_frame (frame)); - return next_frame (frame, frametype, console); + return next_frame (frame, which_frames, which_devices); } DEFUN ("previous-frame", Fprevious_frame, 0, 3, 0, /* Return the next frame of the right type in the frame list after FRAME. -FRAMETYPE controls which frames are eligible to be returned; all +WHICH-FRAMES controls which frames are eligible to be returned; all others will be skipped. Note that if there is only one eligible frame, then `previous-frame' called repeatedly will always return the same frame, and if there is no eligible frame, then FRAME is returned. -See `next-frame' for an explanation of the FRAMETYPE and CONSOLE +See `next-frame' for an explanation of the WHICH-FRAMES and WHICH-DEVICES arguments. */ - (frame, frametype, console)) + (frame, which_frames, which_devices)) { XSETFRAME (frame, decode_frame (frame)); - return previous_frame (frame, frametype, console); + return previous_frame (frame, which_frames, which_devices); } /* Return any frame for which PREDICATE is non-zero, or return Qnil @@ -2405,6 +2406,7 @@ DEFUN ("frame-property", Fframe_property, 2, 3, 0, /* Return FRAME's value for property PROPERTY. +Return DEFAULT if there is no such property. See `set-frame-properties' for the built-in property names. */ (frame, property, default_)) @@ -2600,21 +2602,21 @@ Optional third arg non-nil means that redisplay should use LINES lines but that the idea of the actual height of the frame should not be changed. */ - (frame, rows, pretend)) + (frame, lines, pretend)) { struct frame *f = decode_frame (frame); int height, width; XSETFRAME (frame, f); - CHECK_INT (rows); + CHECK_INT (lines); if (window_system_pixelated_geometry (frame)) { - char_to_real_pixel_size (f, 0, XINT (rows), 0, &height); + char_to_real_pixel_size (f, 0, XINT (lines), 0, &height); width = FRAME_PIXWIDTH (f); } else { - height = XINT (rows); + height = XINT (lines); width = FRAME_WIDTH (f); } @@ -2650,7 +2652,7 @@ } DEFUN ("set-frame-size", Fset_frame_size, 3, 4, 0, /* -Set the size of FRAME to COLS by ROWS. +Set the size of FRAME to COLS by ROWS, measured in characters. Optional fourth arg non-nil means that redisplay should use COLS by ROWS but that the idea of the actual size of the frame should not be changed. */ diff -r a8296e22da4e -r 576fb035e263 src/frame.h --- a/src/frame.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/frame.h Mon Aug 13 11:36:19 2007 +0200 @@ -772,10 +772,8 @@ DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons))) void update_frame_title (struct frame *f); -Lisp_Object next_frame (Lisp_Object f, Lisp_Object frametype, - Lisp_Object console); -Lisp_Object previous_frame (Lisp_Object f, Lisp_Object frametype, - Lisp_Object console); +Lisp_Object next_frame (Lisp_Object, Lisp_Object, Lisp_Object); +Lisp_Object previous_frame (Lisp_Object, Lisp_Object, Lisp_Object); void pixel_to_char_size (struct frame *f, int pixel_width, int pixel_height, int *char_width, int *char_height); void char_to_pixel_size (struct frame *f, int char_width, int char_height, @@ -811,7 +809,7 @@ void io_error_delete_frame (Lisp_Object frame); Lisp_Object find_some_frame (int (*predicate) (Lisp_Object, void *), void *closure); -int device_matches_console_spec (Lisp_Object device, Lisp_Object console); +int device_matches_device_spec (Lisp_Object device, Lisp_Object device_spec); Lisp_Object frame_first_window (struct frame *f); int show_gc_cursor (struct frame *f, Lisp_Object cursor); void set_frame_selected_window (struct frame *f, Lisp_Object window); diff -r a8296e22da4e -r 576fb035e263 src/glyphs-msw.c --- a/src/glyphs-msw.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/glyphs-msw.c Mon Aug 13 11:36:19 2007 +0200 @@ -2601,9 +2601,10 @@ /* This function can call lisp */ Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); HWND wnd; - int flags = WS_TABSTOP;/* BS_NOTIFY #### is needed to get exotic feedback - only. Since we seem to want nothing beyond BN_CLICK, - the style is perhaps not necessary -- kkm */ + int flags = WS_TABSTOP | BS_NOTIFY; + /* BS_NOTIFY #### is needed to get exotic feedback only. Since we + seem to want nothing beyond BN_CLICK, the style is perhaps not + necessary -- kkm */ Lisp_Object style; Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii); Lisp_Gui_Item* pgui = XGUI_ITEM (gui); diff -r a8296e22da4e -r 576fb035e263 src/glyphs-x.c --- a/src/glyphs-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/glyphs-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -1000,12 +1000,13 @@ static Pixmap pixmap_from_xbm_inline (Lisp_Object device, int width, int height, /* Note that data is in ext-format! */ - const Extbyte *bits) + const char *bits) { - return XCreatePixmapFromBitmapData (DEVICE_X_DISPLAY (XDEVICE(device)), - XtWindow (DEVICE_XT_APP_SHELL (XDEVICE (device))), - (char *) bits, width, height, - 1, 0, 1); + return XCreatePixmapFromBitmapData + (DEVICE_X_DISPLAY (XDEVICE (device)), + XtWindow (DEVICE_XT_APP_SHELL (XDEVICE (device))), + (char *) bits, width, height, + 1, 0, 1); } /* Given inline data for a mono pixmap, initialize the given @@ -1168,7 +1169,7 @@ mask = pixmap_from_xbm_inline (IMAGE_INSTANCE_DEVICE (ii), XINT (XCAR (mask_data)), XINT (XCAR (XCDR (mask_data))), - (const unsigned char *) ext_data); + ext_data); } init_image_instance_from_xbm_inline (ii, width, height, bits, @@ -2209,8 +2210,8 @@ reference to the real values rather than a copy thus any changes we make to the values we get back will look like they have already been applied. If we rebuild the widget tree then - we may lose propertie. */ - wv = copy_widget_value_tree (lw_get_all_values + we may lose properties. */ + wv = copy_widget_value_tree (lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (p)), NO_CHANGE); } @@ -2980,7 +2981,7 @@ vector3 (Qxbm, Q_data, \ list3 (make_int (name##_width), \ make_int (name##_height), \ - make_ext_string (name##_bits, \ + make_ext_string ((Extbyte *) name##_bits, \ sizeof (name##_bits), \ Qbinary))), \ Qglobal, Qx, Qnil) diff -r a8296e22da4e -r 576fb035e263 src/glyphs.c --- a/src/glyphs.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/glyphs.c Mon Aug 13 11:36:19 2007 +0200 @@ -226,7 +226,7 @@ DEFUN ("valid-image-instantiator-format-p", Fvalid_image_instantiator_format_p, 1, 2, 0, /* Given an IMAGE-INSTANTIATOR-FORMAT, return non-nil if it is valid. -If LOCALE is non-nil then the format is checked in that domain. +If LOCALE is non-nil then the format is checked in that locale. If LOCALE is nil the current console is used. Valid formats are some subset of 'nothing, 'string, 'formatted-string, @@ -283,7 +283,7 @@ DEFUN ("set-console-type-image-conversion-list", Fset_console_type_image_conversion_list, 2, 2, 0, /* -Set the image-conversion-list for consoles of the given TYPE. +Set the image-conversion-list for consoles of the given CONSOLE-TYPE. The image-conversion-list specifies how image instantiators that are strings should be interpreted. Each element of the list should be a list of two elements (a regular expression string and a vector) or @@ -351,7 +351,7 @@ DEFUN ("console-type-image-conversion-list", Fconsole_type_image_conversion_list, 1, 1, 0, /* -Return the image-conversion-list for devices of the given TYPE. +Return the image-conversion-list for devices of the given CONSOLE-TYPE. The image-conversion-list specifies how to interpret image string instantiators for the specified console type. See `set-console-type-image-conversion-list' for a description of its syntax. @@ -473,11 +473,11 @@ DEFUN ("set-instantiator-property", Fset_instantiator_property, 3, 3, 0, /* -Destructively set the property KEYWORD of INSTANTIATOR to VAL. +Destructively set the property KEYWORD of INSTANTIATOR to VALUE. If the property is not set then it is added to a copy of the instantiator and the new instantiator returned. Use `set-glyph-image' on glyphs to register instantiator changes. */ - (instantiator, keyword, val)) + (instantiator, keyword, value)) { Lisp_Object *elt; int len; @@ -493,7 +493,7 @@ { if (EQ (elt[len], keyword)) { - elt[len+1] = val; + elt[len+1] = value; break; } } @@ -506,7 +506,7 @@ GCPRO1 (alist); alist = tagged_vector_to_alist (instantiator); - alist = Fcons (Fcons (keyword, val), alist); + alist = Fcons (Fcons (keyword, value), alist); result = alist_to_tagged_vector (elt[0], alist); free_alist (alist); RETURN_UNGCPRO (result); @@ -1413,11 +1413,11 @@ } Error_behavior -decode_error_behavior_flag (Lisp_Object no_error) -{ - if (NILP (no_error)) return ERROR_ME; - else if (EQ (no_error, Qt)) return ERROR_ME_NOT; - else return ERROR_ME_WARN; +decode_error_behavior_flag (Lisp_Object noerror) +{ + if (NILP (noerror)) return ERROR_ME; + else if (EQ (noerror, Qt)) return ERROR_ME_NOT; + else return ERROR_ME_WARN; } Lisp_Object @@ -1567,14 +1567,14 @@ If omitted, DOMAIN defaults to the selected window. -NO-ERROR controls what happens when the image cannot be generated. +NOERROR controls what happens when the image cannot be generated. If nil, an error message is generated. If t, no messages are generated and this function returns nil. If anything else, a warning message is generated and this function returns nil. */ - (data, domain, dest_types, no_error)) -{ - Error_behavior errb = decode_error_behavior_flag (no_error); + (data, domain, dest_types, noerror)) +{ + Error_behavior errb = decode_error_behavior_flag (noerror); return call_with_suspended_errors ((lisp_fn_t) make_image_instance_1, Qnil, Qimage, errb, @@ -2583,7 +2583,7 @@ LISP_STRING_TO_EXTERNAL (name, filename_ext, Qfile_name); result = read_bitmap_data_from_file (filename_ext, &w, &h, - &data, xhot, yhot); + (unsigned char **) &data, xhot, yhot); if (result == BitmapSuccess) { @@ -2592,7 +2592,7 @@ retval = list3 (make_int (w), make_int (h), make_ext_string (data, len, Qbinary)); - XFree ((char *) data); + XFree (data); return retval; } @@ -5383,7 +5383,7 @@ set_specifier_caching (Vcurrent_display_table, offsetof (struct window, display_table), some_window_value_changed, - 0, 0); + 0, 0, 0); } void diff -r a8296e22da4e -r 576fb035e263 src/glyphs.h --- a/src/glyphs.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/glyphs.h Mon Aug 13 11:36:19 2007 +0200 @@ -729,10 +729,11 @@ #define IMAGE_INSTANCE_WIDGET_PENDING_ITEMS(i) \ ((i)->u.subwindow.pending_items) #define IMAGE_INSTANCE_WIDGET_ITEM(i) \ -(CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \ -XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ - IMAGE_INSTANCE_WIDGET_ITEMS (i)) -#define IMAGE_INSTANCE_WIDGET_TEXT(i) XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEM (i))->name + (CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \ + XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ + IMAGE_INSTANCE_WIDGET_ITEMS (i)) +#define IMAGE_INSTANCE_WIDGET_TEXT(i) \ + XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEM (i))->name /* Layout properties */ #define IMAGE_INSTANCE_LAYOUT_CHILDREN(i) ((i)->u.subwindow.children) diff -r a8296e22da4e -r 576fb035e263 src/gui-x.c --- a/src/gui-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/gui-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -289,7 +289,7 @@ } /* This is the timestamp used for asserting focus so we need to get an - up-to-date value event if no events has been dispatched to emacs + up-to-date value event if no events have been dispatched to emacs */ #if defined(HAVE_MENUBARS) DEVICE_X_MOUSE_TIMESTAMP (d) = x_focus_timestamp_really_sucks_fix_me_better; @@ -489,11 +489,14 @@ if (NILP (pgui->style)) { Bufbyte *intname; + Bytecount intlen; /* If the callback is nil, treat this item like unselectable text. This way, dashes will show up as a separator. */ if (!wv->enabled) wv->type = BUTTON_TYPE; - EXTERNAL_TO_C_STRING (wv->name, intname, Qlwlib_encoding); + TO_INTERNAL_FORMAT (C_STRING, wv->name, + ALLOCA, (intname, intlen), + Qlwlib_encoding); if (separator_string_p (intname)) { wv->type = SEPARATOR_TYPE; diff -r a8296e22da4e -r 576fb035e263 src/gutter.c --- a/src/gutter.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/gutter.c Mon Aug 13 11:36:19 2007 +0200 @@ -249,6 +249,96 @@ return Fconcat (nargs, args); } +/* Sizing gutters is a pain so we try and help the user by determining + what height will accommodate all lines. This is useless on left and + right gutters as we always have a maximal number of lines. */ +static int +calculate_gutter_size_from_display_lines (enum gutter_pos pos, + display_line_dynarr* ddla) +{ + int size = 0; + struct display_line *dl; + + /* For top and bottom the calculation is easy. */ + if (pos == TOP_GUTTER || pos == BOTTOM_GUTTER) + { + /* grab coordinates of last line */ + if (Dynarr_length (ddla)) + { + dl = Dynarr_atp (ddla, Dynarr_length (ddla) - 1); + size = (dl->ypos + dl->descent - dl->clip) + - (Dynarr_atp (ddla, 0)->ypos - Dynarr_atp (ddla, 0)->ascent); + } + } + /* For left and right we have to do some maths. */ + else + { + int start_pos = 0, end_pos = 0, line; + for (line = 0; line < Dynarr_length (ddla); line++) + { + int block; + dl = Dynarr_atp (ddla, line); + + for (block = 0; block < Dynarr_largest (dl->display_blocks); block++) + { + struct display_block *db = Dynarr_atp (dl->display_blocks, block); + + if (db->type == TEXT) + { + start_pos = min (db->start_pos, start_pos); + end_pos = max (db->end_pos, end_pos); + } + } + } + size = end_pos - start_pos; + } + + return size; +} + +static Lisp_Object +calculate_gutter_size (struct window *w, enum gutter_pos pos) +{ + struct frame* f = XFRAME (WINDOW_FRAME (w)); + int count; + display_line_dynarr* ddla; + Lisp_Object ret = Qnil; + + /* degenerate case */ + if (NILP (RAW_WINDOW_GUTTER (w, pos)) + || + !FRAME_VISIBLE_P (f) + || + NILP (w->buffer)) + return Qnil; + + /* Redisplay code that we use relies on GC not happening. Make it + so. */ + count = specpdl_depth (); + record_unwind_protect (restore_gc_inhibit, + make_int (gc_currently_forbidden)); + gc_currently_forbidden = 1; + + ddla = Dynarr_new (display_line); + /* generate some display lines */ + generate_displayable_area (w, WINDOW_GUTTER (w, pos), + FRAME_LEFT_BORDER_END (f), + FRAME_TOP_BORDER_END (f), + FRAME_RIGHT_BORDER_START (f) + - FRAME_LEFT_BORDER_END (f), + FRAME_BOTTOM_BORDER_START (f) + - FRAME_TOP_BORDER_END (f), + ddla, 0, 0); + + /* Let GC happen again. */ + unbind_to (count, Qnil); + + ret = make_int (calculate_gutter_size_from_display_lines (pos, ddla)); + free_display_lines (ddla); + + return ret; +} + static void output_gutter (struct frame *f, enum gutter_pos pos, int force) { @@ -339,7 +429,10 @@ room for, and we are allowed to resize the gutter, then make sure this happens before the next time we try and output. This can happen when face font sizes change. */ - if (dl && dl->clip > 0 && EQ (w->gutter_size[pos], Qautodetect)) + if (dl && EQ (w->gutter_size[pos], Qautodetect) + && (dl->clip > 0 || + calculate_gutter_size_from_display_lines (pos, ddla) > + WINDOW_GUTTER_SIZE_INTERNAL (w, pos))) { /* #### Ideally we would just mark the specifier as dirty and everything else would "just work". Unfortunately we have @@ -378,63 +471,6 @@ w->gutter_extent_modiff [pos] = 0; } -/* Sizing gutters is a pain so we try and help the user by determining - what height will accommodate all lines. This is useless on left and - right gutters as we always have a maximal number of lines. */ -static Lisp_Object -calculate_gutter_size (struct window *w, enum gutter_pos pos) -{ - struct frame* f = XFRAME (WINDOW_FRAME (w)); - int ypos, count; - display_line_dynarr* ddla; - struct display_line *dl; - - /* we cannot autodetect gutter sizes for the left and right as there - is no reasonable metric to use */ - assert (pos == TOP_GUTTER || pos == BOTTOM_GUTTER); - /* degenerate case */ - if (NILP (RAW_WINDOW_GUTTER (w, pos)) - || - !FRAME_VISIBLE_P (f) - || - NILP (w->buffer)) - return Qnil; - - /* Redisplay code that we use relies on GC not happening. Make it - so. */ - count = specpdl_depth (); - record_unwind_protect (restore_gc_inhibit, - make_int (gc_currently_forbidden)); - gc_currently_forbidden = 1; - - ddla = Dynarr_new (display_line); - /* generate some display lines */ - generate_displayable_area (w, WINDOW_GUTTER (w, pos), - FRAME_LEFT_BORDER_END (f), - 0, - FRAME_RIGHT_BORDER_START (f) - - FRAME_LEFT_BORDER_END (f), - 200, - ddla, 0, 0); - - /* Let GC happen again. */ - unbind_to (count, Qnil); - - /* grab coordinates of last line */ - if (Dynarr_length (ddla)) - { - dl = Dynarr_atp (ddla, Dynarr_length (ddla) - 1); - ypos = dl->ypos + dl->descent - dl->clip; - free_display_lines (ddla); - return make_int (ypos); - } - else - { - free_display_lines (ddla); - return Qnil; - } -} - static void clear_gutter (struct frame *f, enum gutter_pos pos) { @@ -686,14 +722,8 @@ list1 (Fcons (Qnil, Qzero))); set_specifier_fallback (Vgutter_border_width[new], Vdefault_gutter_border_width); - /* We don't really want the left and right gutters to default to - visible. */ - set_specifier_fallback (Vgutter_visible_p[cur], - cur == TOP_GUTTER || cur == BOTTOM_GUTTER ? - list1 (Fcons (Qnil, Qt)) - : list1 (Fcons (Qnil, Qnil))); - set_specifier_fallback (Vgutter_visible_p[new], - Vdefault_gutter_visible_p); + set_specifier_fallback (Vgutter_visible_p[cur], list1 (Fcons (Qnil, Qt))); + set_specifier_fallback (Vgutter_visible_p[new], Vdefault_gutter_visible_p); Vdefault_gutter_position = position; unhold_frame_size_changes (); @@ -1158,7 +1188,7 @@ set_specifier_caching (Vdefault_gutter, offsetof (struct window, default_gutter), default_gutter_specs_changed, - 0, 0); + 0, 0, 1); DEFVAR_SPECIFIER ("top-gutter", &Vgutter[TOP_GUTTER] /* @@ -1170,7 +1200,7 @@ set_specifier_caching (Vgutter[TOP_GUTTER], offsetof (struct window, gutter[TOP_GUTTER]), top_gutter_specs_changed, - 0, 0); + 0, 0, 1); DEFVAR_SPECIFIER ("bottom-gutter", &Vgutter[BOTTOM_GUTTER] /* @@ -1187,7 +1217,7 @@ set_specifier_caching (Vgutter[BOTTOM_GUTTER], offsetof (struct window, gutter[BOTTOM_GUTTER]), bottom_gutter_specs_changed, - 0, 0); + 0, 0, 1); DEFVAR_SPECIFIER ("left-gutter", &Vgutter[LEFT_GUTTER] /* @@ -1204,7 +1234,7 @@ set_specifier_caching (Vgutter[LEFT_GUTTER], offsetof (struct window, gutter[LEFT_GUTTER]), left_gutter_specs_changed, - 0, 0); + 0, 0, 1); DEFVAR_SPECIFIER ("right-gutter", &Vgutter[RIGHT_GUTTER] /* @@ -1221,7 +1251,7 @@ set_specifier_caching (Vgutter[RIGHT_GUTTER], offsetof (struct window, gutter[RIGHT_GUTTER]), right_gutter_specs_changed, - 0, 0); + 0, 0, 1); /* initially, top inherits from default; this can be changed with `set-default-gutter-position'. */ @@ -1261,7 +1291,7 @@ set_specifier_caching (Vdefault_gutter_height, offsetof (struct window, default_gutter_height), default_gutter_size_changed_in_window, - 0, 0); + 0, 0, 1); DEFVAR_SPECIFIER ("default-gutter-width", &Vdefault_gutter_width /* *Width of the default gutter, if it's oriented vertically. @@ -1269,11 +1299,11 @@ See `default-gutter-height' for more information. */ ); - Vdefault_gutter_width = Fmake_specifier (Qnatnum); + Vdefault_gutter_width = Fmake_specifier (Qgutter_size); set_specifier_caching (Vdefault_gutter_width, offsetof (struct window, default_gutter_width), default_gutter_size_changed_in_window, - 0, 0); + 0, 0, 1); DEFVAR_SPECIFIER ("top-gutter-height", &Vgutter_size[TOP_GUTTER] /* @@ -1285,7 +1315,7 @@ Vgutter_size[TOP_GUTTER] = Fmake_specifier (Qgutter_size); set_specifier_caching (Vgutter_size[TOP_GUTTER], offsetof (struct window, gutter_size[TOP_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 1); DEFVAR_SPECIFIER ("bottom-gutter-height", &Vgutter_size[BOTTOM_GUTTER] /* @@ -1297,7 +1327,7 @@ Vgutter_size[BOTTOM_GUTTER] = Fmake_specifier (Qgutter_size); set_specifier_caching (Vgutter_size[BOTTOM_GUTTER], offsetof (struct window, gutter_size[BOTTOM_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 1); DEFVAR_SPECIFIER ("left-gutter-width", &Vgutter_size[LEFT_GUTTER] /* @@ -1306,10 +1336,10 @@ See `default-gutter-height' for more information. */ ); - Vgutter_size[LEFT_GUTTER] = Fmake_specifier (Qnatnum); + Vgutter_size[LEFT_GUTTER] = Fmake_specifier (Qgutter_size); set_specifier_caching (Vgutter_size[LEFT_GUTTER], offsetof (struct window, gutter_size[LEFT_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 1); DEFVAR_SPECIFIER ("right-gutter-width", &Vgutter_size[RIGHT_GUTTER] /* @@ -1318,10 +1348,10 @@ See `default-gutter-height' for more information. */ ); - Vgutter_size[RIGHT_GUTTER] = Fmake_specifier (Qnatnum); + Vgutter_size[RIGHT_GUTTER] = Fmake_specifier (Qgutter_size); set_specifier_caching (Vgutter_size[RIGHT_GUTTER], offsetof (struct window, gutter_size[RIGHT_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 1); fb = Qnil; #ifdef HAVE_TTY @@ -1339,15 +1369,14 @@ fb = Qnil; #ifdef HAVE_TTY - fb = Fcons (Fcons (list1 (Qtty), Qzero), fb); + fb = Fcons (Fcons (list1 (Qtty), Qautodetect), fb); #endif #ifdef HAVE_X_WINDOWS - fb = Fcons (Fcons (list1 (Qx), make_int (DEFAULT_GUTTER_WIDTH)), fb); + fb = Fcons (Fcons (list1 (Qx), Qautodetect), fb); #endif #ifdef HAVE_MS_WINDOWS - fb = Fcons (Fcons (list1 (Qmsprinter), Qzero), fb); - fb = Fcons (Fcons (list1 (Qmswindows), - make_int (DEFAULT_GUTTER_WIDTH)), fb); + fb = Fcons (Fcons (list1 (Qmsprinter), Qautodetect), fb); + fb = Fcons (Fcons (list1 (Qmswindows), Qautodetect), fb); #endif if (!NILP (fb)) set_specifier_fallback (Vdefault_gutter_width, fb); @@ -1376,7 +1405,7 @@ set_specifier_caching (Vdefault_gutter_border_width, offsetof (struct window, default_gutter_border_width), default_gutter_border_width_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("top-gutter-border-width", &Vgutter_border_width[TOP_GUTTER] /* @@ -1389,7 +1418,7 @@ set_specifier_caching (Vgutter_border_width[TOP_GUTTER], offsetof (struct window, gutter_border_width[TOP_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 0); DEFVAR_SPECIFIER ("bottom-gutter-border-width", &Vgutter_border_width[BOTTOM_GUTTER] /* @@ -1402,7 +1431,7 @@ set_specifier_caching (Vgutter_border_width[BOTTOM_GUTTER], offsetof (struct window, gutter_border_width[BOTTOM_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 0); DEFVAR_SPECIFIER ("left-gutter-border-width", &Vgutter_border_width[LEFT_GUTTER] /* @@ -1415,7 +1444,7 @@ set_specifier_caching (Vgutter_border_width[LEFT_GUTTER], offsetof (struct window, gutter_border_width[LEFT_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 0); DEFVAR_SPECIFIER ("right-gutter-border-width", &Vgutter_border_width[RIGHT_GUTTER] /* @@ -1428,7 +1457,7 @@ set_specifier_caching (Vgutter_border_width[RIGHT_GUTTER], offsetof (struct window, gutter_border_width[RIGHT_GUTTER]), - gutter_geometry_changed_in_window, 0, 0); + gutter_geometry_changed_in_window, 0, 0, 0); fb = Qnil; #ifdef HAVE_TTY @@ -1470,7 +1499,7 @@ offsetof (struct window, default_gutter_visible_p), default_gutter_visible_p_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("top-gutter-visible-p", &Vgutter_visible_p[TOP_GUTTER] /* @@ -1483,7 +1512,7 @@ set_specifier_caching (Vgutter_visible_p[TOP_GUTTER], offsetof (struct window, gutter_visible_p[TOP_GUTTER]), - top_gutter_specs_changed, 0, 0); + top_gutter_specs_changed, 0, 0, 0); DEFVAR_SPECIFIER ("bottom-gutter-visible-p", &Vgutter_visible_p[BOTTOM_GUTTER] /* @@ -1496,7 +1525,7 @@ set_specifier_caching (Vgutter_visible_p[BOTTOM_GUTTER], offsetof (struct window, gutter_visible_p[BOTTOM_GUTTER]), - bottom_gutter_specs_changed, 0, 0); + bottom_gutter_specs_changed, 0, 0, 0); DEFVAR_SPECIFIER ("left-gutter-visible-p", &Vgutter_visible_p[LEFT_GUTTER] /* @@ -1509,7 +1538,7 @@ set_specifier_caching (Vgutter_visible_p[LEFT_GUTTER], offsetof (struct window, gutter_visible_p[LEFT_GUTTER]), - left_gutter_specs_changed, 0, 0); + left_gutter_specs_changed, 0, 0, 0); DEFVAR_SPECIFIER ("right-gutter-visible-p", &Vgutter_visible_p[RIGHT_GUTTER] /* @@ -1522,7 +1551,7 @@ set_specifier_caching (Vgutter_visible_p[RIGHT_GUTTER], offsetof (struct window, gutter_visible_p[RIGHT_GUTTER]), - right_gutter_specs_changed, 0, 0); + right_gutter_specs_changed, 0, 0, 0); /* initially, top inherits from default; this can be changed with `set-default-gutter-position'. */ diff -r a8296e22da4e -r 576fb035e263 src/hpplay.c --- a/src/hpplay.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/hpplay.c Mon Aug 13 11:36:19 2007 +0200 @@ -27,7 +27,7 @@ Play .au sound files on hp9000s700 BUGS I have been unable to figure out how to use the volume feature, so no - attempts has been made to honor the volume arg of play_sound_* + attempt has been made to honor the volume arg of play_sound_* This means that all sounds are played at 100%. The gain parameter can be set by using the hp-play-gain variable. diff -r a8296e22da4e -r 576fb035e263 src/indent.c --- a/src/indent.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/indent.c Mon Aug 13 11:36:19 2007 +0200 @@ -272,11 +272,11 @@ DEFUN ("indent-to", Findent_to, 1, 3, "NIndent to column: ", /* Indent from point with tabs and spaces until COLUMN is reached. -Optional second argument MIN says always do at least MIN spaces - even if that goes past COLUMN; by default, MIN is zero. +Optional second argument MINIMUM says always do at least MINIMUM spaces + even if that goes past COLUMN; by default, MINIMUM is zero. If BUFFER is nil, the current buffer is assumed. */ - (col, minimum, buffer)) + (column, minimum, buffer)) { /* This function can GC */ int mincol; @@ -285,7 +285,7 @@ int tab_width = XINT (buf->tab_width); Bufpos opoint = 0; - CHECK_INT (col); + CHECK_INT (column); if (NILP (minimum)) minimum = Qzero; else @@ -295,7 +295,7 @@ fromcol = current_column (buf); mincol = fromcol + XINT (minimum); - if (mincol < XINT (col)) mincol = XINT (col); + if (mincol < XINT (column)) mincol = XINT (column); if (fromcol == mincol) return make_int (mincol); diff -r a8296e22da4e -r 576fb035e263 src/input-method-xlib.c --- a/src/input-method-xlib.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/input-method-xlib.c Mon Aug 13 11:36:19 2007 +0200 @@ -34,9 +34,9 @@ The XIC is of each frame, by each frame, for each frame. The exceptions are: 1. Activate XICs on poor frames when the XIM is back. - 2. Deactivate all the XICs when the XIM go down. + 2. Deactivate all the XICs when the XIM goes down. - Methods: + Implementation: - Register a callback for an XIM when the X device is being initialized. XIM_init_device (d) { XRegisterIMInstantiateCallback (); } @@ -55,7 +55,7 @@ In IMDestroyCallback: DEVICE_FRAME_LOOP (...) { FRAME_X_XIC (f) = NULL; } - - Re-enable XIC for all the frames which doesn't have XIC when the XIM + - Re-enable XIC for all the frames which don't have XIC when the XIM is back. In IMInstantiateCallback: DEVICE_FRAME_LOOP (...) { XIM_init_frame (f); } @@ -71,6 +71,7 @@ #include #include "lisp.h" #include /* More portable than ? */ +#include #include "frame.h" #include "device.h" #include "window.h" @@ -79,10 +80,6 @@ #include "EmacsFrame.h" #include "events.h" -#ifdef THIS_IS_X11R6 -#include -#endif - #ifndef XIM_XLIB #error XIM_XLIB is not defined?? #endif @@ -122,13 +119,10 @@ "XIMPreeditNone|XIMStatusNothing\n" "XIMPreeditNone|XIMStatusNone"; -static Boolean xim_initted = False; - static XIMStyle best_style (XIMStyles *user, XIMStyles *xim); -/* #### it appears this prototype is missing from the X11R6.4 includes, - at least the XFree86 version ... */ -char * XSetIMValues(XIM, ...); +/* This function is documented, but no prototype in the header files */ +EXTERN_C char * XSetIMValues(XIM, ...); void Initialize_Locale (void) @@ -181,7 +175,11 @@ } } -#ifdef THIS_IS_X11R6 /* Callbacks for IM are supported from X11R6 or later. */ +/* Callbacks for IM are supported from X11R6 or later. */ +#ifdef HAVE_XREGISTERIMINSTANTIATECALLBACK + +static Boolean xim_initted = False; + /* Called from when XIM is destroying. Clear all the XIC when the XIM was destroying... */ static void @@ -224,7 +222,7 @@ DEVICE_X_XIM (d) = xim = XOpenIM (dpy, XtDatabase (dpy), name, class); /* destroy callback for im */ - ximcallback.callback = IMDestroyCallback; + ximcallback.callback = (XIMProc) IMDestroyCallback; ximcallback.client_data = (XPointer) d; XSetIMValues (xim, XNDestroyCallback, &ximcallback, NULL); } @@ -240,23 +238,29 @@ } return; } -#endif /* if THIS_IS_X11R6 */ +#endif /* HAVE_XREGISTERIMINSTANTIATECALLBACK */ /* Initialize XIM for X device. Register the use of XIM using XRegisterIMInstantiateCallback. */ void XIM_init_device (struct device *d) { -#ifdef THIS_IS_X11R6 +#ifdef HAVE_XREGISTERIMINSTANTIATECALLBACK /* X11R6+ */ DEVICE_X_XIM (d) = NULL; XRegisterIMInstantiateCallback (DEVICE_X_DISPLAY (d), NULL, NULL, NULL, - IMInstantiateCallback, +#ifdef XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE /* The sixth parameter is of type XPointer in XFree86 but (XPointer *) on most other X11's. */ - (void *) d); + (XIDProc) IMInstantiateCallback, + (XPointer) d +#else /* X Consortium prototype */ + (XIMProc) IMInstantiateCallback, + (XPointer *) d +#endif /* XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE */ + ); return; -#else +#else /* pre-X11R6 */ Display *dpy = DEVICE_X_DISPLAY (d); char *name, *class; XIM xim; @@ -273,7 +277,7 @@ XGetIMValues (xim, XNQueryInputStyle, &DEVICE_X_XIM_STYLES (d), NULL); return; } -#endif +#endif /* HAVE_XREGISTERIMINSTANTIATECALLBACK */ } @@ -407,7 +411,7 @@ XSetICFocus (xic); -#ifdef THIS_IS_X11R6 +#ifdef HAVE_XREGISTERIMINSTANTIATECALLBACK /* when frame is going to be destroyed (closed) */ XtAddCallback (FRAME_X_TEXT_WIDGET(f), XNDestroyCallback, XIM_delete_frame, (XtPointer)f); diff -r a8296e22da4e -r 576fb035e263 src/intl.c --- a/src/intl.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/intl.c Mon Aug 13 11:36:19 2007 +0200 @@ -168,16 +168,18 @@ Lisp_Object Qdefer_gettext; DEFUN ("ignore-defer-gettext", Fignore_defer_gettext, 1, 1, 0, /* -If OBJ is of the form (defer-gettext "string"), return the string. +If OBJECT is of the form (defer-gettext "string"), return the string. The purpose of the defer-gettext symbol is to identify strings which are translated when they are referenced instead of when they are defined. */ - (obj)) + (object)) { - if (CONSP (obj) && SYMBOLP (Fcar (obj)) && EQ (Fcar (obj), Qdefer_gettext)) - return Fcar (Fcdr (obj)); + if (CONSP (object) + && SYMBOLP (Fcar (object)) + && EQ (Fcar (object), Qdefer_gettext)) + return Fcar (Fcdr (object)); else - return obj; + return object; } DEFUN ("gettext", Fgettext, 1, 1, 0, /* diff -r a8296e22da4e -r 576fb035e263 src/keymap.c --- a/src/keymap.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/keymap.c Mon Aug 13 11:36:19 2007 +0200 @@ -795,9 +795,9 @@ DEFUN ("make-sparse-keymap", Fmake_sparse_keymap, 0, 1, 0, /* Construct and return a new keymap object. All entries in it are nil, meaning "command undefined". The only -difference between this function and make-keymap is that this function +difference between this function and `make-keymap' is that this function returns a "smaller" keymap (one that is expected to contain fewer -entries). As keymaps dynamically resize, the distinction is not great. +entries). As keymaps dynamically resize, this distinction is not great. Optional argument NAME specifies a name to assign to the keymap, as in `set-keymap-name'. This name is only a debugging convenience; @@ -968,7 +968,7 @@ } DEFUN ("keymapp", Fkeymapp, 1, 1, 0, /* -Return t if ARG is a keymap object. +Return t if OBJECT is a keymap object. The keymap may be autoloaded first if necessary. */ (object)) @@ -2181,8 +2181,8 @@ for valid key definitions and key-sequence specifications. A number is returned if KEYS is "too long"; that is, the leading characters fail to be a valid sequence of prefix characters in KEYMAP. -The number is how many characters at the front of KEYS -it takes to reach a non-prefix command. +The number is how many key strokes at the front of KEYS it takes to +reach a non-prefix command. */ (keymap, keys, accept_default)) { @@ -2535,7 +2535,7 @@ For key-presses, the order of keymaps searched is: - the `keymap' property of any extent(s) at point; - any applicable minor-mode maps; - - the current-local-map of the current-buffer; + - the current local map of the current-buffer; - the current global map. For mouse-clicks, the order of keymaps searched is: @@ -2545,9 +2545,9 @@ (this includes modeline extents); - the modeline-map of the buffer corresponding to the modeline under the mouse (if the click happened over a modeline); - - the value of toolbar-map in the current-buffer (if the click + - the value of `toolbar-map' in the current-buffer (if the click happened over a toolbar); - - the current-local-map of the buffer under the mouse (does not + - the current local map of the buffer under the mouse (does not apply to toolbar clicks); - any applicable minor-mode maps; - the current global map. diff -r a8296e22da4e -r 576fb035e263 src/lisp.h --- a/src/lisp.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/lisp.h Mon Aug 13 11:36:19 2007 +0200 @@ -304,19 +304,14 @@ typedef char SBufbyte; /* The data representing a string in "external" format (binary or any - external encoding) is logically a set of Extbytes, declared as follows. */ - -typedef UChar Extbyte; /* #### I REALLY think this should be a char. This - is more logical and will fix enough char-UChar - inconsistencies that maybe we'll be able to stop - turning off those warnings. --ben */ - -/* Explicitly signed or unsigned versions: */ -typedef UChar UExtbyte; -typedef char SExtbyte; + external encoding) is logically a set of Extbytes, declared as + follows. Extbyte is guaranteed to be just a char, so for example + strlen (Extbyte *) is OK. Extbyte is only a documentation device + for referring to external text. */ + +typedef char Extbyte; /* A byte in a string in binary format: */ - typedef char Char_Binary; typedef UChar UChar_Binary; @@ -808,24 +803,20 @@ tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) -#define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ - tortoise, suspicion_length) \ - for (tortoise = hare = list, len = 0; \ - \ - (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \ - (NILP (hare) ? 0 : \ - (signal_malformed_list_error (list), 0))); \ - \ - hare = XCDR (hare), \ - ((++len < suspicion_length) ? \ - ((void) 0) : \ - (((len & 1) ? \ - ((void) (tortoise = XCDR (tortoise))) : \ - ((void) 0)) \ - , \ - (EQ (hare, tortoise) ? \ - ((void) signal_circular_list_error (list)) : \ - ((void) 0))))) +#define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ + tortoise, suspicion_length) \ + for (tortoise = hare = list, len = 0; \ + \ + (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \ + (NILP (hare) ? 0 : \ + (signal_malformed_list_error (list), 0))); \ + \ + hare = XCDR (hare), \ + (void) \ + ((++len > suspicion_length) \ + && \ + ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \ + (EQ (hare, tortoise) && (signal_circular_list_error (list), 0))))) /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH: diff -r a8296e22da4e -r 576fb035e263 src/lread.c --- a/src/lread.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/lread.c Mon Aug 13 11:36:19 2007 +0200 @@ -258,12 +258,13 @@ Emchar c = Lstream_get_emchar (XLSTREAM (readcharfun)); #ifdef DEBUG_XEMACS /* testing Mule */ static int testing_mule = 0; /* Change via debugger */ - if (testing_mule) { - if (c >= 0x20 && c <= 0x7E) stderr_out ("%c", c); - else if (c == '\n') stderr_out ("\\n\n"); - else stderr_out ("\\%o ", c); - } -#endif + if (testing_mule) + { + if (c >= 0x20 && c <= 0x7E) stderr_out ("%c", c); + else if (c == '\n') stderr_out ("\\n\n"); + else stderr_out ("\\%o ", c); + } +#endif /* testing Mule */ return c; } else if (MARKERP (readcharfun)) @@ -536,7 +537,7 @@ general be different from CODESYS if CODESYS specifies automatic encoding detection or end-of-line detection. */ - (file, no_error, nomessage, nosuffix, codesys, used_codesys)) + (file, noerror, nomessage, nosuffix, codesys, used_codesys)) { /* This function can GC */ int fd = -1; @@ -567,7 +568,7 @@ /* If file name is magic, call the handler. */ handler = Ffind_file_name_handler (file, Qload); if (!NILP (handler)) - RETURN_UNGCPRO (call5 (handler, Qload, file, no_error, + RETURN_UNGCPRO (call5 (handler, Qload, file, noerror, nomessage, nosuffix)); /* Do this after the handler to avoid @@ -596,7 +597,7 @@ if (fd < 0) { - if (NILP (no_error)) + if (NILP (noerror)) signal_file_error ("Cannot open load file", file); else { @@ -1470,22 +1471,21 @@ Programs can pass two arguments, BUFFER and PRINTFLAG. BUFFER is the buffer to evaluate (nil means use current buffer). PRINTFLAG controls printing of output: -nil means discard it; anything else is stream for print. +nil means discard it; anything else is a stream for printing. If there is no error, point does not move. If there is an error, point remains at the end of the last character read from the buffer. -Execute BUFFER as Lisp code. */ - (bufname, printflag)) + (buffer, printflag)) { /* This function can GC */ int speccount = specpdl_depth (); Lisp_Object tem, buf; - if (NILP (bufname)) + if (NILP (buffer)) buf = Fcurrent_buffer (); else - buf = Fget_buffer (bufname); + buf = Fget_buffer (buffer); if (NILP (buf)) error ("No such buffer."); @@ -1519,10 +1519,10 @@ DEFUN ("eval-region", Feval_region, 2, 3, "r", /* Execute the region as Lisp code. -When called from programs, expects two arguments, +When called from programs, expects two arguments START and END giving starting and ending indices in the current buffer of the text to be executed. -Programs can pass third argument PRINTFLAG which controls output: +Programs can pass third optional argument STREAM which controls output: nil means discard it; anything else is stream for printing it. If there is no error, point does not move. If there is an error, @@ -1532,28 +1532,28 @@ If the code being eval'd should happen to trigger a redisplay you may see some text temporarily disappear because of this. */ - (b, e, printflag)) + (start, end, stream)) { /* This function can GC */ int speccount = specpdl_depth (); Lisp_Object tem; Lisp_Object cbuf = Fcurrent_buffer (); - if (NILP (printflag)) + if (NILP (stream)) tem = Qsymbolp; /* #### #@[]*&$#*[& SI:NULL-STREAM */ else - tem = printflag; + tem = stream; specbind (Qstandard_output, tem); - if (NILP (printflag)) + if (NILP (stream)) record_unwind_protect (save_excursion_restore, save_excursion_save ()); record_unwind_protect (save_restriction_restore, save_restriction_save ()); - /* This both uses b and checks its type. */ - Fgoto_char (b, cbuf); - Fnarrow_to_region (make_int (BUF_BEGV (current_buffer)), e, cbuf); + /* This both uses start and checks its type. */ + Fgoto_char (start, cbuf); + Fnarrow_to_region (make_int (BUF_BEGV (current_buffer)), end, cbuf); readevalloop (cbuf, XBUFFER (cbuf)->filename, Feval, - !NILP (printflag)); + !NILP (stream)); return unbind_to (speccount, Qnil); } @@ -2035,23 +2035,27 @@ read_bit_vector (Lisp_Object readcharfun) { unsigned_char_dynarr *dyn = Dynarr_new (unsigned_char); - Emchar c; Lisp_Object val; while (1) { - c = readchar (readcharfun); - if (c != '0' && c != '1') - break; - Dynarr_add (dyn, (unsigned char) (c - '0')); + unsigned char bit; + Emchar c = readchar (readcharfun); + if (c == '0') + bit = 0; + else if (c == '1') + bit = 1; + else + { + if (c >= 0) + unreadchar (readcharfun, c); + break; + } + Dynarr_add (dyn, bit); } - if (c >= 0) - unreadchar (readcharfun, c); - val = make_bit_vector_from_byte_vector (Dynarr_atp (dyn, 0), Dynarr_length (dyn)); - Dynarr_free (dyn); return val; diff -r a8296e22da4e -r 576fb035e263 src/lrecord.h --- a/src/lrecord.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/lrecord.h Mon Aug 13 11:36:19 2007 +0200 @@ -477,11 +477,11 @@ #define MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) \ -unsigned int lrecord_type_##c_name = lrecord_type_count++; \ -const struct lrecord_implementation lrecord_##c_name = \ +unsigned int lrecord_type_##c_name; \ +struct lrecord_implementation lrecord_##c_name = \ { name, marker, printer, nuker, equal, hash, desc, \ getprop, putprop, remprop, plist, size, sizer, \ - (enum lrecord_type)lrecord_type_##c_name, basic_p } + lrecord_type_last_built_in_type, basic_p } extern Lisp_Object (*lrecord_markers[]) (Lisp_Object); @@ -492,6 +492,12 @@ lrecord_implementations_table[lrecord_type_##type]->marker; \ } while (0) +#define INIT_EXTERNAL_LRECORD_IMPLEMENTATION(type) do { \ + lrecord_type_##type = lrecord_type_count++; \ + lrecord_##type.lrecord_type_index = lrecord_type_##type; \ + INIT_LRECORD_IMPLEMENTATION(type); \ +} while (0) + #define LRECORDP(a) (XTYPE (a) == Lisp_Type_Record) #define XRECORD_LHEADER(a) ((struct lrecord_header *) XPNTR (a)) @@ -646,7 +652,16 @@ # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ extern unsigned int lrecord_type_##c_name; \ -DECLARE_LRECORD(c_name, structtype) +extern struct lrecord_implementation lrecord_##c_name; \ +INLINE_HEADER structtype * \ +error_check_##c_name (Lisp_Object obj); \ +INLINE_HEADER structtype * \ +error_check_##c_name (Lisp_Object obj) \ +{ \ + assert (RECORD_TYPEP (obj, lrecord_type_##c_name)); \ + return (structtype *) XPNTR (obj); \ +} \ +extern Lisp_Object Q##c_name##p # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ INLINE_HEADER structtype * \ @@ -676,7 +691,7 @@ # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ extern Lisp_Object Q##c_name##p; \ extern unsigned int lrecord_type_##c_name; \ -extern const struct lrecord_implementation lrecord_##c_name +extern struct lrecord_implementation lrecord_##c_name # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ extern Lisp_Object Q##c_name##p # define XRECORD(x, c_name, structtype) ((structtype *) XPNTR (x)) diff -r a8296e22da4e -r 576fb035e263 src/lstream.c --- a/src/lstream.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/lstream.c Mon Aug 13 11:36:19 2007 +0200 @@ -74,20 +74,21 @@ 0 on success, -1 on error. 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. + Read one byte from the stream and returns it as an unsigned + char cast to an int, or EOF on end of file or error. + This is a macro and so it is very efficient. The STREAM + argument is evaluated more than once. 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. + Push one byte back onto the input queue, cast to unsigned char. + 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. int Lstream_fputc (Lstream *stream, int c) int Lstream_fgetc (Lstream *stream) @@ -497,7 +498,7 @@ return lstr->imp->was_blocked_p ? lstr->imp->was_blocked_p (lstr) : 0; } -static int +static ssize_t Lstream_raw_read (Lstream *lstr, unsigned char *buffer, size_t size) { if (! (lstr->flags & LSTREAM_FL_IS_OPEN)) diff -r a8296e22da4e -r 576fb035e263 src/lstream.h --- a/src/lstream.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/lstream.h Mon Aug 13 11:36:19 2007 +0200 @@ -273,8 +273,9 @@ Lstream_get_emchar (Lstream *stream) { int c = Lstream_getc (stream); - return BYTE_ASCII_P (c) ? (Emchar) c : - Lstream_get_emchar_1 (stream, c); + return (c < 0x80 /* c == EOF || BYTE_ASCII_P (c) */ + ? (Emchar) c + : Lstream_get_emchar_1 (stream, c)); } INLINE_HEADER int Lstream_put_emchar (Lstream *stream, Emchar ch); diff -r a8296e22da4e -r 576fb035e263 src/m/alpha.h --- a/src/m/alpha.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/m/alpha.h Mon Aug 13 11:36:19 2007 +0200 @@ -19,10 +19,6 @@ Boston, MA 02111-1307, USA. */ -#ifdef LINUX -# define SYSTEM_MALLOC -#endif - #ifdef OSF1 # define ORDINARY_LINK #endif diff -r a8296e22da4e -r 576fb035e263 src/macros.c --- a/src/macros.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/macros.c Mon Aug 13 11:36:19 2007 +0200 @@ -257,7 +257,7 @@ If MACRO is a symbol, its function definition is used. COUNT is a repeat count, or nil for once, or 0 for infinite loop. */ - (macro, prefixarg)) + (macro, count)) { /* This function can GC */ Lisp_Object final; @@ -267,10 +267,10 @@ struct gcpro gcpro1; struct console *con = XCONSOLE (Vselected_console); - if (!NILP (prefixarg)) + if (!NILP (count)) { - prefixarg = Fprefix_numeric_value (prefixarg); - repeat = XINT (prefixarg); + count = Fprefix_numeric_value (count); + repeat = XINT (count); } final = indirect_function (macro, 1); diff -r a8296e22da4e -r 576fb035e263 src/marker.c --- a/src/marker.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/marker.c Mon Aug 13 11:36:19 2007 +0200 @@ -168,8 +168,8 @@ #endif static Lisp_Object -set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, - int restricted_p) +set_marker_internal (Lisp_Object marker, Lisp_Object position, + Lisp_Object buffer, int restricted_p) { Bufpos charno; struct buffer *b; @@ -182,8 +182,8 @@ /* If position is nil or a marker that points nowhere, make this marker point nowhere. */ - if (NILP (pos) || - (MARKERP (pos) && !XMARKER (pos)->buffer)) + if (NILP (position) || + (MARKERP (position) && !XMARKER (position)->buffer)) { if (point_p) signal_simple_error ("Can't make point-marker point nowhere", @@ -193,7 +193,7 @@ return marker; } - CHECK_INT_COERCE_MARKER (pos); + CHECK_INT_COERCE_MARKER (position); if (NILP (buffer)) b = current_buffer; else @@ -212,7 +212,7 @@ } } - charno = XINT (pos); + charno = XINT (position); m = XMARKER (marker); if (restricted_p) @@ -259,26 +259,32 @@ DEFUN ("set-marker", Fset_marker, 2, 3, 0, /* -Position MARKER before character number NUMBER in BUFFER. +Move MARKER to position POSITION in BUFFER. +POSITION can be a marker, an integer or nil. If POSITION is an +integer, make MARKER point before the POSITIONth character in BUFFER. +If POSITION is nil, makes MARKER point nowhere. Then it no longer +slows down editing in any buffer. If POSITION is less than 1, move +MARKER to the beginning of BUFFER. If POSITION is greater than the +size of BUFFER, move MARKER to the end of BUFFER. BUFFER defaults to the current buffer. -If NUMBER is nil, makes marker point nowhere. -Then it no longer slows down editing in any buffer. -If this marker was returned by (point-marker t), then changing its position -moves point. You cannot change its buffer or make it point nowhere. -Returns MARKER. +If this marker was returned by (point-marker t), then changing its +position moves point. You cannot change its buffer or make it point +nowhere. +The return value is MARKER. */ - (marker, number, buffer)) + (marker, position, buffer)) { - return set_marker_internal (marker, number, buffer, 0); + return set_marker_internal (marker, position, buffer, 0); } /* This version of Fset_marker won't let the position be outside the visible part. */ Lisp_Object -set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer) +set_marker_restricted (Lisp_Object marker, Lisp_Object position, + Lisp_Object buffer) { - return set_marker_internal (marker, pos, buffer, 1); + return set_marker_internal (marker, position, buffer, 1); } @@ -404,21 +410,21 @@ } DEFUN ("copy-marker", Fcopy_marker, 1, 2, 0, /* -Return a new marker pointing at the same place as MARKER. -If argument is a number, makes a new marker pointing +Return a new marker pointing at the same place as MARKER-OR-INTEGER. +If MARKER-OR-INTEGER is an integer, return a new marker pointing at that position in the current buffer. -The optional argument TYPE specifies the insertion type of the new marker; -see `marker-insertion-type'. +Optional argument MARKER-TYPE specifies the insertion type of the new +marker; see `marker-insertion-type'. */ - (marker, type)) + (marker_or_integer, marker_type)) { - return copy_marker_1 (marker, type, 0); + return copy_marker_1 (marker_or_integer, marker_type, 0); } Lisp_Object -noseeum_copy_marker (Lisp_Object marker, Lisp_Object type) +noseeum_copy_marker (Lisp_Object marker, Lisp_Object marker_type) { - return copy_marker_1 (marker, type, 1); + return copy_marker_1 (marker, marker_type, 1); } DEFUN ("marker-insertion-type", Fmarker_insertion_type, 1, 1, 0, /* diff -r a8296e22da4e -r 576fb035e263 src/menubar-x.c --- a/src/menubar-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/menubar-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -251,7 +251,7 @@ title_wv->enabled = 1; title_wv->next = sep_wv; sep_wv->type = SEPARATOR_TYPE; - sep_wv->value = menu_separator_style_and_to_external ("=="); + sep_wv->value = menu_separator_style_and_to_external ((Bufbyte *) "=="); sep_wv->next = 0; wv->contents = title_wv; diff -r a8296e22da4e -r 576fb035e263 src/menubar.c --- a/src/menubar.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/menubar.c Mon Aug 13 11:36:19 2007 +0200 @@ -232,7 +232,7 @@ } DEFUN ("popup-menu", Fpopup_menu, 1, 2, 0, /* -Pop up the given menu. +Pop up the menu described by MENU-DESCRIPTION. A menu description is a list of menu items, strings, and submenus. The first element of a menu must be a string, which is the name of the menu. @@ -312,10 +312,10 @@ See menubar.el for many more examples. */ - (menu_desc, event)) + (menu_description, event)) { - struct frame *f = decode_frame(Qnil); - MAYBE_FRAMEMETH (f, popup_menu, (menu_desc,event)); + struct frame *f = decode_frame (Qnil); + MAYBE_FRAMEMETH (f, popup_menu, (menu_description, event)); return Qnil; } @@ -739,7 +739,7 @@ offsetof (struct window, menubar_visible_p), menubar_visible_p_changed, offsetof (struct frame, menubar_visible_p), - menubar_visible_p_changed_in_frame); + menubar_visible_p_changed_in_frame, 0); } void diff -r a8296e22da4e -r 576fb035e263 src/minibuf.c --- a/src/minibuf.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/minibuf.c Mon Aug 13 11:36:19 2007 +0200 @@ -289,11 +289,11 @@ } -/* #### Maybe we should allow ALIST to be a hash table. It is wrong - for the use of obarrays to be better-rewarded than the use of - hash tables. By better-rewarded I mean that you can pass an obarray - to all of the completion functions, whereas you can't do anything - like that with a hash table. +/* #### Maybe we should allow COLLECTION to be a hash table. + It is wrong for the use of obarrays to be better-rewarded than the + use of hash tables. By better-rewarded I mean that you can pass an + obarray to all of the completion functions, whereas you can't do + anything like that with a hash table. To do so, there should probably be a map_obarray_or_alist_or_hash_table function which would be used by @@ -301,26 +301,29 @@ additional funcalls slow things down? */ DEFUN ("try-completion", Ftry_completion, 2, 3, 0, /* -Return common substring of all completions of STRING in ALIST. -Each car of each element of ALIST is tested to see if it begins with STRING. +Return common substring of all completions of STRING in COLLECTION. +COLLECTION must be an alist, an obarray, or a function. +Each string in COLLECTION is tested to see if it begins with STRING. All that match are compared together; the longest initial sequence -common to all matches is returned as a string. -If there is no match at all, nil is returned. -For an exact match, t is returned. +common to all matches is returned as a string. If there is no match +at all, nil is returned. For an exact match, t is returned. -ALIST can be an obarray instead of an alist. -Then the print names of all symbols in the obarray are the possible matches. +If COLLECTION is an alist, the cars of the elements of the alist +\(which must be strings) form the set of possible completions. -ALIST can also be a function to do the completion itself. -It receives three arguments: the values STRING, PREDICATE and nil. -Whatever it returns becomes the value of `try-completion'. +If COLLECTION is an obarray, the names of all symbols in the obarray +are the possible completions. + +If COLLECTION is a function, it is called with three arguments: the +values STRING, PREDICATE and nil. Whatever it returns becomes the +value of `try-completion'. -If optional third argument PREDICATE is non-nil, -it is used to test each possible match. -The match is a candidate only if PREDICATE returns non-nil. -The argument given to PREDICATE is the alist element or the symbol from the obarray. +If optional third argument PREDICATE is non-nil, it is used to test +each possible match. The match is a candidate only if PREDICATE +returns non-nil. The argument given to PREDICATE is the alist element +or the symbol from the obarray. */ - (string, alist, pred)) + (string, collection, predicate)) { /* This function can GC */ Lisp_Object bestmatch, tail; @@ -334,31 +337,31 @@ CHECK_STRING (string); - if (CONSP (alist)) + if (CONSP (collection)) { - Lisp_Object tem = XCAR (alist); + Lisp_Object tem = XCAR (collection); if (SYMBOLP (tem)) /* lambda, autoload, etc. Emacs-lisp sucks */ - return call3 (alist, string, pred, Qnil); + return call3 (collection, string, predicate, Qnil); else list = 1; } - else if (VECTORP (alist)) + else if (VECTORP (collection)) list = 0; - else if (NILP (alist)) + else if (NILP (collection)) list = 1; else - return call3 (alist, string, pred, Qnil); + return call3 (collection, string, predicate, Qnil); bestmatch = Qnil; blength = 0; slength = XSTRING_CHAR_LENGTH (string); - /* If ALIST is not a list, set TAIL just for gc pro. */ - tail = alist; + /* If COLLECTION is not a list, set TAIL just for gc pro. */ + tail = collection; if (!list) { - obsize = XVECTOR_LENGTH (alist); - bucket = XVECTOR_DATA (alist)[indice]; + obsize = XVECTOR_LENGTH (collection); + bucket = XVECTOR_DATA (collection)[indice]; } else /* warning suppression */ { @@ -405,7 +408,7 @@ break; else { - bucket = XVECTOR_DATA (alist)[indice]; + bucket = XVECTOR_DATA (collection)[indice]; continue; } } @@ -424,7 +427,7 @@ struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; int loser; GCPRO4 (tail, string, eltstring, bestmatch); - loser = ignore_completion_p (eltstring, pred, elt); + loser = ignore_completion_p (eltstring, predicate, elt); UNGCPRO; if (loser) /* reject this one */ continue; @@ -509,23 +512,27 @@ DEFUN ("all-completions", Fall_completions, 2, 3, 0, /* -Search for partial matches to STRING in ALIST. -Each car of each element of ALIST is tested to see if it begins with STRING. -The value is a list of all the strings from ALIST that match. -ALIST can be an obarray instead of an alist. -Then the print names of all symbols in the obarray are the possible matches. +Search for partial matches to STRING in COLLECTION. +COLLECTION must be an alist, an obarray, or a function. +Each string in COLLECTION is tested to see if it begins with STRING. +The value is a list of all the strings from COLLECTION that match. + +If COLLECTION is an alist, the cars of the elements of the alist +\(which must be strings) form the set of possible completions. + +If COLLECTION is an obarray, the names of all symbols in the obarray +are the possible completions. -ALIST can also be a function to do the completion itself. -It receives three arguments: the values STRING, PREDICATE and t. -Whatever it returns becomes the value of `all-completions'. +If COLLECTION is a function, it is called with three arguments: the +values STRING, PREDICATE and t. Whatever it returns becomes the +value of `all-completions'. -If optional third argument PREDICATE is non-nil, -it is used to test each possible match. -The match is a candidate only if PREDICATE returns non-nil. -The argument given to PREDICATE is the alist element or -the symbol from the obarray. +If optional third argument PREDICATE is non-nil, it is used to test +each possible match. The match is a candidate only if PREDICATE +returns non-nil. The argument given to PREDICATE is the alist element +or the symbol from the obarray. */ - (string, alist, pred)) + (string, collection, predicate)) { /* This function can GC */ Lisp_Object tail; @@ -538,30 +545,30 @@ CHECK_STRING (string); - if (CONSP (alist)) + if (CONSP (collection)) { - Lisp_Object tem = XCAR (alist); + Lisp_Object tem = XCAR (collection); if (SYMBOLP (tem)) /* lambda, autoload, etc. Emacs-lisp sucks */ - return call3 (alist, string, pred, Qt); + return call3 (collection, string, predicate, Qt); else list = 1; } - else if (VECTORP (alist)) + else if (VECTORP (collection)) list = 0; - else if (NILP (alist)) + else if (NILP (collection)) list = 1; else - return call3 (alist, string, pred, Qt); + return call3 (collection, string, predicate, Qt); allmatches = Qnil; slength = XSTRING_CHAR_LENGTH (string); - /* If ALIST is not a list, set TAIL just for gc pro. */ - tail = alist; + /* If COLLECTION is not a list, set TAIL just for gc pro. */ + tail = collection; if (!list) { - obsize = XVECTOR_LENGTH (alist); - bucket = XVECTOR_DATA (alist)[indice]; + obsize = XVECTOR_LENGTH (collection); + bucket = XVECTOR_DATA (collection)[indice]; } else /* warning suppression */ { @@ -602,7 +609,7 @@ break; else { - bucket = XVECTOR_DATA (alist)[indice]; + bucket = XVECTOR_DATA (collection)[indice]; continue; } } @@ -611,11 +618,6 @@ if (STRINGP (eltstring) && (slength <= XSTRING_CHAR_LENGTH (eltstring)) - /* Reject alternatives that start with space - unless the input starts with space. */ - && ((XSTRING_CHAR_LENGTH (string) > 0 && - string_char (XSTRING (string), 0) == ' ') - || string_char (XSTRING (eltstring), 0) != ' ') && (0 > scmp (XSTRING_DATA (eltstring), XSTRING_DATA (string), slength))) @@ -624,7 +626,7 @@ struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; int loser; GCPRO4 (tail, eltstring, allmatches, string); - loser = ignore_completion_p (eltstring, pred, elt); + loser = ignore_completion_p (eltstring, predicate, elt); UNGCPRO; if (!loser) /* Ok => put it on the list. */ diff -r a8296e22da4e -r 576fb035e263 src/miscplay.c --- a/src/miscplay.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/miscplay.c Mon Aug 13 11:36:19 2007 +0200 @@ -381,8 +381,11 @@ *outbuf = dest = miscplay_sndbuf; while (count--) - *dest++ = (unsigned char)(((int)*((signed char *)(src++)) + - (int)*((signed char *)(src++))) / 2); + { + *dest++ = (unsigned char)(((int)*((signed char *)(src)) + + (int)*((signed char *)(src+1))) / 2); + src += 2; + } *data = src; return(rc); } @@ -402,8 +405,11 @@ *outbuf = dest = miscplay_sndbuf; while (count--) - *dest++ = (unsigned char)(((int)*((signed char *)(src++)) + - (int)*((signed char *)(src++))) / 2) ^ 0x80; + { + *dest++ = (unsigned char)(((int)*((signed char *)(src)) + + (int)*((signed char *)(src+1))) / 2) ^ 0x80; + src += 2; + } *data = src; return(rc); } @@ -493,7 +499,10 @@ *outbuf = *data; while ((*sz)--) - *p++ = ulaw_dsp[*p]; + { + *p = ulaw_dsp[*p]; + p++; + } *sz = 0; *data = p; return p - (unsigned char *)*outbuf; @@ -550,11 +559,14 @@ *outbuf = dest = miscplay_sndbuf; while (count--) - /* it is not possible to directly interpolate between two ulaw encoded - data bytes, thus we need to convert to linear format first and later - we convert back to ulaw format */ - *dest++ = int2ulaw(ulaw2int[*(src)++] + - ulaw2int[*(src)++]); + { + /* it is not possible to directly interpolate between two ulaw encoded + data bytes, thus we need to convert to linear format first and later + we convert back to ulaw format */ + *dest++ = int2ulaw(ulaw2int[*src] + + ulaw2int[*(src+1)]); + src += 2; + } *data = src; return(rc); } @@ -566,9 +578,11 @@ *outbuf = *data; p = (unsigned short *) *outbuf; - while (cnt--) { - *p++ = ((*p & 0x00ff) << 8) | (*p >> 8); - } + while (cnt--) + { + *p = ((*p & 0x00ff) << 8) | (*p >> 8); + p++; + } *data = p; cnt = *sz; *sz = 0; diff -r a8296e22da4e -r 576fb035e263 src/mule-ccl.c --- a/src/mule-ccl.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/mule-ccl.c Mon Aug 13 11:36:19 2007 +0200 @@ -1,8 +1,8 @@ /* CCL (Code Conversion Language) interpreter. - Copyright (C) 1995, 1997, 1998, 1999 Electrotechnical Laboratory, JAPAN. + Copyright (C) 1995, 1997 Electrotechnical Laboratory, JAPAN. Licensed to the Free Software Foundation. -This file is part of XEmacs. +This file is part of GNU Emacs. GNU Emacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,18 +19,15 @@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* Synched up with : FSF Emacs 20.3.10 without ExCCL - * (including {Read|Write}MultibyteChar) */ +/* Synched up with : FSF Emacs 21.0.90 except TranslateCharacter */ #ifdef emacs - #include +#endif -#if 0 -#ifdef STDC_HEADERS -#include -#endif -#endif +#include + +#ifdef emacs #include "lisp.h" #include "buffer.h" @@ -40,35 +37,34 @@ #else /* not emacs */ -#include #include "mulelib.h" #endif /* not emacs */ /* This contains all code conversion map available to CCL. */ -/* Lisp_Object Vcode_conversion_map_vector; -*/ /* Alist of fontname patterns vs corresponding CCL program. */ Lisp_Object Vfont_ccl_encoder_alist; -/* This symbol is a property which assocates with ccl program vector. +/* This symbol is a property which associates with ccl program vector. Ex: (get 'ccl-big5-encoder 'ccl-program) returns ccl program vector. */ Lisp_Object Qccl_program; /* These symbols are properties which associate with code conversion map and their ID respectively. */ -/* Lisp_Object Qcode_conversion_map; Lisp_Object Qcode_conversion_map_id; -*/ /* Symbols of ccl program have this property, a value of the property - is an index for Vccl_protram_table. */ + is an index for Vccl_program_table. */ Lisp_Object Qccl_program_idx; -/* Vector of CCL program names vs corresponding program data. */ +/* Table of registered CCL programs. Each element is a vector of + NAME, CCL_PROG, and RESOLVEDP where NAME (symbol) is the name of + the program, CCL_PROG (vector) is the compiled code of the program, + RESOLVEDP (t or nil) is the flag to tell if symbols in CCL_PROG is + already resolved to index numbers or not. */ Lisp_Object Vccl_program_table; /* CCL (Code Conversion Language) is a simple language which has @@ -181,18 +177,18 @@ #define CCL_WriteConstJump 0x08 /* Write constant and jump: 1:A--D--D--R--E--S--S-000XXXXX - 2:const + 2:CONST ------------------------------ - write (const); + write (CONST); IC += ADDRESS; */ #define CCL_WriteConstReadJump 0x09 /* Write constant, read, and jump: 1:A--D--D--R--E--S--S-rrrXXXXX - 2:const + 2:CONST 3:A--D--D--R--E--S--S-rrrYYYYY ----------------------------- - write (const); + write (CONST); IC += 2; read (reg[rrr]); IC += ADDRESS; @@ -300,10 +296,15 @@ */ #define CCL_Call 0x13 /* Call the CCL program whose ID is - (CC..C). - 1:CCCCCCCCCCCCCCCCCCCC000XXXXX + CC..C or cc..c. + 1:CCCCCCCCCCCCCCCCCCCCFFFXXXXX + [2:00000000cccccccccccccccccccc] ------------------------------ - call (CC..C) + if (FFF) + call (cc..c) + IC++; + else + call (CC..C) */ #define CCL_WriteConstString 0x14 /* Write a constant or a string: @@ -422,9 +423,9 @@ IC += 2; */ -#define CCL_Extension 0x1F /* Extended CCL code +#define CCL_Extention 0x1F /* Extended CCL code 1:ExtendedCOMMNDRrrRRRrrrXXXXX - 2:ARGUEMENT + 2:ARGUMENT 3:... ------------------------------ extended_command (rrr,RRR,Rrr,ARGS) @@ -450,7 +451,6 @@ #define CCL_WriteMultibyteChar2 0x01 /* Write Multibyte Character 1:ExtendedCOMMNDRrrRRRrrrXXXXX */ -#if 0 /* Translate a character whose code point is reg[rrr] and the charset ID is reg[RRR] by a translation table whose ID is reg[Rrr]. @@ -480,7 +480,7 @@ If the element is t or lambda, finish without changing reg[rrr]. If the element is a number, set reg[rrr] to the number and finish. - Detail of the map structure is descibed in the comment for + Detail of the map structure is described in the comment for CCL_MapMultiple below. */ #define CCL_IterateMultipleMap 0x10 /* Iterate multiple maps @@ -504,7 +504,7 @@ (MAP-ID21 (MAP-ID211 (MAP-ID2111) MAP-ID212) MAP-ID22)), - the compiled CCL codes has this sequence: + the compiled CCL code has this sequence: CCL_MapMultiple (CCL code of this command) 16 (total number of MAPs and SEPARATORs) -7 (1st SEPARATOR) @@ -540,19 +540,26 @@ At first, VAL0 is set to reg[rrr], and it is translated by the first map to VAL1. Then, VAL1 is translated by the next map to VAL2. This mapping is iterated until the last map is used. The - result of the mapping is the last value of VAL?. + result of the mapping is the last value of VAL?. When the mapping + process reached to the end of the map set, it moves to the next + map set. If the next does not exit, the mapping process terminates, + and regard the last value as a result. But, when VALm is mapped to VALn and VALn is not a number, the - mapping proceed as below: + mapping proceeds as follows: If VALn is nil, the lastest map is ignored and the mapping of VALm - proceed to the next map. + proceeds to the next map. In VALn is t, VALm is reverted to reg[rrr] and the mapping of VALm - proceed to the next map. + proceeds to the next map. - If VALn is lambda, the whole mapping process terminates, and VALm - is the result of this mapping. + If VALn is lambda, move to the next map set like reaching to the + end of the current map set. + + If VALn is a symbol, call the CCL program refered by it. + Then, use reg[rrr] as a mapped value except for -1, -2 and -3. + Such special values are regarded as nil, t, and lambda respectively. Each map is a Lisp vector of the following format (a) or (b): (a)......[STARTPOINT VAL1 VAL2 ...] @@ -580,7 +587,7 @@ N:SEPARATOR_z (< 0) */ -#define MAX_MAP_SET_LEVEL 20 +#define MAX_MAP_SET_LEVEL 30 typedef struct { @@ -590,21 +597,45 @@ static tr_stack mapping_stack[MAX_MAP_SET_LEVEL]; static tr_stack *mapping_stack_pointer; -#endif + +/* If this variable is non-zero, it indicates the stack_idx + of immediately called by CCL_MapMultiple. */ +static int stack_idx_of_map_multiple = 0; + +#define PUSH_MAPPING_STACK(restlen, orig) \ + do { \ + mapping_stack_pointer->rest_length = (restlen); \ + mapping_stack_pointer->orig_val = (orig); \ + mapping_stack_pointer++; \ + } while (0) + +#define POP_MAPPING_STACK(restlen, orig) \ + do { \ + mapping_stack_pointer--; \ + (restlen) = mapping_stack_pointer->rest_length; \ + (orig) = mapping_stack_pointer->orig_val; \ + } while (0) -#define PUSH_MAPPING_STACK(restlen, orig) \ -{ \ - mapping_stack_pointer->rest_length = (restlen); \ - mapping_stack_pointer->orig_val = (orig); \ - mapping_stack_pointer++; \ -} - -#define POP_MAPPING_STACK(restlen, orig) \ -{ \ - mapping_stack_pointer--; \ - (restlen) = mapping_stack_pointer->rest_length; \ - (orig) = mapping_stack_pointer->orig_val; \ -} \ +#define CCL_CALL_FOR_MAP_INSTRUCTION(symbol, ret_ic) \ + do { \ + struct ccl_program called_ccl; \ + if (stack_idx >= 256 \ + || (setup_ccl_program (&called_ccl, (symbol)) != 0)) \ + { \ + if (stack_idx > 0) \ + { \ + ccl_prog = ccl_prog_stack_struct[0].ccl_prog; \ + ic = ccl_prog_stack_struct[0].ic; \ + } \ + CCL_INVALID_CMD; \ + } \ + ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog; \ + ccl_prog_stack_struct[stack_idx].ic = (ret_ic); \ + stack_idx++; \ + ccl_prog = called_ccl.prog; \ + ic = CCL_HEADER_MAIN; \ + goto ccl_repeat; \ + } while (0) #define CCL_MapSingle 0x12 /* Map by single code conversion map 1:ExtendedCOMMNDXXXRRRrrrXXXXX @@ -643,100 +674,192 @@ #define CCL_ENCODE_SJIS 0x17 /* X = HIGHER_BYTE (SJIS (Y, Z)) r[7] = LOWER_BYTE (SJIS (Y, Z) */ +/* Terminate CCL program successfully. */ +#define CCL_SUCCESS \ + do { \ + ccl->status = CCL_STAT_SUCCESS; \ + goto ccl_finish; \ + } while (0) + /* Suspend CCL program because of reading from empty input buffer or writing to full output buffer. When this program is resumed, the - same I/O command is executed. The `if (1)' is for warning suppression. */ + same I/O command is executed. */ #define CCL_SUSPEND(stat) \ do { \ ic--; \ ccl->status = stat; \ - if (1) goto ccl_finish; \ + goto ccl_finish; \ } while (0) /* Terminate CCL program because of invalid command. Should not occur - in the normal case. The `if (1)' is for warning suppression. */ + in the normal case. */ #define CCL_INVALID_CMD \ do { \ ccl->status = CCL_STAT_INVALID_CMD; \ - if (1) goto ccl_error_handler; \ + goto ccl_error_handler; \ } while (0) /* Encode one character CH to multibyte form and write to the current - output buffer. If CH is less than 256, CH is written as is. */ -#define CCL_WRITE_CHAR(ch) do { \ - if (!destination) \ - { \ - ccl->status = CCL_STAT_INVALID_CMD; \ - goto ccl_error_handler; \ - } \ - else \ - { \ - Bufbyte work[MAX_EMCHAR_LEN]; \ - int len = ( ch < ( conversion_mode == CCL_MODE_ENCODING ? \ - 256 : 128 ) ) ? \ - simple_set_charptr_emchar (work, ch) : \ - non_ascii_set_charptr_emchar (work, ch); \ - Dynarr_add_many (destination, work, len); \ - } \ -} while (0) + output buffer. At encoding time, if CH is less than 256, CH is + written as is. At decoding time, if CH cannot be regarded as an + ASCII character, write it in multibyte form. */ +#define CCL_WRITE_CHAR(ch) \ + do { \ + if (!destination) \ + CCL_INVALID_CMD; \ + if (conversion_mode == CCL_MODE_ENCODING) \ + { \ + if (ch == '\n') \ + { \ + if (ccl->eol_type == CCL_CODING_EOL_CRLF) \ + { \ + Dynarr_add (destination, '\r'); \ + Dynarr_add (destination, '\n'); \ + } \ + else if (ccl->eol_type == CCL_CODING_EOL_CR) \ + Dynarr_add (destination, '\r'); \ + else \ + Dynarr_add (destination, '\n'); \ + } \ + else if (ch < 0x100) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + Bufbyte work[MAX_EMCHAR_LEN]; \ + int len; \ + len = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + else \ + { \ + if (!CHAR_MULTIBYTE_P(ch)) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + Bufbyte work[MAX_EMCHAR_LEN]; \ + int len; \ + len = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + } while (0) /* Write a string at ccl_prog[IC] of length LEN to the current output - buffer. */ -#define CCL_WRITE_STRING(len) do { \ - if (!destination) \ - { \ - ccl->status = CCL_STAT_INVALID_CMD; \ - goto ccl_error_handler; \ - } \ - else \ - { \ - Bufbyte work[MAX_EMCHAR_LEN]; \ - for (i = 0; i < len; i++) \ - { \ - int ch = (XINT (ccl_prog[ic + (i / 3)]) \ - >> ((2 - (i % 3)) * 8)) & 0xFF; \ - int bytes = \ - ( ch < ( conversion_mode == CCL_MODE_ENCODING ? \ - 256 : 128 ) ) ? \ - simple_set_charptr_emchar (work, ch) : \ - non_ascii_set_charptr_emchar (work, ch); \ - Dynarr_add_many (destination, work, bytes); \ - } \ - } \ -} while (0) + buffer. But this macro treat this string as a binary. Therefore, + cannot handle a multibyte string except for Control-1 characters. */ +#define CCL_WRITE_STRING(len) \ + do { \ + Bufbyte work[MAX_EMCHAR_LEN]; \ + int ch, bytes; \ + if (!destination) \ + CCL_INVALID_CMD; \ + else if (conversion_mode == CCL_MODE_ENCODING) \ + { \ + for (i = 0; i < len; i++) \ + { \ + ch = ((XINT (ccl_prog[ic + (i / 3)])) \ + >> ((2 - (i % 3)) * 8)) & 0xFF; \ + if (ch == '\n') \ + { \ + if (ccl->eol_type == CCL_CODING_EOL_CRLF) \ + { \ + Dynarr_add (destination, '\r'); \ + Dynarr_add (destination, '\n'); \ + } \ + else if (ccl->eol_type == CCL_CODING_EOL_CR) \ + Dynarr_add (destination, '\r'); \ + else \ + Dynarr_add (destination, '\n'); \ + } \ + if (ch < 0x100) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + bytes = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + } \ + else \ + { \ + for (i = 0; i < len; i++) \ + { \ + ch = ((XINT (ccl_prog[ic + (i / 3)])) \ + >> ((2 - (i % 3)) * 8)) & 0xFF; \ + if (!CHAR_MULTIBYTE_P(ch)) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + bytes = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + } \ + } while (0) /* Read one byte from the current input buffer into Rth register. */ -#define CCL_READ_CHAR(r) do { \ - if (!src && !ccl->last_block) \ - { \ - ccl->status = CCL_STAT_INVALID_CMD; \ - goto ccl_error_handler; \ - } \ - else if (src < src_end) \ - r = *src++; \ - else if (ccl->last_block) \ - { \ - ic = ccl->eof_ic; \ - goto ccl_repeat; \ - } \ - else \ - /* Suspend CCL program because of \ - reading from empty input buffer or \ - writing to full output buffer. \ - When this program is resumed, the \ - same I/O command is executed. */ \ - { \ - ic--; \ - ccl->status = CCL_STAT_SUSPEND_BY_SRC; \ - goto ccl_finish; \ - } \ -} while (0) +#define CCL_READ_CHAR(r) \ + do { \ + if (!src) \ + CCL_INVALID_CMD; \ + if (src < src_end) \ + r = *src++; \ + else \ + { \ + if (ccl->last_block) \ + { \ + ic = ccl->eof_ic; \ + goto ccl_repeat; \ + } \ + else \ + CCL_SUSPEND (CCL_STAT_SUSPEND_BY_SRC); \ + } \ + } while (0) + + +/* Set C to the character code made from CHARSET and CODE. This is + like MAKE_CHAR but check the validity of CHARSET and CODE. If they + are not valid, set C to (CODE & 0xFF) because that is usually the + case that CCL_ReadMultibyteChar2 read an invalid code and it set + CODE to that invalid byte. */ + +/* On XEmacs, TranslateCharacter is not supported. Thus, this + macro is not used. */ +#if 0 +#define CCL_MAKE_CHAR(charset, code, c) \ + do { \ + if (charset == CHARSET_ASCII) \ + c = code & 0xFF; \ + else if (CHARSET_DEFINED_P (charset) \ + && (code & 0x7F) >= 32 \ + && (code < 256 || ((code >> 7) & 0x7F) >= 32)) \ + { \ + int c1 = code & 0x7F, c2 = 0; \ + \ + if (code >= 256) \ + c2 = c1, c1 = (code >> 7) & 0x7F; \ + c = MAKE_CHAR (charset, c1, c2); \ + } \ + else \ + c = code & 0xFF; \ + } while (0) +#endif /* Execute CCL code on SRC_BYTES length text at SOURCE. The resulting - text goes to a place pointed by DESTINATION. The bytes actually - processed is returned as *CONSUMED. The return value is the length - of the resulting text. As a side effect, the contents of CCL registers + text goes to a place pointed by DESTINATION, the length of which + should not exceed DST_BYTES. The bytes actually processed is + returned as *CONSUMED. The return value is the length of the + resulting text. As a side effect, the contents of CCL registers are updated. If SOURCE or DESTINATION is NULL, only operations on registers are permitted. */ @@ -756,17 +879,20 @@ static struct ccl_prog_stack ccl_prog_stack_struct[256]; int -ccl_driver (struct ccl_program *ccl, const unsigned char *source, - unsigned_char_dynarr *destination, int src_bytes, - int *consumed, int conversion_mode) +ccl_driver (struct ccl_program *ccl, + const unsigned char *source, + unsigned_char_dynarr *destination, + int src_bytes, + int *consumed, + int conversion_mode) { - int *reg = ccl->reg; - int ic = ccl->ic; - int code = -1; /* init to illegal value, */ - int field1, field2; - Lisp_Object *ccl_prog = ccl->prog; + register int *reg = ccl->reg; + register int ic = ccl->ic; + register int code = -1; + register int field1, field2; + register Lisp_Object *ccl_prog = ccl->prog; const unsigned char *src = source, *src_end = src + src_bytes; - int jump_address = 0; /* shut up the compiler */ + int jump_address; int i, j, op; int stack_idx = ccl->stack_idx; /* Instruction counter of the current CCL code. */ @@ -775,10 +901,11 @@ if (ic >= ccl->eof_ic) ic = CCL_HEADER_MAIN; -#if 0 /* not for XEmacs ? */ if (ccl->buf_magnification ==0) /* We can't produce any bytes. */ - dst = NULL; -#endif + destination = NULL; + + /* Set mapping stack pointer. */ + mapping_stack_pointer = mapping_stack; #ifdef CCL_DEBUG ccl_backtrace_idx = 0; @@ -927,7 +1054,7 @@ i = reg[RRR]; j = XINT (ccl_prog[ic]); op = field1 >> 6; - ic++; + jump_address = ic + 1; goto ccl_set_expr; case CCL_WriteRegister: /* CCCCCCCCCCCCCCCCCCCrrrXXXXX */ @@ -947,32 +1074,43 @@ i = reg[RRR]; j = reg[Rrr]; op = field1 >> 6; + jump_address = ic; goto ccl_set_expr; - case CCL_Call: /* CCCCCCCCCCCCCCCCCCCC000XXXXX */ + case CCL_Call: /* 1:CCCCCCCCCCCCCCCCCCCCFFFXXXXX */ { Lisp_Object slot; + int prog_id; + + /* If FFF is nonzero, the CCL program ID is in the + following code. */ + if (rrr) + { + prog_id = XINT (ccl_prog[ic]); + ic++; + } + else + prog_id = field1; if (stack_idx >= 256 - || field1 < 0 - || field1 >= XVECTOR_LENGTH (Vccl_program_table) - || (slot = XVECTOR_DATA (Vccl_program_table)[field1], - !CONSP (slot)) - || !VECTORP (XCDR (slot))) + || prog_id < 0 + || prog_id >= XVECTOR (Vccl_program_table)->size + || (slot = XVECTOR (Vccl_program_table)->contents[prog_id], + !VECTORP (slot)) + || !VECTORP (XVECTOR (slot)->contents[1])) { if (stack_idx > 0) { ccl_prog = ccl_prog_stack_struct[0].ccl_prog; ic = ccl_prog_stack_struct[0].ic; } - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + CCL_INVALID_CMD; } ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog; ccl_prog_stack_struct[stack_idx].ic = ic; stack_idx++; - ccl_prog = XVECTOR_DATA (XCDR (slot)); + ccl_prog = XVECTOR (XVECTOR (slot)->contents[1])->contents; ic = CCL_HEADER_MAIN; } break; @@ -998,8 +1136,9 @@ break; case CCL_End: /* 0000000000000000000000XXXXX */ - if (stack_idx-- > 0) + if (stack_idx > 0) { + stack_idx--; ccl_prog = ccl_prog_stack_struct[stack_idx].ccl_prog; ic = ccl_prog_stack_struct[stack_idx].ic; break; @@ -1009,9 +1148,7 @@ /* ccl->ic should points to this command code again to suppress further processing. */ ic--; - /* Terminate CCL program successfully. */ - ccl->status = CCL_STAT_SUCCESS; - goto ccl_finish; + CCL_SUCCESS; case CCL_ExprSelfConst: /* 00000OPERATION000000rrrXXXXX */ i = XINT (ccl_prog[ic]); @@ -1045,9 +1182,7 @@ case CCL_LE: reg[rrr] = reg[rrr] <= i; break; case CCL_GE: reg[rrr] = reg[rrr] >= i; break; case CCL_NE: reg[rrr] = reg[rrr] != i; break; - default: - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + default: CCL_INVALID_CMD; } break; @@ -1096,7 +1231,7 @@ case CCL_MOD: reg[rrr] = i % j; break; case CCL_AND: reg[rrr] = i & j; break; case CCL_OR: reg[rrr] = i | j; break; - case CCL_XOR: reg[rrr] = i ^ j; break; + case CCL_XOR: reg[rrr] = i ^ j;; break; case CCL_LSH: reg[rrr] = i << j; break; case CCL_RSH: reg[rrr] = i >> j; break; case CCL_LSH8: reg[rrr] = (i << 8) | j; break; @@ -1108,23 +1243,32 @@ case CCL_LE: reg[rrr] = i <= j; break; case CCL_GE: reg[rrr] = i >= j; break; case CCL_NE: reg[rrr] = i != j; break; - case CCL_DECODE_SJIS: DECODE_SJIS (i, j, reg[rrr], reg[7]); break; - case CCL_ENCODE_SJIS: ENCODE_SJIS (i, j, reg[rrr], reg[7]); break; - default: - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + case CCL_DECODE_SJIS: + /* DECODE_SJIS set MSB for internal format + as opposed to Emacs. */ + DECODE_SJIS (i, j, reg[rrr], reg[7]); + reg[rrr] &= 0x7F; + reg[7] &= 0x7F; + break; + case CCL_ENCODE_SJIS: + /* ENCODE_SJIS assumes MSB of SJIS-char is set + as opposed to Emacs. */ + ENCODE_SJIS (i | 0x80, j | 0x80, reg[rrr], reg[7]); + break; + default: CCL_INVALID_CMD; } code &= 0x1F; if (code == CCL_WriteExprConst || code == CCL_WriteExprRegister) { i = reg[rrr]; CCL_WRITE_CHAR (i); + ic = jump_address; } else if (!reg[rrr]) ic = jump_address; break; - case CCL_Extension: + case CCL_Extention: switch (EXCMD) { case CCL_ReadMultibyteChar2: @@ -1139,48 +1283,6 @@ } i = *src++; -#if 0 - if (i == LEADING_CODE_COMPOSITION) - { - if (src >= src_end) - goto ccl_read_multibyte_character_suspend; - if (*src == 0xFF) - { - ccl->private_state = COMPOSING_WITH_RULE_HEAD; - src++; - } - else - ccl->private_state = COMPOSING_NO_RULE_HEAD; - - continue; - } - if (ccl->private_state != COMPOSING_NO) - { - /* composite character */ - if (i < 0xA0) - ccl->private_state = COMPOSING_NO; - else - { - if (COMPOSING_WITH_RULE_RULE == ccl->private_state) - { - ccl->private_state = COMPOSING_WITH_RULE_HEAD; - continue; - } - else if (COMPOSING_WITH_RULE_HEAD == ccl->private_state) - ccl->private_state = COMPOSING_WITH_RULE_RULE; - - if (i == 0xA0) - { - if (src >= src_end) - goto ccl_read_multibyte_character_suspend; - i = *src++ & 0x7F; - } - else - i -= 0x20; - } - } -#endif - if (i < 0x80) { /* ASCII */ @@ -1245,14 +1347,10 @@ i = reg[RRR]; /* charset */ if (i == LEADING_BYTE_ASCII) i = reg[rrr] & 0xFF; -#if 0 - else if (i == CHARSET_COMPOSITION) - i = MAKE_COMPOSITE_CHAR (reg[rrr]); -#endif else if (XCHARSET_DIMENSION (CHARSET_BY_LEADING_BYTE (i)) == 1) - i = ((i - FIELD2_TO_OFFICIAL_LEADING_BYTE) << 7) - | (reg[rrr] & 0x7F); - else if (i < MIN_LEADING_BYTE_OFFICIAL_2) + i = (((i - FIELD2_TO_OFFICIAL_LEADING_BYTE) << 7) + | (reg[rrr] & 0x7F)); + else if (i < MAX_LEADING_BYTE_OFFICIAL_2) i = ((i - FIELD1_TO_OFFICIAL_LEADING_BYTE) << 14) | reg[rrr]; else i = ((i - FIELD1_TO_PRIVATE_LEADING_BYTE) << 14) | reg[rrr]; @@ -1261,23 +1359,11 @@ break; + case CCL_TranslateCharacter: #if 0 - case CCL_TranslateCharacter: - i = reg[RRR]; /* charset */ - if (i == LEADING_BYTE_ASCII) - i = reg[rrr]; - else if (i == CHARSET_COMPOSITION) - { - reg[RRR] = -1; - break; - } - else if (CHARSET_DIMENSION (i) == 1) - i = ((i - 0x70) << 7) | (reg[rrr] & 0x7F); - else if (i < MIN_LEADING_BYTE_OFFICIAL_2) - i = ((i - 0x8F) << 14) | (reg[rrr] & 0x3FFF); - else - i = ((i - 0xE0) << 14) | (reg[rrr] & 0x3FFF); - + /* XEmacs does not have translate_char, and its + equivalent nor. We do nothing on this operation. */ + CCL_MAKE_CHAR (reg[RRR], reg[rrr], i); op = translate_char (GET_TRANSLATION_TABLE (reg[Rrr]), i, -1, 0, 0); SPLIT_CHAR (op, reg[RRR], i, j); @@ -1285,32 +1371,23 @@ i = (i << 7) | j; reg[rrr] = i; +#endif break; case CCL_TranslateCharacterConstTbl: +#if 0 + /* XEmacs does not have translate_char, and its + equivalent nor. We do nothing on this operation. */ op = XINT (ccl_prog[ic]); /* table */ ic++; - i = reg[RRR]; /* charset */ - if (i == LEADING_BYTE_ASCII) - i = reg[rrr]; - else if (i == CHARSET_COMPOSITION) - { - reg[RRR] = -1; - break; - } - else if (CHARSET_DIMENSION (i) == 1) - i = ((i - 0x70) << 7) | (reg[rrr] & 0x7F); - else if (i < MIN_LEADING_BYTE_OFFICIAL_2) - i = ((i - 0x8F) << 14) | (reg[rrr] & 0x3FFF); - else - i = ((i - 0xE0) << 14) | (reg[rrr] & 0x3FFF); - + CCL_MAKE_CHAR (reg[RRR], reg[rrr], i); op = translate_char (GET_TRANSLATION_TABLE (op), i, -1, 0, 0); SPLIT_CHAR (op, reg[RRR], i, j); if (j != -1) i = (i << 7) | j; reg[rrr] = i; +#endif break; case CCL_IterateMultipleMap: @@ -1342,9 +1419,9 @@ map = XVECTOR (Vcode_conversion_map_vector)->contents[point]; - /* Check map varidity. */ + /* Check map validity. */ if (!CONSP (map)) continue; - map = XCONS(map)->cdr; + map = XCDR (map); if (!VECTORP (map)) continue; size = XVECTOR (map)->size; if (size <= 1) continue; @@ -1353,8 +1430,8 @@ /* check map type, [STARTPOINT VAL1 VAL2 ...] or - [t ELELMENT STARTPOINT ENDPOINT] */ - if (NUMBERP (content)) + [t ELEMENT STARTPOINT ENDPOINT] */ + if (INTP (content)) { point = XUINT (content); point = op - point + 1; @@ -1375,7 +1452,7 @@ if (NILP (content)) continue; - else if (NUMBERP (content)) + else if (INTP (content)) { reg[RRR] = i; reg[rrr] = XINT(content); @@ -1388,14 +1465,18 @@ } else if (CONSP (content)) { - attrib = XCONS (content)->car; - value = XCONS (content)->cdr; - if (!NUMBERP (attrib) || !NUMBERP (value)) + attrib = XCAR (content); + value = XCDR (content); + if (!INTP (attrib) || !INTP (value)) continue; reg[RRR] = i; reg[rrr] = XUINT (value); break; } + else if (SYMBOLP (content)) + CCL_CALL_FOR_MAP_INSTRUCTION (content, fin_ic); + else + CCL_INVALID_CMD; } if (i == j) reg[RRR] = -1; @@ -1408,10 +1489,27 @@ Lisp_Object map, content, attrib, value; int point, size, map_vector_size; int map_set_rest_length, fin_ic; + int current_ic = this_ic; + + /* inhibit recursive call on MapMultiple. */ + if (stack_idx_of_map_multiple > 0) + { + if (stack_idx_of_map_multiple <= stack_idx) + { + stack_idx_of_map_multiple = 0; + mapping_stack_pointer = mapping_stack; + CCL_INVALID_CMD; + } + } + else + mapping_stack_pointer = mapping_stack; + stack_idx_of_map_multiple = 0; map_set_rest_length = XINT (ccl_prog[ic++]); /* number of maps and separators. */ fin_ic = ic + map_set_rest_length; + op = reg[rrr]; + if ((map_set_rest_length > reg[RRR]) && (reg[RRR] >= 0)) { ic += reg[RRR]; @@ -1422,100 +1520,165 @@ { ic = fin_ic; reg[RRR] = -1; + mapping_stack_pointer = mapping_stack; break; } - mapping_stack_pointer = mapping_stack; - op = reg[rrr]; - PUSH_MAPPING_STACK (0, op); - reg[RRR] = -1; - map_vector_size = XVECTOR (Vcode_conversion_map_vector)->size; - for (;map_set_rest_length > 0;i++, map_set_rest_length--) + + if (mapping_stack_pointer <= (mapping_stack + 1)) { - point = XINT(ccl_prog[ic++]); - if (point < 0) - { - point = -point; - if (mapping_stack_pointer - >= &mapping_stack[MAX_MAP_SET_LEVEL]) - { - CCL_INVALID_CMD; - } - PUSH_MAPPING_STACK (map_set_rest_length - point, - reg[rrr]); - map_set_rest_length = point + 1; - reg[rrr] = op; - continue; - } + /* Set up initial state. */ + mapping_stack_pointer = mapping_stack; + PUSH_MAPPING_STACK (0, op); + reg[RRR] = -1; + } + else + { + /* Recover after calling other ccl program. */ + int orig_op; - if (point >= map_vector_size) continue; - map = (XVECTOR (Vcode_conversion_map_vector) - ->contents[point]); - - /* Check map varidity. */ - if (!CONSP (map)) continue; - map = XCONS (map)->cdr; - if (!VECTORP (map)) continue; - size = XVECTOR (map)->size; - if (size <= 1) continue; - - content = XVECTOR (map)->contents[0]; - - /* check map type, - [STARTPOINT VAL1 VAL2 ...] or - [t ELEMENT STARTPOINT ENDPOINT] */ - if (NUMBERP (content)) + POP_MAPPING_STACK (map_set_rest_length, orig_op); + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + switch (op) { - point = XUINT (content); - point = op - point + 1; - if (!((point >= 1) && (point < size))) continue; - content = XVECTOR (map)->contents[point]; - } - else if (EQ (content, Qt)) - { - if (size != 4) continue; - if ((op >= XUINT (XVECTOR (map)->contents[2])) && - (op < XUINT (XVECTOR (map)->contents[3]))) - content = XVECTOR (map)->contents[1]; - else - continue; - } - else - continue; - - if (NILP (content)) - continue; - else if (NUMBERP (content)) - { - op = XINT (content); - reg[RRR] = i; + case -1: + /* Regard it as Qnil. */ + op = orig_op; + i++; + ic++; + map_set_rest_length--; + break; + case -2: + /* Regard it as Qt. */ + op = reg[rrr]; + i++; + ic++; + map_set_rest_length--; + break; + case -3: + /* Regard it as Qlambda. */ + op = orig_op; i += map_set_rest_length; - POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); - } - else if (CONSP (content)) - { - attrib = XCONS (content)->car; - value = XCONS (content)->cdr; - if (!NUMBERP (attrib) || !NUMBERP (value)) - continue; - reg[RRR] = i; - op = XUINT (value); + ic += map_set_rest_length; + map_set_rest_length = 0; + break; + default: + /* Regard it as normal mapping. */ i += map_set_rest_length; + ic += map_set_rest_length; POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); - } - else if (EQ (content, Qt)) - { - reg[RRR] = i; - op = reg[rrr]; - i += map_set_rest_length; - POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); - } - else if (EQ (content, Qlambda)) - { break; } - else - CCL_INVALID_CMD; } + map_vector_size = XVECTOR (Vcode_conversion_map_vector)->size; + + do { + for (;map_set_rest_length > 0;i++, ic++, map_set_rest_length--) + { + point = XINT(ccl_prog[ic]); + if (point < 0) + { + /* +1 is for including separator. */ + point = -point + 1; + if (mapping_stack_pointer + >= &mapping_stack[MAX_MAP_SET_LEVEL]) + CCL_INVALID_CMD; + PUSH_MAPPING_STACK (map_set_rest_length - point, + reg[rrr]); + map_set_rest_length = point; + reg[rrr] = op; + continue; + } + + if (point >= map_vector_size) continue; + map = (XVECTOR (Vcode_conversion_map_vector) + ->contents[point]); + + /* Check map validity. */ + if (!CONSP (map)) continue; + map = XCDR (map); + if (!VECTORP (map)) continue; + size = XVECTOR (map)->size; + if (size <= 1) continue; + + content = XVECTOR (map)->contents[0]; + + /* check map type, + [STARTPOINT VAL1 VAL2 ...] or + [t ELEMENT STARTPOINT ENDPOINT] */ + if (INTP (content)) + { + point = XUINT (content); + point = op - point + 1; + if (!((point >= 1) && (point < size))) continue; + content = XVECTOR (map)->contents[point]; + } + else if (EQ (content, Qt)) + { + if (size != 4) continue; + if ((op >= XUINT (XVECTOR (map)->contents[2])) && + (op < XUINT (XVECTOR (map)->contents[3]))) + content = XVECTOR (map)->contents[1]; + else + continue; + } + else + continue; + + if (NILP (content)) + continue; + + reg[RRR] = i; + if (INTP (content)) + { + op = XINT (content); + i += map_set_rest_length - 1; + ic += map_set_rest_length - 1; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + map_set_rest_length++; + } + else if (CONSP (content)) + { + attrib = XCAR (content); + value = XCDR (content); + if (!INTP (attrib) || !INTP (value)) + continue; + op = XUINT (value); + i += map_set_rest_length - 1; + ic += map_set_rest_length - 1; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + map_set_rest_length++; + } + else if (EQ (content, Qt)) + { + op = reg[rrr]; + } + else if (EQ (content, Qlambda)) + { + i += map_set_rest_length; + ic += map_set_rest_length; + break; + } + else if (SYMBOLP (content)) + { + if (mapping_stack_pointer + >= &mapping_stack[MAX_MAP_SET_LEVEL]) + CCL_INVALID_CMD; + PUSH_MAPPING_STACK (map_set_rest_length, reg[rrr]); + PUSH_MAPPING_STACK (map_set_rest_length, op); + stack_idx_of_map_multiple = stack_idx + 1; + CCL_CALL_FOR_MAP_INSTRUCTION (content, current_ic); + } + else + CCL_INVALID_CMD; + } + if (mapping_stack_pointer <= (mapping_stack + 1)) + break; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + i += map_set_rest_length; + ic += map_set_rest_length; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + } while (1); + ic = fin_ic; } reg[rrr] = op; @@ -1538,7 +1701,7 @@ reg[RRR] = -1; break; } - map = XCONS(map)->cdr; + map = XCDR (map); if (!VECTORP (map)) { reg[RRR] = -1; @@ -1553,28 +1716,29 @@ reg[RRR] = -1; else { + reg[RRR] = 0; content = XVECTOR (map)->contents[point]; if (NILP (content)) reg[RRR] = -1; - else if (NUMBERP (content)) + else if (INTP (content)) reg[rrr] = XINT (content); - else if (EQ (content, Qt)) - reg[RRR] = i; + else if (EQ (content, Qt)); else if (CONSP (content)) { - attrib = XCONS (content)->car; - value = XCONS (content)->cdr; - if (!NUMBERP (attrib) || !NUMBERP (value)) + attrib = XCAR (content); + value = XCDR (content); + if (!INTP (attrib) || !INTP (value)) continue; reg[rrr] = XUINT(value); break; } + else if (SYMBOLP (content)) + CCL_CALL_FOR_MAP_INSTRUCTION (content, ic); else reg[RRR] = -1; } } break; -#endif default: CCL_INVALID_CMD; @@ -1582,8 +1746,7 @@ break; default: - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + CCL_INVALID_CMD; } } @@ -1595,15 +1758,8 @@ there. */ char msg[256]; -#if 0 /* not for XEmacs ? */ - if (!dst) - dst = destination; -#endif - switch (ccl->status) { - /* Terminate CCL program because of invalid command. - Should not occur in the normal case. */ case CCL_STAT_INVALID_CMD: sprintf(msg, "\nCCL: Invalid command %x (ccl_code = %x) at %d.", code & 0x1F, code, this_ic); @@ -1628,7 +1784,7 @@ break; case CCL_STAT_QUIT: - sprintf(msg, "\nCCL: Quited."); + sprintf(msg, "\nCCL: Exited."); break; default: @@ -1643,26 +1799,137 @@ ccl->stack_idx = stack_idx; ccl->prog = ccl_prog; if (consumed) *consumed = src - source; - if (destination) - return Dynarr_length (destination); - else + if (!destination) return 0; + return Dynarr_length (destination); +} + +/* Resolve symbols in the specified CCL code (Lisp vector). This + function converts symbols of code conversion maps and character + translation tables embedded in the CCL code into their ID numbers. + + The return value is a vector (CCL itself or a new vector in which + all symbols are resolved), Qt if resolving of some symbol failed, + or nil if CCL contains invalid data. */ + +static Lisp_Object +resolve_symbol_ccl_program (Lisp_Object ccl) +{ + int i, veclen, unresolved = 0; + Lisp_Object result, contents, val; + + result = ccl; + veclen = XVECTOR (result)->size; + + for (i = 0; i < veclen; i++) + { + contents = XVECTOR (result)->contents[i]; + if (INTP (contents)) + continue; + else if (CONSP (contents) + && SYMBOLP (XCAR (contents)) + && SYMBOLP (XCDR (contents))) + { + /* This is the new style for embedding symbols. The form is + (SYMBOL . PROPERTY). (get SYMBOL PROPERTY) should give + an index number. */ + + if (EQ (result, ccl)) + result = Fcopy_sequence (ccl); + + val = Fget (XCAR (contents), XCDR (contents), Qnil); + if (NATNUMP (val)) + XVECTOR (result)->contents[i] = val; + else + unresolved = 1; + continue; + } + else if (SYMBOLP (contents)) + { + /* This is the old style for embedding symbols. This style + may lead to a bug if, for instance, a translation table + and a code conversion map have the same name. */ + if (EQ (result, ccl)) + result = Fcopy_sequence (ccl); + + val = Fget (contents, Qcode_conversion_map_id, Qnil); + if (NATNUMP (val)) + XVECTOR (result)->contents[i] = val; + else + { + val = Fget (contents, Qccl_program_idx, Qnil); + if (NATNUMP (val)) + XVECTOR (result)->contents[i] = val; + else + unresolved = 1; + } + continue; + } + return Qnil; + } + + return (unresolved ? Qt : result); +} + +/* Return the compiled code (vector) of CCL program CCL_PROG. + CCL_PROG is a name (symbol) of the program or already compiled + code. If necessary, resolve symbols in the compiled code to index + numbers. If we failed to get the compiled code or to resolve + symbols, return Qnil. */ + +static Lisp_Object +ccl_get_compiled_code (Lisp_Object ccl_prog) +{ + Lisp_Object val, slot; + + if (VECTORP (ccl_prog)) + { + val = resolve_symbol_ccl_program (ccl_prog); + return (VECTORP (val) ? val : Qnil); + } + if (!SYMBOLP (ccl_prog)) + return Qnil; + + val = Fget (ccl_prog, Qccl_program_idx, Qnil); + if (! NATNUMP (val) + || XINT (val) >= XVECTOR_LENGTH (Vccl_program_table)) + return Qnil; + slot = XVECTOR_DATA (Vccl_program_table)[XINT (val)]; + if (! VECTORP (slot) + || XVECTOR (slot)->size != 3 + || ! VECTORP (XVECTOR_DATA (slot)[1])) + return Qnil; + if (NILP (XVECTOR_DATA (slot)[2])) + { + val = resolve_symbol_ccl_program (XVECTOR_DATA (slot)[1]); + if (! VECTORP (val)) + return Qnil; + XVECTOR_DATA (slot)[1] = val; + XVECTOR_DATA (slot)[2] = Qt; + } + return XVECTOR_DATA (slot)[1]; } /* Setup fields of the structure pointed by CCL appropriately for the - execution of compiled CCL code in VEC (vector of integer). - If VEC is nil, we skip setting ups based on VEC. */ -void -setup_ccl_program (struct ccl_program *ccl, Lisp_Object vec) + execution of CCL program CCL_PROG. CCL_PROG is the name (symbol) + of the CCL program or the already compiled code (vector). + Return 0 if we succeed this setup, else return -1. + + If CCL_PROG is nil, we just reset the structure pointed by CCL. */ +int +setup_ccl_program (struct ccl_program *ccl, Lisp_Object ccl_prog) { int i; - if (VECTORP (vec)) + if (! NILP (ccl_prog)) { - ccl->size = XVECTOR_LENGTH (vec); - ccl->prog = XVECTOR_DATA (vec); - ccl->eof_ic = XINT (XVECTOR_DATA (vec)[CCL_HEADER_EOF]); - ccl->buf_magnification = XINT (XVECTOR_DATA (vec)[CCL_HEADER_BUF_MAG]); + ccl_prog = ccl_get_compiled_code (ccl_prog); + if (! VECTORP (ccl_prog)) + return -1; + ccl->size = XVECTOR_LENGTH (ccl_prog); + ccl->prog = XVECTOR_DATA (ccl_prog); + ccl->eof_ic = XINT (XVECTOR_DATA (ccl_prog)[CCL_HEADER_EOF]); + ccl->buf_magnification = XINT (XVECTOR_DATA (ccl_prog)[CCL_HEADER_BUF_MAG]); } ccl->ic = CCL_HEADER_MAIN; for (i = 0; i < 8; i++) @@ -1671,115 +1938,81 @@ ccl->private_state = 0; ccl->status = 0; ccl->stack_idx = 0; + ccl->eol_type = CCL_CODING_EOL_LF; + return 0; } -/* Resolve symbols in the specified CCL code (Lisp vector). This - function converts symbols of code conversion maps and character - translation tables embeded in the CCL code into their ID numbers. */ - -static Lisp_Object -resolve_symbol_ccl_program (Lisp_Object ccl) -{ - int i, veclen; - Lisp_Object result, contents /*, prop */; +#ifdef emacs - result = ccl; - veclen = XVECTOR_LENGTH (result); - - /* Set CCL program's table ID */ - for (i = 0; i < veclen; i++) - { - contents = XVECTOR_DATA (result)[i]; - if (SYMBOLP (contents)) - { - if (EQ(result, ccl)) - result = Fcopy_sequence (ccl); +DEFUN ("ccl-program-p", Fccl_program_p, 1, 1, 0, /* +Return t if OBJECT is a CCL program name or a compiled CCL program code. +See the documentation of `define-ccl-program' for the detail of CCL program. +*/ + (object)) +{ + Lisp_Object val; -#if 0 - prop = Fget (contents, Qtranslation_table_id); - if (NUMBERP (prop)) - { - XVECTOR_DATA (result)[i] = prop; - continue; - } - prop = Fget (contents, Qcode_conversion_map_id); - if (NUMBERP (prop)) - { - XVECTOR_DATA (result)[i] = prop; - continue; - } - prop = Fget (contents, Qccl_program_idx); - if (NUMBERP (prop)) - { - XVECTOR_DATA (result)[i] = prop; - continue; - } -#endif - } + if (VECTORP (object)) + { + val = resolve_symbol_ccl_program (object); + return (VECTORP (val) ? Qt : Qnil); } + if (!SYMBOLP (object)) + return Qnil; - return result; + val = Fget (object, Qccl_program_idx, Qnil); + return ((! NATNUMP (val) + || XINT (val) >= XVECTOR_LENGTH (Vccl_program_table)) + ? Qnil : Qt); } - -#ifdef emacs - DEFUN ("ccl-execute", Fccl_execute, 2, 2, 0, /* Execute CCL-PROGRAM with registers initialized by REGISTERS. -CCL-PROGRAM is a symbol registered by register-ccl-program, +CCL-PROGRAM is a CCL program name (symbol) or a compiled code generated by `ccl-compile' (for backward compatibility, -in this case, the execution is slower). +in this case, the overhead of the execution is bigger than the former case). No I/O commands should appear in CCL-PROGRAM. REGISTERS is a vector of [R0 R1 ... R7] where RN is an initial value of Nth register. -As side effect, each element of REGISTER holds the value of +As side effect, each element of REGISTERS holds the value of corresponding register after the execution. + +See the documentation of `define-ccl-program' for the detail of CCL program. */ - (ccl_prog, reg)) + (ccl_prog, reg)) { struct ccl_program ccl; int i; - Lisp_Object ccl_id; - if (SYMBOLP (ccl_prog) && - !NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil))) - { - ccl_prog = XVECTOR_DATA (Vccl_program_table)[XUINT (ccl_id)]; - CHECK_LIST (ccl_prog); - ccl_prog = XCDR (ccl_prog); - CHECK_VECTOR (ccl_prog); - } - else - { - CHECK_VECTOR (ccl_prog); - ccl_prog = resolve_symbol_ccl_program (ccl_prog); - } + if (setup_ccl_program (&ccl, ccl_prog) < 0) + error ("Invalid CCL program"); CHECK_VECTOR (reg); if (XVECTOR_LENGTH (reg) != 8) - error ("Invalid length of vector REGISTERS"); + error ("Length of vector REGISTERS is not 8"); - setup_ccl_program (&ccl, ccl_prog); for (i = 0; i < 8; i++) ccl.reg[i] = (INTP (XVECTOR_DATA (reg)[i]) ? XINT (XVECTOR_DATA (reg)[i]) : 0); - ccl_driver (&ccl, (const unsigned char *)0, (unsigned_char_dynarr *)0, - 0, (int *)0, CCL_MODE_ENCODING); + ccl_driver (&ccl, (const unsigned char *)0, + (unsigned_char_dynarr *)0, 0, (int *)0, + CCL_MODE_ENCODING); QUIT; if (ccl.status != CCL_STAT_SUCCESS) error ("Error in CCL program at %dth code", ccl.ic); for (i = 0; i < 8; i++) - XSETINT (XVECTOR_DATA (reg)[i], ccl.reg[i]); + XSETINT (XVECTOR (reg)->contents[i], ccl.reg[i]); return Qnil; } -DEFUN ("ccl-execute-on-string", Fccl_execute_on_string, 3, 4, 0, /* +DEFUN ("ccl-execute-on-string", Fccl_execute_on_string, + 3, 4, 0, /* Execute CCL-PROGRAM with initial STATUS on STRING. CCL-PROGRAM is a symbol registered by register-ccl-program, @@ -1788,7 +2021,6 @@ Read buffer is set to STRING, and write buffer is allocated automatically. -If IC is nil, it is initialized to head of the CCL program.\n\ STATUS is a vector of [R0 R1 ... R7 IC], where R0..R7 are initial values of corresponding registers, IC is the instruction counter specifying from where to start the program. @@ -1796,42 +2028,32 @@ If IC is nil, it is initialized to head of the CCL program. If optional 4th arg CONTINUE is non-nil, keep IC on read operation -when read buffer is exausted, else, IC is always set to the end of +when read buffer is exhausted, else, IC is always set to the end of CCL-PROGRAM on exit. It returns the contents of write buffer as a string, and as side effect, STATUS is updated. + +See the documentation of `define-ccl-program' for the detail of CCL program. */ - (ccl_prog, status, str, contin)) + (ccl_prog, status, string, continue_)) { Lisp_Object val; struct ccl_program ccl; int i, produced; unsigned_char_dynarr *outbuf; - struct gcpro gcpro1, gcpro2, gcpro3; - Lisp_Object ccl_id; + struct gcpro gcpro1, gcpro2; - if (SYMBOLP (ccl_prog) && - !NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil))) - { - ccl_prog = XVECTOR (Vccl_program_table)->contents[XUINT (ccl_id)]; - CHECK_LIST (ccl_prog); - ccl_prog = XCDR (ccl_prog); - CHECK_VECTOR (ccl_prog); - } - else - { - CHECK_VECTOR (ccl_prog); - ccl_prog = resolve_symbol_ccl_program (ccl_prog); - } + if (setup_ccl_program (&ccl, ccl_prog) < 0) + error ("Invalid CCL program"); CHECK_VECTOR (status); - if (XVECTOR_LENGTH (status) != 9) - signal_simple_error ("Vector should be of length 9", status); - CHECK_STRING (str); - GCPRO3 (ccl_prog, status, str); + if (XVECTOR (status)->size != 9) + error ("Length of vector STATUS is not 9"); + CHECK_STRING (string); - setup_ccl_program (&ccl, ccl_prog); + GCPRO2 (status, string); + for (i = 0; i < 8; i++) { if (NILP (XVECTOR_DATA (status)[i])) @@ -1839,80 +2061,106 @@ if (INTP (XVECTOR_DATA (status)[i])) ccl.reg[i] = XINT (XVECTOR_DATA (status)[i]); } - if (INTP (XVECTOR_DATA (status)[8])) + if (INTP (XVECTOR (status)->contents[i])) { i = XINT (XVECTOR_DATA (status)[8]); if (ccl.ic < i && i < ccl.size) ccl.ic = i; } outbuf = Dynarr_new (unsigned_char); - ccl.last_block = NILP (contin); - produced = ccl_driver (&ccl, XSTRING_DATA (str), outbuf, - XSTRING_LENGTH (str), (int *)0, CCL_MODE_DECODING); + ccl.last_block = NILP (continue_); + produced = ccl_driver (&ccl, XSTRING_DATA (string), outbuf, + XSTRING_LENGTH (string), + (int *) 0, + CCL_MODE_DECODING); for (i = 0; i < 8; i++) - XVECTOR_DATA (status)[i] = make_int(ccl.reg[i]); + XSETINT (XVECTOR_DATA (status)[i], ccl.reg[i]); XSETINT (XVECTOR_DATA (status)[8], ccl.ic); UNGCPRO; val = make_string (Dynarr_atp (outbuf, 0), produced); Dynarr_free (outbuf); QUIT; + if (ccl.status == CCL_STAT_SUSPEND_BY_DST) + error ("Output buffer for the CCL programs overflow"); if (ccl.status != CCL_STAT_SUCCESS - && ccl.status != CCL_STAT_SUSPEND_BY_SRC - && ccl.status != CCL_STAT_SUSPEND_BY_DST) + && ccl.status != CCL_STAT_SUSPEND_BY_SRC) error ("Error in CCL program at %dth code", ccl.ic); return val; } -DEFUN ("register-ccl-program", Fregister_ccl_program, 2, 2, 0, /* -Register CCL program PROGRAM of NAME in `ccl-program-table'. -PROGRAM should be a compiled code of CCL program, or nil. +DEFUN ("register-ccl-program", Fregister_ccl_program, + 2, 2, 0, /* +Register CCL program CCL-PROG as NAME in `ccl-program-table'. +CCL-PROG should be a compiled CCL program (vector), or nil. +If it is nil, just reserve NAME as a CCL program name. Return index number of the registered CCL program. */ - (name, ccl_prog)) + (name, ccl_prog)) { int len = XVECTOR_LENGTH (Vccl_program_table); - int i; + int idx; + Lisp_Object resolved; CHECK_SYMBOL (name); + resolved = Qnil; if (!NILP (ccl_prog)) { CHECK_VECTOR (ccl_prog); - ccl_prog = resolve_symbol_ccl_program (ccl_prog); - } - - for (i = 0; i < len; i++) - { - Lisp_Object slot = XVECTOR_DATA (Vccl_program_table)[i]; - - if (!CONSP (slot)) - break; - - if (EQ (name, XCAR (slot))) + resolved = resolve_symbol_ccl_program (ccl_prog); + if (! NILP (resolved)) { - XCDR (slot) = ccl_prog; - return make_int (i); + ccl_prog = resolved; + resolved = Qt; } } - if (i == len) + for (idx = 0; idx < len; idx++) { - Lisp_Object new_table = Fmake_vector (make_int (len * 2), Qnil); + Lisp_Object slot; + + slot = XVECTOR_DATA (Vccl_program_table)[idx]; + if (!VECTORP (slot)) + /* This is the first unused slot. Register NAME here. */ + break; + + if (EQ (name, XVECTOR_DATA (slot)[0])) + { + /* Update this slot. */ + XVECTOR_DATA (slot)[1] = ccl_prog; + XVECTOR_DATA (slot)[2] = resolved; + return make_int (idx); + } + } + + if (idx == len) + { + /* Extend the table. */ + Lisp_Object new_table; int j; + new_table = Fmake_vector (make_int (len * 2), Qnil); for (j = 0; j < len; j++) XVECTOR_DATA (new_table)[j] = XVECTOR_DATA (Vccl_program_table)[j]; Vccl_program_table = new_table; } - XVECTOR_DATA (Vccl_program_table)[i] = Fcons (name, ccl_prog); - Fput (name, Qccl_program_idx, make_int (i)); - return make_int (i); + { + Lisp_Object elt; + + elt = Fmake_vector (make_int (3), Qnil); + XVECTOR_DATA (elt)[0] = name; + XVECTOR_DATA (elt)[1] = ccl_prog; + XVECTOR_DATA (elt)[2] = resolved; + XVECTOR_DATA (Vccl_program_table)[idx] = elt; + } + + Fput (name, Qccl_program_idx, make_int (idx)); + return make_int (idx); } -#if 0 /* Register code conversion map. A code conversion map consists of numbers, Qt, Qnil, and Qlambda. The first element is start code point. @@ -1923,34 +2171,33 @@ */ DEFUN ("register-code-conversion-map", Fregister_code_conversion_map, - Sregister_code_conversion_map, - 2, 2, 0, - "Register SYMBOL as code conversion map MAP.\n\ -Return index number of the registered map.") - (symbol, map) - Lisp_Object symbol, map; + 2, 2, 0, /* +Register SYMBOL as code conversion map MAP. +Return index number of the registered map. +*/ + (symbol, map)) { - int len = XVECTOR (Vcode_conversion_map_vector)->size; + int len = XVECTOR_LENGTH (Vcode_conversion_map_vector); int i; - Lisp_Object index; + Lisp_Object idx; - CHECK_SYMBOL (symbol, 0); - CHECK_VECTOR (map, 1); + CHECK_SYMBOL (symbol); + CHECK_VECTOR (map); for (i = 0; i < len; i++) { - Lisp_Object slot = XVECTOR (Vcode_conversion_map_vector)->contents[i]; + Lisp_Object slot = XVECTOR_DATA (Vcode_conversion_map_vector)[i]; if (!CONSP (slot)) break; - if (EQ (symbol, XCONS (slot)->car)) + if (EQ (symbol, XCAR (slot))) { - index = make_int (i); - XCONS (slot)->cdr = map; + idx = make_int (i); + XCDR (slot) = map; Fput (symbol, Qcode_conversion_map, map); - Fput (symbol, Qcode_conversion_map_id, index); - return index; + Fput (symbol, Qcode_conversion_map_id, idx); + return idx; } } @@ -1960,29 +2207,27 @@ int j; for (j = 0; j < len; j++) - XVECTOR (new_vector)->contents[j] - = XVECTOR (Vcode_conversion_map_vector)->contents[j]; + XVECTOR_DATA (new_vector)[j] + = XVECTOR_DATA (Vcode_conversion_map_vector)[j]; Vcode_conversion_map_vector = new_vector; } - index = make_int (i); + idx = make_int (i); Fput (symbol, Qcode_conversion_map, map); - Fput (symbol, Qcode_conversion_map_id, index); - XVECTOR (Vcode_conversion_map_vector)->contents[i] = Fcons (symbol, map); - return index; + Fput (symbol, Qcode_conversion_map_id, idx); + XVECTOR_DATA (Vcode_conversion_map_vector)[i] = Fcons (symbol, map); + return idx; } -#endif void syms_of_mule_ccl (void) { + DEFSUBR (Fccl_program_p); DEFSUBR (Fccl_execute); DEFSUBR (Fccl_execute_on_string); DEFSUBR (Fregister_ccl_program); -#if 0 - DEFSUBR (&Fregister_code_conversion_map); -#endif + DEFSUBR (Fregister_code_conversion_map); } void @@ -1991,23 +2236,15 @@ staticpro (&Vccl_program_table); Vccl_program_table = Fmake_vector (make_int (32), Qnil); - Qccl_program = intern ("ccl-program"); - staticpro (&Qccl_program); - - Qccl_program_idx = intern ("ccl-program-idx"); - staticpro (&Qccl_program_idx); - -#if 0 - Qcode_conversion_map = intern ("code-conversion-map"); - staticpro (&Qcode_conversion_map); - - Qcode_conversion_map_id = intern ("code-conversion-map-id"); - staticpro (&Qcode_conversion_map_id); + defsymbol (&Qccl_program, "ccl-program"); + defsymbol (&Qccl_program_idx, "ccl-program-idx"); + defsymbol (&Qcode_conversion_map, "code-conversion-map"); + defsymbol (&Qcode_conversion_map_id, "code-conversion-map-id"); DEFVAR_LISP ("code-conversion-map-vector", &Vcode_conversion_map_vector /* -Vector of code conversion maps.*/ ); +Vector of code conversion maps. +*/ ); Vcode_conversion_map_vector = Fmake_vector (make_int (16), Qnil); -#endif DEFVAR_LISP ("font-ccl-encoder-alist", &Vfont_ccl_encoder_alist /* Alist of fontname patterns vs corresponding CCL program. diff -r a8296e22da4e -r 576fb035e263 src/mule-ccl.h --- a/src/mule-ccl.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/mule-ccl.h Mon Aug 13 11:36:19 2007 +0200 @@ -1,5 +1,5 @@ /* Header for CCL (Code Conversion Language) interpreter. - Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN. + Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. Licensed to the Free Software Foundation. This file is part of XEmacs. @@ -19,8 +19,6 @@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* Synched up with: FSF Emacs 20.3.10 */ - #ifndef INCLUDED_mule_ccl_h_ #define INCLUDED_mule_ccl_h_ @@ -44,8 +42,8 @@ condition flag of relational operations. */ int private_state; /* CCL instruction may use this - for private use, mainly for preservation - internal states for suspending. + for private use, mainly for saving + internal states on suspending. This variable is set to 0 when ccl is set up. */ int last_block; /* Set to 1 while processing the last @@ -55,19 +53,41 @@ many times bigger the output buffer should be than the input buffer. */ int stack_idx; /* How deep the call of CCL_Call is nested. */ + int eol_type; /* When the CCL program is used for + encoding by a coding system, set to + the eol_type of the coding + system. */ + int multibyte; /* 1 if the source text is multibyte. */ }; - #define CCL_MODE_ENCODING 0 #define CCL_MODE_DECODING 1 -int ccl_driver (struct ccl_program *ccl, const unsigned char *source, - unsigned_char_dynarr *destination, int src_bytes, - int *consumed, int conversion_mode); -void setup_ccl_program (struct ccl_program *ccl, Lisp_Object val); +#define CCL_CODING_EOL_LF 0 /* Line-feed only, same as Emacs' + internal format. */ +#define CCL_CODING_EOL_CRLF 1 /* Sequence of carriage-return and + line-feed. */ +#define CCL_CODING_EOL_CR 2 /* Carriage-return only. */ /* Alist of fontname patterns vs corresponding CCL program. */ extern Lisp_Object Vfont_ccl_encoder_alist; + +/* Setup fields of the structure pointed by CCL appropriately for the + execution of ccl program CCL_PROG (symbol or vector). */ +extern int setup_ccl_program (struct ccl_program *, Lisp_Object); + +extern int ccl_driver (struct ccl_program *, const unsigned char *, + unsigned_char_dynarr *, int, int *, int); + +EXFUN (Fregister_ccl_program, 2); + extern Lisp_Object Qccl_program; +/* Vector of CCL program names vs corresponding program data. */ +extern Lisp_Object Vccl_program_table; + +/* Symbols of ccl program have this property, a value of the property + is an index for Vccl_program_table. */ +extern Lisp_Object Qccl_program_idx; + #endif /* INCLUDED_mule_ccl_h_ */ diff -r a8296e22da4e -r 576fb035e263 src/mule-charset.c --- a/src/mule-charset.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/mule-charset.c Mon Aug 13 11:36:19 2007 +0200 @@ -322,26 +322,18 @@ /* Basic string functions */ /************************************************************************/ -/* Copy the character pointed to by PTR into STR, assuming it's - non-ASCII. Do not call this directly. Use the macro - charptr_copy_char() instead. */ +/* Copy the character pointed to by SRC into DST. Do not call this + directly. Use the macro charptr_copy_char() instead. + Return the number of bytes copied. */ Bytecount -non_ascii_charptr_copy_char (const Bufbyte *ptr, Bufbyte *str) +non_ascii_charptr_copy_char (const Bufbyte *src, Bufbyte *dst) { - Bufbyte *strptr = str; - *strptr = *ptr++; - switch (REP_BYTES_BY_FIRST_BYTE (*strptr)) - { - /* Notice fallthrough. */ - case 4: *++strptr = *ptr++; - case 3: *++strptr = *ptr++; - case 2: *++strptr = *ptr; - break; - default: - abort (); - } - return strptr + 1 - str; + unsigned int bytes = REP_BYTES_BY_FIRST_BYTE (*src); + unsigned int i; + for (i = bytes; i; i--, dst++, src++) + *dst = *src; + return bytes; } @@ -358,26 +350,15 @@ { Bufbyte str[MAX_EMCHAR_LEN]; Bufbyte *strptr = str; + unsigned int bytes; str[0] = (Bufbyte) ch; - switch (REP_BYTES_BY_FIRST_BYTE (ch)) + + for (bytes = REP_BYTES_BY_FIRST_BYTE (ch) - 1; bytes; bytes--) { - /* Notice fallthrough. */ - case 4: - ch = Lstream_getc (stream); - assert (ch >= 0); - *++strptr = (Bufbyte) ch; - case 3: - ch = Lstream_getc (stream); - assert (ch >= 0); - *++strptr = (Bufbyte) ch; - case 2: - ch = Lstream_getc (stream); - assert (ch >= 0); - *++strptr = (Bufbyte) ch; - break; - default: - abort (); + int c = Lstream_getc (stream); + bufpos_checking_assert (c >= 0); + *++strptr = (Bufbyte) c; } return charptr_emchar (str); } @@ -629,7 +610,7 @@ } DEFUN ("charset-name", Fcharset_name, 1, 1, 0, /* -Return the name of the given charset. +Return the name of charset CHARSET. */ (charset)) { @@ -774,7 +755,10 @@ else if (EQ (keyword, Qccl_program)) { - CHECK_VECTOR (value); + struct ccl_program test_ccl; + + if (setup_ccl_program (&test_ccl, value) < 0) + signal_simple_error ("Invalid value for 'ccl-program", value); ccl_program = value; } @@ -1030,8 +1014,11 @@ */ (charset, ccl_program)) { + struct ccl_program test_ccl; + charset = Fget_charset (charset); - CHECK_VECTOR (ccl_program); + if (setup_ccl_program (&test_ccl, ccl_program) < 0) + signal_simple_error ("Invalid ccl-program", ccl_program); XCHARSET_CCL_PROGRAM (charset) = ccl_program; return Qnil; } @@ -1115,28 +1102,28 @@ } DEFUN ("char-charset", Fchar_charset, 1, 1, 0, /* -Return the character set of char CH. +Return the character set of CHARACTER. */ - (ch)) + (character)) { - CHECK_CHAR_COERCE_INT (ch); + CHECK_CHAR_COERCE_INT (character); return XCHARSET_NAME (CHARSET_BY_LEADING_BYTE - (CHAR_LEADING_BYTE (XCHAR (ch)))); + (CHAR_LEADING_BYTE (XCHAR (character)))); } DEFUN ("char-octet", Fchar_octet, 1, 2, 0, /* -Return the octet numbered N (should be 0 or 1) of char CH. +Return the octet numbered N (should be 0 or 1) of CHARACTER. N defaults to 0 if omitted. */ - (ch, n)) + (character, n)) { Lisp_Object charset; int octet0, octet1; - CHECK_CHAR_COERCE_INT (ch); + CHECK_CHAR_COERCE_INT (character); - BREAKUP_CHAR (XCHAR (ch), charset, octet0, octet1); + BREAKUP_CHAR (XCHAR (character), charset, octet0, octet1); if (NILP (n) || EQ (n, Qzero)) return make_int (octet0); @@ -1147,7 +1134,7 @@ } DEFUN ("split-char", Fsplit_char, 1, 1, 0, /* -Return list of charset and one or two position-codes of CHAR. +Return list of charset and one or two position-codes of CHARACTER. */ (character)) { diff -r a8296e22da4e -r 576fb035e263 src/mule-charset.h --- a/src/mule-charset.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/mule-charset.h Mon Aug 13 11:36:19 2007 +0200 @@ -401,19 +401,19 @@ /* Is this a prefix for a private leading byte? */ -INLINE_HEADER int LEADING_BYTE_PREFIX_P (unsigned char lb); +INLINE_HEADER int LEADING_BYTE_PREFIX_P (Bufbyte lb); INLINE_HEADER int -LEADING_BYTE_PREFIX_P (unsigned char lb) +LEADING_BYTE_PREFIX_P (Bufbyte lb) { return (lb == PRE_LEADING_BYTE_PRIVATE_1 || lb == PRE_LEADING_BYTE_PRIVATE_2); } /* Given a private leading byte, return the leading byte prefix stored - in a string */ + in a string. */ #define PRIVATE_LEADING_BYTE_PREFIX(lb) \ - ((lb) < MIN_LEADING_BYTE_PRIVATE_2 ? \ + ((unsigned int) (lb) < MIN_LEADING_BYTE_PRIVATE_2 ? \ PRE_LEADING_BYTE_PRIVATE_1 : \ PRE_LEADING_BYTE_PRIVATE_2) @@ -423,13 +423,12 @@ /* of any format */ /************************************************************************/ -/* Argument `c' should be (unsigned int) or (unsigned char). */ -/* Note that SP and DEL are not included. */ +/* These are carefully designed to work if BYTE is signed or unsigned. */ +/* Note that SPC and DEL are considered ASCII, not control. */ -#define BYTE_ASCII_P(c) ((c) < 0x80) -#define BYTE_C0_P(c) ((c) < 0x20) -/* Do some forced casting just to make *sure* things are gotten right. */ -#define BYTE_C1_P(c) ((unsigned int) ((unsigned int) (c) - 0x80) < 0x20) +#define BYTE_ASCII_P(byte) (((byte) & ~0x7f) == 0) +#define BYTE_C0_P(byte) (((byte) & ~0x1f) == 0) +#define BYTE_C1_P(byte) (((byte) & ~0x1f) == 0x80) /************************************************************************/ @@ -437,13 +436,13 @@ /* in a Mule-formatted string */ /************************************************************************/ -/* Does this byte represent the first byte of a character? */ +/* Does BYTE represent the first byte of a character? */ -#define BUFBYTE_FIRST_BYTE_P(c) ((c) < 0xA0) +#define BUFBYTE_FIRST_BYTE_P(byte) ((byte) < 0xA0) -/* Does this byte represent the first byte of a multi-byte character? */ +/* Does BYTE represent the first byte of a multi-byte character? */ -#define BUFBYTE_LEADING_BYTE_P(c) BYTE_C1_P (c) +#define BUFBYTE_LEADING_BYTE_P(byte) BYTE_C1_P (byte) /************************************************************************/ @@ -561,29 +560,33 @@ Bufbyte next_allocated_2_byte_leading_byte; }; -extern struct charset_lookup *chlook; +INLINE_HEADER Lisp_Object CHARSET_BY_LEADING_BYTE (Bufbyte lb); +INLINE_HEADER Lisp_Object +CHARSET_BY_LEADING_BYTE (Bufbyte lb) +{ + extern struct charset_lookup *chlook; #ifdef ERROR_CHECK_TYPECHECK -/* int not Bufbyte even though that is the actual type of a leading byte. - This way, out-of-range values will get caught rather than automatically - truncated. */ -INLINE_HEADER Lisp_Object CHARSET_BY_LEADING_BYTE (int lb); -INLINE_HEADER Lisp_Object -CHARSET_BY_LEADING_BYTE (int lb) -{ - assert (lb >= 0x80 && lb <= 0xFF); + /* When error-checking is on, x86 GCC 2.95.2 -O3 miscompiles the + following unless we introduce `tem'. */ + int tem = lb; + type_checking_assert (tem >= 0x80 && tem <= 0xFF); +#endif return chlook->charset_by_leading_byte[lb - 128]; } -#else - -#define CHARSET_BY_LEADING_BYTE(lb) (chlook->charset_by_leading_byte[(lb) - 128]) +INLINE_HEADER Lisp_Object +CHARSET_BY_ATTRIBUTES (unsigned int type, unsigned char final, int dir); +INLINE_HEADER Lisp_Object +CHARSET_BY_ATTRIBUTES (unsigned int type, unsigned char final, int dir) +{ + extern struct charset_lookup *chlook; -#endif - -#define CHARSET_BY_ATTRIBUTES(type, final, dir) \ - (chlook->charset_by_attributes[type][final][dir]) - + type_checking_assert (type < countof (chlook->charset_by_attributes) && + final < countof (chlook->charset_by_attributes[0]) && + dir < countof (chlook->charset_by_attributes[0][0])); + return chlook->charset_by_attributes[type][final][dir]; +} /* Table of number of bytes in the string representation of a character indexed by the first byte of that representation. @@ -594,13 +597,11 @@ extern const Bytecount rep_bytes_by_first_byte[0xA0]; /* Number of bytes in the string representation of a character. */ -INLINE_HEADER int REP_BYTES_BY_FIRST_BYTE (int fb); +INLINE_HEADER int REP_BYTES_BY_FIRST_BYTE (Bufbyte fb); INLINE_HEADER int -REP_BYTES_BY_FIRST_BYTE (int fb) +REP_BYTES_BY_FIRST_BYTE (Bufbyte fb) { -#ifdef ERROR_CHECK_TYPECHECK - assert (0 <= fb && fb < 0xA0); -#endif + type_checking_assert (fb < 0xA0); return rep_bytes_by_first_byte[fb]; } diff -r a8296e22da4e -r 576fb035e263 src/mule-wnnfns.c --- a/src/mule-wnnfns.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/mule-wnnfns.c Mon Aug 13 11:36:19 2007 +0200 @@ -328,7 +328,7 @@ DEFUN ("wnn-server-open", Fwnn_open, 2, 2, 0, /* Connect to jserver of host HNAME, make an environment with login name LNAME in the server. -Return nil if error occurs +Return nil if error occurs. */ (hname, lname)) { @@ -528,7 +528,7 @@ DEFUN ("wnn-server-dict-comment", Fwnn_dict_comment, 2, 2, 0, /* Set comment to dictionary specified by DIC-NUMBER. -Comment string COMMENT +Comment string COMMENT. */ (dicno, comment)) { @@ -771,7 +771,7 @@ DEFUN ("wnn-server-henkan-quit", Fwnn_quit_henkan, 0, 0, 0, /* -do nothing +do nothing. */ ()) { @@ -862,7 +862,7 @@ DEFUN ("wnn-server-word-add", Fwnn_word_toroku, 5, 5, 0, /* Add a word to dictionary. Arguments are -DIC-NUMBER, KANJI, YOMI, COMMENT, HINSI-NUMBER +DIC-NUMBER, KANJI, YOMI, COMMENT, HINSI-NUMBER. */ (dicno, kanji, yomi, comment, hinsi)) { @@ -888,7 +888,7 @@ DEFUN ("wnn-server-word-delete", Fwnn_word_sakujo, 2, 2, 0, /* -Delete a word from dictionary, specified by DIC-NUMBER, SERIAL-NUMBER +Delete a word from dictionary, specified by DIC-NUMBER, SERIAL-NUMBER. */ (no, serial)) { @@ -904,7 +904,7 @@ DEFUN ("wnn-server-word-use", Fwnn_word_use, 2, 2, 0, /* -Toggle on/off word, specified by DIC-NUMBER and SERIAL-NUMBER +Toggle on/off word, specified by DIC-NUMBER and SERIAL-NUMBER. */ (no, serial)) { @@ -955,7 +955,7 @@ DEFUN ("wnn-server-word-hindo-set", Fwnn_hindo_set, 3, 3, 0, /* Set frequency to arbitrary value. Specified by DIC-NUMBER, -SERIAL-NUMBER, FREQUENCY +SERIAL-NUMBER, FREQUENCY. */ (no, serial, hindo)) { diff -r a8296e22da4e -r 576fb035e263 src/objects-x.c --- a/src/objects-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/objects-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -284,7 +284,7 @@ Lisp_Object printcharfun, int escapeflag) { - Bufbyte buf[100]; + char buf[100]; XColor color = COLOR_INSTANCE_X_COLOR (c); sprintf (buf, " %ld=(%X,%X,%X)", color.pixel, color.red, color.green, color.blue); @@ -466,7 +466,7 @@ Lisp_Object printcharfun, int escapeflag) { - Bufbyte buf[200]; + char buf[200]; sprintf (buf, " 0x%lx", (unsigned long) FONT_INSTANCE_X_FONT (f)->fid); write_c_string (buf, printcharfun); } @@ -577,7 +577,7 @@ might be more correct. */ int nnames = 0; - SExtbyte **names = 0; + Extbyte **names = 0; if (! name) return 0; names = XListFonts (dpy, name, 1, &nnames); @@ -687,7 +687,7 @@ truename_via_XListFonts (Display *dpy, Extbyte *font_name) { Extbyte *result = 0; - SExtbyte **names; + Extbyte **names; int count = 0; #ifndef XOPENFONT_SORTS @@ -799,7 +799,7 @@ return f->name; } } - return (FONT_INSTANCE_X_TRUENAME (f)); + return FONT_INSTANCE_X_TRUENAME (f); } static Lisp_Object @@ -808,22 +808,23 @@ struct device *d = XDEVICE (f->device); int i; Lisp_Object result = Qnil; - XFontProp *props; - Display *dpy; + Display *dpy = DEVICE_X_DISPLAY (d); + XFontProp *props = FONT_INSTANCE_X_FONT (f)->properties; - dpy = DEVICE_X_DISPLAY (d); - props = FONT_INSTANCE_X_FONT (f)->properties; for (i = FONT_INSTANCE_X_FONT (f)->n_properties - 1; i >= 0; i--) { Lisp_Object name, value; Atom atom = props [i].name; Bufbyte *name_str = 0; + size_t name_len; Extbyte *namestrext = XGetAtomName (dpy, atom); if (namestrext) - EXTERNAL_TO_C_STRING (namestrext, name_str, Qx_atom_name_encoding); + TO_INTERNAL_FORMAT (C_STRING, namestrext, + ALLOCA, (name_str, name_len), + Qx_atom_name_encoding); - name = (name_str ? intern (name_str) : Qnil); + name = (name_str ? intern ((char *) name_str) : Qnil); if (name_str && (atom == XA_FONT || atom == DEVICE_XATOM_FOUNDRY (d) || @@ -835,17 +836,17 @@ atom == DEVICE_XATOM_SPACING (d) || atom == DEVICE_XATOM_CHARSET_REGISTRY (d) || atom == DEVICE_XATOM_CHARSET_ENCODING (d) || - !strcmp (name_str, "CHARSET_COLLECTIONS") || - !strcmp (name_str, "FONTNAME_REGISTRY") || - !strcmp (name_str, "CLASSIFICATION") || - !strcmp (name_str, "COPYRIGHT") || - !strcmp (name_str, "DEVICE_FONT_NAME") || - !strcmp (name_str, "FULL_NAME") || - !strcmp (name_str, "MONOSPACED") || - !strcmp (name_str, "QUALITY") || - !strcmp (name_str, "RELATIVE_SET") || - !strcmp (name_str, "RELATIVE_WEIGHT") || - !strcmp (name_str, "STYLE"))) + !bufbyte_strcmp (name_str, "CHARSET_COLLECTIONS") || + !bufbyte_strcmp (name_str, "FONTNAME_REGISTRY") || + !bufbyte_strcmp (name_str, "CLASSIFICATION") || + !bufbyte_strcmp (name_str, "COPYRIGHT") || + !bufbyte_strcmp (name_str, "DEVICE_FONT_NAME") || + !bufbyte_strcmp (name_str, "FULL_NAME") || + !bufbyte_strcmp (name_str, "MONOSPACED") || + !bufbyte_strcmp (name_str, "QUALITY") || + !bufbyte_strcmp (name_str, "RELATIVE_SET") || + !bufbyte_strcmp (name_str, "RELATIVE_WEIGHT") || + !bufbyte_strcmp (name_str, "STYLE"))) { Extbyte *val_str = XGetAtomName (dpy, props [i].card32); @@ -863,7 +864,7 @@ static Lisp_Object x_list_fonts (Lisp_Object pattern, Lisp_Object device) { - SExtbyte **names; + Extbyte **names; int count = 0; Lisp_Object result = Qnil; const Extbyte *patternext; @@ -936,7 +937,7 @@ static Lisp_Object x_find_charset_font (Lisp_Object device, Lisp_Object font, Lisp_Object charset) { - SExtbyte **names; + Extbyte **names; int count = 0; Lisp_Object result = Qnil; const Extbyte *patternext; @@ -950,12 +951,15 @@ for (i = 0; i < count; i ++) { const Bufbyte *intname; + Bytecount intlen; - EXTERNAL_TO_C_STRING (names[i], intname, Qx_font_name_encoding); + TO_INTERNAL_FORMAT (C_STRING, names[i], + ALLOCA, (intname, intlen), + Qx_font_name_encoding); if (x_font_spec_matches_charset (XDEVICE (device), charset, intname, Qnil, 0, -1)) { - result = build_string (intname); + result = make_string (intname, intlen); break; } } diff -r a8296e22da4e -r 576fb035e263 src/objects.c --- a/src/objects.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/objects.c Mon Aug 13 11:36:19 2007 +0200 @@ -137,8 +137,8 @@ and defaults to the selected device. An error is signaled if the color is unknown or cannot be allocated; -however, if optional argument NO-ERROR is non-nil, nil is simply -returned in this case. (And if NO-ERROR is other than t, a warning may +however, if optional argument NOERROR is non-nil, nil is simply +returned in this case. (And if NOERROR is other than t, a warning may be issued.) The returned object is a normal, first-class lisp object. The way you @@ -147,7 +147,7 @@ these objects are GCed, the underlying window-system data (e.g. X object) is deallocated as well. */ - (name, device, no_error)) + (name, device, noerror)) { Lisp_Color_Instance *c; Lisp_Object val; @@ -163,7 +163,7 @@ retval = MAYBE_INT_DEVMETH (XDEVICE (device), initialize_color_instance, (c, name, device, - decode_error_behavior_flag (no_error))); + decode_error_behavior_flag (noerror))); if (!retval) return Qnil; @@ -315,12 +315,12 @@ you drop all pointers to it and allow it to be garbage collected. When these objects are GCed, the underlying X data is deallocated as well. */ - (name, device, no_error)) + (name, device, noerror)) { Lisp_Font_Instance *f; Lisp_Object val; int retval = 0; - Error_behavior errb = decode_error_behavior_flag (no_error); + Error_behavior errb = decode_error_behavior_flag (noerror); if (ERRB_EQ (errb, ERROR_ME)) CHECK_STRING (name); diff -r a8296e22da4e -r 576fb035e263 src/print.c --- a/src/print.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/print.c Mon Aug 13 11:36:19 2007 +0200 @@ -509,19 +509,19 @@ DEFUN ("write-char", Fwrite_char, 1, 2, 0, /* -Output character CH to stream STREAM. +Output character CHARACTER to stream STREAM. STREAM defaults to the value of `standard-output' (which see). */ - (ch, stream)) + (character, stream)) { /* This function can GC */ Bufbyte str[MAX_EMCHAR_LEN]; Bytecount len; - CHECK_CHAR_COERCE_INT (ch); - len = set_charptr_emchar (str, XCHAR (ch)); + CHECK_CHAR_COERCE_INT (character); + len = set_charptr_emchar (str, XCHAR (character)); output_string (canonicalize_printcharfun (stream), str, Qnil, 0, len); - return ch; + return character; } void @@ -673,7 +673,7 @@ Output the printed representation of OBJECT, any Lisp object. No quoting characters are used; no delimiters are printed around the contents of strings. -Output stream is STREAM, or value of standard-output (which see). +Output stream is STREAM, or value of `standard-output' (which see). */ (object, stream)) { @@ -1604,22 +1604,24 @@ } DEFUN ("open-termscript", Fopen_termscript, 1, 1, "FOpen termscript file: ", /* -Start writing all terminal output to FILE as well as the terminal. -FILE = nil means just close any termscript file currently open. +Start writing all terminal output to FILENAME as well as the terminal. +FILENAME = nil means just close any termscript file currently open. */ - (file)) + (filename)) { /* This function can GC */ if (termscript != 0) - fclose (termscript); - termscript = 0; - - if (! NILP (file)) { - file = Fexpand_file_name (file, Qnil); - termscript = fopen ((char *) XSTRING_DATA (file), "w"); + fclose (termscript); + termscript = 0; + } + + if (! NILP (filename)) + { + filename = Fexpand_file_name (filename, Qnil); + termscript = fopen ((char *) XSTRING_DATA (filename), "w"); if (termscript == NULL) - report_file_error ("Opening termscript", list1 (file)); + report_file_error ("Opening termscript", list1 (filename)); } return Qnil; } diff -r a8296e22da4e -r 576fb035e263 src/process-unix.c --- a/src/process-unix.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/process-unix.c Mon Aug 13 11:36:19 2007 +0200 @@ -1407,9 +1407,9 @@ try_to_initialize_subtty (struct unix_process_data *upd) { if (upd->pty_flag - && (upd->subtty = -1 || ! isatty (upd->subtty)) + && (upd->subtty == -1 || ! isatty (upd->subtty)) && STRINGP (upd->tty_name)) - upd->subtty = open (XSTRING_DATA (upd->tty_name), O_RDWR, 0); + upd->subtty = open ((char *) XSTRING_DATA (upd->tty_name), O_RDWR, 0); } /* Send signal number SIGNO to PROCESS. @@ -1475,9 +1475,21 @@ ioctl TIOCGPGRP it is supposed to obsolete. Sometimes we have to use TIOCGPGRP on the master end, sometimes the slave end (probably an AIX bug). So we better get a fd for the slave if we - haven't got it yet. On some systems none of these work, so then - we just fall back to the non-current_group behavior and kill the - process group of the child. */ + haven't got it yet. + + Anal operating systems like SGI Irix and Compaq Tru64 adhere + strictly to the letter of the law, so our hack doesn't work. + The following fragment from an Irix header file is suggestive: + + #ifdef __notdef__ + // this is not currently supported + #define TIOCSIGNAL (tIOC|31) // pty: send signal to slave + #endif + + On those systems where none of our tricks work, we just fall back + to the non-current_group behavior and kill the process group of + the child. + */ if (current_group) { try_to_initialize_subtty (d); diff -r a8296e22da4e -r 576fb035e263 src/process.c --- a/src/process.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/process.c Mon Aug 13 11:36:19 2007 +0200 @@ -112,50 +112,50 @@ static Lisp_Object -mark_process (Lisp_Object obj) +mark_process (Lisp_Object object) { - Lisp_Process *proc = XPROCESS (obj); - MAYBE_PROCMETH (mark_process_data, (proc)); - mark_object (proc->name); - mark_object (proc->command); - mark_object (proc->filter); - mark_object (proc->sentinel); - mark_object (proc->buffer); - mark_object (proc->mark); - mark_object (proc->pid); - mark_object (proc->pipe_instream); - mark_object (proc->pipe_outstream); + Lisp_Process *process = XPROCESS (object); + MAYBE_PROCMETH (mark_process_data, (process)); + mark_object (process->name); + mark_object (process->command); + mark_object (process->filter); + mark_object (process->sentinel); + mark_object (process->buffer); + mark_object (process->mark); + mark_object (process->pid); + mark_object (process->pipe_instream); + mark_object (process->pipe_outstream); #ifdef FILE_CODING - mark_object (proc->coding_instream); - mark_object (proc->coding_outstream); + mark_object (process->coding_instream); + mark_object (process->coding_outstream); #endif - return proc->status_symbol; + return process->status_symbol; } static void -print_process (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) +print_process (Lisp_Object object, Lisp_Object printcharfun, int escapeflag) { - Lisp_Process *proc = XPROCESS (obj); + Lisp_Process *process = XPROCESS (object); if (print_readably) error ("printing unreadable object #", - XSTRING_DATA (proc->name)); + XSTRING_DATA (process->name)); if (!escapeflag) { - print_internal (proc->name, printcharfun, 0); + print_internal (process->name, printcharfun, 0); } else { - int netp = network_connection_p (obj); + int netp = network_connection_p (object); write_c_string ((netp ? GETTEXT ("#name, printcharfun, 1); + print_internal (process->name, printcharfun, 1); write_c_string ((netp ? " " : " pid "), printcharfun); - print_internal (proc->pid, printcharfun, 1); + print_internal (process->pid, printcharfun, 1); write_c_string (" state:", printcharfun); - print_internal (proc->status_symbol, printcharfun, 1); - MAYBE_PROCMETH (print_process_data, (proc, printcharfun)); + print_internal (process->status_symbol, printcharfun, 1); + MAYBE_PROCMETH (print_process_data, (process, printcharfun)); write_c_string (">", printcharfun); } } @@ -215,9 +215,9 @@ if (gethash ((const void*)usid, usid_to_process, &vval)) { - Lisp_Object proc; - CVOID_TO_LISP (proc, vval); - return XPROCESS (proc); + Lisp_Object process; + CVOID_TO_LISP (process, vval); + return XPROCESS (process); } else return 0; @@ -252,17 +252,18 @@ DEFUN ("processp", Fprocessp, 1, 1, 0, /* Return t if OBJECT is a process. */ - (obj)) + (object)) { - return PROCESSP (obj) ? Qt : Qnil; + return PROCESSP (object) ? Qt : Qnil; } DEFUN ("process-live-p", Fprocess_live_p, 1, 1, 0, /* Return t if OBJECT is a process that is alive. */ - (obj)) + (object)) { - return PROCESSP (obj) && PROCESS_LIVE_P (XPROCESS (obj)) ? Qt : Qnil; + return PROCESSP (object) && PROCESS_LIVE_P (XPROCESS (object)) + ? Qt : Qnil; } DEFUN ("process-list", Fprocess_list, 0, 0, 0, /* @@ -274,27 +275,24 @@ } DEFUN ("get-process", Fget_process, 1, 1, 0, /* -Return the process named NAME, or nil if there is none. +Return the process named PROCESS-NAME (a string), or nil if there is none. +PROCESS-NAME may also be a process; if so, the value is that process. */ - (name)) + (process_name)) { - Lisp_Object tail; - - if (PROCESSP (name)) - return name; + if (PROCESSP (process_name)) + return process_name; if (!gc_in_progress) /* this only gets called during GC when emacs is going away as a result of a signal or crash. */ - CHECK_STRING (name); + CHECK_STRING (process_name); - for (tail = Vprocess_list; CONSP (tail); tail = XCDR (tail)) - { - Lisp_Object proc = XCAR (tail); - QUIT; - if (internal_equal (name, XPROCESS (proc)->name, 0)) - return XCAR (tail); - } + { + LIST_LOOP_2 (process, Vprocess_list) + if (internal_equal (process_name, XPROCESS (process)->name, 0)) + return process; + } return Qnil; } @@ -302,24 +300,17 @@ Return the (or, a) process associated with BUFFER. BUFFER may be a buffer or the name of one. */ - (name)) + (buffer)) { - Lisp_Object buf, tail, proc; - - if (NILP (name)) return Qnil; - buf = Fget_buffer (name); - if (NILP (buf)) return Qnil; + if (NILP (buffer)) return Qnil; + buffer = Fget_buffer (buffer); + if (NILP (buffer)) return Qnil; - for (tail = Vprocess_list; CONSP (tail); tail = XCDR (tail)) - { - /* jwz: do not quit here - it isn't necessary, as there is no way for - Vprocess_list to get circular or overwhelmingly long, and this - function is called from layout_mode_element under redisplay. */ - /* QUIT; */ - proc = XCAR (tail); - if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf)) - return proc; - } + { + LIST_LOOP_2 (process, Vprocess_list) + if (EQ (XPROCESS (process)->buffer, buffer)) + return process; + } return Qnil; } @@ -331,7 +322,7 @@ static Lisp_Object get_process (Lisp_Object name) { - Lisp_Object proc, obj; + Lisp_Object buffer; #ifdef I18N3 /* #### Look more closely into translating process names. */ @@ -341,36 +332,40 @@ kill_buffer_processes() if emacs decides to abort(). */ if (PROCESSP (name)) return name; - - if (STRINGP (name)) + else if (STRINGP (name)) { - obj = Fget_process (name); - if (NILP (obj)) - obj = Fget_buffer (name); - if (NILP (obj)) - error ("Process %s does not exist", XSTRING_DATA (name)); + Lisp_Object object = Fget_process (name); + if (PROCESSP (object)) + return object; + + buffer = Fget_buffer (name); + if (BUFFERP (buffer)) + goto have_buffer_object; + + error ("Process %s does not exist", XSTRING_DATA (name)); } else if (NILP (name)) - obj = Fcurrent_buffer (); - else - obj = name; + { + buffer = Fcurrent_buffer (); + goto have_buffer_object; + } + else if (BUFFERP (name)) + { + Lisp_Object process; + buffer = name; - /* Now obj should be either a buffer object or a process object. - */ - if (BUFFERP (obj)) - { - proc = Fget_buffer_process (obj); - if (NILP (proc)) - error ("Buffer %s has no process", XSTRING_DATA (XBUFFER(obj)->name)); + have_buffer_object: + process = Fget_buffer_process (buffer); + if (PROCESSP (process)) + return process; + + error ("Buffer %s has no process", + XSTRING_DATA (XBUFFER (buffer)->name)); } else - { - /* #### This was commented out. Although, simple - (kill-process 7 "qqq") resulted in a fatal error. - kkm */ - CHECK_PROCESS (obj); - proc = obj; - } - return proc; + return get_process (Fsignal (Qwrong_type_argument, + (list2 (build_string ("process or buffer or nil"), + name)))); } DEFUN ("process-id", Fprocess_id, 1, 1, 0, /* @@ -379,13 +374,13 @@ For a network connection, this value is a cons of (foreign-network-port . foreign-host-name). */ - (proc)) + (process)) { Lisp_Object pid; - CHECK_PROCESS (proc); + CHECK_PROCESS (process); - pid = XPROCESS (proc)->pid; - if (network_connection_p (proc)) + pid = XPROCESS (process)->pid; + if (network_connection_p (process)) /* return Qnil; */ return Fcons (Fcar (pid), Fcdr (pid)); else @@ -397,10 +392,10 @@ This is the name of the program invoked in PROCESS, possibly modified to make it unique among process names. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return XPROCESS (proc)->name; + CHECK_PROCESS (process); + return XPROCESS (process)->name; } DEFUN ("process-command", Fprocess_command, 1, 1, 0, /* @@ -408,10 +403,10 @@ This is a list of strings, the first string being the program executed and the rest of the strings being the arguments given to it. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return XPROCESS (proc)->command; + CHECK_PROCESS (process); + return XPROCESS (process)->command; } @@ -482,9 +477,9 @@ if (usid != USID_DONTHASH) { - Lisp_Object proc = Qnil; - XSETPROCESS (proc, p); - puthash ((const void*)usid, LISP_TO_VOID (proc), usid_to_process); + Lisp_Object process = Qnil; + XSETPROCESS (process, p); + puthash ((const void*)usid, LISP_TO_VOID (process), usid_to_process); } MAYBE_PROCMETH (init_process_io_handles, (p, in, out, flags)); @@ -522,16 +517,16 @@ } /* This function is the unwind_protect form for Fstart_process_internal. If - PROC doesn't have its pid set, then we know someone has signalled + PROCESS doesn't have its pid set, then we know someone has signalled an error and the process wasn't started successfully, so we should remove it from the process list. */ -static void remove_process (Lisp_Object proc); +static void remove_process (Lisp_Object process); static Lisp_Object -start_process_unwind (Lisp_Object proc) +start_process_unwind (Lisp_Object process) { - /* Was PROC started successfully? */ - if (EQ (XPROCESS (proc)->pid, Qnil)) - remove_process (proc); + /* Was PROCESS started successfully? */ + if (EQ (XPROCESS (process)->pid, Qnil)) + remove_process (process); return Qnil; } @@ -553,7 +548,7 @@ { /* This function can call lisp */ /* !!#### This function has not been Mule-ized */ - Lisp_Object buffer, name, program, proc, current_dir; + Lisp_Object buffer, name, program, process, current_dir; Lisp_Object tem; int speccount = specpdl_depth (); struct gcpro gcpro1, gcpro2, gcpro3; @@ -626,27 +621,27 @@ invalid_operation ("Specified program for new process is a directory", program); - proc = make_process_internal (name); + process = make_process_internal (name); - XPROCESS (proc)->buffer = buffer; - XPROCESS (proc)->command = Flist (nargs - 2, + XPROCESS (process)->buffer = buffer; + XPROCESS (process)->command = Flist (nargs - 2, args + 2); /* Make the process marker point into the process buffer (if any). */ if (!NILP (buffer)) - Fset_marker (XPROCESS (proc)->mark, + Fset_marker (XPROCESS (process)->mark, make_int (BUF_ZV (XBUFFER (buffer))), buffer); /* If an error occurs and we can't start the process, we want to remove it from the process list. This means that each error check in create_process doesn't need to call remove_process itself; it's all taken care of here. */ - record_unwind_protect (start_process_unwind, proc); + record_unwind_protect (start_process_unwind, process); - create_process (proc, args + 3, nargs - 3, program, current_dir); + create_process (process, args + 3, nargs - 3, program, current_dir); UNGCPRO; - return unbind_to (speccount, proc); + return unbind_to (speccount, process); } @@ -681,7 +676,7 @@ DEFUN ("open-network-stream-internal", Fopen_network_stream_internal, 4, 5, 0, /* Open a TCP connection for a service to a host. -Return a subprocess-object to represent the connection. +Return a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. NAME is name for process. It is modified if necessary to make it unique. @@ -690,10 +685,11 @@ an output stream or filter function to handle the output. BUFFER may also be nil, meaning that this process is not associated with any buffer. -Third arg is name of the host to connect to, or its IP address. -Fourth arg SERVICE is name of the service desired, or an integer - specifying a port number to connect to. -Fifth argument PROTOCOL is a network protocol. Currently 'tcp +Third arg HOST (a string) is the name of the host to connect to, + or its IP address. +Fourth arg SERVICE is the name of the service desired (a string), + or an integer specifying a port number to connect to. +Optional fifth arg PROTOCOL is a network protocol. Currently only 'tcp (Transmission Control Protocol) and 'udp (User Datagram Protocol) are supported. When omitted, 'tcp is assumed. @@ -701,14 +697,14 @@ `set-process-filter') are stream-oriented. That means UDP datagrams are not guaranteed to be sent and received in discrete packets. (But small datagrams around 500 bytes that are not truncated by `process-send-string' -are usually fine.) Note further that UDP protocol does not guard against -lost packets. +are usually fine.) Note further that the UDP protocol does not guard +against lost packets. */ (name, buffer, host, service, protocol)) { /* !!#### This function has not been Mule-ized */ /* This function can GC */ - Lisp_Object proc = Qnil; + Lisp_Object process = Qnil; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, ngcpro1; void *inch, *outch; @@ -727,26 +723,26 @@ if (!NILP (buffer)) buffer = Fget_buffer_create (buffer); - proc = make_process_internal (name); - NGCPRO1 (proc); + process = make_process_internal (name); + NGCPRO1 (process); - XPROCESS (proc)->pid = Fcons (service, host); - XPROCESS (proc)->buffer = buffer; - init_process_io_handles (XPROCESS (proc), (void*)inch, (void*)outch, + XPROCESS (process)->pid = Fcons (service, host); + XPROCESS (process)->buffer = buffer; + init_process_io_handles (XPROCESS (process), (void*)inch, (void*)outch, STREAM_NETWORK_CONNECTION); - event_stream_select_process (XPROCESS (proc)); + event_stream_select_process (XPROCESS (process)); UNGCPRO; NUNGCPRO; - return proc; + return process; } #ifdef HAVE_MULTICAST DEFUN ("open-multicast-group-internal", Fopen_multicast_group_internal, 5, 5, 0, /* Open a multicast connection on the specified dest/port/ttl. -Return a subprocess-object to represent the connection. +Return a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. NAME is name for process. It is modified if necessary to make it unique. @@ -764,7 +760,7 @@ { /* !!#### This function has not been Mule-ized */ /* This function can GC */ - Lisp_Object proc = Qnil; + Lisp_Object process = Qnil; struct gcpro gcpro1; void *inch, *outch; @@ -778,18 +774,18 @@ if (!NILP (buffer)) buffer = Fget_buffer_create (buffer); - proc = make_process_internal (name); - GCPRO1 (proc); + process = make_process_internal (name); + GCPRO1 (process); - XPROCESS (proc)->pid = Fcons (port, dest); - XPROCESS (proc)->buffer = buffer; - init_process_io_handles (XPROCESS (proc), (void*)inch, (void*)outch, + XPROCESS (process)->pid = Fcons (port, dest); + XPROCESS (process)->buffer = buffer; + init_process_io_handles (XPROCESS (process), (void*)inch, (void*)outch, STREAM_NETWORK_CONNECTION); - event_stream_select_process (XPROCESS (proc)); + event_stream_select_process (XPROCESS (process)); UNGCPRO; - return proc; + return process; } #endif /* HAVE_MULTICAST */ @@ -805,13 +801,14 @@ DEFUN ("set-process-window-size", Fset_process_window_size, 3, 3, 0, /* Tell PROCESS that it has logical window size HEIGHT and WIDTH. */ - (proc, height, width)) + (process, height, width)) { - CHECK_PROCESS (proc); + CHECK_PROCESS (process); CHECK_NATNUM (height); CHECK_NATNUM (width); return - MAYBE_INT_PROCMETH (set_window_size, (XPROCESS (proc), XINT (height), XINT (width))) <= 0 + MAYBE_INT_PROCMETH (set_window_size, + (XPROCESS (process), XINT (height), XINT (width))) <= 0 ? Qnil : Qt; } @@ -829,13 +826,13 @@ you must call it repeatedly until it returns zero. */ Charcount -read_process_output (Lisp_Object proc) +read_process_output (Lisp_Object process) { /* This function can GC */ Bytecount nbytes, nchars; Bufbyte chars[1024]; Lisp_Object outstream; - Lisp_Process *p = XPROCESS (proc); + Lisp_Process *p = XPROCESS (process); /* If there is a lot of output from the subprocess, the loop in execute_internal_event() might call read_process_output() more @@ -856,7 +853,7 @@ Vdeactivate_mark and current_buffer->keymap */ running_asynch_code = 1; filter_result = call2_trapping_errors ("Error in process filter", - p->filter, proc, Qnil); + p->filter, process, Qnil); running_asynch_code = 0; restore_match_data (); CHECK_INT (filter_result); @@ -874,7 +871,7 @@ call2_trapping_errors() does that for us. */ running_asynch_code = 1; call2_trapping_errors ("Error in process filter", - outstream, proc, make_string (chars, nbytes)); + outstream, process, make_string (chars, nbytes)); running_asynch_code = 0; restore_match_data (); return nchars; @@ -891,7 +888,7 @@ struct gcpro gcpro1, gcpro2; struct buffer *buf = XBUFFER (p->buffer); - GCPRO2 (proc, old_read_only); + GCPRO2 (process, old_read_only); old_point = BUF_PT (buf); old_begv = BUF_BEGV (buf); @@ -970,7 +967,7 @@ /* Sending data to subprocess */ -/* send some data to process PROC. If NONRELOCATABLE is non-NULL, it +/* send some data to process PROCESS. If NONRELOCATABLE is non-NULL, it specifies the address of the data. Otherwise, the data comes from the object RELOCATABLE (either a string or a buffer). START and LEN specify the offset and length of the data to send. @@ -979,7 +976,7 @@ and in Bytecounts otherwise. */ void -send_process (Lisp_Object proc, +send_process (Lisp_Object process, Lisp_Object relocatable, const Bufbyte *nonrelocatable, int start, int len) { @@ -987,10 +984,10 @@ struct gcpro gcpro1, gcpro2; Lisp_Object lstream = Qnil; - GCPRO2 (proc, lstream); + GCPRO2 (process, lstream); - if (NILP (DATA_OUTSTREAM (XPROCESS (proc)))) - signal_simple_error ("Process not open for writing", proc); + if (NILP (DATA_OUTSTREAM (XPROCESS (process)))) + signal_simple_error ("Process not open for writing", process); if (nonrelocatable) lstream = @@ -1001,7 +998,7 @@ else lstream = make_lisp_string_input_stream (relocatable, start, len); - PROCMETH (send_process, (proc, XLSTREAM (lstream))); + PROCMETH (send_process, (process, XLSTREAM (lstream))); UNGCPRO; Lstream_delete (XLSTREAM (lstream)); @@ -1012,21 +1009,21 @@ This is the terminal that the process itself reads and writes on, not the name of the pty that Emacs uses to talk with that terminal. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return MAYBE_LISP_PROCMETH (get_tty_name, (XPROCESS (proc))); + CHECK_PROCESS (process); + return MAYBE_LISP_PROCMETH (get_tty_name, (XPROCESS (process))); } DEFUN ("set-process-buffer", Fset_process_buffer, 2, 2, 0, /* Set buffer associated with PROCESS to BUFFER (a buffer, or nil). */ - (proc, buffer)) + (process, buffer)) { - CHECK_PROCESS (proc); + CHECK_PROCESS (process); if (!NILP (buffer)) CHECK_BUFFER (buffer); - XPROCESS (proc)->buffer = buffer; + XPROCESS (process)->buffer = buffer; return buffer; } @@ -1035,34 +1032,34 @@ Output from PROCESS is inserted in this buffer unless PROCESS has a filter. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return XPROCESS (proc)->buffer; + CHECK_PROCESS (process); + return XPROCESS (process)->buffer; } DEFUN ("process-mark", Fprocess_mark, 1, 1, 0, /* Return the marker for the end of the last output from PROCESS. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return XPROCESS (proc)->mark; + CHECK_PROCESS (process); + return XPROCESS (process)->mark; } void -set_process_filter (Lisp_Object proc, Lisp_Object filter, int filter_does_read) +set_process_filter (Lisp_Object process, Lisp_Object filter, int filter_does_read) { - CHECK_PROCESS (proc); - if (PROCESS_LIVE_P (XPROCESS (proc))) { + CHECK_PROCESS (process); + if (PROCESS_LIVE_P (XPROCESS (process))) { if (EQ (filter, Qt)) - event_stream_unselect_process (XPROCESS (proc)); + event_stream_unselect_process (XPROCESS (process)); else - event_stream_select_process (XPROCESS (proc)); + event_stream_select_process (XPROCESS (process)); } - XPROCESS (proc)->filter = filter; - XPROCESS (proc)->filter_does_read = filter_does_read; + XPROCESS (process)->filter = filter; + XPROCESS (process)->filter_does_read = filter_does_read; } DEFUN ("set-process-filter", Fset_process_filter, 2, 2, 0, /* @@ -1073,9 +1070,9 @@ The filter gets two arguments: the process and the string of output. If the process has a filter, its buffer is not used for output. */ - (proc, filter)) + (process, filter)) { - set_process_filter (proc, filter, 0); + set_process_filter (process, filter, 0); return filter; } @@ -1083,56 +1080,57 @@ Return the filter function of PROCESS; nil if none. See `set-process-filter' for more info on filter functions. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return XPROCESS (proc)->filter; + CHECK_PROCESS (process); + return XPROCESS (process)->filter; } DEFUN ("process-send-region", Fprocess_send_region, 3, 4, 0, /* Send current contents of the region between START and END as input to PROCESS. -PROCESS may be a process name or an actual process. +PROCESS may be a process or the name of a process, or a buffer or the +name of a buffer, in which case the buffer's process is used. If it +is nil, the current buffer's process is used. BUFFER specifies the buffer to look in; if nil, the current buffer is used. -If the region is more than 500 or so characters long, -it is sent in several bunches. This may happen even for shorter regions. -Output from processes can arrive in between bunches. +If STRING is more than 100 or so characters long, it may be sent in +several chunks. This may happen even for shorter strings. Output +from processes can arrive in between chunks. */ (process, start, end, buffer)) { /* This function can GC */ - Lisp_Object proc = get_process (process); - Bufpos st, en; + Bufpos bstart, bend; struct buffer *buf = decode_buffer (buffer, 0); XSETBUFFER (buffer, buf); - get_buffer_range_char (buf, start, end, &st, &en, 0); + process = get_process (process); + get_buffer_range_char (buf, start, end, &bstart, &bend, 0); - send_process (proc, buffer, 0, st, en - st); + send_process (process, buffer, 0, bstart, bend - bstart); return Qnil; } DEFUN ("process-send-string", Fprocess_send_string, 2, 4, 0, /* Send PROCESS the contents of STRING as input. -PROCESS may be a process name or an actual process. -Optional arguments FROM and TO specify part of STRING, see `substring'. -If STRING is more than 500 or so characters long, -it is sent in several bunches. This may happen even for shorter strings. -Output from processes can arrive in between bunches. +PROCESS may be a process or the name of a process, or a buffer or the +name of a buffer, in which case the buffer's process is used. If it +is nil, the current buffer's process is used. +Optional arguments START and END specify part of STRING; see `substring'. +If STRING is more than 100 or so characters long, it may be sent in +several chunks. This may happen even for shorter strings. Output +from processes can arrive in between chunks. */ - (process, string, from, to)) + (process, string, start, end)) { /* This function can GC */ - Lisp_Object proc; - Bytecount len; - Bytecount bfr, bto; + Bytecount bstart, bend; - proc = get_process (process); + process = get_process (process); CHECK_STRING (string); - get_string_range_byte (string, from, to, &bfr, &bto, + get_string_range_byte (string, start, end, &bstart, &bend, GB_HISTORICAL_STRING_BEHAVIOR); - len = bto - bfr; - send_process (proc, string, 0, bfr, len); + send_process (process, string, 0, bstart, bend - bstart); return Qnil; } @@ -1234,11 +1232,11 @@ } static void -exec_sentinel (Lisp_Object proc, Lisp_Object reason) +exec_sentinel (Lisp_Object process, Lisp_Object reason) { /* This function can GC */ int speccount = specpdl_depth (); - Lisp_Process *p = XPROCESS (proc); + Lisp_Process *p = XPROCESS (process); Lisp_Object sentinel = p->sentinel; if (NILP (sentinel)) @@ -1250,11 +1248,11 @@ /* Zilch the sentinel while it's running, to avoid recursive invocations; assure that it gets restored no matter how the sentinel exits. */ p->sentinel = Qnil; - record_unwind_protect (exec_sentinel_unwind, noseeum_cons (proc, sentinel)); + record_unwind_protect (exec_sentinel_unwind, noseeum_cons (process, sentinel)); /* We used to bind inhibit-quit to t here, but call2_trapping_errors() does that for us. */ running_asynch_code = 1; - call2_trapping_errors ("Error in process sentinel", sentinel, proc, reason); + call2_trapping_errors ("Error in process sentinel", sentinel, process, reason); running_asynch_code = 0; restore_match_data (); unbind_to (speccount, Qnil); @@ -1265,10 +1263,10 @@ The sentinel is called as a function when the process changes state. It gets two arguments: the process, and a string describing the change. */ - (proc, sentinel)) + (process, sentinel)) { - CHECK_PROCESS (proc); - XPROCESS (proc)->sentinel = sentinel; + CHECK_PROCESS (process); + XPROCESS (process)->sentinel = sentinel; return sentinel; } @@ -1276,10 +1274,10 @@ Return the sentinel of PROCESS; nil if none. See `set-process-sentinel' for more info on sentinels. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return XPROCESS (proc)->sentinel; + CHECK_PROCESS (process); + return XPROCESS (process)->sentinel; } @@ -1367,7 +1365,7 @@ Lisp_Object msg = Qnil; struct gcpro gcpro1, gcpro2, gcpro3; /* process_tick is volatile, so we have to remember it now. - Otherwise, we get a race condition is SIGCHLD happens during + Otherwise, we get a race condition if SIGCHLD happens during this function. (Actually, this is not the case anymore. The code to @@ -1391,8 +1389,8 @@ for (tail = Vprocess_list; CONSP (tail); tail = XCDR (tail)) { - Lisp_Object proc = XCAR (tail); - Lisp_Process *p = XPROCESS (proc); + Lisp_Object process = XCAR (tail); + Lisp_Process *p = XPROCESS (process); /* p->tick is also volatile. Same thing as above applies. */ int this_process_tick; @@ -1409,7 +1407,7 @@ /* If process is still active, read any output that remains. */ while (!EQ (p->filter, Qt) - && read_process_output (proc) > 0) + && read_process_output (process) > 0) ; /* Get the text to use for the message. */ @@ -1422,14 +1420,14 @@ || EQ (symbol, Qexit)) { if (delete_exited_processes) - remove_process (proc); + remove_process (process); else - deactivate_process (proc); + deactivate_process (process); } /* Now output the message suitably. */ if (!NILP (p->sentinel)) - exec_sentinel (proc, msg); + exec_sentinel (process, msg); /* Don't bother with a message in the buffer when a process becomes runnable. */ else if (!EQ (symbol, Qrun) && !NILP (p->buffer)) @@ -1503,20 +1501,20 @@ PROCESS may be a process, a buffer, the name of a process or buffer, or nil, indicating the current buffer's process. */ - (proc)) + (process)) { Lisp_Object status_symbol; - if (STRINGP (proc)) - proc = Fget_process (proc); + if (STRINGP (process)) + process = Fget_process (process); else - proc = get_process (proc); + process = get_process (process); - if (NILP (proc)) + if (NILP (process)) return Qnil; - status_symbol = XPROCESS (proc)->status_symbol; - if (network_connection_p (proc)) + status_symbol = XPROCESS (process)->status_symbol; + if (network_connection_p (process)) { if (EQ (status_symbol, Qrun)) status_symbol = Qopen; @@ -1530,10 +1528,10 @@ Return the exit status of PROCESS or the signal number that killed it. If PROCESS has not yet exited or died, return 0. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return make_int (XPROCESS (proc)->exit_code); + CHECK_PROCESS (process); + return make_int (XPROCESS (process)->exit_code); } @@ -1714,14 +1712,14 @@ int current_group, int nomsg) { /* This function can GC */ - Lisp_Object proc = get_process (process); + process = get_process (process); - if (network_connection_p (proc)) + if (network_connection_p (process)) error ("Network connection %s is not a subprocess", - XSTRING_DATA (XPROCESS(proc)->name)); - CHECK_LIVE_PROCESS (proc); + XSTRING_DATA (XPROCESS(process)->name)); + CHECK_LIVE_PROCESS (process); - MAYBE_PROCMETH (kill_child_process, (proc, signo, current_group, nomsg)); + MAYBE_PROCMETH (kill_child_process, (process, signo, current_group, nomsg)); } DEFUN ("process-send-signal", Fprocess_send_signal, 1, 3, 0, /* @@ -1840,21 +1838,21 @@ (process)) { /* This function can GC */ - Lisp_Object proc = get_process (process); + process = get_process (process); /* Make sure the process is really alive. */ - if (! EQ (XPROCESS (proc)->status_symbol, Qrun)) - error ("Process %s not running", XSTRING_DATA (XPROCESS (proc)->name)); + if (! EQ (XPROCESS (process)->status_symbol, Qrun)) + error ("Process %s not running", XSTRING_DATA (XPROCESS (process)->name)); - if (!MAYBE_INT_PROCMETH (process_send_eof, (proc))) + if (!MAYBE_INT_PROCMETH (process_send_eof, (process))) { - if (!NILP (DATA_OUTSTREAM (XPROCESS (proc)))) + if (!NILP (DATA_OUTSTREAM (XPROCESS (process)))) { - Lstream_close (XLSTREAM (DATA_OUTSTREAM (XPROCESS (proc)))); - event_stream_delete_stream_pair (Qnil, XPROCESS (proc)->pipe_outstream); - XPROCESS (proc)->pipe_outstream = Qnil; + Lstream_close (XLSTREAM (DATA_OUTSTREAM (XPROCESS (process)))); + event_stream_delete_stream_pair (Qnil, XPROCESS (process)->pipe_outstream); + XPROCESS (process)->pipe_outstream = Qnil; #ifdef FILE_CODING - XPROCESS (proc)->coding_outstream = Qnil; + XPROCESS (process)->coding_outstream = Qnil; #endif } } @@ -1868,9 +1866,9 @@ /************************************************************************/ void -deactivate_process (Lisp_Object proc) +deactivate_process (Lisp_Object process) { - Lisp_Process *p = XPROCESS (proc); + Lisp_Process *p = XPROCESS (process); USID usid; /* It's possible that we got as far in the process-creation @@ -1908,25 +1906,25 @@ } static void -remove_process (Lisp_Object proc) +remove_process (Lisp_Object process) { - Vprocess_list = delq_no_quit (proc, Vprocess_list); - Fset_marker (XPROCESS (proc)->mark, Qnil, Qnil); + Vprocess_list = delq_no_quit (process, Vprocess_list); + Fset_marker (XPROCESS (process)->mark, Qnil, Qnil); - deactivate_process (proc); + deactivate_process (process); } DEFUN ("delete-process", Fdelete_process, 1, 1, 0, /* Delete PROCESS: kill it and forget about it immediately. PROCESS may be a process or the name of one, or a buffer name. */ - (proc)) + (process)) { /* This function can GC */ Lisp_Process *p; - proc = get_process (proc); - p = XPROCESS (proc); - if (network_connection_p (proc)) + process = get_process (process); + p = XPROCESS (process); + if (network_connection_p (process)) { p->status_symbol = Qexit; p->exit_code = 0; @@ -1936,7 +1934,7 @@ } else if (PROCESS_LIVE_P (p)) { - Fkill_process (proc, Qnil); + Fkill_process (process, Qnil); /* Do this now, since remove_process will make sigchld_handler do nothing. */ p->status_symbol = Qsignal; p->exit_code = SIGKILL; @@ -1945,7 +1943,7 @@ process_tick++; status_notify (); } - remove_process (proc); + remove_process (process); return Qnil; } @@ -1955,21 +1953,14 @@ void kill_buffer_processes (Lisp_Object buffer) { - Lisp_Object tail; - - for (tail = Vprocess_list; CONSP (tail); - tail = XCDR (tail)) - { - Lisp_Object proc = XCAR (tail); - if (PROCESSP (proc) - && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer))) - { - if (network_connection_p (proc)) - Fdelete_process (proc); - else if (PROCESS_LIVE_P (XPROCESS (proc))) - process_send_signal (proc, SIGHUP, 0, 1); - } - } + LIST_LOOP_2 (process, Vprocess_list) + if ((NILP (buffer) || EQ (XPROCESS (process)->buffer, buffer))) + { + if (network_connection_p (process)) + Fdelete_process (process); + else if (PROCESS_LIVE_P (XPROCESS (process))) + process_send_signal (process, SIGHUP, 0, 1); + } } DEFUN ("process-kill-without-query", Fprocess_kill_without_query, 1, 2, 0, /* @@ -1977,24 +1968,24 @@ Optional second argument if non-nil says to require a query. Value is t if a query was formerly required. */ - (proc, require_query_p)) + (process, require_query_p)) { int tem; - CHECK_PROCESS (proc); - tem = XPROCESS (proc)->kill_without_query; - XPROCESS (proc)->kill_without_query = NILP (require_query_p); + CHECK_PROCESS (process); + tem = XPROCESS (process)->kill_without_query; + XPROCESS (process)->kill_without_query = NILP (require_query_p); return tem ? Qnil : Qt; } DEFUN ("process-kill-without-query-p", Fprocess_kill_without_query_p, 1, 1, 0, /* -Whether PROC will be killed without query if running when emacs is exited. +Return t if PROCESS will be killed without query when emacs is exited. */ - (proc)) + (process)) { - CHECK_PROCESS (proc); - return XPROCESS (proc)->kill_without_query ? Qt : Qnil; + CHECK_PROCESS (process); + return XPROCESS (process)->kill_without_query ? Qt : Qnil; } diff -r a8296e22da4e -r 576fb035e263 src/rangetab.c --- a/src/rangetab.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/rangetab.c Mon Aug 13 11:36:19 2007 +0200 @@ -241,16 +241,17 @@ } DEFUN ("copy-range-table", Fcopy_range_table, 1, 1, 0, /* -Make a new range table which contains the same values for the same -ranges as the given table. The values will not themselves be copied. +Return a new range table which is a copy of RANGE-TABLE. +It will contain the same values for the same ranges as RANGE-TABLE. +The values will not themselves be copied. */ - (old_table)) + (range_table)) { Lisp_Range_Table *rt, *rtnew; Lisp_Object obj; - CHECK_RANGE_TABLE (old_table); - rt = XRANGE_TABLE (old_table); + CHECK_RANGE_TABLE (range_table); + rt = XRANGE_TABLE (range_table); rtnew = alloc_lcrecord_type (Lisp_Range_Table, &lrecord_range_table); rtnew->entries = Dynarr_new (range_table_entry); @@ -262,15 +263,15 @@ } DEFUN ("get-range-table", Fget_range_table, 2, 3, 0, /* -Find value for position POS in TABLE. +Find value for position POS in RANGE-TABLE. If there is no corresponding value, return DEFAULT (defaults to nil). */ - (pos, table, default_)) + (pos, range_table, default_)) { Lisp_Range_Table *rt; - CHECK_RANGE_TABLE (table); - rt = XRANGE_TABLE (table); + CHECK_RANGE_TABLE (range_table); + rt = XRANGE_TABLE (range_table); CHECK_INT_COERCE_CHAR (pos); @@ -403,13 +404,13 @@ } DEFUN ("put-range-table", Fput_range_table, 4, 4, 0, /* -Set the value for range (START, END) to be VAL in TABLE. +Set the value for range (START, END) to be VALUE in RANGE-TABLE. */ - (start, end, val, table)) + (start, end, value, range_table)) { EMACS_INT first, last; - CHECK_RANGE_TABLE (table); + CHECK_RANGE_TABLE (range_table); CHECK_INT_COERCE_CHAR (start); first = XINT (start); CHECK_INT_COERCE_CHAR (end); @@ -417,47 +418,47 @@ if (first > last) signal_simple_error_2 ("start must be <= end", start, end); - put_range_table (table, first, last, val); - verify_range_table (XRANGE_TABLE (table)); + put_range_table (range_table, first, last, value); + verify_range_table (XRANGE_TABLE (range_table)); return Qnil; } DEFUN ("remove-range-table", Fremove_range_table, 3, 3, 0, /* -Remove the value for range (START, END) in TABLE. +Remove the value for range (START, END) in RANGE-TABLE. */ - (start, end, table)) + (start, end, range_table)) { - return Fput_range_table (start, end, Qunbound, table); + return Fput_range_table (start, end, Qunbound, range_table); } DEFUN ("clear-range-table", Fclear_range_table, 1, 1, 0, /* -Flush TABLE. +Flush RANGE-TABLE. */ - (table)) + (range_table)) { - CHECK_RANGE_TABLE (table); - Dynarr_reset (XRANGE_TABLE (table)->entries); + CHECK_RANGE_TABLE (range_table); + Dynarr_reset (XRANGE_TABLE (range_table)->entries); return Qnil; } DEFUN ("map-range-table", Fmap_range_table, 2, 2, 0, /* -Map FUNCTION over entries in TABLE, calling it with three args, +Map FUNCTION over entries in RANGE-TABLE, calling it with three args, the beginning and end of the range and the corresponding value. Results are guaranteed to be correct (i.e. each entry processed exactly once) if FUNCTION modifies or deletes the current entry -(i.e. passes the current range to `put-range-table' or +\(i.e. passes the current range to `put-range-table' or `remove-range-table'), but not otherwise. */ - (function, table)) + (function, range_table)) { Lisp_Range_Table *rt; int i; - CHECK_RANGE_TABLE (table); + CHECK_RANGE_TABLE (range_table); CHECK_FUNCTION (function); - rt = XRANGE_TABLE (table); + rt = XRANGE_TABLE (range_table); /* Do not "optimize" by pulling out the length computation below! FUNCTION may have changed the table. */ diff -r a8296e22da4e -r 576fb035e263 src/redisplay-msw.c --- a/src/redisplay-msw.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/redisplay-msw.c Mon Aug 13 11:36:19 2007 +0200 @@ -134,9 +134,9 @@ #ifdef MULE { Lisp_Object ccl_prog = XCHARSET_CCL_PROGRAM (charset); - need_ccl_conversion = !NILP (ccl_prog); - if (need_ccl_conversion) - setup_ccl_program (&char_converter, ccl_prog); + if ((!NILP (ccl_prog)) + && (setup_ccl_program (&char_converter, ccl_prog) >= 0)) + need_ccl_conversion = 1; } #endif } diff -r a8296e22da4e -r 576fb035e263 src/redisplay-tty.c --- a/src/redisplay-tty.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/redisplay-tty.c Mon Aug 13 11:36:19 2007 +0200 @@ -924,6 +924,7 @@ up or removed. */ +#ifdef NOT_YET /* FLAGS - these don't need to be console local since only one console can be being updated at a time. */ static int insert_mode_on; /* nonzero if in insert mode */ @@ -932,7 +933,6 @@ static int alternate_mode_on; /* nonzero if in alternate char set */ static int attributes_on; /* nonzero if any attributes on */ -#ifdef NOT_YET static void turn_on_insert (struct frame *f) { @@ -1218,6 +1218,7 @@ */ cm_cost_init (c); +#ifdef NOT_YET /* * Initialize local flags. */ @@ -1226,6 +1227,7 @@ underline_mode_on = 0; alternate_mode_on = 0; attributes_on = 0; +#endif /* * Attempt to initialize the function_key_map to diff -r a8296e22da4e -r 576fb035e263 src/redisplay-x.c --- a/src/redisplay-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/redisplay-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -165,9 +165,9 @@ #ifdef MULE { Lisp_Object ccl_prog = XCHARSET_CCL_PROGRAM (charset); - need_ccl_conversion = !NILP (ccl_prog); - if (need_ccl_conversion) - setup_ccl_program (&char_converter, ccl_prog); + if ((!NILP (ccl_prog)) + && (setup_ccl_program (&char_converter, ccl_prog) >= 0)) + need_ccl_conversion = 1; } #endif } diff -r a8296e22da4e -r 576fb035e263 src/redisplay.c --- a/src/redisplay.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/redisplay.c Mon Aug 13 11:36:19 2007 +0200 @@ -464,8 +464,7 @@ Lisp_Object Qtop_bottom; -#define WINDOW_SCROLLED(w) \ -(w->hscroll > 0 || w->left_xoffset) +#define WINDOW_SCROLLED(w) ((w)->hscroll > 0 || (w)->left_xoffset) /***************************************************************************/ @@ -9286,7 +9285,7 @@ DEFVAR_LISP_MAGIC ("overlay-arrow-string", &Voverlay_arrow_string /* String or glyph to display as an arrow. See also `overlay-arrow-position'. -(Note that despite the name of this variable, it can be set to a glyph as +\(Note that despite the name of this variable, it can be set to a glyph as well as a string.) */ , redisplay_variable_changed); @@ -9451,7 +9450,7 @@ offsetof (struct window, left_margin_width), some_window_value_changed, offsetof (struct frame, left_margin_width), - margin_width_changed_in_frame); + margin_width_changed_in_frame, 0); DEFVAR_SPECIFIER ("right-margin-width", &Vright_margin_width /* *Width of right margin. @@ -9463,7 +9462,7 @@ offsetof (struct window, right_margin_width), some_window_value_changed, offsetof (struct frame, right_margin_width), - margin_width_changed_in_frame); + margin_width_changed_in_frame, 0); DEFVAR_SPECIFIER ("minimum-line-ascent", &Vminimum_line_ascent /* *Minimum ascent height of lines. @@ -9474,7 +9473,7 @@ set_specifier_caching (Vminimum_line_ascent, offsetof (struct window, minimum_line_ascent), some_window_value_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("minimum-line-descent", &Vminimum_line_descent /* *Minimum descent height of lines. @@ -9485,7 +9484,7 @@ set_specifier_caching (Vminimum_line_descent, offsetof (struct window, minimum_line_descent), some_window_value_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("use-left-overflow", &Vuse_left_overflow /* *Non-nil means use the left outside margin as extra whitespace when @@ -9497,7 +9496,7 @@ set_specifier_caching (Vuse_left_overflow, offsetof (struct window, use_left_overflow), some_window_value_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("use-right-overflow", &Vuse_right_overflow /* *Non-nil means use the right outside margin as extra whitespace when @@ -9509,7 +9508,7 @@ set_specifier_caching (Vuse_right_overflow, offsetof (struct window, use_right_overflow), some_window_value_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("text-cursor-visible-p", &Vtext_cursor_visible_p /* *Non-nil means the text cursor is visible (this is usually the case). @@ -9520,6 +9519,6 @@ set_specifier_caching (Vtext_cursor_visible_p, offsetof (struct window, text_cursor_visible_p), text_cursor_visible_p_changed, - 0, 0); + 0, 0, 0); } diff -r a8296e22da4e -r 576fb035e263 src/regex.c --- a/src/regex.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/regex.c Mon Aug 13 11:36:19 2007 +0200 @@ -286,7 +286,7 @@ #include #else /* not __GNUC__ or HAVE_ALLOCA_H */ #ifndef _AIX /* Already did AIX, up at the top. */ -char *alloca (); +void *alloca (); #endif /* not _AIX */ #endif /* not HAVE_ALLOCA_H */ #endif /* not __GNUC__ */ diff -r a8296e22da4e -r 576fb035e263 src/s/decosf1-3.h --- a/src/s/decosf1-3.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/s/decosf1-3.h Mon Aug 13 11:36:19 2007 +0200 @@ -1,10 +1,6 @@ /* Synched up with: Not in FSF. */ #include "decosf1-2.h" -/* XEmacs change: Kim Nyberg says this is needed. */ -#ifdef emacs -#include -#endif /* Supposedly gmalloc and rel_alloc will work now (grunwald@foobar.cs.colorado.edu) */ diff -r a8296e22da4e -r 576fb035e263 src/s/ptx.h --- a/src/s/ptx.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/s/ptx.h Mon Aug 13 11:36:19 2007 +0200 @@ -68,7 +68,6 @@ #endif #ifdef emacs -#include /* Support for pty's */ #include /*#define BROKEN_SIGIO*/ /* SIGIO is already undef'd elsewhere. PTX diff -r a8296e22da4e -r 576fb035e263 src/s/usg5-4.h --- a/src/s/usg5-4.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/s/usg5-4.h Mon Aug 13 11:36:19 2007 +0200 @@ -81,7 +81,6 @@ #include #include #include -#include #include #endif diff -r a8296e22da4e -r 576fb035e263 src/scrollbar.c --- a/src/scrollbar.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/scrollbar.c Mon Aug 13 11:36:19 2007 +0200 @@ -409,7 +409,7 @@ int new_minimum = -1, new_maximum = -1; int new_slider_size = -1, new_slider_position = -1; int new_width = -1, new_height = -1, new_x = -1, new_y = -1; - struct window *new_window = 0; /* kludge city */ + struct window *new_window = 0; /* #### currently unused */ end_pos = BUF_Z (b) - w->window_end_pos[CURRENT_DISP]; sb_pos = scrollbar_point (w, 0); @@ -953,7 +953,7 @@ offsetof (struct window, scrollbar_width), vertical_scrollbar_changed_in_window, offsetof (struct frame, scrollbar_width), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("scrollbar-height", &Vscrollbar_height /* *Height of horizontal scrollbars. @@ -967,7 +967,7 @@ offsetof (struct window, scrollbar_height), some_window_value_changed, offsetof (struct frame, scrollbar_height), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("horizontal-scrollbar-visible-p", &Vhorizontal_scrollbar_visible_p /* *Whether the horizontal scrollbar is visible. @@ -982,7 +982,7 @@ some_window_value_changed, offsetof (struct frame, horizontal_scrollbar_visible_p), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("vertical-scrollbar-visible-p", &Vvertical_scrollbar_visible_p /* *Whether the vertical scrollbar is visible. @@ -997,7 +997,7 @@ vertical_scrollbar_changed_in_window, offsetof (struct frame, vertical_scrollbar_visible_p), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("scrollbar-on-left-p", &Vscrollbar_on_left_p /* *Whether the vertical scrollbar is on the left side of window or frame. @@ -1023,7 +1023,7 @@ offsetof (struct window, scrollbar_on_left_p), vertical_scrollbar_changed_in_window, offsetof (struct frame, scrollbar_on_left_p), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("scrollbar-on-top-p", &Vscrollbar_on_top_p /* *Whether the horizontal scrollbar is on the top side of window or frame. @@ -1036,7 +1036,7 @@ offsetof (struct window, scrollbar_on_top_p), some_window_value_changed, offsetof (struct frame, scrollbar_on_top_p), - frame_size_slipped); + frame_size_slipped, 0); } void @@ -1047,5 +1047,5 @@ set_specifier_caching (XGLYPH (Vscrollbar_pointer_glyph)->image, offsetof (struct window, scrollbar_pointer), scrollbar_pointer_changed_in_window, - 0, 0); + 0, 0, 0); } diff -r a8296e22da4e -r 576fb035e263 src/search.c --- a/src/search.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/search.c Mon Aug 13 11:36:19 2007 +0200 @@ -932,7 +932,7 @@ } DEFUN ("skip-chars-forward", Fskip_chars_forward, 1, 3, 0, /* -Move point forward, stopping before a char not in STRING, or at pos LIM. +Move point forward, stopping before a char not in STRING, or at pos LIMIT. STRING is like the inside of a `[...]' in a regular expression except that `]' is never special and `\\' quotes `^', `-' or `\\'. Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter. @@ -941,57 +941,57 @@ Optional argument BUFFER defaults to the current buffer. */ - (string, lim, buffer)) + (string, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 1, 0, string, lim); + return skip_chars (decode_buffer (buffer, 0), 1, 0, string, limit); } DEFUN ("skip-chars-backward", Fskip_chars_backward, 1, 3, 0, /* -Move point backward, stopping after a char not in STRING, or at pos LIM. +Move point backward, stopping after a char not in STRING, or at pos LIMIT. See `skip-chars-forward' for details. Returns the distance traveled, either zero or negative. Optional argument BUFFER defaults to the current buffer. */ - (string, lim, buffer)) + (string, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 0, 0, string, lim); + return skip_chars (decode_buffer (buffer, 0), 0, 0, string, limit); } DEFUN ("skip-syntax-forward", Fskip_syntax_forward, 1, 3, 0, /* Move point forward across chars in specified syntax classes. SYNTAX is a string of syntax code characters. -Stop before a char whose syntax is not in SYNTAX, or at position LIM. +Stop before a char whose syntax is not in SYNTAX, or at position LIMIT. If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX. This function returns the distance traveled, either zero or positive. Optional argument BUFFER defaults to the current buffer. */ - (syntax, lim, buffer)) + (syntax, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 1, 1, syntax, lim); + return skip_chars (decode_buffer (buffer, 0), 1, 1, syntax, limit); } DEFUN ("skip-syntax-backward", Fskip_syntax_backward, 1, 3, 0, /* Move point backward across chars in specified syntax classes. SYNTAX is a string of syntax code characters. -Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM. +Stop on reaching a char whose syntax is not in SYNTAX, or at position LIMIT. If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX. This function returns the distance traveled, either zero or negative. Optional argument BUFFER defaults to the current buffer. */ - (syntax, lim, buffer)) + (syntax, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 0, 1, syntax, lim); + return skip_chars (decode_buffer (buffer, 0), 0, 1, syntax, limit); } /* Subroutines of Lisp buffer search functions. */ static Lisp_Object -search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object no_error, +search_command (Lisp_Object string, Lisp_Object limit, Lisp_Object noerror, Lisp_Object count, Lisp_Object buffer, int direction, int RE, int posix) { @@ -1009,14 +1009,14 @@ buf = decode_buffer (buffer, 0); CHECK_STRING (string); - if (NILP (bound)) + if (NILP (limit)) lim = n > 0 ? BUF_ZV (buf) : BUF_BEGV (buf); else { - CHECK_INT_COERCE_MARKER (bound); - lim = XINT (bound); + CHECK_INT_COERCE_MARKER (limit); + lim = XINT (limit); if (n > 0 ? lim < BUF_PT (buf) : lim > BUF_PT (buf)) - error ("Invalid search bound (wrong side of point)"); + error ("Invalid search limit (wrong side of point)"); if (lim > BUF_ZV (buf)) lim = BUF_ZV (buf); if (lim < BUF_BEGV (buf)) @@ -1033,9 +1033,9 @@ if (np <= 0) { - if (NILP (no_error)) + if (NILP (noerror)) return signal_failure (string); - if (!EQ (no_error, Qt)) + if (!EQ (noerror, Qt)) { if (lim < BUF_BEGV (buf) || lim > BUF_ZV (buf)) abort (); @@ -1645,70 +1645,103 @@ DEFUN ("search-backward", Fsearch_backward, 1, 5, "sSearch backward: ", /* Search backward from point for STRING. Set point to the beginning of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend before that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, position at limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (string, bound, no_error, count, buffer, -1, 0, 0); + return search_command (string, limit, noerror, count, buffer, -1, 0, 0); } DEFUN ("search-forward", Fsearch_forward, 1, 5, "sSearch: ", /* Search forward from point for STRING. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. nil is equivalent - to (point-max). -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (string, bound, no_error, count, buffer, 1, 0, 0); + return search_command (string, limit, noerror, count, buffer, 1, 0, 0); } DEFUN ("word-search-backward", Fword_search_backward, 1, 5, "sWord search backward: ", /* Search backward from point for STRING, ignoring differences in punctuation. Set point to the beginning of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend before that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + +See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (wordify (buffer, string), bound, no_error, count, + return search_command (wordify (buffer, string), limit, noerror, count, buffer, -1, 1, 0); } DEFUN ("word-search-forward", Fword_search_forward, 1, 5, "sWord search: ", /* Search forward from point for STRING, ignoring differences in punctuation. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + +See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (wordify (buffer, string), bound, no_error, count, + return search_command (wordify (buffer, string), limit, noerror, count, buffer, 1, 1, 0); } @@ -1718,35 +1751,51 @@ Set point to the beginning of the match, and return point. The match found is the one starting last in the buffer and yet ending before the origin of the search. -An optional second argument bounds the search; it is a buffer position. -The match found must start at or after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, -1, 1, 0); + return search_command (regexp, limit, noerror, count, buffer, -1, 1, 0); } DEFUN ("re-search-forward", Fre_search_forward, 1, 5, "sRE search: ", /* Search forward from point for regular expression REGEXP. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, 1, 1, 0); + return search_command (regexp, limit, noerror, count, buffer, 1, 1, 0); } DEFUN ("posix-search-backward", Fposix_search_backward, 1, 5, @@ -1756,36 +1805,52 @@ Set point to the beginning of the match, and return point. The match found is the one starting last in the buffer and yet ending before the origin of the search. -An optional second argument bounds the search; it is a buffer position. -The match found must start at or after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, -1, 1, 1); + return search_command (regexp, limit, noerror, count, buffer, -1, 1, 1); } DEFUN ("posix-search-forward", Fposix_search_forward, 1, 5, "sPosix search: ", /* Search forward from point for regular expression REGEXP. Find the longest match in accord with Posix regular expression rules. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, 1, 1, 1); + return search_command (regexp, limit, noerror, count, buffer, 1, 1, 1); } @@ -1801,18 +1866,18 @@ } DEFUN ("replace-match", Freplace_match, 1, 5, 0, /* -Replace text matched by last search with NEWTEXT. +Replace text matched by last search with REPLACEMENT. If second arg FIXEDCASE is non-nil, do not alter case of replacement text. Otherwise maybe capitalize the whole text, or maybe just word initials, based on the replaced text. If the replaced text has only capital letters -and has at least one multiletter word, convert NEWTEXT to all caps. +and has at least one multiletter word, convert REPLACEMENT to all caps. If the replaced text has at least one word starting with a capital letter, -then capitalize each word in NEWTEXT. +then capitalize each word in REPLACEMENT. -If third arg LITERAL is non-nil, insert NEWTEXT literally. +If third arg LITERAL is non-nil, insert REPLACEMENT literally. Otherwise treat `\\' as special: - `\\&' in NEWTEXT means substitute original matched text. + `\\&' in REPLACEMENT means substitute original matched text. `\\N' means substitute what matched the Nth `\\(...\\)'. If Nth parens didn't match, substitute nothing. `\\\\' means insert one `\\'. @@ -1831,11 +1896,11 @@ which is made by replacing the part of STRING that was matched. When fourth argument is a string, fifth argument STRBUFFER specifies the buffer to be used for syntax-table and case-table lookup and -defaults to the current buffer. (When fourth argument is not a string, +defaults to the current buffer. When fourth argument is not a string, the buffer that the match occurred in has automatically been remembered -and you do not need to specify it.) +and you do not need to specify it. */ - (newtext, fixedcase, literal, string, strbuffer)) + (replacement, fixedcase, literal, string, strbuffer)) { /* This function has been Mule-ized. */ /* This function can GC */ @@ -1855,7 +1920,7 @@ int_dynarr *ul_pos_dynarr = 0; int speccount; - CHECK_STRING (newtext); + CHECK_STRING (replacement); if (! NILP (string)) { @@ -1979,10 +2044,10 @@ before = Fsubstring (string, Qzero, make_int (search_regs.start[0])); after = Fsubstring (string, make_int (search_regs.end[0]), Qnil); - /* Do case substitution into NEWTEXT if desired. */ + /* Do case substitution into REPLACEMENT if desired. */ if (NILP (literal)) { - Charcount stlen = XSTRING_CHAR_LENGTH (newtext); + Charcount stlen = XSTRING_CHAR_LENGTH (replacement); Charcount strpos; /* XEmacs change: rewrote this loop somewhat to make it cleaner. Also added \U, \E, etc. */ @@ -2009,10 +2074,10 @@ Charcount substart = -1; Charcount subend = -1; - c = string_char (XSTRING (newtext), strpos); + c = string_char (XSTRING (replacement), strpos); if (c == '\\' && strpos < stlen - 1) { - c = string_char (XSTRING (newtext), ++strpos); + c = string_char (XSTRING (replacement), ++strpos); if (c == '&') { literal_end = strpos - 1; @@ -2061,7 +2126,7 @@ Lisp_Object literal_text = Qnil; Lisp_Object substring = Qnil; if (literal_end != literal_start) - literal_text = Fsubstring (newtext, + literal_text = Fsubstring (replacement, make_int (literal_start), make_int (literal_end)); if (substart >= 0 && subend != substart) @@ -2076,29 +2141,33 @@ if (strpos != literal_start) /* some literal text at end to be inserted */ - newtext = concat2 (accum, Fsubstring (newtext, - make_int (literal_start), - make_int (strpos))); + replacement = concat2 (accum, Fsubstring (replacement, + make_int (literal_start), + make_int (strpos))); else - newtext = accum; + replacement = accum; } + /* replacement can be nil. */ + if (NILP (replacement)) + replacement = build_string (""); + if (case_action == all_caps) - newtext = Fupcase (newtext, buffer); + replacement = Fupcase (replacement, buffer); else if (case_action == cap_initial) - newtext = Fupcase_initials (newtext, buffer); + replacement = Fupcase_initials (replacement, buffer); /* Now finally, we need to process the \U's, \E's, etc. */ if (ul_pos_dynarr) { int i = 0; int cur_action = 'E'; - Charcount stlen = XSTRING_CHAR_LENGTH (newtext); + Charcount stlen = XSTRING_CHAR_LENGTH (replacement); Charcount strpos; for (strpos = 0; strpos < stlen; strpos++) { - Emchar curchar = string_char (XSTRING (newtext), strpos); + Emchar curchar = string_char (XSTRING (replacement), strpos); Emchar newchar = -1; if (i < Dynarr_length (ul_pos_dynarr) && strpos == Dynarr_at (ul_pos_dynarr, i)) @@ -2122,13 +2191,13 @@ newchar = curchar; } if (newchar != curchar) - set_string_char (XSTRING (newtext), strpos, newchar); + set_string_char (XSTRING (replacement), strpos, newchar); } } /* frees the Dynarrs if necessary. */ unbind_to (speccount, Qnil); - return concat3 (before, newtext, after); + return concat3 (before, replacement, after); } mc_count = begin_multiple_change (buf, search_regs.start[0], @@ -2144,21 +2213,21 @@ position in the replacement. */ BUF_SET_PT (buf, search_regs.start[0]); if (!NILP (literal)) - Finsert (1, &newtext); + Finsert (1, &replacement); else { - Charcount stlen = XSTRING_CHAR_LENGTH (newtext); + Charcount stlen = XSTRING_CHAR_LENGTH (replacement); Charcount strpos; struct gcpro gcpro1; - GCPRO1 (newtext); + GCPRO1 (replacement); for (strpos = 0; strpos < stlen; strpos++) { Charcount offset = BUF_PT (buf) - search_regs.start[0]; - c = string_char (XSTRING (newtext), strpos); + c = string_char (XSTRING (replacement), strpos); if (c == '\\' && strpos < stlen - 1) { - c = string_char (XSTRING (newtext), ++strpos); + c = string_char (XSTRING (replacement), ++strpos); if (c == '&') Finsert_buffer_substring (buffer, @@ -2498,19 +2567,19 @@ DEFUN ("regexp-quote", Fregexp_quote, 1, 1, 0, /* Return a regexp string which matches exactly STRING and nothing else. */ - (str)) + (string)) { REGISTER Bufbyte *in, *out, *end; REGISTER Bufbyte *temp; - CHECK_STRING (str); + CHECK_STRING (string); - temp = (Bufbyte *) alloca (XSTRING_LENGTH (str) * 2); + temp = (Bufbyte *) alloca (XSTRING_LENGTH (string) * 2); /* Now copy the data into the new string, inserting escapes. */ - in = XSTRING_DATA (str); - end = in + XSTRING_LENGTH (str); + in = XSTRING_DATA (string); + end = in + XSTRING_LENGTH (string); out = temp; while (in < end) diff -r a8296e22da4e -r 576fb035e263 src/select-x.c --- a/src/select-x.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/select-x.c Mon Aug 13 11:36:19 2007 +0200 @@ -84,7 +84,7 @@ unsigned int *size_ret, int *format_ret); static Lisp_Object selection_data_to_lisp_data (struct device *, - unsigned char *data, + Extbyte *data, size_t size, Atom type, int format); @@ -284,8 +284,8 @@ #endif XmString fmh; String encoding = "STRING"; - const Extbyte *data = XSTRING_DATA (selection_value); - Extcount bytes = XSTRING_LENGTH (selection_value); + const Bufbyte *data = XSTRING_DATA (selection_value); + Bytecount bytes = XSTRING_LENGTH (selection_value); #ifdef MULE { @@ -948,11 +948,11 @@ static void x_get_window_property (Display *display, Window window, Atom property, - unsigned char **data_ret, int *bytes_ret, + Extbyte **data_ret, int *bytes_ret, Atom *actual_type_ret, int *actual_format_ret, unsigned long *actual_size_ret, int delete_p) { - int total_size; + size_t total_size; unsigned long bytes_remaining; int offset = 0; unsigned char *tmp_data = 0; @@ -983,7 +983,7 @@ } total_size = bytes_remaining + 1; - *data_ret = (unsigned char *) xmalloc (total_size); + *data_ret = (Extbyte *) xmalloc (total_size); /* Now read, until we've gotten it all. */ while (bytes_remaining) @@ -1020,7 +1020,7 @@ /* this one is for error messages only */ Lisp_Object target_type, unsigned int min_size_bytes, - unsigned char **data_ret, int *size_bytes_ret, + Extbyte **data_ret, int *size_bytes_ret, Atom *type_ret, int *format_ret, unsigned long *size_ret) { @@ -1028,7 +1028,7 @@ int offset = 0; int prop_id; *size_bytes_ret = min_size_bytes; - *data_ret = (unsigned char *) xmalloc (*size_bytes_ret); + *data_ret = (Extbyte *) xmalloc (*size_bytes_ret); #if 0 stderr_out ("\nread INCR %d\n", min_size_bytes); #endif @@ -1044,7 +1044,7 @@ PropertyNewValue); while (1) { - unsigned char *tmp_data; + Extbyte *tmp_data; int tmp_size_bytes; wait_for_property_change (prop_id); /* expect it again immediately, because x_get_window_property may @@ -1076,7 +1076,7 @@ *size_bytes_ret, offset + tmp_size_bytes); #endif *size_bytes_ret = offset + tmp_size_bytes; - *data_ret = (unsigned char *) xrealloc (*data_ret, *size_bytes_ret); + *data_ret = (Extbyte *) xrealloc (*data_ret, *size_bytes_ret); } memcpy ((*data_ret) + offset, tmp_data, tmp_size_bytes); offset += tmp_size_bytes; @@ -1097,7 +1097,7 @@ Atom actual_type; int actual_format; unsigned long actual_size; - unsigned char *data = NULL; + Extbyte *data = NULL; int bytes = 0; Lisp_Object val; struct device *d = get_device_from_display (display); @@ -1179,7 +1179,7 @@ static Lisp_Object selection_data_to_lisp_data (struct device *d, - unsigned char *data, + Extbyte *data, size_t size, Atom type, int format) @@ -1544,7 +1544,7 @@ Display *display = DEVICE_X_DISPLAY (d); Window window = RootWindow (display, 0); /* Cutbuffers are on frame 0 */ Atom cut_buffer_atom; - unsigned char *data; + Extbyte *data; int bytes; Atom type; int format; @@ -1586,9 +1586,9 @@ Display *display = DEVICE_X_DISPLAY (d); Window window = RootWindow (display, 0); /* Cutbuffers are on frame 0 */ Atom cut_buffer_atom; - const Extbyte *data = XSTRING_DATA (string); - Extcount bytes = XSTRING_LENGTH (string); - Extcount bytes_remaining; + const Bufbyte *data = XSTRING_DATA (string); + Bytecount bytes = XSTRING_LENGTH (string); + Bytecount bytes_remaining; int max_bytes = SELECTION_QUANTUM (display); #ifdef MULE const Bufbyte *ptr, *end; diff -r a8296e22da4e -r 576fb035e263 src/select.c --- a/src/select.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/select.c Mon Aug 13 11:36:19 2007 +0200 @@ -134,13 +134,16 @@ #endif DEFUN ("own-selection-internal", Fown_selection_internal, 2, 5, 0, /* -Assert a selection of the given NAME with the given VALUE, and -optional window-system DATA-TYPE. HOW-TO-ADD specifies how the -selection will be combined with any existing selection(s) - see -`own-selection' for more information. -NAME is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. -VALUE is typically a string, or a cons of two markers, but may be +Give the selection SELECTION-NAME the value SELECTION-VALUE. +SELECTION-NAME is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. +SELECTION-VALUE is typically a string, or a cons of two markers, but may be anything that the functions on selection-converter-out-alist know about. +Optional arg HOW-TO-ADD specifies how the selection will be combined +with any existing selection(s) - see `own-selection' for more +information. +Optional arg DATA-TYPE is a window-system-specific type. +Optional arg DEVICE specifies the device on which to assert the selection. +It defaults to the selected device. */ (selection_name, selection_value, how_to_add, data_type, device)) { @@ -441,8 +444,8 @@ } DEFUN ("selection-owner-p", Fselection_owner_p, 0, 1, 0, /* -Return t if current emacs process owns the given Selection. -The arg should be the name of the selection in question, typically one of +Return t if the current emacs process owns SELECTION. +SELECTION should be the name of the selection in question, typically one of the symbols PRIMARY, SECONDARY, or CLIPBOARD. (For convenience, the symbol nil is the same as PRIMARY, and t is the same as SECONDARY.) */ @@ -456,11 +459,11 @@ } DEFUN ("selection-exists-p", Fselection_exists_p, 0, 3, 0, /* -Whether there is an owner for the given Selection. -The arg should be the name of the selection in question, typically one of +Whether there is currently an owner for SELECTION. +SELECTION should be the name of the selection in question, typically one of the symbols PRIMARY, SECONDARY, or CLIPBOARD. (For convenience, the symbol nil is the same as PRIMARY, and t is the same as SECONDARY.) -Optionally the DEVICE and the window-system DATA-TYPE may be specified. +Optionally, the window-system DATA-TYPE and the DEVICE may be specified. */ (selection, data_type, device)) { @@ -499,18 +502,18 @@ */ DEFUN ("get-selection-internal", Fget_selection_internal, 2, 3, 0, /* Return text selected from some window-system window. -SELECTION_SYMBOL is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. -TARGET_TYPE is the type of data desired, typically STRING or COMPOUND_TEXT. +SELECTION is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. +TARGET-TYPE is the type of data desired, typically STRING or COMPOUND_TEXT. Under Mule, if the resultant data comes back as 8-bit data in type TEXT or COMPOUND_TEXT, it will be decoded as Compound Text. */ - (selection_symbol, target_type, device)) + (selection, target_type, device)) { /* This function can GC */ Lisp_Object val = Qnil; struct gcpro gcpro1, gcpro2; GCPRO2 (target_type, val); - CHECK_SYMBOL (selection_symbol); + CHECK_SYMBOL (selection); if (NILP (device)) device = Fselected_device (Qnil); @@ -538,19 +541,19 @@ the device (in which case target_type would be a device-specific identifier - probably an integer) - ajh */ - val = get_local_selection (selection_symbol, target_type); + val = get_local_selection (selection, target_type); if (!NILP (val)) { /* If we get something from the local cache, we may need to convert it slightly - to do this, we call select-coerce */ - val = call3 (Qselect_coerce, selection_symbol, target_type, val); + val = call3 (Qselect_coerce, selection, target_type, val); } else if (HAS_DEVMETH_P (XDEVICE (device), get_foreign_selection)) { /* Nothing in the local cache; try the window system */ val = DEVMETH (XDEVICE (device), get_foreign_selection, - (selection_symbol, target_type)); + (selection, target_type)); } if (NILP (val)) @@ -562,12 +565,12 @@ the first for which a conversion succeeds gets returned. */ EXTERNAL_LIST_LOOP_2 (element, Vselection_coercible_types) { - val = get_local_selection (selection_symbol, element); + val = get_local_selection (selection, element); if (NILP (val)) continue; - val = call3 (Qselect_coerce, selection_symbol, target_type, val); + val = call3 (Qselect_coerce, selection, target_type, val); if (!NILP (val)) break; diff -r a8296e22da4e -r 576fb035e263 src/sgiplay.c --- a/src/sgiplay.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/sgiplay.c Mon Aug 13 11:36:19 2007 +0200 @@ -328,7 +328,7 @@ if (ac == (AudioContext) 0) return; - data = ac->ac_data; + data = (unsigned char *) ac->ac_data; limit = data + ac->ac_size; while (data < limit) { diff -r a8296e22da4e -r 576fb035e263 src/sound.c --- a/src/sound.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/sound.c Mon Aug 13 11:36:19 2007 +0200 @@ -334,7 +334,7 @@ /* #### ESD uses alarm(). But why should we also stop SIGIO? */ stop_interrupts (); - succes = esd_play_sound_data (soundext, soundextlen, vol); + succes = esd_play_sound_data ((unsigned char *) soundext, soundextlen, vol); start_interrupts (); QUIT; if(succes) diff -r a8296e22da4e -r 576fb035e263 src/specifier.c --- a/src/specifier.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/specifier.c Mon Aug 13 11:36:19 2007 +0200 @@ -549,7 +549,7 @@ retrieved in a specific domain (window, frame, device) by looking through the possible instantiators (i.e. settings). This process is called \"instantiation\". - + To put settings into a specifier, use `set-specifier', or the lower-level functions `add-spec-to-specifier' and `add-spec-list-to-specifier'. You can also temporarily bind a setting @@ -1986,8 +1986,8 @@ } DEFUN ("add-spec-list-to-specifier", Fadd_spec_list_to_specifier, 2, 3, 0, /* -Add a spec-list (a list of specifications) to SPECIFIER. -The format of a spec-list is +Add SPEC-LIST (a list of specifications) to SPECIFIER. +The format of SPEC-LIST is ((LOCALE (TAG-SET . INSTANTIATOR) ...) ...) @@ -2556,11 +2556,8 @@ Lisp_Object window = Qnil; Lisp_Object frame = Qnil; Lisp_Object device = Qnil; - Lisp_Object tag = Qnil; - struct device *d; - Lisp_Specifier *sp; - - sp = XSPECIFIER (specifier); + Lisp_Object tag = Qnil; /* #### currently unused */ + Lisp_Specifier *sp = XSPECIFIER (specifier); /* Attempt to determine buffer, window, frame, and device from the domain. */ @@ -2582,17 +2579,16 @@ abort (); if (NILP (buffer) && !NILP (window)) - buffer = XWINDOW (window)->buffer; + buffer = WINDOW_BUFFER (XWINDOW (window)); if (NILP (frame) && !NILP (window)) frame = XWINDOW (window)->frame; if (NILP (device)) /* frame had better exist; if device is undeterminable, something really went wrong. */ - device = XFRAME (frame)->device; + device = FRAME_DEVICE (XFRAME (frame)); /* device had better be determined by now; abort if not. */ - d = XDEVICE (device); - tag = DEVICE_CLASS (d); + tag = DEVICE_CLASS (XDEVICE (device)); depth = make_int (1 + XINT (depth)); if (XINT (depth) > 20) @@ -2836,7 +2832,8 @@ int struct_frame_offset, void (*value_changed_in_frame) (Lisp_Object specifier, struct frame *f, - Lisp_Object oldval)) + Lisp_Object oldval), + int always_recompute) { Lisp_Specifier *sp = XSPECIFIER (specifier); assert (!GHOST_SPECIFIER_P (sp)); @@ -2847,6 +2844,7 @@ sp->caching->value_changed_in_window = value_changed_in_window; sp->caching->offset_into_struct_frame = struct_frame_offset; sp->caching->value_changed_in_frame = value_changed_in_frame; + sp->caching->always_recompute = always_recompute; Vcached_specifiers = Fcons (specifier, Vcached_specifiers); if (BODILY_SPECIFIER_P (sp)) GHOST_SPECIFIER(sp)->caching = sp->caching; @@ -2858,7 +2856,7 @@ struct window *w) { Lisp_Object window; - Lisp_Object newval, *location; + Lisp_Object newval, *location, oldval; assert (!GHOST_SPECIFIER_P (XSPECIFIER (specifier))); @@ -2879,9 +2877,9 @@ calling equal is no good either as this doesn't take into account things attached to the specifier - for instance strings on extents. --andyp */ - if (!EQ (newval, *location)) + if (!EQ (newval, *location) || XSPECIFIER (specifier)->caching->always_recompute) { - Lisp_Object oldval = *location; + oldval = *location; *location = newval; (XSPECIFIER (specifier)->caching->value_changed_in_window) (specifier, w, oldval); @@ -2893,7 +2891,7 @@ struct frame *f) { Lisp_Object frame; - Lisp_Object newval, *location; + Lisp_Object newval, *location, oldval; assert (!GHOST_SPECIFIER_P (XSPECIFIER (specifier))); @@ -2907,9 +2905,9 @@ method. */ location = (Lisp_Object *) ((char *) f + XSPECIFIER (specifier)->caching->offset_into_struct_frame); - if (!EQ (newval, *location)) + if (!EQ (newval, *location) || XSPECIFIER (specifier)->caching->always_recompute) { - Lisp_Object oldval = *location; + oldval = *location; *location = newval; (XSPECIFIER (specifier)->caching->value_changed_in_frame) (specifier, f, oldval); diff -r a8296e22da4e -r 576fb035e263 src/specifier.h --- a/src/specifier.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/specifier.h Mon Aug 13 11:36:19 2007 +0200 @@ -411,6 +411,7 @@ int offset_into_struct_frame; void (*value_changed_in_frame) (Lisp_Object specifier, struct frame *f, Lisp_Object oldval); + int always_recompute; }; /* #### get image instances out of domains! */ @@ -480,7 +481,8 @@ int struct_frame_offset, void (*value_changed_in_frame) (Lisp_Object specifier, struct frame *f, - Lisp_Object oldval)); + Lisp_Object oldval), + int always_recompute); void set_specifier_fallback (Lisp_Object specifier, Lisp_Object fallback); void recompute_all_cached_specifiers_in_window (struct window *w); diff -r a8296e22da4e -r 576fb035e263 src/symbols.c --- a/src/symbols.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/symbols.c Mon Aug 13 11:36:19 2007 +0200 @@ -198,8 +198,8 @@ DEFUN ("intern", Fintern, 1, 2, 0, /* Return the canonical symbol whose name is STRING. If there is none, one is created by this function and returned. -A second optional argument specifies the obarray to use; -it defaults to the value of `obarray'. +Optional second argument OBARRAY specifies the obarray to use; +it defaults to the value of the variable `obarray'. */ (string, obarray)) { @@ -245,8 +245,8 @@ Return the canonical symbol named NAME, or nil if none exists. NAME may be a string or a symbol. If it is a symbol, that exact symbol is searched for. -A second optional argument specifies the obarray to use; -it defaults to the value of `obarray'. +Optional second argument OBARRAY specifies the obarray to use; +it defaults to the value of the variable `obarray'. */ (name, obarray)) { @@ -278,7 +278,7 @@ The value is t if a symbol was found and deleted, nil otherwise. NAME may be a string or a symbol. If it is a symbol, that symbol is deleted, if it belongs to OBARRAY--no other symbol is deleted. -OBARRAY defaults to the value of the variable `obarray' +OBARRAY defaults to the value of the variable `obarray'. */ (name, obarray)) { @@ -490,11 +490,9 @@ } DEFUN ("apropos-internal", Fapropos_internal, 1, 2, 0, /* -Show all symbols whose names contain match for REGEXP. -If optional 2nd arg PREDICATE is non-nil, (funcall PREDICATE SYMBOL) - is done for each symbol and a symbol is mentioned only if that - returns non-nil. -Return list of symbols found. +Return a list of all symbols whose names contain match for REGEXP. +If optional 2nd arg PREDICATE is non-nil, only symbols for which +\(funcall PREDICATE SYMBOL) returns non-nil are returned. */ (regexp, predicate)) { @@ -1931,7 +1929,7 @@ } DEFUN ("set-default", Fset_default, 2, 2, 0, /* -Set SYMBOL's default value to VAL. SYMBOL and VAL are evaluated. +Set SYMBOL's default value to VALUE. SYMBOL and VALUE are evaluated. The default value is seen in buffers that do not have their own values for this variable. */ @@ -2597,7 +2595,7 @@ DEFUN ("local-variable-p", Flocal_variable_p, 2, 3, 0, /* Return t if SYMBOL's value is local to BUFFER. -If optional third arg AFTER-SET is true, return t if SYMBOL would be +If optional third arg AFTER-SET is non-nil, return t if SYMBOL would be buffer-local after it is set, regardless of whether it is so presently. A nil value for BUFFER is *not* the same as (current-buffer), but means "no buffer". Specifically: @@ -3191,7 +3189,7 @@ XSYMBOL (Qnil)->function = Qunbound; defsymbol (&Qt, "t"); - XSYMBOL (Qt)->value = Qt; /* Veritas aetera */ + XSYMBOL (Qt)->value = Qt; /* Veritas aeterna */ Vquit_flag = Qnil; pdump_wire (&Qnil); diff -r a8296e22da4e -r 576fb035e263 src/syntax.c --- a/src/syntax.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/syntax.c Mon Aug 13 11:36:19 2007 +0200 @@ -156,12 +156,13 @@ } DEFUN ("syntax-table-p", Fsyntax_table_p, 1, 1, 0, /* -Return t if ARG is a syntax table. +Return t if OBJECT is a syntax table. Any vector of 256 elements will do. */ - (obj)) + (object)) { - return CHAR_TABLEP (obj) && XCHAR_TABLE_TYPE (obj) == CHAR_TABLE_TYPE_SYNTAX + return (CHAR_TABLEP (object) + && XCHAR_TABLE_TYPE (object) == CHAR_TABLE_TYPE_SYNTAX) ? Qt : Qnil; } @@ -195,32 +196,31 @@ } DEFUN ("copy-syntax-table", Fcopy_syntax_table, 0, 1, 0, /* -Construct a new syntax table and return it. -It is a copy of the TABLE, which defaults to the standard syntax table. +Return a new syntax table which is a copy of SYNTAX-TABLE. +SYNTAX-TABLE defaults to the standard syntax table. */ - (table)) + (syntax_table)) { if (NILP (Vstandard_syntax_table)) return Fmake_char_table (Qsyntax); - table = check_syntax_table (table, Vstandard_syntax_table); - return Fcopy_char_table (table); + syntax_table = check_syntax_table (syntax_table, Vstandard_syntax_table); + return Fcopy_char_table (syntax_table); } DEFUN ("set-syntax-table", Fset_syntax_table, 1, 2, 0, /* -Select a new syntax table for BUFFER. -One argument, a syntax table. +Select SYNTAX-TABLE as the new syntax table for BUFFER. BUFFER defaults to the current buffer if omitted. */ - (table, buffer)) + (syntax_table, buffer)) { struct buffer *buf = decode_buffer (buffer, 0); - table = check_syntax_table (table, Qnil); - buf->syntax_table = table; - buf->mirror_syntax_table = XCHAR_TABLE (table)->mirror_table; + syntax_table = check_syntax_table (syntax_table, Qnil); + buf->syntax_table = syntax_table; + buf->mirror_syntax_table = XCHAR_TABLE (syntax_table)->mirror_table; /* Indicate that this buffer now has a specified syntax table. */ buf->local_var_flags |= XINT (buffer_local_flags.syntax_table); - return table; + return syntax_table; } /* Convert a letter which signifies a syntax code @@ -262,25 +262,26 @@ } DEFUN ("char-syntax", Fchar_syntax, 1, 2, 0, /* -Return the syntax code of CHAR, described by a character. -For example, if CHAR is a word constituent, the character `?w' is returned. +Return the syntax code of CHARACTER, described by a character. +For example, if CHARACTER is a word constituent, +the character `?w' is returned. The characters that correspond to various syntax codes are listed in the documentation of `modify-syntax-entry'. -Optional second argument TABLE defaults to the current buffer's +Optional second argument SYNTAX-TABLE defaults to the current buffer's syntax table. */ - (ch, table)) + (character, syntax_table)) { Lisp_Char_Table *mirrortab; - if (NILP(ch)) + if (NILP (character)) { - ch = make_char('\000'); + character = make_char ('\000'); } - CHECK_CHAR_COERCE_INT (ch); - table = check_syntax_table (table, current_buffer->syntax_table); - mirrortab = XCHAR_TABLE (XCHAR_TABLE (table)->mirror_table); - return make_char (syntax_code_spec[(int) SYNTAX (mirrortab, XCHAR (ch))]); + CHECK_CHAR_COERCE_INT (character); + syntax_table = check_syntax_table (syntax_table, current_buffer->syntax_table); + mirrortab = XCHAR_TABLE (XCHAR_TABLE (syntax_table)->mirror_table); + return make_char (syntax_code_spec[(int) SYNTAX (mirrortab, XCHAR (character))]); } #ifdef MULE @@ -296,9 +297,9 @@ #endif Lisp_Object -syntax_match (Lisp_Object table, Emchar ch) +syntax_match (Lisp_Object syntax_table, Emchar ch) { - Lisp_Object code = XCHAR_TABLE_VALUE_UNSAFE (table, ch); + Lisp_Object code = XCHAR_TABLE_VALUE_UNSAFE (syntax_table, ch); Lisp_Object code2 = code; if (CONSP (code)) @@ -310,21 +311,21 @@ } DEFUN ("matching-paren", Fmatching_paren, 1, 2, 0, /* -Return the matching parenthesis of CHAR, or nil if none. -Optional second argument TABLE defaults to the current buffer's +Return the matching parenthesis of CHARACTER, or nil if none. +Optional second argument SYNTAX-TABLE defaults to the current buffer's syntax table. */ - (ch, table)) + (character, syntax_table)) { Lisp_Char_Table *mirrortab; int code; - CHECK_CHAR_COERCE_INT (ch); - table = check_syntax_table (table, current_buffer->syntax_table); - mirrortab = XCHAR_TABLE (XCHAR_TABLE (table)->mirror_table); - code = SYNTAX (mirrortab, XCHAR (ch)); + CHECK_CHAR_COERCE_INT (character); + syntax_table = check_syntax_table (syntax_table, current_buffer->syntax_table); + mirrortab = XCHAR_TABLE (XCHAR_TABLE (syntax_table)->mirror_table); + code = SYNTAX (mirrortab, XCHAR (character)); if (code == Sopen || code == Sclose || code == Sstring) - return syntax_match (table, XCHAR (ch)); + return syntax_match (syntax_table, XCHAR (character)); return Qnil; } @@ -648,30 +649,30 @@ at those changes. --ben */ DEFUN ("forward-comment", Fforward_comment, 1, 2, 0, /* -Move forward across up to N comments. If N is negative, move backward. +Move forward across up to COUNT comments, or backwards if COUNT is negative. Stop scanning if we find something other than a comment or whitespace. Set point to where scanning stops. -If N comments are found as expected, with nothing except whitespace +If COUNT comments are found as expected, with nothing except whitespace between them, return t; otherwise return nil. Point is set in either case. Optional argument BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { Bufpos from; Bufpos stop; Emchar c; enum syntaxcode code; - EMACS_INT count; + EMACS_INT n; struct buffer *buf = decode_buffer (buffer, 0); Lisp_Char_Table *mirrortab = XCHAR_TABLE (buf->mirror_syntax_table); - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); from = BUF_PT (buf); - while (count > 0) + while (n > 0) { QUIT; @@ -740,10 +741,10 @@ } /* End of comment reached */ - count--; + n--; } - while (count < 0) + while (n < 0) { QUIT; @@ -799,7 +800,7 @@ } } - count++; + n++; } BUF_SET_PT (buf, from); @@ -809,7 +810,7 @@ Lisp_Object scan_lists (struct buffer *buf, Bufpos from, int count, int depth, - int sexpflag, int no_error) + int sexpflag, int noerror) { Bufpos stop; Emchar c; @@ -929,7 +930,7 @@ if (!--depth) goto done; if (depth < min_depth) { - if (no_error) + if (noerror) return Qnil; error ("Containing expression ends prematurely"); } @@ -1074,7 +1075,7 @@ if (!--depth) goto done2; if (depth < min_depth) { - if (no_error) + if (noerror) return Qnil; error ("Containing expression ends prematurely"); } @@ -1126,7 +1127,7 @@ return (make_int (from)); lose: - if (!no_error) + if (!noerror) error ("Unbalanced parentheses"); return Qnil; } @@ -1168,7 +1169,7 @@ If optional arg NOERROR is non-nil, scan-lists will return nil instead of signalling an error. */ - (from, count, depth, buffer, no_error)) + (from, count, depth, buffer, noerror)) { struct buffer *buf; @@ -1178,7 +1179,7 @@ buf = decode_buffer (buffer, 0); return scan_lists (buf, XINT (from), XINT (count), XINT (depth), 0, - !NILP (no_error)); + !NILP (noerror)); } DEFUN ("scan-sexps", Fscan_sexps, 2, 4, 0, /* @@ -1199,13 +1200,13 @@ If optional arg NOERROR is non-nil, scan-sexps will return nil instead of signalling an error. */ - (from, count, buffer, no_error)) + (from, count, buffer, noerror)) { struct buffer *buf = decode_buffer (buffer, 0); CHECK_INT (from); CHECK_INT (count); - return scan_lists (buf, XINT (from), XINT (count), 0, 1, !NILP (no_error)); + return scan_lists (buf, XINT (from), XINT (count), 0, 1, !NILP (noerror)); } DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, 0, 1, 0, /* @@ -1508,7 +1509,7 @@ Parse Lisp syntax starting at FROM until TO; return status of parse at TO. Parsing stops at TO or when certain criteria are met; point is set to where parsing stops. -If fifth arg STATE is omitted or nil, +If fifth arg OLDSTATE is omitted or nil, parsing assumes that FROM is the beginning of a function. Value is a list of eight elements describing final state of parsing: 0. depth in parens. @@ -1524,7 +1525,7 @@ in parentheses becomes equal to TARGETDEPTH. Fourth arg STOPBEFORE non-nil means stop when come to any character that starts a sexp. -Fifth arg STATE is an eight-element list like what this function returns. +Fifth arg OLDSTATE is an eight-element list like what this function returns. It is used to initialize the state of the parse. Its second and third elements are ignored. Sixth arg COMMENTSTOP non-nil means stop at the start of a comment. diff -r a8296e22da4e -r 576fb035e263 src/sysdep.c --- a/src/sysdep.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/sysdep.c Mon Aug 13 11:36:19 2007 +0200 @@ -3031,7 +3031,7 @@ Qfile_name); Dynarr_add_many (internal_DIRENTRY, internal_name, internal_len); - Dynarr_add (internal_DIRENTRY, 0); /* zero-terminate */ + Dynarr_add (internal_DIRENTRY, '\0'); /* NUL-terminate */ return (DIRENTRY *) Dynarr_atp (internal_DIRENTRY, 0); } } diff -r a8296e22da4e -r 576fb035e263 src/sysproc.h --- a/src/sysproc.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/sysproc.h Mon Aug 13 11:36:19 2007 +0200 @@ -118,12 +118,12 @@ #include #endif -#ifdef HAVE_SYS_STROPTS_H -#include /* isastream(), I_PUSH */ +#ifdef HAVE_STROPTS_H +#include /* isastream(), I_PUSH */ #endif -#ifdef HAVE_SYS_STRTIO_H -#include /* TIOCSIGNAL */ +#ifdef HAVE_STRTIO_H +#include /* TIOCSIGNAL */ #endif #ifdef HAVE_PTY_H diff -r a8296e22da4e -r 576fb035e263 src/toolbar.c --- a/src/toolbar.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/toolbar.c Mon Aug 13 11:36:19 2007 +0200 @@ -990,11 +990,11 @@ If you want to verify the syntax of a toolbar description list as a whole, use `check-valid-instantiator' with a specifier type of 'toolbar. */ - (button, no_error)) + (button, noerror)) { Lisp_Object *elt, glyphs, value; int len; - Error_behavior errb = decode_error_behavior_flag (no_error); + Error_behavior errb = decode_error_behavior_flag (noerror); if (!VECTORP (button)) CTB_ERROR ("toolbar button descriptors must be vectors"); @@ -1417,7 +1417,7 @@ set_specifier_caching (Vdefault_toolbar, offsetof (struct window, default_toolbar), default_toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("top-toolbar", &Vtoolbar[TOP_TOOLBAR] /* @@ -1429,7 +1429,7 @@ set_specifier_caching (Vtoolbar[TOP_TOOLBAR], offsetof (struct window, toolbar[TOP_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("bottom-toolbar", &Vtoolbar[BOTTOM_TOOLBAR] /* @@ -1446,7 +1446,7 @@ set_specifier_caching (Vtoolbar[BOTTOM_TOOLBAR], offsetof (struct window, toolbar[BOTTOM_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("left-toolbar", &Vtoolbar[LEFT_TOOLBAR] /* @@ -1463,7 +1463,7 @@ set_specifier_caching (Vtoolbar[LEFT_TOOLBAR], offsetof (struct window, toolbar[LEFT_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("right-toolbar", &Vtoolbar[RIGHT_TOOLBAR] /* @@ -1480,7 +1480,7 @@ set_specifier_caching (Vtoolbar[RIGHT_TOOLBAR], offsetof (struct window, toolbar[RIGHT_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); /* initially, top inherits from default; this can be changed with `set-default-toolbar-position'. */ @@ -1535,7 +1535,7 @@ offsetof (struct window, default_toolbar_height), default_toolbar_size_changed_in_window, offsetof (struct frame, default_toolbar_height), - default_toolbar_size_changed_in_frame); + default_toolbar_size_changed_in_frame, 0); DEFVAR_SPECIFIER ("default-toolbar-width", &Vdefault_toolbar_width /* *Width of the default toolbar, if it's oriented vertically. @@ -1548,7 +1548,7 @@ offsetof (struct window, default_toolbar_width), default_toolbar_size_changed_in_window, offsetof (struct frame, default_toolbar_width), - default_toolbar_size_changed_in_frame); + default_toolbar_size_changed_in_frame, 0); DEFVAR_SPECIFIER ("top-toolbar-height", &Vtoolbar_size[TOP_TOOLBAR] /* @@ -1562,7 +1562,7 @@ offsetof (struct window, toolbar_size[TOP_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[TOP_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("bottom-toolbar-height", &Vtoolbar_size[BOTTOM_TOOLBAR] /* @@ -1576,7 +1576,7 @@ offsetof (struct window, toolbar_size[BOTTOM_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[BOTTOM_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("left-toolbar-width", &Vtoolbar_size[LEFT_TOOLBAR] /* @@ -1590,7 +1590,7 @@ offsetof (struct window, toolbar_size[LEFT_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[LEFT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("right-toolbar-width", &Vtoolbar_size[RIGHT_TOOLBAR] /* @@ -1604,7 +1604,7 @@ offsetof (struct window, toolbar_size[RIGHT_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[RIGHT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); fb = Qnil; #ifdef HAVE_TTY @@ -1667,7 +1667,7 @@ offsetof (struct window, default_toolbar_border_width), default_toolbar_border_width_changed_in_window, offsetof (struct frame, default_toolbar_border_width), - default_toolbar_border_width_changed_in_frame); + default_toolbar_border_width_changed_in_frame, 0); DEFVAR_SPECIFIER ("top-toolbar-border-width", &Vtoolbar_border_width[TOP_TOOLBAR] /* @@ -1683,7 +1683,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[TOP_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("bottom-toolbar-border-width", &Vtoolbar_border_width[BOTTOM_TOOLBAR] /* @@ -1699,7 +1699,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[BOTTOM_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("left-toolbar-border-width", &Vtoolbar_border_width[LEFT_TOOLBAR] /* @@ -1715,7 +1715,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[LEFT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("right-toolbar-border-width", &Vtoolbar_border_width[RIGHT_TOOLBAR] /* @@ -1731,7 +1731,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[RIGHT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); fb = Qnil; #ifdef HAVE_TTY @@ -1777,7 +1777,7 @@ offsetof (struct window, default_toolbar_visible_p), default_toolbar_visible_p_changed_in_window, offsetof (struct frame, default_toolbar_visible_p), - default_toolbar_visible_p_changed_in_frame); + default_toolbar_visible_p_changed_in_frame, 0); DEFVAR_SPECIFIER ("top-toolbar-visible-p", &Vtoolbar_visible_p[TOP_TOOLBAR] /* @@ -1793,7 +1793,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[TOP_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("bottom-toolbar-visible-p", &Vtoolbar_visible_p[BOTTOM_TOOLBAR] /* @@ -1809,7 +1809,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[BOTTOM_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("left-toolbar-visible-p", &Vtoolbar_visible_p[LEFT_TOOLBAR] /* @@ -1825,7 +1825,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[LEFT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("right-toolbar-visible-p", &Vtoolbar_visible_p[RIGHT_TOOLBAR] /* @@ -1841,7 +1841,7 @@ toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[RIGHT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); /* initially, top inherits from default; this can be changed with `set-default-toolbar-position'. */ @@ -1864,7 +1864,7 @@ set_specifier_caching (Vtoolbar_buttons_captioned_p, offsetof (struct window, toolbar_buttons_captioned_p), toolbar_buttons_captioned_p_changed, - 0, 0); + 0, 0, 0); set_specifier_fallback (Vtoolbar_buttons_captioned_p, list1 (Fcons (Qnil, Qt))); } diff -r a8296e22da4e -r 576fb035e263 src/tooltalk.c --- a/src/tooltalk.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/tooltalk.c Mon Aug 13 11:36:19 2007 +0200 @@ -763,7 +763,7 @@ TO_EXTERNAL_FORMAT (LISP_STRING, value, ALLOCA, (value_ext, value_ext_len), Qnative); - tt_message_arg_bval_set (m, n, value_ext, value_ext_len); + tt_message_arg_bval_set (m, n, (unsigned char *) value_ext, value_ext_len); } else if (EQ (attribute, Qtt_arg_ival)) { diff -r a8296e22da4e -r 576fb035e263 src/tooltalk.doc --- a/src/tooltalk.doc Mon Aug 13 11:35:05 2007 +0200 +++ b/src/tooltalk.doc Mon Aug 13 11:36:19 2007 +0200 @@ -275,7 +275,7 @@ Add one value to the indicated pattern attribute. The names of attributes are the same as the Tooltalk accessors used to set them less the "tooltalk_pattern_" prefix and the "_add" suffix). For example -the name of the attribute for tt_pattern_dispostion_add attribute +the name of the attribute for tt_pattern_disposition_add attribute is 'disposition. The 'category attribute is handled specially, since a pattern can only be a member of one category (TT_OBSERVE or TT_HANDLE. diff -r a8296e22da4e -r 576fb035e263 src/unexcw.c --- a/src/unexcw.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/unexcw.c Mon Aug 13 11:36:19 2007 +0200 @@ -51,6 +51,9 @@ #define ALLOC_MASK ~((unsigned long)(ALLOC_UNIT)) #define ALIGN_ALLOC(addr) \ ((((unsigned long)addr) + ALLOC_UNIT) & ALLOC_MASK) +/* Note that all sections must be aligned on a 0x1000 boundary so + this is the minimum size that our dummy bss can be. */ +#define BSS_PAD_SIZE 0x1000 /* To prevent zero-initialized variables from being placed into the bss section, use non-zero values to represent an uninitialized state. */ @@ -252,13 +255,19 @@ void* empty_space; extern int static_heap_dumped; SCNHDR section; - /* calculate new sizes f_ohdr.dsize is the total initialized data - size on disk which is f_data.s_size + f_idata.s_size. - f_ohdr.data_start is the base addres of all data and so should - not be changed. *.s_vaddr is the virtual address of the start - of the section normalzed from f_ohdr.ImageBase. *.s_paddr - appears to be the number of bytes in the section actually used - (whereas *.s_size is aligned). + /* calculate new sizes: + + f_ohdr.dsize is the total initialized data size on disk which is + f_data.s_size + f_idata.s_size. + + f_ohdr.data_start is the base addres of all data and so should + not be changed. + + *.s_vaddr is the virtual address of the start of the section + *normalized from f_ohdr.ImageBase. + + *.s_paddr appears to be the number of bytes in the section + *actually used (whereas *.s_size is aligned). bsize is now 0 since subsumed into .data dsize is dsize + (f_data.s_vaddr - f_bss.s_vaddr) @@ -278,7 +287,7 @@ data_padding = (f_bss.s_vaddr - f_data.s_vaddr) - f_data.s_size; } - file_sz_change=new_bss_size + data_padding; + file_sz_change=(new_bss_size + data_padding) - BSS_PAD_SIZE; new_data_size=f_ohdr.dsize + file_sz_change; if (!sections_reversed) @@ -297,7 +306,7 @@ lseek (a_new, 0, SEEK_SET); /* write file header */ f_hdr.f_symptr += file_sz_change; - f_hdr.f_nscns--; + printf("writing file header\n"); if (write(a_new, &f_hdr, sizeof(f_hdr)) != sizeof(f_hdr)) { @@ -312,7 +321,7 @@ PERROR("new data size is < approx"); } f_ohdr.dsize=new_data_size; - f_ohdr.bsize=0; + f_ohdr.bsize=BSS_PAD_SIZE; if (write(a_new, &f_ohdr, sizeof(f_ohdr)) != sizeof(f_ohdr)) { PERROR("failed to write optional header"); @@ -325,6 +334,18 @@ PERROR("failed to write text header"); } + /* Write small bss section. */ + if (!sections_reversed) + { + f_bss.s_size = BSS_PAD_SIZE; + f_bss.s_paddr = BSS_PAD_SIZE; + f_bss.s_vaddr = f_data.s_vaddr - BSS_PAD_SIZE; + if (write(a_new, &f_bss, sizeof(f_bss)) != sizeof(f_bss)) + { + PERROR("failed to write bss header"); + } + } + /* write new data header */ printf("writing .data header\n"); @@ -333,6 +354,18 @@ PERROR("failed to write data header"); } + /* Write small bss section. */ + if (sections_reversed) + { + f_bss.s_size = BSS_PAD_SIZE; + f_bss.s_paddr = BSS_PAD_SIZE; + f_bss.s_vaddr = f_nextdata.s_vaddr - BSS_PAD_SIZE; + if (write(a_new, &f_bss, sizeof(f_bss)) != sizeof(f_bss)) + { + PERROR("failed to write bss header"); + } + } + printf("writing following data header\n"); f_nextdata.s_scnptr += file_sz_change; if (f_nextdata.s_lnnoptr != 0) f_nextdata.s_lnnoptr += file_sz_change; @@ -360,13 +393,6 @@ } } - /* dump bss to maintain offsets */ - memset(&f_bss, 0, sizeof(f_bss)); - if (write(a_new, &f_bss, sizeof(f_bss)) != sizeof(f_bss)) - { - PERROR("failed to write bss header"); - } - size=lseek(a_new, 0, SEEK_CUR); CHECK_AOUT_POS(size); @@ -381,7 +407,7 @@ if (!sections_reversed) { - /* dump bss + padding between sections */ + /* dump bss + padding between sections, sans small bss pad */ printf ("dumping .bss into executable... %lx bytes\n", bss_size); if (write(a_new, bss_start, bss_size) != (int)bss_size) { @@ -389,7 +415,11 @@ } /* pad, needs to be zero */ - bss_padding = new_bss_size - bss_size; + bss_padding = (new_bss_size - bss_size) - BSS_PAD_SIZE; + if (bss_padding < 0) + { + PERROR("padded .bss too small"); + } printf ("padding .bss ... %lx bytes\n", bss_padding); empty_space = malloc(bss_padding); memset(empty_space, 0, bss_padding); @@ -420,7 +450,7 @@ } else { - /* need to bad to bss with data in file */ + /* need to pad to bss with data in file */ printf ("padding .data ... %lx bytes\n", data_padding); size = (f_bss_s_vaddr - f_data_s_vaddr) - data_size; dup_file_area(a_out, a_new, size); @@ -433,7 +463,11 @@ } /* pad, needs to be zero */ - bss_padding = new_bss_size - bss_size; + bss_padding = (new_bss_size - bss_size) - BSS_PAD_SIZE; + if (bss_padding < 0) + { + PERROR("padded .bss too small"); + } printf ("padding .bss ... %lx bytes\n", bss_padding); empty_space = malloc(bss_padding); memset(empty_space, 0, bss_padding); diff -r a8296e22da4e -r 576fb035e263 src/unexelfsgi.c --- a/src/unexelfsgi.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/unexelfsgi.c Mon Aug 13 11:36:19 2007 +0200 @@ -1,25 +1,38 @@ -/* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992 +/* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992, 1999, 2000 Free Software Foundation, Inc. This file is part of XEmacs. -XEmacs is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. +XEmacs is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. -XEmacs is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with XEmacs; see the file COPYING. If not, write to +along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +Boston, MA 02111-1307, USA. + +In other words, you are welcome to use, share and improve this program. +You are forbidden to forbid anyone else to use, share and improve +what you give them. Help stamp out software-hoarding! */ + +/* 2000-10-31: Martin Buchholz -/* Synched up with: FSF 19.31. */ + I noticed that xemacs on Irix 6.5 could not write to stderr, e.g. + (external-debugging-output "\n") + would produce NO output. + temacs worked fine, so this was clearly a dumping problem. + So I copied over the latest available unexelf.c from FSF Emacs, + and installed it as unexelfsgi.c in XEmacs. + In addition, I converted it to "Clean C", resulting in this file. +*/ /* * unexec.c - Convert a running program into an a.out file. @@ -31,14 +44,14 @@ * Modified heavily since then. * * Synopsis: - * unexec (new_name, a_name, data_start, bss_start, entry_address) - * char *new_name, *a_name; + * unexec (new_name, old_name, data_start, bss_start, entry_address) + * char *new_name, *old_name; * unsigned data_start, bss_start, entry_address; * * Takes a snapshot of the program and makes an a.out format file in the * file named by the string argument new_name. - * If a_name is non-NULL, the symbol table will be taken from the given file. - * On some machines, an existing a_name file is required. + * If old_name is non-NULL, the symbol table will be taken from the given file. + * On some machines, an existing old_name file is required. * * The boundaries within the a.out file may be adjusted with the data_start * and bss_start arguments. Either or both may be given as 0 for defaults. @@ -50,11 +63,6 @@ * The value you specify may be rounded down to a suitable boundary * as required by the machine you are using. * - * Specifying zero for data_start means the boundary between text and data - * should not be the same as when the program was loaded. - * If NO_REMAP is defined, the argument data_start is ignored and the - * segment boundaries are never changed. - * * Bss_start indicates how much of the data segment is to be saved in the * a.out file and restored when the program is executed. It gives the lowest * unsaved address, and is rounded up to a page boundary. The default when 0 @@ -64,9 +72,6 @@ * * The new file is set up to start at entry_address. * - * If you make improvements I'd like to get them too. - * harpo!utah-cs!thomas, thomas@Utah-20 - * */ /* Even more heavily modified by james@bigtex.cactus.org of Dell Computer Co. @@ -99,64 +104,64 @@ Link Info Adralgn Entsize [1] 1 2 0x80480d4 0xd4 0x13 .interp - 0 0 0x1 0 + 0 0 0x1 0 [2] 5 2 0x80480e8 0xe8 0x388 .hash - 3 0 0x4 0x4 + 3 0 0x4 0x4 [3] 11 2 0x8048470 0x470 0x7f0 .dynsym - 4 1 0x4 0x10 + 4 1 0x4 0x10 [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr - 0 0 0x1 0 + 0 0 0x1 0 [5] 9 2 0x8049010 0x1010 0x338 .rel.plt - 3 7 0x4 0x8 + 3 7 0x4 0x8 [6] 1 6 0x8049348 0x1348 0x3 .init - 0 0 0x4 0 + 0 0 0x4 0 [7] 1 6 0x804934c 0x134c 0x680 .plt - 0 0 0x4 0x4 + 0 0 0x4 0x4 [8] 1 6 0x80499cc 0x19cc 0x3c56f .text - 0 0 0x4 0 + 0 0 0x4 0 [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini - 0 0 0x4 0 + 0 0 0x4 0 [10] 1 2 0x8085f40 0x3df40 0x69c .rodata - 0 0 0x4 0 + 0 0 0x4 0 [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1 - 0 0 0x4 0 + 0 0 0x4 0 [12] 1 3 0x8088330 0x3f330 0x20afc .data - 0 0 0x4 0 + 0 0 0x4 0 [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1 - 0 0 0x4 0 + 0 0 0x4 0 [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got - 0 0 0x4 0x4 + 0 0 0x4 0x4 [15] 6 3 0x80a9874 0x60874 0x80 .dynamic - 4 0 0x4 0x8 + 4 0 0x4 0x8 [16] 8 3 0x80a98f4 0x608f4 0x449c .bss - 0 0 0x4 0 + 0 0 0x4 0 [17] 2 0 0 0x608f4 0x9b90 .symtab - 18 371 0x4 0x10 + 18 371 0x4 0x10 [18] 3 0 0 0x6a484 0x8526 .strtab - 0 0 0x1 0 + 0 0 0x1 0 [19] 3 0 0 0x729aa 0x93 .shstrtab - 0 0 0x1 0 + 0 0 0x1 0 [20] 1 0 0 0x72a3d 0x68b7 .comment - 0 0 0x1 0 + 0 0 0x1 0 raid:/nfs/raid/src/dist-18.56/src> dump -h xemacs @@ -167,67 +172,67 @@ Link Info Adralgn Entsize [1] 1 2 0x80480d4 0xd4 0x13 .interp - 0 0 0x1 0 + 0 0 0x1 0 [2] 5 2 0x80480e8 0xe8 0x388 .hash - 3 0 0x4 0x4 + 3 0 0x4 0x4 [3] 11 2 0x8048470 0x470 0x7f0 .dynsym - 4 1 0x4 0x10 + 4 1 0x4 0x10 [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr - 0 0 0x1 0 + 0 0 0x1 0 [5] 9 2 0x8049010 0x1010 0x338 .rel.plt - 3 7 0x4 0x8 + 3 7 0x4 0x8 [6] 1 6 0x8049348 0x1348 0x3 .init - 0 0 0x4 0 + 0 0 0x4 0 [7] 1 6 0x804934c 0x134c 0x680 .plt - 0 0 0x4 0x4 + 0 0 0x4 0x4 [8] 1 6 0x80499cc 0x19cc 0x3c56f .text - 0 0 0x4 0 + 0 0 0x4 0 [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini - 0 0 0x4 0 + 0 0 0x4 0 [10] 1 2 0x8085f40 0x3df40 0x69c .rodata - 0 0 0x4 0 + 0 0 0x4 0 [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1 - 0 0 0x4 0 + 0 0 0x4 0 [12] 1 3 0x8088330 0x3f330 0x20afc .data - 0 0 0x4 0 + 0 0 0x4 0 [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1 - 0 0 0x4 0 + 0 0 0x4 0 [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got - 0 0 0x4 0x4 + 0 0 0x4 0x4 [15] 6 3 0x80a9874 0x60874 0x80 .dynamic - 4 0 0x4 0x8 + 4 0 0x4 0x8 [16] 8 3 0x80c6800 0x7d800 0 .bss - 0 0 0x4 0 + 0 0 0x4 0 [17] 2 0 0 0x7d800 0x9b90 .symtab - 18 371 0x4 0x10 + 18 371 0x4 0x10 [18] 3 0 0 0x87390 0x8526 .strtab - 0 0 0x1 0 + 0 0 0x1 0 [19] 3 0 0 0x8f8b6 0x93 .shstrtab - 0 0 0x1 0 + 0 0 0x1 0 [20] 1 0 0 0x8f949 0x68b7 .comment - 0 0 0x1 0 + 0 0 0x1 0 [21] 1 3 0x80a98f4 0x608f4 0x1cf0c .data - 0 0 0x4 0 + 0 0 0x4 0 * This is an example of how the file header is changed. "Shoff" is * the section header offset within the file. Since that table is @@ -277,20 +282,20 @@ Type Offset Vaddr Paddr Filesz Memsz Flags Align -6 0x34 0x8048034 0 -0xa0 0xa0 5 0 +6 0x34 0x8048034 0 +0xa0 0xa0 5 0 -3 0xd4 0 0 -0x13 0 4 0 +3 0xd4 0 0 +0x13 0 4 0 -1 0x34 0x8048034 0 -0x3f2f9 0x3f2f9 5 0x1000 +1 0x34 0x8048034 0 +0x3f2f9 0x3f2f9 5 0x1000 -1 0x3f330 0x8088330 0 -0x215c4 0x25a60 7 0x1000 +1 0x3f330 0x8088330 0 +0x215c4 0x25a60 7 0x1000 -2 0x60874 0x80a9874 0 -0x80 0 7 0 +2 0x60874 0x80a9874 0 +0x80 0 7 0 raid:/nfs/raid/src/dist-18.56/src> dump -o xemacs @@ -299,42 +304,42 @@ Type Offset Vaddr Paddr Filesz Memsz Flags Align -6 0x34 0x8048034 0 -0xa0 0xa0 5 0 +6 0x34 0x8048034 0 +0xa0 0xa0 5 0 -3 0xd4 0 0 -0x13 0 4 0 +3 0xd4 0 0 +0x13 0 4 0 -1 0x34 0x8048034 0 -0x3f2f9 0x3f2f9 5 0x1000 +1 0x34 0x8048034 0 +0x3f2f9 0x3f2f9 5 0x1000 -1 0x3f330 0x8088330 0 -0x3e4d0 0x3e4d0 7 0x1000 +1 0x3f330 0x8088330 0 +0x3e4d0 0x3e4d0 7 0x1000 -2 0x60874 0x80a9874 0 -0x80 0 7 0 +2 0x60874 0x80a9874 0 +0x80 0 7 0 */ -/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc. - * +/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc. + * * The above mechanism does not work if the unexeced ELF file is being - * re-layout by other applications (such as `strip'). All the applications + * re-layout by other applications (such as `strip'). All the applications * that re-layout the internal of ELF will layout all sections in ascending - * order of their file offsets. After the re-layout, the data2 section will - * still be the LAST section in the section header vector, but its file offset + * order of their file offsets. After the re-layout, the data2 section will + * still be the LAST section in the section header vector, but its file offset * is now being pushed far away down, and causes part of it not to be mapped - * in (ie. not covered by the load segment entry in PHDR vector), therefore + * in (ie. not covered by the load segment entry in PHDR vector), therefore * causes the new binary to fail. * * The solution is to modify the unexec algorithm to insert the new data2 * section header right before the new bss section header, so their file - * offsets will be in the ascending order. Since some of the section's (all - * sections AFTER the bss section) indexes are now changed, we also need to - * modify some fields to make them point to the right sections. This is done + * offsets will be in the ascending order. Since some of the section's (all + * sections AFTER the bss section) indexes are now changed, we also need to + * modify some fields to make them point to the right sections. This is done * by macro PATCH_INDEX. All the fields that need to be patched are: - * + * * 1. ELF header e_shstrndx field. * 2. section header sh_link and sh_info field. * 3. symbol table entry st_shndx field. @@ -346,203 +351,246 @@ Link Info Adralgn Entsize [1] 1 2 0x80480d4 0xd4 0x13 .interp - 0 0 0x1 0 + 0 0 0x1 0 [2] 5 2 0x80480e8 0xe8 0x388 .hash - 3 0 0x4 0x4 + 3 0 0x4 0x4 [3] 11 2 0x8048470 0x470 0x7f0 .dynsym - 4 1 0x4 0x10 + 4 1 0x4 0x10 [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr - 0 0 0x1 0 + 0 0 0x1 0 [5] 9 2 0x8049010 0x1010 0x338 .rel.plt - 3 7 0x4 0x8 + 3 7 0x4 0x8 [6] 1 6 0x8049348 0x1348 0x3 .init - 0 0 0x4 0 + 0 0 0x4 0 [7] 1 6 0x804934c 0x134c 0x680 .plt - 0 0 0x4 0x4 + 0 0 0x4 0x4 [8] 1 6 0x80499cc 0x19cc 0x3c56f .text - 0 0 0x4 0 + 0 0 0x4 0 [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini - 0 0 0x4 0 + 0 0 0x4 0 [10] 1 2 0x8085f40 0x3df40 0x69c .rodata - 0 0 0x4 0 + 0 0 0x4 0 [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1 - 0 0 0x4 0 + 0 0 0x4 0 [12] 1 3 0x8088330 0x3f330 0x20afc .data - 0 0 0x4 0 + 0 0 0x4 0 [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1 - 0 0 0x4 0 + 0 0 0x4 0 [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got - 0 0 0x4 0x4 + 0 0 0x4 0x4 [15] 6 3 0x80a9874 0x60874 0x80 .dynamic - 4 0 0x4 0x8 + 4 0 0x4 0x8 [16] 1 3 0x80a98f4 0x608f4 0x1cf0c .data - 0 0 0x4 0 + 0 0 0x4 0 [17] 8 3 0x80c6800 0x7d800 0 .bss - 0 0 0x4 0 + 0 0 0x4 0 [18] 2 0 0 0x7d800 0x9b90 .symtab - 19 371 0x4 0x10 + 19 371 0x4 0x10 [19] 3 0 0 0x87390 0x8526 .strtab - 0 0 0x1 0 + 0 0 0x1 0 [20] 3 0 0 0x8f8b6 0x93 .shstrtab - 0 0 0x1 0 + 0 0 0x1 0 [21] 1 0 0 0x8f949 0x68b7 .comment - 0 0 0x1 0 + 0 0 0x1 0 */ - - /* More mods, by Jack Repenning , Fri Aug 11 15:45:52 1995 - - Same algorithm as immediately above. However, the detailed - calculations of the various locations needed significant - overhaul. - - At the point of the old .bss, the file offsets and the memory - addresses do distinct, slightly snaky things: - - offset of .bss is meaningless and unpredictable - addr of .bss is meaningful - alignment of .bss is important to addr, so there may be a small - gap in address range before start of bss - offset of next section is rounded up modulo 0x1000 - the hole so-introduced is zero-filled, so it can be mapped in as - the first partial-page of bss (the rest of the bss is mapped from - /dev/zero) - I suppose you could view this not as a hole, but as the beginning - of the bss, actually present in the file. But you should not - push that worldview too far, as the linker still knows that the - "offset" claimed for the bss is unused, and seems not always - careful about setting it. - - We are doing all our tricks at this same rather complicated - location (isn't life fun?): - - insert a new data section to contain now-initialized old bss and - heap - define a zero-length bss just so there is one - - The offset of the new data section is dictated by its current - address (which, of course, we want also to be its addr): the - loader maps in the whole file region containing old data, rodata, - got, and new data as a single mapped segment, starting at the - address of the first chunk; the rest have to be laid out in the - file such that the map into the right spots. That is: + +#ifndef emacs +#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1) +#include +#else +#include +extern void fatal (const char *, ...); +#endif - offset(newdata) == - addrInRunningMemory(newdata)-aIRM(olddata) - + offset(oldData) - - This would not necessarily match the oldbss offset, even if it - were carefully calculated! We must compute this. - - The linker that built temacs has also already arranged that - olddata is properly page-aligned (not necessarily beginning on a - page, but rather that a page's worth of the low bits of addr and - offset match). We preserve this. - - addr(bss) is alignment-constrained from the end of the new data. - Since we base endof(newdata) on sbrk(), we have a page boundary - (in both offset and addr) and meet any alignment constraint, - needing no alignment adjustment of this location and no - mini-hole. Or, if you like, we've allowed sbrk() to "compute" - the mini-hole size for us. - - That puts newbss beginning on a page boundary, both in offset and - addr. (offset(bss) is still meaningless, but what the heck, - we'll fix it up.) - - Since newbss has zero length, and its offset (however - meaningless) is page aligned, we place the next section exactly - there, with no hole needed to restore page alignment. - - So, the shift for all sections beyond the playing field is: - - new_bss_addr - roundup(old_bss_addr,0x1000) - - */ - /* Still more mods... Olivier Galibert 19971705 - - support for .sbss section (automagically changed to data without - name change) - - support for 64bits ABI (will need a bunch of fixes in the rest - of the code before it works - */ - #include #include #include #include -#include #include #include #include +#if !defined (__NetBSD__) && !defined (__OpenBSD__) #include -#include /* for HDRR declaration */ +#endif #include -#include -#include "lisp.h" +#if defined (__sony_news) && defined (_SYSTYPE_SYSV) +#include +#include +#endif /* __sony_news && _SYSTYPE_SYSV */ +#if __sgi +#include /* for HDRR declaration */ +#endif /* __sgi */ -/* in 64bits mode, use 64bits elf */ -#ifdef _ABI64 -typedef Elf64_Shdr l_Elf_Shdr; -typedef Elf64_Phdr l_Elf_Phdr; -typedef Elf64_Ehdr l_Elf_Ehdr; -typedef Elf64_Addr l_Elf_Addr; -typedef Elf64_Word l_Elf_Word; -typedef Elf64_Off l_Elf_Off; -typedef Elf64_Sym l_Elf_Sym; -#else -typedef Elf32_Shdr l_Elf_Shdr; -typedef Elf32_Phdr l_Elf_Phdr; -typedef Elf32_Ehdr l_Elf_Ehdr; -typedef Elf32_Addr l_Elf_Addr; -typedef Elf32_Word l_Elf_Word; -typedef Elf32_Off l_Elf_Off; -typedef Elf32_Sym l_Elf_Sym; +#if defined (__alpha__) && !defined (__NetBSD__) && !defined (__OpenBSD__) +/* Declare COFF debugging symbol table. This used to be in + /usr/include/sym.h, but this file is no longer included in Red Hat + 5.0 and presumably in any other glibc 2.x based distribution. */ +typedef struct { + short magic; + short vstamp; + int ilineMax; + int idnMax; + int ipdMax; + int isymMax; + int ioptMax; + int iauxMax; + int issMax; + int issExtMax; + int ifdMax; + int crfd; + int iextMax; + long cbLine; + long cbLineOffset; + long cbDnOffset; + long cbPdOffset; + long cbSymOffset; + long cbOptOffset; + long cbAuxOffset; + long cbSsOffset; + long cbSsExtOffset; + long cbFdOffset; + long cbRfdOffset; + long cbExtOffset; +} HDRR, *pHDRR; +#define cbHDRR sizeof(HDRR) +#define hdrNil ((pHDRR)0) #endif +#ifdef __NetBSD__ +/* + * NetBSD does not have normal-looking user-land ELF support. + */ +# if defined __alpha__ || defined __sparc_v9__ +# define ELFSIZE 64 +# else +# define ELFSIZE 32 +# endif +# include + +# ifndef PT_LOAD +# define PT_LOAD Elf_pt_load +# if 0 /* was in pkgsrc patches for 20.7 */ +# define SHT_PROGBITS Elf_sht_progbits +# endif +# define SHT_SYMTAB Elf_sht_symtab +# define SHT_DYNSYM Elf_sht_dynsym +# define SHT_NULL Elf_sht_null +# define SHT_NOBITS Elf_sht_nobits +# define SHT_REL Elf_sht_rel +# define SHT_RELA Elf_sht_rela + +# define SHN_UNDEF Elf_eshn_undefined +# define SHN_ABS Elf_eshn_absolute +# define SHN_COMMON Elf_eshn_common +# endif /* !PT_LOAD */ + +# ifdef __alpha__ +# include +# define HDRR struct ecoff_symhdr +# define pHDRR HDRR * +# endif /* __alpha__ */ + +#ifdef __mips__ /* was in pkgsrc patches for 20.7 */ +# define SHT_MIPS_DEBUG DT_MIPS_FLAGS +# define HDRR struct Elf_Shdr +#endif /* __mips__ */ +#endif /* __NetBSD__ */ + +#ifdef __OpenBSD__ +# include +#endif + +#if __GNU_LIBRARY__ - 0 >= 6 +# include /* get ElfW etc */ +#endif + +#ifndef ElfW +# ifdef __STDC__ +# define ElfBitsW(bits, type) Elf##bits##_##type +# else +# define ElfBitsW(bits, type) Elf/**/bits/**/_/**/type +# endif +# ifdef _LP64 +# define ELFSIZE 64 +# else +# define ELFSIZE 32 +# endif + /* This macro expands `bits' before invoking ElfBitsW. */ +# define ElfExpandBitsW(bits, type) ElfBitsW (bits, type) +# define ElfW(type) ElfExpandBitsW (ELFSIZE, type) +#endif + +#ifndef ELF_BSS_SECTION_NAME +#define ELF_BSS_SECTION_NAME ".bss" +#endif /* Get the address of a particular section or program header entry, * accounting for the size of the entries. */ +/* + On PPC Reference Platform running Solaris 2.5.1 + the plt section is also of type NOBI like the bss section. + (not really stored) and therefore sections after the bss + section start at the plt offset. The plt section is always + the one just before the bss section. + Thus, we modify the test from + if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset) + to + if (NEW_SECTION_H (nn).sh_offset >= + OLD_SECTION_H (old_bss_index-1).sh_offset) + This is just a hack. We should put the new data section + before the .plt section. + And we should not have this routine at all but use + the libelf library to read the old file and create the new + file. + The changed code is minimal and depends on prep set in m/prep.h + Erik Deumens + Quantum Theory Project + University of Florida + deumens@qtp.ufl.edu + Apr 23, 1996 + */ #define OLD_SECTION_H(n) \ - (*(l_Elf_Shdr *) ((byte *) old_section_h + old_file_h->e_shentsize * (n))) + (*(ElfW(Shdr) *) ((byte *) old_section_h + old_file_h->e_shentsize * (n))) #define NEW_SECTION_H(n) \ - (*(l_Elf_Shdr *) ((byte *) new_section_h + new_file_h->e_shentsize * (n))) + (*(ElfW(Shdr) *) ((byte *) new_section_h + new_file_h->e_shentsize * (n))) #define OLD_PROGRAM_H(n) \ - (*(l_Elf_Phdr *) ((byte *) old_program_h + old_file_h->e_phentsize * (n))) + (*(ElfW(Phdr) *) ((byte *) old_program_h + old_file_h->e_phentsize * (n))) #define NEW_PROGRAM_H(n) \ - (*(l_Elf_Phdr *) ((byte *) new_program_h + new_file_h->e_phentsize * (n))) + (*(ElfW(Phdr) *) ((byte *) new_program_h + new_file_h->e_phentsize * (n))) #define PATCH_INDEX(n) \ do { \ - if ((n) >= old_bss_index) \ + if ((int) (n) >= old_bss_index) \ (n)++; } while (0) typedef unsigned char byte; /* Round X up to a multiple of Y. */ -static int -round_up (int x, int y) +static ElfW(Addr) +round_up (ElfW(Addr) x, ElfW(Addr) y) { int rem = x % y; if (rem == 0) @@ -561,8 +609,8 @@ find_section (char *name, char *section_names, char *file_name, - l_Elf_Ehdr *old_file_h, - l_Elf_Shdr *old_section_h, + ElfW(Ehdr) *old_file_h, + ElfW(Shdr) *old_section_h, int noerror) { int idx; @@ -582,7 +630,7 @@ if (noerror) return -1; else - fatal ("Can't find .bss in %s.\n", file_name); + fatal ("Can't find %s in %s.\n", name, file_name); } return idx; @@ -597,41 +645,40 @@ * .data section, and inserting an empty .bss immediately afterwards. * */ -int +void unexec (char *new_name, char *old_name, uintptr_t data_start, uintptr_t bss_start, uintptr_t entry_address) { - extern uintptr_t bss_end; int new_file, old_file, new_file_size; - /* Pointers to the base of the image of the two files. */ + /* Pointers to the base of the image of the two files. */ caddr_t old_base, new_base; /* Pointers to the file, program and section headers for the old and new - files. */ - l_Elf_Ehdr *old_file_h, *new_file_h; - l_Elf_Phdr *old_program_h, *new_program_h; - l_Elf_Shdr *old_section_h, *new_section_h; - l_Elf_Shdr *oldbss; + * files. + */ + ElfW(Ehdr) *old_file_h, *new_file_h; + ElfW(Phdr) *old_program_h, *new_program_h; + ElfW(Shdr) *old_section_h, *new_section_h; - /* Point to the section name table in the old file. */ + /* Point to the section name table in the old file */ char *old_section_names; - l_Elf_Addr old_bss_addr, new_bss_addr; - l_Elf_Addr old_base_addr; - l_Elf_Word old_bss_size, new_data2_size; - l_Elf_Off new_data2_offset, new_base_offset; - l_Elf_Addr new_data2_addr; - l_Elf_Addr new_offsets_shift; + ElfW(Addr) old_bss_addr, new_bss_addr; + ElfW(Word) old_bss_size, new_data2_size; + ElfW(Off) new_data2_offset; + ElfW(Addr) new_data2_addr; - int n, nn, old_bss_index, old_data_index; - int old_mdebug_index, old_sbss_index; + int n, nn; + int old_bss_index, old_sbss_index; + int old_data_index, new_data2_index; + int old_mdebug_index; struct stat stat_buf; - /* Open the old file & map it into the address space. */ + /* Open the old file & map it into the address space. */ old_file = open (old_name, O_RDONLY); @@ -639,43 +686,58 @@ fatal ("Can't open %s for reading: errno %d\n", old_name, errno); if (fstat (old_file, &stat_buf) == -1) - fatal ("Can't fstat(%s): errno %d\n", old_name, errno); + fatal ("Can't fstat (%s): errno %d\n", old_name, errno); - old_base = mmap (0, stat_buf.st_size, PROT_READ, MAP_SHARED, old_file, 0); + old_base = (caddr_t) mmap ((caddr_t) 0, stat_buf.st_size, + PROT_READ, MAP_SHARED, old_file, 0); if (old_base == (caddr_t) -1) - fatal ("Can't mmap(%s): errno %d\n", old_name, errno); + fatal ("Can't mmap (%s): errno %d\n", old_name, errno); #ifdef DEBUG - fprintf (stderr, "mmap(%s, %x) -> %x\n", old_name, stat_buf.st_size, + fprintf (stderr, "mmap (%s, %x) -> %x\n", old_name, stat_buf.st_size, old_base); #endif - /* Get pointers to headers & section names. */ + /* Get pointers to headers & section names */ - old_file_h = (l_Elf_Ehdr *) old_base; - old_program_h = (l_Elf_Phdr *) ((byte *) old_base + old_file_h->e_phoff); - old_section_h = (l_Elf_Shdr *) ((byte *) old_base + old_file_h->e_shoff); - old_section_names - = (char *) old_base + OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset; + old_file_h = (ElfW(Ehdr) *) old_base; + old_program_h = (ElfW(Phdr) *) ((byte *) old_base + old_file_h->e_phoff); + old_section_h = (ElfW(Shdr) *) ((byte *) old_base + old_file_h->e_shoff); + old_section_names = (char *) old_base + + OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset; /* Find the mdebug section, if any. */ old_mdebug_index = find_section (".mdebug", old_section_names, old_name, old_file_h, old_section_h, 1); - /* Find the .sbss section, if any. */ + /* Find the old .bss section. Figure out parameters of the new + * data2 and bss sections. + */ + + old_bss_index = find_section (".bss", old_section_names, + old_name, old_file_h, old_section_h, 0); old_sbss_index = find_section (".sbss", old_section_names, old_name, old_file_h, old_section_h, 1); - - if (old_sbss_index != -1 && (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS)) - old_sbss_index = -1; + if (old_sbss_index != -1) + if (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS) + old_sbss_index = -1; - /* Find the old .bss section. */ - - old_bss_index = find_section (".bss", old_section_names, - old_name, old_file_h, old_section_h, 0); + if (old_sbss_index == -1) + { + old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr; + old_bss_size = OLD_SECTION_H (old_bss_index).sh_size; + new_data2_index = old_bss_index; + } + else + { + old_bss_addr = OLD_SECTION_H (old_sbss_index).sh_addr; + old_bss_size = OLD_SECTION_H (old_bss_index).sh_size + + OLD_SECTION_H (old_sbss_index).sh_size; + new_data2_index = old_sbss_index; + } /* Find the old .data section. Figure out parameters of the new data2 and bss sections. */ @@ -683,68 +745,64 @@ old_data_index = find_section (".data", old_section_names, old_name, old_file_h, old_section_h, 0); - old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr; - old_bss_size = OLD_SECTION_H (old_bss_index).sh_size; - old_base_addr = old_sbss_index == -1 ? old_bss_addr : OLD_SECTION_H (old_sbss_index).sh_addr; -#if defined(emacs) || !defined(DEBUG) - bss_end = (uintptr_t) sbrk (0); - new_bss_addr = (l_Elf_Addr) bss_end; +#if defined (emacs) || !defined (DEBUG) + new_bss_addr = (ElfW(Addr)) sbrk (0); #else - new_bss_addr = old_bss_addr + old_bss_size + 0x1234; + new_bss_addr = old_bss_addr + old_bss_size + 0x1234; #endif - new_data2_addr = old_bss_addr; - new_data2_size = new_bss_addr - old_bss_addr; + new_data2_addr = old_bss_addr; + new_data2_size = new_bss_addr - old_bss_addr; new_data2_offset = OLD_SECTION_H (old_data_index).sh_offset + (new_data2_addr - OLD_SECTION_H (old_data_index).sh_addr); - new_base_offset = OLD_SECTION_H (old_data_index).sh_offset + - (old_base_addr - OLD_SECTION_H (old_data_index).sh_addr); - new_offsets_shift = new_bss_addr - (old_base_addr & ~0xfff) + - ((old_base_addr & 0xfff) ? 0x1000 : 0); #ifdef DEBUG fprintf (stderr, "old_bss_index %d\n", old_bss_index); fprintf (stderr, "old_bss_addr %x\n", old_bss_addr); fprintf (stderr, "old_bss_size %x\n", old_bss_size); - fprintf (stderr, "old_base_addr %x\n", old_base_addr); fprintf (stderr, "new_bss_addr %x\n", new_bss_addr); fprintf (stderr, "new_data2_addr %x\n", new_data2_addr); fprintf (stderr, "new_data2_size %x\n", new_data2_size); fprintf (stderr, "new_data2_offset %x\n", new_data2_offset); - fprintf (stderr, "new_offsets_shift %x\n", new_offsets_shift); #endif if ((unsigned) new_bss_addr < (unsigned) old_bss_addr + old_bss_size) - fatal (".bss shrank when undumping???\n"); + fatal (".bss shrank when undumping???\n", 0, 0); /* Set the output file to the right size and mmap it. Set - pointers to various interesting objects. stat_buf still has - old_file data. */ + * pointers to various interesting objects. stat_buf still has + * old_file data. + */ new_file = open (new_name, O_RDWR | O_CREAT, 0666); if (new_file < 0) fatal ("Can't creat (%s): errno %d\n", new_name, errno); - new_file_size = stat_buf.st_size /* old file size */ - + old_file_h->e_shentsize /* one new section header */ - + new_offsets_shift; /* trailing section shift */ + new_file_size = stat_buf.st_size + old_file_h->e_shentsize + new_data2_size; if (ftruncate (new_file, new_file_size)) fatal ("Can't ftruncate (%s): errno %d\n", new_name, errno); - new_base = mmap (0, new_file_size, PROT_READ | PROT_WRITE, MAP_SHARED, - new_file, 0); +#ifdef UNEXEC_USE_MAP_PRIVATE + new_base = (caddr_t) mmap ((caddr_t) 0, new_file_size, + PROT_READ | PROT_WRITE, + MAP_PRIVATE, new_file, 0); +#else + new_base = (caddr_t) mmap ((caddr_t) 0, new_file_size, + PROT_READ | PROT_WRITE, + MAP_SHARED, new_file, 0); +#endif if (new_base == (caddr_t) -1) fatal ("Can't mmap (%s): errno %d\n", new_name, errno); - new_file_h = (l_Elf_Ehdr *) new_base; - new_program_h = (l_Elf_Phdr *) ((byte *) new_base + old_file_h->e_phoff); - new_section_h - = (l_Elf_Shdr *) ((byte *) new_base + old_file_h->e_shoff - + new_offsets_shift); + new_file_h = (ElfW(Ehdr) *) new_base; + new_program_h = (ElfW(Phdr) *) ((byte *) new_base + old_file_h->e_phoff); + new_section_h = (ElfW(Shdr) *) + ((byte *) new_base + old_file_h->e_shoff + new_data2_size); /* Make our new file, program and section headers as copies of the - originals. */ + * originals. + */ memcpy (new_file_h, old_file_h, old_file_h->e_ehsize); memcpy (new_program_h, old_program_h, @@ -754,12 +812,12 @@ PATCH_INDEX (new_file_h->e_shstrndx); /* Fix up file header. We'll add one section. Section header is - further away now. */ + * further away now. + */ - new_file_h->e_shoff += new_offsets_shift; + new_file_h->e_shoff += new_data2_size; new_file_h->e_shnum += 1; - #ifdef DEBUG fprintf (stderr, "Old section offset %x\n", old_file_h->e_shoff); fprintf (stderr, "Old section count %d\n", old_file_h->e_shnum); @@ -768,164 +826,248 @@ #endif /* Fix up a new program header. Extend the writable data segment so - that the bss area is covered too. Find that segment by looking - for one that starts before and ends after the .bss and it PT_LOADable. - Put a loop at the end to adjust the offset and address of any segment - that is above data2, just in case we decide to allow this later. */ + * that the bss area is covered too. Find that segment by looking + * for a segment that ends just before the .bss area. Make sure + * that no segments are above the new .data2. Put a loop at the end + * to adjust the offset and address of any segment that is above + * data2, just in case we decide to allow this later. + */ - oldbss = &OLD_SECTION_H(old_bss_index); for (n = new_file_h->e_phnum - 1; n >= 0; n--) { /* Compute maximum of all requirements for alignment of section. */ - l_Elf_Phdr * ph = (l_Elf_Phdr *)((byte *) new_program_h + - new_file_h->e_phentsize*(n)); -#ifdef DEBUG - printf ("%d @ %0x + %0x against %0x + %0x", - n, ph->p_vaddr, ph->p_memsz, - oldbss->sh_addr, oldbss->sh_size); -#endif - if ((ph->p_type == PT_LOAD) && - (ph->p_vaddr <= oldbss->sh_addr) && - ((ph->p_vaddr + ph->p_memsz)>=(oldbss->sh_addr + oldbss->sh_size))) { - ph->p_filesz += new_offsets_shift; - ph->p_memsz = ph->p_filesz; -#ifdef DEBUG - puts (" That's the one!"); - fflush (stdout); -#endif - break; - } -#ifdef DEBUG - putchar ('\n'); - fflush (stdout); -#endif + ElfW(Word) alignment = (NEW_PROGRAM_H (n)).p_align; + if ((OLD_SECTION_H (old_bss_index)).sh_addralign > alignment) + alignment = OLD_SECTION_H (old_bss_index).sh_addralign; + +#ifdef __sgi + /* According to r02kar@x4u2.desy.de (Karsten Kuenne) + and oliva@gnu.org (Alexandre Oliva), on IRIX 5.2, we + always get "Program segment above .bss" when dumping + when the executable doesn't have an sbss section. */ + if (old_sbss_index != -1) +#endif /* __sgi */ + if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz + > (old_sbss_index == -1 + ? old_bss_addr + : round_up (old_bss_addr, alignment))) + fatal ("Program segment above .bss in %s\n", old_name, 0); + + if (NEW_PROGRAM_H (n).p_type == PT_LOAD + && (round_up ((NEW_PROGRAM_H (n)).p_vaddr + + (NEW_PROGRAM_H (n)).p_filesz, + alignment) + == round_up (old_bss_addr, alignment))) + break; } if (n < 0) - fatal ("Couldn't find segment next to %s in %s\n", - old_sbss_index == -1 ? ".sbss" : ".bss", old_name); + fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0); + /* Make sure that the size includes any padding before the old .bss + section. */ + NEW_PROGRAM_H (n).p_filesz = new_bss_addr - NEW_PROGRAM_H (n).p_vaddr; + NEW_PROGRAM_H (n).p_memsz = NEW_PROGRAM_H (n).p_filesz; -#if 1 /* Maybe allow section after data2 - does this ever happen? */ +#if 0 /* Maybe allow section after data2 - does this ever happen? */ for (n = new_file_h->e_phnum - 1; n >= 0; n--) { if (NEW_PROGRAM_H (n).p_vaddr && NEW_PROGRAM_H (n).p_vaddr >= new_data2_addr) - NEW_PROGRAM_H (n).p_vaddr += new_offsets_shift - old_bss_size; + NEW_PROGRAM_H (n).p_vaddr += new_data2_size - old_bss_size; if (NEW_PROGRAM_H (n).p_offset >= new_data2_offset) - NEW_PROGRAM_H (n).p_offset += new_offsets_shift; + NEW_PROGRAM_H (n).p_offset += new_data2_size; } #endif /* Fix up section headers based on new .data2 section. Any section - whose offset or virtual address is after the new .data2 section - gets its value adjusted. .bss size becomes zero and new address - is set. data2 section header gets added by copying the existing - .data header and modifying the offset, address and size. */ - for (old_data_index = 1; old_data_index < old_file_h->e_shnum; + * whose offset or virtual address is after the new .data2 section + * gets its value adjusted. .bss size becomes zero and new address + * is set. data2 section header gets added by copying the existing + * .data header and modifying the offset, address and size. + */ + for (old_data_index = 1; old_data_index < (int) old_file_h->e_shnum; old_data_index++) if (!strcmp (old_section_names + OLD_SECTION_H (old_data_index).sh_name, ".data")) break; if (old_data_index == old_file_h->e_shnum) - fatal ("Can't find .data in %s.\n", old_name); + fatal ("Can't find .data in %s.\n", old_name, 0); - /* Walk through all section headers, insert the new data2 section right - before the new bss section. */ - for (n = 1, nn = 1; n < old_file_h->e_shnum; n++, nn++) + /* Walk through all section headers, insert the new data2 section right + before the new bss section. */ + for (n = 1, nn = 1; n < (int) old_file_h->e_shnum; n++, nn++) { caddr_t src; - - /* XEmacs change: */ - if (n < old_bss_index) + /* If it is (s)bss section, insert the new data2 section before it. */ + /* new_data2_index is the index of either old_sbss or old_bss, that was + chosen as a section for new_data2. */ + if (n == new_data2_index) { - memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), - old_file_h->e_shentsize); - - } - else if (n == old_bss_index) - { - - /* If it is bss section, insert the new data2 section before it. */ - /* Steal the data section header for this data2 section. */ + /* Steal the data section header for this data2 section. */ memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (old_data_index), new_file_h->e_shentsize); - + NEW_SECTION_H (nn).sh_addr = new_data2_addr; NEW_SECTION_H (nn).sh_offset = new_data2_offset; NEW_SECTION_H (nn).sh_size = new_data2_size; /* Use the bss section's alignment. This will assure that the new data2 section always be placed in the same spot as the old - bss section by any other application. */ + bss section by any other application. */ NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (n).sh_addralign; - /* Now copy over what we have in the memory now. */ - memcpy (NEW_SECTION_H (nn).sh_offset + new_base, - (caddr_t) OLD_SECTION_H (n).sh_addr, + /* Now copy over what we have in the memory now. */ + memcpy (NEW_SECTION_H (nn).sh_offset + new_base, + (caddr_t) OLD_SECTION_H (n).sh_addr, new_data2_size); nn++; - memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), - old_file_h->e_shentsize); - - /* The new bss section's size is zero, and its file offset and virtual - address should be off by NEW_OFFSETS_SHIFT. */ - NEW_SECTION_H (nn).sh_offset += new_offsets_shift; - NEW_SECTION_H (nn).sh_addr = new_bss_addr; + } + + memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), + old_file_h->e_shentsize); + + if (n == old_bss_index + /* The new bss and sbss section's size is zero, and its file offset + and virtual address should be off by NEW_DATA2_SIZE. */ + || n == old_sbss_index + ) + { + /* NN should be `old_s?bss_index + 1' at this point. */ + NEW_SECTION_H (nn).sh_offset = + NEW_SECTION_H (new_data2_index).sh_offset + new_data2_size; + NEW_SECTION_H (nn).sh_addr = + NEW_SECTION_H (new_data2_index).sh_addr + new_data2_size; /* Let the new bss section address alignment be the same as the - section address alignment followed the old bss section, so - this section will be placed in exactly the same place. */ - NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (n).sh_addralign; + section address alignment followed the old bss section, so + this section will be placed in exactly the same place. */ + NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (nn).sh_addralign; NEW_SECTION_H (nn).sh_size = 0; } - else /* n > old_bss_index */ - memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), - old_file_h->e_shentsize); - - /* Any section that was original placed AFTER the bss - section must now be adjusted by NEW_OFFSETS_SHIFT. */ + else + { + /* Any section that was original placed AFTER the bss + section should now be off by NEW_DATA2_SIZE. */ +#ifdef SOLARIS_POWERPC + /* On PPC Reference Platform running Solaris 2.5.1 + the plt section is also of type NOBI like the bss section. + (not really stored) and therefore sections after the bss + section start at the plt offset. The plt section is always + the one just before the bss section. + It would be better to put the new data section before + the .plt section, or use libelf instead. + Erik Deumens, deumens@qtp.ufl.edu. */ + if (NEW_SECTION_H (nn).sh_offset + >= OLD_SECTION_H (old_bss_index-1).sh_offset) + NEW_SECTION_H (nn).sh_offset += new_data2_size; +#else + if (round_up (NEW_SECTION_H (nn).sh_offset, + OLD_SECTION_H (old_bss_index).sh_addralign) + >= new_data2_offset) + NEW_SECTION_H (nn).sh_offset += new_data2_size; +#endif + /* Any section that was originally placed after the section + header table should now be off by the size of one section + header table entry. */ + if (NEW_SECTION_H (nn).sh_offset > new_file_h->e_shoff) + NEW_SECTION_H (nn).sh_offset += new_file_h->e_shentsize; + } - if (NEW_SECTION_H (nn).sh_offset >= new_base_offset) - NEW_SECTION_H (nn).sh_offset += new_offsets_shift; - /* If any section hdr refers to the section after the new .data - section, make it refer to next one because we have inserted + section, make it refer to next one because we have inserted a new section in between. */ - + PATCH_INDEX (NEW_SECTION_H (nn).sh_link); /* For symbol tables, info is a symbol table index, so don't change it. */ if (NEW_SECTION_H (nn).sh_type != SHT_SYMTAB && NEW_SECTION_H (nn).sh_type != SHT_DYNSYM) PATCH_INDEX (NEW_SECTION_H (nn).sh_info); - - /* Fix the type and alignment for the .sbss section */ - if ((old_sbss_index != -1) && !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".sbss")) - { - NEW_SECTION_H (nn).sh_type = SHT_PROGBITS; - NEW_SECTION_H (nn).sh_offset = round_up (NEW_SECTION_H (nn).sh_offset, - NEW_SECTION_H (nn).sh_addralign); - } - /* Now, start to copy the content of sections. */ + if (old_sbss_index != -1) + if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".sbss")) + { + NEW_SECTION_H (nn).sh_offset = + round_up (NEW_SECTION_H (nn).sh_offset, + NEW_SECTION_H (nn).sh_addralign); + NEW_SECTION_H (nn).sh_type = SHT_PROGBITS; + } + + /* Now, start to copy the content of sections. */ if (NEW_SECTION_H (nn).sh_type == SHT_NULL || NEW_SECTION_H (nn).sh_type == SHT_NOBITS) continue; - - /* Write out the sections. .data, .data1 and .sbss (and data2, called + + /* Write out the sections. .data and .data1 (and data2, called ".data" in the strings table) get copied from the current process instead of the old file. */ - if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data") - || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data1") - || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".got") - || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".sbss")) + if (!strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".data") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".sdata") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".lit4") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".lit8") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".sdata1") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".data1") + || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, + ".sbss")) src = (caddr_t) OLD_SECTION_H (n).sh_addr; else src = old_base + OLD_SECTION_H (n).sh_offset; - + memcpy (NEW_SECTION_H (nn).sh_offset + new_base, src, NEW_SECTION_H (nn).sh_size); - /* Adjust the HDRR offsets in .mdebug and copy the +#ifdef __alpha__ + /* Update Alpha COFF symbol table: */ + if (strcmp (old_section_names + OLD_SECTION_H (n).sh_name, ".mdebug") + == 0) + { + pHDRR symhdr = (pHDRR) (NEW_SECTION_H (nn).sh_offset + new_base); + + symhdr->cbLineOffset += new_data2_size; + symhdr->cbDnOffset += new_data2_size; + symhdr->cbPdOffset += new_data2_size; + symhdr->cbSymOffset += new_data2_size; + symhdr->cbOptOffset += new_data2_size; + symhdr->cbAuxOffset += new_data2_size; + symhdr->cbSsOffset += new_data2_size; + symhdr->cbSsExtOffset += new_data2_size; + symhdr->cbFdOffset += new_data2_size; + symhdr->cbRfdOffset += new_data2_size; + symhdr->cbExtOffset += new_data2_size; + } +#endif /* __alpha__ */ + +#if defined (__sony_news) && defined (_SYSTYPE_SYSV) + if (NEW_SECTION_H (nn).sh_type == SHT_MIPS_DEBUG + && old_mdebug_index != -1) + { + int diff = NEW_SECTION_H(nn).sh_offset + - OLD_SECTION_H(old_mdebug_index).sh_offset; + HDRR *phdr = (HDRR *)(NEW_SECTION_H (nn).sh_offset + new_base); + + if (diff) + { + phdr->cbLineOffset += diff; + phdr->cbDnOffset += diff; + phdr->cbPdOffset += diff; + phdr->cbSymOffset += diff; + phdr->cbOptOffset += diff; + phdr->cbAuxOffset += diff; + phdr->cbSsOffset += diff; + phdr->cbSsExtOffset += diff; + phdr->cbFdOffset += diff; + phdr->cbRfdOffset += diff; + phdr->cbExtOffset += diff; + } + } +#endif /* __sony_news && _SYSTYPE_SYSV */ + +#if __sgi + /* Adjust the HDRR offsets in .mdebug and copy the line data if it's in its usual 'hole' in the object. Makes the new file debuggable with dbx. patches up two problems: the absolute file offsets @@ -943,7 +1085,7 @@ HDRR * o_phdrr = (HDRR *)((byte *)old_base + OLD_SECTION_H (n).sh_offset); HDRR * n_phdrr = (HDRR *)((byte *)new_base + NEW_SECTION_H (nn).sh_offset); - unsigned movement = new_offsets_shift; + unsigned movement = new_data2_size; MDEBUGADJUST (idnMax, cbDnOffset); MDEBUGADJUST (ipdMax, cbPdOffset); @@ -977,27 +1119,106 @@ } } } +#endif /* __sgi */ - /* If it is the symbol table, its st_shndx field needs to be patched. */ + /* If it is the symbol table, its st_shndx field needs to be patched. */ if (NEW_SECTION_H (nn).sh_type == SHT_SYMTAB || NEW_SECTION_H (nn).sh_type == SHT_DYNSYM) { - l_Elf_Shdr *spt = &NEW_SECTION_H (nn); + ElfW(Shdr) *spt = &NEW_SECTION_H (nn); unsigned int num = spt->sh_size / spt->sh_entsize; - l_Elf_Sym * sym = (l_Elf_Sym *) (NEW_SECTION_H (nn).sh_offset - + new_base); + ElfW(Sym) * sym = (ElfW(Sym) *) (NEW_SECTION_H (nn).sh_offset + + new_base); for (; num--; sym++) { - if (sym->st_shndx == SHN_UNDEF - || sym->st_shndx == SHN_ABS - || sym->st_shndx == SHN_COMMON) + if ((sym->st_shndx == SHN_UNDEF) + || (sym->st_shndx == SHN_ABS) + || (sym->st_shndx == SHN_COMMON)) continue; - + PATCH_INDEX (sym->st_shndx); } } } + /* Update the symbol values of _edata and _end. */ + for (n = new_file_h->e_shnum - 1; n; n--) + { + byte *symnames; + ElfW(Sym) *symp, *symendp; + + if (NEW_SECTION_H (n).sh_type != SHT_DYNSYM + && NEW_SECTION_H (n).sh_type != SHT_SYMTAB) + continue; + + symnames = ((byte *) new_base + + NEW_SECTION_H (NEW_SECTION_H (n).sh_link).sh_offset); + symp = (ElfW(Sym) *) (NEW_SECTION_H (n).sh_offset + new_base); + symendp = (ElfW(Sym) *) ((byte *)symp + NEW_SECTION_H (n).sh_size); + + for (; symp < symendp; symp ++) + if (strcmp ((char *) (symnames + symp->st_name), "_end") == 0 + || strcmp ((char *) (symnames + symp->st_name), "end") == 0 + || strcmp ((char *) (symnames + symp->st_name), "_edata") == 0 + || strcmp ((char *) (symnames + symp->st_name), "edata") == 0) + memcpy (&symp->st_value, &new_bss_addr, sizeof (new_bss_addr)); + } + + /* This loop seeks out relocation sections for the data section, so + that it can undo relocations performed by the runtime linker. */ + for (n = new_file_h->e_shnum - 1; n; n--) + { + ElfW(Shdr) section = NEW_SECTION_H (n); + switch (section.sh_type) { + default: + break; + case SHT_REL: + case SHT_RELA: + /* This code handles two different size structs, but there should + be no harm in that provided that r_offset is always the first + member. */ + nn = section.sh_info; + if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".sdata") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".lit4") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".lit8") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".sdata1") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".data1")) + { + ElfW(Addr) offset = NEW_SECTION_H (nn).sh_addr - + NEW_SECTION_H (nn).sh_offset; + caddr_t reloc = old_base + section.sh_offset, end; + for (end = reloc + section.sh_size; reloc < end; + reloc += section.sh_entsize) + { + ElfW(Addr) addr = ((ElfW(Rel) *) reloc)->r_offset - offset; +#ifdef __alpha__ + /* The Alpha ELF binutils currently have a bug that + sometimes results in relocs that contain all + zeroes. Work around this for now... */ + if (((ElfW(Rel) *) reloc)->r_offset == 0) + continue; +#endif + memcpy (new_base + addr, old_base + addr, sizeof(ElfW(Addr))); + } + } + break; + } + } + +#ifdef UNEXEC_USE_MAP_PRIVATE + if (lseek (new_file, 0, SEEK_SET) == -1) + fatal ("Can't rewind (%s): errno %d\n", new_name, errno); + + if (write (new_file, new_base, new_file_size) != new_file_size) + fatal ("Can't write (%s): errno %d\n", new_name, errno); +#endif + /* Close the files and make the new file executable. */ if (close (old_file)) @@ -1014,6 +1235,4 @@ stat_buf.st_mode |= 0111 & ~n; if (chmod (new_name, stat_buf.st_mode) == -1) fatal ("Can't chmod (%s): errno %d\n", new_name, errno); - - return 0; } diff -r a8296e22da4e -r 576fb035e263 src/window.c --- a/src/window.c Mon Aug 13 11:35:05 2007 +0200 +++ b/src/window.c Mon Aug 13 11:36:19 2007 +0200 @@ -64,8 +64,8 @@ static int window_char_height_to_pixel_height (struct window *w, int char_height, int include_gutters_p); -static void change_window_height (struct window *w, int delta, int widthflag, - int inpixels); +static void change_window_height (Lisp_Object window, int delta, + Lisp_Object horizontalp, int inpixels); /* Thickness of shadow border around 3d modelines. */ Lisp_Object Vmodeline_shadow_thickness; @@ -1112,19 +1112,20 @@ DEFUN ("windowp", Fwindowp, 1, 1, 0, /* -Return t if OBJ is a window. +Return t if OBJECT is a window. */ - (obj)) -{ - return WINDOWP (obj) ? Qt : Qnil; + (object)) +{ + return WINDOWP (object) ? Qt : Qnil; } DEFUN ("window-live-p", Fwindow_live_p, 1, 1, 0, /* -Return t if OBJ is a window which is currently visible. +Return t if OBJECT is a window which is currently visible. */ - (obj)) -{ - return WINDOWP (obj) && WINDOW_LIVE_P (XWINDOW (obj)) ? Qt : Qnil; + (object)) +{ + return WINDOWP (object) && WINDOW_LIVE_P (XWINDOW (object)) + ? Qt : Qnil; } DEFUN ("selected-window", Fselected_window, 0, 1, 0, /* @@ -1597,8 +1598,10 @@ DEFUN ("window-pixel-edges", Fwindow_pixel_edges, 0, 1, 0, /* Return a list of the pixel edge coordinates of WINDOW. -\(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at top left corner of frame. -The frame toolbars, menubars and gutters are considered to be outside of this area. +The returned list is of the form (LEFT TOP RIGHT BOTTOM), +all relative to 0, 0 at the top left corner of WINDOW's frame. +The frame toolbars, menubars and gutters are considered to be outside +of this area, while the scrollbars are considered to be inside. */ (window)) { @@ -1619,8 +1622,9 @@ DEFUN ("window-text-area-pixel-edges", Fwindow_text_area_pixel_edges, 0, 1, 0, /* Return a list of the pixel edge coordinates of the text area of WINDOW. -Returns the list \(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at the -top left corner of the window. +The returned list is of the form (LEFT TOP RIGHT BOTTOM), +all relative to 0, 0 at the top left corner of the total area allocated +to the window, which includes the scrollbars. */ (window)) { @@ -1646,7 +1650,7 @@ is also currently selected, the value returned is the same as (point). It would be more strictly correct to return the `top-level' value of point, outside of any save-excursion forms. -But that is hard to define. +But that value is hard to find. */ (window)) { @@ -1672,12 +1676,13 @@ DEFUN ("window-end", Fwindow_end, 0, 2, 0, /* Return position at which display currently ends in WINDOW. This is updated by redisplay, when it runs to completion. -Simply changing the buffer text or setting `window-start' -does not update this value. -If GUARANTEE is non-nil, then the return value is guaranteed to be -the value of window-end at the end of the next full redisplay assuming -nothing else changes in the meantime. This function is potentially much -slower with this flag set. +Simply changing the buffer text or setting `window-start' does not +update this value. WINDOW defaults to the selected window. + +If optional arg GUARANTEE is non-nil, the return value is guaranteed +to be the same value as this function would return at the end of the +next full redisplay assuming nothing else changes in the meantime. +This function is potentially much slower with this flag set. */ (window, guarantee)) { @@ -1930,7 +1935,7 @@ DEFUN ("delete-window", Fdelete_window, 0, 2, "", /* Remove WINDOW from the display. Default is selected window. -If window is the only one on the frame, the frame is destroyed. +If window is the only one on its frame, the frame is deleted as well. Normally, you cannot delete the last non-minibuffer-only frame (you must use `save-buffers-kill-emacs' or `kill-emacs'). However, if optional second argument FORCE is non-nil, you can delete the last frame. (This @@ -2124,27 +2129,30 @@ set of windows even when the minibuffer is on another frame. If the minibuffer does not count, only windows from WINDOW's frame count. -Optional third arg ALL-FRAMES t means include windows on all frames. -ALL-FRAMES nil or omitted means cycle within the frames as specified -above. ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -If ALL-FRAMES is a frame, restrict search to windows on that frame. -Anything else means restrict to WINDOW's frame. - -Optional fourth arg CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on WINDOW's console. Otherwise, all windows are considered. - -If you use consistent values for MINIBUF, ALL-FRAMES, and CONSOLE, you -can use `next-window' to iterate through the entire cycle of acceptable -windows, eventually ending up back at the window you started with. +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means search windows on all visible frames. +WHICH-FRAMES = 0 means search windows on all visible and iconified frames. +WHICH-FRAMES = t means search windows on all frames including invisible frames. +WHICH-FRAMES = a frame means search only windows on that frame. +Anything else means restrict to the selected frame. + +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all window-system devices. +Any other non-nil value means search all devices. + +If you use consistent values for MINIBUF, WHICH-FRAMES, and WHICH-DEVICES, +you can use `next-window' to iterate through the entire cycle of +acceptable windows, eventually ending up back at the window you started with. `previous-window' traverses the same cycle, in the reverse order. */ - (window, minibuf, all_frames, console)) + (window, minibuf, which_frames, which_devices)) { Lisp_Object tem; Lisp_Object start_window; @@ -2167,25 +2175,25 @@ lambda => count none of them or a specific minibuffer window (the active one) to count. */ - /* all_frames == nil doesn't specify which frames to include. */ - if (NILP (all_frames)) - all_frames = (! EQ (minibuf, Qlambda) + /* which_frames == nil doesn't specify which frames to include. */ + if (NILP (which_frames)) + which_frames = (! EQ (minibuf, Qlambda) ? (FRAME_MINIBUF_WINDOW (XFRAME (WINDOW_FRAME (XWINDOW (window))))) : Qnil); - else if (EQ (all_frames, Qvisible)) + else if (EQ (which_frames, Qvisible)) ; - else if (ZEROP (all_frames)) + else if (ZEROP (which_frames)) ; - else if (FRAMEP (all_frames) && ! EQ (all_frames, Fwindow_frame (window))) - /* If all_frames is a frame and window arg isn't on that frame, just + else if (FRAMEP (which_frames) && ! EQ (which_frames, Fwindow_frame (window))) + /* If which_frames is a frame and window arg isn't on that frame, just return the first window on the frame. */ - return frame_first_window (XFRAME (all_frames)); - else if (! EQ (all_frames, Qt)) - all_frames = Qnil; - /* Now `all_frames' is one of: + return frame_first_window (XFRAME (which_frames)); + else if (! EQ (which_frames, Qt)) + which_frames = Qnil; + /* Now `which_frames' is one of: t => search all frames nil => search just the current frame visible => search just visible frames @@ -2207,10 +2215,10 @@ Which other frames are acceptable? */ tem = WINDOW_FRAME (XWINDOW (window)); - if (! NILP (all_frames)) + if (! NILP (which_frames)) { Lisp_Object tem1 = tem; - tem = next_frame (tem, all_frames, console); + tem = next_frame (tem, which_frames, which_devices); /* In the case where the minibuffer is active, and we include its frame as well as the selected one, @@ -2267,27 +2275,30 @@ the set of windows even when the minibuffer is on another frame. If the minibuffer does not count, only windows from WINDOW's frame count. -Optional third arg ALL-FRAMES t means include windows on all frames. -ALL-FRAMES nil or omitted means cycle within the frames as specified -above. ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -If ALL-FRAMES is a frame, restrict search to windows on that frame. -Anything else means restrict to WINDOW's frame. - -Optional fourth arg CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on WINDOW's console. Otherwise, all windows are considered. - -If you use consistent values for MINIBUF, ALL-FRAMES, and CONSOLE, you -can use `previous-window' to iterate through the entire cycle of acceptable -windows, eventually ending up back at the window you started with. +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means search windows on all visible frames. +WHICH-FRAMES = 0 means search windows on all visible and iconified frames. +WHICH-FRAMES = t means search windows on all frames including invisible frames. +WHICH-FRAMES = a frame means search only windows on that frame. +Anything else means restrict to the selected frame. + +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all window-system devices. +Any other non-nil value means search all devices. + +If you use consistent values for MINIBUF, WHICH-FRAMES, and WHICH-DEVICES, +you can use `previous-window' to iterate through the entire cycle of +acceptable windows, eventually ending up back at the window you started with. `next-window' traverses the same cycle, in the reverse order. */ - (window, minibuf, all_frames, console)) + (window, minibuf, which_frames, devices)) { Lisp_Object tem; Lisp_Object start_window; @@ -2310,26 +2321,26 @@ lambda => count none of them or a specific minibuffer window (the active one) to count. */ - /* all_frames == nil doesn't specify which frames to include. + /* which_frames == nil doesn't specify which frames to include. Decide which frames it includes. */ - if (NILP (all_frames)) - all_frames = (! EQ (minibuf, Qlambda) + if (NILP (which_frames)) + which_frames = (! EQ (minibuf, Qlambda) ? (FRAME_MINIBUF_WINDOW (XFRAME (WINDOW_FRAME (XWINDOW (window))))) : Qnil); - else if (EQ (all_frames, Qvisible)) + else if (EQ (which_frames, Qvisible)) ; - else if (ZEROP (all_frames)) + else if (ZEROP (which_frames)) ; - else if (FRAMEP (all_frames) && ! EQ (all_frames, Fwindow_frame (window))) - /* If all_frames is a frame and window arg isn't on that frame, just + else if (FRAMEP (which_frames) && ! EQ (which_frames, Fwindow_frame (window))) + /* If which_frames is a frame and window arg isn't on that frame, just return the first window on the frame. */ - return frame_first_window (XFRAME (all_frames)); - else if (! EQ (all_frames, Qt)) - all_frames = Qnil; - /* Now `all_frames' is one of: + return frame_first_window (XFRAME (which_frames)); + else if (! EQ (which_frames, Qt)) + which_frames = Qnil; + /* Now `which_frames' is one of: t => search all frames nil => search just the current frame visible => search just visible frames @@ -2351,7 +2362,7 @@ Which frames are acceptable? */ tem = WINDOW_FRAME (XWINDOW (window)); - if (! NILP (all_frames)) + if (! NILP (which_frames)) /* It's actually important that we use previous_frame here, rather than next_frame. All the windows acceptable according to the given parameters should form a ring; @@ -2363,7 +2374,7 @@ met. */ { Lisp_Object tem1 = tem; - tem = previous_frame (tem, all_frames, console); + tem = previous_frame (tem, which_frames, devices); /* In the case where the minibuffer is active, and we include its frame as well as the selected one, next_frame may get stuck in that frame. @@ -2462,43 +2473,46 @@ } DEFUN ("other-window", Fother_window, 1, 3, "p", /* -Select the N'th different window on this frame. +Select the COUNT'th different window on this frame. All windows on current frame are arranged in a cyclic order. -This command selects the window N steps away in that order. -A negative N moves in the opposite order. - -If optional argument FRAME is `visible', search all visible frames. -If FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional third argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. +This command selects the window COUNT steps away in that order. +A negative COUNT moves in the opposite order. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means search windows on all visible frames. +WHICH-FRAMES = 0 means search windows on all visible and iconified frames. +WHICH-FRAMES = t means search windows on all frames including invisible frames. +WHICH-FRAMES = a frame means search only windows on that frame. +Anything else means restrict to the selected frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all window-system devices. +Any other non-nil value means search all devices. */ - (n, frame, console)) + (count, which_frames, which_devices)) { int i; Lisp_Object w; - CHECK_INT (n); + CHECK_INT (count); w = Fselected_window (Qnil); - i = XINT (n); + i = XINT (count); while (i > 0) { - w = Fnext_window (w, Qnil, frame, console); + w = Fnext_window (w, Qnil, which_frames, which_devices); i--; } while (i < 0) { - w = Fprevious_window (w, Qnil, frame, console); + w = Fprevious_window (w, Qnil, which_frames, which_devices); i++; } Fselect_window (w, Qnil); @@ -2531,9 +2545,9 @@ window_loop (enum window_loop type, Lisp_Object obj, int mini, - Lisp_Object frames, + Lisp_Object which_frames, int dedicated_too, - Lisp_Object console) + Lisp_Object which_devices) { /* This function can GC if type == DELETE_BUFFER_WINDOWS or UNSHOW_BUFFER */ Lisp_Object w; @@ -2552,9 +2566,9 @@ /* If we're only looping through windows on a particular frame, FRAME points to that frame. If we're looping through windows on all frames, FRAME is 0. */ - if (FRAMEP (frames)) - frame = XFRAME (frames); - else if (NILP (frames)) + if (FRAMEP (which_frames)) + frame = XFRAME (which_frames); + else if (NILP (which_frames)) frame = selected_frame (); else frame = 0; @@ -2564,10 +2578,10 @@ or Qt otherwise. */ if (frame) frame_arg = Qlambda; - else if (ZEROP (frames)) - frame_arg = frames; - else if (EQ (frames, Qvisible)) - frame_arg = frames; + else if (ZEROP (which_frames)) + frame_arg = which_frames; + else if (EQ (which_frames, Qvisible)) + frame_arg = which_frames; DEVICE_LOOP_NO_BREAK (devcons, concons) { @@ -2582,10 +2596,10 @@ if (NILP (the_frame)) continue; - if (!device_matches_console_spec (device, - NILP (console) ? - FRAME_CONSOLE (XFRAME (the_frame)) : - console)) + if (!device_matches_device_spec (device, + NILP (which_devices) ? + FRAME_CONSOLE (XFRAME (the_frame)) : + which_devices)) continue; /* Pick a window to start with. */ @@ -2855,31 +2869,35 @@ DEFUN ("get-lru-window", Fget_lru_window, 0, 2, 0, /* Return the window least recently selected or used for display. -If optional argument FRAME is `visible', search all visible frames. -If FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional second argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +If optional argument WHICH-FRAMES is `visible', search all visible frames. +If WHICH-FRAMES is 0, search all visible and iconified frames. +If WHICH-FRAMES is t, search all frames. +If WHICH-FRAMES is nil, search only the selected frame. +If WHICH-FRAMES is a frame, search only that frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices. */ - (frame, console)) + (which_frames, which_devices)) { Lisp_Object w; /* First try for a non-dedicated window that is full-width */ - w = window_loop (GET_LRU_WINDOW, Qt, 0, frame, 0, console); + w = window_loop (GET_LRU_WINDOW, Qt, 0, which_frames, 0, which_devices); if (!NILP (w) && !EQ (w, Fselected_window (Qnil))) return w; /* Then try for any non-dedicated window */ - w = window_loop (GET_LRU_WINDOW, Qnil, 0, frame, 0, console); + w = window_loop (GET_LRU_WINDOW, Qnil, 0, which_frames, 0, which_devices); if (!NILP (w) && !EQ (w, Fselected_window (Qnil))) return w; @@ -2889,12 +2907,12 @@ shit is so disgusting and awful that it needs to be rethought from scratch. */ /* then try for a dedicated window that is full-width */ - w = window_loop (GET_LRU_WINDOW, Qt, 0, frame, 1, console); + w = window_loop (GET_LRU_WINDOW, Qt, 0, which_frames, 1, which_devices); if (!NILP (w) && !EQ (w, Fselected_window (Qnil))) return w; /* If none of them, then all windows, dedicated or not. */ - w = window_loop (GET_LRU_WINDOW, Qnil, 0, frame, 1, console); + w = window_loop (GET_LRU_WINDOW, Qnil, 0, which_frames, 1, which_devices); /* At this point we damn well better have found something. */ if (NILP (w)) abort (); @@ -2905,52 +2923,62 @@ DEFUN ("get-largest-window", Fget_largest_window, 0, 2, 0, /* Return the window largest in area. -If optional argument FRAME is `visible', search all visible frames. -If FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional second argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +If optional argument WHICH-FRAMES is `visible', search all visible frames. +If WHICH-FRAMES is 0, search all visible and iconified frames. +If WHICH-FRAMES is t, search all frames. +If WHICH-FRAMES is nil, search only the selected frame. +If WHICH-FRAMES is a frame, search only that frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices. */ - (frame, console)) + (which_frames, which_devices)) { /* Don't search dedicated windows because FSFmacs doesn't. This stuff is all black magic so don't try to apply common sense to it. */ - return window_loop (GET_LARGEST_WINDOW, Qnil, 0, frame, 0, console); + return window_loop (GET_LARGEST_WINDOW, Qnil, 0, + which_frames, 0, which_devices); } DEFUN ("get-buffer-window", Fget_buffer_window, 1, 3, 0, /* Return a window currently displaying BUFFER, or nil if none. -If optional argument FRAME is `visible', search all visible frames. -If optional argument FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional third argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +If optional argument WHICH-FRAMES is `visible', search all visible frames. +If WHICH-FRAMES is 0, search all visible and iconified frames. +If WHICH-FRAMES is t, search all frames. +If WHICH-FRAMES is nil, search only the selected frame. +If WHICH-FRAMES is a frame, search only that frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices. */ - (buffer, frame, console)) + (buffer, which_frames, which_devices)) { buffer = Fget_buffer (buffer); if (BUFFERP (buffer)) /* Search dedicated windows too. (Doesn't matter here anyway.) */ - return window_loop (GET_BUFFER_WINDOW, buffer, 1, frame, 1, console); + return window_loop (GET_BUFFER_WINDOW, buffer, 1, + which_frames, 1, which_devices); else return Qnil; } @@ -3033,53 +3061,81 @@ DEFUN ("delete-windows-on", Fdelete_windows_on, 1, 3, "bDelete windows on (buffer): ", /* Delete all windows showing BUFFER. -Optional second argument FRAME controls which frames are affected. + +Optional second argument WHICH-FRAMES controls which frames are affected. If nil or omitted, delete all windows showing BUFFER in any frame. If t, delete only windows showing BUFFER in the selected frame. If `visible', delete all windows showing BUFFER in any visible frame. If a frame, delete only windows showing BUFFER in that frame. - -Optional third argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. +Warning: WHICH-FRAMES has the same meaning as with `next-window', +except that the meanings of nil and t are reversed. + +The optional third argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is not t. +If nil or omitted, search only the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on a window system. +Any other non-nil value means search all devices. */ - (buffer, frame, console)) + (buffer, which_frames, which_devices)) { /* This function can GC */ - /* FRAME uses t and nil to mean the opposite of what window_loop - expects. */ - if (!FRAMEP (frame)) - frame = NILP (frame) ? Qt : Qnil; - - if (!NILP (buffer)) - { - buffer = Fget_buffer (buffer); - CHECK_BUFFER (buffer); - /* Ignore dedicated windows. */ - window_loop (DELETE_BUFFER_WINDOWS, buffer, 0, frame, 0, console); - } + buffer = Fget_buffer (buffer); + CHECK_BUFFER (buffer); + + /* WHICH-FRAMES values t and nil mean the opposite of what + window_loop expects. */ + if (EQ (which_frames, Qnil)) + which_frames = Qt; + else if (EQ (which_frames, Qt)) + which_frames = Qnil; + + /* Ignore dedicated windows. */ + window_loop (DELETE_BUFFER_WINDOWS, buffer, 0, + which_frames, 0, which_devices); return Qnil; } -DEFUN ("replace-buffer-in-windows", Freplace_buffer_in_windows, 1, 1, +DEFUN ("replace-buffer-in-windows", Freplace_buffer_in_windows, 1, 3, "bReplace buffer in windows: ", /* Replace BUFFER with some other buffer in all windows showing it. + +Optional second argument WHICH-FRAMES controls which frames are affected. +If nil or omitted, all frames are affected. +If t, only the selected frame is affected. +If `visible', all visible frames are affected. +If a frame, only that frame is affected. +Warning: WHICH-FRAMES has the same meaning as with `next-window', +except that the meanings of nil and t are reversed. + +The optional third argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is not t. +If nil or omitted, search only the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on a window system. +Any other non-nil value means search all devices. */ - (buffer)) + (buffer, which_frames, which_devices)) { /* This function can GC */ - if (!NILP (buffer)) - { - buffer = Fget_buffer (buffer); - CHECK_BUFFER (buffer); - /* Ignore dedicated windows. */ - window_loop (UNSHOW_BUFFER, buffer, 0, Qt, 0, Qnil); - } + buffer = Fget_buffer (buffer); + CHECK_BUFFER (buffer); + + /* WHICH-FRAMES values t and nil mean the opposite of what + window_loop expects. */ + if (EQ (which_frames, Qnil)) + which_frames = Qt; + else if (EQ (which_frames, Qt)) + which_frames = Qnil; + + /* Ignore dedicated windows. */ + window_loop (UNSHOW_BUFFER, buffer, 0, which_frames, 0, which_devices); return Qnil; } @@ -3530,16 +3586,16 @@ DEFUN ("split-window", Fsplit_window, 0, 3, "", /* Split WINDOW, putting SIZE lines in the first of the pair. -WINDOW defaults to selected one and SIZE to half its size. +WINDOW defaults to the selected one and SIZE to half its size. If optional third arg HORFLAG is non-nil, split side by side and put SIZE columns in the first of the pair. */ - (window, chsize, horflag)) + (window, size, horflag)) { Lisp_Object new; struct window *o, *p; struct frame *f; - int size; + int csize; int psize; if (NILP (window)) @@ -3550,29 +3606,29 @@ o = XWINDOW (window); f = XFRAME (WINDOW_FRAME (o)); - if (NILP (chsize)) + if (NILP (size)) { if (!NILP (horflag)) /* In the new scheme, we are symmetric with respect to separators so there is no need to do weird things here. */ { psize = WINDOW_WIDTH (o) >> 1; - size = window_pixel_width_to_char_width (o, psize, 0); + csize = window_pixel_width_to_char_width (o, psize, 0); } else { psize = WINDOW_HEIGHT (o) >> 1; - size = window_pixel_height_to_char_height (o, psize, 1); + csize = window_pixel_height_to_char_height (o, psize, 1); } } else { - CHECK_INT (chsize); - size = XINT (chsize); + CHECK_INT (size); + csize = XINT (size); if (!NILP (horflag)) - psize = window_char_width_to_pixel_width (o, size, 0); + psize = window_char_width_to_pixel_width (o, csize, 0); else - psize = window_char_height_to_pixel_height (o, size, 1); + psize = window_char_height_to_pixel_height (o, csize, 1); } if (MINI_WINDOW_P (o)) @@ -3584,11 +3640,11 @@ if (NILP (horflag)) { - if (size < window_min_height) - error ("Window height %d too small (after splitting)", size); - if (size + window_min_height > window_char_height (o, 1)) + if (csize < window_min_height) + error ("Window height %d too small (after splitting)", csize); + if (csize + window_min_height > window_char_height (o, 1)) error ("Window height %d too small (after splitting)", - window_char_height (o, 1) - size); + window_char_height (o, 1) - csize); if (NILP (o->parent) || NILP (XWINDOW (o->parent)->vchild)) { @@ -3601,11 +3657,11 @@ } else { - if (size < window_min_width) - error ("Window width %d too small (after splitting)", size); - if (size + window_min_width > window_char_width (o, 0)) + if (csize < window_min_width) + error ("Window width %d too small (after splitting)", csize); + if (csize + window_min_width > window_char_width (o, 0)) error ("Window width %d too small (after splitting)", - window_char_width (o, 0) - size); + window_char_width (o, 0) - csize); if (NILP (o->parent) || NILP (XWINDOW (o->parent)->hchild)) { @@ -3667,58 +3723,54 @@ DEFUN ("enlarge-window", Fenlarge_window, 1, 3, "_p", /* -Make the selected window N lines bigger. -From program, optional second arg SIDE non-nil means grow sideways N columns, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT lines taller. +From program, optional second arg HORIZONTALP non-nil means grow +sideways COUNT columns, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) -{ - struct window *w = decode_window (window); - CHECK_INT (n); - change_window_height (w, XINT (n), !NILP (side), /* inpixels */ 0); + (count, horizontalp, window)) +{ + CHECK_INT (count); + change_window_height (window, XINT (count), horizontalp, /* inpixels */ 0); return Qnil; } DEFUN ("enlarge-window-pixels", Fenlarge_window_pixels, 1, 3, "_p", /* -Make the selected window N pixels bigger. -From program, optional second arg SIDE non-nil means grow sideways N pixels, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT pixels taller. +From program, optional second arg HORIZONTALP non-nil means grow +sideways COUNT pixels, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) -{ - struct window *w = decode_window (window); - CHECK_INT (n); - change_window_height (w, XINT (n), !NILP (side), /* inpixels */ 1); + (count, horizontalp, window)) +{ + CHECK_INT (count); + change_window_height (window, XINT (count), horizontalp, /* inpixels */ 1); return Qnil; } DEFUN ("shrink-window", Fshrink_window, 1, 3, "_p", /* -Make the selected window N lines smaller. -From program, optional second arg SIDE non-nil means shrink sideways N columns, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT lines shorter. +From program, optional second arg HORIZONTALP non-nil means shrink +sideways COUNT columns, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) -{ - CHECK_INT (n); - change_window_height (decode_window (window), -XINT (n), !NILP (side), - /* inpixels */ 0); + (count, horizontalp, window)) +{ + CHECK_INT (count); + change_window_height (window, -XINT (count), horizontalp, /* inpixels */ 0); return Qnil; } DEFUN ("shrink-window-pixels", Fshrink_window_pixels, 1, 3, "_p", /* -Make the selected window N pixels smaller. -From program, optional second arg SIDE non-nil means shrink sideways N pixels, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT pixels smaller. +From program, optional second arg HORIZONTALP non-nil means shrink +sideways COUNT pixels, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) -{ - CHECK_INT (n); - change_window_height (decode_window (window), -XINT (n), !NILP (side), - /* inpixels */ 1); + (count, horizontalp, window)) +{ + CHECK_INT (count); + change_window_height (window, -XINT (count), horizontalp, /* inpixels */ 1); return Qnil; } @@ -3963,11 +4015,12 @@ keep everything consistent. */ static void -change_window_height (struct window *win, int delta, int widthflag, +change_window_height (Lisp_Object window, int delta, Lisp_Object horizontalp, int inpixels) { + struct window *win = decode_window (window); + int widthflag = !NILP (horizontalp); Lisp_Object parent; - Lisp_Object window; struct window *w; struct frame *f; int *sizep; @@ -4119,10 +4172,11 @@ -/* Scroll contents of window WINDOW up N lines. If N < (top line height / - average line height) then we just adjust the top clip. */ +/* Scroll contents of window WINDOW up COUNT lines. + If COUNT < (top line height / average line height) then we just adjust + the top clip. */ void -window_scroll (Lisp_Object window, Lisp_Object n, int direction, +window_scroll (Lisp_Object window, Lisp_Object count, int direction, Error_behavior errb) { struct window *w = XWINDOW (window); @@ -4166,14 +4220,14 @@ MARK_WINDOWS_CHANGED (w); } - if (!NILP (n)) + if (!NILP (count)) { - if (EQ (n, Qminus)) + if (EQ (count, Qminus)) direction *= -1; else { - n = Fprefix_numeric_value (n); - value = XINT (n) * direction; + count = Fprefix_numeric_value (count); + value = XINT (count) * direction; if (!value) return; /* someone just made a pointless call */ @@ -4182,7 +4236,7 @@ /* If the user didn't specify how far to scroll then we have to figure it out by ourselves. */ - if (NILP (n) || EQ (n, Qminus)) + if (NILP (count) || EQ (count, Qminus)) { /* Going forwards is easy. If that is what we are doing then just set value and the section which handles the user specifying a @@ -4404,32 +4458,32 @@ } DEFUN ("scroll-up", Fscroll_up, 0, 1, "_P", /* -Scroll text of current window upward N lines; or near full screen if no arg. +Scroll text of current window up COUNT lines; or near full screen if no arg. A near full screen is `next-screen-context-lines' less than a full screen. -Negative N means scroll downward. +Negative COUNT means scroll downward. When calling from a program, supply an integer as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is signaled. */ - (n)) -{ - window_scroll (Fselected_window (Qnil), n, 1, ERROR_ME); + (count)) +{ + window_scroll (Fselected_window (Qnil), count, 1, ERROR_ME); return Qnil; } DEFUN ("scroll-down", Fscroll_down, 0, 1, "_P", /* -Scroll text of current window downward N lines; or near full screen if no arg. +Scroll text of current window down COUNT lines; or near full screen if no arg. A near full screen is `next-screen-context-lines' less than a full screen. -Negative N means scroll upward. +Negative COUNT means scroll upward. When calling from a program, supply a number as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is signaled. */ - (n)) -{ - window_scroll (Fselected_window (Qnil), n, -1, ERROR_ME); + (count)) +{ + window_scroll (Fselected_window (Qnil), count, -1, ERROR_ME); return Qnil; } @@ -4479,9 +4533,9 @@ } DEFUN ("scroll-other-window", Fscroll_other_window, 0, 1, "_P", /* -Scroll next window upward N lines; or near full frame if no arg. +Scroll next window upward COUNT lines; or near full frame if no arg. The next window is the one below the current one; or the one at the top -if the current one is at the bottom. Negative N means scroll downward. +if the current one is at the bottom. Negative COUNT means scroll downward. When calling from a program, supply a number as argument or nil. If in the minibuffer, `minibuffer-scroll-window' if non-nil @@ -4489,40 +4543,40 @@ If `other-window-scroll-buffer' is non-nil, scroll the window showing that buffer, popping the buffer up if necessary. */ - (n)) -{ - window_scroll (Fother_window_for_scrolling (), n, 1, ERROR_ME); + (count)) +{ + window_scroll (Fother_window_for_scrolling (), count, 1, ERROR_ME); return Qnil; } DEFUN ("scroll-left", Fscroll_left, 0, 1, "_P", /* -Scroll selected window display N columns left. -Default for N is window width minus 2. +Scroll selected window display COUNT columns left. +Default for COUNT is window width minus 2. */ - (n)) + (count)) { Lisp_Object window = Fselected_window (Qnil); struct window *w = XWINDOW (window); - int count = (NILP (n) ? - window_char_width (w, 0) - 2 : - XINT (Fprefix_numeric_value (n))); - - return Fset_window_hscroll (window, make_int (w->hscroll + count)); + int n = (NILP (count) ? + window_char_width (w, 0) - 2 : + XINT (Fprefix_numeric_value (count))); + + return Fset_window_hscroll (window, make_int (w->hscroll + n)); } DEFUN ("scroll-right", Fscroll_right, 0, 1, "_P", /* -Scroll selected window display N columns right. -Default for N is window width minus 2. +Scroll selected window display COUNT columns right. +Default for COUNT is window width minus 2. */ - (n)) + (count)) { Lisp_Object window = Fselected_window (Qnil); struct window *w = XWINDOW (window); - int count = (NILP (n) ? - window_char_width (w, 0) - 2 : - XINT (Fprefix_numeric_value (n))); - - return Fset_window_hscroll (window, make_int (w->hscroll - count)); + int n = (NILP (count) ? + window_char_width (w, 0) - 2 : + XINT (Fprefix_numeric_value (count))); + + return Fset_window_hscroll (window, make_int (w->hscroll - n)); } DEFUN ("center-to-window-line", Fcenter_to_window_line, 0, 2, "_P", /* @@ -5050,9 +5104,9 @@ DEFUN ("window-configuration-p", Fwindow_configuration_p, 1, 1, 0, /* Return t if OBJECT is a window-configuration object. */ - (obj)) -{ - return WINDOW_CONFIGURATIONP (obj) ? Qt : Qnil; + (object)) +{ + return WINDOW_CONFIGURATIONP (object) ? Qt : Qnil; } static int @@ -5729,8 +5783,9 @@ Return an object representing the current window configuration of FRAME. If FRAME is nil or omitted, use the selected frame. This describes the number of windows, their sizes and current buffers, -and for each displayed buffer, where display starts, and the positions of -point and mark. An exception is made for point in the current buffer: +and for each window on FRAME the displayed buffer, where display +starts, and the positions of point and mark. +An exception is made for point in the current buffer: its value is -not- saved. */ (frame)) @@ -6136,7 +6191,7 @@ set_specifier_caching (Vmodeline_shadow_thickness, offsetof (struct window, modeline_shadow_thickness), modeline_shadow_thickness_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("has-modeline-p", &Vhas_modeline_p /* *Whether the modeline should be displayed. @@ -6152,7 +6207,7 @@ has changed, but not one to indicate that the modeline has been turned off or on. */ some_window_value_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-always-visible-p", &Vvertical_divider_always_visible_p /* @@ -6171,7 +6226,7 @@ offsetof (struct window, vertical_divider_always_visible_p), vertical_divider_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-shadow-thickness", &Vvertical_divider_shadow_thickness /* *How thick to draw 3D shadows around vertical dividers. @@ -6186,7 +6241,7 @@ offsetof (struct window, vertical_divider_shadow_thickness), vertical_divider_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-line-width", &Vvertical_divider_line_width /* *The width of the vertical dividers, not including shadows. @@ -6217,7 +6272,7 @@ offsetof (struct window, vertical_divider_line_width), vertical_divider_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-spacing", &Vvertical_divider_spacing /* *How much space to leave around the vertical dividers. @@ -6246,5 +6301,5 @@ set_specifier_caching (Vvertical_divider_spacing, offsetof (struct window, vertical_divider_spacing), vertical_divider_changed_in_window, - 0, 0); -} + 0, 0, 0); +} diff -r a8296e22da4e -r 576fb035e263 src/window.h --- a/src/window.h Mon Aug 13 11:35:05 2007 +0200 +++ b/src/window.h Mon Aug 13 11:36:19 2007 +0200 @@ -310,7 +310,7 @@ EXFUN (Fget_buffer_window, 3); EXFUN (Fmove_to_window_line, 2); EXFUN (Frecenter, 2); -EXFUN (Freplace_buffer_in_windows, 1); +EXFUN (Freplace_buffer_in_windows, 3); EXFUN (Fselect_window, 2); EXFUN (Fselected_window, 1); EXFUN (Fset_window_buffer, 3); diff -r a8296e22da4e -r 576fb035e263 tests/ChangeLog --- a/tests/ChangeLog Mon Aug 13 11:35:05 2007 +0200 +++ b/tests/ChangeLog Mon Aug 13 11:36:19 2007 +0200 @@ -1,3 +1,39 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-11-09 Yoshiki Hayashi + + * automated/lisp-test.el: More format tests. + +2000-11-10 Yoshiki Hayashi + + * automated/ccl-tests.el (ccl-test-simple-read-and-write): + (ccl-test-read-write-multibyte-character): Use make-char + for non MULE XEmacs. + +2000-10-15 MIYASHITA Hisashi + + * automated/ccl-tests.el: New file. + +2000-10-30 Yoshiki Hayashi + + * automated/lisp-test.el: Add test for format. + +2000-10-13 Yoshiki Hayashi + + * automated/byte-compiler-test.el: Add optimization test for + byte-after-unbind-ops. + +2000-10-13 Yoshiki Hayashi + + * automated/hash-table-test.el: Make new cons cell for + equal and not eq object. + +2000-10-03 Yoshiki Hayashi + + * automated/lisp-test.el: Add replace-match test. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff -r a8296e22da4e -r 576fb035e263 tests/automated/byte-compiler-tests.el --- a/tests/automated/byte-compiler-tests.el Mon Aug 13 11:35:05 2007 +0200 +++ b/tests/automated/byte-compiler-tests.el Mon Aug 13 11:36:19 2007 +0200 @@ -118,3 +118,102 @@ (before-and-after-compile-equal (- 3)) (before-and-after-compile-equal (- simplyamarker 1)) (before-and-after-compile-equal (- simplyamarker)) + +;; byte-after-unbind-ops + +;; byte-constant +;; byte-dup + +;; byte-symbolp +(before-and-after-compile-equal + (let ((x 's)) + (unwind-protect + (symbolp x) + (setq x 1)))) + +;; byte-consp +(before-and-after-compile-equal + (let ((x '(a b))) + (unwind-protect + (consp x) + (setq x 1)))) + +;; byte-stringp +(before-and-after-compile-equal + (let ((x "a")) + (unwind-protect + (stringp x) + (setq x 1)))) + +;; byte-listp +(before-and-after-compile-equal + (let ((x '(a b c))) + (unwind-protect + (listp x) + (setq x 1)))) + +;; byte-numberp +(before-and-after-compile-equal + (let ((x 1)) + (unwind-protect + (numberp x) + (setq x nil)))) + +;; byte-integerp +(before-and-after-compile-equal + (let ((x 1)) + (unwind-protect + (integerp x) + (setq x nil)))) + +;; byte-equal +(before-and-after-compile-equal + (let ((x 'a) + (y 'a)) + (unwind-protect + (eq x y) + (setq x 'c)))) + +;; byte-not +(before-and-after-compile-equal + (let (x) + (unwind-protect + (not x) + (setq x t)))) + +;; byte-cons +(before-and-after-compile-equal + (equal '(1 . 2) + (let ((x 1) + (y 2)) + (unwind-protect + (cons x y) + (setq x t))))) + +;; byte-list1 +(before-and-after-compile-equal + (equal '(1) + (let ((x 1)) + (unwind-protect + (list x) + (setq x t))))) + +;; byte-list2 +(before-and-after-compile-equal + (equal '(1 . 2) + (let ((x 1) + (y 2)) + (unwind-protect + (list x y) + (setq x t))))) + +;; byte-interactive-p + +;; byte-equal +(before-and-after-compile-equal + (let (x y) + (setq x '(1 . 2)) + (setq y '(1 . 2)) + (unwind-protect + (equal x y) + (setq y '(1 . 3))))) diff -r a8296e22da4e -r 576fb035e263 tests/automated/ccl-tests.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/automated/ccl-tests.el Mon Aug 13 11:36:19 2007 +0200 @@ -0,0 +1,609 @@ +;;; ccl-tests.el --- Testsuites on CCL ; -*- coding: iso-2022-7bit -*- + +;; Copyright (C) 2000 MIYASHITA Hisashi + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation,59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Section 0. Useful functions to construct test suites. + +(defvar ccl-test-last-register-state nil) + +(defun ccl-test-register-ccl-program (sym prog) + (let ((compiled (ccl-compile prog))) + (register-ccl-program sym compiled) + compiled)) + +(defun ccl-test (prog &optional regs return-reg-idx) + (ccl-test-register-ccl-program + 'ccl-test prog) + (cond ((< (length regs) 8) + (setq ccl-test-last-register-state + (apply #'vector (append regs (make-list (- 8 (length regs)) 0))))) + ((> (length regs) 8) + (setq ccl-test-last-register-state + (apply #'vector (subseq regs 0 8)))) + (t + (setq ccl-test-last-register-state + (apply #'vector regs)))) + (ccl-execute + 'ccl-test + ccl-test-last-register-state) + (if (null return-reg-idx) + (setq return-reg-idx 0)) + (aref ccl-test-last-register-state return-reg-idx)) + +(defun ccl-test-on-stream (prog string + &optional not-check-coding-system) + (ccl-test-register-ccl-program + 'ccl-test-decoder prog) + (setq ccl-test-last-register-state (make-vector 9 0)) + (let ((str2 + (ccl-execute-on-string + 'ccl-test-decoder + ccl-test-last-register-state + string))) + (if (not not-check-coding-system) + (Assert (string= + str2 + (decode-coding-string + string 'ccl-test-coding-system)))) + str2)) + +(defvar ccl-test-symbol-idx 0) +(defun ccl-test-generate-symbol (idx) + (intern (format "ccl-test-map-sym-%d" idx))) + +(defun ccl-test-construct-map-structure (maps &optional idx) + (setq ccl-test-symbol-idx (if idx idx 0)) + (let (map result sym) + (while maps + (setq map (car maps) + maps (cdr maps)) + (cond ((vectorp map) + (setq sym (ccl-test-generate-symbol + ccl-test-symbol-idx) + ccl-test-symbol-idx + (1+ ccl-test-symbol-idx)) + (register-code-conversion-map + sym map) + (set sym map) + (setq result (cons sym result))) + + ((symbolp map) + (setq result (cons sym result))) + + ((consp map) + (setq result + (cons (ccl-test-construct-map-structure + map ccl-test-symbol-idx) + result))) + (t + (error "Unknown data:%S" map)))) + (nreverse result))) + +(defun ccl-test-map-multiple (val maps) + (ccl-test + `(0 ((map-multiple + r1 r0 + ,(ccl-test-construct-map-structure maps)))) + (list val)) + (cons (aref ccl-test-last-register-state 0) + (aref ccl-test-last-register-state 1))) + +(defun ccl-test-iterate-multiple-map (val maps) + (ccl-test + `(0 ((iterate-multiple-map + r1 r0 + ,@(ccl-test-construct-map-structure maps)))) + (list val)) + (cons (aref ccl-test-last-register-state 0) + (aref ccl-test-last-register-state 1))) + +(defun ccl-test-setup () + (define-ccl-program + ccl-test-decoder + '(1 (read r0) + (loop + (write-read-repeat r0)))) + (define-ccl-program + ccl-test-encoder + '(1 (read r0) + (loop + (write-read-repeat r0)))) + (make-coding-system + 'ccl-test-coding-system + 'ccl + "CCL TEST temprary coding-system." + '(mnemonic "CCL-TEST" + eol-type lf + decode ccl-test-decoder + encode ccl-test-encoder))) + +;;; Section 1. arithmetic operations. + +(defun ccl-test-normal-expr () + ;; normal-expr + (let ((r0 0) (r1 10) (r2 20) (r3 21) (r4 7)) + (Assert (= (ccl-test '(0 ((r0 = ((((r1 * r2) + r3) % r4) << 2)))) + (list r0 r1 r2 r3 r4)) + (ash (% (+ (* r1 r2) r3) r4) 2)))) + + (Assert (\= (ccl-test '(0 ((r2 = (r1 < 10)) + (r0 = (r2 > 10)))) + '(0 5)) + 0)) + + (let ((r0 0) (r1 #x10FF) (r2 #xCC) (r3 #xE0)) + (Assert (= (ccl-test '(0 ((r0 = (((r1 & #xFF) ^ r2) | r3)))) + (list r0 r1 r2 r3)) + (logior (logxor (logand r1 #xFF) r2) r3)))) + + ;; checking range of SJIS + ;; 81(40-7E, 80-FC), 82, 9F, E0, E1, EF + + (let ((hs '(#x81 #x82 #x9F #xE0 #xE1 #xEF)) + func high low) + (setq func + (lambda (high low) + (let (ch c1 c2) + (setq ch (split-char (decode-shift-jis-char + (cons high low)))) + (setq c1 (nth 1 ch) + c2 (nth 2 ch)) + (ccl-test '(0 ((r0 = (r1 de-sjis r2)))) + (list 0 high low)) + (Assert (and (= c1 (aref ccl-test-last-register-state 0)) + (= c2 (aref ccl-test-last-register-state 7)))) + (ccl-test '(0 ((r0 = (r1 en-sjis r2)))) + (list 0 c1 c2)) + (Assert (and (= high (aref ccl-test-last-register-state 0)) + (= low (aref ccl-test-last-register-state 7))))))) + (while (setq high (car hs)) + (setq hs (cdr hs)) + (setq low #x40) + (while (<= low #x7E) + (funcall func high low) + (setq low (1+ low))) + (setq low #x80) + (while (<= low #xFC) + (funcall func high low) + (setq low (1+ low))))) + + ;; self-expr + (Assert (= (ccl-test '(0 ((r0 += 20) + (r0 *= 40) + (r0 -= 15))) + '(100)) + (- (* (+ 100 20) 40) 15))) + + ;; ref. array + (Assert (= (ccl-test '(0 ((r0 = r0 [100 101 102 103 104]))) + '(3)) + 103))) + +;;; Section 2. Simple read and write +(defun ccl-test-simple-read-and-write () + ;; constant + (let* ((str "1234567890abcdefghij") + (dum (make-string 1 ?X))) + (Assert + (string= (ccl-test-on-stream + `(,(length str) + ((loop (read r0) (write ,str)))) dum) + str))) + ;; register + (let* ((str "1234567890abcdefghij")) + (Assert + (string= (ccl-test-on-stream `(1 ((read r0) + (loop + (write r0) + (read r0) + (repeat)))) + str) + str)) + (Assert + (string= (ccl-test-on-stream `(1 ((read r0) + (loop + (write-read-repeat r0)))) + str) + str))) + + ;; expression + (let ((str "1234567890abcdefghij") + str2 i len) + (setq str2 "" + len (length str) + i 0) + (while (< i len) + (setq str2 (concat str2 (char-to-string + (+ (char-to-int (aref str i)) 3)))) + (setq i (1+ i))) + (Assert + (string= (ccl-test-on-stream `(1 ((read r0) + (loop + (write (r0 + 3)) + (read r0) + (repeat)))) + str) + str2)) + (Assert + (string= (ccl-test-on-stream `(1 ((read r0) + (loop + (r0 += 3) + (write-read-repeat r0)))) + str) + str2))) + + + ;; write via array + (let* ((str (mapconcat (lambda (x) (char-to-string (int-to-char x))) + '(0 1 2 3 4 5 6) ""))) + (Assert + (string= (ccl-test-on-stream + `(1 ((read r0) + (loop + (write r0 + ,(vector (make-char 'japanese-jisx0208 36 34) + (make-char 'japanese-jisx0208 36 36) + (make-char 'japanese-jisx0208 36 38) + (make-char 'japanese-jisx0208 36 40) + (make-char 'japanese-jisx0208 36 42) + (make-char 'japanese-jisx0208 36 43) + (make-char 'japanese-jisx0208 36 45) + (make-char 'japanese-jisx0208 36 47) + (make-char 'japanese-jisx0208 36 49) + (make-char 'japanese-jisx0208 36 51))) + (read r0) + (repeat)))) + str t) + (mapconcat #'char-to-string + (list (make-char 'japanese-jisx0208 36 34) + (make-char 'japanese-jisx0208 36 36) + (make-char 'japanese-jisx0208 36 38) + (make-char 'japanese-jisx0208 36 40) + (make-char 'japanese-jisx0208 36 42) + (make-char 'japanese-jisx0208 36 43) + (make-char 'japanese-jisx0208 36 45)) + ""))))) + +;;; Section 3. read-multibyte-character, and write-multibyte-character +(defun ccl-test-read-write-multibyte-character () + ;; simple test. + (let* ((str (concat "LMDXXX..." + (mapconcat #'char-to-string + (list (make-char 'japanese-jisx0208 36 36) + (make-char 'japanese-jisx0208 36 36) + (make-char 'japanese-jisx0208 50 67) + (make-char 'japanese-jisx0208 56 58) + (make-char 'japanese-jisx0208 72 104) + (make-char 'japanese-jisx0208 36 108) + (make-char 'japanese-jisx0208 36 70) + (make-char 'japanese-jisx0208 36 45) + (make-char 'japanese-jisx0208 36 63) + (make-char 'japanese-jisx0208 33 35)) + "") + "..."))) + (Assert + (string= + (ccl-test-on-stream + `(1 ((loop + (read-multibyte-character r0 r1) + (write-multibyte-character r0 r1) + (repeat)))) + str t) + str))) + ;; + ) + +;;; Section 4. CCL call +(defun ccl-test-ccl-call () + ;; set up + (define-ccl-program + ccl-test-sub1 + '(0 + ((r5 = ?z)))) + (define-ccl-program + ccl-test-sub2 + '(0 + ((call ccl-test-sub1) + (r0 = (r5 * 20))))) + (define-ccl-program + ccl-test-sub3 + '(1 + ((call ccl-test-sub2) + (write r5) + (write (r0 / 20))))) + (Assert (string= + (ccl-test-on-stream + '(1 ((loop (read r0) (call ccl-test-sub3)))) + "A") + "zz"))) + +;;; Section 5. Map-instructions +(defun ccl-test-map-instructions () + ;; set up + (define-ccl-program + ccl-test-arith-1 + '(0 + ((r0 += 1000000)))) + + (define-ccl-program + ccl-test-lambda + '(0 + ((r0 = -3)))) + + (define-ccl-program + ccl-test-t + '(0 + ((r0 = -2)))) + + (define-ccl-program + ccl-test-nil + '(0 + ((r0 = -1)))) + + ;; 1-level normal 1 mapping + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-map-multiple + val + '([100 1 2 3 4 5]))) + '(0 99 100 101 102 103 104 105 106 107)) + '((0 . -1) (99 . -1) + (1 . 0) (2 . 0) (3 . 0) (4 . 0) (5 . 0) + (105 . -1) (106 . -1) (107 . -1)))) + + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-iterate-multiple-map + val + '([100 1 2 3 4 5]))) + '(0 99 100 101 102 103 104 105 106 107)) + '((0 . -1) (99 . -1) + (1 . 0) (2 . 0) (3 . 0) (4 . 0) (5 . 0) + (105 . -1) (106 . -1) (107 . -1)))) + + ;; 1-level normal 2 mappings + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-map-multiple + val + '([100 1 2 nil 4 5] + [101 12 13 14 15 16 17]))) + '(0 99 100 101 102 103 104 105 106 107)) + '((0 . -1) (99 . -1) (1 . 0) (2 . 0) + (13 . 1) (4 . 0) (5 . 0) (16 . 1) (17 . 1) + (107 . -1)))) + + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-iterate-multiple-map + val + '([100 1 2 3 4 5] + [101 12 13 14 15 16 17]))) + '(0 99 100 101 102 103 104 105 106 107)) + '((0 . -1) (99 . -1) (1 . 0) (2 . 0) (3 . 0) + (4 . 0) (5 . 0) (16 . 1) (17 . 1) (107 . -1)))) + + + ;; 1-level normal 7 mappings + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-map-multiple + val + '([100 1 2 nil 4 5] + [101 12 13 14 15 16 17] + [1000 101 102 103 nil 105 106 nil 108] + [1005 1006 1007 1008 1009 1010 1011 1012] + [10005 10006 10007 10008 10009 10010 10011 10012] + [20000 20000 20001 20002 nil 20004 20005 20006] + [20003 30000 30010 30020 30030 30040 30050 30060] + ))) + '(0 99 100 101 102 103 104 105 106 107 + 998 999 1000 1001 1002 1003 1004 1005 1006 1007 + 9999 10000 10001 10002 10003 10004 + 19999 20000 20001 20002 20003 20004 + 20005 20006)) + '((0 . -1) (99 . -1) (1 . 0) (2 . 0) (13 . 1) (4 . 0) + (5 . 0) (16 . 1) (17 . 1) (107 . -1) (998 . -1) + (999 . -1) (101 . 2) (102 . 2) (103 . 2) (1003 . -1) + (105 . 2) (106 . 2) (1007 . 3) (108 . 2) (9999 . -1) + (10000 . -1) (10001 . -1) (10002 . -1) (10003 . -1) + (10004 . -1) (19999 . -1) (20000 . 5) (20001 . 5) + (20002 . 5) (30000 . 6) (20004 . 5) (20005 . 5) (20006 . 5)))) + + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-iterate-multiple-map + val + '([100 1 2 nil 4 5] + [101 12 13 14 15 16 17] + [1000 101 102 103 nil 105 106 nil 108] + [1005 1006 1007 1008 1009 1010 1011 1012] + [10005 10006 10007 10008 10009 10010 10011 10012] + [20000 20000 20001 20002 nil 20004 20005 20006] + [20003 30000 30010 30020 30030 30040 30050 30060] + ))) + '(0 99 100 101 102 103 104 105 106 107 + 998 999 1000 1001 1002 1003 1004 1005 1006 1007 + 9999 10000 10001 10002 10003 10004 + 19999 20000 20001 20002 20003 20004 + 20005 20006)) + '((0 . -1) (99 . -1) (1 . 0) (2 . 0) (13 . 1) (4 . 0) + (5 . 0) (16 . 1) (17 . 1) (107 . -1) (998 . -1) + (999 . -1) (101 . 2) (102 . 2) (103 . 2) (1003 . -1) + (105 . 2) (106 . 2) (1007 . 3) (108 . 2) (9999 . -1) + (10000 . -1) (10001 . -1) (10002 . -1) (10003 . -1) + (10004 . -1) (19999 . -1) (20000 . 5) (20001 . 5) + (20002 . 5)(30000 . 6)(20004 . 5)(20005 . 5)(20006 . 5)))) + + ;; 1-level 7 mappings including CCL call + + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-map-multiple + val + '([100 1 2 nil 4 5] + [101 12 13 14 15 16 17] + [1000 101 ccl-test-arith-1 103 nil 105 106 ccl-test-nil 108] + [1005 1006 1007 1008 1009 ccl-test-lambda 1011 1012] + [10005 10006 10007 10008 10009 10010 10011 10012] + [20000 20000 20001 20002 nil 20004 20005 20006] + [20003 30000 30010 30020 30030 30040 30050 30060] + ))) + '(0 99 100 101 102 103 104 105 106 107 + 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 + 9999 10000 10001 10002 10003 10004 + 19999 20000 20001 20002 20003 20004 + 20005 20006)) + '((0 . -1) (99 . -1) (1 . 0) (2 . 0) (13 . 1) (4 . 0) + (5 . 0) (16 . 1) (17 . 1) (107 . -1) (998 . -1) + (999 . -1) (101 . 2) (1001001 . 2) (103 . 2) + (1003 . -1) (105 . 2) (106 . 2) (1007 . 3) (108 . 2) + (1009 . 3) (1009 . 3) (9999 . -1) (10000 . -1) + (10001 . -1) (10002 . -1) (10003 . -1) (10004 . -1) + (19999 . -1) (20000 . 5) (20001 . 5) (20002 . 5) + (30000 . 6)(20004 . 5)(20005 . 5)(20006 . 5)))) + + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-iterate-multiple-map + val + '([100 1 2 nil 4 5] + [101 12 13 14 15 16 17] + [1000 101 ccl-test-arith-1 103 nil 105 106 ccl-test-nil 108] + [1005 1006 1007 1008 1009 ccl-test-lambda 1011 1012] + [10005 10006 10007 10008 10009 10010 10011 10012] + [20000 20000 20001 20002 nil 20004 20005 20006] + [20003 30000 30010 30020 30030 30040 30050 30060] + ))) + '(0 99 100 101 102 103 104 105 106 107 + 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 + 9999 10000 10001 10002 10003 10004 + 19999 20000 20001 20002 20003 20004 + 20005 20006)) + '((0 . -1) (99 . -1) (1 . 0) (2 . 0) (13 . 1) (4 . 0) + (5 . 0) (16 . 1) (17 . 1) (107 . -1) (998 . -1) + (999 . -1) (101 . 2) (1001001 . 0) (103 . 2) + (1003 . -1) (105 . 2) (106 . 2) (-1 . 0) (108 . 2) + (1009 . 3) (-3 . 0) (9999 . -1) (10000 . -1) + (10001 . -1) (10002 . -1) (10003 . -1) (10004 . -1) + (19999 . -1) (20000 . 5) (20001 . 5) (20002 . 5) + (30000 . 6) (20004 . 5) (20005 . 5) (20006 . 5)))) + + ;; 3-level mappings + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-map-multiple + val + '([100 1 2 nil 4 5] + [101 12 13 14 15 16 17] + [1000 101 102 103 nil 105 106 nil 108] + (([1005 1006 1007 1008 1009 1010 1011 1012] + [10005 10006 20007 20008 10009 10010 10011 10012]) + [20000 20000 20001 20002 nil 20004 20005 20006] + [1006 2006 2007 2008 2009 2010] + ([20003 30000 30010 30020 30030 30040 30050 30060])) + [t t 0 1000000] + [1008 1108 1109 1110 1111 1112 1113]))) + '(0 99 100 101 102 103 104 105 106 107 + 998 999 1000 1001 1002 1003 1004 1005 1006 1007 + 1008 1009 1010 1011 1012 1013 1014 + 9999 10000 10001 10002 10003 10004 + 10005 10006 10007 10008 10009 10010 + 19999 20000 20001 20002 20003 20004 + 20005 20006)) + '((0 . 11) (99 . 11) (1 . 0) (2 . 0) (13 . 1) + (4 . 0) (5 . 0) (16 . 1) (17 . 1) (107 . 11) + (998 . 11) (999 . 11) (101 . 2) (102 . 2) + (103 . 2) (1003 . 11) (105 . 2) (106 . 2) + (1006 . 11) (108 . 2) (1108 . 12) (1109 . 12) + (1110 . 12) (1111 . 12) (1112 . 12) (1113 . 12) + (1014 . 11) (9999 . 11) (10000 . 11) (10001 . 11) + (10002 . 11) (10003 . 11) (10004 . 11) (10005 . 11) + (30040 . 10) (30050 . 10) (10008 . 11) (10009 . 11) + (10010 . 11) (19999 . 11) (20000 . 11) (20001 . 11) + (20002 . 11) (20003 . 11) (20004 . 11) (20005 . 11) + (20006 . 11)))) + + + ;; 3-level mappings including CCL call + (Assert (equal + (mapcar + (lambda (val) + (ccl-test-map-multiple + val + '([100 1 2 nil 4 5] + [101 12 13 14 15 16 17] + [1000 101 102 103 nil ccl-test-arith-1 106 nil 108] + (([1005 1006 1007 1008 1009 1010 1011 ccl-test-arith-1 + 70 71 72 73] + [10005 10006 20007 20008 10009 10010 10011 10012]) + [70 ccl-test-t ccl-test-lambda ccl-test-nil ccl-test-nil] + [72 lambda] + [20000 20000 20001 20002 nil 20004 20005 20006] + [1006 2006 2007 2008 2009 2010] + ([20003 30000 30010 ccl-test-arith-1 30030 30040 + ccl-test-arith-1 30060] + [1001010 50 51 52 53 54 55])) + [t t 0 1000000] + [t ccl-test-arith-1 0 10] + [1008 1108 1109 1110 1111 1112 1113]))) + '(0 99 100 101 102 103 104 105 106 107 + 998 999 1000 1001 1002 1003 1004 1005 1006 1007 + 1008 1009 1010 1011 1012 1013 1014 1015 1016 + 9999 10000 10001 10002 10003 10004 + 10005 10006 10007 10008 10009 10010 + 19999 20000 20001 20002 20003 20004 + 20005 20006)) + '((1000000 . 15) (99 . 14) (1 . 0) (2 . 0) (13 . 1) + (4 . 0) (5 . 0) (16 . 1) (17 . 1) (107 . 14) (998 . 14) + (999 . 14) (101 . 2) (102 . 2) (103 . 2) (1003 . 14) + (1001004 . 2) (106 . 2) (1006 . 14) (108 . 2) (1108 . 16) + (1109 . 16) (1110 . 16) (51 . 13) (1112 . 16) (71 . 7) + (72 . 8) (1015 . 14) (1016 . 14) (9999 . 14) (10000 . 14) + (10001 . 14) (10002 . 14) (10003 . 14) (10004 . 14) + (10005 . 14) (30040 . 12) (1020008 . 12) (10008 . 14) + (10009 . 14) (10010 . 14) (19999 . 14) (20000 . 14) + (20001 . 14) (20002 . 14) (20003 . 14) (20004 . 14) + (20005 . 14) (20006 . 14)))) + ;; All map-instruction tests ends here. + ) + +(defun ccl-test-suites () + (ccl-test-setup) + (ccl-test-normal-expr) + (ccl-test-simple-read-and-write) + (ccl-test-read-write-multibyte-character) + (ccl-test-ccl-call) + (ccl-test-map-instructions)) + +;;; start tests only when ccl-execute is enabled. +(if (fboundp 'ccl-execute) + (ccl-test-suites)) + +;;; ccl-test.el ends here. diff -r a8296e22da4e -r 576fb035e263 tests/automated/hash-table-tests.el --- a/tests/automated/hash-table-tests.el Mon Aug 13 11:35:05 2007 +0200 +++ b/tests/automated/hash-table-tests.el Mon Aug 13 11:36:19 2007 +0200 @@ -164,13 +164,13 @@ (dotimes (j iterations) (puthash (+ one 0.0) t ht) (puthash (+ two 0.0) t ht) - (puthash (concat "1" "2") t ht) - (puthash (concat "3" "4") t ht)) + (puthash (cons 1 2) t ht) + (puthash (cons 3 4) t ht)) (Assert (eq (hashtable-test-function ht) 'eq)) (Assert (eq (hash-table-test ht) 'eq)) (Assert (= (* iterations 4) (hash-table-count ht))) (Assert (eq nil (gethash 1.0 ht))) - (Assert (eq nil (gethash "12" ht))) + (Assert (eq nil (gethash '(1 . 2) ht))) (check-copy ht) ) @@ -178,13 +178,13 @@ (dotimes (j iterations) (puthash (+ one 0.0) t ht) (puthash (+ two 0.0) t ht) - (puthash (concat "1" "2") t ht) - (puthash (concat "3" "4") t ht)) + (puthash (cons 1 2) t ht) + (puthash (cons 3 4) t ht)) (Assert (eq (hashtable-test-function ht) 'eql)) (Assert (eq (hash-table-test ht) 'eql)) (Assert (= (+ 2 (* 2 iterations)) (hash-table-count ht))) (Assert (eq t (gethash 1.0 ht))) - (Assert (eq nil (gethash "12" ht))) + (Assert (eq nil (gethash '(1 . 2) ht))) (check-copy ht) ) @@ -192,13 +192,13 @@ (dotimes (j iterations) (puthash (+ one 0.0) t ht) (puthash (+ two 0.0) t ht) - (puthash (concat "1" "2") t ht) - (puthash (concat "3" "4") t ht)) + (puthash (cons 1 2) t ht) + (puthash (cons 3 4) t ht)) (Assert (eq (hashtable-test-function ht) 'equal)) (Assert (eq (hash-table-test ht) 'equal)) (Assert (= 4 (hash-table-count ht))) (Assert (eq t (gethash 1.0 ht))) - (Assert (eq t (gethash "12" ht))) + (Assert (eq t (gethash '(1 . 2) ht))) (check-copy ht) ) diff -r a8296e22da4e -r 576fb035e263 tests/automated/lisp-tests.el --- a/tests/automated/lisp-tests.el Mon Aug 13 11:35:05 2007 +0200 +++ b/tests/automated/lisp-tests.el Mon Aug 13 11:36:19 2007 +0200 @@ -832,6 +832,15 @@ (Assert (equal (split-string ",foo,,bar," ",+") '("" "foo" "bar" ""))) (Assert (not (string-match "\\(\\.\\=\\)" "."))) +(Assert (string= "" (let ((str "test string")) + (if (string-match "^.*$" str) + (replace-match "\\U" t nil str))))) +(with-temp-buffer + (erase-buffer) + (insert "test string") + (re-search-backward "^.*$") + (replace-match "\\U" t) + (Assert (and (bobp) (eobp)))) ;;----------------------------------------------------- ;; Test near-text buffer functions. @@ -945,3 +954,72 @@ ;; Time-related tests ;;----------------------------------------------------- (Assert (= (length (current-time-string)) 24)) + +;;----------------------------------------------------- +;; format test +;;----------------------------------------------------- +(Assert (string= (format "%d" 10) "10")) +(Assert (string= (format "%o" 8) "10")) +(Assert (string= (format "%x" 31) "1f")) +(Assert (string= (format "%X" 31) "1F")) +(Assert (string= (format "%e" 100) "1.000000e+02")) +(Assert (string= (format "%E" 100) "1.000000E+02")) +(Assert (string= (format "%f" 100) "100.000000")) +(Assert (string= (format "%g" 100.0) "100")) +(Assert (string= (format "%g" 0.000001) "1e-06")) +(Assert (string= (format "%g" 0.0001) "0.0001")) +(Assert (string= (format "%G" 100.0) "100")) +(Assert (string= (format "%G" 0.000001) "1E-06")) +(Assert (string= (format "%G" 0.0001) "0.0001")) + +(Assert (string= (format "%2$d%1$d" 10 20) "2010")) +(Assert (string= (format "%-d" 10) "10")) +(Assert (string= (format "%-4d" 10) "10 ")) +(Assert (string= (format "%+d" 10) "+10")) +(Assert (string= (format "%+d" -10) "-10")) +(Assert (string= (format "%+4d" 10) " +10")) +(Assert (string= (format "%+4d" -10) " -10")) +(Assert (string= (format "% d" 10) " 10")) +(Assert (string= (format "% d" -10) "-10")) +(Assert (string= (format "% 4d" 10) " 10")) +(Assert (string= (format "% 4d" -10) " -10")) +(Assert (string= (format "%0d" 10) "10")) +(Assert (string= (format "%0d" -10) "-10")) +(Assert (string= (format "%04d" 10) "0010")) +(Assert (string= (format "%04d" -10) "-010")) +(Assert (string= (format "%*d" 4 10) " 10")) +(Assert (string= (format "%*d" 4 -10) " -10")) +(Assert (string= (format "%*d" -4 10) "10 ")) +(Assert (string= (format "%*d" -4 -10) "-10 ")) +(Assert (string= (format "%#d" 10) "10")) +(Assert (string= (format "%#o" 8) "010")) +(Assert (string= (format "%#x" 16) "0x10")) +(Assert (string= (format "%#e" 100) "1.000000e+02")) +(Assert (string= (format "%#E" 100) "1.000000E+02")) +(Assert (string= (format "%#f" 100) "100.000000")) +(Assert (string= (format "%#g" 100.0) "100.000")) +(Assert (string= (format "%#g" 0.000001) "1.00000e-06")) +(Assert (string= (format "%#g" 0.0001) "0.000100000")) +(Assert (string= (format "%#G" 100.0) "100.000")) +(Assert (string= (format "%#G" 0.000001) "1.00000E-06")) +(Assert (string= (format "%#G" 0.0001) "0.000100000")) +(Assert (string= (format "%.1d" 10) "10")) +(Assert (string= (format "%.4d" 10) "0010")) +;; Combination of `-', `+', ` ', `0', `#', `.', `*' +(Assert (string= (format "%-04d" 10) "0010")) +(Assert (string= (format "%-*d" 4 10) "10 ")) +;; #### Correctness of this behavior is questionable. +;; It might be better to signal error. +(Assert (string= (format "%-*d" -4 10) "10 ")) +;; These behavior is not specified. +;; (format "%-+d" 10) +;; (format "%- d" 10) +;; (format "%-01d" 10) +;; (format "%-#4x" 10) +;; (format "%-.1d" 10) + +(Assert (string= (format "%01.1d" 10) "10")) +(Assert (string= (format "%03.1d" 10) "010")) +(Assert (string= (format "%01.3d" 10) "10")) +(Assert (string= (format "%1.3d" 10) "10")) +(Assert (string= (format "%3.1d" 10) " 10")) diff -r a8296e22da4e -r 576fb035e263 version.sh --- a/version.sh Mon Aug 13 11:35:05 2007 +0200 +++ b/version.sh Mon Aug 13 11:36:19 2007 +0200 @@ -2,8 +2,8 @@ emacs_is_beta=t emacs_major_version=21 emacs_minor_version=2 -emacs_beta_version=36 -xemacs_codename="Notus" +emacs_beta_version=37 +xemacs_codename="Pan" infodock_major_version=4 infodock_minor_version=0 infodock_build_version=8